Socket
Socket
Sign inDemoInstall

@aws-cdk/aws-ec2

Package Overview
Dependencies
Maintainers
4
Versions
288
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

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

Comparing version 0.8.2 to 0.9.0

key.snk

71

lib/connections.d.ts

@@ -1,3 +0,3 @@

import { IConnectionPeer, IPortRange } from "./connection";
import { ISecurityGroup } from "./security-group";
import { SecurityGroupRef } from "./security-group";
import { IPortRange, ISecurityGroupRule } from "./security-group-rule";
/**

@@ -23,25 +23,47 @@ * The goal of this module is to make possible to write statements like this:

/**
* An object that has a Connections object as well as a default port range.
* Properties to intialize a new Connections object
*/
export interface IDefaultConnectable extends IConnectable {
readonly defaultPortRange: IPortRange;
export interface ConnectionsProps {
/**
* Class that represents the rule by which others can connect to this connectable
*
* This object is required, but will be derived from securityGroup if that is passed.
*
* @default Derived from securityGroup if set.
*/
securityGroupRule?: ISecurityGroupRule;
/**
* What securityGroup this object is managing connections for
*
* @default No security
*/
securityGroup?: SecurityGroupRef;
/**
* Default port range for initiating connections to and from this object
*
* @default No default port range
*/
defaultPortRange?: IPortRange;
}
/**
* Manage the security group (firewall) for a connectable resource.
* Manage the allowed network connections for constructs with Security Groups.
*
* This object contains method to allow connections between objects
* that can allow connections.
* Security Groups can be thought of as a firewall for network-connected
* devices. This class makes it easy to allow network connections to and
* from security groups, and between security groups individually. When
* establishing connectivity between security groups, it will automatically
* add rules in both security groups
*
* The .allowDefaultPortXxx() methods are only available if the resource
* this object was created for has the concept of a default port range.
*/
export declare class Connections {
private readonly securityGroup;
private readonly defaultPortRange?;
readonly connectionPeer: IConnectionPeer;
constructor(securityGroup: ISecurityGroup, defaultPortRange?: IPortRange | undefined);
/**
* Allow connections to the peer on their default port
* Underlying securityGroup for this Connections object, if present
*
* May be empty if this Connections object is not managing a SecurityGroup,
* but simply representing a Connectable peer.
*/
allowToDefaultPort(other: IDefaultConnectable, description: string): void;
readonly securityGroup?: SecurityGroupRef;
private readonly securityGroupRule;
private readonly defaultPortRange?;
constructor(props: ConnectionsProps);
/**

@@ -62,7 +84,7 @@ * Allow connections to the peer on the given port

*/
allowToAnyIpv4(portRange: IPortRange, description: string): void;
allowToAnyIPv4(portRange: IPortRange, description: string): void;
/**
* Allow from any IPv4 ranges
*/
allowFromAnyIpv4(portRange: IPortRange, description: string): void;
allowFromAnyIPv4(portRange: IPortRange, description: string): void;
/**

@@ -82,11 +104,6 @@ * Allow connections from the peer on our default port

allowDefaultPortFromAnyIpv4(description: string): void;
/**
* Allow connections to the security group on their default port
*/
allowToDefaultPort(other: IConnectable, description: string): void;
}
/**
* This object is used by peers who don't allow reverse connections.
*/
export declare class SecurityGrouplessConnections extends Connections {
readonly connectionPeer: IConnectionPeer;
constructor(connectionPeer: IConnectionPeer);
allowTo(_other: IConnectable, _connection: IPortRange, _description: string): void;
allowFrom(_other: IConnectable, _connection: IPortRange, _description: string): void;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const connection_1 = require("./connection");
const ec2_generated_1 = require("./ec2.generated");
const security_group_rule_1 = require("./security-group-rule");
/**
* Manage the security group (firewall) for a connectable resource.
* Manage the allowed network connections for constructs with Security Groups.
*
* This object contains method to allow connections between objects
* that can allow connections.
* Security Groups can be thought of as a firewall for network-connected
* devices. This class makes it easy to allow network connections to and
* from security groups, and between security groups individually. When
* establishing connectivity between security groups, it will automatically
* add rules in both security groups
*
* The .allowDefaultPortXxx() methods are only available if the resource
* this object was created for has the concept of a default port range.
*/
class Connections {
constructor(securityGroup, defaultPortRange) {
this.securityGroup = securityGroup;
this.defaultPortRange = defaultPortRange;
this.connectionPeer = securityGroup;
constructor(props) {
if (!props.securityGroupRule && !props.securityGroup) {
throw new Error('Connections: require one of securityGroupRule or securityGroup');
}
this.securityGroupRule = props.securityGroupRule || props.securityGroup;
this.securityGroup = props.securityGroup;
this.defaultPortRange = props.defaultPortRange;
}
/**
* Allow connections to the peer on their default port
*/
allowToDefaultPort(other, description) {
this.allowTo(other, other.defaultPortRange, description);
}
/**
* Allow connections to the peer on the given port

@@ -31,5 +28,7 @@ */

if (this.securityGroup) {
this.securityGroup.addEgressRule(other.connections.connectionPeer, portRange, description);
this.securityGroup.addEgressRule(other.connections.securityGroupRule, portRange, description);
}
other.connections.allowFrom(new NullConnectable(this.connectionPeer), portRange, description);
if (other.connections.securityGroup) {
other.connections.securityGroup.addIngressRule(this.securityGroupRule, portRange, description);
}
}

@@ -41,5 +40,7 @@ /**

if (this.securityGroup) {
this.securityGroup.addIngressRule(other.connections.connectionPeer, portRange, description);
this.securityGroup.addIngressRule(other.connections.securityGroupRule, portRange, description);
}
other.connections.allowTo(new NullConnectable(this.connectionPeer), portRange, description);
if (other.connections.securityGroup) {
other.connections.securityGroup.addEgressRule(this.securityGroupRule, portRange, description);
}
}

@@ -51,3 +52,3 @@ /**

if (this.securityGroup) {
this.securityGroup.addIngressRule(this.securityGroup, portRange, description);
this.securityGroup.addIngressRule(this.securityGroupRule, portRange, description);
}

@@ -58,4 +59,4 @@ }

*/
allowToAnyIpv4(portRange, description) {
this.allowTo(new connection_1.AnyIPv4(), portRange, description);
allowToAnyIPv4(portRange, description) {
this.allowTo(new security_group_rule_1.AnyIPv4(), portRange, description);
}

@@ -65,4 +66,4 @@ /**

*/
allowFromAnyIpv4(portRange, description) {
this.allowFrom(new connection_1.AnyIPv4(), portRange, description);
allowFromAnyIPv4(portRange, description) {
this.allowFrom(new security_group_rule_1.AnyIPv4(), portRange, description);
}

@@ -76,3 +77,3 @@ /**

if (!this.defaultPortRange) {
throw new Error('Cannot call allowDefaultPortFrom(): resource has no default port');
throw new Error('Cannot call allowDefaultPortFrom(): this resource has no default port');
}

@@ -86,3 +87,3 @@ this.allowFrom(other, this.defaultPortRange, description);

if (!this.defaultPortRange) {
throw new Error('Cannot call allowDefaultPortInternally(): resource has no default port');
throw new Error('Cannot call allowDefaultPortInternally(): this resource has no default port');
}

@@ -96,55 +97,17 @@ this.allowInternally(this.defaultPortRange, description);

if (!this.defaultPortRange) {
throw new Error('Cannot call allowDefaultPortFromAnyIpv4(): resource has no default port');
throw new Error('Cannot call allowDefaultPortFromAnyIpv4(): this resource has no default port');
}
this.allowFromAnyIpv4(this.defaultPortRange, description);
this.allowFromAnyIPv4(this.defaultPortRange, description);
}
/**
* Allow connections to the security group on their default port
*/
allowToDefaultPort(other, description) {
if (other.connections.defaultPortRange === undefined) {
throw new Error('Cannot call alloToDefaultPort(): other resource has no default port');
}
this.allowTo(other, other.connections.defaultPortRange, description);
}
}
exports.Connections = Connections;
/**
* Connectable that represents a peer but doesn't modify any security groups
*/
class NullConnectable {
constructor(connectionPeer) {
this.connections = new SecurityGrouplessConnections(connectionPeer);
}
}
/**
* This object is used by peers who don't allow reverse connections.
*/
class SecurityGrouplessConnections extends Connections {
constructor(connectionPeer) {
// Because Connections is no longer an interface but a concrete class,
// we must inherit from it and create it with an instance of ISecurityGroup.
super(new NullSecurityGroup());
this.connectionPeer = connectionPeer;
}
allowTo(_other, _connection, _description) {
// Nothing to do
}
allowFrom(_other, _connection, _description) {
// Nothing to do
}
}
exports.SecurityGrouplessConnections = SecurityGrouplessConnections;
/**
* Instance of ISecurityGroup that's only there for show.
*/
class NullSecurityGroup {
constructor() {
this.securityGroupId = new ec2_generated_1.SecurityGroupId();
this.canInlineRule = false;
}
addIngressRule(_peer, _connection, _description) {
// Nothing
}
addEgressRule(_peer, _connection, _description) {
// Nothing
}
toIngressRuleJSON() {
return {};
}
toEgressRuleJSON() {
return {};
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25uZWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUFvRTtBQUNwRSxtREFBa0Q7QUErQmxEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxXQUFXO0lBR3BCLFlBQTZCLGFBQTZCLEVBQW1CLGdCQUE2QjtRQUE3RSxrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFBbUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFhO1FBQ3RHLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNJLGtCQUFrQixDQUFDLEtBQTBCLEVBQUUsV0FBbUI7UUFDckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU8sQ0FBQyxLQUFtQixFQUFFLFNBQXFCLEVBQUUsV0FBbUI7UUFDMUUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUM5RjtRQUNELEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUN2QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQ3hDLFNBQVMsRUFDVCxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUMsS0FBbUIsRUFBRSxTQUFxQixFQUFFLFdBQW1CO1FBQzVFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENB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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb25uZWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLCtEQUFnRjtBQW1EaEY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxXQUFXO0lBYXBCLFlBQVksS0FBdUI7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1NBQ3JGO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxLQUFLLENBQUMsYUFBYyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU8sQ0FBQyxLQUFtQixFQUFFLFNBQXFCLEVBQUUsV0FBbUI7UUFDMUUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ2pHO1FBQ0QsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUNqQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUVsRztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxLQUFtQixFQUFFLFNBQXFCLEVBQUUsV0FBbUI7UUFDNUUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ2xHO1FBQ0QsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUNqQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNqRztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxTQUFxQixFQUFFLFdBQW1CO1FBQzdELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3JGO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLFNBQXFCLEVBQUUsV0FBbUI7UUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLDZCQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0JBQWdCLENBQUMsU0FBcUIsRUFBRSxXQUFtQjtRQUM5RCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksNkJBQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG9CQUFvQixDQUFDLEtBQW1CLEVBQUUsV0FBbUI7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7U0FDNUY7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksMEJBQTBCLENBQUMsV0FBbUI7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7U0FDbEc7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSwyQkFBMkIsQ0FBQyxXQUFtQjtRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEVBQThFLENBQUMsQ0FBQztTQUNuRztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksa0JBQWtCLENBQUMsS0FBbUIsRUFBRSxXQUFtQjtRQUM5RCxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFO1lBQ2xELE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztTQUMxRjtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNKO0FBakhELGtDQWlIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlY3VyaXR5R3JvdXBSZWYgfSBmcm9tIFwiLi9zZWN1cml0eS1ncm91cFwiO1xuaW1wb3J0IHsgQW55SVB2NCwgSVBvcnRSYW5nZSwgSVNlY3VyaXR5R3JvdXBSdWxlIH0gZnJvbSBcIi4vc2VjdXJpdHktZ3JvdXAtcnVsZVwiO1xuXG4vKipcbiAqIFRoZSBnb2FsIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG1ha2UgcG9zc2libGUgdG8gd3JpdGUgc3RhdGVtZW50cyBsaWtlIHRoaXM6XG4gKlxuICogICAgYGBgdHNcbiAqICAgIGRhdGFiYXNlLmNvbm5lY3Rpb25zLmFsbG93RnJvbShmbGVldCk7XG4gKiAgICBmbGVldC5jb25uZWN0aW9ucy5hbGxvd1RvKGRhdGFiYXNlKTtcbiAqICAgIHJkZ3cuY29ubmVjdGlvbnMuYWxsb3dGcm9tQ2lkcklwKCcwLjMuMS41Lzg2Jyk7XG4gKiAgICByZ2R3LmNvbm5lY3Rpb25zLmFsbG93VHJhZmZpY1RvKGZsZWV0LCBuZXcgQWxsUG9ydHMoKSk7XG4gKiAgICBgYGBcbiAqXG4gKiBUaGUgaW5zaWdodCBoZXJlIGlzIHRoYXQgc29tZSBjb25uZWN0aW5nIHBlZXJzIGhhdmUgaW5mb3JtYXRpb24gb24gd2hhdCBwb3J0cyBzaG91bGRcbiAqIGJlIGludm9sdmVkIGluIHRoZSBjb25uZWN0aW9uLCBhbmQgc29tZSBkb24ndC5cbiAqL1xuXG4vKipcbiAqIEFuIG9iamVjdCB0aGF0IGhhcyBhIENvbm5lY3Rpb25zIG9iamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb25uZWN0YWJsZSB7XG4gICAgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gaW50aWFsaXplIGEgbmV3IENvbm5lY3Rpb25zIG9iamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25zUHJvcHMge1xuICAgIC8qKlxuICAgICAqIENsYXNzIHRoYXQgcmVwcmVzZW50cyB0aGUgcnVsZSBieSB3aGljaCBvdGhlcnMgY2FuIGNvbm5lY3QgdG8gdGhpcyBjb25uZWN0YWJsZVxuICAgICAqXG4gICAgICogVGhpcyBvYmplY3QgaXMgcmVxdWlyZWQsIGJ1dCB3aWxsIGJlIGRlcml2ZWQgZnJvbSBzZWN1cml0eUdyb3VwIGlmIHRoYXQgaXMgcGFzc2VkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgRGVyaXZlZCBmcm9tIHNlY3VyaXR5R3JvdXAgaWYgc2V0LlxuICAgICAqL1xuICAgIHNlY3VyaXR5R3JvdXBSdWxlPzogSVNlY3VyaXR5R3JvdXBSdWxlO1xuXG4gICAgLyoqXG4gICAgICogV2hhdCBzZWN1cml0eUdyb3VwIHRoaXMgb2JqZWN0IGlzIG1hbmFnaW5nIGNvbm5lY3Rpb25zIGZvclxuICAgICAqXG4gICAgICogQGRlZmF1bHQgTm8gc2VjdXJpdHlcbiAgICAgKi9cbiAgICBzZWN1cml0eUdyb3VwPzogU2VjdXJpdHlHcm91cFJlZjtcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcG9ydCByYW5nZSBmb3IgaW5pdGlhdGluZyBjb25uZWN0aW9ucyB0byBhbmQgZnJvbSB0aGlzIG9iamVjdFxuICAgICAqXG4gICAgICogQGRlZmF1bHQgTm8gZGVmYXVsdCBwb3J0IHJhbmdlXG4gICAgICovXG4gICAgZGVmYXVsdFBvcnRSYW5nZT86IElQb3J0UmFuZ2U7XG59XG5cbi8qKlxuICogTWFuYWdlIHRoZSBhbGxvd2VkIG5ldHdvcmsgY29ubmVjdGlvbnMgZm9yIGNvbnN0cnVjdHMgd2l0aCBTZWN1cml0eSBHcm91cHMuXG4gKlxuICogU2VjdXJpdHkgR3JvdXBzIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEgZmlyZXdhbGwgZm9yIG5ldHdvcmstY29ubmVjdGVkXG4gKiBkZXZpY2VzLiBUaGlzIGNsYXNzIG1ha2VzIGl0IGVhc3kgdG8gYWxsb3cgbmV0d29yayBjb25uZWN0aW9ucyB0byBhbmRcbiAqIGZyb20gc2VjdXJpdHkgZ3JvdXBzLCBhbmQgYmV0d2VlbiBzZWN1cml0eSBncm91cHMgaW5kaXZpZHVhbGx5LiBXaGVuXG4gKiBlc3RhYmxpc2hpbmcgY29ubmVjdGl2aXR5IGJldHdlZW4gc2VjdXJpdHkgZ3JvdXBzLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHlcbiAqIGFkZCBydWxlcyBpbiBib3RoIHNlY3VyaXR5IGdyb3Vwc1xuICpcbiAqL1xuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25zIHtcbiAgICAvKipcbiAgICAgKiBVbmRlcmx5aW5nIHNlY3VyaXR5R3JvdXAgZm9yIHRoaXMgQ29ubmVjdGlvbnMgb2JqZWN0LCBpZiBwcmVzZW50XG4gICAgICpcbiAgICAgKiBNYXkgYmUgZW1wdHkgaWYgdGhpcyBDb25uZWN0aW9ucyBvYmplY3QgaXMgbm90IG1hbmFnaW5nIGEgU2VjdXJpdHlHcm91cCxcbiAgICAgKiBidXQgc2ltcGx5IHJlcHJlc2VudGluZyBhIENvbm5lY3RhYmxlIHBlZXIuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBTZWN1cml0eUdyb3VwUmVmO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZWN1cml0eUdyb3VwUnVsZTogSVNlY3VyaXR5R3JvdXBSdWxlO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UG9ydFJhbmdlPzogSVBvcnRSYW5nZTtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BzOiBDb25uZWN0aW9uc1Byb3BzKSB7XG4gICAgICAgIGlmICghcHJvcHMuc2VjdXJpdHlHcm91cFJ1bGUgJiYgIXByb3BzLnNlY3VyaXR5R3JvdXApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29ubmVjdGlvbnM6IHJlcXVpcmUgb25lIG9mIHNlY3VyaXR5R3JvdXBSdWxlIG9yIHNlY3VyaXR5R3JvdXAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VjdXJpdHlHcm91cFJ1bGUgPSBwcm9wcy5zZWN1cml0eUdyb3VwUnVsZSB8fCBwcm9wcy5zZWN1cml0eUdyb3VwITtcbiAgICAgICAgdGhpcy5zZWN1cml0eUdyb3VwID0gcHJvcHMuc2VjdXJpdHlHcm91cDtcbiAgICAgICAgdGhpcy5kZWZhdWx0UG9ydFJhbmdlID0gcHJvcHMuZGVmYXVsdFBvcnRSYW5nZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGxvdyBjb25uZWN0aW9ucyB0byB0aGUgcGVlciBvbiB0aGUgZ2l2ZW4gcG9ydFxuICAgICAqL1xuICAgIHB1YmxpYyBhbGxvd1RvKG90aGVyOiBJQ29ubmVjdGFibGUsIHBvcnRSYW5nZTogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLnNlY3VyaXR5R3JvdXAuYWRkRWdyZXNzUnVsZShvdGhlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3VwUnVsZSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG90aGVyLmNvbm5lY3Rpb25zLnNlY3VyaXR5R3JvdXApIHtcbiAgICAgICAgICAgIG90aGVyLmNvbm5lY3Rpb25zLnNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUodGhpcy5zZWN1cml0eUdyb3VwUnVsZSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsbG93IGNvbm5lY3Rpb25zIGZyb20gdGhlIHBlZXIgb24gdGhlIGdpdmVuIHBvcnRcbiAgICAgKi9cbiAgICBwdWJsaWMgYWxsb3dGcm9tKG90aGVyOiBJQ29ubmVjdGFibGUsIHBvcnRSYW5nZTogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLnNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUob3RoZXIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cFJ1bGUsIHBvcnRSYW5nZSwgZGVzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdGhlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICAgICAgICBvdGhlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3VwLmFkZEVncmVzc1J1bGUodGhpcy5zZWN1cml0eUdyb3VwUnVsZSwgcG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGxvdyBob3N0cyBpbnNpZGUgdGhlIHNlY3VyaXR5IGdyb3VwIHRvIGNvbm5lY3QgdG8gZWFjaCBvdGhlciBvbiB0aGUgZ2l2ZW4gcG9ydFxuICAgICAqL1xuICAgIHB1YmxpYyBhbGxvd0ludGVybmFsbHkocG9ydFJhbmdlOiBJUG9ydFJhbmdlLCBkZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnNlY3VyaXR5R3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZSh0aGlzLnNlY3VyaXR5R3JvdXBSdWxlLCBwb3J0UmFuZ2UsIGRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsbG93IHRvIGFsbCBJUHY0IHJhbmdlc1xuICAgICAqL1xuICAgIHB1YmxpYyBhbGxvd1RvQW55SVB2NChwb3J0UmFuZ2U6IElQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5hbGxvd1RvKG5ldyBBbnlJUHY0KCksIHBvcnRSYW5nZSwgZGVzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsbG93IGZyb20gYW55IElQdjQgcmFuZ2VzXG4gICAgICovXG4gICAgcHVibGljIGFsbG93RnJvbUFueUlQdjQocG9ydFJhbmdlOiBJUG9ydFJhbmdlLCBkZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYWxsb3dGcm9tKG5ldyBBbnlJUHY0KCksIHBvcnRSYW5nZSwgZGVzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsbG93IGNvbm5lY3Rpb25zIGZyb20gdGhlIHBlZXIgb24gb3VyIGRlZmF1bHQgcG9ydFxuICAgICAqXG4gICAgICogRXZlbiBpZiB0aGUgcGVlciBoYXMgYSBkZWZhdWx0IHBvcnQsIHdlIHdpbGwgYWx3YXlzIHVzZSBvdXIgZGVmYXVsdCBwb3J0LlxuICAgICAqL1xuICAgIHB1YmxpYyBhbGxvd0RlZmF1bHRQb3J0RnJvbShvdGhlcjogSUNvbm5lY3RhYmxlLCBkZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0UG9ydFJhbmdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIGFsbG93RGVmYXVsdFBvcnRGcm9tKCk6IHRoaXMgcmVzb3VyY2UgaGFzIG5vIGRlZmF1bHQgcG9ydCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxsb3dGcm9tKG90aGVyLCB0aGlzLmRlZmF1bHRQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGxvdyBob3N0cyBpbnNpZGUgdGhlIHNlY3VyaXR5IGdyb3VwIHRvIGNvbm5lY3QgdG8gZWFjaCBvdGhlclxuICAgICAqL1xuICAgIHB1YmxpYyBhbGxvd0RlZmF1bHRQb3J0SW50ZXJuYWxseShkZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0UG9ydFJhbmdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxsIGFsbG93RGVmYXVsdFBvcnRJbnRlcm5hbGx5KCk6IHRoaXMgcmVzb3VyY2UgaGFzIG5vIGRlZmF1bHQgcG9ydCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxsb3dJbnRlcm5hbGx5KHRoaXMuZGVmYXVsdFBvcnRSYW5nZSwgZGVzY3JpcHRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsbG93IGRlZmF1bHQgY29ubmVjdGlvbnMgZnJvbSBhbGwgSVB2NCByYW5nZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgYWxsb3dEZWZhdWx0UG9ydEZyb21BbnlJcHY0KGRlc2NyaXB0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRQb3J0UmFuZ2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGwgYWxsb3dEZWZhdWx0UG9ydEZyb21BbnlJcHY0KCk6IHRoaXMgcmVzb3VyY2UgaGFzIG5vIGRlZmF1bHQgcG9ydCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWxsb3dGcm9tQW55SVB2NCh0aGlzLmRlZmF1bHRQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGxvdyBjb25uZWN0aW9ucyB0byB0aGUgc2VjdXJpdHkgZ3JvdXAgb24gdGhlaXIgZGVmYXVsdCBwb3J0XG4gICAgICovXG4gICAgcHVibGljIGFsbG93VG9EZWZhdWx0UG9ydChvdGhlcjogSUNvbm5lY3RhYmxlLCBkZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIGlmIChvdGhlci5jb25uZWN0aW9ucy5kZWZhdWx0UG9ydFJhbmdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGwgYWxsb1RvRGVmYXVsdFBvcnQoKTogb3RoZXIgcmVzb3VyY2UgaGFzIG5vIGRlZmF1bHQgcG9ydCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hbGxvd1RvKG90aGVyLCBvdGhlci5jb25uZWN0aW9ucy5kZWZhdWx0UG9ydFJhbmdlLCBkZXNjcmlwdGlvbik7XG4gICAgfVxufSJdfQ==

@@ -1,3 +0,1 @@

export * from './auto-scaling-group';
export * from './connection';
export * from './connections';

@@ -8,4 +6,5 @@ export * from './instance-types';

export * from './security-group';
export * from './security-group-rule';
export * from './vpc';
export * from './vpc-ref';
export * from './ec2.generated';

@@ -6,4 +6,2 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./auto-scaling-group"));
__export(require("./connection"));
__export(require("./connections"));

@@ -14,2 +12,3 @@ __export(require("./instance-types"));

__export(require("./security-group"));
__export(require("./security-group-rule"));
__export(require("./vpc"));

@@ -19,2 +18,2 @@ __export(require("./vpc-ref"));

__export(require("./ec2.generated"));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBDQUFxQztBQUNyQyxrQ0FBNkI7QUFDN0IsbUNBQThCO0FBQzlCLHNDQUFpQztBQUNqQyxxQ0FBZ0M7QUFDaEMscUNBQWdDO0FBQ2hDLHNDQUFpQztBQUNqQywyQkFBc0I7QUFDdEIsK0JBQTBCO0FBRTFCLHFDQUFxQztBQUNyQyxxQ0FBZ0MifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUE4QjtBQUM5QixzQ0FBaUM7QUFDakMscUNBQWdDO0FBQ2hDLHFDQUFnQztBQUNoQyxzQ0FBaUM7QUFDakMsMkNBQXNDO0FBQ3RDLDJCQUFzQjtBQUN0QiwrQkFBMEI7QUFFMUIscUNBQXFDO0FBQ3JDLHFDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29ubmVjdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnN0YW5jZS10eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xvYWQtYmFsYW5jZXInO1xuZXhwb3J0ICogZnJvbSAnLi9tYWNoaW5lLWltYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VjdXJpdHktZ3JvdXAnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWN1cml0eS1ncm91cC1ydWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdnBjJztcbmV4cG9ydCAqIGZyb20gJy4vdnBjLXJlZic7XG5cbi8vIEFXUzo6RUMyIENsb3VkRm9ybWF0aW9uIFJlc291cmNlczpcbmV4cG9ydCAqIGZyb20gJy4vZWMyLmdlbmVyYXRlZCc7XG4iXX0=

@@ -160,2 +160,3 @@ /**

export declare enum InstanceSize {
None = "nano",
Micro = "micro",

@@ -162,0 +163,0 @@ Small = "small",

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

(function (InstanceSize) {
InstanceSize["None"] = "nano";
InstanceSize["Micro"] = "micro";

@@ -215,2 +216,2 @@ InstanceSize["Small"] = "small";

exports.InstanceTypePair = InstanceTypePair;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnN0YW5jZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsSUFBWSxhQW9MWDtBQXBMRCxXQUFZLGFBQWE7SUFDckI7O09BRUc7SUFDSCxpQ0FBZ0IsQ0FBQTtJQUVoQjs7T0FFRztJQUNILDBCQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILGlDQUFnQixDQUFBO0lBRWhCOztPQUVHO0lBQ0gsMEJBQVMsQ0FBQTtJQUVUOztPQUVHO0lBQ0gsaUNBQWdCLENBQUE7SUFFaEI7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCwrQkFBYyxDQUFBO0lBRWQ7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCwrQkFBYyxDQUFBO0lBRWQ7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxnQ0FBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxnQ0FBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxnQ0FBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxnQ0FBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCx1Q0FBc0IsQ0FBQTtJQUV0Qjs7T0FFRztJQUNILDBCQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILDJCQUFVLENBQUE7SUFFVjs7T0FFRztJQUNILDBCQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILGtDQUFpQixDQUFBO0lBRWpCOztPQUVHO0lBQ0gsMEJBQVMsQ0FBQTtJQUVUOztPQUVHO0lBQ0gsd0NBQXVCLENBQUE7SUFFdkI7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxpREFBZ0MsQ0FBQTtJQUVoQzs7T0FFRztJQUNILDRCQUFXLENBQUE7SUFFWDs7T0FFRztJQUNILDZCQUFZLENBQUE7SUFFWjs7T0FFRztJQUNILDBCQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILGlDQUFnQixDQUFBO0lBRWhCOztPQUVHO0lBQ0gsMEJBQVMsQ0FBQTtJQUVUOztPQUVHO0lBQ0gsaUNBQWdCLENBQUE7SUFFaEI7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxpQ0FBZ0IsQ0FBQTtJQUVoQjs7T0FFRztJQUNILDBCQUFTLENBQUE7QUFDYixDQUFDLEVBcExXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBb0x4QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxZQWdCWDtBQWhCRCxXQUFZLFlBQVk7SUFDcEIsK0JBQWUsQ0FBQTtJQUNmLCtCQUFlLENBQUE7SUFDZixpQ0FBaUIsQ0FBQTtJQUNqQiwrQkFBZSxDQUFBO0lBQ2YsaUNBQWlCLENBQUE7SUFDakIsbUNBQW1CLENBQUE7SUFDbkIsbUNBQW1CLENBQUE7SUFDbkIsbUNBQW1CLENBQUE7SUFDbkIsbUNBQW1CLENBQUE7SUFDbkIscUNBQXFCLENBQUE7SUFDckIscUNBQXFCLENBQUE7SUFDckIscUNBQXFCLENBQUE7SUFDckIscUNBQXFCLENBQUE7SUFDckIscUNBQXFCLENBQUE7SUFDckIscUNBQXFCLENBQUE7QUFDekIsQ0FBQyxFQWhCVyxZQUFZLEdBQVosb0JBQVksS0FBWixvQkFBWSxRQWdCdkI7QUFFRDs7Ozs7R0FLRztBQUNILE1BQWEsWUFBWTtJQUNyQixZQUE2QixzQkFBOEI7UUFBOUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUFRO0lBQzNELENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUN2QyxDQUFDO0NBQ0o7QUFWRCxvQ0FVQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFhLGdCQUFpQixTQUFRLFlBQVk7SUFDOUMsWUFBNEIsYUFBNEIsRUFDNUIsWUFBMEI7UUFDbEQsS0FBSyxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFGbEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7SUFFdEQsQ0FBQztDQUNKO0FBTEQsNENBS0MifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnN0YW5jZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsSUFBWSxhQW9MWDtBQXBMRCxXQUFZLGFBQWE7SUFDckI7O09BRUc7SUFDSCxpQ0FBZ0IsQ0FBQTtJQUVoQjs7T0FFRztJQUNILDBCQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILGlDQUFnQixDQUFBO0lBRWhCOztPQUVHO0lBQ0gsMEJBQVMsQ0FBQTtJQUVUOztPQUVHO0lBQ0gsaUNBQWdCLENBQUE7SUFFaEI7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCwrQkFBYyxDQUFBO0lBRWQ7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCwrQkFBYyxDQUFBO0lBRWQ7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxnQ0FBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxnQ0FBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxnQ0FBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxnQ0FBZSxDQUFBO0lBRWY7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCx1Q0FBc0IsQ0FBQTtJQUV0Qjs7T0FFRztJQUNILDBCQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILDJCQUFVLENBQUE7SUFFVjs7T0FFRztJQUNILDBCQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILGtDQUFpQixDQUFBO0lBRWpCOztPQUVHO0lBQ0gsMEJBQVMsQ0FBQTtJQUVUOztPQUVHO0lBQ0gsd0NBQXVCLENBQUE7SUFFdkI7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxpREFBZ0MsQ0FBQTtJQUVoQzs7T0FFRztJQUNILDRCQUFXLENBQUE7SUFFWDs7T0FFRztJQUNILDZCQUFZLENBQUE7SUFFWjs7T0FFRztJQUNILDBCQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILGlDQUFnQixDQUFBO0lBRWhCOztPQUVHO0lBQ0gsMEJBQVMsQ0FBQTtJQUVUOztPQUVHO0lBQ0gsaUNBQWdCLENBQUE7SUFFaEI7O09BRUc7SUFDSCwwQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCxpQ0FBZ0IsQ0FBQTtJQUVoQjs7T0FFRztJQUNILDBCQUFTLENBQUE7QUFDYixDQUFDLEVBcExXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBb0x4QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxZQWlCWDtBQWpCRCxXQUFZLFlBQVk7SUFDcEIsNkJBQWEsQ0FBQTtJQUNiLCtCQUFlLENBQUE7SUFDZiwrQkFBZSxDQUFBO0lBQ2YsaUNBQWlCLENBQUE7SUFDakIsK0JBQWUsQ0FBQTtJQUNmLGlDQUFpQixDQUFBO0lBQ2pCLG1DQUFtQixDQUFBO0lBQ25CLG1DQUFtQixDQUFBO0lBQ25CLG1DQUFtQixDQUFBO0lBQ25CLG1DQUFtQixDQUFBO0lBQ25CLHFDQUFxQixDQUFBO0lBQ3JCLHFDQUFxQixDQUFBO0lBQ3JCLHFDQUFxQixDQUFBO0lBQ3JCLHFDQUFxQixDQUFBO0lBQ3JCLHFDQUFxQixDQUFBO0lBQ3JCLHFDQUFxQixDQUFBO0FBQ3pCLENBQUMsRUFqQlcsWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFpQnZCO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLFlBQVk7SUFDckIsWUFBNkIsc0JBQThCO1FBQTlCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBUTtJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRO1FBQ1gsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDdkMsQ0FBQztDQUNKO0FBVkQsb0NBVUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxZQUFZO0lBQzlDLFlBQTRCLGFBQTRCLEVBQzVCLFlBQTBCO1FBQ2xELEtBQUssQ0FBQyxhQUFhLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDO1FBRmxCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBRXRELENBQUM7Q0FDSjtBQUxELDRDQUtDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXaGF0IGNsYXNzIGFuZCBnZW5lcmF0aW9uIG9mIGluc3RhbmNlIHRvIHVzZVxuICpcbiAqIFdlIGhhdmUgYm90aCBzeW1ib2xpYyBhbmQgY29uY3JldGUgZW51bXMgZm9yIGV2ZXJ5IHR5cGUuXG4gKlxuICogVGhlIGZpcnN0IGFyZSBmb3IgcGVvcGxlIHRoYXQgd2FudCB0byBzcGVjaWZ5IGJ5IHB1cnBvc2UsXG4gKiB0aGUgc2Vjb25kIG9uZSBhcmUgZm9yIHBlb3BsZSB3aG8gYWxyZWFkeSBrbm93IGV4YWN0bHkgd2hhdFxuICogJ1I0JyBtZWFucy5cbiAqL1xuZXhwb3J0IGVudW0gSW5zdGFuY2VDbGFzcyB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgaW5zdGFuY2VzLCAzcmQgZ2VuZXJhdGlvblxuICAgICAqL1xuICAgIFN0YW5kYXJkMyA9ICdtMycsXG5cbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBpbnN0YW5jZXMsIDNyZCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgTTMgPSAnbTMnLFxuXG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgaW5zdGFuY2VzLCA0dGggZ2VuZXJhdGlvblxuICAgICAqL1xuICAgIFN0YW5kYXJkNCA9ICdtNCcsXG5cbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBpbnN0YW5jZXMsIDR0aCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgTTQgPSAnbTQnLFxuXG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgaW5zdGFuY2VzLCA1dGggZ2VuZXJhdGlvblxuICAgICAqL1xuICAgIFN0YW5kYXJkNSA9ICdtNScsXG5cbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBpbnN0YW5jZXMsIDV0aCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgTTUgPSAnbTUnLFxuXG4gICAgLyoqXG4gICAgICogTWVtb3J5IG9wdGltaXplZCBpbnN0YW5jZXMsIDNyZCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgTWVtb3J5MyA9ICdyMycsXG5cbiAgICAvKipcbiAgICAgKiBNZW1vcnkgb3B0aW1pemVkIGluc3RhbmNlcywgM3JkIGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBSMyA9ICdyMycsXG5cbiAgICAvKipcbiAgICAgKiBNZW1vcnkgb3B0aW1pemVkIGluc3RhbmNlcywgM3JkIGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBNZW1vcnk0ID0gJ3I0JyxcblxuICAgIC8qKlxuICAgICAqIE1lbW9yeSBvcHRpbWl6ZWQgaW5zdGFuY2VzLCAzcmQgZ2VuZXJhdGlvblxuICAgICAqL1xuICAgIFI0ID0gJ3I0JyxcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGUgb3B0aW1pemVkIGluc3RhbmNlcywgM3JkIGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBDb21wdXRlMyA9ICdjMycsXG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlIG9wdGltaXplZCBpbnN0YW5jZXMsIDNyZCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgQzMgPSAnYzMnLFxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSBvcHRpbWl6ZWQgaW5zdGFuY2VzLCA0dGggZ2VuZXJhdGlvblxuICAgICAqL1xuICAgIENvbXB1dGU0ID0gJ2M0JyxcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGUgb3B0aW1pemVkIGluc3RhbmNlcywgNHRoIGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBDNCA9ICdjNCcsXG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlIG9wdGltaXplZCBpbnN0YW5jZXMsIDV0aCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgQ29tcHV0ZTUgPSAnYzUnLFxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSBvcHRpbWl6ZWQgaW5zdGFuY2VzLCA1dGggZ2VuZXJhdGlvblxuICAgICAqL1xuICAgIEM1ID0gJ2M1JyxcblxuICAgIC8qKlxuICAgICAqIFN0b3JhZ2Utb3B0aW1pemVkIGluc3RhbmNlcywgMm5kIGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBTdG9yYWdlMiA9ICdkMicsXG5cbiAgICAvKipcbiAgICAgKiBTdG9yYWdlLW9wdGltaXplZCBpbnN0YW5jZXMsIDJuZCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgRDIgPSAnZDInLFxuXG4gICAgLyoqXG4gICAgICogU3RvcmFnZS9jb21wdXRlIGJhbGFuY2VkIGluc3RhbmNlcywgMXN0IGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBTdG9yYWdlQ29tcHV0ZTEgPSAnaDEnLFxuXG4gICAgLyoqXG4gICAgICogU3RvcmFnZS9jb21wdXRlIGJhbGFuY2VkIGluc3RhbmNlcywgMXN0IGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBIMSA9ICdoMScsXG5cbiAgICAvKipcbiAgICAgKiBJL08tb3B0aW1pemVkIGluc3RhbmNlcywgM3JkIGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBJbzMgPSAnaTMnLFxuXG4gICAgLyoqXG4gICAgICogSS9PLW9wdGltaXplZCBpbnN0YW5jZXMsIDNyZCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgSTMgPSAnaTMnLFxuXG4gICAgLyoqXG4gICAgICogQnVyc3RhYmxlIGluc3RhbmNlcywgMm5kIGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBCdXJzdGFibGUyID0gJ3QyJyxcblxuICAgIC8qKlxuICAgICAqIEJ1cnN0YWJsZSBpbnN0YW5jZXMsIDJuZCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgVDIgPSAndDInLFxuXG4gICAgLyoqXG4gICAgICogTWVtb3J5LWludGVuc2l2ZSBpbnN0YW5jZXMsIDFzdCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgTWVtb3J5SW50ZW5zaXZlMSA9ICd4MScsXG5cbiAgICAvKipcbiAgICAgKiBNZW1vcnktaW50ZW5zaXZlIGluc3RhbmNlcywgMXN0IGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBYMSA9ICd4MScsXG5cbiAgICAvKipcbiAgICAgKiBNZW1vcnktaW50ZW5zaXZlIGluc3RhbmNlcywgZXh0ZW5kZWQsIDFzdCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgTWVtb3J5SW50ZW5zaXZlMUV4dGVuZGVkID0gJ3gxZScsXG5cbiAgICAvKipcbiAgICAgKiBNZW1vcnktaW50ZW5zaXZlIGluc3RhbmNlcywgMXN0IGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBYMWUgPSAneDFlJyxcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlcyB3aXRoIGN1c3RvbWl6YWJsZSBoYXJkd2FyZSBhY2NlbGVyYXRpb24sIDFzdCBnZW5lcmF0aW9uXG4gICAgICovXG4gICAgRnBnYTEgPSAnZjEnLFxuXG4gICAgLyoqXG4gICAgICogSW5zdGFuY2VzIHdpdGggY3VzdG9taXphYmxlIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgMXN0IGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBGMSA9ICdmMScsXG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcy1vcHRpbWl6ZWQgaW5zdGFuY2VzLCAzcmQgZ2VuZXJhdGlvblxuICAgICAqL1xuICAgIEdyYXBoaWNzMyA9ICdnMycsXG5cbiAgICAvKipcbiAgICAgKiBHcmFwaGljcy1vcHRpbWl6ZWQgaW5zdGFuY2VzLCAzcmQgZ2VuZXJhdGlvblxuICAgICAqL1xuICAgIEczID0gJ2czJyxcblxuICAgIC8qKlxuICAgICAqIFBhcmFsbGVsLXByb2Nlc3Npbmcgb3B0aW1pemVkIGluc3RhbmNlcywgMm5kIGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBQYXJhbGxlbDIgPSAncDInLFxuXG4gICAgLyoqXG4gICAgICogUGFyYWxsZWwtcHJvY2Vzc2luZyBvcHRpbWl6ZWQgaW5zdGFuY2VzLCAybmQgZ2VuZXJhdGlvblxuICAgICAqL1xuICAgIFAyID0gJ3AyJyxcblxuICAgIC8qKlxuICAgICAqIFBhcmFsbGVsLXByb2Nlc3Npbmcgb3B0aW1pemVkIGluc3RhbmNlcywgM25kIGdlbmVyYXRpb25cbiAgICAgKi9cbiAgICBQYXJhbGxlbDMgPSAncDMnLFxuXG4gICAgLyoqXG4gICAgICogUGFyYWxsZWwtcHJvY2Vzc2luZyBvcHRpbWl6ZWQgaW5zdGFuY2VzLCAzbmQgZ2VuZXJhdGlvblxuICAgICAqL1xuICAgIFAzID0gJ3AzJyxcbn1cblxuLyoqXG4gKiBXaGF0IHNpemUgb2YgaW5zdGFuY2UgdG8gdXNlXG4gKi9cbmV4cG9ydCBlbnVtIEluc3RhbmNlU2l6ZSB7XG4gICAgTm9uZSA9ICduYW5vJyxcbiAgICBNaWNybyA9ICdtaWNybycsXG4gICAgU21hbGwgPSAnc21hbGwnLFxuICAgIE1lZGl1bSA9ICdtZWRpdW0nLFxuICAgIExhcmdlID0gJ2xhcmdlJyxcbiAgICBYTGFyZ2UgPSAneGxhcmdlJyxcbiAgICBYTGFyZ2UyID0gJzJ4bGFyZ2UnLFxuICAgIFhMYXJnZTQgPSAnNHhsYXJnZScsXG4gICAgWExhcmdlOCA9ICc4eGxhcmdlJyxcbiAgICBYTGFyZ2U5ID0gJzl4bGFyZ2UnLFxuICAgIFhMYXJnZTEwID0gJzEweGxhcmdlJyxcbiAgICBYTGFyZ2UxMiA9ICcxMnhsYXJnZScsXG4gICAgWExhcmdlMTYgPSAnMTZ4bGFyZ2UnLFxuICAgIFhMYXJnZTE4ID0gJzE4eGxhcmdlJyxcbiAgICBYTGFyZ2UyNCA9ICcyNHhsYXJnZScsXG4gICAgWExhcmdlMzIgPSAnMzJ4bGFyZ2UnLFxufVxuXG4vKipcbiAqIEluc3RhbmNlIHR5cGUgZm9yIEVDMiBpbnN0YW5jZXNcbiAqXG4gKiBUaGlzIGNsYXNzIHRha2VzIGEgbGl0ZXJhbCBzdHJpbmcsIGdvb2QgaWYgeW91IGFscmVhZHlcbiAqIGtub3cgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHR5cGUgeW91IHdhbnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnN0YW5jZVR5cGUge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaW5zdGFuY2VUeXBlSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBpbnN0YW5jZSB0eXBlIGFzIGEgZG90dGVkIHN0cmluZ1xuICAgICAqL1xuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZVR5cGVJZGVudGlmaWVyO1xuICAgIH1cbn1cblxuLyoqXG4gKiBJbnN0YW5jZSB0eXBlIGZvciBFQzIgaW5zdGFuY2VzXG4gKlxuICogVGhpcyBjbGFzcyB0YWtlcyBhIGNvbWJpbmF0aW9uIG9mIGEgY2xhc3MgYW5kIHNpemUuXG4gKlxuICogQmUgYXdhcmUgdGhhdCBub3QgYWxsIGNvbWJpbmF0aW9ucyBvZiBjbGFzcyBhbmQgc2l6ZSBhcmUgYXZhaWxhYmxlLCBhbmQgbm90IGFsbFxuICogY2xhc3NlcyBhcmUgYXZhaWxhYmxlIGluIGFsbCByZWdpb25zLlxuICovXG5leHBvcnQgY2xhc3MgSW5zdGFuY2VUeXBlUGFpciBleHRlbmRzIEluc3RhbmNlVHlwZSB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGluc3RhbmNlQ2xhc3M6IEluc3RhbmNlQ2xhc3MsXG4gICAgICAgICAgICAgICAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlU2l6ZTogSW5zdGFuY2VTaXplKSB7XG4gICAgICAgIHN1cGVyKGluc3RhbmNlQ2xhc3MgKyAnLicgKyBpbnN0YW5jZVNpemUpO1xuICAgIH1cbn1cbiJdfQ==
import elasticloadbalancing = require('@aws-cdk/aws-elasticloadbalancing');
import cdk = require('@aws-cdk/cdk');
import { IConnectionPeer, IPortRange } from './connection';
import { Connections, IConnectable, IDefaultConnectable } from './connections';
import { ISecurityGroup } from './security-group';
import { Connections, IConnectable } from './connections';
import { SecurityGroupRef } from './security-group';
import { IPortRange } from './security-group-rule';
import { VpcNetworkRef } from './vpc-ref';

@@ -173,3 +173,2 @@ /**

readonly connections: Connections;
readonly connectionPeer: IConnectionPeer;
/**

@@ -192,3 +191,3 @@ * An object controlling specifically the connections for each listener added to this load balancer

addTarget(target: IClassicLoadBalancerTarget): void;
readonly loadBalancerName: cdk.Token;
readonly loadBalancerName: elasticloadbalancing.LoadBalancerName;
readonly loadBalancerCanonicalHostedZoneName: elasticloadbalancing.LoadBalancerCanonicalHostedZoneName;

@@ -212,12 +211,17 @@ readonly loadBalancerDnsName: elasticloadbalancing.LoadBalancerDnsName;

/**
* Reference to a listener's port just created
* Reference to a listener's port just created.
*
* This class exists to make it convenient to add port ranges to the load
* balancer's security group just for the port ranges that are involved in the
* listener.
* This implements IConnectable with a default port (the port that an ELB
* listener was just created on) for a given security group so that it can be
* conveniently used just like any Connectable. E.g:
*
* const listener = elb.addListener(...);
*
* listener.connections.allowDefaultPortFromAnyIPv4();
* // or
* instance.connections.allowToDefaultPort(listener);
*/
export declare class ClassicListenerPort implements IDefaultConnectable {
readonly defaultPortRange: IPortRange;
export declare class ClassicListenerPort implements IConnectable {
readonly connections: Connections;
constructor(securityGroup: ISecurityGroup, defaultPortRange: IPortRange);
constructor(securityGroup: SecurityGroupRef, defaultPortRange: IPortRange);
}

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

const cdk = require("@aws-cdk/cdk");
const connection_1 = require("./connection");
const connections_1 = require("./connections");
const security_group_1 = require("./security-group");
const security_group_rule_1 = require("./security-group-rule");
var LoadBalancingProtocol;

@@ -32,4 +32,3 @@ (function (LoadBalancingProtocol) {

this.securityGroup = new security_group_1.SecurityGroup(this, 'SecurityGroup', { vpc: props.vpc });
this.connections = new connections_1.Connections(this.securityGroup);
this.connectionPeer = this.securityGroup;
this.connections = new connections_1.Connections({ securityGroup: this.securityGroup });
// Depending on whether the ELB has public or internal IPs, pick the right backend subnets

@@ -64,5 +63,5 @@ const subnets = props.internetFacing ? props.vpc.publicSubnets : props.vpc.privateSubnets;

});
const port = new ClassicListenerPort(this.securityGroup, new connection_1.TcpPort(listener.externalPort));
const port = new ClassicListenerPort(this.securityGroup, new security_group_rule_1.TcpPort(listener.externalPort));
// Allow connections on the public port for all supplied peers (default: everyone)
ifUndefined(listener.allowConnectionsFrom, [new connection_1.AnyIPv4()]).forEach(peer => {
ifUndefined(listener.allowConnectionsFrom, [new security_group_rule_1.AnyIPv4()]).forEach(peer => {
port.connections.allowDefaultPortFrom(peer, `Default rule allow on ${listener.externalPort}`);

@@ -114,3 +113,3 @@ });

allowTargetConnection(instancePort, target) {
this.connections.allowTo(target, new connection_1.TcpPort(instancePort), `Port ${instancePort} LB to fleet`);
this.connections.allowTo(target, new security_group_rule_1.TcpPort(instancePort), `Port ${instancePort} LB to fleet`);
}

@@ -120,12 +119,17 @@ }

/**
* Reference to a listener's port just created
* Reference to a listener's port just created.
*
* This class exists to make it convenient to add port ranges to the load
* balancer's security group just for the port ranges that are involved in the
* listener.
* This implements IConnectable with a default port (the port that an ELB
* listener was just created on) for a given security group so that it can be
* conveniently used just like any Connectable. E.g:
*
* const listener = elb.addListener(...);
*
* listener.connections.allowDefaultPortFromAnyIPv4();
* // or
* instance.connections.allowToDefaultPort(listener);
*/
class ClassicListenerPort {
constructor(securityGroup, defaultPortRange) {
this.defaultPortRange = defaultPortRange;
this.connections = new connections_1.Connections(securityGroup, defaultPortRange);
this.connections = new connections_1.Connections({ securityGroup, defaultPortRange });
}

@@ -174,2 +178,2 @@ }

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1iYWxhbmNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvYWQtYmFsYW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBMkU7QUFDM0Usb0NBQXFDO0FBQ3JDLDZDQUE2RTtBQUM3RSwrQ0FBK0U7QUFDL0UscURBQWlFO0FBNktqRSxJQUFZLHFCQUtYO0FBTEQsV0FBWSxxQkFBcUI7SUFDN0Isb0NBQVcsQ0FBQTtJQUNYLG9DQUFXLENBQUE7SUFDWCxzQ0FBYSxDQUFBO0lBQ2Isd0NBQWUsQ0FBQTtBQUNuQixDQUFDLEVBTFcscUJBQXFCLEdBQXJCLDZCQUFxQixLQUFyQiw2QkFBcUIsUUFLaEM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxHQUFHLENBQUMsU0FBUztJQW9CbEQsWUFBWSxNQUFxQixFQUFFLElBQVksRUFBRSxLQUErQjtRQUM1RSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBYnhCOztXQUVHO1FBQ2Esa0JBQWEsR0FBMEIsRUFBRSxDQUFDO1FBSXpDLGNBQVMsR0FBaUYsRUFBRSxDQUFDO1FBRTdGLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBQzdCLFlBQU8sR0FBaUMsRUFBRSxDQUFDO1FBS3hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSw4QkFBYSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUV6QywwRkFBMEY7UUFDMUYsTUFBTSxPQUFPLEdBQW1CLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMs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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1iYWxhbmNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvYWQtYmFsYW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwRUFBMkU7QUFDM0Usb0NBQXFDO0FBQ3JDLCtDQUEwRDtBQUMxRCxxREFBbUU7QUFDbkUsK0RBQXFFO0FBNktyRSxJQUFZLHFCQUtYO0FBTEQsV0FBWSxxQkFBcUI7SUFDN0Isb0NBQVcsQ0FBQTtJQUNYLG9DQUFXLENBQUE7SUFDWCxzQ0FBYSxDQUFBO0lBQ2Isd0NBQWUsQ0FBQTtBQUNuQixDQUFDLEVBTFcscUJBQXFCLEdBQXJCLDZCQUFxQixLQUFyQiw2QkFBcUIsUUFLaEM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxHQUFHLENBQUMsU0FBUztJQWtCbEQsWUFBWSxNQUFxQixFQUFFLElBQVksRUFBRSxLQUErQjtRQUM1RSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBYnhCOztXQUVHO1FBQ2Esa0JBQWEsR0FBMEIsRUFBRSxDQUFDO1FBSXpDLGNBQVMsR0FBaUYsRUFBRSxDQUFDO1FBRTdGLGtCQUFhLEdBQWEsRUFBRSxDQUFDO1FBQzdCLFlBQU8sR0FBaUMsRUFBRSxDQUFDO1FBS3hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSw4QkFBYSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFMUUsMEZBQTBGO1FBQzFGLE1BQU0sT0FBTyxHQUFtQixLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxj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QUU7S0FDaEYsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZWxhc3RpY2xvYWRiYWxhbmNpbmcgPSByZXF1aXJlKCdAYXdzLWNkay9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmcnKTtcbmltcG9ydCBjZGsgPSByZXF1aXJlKCdAYXdzLWNkay9jZGsnKTtcbmltcG9ydCB7IENvbm5lY3Rpb25zLCBJQ29ubmVjdGFibGUgfSBmcm9tICcuL2Nvbm5lY3Rpb25zJztcbmltcG9ydCB7IFNlY3VyaXR5R3JvdXAsIFNlY3VyaXR5R3JvdXBSZWYgfSBmcm9tICcuL3NlY3VyaXR5LWdyb3VwJztcbmltcG9ydCB7IEFueUlQdjQsIElQb3J0UmFuZ2UsIFRjcFBvcnQgfSBmcm9tICcuL3NlY3VyaXR5LWdyb3VwLXJ1bGUnO1xuaW1wb3J0IHsgVnBjTmV0d29ya1JlZiwgVnBjU3VibmV0UmVmIH0gZnJvbSAnLi92cGMtcmVmJztcblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYSBDbGFzc2ljTG9hZEJhbGFuY2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhc3NpY0xvYWRCYWxhbmNlclByb3BzIHtcbiAgICAvKipcbiAgICAgKiBWUEMgbmV0d29yayBvZiB0aGUgZmxlZXQgaW5zdGFuY2VzXG4gICAgICovXG4gICAgdnBjOiBWcGNOZXR3b3JrUmVmO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIGlzIGFuIGludGVybmV0LWZhY2luZyBMb2FkIEJhbGFuY2VyXG4gICAgICpcbiAgICAgKiBUaGlzIGNvbnRyb2xzIHdoZXRoZXIgdGhlIExCIGhhcyBhIHB1YmxpYyBJUCBhZGRyZXNzIGFzc2lnbmVkLiBJdCBkb2VzXG4gICAgICogbm90IG9wZW4gdXAgdGhlIExvYWQgQmFsYW5jZXIncyBzZWN1cml0eSBncm91cHMgdG8gcHVibGljIGludGVybmV0IGFjY2Vzcy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgaW50ZXJuZXRGYWNpbmc/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hhdCBsaXN0ZW5lcnMgdG8gc2V0IHVwIGZvciB0aGUgbG9hZCBiYWxhbmNlci5cbiAgICAgKlxuICAgICAqIENhbiBhbHNvIGJlIGFkZGVkIGJ5IC5hZGRMaXN0ZW5lcigpXG4gICAgICovXG4gICAgbGlzdGVuZXJzPzogQ2xhc3NpY0xvYWRCYWxhbmNlckxpc3RlbmVyW107XG5cbiAgICAvKipcbiAgICAgKiBXaGF0IHRhcmdldHMgdG8gbG9hZCBiYWxhbmNlIHRvLlxuICAgICAqXG4gICAgICogQ2FuIGFsc28gYmUgYWRkZWQgYnkgLmFkZFRhcmdldCgpXG4gICAgICovXG4gICAgdGFyZ2V0cz86IElDbGFzc2ljTG9hZEJhbGFuY2VyVGFyZ2V0W107XG5cbiAgICAvKipcbiAgICAgKiBIZWFsdGggY2hlY2sgc2V0dGluZ3MgZm9yIHRoZSBsb2FkIGJhbGFuY2luZyB0YXJnZXRzLlxuICAgICAqXG4gICAgICogTm90IHJlcXVpcmVkIGJ1dCByZWNvbW1lbmRlZC5cbiAgICAgKi9cbiAgICBoZWFsdGhDaGVjaz86IEhlYWx0aENoZWNrO1xufVxuXG4vKipcbiAqIERlc2NyaWJlIHRoZSBoZWFsdGggY2hlY2sgdG8gYSBsb2FkIGJhbGFuY2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoQ2hlY2sge1xuICAgIC8qKlxuICAgICAqIFdoYXQgcG9ydCBudW1iZXIgdG8gaGVhbHRoIGNoZWNrIG9uXG4gICAgICovXG4gICAgcG9ydDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogV2hhdCBwcm90b2NvbCB0byB1c2UgZm9yIGhlYWx0aCBjaGVja2luZ1xuICAgICAqXG4gICAgICogVGhlIHByb3RvY29sIGlzIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCBmcm9tIHRoZSBwb3J0IGlmIGl0J3Mgbm90IHN1cHBsaWVkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgQXV0b21hdGljXG4gICAgICovXG4gICAgcHJvdG9jb2w/OiBMb2FkQmFsYW5jaW5nUHJvdG9jb2w7XG5cbiAgICAvKipcbiAgICAgKiBXaGF0IHBhdGggdG8gdXNlIGZvciBIVFRQIG9yIEhUVFBTIGhlYWx0aCBjaGVjayAobXVzdCByZXR1cm4gMjAwKVxuICAgICAqXG4gICAgICogRm9yIFNTTCBhbmQgVENQIGhlYWx0aCBjaGVja3MsIGFjY2VwdGluZyBjb25uZWN0aW9ucyBpcyBlbm91Z2ggdG8gYmUgY29uc2lkZXJlZFxuICAgICAqIGhlYWx0aHkuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBcIi9cIlxuICAgICAqL1xuICAgIHBhdGg/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBZnRlciBob3cgbWFueSBzdWNjZXNzZnVsIGNoZWNrcyBpcyBhbiBpbnN0YW5jZSBjb25zaWRlcmVkIGhlYWx0aHlcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDJcbiAgICAgKi9cbiAgICBoZWFsdGh5VGhyZXNob2xkPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQWZ0ZXIgaG93IG1hbnkgdW5zdWNjZXNzZnVsIGNoZWNrcyBpcyBhbiBpbnN0YW5jZSBjb25zaWRlcmVkIHVuaGVhbHRoeVxuICAgICAqXG4gICAgICogQGRlZmF1bHQgNVxuICAgICAqL1xuICAgIHVuaGVhbHRoeVRocmVzaG9sZD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gaGVhbHRoIGNoZWNrc1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgMzBcbiAgICAgKi9cbiAgICBpbnRlcnZhbD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEhlYWx0aCBjaGVjayB0aW1lb3V0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCA1XG4gICAgICovXG4gICAgdGltZW91dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgdGhhdCBpcyBnb2luZyB0byBiZSBpbXBsZW1lbnRlZCBieSBjb25zdHJ1Y3RzIHRoYXQgeW91IGNhbiBsb2FkIGJhbGFuY2UgdG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2xhc3NpY0xvYWRCYWxhbmNlclRhcmdldCBleHRlbmRzIElDb25uZWN0YWJsZSB7XG4gICAgLyoqXG4gICAgICogQXR0YWNoIGxvYWQtYmFsYW5jZWQgdGFyZ2V0IHRvIGEgY2xhc3NpYyBFTEJcbiAgICAgKi9cbiAgICBhdHRhY2hUb0NsYXNzaWNMQihsb2FkQmFsYW5jZXI6IENsYXNzaWNMb2FkQmFsYW5jZXIpOiB2b2lkO1xufVxuXG4vKipcbiAqIEFkZCBhIGJhY2tlbmQgdG8gdGhlIGxvYWQgYmFsYW5jZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFzc2ljTG9hZEJhbGFuY2VyTGlzdGVuZXIge1xuICAgIC8qKlxuICAgICAqIEV4dGVybmFsIGxpc3RlbmluZyBwb3J0XG4gICAgICovXG4gICAgZXh0ZXJuYWxQb3J0OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBXaGF0IHB1YmxpYyBwcm90b2NvbCB0byB1c2UgZm9yIGxvYWQgYmFsYW5jaW5nXG4gICAgICpcbiAgICAgKiBFaXRoZXIgJ3RjcCcsICdzc2wnLCAnaHR0cCcgb3IgJ2h0dHBzJy5cbiAgICAgKlxuICAgICAqIE1heSBiZSBvbWl0dGVkIGlmIHRoZSBleHRlcm5hbCBwb3J0IGlzIGVpdGhlciA4MCBvciA0NDMuXG4gICAgICovXG4gICAgZXh0ZXJuYWxQcm90b2NvbD86IExvYWRCYWxhbmNpbmdQcm90b2NvbDtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIGxpc3RlbmluZyBwb3J0XG4gICAgICpcbiAgICAgKiBTYW1lIGFzIHRoZSBleHRlcm5hbFBvcnQgaWYgbm90IHNwZWNpZmllZC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGV4dGVybmFsUG9ydFxuICAgICAqL1xuICAgIGludGVybmFsUG9ydD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIFdoYXQgcHVibGljIHByb3RvY29sIHRvIHVzZSBmb3IgbG9hZCBiYWxhbmNpbmdcbiAgICAgKlxuICAgICAqIEVpdGhlciAndGNwJywgJ3NzbCcsICdodHRwJyBvciAnaHR0cHMnLlxuICAgICAqXG4gICAgICogTWF5IGJlIG9taXR0ZWQgaWYgdGhlIGludGVybmFsIHBvcnQgaXMgZWl0aGVyIDgwIG9yIDQ0My5cbiAgICAgKlxuICAgICAqIFRoZSBpbnN0YW5jZSBwcm90b2NvbCBpcyAndGNwJyBpZiB0aGUgZnJvbnQtZW5kIHByb3RvY29sXG4gICAgICogaXMgJ3RjcCcgb3IgJ3NzbCcsIHRoZSBpbnN0YW5jZSBwcm90b2NvbCBpcyAnaHR0cCcgaWYgdGhlXG4gICAgICogZnJvbnQtZW5kIHByb3RvY29sIGlzICdodHRwcycuXG4gICAgICovXG4gICAgaW50ZXJuYWxQcm90b2NvbD86IExvYWRCYWxhbmNpbmdQcm90b2NvbDtcblxuICAgIC8qKlxuICAgICAqIFNTTCBwb2xpY3kgbmFtZXNcbiAgICAgKi9cbiAgICBwb2xpY3lOYW1lcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogSUQgb2YgU1NMIGNlcnRpZmljYXRlXG4gICAgICovXG4gICAgc3NsQ2VydGlmaWNhdGVJZD86IGNkay5Bcm47XG5cbiAgICAvKipcbiAgICAgKiBBbGxvdyBjb25uZWN0aW9ucyB0byB0aGUgbG9hZCBiYWxhbmNlciBmcm9tIHRoZSBnaXZlbiBzZXQgb2YgY29ubmVjdGlvbiBwZWVyc1xuICAgICAqXG4gICAgICogQnkgZGVmYXVsdCwgY29ubmVjdGlvbnMgd2lsbCBiZSBhbGxvd2VkIGZyb20gYW55d2hlcmUuIFNldCB0aGlzIHRvIGFuIGVtcHR5IGxpc3RcbiAgICAgKiB0byBkZW55IGNvbm5lY3Rpb25zLCBvciBzdXBwbHkgYSBjdXN0b20gbGlzdCBvZiBwZWVycyB0byBhbGxvdyBjb25uZWN0aW9ucyBmcm9tXG4gICAgICogKElQIHJhbmdlcyBvciBzZWN1cml0eSBncm91cHMpLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgQW55d2hlcmVcbiAgICAgKi9cbiAgICBhbGxvd0Nvbm5lY3Rpb25zRnJvbT86IElDb25uZWN0YWJsZVtdO1xufVxuXG5leHBvcnQgZW51bSBMb2FkQmFsYW5jaW5nUHJvdG9jb2wge1xuICAgIFRjcCA9ICd0Y3AnLFxuICAgIFNzbCA9ICdzc2wnLFxuICAgIEh0dHAgPSAnaHR0cCcsXG4gICAgSHR0cHMgPSAnaHR0cHMnXG59XG5cbi8qKlxuICogQSBsb2FkIGJhbGFuY2VyIHdpdGggYSBzaW5nbGUgbGlzdGVuZXJcbiAqXG4gKiBSb3V0ZXMgdG8gYSBmbGVldCBvZiBvZiBpbnN0YW5jZXMgaW4gYSBWUEMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGFzc2ljTG9hZEJhbGFuY2VyIGV4dGVuZHMgY2RrLkNvbnN0cnVjdCBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gICAgLyoqXG4gICAgICogQ29udHJvbCBhbGwgY29ubmVjdGlvbnMgZnJvbSBhbmQgdG8gdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250cm9sbGluZyBzcGVjaWZpY2FsbHkgdGhlIGNvbm5lY3Rpb25zIGZvciBlYWNoIGxpc3RlbmVyIGFkZGVkIHRvIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsaXN0ZW5lclBvcnRzOiBDbGFzc2ljTGlzdGVuZXJQb3J0W10gPSBbXTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxiOiBlbGFzdGljbG9hZGJhbGFuY2luZy5jbG91ZGZvcm1hdGlvbi5Mb2FkQmFsYW5jZXJSZXNvdXJjZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA6IFNlY3VyaXR5R3JvdXA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnM6IGVsYXN0aWNsb2FkYmFsYW5jaW5nLmNsb3VkZm9ybWF0aW9uLkxvYWRCYWxhbmNlclJlc291cmNlLkxpc3RlbmVyc1Byb3BlcnR5W10gPSBbXTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5zdGFuY2VQb3J0czogbnVtYmVyW10gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldHM6IElDbGFzc2ljTG9hZEJhbGFuY2VyVGFyZ2V0W10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmVudDogY2RrLkNvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogQ2xhc3NpY0xvYWRCYWxhbmNlclByb3BzKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgdGhpcy5zZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgJ1NlY3VyaXR5R3JvdXAnLCB7IHZwYzogcHJvcHMudnBjIH0pO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cDogdGhpcy5zZWN1cml0eUdyb3VwIH0pO1xuXG4gICAgICAgIC8vIERlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBFTEIgaGFzIHB1YmxpYyBvciBpbnRlcm5hbCBJUHMsIHBpY2sgdGhlIHJpZ2h0IGJhY2tlbmQgc3VibmV0c1xuICAgICAgICBjb25zdCBzdWJuZXRzOiBWcGNTdWJuZXRSZWZbXSA9IHByb3BzLmludGVybmV0RmFjaW5nID8gcHJvcHMudnBjLnB1YmxpY1N1Ym5ldHMgOiBwcm9wcy52cGMucHJpdmF0ZVN1Ym5ldHM7XG5cbiAgICAgICAgdGhpcy5lbGIgPSBuZXcgZWxhc3RpY2xvYWRiYWxhbmNpbmcuY2xvdWRmb3JtYXRpb24uTG9hZEJhbGFuY2VyUmVzb3VyY2UodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgICAgICAgc2VjdXJpdHlHcm91cHM6IFsgdGhpcy5zZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBJZCBdLFxuICAgICAgICAgICAgc3VibmV0czogc3VibmV0cy5tYXAocyA9PiBzLnN1Ym5ldElkKSxcbiAgICAgICAgICAgIGxpc3RlbmVyczogbmV3IGNkay5Ub2tlbigoKSA9PiB0aGlzLmxpc3RlbmVycyksXG4gICAgICAgICAgICBzY2hlbWU6IHByb3BzLmludGVybmV0RmFjaW5nID8gJ2ludGVybmV0LWZhY2luZycgOiAnaW50ZXJuYWwnLFxuICAgICAgICAgICAgaGVhbHRoQ2hlY2s6IHByb3BzLmhlYWx0aENoZWNrICYmIGhlYWx0aENoZWNrVG9KU09OKHByb3BzLmhlYWx0aENoZWNrKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWZVbmRlZmluZWQocHJvcHMubGlzdGVuZXJzLCBbXSkuZm9yRWFjaChiID0+IHRoaXMuYWRkTGlzdGVuZXIoYikpO1xuICAgICAgICBpZlVuZGVmaW5lZChwcm9wcy50YXJnZXRzLCBbXSkuZm9yRWFjaCh0ID0+IHRoaXMuYWRkVGFyZ2V0KHQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBiYWNrZW5kIHRvIHRoZSBsb2FkIGJhbGFuY2VyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBIENsYXNzaWNMaXN0ZW5lclBvcnQgb2JqZWN0IHRoYXQgY29udHJvbHMgY29ubmVjdGlvbnMgdG8gdGhlIGxpc3RlbmVyIHBvcnRcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkTGlzdGVuZXIobGlzdGVuZXI6IENsYXNzaWNMb2FkQmFsYW5jZXJMaXN0ZW5lcik6IENsYXNzaWNMaXN0ZW5lclBvcnQge1xuICAgICAgICBjb25zdCBwcm90b2NvbCA9IGlmVW5kZWZpbmVkTGF6eShsaXN0ZW5lci5leHRlcm5hbFByb3RvY29sLCAoKSA9PiB3ZWxsS25vd25Qcm90b2NvbChsaXN0ZW5lci5leHRlcm5hbFBvcnQpKTtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VQb3J0ID0gbGlzdGVuZXIuaW50ZXJuYWxQb3J0IHx8IGxpc3RlbmVyLmV4dGVybmFsUG9ydDtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VQcm90b2NvbCA9IGlmVW5kZWZpbmVkKGxpc3RlbmVyLmludGVybmFsUHJvdG9jb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZlVuZGVmaW5lZCh0cnlXZWxsS25vd25Qcm90b2NvbChpbnN0YW5jZVBvcnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIdHRwUHJvdG9jb2wocHJvdG9jb2wpID8gTG9hZEJhbGFuY2luZ1Byb3RvY29sLkh0dHAgOiBMb2FkQmFsYW5jaW5nUHJvdG9jb2wuVGNwKSk7XG5cbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh7XG4gICAgICAgICAgICBsb2FkQmFsYW5jZXJQb3J0OiBsaXN0ZW5lci5leHRlcm5hbFBvcnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgICAgaW5zdGFuY2VQb3J0OiBpbnN0YW5jZVBvcnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGluc3RhbmNlUHJvdG9jb2wsXG4gICAgICAgICAgICBzc2xDZXJ0aWZpY2F0ZUlkOiBsaXN0ZW5lci5zc2xDZXJ0aWZpY2F0ZUlkLFxuICAgICAgICAgICAgcG9saWN5TmFtZXM6IGxpc3RlbmVyLnBvbGljeU5hbWVzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBvcnQgPSBuZXcgQ2xhc3NpY0xpc3RlbmVyUG9ydCh0aGlzLnNlY3VyaXR5R3JvdXAsIG5ldyBUY3BQb3J0KGxpc3RlbmVyLmV4dGVybmFsUG9ydCkpO1xuXG4gICAgICAgIC8vIEFsbG93IGNvbm5lY3Rpb25zIG9uIHRoZSBwdWJsaWMgcG9ydCBmb3IgYWxsIHN1cHBsaWVkIHBlZXJzIChkZWZhdWx0OiBldmVyeW9uZSlcbiAgICAgICAgaWZVbmRlZmluZWQobGlzdGVuZXIuYWxsb3dDb25uZWN0aW9uc0Zyb20sIFtuZXcgQW55SVB2NCgpXSkuZm9yRWFjaChwZWVyID0+IHtcbiAgICAgICAgICAgIHBvcnQuY29ubmVjdGlvbnMuYWxsb3dEZWZhdWx0UG9ydEZyb20ocGVlciwgYERlZmF1bHQgcnVsZSBhbGxvdyBvbiAke2xpc3RlbmVyLmV4dGVybmFsUG9ydH1gKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5uZXdJbnN0YW5jZVBvcnQoaW5zdGFuY2VQb3J0KTtcblxuICAgICAgICAvLyBLZWVwIHRyYWNrIHVzaW5nIGFycmF5IHNvIHVzZXIgY2FuIGdldCB0byB0aGVtIGV2ZW4gaWYgdGhleSB3ZXJlIGFsbCBzdXBwbGllZCBpbiB0aGUgY29uc3RydWN0b3JcbiAgICAgICAgdGhpcy5saXN0ZW5lclBvcnRzLnB1c2gocG9ydCk7XG5cbiAgICAgICAgcmV0dXJuIHBvcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFRhcmdldCh0YXJnZXQ6IElDbGFzc2ljTG9hZEJhbGFuY2VyVGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC5hdHRhY2hUb0NsYXNzaWNMQih0aGlzKTtcblxuICAgICAgICB0aGlzLm5ld1RhcmdldCh0YXJnZXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZEJhbGFuY2VyTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxiLnJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGIubG9hZEJhbGFuY2VyQ2Fub25pY2FsSG9zdGVkWm9uZU5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2FkQmFsYW5jZXJEbnNOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGIubG9hZEJhbGFuY2VyRG5zTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvYWRCYWxhbmNlclNvdXJjZVNlY3VyaXR5R3JvdXBHcm91cE5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsYi5sb2FkQmFsYW5jZXJTb3VyY2VTZWN1cml0eUdyb3VwR3JvdXBOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9hZEJhbGFuY2VyU291cmNlU2VjdXJpdHlHcm91cE93bmVyQWxpYXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsYi5sb2FkQmFsYW5jZXJTb3VyY2VTZWN1cml0eUdyb3VwT3duZXJBbGlhcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGxvdyBjb25uZWN0aW9ucyB0byBhbGwgZXhpc3RpbmcgdGFyZ2V0cyBvbiBuZXcgaW5zdGFuY2UgcG9ydFxuICAgICAqL1xuICAgIHByaXZhdGUgbmV3SW5zdGFuY2VQb3J0KGluc3RhbmNlUG9ydDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0cy5mb3JFYWNoKHQgPT4gdGhpcy5hbGxvd1RhcmdldENvbm5lY3Rpb24oaW5zdGFuY2VQb3J0LCB0KSk7XG5cbiAgICAgICAgLy8gS2VlcCB0cmFjayBvZiBwb3J0IGZvciBmdXR1cmUgdGFyZ2V0c1xuICAgICAgICB0aGlzLmluc3RhbmNlUG9ydHMucHVzaChpbnN0YW5jZVBvcnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsbG93IGNvbm5lY3Rpb25zIHRvIHRhcmdldCBvbiBhbGwgZXhpc3RpbmcgaW5zdGFuY2UgcG9ydHNcbiAgICAgKi9cbiAgICBwcml2YXRlIG5ld1RhcmdldCh0YXJnZXQ6IElDbGFzc2ljTG9hZEJhbGFuY2VyVGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VQb3J0cy5mb3JFYWNoKHAgPT4gdGhpcy5hbGxvd1RhcmdldENvbm5lY3Rpb24ocCwgdGFyZ2V0KSk7XG5cbiAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB0YXJnZXQgZm9yIGZ1dHVyZSBsaXN0ZW5lcnMuXG4gICAgICAgIHRoaXMudGFyZ2V0cy5wdXNoKHRhcmdldCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxsb3cgY29ubmVjdGlvbnMgZm9yIGEgc2luZ2xlIChwb3J0LCB0YXJnZXQpIHBhaXJcbiAgICAgKi9cbiAgICBwcml2YXRlIGFsbG93VGFyZ2V0Q29ubmVjdGlvbihpbnN0YW5jZVBvcnQ6IG51bWJlciwgdGFyZ2V0OiBJQ2xhc3NpY0xvYWRCYWxhbmNlclRhcmdldCkge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25zLmFsbG93VG8oXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBuZXcgVGNwUG9ydChpbnN0YW5jZVBvcnQpLFxuICAgICAgICAgICAgYFBvcnQgJHtpbnN0YW5jZVBvcnR9IExCIHRvIGZsZWV0YCk7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlZmVyZW5jZSB0byBhIGxpc3RlbmVyJ3MgcG9ydCBqdXN0IGNyZWF0ZWQuXG4gKlxuICogVGhpcyBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB3aXRoIGEgZGVmYXVsdCBwb3J0ICh0aGUgcG9ydCB0aGF0IGFuIEVMQlxuICogbGlzdGVuZXIgd2FzIGp1c3QgY3JlYXRlZCBvbikgZm9yIGEgZ2l2ZW4gc2VjdXJpdHkgZ3JvdXAgc28gdGhhdCBpdCBjYW4gYmVcbiAqIGNvbnZlbmllbnRseSB1c2VkIGp1c3QgbGlrZSBhbnkgQ29ubmVjdGFibGUuIEUuZzpcbiAqXG4gKiAgICAgIGNvbnN0IGxpc3RlbmVyID0gZWxiLmFkZExpc3RlbmVyKC4uLik7XG4gKlxuICogICAgICBsaXN0ZW5lci5jb25uZWN0aW9ucy5hbGxvd0RlZmF1bHRQb3J0RnJvbUFueUlQdjQoKTtcbiAqICAgICAgLy8gb3JcbiAqICAgICAgaW5zdGFuY2UuY29ubmVjdGlvbnMuYWxsb3dUb0RlZmF1bHRQb3J0KGxpc3RlbmVyKTtcbiAqL1xuZXhwb3J0IGNsYXNzIENsYXNzaWNMaXN0ZW5lclBvcnQgaW1wbGVtZW50cyBJQ29ubmVjdGFibGUge1xuICAgIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3RvcihzZWN1cml0eUdyb3VwOiBTZWN1cml0eUdyb3VwUmVmLCBkZWZhdWx0UG9ydFJhbmdlOiBJUG9ydFJhbmdlKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSBuZXcgQ29ubmVjdGlvbnMoeyBzZWN1cml0eUdyb3VwLCBkZWZhdWx0UG9ydFJhbmdlIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gd2VsbEtub3duUHJvdG9jb2wocG9ydDogbnVtYmVyKTogTG9hZEJhbGFuY2luZ1Byb3RvY29sIHtcbiAgICBjb25zdCBwcm90byA9IHRyeVdlbGxLbm93blByb3RvY29sKHBvcnQpO1xuICAgIGlmICghcHJvdG8pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbGVhc2Ugc3VwcGx5IHByb3RvY29sIHRvIGdvIHdpdGggcG9ydCAke3BvcnR9YCk7XG4gICAgfVxuICAgIHJldHVybiBwcm90bztcbn1cblxuZnVuY3Rpb24gdHJ5V2VsbEtub3duUHJvdG9jb2wocG9ydDogbnVtYmVyKTogTG9hZEJhbGFuY2luZ1Byb3RvY29sIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocG9ydCA9PT0gODApIHsgcmV0dXJuIExvYWRCYWxhbmNpbmdQcm90b2NvbC5IdHRwOyB9XG4gICAgaWYgKHBvcnQgPT09IDQ0MykgeyByZXR1cm4gTG9hZEJhbGFuY2luZ1Byb3RvY29sLkh0dHBzOyB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNIdHRwUHJvdG9jb2wocHJvdG86IExvYWRCYWxhbmNpbmdQcm90b2NvbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwcm90byA9PT0gTG9hZEJhbGFuY2luZ1Byb3RvY29sLkh0dHBzIHx8IHByb3RvID09PSBMb2FkQmFsYW5jaW5nUHJvdG9jb2wuSHR0cDtcbn1cblxuZnVuY3Rpb24gaWZVbmRlZmluZWQ8VD4oeDogVCB8IHVuZGVmaW5lZCwgZGVmOiBUKTogVCB7XG4gICAgcmV0dXJuIHggIT0gbnVsbCA/IHggOiBkZWY7XG59XG5cbmZ1bmN0aW9uIGlmVW5kZWZpbmVkTGF6eTxUPih4OiBUIHwgdW5kZWZpbmVkLCBkZWY6ICgpID0+IFQpOiBUIHtcbiAgICByZXR1cm4geCAhPSBudWxsID8geCA6IGRlZigpO1xufVxuXG4vKipcbiAqIFR1cm4gaGVhbHRoIGNoZWNrIHBhcmFtZXRlcnMgaW50byBhIHBhcmFtZXRlciBibG9iIGZvciB0aGUgQ2xhc3NpYyBMQlxuICovXG5mdW5jdGlvbiBoZWFsdGhDaGVja1RvSlNPTihoZWFsdGhDaGVjazogSGVhbHRoQ2hlY2spOiBlbGFzdGljbG9hZGJhbGFuY2luZy5jbG91ZGZvcm1hdGlvbi5Mb2FkQmFsYW5jZXJSZXNvdXJjZS5IZWFsdGhDaGVja1Byb3BlcnR5IHtcbiAgICBjb25zdCBwcm90b2NvbCA9IGlmVW5kZWZpbmVkKGhlYWx0aENoZWNrLnByb3RvY29sLFxuICAgICAgICAgICAgICAgICAgICAgaWZVbmRlZmluZWQodHJ5V2VsbEtub3duUHJvdG9jb2woaGVhbHRoQ2hlY2sucG9ydCksXG4gICAgICAgICAgICAgICAgICAgICBMb2FkQmFsYW5jaW5nUHJvdG9jb2wuVGNwKSk7XG5cbiAgICBjb25zdCBwYXRoID0gcHJvdG9jb2wgPT09IExvYWRCYWxhbmNpbmdQcm90b2NvbC5IdHRwIHx8IHByb3RvY29sID09PSBMb2FkQmFsYW5jaW5nUHJvdG9jb2wuSHR0cHMgPyBpZlVuZGVmaW5lZChoZWFsdGhDaGVjay5wYXRoLCBcIi9cIikgOiBcIlwiO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gYCR7cHJvdG9jb2wudG9VcHBlckNhc2UoKX06JHtoZWFsdGhDaGVjay5wb3J0fSR7cGF0aH1gO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaGVhbHRoeVRocmVzaG9sZDogaWZVbmRlZmluZWQoaGVhbHRoQ2hlY2suaGVhbHRoeVRocmVzaG9sZCwgMikudG9TdHJpbmcoKSxcbiAgICAgICAgaW50ZXJ2YWw6IGlmVW5kZWZpbmVkKGhlYWx0aENoZWNrLmludGVydmFsLCAzMCkudG9TdHJpbmcoKSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICB0aW1lb3V0OiBpZlVuZGVmaW5lZChoZWFsdGhDaGVjay50aW1lb3V0LCA1KS50b1N0cmluZygpLFxuICAgICAgICB1bmhlYWx0aHlUaHJlc2hvbGQ6IGlmVW5kZWZpbmVkKGhlYWx0aENoZWNrLnVuaGVhbHRoeVRocmVzaG9sZCwgNSkudG9TdHJpbmcoKSxcbiAgICB9O1xufVxuIl19

@@ -204,2 +204,2 @@ "use strict";

exports.LinuxOS = LinuxOS;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjaGluZS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hY2hpbmUtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBc0U7QUFZdEU7Ozs7OztHQU1HO0FBQ0gsTUFBYSxZQUFZO0lBQ3JCLFlBQTZCLE9BQXVCO1FBQXZCLFlBQU8sR0FBUCxPQUFPLENBQWdCO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxNQUFpQjtRQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLDBCQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUQsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsT0FBdUI7UUFDOUMsT0FBTyxrQ0FBa0MsR0FBRyxPQUFPLENBQUM7SUFDeEQsQ0FBQztDQUNKO0FBckJELG9DQXFCQztBQTRCRDs7OztHQUlHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFPekIsWUFBWSxLQUE2QjtRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUM7UUFDdkUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQztRQUM3RSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7SUFD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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjaGluZS1pbWFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1hY2hpbmUtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBc0U7QUFZdEU7Ozs7OztHQU1HO0FBQ0gsTUFBYSxZQUFZO0lBQ3JCLFlBQTZCLE9BQXVCO1FBQXZCLFlBQU8sR0FBUCxPQUFPLENBQWdCO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVEsQ0FBQyxNQUFpQjtRQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLDBCQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUQsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsT0FBdUI7UUFDOUMsT0FBTyxrQ0FBa0MsR0FBRyxPQUFPLENBQUM7SUFDeEQsQ0FBQztDQUNKO0FBckJELG9DQXFCQztBQTRCRDs7OztHQUlHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFPekIsWUFBWSxLQUE2QjtRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUM7UUFDdkUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQztRQUM3RSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7SUFD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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QsIFNTTVBhcmFtZXRlclByb3ZpZGVyLCBTdGFjayB9IGZyb20gJ0Bhd3MtY2RrL2Nkayc7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBjbGFzc2VzIHRoYXQgY2FuIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBtYWNoaW5lIGltYWdlIHRvIHVzZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElNYWNoaW5lSW1hZ2VTb3VyY2Uge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgaW1hZ2UgdG8gdXNlIGluIHRoZSBnaXZlbiBjb250ZXh0XG4gICAgICovXG4gICAgZ2V0SW1hZ2UocGFyZW50OiBDb25zdHJ1Y3QpOiBNYWNoaW5lSW1hZ2U7XG59XG5cbi8qKlxuICogU2VsZWN0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgaW5kaWNhdGVkIFdpbmRvd3MgdmVyc2lvblxuICpcbiAqIFRoZSBBTUkgSUQgaXMgc2VsZWN0ZWQgdXNpbmcgdGhlIHZhbHVlcyBwdWJsaXNoZWQgdG8gdGhlIFNTTSBwYXJhbWV0ZXIgc3RvcmUuXG4gKlxuICogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9ibG9ncy9tdC9xdWVyeS1mb3ItdGhlLWxhdGVzdC13aW5kb3dzLWFtaS11c2luZy1zeXN0ZW1zLW1hbmFnZXItcGFyYW1ldGVyLXN0b3JlL1xuICovXG5leHBvcnQgY2xhc3MgV2luZG93c0ltYWdlIGltcGxlbWVudHMgSU1hY2hpbmVJbWFnZVNvdXJjZSAge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdmVyc2lvbjogV2luZG93c1ZlcnNpb24pIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGltYWdlIHRvIHVzZSBpbiB0aGUgZ2l2ZW4gY29udGV4dFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJbWFnZShwYXJlbnQ6IENvbnN0cnVjdCk6IE1hY2hpbmVJbWFnZSB7XG4gICAgICAgIGNvbnN0IHNzbVByb3ZpZGVyID0gbmV3IFNTTVBhcmFtZXRlclByb3ZpZGVyKHBhcmVudCk7XG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IHRoaXMuaW1hZ2VQYXJhbWV0ZXJOYW1lKHRoaXMudmVyc2lvbik7XG4gICAgICAgIGNvbnN0IGFtaSA9IHNzbVByb3ZpZGVyLmdldFN0cmluZyhwYXJhbWV0ZXJOYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYWNoaW5lSW1hZ2UoYW1pLCBuZXcgV2luZG93c09TKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdCB0aGUgU1NNIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgZ2l2ZW4gV2luZG93cyBpbWFnZVxuICAgICAqL1xuICAgIHByaXZhdGUgaW1hZ2VQYXJhbWV0ZXJOYW1lKHZlcnNpb246IFdpbmRvd3NWZXJzaW9uKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICcvYXdzL3NlcnZpY2UvYW1pLXdpbmRvd3MtbGF0ZXN0LycgKyB2ZXJzaW9uO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbWF6b24gTGludXggaW1hZ2UgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFtYXpvbkxpbnV4SW1hZ2VQcm9wcyB7XG4gICAgLyoqXG4gICAgICogV2hhdCBlZGl0aW9uIG9mIEFtYXpvbiBMaW51eCB0byB1c2VcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFN0YW5kYXJkXG4gICAgICovXG4gICAgZWRpdGlvbj86IEFtYXpvbkxpbnV4RWRpdGlvbjtcblxuICAgIC8qKlxuICAgICAqIFZpcnR1YWxpemF0aW9uIHR5cGVcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IEhWTVxuICAgICAqL1xuICAgIHZpcnR1YWxpemF0aW9uPzogQW1hem9uTGludXhWaXJ0O1xuXG4gICAgLyoqXG4gICAgICogV2hhdCBzdG9yYWdlIGJhY2tlZCBpbWFnZSB0byB1c2VcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IEdlbmVyYWxQdXJwb3NlXG4gICAgICovXG4gICAgc3RvcmFnZT86IEFtYXpvbkxpbnV4U3RvcmFnZTtcbn1cblxuLyoqXG4gKiBTZWxlY3RzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBBbWF6b24gTGludXhcbiAqXG4gKiBUaGUgQU1JIElEIGlzIHNlbGVjdGVkIHVzaW5nIHRoZSB2YWx1ZXMgcHVibGlzaGVkIHRvIHRoZSBTU00gcGFyYW1ldGVyIHN0b3JlLlxuICovXG5leHBvcnQgY2xhc3MgQW1hem9uTGludXhJbWFnZSBpbXBsZW1lbnRzIElNYWNoaW5lSW1hZ2VTb3VyY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWRpdGlvbj86IEFtYXpvbkxpbnV4RWRpdGlvbjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlydHVhbGl6YXRpb24/OiBBbWF6b25MaW51eFZpcnQ7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2U/OiBBbWF6b25MaW51eFN0b3JhZ2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcz86IEFtYXpvbkxpbnV4SW1hZ2VQcm9wcykge1xuICAgICAgICB0aGlzLmVkaXRpb24gPSAocHJvcHMgJiYgcHJvcHMuZWRpdGlvbikgfHwgQW1hem9uTGludXhFZGl0aW9uLlN0YW5kYXJkO1xuICAgICAgICB0aGlzLnZpcnR1YWxpemF0aW9uID0gKHByb3BzICYmIHByb3BzLnZpcnR1YWxpemF0aW9uKSB8fCBBbWF6b25MaW51eFZpcnQuSFZNO1xuICAgICAgICB0aGlzLnN0b3JhZ2UgPSAocHJvcHMgJiYgcHJvcHMuc3RvcmFnZSkgfHwgQW1hem9uTGludXhTdG9yYWdlLkdlbmVyYWxQdXJwb3NlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgaW1hZ2UgdG8gdXNlIGluIHRoZSBnaXZlbiBjb250ZXh0XG4gICAgICovXG4gICAgcHVibGljIGdldEltYWdlKHBhcmVudDogQ29uc3RydWN0KTogTWFjaGluZUltYWdlIHtcbiAgICAgICAgY29uc3QgcGFydHM6IEFycmF5PHN0cmluZ3x1bmRlZmluZWQ+ID0gW1xuICAgICAgICAgICAgJ2Ftem4tYW1pJyxcbiAgICAgICAgICAgIHRoaXMuZWRpdGlvbiAhPT0gQW1hem9uTGludXhFZGl0aW9uLlN0YW5kYXJkID8gdGhpcy5lZGl0aW9uIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdGhpcy52aXJ0dWFsaXphdGlvbixcbiAgICAgICAgICAgICd4ODZfNjQnLCAvLyBObyAzMi1iaXRzIGltYWdlcyB2ZW5kZWQgdGhyb3VnaCB0aGlzXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2VcbiAgICAgICAgXS5maWx0ZXIoeCA9PiB4ICE9PSB1bmRlZmluZWQpOyAvLyBHZXQgcmlkIG9mIHVuZGVmaW5lZHNcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gJy9hd3Mvc2VydmljZS9hbWktYW1hem9uLWxpbnV4LWxhdGVzdC8nICsgcGFydHMuam9pbignLScpO1xuXG4gICAgICAgIGNvbnN0IHNzbVByb3ZpZGVyID0gbmV3IFNTTVBhcmFtZXRlclByb3ZpZGVyKHBhcmVudCk7XG4gICAgICAgIGNvbnN0IGFtaSA9IHNzbVByb3ZpZGVyLmdldFN0cmluZyhwYXJhbWV0ZXJOYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYWNoaW5lSW1hZ2UoYW1pLCBuZXcgTGludXhPUygpKTtcbiAgICB9XG59XG5cbi8qKlxuICogQW1hem9uIExpbnV4IGVkaXRpb25cbiAqL1xuZXhwb3J0IGVudW0gQW1hem9uTGludXhFZGl0aW9uIHtcbiAgICAvKipcbiAgICAgKiBTdGFuZGFyZCBlZGl0aW9uXG4gICAgICovXG4gICAgU3RhbmRhcmQgPSAnc3RhbmRhcmQnLFxuXG4gICAgLyoqXG4gICAgICogTWluaW1hbCBlZGl0aW9uXG4gICAgICovXG4gICAgTWluaW1hbCA9ICdtaW5pbWFsJ1xufVxuXG4vKipcbiAqIFZpcnR1YWxpemF0aW9uIHR5cGUgZm9yIEFtYXpvbiBMaW51eFxuICovXG5leHBvcnQgZW51bSBBbWF6b25MaW51eFZpcnQge1xuICAgIC8qKlxuICAgICAqIEhWTSB2aXJ0dWFsaXphdGlvbiAocmVjb21tZW5kZWQpXG4gICAgICovXG4gICAgSFZNID0gJ2h2bScsXG5cbiAgICAvKipcbiAgICAgKiBQViB2aXJ0dWFsaXphdGlvblxuICAgICAqL1xuICAgIFBWID0gJ3B2J1xufVxuXG5leHBvcnQgZW51bSBBbWF6b25MaW51eFN0b3JhZ2Uge1xuICAgIC8qKlxuICAgICAqIEVCUy1iYWNrZWQgc3RvcmFnZVxuICAgICAqL1xuICAgIEVCUyA9ICdlYnMnLFxuXG4gICAgLyoqXG4gICAgICogUzMtYmFja2VkIHN0b3JhZ2VcbiAgICAgKi9cbiAgICBTMyA9ICdlYnMnLFxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhbCBQdXJwb3NlLWJhc2VkIHN0b3JhZ2UgKHJlY29tbWVuZGVkKVxuICAgICAqL1xuICAgIEdlbmVyYWxQdXJwb3NlID0gJ2dwMicsXG59XG5cbi8qKlxuICogQ29uc3RydWN0IGEgTGludXggbWFjaGluZSBpbWFnZSBmcm9tIGFuIEFNSSBtYXBcbiAqXG4gKiBMaW51eCBpbWFnZXMgSURzIGFyZSBub3QgcHVibGlzaGVkIHRvIFNTTSBwYXJhbWV0ZXIgc3RvcmUgeWV0LCBzbyB5b3UnbGwgaGF2ZSB0b1xuICogbWFudWFsbHkgc3BlY2lmeSBhbiBBTUkgbWFwLlxuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY0xpbnV4SW1hZ2UgaW1wbGVtZW50cyBJTWFjaGluZUltYWdlU291cmNlICB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhbWlNYXA6IHtbcmVnaW9uOiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEltYWdlKHBhcmVudDogQ29uc3RydWN0KTogTWFjaGluZUltYWdlIHtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBTdGFjay5maW5kKHBhcmVudCk7XG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IHN0YWNrLnJlcXVpcmVSZWdpb24oJ0FNSSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCcpO1xuICAgICAgICBjb25zdCBhbWkgPSB0aGlzLmFtaU1hcFtyZWdpb25dO1xuICAgICAgICBpZiAoIWFtaSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBBTUkgaW4gQU1JIG1hcDogbm8gQU1JIHNwZWNpZmllZCBmb3IgcmVnaW9uICcke3JlZ2lvbn0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE1hY2hpbmVJbWFnZShhbWksIG5ldyBMaW51eE9TKCkpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGUgV2luZG93cyB2ZXJzaW9uIHRvIHVzZSBmb3IgdGhlIFdpbmRvd3NJbWFnZVxuICovXG5leHBvcnQgZW51bSBXaW5kb3dzVmVyc2lvbiB7XG4gICAgV2luZG93c1NlcnZlcjIwMTZUdXJrc2loRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1UdXJraXNoLUZ1bGwtQmFzZScsXG4gICAgV2luZG93c1NlcnZlcjIwMTZTd2VkaXNoRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1Td2VkaXNoLUZ1bGwtQmFzZScsXG4gICAgV2luZG93c1NlcnZlcjIwMTZTcGFuaXNoRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1TcGFuaXNoLUZ1bGwtQmFzZScsXG4gICAgV2luZG93c1NlcnZlcjIwMTZSdXNzaWFuRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1SdXNzaWFuLUZ1bGwtQmFzZScsXG4gICAgV2luZG93c1NlcnZlcjIwMTZQb3J0dWd1ZXNlUG9ydHVnYWxGdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LVBvcnR1Z3Vlc2VfUG9ydHVnYWwtRnVsbC1CYXNlJyxcbiAgICBXaW5kb3dzU2VydmVyMjAxNlBvcnR1Z3Vlc2VCcmF6aWxGdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LVBvcnR1Z3Vlc2VfQnJhemlsLUZ1bGwtQmFzZScsXG4gICAgV2luZG93c1NlcnZlcjIwMTZQb2xpc2hGdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LVBvbGlzaC1GdWxsLUJhc2UnLFxuICAgIFdpbmRvd3NTZXJ2ZXIyMDE2S29yZWFuRnVsbFNRTDIwMTZCYXNlID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtS29yZWFuLUZ1bGwtU1FMXzIwMTZfU1AxX1N0YW5kYXJkJyxcbiAgICBXaW5kb3dzU2VydmVyMjAxNktvcmVhbkZ1bGxCYXNlID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtS29yZWFuLUZ1bGwtQmFzZScsXG4gICAgV2luZG93c1NlcnZlcjIwMTZKYXBhbmVzZUZ1bGxTUUwyMDE2V2ViID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtSmFwYW5lc2UtRnVsbC1TUUxfMjAxNl9TUDFfV2ViJyxcbiAgICBXaW5kb3dzU2VydmVyMjAxNkphcGFuZXNlRnVsbFNRTDIwMTZTdGFuZGFyZCA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUphcGFuZXNlLUZ1bGwtU1FMXzIwMTZfU1AxX1N0YW5kYXJkJyxcbiAgICBXaW5kb3dzU2VydmVyMjAxNkphcGFuZXNlRnVsbFNRTDIwMTZFeHByZXNzID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtSmFwYW5lc2UtRnVsbC1TUUxfMjAxNl9TUDFfRXhwcmVzcycsXG4gICAgV2luZG93c1NlcnZlcjIwMTZKYXBhbmVzZUZ1bGxTUUwyMDE2RW50ZXJwcmlzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUphcGFuZXNlLUZ1bGwtU1FMXzIwMTZfU1AxX0VudGVycHJpc2UnLFxuICAgIFdpbmRvd3NTZXJ2ZXIyMDE2SmFwYW5lc2VGdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUphcGFuZXNlLUZ1bGwtQmFzZScsXG4gICAgV2luZG93c1NlcnZlcjIwMTZJdGFsaWFuRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1JdGFsaWFuLUZ1bGwtQmFzZScsXG4gICAgV2luZG93c1NlcnZlcjIwMTZIdW5nYXJpYW5GdWxsQmFzZSA9ICdXaW5kb3dzX1NlcnZlci0yMDE2LUh1bmdhcmlhbi1GdWxsLUJhc2UnLFxuICAgIFdpbmRvd3NTZXJ2ZXIyMDE2R2VybWFuRnVsbEJhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1HZXJtYW4tRnVsbC1CYXNlJyxcbiAgICBXaW5kb3dzU2VydmVyMjAxNkZyZW5jaEZ1bGxCYXNlID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtRnJlbmNoLUZ1bGwtQmFzZScsXG4gICAgV2luZG93c1NlcnZlcjIwMTZFbmdsaXNoTmFub0Jhc2UgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1FbmdsaXNoLU5hbm8tQmFzZScsXG4gICAgV2luZG93c1NlcnZlcjIwMTZFbmdsaXNoRnVsbFNRTDIwMTdXZWIgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1FbmdsaXNoLUZ1bGwtU1FMXzIwMTdfV2ViJyxcbiAgICBXaW5kb3dzU2VydmVyMjAxNkVuZ2xpc2hGdWxsU1FMMjAxN1N0YW5kYXJkID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtRW5nbGlzaC1GdWxsLVNRTF8yMDE3X1N0YW5kYXJkJyxcbiAgICBXaW5kb3dzU2VydmVyMjAxNkVuZ2xpc2hGdWxsU1FMMjAxN0V4cHJlc3MgPSAnV2luZG93c19TZXJ2ZXItMjAxNi1FbmdsaXNoLUZ1bGwtU1FMXzIwMTdfRXhwcmVzcycsXG4gICAgV2luZG93c1NlcnZlcjIwMTZFbmdsaXNoRnVsbFNRTDIwMTdFbnRlcnByaXNlID0gJ1dpbmRvd3NfU2VydmVyLTIwMTYtRW5nbGlzaC1GdWxsLVNRTF8yMDE3X0VudGVycHJpc2UnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgbWFjaGluZSB0byBiZSBsYXVuY2hlZFxuICpcbiAqIENvbWJpbmVzIGFuIEFNSSBJRCB3aXRoIGFuIE9TLlxuICovXG5leHBvcnQgY2xhc3MgTWFjaGluZUltYWdlIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaW1hZ2VJZDogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgb3M6IE9wZXJhdGluZ1N5c3RlbSkge1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGUgT1MgdHlwZSBvZiBhIHBhcnRpY3VsYXIgaW1hZ2VcbiAqL1xuZXhwb3J0IGVudW0gT3BlcmF0aW5nU3lzdGVtVHlwZSB7XG4gICAgTGludXgsXG4gICAgV2luZG93cyxcbn1cblxuLyoqXG4gKiBBYnN0cmFjdGlvbiBvZiBPUyBmZWF0dXJlcyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPcGVyYXRpbmdTeXN0ZW0ge1xuICAgIHB1YmxpYyBhYnN0cmFjdCBjcmVhdGVVc2VyRGF0YShzY3JpcHRzOiBzdHJpbmdbXSk6IHN0cmluZztcbiAgICBhYnN0cmFjdCBnZXQgdHlwZSgpOiBPcGVyYXRpbmdTeXN0ZW1UeXBlO1xufVxuXG4vKipcbiAqIE9TIGZlYXR1cmVzIHNwZWNpYWxpemVkIGZvciBXaW5kb3dzXG4gKi9cbmV4cG9ydCBjbGFzcyBXaW5kb3dzT1MgZXh0ZW5kcyBPcGVyYXRpbmdTeXN0ZW0ge1xuICAgIHB1YmxpYyBjcmVhdGVVc2VyRGF0YShzY3JpcHRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgPHBvd2Vyc2hlbGw+JHtzY3JpcHRzLmpvaW4oJ1xcbicpfTwvcG93ZXJzaGVsbD5gO1xuICAgIH1cblxuICAgIGdldCB0eXBlKCk6IE9wZXJhdGluZ1N5c3RlbVR5cGUge1xuICAgICAgICByZXR1cm4gT3BlcmF0aW5nU3lzdGVtVHlwZS5XaW5kb3dzO1xuICAgIH1cbn1cblxuLyoqXG4gKiBPUyBmZWF0dXJlcyBzcGVjaWFsaXplZCBmb3IgTGludXhcbiAqL1xuZXhwb3J0IGNsYXNzIExpbnV4T1MgZXh0ZW5kcyBPcGVyYXRpbmdTeXN0ZW0ge1xuICAgIHB1YmxpYyBjcmVhdGVVc2VyRGF0YShzY3JpcHRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnIyEvYmluL2Jhc2hcXG4nICsgc2NyaXB0cy5qb2luKCdcXG4nKTtcbiAgICB9XG5cbiAgICBnZXQgdHlwZSgpOiBPcGVyYXRpbmdTeXN0ZW1UeXBlIHtcbiAgICAgICAgcmV0dXJuIE9wZXJhdGluZ1N5c3RlbVR5cGUuTGludXg7XG4gICAgfVxufVxuIl19

@@ -232,2 +232,2 @@ "use strict";

exports.CidrBlock = CidrBlock;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibmV0d29yay11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7OztHQUdHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSxLQUFLO0lBQzVDLFlBQVksSUFBWTtRQUNwQixLQUFLLENBQUMsSUFBSSxHQUFHLDhEQUE4RCxDQUFDLENBQUM7UUFDN0UsNEdBQTRHO1FBQzVHLGdGQUFnRjtRQUNoRixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRSxDQUFDO0NBQ0o7QUFQRCxzREFPQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxZQUFZO0lBRXJCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFpQjtRQUNuQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQWlCO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxTQUFTLGVBQWUsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsT0FBTyxTQUFT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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibmV0d29yay11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7OztHQUdHO0FBQ0gsTUFBYSxxQkFBc0IsU0FBUSxLQUFLO0lBQzVDLFlBQVksSUFBWTtRQUNwQixLQUFLLENBQUMsSUFBSSxHQUFHLDhEQUE4RCxDQUFDLENBQUM7UUFDN0UsNEdBQTRHO1FBQzVHLGdGQUFnRjtRQUNoRixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRSxDQUFDO0NBQ0o7QUFQRCxzREFPQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxZQUFZO0lBRXJCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFpQjtRQUNuQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQWlCO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxTQUFTLGVBQWUsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsT0FBTyxTQUFT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QUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNSLGdEQUFnRDtRQUNoRCxPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNSLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVTtRQUNiLGdEQUFnRDtRQUNoRCxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ1osT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxZQUFZLENBQUMsS0FBZ0I7UUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNKO0FBeEhELDhCQXdIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW52YWxpZENpZHJSYW5nZUVycm9yIGlzIHRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGEgQ0lEUlxuICogcmFuZ2UgdGhhdCBpcyBlaXRoZXIgbm90IHZhbGlkLCBvciBvdXRzaWRlIG9mIHRoZSBWUEMgc2l6ZSBsaW1pdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQ2lkclJhbmdlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoY2lkcjogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGNpZHIgKyAnIGlzIG5vdCBhIHZhbGlkIFZQQyBDSURSIHJhbmdlIChtdXN0IGJlIGJldHdlZW4gLzE2IGFuZCAvMjgpJyk7XG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbGluZSBpcyByZXF1aXJlZCBmb3IgdHlwZSBjaGVja2luZyBvZiBjdXN0b20gZXJyb3JzLCBhbmQgbXVzdCBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgc3VwZXIoKVxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMTYyNjIzMS9jdXN0b20tZXJyb3ItY2xhc3MtaW4tdHlwZXNjcmlwdFxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgSW52YWxpZENpZHJSYW5nZUVycm9yLnByb3RvdHlwZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIE5ldHdvcmtVdGlscyBjb250YWlucyBoZWxwZXJzIHRvIHdvcmsgd2l0aCBuZXR3b3JrIGNvbnN0cnVjdHMgKHN1Ym5ldHMvcmFuZ2VzKVxuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya1V0aWxzIHtcblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyBhbiBJUHY0IHN0cmluZ1xuICAgICAqXG4gICAgICogcmV0dXJucyB0cnVlIG9mIHRoZSBzdHJpbmcgY29udGFpbnMgNCBudW1iZXJzIGJldHdlZW4gMC0yNTUgZGVsaW1pdGVkIGJ5XG4gICAgICogYSBgLmAgY2hhcmFjdGVyXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB2YWxpZElwKGlwQWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG9jdGV0cyA9IGlwQWRkcmVzcy5zcGxpdCgnLicpO1xuICAgICAgICBpZiAob2N0ZXRzLmxlbmd0aCAhPT0gNCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvY3RldHMubWFwKChvY3RldDogc3RyaW5nKSA9PiBwYXJzZUludChvY3RldCwgMTApKS5cbiAgICAgICAgICAgIGZpbHRlcigob2N0ZXQ6IG51bWJlcikgPT4gb2N0ZXQgPj0gMCAmJiBvY3RldCA8PSAyNTUpLmxlbmd0aCA9PT0gNDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIHN0cmluZyBJUHY0IHRvIGEgbnVtYmVyXG4gICAgICpcbiAgICAgKiB0YWtlcyBhbiBJUCBBZGRyZXNzIChlLmcuIDE3NC42Ni4xNzMuMTY4KSBhbmQgY29udmVydHMgdG8gYSBudW1iZXJcbiAgICAgKiAoZS5nIDI5MjM2MDU0MTYpOyBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBJUHY0XG4gICAgICpcbiAgICAgKiBVc2VzIHRoZSBmb3JtdWxhOlxuICAgICAqIChmaXJzdCBvY3RldCAqIDI1NsKzKSArIChzZWNvbmQgb2N0ZXQgKiAyNTbCsikgKyAodGhpcmQgb2N0ZXQgKiAyNTYpICtcbiAgICAgKiAoZm91cnRoIG9jdGV0KVxuICAgICAqXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB0aGUgSVAgYWRkcmVzcyAoZS5nLiAxNzQuNjYuMTczLjE2OClcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0aGUgSVAgYWRkcmVzcyAoZS5nIDI5MjM2MDU0MTYpXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBpcFRvTnVtKGlwQWRkcmVzczogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbGlkSXAoaXBBZGRyZXNzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2lwQWRkcmVzc30gaXMgbm90IHZhbGlkYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXBBZGRyZXNzXG4gICAgICAgICAgICAuc3BsaXQoJy4nKVxuICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAocDogbnVtYmVyLCBjOiBzdHJpbmcsIGk6IG51bWJlcikgPT4gcCArIHBhcnNlSW50KGMsIDEwKSAqIDI1NiAqKiAoMyAtIGkpLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFrZXMgbnVtYmVyIGFuZCBjb252ZXJ0cyBpdCB0byBJUHY0IGFkZHJlc3Mgc3RyaW5nXG4gICAgICpcbiAgICAgKiBUYWtlcyBhIG51bWJlciAoZS5nIDI5MjM2MDU0MTYpIGFuZCBjb252ZXJ0cyBpdCB0byBhbiBJUHY0IGFkZHJlc3Mgc3RyaW5nXG4gICAgICogY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgSVB2NFxuICAgICAqXG4gICAgICogQHBhcmFtICB7bnVtYmVyfSB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0aGUgSVAgYWRkcmVzcyAoZS5nIDI5MjM2MDU0MTYpXG4gICAgICogQHJldHVybnMge3N0cmluZ30gdGhlIElQdjQgYWRkcmVzcyAoZS5nLiAxNzQuNjYuMTczLjE2OClcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG51bVRvSXAoaXBOdW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIC8vIHRoaXMgYWxsIGJlY2F1c2UgYml0d2lzZSBtYXRoIGlzIHNpZ25lZFxuICAgICAgICBsZXQgcmVtYWluaW5nID0gaXBOdW07XG4gICAgICAgIGNvbnN0IGFkZHJlc3MgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmcgIT09IDApIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzLnB1c2goTWF0aC5mbG9vcihyZW1haW5pbmcgLyAyNTYgKiogKDMgLSBpKSkpO1xuICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZyAlIDI1NiAqKiAoMyAtIGkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRyZXNzLnB1c2goMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXBBZGRyZXNzOiBzdHJpbmcgPSBhZGRyZXNzLmpvaW4oJy4nKTtcbiAgICAgICAgaWYgKCAhdGhpcy52YWxpZElwKGlwQWRkcmVzcykgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aXBBZGRyZXNzfSBpcyBub3QgYSB2YWxpZCBJUCBBZGRyZXNzYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlwQWRkcmVzcztcbiAgICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldHdvcmsgYmFzZWQgb24gYSBDSURSIEJsb2NrIHRvIGJ1aWxkIGNvbnRhaW5lZCBzdWJuZXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrQnVpbGRlciB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQ0lEUiByYW5nZSB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIG5ldHdvcmtcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbmV0d29ya0NpZHI6IENpZHJCbG9jaztcblxuICAgIC8qKlxuICAgICAqIFRoZSBsaXN0IG9mIENJRFIgYmxvY2tzIGZvciBzdWJuZXRzIHdpdGhpbiB0aGlzIG5ldHdvcmtcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1Ym5ldENpZHJzOiBDaWRyQmxvY2tbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5leHQgYXZhaWxhYmxlIElQIGFkZHJlc3MgYXMgYSBudW1iZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIG5leHRBdmFpbGFibGVJcDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV0d29yayB1c2luZyB0aGUgcHJvdmlkZWQgQ0lEUiBibG9ja1xuICAgICAqXG4gICAgICogTm8gc3VibmV0cyBhcmUgYWxsb2NhdGVkIGluIHRoZSBjb25zdHJ1Y3RvciwgdGhlIG1heElwQ29uc3VtZWQgaXMgc2V0IG9uZVxuICAgICAqIGxlc3MgdGhhbiB0aGUgZmlyc3QgSVAgaW4gdGhlIG5ldHdvcmtcbiAgICAgKlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNpZHI6IHN0cmluZykge1xuICAgICAgICB0aGlzLm5ldHdvcmtDaWRyID0gbmV3IENpZHJCbG9jayhjaWRyKTtcbiAgICAgICAgdGhpcy5zdWJuZXRDaWRycyA9IFtdO1xuICAgICAgICB0aGlzLm5leHRBdmFpbGFibGVJcCA9IHRoaXMubmV0d29ya0NpZHIubWluQWRkcmVzcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIHN1Ym5ldCB0byB0aGUgbmV0d29yayBhbmQgdXBkYXRlIHRoZSBtYXhJcENvbnN1bWVkXG4gICAgICovXG4gICAgcHVibGljIGFkZFN1Ym5ldChtYXNrOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRTdWJuZXRzKG1hc2ssIDEpWzBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB7Y291bnR9IG51bWJlciBvZiBzdWJuZXRzIHRvIHRoZSBuZXR3b3JrIGFuZCB1cGRhdGUgdGhlIG1heElwQ29uc3VtZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkU3VibmV0cyhtYXNrOiBudW1iZXIsIGNvdW50OiBudW1iZXIgPSAxKTogc3RyaW5nW10ge1xuICAgICAgICBpZiAobWFzayA8IDE2IHx8IG1hc2sgPiAyOCAgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENpZHJSYW5nZUVycm9yKGB4LngueC54LyR7bWFza31gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhJcCA9IHRoaXMubmV4dEF2YWlsYWJsZUlwICsgKENpZHJCbG9jay5jYWxjdWxhdGVOZXRzaXplKG1hc2spICogY291bnQpO1xuICAgICAgICBpZiAodGhpcy5uZXR3b3JrQ2lkci5tYXhBZGRyZXNzKCkgPCBtYXhJcCAtIDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtjb3VudH0gb2YgLyR7bWFza30gZXhjZWVkcyByZW1haW5pbmcgc3BhY2Ugb2YgJHt0aGlzLm5ldHdvcmtDaWRyLmNpZHJ9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3VibmV0czogQ2lkckJsb2NrW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykge1xuICAgICAgICAgICAgY29uc3Qgc3VibmV0OiBDaWRyQmxvY2sgPSBuZXcgQ2lkckJsb2NrKHRoaXMubmV4dEF2YWlsYWJsZUlwLCBtYXNrKTtcbiAgICAgICAgICAgIHRoaXMubmV4dEF2YWlsYWJsZUlwID0gc3VibmV0Lm5leHRCbG9jaygpLm1pbkFkZHJlc3MoKTtcbiAgICAgICAgICAgIHRoaXMuc3VibmV0Q2lkcnMucHVzaChzdWJuZXQpO1xuICAgICAgICAgICAgc3VibmV0cy5wdXNoKHN1Ym5ldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Ym5ldHMubWFwKChzdWJuZXQpID0+IChzdWJuZXQuY2lkcikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgQ0lEUiBub3RhdGlvbiBzdHJpbmdzIGZvciBhbGwgc3VibmV0cyBpbiB0aGUgbmV0d29ya1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY2lkclN0cmluZ3MoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJuZXRDaWRycy5tYXAoKHN1Ym5ldCkgPT4gKHN1Ym5ldC5jaWRyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgbGFyZ2VzdCBzdWJuZXQgdG8gY3JlYXRlIG9mIHRoZSBnaXZlbiBjb3VudCBmcm9tIHRoZVxuICAgICAqIHJlbWFpbmluZyBJUCBzcGFjZVxuICAgICAqL1xuICAgIHB1YmxpYyBtYXNrRm9yUmVtYWluaW5nU3VibmV0cyhzdWJuZXRDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nOiBudW1iZXIgPSB0aGlzLm5ldHdvcmtDaWRyLm1heEFkZHJlc3MoKSAtIHRoaXMubmV4dEF2YWlsYWJsZUlwICsgMTtcbiAgICAgICAgY29uc3QgaXBzUGVyU3VibmV0OiBudW1iZXIgPSBNYXRoLmZsb29yKHJlbWFpbmluZyAvIHN1Ym5ldENvdW50KTtcbiAgICAgICAgcmV0dXJuIDMyIC0gTWF0aC5mbG9vcihNYXRoLmxvZzIoaXBzUGVyU3VibmV0KSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEEgYmxvY2sgb2YgSVAgYWRkcmVzcyBzcGFjZSB3aXRoIGEgZ2l2ZW4gYml0IHByZWZpeFxuICovXG5leHBvcnQgY2xhc3MgQ2lkckJsb2NrIHtcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIG5ldG1hc2sgZm9yIGEgZ2l2ZW4gQ0lEUiBtYXNrXG4gICAgICpcbiAgICAgKiBGb3IgZXhhbXBsZTpcbiAgICAgKiBDaWRyQmxvY2suY2FsY3VsYXRlTmV0bWFzaygyNCkgcmV0dXJucyAnMjU1LjI1NS4yNTUuMCdcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNhbGN1bGF0ZU5ldG1hc2sobWFzazogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIE5ldHdvcmtVdGlscy5udW1Ub0lwKDIgKiogMzIgLSAyICoqICgzMiAtIG1hc2spKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBudW1iZXIgSVAgYWRkcmVzc2VzIGluIGEgQ0lEUiBNYXNrXG4gICAgICpcbiAgICAgKiBGb3IgZXhhbXBsZTpcbiAgICAgKiBDaWRyQmxvY2suY2FsY3VsYXRlTmV0c2l6ZSgyNCkgcmV0dXJucyAyNTZcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGNhbGN1bGF0ZU5ldHNpemUobWFzazogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDIgKiogKDMyIC0gbWFzayk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBUaGUgQ0lEUiBCbG9jayByZXByZXNlbnRlZCBhcyBhIHN0cmluZyBlLmcuICcxMC4wLjAuMC8yMSdcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgY2lkcjogc3RyaW5nO1xuXG4gICAgLypcbiAgICAgKiBUaGUgQ0lEUiBtYXNrIGUuZy4gZm9yIENJRFIgJzEwLjAuMC4wLzIxJyByZXR1cm5zIDIxXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG1hc2s6IG51bWJlcjtcblxuICAgIC8qXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBJUCBhZGRyZXNzZXMgaW4gdGhlIENJRFJcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbmV0d29ya1NpemU6IG51bWJlcjtcblxuICAgIC8qXG4gICAgICogVGhlIG5ldHdvcmsgYWRkcmVzcyBwcm92aWRlZCBpbiBDSURSIGNyZWF0aW9uIG9mZnNldCBieSB0aGUgTmV0c2l6ZSAtMVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmV0d29ya0FkZHJlc3M6IG51bWJlcjtcblxuICAgIC8qXG4gICAgICogUGFyc2VzIGVpdGhlciBDSURSIG5vdGF0aW9uIFN0cmluZyBvciB0d28gbnVtYmVycyByZXByZXNlbnRpbmcgdGhlIElQXG4gICAgICogc3BhY2VcbiAgICAgKlxuICAgICAqIGNpZHIgZXhwZWN0cyBhIHN0cmluZyAnMTAuMC4wLjAvMTYnXG4gICAgICogaXBBZGRyZXNzIGV4cGVjdHMgYSBudW1iZXJcbiAgICAgKiBtYXNrIGV4cGVjdHMgYSBudW1iZXJcbiAgICAgKlxuICAgICAqIElmIHRoZSBnaXZlbiBgY2lkcmAgb3IgYGlwQWRkcmVzc2AgaXMgbm90IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJsb2NrLFxuICAgICAqIHRoZW4gdGhlIG5leHQgYXZhaWFibGUgYmxvY2sgd2lsbCBiZSByZXR1cm5lZC4gRm9yIGV4YW1wbGUsIGlmXG4gICAgICogYDEwLjAuMy4xLzI4YCBpcyBnaXZlbiB0aGUgcmV0dXJuZWQgYmxvY2sgd2lsbCByZXByZXNlbnQgYDEwLjAuMy4xNi8yOGAuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY2lkcjogc3RyaW5nKVxuICAgIGNvbnN0cnVjdG9yKGlwQWRkcmVzczogbnVtYmVyLCBtYXNrOiBudW1iZXIpXG4gICAgY29uc3RydWN0b3IoaXBBZGRyZXNzT3JDaWRyOiBzdHJpbmcgfCBudW1iZXIsIG1hc2s/OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpcEFkZHJlc3NPckNpZHIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2sgPSBwYXJzZUludChpcEFkZHJlc3NPckNpZHIuc3BsaXQoJy8nKVsxXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5uZXR3b3JrQWRkcmVzcyA9IE5ldHdvcmtVdGlscy5pcFRvTnVtKGlwQWRkcmVzc09yQ2lkci5zcGxpdCgnLycpWzBdKSArXG4gICAgICAgICAgICAgICAgQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldHNpemUodGhpcy5tYXNrKSAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1hc2sgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrID0gbWFzaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZVxuICAgICAgICAgICAgICAgIHRoaXMubWFzayA9IDE2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5uZXR3b3JrQWRkcmVzcyA9IGlwQWRkcmVzc09yQ2lkciArIENpZHJCbG9jay5jYWxjdWxhdGVOZXRzaXplKHRoaXMubWFzaykgLSAxO1xuICAgICAgICAgICAgdGhpcy5uZXR3b3JrU2l6ZSA9IDIgKiogKDMyIC0gdGhpcy5tYXNrKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5ldHdvcmtTaXplID0gMiAqKiAoMzIgLSB0aGlzLm1hc2spO1xuICAgICAgICB0aGlzLmNpZHIgPSBgJHt0aGlzLm1pbklwKCl9LyR7dGhpcy5tYXNrfWA7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBUaGUgbWF4aW11bSBJUCBpbiB0aGUgQ0lEUiBCbGNvayBlLmcuICcxMC4wLjguMjU1J1xuICAgICAqL1xuICAgIHB1YmxpYyBtYXhJcCgpOiBzdHJpbmcge1xuICAgICAgICAvLyBtaW4gKyAoMl4oMzItbWFzaykpIC0gMSBbemVybyBuZWVkcyB0byBjb3VudF1cbiAgICAgICAgcmV0dXJuIE5ldHdvcmtVdGlscy5udW1Ub0lwKHRoaXMubWF4QWRkcmVzcygpKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFRoZSBtaW5pbXVtIElQIGluIHRoZSBDSURSIEJsY29rIGUuZy4gJzEwLjAuMC4wJ1xuICAgICAqL1xuICAgIHB1YmxpYyBtaW5JcCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gTmV0d29ya1V0aWxzLm51bVRvSXAodGhpcy5taW5BZGRyZXNzKCkpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgbWluaW11bSBJUHY0IGFkZHJlc3NcbiAgICAgKi9cbiAgICBwdWJsaWMgbWluQWRkcmVzcygpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBkaXYgPSB0aGlzLm5ldHdvcmtBZGRyZXNzICUgdGhpcy5uZXR3b3JrU2l6ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV0d29ya0FkZHJlc3MgLSBkaXY7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBtYXhpbXVtIElQdjQgYWRkcmVzc1xuICAgICAqL1xuICAgIHB1YmxpYyBtYXhBZGRyZXNzKCk6IG51bWJlciB7XG4gICAgICAgIC8vIG1pbiArICgyXigzMi1tYXNrKSkgLSAxIFt6ZXJvIG5lZWRzIHRvIGNvdW50XVxuICAgICAgICByZXR1cm4gdGhpcy5taW5BZGRyZXNzKCkgKyB0aGlzLm5ldHdvcmtTaXplIC0gMTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJldHVybnMgdGhlIG5leHQgQ0lEUiBCbG9jayBvZiB0aGUgc2FtZSBtYXNrIHNpemVcbiAgICAgKi9cbiAgICBwdWJsaWMgbmV4dEJsb2NrKCk6IENpZHJCbG9jayB7XG4gICAgICAgIHJldHVybiBuZXcgQ2lkckJsb2NrKHRoaXMubWF4QWRkcmVzcygpICsgMSwgdGhpcy5tYXNrKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIENpZHJCbG9jayBmdWxseSBjb250YWlucyB0aGUgcHJvdmlkZWQgQ2lkckJsb2NrXG4gICAgICovXG4gICAgcHVibGljIGNvbnRhaW5zQ2lkcihvdGhlcjogQ2lkckJsb2NrKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5tYXhBZGRyZXNzKCkgPj0gb3RoZXIubWF4QWRkcmVzcygpKSAmJlxuICAgICAgICAgICAgKHRoaXMubWluQWRkcmVzcygpIDw9IG90aGVyLm1pbkFkZHJlc3MoKSk7XG4gICAgfVxufVxuIl19

@@ -1,4 +0,5 @@

import { Construct, Token } from '@aws-cdk/cdk';
import { IConnectionPeer, IPortRange } from './connection';
import { SecurityGroupId, SecurityGroupVpcId } from './ec2.generated';
import { Construct } from '@aws-cdk/cdk';
import { Connections, IConnectable } from './connections';
import { SecurityGroupId, SecurityGroupName, SecurityGroupVpcId } from './ec2.generated';
import { IPortRange, ISecurityGroupRule } from './security-group-rule';
import { VpcNetworkRef } from './vpc-ref';

@@ -12,20 +13,24 @@ export interface SecurityGroupRefProps {

/**
* Basic interface for security groups
*/
export interface ISecurityGroup extends IConnectionPeer {
readonly securityGroupId: SecurityGroupId;
addIngressRule(peer: IConnectionPeer, connection: IPortRange, description: string): void;
addEgressRule(peer: IConnectionPeer, connection: IPortRange, description: string): void;
}
/**
* A SecurityGroup that is not created in this template
*/
export declare class SecurityGroupRef extends Construct implements ISecurityGroup {
readonly securityGroupId: SecurityGroupId;
export declare abstract class SecurityGroupRef extends Construct implements ISecurityGroupRule, IConnectable {
/**
* Import an existing SecurityGroup
*/
static import(parent: Construct, id: string, props: SecurityGroupRefProps): SecurityGroupRef;
abstract readonly securityGroupId: SecurityGroupId;
readonly canInlineRule: boolean;
constructor(parent: Construct, name: string, props: SecurityGroupRefProps);
addIngressRule(peer: IConnectionPeer, connection: IPortRange, description: string): void;
addEgressRule(peer: IConnectionPeer, connection: IPortRange, description: string): void;
readonly connections: Connections;
/**
* FIXME: Where to place this??
*/
readonly defaultPortRange?: IPortRange;
addIngressRule(peer: ISecurityGroupRule, connection: IPortRange, description: string): void;
addEgressRule(peer: ISecurityGroupRule, connection: IPortRange, description: string): void;
toIngressRuleJSON(): any;
toEgressRuleJSON(): any;
/**
* Export this SecurityGroup for use in a different Stack
*/
export(): SecurityGroupRefProps;
}

@@ -71,2 +76,6 @@ export interface SecurityGroupProps {

readonly vpcId: SecurityGroupVpcId;
/**
* The ID of the security group
*/
readonly securityGroupId: SecurityGroupId;
private readonly securityGroup;

@@ -76,4 +85,4 @@ private readonly directIngressRules;

constructor(parent: Construct, name: string, props: SecurityGroupProps);
addIngressRule(peer: IConnectionPeer, connection: IPortRange, description: string): void;
addEgressRule(peer: IConnectionPeer, connection: IPortRange, description: string): void;
addIngressRule(peer: ISecurityGroupRule, connection: IPortRange, description: string): void;
addEgressRule(peer: ISecurityGroupRule, connection: IPortRange, description: string): void;
/**

@@ -96,4 +105,2 @@ * Add a direct ingress rule

}
export declare class SecurityGroupName extends Token {
}
export interface ConnectionRule {

@@ -100,0 +107,0 @@ /**

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const cdk_1 = require("@aws-cdk/cdk");
const connections_1 = require("./connections");
const ec2_generated_1 = require("./ec2.generated");

@@ -10,7 +11,13 @@ const util_1 = require("./util");

class SecurityGroupRef extends cdk_1.Construct {
constructor(parent, name, props) {
super(parent, name);
constructor() {
super(...arguments);
this.canInlineRule = false;
this.securityGroupId = props.securityGroupId;
this.connections = new connections_1.Connections({ securityGroup: this });
}
/**
* Import an existing SecurityGroup
*/
static import(parent, id, props) {
return new ImportedSecurityGroup(parent, id, props);
}
addIngressRule(peer, connection, description) {

@@ -28,2 +35,10 @@ new ec2_generated_1.cloudformation.SecurityGroupIngressResource(this, util_1.slugify(description), Object.assign({ groupId: this.securityGroupId }, peer.toIngressRuleJSON(), connection.toRuleJSON(), { description }));

}
/**
* Export this SecurityGroup for use in a different Stack
*/
export() {
return {
securityGroupId: new ec2_generated_1.SecurityGroupId(new cdk_1.Output(this, 'SecurityGroupId', { value: this.securityGroupId }).makeImportValue())
};
}
}

@@ -40,3 +55,3 @@ exports.SecurityGroupRef = SecurityGroupRef;

constructor(parent, name, props) {
super(parent, name, { securityGroupId: new cdk_1.Token(() => this.securityGroup.securityGroupId) });
super(parent, name);
this.directIngressRules = [];

@@ -52,2 +67,3 @@ this.directEgressRules = [];

});
this.securityGroupId = this.securityGroup.securityGroupId;
this.groupName = this.securityGroup.ref;

@@ -100,5 +116,11 @@ this.vpcId = this.securityGroup.securityGroupVpcId;

exports.SecurityGroup = SecurityGroup;
class SecurityGroupName extends cdk_1.Token {
/**
* A SecurityGroup that hasn't been created here
*/
class ImportedSecurityGroup extends SecurityGroupRef {
constructor(parent, name, props) {
super(parent, name);
this.securityGroupId = props.securityGroupId;
}
}
exports.SecurityGroupName = SecurityGroupName;
/**

@@ -129,2 +151,2 @@ * Compare two ingress rules for equality the same way CloudFormation would (discarding description)

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZWN1cml0eS1ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUFnRDtBQUVoRCxtREFBc0Y7QUFDdEYsaUNBQWlDO0FBb0JqQzs7R0FFRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsZUFBUztJQUkzQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQTRCO1FBQ3JFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFIUixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUtsQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7SUFDakQsQ0FBQztJQUVNLGNBQWMsQ0FBQyxJQUFxQixFQUFFLFVBQXNCLEVBQUUsV0FBbUI7UUFDcEYsSUFBSSw4QkFBYyxDQUFDLDRCQUE0QixDQUFDLElBQUksRUFBRSxjQUFPLENBQUMsV0FBVyxDQUFDLGtCQUN0RSxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsSUFDMUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQ3hCLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFDMUIsV0FBVyxJQUNiLENBQUM7SUFDUCxDQUFDO0lBRU0sYUFBYSxDQUFDLElBQXFCLEVBQUUsVUFBc0IsRUFBRSxXQUFtQjtRQUNuRixJQUFJLDhCQUFjLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLGNBQU8sQ0FBQyxXQUFXLENBQUMsa0JBQ3JFLE9BQU8sRUFBRSxJQUFJLENBQUMsZUFBZSxJQUMxQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFDdkIsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUMxQixXQUFXLElBQ2IsQ0FBQztJQUNQLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBRU0sZ0JBQWdCO1FBQ25CLE9BQU8s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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZWN1cml0eS1ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUF3RDtBQUN4RCwrQ0FBMEQ7QUFDMUQsbURBQXlHO0FBRXpHLGlDQUFpQztBQVVqQzs7R0FFRztBQUNILE1BQXNCLGdCQUFpQixTQUFRLGVBQVM7SUFBeEQ7O1FBU29CLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGdCQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUEwQzNFLENBQUM7SUFuREc7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQWlCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQzVFLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFXTSxjQUFjLENBQUMsSUFBd0IsRUFBRSxVQUFzQixFQUFFLFdBQW1CO1FBQ3ZGLElBQUksOEJBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsY0FBTyxDQUFDLFdBQVcsQ0FBQyxrQkFDdEUsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLElBQzFCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUN4QixVQUFVLENBQUMsVUFBVSxFQUFFLElBQzFCLFdBQVcsSUFDYixDQUFDO0lBQ1AsQ0FBQztJQUVNLGFBQWEsQ0FBQyxJQUF3QixFQUFFLFVBQXNCLEVBQUUsV0FBbUI7UUFDdEYsSUFBSSw4QkFBYyxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxjQUFPLENBQUMsV0FBVyxDQUFDLGtCQUNyRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsSUFDMUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQ3ZCLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFDMUIsV0FBVyxJQUNiLENBQUM7SUFDUCxD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QU0sS0FBSyxDQUFDLENBQUMsTUFBTTtXQUNyQixDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxVQUFVO1dBQzdCLENBQUMsQ0FBQyxxQkFBcUIsS0FBSyxDQUFDLENBQUMscUJBQXFCO1dBQ25ELENBQUMsQ0FBQyx1QkFBdUIsS0FBSyxDQUFDLENBQUMsdUJBQXVCO1dBQ3ZELENBQUMsQ0FBQywwQkFBMEIsS0FBSyxDQUFDLENBQUMsMEJBQTBCLENBQUM7QUFDekUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFzRCxFQUFFLENBQXNEO0lBQ3BJLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtXQUNyQixDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRO1dBQ3pCLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVE7V0FDekIsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtXQUNyQixDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxVQUFVO1dBQzdCLENBQUMsQ0FBQyx1QkFBdUIsS0FBSyxDQUFDLENBQUMsdUJBQXVCO1dBQ3ZELENBQUMsQ0FBQywwQkFBMEIsS0FBSyxDQUFDLENBQUMsMEJBQTBCLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCwgT3V0cHV0LCBUb2tlbiB9IGZyb20gJ0Bhd3MtY2RrL2Nkayc7XG5pbXBvcnQgeyBDb25uZWN0aW9ucywgSUNvbm5lY3RhYmxlIH0gZnJvbSAnLi9jb25uZWN0aW9ucyc7XG5pbXBvcnQgeyBjbG91ZGZvcm1hdGlvbiwgU2VjdXJpdHlHcm91cElkLCBTZWN1cml0eUdyb3VwTmFtZSwgU2VjdXJpdHlHcm91cFZwY0lkIH0gZnJvbSAnLi9lYzIuZ2VuZXJhdGVkJztcbmltcG9ydCB7IElQb3J0UmFuZ2UsIElTZWN1cml0eUdyb3VwUnVsZSB9IGZyb20gJy4vc2VjdXJpdHktZ3JvdXAtcnVsZSc7XG5pbXBvcnQgeyBzbHVnaWZ5IH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IFZwY05ldHdvcmtSZWYgfSBmcm9tICcuL3ZwYy1yZWYnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5R3JvdXBSZWZQcm9wcyB7XG4gICAgLyoqXG4gICAgICogSUQgb2Ygc2VjdXJpdHkgZ3JvdXBcbiAgICAgKi9cbiAgICBzZWN1cml0eUdyb3VwSWQ6IFNlY3VyaXR5R3JvdXBJZDtcbn1cblxuLyoqXG4gKiBBIFNlY3VyaXR5R3JvdXAgdGhhdCBpcyBub3QgY3JlYXRlZCBpbiB0aGlzIHRlbXBsYXRlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZWN1cml0eUdyb3VwUmVmIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVNlY3VyaXR5R3JvdXBSdWxlLCBJQ29ubmVjdGFibGUge1xuICAgIC8qKlxuICAgICAqIEltcG9ydCBhbiBleGlzdGluZyBTZWN1cml0eUdyb3VwXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBpbXBvcnQocGFyZW50OiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTZWN1cml0eUdyb3VwUmVmUHJvcHMpOiBTZWN1cml0eUdyb3VwUmVmIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbXBvcnRlZFNlY3VyaXR5R3JvdXAocGFyZW50LCBpZCwgcHJvcHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzZWN1cml0eUdyb3VwSWQ6IFNlY3VyaXR5R3JvdXBJZDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY2FuSW5saW5lUnVsZSA9IGZhbHNlO1xuICAgIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9ucyA9IG5ldyBDb25uZWN0aW9ucyh7IHNlY3VyaXR5R3JvdXA6IHRoaXMgfSk7XG5cbiAgICAvKipcbiAgICAgKiBGSVhNRTogV2hlcmUgdG8gcGxhY2UgdGhpcz8/XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRQb3J0UmFuZ2U/OiBJUG9ydFJhbmdlO1xuXG4gICAgcHVibGljIGFkZEluZ3Jlc3NSdWxlKHBlZXI6IElTZWN1cml0eUdyb3VwUnVsZSwgY29ubmVjdGlvbjogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgICAgICBuZXcgY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cEluZ3Jlc3NSZXNvdXJjZSh0aGlzLCBzbHVnaWZ5KGRlc2NyaXB0aW9uKSwge1xuICAgICAgICAgICAgZ3JvdXBJZDogdGhpcy5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgICAgICAuLi5wZWVyLnRvSW5ncmVzc1J1bGVKU09OKCksXG4gICAgICAgICAgICAuLi5jb25uZWN0aW9uLnRvUnVsZUpTT04oKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRFZ3Jlc3NSdWxlKHBlZXI6IElTZWN1cml0eUdyb3VwUnVsZSwgY29ubmVjdGlvbjogSVBvcnRSYW5nZSwgZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgICAgICBuZXcgY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cEVncmVzc1Jlc291cmNlKHRoaXMsIHNsdWdpZnkoZGVzY3JpcHRpb24pLCB7XG4gICAgICAgICAgICBncm91cElkOiB0aGlzLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgICAgIC4uLnBlZXIudG9FZ3Jlc3NSdWxlSlNPTigpLFxuICAgICAgICAgICAgLi4uY29ubmVjdGlvbi50b1J1bGVKU09OKCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9JbmdyZXNzUnVsZUpTT04oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHsgc291cmNlU2VjdXJpdHlHcm91cElkOiB0aGlzLnNlY3VyaXR5R3JvdXBJZCB9O1xuICAgIH1cblxuICAgIHB1YmxpYyB0b0VncmVzc1J1bGVKU09OKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB7IGRlc3RpbmF0aW9uU2VjdXJpdHlHcm91cElkOiB0aGlzLnNlY3VyaXR5R3JvdXBJZCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cG9ydCB0aGlzIFNlY3VyaXR5R3JvdXAgZm9yIHVzZSBpbiBhIGRpZmZlcmVudCBTdGFja1xuICAgICAqL1xuICAgIHB1YmxpYyBleHBvcnQoKTogU2VjdXJpdHlHcm91cFJlZlByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlY3VyaXR5R3JvdXBJZDogbmV3IFNlY3VyaXR5R3JvdXBJZChuZXcgT3V0cHV0KHRoaXMsICdTZWN1cml0eUdyb3VwSWQnLCB7IHZhbHVlOiB0aGlzLnNlY3VyaXR5R3JvdXBJZCB9KS5tYWtlSW1wb3J0VmFsdWUoKSlcbiAgICAgICAgfTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUdyb3VwUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBzZWN1cml0eSBncm91cC4gRm9yIHZhbGlkIHZhbHVlcywgc2VlIHRoZSBHcm91cE5hbWVcbiAgICAgKiBwYXJhbWV0ZXIgb2YgdGhlIENyZWF0ZVNlY3VyaXR5R3JvdXAgYWN0aW9uIGluIHRoZSBBbWF6b24gRUMyIEFQSVxuICAgICAqIFJlZmVyZW5jZS5cbiAgICAgKlxuICAgICAqIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byB1c2UgYW4gZXhwbGljaXQgZ3JvdXAgbmFtZS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IElmIHlvdSBkb24ndCBzcGVjaWZ5IGEgR3JvdXBOYW1lLCBBV1MgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGVzIGFcbiAgICAgKiB1bmlxdWUgcGh5c2ljYWwgSUQgYW5kIHVzZXMgdGhhdCBJRCBmb3IgdGhlIGdyb3VwIG5hbWUuXG4gICAgICovXG4gICAgZ3JvdXBOYW1lPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgc2VjdXJpdHkgZ3JvdXAuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBUaGUgZGVmYXVsdCBuYW1lIHdpbGwgYmUgdGhlIGNvbnN0cnVjdCdzIENESyBwYXRoLlxuICAgICAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIFZQQyBpbiB3aGljaCB0byBjcmVhdGUgdGhlIHNlY3VyaXR5IGdyb3VwLlxuICAgICAqL1xuICAgIHZwYzogVnBjTmV0d29ya1JlZjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIEFtYXpvbiBFQzIgc2VjdXJpdHkgZ3JvdXAgd2l0aGluIGEgVlBDLlxuICpcbiAqIFRoaXMgY2xhc3MgaGFzIGFuIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9uIG92ZXIgU2VjdXJpdHlHcm91cFJlZiB0aGF0IGl0IGNhbiBhbHNvIGNyZWF0ZVxuICogaW5saW5lIGluZ3Jlc3MgYW5kIGVncmVzcyBydWxlICh3aGljaCBzYXZlcyBvbiB0aGUgdG90YWwgbnVtYmVyIG9mIHJlc291cmNlcyBpbnNpZGVcbiAqIHRoZSB0ZW1wbGF0ZSkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWN1cml0eUdyb3VwIGV4dGVuZHMgU2VjdXJpdHlHcm91cFJlZiB7XG4gICAgLyoqXG4gICAgICogQW4gYXR0cmlidXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgc2VjdXJpdHkgZ3JvdXAgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZ3JvdXBOYW1lOiBTZWN1cml0eUdyb3VwTmFtZTtcblxuICAgIC8qKlxuICAgICAqIEFuIGF0dHJpYnV0ZSB0aGF0IHJlcHJlc2VudHMgdGhlIHBoeXNpY2FsIFZQQyBJRCB0aGlzIHNlY3VyaXR5IGdyb3VwIGlzIHBhcnQgb2YuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBTZWN1cml0eUdyb3VwVnBjSWQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIHNlY3VyaXR5IGdyb3VwXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJZDogU2VjdXJpdHlHcm91cElkO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZWN1cml0eUdyb3VwOiBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwUmVzb3VyY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXJlY3RJbmdyZXNzUnVsZXM6IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZS5JbmdyZXNzUHJvcGVydHlbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0RWdyZXNzUnVsZXM6IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZS5FZ3Jlc3NQcm9wZXJ0eVtdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogU2VjdXJpdHlHcm91cFByb3BzKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgY29uc3QgZ3JvdXBEZXNjcmlwdGlvbiA9IHByb3BzLmRlc2NyaXB0aW9uIHx8IHRoaXMucGF0aDtcbiAgICAgICAgdGhpcy5zZWN1cml0eUdyb3VwID0gbmV3IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICAgICAgICBncm91cE5hbWU6IHByb3BzLmdyb3VwTmFtZSxcbiAgICAgICAgICAgIGdyb3VwRGVzY3JpcHRpb24sXG4gICAgICAgICAgICBzZWN1cml0eUdyb3VwSW5ncmVzczogbmV3IFRva2VuKCgpID0+IHRoaXMuZGlyZWN0SW5ncmVzc1J1bGVzKSxcbiAgICAgICAgICAgIHNlY3VyaXR5R3JvdXBFZ3Jlc3M6IG5ldyBUb2tlbigoKSA9PiB0aGlzLmRpcmVjdEVncmVzc1J1bGVzKSxcbiAgICAgICAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2VjdXJpdHlHcm91cElkID0gdGhpcy5zZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBJZDtcbiAgICAgICAgdGhpcy5ncm91cE5hbWUgPSB0aGlzLnNlY3VyaXR5R3JvdXAucmVmO1xuICAgICAgICB0aGlzLnZwY0lkID0gdGhpcy5zZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBWcGNJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5ncmVzc1J1bGUocGVlcjogSVNlY3VyaXR5R3JvdXBSdWxlLCBjb25uZWN0aW9uOiBJUG9ydFJhbmdlLCBkZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgICAgIGlmICghcGVlci5jYW5JbmxpbmVSdWxlIHx8ICFjb25uZWN0aW9uLmNhbklubGluZVJ1bGUpIHtcbiAgICAgICAgICAgIHN1cGVyLmFkZEluZ3Jlc3NSdWxlKHBlZXIsIGNvbm5lY3Rpb24sIGRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkRGlyZWN0SW5ncmVzc1J1bGUoe1xuICAgICAgICAgICAgLi4ucGVlci50b0luZ3Jlc3NSdWxlSlNPTigpLFxuICAgICAgICAgICAgLi4uY29ubmVjdGlvbi50b1J1bGVKU09OKCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRWdyZXNzUnVsZShwZWVyOiBJU2VjdXJpdHlHcm91cFJ1bGUsIGNvbm5lY3Rpb246IElQb3J0UmFuZ2UsIGRlc2NyaXB0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCFwZWVyLmNhbklubGluZVJ1bGUgfHwgIWNvbm5lY3Rpb24uY2FuSW5saW5lUnVsZSkge1xuICAgICAgICAgICAgc3VwZXIuYWRkRWdyZXNzUnVsZShwZWVyLCBjb25uZWN0aW9uLCBkZXNjcmlwdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZERpcmVjdEVncmVzc1J1bGUoe1xuICAgICAgICAgICAgLi4ucGVlci50b0luZ3Jlc3NSdWxlSlNPTigpLFxuICAgICAgICAgICAgLi4uY29ubmVjdGlvbi50b1J1bGVKU09OKCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBkaXJlY3QgaW5ncmVzcyBydWxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGREaXJlY3RJbmdyZXNzUnVsZShydWxlOiBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwUmVzb3VyY2UuSW5ncmVzc1Byb3BlcnR5KSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNJbmdyZXNzUnVsZShydWxlKSkge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3RJbmdyZXNzUnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBpbmdyZXNzIHJ1bGUgZXhpc3RzIG9uIHRoZSBncm91cFxuICAgICAqL1xuICAgIHByaXZhdGUgaGFzSW5ncmVzc1J1bGUocnVsZTogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlLkluZ3Jlc3NQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3RJbmdyZXNzUnVsZXMuZmluZEluZGV4KHIgPT4gaW5ncmVzc1J1bGVzRXF1YWwociwgcnVsZSkpID4gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGEgZGlyZWN0IGVncmVzcyBydWxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGREaXJlY3RFZ3Jlc3NSdWxlKHJ1bGU6IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZS5FZ3Jlc3NQcm9wZXJ0eSkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzRWdyZXNzUnVsZShydWxlKSkge1xuICAgICAgICAgICAgdGhpcy5kaXJlY3RFZ3Jlc3NSdWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGVncmVzcyBydWxlIGV4aXN0cyBvbiB0aGUgZ3JvdXBcbiAgICAgKi9cbiAgICBwcml2YXRlIGhhc0VncmVzc1J1bGUocnVsZTogY2xvdWRmb3JtYXRpb24uU2VjdXJpdHlHcm91cFJlc291cmNlLkVncmVzc1Byb3BlcnR5KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdEVncmVzc1J1bGVzLmZpbmRJbmRleChyID0+IGVncmVzc1J1bGVzRXF1YWwociwgcnVsZSkpID4gLTE7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25SdWxlIHtcbiAgICAvKipcbiAgICAgKiBUaGUgSVAgcHJvdG9jb2wgbmFtZSAodGNwLCB1ZHAsIGljbXApIG9yIG51bWJlciAoc2VlIFByb3RvY29sIE51bWJlcnMpLlxuICAgICAqIFVzZSAtMSB0byBzcGVjaWZ5IGFsbCBwcm90b2NvbHMuIElmIHlvdSBzcGVjaWZ5IC0xLCBvciBhIHByb3RvY29sIG51bWJlclxuICAgICAqIG90aGVyIHRoYW4gdGNwLCB1ZHAsIGljbXAsIG9yIDU4IChJQ01QdjYpLCB0cmFmZmljIG9uIGFsbCBwb3J0cyBpc1xuICAgICAqIGFsbG93ZWQsIHJlZ2FyZGxlc3Mgb2YgYW55IHBvcnRzIHlvdSBzcGVjaWZ5LiBGb3IgdGNwLCB1ZHAsIGFuZCBpY21wLCB5b3VcbiAgICAgKiBtdXN0IHNwZWNpZnkgYSBwb3J0IHJhbmdlLiBGb3IgcHJvdG9jb2wgNTggKElDTVB2NiksIHlvdSBjYW4gb3B0aW9uYWxseVxuICAgICAqIHNwZWNpZnkgYSBwb3J0IHJhbmdlOyBpZiB5b3UgZG9uJ3QsIHRyYWZmaWMgZm9yIGFsbCB0eXBlcyBhbmQgY29kZXMgaXNcbiAgICAgKiBhbGxvd2VkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdGNwXG4gICAgICovXG4gICAgcHJvdG9jb2w/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTdGFydCBvZiBwb3J0IHJhbmdlIGZvciB0aGUgVENQIGFuZCBVRFAgcHJvdG9jb2xzLCBvciBhbiBJQ01QIHR5cGUgbnVtYmVyLlxuICAgICAqXG4gICAgICogSWYgeW91IHNwZWNpZnkgaWNtcCBmb3IgdGhlIElwUHJvdG9jb2wgcHJvcGVydHksIHlvdSBjYW4gc3BlY2lmeVxuICAgICAqIC0xIGFzIGEgd2lsZGNhcmQgKGkuZS4sIGFueSBJQ01QIHR5cGUgbnVtYmVyKS5cbiAgICAgKi9cbiAgICBmcm9tUG9ydDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogRW5kIG9mIHBvcnQgcmFuZ2UgZm9yIHRoZSBUQ1AgYW5kIFVEUCBwcm90b2NvbHMsIG9yIGFuIElDTVAgY29kZS5cbiAgICAgKlxuICAgICAqIElmIHlvdSBzcGVjaWZ5IGljbXAgZm9yIHRoZSBJcFByb3RvY29sIHByb3BlcnR5LCB5b3UgY2FuIHNwZWNpZnkgLTEgYXMgYVxuICAgICAqIHdpbGRjYXJkIChpLmUuLCBhbnkgSUNNUCBjb2RlKS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IElmIHRvUG9ydCBpcyBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGJlIHRoZSBzYW1lIGFzIGZyb21Qb3J0LlxuICAgICAqL1xuICAgIHRvUG9ydD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIERlc2NyaXB0aW9uIG9mIHRoaXMgY29ubmVjdGlvbi4gSXQgaXMgYXBwbGllZCB0byBib3RoIHRoZSBpbmdyZXNzIHJ1bGVcbiAgICAgKiBhbmQgdGhlIGVncmVzcyBydWxlLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgTm8gZGVzY3JpcHRpb25cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIFNlY3VyaXR5R3JvdXAgdGhhdCBoYXNuJ3QgYmVlbiBjcmVhdGVkIGhlcmVcbiAqL1xuY2xhc3MgSW1wb3J0ZWRTZWN1cml0eUdyb3VwIGV4dGVuZHMgU2VjdXJpdHlHcm91cFJlZiB7XG4gICAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBJZDogU2VjdXJpdHlHcm91cElkO1xuXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFNlY3VyaXR5R3JvdXBSZWZQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgICAgIHRoaXMuc2VjdXJpdHlHcm91cElkID0gcHJvcHMuc2VjdXJpdHlHcm91cElkO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDb21wYXJlIHR3byBpbmdyZXNzIHJ1bGVzIGZvciBlcXVhbGl0eSB0aGUgc2FtZSB3YXkgQ2xvdWRGb3JtYXRpb24gd291bGQgKGRpc2NhcmRpbmcgZGVzY3JpcHRpb24pXG4gKi9cbmZ1bmN0aW9uIGluZ3Jlc3NSdWxlc0VxdWFsKGE6IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZS5JbmdyZXNzUHJvcGVydHksIGI6IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZS5JbmdyZXNzUHJvcGVydHkpIHtcbiAgICByZXR1cm4gYS5jaWRySXAgPT09IGIuY2lkcklwXG4gICAgICAgICYmIGEuY2lkcklwdjYgPT09IGIuY2lkcklwdjZcbiAgICAgICAgJiYgYS5mcm9tUG9ydCA9PT0gYi5mcm9tUG9ydFxuICAgICAgICAmJiBhLnRvUG9ydCA9PT0gYi50b1BvcnRcbiAgICAgICAgJiYgYS5pcFByb3RvY29sID09PSBiLmlwUHJvdG9jb2xcbiAgICAgICAgJiYgYS5zb3VyY2VTZWN1cml0eUdyb3VwSWQgPT09IGIuc291cmNlU2VjdXJpdHlHcm91cElkXG4gICAgICAgICYmIGEuc291cmNlU2VjdXJpdHlHcm91cE5hbWUgPT09IGIuc291cmNlU2VjdXJpdHlHcm91cE5hbWVcbiAgICAgICAgJiYgYS5zb3VyY2VTZWN1cml0eUdyb3VwT3duZXJJZCA9PT0gYi5zb3VyY2VTZWN1cml0eUdyb3VwT3duZXJJZDtcbn1cblxuLyoqXG4gKiBDb21wYXJlIHR3byBlZ3Jlc3MgcnVsZXMgZm9yIGVxdWFsaXR5IHRoZSBzYW1lIHdheSBDbG91ZEZvcm1hdGlvbiB3b3VsZCAoZGlzY2FyZGluZyBkZXNjcmlwdGlvbilcbiAqL1xuZnVuY3Rpb24gZWdyZXNzUnVsZXNFcXVhbChhOiBjbG91ZGZvcm1hdGlvbi5TZWN1cml0eUdyb3VwUmVzb3VyY2UuRWdyZXNzUHJvcGVydHksIGI6IGNsb3VkZm9ybWF0aW9uLlNlY3VyaXR5R3JvdXBSZXNvdXJjZS5FZ3Jlc3NQcm9wZXJ0eSkge1xuICAgIHJldHVybiBhLmNpZHJJcCA9PT0gYi5jaWRySXBcbiAgICAgICAgJiYgYS5jaWRySXB2NiA9PT0gYi5jaWRySXB2NlxuICAgICAgICAmJiBhLmZyb21Qb3J0ID09PSBiLmZyb21Qb3J0XG4gICAgICAgICYmIGEudG9Qb3J0ID09PSBiLnRvUG9ydFxuICAgICAgICAmJiBhLmlwUHJvdG9jb2wgPT09IGIuaXBQcm90b2NvbFxuICAgICAgICAmJiBhLmRlc3RpbmF0aW9uUHJlZml4TGlzdElkID09PSBiLmRlc3RpbmF0aW9uUHJlZml4TGlzdElkXG4gICAgICAgICYmIGEuZGVzdGluYXRpb25TZWN1cml0eUdyb3VwSWQgPT09IGIuZGVzdGluYXRpb25TZWN1cml0eUdyb3VwSWQ7XG59XG4iXX0=

@@ -0,1 +1,4 @@

import cdk = require('@aws-cdk/cdk');
import { SubnetId } from './ec2.generated';
import { SubnetType, VpcSubnetRef } from "./vpc-ref";
/**

@@ -7,1 +10,56 @@ * Turn an arbitrary string into one that can be used as a CloudFormation identifier by stripping special characters

export declare function slugify(x: string): string;
/**
* The default names for every subnet type
*/
export declare const DEFAULT_SUBNET_NAME: {
[SubnetType.Public]: string;
[SubnetType.Private]: string;
[SubnetType.Isolated]: string;
};
/**
* Return a subnet name from its construct ID
*
* All subnet names look like NAME <> "Subnet" <> INDEX
*/
export declare function subnetName(subnet: VpcSubnetRef): string;
/**
* Make the subnet construct ID from a name and number
*/
export declare function subnetId(name: string, i: number): string;
/**
* Helper class to export/import groups of subnets
*/
export declare class ExportSubnetGroup {
private readonly subnets;
private readonly type;
private readonly azs;
readonly ids?: SubnetId[];
readonly names?: string[];
private readonly groups;
constructor(parent: cdk.Construct, exportName: string, subnets: VpcSubnetRef[], type: SubnetType, azs: number);
private exportIds;
/**
* Return the list of subnet names if they're not equal to the default
*/
private exportNames;
}
export declare class ImportSubnetGroup {
private readonly availabilityZones;
private readonly subnetIds;
private readonly names;
private readonly groups;
constructor(subnetIds: SubnetId[] | undefined, names: string[] | undefined, type: SubnetType, availabilityZones: string[], idField: string, nameField: string);
import(parent: cdk.Construct): VpcSubnetRef[];
/**
* Return a list with a name for every subnet
*/
private normalizeNames;
/**
* Return the i'th AZ
*/
private pickAZ;
}
/**
* Generate the list of numbers of [0..n)
*/
export declare function range(n: number): number[];
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const cdk = require("@aws-cdk/cdk");
const ec2_generated_1 = require("./ec2.generated");
const vpc_ref_1 = require("./vpc-ref");
/**

@@ -12,2 +15,127 @@ * Turn an arbitrary string into one that can be used as a CloudFormation identifier by stripping special characters

exports.slugify = slugify;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7OztHQUlHO0FBQ0gsU0FBZ0IsT0FBTyxDQUFDLENBQVM7SUFDN0IsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRkQsMEJBRUMifQ==
/**
* The default names for every subnet type
*/
exports.DEFAULT_SUBNET_NAME = {
[vpc_ref_1.SubnetType.Public]: 'Public',
[vpc_ref_1.SubnetType.Private]: 'Private',
[vpc_ref_1.SubnetType.Isolated]: 'Isolated',
};
/**
* Return a subnet name from its construct ID
*
* All subnet names look like NAME <> "Subnet" <> INDEX
*/
function subnetName(subnet) {
return subnet.id.replace(/Subnet\d+$/, '');
}
exports.subnetName = subnetName;
/**
* Make the subnet construct ID from a name and number
*/
function subnetId(name, i) {
return `${name}Subnet${i + 1}`;
}
exports.subnetId = subnetId;
/**
* Helper class to export/import groups of subnets
*/
class ExportSubnetGroup {
constructor(parent, exportName, subnets, type, azs) {
this.subnets = subnets;
this.type = type;
this.azs = azs;
this.groups = subnets.length / azs;
// ASSERTION
if (Math.floor(this.groups) !== this.groups) {
throw new Error(`Number of subnets (${subnets.length}) must be a multiple of number of availability zones (${azs})`);
}
this.ids = this.exportIds(parent, exportName);
this.names = this.exportNames();
}
exportIds(parent, name) {
if (this.subnets.length === 0) {
return undefined;
}
return new cdk.StringListOutput(parent, name, { values: this.subnets.map(s => s.subnetId) }).makeImportValues().map(x => new ec2_generated_1.SubnetId(x));
}
/**
* Return the list of subnet names if they're not equal to the default
*/
exportNames() {
if (this.subnets.length === 0) {
return undefined;
}
const netNames = this.subnets.map(subnetName);
// Do some assertion that the 'netNames' array is laid out like this:
//
// [ INGRESS, INGRESS, INGRESS, EGRESS, EGRESS, EGRESS, ... ]
for (let i = 0; i < netNames.length; i++) {
const k = Math.floor(i / this.azs);
if (netNames[i] !== netNames[k * this.azs]) {
throw new Error(`Subnets must be grouped by name, got: ${JSON.stringify(netNames)}`);
}
}
// Splat down to [ INGRESS, EGRESS, ... ]
const groupNames = range(this.groups).map(i => netNames[i * this.azs]);
if (groupNames.length === 1 && groupNames[0] === exports.DEFAULT_SUBNET_NAME[this.type]) {
return undefined;
}
return groupNames;
}
}
exports.ExportSubnetGroup = ExportSubnetGroup;
class ImportSubnetGroup {
constructor(subnetIds, names, type, availabilityZones, idField, nameField) {
this.availabilityZones = availabilityZones;
this.subnetIds = subnetIds || [];
this.groups = this.subnetIds.length / this.availabilityZones.length;
if (Math.floor(this.groups) !== this.groups) {
// tslint:disable-next-line:max-line-length
throw new Error(`Amount of ${idField} (${this.subnetIds.length}) must be a multiple of availability zones (${this.availabilityZones.length}).`);
}
this.names = this.normalizeNames(names, exports.DEFAULT_SUBNET_NAME[type], nameField);
}
import(parent) {
return range(this.subnetIds.length).map(i => {
const k = Math.floor(i / this.availabilityZones.length);
return vpc_ref_1.VpcSubnetRef.import(parent, subnetId(this.names[k], i), {
availabilityZone: this.pickAZ(i),
subnetId: this.subnetIds[i]
});
});
}
/**
* Return a list with a name for every subnet
*/
normalizeNames(names, defaultName, fieldName) {
// If not given, return default
if (names === undefined || names.length === 0) {
return [defaultName];
}
// If given, must match given subnets
if (names.length !== this.groups) {
throw new Error(`${fieldName} must have an entry for every corresponding subnet group, got: ${JSON.stringify(names)}`);
}
return names;
}
/**
* Return the i'th AZ
*/
pickAZ(i) {
return this.availabilityZones[i % this.availabilityZones.length];
}
}
exports.ImportSubnetGroup = ImportSubnetGroup;
/**
* Generate the list of numbers of [0..n)
*/
function range(n) {
const ret = [];
for (let i = 0; i < n; i++) {
ret.push(i);
}
return ret;
}
exports.range = range;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxvQ0FBcUM7QUFDckMsbURBQTJDO0FBQzNDLHVDQUFxRDtBQUVyRDs7OztHQUlHO0FBQ0gsU0FBZ0IsT0FBTyxDQUFDLENBQVM7SUFDN0IsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRkQsMEJBRUM7QUFFRDs7R0FFRztBQUNVLFFBQUEsbUJBQW1CLEdBQUc7SUFDL0IsQ0FBQyxvQkFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVE7SUFDN0IsQ0FBQyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVM7SUFDL0IsQ0FBQyxvQkFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVU7Q0FDcEMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxTQUFnQixVQUFVLENBQUMsTUFBb0I7SUFDM0MsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUZELGdDQUVDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixRQUFRLENBQUMsSUFBWSxFQUFFLENBQVM7SUFDNUMsT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbkMsQ0FBQztBQUZELDRCQUVDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGlCQUFpQjtJQU0xQixZQUNRLE1BQXFCLEVBQ3JCLFVBQWtCLEVBQ0QsT0FBdUIsRUFDdkIsSUFBZ0IsRUFDaEIsR0FBVztRQUZYLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUVoQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBRW5DLFlB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QUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsU0FBUyxrRUFBa0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUg7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxNQUFNLENBQUMsQ0FBUztRQUNwQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JFLENBQUM7Q0FDSjtBQXpERCw4Q0F5REM7QUFFRDs7R0FFRztBQUNILFNBQWdCLEtBQUssQ0FBQyxDQUFTO0lBQzNCLE1BQU0sR0FBRyxHQUFhLEVBQUUsQ0FBQztJQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDZjtJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQU5ELHNCQU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNkayA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2NkaycpO1xuaW1wb3J0IHsgU3VibmV0SWQgfSBmcm9tICcuL2VjMi5nZW5lcmF0ZWQnO1xuaW1wb3J0IHsgU3VibmV0VHlwZSwgVnBjU3VibmV0UmVmIH0gZnJvbSBcIi4vdnBjLXJlZlwiO1xuXG4vKipcbiAqIFR1cm4gYW4gYXJiaXRyYXJ5IHN0cmluZyBpbnRvIG9uZSB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgQ2xvdWRGb3JtYXRpb24gaWRlbnRpZmllciBieSBzdHJpcHBpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzXG4gKlxuICogKEF0IHRoZSBtb21lbnQsIG5vIGVmZm9ydHMgYXJlIHRha2VuIHRvIHByZXZlbnQgY29sbGlzc2lvbnMsIGJ1dCB3ZSBjYW4gYWRkIHRoYXQgbGF0ZXIgd2hlbiBpdCBiZWNvbWVzIG5lY2Vzc2FyeSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbHVnaWZ5KHg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHgucmVwbGFjZSgvW15hLXpBLVowLTldL2csICcnKTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBuYW1lcyBmb3IgZXZlcnkgc3VibmV0IHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1VCTkVUX05BTUUgPSB7XG4gICAgW1N1Ym5ldFR5cGUuUHVibGljXTogJ1B1YmxpYycsXG4gICAgW1N1Ym5ldFR5cGUuUHJpdmF0ZV06ICdQcml2YXRlJyxcbiAgICBbU3VibmV0VHlwZS5Jc29sYXRlZF06ICdJc29sYXRlZCcsXG59O1xuXG4vKipcbiAqIFJldHVybiBhIHN1Ym5ldCBuYW1lIGZyb20gaXRzIGNvbnN0cnVjdCBJRFxuICpcbiAqIEFsbCBzdWJuZXQgbmFtZXMgbG9vayBsaWtlIE5BTUUgPD4gXCJTdWJuZXRcIiA8PiBJTkRFWFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VibmV0TmFtZShzdWJuZXQ6IFZwY1N1Ym5ldFJlZikge1xuICAgIHJldHVybiBzdWJuZXQuaWQucmVwbGFjZSgvU3VibmV0XFxkKyQvLCAnJyk7XG59XG5cbi8qKlxuICogTWFrZSB0aGUgc3VibmV0IGNvbnN0cnVjdCBJRCBmcm9tIGEgbmFtZSBhbmQgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJuZXRJZChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgIHJldHVybiBgJHtuYW1lfVN1Ym5ldCR7aSArIDF9YDtcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gZXhwb3J0L2ltcG9ydCBncm91cHMgb2Ygc3VibmV0c1xuICovXG5leHBvcnQgY2xhc3MgRXhwb3J0U3VibmV0R3JvdXAge1xuICAgIHB1YmxpYyByZWFkb25seSBpZHM/OiBTdWJuZXRJZFtdO1xuICAgIHB1YmxpYyByZWFkb25seSBuYW1lcz86IHN0cmluZ1tdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBncm91cHM6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAgICAgcGFyZW50OiBjZGsuQ29uc3RydWN0LFxuICAgICAgICAgICAgZXhwb3J0TmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzdWJuZXRzOiBWcGNTdWJuZXRSZWZbXSxcbiAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHlwZTogU3VibmV0VHlwZSxcbiAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXpzOiBudW1iZXIpIHtcblxuICAgICAgICB0aGlzLmdyb3VwcyA9IHN1Ym5ldHMubGVuZ3RoIC8gYXpzO1xuXG4gICAgICAgIC8vIEFTU0VSVElPTlxuICAgICAgICBpZiAoTWF0aC5mbG9vcih0aGlzLmdyb3VwcykgIT09IHRoaXMuZ3JvdXBzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE51bWJlciBvZiBzdWJuZXRzICgke3N1Ym5ldHMubGVuZ3RofSkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIG51bWJlciBvZiBhdmFpbGFiaWxpdHkgem9uZXMgKCR7YXpzfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaWRzID0gdGhpcy5leHBvcnRJZHMocGFyZW50LCBleHBvcnROYW1lKTtcbiAgICAgICAgdGhpcy5uYW1lcyA9IHRoaXMuZXhwb3J0TmFtZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cG9ydElkcyhwYXJlbnQ6IGNkay5Db25zdHJ1Y3QsIG5hbWU6IHN0cmluZyk6IFN1Ym5ldElkW10gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodGhpcy5zdWJuZXRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgICAgIHJldHVybiBuZXcgY2RrLlN0cmluZ0xpc3RPdXRwdXQocGFyZW50LCBuYW1lLCB7IHZhbHVlczogdGhpcy5zdWJuZXRzLm1hcChzID0+IHMuc3VibmV0SWQpIH0pLm1ha2VJbXBvcnRWYWx1ZXMoKS5tYXAoeCA9PiBuZXcgU3VibmV0SWQoeCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbGlzdCBvZiBzdWJuZXQgbmFtZXMgaWYgdGhleSdyZSBub3QgZXF1YWwgdG8gdGhlIGRlZmF1bHRcbiAgICAgKi9cbiAgICBwcml2YXRlIGV4cG9ydE5hbWVzKCk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHRoaXMuc3VibmV0cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgICAgICBjb25zdCBuZXROYW1lcyA9IHRoaXMuc3VibmV0cy5tYXAoc3VibmV0TmFtZSk7XG5cbiAgICAgICAgLy8gRG8gc29tZSBhc3NlcnRpb24gdGhhdCB0aGUgJ25ldE5hbWVzJyBhcnJheSBpcyBsYWlkIG91dCBsaWtlIHRoaXM6XG4gICAgICAgIC8vXG4gICAgICAgIC8vIFsgSU5HUkVTUywgSU5HUkVTUywgSU5HUkVTUywgRUdSRVNTLCBFR1JFU1MsIEVHUkVTUywgLi4uIF1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXROYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgayA9IE1hdGguZmxvb3IoaSAvIHRoaXMuYXpzKTtcbiAgICAgICAgICAgIGlmIChuZXROYW1lc1tpXSAhPT0gbmV0TmFtZXNbayAqIHRoaXMuYXpzXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU3VibmV0cyBtdXN0IGJlIGdyb3VwZWQgYnkgbmFtZSwgZ290OiAke0pTT04uc3RyaW5naWZ5KG5ldE5hbWVzKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNwbGF0IGRvd24gdG8gWyBJTkdSRVNTLCBFR1JFU1MsIC4uLiBdXG4gICAgICAgIGNvbnN0IGdyb3VwTmFtZXMgPSByYW5nZSh0aGlzLmdyb3VwcykubWFwKGkgPT4gbmV0TmFtZXNbaSAqIHRoaXMuYXpzXSk7XG4gICAgICAgIGlmIChncm91cE5hbWVzLmxlbmd0aCA9PT0gMSAmJiBncm91cE5hbWVzWzBdID09PSBERUZBVUxUX1NVQk5FVF9OQU1FW3RoaXMudHlwZV0pIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gICAgICAgIHJldHVybiBncm91cE5hbWVzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEltcG9ydFN1Ym5ldEdyb3VwIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1Ym5ldElkczogU3VibmV0SWRbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hbWVzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwczogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICBzdWJuZXRJZHM6IFN1Ym5ldElkW10gfCB1bmRlZmluZWQsXG4gICAgICAgICAgICBuYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gICAgICAgICAgICB0eXBlOiBTdWJuZXRUeXBlLFxuICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhdmFpbGFiaWxpdHlab25lczogc3RyaW5nW10sXG4gICAgICAgICAgICBpZEZpZWxkOiBzdHJpbmcsXG4gICAgICAgICAgICBuYW1lRmllbGQ6IHN0cmluZykge1xuXG4gICAgICAgIHRoaXMuc3VibmV0SWRzID0gc3VibmV0SWRzIHx8IFtdO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IHRoaXMuc3VibmV0SWRzLmxlbmd0aCAvIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChNYXRoLmZsb29yKHRoaXMuZ3JvdXBzKSAhPT0gdGhpcy5ncm91cHMpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQW1vdW50IG9mICR7aWRGaWVsZH0gKCR7dGhpcy5zdWJuZXRJZHMubGVuZ3RofSkgbXVzdCBiZSBhIG11bHRpcGxlIG9mIGF2YWlsYWJpbGl0eSB6b25lcyAoJHt0aGlzLmF2YWlsYWJpbGl0eVpvbmVzLmxlbmd0aH0pLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uYW1lcyA9IHRoaXMubm9ybWFsaXplTmFtZXMobmFtZXMsIERFRkFVTFRfU1VCTkVUX05BTUVbdHlwZV0sIG5hbWVGaWVsZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGltcG9ydChwYXJlbnQ6IGNkay5Db25zdHJ1Y3QpOiBWcGNTdWJuZXRSZWZbXSB7XG4gICAgICAgIHJldHVybiByYW5nZSh0aGlzLnN1Ym5ldElkcy5sZW5ndGgpLm1hcChpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBNYXRoLmZsb29yKGkgLyB0aGlzLmF2YWlsYWJpbGl0eVpvbmVzLmxlbmd0aCk7XG4gICAgICAgICAgICByZXR1cm4gVnBjU3VibmV0UmVmLmltcG9ydChwYXJlbnQsIHN1Ym5ldElkKHRoaXMubmFtZXNba10sIGkpLCB7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy5waWNrQVooaSksXG4gICAgICAgICAgICAgICAgc3VibmV0SWQ6IHRoaXMuc3VibmV0SWRzW2ldXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgbGlzdCB3aXRoIGEgbmFtZSBmb3IgZXZlcnkgc3VibmV0XG4gICAgICovXG4gICAgcHJpdmF0ZSBub3JtYWxpemVOYW1lcyhuYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQsIGRlZmF1bHROYW1lOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIElmIG5vdCBnaXZlbiwgcmV0dXJuIGRlZmF1bHRcbiAgICAgICAgaWYgKG5hbWVzID09PSB1bmRlZmluZWQgfHwgbmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW2RlZmF1bHROYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGdpdmVuLCBtdXN0IG1hdGNoIGdpdmVuIHN1Ym5ldHNcbiAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCAhPT0gdGhpcy5ncm91cHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtmaWVsZE5hbWV9IG11c3QgaGF2ZSBhbiBlbnRyeSBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBzdWJuZXQgZ3JvdXAsIGdvdDogJHtKU09OLnN0cmluZ2lmeShuYW1lcyl9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBpJ3RoIEFaXG4gICAgICovXG4gICAgcHJpdmF0ZSBwaWNrQVooaTogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF2YWlsYWJpbGl0eVpvbmVzW2kgJSB0aGlzLmF2YWlsYWJpbGl0eVpvbmVzLmxlbmd0aF07XG4gICAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBsaXN0IG9mIG51bWJlcnMgb2YgWzAuLm4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYW5nZShuOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgY29uc3QgcmV0OiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIHJldC5wdXNoKGkpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuIl19

@@ -1,3 +0,40 @@

import { Construct, IDependable, Token } from "@aws-cdk/cdk";
import { Construct, IDependable } from "@aws-cdk/cdk";
import { SubnetId, VPCId } from "./ec2.generated";
/**
* The type of Subnet
*/
export declare enum SubnetType {
/**
* Isolated Subnets do not route Outbound traffic
*
* This can be good for subnets with RDS or
* Elasticache endpoints
*/
Isolated = 1,
/**
* Subnet that routes to the internet, but not vice versa.
*
* Instances in a private subnet can connect to the Internet, but will not
* allow connections to be initiated from the Internet.
*
* Outbound traffic will be routed via a NAT Gateway. Preference being in
* the same AZ, but if not available will use another AZ (control by
* specifing `maxGateways` on VpcNetwork). This might be used for
* experimental cost conscious accounts or accounts where HA outbound
* traffic is not needed.
*/
Private = 2,
/**
* Subnet connected to the Internet
*
* Instances in a Public subnet can connect to the Internet and can be
* connected to from the Internet as long as they are launched with public
* IPs (controlled on the AutoScalingGroup or other constructs that launch
* instances).
*
* Public subnets route outbound traffic via an Internet Gateway.
*/
Public = 3
}
/**
* Customize how instances are placed inside a VPC

@@ -7,12 +44,24 @@ *

* type to provide placement settings.
*
* By default, the instances are placed in the private subnets.
*/
export interface VpcPlacementStrategy {
/**
* Whether to use the VPC's public subnets to start instances
* Place the instances in the subnets of the given type
*
* If false, the instances are started in the private subnets.
* At most one of `subnetsToUse` and `subnetName` can be supplied.
*
* @default false
* @default SubnetType.Private
*/
usePublicSubnets?: boolean;
subnetsToUse?: SubnetType;
/**
* Place the instances in the subnets with the given name
*
* (This is the name supplied in subnetConfiguration).
*
* At most one of `subnetsToUse` and `subnetName` can be supplied.
*
* @default name
*/
subnetName?: string;
}

@@ -30,3 +79,3 @@ /**

*/
abstract readonly vpcId: VpcNetworkId;
abstract readonly vpcId: VPCId;
/**

@@ -41,2 +90,10 @@ * List of public subnets in this VPC

/**
* List of isolated subnets in this VPC
*/
abstract readonly isolatedSubnets: VpcSubnetRef[];
/**
* AZs for this VPC
*/
abstract readonly availabilityZones: string[];
/**
* Parts of the VPC that constitute full construction

@@ -61,29 +118,45 @@ */

*/
vpcId: VpcNetworkId;
vpcId: VPCId;
/**
* List of a availability zones, one for every subnet.
*
* The first half are for the public subnets, the second half are for
* the private subnets.
* List of availability zones for the subnets in this VPC.
*/
availabilityZones: string[];
/**
* List of public subnet IDs, one for every subnet
* List of public subnet IDs
*
* Must match the availability zones and private subnet ids in length and order.
* Must be undefined or match the availability zones in length and order.
*/
publicSubnetIds: VpcSubnetId[];
publicSubnetIds?: SubnetId[];
/**
* List of private subnet IDs, one for every subnet
* List of names for the public subnets
*
* Must match the availability zones and public subnet ids in length and order.
* Must be undefined or have a name for every public subnet group.
*/
privateSubnetIds: VpcSubnetId[];
publicSubnetNames?: string[];
/**
* List of private subnet IDs
*
* Must be undefined or match the availability zones in length and order.
*/
privateSubnetIds?: SubnetId[];
/**
* List of names for the private subnets
*
* Must be undefined or have a name for every private subnet group.
*/
privateSubnetNames?: string[];
/**
* List of isolated subnet IDs
*
* Must be undefined or match the availability zones in length and order.
*/
isolatedSubnetIds?: SubnetId[];
/**
* List of names for the isolated subnets
*
* Must be undefined or have a name for every isolated subnet group.
*/
isolatedSubnetNames?: string[];
}
/**
* Identifier for a VPC
*/
export declare class VpcNetworkId extends Token {
}
/**
* A new or imported VPC Subnet

@@ -100,3 +173,3 @@ */

*/
abstract readonly subnetId: VpcSubnetId;
abstract readonly subnetId: SubnetId;
/**

@@ -115,8 +188,3 @@ * Parts of this VPC subnet

*/
subnetId: VpcSubnetId;
subnetId: SubnetId;
}
/**
* Id of a VPC Subnet
*/
export declare class VpcSubnetId extends Token {
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const cdk_1 = require("@aws-cdk/cdk");
const ec2_generated_1 = require("./ec2.generated");
const util_1 = require("./util");
/**
* The type of Subnet
*/
var SubnetType;
(function (SubnetType) {
/**
* Isolated Subnets do not route Outbound traffic
*
* This can be good for subnets with RDS or
* Elasticache endpoints
*/
SubnetType[SubnetType["Isolated"] = 1] = "Isolated";
/**
* Subnet that routes to the internet, but not vice versa.
*
* Instances in a private subnet can connect to the Internet, but will not
* allow connections to be initiated from the Internet.
*
* Outbound traffic will be routed via a NAT Gateway. Preference being in
* the same AZ, but if not available will use another AZ (control by
* specifing `maxGateways` on VpcNetwork). This might be used for
* experimental cost conscious accounts or accounts where HA outbound
* traffic is not needed.
*/
SubnetType[SubnetType["Private"] = 2] = "Private";
/**
* Subnet connected to the Internet
*
* Instances in a Public subnet can connect to the Internet and can be
* connected to from the Internet as long as they are launched with public
* IPs (controlled on the AutoScalingGroup or other constructs that launch
* instances).
*
* Public subnets route outbound traffic via an Internet Gateway.
*/
SubnetType[SubnetType["Public"] = 3] = "Public";
})(SubnetType = exports.SubnetType || (exports.SubnetType = {}));
/**
* A new or imported VPC

@@ -24,7 +63,24 @@ */

*/
subnets(placement) {
if (!placement) {
subnets(placement = {}) {
if (placement.subnetsToUse !== undefined && placement.subnetName !== undefined) {
throw new Error('At most one of subnetsToUse and subnetName can be supplied');
}
// Select by name
if (placement.subnetName !== undefined) {
const allSubnets = this.privateSubnets.concat(this.publicSubnets).concat(this.isolatedSubnets);
const selectedSubnets = allSubnets.filter(s => util_1.subnetName(s) === placement.subnetName);
if (selectedSubnets.length === 0) {
throw new Error(`No subnets with name: ${placement.subnetName}`);
}
return selectedSubnets;
}
// Select by type
if (placement.subnetsToUse === undefined) {
return this.privateSubnets;
}
return placement.usePublicSubnets ? this.publicSubnets : this.privateSubnets;
return {
[SubnetType.Isolated]: this.isolatedSubnets,
[SubnetType.Private]: this.privateSubnets,
[SubnetType.Public]: this.publicSubnets,
}[placement.subnetsToUse];
}

@@ -35,7 +91,14 @@ /**

export() {
const pub = new util_1.ExportSubnetGroup(this, 'PublicSubnetIDs', this.publicSubnets, SubnetType.Public, this.availabilityZones.length);
const priv = new util_1.ExportSubnetGroup(this, 'PrivateSubnetIDs', this.privateSubnets, SubnetType.Private, this.availabilityZones.length);
const iso = new util_1.ExportSubnetGroup(this, 'IsolatedSubnetIDs', this.isolatedSubnets, SubnetType.Isolated, this.availabilityZones.length);
return {
vpcId: new cdk_1.Output(this, 'VpcId', { value: this.vpcId }).makeImportValue(),
availabilityZones: this.publicSubnets.map(s => s.availabilityZone),
publicSubnetIds: new cdk_1.StringListOutput(this, 'PublicSubnetIDs', { values: this.publicSubnets.map(s => s.subnetId) }).makeImportValues(),
privateSubnetIds: new cdk_1.StringListOutput(this, 'PrivateSubnetIDs', { values: this.privateSubnets.map(s => s.subnetId) }).makeImportValues(),
vpcId: new ec2_generated_1.VPCId(new cdk_1.Output(this, 'VpcId', { value: this.vpcId }).makeImportValue()),
availabilityZones: this.availabilityZones,
publicSubnetIds: pub.ids,
publicSubnetNames: pub.names,
privateSubnetIds: priv.ids,
privateSubnetNames: priv.names,
isolatedSubnetIds: iso.ids,
isolatedSubnetNames: iso.names,
};

@@ -52,26 +115,14 @@ }

this.vpcId = props.vpcId;
if (props.availabilityZones.length !== props.publicSubnetIds.length) {
throw new Error('Availability zone and public subnet ID arrays must be same length');
}
if (props.availabilityZones.length !== props.privateSubnetIds.length) {
throw new Error('Availability zone and private subnet ID arrays must be same length');
}
const n = props.availabilityZones.length;
this.publicSubnets = range(n).map(i => VpcSubnetRef.import(this, `PublicSubnet${i}`, {
availabilityZone: props.availabilityZones[i],
subnetId: props.publicSubnetIds[i]
}));
this.privateSubnets = range(n).map(i => VpcSubnetRef.import(this, `PrivateSubnet${i}`, {
availabilityZone: props.availabilityZones[i],
subnetId: props.privateSubnetIds[i]
}));
this.availabilityZones = props.availabilityZones;
// tslint:disable:max-line-length
const pub = new util_1.ImportSubnetGroup(props.publicSubnetIds, props.publicSubnetNames, SubnetType.Public, this.availabilityZones, 'publicSubnetIds', 'publicSubnetNames');
const priv = new util_1.ImportSubnetGroup(props.privateSubnetIds, props.privateSubnetNames, SubnetType.Private, this.availabilityZones, 'privateSubnetIds', 'privateSubnetNames');
const iso = new util_1.ImportSubnetGroup(props.isolatedSubnetIds, props.isolatedSubnetNames, SubnetType.Isolated, this.availabilityZones, 'isolatedSubnetIds', 'isolatedSubnetNames');
// tslint:enable:max-line-length
this.publicSubnets = pub.import(this);
this.privateSubnets = priv.import(this);
this.isolatedSubnets = iso.import(this);
}
}
/**
* Identifier for a VPC
*/
class VpcNetworkId extends cdk_1.Token {
}
exports.VpcNetworkId = VpcNetworkId;
/**
* A new or imported VPC Subnet

@@ -102,18 +153,2 @@ */

}
/**
* Id of a VPC Subnet
*/
class VpcSubnetId extends cdk_1.Token {
}
exports.VpcSubnetId = VpcSubnetId;
/**
* Generate the list of numbers of [0..n)
*/
function range(n) {
const ret = [];
for (let i = 0; i < n; i++) {
ret.push(i);
}
return ret;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZwYy1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBdUY7QUFtQnZGOztHQUVHO0FBQ0gsTUFBc0IsYUFBYyxTQUFRLGVBQVM7SUFBckQ7O1FBdUJJOztXQUVHO1FBQ2EsdUJBQWtCLEdBQWtCLEVBQUUsQ0FBQztJQXFCM0QsQ0FBQztJQTlDRzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBeUI7UUFDM0UsT0FBTyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQXNCRDs7T0FFRztJQUNJLE9BQU8sQ0FBQyxTQUFnQztRQUMzQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQUU7UUFDL0MsT0FBTyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDakYsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTTtRQUNULE9BQU87WUFDSCxLQUFLLEVBQUUsSUFBSSxZQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxlQUFlLEVBQUU7WUFDekUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7WUFDbEUsZUFBZSxFQUFFLElBQUksc0JBQWdCLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFD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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZwYy1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBOEQ7QUFDOUQsbURBQWtEO0FBQ2xELGlDQUEwRTtBQUUxRTs7R0FFRztBQUNILElBQVksVUFrQ1g7QUFsQ0QsV0FBWSxVQUFVO0lBQ2xCOzs7OztPQUtHO0lBQ0gsbURBQVksQ0FBQTtJQUVaOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsaURBQVcsQ0FBQTtJQUVYOzs7Ozs7Ozs7T0FTRztJQUNILCtDQUFVLENBQUE7QUFDZCxDQUFDLEVBbENXLFVBQVUsR0FBVixrQkFBVSxLQUFWLGtCQUFVLFFBa0NyQjtBQWdDRDs7R0FFRztBQUNILE1BQXNCLGFBQWMsU0FBUSxlQUFTO0lBQXJEOztRQWlDSTs7V0FFRztRQUNhLHVCQUFrQixHQUFrQixFQUFFLENBQUM7SUFpRDNELENBQUM7SUFwRkc7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQXlCO1FBQzNFLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFnQ0Q7O09BRUc7SUFDSSxPQUFPLENBQUMsWUFBa0MsRUFBRTtRQUMvQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzVFLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztTQUNqRjtRQUVELGlCQUFpQjtRQUNqQixJQUFJLFNBQVMsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQ3BDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQy9GLE1BQU0s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QUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0LCBJRGVwZW5kYWJsZSwgT3V0cHV0IH0gZnJvbSBcIkBhd3MtY2RrL2Nka1wiO1xuaW1wb3J0IHsgU3VibmV0SWQsIFZQQ0lkIH0gZnJvbSBcIi4vZWMyLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgRXhwb3J0U3VibmV0R3JvdXAsIEltcG9ydFN1Ym5ldEdyb3VwLCBzdWJuZXROYW1lIH0gZnJvbSAnLi91dGlsJztcblxuLyoqXG4gKiBUaGUgdHlwZSBvZiBTdWJuZXRcbiAqL1xuZXhwb3J0IGVudW0gU3VibmV0VHlwZSB7XG4gICAgLyoqXG4gICAgICogSXNvbGF0ZWQgU3VibmV0cyBkbyBub3Qgcm91dGUgT3V0Ym91bmQgdHJhZmZpY1xuICAgICAqXG4gICAgICogVGhpcyBjYW4gYmUgZ29vZCBmb3Igc3VibmV0cyB3aXRoIFJEUyBvclxuICAgICAqIEVsYXN0aWNhY2hlIGVuZHBvaW50c1xuICAgICAqL1xuICAgIElzb2xhdGVkID0gMSxcblxuICAgIC8qKlxuICAgICAqIFN1Ym5ldCB0aGF0IHJvdXRlcyB0byB0aGUgaW50ZXJuZXQsIGJ1dCBub3QgdmljZSB2ZXJzYS5cbiAgICAgKlxuICAgICAqIEluc3RhbmNlcyBpbiBhIHByaXZhdGUgc3VibmV0IGNhbiBjb25uZWN0IHRvIHRoZSBJbnRlcm5ldCwgYnV0IHdpbGwgbm90XG4gICAgICogYWxsb3cgY29ubmVjdGlvbnMgdG8gYmUgaW5pdGlhdGVkIGZyb20gdGhlIEludGVybmV0LlxuICAgICAqXG4gICAgICogT3V0Ym91bmQgdHJhZmZpYyB3aWxsIGJlIHJvdXRlZCB2aWEgYSBOQVQgR2F0ZXdheS4gUHJlZmVyZW5jZSBiZWluZyBpblxuICAgICAqIHRoZSBzYW1lIEFaLCBidXQgaWYgbm90IGF2YWlsYWJsZSB3aWxsIHVzZSBhbm90aGVyIEFaIChjb250cm9sIGJ5XG4gICAgICogc3BlY2lmaW5nIGBtYXhHYXRld2F5c2Agb24gVnBjTmV0d29yaykuIFRoaXMgbWlnaHQgYmUgdXNlZCBmb3JcbiAgICAgKiBleHBlcmltZW50YWwgY29zdCBjb25zY2lvdXMgYWNjb3VudHMgb3IgYWNjb3VudHMgd2hlcmUgSEEgb3V0Ym91bmRcbiAgICAgKiB0cmFmZmljIGlzIG5vdCBuZWVkZWQuXG4gICAgICovXG4gICAgUHJpdmF0ZSA9IDIsXG5cbiAgICAvKipcbiAgICAgKiBTdWJuZXQgY29ubmVjdGVkIHRvIHRoZSBJbnRlcm5ldFxuICAgICAqXG4gICAgICogSW5zdGFuY2VzIGluIGEgUHVibGljIHN1Ym5ldCBjYW4gY29ubmVjdCB0byB0aGUgSW50ZXJuZXQgYW5kIGNhbiBiZVxuICAgICAqIGNvbm5lY3RlZCB0byBmcm9tIHRoZSBJbnRlcm5ldCBhcyBsb25nIGFzIHRoZXkgYXJlIGxhdW5jaGVkIHdpdGggcHVibGljXG4gICAgICogSVBzIChjb250cm9sbGVkIG9uIHRoZSBBdXRvU2NhbGluZ0dyb3VwIG9yIG90aGVyIGNvbnN0cnVjdHMgdGhhdCBsYXVuY2hcbiAgICAgKiBpbnN0YW5jZXMpLlxuICAgICAqXG4gICAgICogUHVibGljIHN1Ym5ldHMgcm91dGUgb3V0Ym91bmQgdHJhZmZpYyB2aWEgYW4gSW50ZXJuZXQgR2F0ZXdheS5cbiAgICAgKi9cbiAgICBQdWJsaWMgPSAzXG59XG5cbi8qKlxuICogQ3VzdG9taXplIGhvdyBpbnN0YW5jZXMgYXJlIHBsYWNlZCBpbnNpZGUgYSBWUENcbiAqXG4gKiBDb25zdHJ1Y3RzIHRoYXQgYWxsb3cgY3VzdG9taXphdGlvbiBvZiBWUEMgcGxhY2VtZW50IHVzZSBwYXJhbWV0ZXJzIG9mIHRoaXNcbiAqIHR5cGUgdG8gcHJvdmlkZSBwbGFjZW1lbnQgc2V0dGluZ3MuXG4gKlxuICogQnkgZGVmYXVsdCwgdGhlIGluc3RhbmNlcyBhcmUgcGxhY2VkIGluIHRoZSBwcml2YXRlIHN1Ym5ldHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjUGxhY2VtZW50U3RyYXRlZ3kge1xuICAgIC8qKlxuICAgICAqIFBsYWNlIHRoZSBpbnN0YW5jZXMgaW4gdGhlIHN1Ym5ldHMgb2YgdGhlIGdpdmVuIHR5cGVcbiAgICAgKlxuICAgICAqIEF0IG1vc3Qgb25lIG9mIGBzdWJuZXRzVG9Vc2VgIGFuZCBgc3VibmV0TmFtZWAgY2FuIGJlIHN1cHBsaWVkLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgU3VibmV0VHlwZS5Qcml2YXRlXG4gICAgICovXG4gICAgc3VibmV0c1RvVXNlPzogU3VibmV0VHlwZTtcblxuICAgIC8qKlxuICAgICAqIFBsYWNlIHRoZSBpbnN0YW5jZXMgaW4gdGhlIHN1Ym5ldHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZVxuICAgICAqXG4gICAgICogKFRoaXMgaXMgdGhlIG5hbWUgc3VwcGxpZWQgaW4gc3VibmV0Q29uZmlndXJhdGlvbikuXG4gICAgICpcbiAgICAgKiBBdCBtb3N0IG9uZSBvZiBgc3VibmV0c1RvVXNlYCBhbmQgYHN1Ym5ldE5hbWVgIGNhbiBiZSBzdXBwbGllZC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IG5hbWVcbiAgICAgKi9cbiAgICBzdWJuZXROYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbmV3IG9yIGltcG9ydGVkIFZQQ1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVnBjTmV0d29ya1JlZiBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElEZXBlbmRhYmxlIHtcbiAgICAvKipcbiAgICAgKiBJbXBvcnQgYW4gZXhwb3J0ZWQgVlBDXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBpbXBvcnQocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFZwY05ldHdvcmtSZWZQcm9wcyk6IFZwY05ldHdvcmtSZWYge1xuICAgICAgICByZXR1cm4gbmV3IEltcG9ydGVkVnBjTmV0d29yayhwYXJlbnQsIG5hbWUsIHByb3BzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZGVudGlmaWVyIGZvciB0aGlzIFZQQ1xuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB2cGNJZDogVlBDSWQ7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIHB1YmxpYyBzdWJuZXRzIGluIHRoaXMgVlBDXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHM6IFZwY1N1Ym5ldFJlZltdO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcml2YXRlIHN1Ym5ldHMgaW4gdGhpcyBWUENcbiAgICAgKi9cbiAgICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IFZwY1N1Ym5ldFJlZltdO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBpc29sYXRlZCBzdWJuZXRzIGluIHRoaXMgVlBDXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlzb2xhdGVkU3VibmV0czogVnBjU3VibmV0UmVmW107XG5cbiAgICAvKipcbiAgICAgKiBBWnMgZm9yIHRoaXMgVlBDXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmVzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIFBhcnRzIG9mIHRoZSBWUEMgdGhhdCBjb25zdGl0dXRlIGZ1bGwgY29uc3RydWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRlcGVuZGVuY3lFbGVtZW50czogSURlcGVuZGFibGVbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBzdWJuZXRzIGFwcHJvcHJpYXRlIGZvciB0aGUgcGxhY2VtZW50IHN0cmF0ZWd5XG4gICAgICovXG4gICAgcHVibGljIHN1Ym5ldHMocGxhY2VtZW50OiBWcGNQbGFjZW1lbnRTdHJhdGVneSA9IHt9KTogVnBjU3VibmV0UmVmW10ge1xuICAgICAgICBpZiAocGxhY2VtZW50LnN1Ym5ldHNUb1VzZSAhPT0gdW5kZWZpbmVkICYmIHBsYWNlbWVudC5zdWJuZXROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXQgbW9zdCBvbmUgb2Ygc3VibmV0c1RvVXNlIGFuZCBzdWJuZXROYW1lIGNhbiBiZSBzdXBwbGllZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2VsZWN0IGJ5IG5hbWVcbiAgICAgICAgaWYgKHBsYWNlbWVudC5zdWJuZXROYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbFN1Ym5ldHMgPSB0aGlzLnByaXZhdGVTdWJuZXRzLmNvbmNhdCh0aGlzLnB1YmxpY1N1Ym5ldHMpLmNvbmNhdCh0aGlzLmlzb2xhdGVkU3VibmV0cyk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFN1Ym5ldHMgPSBhbGxTdWJuZXRzLmZpbHRlcihzID0+IHN1Ym5ldE5hbWUocykgPT09IHBsYWNlbWVudC5zdWJuZXROYW1lKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFN1Ym5ldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdWJuZXRzIHdpdGggbmFtZTogJHtwbGFjZW1lbnQuc3VibmV0TmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFN1Ym5ldHM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWxlY3QgYnkgdHlwZVxuICAgICAgICBpZiAocGxhY2VtZW50LnN1Ym5ldHNUb1VzZSA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB0aGlzLnByaXZhdGVTdWJuZXRzOyB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtTdWJuZXRUeXBlLklzb2xhdGVkXTogdGhpcy5pc29sYXRlZFN1Ym5ldHMsXG4gICAgICAgICAgICBbU3VibmV0VHlwZS5Qcml2YXRlXTogdGhpcy5wcml2YXRlU3VibmV0cyxcbiAgICAgICAgICAgIFtTdWJuZXRUeXBlLlB1YmxpY106IHRoaXMucHVibGljU3VibmV0cyxcbiAgICAgICAgfVtwbGFjZW1lbnQuc3VibmV0c1RvVXNlXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHBvcnQgdGhpcyBWUEMgZnJvbSB0aGUgc3RhY2tcbiAgICAgKi9cbiAgICBwdWJsaWMgZXhwb3J0KCk6IFZwY05ldHdvcmtSZWZQcm9wcyB7XG4gICAgICAgIGNvbnN0IHB1YiA9IG5ldyBFeHBvcnRTdWJuZXRHcm91cCh0aGlzLCAnUHVibGljU3VibmV0SURzJywgdGhpcy5wdWJsaWNTdWJuZXRzLCBTdWJuZXRUeXBlLlB1YmxpYywgdGhpcy5hdmFpbGFiaWxpdHlab25lcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBwcml2ID0gbmV3IEV4cG9ydFN1Ym5ldEdyb3VwKHRoaXMsICdQcml2YXRlU3VibmV0SURzJywgdGhpcy5wcml2YXRlU3VibmV0cywgU3VibmV0VHlwZS5Qcml2YXRlLCB0aGlzLmF2YWlsYWJpbGl0eVpvbmVzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGlzbyA9IG5ldyBFeHBvcnRTdWJuZXRHcm91cCh0aGlzLCAnSXNvbGF0ZWRTdWJuZXRJRHMnLCB0aGlzLmlzb2xhdGVkU3VibmV0cywgU3VibmV0VHlwZS5Jc29sYXRlZCwgdGhpcy5hdmFpbGFiaWxpdHlab25lcy5sZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2cGNJZDogbmV3IFZQQ0lkKG5ldyBPdXRwdXQodGhpcywgJ1ZwY0lkJywgeyB2YWx1ZTogdGhpcy52cGNJZCB9KS5tYWtlSW1wb3J0VmFsdWUoKSksXG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlab25lczogdGhpcy5hdmFpbGFiaWxpdHlab25lcyxcbiAgICAgICAgICAgIHB1YmxpY1N1Ym5ldElkczogcHViLmlkcyxcbiAgICAgICAgICAgIHB1YmxpY1N1Ym5ldE5hbWVzOiBwdWIubmFtZXMsXG4gICAgICAgICAgICBwcml2YXRlU3VibmV0SWRzOiBwcml2LmlkcyxcbiAgICAgICAgICAgIHByaXZhdGVTdWJuZXROYW1lczogcHJpdi5uYW1lcyxcbiAgICAgICAgICAgIGlzb2xhdGVkU3VibmV0SWRzOiBpc28uaWRzLFxuICAgICAgICAgICAgaXNvbGF0ZWRTdWJuZXROYW1lczogaXNvLm5hbWVzLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBpbXBvcnRlZCBWcGNOZXR3b3JrXG4gKi9cbmNsYXNzIEltcG9ydGVkVnBjTmV0d29yayBleHRlbmRzIFZwY05ldHdvcmtSZWYge1xuICAgIC8qKlxuICAgICAqIElkZW50aWZpZXIgZm9yIHRoaXMgVlBDXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBWUENJZDtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgcHVibGljIHN1Ym5ldHMgaW4gdGhpcyBWUENcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcHVibGljU3VibmV0czogVnBjU3VibmV0UmVmW107XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIHByaXZhdGUgc3VibmV0cyBpbiB0aGlzIFZQQ1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwcml2YXRlU3VibmV0czogVnBjU3VibmV0UmVmW107XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGlzb2xhdGVkIHN1Ym5ldHMgaW4gdGhpcyBWUENcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBWcGNTdWJuZXRSZWZbXTtcblxuICAgIC8qKlxuICAgICAqIEFacyBmb3IgdGhpcyBWUENcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZXM6IHN0cmluZ1tdO1xuXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFZwY05ldHdvcmtSZWZQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgICAgIHRoaXMudnBjSWQgPSBwcm9wcy52cGNJZDtcbiAgICAgICAgdGhpcy5hdmFpbGFiaWxpdHlab25lcyA9IHByb3BzLmF2YWlsYWJpbGl0eVpvbmVzO1xuXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuICAgICAgICBjb25zdCBwdWIgPSBuZXcgSW1wb3J0U3VibmV0R3JvdXAocHJvcHMucHVibGljU3VibmV0SWRzLCBwcm9wcy5wdWJsaWNTdWJuZXROYW1lcywgU3VibmV0VHlwZS5QdWJsaWMsIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZXMsICdwdWJsaWNTdWJuZXRJZHMnLCAncHVibGljU3VibmV0TmFtZXMnKTtcbiAgICAgICAgY29uc3QgcHJpdiA9IG5ldyBJbXBvcnRTdWJuZXRHcm91cChwcm9wcy5wcml2YXRlU3VibmV0SWRzLCBwcm9wcy5wcml2YXRlU3VibmV0TmFtZXMsIFN1Ym5ldFR5cGUuUHJpdmF0ZSwgdGhpcy5hdmFpbGFiaWxpdHlab25lcywgJ3ByaXZhdGVTdWJuZXRJZHMnLCAncHJpdmF0ZVN1Ym5ldE5hbWVzJyk7XG4gICAgICAgIGNvbnN0IGlzbyA9IG5ldyBJbXBvcnRTdWJuZXRHcm91cChwcm9wcy5pc29sYXRlZFN1Ym5ldElkcywgcHJvcHMuaXNvbGF0ZWRTdWJuZXROYW1lcywgU3VibmV0VHlwZS5Jc29sYXRlZCwgdGhpcy5hdmFpbGFiaWxpdHlab25lcywgJ2lzb2xhdGVkU3VibmV0SWRzJywgJ2lzb2xhdGVkU3VibmV0TmFtZXMnKTtcbiAgICAgICAgLy8gdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGhcblxuICAgICAgICB0aGlzLnB1YmxpY1N1Ym5ldHMgPSBwdWIuaW1wb3J0KHRoaXMpO1xuICAgICAgICB0aGlzLnByaXZhdGVTdWJuZXRzID0gcHJpdi5pbXBvcnQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNvbGF0ZWRTdWJuZXRzID0gaXNvLmltcG9ydCh0aGlzKTtcbiAgICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0aGF0IHJlZmVyZW5jZSBhbiBleHRlcm5hbCBWcGNOZXR3b3JrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjTmV0d29ya1JlZlByb3BzIHtcbiAgICAvKipcbiAgICAgKiBWUEMncyBpZGVudGlmaWVyXG4gICAgICovXG4gICAgdnBjSWQ6IFZQQ0lkO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBhdmFpbGFiaWxpdHkgem9uZXMgZm9yIHRoZSBzdWJuZXRzIGluIHRoaXMgVlBDLlxuICAgICAqL1xuICAgIGF2YWlsYWJpbGl0eVpvbmVzOiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgcHVibGljIHN1Ym5ldCBJRHNcbiAgICAgKlxuICAgICAqIE11c3QgYmUgdW5kZWZpbmVkIG9yIG1hdGNoIHRoZSBhdmFpbGFiaWxpdHkgem9uZXMgaW4gbGVuZ3RoIGFuZCBvcmRlci5cbiAgICAgKi9cbiAgICBwdWJsaWNTdWJuZXRJZHM/OiBTdWJuZXRJZFtdO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBuYW1lcyBmb3IgdGhlIHB1YmxpYyBzdWJuZXRzXG4gICAgICpcbiAgICAgKiBNdXN0IGJlIHVuZGVmaW5lZCBvciBoYXZlIGEgbmFtZSBmb3IgZXZlcnkgcHVibGljIHN1Ym5ldCBncm91cC5cbiAgICAgKi9cbiAgICBwdWJsaWNTdWJuZXROYW1lcz86IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcml2YXRlIHN1Ym5ldCBJRHNcbiAgICAgKlxuICAgICAqIE11c3QgYmUgdW5kZWZpbmVkIG9yIG1hdGNoIHRoZSBhdmFpbGFiaWxpdHkgem9uZXMgaW4gbGVuZ3RoIGFuZCBvcmRlci5cbiAgICAgKi9cbiAgICBwcml2YXRlU3VibmV0SWRzPzogU3VibmV0SWRbXTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgbmFtZXMgZm9yIHRoZSBwcml2YXRlIHN1Ym5ldHNcbiAgICAgKlxuICAgICAqIE11c3QgYmUgdW5kZWZpbmVkIG9yIGhhdmUgYSBuYW1lIGZvciBldmVyeSBwcml2YXRlIHN1Ym5ldCBncm91cC5cbiAgICAgKi9cbiAgICBwcml2YXRlU3VibmV0TmFtZXM/OiBzdHJpbmdbXTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgaXNvbGF0ZWQgc3VibmV0IElEc1xuICAgICAqXG4gICAgICogTXVzdCBiZSB1bmRlZmluZWQgb3IgbWF0Y2ggdGhlIGF2YWlsYWJpbGl0eSB6b25lcyBpbiBsZW5ndGggYW5kIG9yZGVyLlxuICAgICAqL1xuICAgIGlzb2xhdGVkU3VibmV0SWRzPzogU3VibmV0SWRbXTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgbmFtZXMgZm9yIHRoZSBpc29sYXRlZCBzdWJuZXRzXG4gICAgICpcbiAgICAgKiBNdXN0IGJlIHVuZGVmaW5lZCBvciBoYXZlIGEgbmFtZSBmb3IgZXZlcnkgaXNvbGF0ZWQgc3VibmV0IGdyb3VwLlxuICAgICAqL1xuICAgIGlzb2xhdGVkU3VibmV0TmFtZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIG5ldyBvciBpbXBvcnRlZCBWUEMgU3VibmV0XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBWcGNTdWJuZXRSZWYgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJRGVwZW5kYWJsZSB7XG4gICAgcHVibGljIHN0YXRpYyBpbXBvcnQocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFZwY1N1Ym5ldFJlZlByb3BzKTogVnBjU3VibmV0UmVmIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbXBvcnRlZFZwY1N1Ym5ldChwYXJlbnQsIG5hbWUsIHByb3BzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQXZhaWxhYmlsaXR5IFpvbmUgdGhlIHN1Ym5ldCBpcyBsb2NhdGVkIGluXG4gICAgICovXG4gICAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdWJuZXRJZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHN1Ym5ldFxuICAgICAqL1xuICAgIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzdWJuZXRJZDogU3VibmV0SWQ7XG5cbiAgICAvKipcbiAgICAgKiBQYXJ0cyBvZiB0aGlzIFZQQyBzdWJuZXRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVwZW5kZW5jeUVsZW1lbnRzOiBJRGVwZW5kYWJsZVtdID0gW107XG59XG5cbi8qKlxuICogU3VibmV0IG9mIGFuIGltcG9ydGVkIFZQQ1xuICovXG5jbGFzcyBJbXBvcnRlZFZwY1N1Ym5ldCBleHRlbmRzIFZwY1N1Ym5ldFJlZiB7XG4gICAgLyoqXG4gICAgICogVGhlIEF2YWlsYWJpbGl0eSBab25lIHRoZSBzdWJuZXQgaXMgbG9jYXRlZCBpblxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3VibmV0SWQgZm9yIHRoaXMgcGFydGljdWxhciBzdWJuZXRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0SWQ6IFN1Ym5ldElkO1xuXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFZwY1N1Ym5ldFJlZlByb3BzKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgdGhpcy5hdmFpbGFiaWxpdHlab25lID0gcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZTtcbiAgICAgICAgdGhpcy5zdWJuZXRJZCA9IHByb3BzLnN1Ym5ldElkO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBWcGNTdWJuZXRSZWZQcm9wcyB7XG4gICAgLyoqXG4gICAgICogVGhlIEF2YWlsYWJpbGl0eSBab25lIHRoZSBzdWJuZXQgaXMgbG9jYXRlZCBpblxuICAgICAqL1xuICAgIGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBzdWJuZXRJZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHN1Ym5ldFxuICAgICAqL1xuICAgIHN1Ym5ldElkOiBTdWJuZXRJZDtcbn1cbiJdfQ==
import cdk = require('@aws-cdk/cdk');
import { VpcNetworkId, VpcNetworkRef, VpcSubnetId, VpcSubnetRef } from './vpc-ref';
import { SubnetId, VPCId } from './ec2.generated';
import { SubnetType, VpcNetworkRef, VpcSubnetRef } from './vpc-ref';
/**

@@ -37,3 +38,3 @@ * VpcNetworkProps allows you to specify configuration options for a VPC

*/
tags?: cdk.Tag[];
tags?: cdk.Tags;
/**

@@ -108,35 +109,2 @@ * Define the maximum number of AZs to use in this region

/**
* The type of Subnet
*/
export declare enum SubnetType {
/**
* Isolated Subnets do not route Outbound traffic
*
* This can be good for subnets with RDS or
* Elasticache endpoints
*/
Isolated = 1,
/**
* Subnet that routes to the internet, but not vice versa.
*
* Instances in a private subnet can connect to the Internet, but will not
* allow connections to be initiated from the Internet.
*
* Outbound traffic will be routed via a NAT Gateway. Preference being in
* the same AZ, but if not available will use another AZ. This is common for
* experimental cost conscious accounts or accounts where HA outbound
* traffic is not needed.
*/
Private = 2,
/**
* Subnet connected to the Internet
*
* Instances in a Public subnet can connect to the Internet and can be
* connected to from the Internet as long as they are launched with public IPs.
*
* Public subnets route outbound traffic via an Internet Gateway.
*/
Public = 3
}
/**
* Specify configuration parameters for a VPC to be built

@@ -165,2 +133,6 @@ */

name: string;
/**
* The AWS resource tags to associate with the resource.
*/
tags?: cdk.Tags;
}

@@ -187,3 +159,3 @@ /**

*/
export declare class VpcNetwork extends VpcNetworkRef {
export declare class VpcNetwork extends VpcNetworkRef implements cdk.ITaggable {
/**

@@ -204,3 +176,3 @@ * The default CIDR range used when creating VPCs.

*/
readonly vpcId: VpcNetworkId;
readonly vpcId: VPCId;
/**

@@ -219,2 +191,10 @@ * List of public subnets in this VPC

/**
* AZs for this VPC
*/
readonly availabilityZones: string[];
/**
* Manage tags for this construct and children
*/
readonly tags: cdk.TagManager;
/**
* Maximum Number of NAT Gateways used to control cost

@@ -242,8 +222,2 @@ *

/**
* Maximum AZs to Uses for this VPC
*
* @default All
*/
private availabilityZones;
/**
* VpcNetwork creates a VPC that spans a whole region.

@@ -288,2 +262,6 @@ * It will automatically divide the provided VPC CIDR range, and create public and private subnets per Availability Zone.

mapPublicIpOnLaunch?: boolean;
/**
* The AWS resource tags to associate with the Subnet
*/
tags?: cdk.Tags;
}

@@ -293,3 +271,3 @@ /**

*/
export declare class VpcSubnet extends VpcSubnetRef {
export declare class VpcSubnet extends VpcSubnetRef implements cdk.ITaggable {
/**

@@ -302,4 +280,8 @@ * The Availability Zone the subnet is located in

*/
readonly subnetId: VpcSubnetId;
readonly subnetId: SubnetId;
/**
* Manage tags for Construct and propagate to children
*/
readonly tags: cdk.TagManager;
/**
* The routeTableId attached to this subnet.

@@ -326,3 +308,3 @@ */

*/
addNatGateway(): cdk.Token;
addNatGateway(): import("./ec2.generated").NatGatewayId;
}

@@ -329,0 +311,0 @@ /**

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

const network_util_1 = require("./network-util");
const util_1 = require("./util");
const vpc_ref_1 = require("./vpc-ref");
/**
* Name tag constant
*/
const NAME_TAG = 'Name';
/**
* The default tenancy of instances launched into the VPC.

@@ -23,36 +28,2 @@ */

/**
* The type of Subnet
*/
var SubnetType;
(function (SubnetType) {
/**
* Isolated Subnets do not route Outbound traffic
*
* This can be good for subnets with RDS or
* Elasticache endpoints
*/
SubnetType[SubnetType["Isolated"] = 1] = "Isolated";
/**
* Subnet that routes to the internet, but not vice versa.
*
* Instances in a private subnet can connect to the Internet, but will not
* allow connections to be initiated from the Internet.
*
* Outbound traffic will be routed via a NAT Gateway. Preference being in
* the same AZ, but if not available will use another AZ. This is common for
* experimental cost conscious accounts or accounts where HA outbound
* traffic is not needed.
*/
SubnetType[SubnetType["Private"] = 2] = "Private";
/**
* Subnet connected to the Internet
*
* Instances in a Public subnet can connect to the Internet and can be
* connected to from the Internet as long as they are launched with public IPs.
*
* Public subnets route outbound traffic via an Internet Gateway.
*/
SubnetType[SubnetType["Public"] = 3] = "Public";
})(SubnetType = exports.SubnetType || (exports.SubnetType = {}));
/**
* VpcNetwork deploys an AWS VPC, with public and private subnets per Availability Zone.

@@ -110,2 +81,4 @@ * For example:

}
this.tags = new cdk.TagManager(this, props.tags);
this.tags.setTag(NAME_TAG, this.path, { overwrite: false });
const cidrBlock = ifUndefined(props.cidr, VpcNetwork.DEFAULT_CIDR_RANGE);

@@ -116,3 +89,2 @@ this.networkBuilder = new network_util_1.NetworkBuilder(cidrBlock);

const instanceTenancy = props.defaultInstanceTenancy || 'default';
const tags = props.tags || [];
// Define a VPC using the provided CIDR range

@@ -124,3 +96,3 @@ this.resource = new ec2_generated_1.cloudformation.VPCResource(this, 'Resource', {

instanceTenancy,
tags
tags: this.tags,
});

@@ -135,10 +107,12 @@ this.availabilityZones = new cdk.AvailabilityZoneProvider(this).availabilityZones;

this.subnetConfiguration = ifUndefined(props.subnetConfiguration, VpcNetwork.DEFAULT_SUBNETS);
const useNatGateway = this.subnetConfiguration.filter(subnet => (subnet.subnetType === SubnetType.Private)).length > 0;
const useNatGateway = this.subnetConfiguration.filter(subnet => (subnet.subnetType === vpc_ref_1.SubnetType.Private)).length > 0;
this.natGateways = ifUndefined(props.natGateways, useNatGateway ? this.availabilityZones.length : 0);
// subnetConfiguration and natGateways must be set before calling createSubnets
this.createSubnets();
const allowOutbound = this.subnetConfiguration.filter(subnet => (subnet.subnetType !== SubnetType.Isolated)).length > 0;
const allowOutbound = this.subnetConfiguration.filter(subnet => (subnet.subnetType !== vpc_ref_1.SubnetType.Isolated)).length > 0;
// Create an Internet Gateway and attach it if necessary
if (allowOutbound) {
const igw = new ec2_generated_1.cloudformation.InternetGatewayResource(this, 'IGW');
const igw = new ec2_generated_1.cloudformation.InternetGatewayResource(this, 'IGW', {
tags: new cdk.TagManager(this),
});
const att = new ec2_generated_1.cloudformation.VPCGatewayAttachmentResource(this, 'VPCGW', {

@@ -193,3 +167,3 @@ internetGatewayId: igw.ref,

this.availabilityZones.forEach((zone, index) => {
const name = `${subnetConfig.name}Subnet${index + 1}`;
const name = util_1.subnetId(subnetConfig.name, index);
const subnetProps = {

@@ -199,6 +173,7 @@ availabilityZone: zone,

cidrBlock: this.networkBuilder.addSubnet(cidrMask),
mapPublicIpOnLaunch: (subnetConfig.subnetType === SubnetType.Public),
mapPublicIpOnLaunch: (subnetConfig.subnetType === vpc_ref_1.SubnetType.Public),
tags: subnetConfig.tags,
};
switch (subnetConfig.subnetType) {
case SubnetType.Public:
case vpc_ref_1.SubnetType.Public:
const publicSubnet = new VpcPublicSubnet(this, name, subnetProps);

@@ -213,7 +188,7 @@ if (this.natGateways > 0) {

break;
case SubnetType.Private:
case vpc_ref_1.SubnetType.Private:
const privateSubnet = new VpcPrivateSubnet(this, name, subnetProps);
this.privateSubnets.push(privateSubnet);
break;
case SubnetType.Isolated:
case vpc_ref_1.SubnetType.Isolated:
const isolatedSubnet = new VpcPrivateSubnet(this, name, subnetProps);

@@ -239,8 +214,8 @@ this.isolatedSubnets.push(isolatedSubnet);

{
subnetType: SubnetType.Public,
name: 'Public',
subnetType: vpc_ref_1.SubnetType.Public,
name: util_1.DEFAULT_SUBNET_NAME[vpc_ref_1.SubnetType.Public],
},
{
subnetType: SubnetType.Private,
name: 'Private',
subnetType: vpc_ref_1.SubnetType.Private,
name: util_1.DEFAULT_SUBNET_NAME[vpc_ref_1.SubnetType.Private],
}

@@ -255,2 +230,4 @@ ];

super(parent, name);
this.tags = new cdk.TagManager(this, props.tags);
this.tags.setTag(NAME_TAG, this.path, { overwrite: false });
this.availabilityZone = props.availabilityZone;

@@ -262,2 +239,3 @@ const subnet = new ec2_generated_1.cloudformation.SubnetResource(this, 'Subnet', {

mapPublicIpOnLaunch: props.mapPublicIpOnLaunch,
tags: this.tags,
});

@@ -267,2 +245,3 @@ this.subnetId = subnet.ref;

vpcId: props.vpcId,
tags: new cdk.TagManager(this),
});

@@ -317,3 +296,4 @@ this.routeTableId = table.ref;

domain: 'vpc'
}).eipAllocationId
}).eipAllocationId,
tags: new cdk.TagManager(this),
});

@@ -342,2 +322,2 @@ return ngw.ref;

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidnBjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsb0NBQXFDO0FBRXJDLG1EQUFpRDtBQUNqRCxpREFBZ0Q7QUFDaEQsdUNBQW1GO0FBb0duRjs7R0FFRztBQUNILElBQVksc0JBVVg7QUFWRCxXQUFZLHNCQUFzQjtJQUM5Qjs7T0FFRztJQUNILDZDQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsaURBQXVCLENBQUE7QUFDM0IsQ0FBQyxFQVZXLHNCQUFzQixHQUF0Qiw4QkFBc0IsS0FBdEIsOEJBQXNCLFFBVWpDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFVBaUNYO0FBakNELFdBQVksVUFBVTtJQUVsQjs7Ozs7T0FLRztJQUNILG1EQUFZLENBQUE7SUFFWjs7Ozs7Ozs7OztPQVVHO0lBQ0gsaURBQVcsQ0FBQTtJQUVYOzs7Ozs7O09BT0c7SUFDSCwrQ0FBVSxDQUFBO0FBRWQsQ0FBQyxFQWpDVyxVQUFVLEdBQVYsa0JBQVUsS0FBVixrQkFBVSxRQWlDckI7QUE4QkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFhLFVBQVcsU0FBUSx1QkFBYTtJQStFekM7Ozs7O09BS0c7SUFDSCxZQUFZLE1BQXFCLEVBQUUsSUFBWSxFQUFFLFFBQXlCLEVBQUU7UUFDeEUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQXhEeEI7O1dBRUc7UUFDYSxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFFbkQ7O1dBRUc7UUFDYSxtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFFcEQ7O1dBRUc7UUFDYSxvQkFBZSxHQUFtQixFQUFFLENBQUM7UUFtQnJEOztXQUVHO1FBQ0ssbUJBQWMsR0FBbUIsRUFBRSxDQUFDO1FBRTVDOztXQUVHO1FBQ0ssd0JBQW1CLEdBQTBCLEVBQUUsQ0FBQztRQWtCcEQsMERBQTBEO1FBQzFELElBQUksS0FBSyxDQUFDLGtCQUFrQixJQUFJLENBQUMsS0FB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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidnBjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsb0NBQXFDO0FBRXJDLG1EQUFrRTtBQUNsRSxpREFBZ0Q7QUFDaEQsaUNBQXVEO0FBQ3ZELHVDQUFvRTtBQUVwRTs7R0FFRztBQUNILE1BQU0sUUFBUSxHQUFXLE1BQU0sQ0FBQztBQXFHaEM7O0dBRUc7QUFDSCxJQUFZLHNCQVVYO0FBVkQsV0FBWSxzQkFBc0I7SUFDOUI7O09BRUc7SUFDSCw2Q0FBbUIsQ0FBQTtJQUVuQjs7T0FFRztJQUNILGlEQUF1QixDQUFBO0FBQzNCLENBQUMsRUFWVyxzQkFBc0IsR0FBdEIsOEJBQXNCLEtBQXRCLDhCQUFzQixRQVVqQztBQW1DRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQWEsVUFBVyxTQUFRLHVCQUFhO0lBa0Z6Qzs7Ozs7T0FLRztJQUNILFlBQVksTUFBcUIsRUFBRSxJQUFZLEVBQUUsUUFBeUIsRUFBRTtRQUN4RSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBM0R4Qjs7V0FFRztRQUNhLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUVuRDs7V0FFRztRQUNhLG1CQUFjLEdBQW1CLEVBQUUsQ0FBQztRQUVwRDs7V0FFRztRQUNhLG9CQUFlLEdBQW1CLEVBQUUsQ0FBQztRQTZCckQ7O1dBRUc7UUFDSyxtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFFNUM7O1dBRUc7UUFDSyx3QkFBbUIsR0FBMEIsRUFBRSxDQUFDO1FBV3BELDBEQUEwRDtRQUMxRCxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLHlGQUF5RixDQUFDLENBQUM7U0FDOUc7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFD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QUFLLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNkayA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2NkaycpO1xuaW1wb3J0IHsgT2JqIH0gZnJvbSAnQGF3cy1jZGsvdXRpbCc7XG5pbXBvcnQgeyBjbG91ZGZvcm1hdGlvbiwgU3VibmV0SWQsIFZQQ0lkIH0gZnJvbSAnLi9lYzIuZ2VuZXJhdGVkJztcbmltcG9ydCB7IE5ldHdvcmtCdWlsZGVyIH0gZnJvbSAnLi9uZXR3b3JrLXV0aWwnO1xuaW1wb3J0IHsgREVGQVVMVF9TVUJORVRfTkFNRSwgc3VibmV0SWQgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgU3VibmV0VHlwZSwgVnBjTmV0d29ya1JlZiwgVnBjU3VibmV0UmVmIH0gZnJvbSAnLi92cGMtcmVmJztcblxuLyoqXG4gKiBOYW1lIHRhZyBjb25zdGFudFxuICovXG5jb25zdCBOQU1FX1RBRzogc3RyaW5nID0gJ05hbWUnO1xuXG4vKipcbiAqIFZwY05ldHdvcmtQcm9wcyBhbGxvd3MgeW91IHRvIHNwZWNpZnkgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY05ldHdvcmtQcm9wcyB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQ0lEUiByYW5nZSB0byB1c2UgZm9yIHRoZSBWUEMgKGUuZy4gJzEwLjAuMC4wLzE2JykuIFNob3VsZCBiZSBhIG1pbmltdW0gb2YgLzI4IGFuZCBtYXhpbXVtIHNpemUgb2YgLzE2LlxuICAgICAqIFRoZSByYW5nZSB3aWxsIGJlIHNwbGl0IGV2ZW5seSBpbnRvIHR3byBzdWJuZXRzIHBlciBBdmFpbGFiaWxpdHkgWm9uZSAob25lIHB1YmxpYywgb25lIHByaXZhdGUpLlxuICAgICAqL1xuICAgIGNpZHI/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgaW5zdGFuY2VzIGxhdW5jaGVkIGluIHRoZSBWUEMgZ2V0IHB1YmxpYyBETlMgaG9zdG5hbWVzLlxuICAgICAqIElmIHRoaXMgYXR0cmlidXRlIGlzIHRydWUsIGluc3RhbmNlcyBpbiB0aGUgVlBDIGdldCBwdWJsaWMgRE5TIGhvc3RuYW1lcyxcbiAgICAgKiBidXQgb25seSBpZiB0aGUgZW5hYmxlRG5zU3VwcG9ydCBhdHRyaWJ1dGUgaXMgYWxzbyBzZXQgdG8gdHJ1ZS5cbiAgICAgKi9cbiAgICBlbmFibGVEbnNIb3N0bmFtZXM/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIEROUyByZXNvbHV0aW9uIGlzIHN1cHBvcnRlZCBmb3IgdGhlIFZQQy4gSWYgdGhpcyBhdHRyaWJ1dGVcbiAgICAgKiBpcyBmYWxzZSwgdGhlIEFtYXpvbi1wcm92aWRlZCBETlMgc2VydmVyIGluIHRoZSBWUEMgdGhhdCByZXNvbHZlcyBwdWJsaWMgRE5TIGhvc3RuYW1lc1xuICAgICAqIHRvIElQIGFkZHJlc3NlcyBpcyBub3QgZW5hYmxlZC4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgdHJ1ZSwgcXVlcmllcyB0byB0aGUgQW1hem9uXG4gICAgICogcHJvdmlkZWQgRE5TIHNlcnZlciBhdCB0aGUgMTY5LjI1NC4xNjkuMjUzIElQIGFkZHJlc3MsIG9yIHRoZSByZXNlcnZlZCBJUCBhZGRyZXNzXG4gICAgICogYXQgdGhlIGJhc2Ugb2YgdGhlIFZQQyBJUHY0IG5ldHdvcmsgcmFuZ2UgcGx1cyB0d28gd2lsbCBzdWNjZWVkLlxuICAgICAqL1xuICAgIGVuYWJsZURuc1N1cHBvcnQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgdGVuYW5jeSBvZiBpbnN0YW5jZXMgbGF1bmNoZWQgaW50byB0aGUgVlBDLlxuICAgICAqIEJ5IGRlZmF1bHQsIGluc3RhbmNlcyB3aWxsIGJlIGxhdW5jaGVkIHdpdGggZGVmYXVsdCAoc2hhcmVkKSB0ZW5hbmN5LlxuICAgICAqIEJ5IHNldHRpbmcgdGhpcyB0byBkZWRpY2F0ZWQgdGVuYW5jeSwgaW5zdGFuY2VzIHdpbGwgYmUgbGF1bmNoZWQgb24gaGFyZHdhcmUgZGVkaWNhdGVkXG4gICAgICogdG8gYSBzaW5nbGUgQVdTIGN1c3RvbWVyLCB1bmxlc3Mgc3BlY2lmaWNhbGx5IHNwZWNpZmllZCBhdCBpbnN0YW5jZSBsYXVuY2ggdGltZS5cbiAgICAgKiBQbGVhc2Ugbm90ZSwgbm90IGFsbCBpbnN0YW5jZSB0eXBlcyBhcmUgdXNhYmxlIHdpdGggRGVkaWNhdGVkIHRlbmFuY3kuXG4gICAgICovXG4gICAgZGVmYXVsdEluc3RhbmNlVGVuYW5jeT86IERlZmF1bHRJbnN0YW5jZVRlbmFuY3k7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQVdTIHJlc291cmNlIHRhZ3MgdG8gYXNzb2NpYXRlIHdpdGggdGhlIFZQQy5cbiAgICAgKi9cbiAgICB0YWdzPzogY2RrLlRhZ3M7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIEFacyB0byB1c2UgaW4gdGhpcyByZWdpb25cbiAgICAgKlxuICAgICAqIElmIHRoZSByZWdpb24gaGFzIG1vcmUgQVpzIHRoYW4geW91IHdhbnQgdG8gdXNlIChmb3IgZXhhbXBsZSwgYmVjYXVzZSBvZiBFSVAgbGltaXRzKSxcbiAgICAgKiBwaWNrIGEgbG93ZXIgbnVtYmVyIGhlcmUuIFRoZSBBWnMgd2lsbCBiZSBzb3J0ZWQgYW5kIHBpY2tlZCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgbGlzdC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IEFsbCBBWnMgaW4gdGhlIHJlZ2lvblxuICAgICAqL1xuICAgIG1heEFacz86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIERlZmluZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgTkFUIEdhdGV3YXlzIGZvciB0aGlzIFZQQ1xuICAgICAqXG4gICAgICogU2V0dGluZyB0aGlzIG51bWJlciBlbmFibGVzIGEgVlBDIHRvIHRyYWRlIGF2YWlsYWJpbGl0eSBmb3IgdGhlIGNvc3Qgb2ZcbiAgICAgKiBydW5uaW5nIGEgTkFUIEdhdGV3YXkuIEZvciBleGFtcGxlLCBpZiBzZXQgdGhpcyB0byAxIGFuZCB5b3VyIHN1Ym5ldFxuICAgICAqIGNvbmZpZ3VyYXRpb24gaXMgZm9yIDMgUHVibGljIHN1Ym5ldHMgd2l0aCBuYXRHYXRld2F5ID0gYHRydWVgIHRoZW4gb25seVxuICAgICAqIG9uZSBvZiB0aGUgUHVibGljIHN1Ym5ldHMgd2lsbCBoYXZlIGEgZ2F0ZXdheSBhbmQgYWxsIFByaXZhdGUgc3VibmV0c1xuICAgICAqIHdpbGwgcm91dGUgdG8gdGhpcyBOQVQgR2F0ZXdheS5cbiAgICAgKiBAZGVmYXVsdCBtYXhBWnNcbiAgICAgKi9cbiAgICBuYXRHYXRld2F5cz86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGUgc3VibmV0cyB0byBidWlsZCBmb3IgZWFjaCBBWlxuICAgICAqXG4gICAgICogVGhlIHN1Ym5ldHMgYXJlIGNvbnN0cnVjdGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBWUEMgc28geW91IG9ubHkgbmVlZFxuICAgICAqIHNwZWNpZnkgdGhlIGNvbmZpZ3VyYXRpb24uIFRoZSBWUEMgZGV0YWlscyAoVlBDIElELCBzcGVjaWZpYyBDSURSLFxuICAgICAqIHNwZWNpZmljIEFaIHdpbGwgYmUgY2FsY3VsYXRlZCBkdXJpbmcgY3JlYXRpb24pXG4gICAgICpcbiAgICAgKiBGb3IgZXhhbXBsZSBpZiB5b3Ugd2FudCAxIHB1YmxpYyBzdWJuZXQsIDEgcHJpdmF0ZSBzdWJuZXQsIGFuZCAxIGlzb2xhdGVkXG4gICAgICogc3VibmV0IGluIGVhY2ggQVogcHJvdmlkZSB0aGUgZm9sbG93aW5nOlxuICAgICAqIHN1Ym5ldENvbmZpZ3VyYXRpb246IFtcbiAgICAgKiAgICAgIHtcbiAgICAgKiAgICAgICAgICBjaWRyTWFzazogMjQsXG4gICAgICogICAgICAgICAgbmFtZTogJ2luZ3Jlc3MnLFxuICAgICAqICAgICAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUHVibGljLFxuICAgICAqICAgICAgfSxcbiAgICAgKiAgICAgIHtcbiAgICAgKiAgICAgICAgICBjaWRyTWFzazogMjQsXG4gICAgICogICAgICAgICAgbmFtZTogJ2FwcGxpY2F0aW9uJyxcbiAgICAgKiAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlByaXZhdGUsXG4gICAgICogICAgICB9LFxuICAgICAqICAgICAge1xuICAgICAqICAgICAgICAgIGNpZHJNYXNrOiAyOCxcbiAgICAgKiAgICAgICAgICBuYW1lOiAncmRzJyxcbiAgICAgKiAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLklzb2xhdGVkLFxuICAgICAqICAgICAgfVxuICAgICAqIF1cbiAgICAgKlxuICAgICAqIGBjaWRyTWFza2AgaXMgb3B0aW9uYWwgYW5kIGlmIG5vdCBwcm92aWRlZCB0aGUgSVAgc3BhY2UgaW4gdGhlIFZQQyB3aWxsIGJlXG4gICAgICogZXZlbmx5IGRpdmlkZWQgYmV0d2VlbiB0aGUgcmVxdWVzdGVkIHN1Ym5ldHMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0aGUgVlBDIENJRFIgd2lsbCBiZSBldmVubHkgZGl2aWRlZCBiZXR3ZWVuIDEgcHVibGljIGFuZCAxXG4gICAgICogcHJpdmF0ZSBzdWJuZXQgcGVyIEFaXG4gICAgICovXG4gICAgc3VibmV0Q29uZmlndXJhdGlvbj86IFN1Ym5ldENvbmZpZ3VyYXRpb25bXTtcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCB0ZW5hbmN5IG9mIGluc3RhbmNlcyBsYXVuY2hlZCBpbnRvIHRoZSBWUEMuXG4gKi9cbmV4cG9ydCBlbnVtIERlZmF1bHRJbnN0YW5jZVRlbmFuY3kge1xuICAgIC8qKlxuICAgICAqIEluc3RhbmNlcyBjYW4gYmUgbGF1bmNoZWQgd2l0aCBhbnkgdGVuYW5jeS5cbiAgICAgKi9cbiAgICBEZWZhdWx0ID0gJ2RlZmF1bHQnLFxuXG4gICAgLyoqXG4gICAgICogQW55IGluc3RhbmNlIGxhdW5jaGVkIGludG8gdGhlIFZQQyBhdXRvbWF0aWNhbGx5IGhhcyBkZWRpY2F0ZWQgdGVuYW5jeSwgdW5sZXNzIHlvdSBsYXVuY2ggaXQgd2l0aCB0aGUgZGVmYXVsdCB0ZW5hbmN5LlxuICAgICAqL1xuICAgIERlZGljYXRlZCA9ICdkZWRpY2F0ZWQnXG59XG5cbi8qKlxuICogU3BlY2lmeSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIGEgVlBDIHRvIGJlIGJ1aWx0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0Q29uZmlndXJhdGlvbiB7XG4gICAgLyoqXG4gICAgICogVGhlIENJRFIgTWFzayBvciB0aGUgbnVtYmVyIG9mIGxlYWRpbmcgMSBiaXRzIGluIHRoZSByb3V0aW5nIG1hc2tcbiAgICAgKlxuICAgICAqIFZhbGlkIHZhbHVlcyBhcmUgMTYgLSAyOFxuICAgICAqL1xuICAgIGNpZHJNYXNrPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgU3VibmV0IHRvIGNvbmZpZ3VyZS5cbiAgICAgKlxuICAgICAqIFRoZSBTdWJuZXQgdHlwZSB3aWxsIGNvbnRyb2wgdGhlIGFiaWxpdHkgdG8gcm91dGUgYW5kIGNvbm5lY3QgdG8gdGhlXG4gICAgICogSW50ZXJuZXQuXG4gICAgICovXG4gICAgc3VibmV0VHlwZTogU3VibmV0VHlwZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjb21tb24gTG9naWNhbCBOYW1lIGZvciB0aGUgYFZwY1N1Ym5ldGBcbiAgICAgKlxuICAgICAqIFRoaSBuYW1lIHdpbGwgYmUgc3VmZml4ZWQgd2l0aCBhbiBpbnRlZ2VyIGNvcnJlbGF0aW5nIHRvIGEgc3BlY2lmaWNcbiAgICAgKiBhdmFpbGFiaWxpdHkgem9uZS5cbiAgICAgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQVdTIHJlc291cmNlIHRhZ3MgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHJlc291cmNlLlxuICAgICAqL1xuICAgIHRhZ3M/OiBjZGsuVGFncztcbn1cblxuLyoqXG4gKiBWcGNOZXR3b3JrIGRlcGxveXMgYW4gQVdTIFZQQywgd2l0aCBwdWJsaWMgYW5kIHByaXZhdGUgc3VibmV0cyBwZXIgQXZhaWxhYmlsaXR5IFpvbmUuXG4gKiBGb3IgZXhhbXBsZTpcbiAqXG4gKiBpbXBvcnQgeyBWcGNOZXR3b3JrIH0gZnJvbSAnQGF3cy1jZGsvYXdzLWVjMidcbiAqXG4gKiBjb25zdCB2cGMgPSBuZXcgVnBjTmV0d29yayh0aGlzLCB7XG4gKiAgICAgY2lkcjogXCIxMC4wLjAuMC8xNlwiXG4gKiB9KVxuICpcbiAqIC8vIEl0ZXJhdGUgdGhlIHB1YmxpYyBzdWJuZXRzXG4gKiBmb3IgKGxldCBzdWJuZXQgb2YgdnBjLnB1YmxpY1N1Ym5ldHMpIHtcbiAqXG4gKiB9XG4gKlxuICogLy8gSXRlcmF0ZSB0aGUgcHJpdmF0ZSBzdWJuZXRzXG4gKiBmb3IgKGxldCBzdWJuZXQgb2YgdnBjLnByaXZhdGVTdWJuZXRzKSB7XG4gKlxuICogfVxuICovXG5leHBvcnQgY2xhc3MgVnBjTmV0d29yayBleHRlbmRzIFZwY05ldHdvcmtSZWYgaW1wbGVtZW50cyBjZGsuSVRhZ2dhYmxlIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0IENJRFIgcmFuZ2UgdXNlZCB3aGVuIGNyZWF0aW5nIFZQQ3MuXG4gICAgICogVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyBWcGNOZXR3b3JrUHJvcHMgd2hlbiBjcmVhdGluZyBhIFZQQ05ldHdvcmsgcmVzb3VyY2UuXG4gICAgICogZS5nLiBuZXcgVnBjUmVzb3VyY2UodGhpcywgeyBjaWRyOiAnMTkyLjE2OC4wLjAuLzE2JyB9KVxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9DSURSX1JBTkdFOiBzdHJpbmcgPSAnMTAuMC4wLjAvMTYnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgc3VibmV0IGNvbmZpZ3VyYXRpb25cbiAgICAgKlxuICAgICAqIDEgUHVibGljIGFuZCAxIFByaXZhdGUgc3VibmV0IHBlciBBWiBldmVubHkgc3BsaXRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfU1VCTkVUUzogU3VibmV0Q29uZmlndXJhdGlvbltdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlB1YmxpYyxcbiAgICAgICAgICAgIG5hbWU6IERFRkFVTFRfU1VCTkVUX05BTUVbU3VibmV0VHlwZS5QdWJsaWNdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlByaXZhdGUsXG4gICAgICAgICAgICBuYW1lOiBERUZBVUxUX1NVQk5FVF9OQU1FW1N1Ym5ldFR5cGUuUHJpdmF0ZV0sXG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgLyoqXG4gICAgICogSWRlbnRpZmllciBmb3IgdGhpcyBWUENcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IFZQQ0lkO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwdWJsaWMgc3VibmV0cyBpbiB0aGlzIFZQQ1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBwdWJsaWNTdWJuZXRzOiBWcGNTdWJuZXRSZWZbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcml2YXRlIHN1Ym5ldHMgaW4gdGhpcyBWUENcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IFZwY1N1Ym5ldFJlZltdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGlzb2xhdGVkIHN1Ym5ldHMgaW4gdGhpcyBWUENcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBWcGNTdWJuZXRSZWZbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQVpzIGZvciB0aGlzIFZQQ1xuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhdmFpbGFiaWxpdHlab25lczogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBNYW5hZ2UgdGFncyBmb3IgdGhpcyBjb25zdHJ1Y3QgYW5kIGNoaWxkcmVuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHRhZ3M6IGNkay5UYWdNYW5hZ2VyO1xuXG4gICAgLyoqXG4gICAgICogTWF4aW11bSBOdW1iZXIgb2YgTkFUIEdhdGV3YXlzIHVzZWQgdG8gY29udHJvbCBjb3N0XG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB7VnBjTmV0d29ya1Byb3BzLm1heEFac31cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hdEdhdGV3YXlzOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVlBDIHJlc291cmNlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNvdXJjZTogY2xvdWRmb3JtYXRpb24uVlBDUmVzb3VyY2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgTmV0d29ya0J1aWxkZXJcbiAgICAgKi9cbiAgICBwcml2YXRlIG5ldHdvcmtCdWlsZGVyOiBOZXR3b3JrQnVpbGRlcjtcblxuICAgIC8qKlxuICAgICAqIE1hcHBpbmcgb2YgTmF0R2F0ZXdheSBieSBBWlxuICAgICAqL1xuICAgIHByaXZhdGUgbmF0R2F0ZXdheUJ5QVo6IE9iajxjZGsuVG9rZW4+ID0ge307XG5cbiAgICAvKipcbiAgICAgKiBTdWJuZXQgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgVlBDXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdWJuZXRDb25maWd1cmF0aW9uOiBTdWJuZXRDb25maWd1cmF0aW9uW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFZwY05ldHdvcmsgY3JlYXRlcyBhIFZQQyB0aGF0IHNwYW5zIGEgd2hvbGUgcmVnaW9uLlxuICAgICAqIEl0IHdpbGwgYXV0b21hdGljYWxseSBkaXZpZGUgdGhlIHByb3ZpZGVkIFZQQyBDSURSIHJhbmdlLCBhbmQgY3JlYXRlIHB1YmxpYyBhbmQgcHJpdmF0ZSBzdWJuZXRzIHBlciBBdmFpbGFiaWxpdHkgWm9uZS5cbiAgICAgKiBOZXR3b3JrIHJvdXRpbmcgZm9yIHRoZSBwdWJsaWMgc3VibmV0cyB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgb3V0Ym91bmQgYWNjZXNzIGRpcmVjdGx5IHZpYSBhbiBJbnRlcm5ldCBHYXRld2F5LlxuICAgICAqIE5ldHdvcmsgcm91dGluZyBmb3IgdGhlIHByaXZhdGUgc3VibmV0cyB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgb3V0Ym91bmQgYWNjZXNzIHZpYSBhIHNldCBvZiByZXNpbGllbnQgTkFUIEdhdGV3YXlzIChvbmUgcGVyIEFaKS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IGNkay5Db25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFZwY05ldHdvcmtQcm9wcyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICAgICAgLy8gQ2FuJ3QgaGF2ZSBlbmFibGVkRG5zSG9zdG5hbWVzIHdpdGhvdXQgZW5hYmxlRG5zU3VwcG9ydFxuICAgICAgICBpZiAocHJvcHMuZW5hYmxlRG5zSG9zdG5hbWVzICYmICFwcm9wcy5lbmFibGVEbnNTdXBwb3J0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvIHVzZSBETlMgSG9zdG5hbWVzLCBETlMgU3VwcG9ydCBtdXN0IGJlIGVuYWJsZWQsIGhvd2V2ZXIsIGl0IHdhcyBleHBsaWNpdGx5IGRpc2FibGVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50YWdzID0gbmV3IGNkay5UYWdNYW5hZ2VyKHRoaXMsIHByb3BzLnRhZ3MpO1xuICAgICAgICB0aGlzLnRhZ3Muc2V0VGFnKE5BTUVfVEFHLCB0aGlzLnBhdGgsIHsgb3ZlcndyaXRlOiBmYWxzZSB9KTtcblxuICAgICAgICBjb25zdCBjaWRyQmxvY2sgPSBpZlVuZGVmaW5lZChwcm9wcy5jaWRyLCBWcGNOZXR3b3JrLkRFRkFVTFRfQ0lEUl9SQU5HRSk7XG4gICAgICAgIHRoaXMubmV0d29ya0J1aWxkZXIgPSBuZXcgTmV0d29ya0J1aWxkZXIoY2lkckJsb2NrKTtcblxuICAgICAgICBjb25zdCBlbmFibGVEbnNIb3N0bmFtZXMgPSBwcm9wcy5lbmFibGVEbnNIb3N0bmFtZXMgPT0gbnVsbCA/IHRydWUgOiBwcm9wcy5lbmFibGVEbnNIb3N0bmFtZXM7XG4gICAgICAgIGNvbnN0IGVuYWJsZURuc1N1cHBvcnQgPSBwcm9wcy5lbmFibGVEbnNTdXBwb3J0ID09IG51bGwgPyB0cnVlIDogcHJvcHMuZW5hYmxlRG5zU3VwcG9ydDtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VUZW5hbmN5ID0gcHJvcHMuZGVmYXVsdEluc3RhbmNlVGVuYW5jeSB8fCAnZGVmYXVsdCc7XG5cbiAgICAgICAgLy8gRGVmaW5lIGEgVlBDIHVzaW5nIHRoZSBwcm92aWRlZCBDSURSIHJhbmdlXG4gICAgICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgY2xvdWRmb3JtYXRpb24uVlBDUmVzb3VyY2UodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgICAgICAgY2lkckJsb2NrLFxuICAgICAgICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzLFxuICAgICAgICAgICAgZW5hYmxlRG5zU3VwcG9ydCxcbiAgICAgICAgICAgIGluc3RhbmNlVGVuYW5jeSxcbiAgICAgICAgICAgIHRhZ3M6IHRoaXMudGFncyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hdmFpbGFiaWxpdHlab25lcyA9IG5ldyBjZGsuQXZhaWxhYmlsaXR5Wm9uZVByb3ZpZGVyKHRoaXMpLmF2YWlsYWJpbGl0eVpvbmVzO1xuICAgICAgICB0aGlzLmF2YWlsYWJpbGl0eVpvbmVzLnNvcnQoKTtcbiAgICAgICAgaWYgKHByb3BzLm1heEFacyAhPSBudWxsKSB7XG4gICAgICAgICAgIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZXMgPSB0aGlzLmF2YWlsYWJpbGl0eVpvbmVzLnNsaWNlKDAsIHByb3BzLm1heEFacyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZwY0lkID0gdGhpcy5yZXNvdXJjZS5yZWY7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jeUVsZW1lbnRzLnB1c2godGhpcy5yZXNvdXJjZSk7XG5cbiAgICAgICAgdGhpcy5zdWJuZXRDb25maWd1cmF0aW9uID0gaWZVbmRlZmluZWQocHJvcHMuc3VibmV0Q29uZmlndXJhdGlvbiwgVnBjTmV0d29yay5ERUZBVUxUX1NVQk5FVFMpO1xuICAgICAgICBjb25zdCB1c2VOYXRHYXRld2F5ID0gdGhpcy5zdWJuZXRDb25maWd1cmF0aW9uLmZpbHRlcihcbiAgICAgICAgICAgIHN1Ym5ldCA9PiAoc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUHJpdmF0ZSkpLmxlbmd0aCA+IDA7XG4gICAgICAgIHRoaXMubmF0R2F0ZXdheXMgPSBpZlVuZGVmaW5lZChwcm9wcy5uYXRHYXRld2F5cyxcbiAgICAgICAgICAgIHVzZU5hdEdhdGV3YXkgPyB0aGlzLmF2YWlsYWJpbGl0eVpvbmVzLmxlbmd0aCA6IDApO1xuXG4gICAgICAgIC8vIHN1Ym5ldENvbmZpZ3VyYXRpb24gYW5kIG5hdEdhdGV3YXlzIG11c3QgYmUgc2V0IGJlZm9yZSBjYWxsaW5nIGNyZWF0ZVN1Ym5ldHNcbiAgICAgICAgdGhpcy5jcmVhdGVTdWJuZXRzKCk7XG5cbiAgICAgICAgY29uc3QgYWxsb3dPdXRib3VuZCA9IHRoaXMuc3VibmV0Q29uZmlndXJhdGlvbi5maWx0ZXIoXG4gICAgICAgICAgICBzdWJuZXQgPT4gKHN1Ym5ldC5zdWJuZXRUeXBlICE9PSBTdWJuZXRUeXBlLklzb2xhdGVkKSkubGVuZ3RoID4gMDtcblxuICAgICAgICAvLyBDcmVhdGUgYW4gSW50ZXJuZXQgR2F0ZXdheSBhbmQgYXR0YWNoIGl0IGlmIG5lY2Vzc2FyeVxuICAgICAgICBpZiAoYWxsb3dPdXRib3VuZCkge1xuICAgICAgICAgICAgY29uc3QgaWd3ID0gbmV3IGNsb3VkZm9ybWF0aW9uLkludGVybmV0R2F0ZXdheVJlc291cmNlKHRoaXMsICdJR1cnLCB7XG4gICAgICAgICAgICAgICAgdGFnczogbmV3IGNkay5UYWdNYW5hZ2VyKHRoaXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBhdHQgPSBuZXcgY2xvdWRmb3JtYXRpb24uVlBDR2F0ZXdheUF0dGFjaG1lbnRSZXNvdXJjZSh0aGlzLCAnVlBDR1cnLCB7XG4gICAgICAgICAgICAgICAgaW50ZXJuZXRHYXRld2F5SWQ6IGlndy5yZWYsXG4gICAgICAgICAgICAgICAgdnBjSWQ6IHRoaXMucmVzb3VyY2UucmVmXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICh0aGlzLnB1YmxpY1N1Ym5ldHMgYXMgVnBjUHVibGljU3VibmV0W10pLmZvckVhY2gocHVibGljU3VibmV0ID0+IHtcbiAgICAgICAgICAgICAgICBwdWJsaWNTdWJuZXQuYWRkRGVmYXVsdElHV1JvdXRlRW50cnkoaWd3LnJlZik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmN5RWxlbWVudHMucHVzaChpZ3csIGF0dCk7XG5cbiAgICAgICAgICAgICh0aGlzLnByaXZhdGVTdWJuZXRzIGFzIFZwY1ByaXZhdGVTdWJuZXRbXSkuZm9yRWFjaCgocHJpdmF0ZVN1Ym5ldCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBuZ3dJZCA9IHRoaXMubmF0R2F0ZXdheUJ5QVpbcHJpdmF0ZVN1Ym5ldC5hdmFpbGFiaWxpdHlab25lXTtcbiAgICAgICAgICAgICAgICBpZiAobmd3SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ3dBcnJheSA9IEFycmF5LmZyb20oT2JqZWN0LnZhbHVlcyh0aGlzLm5hdEdhdGV3YXlCeUFaKSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJvdW5kIHJvYmluIHRoZSBhdmFpbGFibGUgTmF0R1cgc2luY2Ugb25lIGlzIG5vdCBpbiB5b3VyIEFaXG4gICAgICAgICAgICAgICAgICAgIG5nd0lkID0gbmd3QXJyYXlbaSAlIG5nd0FycmF5Lmxlbmd0aF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByaXZhdGVTdWJuZXQuYWRkRGVmYXVsdE5hdFJvdXRlRW50cnkobmd3SWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7VG9rZW59IFRoZSBJUHY0IENpZHJCbG9jayBhcyByZXR1cm5lZCBieSB0aGUgVlBDXG4gICAgICovXG4gICAgcHVibGljIGdldCBjaWRyKCk6IGNkay5Ub2tlbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlLmdldEF0dChcIkNpZHJCbG9ja1wiKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjcmVhdGVTdWJuZXRzIGNyZWF0ZXMgdGhlIHN1Ym5ldHMgc3BlY2lmaWVkIGJ5IHRoZSBzdWJuZXQgY29uZmlndXJhdGlvblxuICAgICAqIGFycmF5IG9yIGNyZWF0ZXMgdGhlIGBERUZBVUxUX1NVQk5FVFNgIGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZVN1Ym5ldHMoKSB7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1NwYWNlU3VibmV0czogU3VibmV0Q29uZmlndXJhdGlvbltdID0gW107XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIG51bWJlciBvZiBwdWJsaWMvcHJpdmF0ZSBzdWJuZXRzIGJhc2VkIG9uIG51bWJlciBvZiBBWnNcbiAgICAgICAgY29uc3Qgem9uZXMgPSBuZXcgY2RrLkF2YWlsYWJpbGl0eVpvbmVQcm92aWRlcih0aGlzKS5hdmFpbGFiaWxpdHlab25lcztcbiAgICAgICAgem9uZXMuc29ydCgpO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3VibmV0IG9mIHRoaXMuc3VibmV0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgaWYgKHN1Ym5ldC5jaWRyTWFzayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVtYWluaW5nU3BhY2VTdWJuZXRzLnB1c2goc3VibmV0KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY3JlYXRlU3VibmV0UmVzb3VyY2VzKHN1Ym5ldCwgc3VibmV0LmNpZHJNYXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvdGFsUmVtYWluaW5nID0gcmVtYWluaW5nU3BhY2VTdWJuZXRzLmxlbmd0aCAqIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBjaWRyTWFza0ZvclJlbWFpbmcgPSB0aGlzLm5ldHdvcmtCdWlsZGVyLm1hc2tGb3JSZW1haW5pbmdTdWJuZXRzKHRvdGFsUmVtYWluaW5nKTtcbiAgICAgICAgZm9yIChjb25zdCBzdWJuZXQgb2YgcmVtYWluaW5nU3BhY2VTdWJuZXRzKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVN1Ym5ldFJlc291cmNlcyhzdWJuZXQsIGNpZHJNYXNrRm9yUmVtYWluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVN1Ym5ldFJlc291cmNlcyhzdWJuZXRDb25maWc6IFN1Ym5ldENvbmZpZ3VyYXRpb24sIGNpZHJNYXNrOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5hdmFpbGFiaWxpdHlab25lcy5mb3JFYWNoKCh6b25lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHN1Ym5ldElkKHN1Ym5ldENvbmZpZy5uYW1lLCBpbmRleCk7XG4gICAgICAgICAgICBjb25zdCBzdWJuZXRQcm9wczogVnBjU3VibmV0UHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogem9uZSxcbiAgICAgICAgICAgICAgICB2cGNJZDogdGhpcy52cGNJZCxcbiAgICAgICAgICAgICAgICBjaWRyQmxvY2s6IHRoaXMubmV0d29ya0J1aWxkZXIuYWRkU3VibmV0KGNpZHJNYXNrKSxcbiAgICAgICAgICAgICAgICBtYXBQdWJsaWNJcE9uTGF1bmNoOiAoc3VibmV0Q29uZmlnLnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUHVibGljKSxcbiAgICAgICAgICAgICAgICB0YWdzOiBzdWJuZXRDb25maWcudGFncyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHN3aXRjaCAoc3VibmV0Q29uZmlnLnN1Ym5ldFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFN1Ym5ldFR5cGUuUHVibGljOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNTdWJuZXQgPSBuZXcgVnBjUHVibGljU3VibmV0KHRoaXMsIG5hbWUsIHN1Ym5ldFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmF0R2F0ZXdheXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZ3dBcnJheSA9IEFycmF5LmZyb20oT2JqZWN0LnZhbHVlcyh0aGlzLm5hdEdhdGV3YXlCeUFaKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmd3QXJyYXkubGVuZ3RoIDwgdGhpcy5uYXRHYXRld2F5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0R2F0ZXdheUJ5QVpbem9uZV0gPSBwdWJsaWNTdWJuZXQuYWRkTmF0R2F0ZXdheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVibGljU3VibmV0cy5wdXNoKHB1YmxpY1N1Ym5ldCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU3VibmV0VHlwZS5Qcml2YXRlOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcml2YXRlU3VibmV0ID0gbmV3IFZwY1ByaXZhdGVTdWJuZXQodGhpcywgbmFtZSwgc3VibmV0UHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaXZhdGVTdWJuZXRzLnB1c2gocHJpdmF0ZVN1Ym5ldCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgU3VibmV0VHlwZS5Jc29sYXRlZDpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNvbGF0ZWRTdWJuZXQgPSBuZXcgVnBjUHJpdmF0ZVN1Ym5ldCh0aGlzLCBuYW1lLCBzdWJuZXRQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNvbGF0ZWRTdWJuZXRzLnB1c2goaXNvbGF0ZWRTdWJuZXQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFNwZWNpZnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBhIFZQQyBzdWJuZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNTdWJuZXRQcm9wcyB7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYXZhaWxhYmlsaXR5IHpvbmUgZm9yIHRoZSBzdWJuZXRcbiAgICAgKi9cbiAgICBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgVlBDIHdoaWNoIHRoaXMgc3VibmV0IGlzIHBhcnQgb2ZcbiAgICAgKi9cbiAgICB2cGNJZDogY2RrLlRva2VuO1xuXG4gICAgLyoqXG4gICAgICogVGhlIENJRFIgbm90YXRpb24gZm9yIHRoaXMgc3VibmV0XG4gICAgICovXG4gICAgY2lkckJsb2NrOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9scyBpZiBhIHB1YmxpYyBJUCBpcyBhc3NvY2lhdGVkIHRvIGFuIGluc3RhbmNlIGF0IGxhdW5jaFxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdG8gdHJ1ZSBpbiBTdWJuZXQuUHVibGljLCBmYWxzZSBpbiBTdWJuZXQuUHJpdmF0ZSBvciBTdWJuZXQuSXNvbGF0ZWQuXG4gICAgICovXG4gICAgbWFwUHVibGljSXBPbkxhdW5jaD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgQVdTIHJlc291cmNlIHRhZ3MgdG8gYXNzb2NpYXRlIHdpdGggdGhlIFN1Ym5ldFxuICAgICAqL1xuICAgIHRhZ3M/OiBjZGsuVGFncztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbmV3IFZQQyBzdWJuZXQgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGNsYXNzIFZwY1N1Ym5ldCBleHRlbmRzIFZwY1N1Ym5ldFJlZiBpbXBsZW1lbnRzIGNkay5JVGFnZ2FibGUge1xuXG4gICAgLyoqXG4gICAgICogVGhlIEF2YWlsYWJpbGl0eSBab25lIHRoZSBzdWJuZXQgaXMgbG9jYXRlZCBpblxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3VibmV0SWQgZm9yIHRoaXMgcGFydGljdWxhciBzdWJuZXRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0SWQ6IFN1Ym5ldElkO1xuXG4gICAgLyoqXG4gICAgICogTWFuYWdlIHRhZ3MgZm9yIENvbnN0cnVjdCBhbmQgcHJvcGFnYXRlIHRvIGNoaWxkcmVuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHRhZ3M6IGNkay5UYWdNYW5hZ2VyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvdXRlVGFibGVJZCBhdHRhY2hlZCB0byB0aGlzIHN1Ym5ldC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlVGFibGVJZDogY2RrLlRva2VuO1xuXG4gICAgY29uc3RydWN0b3IocGFyZW50OiBjZGsuQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBWcGNTdWJuZXRQcm9wcykge1xuICAgICAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuICAgICAgICB0aGlzLnRhZ3MgPSBuZXcgY2RrLlRhZ01hbmFnZXIodGhpcywgcHJvcHMudGFncyk7XG4gICAgICAgIHRoaXMudGFncy5zZXRUYWcoTkFNRV9UQUcsIHRoaXMucGF0aCwge292ZXJ3cml0ZTogZmFsc2V9KTtcblxuICAgICAgICB0aGlzLmF2YWlsYWJpbGl0eVpvbmUgPSBwcm9wcy5hdmFpbGFiaWxpdHlab25lO1xuICAgICAgICBjb25zdCBzdWJuZXQgPSBuZXcgY2xvdWRmb3JtYXRpb24uU3VibmV0UmVzb3VyY2UodGhpcywgJ1N1Ym5ldCcsIHtcbiAgICAgICAgICAgIHZwY0lkOiBwcm9wcy52cGNJZCxcbiAgICAgICAgICAgIGNpZHJCbG9jazogcHJvcHMuY2lkckJsb2NrLFxuICAgICAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgICAgIG1hcFB1YmxpY0lwT25MYXVuY2g6IHByb3BzLm1hcFB1YmxpY0lwT25MYXVuY2gsXG4gICAgICAgICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1Ym5ldElkID0gc3VibmV0LnJlZjtcbiAgICAgICAgY29uc3QgdGFibGUgPSBuZXcgY2xvdWRmb3JtYXRpb24uUm91dGVUYWJsZVJlc291cmNlKHRoaXMsICdSb3V0ZVRhYmxlJywge1xuICAgICAgICAgICAgdnBjSWQ6IHByb3BzLnZwY0lkLFxuICAgICAgICAgICAgdGFnczogbmV3IGNkay5UYWdNYW5hZ2VyKHRoaXMpLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb3V0ZVRhYmxlSWQgPSB0YWJsZS5yZWY7XG5cbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBwdWJsaWMgcm91dGUgdGFibGUgZm9yIHRoaXMgc3VibmV0LCB0byB0aGlzIHN1Ym5ldFxuICAgICAgICBjb25zdCByb3V0ZUFzc29jID0gbmV3IGNsb3VkZm9ybWF0aW9uLlN1Ym5ldFJvdXRlVGFibGVBc3NvY2lhdGlvblJlc291cmNlKHRoaXMsICdSb3V0ZVRhYmxlQXNzb2NpYXRpb2luJywge1xuICAgICAgICAgICAgc3VibmV0SWQ6IHRoaXMuc3VibmV0SWQsXG4gICAgICAgICAgICByb3V0ZVRhYmxlSWQ6IHRhYmxlLnJlZlxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRlcGVuZGVuY3lFbGVtZW50cy5wdXNoKHN1Ym5ldCwgdGFibGUsIHJvdXRlQXNzb2MpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhZGREZWZhdWx0Um91dGVUb05BVChuYXRHYXRld2F5SWQ6IGNkay5Ub2tlbikge1xuICAgICAgICBuZXcgY2xvdWRmb3JtYXRpb24uUm91dGVSZXNvdXJjZSh0aGlzLCBgRGVmYXVsdFJvdXRlYCwge1xuICAgICAgICAgICAgcm91dGVUYWJsZUlkOiB0aGlzLnJvdXRlVGFibGVJZCxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uQ2lkckJsb2NrOiAnMC4wLjAuMC8wJyxcbiAgICAgICAgICAgIG5hdEdhdGV3YXlJZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYWRkRGVmYXVsdFJvdXRlVG9JR1coZ2F0ZXdheUlkOiBjZGsuVG9rZW4pIHtcbiAgICAgICAgbmV3IGNsb3VkZm9ybWF0aW9uLlJvdXRlUmVzb3VyY2UodGhpcywgYERlZmF1bHRSb3V0ZWAsIHtcbiAgICAgICAgICAgIHJvdXRlVGFibGVJZDogdGhpcy5yb3V0ZVRhYmxlSWQsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbkNpZHJCbG9jazogJzAuMC4wLjAvMCcsXG4gICAgICAgICAgICBnYXRld2F5SWRcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBwdWJsaWMgVlBDIHN1Ym5ldCByZXNvdXJjZVxuICovXG5leHBvcnQgY2xhc3MgVnBjUHVibGljU3VibmV0IGV4dGVuZHMgVnBjU3VibmV0IHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IGNkay5Db25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFZwY1N1Ym5ldFByb3BzKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSwgcHJvcHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIGRlZmF1bHQgcm91dGUgdGhhdCBwb2ludHMgdG8gYSBwYXNzZWQgSUdXXG4gICAgICovXG4gICAgcHVibGljIGFkZERlZmF1bHRJR1dSb3V0ZUVudHJ5KGdhdGV3YXlJZDogY2RrLlRva2VuKSB7XG4gICAgICAgIHRoaXMuYWRkRGVmYXVsdFJvdXRlVG9JR1coZ2F0ZXdheUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IG1hbmFnZWQgTkFUIGdhdGV3YXkgYXR0YWNoZWQgdG8gdGhpcyBwdWJsaWMgc3VibmV0LlxuICAgICAqIEFsc28gYWRkcyB0aGUgRUlQIGZvciB0aGUgbWFuYWdlZCBOQVQuXG4gICAgICogUmV0dXJucyB0aGUgTkFUIEdhdGV3YXkgcmVmXG4gICAgICovXG4gICAgcHVibGljIGFkZE5hdEdhdGV3YXkoKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIE5BVCBHYXRld2F5IGluIHRoaXMgcHVibGljIHN1Ym5ldFxuICAgICAgICBjb25zdCBuZ3cgPSBuZXcgY2xvdWRmb3JtYXRpb24uTmF0R2F0ZXdheVJlc291cmNlKHRoaXMsIGBOQVRHYXRld2F5YCwge1xuICAgICAgICAgICAgc3VibmV0SWQ6IHRoaXMuc3VibmV0SWQsXG4gICAgICAgICAgICBhbGxvY2F0aW9uSWQ6IG5ldyBjbG91ZGZvcm1hdGlvbi5FSVBSZXNvdXJjZSh0aGlzLCBgRUlQYCwge1xuICAgICAgICAgICAgICAgIGRvbWFpbjogJ3ZwYydcbiAgICAgICAgICAgIH0pLmVpcEFsbG9jYXRpb25JZCxcbiAgICAgICAgICAgIHRhZ3M6IG5ldyBjZGsuVGFnTWFuYWdlcih0aGlzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZ3cucmVmO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcHJpdmF0ZSBWUEMgc3VibmV0IHJlc291cmNlXG4gKi9cbmV4cG9ydCBjbGFzcyBWcGNQcml2YXRlU3VibmV0IGV4dGVuZHMgVnBjU3VibmV0IHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IGNkay5Db25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFZwY1N1Ym5ldFByb3BzKSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCwgbmFtZSwgcHJvcHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gZW50cnkgdG8gdGhpcyBzdWJuZXRzIHJvdXRlIHRhYmxlIHRoYXQgcG9pbnRzIHRvIHRoZSBwYXNzZWQgTkFUR2F0d2F5SWRcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRGVmYXVsdE5hdFJvdXRlRW50cnkobmF0R2F0ZXdheUlkOiBjZGsuVG9rZW4pIHtcbiAgICAgICAgdGhpcy5hZGREZWZhdWx0Um91dGVUb05BVChuYXRHYXRld2F5SWQpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaWZVbmRlZmluZWQ8VD4odmFsdWU6IFQgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZTogVCk6IFQge1xuICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59XG4iXX0=
{
"name": "@aws-cdk/aws-ec2",
"version": "0.8.2",
"version": "0.9.0",
"description": "CDK Constructs for AWS EC2",

@@ -17,2 +17,8 @@ "main": "lib/index.js",

},
"dotnet": {
"namespace": "Amazon.CDK.AWS.EC2",
"packageId": "Amazon.CDK.AWS.EC2",
"signAssembly": true,
"assemblyOriginatorKeyFile": "../../key.snk"
},
"sphinx": {}

@@ -50,15 +56,13 @@ }

"devDependencies": {
"@aws-cdk/assert": "^0.8.2",
"cdk-build-tools": "^0.8.2",
"cdk-integ-tools": "^0.8.2",
"cfn2ts": "^0.8.2",
"pkglint": "^0.8.2"
"@aws-cdk/assert": "^0.9.0",
"cdk-build-tools": "^0.9.0",
"cdk-integ-tools": "^0.9.0",
"cfn2ts": "^0.9.0",
"pkglint": "^0.9.0"
},
"dependencies": {
"@aws-cdk/aws-autoscaling": "^0.8.2",
"@aws-cdk/aws-elasticloadbalancing": "^0.8.2",
"@aws-cdk/aws-iam": "^0.8.2",
"@aws-cdk/aws-sns": "^0.8.2",
"@aws-cdk/cdk": "^0.8.2",
"@aws-cdk/util": "^0.8.2"
"@aws-cdk/aws-elasticloadbalancing": "^0.9.0",
"@aws-cdk/aws-iam": "^0.9.0",
"@aws-cdk/cdk": "^0.9.0",
"@aws-cdk/util": "^0.9.0"
},

@@ -65,0 +69,0 @@ "bundledDependencies": [

@@ -175,52 +175,3 @@ ## AWS Compute and Networking Construct Library

### Fleet
### Auto Scaling Group
An `AutoScalingGroup` represents a number of instances on which you run your code. You
pick the size of the fleet, the instance type and the OS image:
```ts
import ec2 = require('@aws-cdk/aws-ec2');
new ec2.AutoScalingGroup(stack, 'ASG', {
vpc,
instanceType: new ec2.InstanceTypePair(InstanceClass.Burstable2, InstanceSize.Micro),
machineImage: new ec2.LinuxImage({
'us-east-1': 'ami-97785bed'
})
});
```
> NOTE: AutoScalingGroup has an property called `allowAllOutbound` (allowing the instances to contact the
> internet) which is set to `true` by default. Be sure to set this to `false` if you don't want
> your instances to be able to start arbitrary connections.
### AMIs
AMIs control the OS that gets launched when you start your instance.
Depending on the type of AMI, you select it a different way.
The latest version of Windows images are regionally published under labels,
so you can select Windows images like this:
new ec2.WindowsImage(WindowsVersion.WindowsServer2016EnglishNanoBase)
You can select the latest Amazon Linux image like this:
new ec2.AmazonLinuxImage()
Other Linux images are unfortunately not currently published this way, so you have
to supply a region-to-AMI map when creating a Linux image:
machineImage: new ec2.GenericLinuxImage({
'us-east-1': 'ami-97785bed',
'eu-west-1': 'ami-12345678',
// ...
})
> NOTE: Selecting Linux images will change when the information is published in an automatically
> consumable way.
### Load Balancer

@@ -227,0 +178,0 @@

@@ -10,3 +10,8 @@ {

"InstanceTenancy": "default",
"Tags": []
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc"
}
]
}

@@ -22,3 +27,9 @@ },

"AvailabilityZone": "test-region-1a",
"MapPublicIpOnLaunch": true
"MapPublicIpOnLaunch": true,
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PublicSubnet1"
}
]
}

@@ -31,3 +42,9 @@ },

"Ref": "MyVpcF9F0CA6F"
}
},
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PublicSubnet1"
}
]
}

@@ -63,3 +80,9 @@ },

"Ref": "MyVpcPublicSubnet1SubnetF6608456"
}
},
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PublicSubnet1"
}
]
}

@@ -87,3 +110,9 @@ },

"AvailabilityZone": "test-region-1b",
"MapPublicIpOnLaunch": true
"MapPublicIpOnLaunch": true,
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PublicSubnet2"
}
]
}

@@ -96,3 +125,9 @@ },

"Ref": "MyVpcF9F0CA6F"
}
},
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PublicSubnet2"
}
]
}

@@ -128,3 +163,9 @@ },

"Ref": "MyVpcPublicSubnet2Subnet492B6BFB"
}
},
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PublicSubnet2"
}
]
}

@@ -152,3 +193,9 @@ },

"AvailabilityZone": "test-region-1c",
"MapPublicIpOnLaunch": true
"MapPublicIpOnLaunch": true,
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PublicSubnet3"
}
]
}

@@ -161,3 +208,9 @@ },

"Ref": "MyVpcF9F0CA6F"
}
},
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PublicSubnet3"
}
]
}

@@ -193,3 +246,9 @@ },

"Ref": "MyVpcPublicSubnet3Subnet57EEE236"
}
},
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PublicSubnet3"
}
]
}

@@ -217,3 +276,9 @@ },

"AvailabilityZone": "test-region-1a",
"MapPublicIpOnLaunch": false
"MapPublicIpOnLaunch": false,
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PrivateSubnet1"
}
]
}

@@ -226,3 +291,9 @@ },

"Ref": "MyVpcF9F0CA6F"
}
},
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PrivateSubnet1"
}
]
}

@@ -261,3 +332,9 @@ },

"AvailabilityZone": "test-region-1b",
"MapPublicIpOnLaunch": false
"MapPublicIpOnLaunch": false,
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PrivateSubnet2"
}
]
}

@@ -270,3 +347,9 @@ },

"Ref": "MyVpcF9F0CA6F"
}
},
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PrivateSubnet2"
}
]
}

@@ -305,3 +388,9 @@ },

"AvailabilityZone": "test-region-1c",
"MapPublicIpOnLaunch": false
"MapPublicIpOnLaunch": false,
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PrivateSubnet3"
}
]
}

@@ -314,3 +403,9 @@ },

"Ref": "MyVpcF9F0CA6F"
}
},
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc/PrivateSubnet3"
}
]
}

@@ -342,3 +437,11 @@ },

"MyVpcIGW5C4A4F63": {
"Type": "AWS::EC2::InternetGateway"
"Type": "AWS::EC2::InternetGateway",
"Properties": {
"Tags": [
{
"Key": "Name",
"Value": "aws-cdk-ec2-vpc/MyVpc"
}
]
}
},

@@ -345,0 +448,0 @@ "MyVpcVPCGW488ACE0D": {

@@ -9,2 +9,2 @@ "use strict";

process.stdout.write(app.run());
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcudnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcudnBjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQTBDO0FBQzFDLGdDQUFvQztBQUVwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFFaEQsSUFBSSxnQkFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUUvQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyJ9
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZWcudnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW50ZWcudnBjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQTBDO0FBQzFDLGdDQUFvQztBQUVwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFFaEQsSUFBSSxnQkFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUUvQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCwgU3RhY2sgfSBmcm9tICdAYXdzLWNkay9jZGsnO1xuaW1wb3J0IHsgVnBjTmV0d29yayB9IGZyb20gJy4uL2xpYic7XG5cbmNvbnN0IGFwcCA9IG5ldyBBcHAocHJvY2Vzcy5hcmd2KTtcblxuY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soYXBwLCAnYXdzLWNkay1lYzItdnBjJyk7XG5cbm5ldyBWcGNOZXR3b3JrKHN0YWNrLCAnTXlWcGMnKTtcblxucHJvY2Vzcy5zdGRvdXQud3JpdGUoYXBwLnJ1bigpKTtcbiJdfQ==
import { Test } from 'nodeunit';
declare const _default: {
'peering between two security groups does not recursive infinitely'(test: Test): void;
'(imported) SecurityGroup can be used as target of .allowTo()'(test: Test): void;
};
export = _default;
"use strict";
const assert_1 = require("@aws-cdk/assert");
const cdk_1 = require("@aws-cdk/cdk");
const lib_1 = require("../lib");
class ConnectionsHolder {
class SomethingConnectable {
constructor(connections) {

@@ -16,4 +17,4 @@ this.connections = connections;

const sg2 = new lib_1.SecurityGroup(stack, 'SG2', { vpc });
const conn1 = new ConnectionsHolder(new lib_1.Connections(sg1));
const conn2 = new ConnectionsHolder(new lib_1.Connections(sg2));
const conn1 = new SomethingConnectable(new lib_1.Connections({ securityGroup: sg1 }));
const conn2 = new SomethingConnectable(new lib_1.Connections({ securityGroup: sg2 }));
// WHEN

@@ -23,4 +24,33 @@ conn1.connections.allowTo(conn2, new lib_1.TcpPort(80), 'Test');

test.done();
},
'(imported) SecurityGroup can be used as target of .allowTo()'(test) {
// GIVEN
const stack = new cdk_1.Stack();
const vpc = new lib_1.VpcNetwork(stack, 'VPC');
const sg1 = new lib_1.SecurityGroup(stack, 'SomeSecurityGroup', { vpc });
const somethingConnectable = new SomethingConnectable(new lib_1.Connections({ securityGroup: sg1 }));
const securityGroup = lib_1.SecurityGroupRef.import(stack, 'ImportedSG', { securityGroupId: new lib_1.SecurityGroupId('sg-12345') });
// WHEN
somethingConnectable.connections.allowTo(securityGroup, new lib_1.TcpAllPorts(), 'Connect there');
// THEN: rule to generated security group to connect to imported
assert_1.expect(stack).to(assert_1.haveResource("AWS::EC2::SecurityGroupEgress", {
GroupId: { "Fn::GetAtt": ["SomeSecurityGroupEF219AD6", "GroupId"] },
IpProtocol: "tcp",
Description: "Connect there",
DestinationSecurityGroupId: "sg-12345",
FromPort: 0,
ToPort: 65535
}));
// THEN: rule to imported security group to allow connections from generated
assert_1.expect(stack).to(assert_1.haveResource("AWS::EC2::SecurityGroupIngress", {
IpProtocol: "tcp",
Description: "Connect there",
FromPort: 0,
GroupId: "sg-12345",
SourceSecurityGroupId: { "Fn::GetAtt": ["SomeSecurityGroupEF219AD6", "GroupId"] },
ToPort: 65535
}));
test.done();
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jb25uZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHNDQUFxQztBQUVyQyxnQ0FBdUY7QUFzQnZGLE1BQU0saUJBQWlCO0lBQ25CLFlBQTRCLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQ3BELENBQUM7Q0FDSjtBQXZCRCxpQkFBUztJQUNMLG1FQUFtRSxDQUFDLElBQVU7UUFDMUUsUUFBUTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFFbEcsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFJLG1CQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckQsTUFBTSxHQUFHLEdBQUcsSUFBSSxtQkFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXJELE1BQU0sS0FBSyxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxpQkFBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLGlCQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUxRCxPQUFPO1FBQ1AsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksYUFBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTFELE9BQU87UUFDUCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztDQUNKLENBQUMifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jb25uZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QuY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDRDQUF1RDtBQUN2RCxzQ0FBcUM7QUFFckMsZ0NBQXVJO0FBeUR2SSxNQUFNLG9CQUFvQjtJQUN0QixZQUE0QixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUNwRCxDQUFDO0NBQ0o7QUExREQsaUJBQVM7SUFDTCxtRUFBbUUsQ0FBQyxJQUFVO1FBQzFFLFFBQVE7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBRWxHLE1BQU0sR0FBRyxHQUFHLElBQUksZ0JBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxtQkFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksbUJBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUVyRCxNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksaUJBQVcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEYsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLGlCQUFXLENBQUMsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWhGLE9BQU87UUFDUCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxhQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFMUQsT0FBTztRQUNQLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsOERBQThELENBQUMsSUFBVTtRQUNyRSxRQUFRO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFLLEVBQUUsQ0FBQztRQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLGdCQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLElBQUksbUJBQWEsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLGlCQUFXLENBQUMsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9GLE1BQU0sYUFBYSxHQUFHLHNCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUkscUJBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFekgsT0FBTztRQUNQLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksaUJBQVcsRUFBRSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRTVGLGdFQUFnRTtRQUNoRSxlQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFZLENBQUMsK0JBQStCLEVBQUU7WUFDekQsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUUsMkJBQTJCLEVBQUUsU0FBUyxDQUFFLEVBQUU7WUFDckUsVUFBVSxFQUFFLEtBQUs7WUFDakIsV0FBVyxFQUFFLGVBQWU7WUFDNUIsMEJBQTBCLEVBQUUsVUFBVTtZQUN0QyxRQUFRLEVBQUUsQ0FBQztZQUNYLE1BQU0sRUFBRSxLQUFLO1NBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUosNEVBQTRFO1FBQzVFLGVBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMscUJBQVksQ0FBQyxnQ0FBZ0MsRUFBRTtZQUM1RCxVQUFVLEVBQUUsS0FBSztZQUNqQixXQUFXLEVBQUUsZUFBZTtZQUM1QixRQUFRLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxVQUFVO1lBQ25CLHFCQUFxQixFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUUsMkJBQTJCLEVBQUUsU0FBUyxDQUFFLEVBQUU7WUFDbkYsTUFBTSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleHBlY3QsIGhhdmVSZXNvdXJjZSB9IGZyb20gJ0Bhd3MtY2RrL2Fzc2VydCc7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gJ0Bhd3MtY2RrL2Nkayc7XG5pbXBvcnQgeyBUZXN0IH0gZnJvbSAnbm9kZXVuaXQnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbnMsIElDb25uZWN0YWJsZSwgU2VjdXJpdHlHcm91cCwgU2VjdXJpdHlHcm91cElkLCBTZWN1cml0eUdyb3VwUmVmLCBUY3BBbGxQb3J0cywgVGNwUG9ydCwgVnBjTmV0d29yayB9IGZyb20gJy4uL2xpYic7XG5cbmV4cG9ydCA9IHtcbiAgICAncGVlcmluZyBiZXR3ZWVuIHR3byBzZWN1cml0eSBncm91cHMgZG9lcyBub3QgcmVjdXJzaXZlIGluZmluaXRlbHknKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sodW5kZWZpbmVkLCAnVGVzdFN0YWNrJywgeyBlbnY6IHsgYWNjb3VudDogJzEyMzQ1Njc4JywgcmVnaW9uOiAnZHVtbXknIH19KTtcblxuICAgICAgICBjb25zdCB2cGMgPSBuZXcgVnBjTmV0d29yayhzdGFjaywgJ1ZQQycpO1xuICAgICAgICBjb25zdCBzZzEgPSBuZXcgU2VjdXJpdHlHcm91cChzdGFjaywgJ1NHMScsIHsgdnBjIH0pO1xuICAgICAgICBjb25zdCBzZzIgPSBuZXcgU2VjdXJpdHlHcm91cChzdGFjaywgJ1NHMicsIHsgdnBjIH0pO1xuXG4gICAgICAgIGNvbnN0IGNvbm4xID0gbmV3IFNvbWV0aGluZ0Nvbm5lY3RhYmxlKG5ldyBDb25uZWN0aW9ucyh7IHNlY3VyaXR5R3JvdXA6IHNnMSB9KSk7XG4gICAgICAgIGNvbnN0IGNvbm4yID0gbmV3IFNvbWV0aGluZ0Nvbm5lY3RhYmxlKG5ldyBDb25uZWN0aW9ucyh7IHNlY3VyaXR5R3JvdXA6IHNnMiB9KSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25uMS5jb25uZWN0aW9ucy5hbGxvd1RvKGNvbm4yLCBuZXcgVGNwUG9ydCg4MCksICdUZXN0Jyk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9LFxuXG4gICAgJyhpbXBvcnRlZCkgU2VjdXJpdHlHcm91cCBjYW4gYmUgdXNlZCBhcyB0YXJnZXQgb2YgLmFsbG93VG8oKScodGVzdDogVGVzdCkge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAgICAgICBjb25zdCB2cGMgPSBuZXcgVnBjTmV0d29yayhzdGFjaywgJ1ZQQycpO1xuICAgICAgICBjb25zdCBzZzEgPSBuZXcgU2VjdXJpdHlHcm91cChzdGFjaywgJ1NvbWVTZWN1cml0eUdyb3VwJywgeyB2cGMgfSk7XG4gICAgICAgIGNvbnN0IHNvbWV0aGluZ0Nvbm5lY3RhYmxlID0gbmV3IFNvbWV0aGluZ0Nvbm5lY3RhYmxlKG5ldyBDb25uZWN0aW9ucyh7IHNlY3VyaXR5R3JvdXA6IHNnMSB9KSk7XG5cbiAgICAgICAgY29uc3Qgc2VjdXJpdHlHcm91cCA9IFNlY3VyaXR5R3JvdXBSZWYuaW1wb3J0KHN0YWNrLCAnSW1wb3J0ZWRTRycsIHsgc2VjdXJpdHlHcm91cElkOiBuZXcgU2VjdXJpdHlHcm91cElkKCdzZy0xMjM0NScpIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgc29tZXRoaW5nQ29ubmVjdGFibGUuY29ubmVjdGlvbnMuYWxsb3dUbyhzZWN1cml0eUdyb3VwLCBuZXcgVGNwQWxsUG9ydHMoKSwgJ0Nvbm5lY3QgdGhlcmUnKTtcblxuICAgICAgICAvLyBUSEVOOiBydWxlIHRvIGdlbmVyYXRlZCBzZWN1cml0eSBncm91cCB0byBjb25uZWN0IHRvIGltcG9ydGVkXG4gICAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlKFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIiwge1xuICAgICAgICAgICAgICBHcm91cElkOiB7IFwiRm46OkdldEF0dFwiOiBbIFwiU29tZVNlY3VyaXR5R3JvdXBFRjIxOUFENlwiLCBcIkdyb3VwSWRcIiBdIH0sXG4gICAgICAgICAgICAgIElwUHJvdG9jb2w6IFwidGNwXCIsXG4gICAgICAgICAgICAgIERlc2NyaXB0aW9uOiBcIkNvbm5lY3QgdGhlcmVcIixcbiAgICAgICAgICAgICAgRGVzdGluYXRpb25TZWN1cml0eUdyb3VwSWQ6IFwic2ctMTIzNDVcIixcbiAgICAgICAgICAgICAgRnJvbVBvcnQ6IDAsXG4gICAgICAgICAgICAgIFRvUG9ydDogNjU1MzVcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIC8vIFRIRU46IHJ1bGUgdG8gaW1wb3J0ZWQgc2VjdXJpdHkgZ3JvdXAgdG8gYWxsb3cgY29ubmVjdGlvbnMgZnJvbSBnZW5lcmF0ZWRcbiAgICAgICAgZXhwZWN0KHN0YWNrKS50byhoYXZlUmVzb3VyY2UoXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIiwge1xuICAgICAgICAgICAgSXBQcm90b2NvbDogXCJ0Y3BcIixcbiAgICAgICAgICAgIERlc2NyaXB0aW9uOiBcIkNvbm5lY3QgdGhlcmVcIixcbiAgICAgICAgICAgIEZyb21Qb3J0OiAwLFxuICAgICAgICAgICAgR3JvdXBJZDogXCJzZy0xMjM0NVwiLFxuICAgICAgICAgICAgU291cmNlU2VjdXJpdHlHcm91cElkOiB7IFwiRm46OkdldEF0dFwiOiBbIFwiU29tZVNlY3VyaXR5R3JvdXBFRjIxOUFENlwiLCBcIkdyb3VwSWRcIiBdIH0sXG4gICAgICAgICAgICBUb1BvcnQ6IDY1NTM1XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICB9XG59O1xuXG5jbGFzcyBTb21ldGhpbmdDb25uZWN0YWJsZSBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucykge1xuICAgIH1cbn1cbiJdfQ==

@@ -28,2 +28,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5sb2FkYmFsYW5jZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmxvYWRiYWxhbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNENBQXVEO0FBQ3ZELHNDQUFxQztBQUVyQyxnQ0FBZ0Y7QUFFaEYsaUJBQVM7SUFDTCx3Q0FBd0MsQ0FBQyxJQUFVO1FBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDM0YsS0FBSyxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sR0FBRyxHQUFHLElBQUksZ0JBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFekMsTUFBTSxFQUFFLEdBQUcsSUFBSSx5QkFBbUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV6RCxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQ1gsZ0JBQWdCLEVBQUUsMkJBQXFCLENBQUMsSUFBSTtZQUM1QyxZQUFZLEVBQUUsSUFBSTtZQUNsQixnQkFBZ0IsRUFBRSwyQkFBcUIsQ0FBQyxJQUFJO1lBQzVDLFlBQVksRUFBRSxJQUFJO1NBQ3JCLENBQUMsQ0FBQztRQUVILGVBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMscUJBQVksQ0FBQyx5Q0FBeUMsRUFBRTtZQUNyRSxTQUFTLEVBQUUsQ0FBQztvQkFDUixZQUFZLEVBQUUsTUFBTTtvQkFDcEIsZ0JBQWdCLEVBQUUsTUFBTTtvQkFDeEIsZ0JBQWdCLEVBQUUsTUFBTTtvQkFDeEIsUUFBUSxFQUFFLE1BQU07aUJBQ25CLENBQUM7U0FDTCxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyJ9
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5sb2FkYmFsYW5jZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LmxvYWRiYWxhbmNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNENBQXVEO0FBQ3ZELHNDQUFxQztBQUVyQyxnQ0FBZ0Y7QUFFaEYsaUJBQVM7SUFDTCx3Q0FBd0MsQ0FBQyxJQUFVO1FBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBSyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDM0YsS0FBSyxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sR0FBRyxHQUFHLElBQUksZ0JBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFekMsTUFBTSxFQUFFLEdBQUcsSUFBSSx5QkFBbUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV6RCxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQ1gsZ0JBQWdCLEVBQUUsMkJBQXFCLENBQUMsSUFBSTtZQUM1QyxZQUFZLEVBQUUsSUFBSTtZQUNsQixnQkFBZ0IsRUFBRSwyQkFBcUIsQ0FBQyxJQUFJO1lBQzVDLFlBQVksRUFBRSxJQUFJO1NBQ3JCLENBQUMsQ0FBQztRQUVILGVBQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMscUJBQVksQ0FBQyx5Q0FBeUMsRUFBRTtZQUNyRSxTQUFTLEVBQUUsQ0FBQztvQkFDUixZQUFZLEVBQUUsTUFBTTtvQkFDcEIsZ0JBQWdCLEVBQUUsTUFBTTtvQkFDeEIsZ0JBQWdCLEVBQUUsTUFBTTtvQkFDeEIsUUFBUSxFQUFFLE1BQU07aUJBQ25CLENBQUM7U0FDTCxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4cGVjdCwgaGF2ZVJlc291cmNlIH0gZnJvbSAnQGF3cy1jZGsvYXNzZXJ0JztcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnQGF3cy1jZGsvY2RrJztcbmltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQgeyBDbGFzc2ljTG9hZEJhbGFuY2VyLCBMb2FkQmFsYW5jaW5nUHJvdG9jb2wsIFZwY05ldHdvcmsgfSBmcm9tICcuLi9saWInO1xuXG5leHBvcnQgPSB7XG4gICAgJ3Rlc3Qgc3BlY2lmeWluZyBub25zdGFuZGFyZCBwb3J0IHdvcmtzJyh0ZXN0OiBUZXN0KSB7XG4gICAgICAgIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IGVudjogeyBhY2NvdW50OiAnMTIzNCcsIHJlZ2lvbjogJ3Rlc3QnIH19KTtcbiAgICAgICAgc3RhY2suc2V0Q29udGV4dCgnYXZhaWxhYmlsaXR5LXpvbmVzOjEyMzQ6dGVzdCcsIFsndGVzdC0xYScsICd0ZXN0LTFiJ10pO1xuICAgICAgICBjb25zdCB2cGMgPSBuZXcgVnBjTmV0d29yayhzdGFjaywgJ1ZDUCcpO1xuXG4gICAgICAgIGNvbnN0IGxiID0gbmV3IENsYXNzaWNMb2FkQmFsYW5jZXIoc3RhY2ssICdMQicsIHsgdnBjIH0pO1xuXG4gICAgICAgIGxiLmFkZExpc3RlbmVyKHtcbiAgICAgICAgICAgIGV4dGVybmFsUHJvdG9jb2w6IExvYWRCYWxhbmNpbmdQcm90b2NvbC5IdHRwLFxuICAgICAgICAgICAgZXh0ZXJuYWxQb3J0OiA4MDgwLFxuICAgICAgICAgICAgaW50ZXJuYWxQcm90b2NvbDogTG9hZEJhbGFuY2luZ1Byb3RvY29sLkh0dHAsXG4gICAgICAgICAgICBpbnRlcm5hbFBvcnQ6IDgwODAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4cGVjdChzdGFjaykudG8oaGF2ZVJlc291cmNlKFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZzo6TG9hZEJhbGFuY2VyXCIsIHtcbiAgICAgICAgICAgIExpc3RlbmVyczogW3tcbiAgICAgICAgICAgICAgICBJbnN0YW5jZVBvcnQ6IFwiODA4MFwiLFxuICAgICAgICAgICAgICAgIEluc3RhbmNlUHJvdG9jb2w6IFwiaHR0cFwiLFxuICAgICAgICAgICAgICAgIExvYWRCYWxhbmNlclBvcnQ6IFwiODA4MFwiLFxuICAgICAgICAgICAgICAgIFByb3RvY29sOiBcImh0dHBcIlxuICAgICAgICAgICAgfV1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRlc3QuZG9uZSgpO1xuICAgIH1cbn07XG4iXX0=

@@ -185,2 +185,2 @@ "use strict";

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5uZXR3b3JrLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5uZXR3b3JrLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxzREFLNkI7QUFFN0IsaUJBQVM7SUFFTCxFQUFFLEVBQUU7UUFDQSxpREFBaUQsQ0FBQyxJQUFVO1lBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUNELG9DQUFvQyxDQUFDLElBQVU7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsMkJBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM1QyxDQUFDLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDO1FBQ0QsZ0RBQWdELENBQUMsSUFBVTtZQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxzQ0FBc0MsQ0FBQyxJQUFVO1lBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNiLDJCQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDYiwyQkFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JCLElBQUks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
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5uZXR3b3JrLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC5uZXR3b3JrLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxzREFLNkI7QUFFN0IsaUJBQVM7SUFFTCxFQUFFLEVBQUU7UUFDQSxpREFBaUQsQ0FBQyxJQUFVO1lBQ3hELElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUNELG9DQUFvQyxDQUFDLElBQVU7WUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ2IsMkJBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM1QyxDQUFDLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixDQUFDO1FBQ0QsZ0RBQWdELENBQUMsSUFBVTtZQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxzQ0FBc0MsQ0FBQyxJQUFVO1lBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNiLDJCQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6QyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDYiwyQkFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JCLElBQUks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QUM7UUFDM0UsQ0FBQztLQUNKO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3QgfSBmcm9tICdub2RldW5pdCc7XG5pbXBvcnQge1xuICBDaWRyQmxvY2ssXG4gIEludmFsaWRDaWRyUmFuZ2VFcnJvcixcbiAgTmV0d29ya0J1aWxkZXIsXG4gIE5ldHdvcmtVdGlsc1xufSBmcm9tICcuLi9saWIvbmV0d29yay11dGlsJztcblxuZXhwb3J0ID0ge1xuXG4gICAgSVA6IHtcbiAgICAgICAgXCJzaG91bGQgY29udmVydCBhIHZhbGlkIElQIEFkZHJlc3MgdG8gYW4gaW50ZWdlclwiKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIHRlc3Quc3RyaWN0RXF1YWwoTmV0d29ya1V0aWxzLmlwVG9OdW0oJzE3NC42Ni4xNzMuMTY4JyksIDI5MjM2MDU0MTYpO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgICAgIFwic2hvdWxkIHRocm93IG9uIGludmFsaWQgSVAgQWRkcmVzc1wiKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIHRlc3QudGhyb3dzKCgpID0+IHtcbiAgICAgICAgICAgICAgICBOZXR3b3JrVXRpbHMuaXBUb051bSgnMTc0LjI2Ni4xNzMuMTY4Jyk7XG4gICAgICAgICAgICB9LCBFcnJvciwgJ2lzIG5vdCB2YWxpZCcpO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgICAgIFwic2hvdWxkIGNvbnZlcnQgYSB2YWxpZCBJUCBpbnRlZ2VyIHRvIGEgc3RhcmluZ1wiKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIHRlc3Quc3RyaWN0RXF1YWwoTmV0d29ya1V0aWxzLm51bVRvSXAoMjkyMzYwNTQxNiksICcxNzQuNjYuMTczLjE2OCcpO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgICAgIFwic2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBpbnZhbGlkIElQXCIodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4ge1xuICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlscy5udW1Ub0lwKDI5MjM2MDU0MTYgKiA1KTtcbiAgICAgICAgICAgIH0sIC9pcyBub3QgYSB2YWxpZC8pO1xuICAgICAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4ge1xuICAgICAgICAgICAgICAgIE5ldHdvcmtVdGlscy5udW1Ub0lwKC0xKTtcbiAgICAgICAgICAgIH0sIC9pcyBub3QgYSB2YWxpZC8pO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgICAgIFwidmFsaWRJcCByZXR1cm5zIHRydWUgaWYgb2N0ZWN0IGlzIGluIDAtMjU1XCIodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3QgaW52YWxpZElwcyA9IFsnMjU1LjI1NS4wLjAnLCAnMC4wLjAuMCcsICcxLjIuMy40JywgJzEwLjAuMC4wJywgJzI1NS4wMS4wMS4yNTUnXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXAgb2YgaW52YWxpZElwcykge1xuICAgICAgICAgICAgICAgIHRlc3Quc3RyaWN0RXF1YWwodHJ1ZSwgTmV0d29ya1V0aWxzLnZhbGlkSXAoaXApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuICAgICAgICBcInZhbGlkSXAgcmV0dXJucyBmYWxzZSBpZiBvY3RlY3QgaXMgbm90IGluIDAtMjU1XCIodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3QgaW52YWxpZElwcyA9IFsnMS4yLjMuNC42ODknLCAnLTEuNTUuMjIuMjInLCAnJywgJyAnLCAnMjU1LjI2NC4xLjAxJ107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlwIG9mIGludmFsaWRJcHMpIHtcbiAgICAgICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKGZhbHNlLCBOZXR3b3JrVXRpbHMudmFsaWRJcChpcCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBDaWRyQmxvY2s6IHtcbiAgICAgICAgXCJzaG91bGQgcmV0dXJuIHRoZSBuZXh0IHZhbGlkIHN1Ym5ldCBmcm9tIG9mZnNldCBJUFwiKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bSA9IE5ldHdvcmtVdGlscy5pcFRvTnVtKCcxMC4wLjEuMjU1Jyk7XG4gICAgICAgICAgICBjb25zdCBuZXdCbG9jayA9IG5ldyBDaWRyQmxvY2sobnVtLCAyNCk7XG4gICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKG5ld0Jsb2NrLmNpZHIsICcxMC4wLjIuMC8yNCcpO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgICAgIFwibmV4dEJsb2NrKCkgcmV0dXJucyB0aGUgbmV4dCBoaWdoZXIgQ0lEUiBzcGFjZVwiKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RWYWx1ZXMgPSBbXG4gICAgICAgICAgICAgICAgWycxOTIuMTY4LjAuMC8yNCcsICcxOTIuMTY4LjEuMC8yNCddLFxuICAgICAgICAgICAgICAgIFsnMTAuODUuNy4wLzI4JywgJzEwLjg1LjcuMTYvMjgnXSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRlc3RWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IG5ldyBDaWRyQmxvY2sodmFsdWVbMF0pO1xuICAgICAgICAgICAgICAgIHRlc3Quc3RyaWN0RXF1YWwoYmxvY2submV4dEJsb2NrKCkuY2lkciwgdmFsdWVbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4SXAoKSBzaG91bGQgcmV0dXJuIHRoZSBsYXN0IHVzYWJsZSBJUCBmcm9tIHRoZSBDaWRyQmxvY2tcIih0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0VmFsdWVzID0gW1xuICAgICAgICAgICAgICAgIFsnMTAuMC4zLjAvMjgnLCAnMTAuMC4zLjE1J10sXG4gICAgICAgICAgICAgICAgWycxMC4wLjMuMS8yOCcsICcxMC4wLjMuMzEnXSxcbiAgICAgICAgICAgICAgICBbJzEwLjAuMi4yNTQvMjgnLCAnMTAuMC4zLjE1J10sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0ZXN0VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBuZXcgQ2lkckJsb2NrKHZhbHVlWzBdKTtcbiAgICAgICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKGJsb2NrLm1heElwKCksIHZhbHVlWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuICAgICAgICBcIm1pbklwKCkgc2hvdWxkIHJldHVybiB0aGUgZmlyc3QgdXNhYmxlIElQIGZyb20gdGhlIENpZHJCbG9ja1wiKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RWYWx1ZXMgPSBbXG4gICAgICAgICAgICAgICAgWycxOTIuMTY4LjAuMC8xOCcsICcxOTIuMTY4LjAuMCddLFxuICAgICAgICAgICAgICAgIFsnMTAuMC4zLjAvMjQnLCAnMTAuMC4zLjAnXVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW5zd2VyIG9mIHRlc3RWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IG5ldyBDaWRyQmxvY2soYW5zd2VyWzBdKTtcbiAgICAgICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKGJsb2NrLm1pbklwKCksIGFuc3dlclsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb250YWluc0NpZHIgcmV0dXJucyB0cnVlIGlmIGZ1bGx5IGNvbnRhaW5lZFwiKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gbmV3IENpZHJCbG9jaygnMTAuMC4zLjAvMjQnKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lZCA9IG5ldyBDaWRyQmxvY2soJzEwLjAuMy4wLzI2Jyk7XG4gICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKGJsb2NrLmNvbnRhaW5zQ2lkcihjb250YWluZWQpLCB0cnVlKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuICAgICAgICBcImNvbnRhaW5zQ2lkciByZXR1cm5zIGZhbHNlIGlmIG5vdCBmdWxseSBjb250YWluZWRcIih0ZXN0OiBUZXN0KSB7XG4gICAgICAgICAgICBjb25zdCBibG9jayA9IG5ldyBDaWRyQmxvY2soJzEwLjAuMy4wLzI2Jyk7XG4gICAgICAgICAgICBjb25zdCBub3RDb250YWluZWQgPSBuZXcgQ2lkckJsb2NrKCcxMC4wLjMuMC8yNScpO1xuICAgICAgICAgICAgdGVzdC5zdHJpY3RFcXVhbChibG9jay5jb250YWluc0NpZHIobm90Q29udGFpbmVkKSwgZmFsc2UpO1xuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgICAgIFwiY2FsY3VsYXRlTmV0bWFzayByZXR1cm5zIHRoZSBpcCBzdHJpbmcgbWFza1wiKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ldG1hc2sgPSBDaWRyQmxvY2suY2FsY3VsYXRlTmV0bWFzaygyNyk7XG4gICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKG5ldG1hc2ssICcyNTUuMjU1LjI1NS4yMjQnKTtcbiAgICAgICAgICAgIHRlc3QuZG9uZSgpO1xuICAgICAgICB9LFxuXG4gICAgfSxcbiAgICBOZXR3b3JrQnVpbGRlcjoge1xuICAgICAgICBcImFsbG93cyB5b3UgdG8gY2FydmUgc3VibmV0cyBvdXIgb2YgQ0lEUiBuZXR3b3JrXCIodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3QgYW5zd2VycyA9IFtcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICcxOTIuMTY4LjAuMC8yOCcsXG4gICAgICAgICAgICAgICAgICAgICcxOTIuMTY4LjAuMTYvMjgnLFxuICAgICAgICAgICAgICAgICAgICAnMTkyLjE2OC4wLjMyLzI4JyxcbiAgICAgICAgICAgICAgICAgICAgJzE5Mi4xNjguMC4xMjgvMjUnLFxuICAgICAgICAgICAgICAgICAgICAnMTkyLjE2OC4xLjAvMjUnLFxuICAgICAgICAgICAgICAgICAgICAnMTkyLjE2OC40LjAvMjInLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnMTkyLjE2OC4wLjAvMjQnLFxuICAgICAgICAgICAgICAgICAgICAnMTkyLjE2OC4xLjAvMjQnLFxuICAgICAgICAgICAgICAgICAgICAnMTkyLjE2OC4yLjAvMjQnLFxuICAgICAgICAgICAgICAgICAgICAnMTkyLjE2OC4zLjAvMjUnLFxuICAgICAgICAgICAgICAgICAgICAnMTkyLjE2OC4zLjEyOC8yNScsXG4gICAgICAgICAgICAgICAgICAgICcxOTIuMTY4LjQuMC8yNScsXG4gICAgICAgICAgICAgICAgICAgICcxOTIuMTY4LjQuMTI4LzI4JyxcbiAgICAgICAgICAgICAgICAgICAgJzE5Mi4xNjguNC4xNDQvMjgnLFxuICAgICAgICAgICAgICAgICAgICAnMTkyLjE2OC40LjE2MC8yOCcsXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNvbnN0IHdhc3RlZnVsID0gbmV3IE5ldHdvcmtCdWlsZGVyKCcxOTIuMTY4LjAuMC8xOCcpO1xuICAgICAgICAgICAgY29uc3QgZWZmaWNpZW50ID0gbmV3IE5ldHdvcmtCdWlsZGVyKCcxOTIuMTY4LjAuMC8xOCcpO1xuICAgICAgICAgICAgd2FzdGVmdWwuYWRkU3VibmV0cygyOCwgMyk7XG4gICAgICAgICAgICB3YXN0ZWZ1bC5hZGRTdWJuZXRzKDI1LCAyKTtcbiAgICAgICAgICAgIHdhc3RlZnVsLmFkZFN1Ym5ldHMoMjIsIDEpO1xuICAgICAgICAgICAgZWZmaWNpZW50LmFkZFN1Ym5ldHMoMjQsIDMpO1xuICAgICAgICAgICAgZWZmaWNpZW50LmFkZFN1Ym5ldHMoMjUsIDMpO1xuICAgICAgICAgICAgZWZmaWNpZW50LmFkZFN1Ym5ldHMoMjgsIDMpO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBbXG4gICAgICAgICAgICAgICAgd2FzdGVmdWwuY2lkclN0cmluZ3Muc29ydCgpLFxuICAgICAgICAgICAgICAgIGVmZmljaWVudC5jaWRyU3RyaW5ncy5zb3J0KClcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuc3dlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ZXN0LmRlZXBFcXVhbChhbnN3ZXJzW2ldLnNvcnQoKSwgZXhwZWN0ZWRbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVzdC5kb25lKCk7XG4gICAgICAgIH0sXG4gICAgICAgIFwidGhyb3dzIG9uIHN1Ym5ldHMgPCAxNiBvciA+IDI4XCIodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBOZXR3b3JrQnVpbGRlcignMTkyLjE2OC4wLjAvMTgnKTtcbiAgICAgICAgICAgIHRlc3QudGhyb3dzKCgpID0+IHtcbiAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFN1Ym5ldCgxNSk7XG4gICAgICAgICAgICB9LCBJbnZhbGlkQ2lkclJhbmdlRXJyb3IpO1xuICAgICAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkU3VibmV0KDI5KTtcbiAgICAgICAgICAgIH0sIEludmFsaWRDaWRyUmFuZ2VFcnJvcik7XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0aHJvd3MgaWYgeW91IGFkZCBhIHN1Ym5ldCBvdXRzaWRlIG9mIHRoZSBjaWRyXCIodGVzdDogVGVzdCkge1xuICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBOZXR3b3JrQnVpbGRlcignMTkyLjE2OC4wLjAvMTgnKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIyID0gbmV3IE5ldHdvcmtCdWlsZGVyKCcxMC4wLjAuMC8yMScpO1xuICAgICAgICAgICAgYnVpbGRlci5hZGRTdWJuZXRzKDE5LCAxKTtcbiAgICAgICAgICAgIGJ1aWxkZXIyLmFkZFN1Ym5ldHMoMjQsIDgpO1xuICAgICAgICAgICAgdGVzdC50aHJvd3MoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkU3VibmV0KDE5KTtcbiAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFN1Ym5ldCgyOCk7XG4gICAgICAgICAgICB9LCAvZXhjZWVkcyByZW1haW5pbmcgc3BhY2UvKTtcbiAgICAgICAgICAgIHRlc3QudGhyb3dzKCgpID0+IHtcbiAgICAgICAgICAgICAgICBidWlsZGVyMi5hZGRTdWJuZXQoMjgpO1xuICAgICAgICAgICAgfSwgL2V4Y2VlZHMgcmVtYWluaW5nIHNwYWNlLyk7XG4gICAgICAgICAgICB0ZXN0LmRvbmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXNrRm9yUmVtYWluaW5nU3VibmV0cyBjYWxjcyBtYXNrIGZvciBldmVuIHNwbGl0IG9mIHJlbWFpbmluZ1wiKHRlc3Q6IFRlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgTmV0d29ya0J1aWxkZXIoJzEwLjAuMC4wLzI0Jyk7XG4gICAgICAgICAgICBidWlsZGVyLmFkZFN1Ym5ldCgyNSk7XG4gICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKDI3LCBidWlsZGVyLm1hc2tGb3JSZW1haW5pbmdTdWJuZXRzKDMpKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIyID0gbmV3IE5ldHdvcmtCdWlsZGVyKCcxOTIuMTY4LjE3Ni4wLzIwJyk7XG4gICAgICAgICAgICBidWlsZGVyMi5hZGRTdWJuZXRzKDIyLCAyKTtcbiAgICAgICAgICAgIHRlc3Quc3RyaWN0RXF1YWwoMjIsIGJ1aWxkZXIyLm1hc2tGb3JSZW1haW5pbmdTdWJuZXRzKDIpKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXIzID0gbmV3IE5ldHdvcmtCdWlsZGVyKCcxOTIuMTY4LjAuMC8xNicpO1xuICAgICAgICAgICAgdGVzdC5zdHJpY3RFcXVhbCgxNywgYnVpbGRlcjMubWFza0ZvclJlbWFpbmluZ1N1Ym5ldHMoMikpO1xuICAgICAgICAgICAgY29uc3QgYnVpbGRlcjQgPSBuZXcgTmV0d29ya0J1aWxkZXIoJzEwLjAuMC4wLzE2Jyk7XG4gICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKDE4LCBidWlsZGVyNC5tYXNrRm9yUmVtYWluaW5nU3VibmV0cyg0KSk7XG4gICAgICAgICAgICBjb25zdCBidWlsZGVyNSA9IG5ldyBOZXR3b3JrQnVpbGRlcignMTAuMC4wLjAvMTYnKTtcbiAgICAgICAgICAgIGJ1aWxkZXI1LmFkZFN1Ym5ldHMoMjYsIDMpO1xuICAgICAgICAgICAgYnVpbGRlcjUuYWRkU3VibmV0cygyNywgMyk7XG4gICAgICAgICAgICB0ZXN0LnN0cmljdEVxdWFsKDE4LCBidWlsZGVyNS5tYXNrRm9yUmVtYWluaW5nU3VibmV0cygzKSk7IHRlc3QuZG9uZSgpO1xuICAgICAgICB9XG4gICAgfVxufTtcbiJdfQ==

@@ -7,2 +7,3 @@ import { Test } from 'nodeunit';

"it uses the correct network range"(test: Test): void;
'the Name tag is defaulted to path'(test: Test): void;
};

@@ -15,3 +16,3 @@ "with all of the properties set, it successfully sets the correct VPC properties"(test: Test): void;

"with custom subents, the VPC should have the right number of subnets, an IGW, and a NAT Gateway per AZ"(test: Test): void;
"with custom subents and natGateways = 2 there should be only to NATGW"(test: Test): void;
"with custom subents and natGateways = 2 there should be only two NATGW"(test: Test): void;
"with enableDnsHostnames enabled but enableDnsSupport disabled, should throw an Error"(test: Test): void;

@@ -25,3 +26,17 @@ "with public subnets MapPublicIpOnLaunch is true"(test: Test): void;

};
'When tagging': {
'VPC propagated tags will be on subnet, IGW, routetables, NATGW'(test: Test): void;
'Subnet Name will propagate to route tables and NATGW'(test: Test): void;
'Tags can be added after the Vpc is created with `vpc.tags.setTag(...)`'(test: Test): void;
};
'can select public subnets'(test: Test): void;
'can select isolated subnets'(test: Test): void;
'can select subnets by name'(test: Test): void;
'export/import': {
'simple VPC'(test: Test): void;
'multiple subnets of the same type'(test: Test): void;
'can select isolated subnets by type'(test: Test): void;
'can select isolated subnets by name'(test: Test): void;
};
};
export = _default;
{
"compilerOptions": {
"target": "es2018",
"lib": [
"es2016",
"es2017.object",
"es2017.string"
],
"module": "commonjs",
"declaration": true,
"strict": true,
"strictPropertyInitialization": true,
"noImplicitAny": true,
"strictNullChecks": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"inlineSourceMap": true,
"experimentalDecorators": true,
"jsx": "react",
"jsxFactory": "jsx.create"
},
"_generated_by_jsii_": "generated by jsii - you can delete, and ideally add to your .gitignore"
"compilerOptions": {
"alwaysStrict": true,
"charset": "utf8",
"declaration": true,
"experimentalDecorators": true,
"inlineSourceMap": true,
"inlineSources": true,
"jsx": "react",
"jsxFactory": "jsx.create",
"lib": [
"es2016",
"es2017.object",
"es2017.string"
],
"module": "CommonJS",
"noEmitOnError": true,
"noFallthroughCasesInSwitch": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"resolveJsonModule": true,
"strict": true,
"strictNullChecks": true,
"target": "ES2018"
},
"_generated_by_jsii_": "Generated by jsii - safe to delete, and ideally should be in .gitignore"
}

Sorry, the diff of this file is not supported yet

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

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

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