@aws-cdk/aws-ec2-alpha 2.176.0-alpha.0 → 2.178.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/vpc-v2.js CHANGED
@@ -10,6 +10,7 @@ const constructs_1 = require("constructs");
10
10
  const vpc_v2_base_1 = require("./vpc-v2-base");
11
11
  const subnet_v2_1 = require("./subnet-v2");
12
12
  const aws_cdk_lib_1 = require("aws-cdk-lib");
13
+ const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
13
14
  /**
14
15
  * IpAddress options to define VPC V2
15
16
  */
@@ -74,10 +75,25 @@ class IpAddresses {
74
75
  }
75
76
  return new AmazonProvided(props);
76
77
  }
78
+ /**
79
+ * A BYOIP IPv6 address pool
80
+ */
81
+ static ipv6ByoipPool(props) {
82
+ try {
83
+ jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_Ipv6PoolSecondaryAddressProps(props);
84
+ }
85
+ catch (error) {
86
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
87
+ Error.captureStackTrace(error, this.ipv6ByoipPool);
88
+ }
89
+ throw error;
90
+ }
91
+ return new Ipv6Pool(props);
92
+ }
77
93
  }
78
94
  exports.IpAddresses = IpAddresses;
79
95
  _a = JSII_RTTI_SYMBOL_1;
80
- IpAddresses[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.IpAddresses", version: "2.176.0-alpha.0" };
96
+ IpAddresses[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.IpAddresses", version: "2.178.0-alpha.0" };
81
97
  /**
82
98
  * Name tag constant
83
99
  */
@@ -104,9 +120,9 @@ class VpcV2 extends vpc_v2_base_1.VpcV2Base {
104
120
  throw error;
105
121
  }
106
122
  /**
107
- * Internal class to allow users to import VPC
108
- * @internal
109
- */
123
+ * Internal class to allow users to import VPC
124
+ * @internal
125
+ */
110
126
  class ImportedVpcV2 extends vpc_v2_base_1.VpcV2Base {
111
127
  constructor(construct, constructId, props) {
112
128
  super(construct, constructId);
@@ -140,13 +156,13 @@ class VpcV2 extends vpc_v2_base_1.VpcV2Base {
140
156
  if (props.subnets) {
141
157
  for (const subnet of props.subnets) {
142
158
  if (subnet.subnetType === aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS || subnet.subnetType === aws_ec2_1.SubnetType.PRIVATE_WITH_NAT ||
143
- subnet.subnetType === aws_ec2_1.SubnetType.PRIVATE) {
159
+ subnet.subnetType === 'Deprecated_Private') {
144
160
  this.privateSubnets.push(subnet_v2_1.SubnetV2.fromSubnetV2Attributes(scope, subnet.subnetName ?? 'ImportedPrivateSubnet', subnet));
145
161
  }
146
162
  else if (subnet.subnetType === aws_ec2_1.SubnetType.PUBLIC) {
147
163
  this.publicSubnets.push(subnet_v2_1.SubnetV2.fromSubnetV2Attributes(scope, subnet.subnetName ?? 'ImportedPublicSubnet', subnet));
148
164
  }
149
- else if (subnet.subnetType === aws_ec2_1.SubnetType.ISOLATED || subnet.subnetType === aws_ec2_1.SubnetType.PRIVATE_ISOLATED) {
165
+ else if (subnet.subnetType === 'Deprecated_Isolated' || subnet.subnetType === aws_ec2_1.SubnetType.PRIVATE_ISOLATED) {
150
166
  this.isolatedSubnets.push(subnet_v2_1.SubnetV2.fromSubnetV2Attributes(scope, subnet.subnetName ?? 'ImportedIsolatedSubnet', subnet));
151
167
  }
152
168
  }
@@ -191,6 +207,8 @@ class VpcV2 extends vpc_v2_base_1.VpcV2Base {
191
207
  }
192
208
  throw error;
193
209
  }
210
+ // Enhanced CDK Analytics Telemetry
211
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
194
212
  this.vpcName = props.vpcName;
195
213
  this.ipAddresses = props.primaryAddressBlock ?? IpAddresses.ipv4('10.0.0.0/16');
196
214
  const vpcOptions = this.ipAddresses.allocateVpcCidr();
@@ -198,7 +216,7 @@ class VpcV2 extends vpc_v2_base_1.VpcV2Base {
198
216
  this.dnsSupportEnabled = props.enableDnsSupport == null ? true : props.enableDnsSupport;
199
217
  const instanceTenancy = props.defaultInstanceTenancy || 'default';
200
218
  this.resource = new aws_ec2_1.CfnVPC(this, 'Resource', {
201
- cidrBlock: vpcOptions.ipv4CidrBlock, //for Ipv4 addresses CIDR block
219
+ cidrBlock: vpcOptions.ipv4CidrBlock, // for Ipv4 addresses CIDR block
202
220
  enableDnsHostnames: this.dnsHostnamesEnabled,
203
221
  enableDnsSupport: this.dnsSupportEnabled,
204
222
  ipv4IpamPoolId: vpcOptions.ipv4IpamPool?.ipamPoolId, // for Ipv4 ipam option
@@ -219,7 +237,7 @@ class VpcV2 extends vpc_v2_base_1.VpcV2Base {
219
237
  }, this.stack);
220
238
  this.region = this.stack.region;
221
239
  this.ownerAccountId = this.stack.account;
222
- //Add tag to the VPC with the name provided in properties
240
+ // Add tag to the VPC with the name provided in properties
223
241
  core_1.Tags.of(this).add(NAME_TAG, props.vpcName || this.node.path);
224
242
  if (props.secondaryAddressBlocks) {
225
243
  const secondaryAddressBlocks = props.secondaryAddressBlocks;
@@ -228,10 +246,10 @@ class VpcV2 extends vpc_v2_base_1.VpcV2Base {
228
246
  if (!secondaryVpcOptions.cidrBlockName) {
229
247
  throw new Error('Cidr Block Name is required to create secondary IP address');
230
248
  }
231
- if (secondaryVpcOptions.amazonProvided || secondaryVpcOptions.ipv6IpamPool) {
249
+ if (secondaryVpcOptions.amazonProvided || secondaryVpcOptions.ipv6IpamPool || secondaryVpcOptions.ipv6PoolId) {
232
250
  this.useIpv6 = true;
233
251
  }
234
- //validate CIDR ranges per RFC 1918
252
+ // validate CIDR ranges per RFC 1918
235
253
  if (secondaryVpcOptions.ipv4CidrBlock) {
236
254
  const ret = validateIpv4address(secondaryVpcOptions.ipv4CidrBlock, this.resource.cidrBlock);
237
255
  if (ret === false) {
@@ -249,13 +267,17 @@ class VpcV2 extends vpc_v2_base_1.VpcV2Base {
249
267
  ipv6NetmaskLength: secondaryVpcOptions.ipv6NetmaskLength,
250
268
  ipv6IpamPoolId: secondaryVpcOptions.ipv6IpamPool?.ipamPoolId,
251
269
  amazonProvidedIpv6CidrBlock: secondaryVpcOptions.amazonProvided,
270
+ // BYOIP IPv6 Address
271
+ ipv6CidrBlock: secondaryVpcOptions?.ipv6CidrBlock,
272
+ // BYOIP Pool for IPv6 address
273
+ ipv6Pool: secondaryVpcOptions?.ipv6PoolId,
252
274
  });
253
275
  if (secondaryVpcOptions.dependencies) {
254
276
  for (const dep of secondaryVpcOptions.dependencies) {
255
277
  vpcCidrBlock.node.addDependency(dep);
256
278
  }
257
279
  }
258
- //Create secondary blocks for Ipv4 and Ipv6
280
+ // Create secondary blocks for Ipv4 and Ipv6
259
281
  this.secondaryCidrBlock?.push(vpcCidrBlock);
260
282
  }
261
283
  }
@@ -280,7 +302,7 @@ class VpcV2 extends vpc_v2_base_1.VpcV2Base {
280
302
  }
281
303
  exports.VpcV2 = VpcV2;
282
304
  _b = JSII_RTTI_SYMBOL_1;
283
- VpcV2[_b] = { fqn: "@aws-cdk/aws-ec2-alpha.VpcV2", version: "2.176.0-alpha.0" };
305
+ VpcV2[_b] = { fqn: "@aws-cdk/aws-ec2-alpha.VpcV2", version: "2.178.0-alpha.0" };
284
306
  /**
285
307
  * Supports assigning IPv4 address to VPC
286
308
  */
@@ -313,7 +335,6 @@ class AmazonProvided {
313
335
  constructor(props) {
314
336
  this.props = props;
315
337
  }
316
- ;
317
338
  allocateVpcCidr() {
318
339
  return {
319
340
  amazonProvided: true,
@@ -355,6 +376,21 @@ class IpamIpv4 {
355
376
  };
356
377
  }
357
378
  }
379
+ /**
380
+ * Supports assigning IPv6 address to VPC in an address pool
381
+ */
382
+ class Ipv6Pool {
383
+ constructor(props) {
384
+ this.props = props;
385
+ }
386
+ allocateVpcCidr() {
387
+ return {
388
+ ipv6CidrBlock: this.props.ipv6CidrBlock,
389
+ ipv6PoolId: this.props.ipv6PoolId,
390
+ cidrBlockName: this.props?.cidrBlockName,
391
+ };
392
+ }
393
+ }
358
394
  /**
359
395
  * Internal L2 to define a new VPC CIDR Block
360
396
  * @internal
@@ -371,18 +407,26 @@ class VPCCidrBlock extends core_1.Resource {
371
407
  this.amazonProvidedIpv6CidrBlock = props.amazonProvidedIpv6CidrBlock;
372
408
  this.ipv6IpamPoolId = props.ipv6IpamPoolId;
373
409
  this.ipv4IpamPoolId = props.ipv4IpamPoolId;
410
+ // BYOIP Pool Attributes
411
+ this.ipv6Pool = props.ipv6Pool;
412
+ this.ipv6CidrBlock = props.ipv6CidrBlock;
374
413
  }
375
414
  }
376
415
  return new Import(scope, id);
377
416
  }
378
417
  constructor(scope, id, props) {
379
418
  super(scope, id);
419
+ // Enhanced CDK Analytics Telemetry
420
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
380
421
  this.resource = new aws_ec2_1.CfnVPCCidrBlock(this, id, props);
381
422
  this.node.defaultChild = this.resource;
382
423
  this.cidrBlock = props.cidrBlock;
383
424
  this.ipv6IpamPoolId = props.ipv6IpamPoolId;
384
425
  this.ipv4IpamPoolId = props.ipv4IpamPoolId;
385
426
  this.amazonProvidedIpv6CidrBlock = props.amazonProvidedIpv6CidrBlock;
427
+ // BYOIP Pool and CIDR Block
428
+ this.ipv6CidrBlock = props.ipv6CidrBlock;
429
+ this.ipv6Pool = props.ipv6Pool;
386
430
  }
387
431
  }
388
432
  /**
@@ -415,4 +459,4 @@ function validateIpv4address(cidr1, cidr2) {
415
459
  (ip1.octet1 === 192 && ip1.octet2 === 168 && ip2.octet1 === 192 && ip2.octet2 === 168) ||
416
460
  (ip1.octet1 === 172 && ip1.octet2 === 16 && ip2.octet1 === 172 && ip2.octet2 === 16); // CIDR ranges belong to same private IP address ranges
417
461
  }
418
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidnBjLXYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGlEQUEyRztBQUMzRywyQ0FBaUY7QUFDakYsMkNBQXFFO0FBRXJFLCtDQUFrRDtBQUNsRCwyQ0FBc0U7QUFDdEUsNkNBQTBDO0FBYTFDOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBRXRCOztPQUVHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFnQixFQUFFLEtBQTZCOzs7Ozs7Ozs7O1FBQ2hFLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDaEQ7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBNEI7Ozs7Ozs7Ozs7UUFDakQsT0FBTyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztLQUN0QztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUE0Qjs7Ozs7Ozs7OztRQUNqRCxPQUFPLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3RDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBNEI7Ozs7Ozs7Ozs7UUFDM0QsT0FBTyxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNsQzs7QUE1Qkgsa0NBNkJDOzs7QUF1RkQ7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFxSGhDOzs7Ozs7R0FNRztBQUNILE1BQWEsS0FBTSxTQUFRLHVCQUFTO0lBRWxDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCOzs7Ozs7Ozs7O1FBQ3BGOzs7VUFHRTtRQUNGLE1BQU0sYUFBYyxTQUFRLHVCQUFTO1lBNEJuQyxZQUFZLFNBQW9CLEVBQUUsV0FBbUIsRUFBRSxLQUFzQjtnQkFDM0UsS0FBSyxDQUFDLFNBQVMs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LEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFakYsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pELE9BQU8sS0FBSyxDQUFDLENBQUMsNkJBQTZCO0lBQzdDLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBb0I7UUFDM0IsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDdkIsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFvQjtRQUMzQixNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztLQUN2QixDQUFDO0lBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO1FBQzdDLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUM7UUFDdEYsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsdURBQXVEO0FBQ2pKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5WUEMsIENmblZQQ0NpZHJCbG9jaywgRGVmYXVsdEluc3RhbmNlVGVuYW5jeSwgSVN1Ym5ldCwgU3VibmV0VHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQXJuLCBDZm5SZXNvdXJjZSwgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIERlcGVuZGVuY3lHcm91cCwgSURlcGVuZGFibGUgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElwYW1PcHRpb25zLCBJSXBhbVBvb2wgfSBmcm9tICcuL2lwYW0nO1xuaW1wb3J0IHsgSVZwY1YyLCBWcGNWMkJhc2UgfSBmcm9tICcuL3ZwYy12Mi1iYXNlJztcbmltcG9ydCB7IElTdWJuZXRWMiwgU3VibmV0VjIsIFN1Ym5ldFYyQXR0cmlidXRlcyB9IGZyb20gJy4vc3VibmV0LXYyJztcbmltcG9ydCB7IHJlZ2lvbl9pbmZvIH0gZnJvbSAnYXdzLWNkay1saWInO1xuXG4vKipcbiAqIEFkZGl0aW9uYWwgcHJvcHMgbmVlZGVkIGZvciBzZWNvbmRhcnkgQWRkcmVzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY29uZGFyeUFkZHJlc3NQcm9wcyB7XG4gIC8qKlxuICAgKiBSZXF1aXJlZCB0byBzZXQgU2Vjb25kYXJ5IGNpZHIgYmxvY2sgcmVzb3VyY2UgbmFtZVxuICAgKiBpbiBvcmRlciB0byBnZW5lcmF0ZSB1bmlxdWUgbG9naWNhbCBpZCBmb3IgdGhlIHJlc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgY2lkckJsb2NrTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIElwQWRkcmVzcyBvcHRpb25zIHRvIGRlZmluZSBWUEMgVjJcbiAqL1xuZXhwb3J0IGNsYXNzIElwQWRkcmVzc2VzIHtcblxuICAvKipcbiAgICogQW4gSVB2NCBDSURSIFJhbmdlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlwdjQoaXB2NENpZHI6IHN0cmluZywgcHJvcHM/OiBTZWNvbmRhcnlBZGRyZXNzUHJvcHMpOiBJSXBBZGRyZXNzZXMge1xuICAgIHJldHVybiBuZXcgaXB2NENpZHJBbGxvY2F0aW9uKGlwdjRDaWRyLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQW4gSXB2NCBJcGFtIFBvb2xcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXB2NElwYW0oaXB2NElwYW1PcHRpb25zOiBJcGFtT3B0aW9ucyk6IElJcEFkZHJlc3NlcyB7XG4gICAgcmV0dXJuIG5ldyBJcGFtSXB2NChpcHY0SXBhbU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIElwdjYgSXBhbSBQb29sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlwdjZJcGFtKGlwdjZJcGFtT3B0aW9uczogSXBhbU9wdGlvbnMpOiBJSXBBZGRyZXNzZXMge1xuICAgIHJldHVybiBuZXcgSXBhbUlwdjYoaXB2NklwYW1PcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NiByYW5nZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhbWF6b25Qcm92aWRlZElwdjYocHJvcHM6IFNlY29uZGFyeUFkZHJlc3NQcm9wcykgOiBJSXBBZGRyZXNzZXMge1xuICAgIHJldHVybiBuZXcgQW1hem9uUHJvdmlkZWQocHJvcHMpO1xuICB9XG59XG5cbi8qKlxuICogQ29uc29saWRhdGVkIHJldHVybiBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8gVlBDIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY0NpZHJPcHRpb25zIHtcblxuICAvKipcbiAgICogSVB2NCBDSURSIEJsb2NrXG4gICAqXG4gICAqIEBkZWZhdWx0ICcxMC4wLjAuMC8xNidcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENJRFIgTWFzayBmb3IgVnBjXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gT25seSByZXF1aXJlZCB3aGVuIHVzaW5nIElQQU0gSXB2NFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NE5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElwdjQgSVBBTSBQb29sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gT25seSByZXF1aXJlZCB3aGVuIHVzaW5nIElQQU0gSXB2NFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qb29sPzogSUlwYW1Qb29sO1xuXG4gIC8qKlxuICAgKiBDSURSIE1hc2sgZm9yIFZwY1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBBV1MgSXBhbVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2Nk5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElwdjYgSVBBTSBwb29sIGlkIGZvciBWUEMgcmFuZ2UsIGNhbiBvbmx5IGJlIGRlZmluZWRcbiAgICogdW5kZXIgcHVibGljIHNjb3BlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcG9vbCBpZFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NklwYW1Qb29sPzogSUlwYW1Qb29sO1xuXG4gIC8qKlxuICAgKiBVc2UgYW1hem9uIHByb3ZpZGVkIElQIHJhbmdlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhbWF6b25Qcm92aWRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlcGVuZGVuY3kgdG8gYXNzb2NpYXRlIElwdjYgQ0lEUiBibG9ja1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlcGVuZGVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llcz86IENmblJlc291cmNlW107XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVkIHRvIHNldCBTZWNvbmRhcnkgY2lkciBibG9jayByZXNvdXJjZSBuYW1lXG4gICAqIGluIG9yZGVyIHRvIGdlbmVyYXRlIHVuaXF1ZSBsb2dpY2FsIGlkIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmFtZSBmb3IgcHJpbWFyeSBhZGRyZXNzZXNcbiAgICovXG4gIHJlYWRvbmx5IGNpZHJCbG9ja05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQdjQgQ0lEUiBwcm92aXNpb25lZCB1bmRlciBwb29sXG4gICAqIFJlcXVpcmVkIHRvIGNoZWNrIGZvciBvdmVybGFwcGluZyBDSURScyBhZnRlciBwcm92aXNpb25pbmdcbiAgICogaXMgY29tcGxldGUgdW5kZXIgSVBBTSBwb29sXG4gICAqIEBkZWZhdWx0IC0gbm8gSVBBTSBJUHY0IENJRFIgcmFuZ2UgaXMgcHJvdmlzaW9uZWQgdXNpbmcgSVBBTVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qcm92aXNpb25lZENpZHJzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBpcCBhZGRyZXNzIGFsbG9jYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBJUEFkcmVzcyB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUlwQWRkcmVzc2VzIHtcblxuICAvKipcbiAgICogTWV0aG9kIHRvIGRlZmluZSB0aGUgaW1wbGVtZW50YXRpb24gbG9naWMgb2ZcbiAgICogSVAgYWRkcmVzcyBhbGxvY2F0aW9uXG4gICAqL1xuICBhbGxvY2F0ZVZwY0NpZHIoKSA6IFZwY0NpZHJPcHRpb25zO1xuXG59XG5cbi8qKlxuICogTmFtZSB0YWcgY29uc3RhbnRcbiAqL1xuY29uc3QgTkFNRV9UQUc6IHN0cmluZyA9ICdOYW1lJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBWUENcbiAqIFtkaXNhYmxlLWF3c2xpbnQ6ZnJvbS1tZXRob2RdXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjVjJQcm9wcyB7XG5cbiAgLyoqIEEgbXVzdCBJUHY0IENJRFIgYmxvY2sgZm9yIHRoZSBWUENcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBJcHY0IENJRFIgQmxvY2sgKCcxMC4wLjAuMC8xNicpXG4gICAqL1xuICByZWFkb25seSBwcmltYXJ5QWRkcmVzc0Jsb2NrPzogSUlwQWRkcmVzc2VzO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kYXJ5IENJRFIgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKiBDYW4gYmUgIElQdjQgb3IgSVB2NiwgdHdvIElQdjQgcmFuZ2VzIG11c3QgZm9sbG93IFJGQyMxOTE4IGNvbnZlbnRpb25cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1jaWRyLWJsb2Nrcy5odG1sI3ZwYy1yZXNpemV9LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlY29uZGFyeSBJUCBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlBZGRyZXNzQmxvY2tzPzogSUlwQWRkcmVzc2VzW107XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbnN0YW5jZXMgbGF1bmNoZWQgaW4gdGhlIFZQQyBnZXQgRE5TIGhvc3RuYW1lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRG5zSG9zdG5hbWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIEROUyByZXNvbHV0aW9uIGlzIHN1cHBvcnRlZCBmb3IgdGhlIFZQQy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRG5zU3VwcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHRlbmFuY3kgb2YgaW5zdGFuY2VzIGxhdW5jaGVkIGludG8gdGhlIFZQQy5cbiAgICpcbiAgICogQnkgc2V0dGluZyB0aGlzIHRvIGRlZGljYXRlZCB0ZW5hbmN5LCBpbnN0YW5jZXMgd2lsbCBiZSBsYXVuY2hlZCBvblxuICAgKiBoYXJkd2FyZSBkZWRpY2F0ZWQgdG8gYSBzaW5nbGUgQVdTIGN1c3RvbWVyLCB1bmxlc3Mgc3BlY2lmaWNhbGx5IHNwZWNpZmllZFxuICAgKiBhdCBpbnN0YW5jZSBsYXVuY2ggdGltZS4gUGxlYXNlIG5vdGUsIG5vdCBhbGwgaW5zdGFuY2UgdHlwZXMgYXJlIHVzYWJsZVxuICAgKiB3aXRoIERlZGljYXRlZCB0ZW5hbmN5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEZWZhdWx0SW5zdGFuY2VUZW5hbmN5LkRlZmF1bHQgKHNoYXJlZCkgdGVuYW5jeVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEluc3RhbmNlVGVuYW5jeT86IERlZmF1bHRJbnN0YW5jZVRlbmFuY3k7XG5cbiAgLyoqXG4gICAqIFBoeXNpY2FsIG5hbWUgZm9yIHRoZSBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvZ2VuZXJhdGVkIGJ5IENES1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGltcG9ydCBhIFZQQyBjcmVhdGVkIG91dHNpZGUgb2YgQ0RLIHN0YWNrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjVjJBdHRyaWJ1dGVzIHtcblxuICAvKipcbiAgICogVGhlIFZQQyBJRFxuICAgKiBSZWZlcnMgdG8gcGh5c2ljYWwgSWQgb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWdpb24gaW4gd2hpY2ggaW1wb3J0ZWQgVlBDIGlzIGhvc3RlZFxuICAgKiByZXF1aXJlZCBpbiBjYXNlIG9mIGNyb3NzIHJlZ2lvbiBWUENcbiAgICogYXMgZ2l2ZW4gdmFsdWUgd2lsbCBiZSB1c2VkIHRvIHNldCBmaWVsZCByZWdpb24gZm9yIGltcG9ydGVkIFZQQyxcbiAgICogd2hpY2ggdGhlbiBsYXRlciBjYW4gYmUgdXNlZCBmb3IgZXN0YWJsaXNoaW5nIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY29uc3RydWN0ZWQgd2l0aCBzdGFjayByZWdpb24gdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBBV1MgYWNjb3VudCB0aGF0IG93bnMgdGhlIGltcG9ydGVkIFZQQ1xuICAgKiByZXF1aXJlZCBpbiBjYXNlIG9mIGNyb3NzIGFjY291bnQgVlBDXG4gICAqIGFzIGdpdmVuIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBzZXQgZmllbGQgYWNjb3VudCBmb3IgaW1wb3J0ZWQgVlBDLFxuICAgKiB3aGljaCB0aGVuIGxhdGVyIGNhbiBiZSB1c2VkIGZvciBlc3RhYmxpc2hpbmcgVlBDIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBjb25zdHJ1Y3RlZCB3aXRoIHN0YWNrIGFjY291bnQgdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IG93bmVyQWNjb3VudElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmltYXJ5IFZQQyBDSURSIEJsb2NrIG9mIHRoZSBpbXBvcnRlZCBWUENcbiAgICogQ2FuIG9ubHkgYmUgSVB2NFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjQ2lkckJsb2NrOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgVlBOIEdhdGV3YXkgaXMgYXR0YWNoZWQgdG8gdGhlIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIFZQTiBHYXRld2F5XG4gICAqL1xuICByZWFkb25seSB2cG5HYXRld2F5SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN1Ym5ldHMgYXNzb2NpYXRlZCB3aXRoIGltcG9ydGVkIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHN1Ym5ldHMgcHJvdmlkZWQgdG8gYmUgaW1wb3J0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldHM/OiBTdWJuZXRWMkF0dHJpYnV0ZXNbXTtcblxuICAvKipcbiAgICogSW1wb3J0IFNlY29uZGFyeSBDSURSIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggVlBDXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gc2Vjb25kYXJ5IElQIGFkZHJlc3NcbiAgICovXG4gIHJlYWRvbmx5IHNlY29uZGFyeUNpZHJCbG9ja3M/OiBWUENDaWRyQmxvY2thdHRyaWJ1dGVzW107XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGZvdW5kYXRpb24gZm9yIGNyZWF0aW5nIGFuZCBjb25maWd1cmluZyBhIFZQQyB3aXRoIGFkdmFuY2VkIGZlYXR1cmVzIHN1Y2ggYXMgSVBBTSAoSVAgQWRkcmVzcyBNYW5hZ2VtZW50KSBhbmQgSVB2NiBzdXBwb3J0LlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2FwaS92Mi9kb2NzL2F3cy1jZGstbGliLmF3c19lYzIuVnBjLmh0bWx8QVdTIENESyBEb2N1bWVudGF0aW9uIG9uIFZQQ3N9LlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VlBDXG4gKi9cbmV4cG9ydCBjbGFzcyBWcGNWMiBleHRlbmRzIFZwY1YyQmFzZSB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIFZQQyBmcm9tIGV4aXN0aW5nIGF0dHJpYnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVZwY1YyQXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogVnBjVjJBdHRyaWJ1dGVzKTogSVZwY1YyIHtcbiAgICAvKipcbiAgICAqIEludGVybmFsIGNsYXNzIHRvIGFsbG93IHVzZXJzIHRvIGltcG9ydCBWUENcbiAgICAqIEBpbnRlcm5hbFxuICAgICovXG4gICAgY2xhc3MgSW1wb3J0ZWRWcGNWMiBleHRlbmRzIFZwY1YyQmFzZSB7XG5cbiAgICAgIHB1YmxpYyByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0Fybjogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHM6IElTdWJuZXRWMltdID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IElTdWJuZXRWMltdID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBJU3VibmV0VjJbXSA9IFtdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlID0gbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY05hbWU/OiBzdHJpbmc7XG4gICAgICBwcml2YXRlIHJlYWRvbmx5IF9wYXJ0aXRpb24/OiBzdHJpbmc7XG5cbiAgICAgIC8qXG4gICAgICAqIFJlZmVyZW5jZSB0byBhbGwgc2Vjb25kYXJ5IGJsb2NrcyBhdHRhY2hlZFxuICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSBzZWNvbmRhcnlDaWRyQmxvY2s/OiBJVlBDQ2lkckJsb2NrW107XG5cbiAgICAgIC8qKlxuICAgICAgKiBSZWZlcnMgdG8gYWN0dWFsIFZQQyBSZXNvdXJjZSBhdHRyaWJ1dGUgaW4gbm9uLWltcG9ydGVkIFZQQ1xuICAgICAgKiBSZXF1aXJlZCB0byBpbXBsZW1lbnQgaGVyZSBkdWUgdG8gZXh0ZW5zaW9uIGZyb20gQmFzZSBjbGFzc1xuICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSB2cGNDaWRyQmxvY2s6IHN0cmluZztcblxuICAgICAgLy8gUmVxdWlyZWQgdG8gZG8gQ0lEUiByYW5nZSB0ZXN0IG9uIGltcG9ydGVkIFZQQ3MgdG8gY3JlYXRlIG5ldyBzdWJuZXRzXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NElwYW1Qcm92aXNpb25lZENpZHJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBjb25zdHJ1Y3Rvcihjb25zdHJ1Y3Q6IENvbnN0cnVjdCwgY29uc3RydWN0SWQ6IHN0cmluZywgcHJvcHM6IFZwY1YyQXR0cmlidXRlcykge1xuICAgICAgICBzdXBlcihjb25zdHJ1Y3QsIGNvbnN0cnVjdElkKTtcbiAgICAgICAgdGhpcy52cGNJZCA9IHByb3BzLnZwY0lkLFxuICAgICAgICB0aGlzLnJlZ2lvbiA9IHByb3BzLnJlZ2lvbiA/PyB0aGlzLnN0YWNrLnJlZ2lvbixcbiAgICAgICAgdGhpcy5vd25lckFjY291bnRJZCA9IHByb3BzLm93bmVyQWNjb3VudElkID8/IHRoaXMuc3RhY2suYWNjb3VudCxcbiAgICAgICAgdGhpcy5fcGFydGl0aW9uID0gcmVnaW9uX2luZm8uUmVnaW9uSW5mby5nZXQodGhpcy5yZWdpb24pLnBhcnRpdGlvbixcbiAgICAgICAgdGhpcy52cGNBcm4gPSBBcm4uZm9ybWF0KHtcbiAgICAgICAgICBzZXJ2aWNlOiAnZWMyJyxcbiAgICAgICAgICByZXNvdXJjZTogJ3ZwYycsXG4gICAgICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLnZwY0lkLFxuICAgICAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICAgICAgYWNjb3VudDogdGhpcy5vd25lckFjY291bnRJZCxcbiAgICAgICAgICBwYXJ0aXRpb246IHRoaXMuX3BhcnRpdGlvbixcbiAgICAgICAgfSwgdGhpcy5zdGFjayk7XG5cbiAgICAgICAgLy8gUG9wdWxhdGUgcmVnaW9uIGFuZCBhY2NvdW50IGZpZWxkcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB1cCBwZWVyaW5nIGNvbm5lY3Rpb25cbiAgICAgICAgLy8gc2FtcGxlIHZwYyBBcm4gLSBhcm46YXdzOmVjMjp1cy13ZXN0LTI6MTIzNDU2Nzg5MDEyOnZwYy92cGMtMDEyMzQ1Njc4OWFiY2RlZjBcbiAgICAgICAgdGhpcy5yZWdpb24gPSB0aGlzLnZwY0Fybi5zcGxpdCgnOicpWzNdO1xuICAgICAgICB0aGlzLm93bmVyQWNjb3VudElkID0gdGhpcy52cGNBcm4uc3BsaXQoJzonKVs0XTtcbiAgICAgICAgLy8gUmVmZXJzIHRvIGFjdHVhbCBWUEMgUmVzb3VyY2UgYXR0cmlidXRlIGluIG5vbi1pbXBvcnRlZCBWUENcbiAgICAgICAgdGhpcy52cGNDaWRyQmxvY2sgPSBwcm9wcy52cGNDaWRyQmxvY2s7XG4gICAgICAgIC8vIFJlcXVpcmVkIGZvciBzdWJuZXQgcmFuZ2UgcmVsYXRlZCBjaGVja3NcbiAgICAgICAgdGhpcy5pcHY0Q2lkckJsb2NrID0gcHJvcHMudnBjQ2lkckJsb2NrO1xuICAgICAgICB0aGlzLl92cG5HYXRld2F5SWQgPSBwcm9wcy52cG5HYXRld2F5SWQ7XG5cbiAgICAgICAgaWYgKHByb3BzLnN1Ym5ldHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHN1Ym5ldCBvZiBwcm9wcy5zdWJuZXRzKSB7XG4gICAgICAgICAgICBpZiAoc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB8fCBzdWJuZXQuc3VibmV0VHlwZSA9PT0gU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfTkFUIHx8XG4gICAgICAgICAgICAgIHN1Ym5ldC5zdWJuZXRUeXBlID09PSBTdWJuZXRUeXBlLlBSSVZBVEUpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcml2YXRlU3VibmV0cy5wdXNoKFN1Ym5ldFYyLmZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoc2NvcGUsIHN1Ym5ldC5zdWJuZXROYW1lPz8gJ0ltcG9ydGVkUHJpdmF0ZVN1Ym5ldCcsIHN1Ym5ldCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJuZXQuc3VibmV0VHlwZSA9PT0gU3VibmV0VHlwZS5QVUJMSUMpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWJsaWNTdWJuZXRzLnB1c2goU3VibmV0VjIuZnJvbVN1Ym5ldFYyQXR0cmlidXRlcyhzY29wZSwgc3VibmV0LnN1Ym5ldE5hbWU/PyAnSW1wb3J0ZWRQdWJsaWNTdWJuZXQnLCBzdWJuZXQpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuSVNPTEFURUQgfHwgc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCkge1xuICAgICAgICAgICAgICB0aGlzLmlzb2xhdGVkU3VibmV0cy5wdXNoKFN1Ym5ldFYyLmZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoc2NvcGUsIHN1Ym5ldC5zdWJuZXROYW1lPz8gJ0ltcG9ydGVkSXNvbGF0ZWRTdWJuZXQnLCBzdWJuZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWNvbmRhcnlDaWRyQmxvY2sgPSBwcm9wcy5zZWNvbmRhcnlDaWRyQmxvY2tzPy5tYXAoY2lkckJsb2NrID0+IFZQQ0NpZHJCbG9jay5mcm9tVlBDQ2lkckJsb2NrYXR0cmlidXRlcyhzY29wZSwgY2lkckJsb2NrLmNpZHJCbG9ja05hbWUgPz8gJ0ltcG9ydGVkU2Vjb25kYXJ5Q2lkckJsb2NrJywgeyAuLi5jaWRyQmxvY2sgfSkpO1xuICAgICAgICBpZiAocHJvcHMuc2Vjb25kYXJ5Q2lkckJsb2Nrcykge1xuICAgICAgICAgIGZvciAoY29uc3QgY2lkckJsb2NrIG9mIHByb3BzLnNlY29uZGFyeUNpZHJCbG9ja3MpIHtcbiAgICAgICAgICAgIGlmIChjaWRyQmxvY2suaXB2NElwYW1Qcm92aXNpb25lZENpZHJzKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXB2NElwYW1Qcm92aXNpb25lZENpZHJzLnB1c2goLi4uY2lkckJsb2NrLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRWcGNWMihzY29wZSwgaWQsIGF0dHJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIGZvciB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNBcm46IHN0cmluZztcblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElQdjYgQ0lEUiBibG9ja3MgZm9yIHRoZSBWUEMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwYy5odG1sI2F3cy1yZXNvdXJjZS1lYzItdnBjLXJldHVybi12YWx1ZXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcHY2Q2lkckJsb2Nrczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcm92aWRlciBvZiBpcHY0IGFkZHJlc3Nlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwQWRkcmVzc2VzOiBJSXBBZGRyZXNzZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBWUEMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IENmblZQQztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGluc3RhbmNlcyBsYXVuY2hlZCBpbiB0aGlzIFZQQyB3aWxsIGhhdmUgcHVibGljIEROUyBob3N0bmFtZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZG5zSG9zdG5hbWVzRW5hYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIEROUyBzdXBwb3J0IGlzIGVuYWJsZWQgZm9yIHRoaXMgVlBDLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRuc1N1cHBvcnRFbmFibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJc29sYXRlZCBTdWJuZXRzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBWUEMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBJU3VibmV0W107XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBTdWJuZXRzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBWUEMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGljU3VibmV0czogSVN1Ym5ldFtdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgU3VibmV0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgVlBDLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByaXZhdGVTdWJuZXRzOiBJU3VibmV0W107XG5cbiAgLyoqXG4gICAqIFRvIGRlZmluZSBkZXBlbmRlbmN5IG9uIGludGVybmV0IGNvbm5lY3Rpdml0eVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlO1xuXG4gIC8qKlxuICAgKiByZWZlcmVuY2UgdG8gYWxsIHNlY29uZGFyeSBibG9ja3MgYXR0YWNoZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZWNvbmRhcnlDaWRyQmxvY2s/OiBJVlBDQ2lkckJsb2NrW10gPSBuZXcgQXJyYXk8SVZQQ0NpZHJCbG9jaz47XG5cbiAgLyoqXG4gICAqIElQdjQgQ0lEUiBwcm92aXNpb25lZCB1c2luZyBJUEFNIHBvb2xcbiAgICogUmVxdWlyZWQgdG8gY2hlY2sgZm9yIG92ZXJsYXBwaW5nIENJRFJzIGFmdGVyIHByb3Zpc2lvbmluZ1xuICAgKiBpcyBjb21wbGV0ZSB1bmRlciBJUEFNXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXB2NElwYW1Qcm92aXNpb25lZENpZHJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJlZ2lvbiBmb3IgdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogSWRlbnRpZmllciBvZiB0aGUgb3duZXIgZm9yIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3duZXJBY2NvdW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogRm9yIHZhbGlkYXRpb24gdG8gZGVmaW5lIElQdjYgc3VibmV0cywgc2V0IHRvIHRydWUgaW4gY2FzZSBvZlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSVB2NiBjaWRyIHJhbmdlXG4gICAqIGlmIHRydWUsIElQdjYgYWRkcmVzc2VzIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgc3VibmV0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VJcHY2OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFZwY05hbWUgdG8gYmUgdXNlZCBmb3IgdGFnZ2luZyBpdHMgY29tcG9uZW50c1xuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcblxuICBwdWJsaWMgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZwY1YyUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy52cGNOYW1lID8/IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjgsIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogJ18nIH0pLFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgdGhpcy52cGNOYW1lID0gcHJvcHMudnBjTmFtZTtcbiAgICB0aGlzLmlwQWRkcmVzc2VzID0gcHJvcHMucHJpbWFyeUFkZHJlc3NCbG9jayA/PyBJcEFkZHJlc3Nlcy5pcHY0KCcxMC4wLjAuMC8xNicpO1xuICAgIGNvbnN0IHZwY09wdGlvbnMgPSB0aGlzLmlwQWRkcmVzc2VzLmFsbG9jYXRlVnBjQ2lkcigpO1xuXG4gICAgdGhpcy5kbnNIb3N0bmFtZXNFbmFibGVkID0gcHJvcHMuZW5hYmxlRG5zSG9zdG5hbWVzID09IG51bGwgPyB0cnVlIDogcHJvcHMuZW5hYmxlRG5zSG9zdG5hbWVzO1xuICAgIHRoaXMuZG5zU3VwcG9ydEVuYWJsZWQgPSBwcm9wcy5lbmFibGVEbnNTdXBwb3J0ID09IG51bGwgPyB0cnVlIDogcHJvcHMuZW5hYmxlRG5zU3VwcG9ydDtcbiAgICBjb25zdCBpbnN0YW5jZVRlbmFuY3kgPSBwcm9wcy5kZWZhdWx0SW5zdGFuY2VUZW5hbmN5IHx8ICdkZWZhdWx0JztcbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblZQQyh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjaWRyQmxvY2s6IHZwY09wdGlvbnMuaXB2NENpZHJCbG9jaywgLy9mb3IgSXB2NCBhZGRyZXNzZXMgQ0lEUiBibG9ja1xuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0aGlzLmRuc0hvc3RuYW1lc0VuYWJsZWQsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiB0aGlzLmRuc1N1cHBvcnRFbmFibGVkLFxuICAgICAgaXB2NElwYW1Qb29sSWQ6IHZwY09wdGlvbnMuaXB2NElwYW1Qb29sPy5pcGFtUG9vbElkLCAvLyBmb3IgSXB2NCBpcGFtIG9wdGlvblxuICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IHZwY09wdGlvbnMuaXB2NE5ldG1hc2tMZW5ndGgsIC8vIGZvciBJcHY0IGlwYW0gb3B0aW9uXG4gICAgICBpbnN0YW5jZVRlbmFuY3k6IGluc3RhbmNlVGVuYW5jeSxcbiAgICB9KTtcblxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMudnBjQ2lkckJsb2NrID0gdGhpcy5yZXNvdXJjZS5hdHRyQ2lkckJsb2NrO1xuICAgIGlmICh2cGNPcHRpb25zLmlwdjRDaWRyQmxvY2spIHtcbiAgICAgIHRoaXMuaXB2NENpZHJCbG9jayA9IHZwY09wdGlvbnMuaXB2NENpZHJCbG9jaztcbiAgICB9XG4gICAgdGhpcy5pcHY2Q2lkckJsb2NrcyA9IHRoaXMucmVzb3VyY2UuYXR0cklwdjZDaWRyQmxvY2tzO1xuICAgIHRoaXMudnBjSWQgPSB0aGlzLnJlc291cmNlLmF0dHJWcGNJZDtcbiAgICB0aGlzLnZwY0FybiA9IEFybi5mb3JtYXQoe1xuICAgICAgc2VydmljZTogJ2VjMicsXG4gICAgICByZXNvdXJjZTogJ3ZwYycsXG4gICAgICByZXNvdXJjZU5hbWU6IHRoaXMudnBjSWQsXG4gICAgfSwgdGhpcy5zdGFjayk7XG4gICAgdGhpcy5yZWdpb24gPSB0aGlzLnN0YWNrLnJlZ2lvbjtcbiAgICB0aGlzLm93bmVyQWNjb3VudElkID0gdGhpcy5zdGFjay5hY2NvdW50O1xuICAgIC8vQWRkIHRhZyB0byB0aGUgVlBDIHdpdGggdGhlIG5hbWUgcHJvdmlkZWQgaW4gcHJvcGVydGllc1xuICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy52cGNOYW1lIHx8IHRoaXMubm9kZS5wYXRoKTtcbiAgICBpZiAocHJvcHMuc2Vjb25kYXJ5QWRkcmVzc0Jsb2Nrcykge1xuICAgICAgY29uc3Qgc2Vjb25kYXJ5QWRkcmVzc0Jsb2NrczogSUlwQWRkcmVzc2VzW10gPSBwcm9wcy5zZWNvbmRhcnlBZGRyZXNzQmxvY2tzO1xuXG4gICAgICBmb3IgKGNvbnN0IHNlY29uZGFyeUFkZHJlc3NCbG9jayBvZiBzZWNvbmRhcnlBZGRyZXNzQmxvY2tzKSB7XG5cbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5VnBjT3B0aW9uczogVnBjQ2lkck9wdGlvbnMgPSBzZWNvbmRhcnlBZGRyZXNzQmxvY2suYWxsb2NhdGVWcGNDaWRyKCk7XG4gICAgICAgIGlmICghc2Vjb25kYXJ5VnBjT3B0aW9ucy5jaWRyQmxvY2tOYW1lKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaWRyIEJsb2NrIE5hbWUgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIHNlY29uZGFyeSBJUCBhZGRyZXNzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2Vjb25kYXJ5VnBjT3B0aW9ucy5hbWF6b25Qcm92aWRlZCB8fCBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjZJcGFtUG9vbCkge1xuICAgICAgICAgIHRoaXMudXNlSXB2NiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy92YWxpZGF0ZSBDSURSIHJhbmdlcyBwZXIgUkZDIDE5MThcbiAgICAgICAgaWYgKHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NENpZHJCbG9jayEpIHtcbiAgICAgICAgICBjb25zdCByZXQgPSB2YWxpZGF0ZUlwdjRhZGRyZXNzKHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NENpZHJCbG9jaywgdGhpcy5yZXNvdXJjZS5jaWRyQmxvY2spO1xuICAgICAgICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NJRFIgYmxvY2sgc2hvdWxkIGJlIGluIHRoZSBzYW1lIFJGQyAxOTE4IHJhbmdlIGluIHRoZSBWUEMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NElwYW1Qcm92aXNpb25lZENpZHJzISkge1xuICAgICAgICAgIHRoaXMuaXB2NElwYW1Qcm92aXNpb25lZENpZHJzPy5wdXNoKC4uLnNlY29uZGFyeVZwY09wdGlvbnMuaXB2NElwYW1Qcm92aXNpb25lZENpZHJzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2cGNDaWRyQmxvY2sgPSBuZXcgVlBDQ2lkckJsb2NrKHRoaXMsIHNlY29uZGFyeVZwY09wdGlvbnMuY2lkckJsb2NrTmFtZSwge1xuICAgICAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgICAgIGNpZHJCbG9jazogc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY0Q2lkckJsb2NrLFxuICAgICAgICAgIGlwdjRJcGFtUG9vbElkOiBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjRJcGFtUG9vbD8uaXBhbVBvb2xJZCxcbiAgICAgICAgICBpcHY0TmV0bWFza0xlbmd0aDogc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY0TmV0bWFza0xlbmd0aCxcbiAgICAgICAgICBpcHY2TmV0bWFza0xlbmd0aDogc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY2TmV0bWFza0xlbmd0aCxcbiAgICAgICAgICBpcHY2SXBhbVBvb2xJZDogc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY2SXBhbVBvb2w/LmlwYW1Qb29sSWQsXG4gICAgICAgICAgYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrOiBzZWNvbmRhcnlWcGNPcHRpb25zLmFtYXpvblByb3ZpZGVkLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNlY29uZGFyeVZwY09wdGlvbnMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygc2Vjb25kYXJ5VnBjT3B0aW9ucy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgIHZwY0NpZHJCbG9jay5ub2RlLmFkZERlcGVuZGVuY3koZGVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy9DcmVhdGUgc2Vjb25kYXJ5IGJsb2NrcyBmb3IgSXB2NCBhbmQgSXB2NlxuICAgICAgICB0aGlzLnNlY29uZGFyeUNpZHJCbG9jaz8ucHVzaCh2cGNDaWRyQmxvY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtcHR5IGFycmF5IGZvciBpc29sYXRlZCBzdWJuZXRzXG4gICAgICovXG4gICAgdGhpcy5pc29sYXRlZFN1Ym5ldHMgPSBuZXcgQXJyYXk8SVN1Ym5ldD47XG5cbiAgICAvKipcbiAgICAgKiBFbXB0eSBhcnJheSBmb3IgcHVibGljIHN1Ym5ldHNcbiAgICAgKi9cbiAgICB0aGlzLnB1YmxpY1N1Ym5ldHMgPSBuZXcgQXJyYXk8SVN1Ym5ldD47XG5cbiAgICAvKipcbiAgICAgKiBFbXB0eSBhcnJheSBmb3IgcHJpdmF0ZSBzdWJuZXRzXG4gICAgICovXG4gICAgdGhpcy5wcml2YXRlU3VibmV0cyA9IG5ldyBBcnJheTxJU3VibmV0PjtcblxuICAgIC8qKlxuICAgICAqIERlcGVuZGFibGUgdGhhdCBjYW4gYmUgZGVwZW5kZWQgdXBvbiB0byBmb3JjZSBpbnRlcm5ldCBjb25uZWN0aXZpdHkgZXN0YWJsaXNoZWQgb24gdGhlIFZQQ1xuICAgICAqIEFkZCBpZ3cgdG8gdGhpcyBpZiBpdHMgYSBwdWJsaWMgc3VibmV0XG4gICAgICovXG4gICAgdGhpcy5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkID0gdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDtcbiAgfVxufVxuLyoqXG4gKiBTdXBwb3J0cyBhc3NpZ25pbmcgSVB2NCBhZGRyZXNzIHRvIFZQQ1xuICovXG5jbGFzcyBpcHY0Q2lkckFsbG9jYXRpb24gaW1wbGVtZW50cyBJSXBBZGRyZXNzZXMge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2lkckJsb2NrOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM/OiB7IGNpZHJCbG9ja05hbWU6IHN0cmluZ30pIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBDSURSIGJsb2NrIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHRvIHNldCBJUHY0XG4gICAqL1xuICBhbGxvY2F0ZVZwY0NpZHIoKTogVnBjQ2lkck9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBpcHY0Q2lkckJsb2NrOiB0aGlzLmNpZHJCbG9jayxcbiAgICAgIGNpZHJCbG9ja05hbWU6IHRoaXMucHJvcHM/LmNpZHJCbG9ja05hbWUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFN1cHBvcnRzIEFtYXpvbiBQcm92aWRlZCBJcHY2IHJhbmdlc1xuICovXG5jbGFzcyBBbWF6b25Qcm92aWRlZCBpbXBsZW1lbnRzIElJcEFkZHJlc3NlcyB7XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGFuIEFtYXpvbi1wcm92aWRlZCBJUHY2IENJRFIgcmFuZ2UgZm9yIGEgVlBDLlxuICAgKlxuICAgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIElJcEFkZHJlc3NlcyBpbnRlcmZhY2UgYW5kIGlzIHVzZWQgdG8gYWxsb2NhdGUgYW4gQW1hem9uLXByb3ZpZGVkXG4gICAqIElQdjYgQ0lEUiByYW5nZSBmb3IgYSBWUEMuIFdoZW4gYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpcyB1c2VkIHRvIGFsbG9jYXRlIHRoZSBWUEMgQ0lEUixcbiAgICogQW1hem9uIHdpbGwgYXV0b21hdGljYWxseSBhc3NpZ24gYW4gSVB2NiBDSURSIHJhbmdlIGZyb20gaXRzIHBvb2wgb2YgYXZhaWxhYmxlIGFkZHJlc3Nlcy5cbiAgICovXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogeyBjaWRyQmxvY2tOYW1lOiBzdHJpbmd9KSB7fTtcblxuICBhbGxvY2F0ZVZwY0NpZHIoKTogVnBjQ2lkck9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBhbWF6b25Qcm92aWRlZDogdHJ1ZSxcbiAgICAgIGNpZHJCbG9ja05hbWU6IHRoaXMucHJvcHMuY2lkckJsb2NrTmFtZSxcbiAgICB9O1xuICB9XG5cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIElQdjQgYWRkcmVzcyByYW5nZSBtYW5hZ2VkIGJ5IEFXUyBJUCBBZGRyZXNzIE1hbmFnZXIgKElQQU0pLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW0uaHRtbFxuICovXG5jbGFzcyBJcGFtSXB2NiBpbXBsZW1lbnRzIElJcEFkZHJlc3NlcyB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogSXBhbU9wdGlvbnMpIHtcbiAgfVxuXG4gIGFsbG9jYXRlVnBjQ2lkcigpOiBWcGNDaWRyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlwdjZOZXRtYXNrTGVuZ3RoOiB0aGlzLnByb3BzLm5ldG1hc2tMZW5ndGgsXG4gICAgICBpcHY2SXBhbVBvb2w6IHRoaXMucHJvcHMuaXBhbVBvb2wsXG4gICAgICBkZXBlbmRlbmNpZXM6IHRoaXMucHJvcHMuaXBhbVBvb2w/LmlwYW1DaWRycy5tYXAoYyA9PiBjIGFzIENmblJlc291cmNlKSxcbiAgICAgIGNpZHJCbG9ja05hbWU6IHRoaXMucHJvcHMuY2lkckJsb2NrTmFtZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBJUHY0IGFkZHJlc3MgcmFuZ2UgbWFuYWdlZCBieSBBV1MgSVAgQWRkcmVzcyBNYW5hZ2VyIChJUEFNKS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtLmh0bWxcbiAqL1xuY2xhc3MgSXBhbUlwdjQgaW1wbGVtZW50cyBJSXBBZGRyZXNzZXMge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IElwYW1PcHRpb25zKSB7XG4gIH1cbiAgYWxsb2NhdGVWcGNDaWRyKCk6IFZwY0NpZHJPcHRpb25zIHtcblxuICAgIHJldHVybiB7XG4gICAgICBpcHY0TmV0bWFza0xlbmd0aDogdGhpcy5wcm9wcy5uZXRtYXNrTGVuZ3RoLFxuICAgICAgaXB2NElwYW1Qb29sOiB0aGlzLnByb3BzLmlwYW1Qb29sLFxuICAgICAgY2lkckJsb2NrTmFtZTogdGhpcy5wcm9wcz8uY2lkckJsb2NrTmFtZSxcbiAgICAgIGlwdjRJcGFtUHJvdmlzaW9uZWRDaWRyczogdGhpcy5wcm9wcy5pcGFtUG9vbD8uaXBhbUlwdjRDaWRycyxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHRvIGNyZWF0ZSBMMiBmb3IgVlBDIENpZHIgQmxvY2tcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVlBDQ2lkckJsb2NrIHtcbiAgLyoqXG4gICAqIEFtYXpvbiBQcm92aWRlZCBJcHY2XG4gICAqL1xuICByZWFkb25seSBhbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2s/IDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNlY29uZGFyeSBJUHY0IENJRFIgQmxvY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBDSURSIGJsb2NrIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQQU0gcG9vbCBmb3IgSVB2NiBhZGRyZXNzIHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkID86IHN0cmluZztcblxuICAvKipcbiAgICogSVBBTSBwb29sIGZvciBJUHY0IGFkZHJlc3MgdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qb29sSWQgPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZXMgZm9yIFZQQ0NpZHJCbG9jayB1c2VkIGZvciBkZWZpbmluZyBhIG5ldyBDSURSIEJsb2NrXG4gKiBhbmQgYWxzbyBmb3IgaW1wb3J0aW5nIGFuIGV4aXN0aW5nIENJRFJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWUENDaWRyQmxvY2thdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIEFtYXpvbiBQcm92aWRlZCBJcHY2XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2s/IDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNlY29uZGFyeSBJUHY0IENJRFIgQmxvY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBDSURSIGJsb2NrIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICogVGhlIHNlY29uZGFyeSBJUHY0IENJRFIgQmxvY2tcbiAgKlxuICAqIEBkZWZhdWx0IC0gbm8gQ0lEUiBibG9jayBwcm92aWRlZFxuICAqL1xuICByZWFkb25seSBjaWRyQmxvY2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOZXQgbWFzayBsZW5ndGggZm9yIElQdjYgYWRkcmVzcyB0eXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gTmV0IG1hc2sgbGVuZ3RoIGNvbmZpZ3VyZWQgZm9yIElQdjZcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZOZXRtYXNrTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOZXQgbWFzayBsZW5ndGggZm9yIElQdjQgYWRkcmVzcyB0eXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gTmV0IG1hc2sgbGVuZ3RoIGNvbmZpZ3VyZWQgZm9yIElQdjRcbiAgICovXG4gIHJlYWRvbmx5IGlwdjROZXRtYXNrTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJUEFNIHBvb2wgZm9yIElQdjYgYWRkcmVzcyB0eXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gSVBBTSBwb29sIElkIHByb3ZpZGVkIGZvciBJUHY2XG4gICAqL1xuICByZWFkb25seSBpcHY2SXBhbVBvb2xJZCA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQQU0gcG9vbCBmb3IgSVB2NCBhZGRyZXNzIHR5cGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBJUEFNIHBvb2wgSWQgcHJvdmlkZWQgZm9yIElQdjRcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRJcGFtUG9vbElkID86IHN0cmluZztcblxuICAvKipcbiAgICogSVB2NCBDSURSIHByb3Zpc2lvbmVkIHVuZGVyIHBvb2xcbiAgICogUmVxdWlyZWQgdG8gY2hlY2sgZm9yIG92ZXJsYXBwaW5nIENJRFJzIGFmdGVyIHByb3Zpc2lvbmluZ1xuICAgKiBpcyBjb21wbGV0ZSB1bmRlciBJUEFNIHBvb2xcbiAgICogQGRlZmF1bHQgLSBubyBJUEFNIElQdjQgQ0lEUiByYW5nZSBpcyBwcm92aXNpb25lZCB1c2luZyBJUEFNXG4gICAqL1xuICByZWFkb25seSBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgVlBDQ2lkckJsb2NrXG4gKi9cbmludGVyZmFjZSBWUENDaWRyQmxvY2tQcm9wcyBleHRlbmRzIFZQQ0NpZHJCbG9ja2F0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIFZQQyBJZCBmb3IgYXNzb2NpYXRpbmcgQ0lEUiBCbG9jayBhcyBhIHNlY29uZGFyeSBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSB2cGNJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVybmFsIEwyIHRvIGRlZmluZSBhIG5ldyBWUEMgQ0lEUiBCbG9ja1xuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFZQQ0NpZHJCbG9jayBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVZQQ0NpZHJCbG9jayB7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBWUEMgQ0lEUiBCbG9ja1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVlBDQ2lkckJsb2NrYXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBDQ2lkckJsb2NrYXR0cmlidXRlcykgOiBJVlBDQ2lkckJsb2NrIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElWUENDaWRyQmxvY2sge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNpZHJCbG9jayA9IHByb3BzLmNpZHJCbG9jaztcbiAgICAgIHB1YmxpYyByZWFkb25seSBhbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPzogYm9vbGVhbiA9IHByb3BzLmFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jaztcbiAgICAgIHB1YmxpYyByZWFkb25seSBpcHY2SXBhbVBvb2xJZCA/OiBzdHJpbmcgPSBwcm9wcy5pcHY2SXBhbVBvb2xJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBpcHY0SXBhbVBvb2xJZCA/OiBzdHJpbmcgPSBwcm9wcy5pcHY0SXBhbVBvb2xJZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuVlBDQ2lkckJsb2NrO1xuXG4gIHB1YmxpYyByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jaz86IGJvb2xlYW47XG5cbiAgcHVibGljIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkPzogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpcHY0SXBhbVBvb2xJZD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBDQ2lkckJsb2NrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuVlBDQ2lkckJsb2NrKHRoaXMsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gICAgdGhpcy5jaWRyQmxvY2sgPSBwcm9wcy5jaWRyQmxvY2s7XG4gICAgdGhpcy5pcHY2SXBhbVBvb2xJZCA9IHByb3BzLmlwdjZJcGFtUG9vbElkO1xuICAgIHRoaXMuaXB2NElwYW1Qb29sSWQgPSBwcm9wcy5pcHY0SXBhbVBvb2xJZDtcbiAgICB0aGlzLmFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jayA9IHByb3BzLmFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jaztcbiAgfVxufVxuXG4vL0BpbnRlcm5hbCBGaXJzdCB0d28gT2N0ZXQgdG8gdmVyaWZ5IFJGQyAxOTE4XG5pbnRlcmZhY2UgSVBhZGRyZXNzQ29uZmlnIHtcbiAgb2N0ZXQxOiBudW1iZXI7XG4gIG9jdGV0MjogbnVtYmVyO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB3aGV0aGVyIGEgc2Vjb25kYXJ5IElQdjQgYWRkcmVzcyBpcyB3aXRoaW4gdGhlIHNhbWUgcHJpdmF0ZSBJUCBhZGRyZXNzIHJhbmdlIGFzIHRoZSBwcmltYXJ5IElQdjQgYWRkcmVzcy5cbiAqXG4gKiBAcGFyYW0gY2lkcjEgVGhlIHNlY29uZGFyeSBJUHY0IENJRFIgYmxvY2sgdG8gYmUgdmFsaWRhdGVkLlxuICogQHBhcmFtIGNpZHIyIFRoZSBwcmltYXJ5IElQdjQgQ0lEUiBibG9jayB0byB2YWxpZGF0ZSBhZ2FpbnN0LlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc2Vjb25kYXJ5IElQdjQgQ0lEUiBibG9jayBpcyB3aXRoaW4gdGhlIHNhbWUgcHJpdmF0ZSBJUCBhZGRyZXNzIHJhbmdlIGFzIHRoZSBwcmltYXJ5IElQdjQgQ0lEUiBibG9jaywgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQGludGVybmFsXG4gKiBUaGUgcHJpdmF0ZSBJUCBhZGRyZXNzIHJhbmdlcyBhcmUgZGVmaW5lZCBieSBSRkMgMTkxOCBhcyAxMC4wLjAuMC84LCAxNzIuMTYuMC4wLzEyLCBhbmQgMTkyLjE2OC4wLjAvMTYuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlSXB2NGFkZHJlc3MoY2lkcjE/OiBzdHJpbmcsIGNpZHIyPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghY2lkcjEgfHwgIWNpZHIyKSB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBIYW5kbGUgY2FzZXMgd2hlcmUgQ0lEUiByYW5nZXMgYXJlIG5vdCBwcm92aWRlZFxuICB9XG5cbiAgY29uc3Qgb2N0ZXRzQ2lkcjE6IG51bWJlcltdID0gY2lkcjEuc3BsaXQoJy4nKS5tYXAob2N0ZXQgPT4gcGFyc2VJbnQob2N0ZXQsIDEwKSk7XG4gIGNvbnN0IG9jdGV0c0NpZHIyOiBudW1iZXJbXSA9IGNpZHIyLnNwbGl0KCcuJykubWFwKG9jdGV0ID0+IHBhcnNlSW50KG9jdGV0LCAxMCkpO1xuXG4gIGlmIChvY3RldHNDaWRyMS5sZW5ndGggIT09IDQgfHwgb2N0ZXRzQ2lkcjIubGVuZ3RoICE9PSA0KSB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBIYW5kbGUgaW52YWxpZCBDSURSIHJhbmdlc1xuICB9XG5cbiAgY29uc3QgaXAxOiBJUGFkZHJlc3NDb25maWcgPSB7XG4gICAgb2N0ZXQxOiBvY3RldHNDaWRyMVswXSxcbiAgICBvY3RldDI6IG9jdGV0c0NpZHIxWzFdLFxuICB9O1xuXG4gIGNvbnN0IGlwMjogSVBhZGRyZXNzQ29uZmlnID0ge1xuICAgIG9jdGV0MTogb2N0ZXRzQ2lkcjJbMF0sXG4gICAgb2N0ZXQyOiBvY3RldHNDaWRyMlsxXSxcbiAgfTtcblxuICByZXR1cm4gKGlwMS5vY3RldDEgPT09IDEwICYmIGlwMi5vY3RldDEgPT09IDEwKSB8fFxuICAgIChpcDEub2N0ZXQxID09PSAxOTIgJiYgaXAxLm9jdGV0MiA9PT0gMTY4ICYmIGlwMi5vY3RldDEgPT09IDE5MiAmJiBpcDIub2N0ZXQyID09PSAxNjgpIHx8XG4gICAgKGlwMS5vY3RldDEgPT09IDE3MiAmJiBpcDEub2N0ZXQyID09PSAxNiAmJiBpcDIub2N0ZXQxID09PSAxNzIgJiYgaXAyLm9jdGV0MiA9PT0gMTYpOyAvLyBDSURSIHJhbmdlcyBiZWxvbmcgdG8gc2FtZSBwcml2YXRlIElQIGFkZHJlc3MgcmFuZ2VzXG59XG4iXX0=
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidnBjLXYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGlEQUEyRztBQUMzRywyQ0FBaUY7QUFDakYsMkNBQXFFO0FBRXJFLCtDQUFrRDtBQUNsRCwyQ0FBc0U7QUFDdEUsNkNBQTBDO0FBQzFDLDhFQUE4RTtBQWtDOUU7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFDdEI7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQWdCLEVBQUUsS0FBNkI7Ozs7Ozs7Ozs7UUFDaEUsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNoRDtJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUE0Qjs7Ozs7Ozs7OztRQUNqRCxPQUFPLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3RDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQTRCOzs7Ozs7Ozs7O1FBQ2pELE9BQU8sSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7S0FDdEM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUE0Qjs7Ozs7Ozs7OztRQUMzRCxPQUFPLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2xDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQW9DOzs7Ozs7Ozs7O1FBQzlELE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUI7O0FBbENILGtDQW1DQzs7O0FBcUdEOztHQUVHO0FBQ0gsTUFBTSxRQUFRLEdBQVcsTUFBTSxDQUFDO0FBcUhoQzs7Ozs7O0dBTUc7QUFDSCxNQUFhLEtBQU0sU0FBUSx1QkFBUztJQUNsQzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFz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SyxDQUFDLENBQUMsNkJBQTZCO0lBQzdDLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBb0I7UUFDM0IsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDdkIsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFvQjtRQUMzQixNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztLQUN2QixDQUFDO0lBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO1FBQzdDLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUM7UUFDdEYsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsdURBQXVEO0FBQ2pKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5WUEMsIENmblZQQ0NpZHJCbG9jaywgRGVmYXVsdEluc3RhbmNlVGVuYW5jeSwgSVN1Ym5ldCwgU3VibmV0VHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQXJuLCBDZm5SZXNvdXJjZSwgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIERlcGVuZGVuY3lHcm91cCwgSURlcGVuZGFibGUgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElwYW1PcHRpb25zLCBJSXBhbVBvb2wgfSBmcm9tICcuL2lwYW0nO1xuaW1wb3J0IHsgSVZwY1YyLCBWcGNWMkJhc2UgfSBmcm9tICcuL3ZwYy12Mi1iYXNlJztcbmltcG9ydCB7IElTdWJuZXRWMiwgU3VibmV0VjIsIFN1Ym5ldFYyQXR0cmlidXRlcyB9IGZyb20gJy4vc3VibmV0LXYyJztcbmltcG9ydCB7IHJlZ2lvbl9pbmZvIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5cbi8qKlxuICogQWRkaXRpb25hbCBwcm9wcyBuZWVkZWQgZm9yIHNlY29uZGFyeSBBZGRyZXNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vjb25kYXJ5QWRkcmVzc1Byb3BzIHtcbiAgLyoqXG4gICAqIFJlcXVpcmVkIHRvIHNldCBTZWNvbmRhcnkgY2lkciBibG9jayByZXNvdXJjZSBuYW1lXG4gICAqIGluIG9yZGVyIHRvIGdlbmVyYXRlIHVuaXF1ZSBsb2dpY2FsIGlkIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2tOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQWRkaXRpb25hbCBwcm9wcyBuZWVkZWQgZm9yIEJZT0lQIElQdjYgYWRkcmVzcyBwcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElwdjZQb29sU2Vjb25kYXJ5QWRkcmVzc1Byb3BzIGV4dGVuZHMgU2Vjb25kYXJ5QWRkcmVzc1Byb3BzIHtcbiAgLyoqXG4gICAqIElEIG9mIHRoZSBJUHY2IGFkZHJlc3MgcG9vbCBmcm9tIHdoaWNoIHRvIGFsbG9jYXRlIHRoZSBJUHY2IENJRFIgYmxvY2suXG4gICAqIE5vdGU6IEJZT0lQIFBvb2wgSUQgaXMgZGlmZmVyZW50IGZyb20gdGhlIElQQU0gUG9vbCBJRC5cbiAgICogVG8gb25ib2FyZCB5b3VyIElQdjYgYWRkcmVzcyByYW5nZSB0byB5b3VyIEFXUyBhY2NvdW50IHBsZWFzZSByZWZlciB0byB0aGUgYmVsb3cgZG9jdW1lbnRhdGlvblxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9ieW9pcC1vbmJvYXJkLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZQb29sSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQSB2YWxpZCBJUHY2IENJRFIgYmxvY2sgZnJvbSB0aGUgSVB2NiBhZGRyZXNzIHBvb2wgb25ib2FyZGVkIHRvIEFXUyB1c2luZyBCWU9JUC5cbiAgICogVGhlIG1vc3Qgc3BlY2lmaWMgSVB2NiBhZGRyZXNzIHJhbmdlIHRoYXQgeW91IGNhbiBicmluZyBpcyAvNDggZm9yIENJRFJzIHRoYXQgYXJlIHB1YmxpY2x5IGFkdmVydGlzYWJsZVxuICAgKiBhbmQgLzU2IGZvciBDSURScyB0aGF0IGFyZSBub3QgcHVibGljbHkgYWR2ZXJ0aXNhYmxlLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9lYzItYnlvaXAuaHRtbCNieW9pcC1kZWZpbml0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkNpZHJCbG9jazogc3RyaW5nO1xufVxuXG4vKipcbiAqIElwQWRkcmVzcyBvcHRpb25zIHRvIGRlZmluZSBWUEMgVjJcbiAqL1xuZXhwb3J0IGNsYXNzIElwQWRkcmVzc2VzIHtcbiAgLyoqXG4gICAqIEFuIElQdjQgQ0lEUiBSYW5nZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpcHY0KGlwdjRDaWRyOiBzdHJpbmcsIHByb3BzPzogU2Vjb25kYXJ5QWRkcmVzc1Byb3BzKTogSUlwQWRkcmVzc2VzIHtcbiAgICByZXR1cm4gbmV3IGlwdjRDaWRyQWxsb2NhdGlvbihpcHY0Q2lkciwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIElwdjQgSXBhbSBQb29sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlwdjRJcGFtKGlwdjRJcGFtT3B0aW9uczogSXBhbU9wdGlvbnMpOiBJSXBBZGRyZXNzZXMge1xuICAgIHJldHVybiBuZXcgSXBhbUlwdjQoaXB2NElwYW1PcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBJcHY2IElwYW0gUG9vbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpcHY2SXBhbShpcHY2SXBhbU9wdGlvbnM6IElwYW1PcHRpb25zKTogSUlwQWRkcmVzc2VzIHtcbiAgICByZXR1cm4gbmV3IElwYW1JcHY2KGlwdjZJcGFtT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQW1hem9uIFByb3ZpZGVkIElwdjYgcmFuZ2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYW1hem9uUHJvdmlkZWRJcHY2KHByb3BzOiBTZWNvbmRhcnlBZGRyZXNzUHJvcHMpIDogSUlwQWRkcmVzc2VzIHtcbiAgICByZXR1cm4gbmV3IEFtYXpvblByb3ZpZGVkKHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIEJZT0lQIElQdjYgYWRkcmVzcyBwb29sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlwdjZCeW9pcFBvb2wocHJvcHM6IElwdjZQb29sU2Vjb25kYXJ5QWRkcmVzc1Byb3BzKTogSUlwQWRkcmVzc2VzIHtcbiAgICByZXR1cm4gbmV3IElwdjZQb29sKHByb3BzKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnNvbGlkYXRlZCByZXR1cm4gcGFyYW1ldGVycyB0byBwYXNzIHRvIFZQQyBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcGNDaWRyT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIElQdjQgQ0lEUiBCbG9ja1xuICAgKlxuICAgKiBAZGVmYXVsdCAnMTAuMC4wLjAvMTYnXG4gICAqL1xuICByZWFkb25seSBpcHY0Q2lkckJsb2NrPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDSURSIE1hc2sgZm9yIFZwY1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBJUEFNIElwdjRcbiAgICovXG4gIHJlYWRvbmx5IGlwdjROZXRtYXNrTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJcHY0IElQQU0gUG9vbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBJUEFNIElwdjRcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRJcGFtUG9vbD86IElJcGFtUG9vbDtcblxuICAvKipcbiAgICogQ0lEUiBNYXNrIGZvciBWcGNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBPbmx5IHJlcXVpcmVkIHdoZW4gdXNpbmcgQVdTIElwYW1cbiAgICovXG4gIHJlYWRvbmx5IGlwdjZOZXRtYXNrTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJcHY2IElQQU0gcG9vbCBpZCBmb3IgVlBDIHJhbmdlLCBjYW4gb25seSBiZSBkZWZpbmVkXG4gICAqIHVuZGVyIHB1YmxpYyBzY29wZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHBvb2wgaWRcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZJcGFtUG9vbD86IElJcGFtUG9vbDtcblxuICAvKipcbiAgICogVXNlIGFtYXpvbiBwcm92aWRlZCBJUCByYW5nZVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1hem9uUHJvdmlkZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZXBlbmRlbmN5IHRvIGFzc29jaWF0ZSBJcHY2IENJRFIgYmxvY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBkZXBlbmRlbmN5XG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM/OiBDZm5SZXNvdXJjZVtdO1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlZCB0byBzZXQgU2Vjb25kYXJ5IGNpZHIgYmxvY2sgcmVzb3VyY2UgbmFtZVxuICAgKiBpbiBvcmRlciB0byBnZW5lcmF0ZSB1bmlxdWUgbG9naWNhbCBpZCBmb3IgdGhlIHJlc291cmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5hbWUgZm9yIHByaW1hcnkgYWRkcmVzc2VzXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUHY0IENJRFIgcHJvdmlzaW9uZWQgdW5kZXIgcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU0gcG9vbFxuICAgKiBAZGVmYXVsdCAtIG5vIElQQU0gSVB2NCBDSURSIHJhbmdlIGlzIHByb3Zpc2lvbmVkIHVzaW5nIElQQU1cbiAgICovXG4gIHJlYWRvbmx5IGlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJUHY2IENJRFIgYmxvY2sgZnJvbSB0aGUgQk9ZSVAgSVB2NiBhZGRyZXNzIHBvb2wuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZztcblxuICAvKipcbiAgICogSUQgb2YgdGhlIEJZT0lQIElQdjYgYWRkcmVzcyBwb29sIGZyb20gd2hpY2ggdG8gYWxsb2NhdGUgdGhlIElQdjYgQ0lEUiBibG9jay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBpcHY2UG9vbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEltcGxlbWVudHMgaXAgYWRkcmVzcyBhbGxvY2F0aW9uIGFjY29yZGluZyB0byB0aGUgSVBBZHJlc3MgdHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElJcEFkZHJlc3NlcyB7XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBkZWZpbmUgdGhlIGltcGxlbWVudGF0aW9uIGxvZ2ljIG9mXG4gICAqIElQIGFkZHJlc3MgYWxsb2NhdGlvblxuICAgKi9cbiAgYWxsb2NhdGVWcGNDaWRyKCkgOiBWcGNDaWRyT3B0aW9ucztcblxufVxuXG4vKipcbiAqIE5hbWUgdGFnIGNvbnN0YW50XG4gKi9cbmNvbnN0IE5BTUVfVEFHOiBzdHJpbmcgPSAnTmFtZSc7XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgVlBDXG4gKiBbZGlzYWJsZS1hd3NsaW50OmZyb20tbWV0aG9kXVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY1YyUHJvcHMge1xuXG4gIC8qKiBBIG11c3QgSVB2NCBDSURSIGJsb2NrIGZvciB0aGUgVlBDXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1jaWRyLWJsb2Nrcy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSXB2NCBDSURSIEJsb2NrICgnMTAuMC4wLjAvMTYnKVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpbWFyeUFkZHJlc3NCbG9jaz86IElJcEFkZHJlc3NlcztcblxuICAvKipcbiAgICogVGhlIHNlY29uZGFyeSBDSURSIGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIFZQQy5cbiAgICogQ2FuIGJlICBJUHY0IG9yIElQdjYsIHR3byBJUHY0IHJhbmdlcyBtdXN0IGZvbGxvdyBSRkMjMTkxOCBjb252ZW50aW9uXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbCN2cGMtcmVzaXplfS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBzZWNvbmRhcnkgSVAgYWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5QWRkcmVzc0Jsb2Nrcz86IElJcEFkZHJlc3Nlc1tdO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgaW5zdGFuY2VzIGxhdW5jaGVkIGluIHRoZSBWUEMgZ2V0IEROUyBob3N0bmFtZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZURuc0hvc3RuYW1lcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBETlMgcmVzb2x1dGlvbiBpcyBzdXBwb3J0ZWQgZm9yIHRoZSBWUEMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZURuc1N1cHBvcnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB0ZW5hbmN5IG9mIGluc3RhbmNlcyBsYXVuY2hlZCBpbnRvIHRoZSBWUEMuXG4gICAqXG4gICAqIEJ5IHNldHRpbmcgdGhpcyB0byBkZWRpY2F0ZWQgdGVuYW5jeSwgaW5zdGFuY2VzIHdpbGwgYmUgbGF1bmNoZWQgb25cbiAgICogaGFyZHdhcmUgZGVkaWNhdGVkIHRvIGEgc2luZ2xlIEFXUyBjdXN0b21lciwgdW5sZXNzIHNwZWNpZmljYWxseSBzcGVjaWZpZWRcbiAgICogYXQgaW5zdGFuY2UgbGF1bmNoIHRpbWUuIFBsZWFzZSBub3RlLCBub3QgYWxsIGluc3RhbmNlIHR5cGVzIGFyZSB1c2FibGVcbiAgICogd2l0aCBEZWRpY2F0ZWQgdGVuYW5jeS5cbiAgICpcbiAgICogQGRlZmF1bHQgRGVmYXVsdEluc3RhbmNlVGVuYW5jeS5EZWZhdWx0IChzaGFyZWQpIHRlbmFuY3lcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRJbnN0YW5jZVRlbmFuY3k/OiBEZWZhdWx0SW5zdGFuY2VUZW5hbmN5O1xuXG4gIC8qKlxuICAgKiBQaHlzaWNhbCBuYW1lIGZvciB0aGUgVlBDXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0b2dlbmVyYXRlZCBieSBDREtcbiAgICovXG4gIHJlYWRvbmx5IHZwY05hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBpbXBvcnQgYSBWUEMgY3JlYXRlZCBvdXRzaWRlIG9mIENESyBzdGFja1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwY1YyQXR0cmlidXRlcyB7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgSURcbiAgICogUmVmZXJzIHRvIHBoeXNpY2FsIElkIG9mIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUmVnaW9uIGluIHdoaWNoIGltcG9ydGVkIFZQQyBpcyBob3N0ZWRcbiAgICogcmVxdWlyZWQgaW4gY2FzZSBvZiBjcm9zcyByZWdpb24gVlBDXG4gICAqIGFzIGdpdmVuIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBzZXQgZmllbGQgcmVnaW9uIGZvciBpbXBvcnRlZCBWUEMsXG4gICAqIHdoaWNoIHRoZW4gbGF0ZXIgY2FuIGJlIHVzZWQgZm9yIGVzdGFibGlzaGluZyBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNvbnN0cnVjdGVkIHdpdGggc3RhY2sgcmVnaW9uIHZhbHVlXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgQVdTIGFjY291bnQgdGhhdCBvd25zIHRoZSBpbXBvcnRlZCBWUENcbiAgICogcmVxdWlyZWQgaW4gY2FzZSBvZiBjcm9zcyBhY2NvdW50IFZQQ1xuICAgKiBhcyBnaXZlbiB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gc2V0IGZpZWxkIGFjY291bnQgZm9yIGltcG9ydGVkIFZQQyxcbiAgICogd2hpY2ggdGhlbiBsYXRlciBjYW4gYmUgdXNlZCBmb3IgZXN0YWJsaXNoaW5nIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY29uc3RydWN0ZWQgd2l0aCBzdGFjayBhY2NvdW50IHZhbHVlXG4gICAqL1xuICByZWFkb25seSBvd25lckFjY291bnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUHJpbWFyeSBWUEMgQ0lEUiBCbG9jayBvZiB0aGUgaW1wb3J0ZWQgVlBDXG4gICAqIENhbiBvbmx5IGJlIElQdjRcbiAgICovXG4gIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIFZQTiBHYXRld2F5IGlzIGF0dGFjaGVkIHRvIHRoZSBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBWUE4gR2F0ZXdheVxuICAgKi9cbiAgcmVhZG9ubHkgdnBuR2F0ZXdheUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJuZXRzIGFzc29jaWF0ZWQgd2l0aCBpbXBvcnRlZCBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzdWJuZXRzIHByb3ZpZGVkIHRvIGJlIGltcG9ydGVkXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRzPzogU3VibmV0VjJBdHRyaWJ1dGVzW107XG5cbiAgLyoqXG4gICAqIEltcG9ydCBTZWNvbmRhcnkgQ0lEUiBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlY29uZGFyeSBJUCBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlDaWRyQmxvY2tzPzogVlBDQ2lkckJsb2NrYXR0cmlidXRlc1tdO1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBmb3VuZGF0aW9uIGZvciBjcmVhdGluZyBhbmQgY29uZmlndXJpbmcgYSBWUEMgd2l0aCBhZHZhbmNlZCBmZWF0dXJlcyBzdWNoIGFzIElQQU0gKElQIEFkZHJlc3MgTWFuYWdlbWVudCkgYW5kIElQdjYgc3VwcG9ydC5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZWMyLlZwYy5odG1sfEFXUyBDREsgRG9jdW1lbnRhdGlvbiBvbiBWUENzfS5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlZQQ1xuICovXG5leHBvcnQgY2xhc3MgVnBjVjIgZXh0ZW5kcyBWcGNWMkJhc2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgVlBDIGZyb20gZXhpc3RpbmcgYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVnBjVjJBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBWcGNWMkF0dHJpYnV0ZXMpOiBJVnBjVjIge1xuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNsYXNzIHRvIGFsbG93IHVzZXJzIHRvIGltcG9ydCBWUENcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjbGFzcyBJbXBvcnRlZFZwY1YyIGV4dGVuZHMgVnBjVjJCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0Fybjogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHM6IElTdWJuZXRWMltdID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IElTdWJuZXRWMltdID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBJU3VibmV0VjJbXSA9IFtdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlID0gbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY05hbWU/OiBzdHJpbmc7XG4gICAgICBwcml2YXRlIHJlYWRvbmx5IF9wYXJ0aXRpb24/OiBzdHJpbmc7XG5cbiAgICAgIC8qXG4gICAgICAqIFJlZmVyZW5jZSB0byBhbGwgc2Vjb25kYXJ5IGJsb2NrcyBhdHRhY2hlZFxuICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSBzZWNvbmRhcnlDaWRyQmxvY2s/OiBJVlBDQ2lkckJsb2NrW107XG5cbiAgICAgIC8qKlxuICAgICAgICogUmVmZXJzIHRvIGFjdHVhbCBWUEMgUmVzb3VyY2UgYXR0cmlidXRlIGluIG5vbi1pbXBvcnRlZCBWUENcbiAgICAgICAqIFJlcXVpcmVkIHRvIGltcGxlbWVudCBoZXJlIGR1ZSB0byBleHRlbnNpb24gZnJvbSBCYXNlIGNsYXNzXG4gICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSB2cGNDaWRyQmxvY2s6IHN0cmluZztcblxuICAgICAgLy8gUmVxdWlyZWQgdG8gZG8gQ0lEUiByYW5nZSB0ZXN0IG9uIGltcG9ydGVkIFZQQ3MgdG8gY3JlYXRlIG5ldyBzdWJuZXRzXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NElwYW1Qcm92aXNpb25lZENpZHJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBjb25zdHJ1Y3Rvcihjb25zdHJ1Y3Q6IENvbnN0cnVjdCwgY29uc3RydWN0SWQ6IHN0cmluZywgcHJvcHM6IFZwY1YyQXR0cmlidXRlcykge1xuICAgICAgICBzdXBlcihjb25zdHJ1Y3QsIGNvbnN0cnVjdElkKTtcbiAgICAgICAgdGhpcy52cGNJZCA9IHByb3BzLnZwY0lkLFxuICAgICAgICB0aGlzLnJlZ2lvbiA9IHByb3BzLnJlZ2lvbiA/PyB0aGlzLnN0YWNrLnJlZ2lvbixcbiAgICAgICAgdGhpcy5vd25lckFjY291bnRJZCA9IHByb3BzLm93bmVyQWNjb3VudElkID8/IHRoaXMuc3RhY2suYWNjb3VudCxcbiAgICAgICAgdGhpcy5fcGFydGl0aW9uID0gcmVnaW9uX2luZm8uUmVnaW9uSW5mby5nZXQodGhpcy5yZWdpb24pLnBhcnRpdGlvbixcbiAgICAgICAgdGhpcy52cGNBcm4gPSBBcm4uZm9ybWF0KHtcbiAgICAgICAgICBzZXJ2aWNlOiAnZWMyJyxcbiAgICAgICAgICByZXNvdXJjZTogJ3ZwYycsXG4gICAgICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLnZwY0lkLFxuICAgICAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICAgICAgYWNjb3VudDogdGhpcy5vd25lckFjY291bnRJZCxcbiAgICAgICAgICBwYXJ0aXRpb246IHRoaXMuX3BhcnRpdGlvbixcbiAgICAgICAgfSwgdGhpcy5zdGFjayk7XG5cbiAgICAgICAgLy8gUG9wdWxhdGUgcmVnaW9uIGFuZCBhY2NvdW50IGZpZWxkcyB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB1cCBwZWVyaW5nIGNvbm5lY3Rpb25cbiAgICAgICAgLy8gc2FtcGxlIHZwYyBBcm4gLSBhcm46YXdzOmVjMjp1cy13ZXN0LTI6MTIzNDU2Nzg5MDEyOnZwYy92cGMtMDEyMzQ1Njc4OWFiY2RlZjBcbiAgICAgICAgdGhpcy5yZWdpb24gPSB0aGlzLnZwY0Fybi5zcGxpdCgnOicpWzNdO1xuICAgICAgICB0aGlzLm93bmVyQWNjb3VudElkID0gdGhpcy52cGNBcm4uc3BsaXQoJzonKVs0XTtcbiAgICAgICAgLy8gUmVmZXJzIHRvIGFjdHVhbCBWUEMgUmVzb3VyY2UgYXR0cmlidXRlIGluIG5vbi1pbXBvcnRlZCBWUENcbiAgICAgICAgdGhpcy52cGNDaWRyQmxvY2sgPSBwcm9wcy52cGNDaWRyQmxvY2s7XG4gICAgICAgIC8vIFJlcXVpcmVkIGZvciBzdWJuZXQgcmFuZ2UgcmVsYXRlZCBjaGVja3NcbiAgICAgICAgdGhpcy5pcHY0Q2lkckJsb2NrID0gcHJvcHMudnBjQ2lkckJsb2NrO1xuICAgICAgICB0aGlzLl92cG5HYXRld2F5SWQgPSBwcm9wcy52cG5HYXRld2F5SWQ7XG5cbiAgICAgICAgaWYgKHByb3BzLnN1Ym5ldHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHN1Ym5ldCBvZiBwcm9wcy5zdWJuZXRzKSB7XG4gICAgICAgICAgICBpZiAoc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB8fCBzdWJuZXQuc3VibmV0VHlwZSA9PT0gU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfTkFUIHx8XG4gICAgICAgICAgICAgIHN1Ym5ldC5zdWJuZXRUeXBlIGFzIHN0cmluZyA9PT0gJ0RlcHJlY2F0ZWRfUHJpdmF0ZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5wcml2YXRlU3VibmV0cy5wdXNoKFN1Ym5ldFYyLmZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoc2NvcGUsIHN1Ym5ldC5zdWJuZXROYW1lPz8gJ0ltcG9ydGVkUHJpdmF0ZVN1Ym5ldCcsIHN1Ym5ldCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJuZXQuc3VibmV0VHlwZSA9PT0gU3VibmV0VHlwZS5QVUJMSUMpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWJsaWNTdWJuZXRzLnB1c2goU3VibmV0VjIuZnJvbVN1Ym5ldFYyQXR0cmlidXRlcyhzY29wZSwgc3VibmV0LnN1Ym5ldE5hbWU/PyAnSW1wb3J0ZWRQdWJsaWNTdWJuZXQnLCBzdWJuZXQpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VibmV0LnN1Ym5ldFR5cGUgYXMgc3RyaW5nID09PSAnRGVwcmVjYXRlZF9Jc29sYXRlZCcgfHwgc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCkge1xuICAgICAgICAgICAgICB0aGlzLmlzb2xhdGVkU3VibmV0cy5wdXNoKFN1Ym5ldFYyLmZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoc2NvcGUsIHN1Ym5ldC5zdWJuZXROYW1lPz8gJ0ltcG9ydGVkSXNvbGF0ZWRTdWJuZXQnLCBzdWJuZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWNvbmRhcnlDaWRyQmxvY2sgPSBwcm9wcy5zZWNvbmRhcnlDaWRyQmxvY2tzPy5tYXAoY2lkckJsb2NrID0+IFZQQ0NpZHJCbG9jay5mcm9tVlBDQ2lkckJsb2NrYXR0cmlidXRlcyhzY29wZSwgY2lkckJsb2NrLmNpZHJCbG9ja05hbWUgPz8gJ0ltcG9ydGVkU2Vjb25kYXJ5Q2lkckJsb2NrJywgeyAuLi5jaWRyQmxvY2sgfSkpO1xuICAgICAgICBpZiAocHJvcHMuc2Vjb25kYXJ5Q2lkckJsb2Nrcykge1xuICAgICAgICAgIGZvciAoY29uc3QgY2lkckJsb2NrIG9mIHByb3BzLnNlY29uZGFyeUNpZHJCbG9ja3MpIHtcbiAgICAgICAgICAgIGlmIChjaWRyQmxvY2suaXB2NElwYW1Qcm92aXNpb25lZENpZHJzKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXB2NElwYW1Qcm92aXNpb25lZENpZHJzLnB1c2goLi4uY2lkckJsb2NrLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRWcGNWMihzY29wZSwgaWQsIGF0dHJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIGZvciB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNBcm46IHN0cmluZztcblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElQdjYgQ0lEUiBibG9ja3MgZm9yIHRoZSBWUEMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwYy5odG1sI2F3cy1yZXNvdXJjZS1lYzItdnBjLXJldHVybi12YWx1ZXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcHY2Q2lkckJsb2Nrczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcm92aWRlciBvZiBpcHY0IGFkZHJlc3Nlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwQWRkcmVzc2VzOiBJSXBBZGRyZXNzZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBWUEMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IENmblZQQztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGluc3RhbmNlcyBsYXVuY2hlZCBpbiB0aGlzIFZQQyB3aWxsIGhhdmUgcHVibGljIEROUyBob3N0bmFtZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZG5zSG9zdG5hbWVzRW5hYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIEROUyBzdXBwb3J0IGlzIGVuYWJsZWQgZm9yIHRoaXMgVlBDLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRuc1N1cHBvcnRFbmFibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJc29sYXRlZCBTdWJuZXRzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBWUEMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBJU3VibmV0W107XG5cbiAgLyoqXG4gICAqIFB1YmxpYyBTdWJuZXRzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBWUEMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGljU3VibmV0czogSVN1Ym5ldFtdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgU3VibmV0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgVlBDLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByaXZhdGVTdWJuZXRzOiBJU3VibmV0W107XG5cbiAgLyoqXG4gICAqIFRvIGRlZmluZSBkZXBlbmRlbmN5IG9uIGludGVybmV0IGNvbm5lY3Rpdml0eVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlO1xuXG4gIC8qKlxuICAgKiByZWZlcmVuY2UgdG8gYWxsIHNlY29uZGFyeSBibG9ja3MgYXR0YWNoZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZWNvbmRhcnlDaWRyQmxvY2s/OiBJVlBDQ2lkckJsb2NrW10gPSBuZXcgQXJyYXk8SVZQQ0NpZHJCbG9jaz47XG5cbiAgLyoqXG4gICAqIElQdjQgQ0lEUiBwcm92aXNpb25lZCB1c2luZyBJUEFNIHBvb2xcbiAgICogUmVxdWlyZWQgdG8gY2hlY2sgZm9yIG92ZXJsYXBwaW5nIENJRFJzIGFmdGVyIHByb3Zpc2lvbmluZ1xuICAgKiBpcyBjb21wbGV0ZSB1bmRlciBJUEFNXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXB2NElwYW1Qcm92aXNpb25lZENpZHJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJlZ2lvbiBmb3IgdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogSWRlbnRpZmllciBvZiB0aGUgb3duZXIgZm9yIHRoaXMgVlBDXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3duZXJBY2NvdW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogRm9yIHZhbGlkYXRpb24gdG8gZGVmaW5lIElQdjYgc3VibmV0cywgc2V0IHRvIHRydWUgaW4gY2FzZSBvZlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSVB2NiBjaWRyIHJhbmdlXG4gICAqIGlmIHRydWUsIElQdjYgYWRkcmVzc2VzIGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgc3VibmV0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1c2VJcHY2OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFZwY05hbWUgdG8gYmUgdXNlZCBmb3IgdGFnZ2luZyBpdHMgY29tcG9uZW50c1xuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcblxuICBwdWJsaWMgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZwY1YyUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy52cGNOYW1lID8/IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjgsIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogJ18nIH0pLFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG4gICAgdGhpcy52cGNOYW1lID0gcHJvcHMudnBjTmFtZTtcbiAgICB0aGlzLmlwQWRkcmVzc2VzID0gcHJvcHMucHJpbWFyeUFkZHJlc3NCbG9jayA/PyBJcEFkZHJlc3Nlcy5pcHY0KCcxMC4wLjAuMC8xNicpO1xuICAgIGNvbnN0IHZwY09wdGlvbnMgPSB0aGlzLmlwQWRkcmVzc2VzLmFsbG9jYXRlVnBjQ2lkcigpO1xuXG4gICAgdGhpcy5kbnNIb3N0bmFtZXNFbmFibGVkID0gcHJvcHMuZW5hYmxlRG5zSG9zdG5hbWVzID09IG51bGwgPyB0cnVlIDogcHJvcHMuZW5hYmxlRG5zSG9zdG5hbWVzO1xuICAgIHRoaXMuZG5zU3VwcG9ydEVuYWJsZWQgPSBwcm9wcy5lbmFibGVEbnNTdXBwb3J0ID09IG51bGwgPyB0cnVlIDogcHJvcHMuZW5hYmxlRG5zU3VwcG9ydDtcbiAgICBjb25zdCBpbnN0YW5jZVRlbmFuY3kgPSBwcm9wcy5kZWZhdWx0SW5zdGFuY2VUZW5hbmN5IHx8ICdkZWZhdWx0JztcbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblZQQyh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjaWRyQmxvY2s6IHZwY09wdGlvbnMuaXB2NENpZHJCbG9jaywgLy8gZm9yIElwdjQgYWRkcmVzc2VzIENJRFIgYmxvY2tcbiAgICAgIGVuYWJsZURuc0hvc3RuYW1lczogdGhpcy5kbnNIb3N0bmFtZXNFbmFibGVkLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogdGhpcy5kbnNTdXBwb3J0RW5hYmxlZCxcbiAgICAgIGlwdjRJcGFtUG9vbElkOiB2cGNPcHRpb25zLmlwdjRJcGFtUG9vbD8uaXBhbVBvb2xJZCwgLy8gZm9yIElwdjQgaXBhbSBvcHRpb25cbiAgICAgIGlwdjROZXRtYXNrTGVuZ3RoOiB2cGNPcHRpb25zLmlwdjROZXRtYXNrTGVuZ3RoLCAvLyBmb3IgSXB2NCBpcGFtIG9wdGlvblxuICAgICAgaW5zdGFuY2VUZW5hbmN5OiBpbnN0YW5jZVRlbmFuY3ksXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcbiAgICB0aGlzLnZwY0NpZHJCbG9jayA9IHRoaXMucmVzb3VyY2UuYXR0ckNpZHJCbG9jaztcbiAgICBpZiAodnBjT3B0aW9ucy5pcHY0Q2lkckJsb2NrKSB7XG4gICAgICB0aGlzLmlwdjRDaWRyQmxvY2sgPSB2cGNPcHRpb25zLmlwdjRDaWRyQmxvY2s7XG4gICAgfVxuICAgIHRoaXMuaXB2NkNpZHJCbG9ja3MgPSB0aGlzLnJlc291cmNlLmF0dHJJcHY2Q2lkckJsb2NrcztcbiAgICB0aGlzLnZwY0lkID0gdGhpcy5yZXNvdXJjZS5hdHRyVnBjSWQ7XG4gICAgdGhpcy52cGNBcm4gPSBBcm4uZm9ybWF0KHtcbiAgICAgIHNlcnZpY2U6ICdlYzInLFxuICAgICAgcmVzb3VyY2U6ICd2cGMnLFxuICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLnZwY0lkLFxuICAgIH0sIHRoaXMuc3RhY2spO1xuICAgIHRoaXMucmVnaW9uID0gdGhpcy5zdGFjay5yZWdpb247XG4gICAgdGhpcy5vd25lckFjY291bnRJZCA9IHRoaXMuc3RhY2suYWNjb3VudDtcbiAgICAvLyBBZGQgdGFnIHRvIHRoZSBWUEMgd2l0aCB0aGUgbmFtZSBwcm92aWRlZCBpbiBwcm9wZXJ0aWVzXG4gICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLnZwY05hbWUgfHwgdGhpcy5ub2RlLnBhdGgpO1xuICAgIGlmIChwcm9wcy5zZWNvbmRhcnlBZGRyZXNzQmxvY2tzKSB7XG4gICAgICBjb25zdCBzZWNvbmRhcnlBZGRyZXNzQmxvY2tzOiBJSXBBZGRyZXNzZXNbXSA9IHByb3BzLnNlY29uZGFyeUFkZHJlc3NCbG9ja3M7XG5cbiAgICAgIGZvciAoY29uc3Qgc2Vjb25kYXJ5QWRkcmVzc0Jsb2NrIG9mIHNlY29uZGFyeUFkZHJlc3NCbG9ja3MpIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5VnBjT3B0aW9uczogVnBjQ2lkck9wdGlvbnMgPSBzZWNvbmRhcnlBZGRyZXNzQmxvY2suYWxsb2NhdGVWcGNDaWRyKCk7XG4gICAgICAgIGlmICghc2Vjb25kYXJ5VnBjT3B0aW9ucy5jaWRyQmxvY2tOYW1lKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaWRyIEJsb2NrIE5hbWUgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIHNlY29uZGFyeSBJUCBhZGRyZXNzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2Vjb25kYXJ5VnBjT3B0aW9ucy5hbWF6b25Qcm92aWRlZCB8fCBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjZJcGFtUG9vbCB8fCBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjZQb29sSWQpIHtcbiAgICAgICAgICB0aGlzLnVzZUlwdjYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHZhbGlkYXRlIENJRFIgcmFuZ2VzIHBlciBSRkMgMTkxOFxuICAgICAgICBpZiAoc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY0Q2lkckJsb2NrISkge1xuICAgICAgICAgIGNvbnN0IHJldCA9IHZhbGlkYXRlSXB2NGFkZHJlc3Moc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY0Q2lkckJsb2NrLCB0aGlzLnJlc291cmNlLmNpZHJCbG9jayk7XG4gICAgICAgICAgaWYgKHJldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ0lEUiBibG9jayBzaG91bGQgYmUgaW4gdGhlIHNhbWUgUkZDIDE5MTggcmFuZ2UgaW4gdGhlIFZQQycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnMhKSB7XG4gICAgICAgICAgdGhpcy5pcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM/LnB1c2goLi4uc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZwY0NpZHJCbG9jayA9IG5ldyBWUENDaWRyQmxvY2sodGhpcywgc2Vjb25kYXJ5VnBjT3B0aW9ucy5jaWRyQmxvY2tOYW1lLCB7XG4gICAgICAgICAgdnBjSWQ6IHRoaXMudnBjSWQsXG4gICAgICAgICAgY2lkckJsb2NrOiBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjRDaWRyQmxvY2ssXG4gICAgICAgICAgaXB2NElwYW1Qb29sSWQ6IHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NElwYW1Qb29sPy5pcGFtUG9vbElkLFxuICAgICAgICAgIGlwdjROZXRtYXNrTGVuZ3RoOiBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjROZXRtYXNrTGVuZ3RoLFxuICAgICAgICAgIGlwdjZOZXRtYXNrTGVuZ3RoOiBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjZOZXRtYXNrTGVuZ3RoLFxuICAgICAgICAgIGlwdjZJcGFtUG9vbElkOiBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjZJcGFtUG9vbD8uaXBhbVBvb2xJZCxcbiAgICAgICAgICBhbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2s6IHNlY29uZGFyeVZwY09wdGlvbnMuYW1hem9uUHJvdmlkZWQsXG4gICAgICAgICAgLy8gQllPSVAgSVB2NiBBZGRyZXNzXG4gICAgICAgICAgaXB2NkNpZHJCbG9jazogc2Vjb25kYXJ5VnBjT3B0aW9ucz8uaXB2NkNpZHJCbG9jayxcbiAgICAgICAgICAvLyBCWU9JUCBQb29sIGZvciBJUHY2IGFkZHJlc3NcbiAgICAgICAgICBpcHY2UG9vbDogc2Vjb25kYXJ5VnBjT3B0aW9ucz8uaXB2NlBvb2xJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChzZWNvbmRhcnlWcGNPcHRpb25zLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgIGZvciAoY29uc3QgZGVwIG9mIHNlY29uZGFyeVZwY09wdGlvbnMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICB2cGNDaWRyQmxvY2subm9kZS5hZGREZXBlbmRlbmN5KGRlcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENyZWF0ZSBzZWNvbmRhcnkgYmxvY2tzIGZvciBJcHY0IGFuZCBJcHY2XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q2lkckJsb2NrPy5wdXNoKHZwY0NpZHJCbG9jayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1wdHkgYXJyYXkgZm9yIGlzb2xhdGVkIHN1Ym5ldHNcbiAgICAgKi9cbiAgICB0aGlzLmlzb2xhdGVkU3VibmV0cyA9IG5ldyBBcnJheTxJU3VibmV0PjtcblxuICAgIC8qKlxuICAgICAqIEVtcHR5IGFycmF5IGZvciBwdWJsaWMgc3VibmV0c1xuICAgICAqL1xuICAgIHRoaXMucHVibGljU3VibmV0cyA9IG5ldyBBcnJheTxJU3VibmV0PjtcblxuICAgIC8qKlxuICAgICAqIEVtcHR5IGFycmF5IGZvciBwcml2YXRlIHN1Ym5ldHNcbiAgICAgKi9cbiAgICB0aGlzLnByaXZhdGVTdWJuZXRzID0gbmV3IEFycmF5PElTdWJuZXQ+O1xuXG4gICAgLyoqXG4gICAgICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICAgICogQWRkIGlndyB0byB0aGlzIGlmIGl0cyBhIHB1YmxpYyBzdWJuZXRcbiAgICAgKi9cbiAgICB0aGlzLmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPSB0aGlzLl9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkO1xuICB9XG59XG4vKipcbiAqIFN1cHBvcnRzIGFzc2lnbmluZyBJUHY0IGFkZHJlc3MgdG8gVlBDXG4gKi9cbmNsYXNzIGlwdjRDaWRyQWxsb2NhdGlvbiBpbXBsZW1lbnRzIElJcEFkZHJlc3NlcyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY2lkckJsb2NrOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM/OiB7IGNpZHJCbG9ja05hbWU6IHN0cmluZ30pIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBDSURSIGJsb2NrIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHRvIHNldCBJUHY0XG4gICAqL1xuICBhbGxvY2F0ZVZwY0NpZHIoKTogVnBjQ2lkck9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBpcHY0Q2lkckJsb2NrOiB0aGlzLmNpZHJCbG9jayxcbiAgICAgIGNpZHJCbG9ja05hbWU6IHRoaXMucHJvcHM/LmNpZHJCbG9ja05hbWUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFN1cHBvcnRzIEFtYXpvbiBQcm92aWRlZCBJcHY2IHJhbmdlc1xuICovXG5jbGFzcyBBbWF6b25Qcm92aWRlZCBpbXBsZW1lbnRzIElJcEFkZHJlc3NlcyB7XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGFuIEFtYXpvbi1wcm92aWRlZCBJUHY2IENJRFIgcmFuZ2UgZm9yIGEgVlBDLlxuICAgKlxuICAgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIElJcEFkZHJlc3NlcyBpbnRlcmZhY2UgYW5kIGlzIHVzZWQgdG8gYWxsb2NhdGUgYW4gQW1hem9uLXByb3ZpZGVkXG4gICAqIElQdjYgQ0lEUiByYW5nZSBmb3IgYSBWUEMuIFdoZW4gYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBpcyB1c2VkIHRvIGFsbG9jYXRlIHRoZSBWUEMgQ0lEUixcbiAgICogQW1hem9uIHdpbGwgYXV0b21hdGljYWxseSBhc3NpZ24gYW4gSVB2NiBDSURSIHJhbmdlIGZyb20gaXRzIHBvb2wgb2YgYXZhaWxhYmxlIGFkZHJlc3Nlcy5cbiAgICovXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogeyBjaWRyQmxvY2tOYW1lOiBzdHJpbmd9KSB7fVxuXG4gIGFsbG9jYXRlVnBjQ2lkcigpOiBWcGNDaWRyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFtYXpvblByb3ZpZGVkOiB0cnVlLFxuICAgICAgY2lkckJsb2NrTmFtZTogdGhpcy5wcm9wcy5jaWRyQmxvY2tOYW1lLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIElQdjQgYWRkcmVzcyByYW5nZSBtYW5hZ2VkIGJ5IEFXUyBJUCBBZGRyZXNzIE1hbmFnZXIgKElQQU0pLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW0uaHRtbFxuICovXG5jbGFzcyBJcGFtSXB2NiBpbXBsZW1lbnRzIElJcEFkZHJlc3NlcyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IElwYW1PcHRpb25zKSB7XG4gIH1cblxuICBhbGxvY2F0ZVZwY0NpZHIoKTogVnBjQ2lkck9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBpcHY2TmV0bWFza0xlbmd0aDogdGhpcy5wcm9wcy5uZXRtYXNrTGVuZ3RoLFxuICAgICAgaXB2NklwYW1Qb29sOiB0aGlzLnByb3BzLmlwYW1Qb29sLFxuICAgICAgZGVwZW5kZW5jaWVzOiB0aGlzLnByb3BzLmlwYW1Qb29sPy5pcGFtQ2lkcnMubWFwKGMgPT4gYyBhcyBDZm5SZXNvdXJjZSksXG4gICAgICBjaWRyQmxvY2tOYW1lOiB0aGlzLnByb3BzLmNpZHJCbG9ja05hbWUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gSVB2NCBhZGRyZXNzIHJhbmdlIG1hbmFnZWQgYnkgQVdTIElQIEFkZHJlc3MgTWFuYWdlciAoSVBBTSkuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbS5odG1sXG4gKi9cbmNsYXNzIElwYW1JcHY0IGltcGxlbWVudHMgSUlwQWRkcmVzc2VzIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogSXBhbU9wdGlvbnMpIHtcbiAgfVxuICBhbGxvY2F0ZVZwY0NpZHIoKTogVnBjQ2lkck9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBpcHY0TmV0bWFza0xlbmd0aDogdGhpcy5wcm9wcy5uZXRtYXNrTGVuZ3RoLFxuICAgICAgaXB2NElwYW1Qb29sOiB0aGlzLnByb3BzLmlwYW1Qb29sLFxuICAgICAgY2lkckJsb2NrTmFtZTogdGhpcy5wcm9wcz8uY2lkckJsb2NrTmFtZSxcbiAgICAgIGlwdjRJcGFtUHJvdmlzaW9uZWRDaWRyczogdGhpcy5wcm9wcy5pcGFtUG9vbD8uaXBhbUlwdjRDaWRycyxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogU3VwcG9ydHMgYXNzaWduaW5nIElQdjYgYWRkcmVzcyB0byBWUEMgaW4gYW4gYWRkcmVzcyBwb29sXG4gKi9cbmNsYXNzIElwdjZQb29sIGltcGxlbWVudHMgSUlwQWRkcmVzc2VzIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogSXB2NlBvb2xTZWNvbmRhcnlBZGRyZXNzUHJvcHMpIHtcbiAgfVxuICBhbGxvY2F0ZVZwY0NpZHIoKTogVnBjQ2lkck9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICBpcHY2Q2lkckJsb2NrOiB0aGlzLnByb3BzLmlwdjZDaWRyQmxvY2ssXG4gICAgICBpcHY2UG9vbElkOiB0aGlzLnByb3BzLmlwdjZQb29sSWQsXG4gICAgICBjaWRyQmxvY2tOYW1lOiB0aGlzLnByb3BzPy5jaWRyQmxvY2tOYW1lLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgdG8gY3JlYXRlIEwyIGZvciBWUEMgQ2lkciBCbG9ja1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElWUENDaWRyQmxvY2sge1xuICAvKipcbiAgICogQW1hem9uIFByb3ZpZGVkIElwdjZcbiAgICovXG4gIHJlYWRvbmx5IGFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jaz8gOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kYXJ5IElQdjQgQ0lEUiBCbG9ja1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIENJRFIgYmxvY2sgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGNpZHJCbG9jaz86IHN0cmluZztcblxuICAvKipcbiAgICogSVBBTSBwb29sIGZvciBJUHY2IGFkZHJlc3MgdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NklwYW1Qb29sSWQgPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUEFNIHBvb2wgZm9yIElQdjQgYWRkcmVzcyB0eXBlXG4gICAqL1xuICByZWFkb25seSBpcHY0SXBhbVBvb2xJZCA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY2IENJRFIgYmxvY2sgZnJvbSB0aGUgc3BlY2lmaWVkIElQdjYgYWRkcmVzcyBwb29sLlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBJUHY2IGFkZHJlc3MgcG9vbCBmcm9tIHdoaWNoIHRvIGFsbG9jYXRlIHRoZSBJUHY2IENJRFIgYmxvY2suXG4gICAqL1xuICByZWFkb25seSBpcHY2UG9vbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBWUENDaWRyQmxvY2sgdXNlZCBmb3IgZGVmaW5pbmcgYSBuZXcgQ0lEUiBCbG9ja1xuICogYW5kIGFsc28gZm9yIGltcG9ydGluZyBhbiBleGlzdGluZyBDSURSXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDQ2lkckJsb2NrYXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrPyA6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzZWNvbmRhcnkgSVB2NCBDSURSIEJsb2NrXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gQ0lEUiBibG9jayBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2lkckJsb2NrPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kYXJ5IElQdjQgQ0lEUiBCbG9ja1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIENJRFIgYmxvY2sgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGNpZHJCbG9ja05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5ldCBtYXNrIGxlbmd0aCBmb3IgSVB2NiBhZGRyZXNzIHR5cGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBOZXQgbWFzayBsZW5ndGggY29uZmlndXJlZCBmb3IgSVB2NlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2Nk5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE5ldCBtYXNrIGxlbmd0aCBmb3IgSVB2NCBhZGRyZXNzIHR5cGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBOZXQgbWFzayBsZW5ndGggY29uZmlndXJlZCBmb3IgSVB2NFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NE5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElQQU0gcG9vbCBmb3IgSVB2NiBhZGRyZXNzIHR5cGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBJUEFNIHBvb2wgSWQgcHJvdmlkZWQgZm9yIElQdjZcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkID86IHN0cmluZztcblxuICAvKipcbiAgICogSVBBTSBwb29sIGZvciBJUHY0IGFkZHJlc3MgdHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIElQQU0gcG9vbCBJZCBwcm92aWRlZCBmb3IgSVB2NFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qb29sSWQgPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUHY0IENJRFIgcHJvdmlzaW9uZWQgdW5kZXIgcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU0gcG9vbFxuICAgKiBAZGVmYXVsdCAtIG5vIElQQU0gSVB2NCBDSURSIHJhbmdlIGlzIHByb3Zpc2lvbmVkIHVzaW5nIElQQU1cbiAgICovXG4gIHJlYWRvbmx5IGlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NiBDSURSIGJsb2NrIGZyb20gdGhlIHNwZWNpZmllZCBJUHY2IGFkZHJlc3MgcG9vbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBJUHY2IENJRFIgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IGlwdjZDaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgSVB2NiBhZGRyZXNzIHBvb2wgZnJvbSB3aGljaCB0byBhbGxvY2F0ZSB0aGUgSVB2NiBDSURSIGJsb2NrLlxuICAgKiBOb3RlOiBCWU9JUCBQb29sIElEIGlzIGRpZmZlcmVudCB0aGFuIElQQU0gUG9vbCBJRC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBCWU9JUCBwb29sIGFzc29jaWF0ZWQgd2l0aCBWUEMuXG4gICAqL1xuICByZWFkb25seSBpcHY2UG9vbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgVlBDQ2lkckJsb2NrXG4gKi9cbmludGVyZmFjZSBWUENDaWRyQmxvY2tQcm9wcyBleHRlbmRzIFZQQ0NpZHJCbG9ja2F0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIFZQQyBJZCBmb3IgYXNzb2NpYXRpbmcgQ0lEUiBCbG9jayBhcyBhIHNlY29uZGFyeSBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSB2cGNJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVybmFsIEwyIHRvIGRlZmluZSBhIG5ldyBWUEMgQ0lEUiBCbG9ja1xuICogQGludGVybmFsXG4gKi9cbmNsYXNzIFZQQ0NpZHJCbG9jayBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVZQQ0NpZHJCbG9jayB7XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgVlBDIENJRFIgQmxvY2tcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVZQQ0NpZHJCbG9ja2F0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZQQ0NpZHJCbG9ja2F0dHJpYnV0ZXMpIDogSVZQQ0NpZHJCbG9jayB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVlBDQ2lkckJsb2NrIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjaWRyQmxvY2sgPSBwcm9wcy5jaWRyQmxvY2s7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrID86IGJvb2xlYW4gPSBwcm9wcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2s7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NklwYW1Qb29sSWQgPzogc3RyaW5nID0gcHJvcHMuaXB2NklwYW1Qb29sSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NElwYW1Qb29sSWQgPzogc3RyaW5nID0gcHJvcHMuaXB2NElwYW1Qb29sSWQ7XG4gICAgICAvLyBCWU9JUCBQb29sIEF0dHJpYnV0ZXNcbiAgICAgIHB1YmxpYyByZWFkb25seSBpcHY2UG9vbD86IHN0cmluZyA9IHByb3BzLmlwdjZQb29sO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGlwdjZDaWRyQmxvY2s/OiBzdHJpbmcgPSBwcm9wcy5pcHY2Q2lkckJsb2NrO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5WUENDaWRyQmxvY2s7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNpZHJCbG9jaz86IHN0cmluZztcblxuICBwdWJsaWMgcmVhZG9ubHkgYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrPzogYm9vbGVhbjtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXB2NklwYW1Qb29sSWQ/OiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGlwdjRJcGFtUG9vbElkPzogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpcHY2Q2lkckJsb2NrPzogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpcHY2UG9vbD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBDQ2lkckJsb2NrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuVlBDQ2lkckJsb2NrKHRoaXMsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gICAgdGhpcy5jaWRyQmxvY2sgPSBwcm9wcy5jaWRyQmxvY2s7XG4gICAgdGhpcy5pcHY2SXBhbVBvb2xJZCA9IHByb3BzLmlwdjZJcGFtUG9vbElkO1xuICAgIHRoaXMuaXB2NElwYW1Qb29sSWQgPSBwcm9wcy5pcHY0SXBhbVBvb2xJZDtcbiAgICB0aGlzLmFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jayA9IHByb3BzLmFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jaztcbiAgICAvLyBCWU9JUCBQb29sIGFuZCBDSURSIEJsb2NrXG4gICAgdGhpcy5pcHY2Q2lkckJsb2NrID0gcHJvcHMuaXB2NkNpZHJCbG9jaztcbiAgICB0aGlzLmlwdjZQb29sID0gcHJvcHMuaXB2NlBvb2w7XG4gIH1cbn1cblxuLy8gQGludGVybmFsIEZpcnN0IHR3byBPY3RldCB0byB2ZXJpZnkgUkZDIDE5MThcbmludGVyZmFjZSBJUGFkZHJlc3NDb25maWcge1xuICBvY3RldDE6IG51bWJlcjtcbiAgb2N0ZXQyOiBudW1iZXI7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHdoZXRoZXIgYSBzZWNvbmRhcnkgSVB2NCBhZGRyZXNzIGlzIHdpdGhpbiB0aGUgc2FtZSBwcml2YXRlIElQIGFkZHJlc3MgcmFuZ2UgYXMgdGhlIHByaW1hcnkgSVB2NCBhZGRyZXNzLlxuICpcbiAqIEBwYXJhbSBjaWRyMSBUaGUgc2Vjb25kYXJ5IElQdjQgQ0lEUiBibG9jayB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAcGFyYW0gY2lkcjIgVGhlIHByaW1hcnkgSVB2NCBDSURSIGJsb2NrIHRvIHZhbGlkYXRlIGFnYWluc3QuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzZWNvbmRhcnkgSVB2NCBDSURSIGJsb2NrIGlzIHdpdGhpbiB0aGUgc2FtZSBwcml2YXRlIElQIGFkZHJlc3MgcmFuZ2UgYXMgdGhlIHByaW1hcnkgSVB2NCBDSURSIGJsb2NrLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAaW50ZXJuYWxcbiAqIFRoZSBwcml2YXRlIElQIGFkZHJlc3MgcmFuZ2VzIGFyZSBkZWZpbmVkIGJ5IFJGQyAxOTE4IGFzIDEwLjAuMC4wLzgsIDE3Mi4xNi4wLjAvMTIsIGFuZCAxOTIuMTY4LjAuMC8xNi5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJcHY0YWRkcmVzcyhjaWRyMT86IHN0cmluZywgY2lkcjI/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFjaWRyMSB8fCAhY2lkcjIpIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIEhhbmRsZSBjYXNlcyB3aGVyZSBDSURSIHJhbmdlcyBhcmUgbm90IHByb3ZpZGVkXG4gIH1cblxuICBjb25zdCBvY3RldHNDaWRyMTogbnVtYmVyW10gPSBjaWRyMS5zcGxpdCgnLicpLm1hcChvY3RldCA9PiBwYXJzZUludChvY3RldCwgMTApKTtcbiAgY29uc3Qgb2N0ZXRzQ2lkcjI6IG51bWJlcltdID0gY2lkcjIuc3BsaXQoJy4nKS5tYXAob2N0ZXQgPT4gcGFyc2VJbnQob2N0ZXQsIDEwKSk7XG5cbiAgaWYgKG9jdGV0c0NpZHIxLmxlbmd0aCAhPT0gNCB8fCBvY3RldHNDaWRyMi5sZW5ndGggIT09IDQpIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIEhhbmRsZSBpbnZhbGlkIENJRFIgcmFuZ2VzXG4gIH1cblxuICBjb25zdCBpcDE6IElQYWRkcmVzc0NvbmZpZyA9IHtcbiAgICBvY3RldDE6IG9jdGV0c0NpZHIxWzBdLFxuICAgIG9jdGV0Mjogb2N0ZXRzQ2lkcjFbMV0sXG4gIH07XG5cbiAgY29uc3QgaXAyOiBJUGFkZHJlc3NDb25maWcgPSB7XG4gICAgb2N0ZXQxOiBvY3RldHNDaWRyMlswXSxcbiAgICBvY3RldDI6IG9jdGV0c0NpZHIyWzFdLFxuICB9O1xuXG4gIHJldHVybiAoaXAxLm9jdGV0MSA9PT0gMTAgJiYgaXAyLm9jdGV0MSA9PT0gMTApIHx8XG4gICAgKGlwMS5vY3RldDEgPT09IDE5MiAmJiBpcDEub2N0ZXQyID09PSAxNjggJiYgaXAyLm9jdGV0MSA9PT0gMTkyICYmIGlwMi5vY3RldDIgPT09IDE2OCkgfHxcbiAgICAoaXAxLm9jdGV0MSA9PT0gMTcyICYmIGlwMS5vY3RldDIgPT09IDE2ICYmIGlwMi5vY3RldDEgPT09IDE3MiAmJiBpcDIub2N0ZXQyID09PSAxNik7IC8vIENJRFIgcmFuZ2VzIGJlbG9uZyB0byBzYW1lIHByaXZhdGUgSVAgYWRkcmVzcyByYW5nZXNcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aws-cdk/aws-ec2-alpha",
3
3
  "private": false,
4
- "version": "2.176.0-alpha.0",
4
+ "version": "2.178.0-alpha.0",
5
5
  "description": "The CDK construct library for VPC V2",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -77,17 +77,17 @@
77
77
  },
78
78
  "license": "Apache-2.0",
79
79
  "devDependencies": {
80
- "@aws-cdk/cdk-build-tools": "2.176.0-alpha.0",
81
- "@aws-cdk/integ-runner": "2.176.0-alpha.0",
82
- "@aws-cdk/integ-tests-alpha": "^2.176.0-alpha.0",
83
- "@aws-cdk/pkglint": "2.176.0-alpha.0",
80
+ "@aws-cdk/cdk-build-tools": "2.178.0-alpha.0",
81
+ "@aws-cdk/integ-runner": "2.178.0-alpha.0",
82
+ "@aws-cdk/integ-tests-alpha": "^2.178.0-alpha.0",
83
+ "@aws-cdk/pkglint": "2.178.0-alpha.0",
84
84
  "@types/jest": "^29.5.14",
85
- "aws-cdk-lib": "2.176.0",
85
+ "aws-cdk-lib": "2.178.0",
86
86
  "jest": "^29.7.0"
87
87
  },
88
88
  "homepage": "https://github.com/aws/aws-cdk",
89
89
  "peerDependencies": {
90
- "aws-cdk-lib": "^2.176.0",
90
+ "aws-cdk-lib": "^2.178.0",
91
91
  "constructs": "^10.0.0"
92
92
  },
93
93
  "separate-module": false,
@@ -95,7 +95,7 @@
95
95
  "node": ">= 14.15.0"
96
96
  },
97
97
  "stability": "experimental",
98
- "maturity": "experimental",
98
+ "maturity": "developer-preview",
99
99
  "awscdkio": {
100
100
  "announce": false
101
101
  },
@@ -1,7 +1,7 @@
1
1
  // Fixture with packages imported, but nothing else
2
2
  import { Construct } from 'constructs';
3
3
  import { Stack, App, Fn, Tags } from 'aws-cdk-lib';
4
- import { VpcV2, SubnetV2, IpAddresses, IpamPoolPublicIpSource, RouteTable, InternetGateway, Route, NatGateway, EgressOnlyInternetGateway, VPCPeeringConnection } from '@aws-cdk/aws-ec2-alpha';
4
+ import { VpcV2, SubnetV2, IpAddresses, IpamPoolPublicIpSource, RouteTable, InternetGateway, Route, NatGateway, EgressOnlyInternetGateway, VPCPeeringConnection, TransitGateway, TransitGatewayRoute, TransitGatewayRouteTable, TransitGatewayVpcAttachment } from '@aws-cdk/aws-ec2-alpha';
5
5
  import { Ipam, AwsServiceName, IpCidr, AddressFamily } from '@aws-cdk/aws-ec2-alpha';
6
6
  import { NatConnectivityType } from '@aws-cdk/aws-ec2-alpha';
7
7
  import { SubnetType, VpnConnectionType } from 'aws-cdk-lib/aws-ec2';