@fjall/components-infrastructure 0.87.20 → 0.88.3

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.
Files changed (100) hide show
  1. package/dist/lib/app.d.ts +14 -18
  2. package/dist/lib/app.js +58 -41
  3. package/dist/lib/config/aws/accountId.js +1 -2
  4. package/dist/lib/config/aws/backupGlobalSettings.js +1 -2
  5. package/dist/lib/config/aws/costAllocationTags.js +3 -4
  6. package/dist/lib/config/aws/identityCenter.d.ts +4 -4
  7. package/dist/lib/config/aws/identityCenter.js +17 -63
  8. package/dist/lib/config/aws/identityCenterGroupMembership.js +27 -42
  9. package/dist/lib/config/aws/index.d.ts +0 -8
  10. package/dist/lib/config/aws/index.js +1 -9
  11. package/dist/lib/config/aws/ipamDelegateAdmin.js +1 -2
  12. package/dist/lib/config/aws/ipamPoolId.js +1 -2
  13. package/dist/lib/config/aws/organisationId.js +1 -2
  14. package/dist/lib/config/aws/organisationsAccess.js +1 -2
  15. package/dist/lib/config/aws/ramSharing.js +1 -2
  16. package/dist/lib/layers/layers/secrets-resolver/bin/resolve-secrets +30 -0
  17. package/dist/lib/layers/layers/secrets-resolver/bin/resolve-secrets.mjs +212 -0
  18. package/dist/lib/layers/secrets-resolver/bin/resolve-secrets +30 -0
  19. package/dist/lib/layers/secrets-resolver/bin/resolve-secrets.mjs +212 -0
  20. package/dist/lib/patterns/aws/account.d.ts +12 -0
  21. package/dist/lib/patterns/aws/account.js +73 -0
  22. package/dist/lib/patterns/aws/buildkite.js +1 -2
  23. package/dist/lib/patterns/aws/cdn.d.ts +5 -10
  24. package/dist/lib/patterns/aws/cdn.js +5 -13
  25. package/dist/lib/patterns/aws/compute.d.ts +20 -3
  26. package/dist/lib/patterns/aws/compute.js +29 -5
  27. package/dist/lib/patterns/aws/database.d.ts +3 -3
  28. package/dist/lib/patterns/aws/database.js +18 -15
  29. package/dist/lib/patterns/aws/index.d.ts +4 -3
  30. package/dist/lib/patterns/aws/index.js +6 -4
  31. package/dist/lib/patterns/aws/interfaces/index.d.ts +2 -1
  32. package/dist/lib/patterns/aws/interfaces/index.js +8 -5
  33. package/dist/lib/patterns/aws/interfaces/organisation.d.ts +22 -0
  34. package/dist/lib/patterns/aws/interfaces/organisation.js +28 -0
  35. package/dist/lib/patterns/aws/interfaces/pattern.d.ts +5 -5
  36. package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
  37. package/dist/lib/patterns/aws/interfaces/storage.d.ts +10 -120
  38. package/dist/lib/patterns/aws/interfaces/storage.js +6 -43
  39. package/dist/lib/patterns/aws/organisation.d.ts +38 -0
  40. package/dist/lib/patterns/aws/organisation.js +92 -0
  41. package/dist/lib/patterns/aws/organisationFactory.d.ts +20 -0
  42. package/dist/lib/patterns/aws/organisationFactory.js +24 -0
  43. package/dist/lib/patterns/aws/pattern.d.ts +1 -1
  44. package/dist/lib/patterns/aws/pattern.js +1 -1
  45. package/dist/lib/patterns/aws/payload.d.ts +6 -5
  46. package/dist/lib/patterns/aws/payload.js +92 -42
  47. package/dist/lib/patterns/aws/platform.d.ts +11 -0
  48. package/dist/lib/patterns/aws/platform.js +29 -0
  49. package/dist/lib/patterns/aws/storage.d.ts +40 -125
  50. package/dist/lib/patterns/aws/storage.js +63 -191
  51. package/dist/lib/resources/aws/compute/ec2.d.ts +1 -1
  52. package/dist/lib/resources/aws/compute/ec2.js +3 -4
  53. package/dist/lib/resources/aws/compute/ecs.d.ts +6 -9
  54. package/dist/lib/resources/aws/compute/ecs.js +58 -26
  55. package/dist/lib/resources/aws/compute/lambda.d.ts +14 -1
  56. package/dist/lib/resources/aws/compute/lambda.js +45 -13
  57. package/dist/lib/resources/aws/database/rdsAurora.d.ts +1 -0
  58. package/dist/lib/resources/aws/database/rdsAurora.js +16 -16
  59. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +1 -0
  60. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +14 -10
  61. package/dist/lib/resources/aws/database/rdsInstance.d.ts +5 -4
  62. package/dist/lib/resources/aws/database/rdsInstance.js +18 -7
  63. package/dist/lib/resources/aws/iam/identityCenter/assignment.d.ts +0 -2
  64. package/dist/lib/resources/aws/iam/identityCenter/assignment.js +9 -46
  65. package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +1 -2
  66. package/dist/lib/resources/aws/iam/identityCenter/group.d.ts +1 -3
  67. package/dist/lib/resources/aws/iam/identityCenter/group.js +7 -85
  68. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +1 -3
  69. package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +9 -96
  70. package/dist/lib/resources/aws/index.d.ts +1 -0
  71. package/dist/lib/resources/aws/index.js +2 -1
  72. package/dist/lib/resources/aws/logging/cloudTrail.js +7 -4
  73. package/dist/lib/resources/aws/networking/ipamPool.js +76 -5
  74. package/dist/lib/resources/aws/organisation/index.d.ts +4 -0
  75. package/dist/lib/resources/aws/organisation/index.js +10 -0
  76. package/dist/lib/resources/aws/organisation/organisation.d.ts +12 -0
  77. package/dist/lib/resources/aws/organisation/organisation.js +14 -0
  78. package/dist/lib/resources/aws/organisation/organisationAccount.d.ts +18 -0
  79. package/dist/lib/resources/aws/organisation/organisationAccount.js +31 -0
  80. package/dist/lib/resources/aws/organisation/organisationPolicy.d.ts +13 -0
  81. package/dist/lib/resources/aws/organisation/organisationPolicy.js +32 -0
  82. package/dist/lib/resources/aws/organisation/organisationalUnit.d.ts +10 -0
  83. package/dist/lib/resources/aws/organisation/organisationalUnit.js +9 -0
  84. package/dist/lib/resources/aws/secrets/kms.js +10 -7
  85. package/dist/lib/resources/aws/secrets/parameter.js +5 -4
  86. package/dist/lib/resources/aws/storage/ecr.d.ts +3 -1
  87. package/dist/lib/resources/aws/storage/ecr.js +3 -3
  88. package/dist/lib/resources/aws/storage/s3.d.ts +6 -39
  89. package/dist/lib/resources/aws/storage/s3.js +31 -34
  90. package/dist/lib/utils/capitaliseString.d.ts +12 -0
  91. package/dist/lib/utils/capitaliseString.js +30 -0
  92. package/dist/lib/utils/capitalizeString.d.ts +11 -0
  93. package/dist/lib/utils/capitalizeString.js +24 -1
  94. package/dist/lib/utils/getConfig.d.ts +5 -1
  95. package/dist/lib/utils/getConfig.js +9 -1
  96. package/dist/lib/utils/index.d.ts +1 -0
  97. package/dist/lib/utils/index.js +2 -1
  98. package/dist/lib/utils/resourceNaming.d.ts +22 -19
  99. package/dist/lib/utils/resourceNaming.js +39 -35
  100. package/package.json +5 -6
@@ -7,6 +7,7 @@ exports.buildContainerConfigs = buildContainerConfigs;
7
7
  exports.resolveScalingConfig = resolveScalingConfig;
8
8
  exports.resolveLambdaDeployment = resolveLambdaDeployment;
9
9
  const aws_ecr_1 = require("aws-cdk-lib/aws-ecr");
10
+ const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
10
11
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
11
12
  const aws_iam_1 = require("aws-cdk-lib/aws-iam");
12
13
  const constructs_1 = require("constructs");
@@ -74,7 +75,7 @@ exports.COMPUTE_DEFAULTS = {
74
75
  },
75
76
  LAMBDA: {
76
77
  HANDLER: "index.handler",
77
- RUNTIME: aws_lambda_1.Runtime.NODEJS_18_X
78
+ RUNTIME: aws_lambda_1.Runtime.NODEJS_22_X
78
79
  }
79
80
  };
80
81
  function getComputeTypeConfig(type) {
@@ -129,7 +130,14 @@ function validateEcsProps(props) {
129
130
  // Validate routing when multiple services have ports
130
131
  const servicesWithPorts = props.services.filter((s) => s.containers?.some((c) => c.port));
131
132
  if (servicesWithPorts.length > 1) {
132
- const missingRouting = servicesWithPorts.filter((s) => !s.routing?.path && !s.routing?.host);
133
+ const missingRouting = servicesWithPorts.filter((s) => {
134
+ const rules = Array.isArray(s.routing)
135
+ ? s.routing
136
+ : s.routing
137
+ ? [s.routing]
138
+ : [];
139
+ return !rules.some((r) => r.path || r.host);
140
+ });
133
141
  if (missingRouting.length > 0) {
134
142
  throw new Error(`Services with ports require routing config when cluster has multiple services: ` +
135
143
  `${missingRouting.map((s) => s.name).join(", ")}. ` +
@@ -270,9 +278,14 @@ class ComputeFactory {
270
278
  return (app, scope) => {
271
279
  validateComputeProps(props);
272
280
  // Auto-derive appName from App instance for ECS compute
281
+ const typeConfig = exports.COMPUTE_TYPE_CONFIG[props.type];
282
+ const needsVpc = typeConfig.requiresVpc ||
283
+ ("connections" in props &&
284
+ Array.isArray(props.connections) &&
285
+ props.connections.length > 0);
273
286
  let computeProps = {
274
287
  ...{
275
- vpc: app.getVpc(),
288
+ vpc: needsVpc ? app.getVpc() : undefined,
276
289
  ecrRepository: app.getDefaultContainerRegistry()
277
290
  },
278
291
  ...props
@@ -453,6 +466,8 @@ class EcsCompute extends constructs_1.Construct {
453
466
  }
454
467
  /**
455
468
  * Grants ecs:ExecuteCommand permission for ECS services.
469
+ * Uses wildcard resource because ecs:ExecuteCommand targets task ARNs
470
+ * which are not known until runtime (tasks are ephemeral).
456
471
  */
457
472
  grantExecuteCommand(grantee) {
458
473
  return aws_iam_1.Grant.addToPrincipal({
@@ -509,9 +524,18 @@ class LambdaCompute extends constructs_1.Construct {
509
524
  functionName: id
510
525
  };
511
526
  this.lambdaFunction = new lambda_1.LambdaFunction(scope, `${id}Lambda`, lambdaProps);
512
- this.connections = this.lambdaFunction.connections;
527
+ // CDK's Function.connections getter throws for non-VPC Lambdas, so only
528
+ // access it when a VPC is configured. Non-VPC Lambdas get an empty
529
+ // Connections object to satisfy the IConnectable interface.
530
+ this.connections = props.vpc
531
+ ? this.lambdaFunction.connections
532
+ : new aws_ec2_1.Connections();
513
533
  // Process connections using the unified connector interface
514
534
  if (props.connections && props.connections.length > 0) {
535
+ if (!props.vpc) {
536
+ throw new Error(`Lambda '${id}' has connections configured but no VPC. ` +
537
+ "A VPC is required for security group connections.");
538
+ }
515
539
  try {
516
540
  (0, connections_js_1.processConnections)(props.connections, this.lambdaFunction, // IGrantable (execution role)
517
541
  this.lambdaFunction // IConnectable (security group)
@@ -600,4 +624,4 @@ class Ec2Compute extends constructs_1.Construct {
600
624
  }
601
625
  }
602
626
  exports.Ec2Compute = Ec2Compute;
603
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1S0Esb0RBRUM7QUFFRCxvRUFJQztBQWd2QkQsc0RBbUJDO0FBaUJELG9EQXNCQztBQWVELDBEQXNCQztBQXovQkQsaURBQWlEO0FBUWpELHVEQVNnQztBQUNoQyxpREFNNkI7QUFPN0IsMkNBQXVDO0FBRXZDLDhCQUE4QjtBQUM5Qix3REFTaUM7QUE2NUN4QiwwRkFqNkNQLHNCQUFTLE9BaTZDTztBQUFFLDZGQWg2Q2xCLHlCQUFZLE9BZzZDa0I7QUFBRSxnR0EvNUNoQyw0QkFBZSxPQSs1Q2dDO0FBQUUsNkZBOTVDakQseUJBQVksT0E4NUNpRDtBQTM1Qy9ELHFEQUFzRDtBQUd0RCx5RUFHeUM7QUFNekMseURBTXlDO0FBUWhDLDRGQVpQLGlCQUFXLE9BWU87QUFQcEIseURBQThEO0FBQzlELCtEQUFvRTtBQTBCdkQsUUFBQSxtQkFBbUIsR0FBMkM7SUFDekUsR0FBRyxFQUFFO1FBQ0gsV0FBVyxFQUFFLEVBQUU7UUFDZixjQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUU7UUFDbEQsbUJBQW1CLEVBQUUsSUFBSTtRQUN6QixXQUFXLEVBQUUsSUFBSTtLQUNsQjtJQUNELEdBQUcsRUFBRTtRQUNILFdBQVcsRUFBRSxFQUFFO1FBQ2YsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFO1FBQ2xELG1CQUFtQixFQUFFLElBQUk7UUFDekIsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRCxNQUFNLEVBQUU7UUFDTixXQUFXLEVBQUUsQ0FBQztRQUNkLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRTtRQUNwRCxtQkFBbUIsRUFB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QUM7SUFDMUIsQ0FBQztDQUNGO0FBM0NELGdDQTJDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgUmVwb3NpdG9yeUltYWdlLFxuICB0eXBlIElDbHVzdGVyLFxuICB0eXBlIElCYXNlU2VydmljZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNyXCI7XG5pbXBvcnQge1xuICB0eXBlIENvbm5lY3Rpb25zLFxuICB0eXBlIElWcGMsXG4gIHR5cGUgVXNlckRhdGEsXG4gIHR5cGUgSU1hY2hpbmVJbWFnZSxcbiAgdHlwZSBJU2VjdXJpdHlHcm91cFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHtcbiAgQ29kZSxcbiAgUnVudGltZSxcbiAgSGFuZGxlcixcbiAgdHlwZSBBcmNoaXRlY3R1cmUsXG4gIHR5cGUgRnVuY3Rpb25VcmxBdXRoVHlwZSxcbiAgdHlwZSBGdW5jdGlvblVybENvcnNPcHRpb25zLFxuICB0eXBlIElGdW5jdGlvbixcbiAgdHlwZSBJbnZva2VNb2RlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQge1xuICB0eXBlIFBvbGljeVN0YXRlbWVudCxcbiAgdHlwZSBQb2xpY3lEb2N1bWVudCxcbiAgdHlwZSBJTWFuYWdlZFBvbGljeSxcbiAgdHlwZSBJR3JhbnRhYmxlLFxuICBHcmFudFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBJQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIsXG4gIHR5cGUgQXBwbGljYXRpb25MaXN0ZW5lclxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIjtcbmltcG9ydCB7IHR5cGUgSUF1dG9TY2FsaW5nR3JvdXAgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWF1dG9zY2FsaW5nXCI7XG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8vIEltcG9ydCB0eXBlLXNhZmUgaW50ZXJmYWNlc1xuaW1wb3J0IHtcbiAgdHlwZSBJRWNzQ29tcHV0ZSxcbiAgdHlwZSBJTGFtYmRhQ29tcHV0ZSxcbiAgdHlwZSBJRWMyQ29tcHV0ZSxcbiAgdHlwZSBBbnlDb21wdXRlLFxuICBpc0NvbXB1dGUsXG4gIGlzRWNzQ29tcHV0ZSxcbiAgaXNMYW1iZGFDb21wdXRlLFxuICBpc0VjMkNvbXB1dGVcbn0gZnJvbSBcIi4vaW50ZXJmYWNlcy9jb21wdXRlLmpzXCI7XG5pbXBvcnQgeyB0eXBlIENvbm5lY3Rpb25TcGVjIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9jb25uZWN0b3IuanNcIjtcbmltcG9ydCB7IHByb2Nlc3NDb25uZWN0aW9ucyB9IGZyb20gXCIuL2Nvbm5lY3Rpb25zLmpzXCI7XG5cbmltcG9ydCB0eXBlIEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5pbXBvcnQge1xuICBGamFsbExvZ2dlcixcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWRcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3ZhbGlkYXRpb25Mb2dnZXIuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgTWFuaWZlc3RTZXJ2aWNlLFxuICB0eXBlIE1hbmlmZXN0TGFtYmRhXG59IGZyb20gXCIuLi8uLi91dGlscy9tYW5pZmVzdFdyaXRlci5qc1wiO1xuXG5pbXBvcnQgRWNzQ2x1c3Rlciwge1xuICB0eXBlIEVjc0NsdXN0ZXJQcm9wcyxcbiAgU2NhbGluZ1R5cGUsXG4gIHR5cGUgRG9tYWluQ29uZmlnLFxuICB0eXBlIEVjc0NhcGFjaXR5UHJvdmlkZXIsXG4gIHR5cGUgRWMyQ2FwYWNpdHlDb25maWdcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lY3NcIjtcbmltcG9ydCB7IEVjMkluc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9lYzJcIjtcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY29tcHV0ZS9sYW1iZGFcIjtcbmltcG9ydCB7IHR5cGUgU2VjcmV0SW1wb3J0IH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3Mvc2VjcmV0c1wiO1xuXG5leHBvcnQgdHlwZSBDb21wdXRlVHlwZSA9IFwiZWNzXCIgfCBcImVjMlwiIHwgXCJsYW1iZGFcIjtcblxuLy8gUmUtZXhwb3J0IGZyb20gZWNzLnRzIHRvIG1haW50YWluIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGhcbmV4cG9ydCB7IFNjYWxpbmdUeXBlIH07XG5leHBvcnQgdHlwZSB7IEVjc0NhcGFjaXR5UHJvdmlkZXIsIEVjMkNhcGFjaXR5Q29uZmlnIH07XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBkZWZhdWx0cyBmb3IgZWFjaCBjb21wdXRlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcHV0ZVR5cGVDb25maWcge1xuICAvKiogRGVmYXVsdCBwb3J0IGZvciB0aGUgY29tcHV0ZSB0eXBlLiBFQ1M6IDgwLCBFQzI6IDIyLCBMYW1iZGE6IDAgKG5vIHBvcnQpICovXG4gIGRlZmF1bHRQb3J0OiBudW1iZXI7XG4gIC8qKiBEZWZhdWx0IHNjYWxpbmcgbGltaXRzICovXG4gIGRlZmF1bHRTY2FsaW5nOiB7XG4gICAgbWluQ2FwYWNpdHk6IG51bWJlcjtcbiAgICBtYXhDYXBhY2l0eTogbnVtYmVyO1xuICB9O1xuICAvKiogV2hldGhlciB0aGlzIGNvbXB1dGUgdHlwZSBzdXBwb3J0cyBzZWN1cml0eSBncm91cCBjb25uZWN0aW9ucyAqL1xuICBzdXBwb3J0c0Nvbm5lY3Rpb25zOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGlzIGNvbXB1dGUgdHlwZSByZXF1aXJlcyBhIFZQQyAqL1xuICByZXF1aXJlc1ZwYzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IENPTVBVVEVfVFlQRV9DT05GSUc6IFJlY29yZDxDb21wdXRlVHlwZSwgQ29tcHV0ZVR5cGVDb25maWc+ID0ge1xuICBlY3M6IHtcbiAgICBkZWZhdWx0UG9ydDogODAsXG4gICAgZGVmYXVsdFNjYWxpbmc6IHsgbWluQ2FwYWNpdHk6IDIsIG1heENhcGFjaXR5OiA1IH0sXG4gICAgc3VwcG9ydHNDb25uZWN0aW9uczogdHJ1ZSxcbiAgICByZXF1aXJlc1ZwYzogdHJ1ZVxuICB9LFxuICBlYzI6IHtcbiAgICBkZWZhdWx0UG9ydDogMjIsXG4gICAgZGVmYXVsdFNjYWxpbmc6IHsgbWluQ2FwYWNpdHk6IDIsIG1heENhcGFjaXR5OiAzIH0sXG4gICAgc3VwcG9ydHNDb25uZWN0aW9uczogdHJ1ZSxcbiAgICByZXF1aXJlc1ZwYzogdHJ1ZVxuICB9LFxuICBsYW1iZGE6IHtcbiAgICBkZWZhdWx0UG9ydDogMCxcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMCwgbWF4Q2FwYWNpdHk6IDEwMCB9LFxuICAgIHN1cHBvcnRzQ29ubmVjdGlvbnM6IGZhbHNlLFxuICAgIHJlcXVpcmVzVnBjOiBmYWxzZVxuICB9XG59O1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIEVDUyBjYXBhY2l0eSBwcm92aWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyB7XG4gIC8qKiBXaGV0aGVyIHRoaXMgdXNlcyBTcG90IHByaWNpbmcgKi9cbiAgdXNlc1Nwb3Q6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoaXMgcnVucyBvbiBFQzIgaW5zdGFuY2VzICh2cyBzZXJ2ZXJsZXNzIEZhcmdhdGUpICovXG4gIHVzZXNFYzJJbnN0YW5jZXM6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBFQ1NfQ0FQQUNJVFlfUFJPVklERVJfQ09ORklHOiBSZWNvcmQ8XG4gIEVjc0NhcGFjaXR5UHJvdmlkZXIsXG4gIEVjc0NhcGFjaXR5UHJvdmlkZXJDb25maWdcbj4gPSB7XG4gIEZBUkdBVEU6IHtcbiAgICB1c2VzU3BvdDogZmFsc2UsXG4gICAgdXNlc0VjMkluc3RhbmNlczogZmFsc2VcbiAgfSxcbiAgRkFSR0FURV9TUE9UOiB7XG4gICAgdXNlc1Nwb3Q6IHRydWUsXG4gICAgdXNlc0VjMkluc3RhbmNlczogZmFsc2VcbiAgfSxcbiAgRUMyOiB7XG4gICAgdXNlc1Nwb3Q6IGZhbHNlLFxuICAgIHVzZXNFYzJJbnN0YW5jZXM6IHRydWVcbiAgfVxufTtcblxuLyoqXG4gKiBEZWZhdWx0IHZhbHVlcyBmb3IgY29tcHV0ZSByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxuICogQ2VudHJhbGlzZWQgY29uc3RhbnRzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIGNvZGViYXNlLlxuICovXG5leHBvcnQgY29uc3QgQ09NUFVURV9ERUZBVUxUUyA9IHtcbiAgRUMyOiB7XG4gICAgSU5TVEFOQ0VfVFlQRTogXCJ0My5taWNyb1wiLFxuICAgIE1JTl9DQVBBQ0lUWTogMSxcbiAgICBNQVhfQ0FQQUNJVFk6IDFcbiAgfSxcbiAgRUNTOiB7XG4gICAgLyoqIEFXUyBzYW1wbGUgaW1hZ2UgdXNlZCB3aGVuIG5vIEVDUiByZXBvc2l0b3J5IGlzIHByb3ZpZGVkICovXG4gICAgRkFMTEJBQ0tfSU1BR0U6IFwiYW1hem9uL2FtYXpvbi1lY3Mtc2FtcGxlXCIsXG4gICAgLyoqIERlZmF1bHQgdGFnIGZvciBFQ1IgaW1hZ2VzICovXG4gICAgSU1BR0VfVEFHOiBcImxhdGVzdFwiXG4gIH0sXG4gIExBTUJEQToge1xuICAgIEhBTkRMRVI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgIFJVTlRJTUU6IFJ1bnRpbWUuTk9ERUpTXzE4X1hcbiAgfVxufSBhcyBjb25zdDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbXB1dGVUeXBlQ29uZmlnKHR5cGU6IENvbXB1dGVUeXBlKTogQ29tcHV0ZVR5cGVDb25maWcge1xuICByZXR1cm4gQ09NUFVURV9UWVBFX0NPTkZJR1t0eXBlXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVjc0NhcGFjaXR5UHJvdmlkZXJDb25maWcoXG4gIHByb3ZpZGVyOiBFY3NDYXBhY2l0eVByb3ZpZGVyXG4pOiBFY3NDYXBhY2l0eVByb3ZpZGVyQ29uZmlnIHtcbiAgcmV0dXJuIEVDU19DQVBBQ0lUWV9QUk9WSURFUl9DT05GSUdbcHJvdmlkZXJdO1xufVxuXG4vLyBSZS1leHBvcnQgTGFtYmRhIHR5cGVzIGZyb20gQ0RLIGZvciB1c2VyIGNvbnZlbmllbmNlXG5leHBvcnQge1xuICBBcmNoaXRlY3R1cmUsXG4gIEh0dHBNZXRob2QsXG4gIEludm9rZU1vZGUsXG4gIHR5cGUgRnVuY3Rpb25VcmxDb3JzT3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgY29udGFpbmVyIGluIGFuIEVDUyB0YXNrLlxuICpcbiAqIEZvciBzaW5nbGUtY29udGFpbmVyIHNlcnZpY2VzLCBgbmFtZWAgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIGAke3NlcnZpY2VOYW1lfUNvbnRhaW5lcmAuXG4gKiBGb3IgbXVsdGktY29udGFpbmVyIHRhc2tzLCB0aGUgZmlyc3QgY29udGFpbmVyIHdpdGggYSBgcG9ydGAgaXMgdGhlICoqcHJpbWFyeSBjb250YWluZXIqKlxuICogdGhhdCByZWNlaXZlcyBsb2FkIGJhbGFuY2VyIHRyYWZmaWMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbmdsZSBjb250YWluZXIgKG5hbWUgYXV0by1nZW5lcmF0ZWQpXG4gKiBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE11bHRpLWNvbnRhaW5lciB3aXRoIHNpZGVjYXJzXG4gKiBjb250YWluZXJzOiBbXG4gKiAgIHsgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9LCAgICAgICAgICAgICAgICAgICAgLy8gUHJpbWFyeSAtIHJlY2VpdmVzIEFMQiB0cmFmZmljXG4gKiAgIHsgbmFtZTogXCJkYXRhZG9nXCIsIGltYWdlOiBcImRhdGFkb2cvYWdlbnRcIiB9ICAgICAvLyBTaWRlY2FyIC0gbW9uaXRvcmluZ1xuICogXVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc0NvbnRhaW5lckNvbmZpZyB7XG4gIC8qKiBDb250YWluZXIgbmFtZS4gT3B0aW9uYWwgZm9yIHNpbmdsZS1jb250YWluZXIgc2VydmljZXMuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb250YWluZXIgaW1hZ2UuIE9wdGlvbnM6XG4gICAqIC0gT21pdDogVXNlcyBhcHAncyBkZWZhdWx0IEVDUiByZXBvc2l0b3J5IChwcmltYXJ5IGNvbnRhaW5lciBvbmx5KVxuICAgKiAtIHN0cmluZzogRUNSIHJlcG9zaXRvcnkgbmFtZSBvciBwdWJsaWMgaW1hZ2UgVVJMXG4gICAqIC0gUmVwb3NpdG9yeTogQ0RLIEVDUiBSZXBvc2l0b3J5IGNvbnN0cnVjdFxuICAgKi9cbiAgaW1hZ2U/OiBzdHJpbmcgfCBSZXBvc2l0b3J5O1xuICAvKipcbiAgICogUG9ydCB0aGUgY29udGFpbmVyIGxpc3RlbnMgb24uXG4gICAqIFRoZSBmaXJzdCBjb250YWluZXIgd2l0aCBhIHBvcnQgYmVjb21lcyB0aGUgKipwcmltYXJ5IGNvbnRhaW5lcioqXG4gICAqIGFuZCBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGxvYWQgYmFsYW5jZXIuXG4gICAqL1xuICBwb3J0PzogbnVtYmVyO1xuICAvKiogRW52aXJvbm1lbnQgdmFyaWFibGVzICovXG4gIGVudmlyb25tZW50PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqXG4gICAqIFNlY3JldHMgZnJvbSBBV1MgU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAgICogQXJyYXkgb2Ygc2VjcmV0IG5hbWVzIHRoYXQgd2lsbCBiZSBmZXRjaGVkIGZyb20gdGhlIHNlcnZpY2UncyBTU00gbmFtZXNwYWNlLlxuICAgKiBUaGUgbmFtZXNwYWNlIHBhdGggaXMgYXV0by1kZXRlcm1pbmVkIGZyb20gYXBwL2NsdXN0ZXIvc2VydmljZSBuYW1lcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gU2VjcmV0cyBhdCAvbXlhcHAvYXBpLWNsdXN0ZXIvdXNlcnMvQVBJX0tFWSBhbmQgL215YXBwL2FwaS1jbHVzdGVyL3VzZXJzL0RCX1BBU1NXT1JEXG4gICAqIHNlY3JldHM6IFtcIkFQSV9LRVlcIiwgXCJEQl9QQVNTV09SRFwiXVxuICAgKi9cbiAgc2VjcmV0cz86IHN0cmluZ1tdO1xuICAvKiogU2VjcmV0cyBpbXBvcnRlZCBmcm9tIG90aGVyIENESyByZXNvdXJjZXMgKEFXUyBTZWNyZXRzIE1hbmFnZXIpICovXG4gIHNlY3JldHNJbXBvcnQ/OiBSZWNvcmQ8c3RyaW5nLCBTZWNyZXRJbXBvcnQ+O1xuICAvKiogQ29tbWFuZCB0byBydW4gaW4gdGhlIGNvbnRhaW5lciAqL1xuICBjb21tYW5kPzogc3RyaW5nW107XG4gIC8qKiBFbnRyeSBwb2ludCBmb3IgdGhlIGNvbnRhaW5lciAqL1xuICBlbnRyeVBvaW50Pzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgY29udGFpbmVyIGlzIGVzc2VudGlhbC5cbiAgICogSWYgYW4gZXNzZW50aWFsIGNvbnRhaW5lciBzdG9wcywgYWxsIGNvbnRhaW5lcnMgaW4gdGhlIHRhc2sgc3RvcC5cbiAgICogRGVmYXVsdDogdHJ1ZVxuICAgKi9cbiAgZXNzZW50aWFsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEhlYWx0aCBjaGVjayBjb25maWd1cmF0aW9uLlxuICAgKiBEZWZhdWx0OiBGb3IgcHJpbWFyeSBjb250YWluZXIgd2l0aCBwb3J0LCB1c2VzIGN1cmwgaGVhbHRoIGNoZWNrLlxuICAgKi9cbiAgaGVhbHRoQ2hlY2s/OiB7XG4gICAgY29tbWFuZDogc3RyaW5nW107XG4gICAgaW50ZXJ2YWw/OiBudW1iZXI7XG4gICAgdGltZW91dD86IG51bWJlcjtcbiAgICByZXRyaWVzPzogbnVtYmVyO1xuICAgIHN0YXJ0UGVyaW9kPzogbnVtYmVyO1xuICB9O1xufVxuXG4vKipcbiAqIEVDUyBzY2FsaW5nIGNvbmZpZ3VyYXRpb24uXG4gKiAtIE9taXQ6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICogLSBge31gOiBlbmFibGVkIHdpdGggZGVmYXVsdHNcbiAqIC0gYHsgbWluQ2FwYWNpdHk6IDIsIG1heENhcGFjaXR5OiAxMCB9YDogY3VzdG9tIHNjYWxpbmdcbiAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc1NjYWxpbmdDb25maWcge1xuICBtaW5DYXBhY2l0eT86IG51bWJlcjtcbiAgbWF4Q2FwYWNpdHk/OiBudW1iZXI7XG4gIHNjYWxpbmdUeXBlPzogU2NhbGluZ1R5cGU7XG59XG5cbi8qKlxuICogQ2x1c3Rlci1sZXZlbCBjb25maWd1cmF0aW9uLlxuICogQ29udHJvbHMgdGhlIHNoYXJlZCBBTEIgZm9yIGFsbCBzZXJ2aWNlcyBpbiB0aGlzIGNsdXN0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ2x1c3RlckNvbmZpZyB7XG4gIC8qKlxuICAgKiBEb21haW4gZm9yIEhUVFBTIGFjY2Vzcy5cbiAgICogLSBPbWl0OiBBTEIgY3JlYXRlZCB3aXRoIGRlZmF1bHQgRE5TICgqLmVsYi5hbWF6b25hd3MuY29tKVxuICAgKiAtIFNwZWNpZmllZDogQ3JlYXRlcyBBQ00gY2VydGlmaWNhdGUgKyBSb3V0ZTUzIEROUyBBIHJlY29yZFxuICAgKi9cbiAgZG9tYWluPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMb2FkIGJhbGFuY2VyIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT21pdCBvciBcInB1YmxpY1wiOiBJbnRlcm5ldC1mYWNpbmcgQUxCIChkZWZhdWx0KVxuICAgKiAtIFwiaW50ZXJuYWxcIjogVlBDLW9ubHkgQUxCXG4gICAqIC0gZmFsc2U6IE5vIEFMQiAoZm9yIHdvcmtlcnMvYmFja2dyb3VuZCBwcm9jZXNzb3JzKVxuICAgKi9cbiAgbG9hZEJhbGFuY2VyPzogZmFsc2UgfCBcInB1YmxpY1wiIHwgXCJpbnRlcm5hbFwiO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgZGlyZWN0IEVDMiBhY2Nlc3Mgd2l0aG91dCBBTEIuXG4gICAqIFVzZXMgaG9zdCBuZXR3b3JrIG1vZGUgZm9yIHByZWRpY3RhYmxlIHBvcnRzLlxuICAgKiBBY2Nlc3MgdmlhIEVDMiBwdWJsaWMgSVAgYXQgY29udGFpbmVyIHBvcnQuXG4gICAqL1xuICBkaXJlY3RBY2Nlc3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZHZhbmNlZCBkb21haW4gY29uZmlndXJhdGlvbiBmb3Igcm91dGluZyBwb2xpY2llcyAobGF0ZW5jeSwgd2VpZ2h0ZWQsIGdlbykuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGRvbWFpbiBpcyBzcGVjaWZpZWQuXG4gICAqIEFsbG93cyBmb3IgbXVsdGktcmVnaW9uIGRlcGxveW1lbnRzIHdpdGggYWR2YW5jZWQgRE5TIHJvdXRpbmcuXG4gICAqL1xuICBkb21haW5Db25maWc/OiBEb21haW5Db25maWc7XG59XG5cbi8qKlxuICogUm91dGluZyBjb25maWd1cmF0aW9uIGZvciBwYXRoL2hvc3QtYmFzZWQgcm91dGluZyBvbiB0aGUgQUxCLlxuICogUmVxdWlyZWQgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIHBvcnRzLlxuICogT3B0aW9uYWwgZm9yIHNpbmdsZSBzZXJ2aWNlIChnZXRzIGFsbCB0cmFmZmljIGF1dG9tYXRpY2FsbHkpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjc1JvdXRpbmdDb25maWcge1xuICAvKipcbiAgICogUGF0aCBwYXR0ZXJuIGZvciByb3V0aW5nIChlLmcuLCBcIi9hcGkvKlwiLCBcIi91c2Vycy8qXCIpLlxuICAgKiBVc2VzIEFMQiBwYXRoLWJhc2VkIHJvdXRpbmcuXG4gICAqL1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIb3N0IGhlYWRlciBmb3Igcm91dGluZyAoZS5nLiwgXCJhcGkuZXhhbXBsZS5jb21cIikuXG4gICAqIFVzZXMgQUxCIGhvc3QtYmFzZWQgcm91dGluZy5cbiAgICovXG4gIGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaW9yaXR5IGZvciB0aGlzIHJvdXRpbmcgcnVsZSAoMS01MDAwMCkuXG4gICAqIExvd2VyIG51bWJlciA9IGhpZ2hlciBwcmlvcml0eS5cbiAgICogQXV0by1hc3NpZ25lZCBpZiBvbWl0dGVkLlxuICAgKi9cbiAgcHJpb3JpdHk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhlYWx0aCBjaGVjayBwYXRoIGZvciB0aGlzIHNlcnZpY2UncyB0YXJnZXQgZ3JvdXAuXG4gICAqIERlZmF1bHQ6IFwiL1wiXG4gICAqL1xuICBoZWFsdGhDaGVja1BhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYSBzZXJ2aWNlIGluIGFuIEVDUyBjbHVzdGVyLlxuICogRWFjaCBzZXJ2aWNlIGdldHMgaXRzIG93biB0YXNrIGRlZmluaXRpb24sIHNjYWxpbmcgY29uZmlnLCBhbmQgdGFyZ2V0IGdyb3VwLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTaW1wbGUgc2VydmljZVxuICogeyBuYW1lOiBcImFwaVwiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2VydmljZSB3aXRoIHJvdXRpbmcgKGZvciBtdWx0aS1zZXJ2aWNlIGNsdXN0ZXJzKVxuICogeyBuYW1lOiBcInVzZXJzXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0sIHJvdXRpbmc6IHsgcGF0aDogXCIvdXNlcnMvKlwiLCBwcmlvcml0eTogMTAwIH0gfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXJ2aWNlIHdpdGggc2lkZWNhcnNcbiAqIHtcbiAqICAgbmFtZTogXCJhcGlcIixcbiAqICAgY29udGFpbmVyczogW1xuICogICAgIHsgbmFtZTogXCJhcHBcIiwgcG9ydDogMzAwMCB9LFxuICogICAgIHsgbmFtZTogXCJkYXRhZG9nXCIsIGltYWdlOiBcImRhdGFkb2cvYWdlbnRcIiB9XG4gKiAgIF1cbiAqIH1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NTZXJ2aWNlQ29uZmlnIHtcbiAgLyoqIFNlcnZpY2UgbmFtZSAodW5pcXVlIHdpdGhpbiBjbHVzdGVyKSAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZSBmb3IgdGhpcyBzZXJ2aWNlIChhcHBsaWVzIHRvIGZpcnN0IGNvbnRhaW5lciB3aXRob3V0IGV4cGxpY2l0IGltYWdlKS5cbiAgICogLSBPbWl0OiBVc2VzIGFwcCdzIGRlZmF1bHQgRUNSIHJlcG9zaXRvcnlcbiAgICogLSBzdHJpbmc6IEVDUiByZXBvc2l0b3J5IG5hbWUgb3IgcHVibGljIGltYWdlIFVSTFxuICAgKiAtIFJlcG9zaXRvcnk6IENESyBFQ1IgUmVwb3NpdG9yeSBjb25zdHJ1Y3RcbiAgICovXG4gIGltYWdlPzogc3RyaW5nIHwgUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGNvbmZpZ3VyYXRpb24ocykgZm9yIHRoaXMgc2VydmljZS5cbiAgICogRm9yIHNpbmdsZS1jb250YWluZXIgc2VydmljZXMsIGNvbnRhaW5lciBuYW1lIGlzIG9wdGlvbmFsIGFuZCBhdXRvLWdlbmVyYXRlZC5cbiAgICogRm9yIG11bHRpLWNvbnRhaW5lciBzZXJ2aWNlcywgdGhlIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgcG9ydCBpcyB0aGUgcHJpbWFyeSBjb250YWluZXIuXG4gICAqL1xuICBjb250YWluZXJzPzogRWNzQ29udGFpbmVyQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIFJvdXRpbmcgcnVsZXMgZm9yIHRoaXMgc2VydmljZSBvbiB0aGUgY2x1c3RlcidzIEFMQi5cbiAgICogUmVxdWlyZWQgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlcyB3aXRoIHBvcnRzLlxuICAgKiBPcHRpb25hbCBmb3Igc2luZ2xlIHNlcnZpY2UgKGdldHMgLyogYXV0b21hdGljYWxseSkuXG4gICAqL1xuICByb3V0aW5nPzogRWNzUm91dGluZ0NvbmZpZztcblxuICAvKiogQ1BVIHVuaXRzIGZvciB0aGlzIHNlcnZpY2UncyB0YXNrcyAoMjU2LTQwOTYpICovXG4gIGNwdT86IG51bWJlcjtcblxuICAvKiogTWVtb3J5IGluIE1pQiBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFza3MgKDUxMi0zMDcyMCkgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG5cbiAgLyoqIERlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLiBEZWZhdWx0OiAyICovXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogU2NhbGluZyBjb25maWd1cmF0aW9uLlxuICAgKiAtIE9taXQ6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICAgKiAtIGZhbHNlOiBkaXNhYmxlZFxuICAgKi9cbiAgc2NhbGluZz86IEVjc1NjYWxpbmdDb25maWcgfCBmYWxzZTtcblxuICAvKipcbiAgICogUGF0aCB0byBEb2NrZXJmaWxlIGZvciBidWlsZGluZyB0aGlzIHNlcnZpY2UncyBpbWFnZS5cbiAgICogTWV0YWRhdGEgZm9yIENMSSBidWlsZCBwcm9jZXNzLCBub3QgdXNlZCBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAgICovXG4gIGRvY2tlcmZpbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb2NrZXIgYnVpbGQgdGFyZ2V0IHN0YWdlIGZvciBtdWx0aS1zdGFnZSBEb2NrZXJmaWxlcy5cbiAgICogV2hlbiBzcGVjaWZpZWQsIHRoZSBDTEkgYnVpbGRzIHdpdGggYC0tdGFyZ2V0IDxkb2NrZXJUYXJnZXQ+YC5cbiAgICogVGhlIGltYWdlIHRhZyBzdWZmaXggaXMgYWxzbyB1cGRhdGVkOiBgPHNlcnZpY2U+LTx0YXJnZXQ+LWxhdGVzdGAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIERvY2tlcmZpbGU6IEZST00gbm9kZSBBUyBiYXNlIC4uLiBGUk9NIGJhc2UgQVMgYXBpIC4uLiBGUk9NIGJhc2UgQVMgd29ya2VyXG4gICAqIHsgbmFtZTogXCJhcGlcIiwgZG9ja2VyVGFyZ2V0OiBcImFwaVwiIH0gICAvLyBidWlsZHM6IG15YXBwLWFwaS1hcGktbGF0ZXN0XG4gICAqIHsgbmFtZTogXCJ3b3JrZXJcIiwgZG9ja2VyVGFyZ2V0OiBcIndvcmtlclwiIH0gIC8vIGJ1aWxkczogbXlhcHAtd29ya2VyLXdvcmtlci1sYXRlc3RcbiAgICovXG4gIGRvY2tlclRhcmdldD86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBpbmxpbmUgcG9saWNpZXMgZm9yIHRoaXMgc2VydmljZSdzIHRhc2sgcm9sZS5cbiAgICogQWRkZWQgb24gdG9wIG9mIHRoZSBkZWZhdWx0IEVDUyBFeGVjIHBlcm1pc3Npb25zLlxuICAgKiBVc2UgZm9yIHNlcnZpY2Utc3BlY2lmaWMgQVdTIHBlcm1pc3Npb25zIChTMywgRHluYW1vREIsIFNRUywgZXRjLikuXG4gICAqL1xuICB0YXNrUm9sZUlubGluZVBvbGljaWVzPzogUmVjb3JkPHN0cmluZywgUG9saWN5RG9jdW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1hbmFnZWQgcG9saWNpZXMgZm9yIHRoaXMgc2VydmljZSdzIHRhc2sgcm9sZS5cbiAgICogQWRkZWQgb24gdG9wIG9mIHRoZSBkZWZhdWx0IEVDUyBFeGVjIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgdGFza1JvbGVNYW5hZ2VkUG9saWNpZXM/OiBJTWFuYWdlZFBvbGljeVtdO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhpcyBzZXJ2aWNlIG5lZWRzIHRvIGNvbm5lY3QgdG8gKGUuZy4sIGRhdGFiYXNlcywgUzMgYnVja2V0cywgU1FTIHF1ZXVlcykuXG4gICAqIENyZWF0ZXMgc2VjdXJpdHkgZ3JvdXAgcnVsZXMgZm9yIElDb25uZWN0YWJsZSByZXNvdXJjZXMgYW5kIElBTSBncmFudHMgZm9yIElBTSByZXNvdXJjZXMuXG4gICAqIEZvbGxvd3MgbGVhc3QtcHJpdmlsZWdlIC0gb25seSB0aGlzIHNlcnZpY2UgZ2V0cyBhY2Nlc3MsIG5vdCBhbGwgc2VydmljZXMgaW4gdGhlIGNsdXN0ZXIuXG4gICAqXG4gICAqIFN1cHBvcnRzOlxuICAgKiAtIElDb25uZWN0YWJsZTogU2VjdXJpdHkgZ3JvdXAgcmVzb3VyY2VzIChSRFMsIEVDUywgZXRjLilcbiAgICogLSBJU3RvcmFnZUNvbm5lY3RvcjogUzMgYnVja2V0cyAoSUFNIGdyYW50cylcbiAgICogLSBJRHluYW1vREJDb25uZWN0b3I6IER5bmFtb0RCIHRhYmxlcyAoSUFNIGdyYW50cylcbiAgICogLSBJUXVldWVDb25uZWN0b3I6IFNRUyBxdWV1ZXMgKElBTSBncmFudHMpXG4gICAqIC0gQ29ubmVjdGlvbkNvbmZpZzogRXhwbGljaXQgYWNjZXNzIGxldmVsIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gU2ltcGxlIGNvbm5lY3Rpb25zIChkZWZhdWx0IHBlcm1pc3Npb25zKVxuICAgKiBjb25uZWN0aW9uczogW2RhdGFiYXNlLCBidWNrZXQsIGNhY2hlLCBxdWV1ZV1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gRXhwbGljaXQgYWNjZXNzIGxldmVsc1xuICAgKiBjb25uZWN0aW9uczogW1xuICAgKiAgIGRhdGFiYXNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlY3VyaXR5IGdyb3VwIChSRFMpXG4gICAqICAgeyByZXNvdXJjZTogY2FjaGUsIGFjY2VzczogXCJyZWFkXCIgfSwgICAvLyBSZWFkLW9ubHkgRHluYW1vREJcbiAgICogICB7IHJlc291cmNlOiBidWNrZXQsIGFjY2VzczogXCJ3cml0ZVwiIH0sIC8vIFdyaXRlLW9ubHkgUzNcbiAgICogICB7IHJlc291cmNlOiBxdWV1ZSwgYWNjZXNzOiBcImNvbnN1bWVcIiB9IC8vIENvbnN1bWUtb25seSBTUVNcbiAgICogXVxuICAgKi9cbiAgY29ubmVjdGlvbnM/OiBDb25uZWN0aW9uU3BlY1tdO1xuXG4gIC8qKlxuICAgKiBDYXBhY2l0eSBwcm92aWRlciBmb3IgdGhpcyBzZXJ2aWNlLiBSRVFVSVJFRC5cbiAgICogRWFjaCBzZXJ2aWNlIHNwZWNpZmllcyBpdHMgb3duIGNhcGFjaXR5IHByb3ZpZGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBNaXhlZCBGQVJHQVRFIGFuZCBFQzIgc2VydmljZXMgaW4gc2FtZSBjbHVzdGVyXG4gICAqIHtcbiAgICogICBzZXJ2aWNlczogW1xuICAgKiAgICAgeyBuYW1lOiBcImFwaVwiLCBjYXBhY2l0eVByb3ZpZGVyOiBcIkZBUkdBVEVcIiB9LFxuICAgKiAgICAgeyBuYW1lOiBcIndvcmtlclwiLCBjYXBhY2l0eVByb3ZpZGVyOiBcIkVDMlwiLCBlYzJDb25maWc6IHsgaW5zdGFuY2VUeXBlOiBcInQzLm1pY3JvXCIgfSB9XG4gICAqICAgXVxuICAgKiB9XG4gICAqL1xuICBjYXBhY2l0eVByb3ZpZGVyOiBFY3NDYXBhY2l0eVByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBFQzIgY2FwYWNpdHkgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzZXJ2aWNlLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBzZXJ2aWNlIGNhcGFjaXR5UHJvdmlkZXIgaXMgXCJFQzJcIi5cbiAgICogU2VydmljZXMgd2l0aCBtYXRjaGluZyBlYzJDb25maWcgc2hhcmUgYW4gQVNHIGZvciBlZmZpY2llbmN5LlxuICAgKi9cbiAgZWMyQ29uZmlnPzogRWMyQ2FwYWNpdHlDb25maWc7XG5cbiAgLyoqXG4gICAqIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGF0aCBmb3Igc2VjcmV0cy5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgc2VjcmV0cyBhcmUgZmV0Y2hlZCBmcm9tIC88YXBwPi88Y2x1c3Rlcj4vPHNlcnZpY2U+LlxuICAgKiBVc2UgdGhpcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb252ZW50aW9uLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBPdmVycmlkZSBkZWZhdWx0IHBhdGhcbiAgICogc3NtU2VjcmV0c1BhdGg6IFwiL2N1c3RvbS9wYXRoL3RvL3NlY3JldHNcIlxuICAgKi9cbiAgc3NtU2VjcmV0c1BhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU1NIIGFjY2VzcyBjb25maWd1cmF0aW9uIGZvciBFQzIgaW5zdGFuY2VzLlxuICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIGF1dG8tZ2VuZXJhdGVkIGtleVxuICogLSBgeyBrZXlOYW1lOiBcIm15LWtleVwiIH1gOiBlbmFibGVkIHdpdGggZXhpc3Rpbmcga2V5XG4gKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTc2hDb25maWcge1xuICAvKiogU1NIIGtleSBwYWlyIG5hbWUgKi9cbiAga2V5TmFtZT86IHN0cmluZztcbiAgLyoqIEFsbG93ZWQgQ0lEUiBibG9ja3MgZm9yIFNTSCBhY2Nlc3MgKi9cbiAgYWxsb3dlZENpZHJzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogTGFtYmRhIGZ1bmN0aW9uIFVSTCBjb25maWd1cmF0aW9uLlxuICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIElBTSBhdXRoXG4gKiAtIGB7IGF1dGhUeXBlOiBcIk5PTkVcIiwgY29yczogey4uLn0gfWA6IHB1YmxpYyB3aXRoIENPUlNcbiAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uVXJsQ29uZmlnIHtcbiAgLyoqIEF1dGhlbnRpY2F0aW9uIHR5cGUuIERlZmF1bHQ6IEFXU19JQU0gKi9cbiAgYXV0aFR5cGU/OiBGdW5jdGlvblVybEF1dGhUeXBlO1xuICAvKiogQ09SUyBjb25maWd1cmF0aW9uICovXG4gIGNvcnM/OiBGdW5jdGlvblVybENvcnNPcHRpb25zO1xuICAvKiogSW52b2tlIG1vZGUuIFVzZSBSRVNQT05TRV9TVFJFQU0gZm9yIExhbWJkYSBzdHJlYW1pbmcuIERlZmF1bHQ6IEJVRkZFUkVEICovXG4gIGludm9rZU1vZGU/OiBJbnZva2VNb2RlO1xufVxuXG5pbnRlcmZhY2UgQmFzZUNvbXB1dGVQcm9wcyB7XG4gIHZwYz86IElWcGM7XG59XG5cbi8qKlxuICogRUNTIGNvbXB1dGUgY29uZmlndXJhdGlvbi5cbiAqIENyZWF0ZXMgYW4gRUNTIGNsdXN0ZXIgd2l0aCBvbmUgb3IgbW9yZSBzZXJ2aWNlcyBzaGFyaW5nIGEgbG9hZCBiYWxhbmNlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2luZ2xlIHNlcnZpY2VcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiV2ViQXBwXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBwLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFt7IG5hbWU6IFwid2ViXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0gfV1cbiAqIH0pKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTXVsdGktc2VydmljZSBjbHVzdGVyIHdpdGggcm91dGluZ1xuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJBcGlDbHVzdGVyXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBpLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFtcbiAqICAgICB7IG5hbWU6IFwidXNlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMCB9XSwgcm91dGluZzogeyBwYXRoOiBcIi91c2Vycy8qXCIgfSB9LFxuICogICAgIHsgbmFtZTogXCJvcmRlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMSB9XSwgcm91dGluZzogeyBwYXRoOiBcIi9vcmRlcnMvKlwiIH0gfVxuICogICBdXG4gKiB9KSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEludGVybmFsIHdvcmtlcnMgKG5vIEFMQilcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiV29ya2Vyc1wiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgbG9hZEJhbGFuY2VyOiBmYWxzZSB9LFxuICogICBzZXJ2aWNlczogW3sgbmFtZTogXCJwcm9jZXNzb3JcIiB9LCB7IG5hbWU6IFwiZW1haWxlclwiIH1dXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ29tcHV0ZVByb3BzIGV4dGVuZHMgQmFzZUNvbXB1dGVQcm9wcyB7XG4gIHR5cGU6IFwiZWNzXCI7XG5cbiAgLyoqXG4gICAqIEFwcGxpY2F0aW9uIG5hbWUgZm9yIFNTTSBzZWNyZXRzIG5hbWVzcGFjZS5cbiAgICogV2hlbiBjb250YWluZXJzIHVzZSBzZWNyZXRzLCB0aGUgcGF0aCBpcyBkZXJpdmVkIGFzOiAvPGFwcE5hbWU+LzxjbHVzdGVyTmFtZT4vPHNlcnZpY2VOYW1lPlxuICAgKiBBdXRvLWRlcml2ZWQgZnJvbSBBcHAuZ2V0TmFtZSgpIGlmIG5vdCBzcGVjaWZpZWQuXG4gICAqL1xuICBhcHBOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqIENvbnRyb2xzIHRoZSBzaGFyZWQgQUxCIGZvciBhbGwgc2VydmljZXMgaW4gdGhpcyBjbHVzdGVyLlxuICAgKiAtIE9taXQ6IEFMQiBjcmVhdGVkIHdpdGggZGVmYXVsdCBzZXR0aW5nc1xuICAgKiAtIGB7IGRvbWFpbjogXCIuLi5cIiB9YDogQUxCIHdpdGggSFRUUFMgKyBETlNcbiAgICogLSBgeyBsb2FkQmFsYW5jZXI6IGZhbHNlIH1gOiBObyBBTEIgKGludGVybmFsIHdvcmtlcnMpXG4gICAqL1xuICBjbHVzdGVyPzogRWNzQ2x1c3RlckNvbmZpZztcblxuICAvKipcbiAgICogU2VydmljZXMgaW4gdGhpcyBjbHVzdGVyLlxuICAgKiBFYWNoIHNlcnZpY2UgZ2V0cyBpdHMgb3duIHRhc2sgZGVmaW5pdGlvbiwgc2NhbGluZywgYW5kIHRhcmdldCBncm91cC5cbiAgICogRWFjaCBzZXJ2aWNlIE1VU1Qgc3BlY2lmeSBpdHMgb3duIGNhcGFjaXR5UHJvdmlkZXIuXG4gICAqIEFsbCBzZXJ2aWNlcyBzaGFyZSB0aGUgY2x1c3RlcidzIEFMQiAodW5sZXNzIGRpc2FibGVkKS5cbiAgICovXG4gIHNlcnZpY2VzOiBFY3NTZXJ2aWNlQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIEVDUiByZXBvc2l0b3J5IGZvciBhbGwgc2VydmljZXMgKGRlZmF1bHQgaW1hZ2UpLlxuICAgKiBJbmRpdmlkdWFsIHNlcnZpY2VzIGNhbiBvdmVycmlkZSB3aXRoIHRoZWlyIG93biBgaW1hZ2VgIHByb3BlcnR5LlxuICAgKi9cbiAgZWNyUmVwb3NpdG9yeT86IFJlcG9zaXRvcnkgfCBSZXBvc2l0b3J5SW1hZ2U7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gRG9ja2VyZmlsZSBmb3IgYnVpbGRpbmcgY3VzdG9tIGltYWdlLlxuICAgKiBOb3RlOiBUaGlzIGlzIG1ldGFkYXRhIGZvciB0aGUgQ0xJIGJ1aWxkIHByb2Nlc3MsXG4gICAqIG5vdCB1c2VkIGR1cmluZyBDREsgc3ludGhlc2lzLlxuICAgKi9cbiAgZG9ja2VyZmlsZVBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWMyQ29tcHV0ZVByb3BzIGV4dGVuZHMgQmFzZUNvbXB1dGVQcm9wcyB7XG4gIHR5cGU6IFwiZWMyXCI7XG5cbiAgLyoqIEVDMiBpbnN0YW5jZSB0eXBlLiBEZWZhdWx0OiBcInQzLm1pY3JvXCIgKi9cbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTU0ggYWNjZXNzIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gICAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIGRlZmF1bHRzXG4gICAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICAgKi9cbiAgc3NoPzogU3NoQ29uZmlnIHwgZmFsc2U7XG4gIC8qKiBVc2VyIGRhdGEgc2NyaXB0ICovXG4gIHVzZXJEYXRhPzogVXNlckRhdGE7XG4gIC8qKiBNYWNoaW5lIGltYWdlIChBTUkpICovXG4gIG1hY2hpbmVJbWFnZT86IElNYWNoaW5lSW1hZ2U7XG4gIC8qKiBNaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMuIERlZmF1bHQ6IDEgKi9cbiAgbWluQ2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMuIERlZmF1bHQ6IDEgKi9cbiAgbWF4Q2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQZXJjZW50YWdlIG9mIGNhcGFjaXR5IHRvIHJ1biBvbiBTcG90IGluc3RhbmNlcyAoMC0xMDApLlxuICAgKiAtIE9taXQgb3IgMDogQWxsIE9uLURlbWFuZCBpbnN0YW5jZXMgKGRlZmF1bHQpXG4gICAqIC0gMTAwOiBBbGwgU3BvdCBpbnN0YW5jZXNcbiAgICogLSA1MDogSGFsZiBTcG90LCBoYWxmIE9uLURlbWFuZFxuICAgKlxuICAgKiBTcG90IGluc3RhbmNlcyBjYW4gcmVkdWNlIGNvc3RzIGJ5IHVwIHRvIDkwJSBidXQgbWF5IGJlIGludGVycnVwdGVkLlxuICAgKiBVc2UgZm9yIGZhdWx0LXRvbGVyYW50IHdvcmtsb2Fkcy5cbiAgICovXG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQmFzZSBMYW1iZGEgY29uZmlndXJhdGlvbiBzaGFyZWQgYnkgYm90aCBjb250YWluZXIgYW5kIGNvZGUgZGVwbG95bWVudHMuXG4gKi9cbmludGVyZmFjZSBCYXNlTGFtYmRhUHJvcHMgZXh0ZW5kcyBCYXNlQ29tcHV0ZVByb3BzIHtcbiAgdHlwZTogXCJsYW1iZGFcIjtcbiAgLyoqIFRpbWVvdXQgaW4gc2Vjb25kcy4gRGVmYXVsdDogMyAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKiogTWVtb3J5IHNpemUgaW4gTUIuIERlZmF1bHQ6IDEyOCAqL1xuICBtZW1vcnlTaXplPzogbnVtYmVyO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbiAgLyoqIENQVSBhcmNoaXRlY3R1cmUuIERlZmF1bHQ6IHg4Nl82NC4gVXNlIEFyY2hpdGVjdHVyZS5BUk1fNjQgZm9yIEdyYXZpdG9uMi4gKi9cbiAgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuICAvKiogTGFtYmRhIGZ1bmN0aW9uIGRlc2NyaXB0aW9uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgZGVzY3JpcHRpb24gKi9cbiAgcm9sZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8vIElubGluZSBwb2xpY2llcyAtIHJvdXRlZCB0byBleGVjdXRpb24gcm9sZSBmb3IgRUNTLCB0YXNrIHJvbGUgZm9yIExhbWJkYVxuICAvKiogSW5saW5lIElBTSBwb2xpY3kgc3RhdGVtZW50cyAqL1xuICBpbmxpbmVQb2xpY3k/OiBQb2xpY3lTdGF0ZW1lbnRbXTtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIFVSTCBjb25maWd1cmF0aW9uLlxuICAgKiAtIE9taXQ6IGRpc2FibGVkIChkZWZhdWx0KVxuICAgKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBJQU0gYXV0aFxuICAgKiAtIGB7IGF1dGhUeXBlOiBcIk5PTkVcIiB9YDogcHVibGljIGFjY2Vzc1xuICAgKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgICovXG4gIGZ1bmN0aW9uVXJsPzogRnVuY3Rpb25VcmxDb25maWcgfCBmYWxzZTtcbiAgLyoqIEVudmlyb25tZW50IHZhcmlhYmxlcyAqL1xuICBlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFNlY3JldHMgZnJvbSBBV1MgU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAgICogQXJyYXkgb2Ygc2VjcmV0IG5hbWVzIHRoYXQgd2lsbCBiZSBmZXRjaGVkIGZyb20gdGhlIExhbWJkYSdzIFNTTSBuYW1lc3BhY2UuXG4gICAqIFRoZSBuYW1lc3BhY2UgcGF0aCBpcyBhdXRvLWRldGVybWluZWQgYXM6IC88YXBwTmFtZT4vbGFtYmRhLzxmdW5jdGlvbk5hbWU+XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHNlY3JldHM6IFtcIkFQSV9LRVlcIiwgXCJTVFJJUEVfU0VDUkVUXCJdXG4gICAqL1xuICBzZWNyZXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGF0aCBmb3Igc2VjcmV0cy5cbiAgICogSWYgc2VjcmV0cyBhcmUgZGVmaW5lZCwgdGhpcyBwYXRoIGlzIHVzZWQgYXMgdGhlIGJhc2UgcGF0aC5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdXNlczogLzxhcHBOYW1lPi9sYW1iZGEvPGZ1bmN0aW9uTmFtZT5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc3NtU2VjcmV0c1BhdGg6IFwiL215YXBwL2N1c3RvbS9wYXRoXCJcbiAgICovXG4gIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWNyZXRzIGltcG9ydGVkIGZyb20gb3RoZXIgQ0RLIHJlc291cmNlcyAoQVdTIFNlY3JldHMgTWFuYWdlcikuXG4gICAqIFVzZWQgZm9yIENESy1tYW5hZ2VkIHNlY3JldHMgbGlrZSBkYXRhYmFzZSBjcmVkZW50aWFscy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc2VjcmV0c0ltcG9ydDoge1xuICAgKiAgIERBVEFCQVNFX1VTRVJOQU1FOiBkYXRhYmFzZS5nZXRDcmVkZW50aWFscygpLmdldEltcG9ydChcInVzZXJuYW1lXCIpLFxuICAgKiAgIERBVEFCQVNFX1BBU1NXT1JEOiBkYXRhYmFzZS5nZXRDcmVkZW50aWFscygpLmdldEltcG9ydChcInBhc3N3b3JkXCIpXG4gICAqIH1cbiAgICovXG4gIHNlY3JldHNJbXBvcnQ/OiBSZWNvcmQ8c3RyaW5nLCBTZWNyZXRJbXBvcnQ+O1xuXG4gIC8qKlxuICAgKiBBcHBsaWNhdGlvbiBuYW1lIGZvciBTU00gc2VjcmV0cyBwYXRoIGRlcml2YXRpb24uXG4gICAqIEF1dG8tZGVyaXZlZCBmcm9tIEFwcCBpbnN0YW5jZSB3aGVuIHVzaW5nIENvbXB1dGVGYWN0b3J5LlxuICAgKiBPbmx5IHNwZWNpZnkgZm9yIGFkdmFuY2VkIHVzZSBjYXNlcy5cbiAgICovXG4gIGFwcE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGlzIExhbWJkYSBuZWVkcyB0byBjb25uZWN0IHRvIChlLmcuLCBkYXRhYmFzZXMsIFMzIGJ1Y2tldHMsIFNRUyBxdWV1ZXMpLlxuICAgKiBDcmVhdGVzIHNlY3VyaXR5IGdyb3VwIHJ1bGVzIGZvciBJQ29ubmVjdGFibGUgcmVzb3VyY2VzIGFuZCBJQU0gZ3JhbnRzIGZvciBJQU0gcmVzb3VyY2VzLlxuICAgKlxuICAgKiBTdXBwb3J0czpcbiAgICogLSBJQ29ubmVjdGFibGU6IFNlY3VyaXR5IGdyb3VwIHJlc291cmNlcyAoUkRTLCBFQ1MsIGV0Yy4pXG4gICAqIC0gSVN0b3JhZ2VDb25uZWN0b3I6IFMzIGJ1Y2tldHMgKElBTSBncmFudHMpXG4gICAqIC0gSUR5bmFtb0RCQ29ubmVjdG9yOiBEeW5hbW9EQiB0YWJsZXMgKElBTSBncmFudHMpXG4gICAqIC0gSVF1ZXVlQ29ubmVjdG9yOiBTUVMgcXVldWVzIChJQU0gZ3JhbnRzKVxuICAgKiAtIENvbm5lY3Rpb25Db25maWc6IEV4cGxpY2l0IGFjY2VzcyBsZXZlbCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbm5lY3Rpb25zOiBbXG4gICAqICAgZGF0YWJhc2UsXG4gICAqICAgeyByZXNvdXJjZTogcXVldWUsIGFjY2VzczogXCJzZW5kXCIgfVxuICAgKiBdXG4gICAqL1xuICBjb25uZWN0aW9ucz86IENvbm5lY3Rpb25TcGVjW107XG5cbiAgLyoqXG4gICAqIEV2ZW50QnJpZGdlIHNjaGVkdWxlIGV4cHJlc3Npb24gZm9yIHNjaGVkdWxlZCBMYW1iZGEgaW52b2NhdGlvbnMuXG4gICAqIFVzZXMgY3JvbiBvciByYXRlIHN5bnRheDogXCJyYXRlKDEgaG91cilcIiBvciBcImNyb24oMCAxMiAqICogPyAqKVwiLlxuICAgKi9cbiAgc2NoZWR1bGVFeHByZXNzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnRhaW5lci1iYXNlZCBMYW1iZGEgdXNpbmcgRUNSIGltYWdlLlxuICpcbiAqIFVzZXMgRG9ja2VyIGltYWdlIGZyb20gRUNSIHJlcG9zaXRvcnkuIEhhbmRsZXIgYW5kIHJ1bnRpbWUgYXJlXG4gKiBhdXRvbWF0aWNhbGx5IHNldCB0byBGUk9NX0lNQUdFLlxuICpcbiAqIEBleGFtcGxlXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIkltYWdlTGFtYmRhXCIsIHtcbiAqICAgdHlwZTogXCJsYW1iZGFcIixcbiAqICAgZGVwbG95bWVudDogXCJjb250YWluZXJcIixcbiAqICAgZWNyUmVwb3NpdG9yeTogYXBwLmdldERlZmF1bHRDb250YWluZXJSZWdpc3RyeSgpXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyTGFtYmRhUHJvcHMgZXh0ZW5kcyBCYXNlTGFtYmRhUHJvcHMge1xuICAvKiogQ29udGFpbmVyLWJhc2VkIGRlcGxveW1lbnQgdXNpbmcgRUNSIGltYWdlICovXG4gIGRlcGxveW1lbnQ6IFwiY29udGFpbmVyXCI7XG4gIC8qKiBFQ1IgcmVwb3NpdG9yeSBjb250YWluaW5nIHRoZSBMYW1iZGEgY29udGFpbmVyIGltYWdlICovXG4gIGVjclJlcG9zaXRvcnk6IFJlcG9zaXRvcnkgfCBSZXBvc2l0b3J5SW1hZ2U7XG59XG5cbi8qKlxuICogQ29kZS1iYXNlZCBMYW1iZGEgdXNpbmcgaW5saW5lIGNvZGUgb3IgUzMuXG4gKlxuICogVXNlcyB0cmFkaXRpb25hbCBMYW1iZGEgZGVwbG95bWVudCB3aXRoIGNvZGUsIGhhbmRsZXIsIGFuZCBydW50aW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIkNvZGVMYW1iZGFcIiwge1xuICogICB0eXBlOiBcImxhbWJkYVwiLFxuICogICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAqICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXCIuL2xhbWJkYVwiKSxcbiAqICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gKiAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1hcbiAqIH0pKTtcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlTGFtYmRhUHJvcHMgZXh0ZW5kcyBCYXNlTGFtYmRhUHJvcHMge1xuICAvKiogQ29kZS1iYXNlZCBkZXBsb3ltZW50ICovXG4gIGRlcGxveW1lbnQ6IFwiY29kZVwiO1xuICAvKiogTGFtYmRhIGNvZGUgKGZyb20gYXNzZXQsIFMzLCBvciBpbmxpbmUpICovXG4gIGNvZGU6IENvZGU7XG4gIC8qKiBIYW5kbGVyIGZ1bmN0aW9uLiBEZWZhdWx0OiBcImluZGV4LmhhbmRsZXJcIiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogTGFtYmRhIHJ1bnRpbWUuIERlZmF1bHQ6IE5PREVKU18xOF9YICovXG4gIHJ1bnRpbWU/OiBSdW50aW1lO1xufVxuXG4vKipcbiAqIExhbWJkYSBjb21wdXRlIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiBlbnN1cmluZyB0eXBlLXNhZmUgTGFtYmRhIGNvbmZpZ3VyYXRpb246XG4gKiAtIGBkZXBsb3ltZW50OiBcImNvbnRhaW5lclwiYCByZXF1aXJlcyBgZWNyUmVwb3NpdG9yeWBcbiAqIC0gYGRlcGxveW1lbnQ6IFwiY29kZVwiYCByZXF1aXJlcyBgY29kZWAgYW5kIGFsbG93cyBgaGFuZGxlcmAvYHJ1bnRpbWVgXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnRhaW5lci1iYXNlZCBMYW1iZGFcbiAqIHsgdHlwZTogXCJsYW1iZGFcIiwgZGVwbG95bWVudDogXCJjb250YWluZXJcIiwgZWNyUmVwb3NpdG9yeTogZWNyIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29kZS1iYXNlZCBMYW1iZGFcbiAqIHsgdHlwZTogXCJsYW1iZGFcIiwgZGVwbG95bWVudDogXCJjb2RlXCIsIGNvZGU6IENvZGUuZnJvbUFzc2V0KFwiLi9sYW1iZGFcIikgfVxuICovXG5leHBvcnQgdHlwZSBMYW1iZGFDb21wdXRlUHJvcHMgPSBDb250YWluZXJMYW1iZGFQcm9wcyB8IENvZGVMYW1iZGFQcm9wcztcblxuLy8gVHlwZS1zYWZlIHByb3BzIHdpdGggbGl0ZXJhbCBkaXNjcmltaW5hdG9ycyBmb3IgZmFjdG9yeSBvdmVybG9hZHNcbmV4cG9ydCB0eXBlIElFY3NDb21wdXRlUHJvcHMgPSBFY3NDb21wdXRlUHJvcHM7XG5leHBvcnQgdHlwZSBJTGFtYmRhQ29tcHV0ZVByb3BzID0gTGFtYmRhQ29tcHV0ZVByb3BzO1xuZXhwb3J0IHR5cGUgSUVjMkNvbXB1dGVQcm9wcyA9IEVjMkNvbXB1dGVQcm9wcztcblxuZXhwb3J0IHR5cGUgSUNvbXB1dGVQcm9wcyA9XG4gIHwgSUVjc0NvbXB1dGVQcm9wc1xuICB8IElMYW1iZGFDb21wdXRlUHJvcHNcbiAgfCBJRWMyQ29tcHV0ZVByb3BzO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBjb21wdXRlIHByb3BzIGFuZCBsb2dzIHdhcm5pbmdzIGZvciBpZ25vcmVkIG9yIG1pc2NvbmZpZ3VyZWQgb3B0aW9ucy5cbiAqIFRoZXNlIGNoZWNrcyBoZWxwIGNhdGNoIGlzc3VlcyB3aGVuIHByb3BzIGNvbWUgZnJvbSBkeW5hbWljIHNvdXJjZXMgd2hlcmVcbiAqIFR5cGVTY3JpcHQncyBjb21waWxlLXRpbWUgY2hlY2tzIG1heSBub3QgYXBwbHkuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcHV0ZVByb3BzKHByb3BzOiBJQ29tcHV0ZVByb3BzKTogdm9pZCB7XG4gIC8vIEVDUy1zcGVjaWZpYyBvcHRpb25zIG9uIG5vbi1FQ1MgY29tcHV0ZVxuICB3YXJuSWZQcm9wZXJ0aWVzSWdub3JlZChcbiAgICBwcm9wcyxcbiAgICBbXCJjYXBhY2l0eVByb3ZpZGVyXCIsIFwiZWMyQ29uZmlnXCIsIFwic2VydmljZXNcIiwgXCJjbHVzdGVyXCJdLFxuICAgIFwiZWNzXCIsXG4gICAgXCJFQ1MgY29tcHV0ZVwiXG4gICk7XG5cbiAgLy8gTGFtYmRhLXNwZWNpZmljIG9wdGlvbnMgb24gbm9uLUxhbWJkYSBjb21wdXRlXG4gIHdhcm5JZlByb3BlcnRpZXNJZ25vcmVkKFxuICAgIHByb3BzLFxuICAgIFtcImZ1bmN0aW9uVXJsXCIsIFwiaGFuZGxlclwiLCBcInJ1bnRpbWVcIl0sXG4gICAgXCJsYW1iZGFcIixcbiAgICBcIkxhbWJkYSBjb21wdXRlXCJcbiAgKTtcblxuICAvLyBFQzItc3BlY2lmaWMgb3B0aW9ucyBvbiBub24tRUMyIGNvbXB1dGVcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWQoXG4gICAgcHJvcHMsXG4gICAgW1wic3NoXCIsIFwidXNlckRhdGFcIiwgXCJtYWNoaW5lSW1hZ2VcIl0sXG4gICAgXCJlYzJcIixcbiAgICBcIkVDMiBjb21wdXRlXCJcbiAgKTtcblxuICAvLyBFQ1Mtc3BlY2lmaWMgdmFsaWRhdGlvbiAtIHR5cGUgbmFycm93aW5nIGhhbmRsZWQgYnkgZGlzY3JpbWluYXRlZCB1bmlvblxuICBpZiAocHJvcHMudHlwZSA9PT0gXCJlY3NcIikge1xuICAgIHZhbGlkYXRlRWNzUHJvcHMocHJvcHMpO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIEVDUy1zcGVjaWZpYyBwcm9wcy5cbiAqIEV4dHJhY3RlZCBmb3IgY2xhcml0eSBhbmQgZGV0YWlsIHBhcml0eSB3aXRoIGRhdGFiYXNlL25ldHdvcmsgcGF0dGVybnMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRWNzUHJvcHMocHJvcHM6IEVjc0NvbXB1dGVQcm9wcyk6IHZvaWQge1xuICAvLyBWYWxpZGF0ZSBzZXJ2aWNlcyBhcnJheSBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eVxuICBpZiAoIXByb3BzLnNlcnZpY2VzIHx8IHByb3BzLnNlcnZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQXQgbGVhc3Qgb25lIHNlcnZpY2UgbXVzdCBiZSBzcGVjaWZpZWQgaW4gJ3NlcnZpY2VzJyBhcnJheS5cIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB1bmlxdWUgc2VydmljZSBuYW1lc1xuICBjb25zdCBzZXJ2aWNlTmFtZXMgPSBwcm9wcy5zZXJ2aWNlcy5tYXAoKHMpID0+IHMubmFtZSk7XG4gIGNvbnN0IGR1cGxpY2F0ZU5hbWVzID0gc2VydmljZU5hbWVzLmZpbHRlcihcbiAgICAobmFtZSwgaW5kZXgpID0+IHNlcnZpY2VOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICApO1xuICBpZiAoZHVwbGljYXRlTmFtZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEdXBsaWNhdGUgc2VydmljZSBuYW1lczogJHtbLi4ubmV3IFNldChkdXBsaWNhdGVOYW1lcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHNlcnZpY2UgbmFtZSBmb3JtYXRcbiAgY29uc3QgaW52YWxpZE5hbWVzID0gcHJvcHMuc2VydmljZXMuZmlsdGVyKFxuICAgIChzKSA9PiAhL15bYS16QS1aXVthLXpBLVowLTktXSokLy50ZXN0KHMubmFtZSlcbiAgKTtcbiAgaWYgKGludmFsaWROYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgc2VydmljZSBuYW1lczogJHtpbnZhbGlkTmFtZXMubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICBcIlNlcnZpY2UgbmFtZXMgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgYW5kIGh5cGhlbnMuXCJcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgcm91dGluZyB3aGVuIG11bHRpcGxlIHNlcnZpY2VzIGhhdmUgcG9ydHNcbiAgY29uc3Qgc2VydmljZXNXaXRoUG9ydHMgPSBwcm9wcy5zZXJ2aWNlcy5maWx0ZXIoKHMpID0+XG4gICAgcy5jb250YWluZXJzPy5zb21lKChjKSA9PiBjLnBvcnQpXG4gICk7XG5cbiAgaWYgKHNlcnZpY2VzV2l0aFBvcnRzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBtaXNzaW5nUm91dGluZyA9IHNlcnZpY2VzV2l0aFBvcnRzLmZpbHRlcihcbiAgICAgIChzKSA9PiAhcy5yb3V0aW5nPy5wYXRoICYmICFzLnJvdXRpbmc/Lmhvc3RcbiAgICApO1xuICAgIGlmIChtaXNzaW5nUm91dGluZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTZXJ2aWNlcyB3aXRoIHBvcnRzIHJlcXVpcmUgcm91dGluZyBjb25maWcgd2hlbiBjbHVzdGVyIGhhcyBtdWx0aXBsZSBzZXJ2aWNlczogYCArXG4gICAgICAgICAgYCR7bWlzc2luZ1JvdXRpbmcubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICAgIFwiQWRkIHJvdXRpbmc6IHsgcGF0aDogJy8uLi4nIH0gb3Igcm91dGluZzogeyBob3N0OiAnLi4uJyB9IHRvIGVhY2ggc2VydmljZS5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBlYWNoIHNlcnZpY2UncyBjb250YWluZXJzXG4gIGZvciAoY29uc3Qgc2VydmljZSBvZiBwcm9wcy5zZXJ2aWNlcykge1xuICAgIGlmIChzZXJ2aWNlLmNvbnRhaW5lcnMgJiYgc2VydmljZS5jb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIENoZWNrIGZvciBkdXBsaWNhdGUgY29udGFpbmVyIG5hbWVzIHdpdGhpbiBzZXJ2aWNlIChvbmx5IG5hbWVkIGNvbnRhaW5lcnMpXG4gICAgICBjb25zdCBjb250YWluZXJOYW1lcyA9IHNlcnZpY2UuY29udGFpbmVyc1xuICAgICAgICAuZmlsdGVyKChjKSA9PiBjLm5hbWUpXG4gICAgICAgIC5tYXAoKGMpID0+IGMubmFtZSk7XG4gICAgICBjb25zdCBkdXBsaWNhdGVDb250YWluZXJOYW1lcyA9IGNvbnRhaW5lck5hbWVzLmZpbHRlcihcbiAgICAgICAgKG5hbWUsIGluZGV4KSA9PiBjb250YWluZXJOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICAgICAgKTtcbiAgICAgIGlmIChkdXBsaWNhdGVDb250YWluZXJOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU2VydmljZSAnJHtzZXJ2aWNlLm5hbWV9JzogRHVwbGljYXRlIGNvbnRhaW5lciBuYW1lczogYCArXG4gICAgICAgICAgICBgJHtbLi4ubmV3IFNldChkdXBsaWNhdGVDb250YWluZXJOYW1lcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2UuY2FwYWNpdHlQcm92aWRlciA9PT0gXCJFQzJcIiAmJiAhc2VydmljZS5lYzJDb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFNlcnZpY2UgJyR7c2VydmljZS5uYW1lfScgdXNlcyBFQzIgY2FwYWNpdHkgcHJvdmlkZXIgYnV0IG5vIGVjMkNvbmZpZyBpcyBkZWZpbmVkLiBgICtcbiAgICAgICAgICBcIlByb3ZpZGUgZWMyQ29uZmlnIG9uIHRoZSBzZXJ2aWNlLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFdhcm4gaWYgc2VydmljZSBlYzJDb25maWcgaXMgZGVmaW5lZCBidXQgY2FwYWNpdHlQcm92aWRlciBpcyBub3QgRUMyXG4gICAgaWYgKHNlcnZpY2UuZWMyQ29uZmlnICYmIHNlcnZpY2UuY2FwYWNpdHlQcm92aWRlciAhPT0gXCJFQzJcIikge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgYFNlcnZpY2UgJyR7c2VydmljZS5uYW1lfScgaGFzIGVjMkNvbmZpZyBidXQgY2FwYWNpdHlQcm92aWRlciBpcyBub3QgJ0VDMicuIGAgK1xuICAgICAgICAgIFwiVGhlIGVjMkNvbmZpZyB3aWxsIGJlIGlnbm9yZWQgdW5sZXNzIGNhcGFjaXR5UHJvdmlkZXIgaXMgc2V0IHRvICdFQzInLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIGNvbnRhaW5lciBjb25maWd1cmF0aW9ucyBmb3IgYW4gRUNTIHNlcnZpY2UuXG4gKiBDb252ZXJ0cyB1c2VyLWZhY2luZyBFY3NDb250YWluZXJDb25maWcgdG8gaW50ZXJuYWwgRWNzQ2x1c3RlclByb3BzIGZvcm1hdC5cbiAqIEBpbnRlcm5hbCBFeHBvcnRlZCBmb3IgdGVzdGluZyBvbmx5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENvbnRhaW5lckNvbmZpZ3MoXG4gIHNlcnZpY2U6IEVjc1NlcnZpY2VDb25maWdcbik6IEVjc0NsdXN0ZXJQcm9wc1tcInNlcnZpY2VzXCJdW251bWJlcl1bXCJjb250YWluZXJzXCJdIHtcbiAgaWYgKHNlcnZpY2UuY29udGFpbmVycyAmJiBzZXJ2aWNlLmNvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBzZXJ2aWNlLmNvbnRhaW5lcnMubWFwKChjLCBpbmRleCkgPT4gKHtcbiAgICAgIG5hbWU6IGMubmFtZSB8fCBgJHtzZXJ2aWNlLm5hbWV9Q29udGFpbmVyJHtpbmRleCA+IDAgPyBpbmRleCA6IFwiXCJ9YCxcbiAgICAgIGltYWdlOiBjLmltYWdlLFxuICAgICAgcG9ydDogYy5wb3J0LFxuICAgICAgZW52aXJvbm1lbnQ6IGMuZW52aXJvbm1lbnQsXG4gICAgICBzZWNyZXRzOiBjLnNlY3JldHMsXG4gICAgICBzZWNyZXRzSW1wb3J0OiBjLnNlY3JldHNJbXBvcnQsXG4gICAgICBjb21tYW5kOiBjLmNvbW1hbmQsXG4gICAgICBlbnRyeVBvaW50OiBjLmVudHJ5UG9pbnQsXG4gICAgICBlc3NlbnRpYWw6IGMuZXNzZW50aWFsLFxuICAgICAgaGVhbHRoQ2hlY2s6IGMuaGVhbHRoQ2hlY2tcbiAgICB9KSk7XG4gIH1cbiAgLy8gRGVmYXVsdCBjb250YWluZXIgKG5vIHBvcnQgPSB3b3JrZXIpXG4gIHJldHVybiBbeyBuYW1lOiBgJHtzZXJ2aWNlLm5hbWV9Q29udGFpbmVyYCB9XTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlZCBzY2FsaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGFuIEVDUyBzZXJ2aWNlLlxuICogQGludGVybmFsIEV4cG9ydGVkIGZvciB0ZXN0aW5nIG9ubHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFNjYWxpbmdDb25maWcge1xuICBzY2FsaW5nVHlwZTogU2NhbGluZ1R5cGUgfCB1bmRlZmluZWQ7XG4gIG1pbkNhcGFjaXR5OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIG1heENhcGFjaXR5OiBudW1iZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBzY2FsaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBzZXJ2aWNlIHByb3BzLlxuICogSGFuZGxlcyB0aGUgdGhyZWUgY2FzZXM6IGV4cGxpY2l0IGNvbmZpZywgZGlzYWJsZWQgKGZhbHNlKSwgb3IgZGVmYXVsdCAodW5kZWZpbmVkKS5cbiAqIEBpbnRlcm5hbCBFeHBvcnRlZCBmb3IgdGVzdGluZyBvbmx5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2NhbGluZ0NvbmZpZyhcbiAgc2NhbGluZzogRWNzU2NhbGluZ0NvbmZpZyB8IGZhbHNlIHwgdW5kZWZpbmVkXG4pOiBSZXNvbHZlZFNjYWxpbmdDb25maWcge1xuICBpZiAoc2NhbGluZyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NhbGluZ1R5cGU6IHVuZGVmaW5lZCxcbiAgICAgIG1pbkNhcGFjaXR5OiB1bmRlZmluZWQsXG4gICAgICBtYXhDYXBhY2l0eTogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuICBpZiAoc2NhbGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjYWxpbmdUeXBlOiBTY2FsaW5nVHlwZS5DUFUsXG4gICAgICBtaW5DYXBhY2l0eTogdW5kZWZpbmVkLFxuICAgICAgbWF4Q2FwYWNpdHk6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY2FsaW5nVHlwZTogc2NhbGluZy5zY2FsaW5nVHlwZSA/PyBTY2FsaW5nVHlwZS5DUFUsXG4gICAgbWluQ2FwYWNpdHk6IHNjYWxpbmcubWluQ2FwYWNpdHksXG4gICAgbWF4Q2FwYWNpdHk6IHNjYWxpbmcubWF4Q2FwYWNpdHlcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlZCBMYW1iZGEgZGVwbG95bWVudCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkTGFtYmRhRGVwbG95bWVudCB7XG4gIGNvZGU6IENvZGU7XG4gIGhhbmRsZXI6IHN0cmluZztcbiAgcnVudGltZTogUnVudGltZTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIExhbWJkYSBkZXBsb3ltZW50IGNvbmZpZ3VyYXRpb24gZnJvbSBwcm9wcy5cbiAqIEhhbmRsZXMgY29udGFpbmVyIHZzIGNvZGUgZGVwbG95bWVudCB0eXBlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMYW1iZGFEZXBsb3ltZW50KFxuICBwcm9wczogSUxhbWJkYUNvbXB1dGVQcm9wc1xuKTogUmVzb2x2ZWRMYW1iZGFEZXBsb3ltZW50IHtcbiAgaWYgKHByb3BzLmRlcGxveW1lbnQgPT09IFwiY29udGFpbmVyXCIpIHtcbiAgICBpZiAoIShwcm9wcy5lY3JSZXBvc2l0b3J5IGluc3RhbmNlb2YgUmVwb3NpdG9yeSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJlY3JSZXBvc2l0b3J5IG11c3QgYmUgYSBSZXBvc2l0b3J5IGluc3RhbmNlIGZvciBMYW1iZGEgY29tcHV0ZSB0eXBlXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjb2RlOiBDb2RlLmZyb21FY3JJbWFnZShwcm9wcy5lY3JSZXBvc2l0b3J5LCB7XG4gICAgICAgIHRhZ09yRGlnZXN0OiBDT01QVVRFX0RFRkFVTFRTLkVDUy5JTUFHRV9UQUdcbiAgICAgIH0pLFxuICAgICAgaGFuZGxlcjogSGFuZGxlci5GUk9NX0lNQUdFLFxuICAgICAgcnVudGltZTogUnVudGltZS5GUk9NX0lNQUdFXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGNvZGU6IHByb3BzLmNvZGUsXG4gICAgaGFuZGxlcjogcHJvcHMuaGFuZGxlciB8fCBDT01QVVRFX0RFRkFVTFRTLkxBTUJEQS5IQU5ETEVSLFxuICAgIHJ1bnRpbWU6IHByb3BzLnJ1bnRpbWUgfHwgQ09NUFVURV9ERUZBVUxUUy5MQU1CREEuUlVOVElNRVxuICB9O1xufVxuXG4vKipcbiAqIEZhY3RvcnkgZm9yIGNyZWF0aW5nIGNvbXB1dGUgcmVzb3VyY2VzIHdpdGggdHlwZS1zYWZlIHJldHVybiB0eXBlcy5cbiAqXG4gKiBUaGUgZmFjdG9yeSB1c2VzIG92ZXJsb2FkcyB0byBpbmZlciB0aGUgc3BlY2lmaWMgY29tcHV0ZSB0eXBlIGZyb20gcHJvcHMsXG4gKiBlbnN1cmluZyBUeXBlU2NyaXB0IHByb3ZpZGVzIG9ubHkgdGhlIHJlbGV2YW50IG1ldGhvZHMgZm9yIGVhY2ggY29tcHV0ZSB0eXBlLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFQ1MgY29tcHV0ZSAtIHJldHVybnMgRWNzQ29tcHV0ZSB3aXRoIEVDUy1zcGVjaWZpYyBtZXRob2RzXG4gKiBjb25zdCBlY3MgPSBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIldlYkFwcFwiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgZG9tYWluOiBcImFwcC5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIHNlcnZpY2VzOiBbeyBuYW1lOiBcIndlYlwiLCBjb250YWluZXJzOiBbeyBwb3J0OiAzMDAwIH1dIH1dXG4gKiB9KSk7XG4gKiBlY3MuZ2V0TG9hZEJhbGFuY2VyKCk7IC8vIEF2YWlsYWJsZSBvbiBFY3NDb21wdXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIExhbWJkYSBjb21wdXRlIC0gcmV0dXJucyBMYW1iZGFDb21wdXRlIHdpdGggTGFtYmRhLXNwZWNpZmljIG1ldGhvZHNcbiAqIGNvbnN0IGxhbWJkYSA9IGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiRm5cIiwge1xuICogICB0eXBlOiBcImxhbWJkYVwiLFxuICogICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAqICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXCIuL2xhbWJkYVwiKVxuICogfSkpO1xuICogbGFtYmRhLmdldEZ1bmN0aW9uVXJsKCk7IC8vIEF2YWlsYWJsZSBvbiBMYW1iZGFDb21wdXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVDMiBjb21wdXRlIC0gcmV0dXJucyBFYzJDb21wdXRlIHdpdGggRUMyLXNwZWNpZmljIG1ldGhvZHNcbiAqIGNvbnN0IGVjMiA9IGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiSW5zdGFuY2VcIiwge1xuICogICB0eXBlOiBcImVjMlwiLFxuICogICBpbnN0YW5jZVR5cGU6IFwidDMubWljcm9cIlxuICogfSkpO1xuICogZWMyLmdldEF1dG9TY2FsaW5nR3JvdXAoKTsgLy8gQXZhaWxhYmxlIG9uIEVjMkNvbXB1dGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXB1dGVGYWN0b3J5IHtcbiAgLy8gT3ZlcmxvYWQ6IEVDUyBwcm9wcyByZXR1cm5zIEVjc0NvbXB1dGVcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElFY3NDb21wdXRlUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBFY3NDb21wdXRlO1xuICAvLyBPdmVybG9hZDogTGFtYmRhIHByb3BzIHJldHVybnMgTGFtYmRhQ29tcHV0ZVxuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSUxhbWJkYUNvbXB1dGVQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IExhbWJkYUNvbXB1dGU7XG4gIC8vIE92ZXJsb2FkOiBFQzIgcHJvcHMgcmV0dXJucyBFYzJDb21wdXRlXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJRWMyQ29tcHV0ZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gRWMyQ29tcHV0ZTtcbiAgLy8gSW1wbGVtZW50YXRpb24gc2lnbmF0dXJlXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJQ29tcHV0ZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQW55Q29tcHV0ZSB7XG4gICAgcmV0dXJuIChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCk6IEFueUNvbXB1dGUgPT4ge1xuICAgICAgdmFsaWRhdGVDb21wdXRlUHJvcHMocHJvcHMpO1xuXG4gICAgICAvLyBBdXRvLWRlcml2ZSBhcHBOYW1lIGZyb20gQXBwIGluc3RhbmNlIGZvciBFQ1MgY29tcHV0ZVxuICAgICAgbGV0IGNvbXB1dGVQcm9wczogSUNvbXB1dGVQcm9wcyA9IHtcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHZwYzogYXBwLmdldFZwYygpLFxuICAgICAgICAgIGVjclJlcG9zaXRvcnk6IGFwcC5nZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKVxuICAgICAgICB9LFxuICAgICAgICAuLi5wcm9wc1xuICAgICAgfTtcblxuICAgICAgaWYgKGNvbXB1dGVQcm9wcy50eXBlID09PSBcImVjc1wiKSB7XG4gICAgICAgIGNvbXB1dGVQcm9wcyA9IHtcbiAgICAgICAgICAuLi5jb21wdXRlUHJvcHMsXG4gICAgICAgICAgYXBwTmFtZTogY29tcHV0ZVByb3BzLmFwcE5hbWUgPz8gYXBwLmdldE5hbWUoKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgc3BlY2lmaWMgY29tcHV0ZSBjbGFzcyBiYXNlZCBvbiB0eXBlIGRpc2NyaW1pbmF0b3JcbiAgICAgIHN3aXRjaCAoY29tcHV0ZVByb3BzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImVjc1wiOiB7XG4gICAgICAgICAgLy8gUmVnaXN0ZXIgRUNTIHNlcnZpY2VzIHdpdGggbWFuaWZlc3QgY29sbGVjdG9yIGZvciBDTEkgZGlzY292ZXJ5XG4gICAgICAgICAgY29uc3QgY29sbGVjdG9yID0gYXBwLmdldE1hbmlmZXN0Q29sbGVjdG9yKCk7XG4gICAgICAgICAgY29uc3QgY2x1c3Rlck5hbWUgPSBpZDtcbiAgICAgICAgICBjb25zdCBhcHBOYW1lID0gY29tcHV0ZVByb3BzLmFwcE5hbWUgPz8gYXBwLmdldE5hbWUoKTtcblxuICAgICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiBjb21wdXRlUHJvcHMuc2VydmljZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hbmlmZXN0U2VydmljZTogTWFuaWZlc3RTZXJ2aWNlID0ge1xuICAgICAgICAgICAgICBuYW1lOiBzZXJ2aWNlLm5hbWUsXG4gICAgICAgICAgICAgIGNsdXN0ZXJOYW1lXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBJbmNsdWRlIGRvY2tlcmZpbGVQYXRoIGlmIHNwZWNpZmllZCAobWV0YWRhdGEgZm9yIENMSSlcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlLmRvY2tlcmZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgIG1hbmlmZXN0U2VydmljZS5kb2NrZXJmaWxlUGF0aCA9IHNlcnZpY2UuZG9ja2VyZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEluY2x1ZGUgZG9ja2VyVGFyZ2V0IGlmIHNwZWNpZmllZCAobWV0YWRhdGEgZm9yIENMSSlcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlLmRvY2tlclRhcmdldCkge1xuICAgICAgICAgICAgICBtYW5pZmVzdFNlcnZpY2UuZG9ja2VyVGFyZ2V0ID0gc2VydmljZS5kb2NrZXJUYXJnZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZpbmQgY29udGFpbmVyIHBvcnQgZnJvbSBmaXJzdCBjb250YWluZXIgd2l0aCBhIHBvcnRcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcldpdGhQb3J0ID0gc2VydmljZS5jb250YWluZXJzPy5maW5kKFxuICAgICAgICAgICAgICAoYykgPT4gYy5wb3J0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyV2l0aFBvcnQ/LnBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBtYW5pZmVzdFNlcnZpY2UuY29udGFpbmVyUG9ydCA9IGNvbnRhaW5lcldpdGhQb3J0LnBvcnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFnZ3JlZ2F0ZSBzZWNyZXRzIGZyb20gYWxsIGNvbnRhaW5lcnMgKGRlZHVwbGljYXRlZClcbiAgICAgICAgICAgIGNvbnN0IGFsbFNlY3JldHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udGFpbmVyIG9mIHNlcnZpY2UuY29udGFpbmVycyA/PyBbXSkge1xuICAgICAgICAgICAgICBpZiAoY29udGFpbmVyLnNlY3JldHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3JldCBvZiBjb250YWluZXIuc2VjcmV0cykge1xuICAgICAgICAgICAgICAgICAgYWxsU2VjcmV0cy5hZGQoc2VjcmV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGxTZWNyZXRzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgIG1hbmlmZXN0U2VydmljZS5zZWNyZXRzID0gQXJyYXkuZnJvbShhbGxTZWNyZXRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSW5jbHVkZSBzc21TZWNyZXRzUGF0aCAoZXhwbGljaXQgb3IgZGVyaXZlZClcbiAgICAgICAgICAgIG1hbmlmZXN0U2VydmljZS5zc21TZWNyZXRzUGF0aCA9XG4gICAgICAgICAgICAgIHNlcnZpY2Uuc3NtU2VjcmV0c1BhdGggPz9cbiAgICAgICAgICAgICAgYC8ke2FwcE5hbWV9LyR7Y2x1c3Rlck5hbWV9LyR7c2VydmljZS5uYW1lfWA7XG5cbiAgICAgICAgICAgIGNvbGxlY3Rvci5hZGRTZXJ2aWNlKG1hbmlmZXN0U2VydmljZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgRWNzQ29tcHV0ZShzY29wZSwgaWQsIGNvbXB1dGVQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImxhbWJkYVwiOiB7XG4gICAgICAgICAgLy8gQWRkIGFwcE5hbWUgdG8gcHJvcHMgZm9yIExhbWJkYSAobmVlZGVkIGZvciBzZWNyZXRzIHBhdGggZGVyaXZhdGlvbilcbiAgICAgICAgICBjb25zdCBsYW1iZGFDb21wdXRlUHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5jb21wdXRlUHJvcHMsXG4gICAgICAgICAgICBhcHBOYW1lOiBhcHAuZ2V0TmFtZSgpXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIEFsd2F5cyByZWdpc3RlciBMYW1iZGEgd2l0aCBtYW5pZmVzdCBjb2xsZWN0b3IgZm9yIENMSSBkaXNjb3ZlcnlcbiAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgYWxsIExhbWJkYXMgYXJlIGRpc2NvdmVyYWJsZSBmb3Igc2VjcmV0cyBtYW5hZ2VtZW50LFxuICAgICAgICAgIC8vIGV2ZW4gdGhvc2UgdGhhdCBkb24ndCBjdXJyZW50bHkgaGF2ZSBzZWNyZXRzIGNvbmZpZ3VyZWRcbiAgICAgICAgICBjb25zdCBjb2xsZWN0b3IgPSBhcHAuZ2V0TWFuaWZlc3RDb2xsZWN0b3IoKTtcbiAgICAgICAgICBjb25zdCBtYW5pZmVzdExhbWJkYTogTWFuaWZlc3RMYW1iZGEgPSB7XG4gICAgICAgICAgICBuYW1lOiBpZCxcbiAgICAgICAgICAgIHNzbVNlY3JldHNQYXRoOlxuICAgICAgICAgICAgICBsYW1iZGFDb21wdXRlUHJvcHMuc3NtU2VjcmV0c1BhdGggfHxcbiAgICAgICAgICAgICAgYC8ke2xhbWJkYUNvbXB1dGVQcm9wcy5hcHBOYW1lfS9sYW1iZGEvJHtpZH1gXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsYW1iZGFDb21wdXRlUHJvcHMuc2VjcmV0cyAmJlxuICAgICAgICAgICAgbGFtYmRhQ29tcHV0ZVByb3BzLnNlY3JldHMubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbWFuaWZlc3RMYW1iZGEuc2VjcmV0cyA9IGxhbWJkYUNvbXB1dGVQcm9wcy5zZWNyZXRzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb2xsZWN0b3IuYWRkTGFtYmRhKG1hbmlmZXN0TGFtYmRhKTtcblxuICAgICAgICAgIHJldHVybiBuZXcgTGFtYmRhQ29tcHV0ZShzY29wZSwgaWQsIGxhbWJkYUNvbXB1dGVQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImVjMlwiOlxuICAgICAgICAgIHJldHVybiBuZXcgRWMyQ29tcHV0ZShzY29wZSwgaWQsIGNvbXB1dGVQcm9wcyk7XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBjb21wdXRlUHJvcHM7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFVuc3VwcG9ydGVkIGNvbXB1dGUgdHlwZTogJHtTdHJpbmcoKF9leGhhdXN0aXZlIGFzIElDb21wdXRlUHJvcHMpLnR5cGUpfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEVDUyBjb21wdXRlIHdyYXBwZXIgaW1wbGVtZW50aW5nIElFY3NDb21wdXRlLlxuICogUHJvdmlkZXMgdHlwZS1zYWZlIGFjY2VzcyB0byBFQ1Mtc3BlY2lmaWMgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgY2xhc3MgRWNzQ29tcHV0ZSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElFY3NDb21wdXRlIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbXB1dGVUeXBlID0gXCJlY3NcIiBhcyBjb25zdDtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIHJlYWRvbmx5IGVjc0NsdXN0ZXI6IEVjc0NsdXN0ZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElFY3NDb21wdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gVHJhbnNmb3JtIEVjc1NlcnZpY2VDb25maWdbXSB0byBFY3NTZXJ2aWNlUHJvcHNbXSBmb3IgRWNzQ2x1c3RlclxuICAgIGNvbnN0IHNlcnZpY2VzOiBFY3NDbHVzdGVyUHJvcHNbXCJzZXJ2aWNlc1wiXSA9IHByb3BzLnNlcnZpY2VzLm1hcChcbiAgICAgIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBidWlsZENvbnRhaW5lckNvbmZpZ3Moc2VydmljZSk7XG4gICAgICAgIGNvbnN0IHsgc2NhbGluZ1R5cGUsIG1pbkNhcGFjaXR5LCBtYXhDYXBhY2l0eSB9ID0gcmVzb2x2ZVNjYWxpbmdDb25maWcoXG4gICAgICAgICAgc2VydmljZS5zY2FsaW5nXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBzZXJ2aWNlLm5hbWUsXG4gICAgICAgICAgaW1hZ2U6IHNlcnZpY2UuaW1hZ2UsXG4gICAgICAgICAgY29udGFpbmVycyxcbiAgICAgICAgICBjcHU6IHNlcnZpY2UuY3B1LFxuICAgICAgICAgIG1lbW9yeUxpbWl0TWlCOiBzZXJ2aWNlLm1lbW9yeUxpbWl0TWlCLFxuICAgICAgICAgIGRlc2lyZWRDb3VudDogc2VydmljZS5kZXNpcmVkQ291bnQsXG4gICAgICAgICAgc2NhbGluZ1R5cGUsXG4gICAgICAgICAgbWluQ2FwYWNpdHksXG4gICAgICAgICAgbWF4Q2FwYWNpdHksXG4gICAgICAgICAgcm91dGluZzogc2VydmljZS5yb3V0aW5nLFxuICAgICAgICAgIHRhc2tSb2xlSW5saW5lUG9saWNpZXM6IHNlcnZpY2UudGFza1JvbGVJbmxpbmVQb2xpY2llcyxcbiAgICAgICAgICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llczogc2VydmljZS50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbiAgICAgICAgICBjb25uZWN0aW9uczogc2VydmljZS5jb25uZWN0aW9ucyxcbiAgICAgICAgICBjYXBhY2l0eVByb3ZpZGVyOiBzZXJ2aWNlLmNhcGFjaXR5UHJvdmlkZXIsXG4gICAgICAgICAgZWMyQ29uZmlnOiBzZXJ2aWNlLmVjMkNvbmZpZyxcbiAgICAgICAgICBzc21TZWNyZXRzUGF0aDogc2VydmljZS5zc21TZWNyZXRzUGF0aCxcbiAgICAgICAgICBkb2NrZXJUYXJnZXQ6IHNlcnZpY2UuZG9ja2VyVGFyZ2V0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEJ1aWxkIGNsdXN0ZXIgY29uZmlnXG4gICAgY29uc3QgY2x1c3RlcjogRWNzQ2x1c3RlclByb3BzW1wiY2x1c3RlclwiXSA9IHByb3BzLmNsdXN0ZXJcbiAgICAgID8ge1xuICAgICAgICAgIGRvbWFpbjogcHJvcHMuY2x1c3Rlci5kb21haW4sXG4gICAgICAgICAgbG9hZEJhbGFuY2VyOiBwcm9wcy5jbHVzdGVyLmxvYWRCYWxhbmNlcixcbiAgICAgICAgICBkaXJlY3RBY2Nlc3M6IHByb3BzLmNsdXN0ZXIuZGlyZWN0QWNjZXNzLFxuICAgICAgICAgIGRvbWFpbkNvbmZpZzogcHJvcHMuY2x1c3Rlci5kb21haW5Db25maWdcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBlY3NQcm9wczogRWNzQ2x1c3RlclByb3BzID0ge1xuICAgICAgY2x1c3Rlck5hbWU6IGlkLFxuICAgICAgYXBwTmFtZTogcHJvcHMuYXBwTmFtZSxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZWNyUmVwb3NpdG9yeTogcHJvcHMuZWNyUmVwb3NpdG9yeSB8fCBDT01QVVRFX0RFRkFVTFRTLkVDUy5GQUxMQkFDS19JTUFHRSxcbiAgICAgIGNsdXN0ZXIsXG4gICAgICBzZXJ2aWNlc1xuICAgIH07XG5cbiAgICB0aGlzLmVjc0NsdXN0ZXIgPSBuZXcgRWNzQ2x1c3RlcihzY29wZSwgYCR7aWR9RWNzYCwgZWNzUHJvcHMpO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmVjc0NsdXN0ZXIuY29ubmVjdGlvbnM7XG4gIH1cblxuICAvKiogR2V0IHRoZSBFQ1MgY2x1c3Rlci4gKi9cbiAgZ2V0Q2x1c3RlcigpOiBJQ2x1c3RlciB7XG4gICAgcmV0dXJuIHRoaXMuZWNzQ2x1c3Rlci5nZXRDbHVzdGVyKCk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIGlmIG9uZSB3YXMgY3JlYXRlZC4gKi9cbiAgZ2V0TG9hZEJhbGFuY2VyKCk6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZWNzQ2x1c3Rlci5nZXRMb2FkQmFsYW5jZXIoKTtcbiAgfVxuXG4gIC8qKiBHZXQgYSBzcGVjaWZpYyBzZXJ2aWNlIGJ5IG5hbWUuICovXG4gIGdldFNlcnZpY2UobmFtZTogc3RyaW5nKTogSUJhc2VTZXJ2aWNlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5lY3NDbHVzdGVyLmdldFNlcnZpY2UobmFtZSk7XG4gIH1cblxuICAvKiogR2V0IGFsbCBzZXJ2aWNlcyBpbiB0aGUgY2x1c3Rlci4gKi9cbiAgZ2V0QWxsU2VydmljZXMoKTogSUJhc2VTZXJ2aWNlW10ge1xuICAgIGNvbnN0IHNlcnZpY2VzTWFwID0gdGhpcy5lY3NDbHVzdGVyLmdldFNlcnZpY2VzKCk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oc2VydmljZXNNYXAudmFsdWVzKCkpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgc2VjdXJpdHkgZ3JvdXAgZm9yIHRoZSBjbHVzdGVyLiAqL1xuICBnZXRTZWN1cml0eUdyb3VwKCk6IElTZWN1cml0eUdyb3VwIHtcbiAgICAvLyBSZXR1cm4gdGhlIGZpcnN0IHNlY3VyaXR5IGdyb3VwIGZyb20gY29ubmVjdGlvbnNcbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IHRoaXMuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHM7XG4gICAgaWYgKHNlY3VyaXR5R3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2VjdXJpdHkgZ3JvdXBzIGZvdW5kIGZvciBFQ1MgY2x1c3RlclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlY3VyaXR5R3JvdXBzWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQUxCIGxpc3RlbmVyIGlmIHRoaXMgaXMgYW4gRUNTIGNvbXB1dGUgd2l0aCBBTEIuXG4gICAqL1xuICBnZXRMaXN0ZW5lcigpOiBBcHBsaWNhdGlvbkxpc3RlbmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5lY3NDbHVzdGVyLmdldExpc3RlbmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1bmRlcmx5aW5nIEVDUyBjbHVzdGVyIGNvbnN0cnVjdC5cbiAgICovXG4gIGdldEVjc0NsdXN0ZXIoKTogRWNzQ2x1c3RlciB7XG4gICAgcmV0dXJuIHRoaXMuZWNzQ2x1c3RlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgZWNzOkV4ZWN1dGVDb21tYW5kIHBlcm1pc3Npb24gZm9yIEVDUyBzZXJ2aWNlcy5cbiAgICovXG4gIGdyYW50RXhlY3V0ZUNvbW1hbmQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IEdyYW50IHtcbiAgICByZXR1cm4gR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IFtcImVjczpFeGVjdXRlQ29tbWFuZFwiXSxcbiAgICAgIHJlc291cmNlQXJuczogW1wiKlwiXVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogTGFtYmRhIGNvbXB1dGUgd3JhcHBlciBpbXBsZW1lbnRpbmcgSUxhbWJkYUNvbXB1dGUuXG4gKiBQcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIExhbWJkYS1zcGVjaWZpYyByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYW1iZGFDb21wdXRlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUxhbWJkYUNvbXB1dGUge1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcHV0ZVR5cGUgPSBcImxhbWJkYVwiIGFzIGNvbnN0O1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbGFtYmRhRnVuY3Rpb246IExhbWJkYUZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJTGFtYmRhQ29tcHV0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgY29kZSwgaGFuZGxlciwgcnVudGltZSB9ID0gcmVzb2x2ZUxhbWJkYURlcGxveW1lbnQocHJvcHMpO1xuXG4gICAgLy8gQ29udmVydCBwcmVzZW5jZS1iYXNlZCBmdW5jdGlvblVybCBjb25maWcgdG8gbGVnYWN5IGJvb2xlYW4gZm9ybWF0XG4gICAgY29uc3QgZnVuY3Rpb25VcmxDb25maWcgPSBwcm9wcy5mdW5jdGlvblVybDtcbiAgICBjb25zdCBlbmFibGVGdW5jdGlvblVybCA9XG4gICAgICBmdW5jdGlvblVybENvbmZpZyAhPT0gdW5kZWZpbmVkICYmIGZ1bmN0aW9uVXJsQ29uZmlnICE9PSBmYWxzZTtcbiAgICBjb25zdCBmdW5jdGlvblVybEF1dGhUeXBlID1cbiAgICAgIGVuYWJsZUZ1bmN0aW9uVXJsICYmIHR5cGVvZiBmdW5jdGlvblVybENvbmZpZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IGZ1bmN0aW9uVXJsQ29uZmlnLmF1dGhUeXBlXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGZ1bmN0aW9uVXJsQ29ycyA9XG4gICAgICBlbmFibGVGdW5jdGlvblVybCAmJiB0eXBlb2YgZnVuY3Rpb25VcmxDb25maWcgPT09IFwib2JqZWN0XCJcbiAgICAgICAgPyBmdW5jdGlvblVybENvbmZpZy5jb3JzXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGZ1bmN0aW9uVXJsSW52b2tlTW9kZSA9XG4gICAgICBlbmFibGVGdW5jdGlvblVybCAmJiB0eXBlb2YgZnVuY3Rpb25VcmxDb25maWcgPT09IFwib2JqZWN0XCJcbiAgICAgICAgPyBmdW5jdGlvblVybENvbmZpZy5pbnZva2VNb2RlXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgbGFtYmRhUHJvcHMgPSB7XG4gICAgICBjb2RlLFxuICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICBoYW5kbGVyLFxuICAgICAgcnVudGltZSxcbiAgICAgIGFyY2hpdGVjdHVyZTogcHJvcHMuYXJjaGl0ZWN0dXJlLFxuICAgICAgdGltZW91dDogcHJvcHMudGltZW91dCxcbiAgICAgIG1lbW9yeVNpemU6IHByb3BzLm1lbW9yeVNpemUsXG4gICAgICBsYW1iZGFEZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICByb2xlRGVzY3JpcHRpb246IHByb3BzLnJvbGVEZXNjcmlwdGlvbixcbiAgICAgIGlubGluZVBvbGljeTogcHJvcHMuaW5saW5lUG9saWN5IHx8IFtdLFxuICAgICAgZW5hYmxlRnVuY3Rpb25VcmwsXG4gICAgICBmdW5jdGlvblVybEF1dGhUeXBlLFxuICAgICAgZnVuY3Rpb25VcmxDb3JzLFxuICAgICAgZnVuY3Rpb25VcmxJbnZva2VNb2RlLFxuICAgICAgc2NoZWR1bGVFeHByZXNzaW9uOiBwcm9wcy5zY2hlZHVsZUV4cHJlc3Npb24sXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZTogcHJvcHMuZXBoZW1lcmFsU3RvcmFnZVNpemUsXG4gICAgICBzZWNyZXRzOiBwcm9wcy5zZWNyZXRzLFxuICAgICAgc3NtU2VjcmV0c1BhdGg6IHByb3BzLnNzbVNlY3JldHNQYXRoLFxuICAgICAgc2VjcmV0c0ltcG9ydDogcHJvcHMuc2VjcmV0c0ltcG9ydCxcbiAgICAgIGVudmlyb25tZW50OiBwcm9wcy5lbnZpcm9ubWVudCxcbiAgICAgIGFwcE5hbWU6IHByb3BzLmFwcE5hbWUsXG4gICAgICBmdW5jdGlvbk5hbWU6IGlkXG4gICAgfTtcblxuICAgIHRoaXMubGFtYmRhRnVuY3Rpb24gPSBuZXcgTGFtYmRhRnVuY3Rpb24oc2NvcGUsIGAke2lkfUxhbWJkYWAsIGxhbWJkYVByb3BzKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5sYW1iZGFGdW5jdGlvbi5jb25uZWN0aW9ucztcblxuICAgIC8vIFByb2Nlc3MgY29ubmVjdGlvbnMgdXNpbmcgdGhlIHVuaWZpZWQgY29ubmVjdG9yIGludGVyZmFjZVxuICAgIGlmIChwcm9wcy5jb25uZWN0aW9ucyAmJiBwcm9wcy5jb25uZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwcm9jZXNzQ29ubmVjdGlvbnMoXG4gICAgICAgICAgcHJvcHMuY29ubmVjdGlvbnMsXG4gICAgICAgICAgdGhpcy5sYW1iZGFGdW5jdGlvbiwgLy8gSUdyYW50YWJsZSAoZXhlY3V0aW9uIHJvbGUpXG4gICAgICAgICAgdGhpcy5sYW1iZGFGdW5jdGlvbiAvLyBJQ29ubmVjdGFibGUgKHNlY3VyaXR5IGdyb3VwKVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGYWlsZWQgdG8gcHJvY2VzcyBjb25uZWN0aW9ucyBmb3IgTGFtYmRhICcke2lkfSc6ICR7XG4gICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgICAgICB9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBMYW1iZGEgZnVuY3Rpb24gYnkgbmFtZS5cbiAgICogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBmdW5jdGlvbiwgbmFtZSBpcyBpZ25vcmVkLlxuICAgKi9cbiAgZ2V0RnVuY3Rpb24oX25hbWU/OiBzdHJpbmcpOiBJRnVuY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxhbWJkYUZ1bmN0aW9uO1xuICB9XG5cbiAgLyoqIEdldCBhbGwgTGFtYmRhIGZ1bmN0aW9ucy4gKi9cbiAgZ2V0QWxsRnVuY3Rpb25zKCk6IElGdW5jdGlvbltdIHtcbiAgICByZXR1cm4gW3RoaXMubGFtYmRhRnVuY3Rpb25dO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVuY3Rpb24gVVJMIGZvciBhIExhbWJkYSBmdW5jdGlvbi5cbiAgICovXG4gIGdldEZ1bmN0aW9uVXJsKF9uYW1lPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5sYW1iZGFGdW5jdGlvbi5nZXRGdW5jdGlvblVybCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IGludm9rZSBwZXJtaXNzaW9ucyB0byBhIGdyYW50ZWUuXG4gICAqL1xuICBncmFudEludm9rZShncmFudGVlOiBJR3JhbnRhYmxlLCBfZnVuY3Rpb25OYW1lPzogc3RyaW5nKTogR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmxhbWJkYUZ1bmN0aW9uLmdyYW50SW52b2tlKGdyYW50ZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc2VjdXJpdHkgZ3JvdXAgZm9yIFZQQy1lbmFibGVkIExhbWJkYSBmdW5jdGlvbnMuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBMYW1iZGEgaXMgbm90IFZQQy1lbmFibGVkLlxuICAgKi9cbiAgZ2V0U2VjdXJpdHlHcm91cCgpOiBJU2VjdXJpdHlHcm91cCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VjdXJpdHlHcm91cHMgPSB0aGlzLmNvbm5lY3Rpb25zLnNlY3VyaXR5R3JvdXBzO1xuICAgIHJldHVybiBzZWN1cml0eUdyb3Vwcy5sZW5ndGggPiAwID8gc2VjdXJpdHlHcm91cHNbMF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1bmRlcmx5aW5nIExhbWJkYSBmdW5jdGlvbiBjb25zdHJ1Y3QuXG4gICAqL1xuICBnZXRMYW1iZGFGdW5jdGlvbigpOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMubGFtYmRhRnVuY3Rpb247XG4gIH1cbn1cblxuLyoqXG4gKiBFQzIgY29tcHV0ZSB3cmFwcGVyIGltcGxlbWVudGluZyBJRWMyQ29tcHV0ZS5cbiAqIFByb3ZpZGVzIHR5cGUtc2FmZSBhY2Nlc3MgdG8gRUMyLXNwZWNpZmljIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVjMkNvbXB1dGUgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJRWMyQ29tcHV0ZSB7XG4gIHB1YmxpYyByZWFkb25seSBjb21wdXRlVHlwZSA9IFwiZWMyXCIgYXMgY29uc3Q7XG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlYzJJbnN0YW5jZTogRWMySW5zdGFuY2U7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElFYzJDb21wdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZW5hYmxlU1NIID0gcHJvcHMuc3NoICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuc3NoICE9PSBmYWxzZTtcblxuICAgIGNvbnN0IGVjMlByb3BzID0ge1xuICAgICAgc2VydmljZU5hbWU6IGAke2lkfVNlcnZpY2VgLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5pbnN0YW5jZVR5cGUgfHwgQ09NUFVURV9ERUZBVUxUUy5FQzIuSU5TVEFOQ0VfVFlQRSxcbiAgICAgIGVuYWJsZVNTSCxcbiAgICAgIHVzZXJEYXRhOiBwcm9wcy51c2VyRGF0YSxcbiAgICAgIG1hY2hpbmVJbWFnZTogcHJvcHMubWFjaGluZUltYWdlLFxuICAgICAgbWluQ2FwYWNpdHk6IHByb3BzLm1pbkNhcGFjaXR5IHx8IENPTVBVVEVfREVGQVVMVFMuRUMyLk1JTl9DQVBBQ0lUWSxcbiAgICAgIG1heENhcGFjaXR5OiBwcm9wcy5tYXhDYXBhY2l0eSB8fCBDT01QVVRFX0RFRkFVTFRTLkVDMi5NQVhfQ0FQQUNJVFksXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IHByb3BzLnNwb3RDYXBhY2l0eVBlcmNlbnRhZ2VcbiAgICB9O1xuXG4gICAgdGhpcy5lYzJJbnN0YW5jZSA9IG5ldyBFYzJJbnN0YW5jZShzY29wZSwgYCR7aWR9RWMyYCwgZWMyUHJvcHMpO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmVjMkluc3RhbmNlLmNvbm5lY3Rpb25zO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgQXV0byBTY2FsaW5nIEdyb3VwLiAqL1xuICBnZXRBdXRvU2NhbGluZ0dyb3VwKCk6IElBdXRvU2NhbGluZ0dyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5lYzJJbnN0YW5jZS5nZXRBdXRvU2NhbGluZ0dyb3VwKCk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBzZWN1cml0eSBncm91cC4gKi9cbiAgZ2V0U2VjdXJpdHlHcm91cCgpOiBJU2VjdXJpdHlHcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZWMySW5zdGFuY2UuYXNnU2VjdXJpdHlHcm91cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgRUMyIGluc3RhbmNlIGNvbnN0cnVjdC5cbiAgICovXG4gIGdldEVjMkluc3RhbmNlKCk6IEVjMkluc3RhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5lYzJJbnN0YW5jZTtcbiAgfVxufVxuXG4vLyBSZS1leHBvcnQgdHlwZSBndWFyZHMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgeyBpc0NvbXB1dGUsIGlzRWNzQ29tcHV0ZSwgaXNMYW1iZGFDb21wdXRlLCBpc0VjMkNvbXB1dGUgfTtcbmV4cG9ydCB0eXBlIHsgSUVjc0NvbXB1dGUsIElMYW1iZGFDb21wdXRlLCBJRWMyQ29tcHV0ZSwgQW55Q29tcHV0ZSB9O1xuIl19
627
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1S0Esb0RBRUM7QUFFRCxvRUFJQztBQW93QkQsc0RBbUJDO0FBaUJELG9EQXNCQztBQWVELDBEQXNCQztBQTdnQ0QsaURBQWlEO0FBQ2pELGlEQU02QjtBQUM3Qix1REFTZ0M7QUFDaEMsaURBTTZCO0FBTzdCLDJDQUF1QztBQUV2Qyw4QkFBOEI7QUFDOUIsd0RBU2lDO0FBcThDeEIsMEZBejhDUCxzQkFBUyxPQXk4Q087QUFBRSw2RkF4OENsQix5QkFBWSxPQXc4Q2tCO0FBQUUsZ0dBdjhDaEMsNEJBQWUsT0F1OENnQztBQUFFLDZGQXQ4Q2pELHlCQUFZLE9BczhDaUQ7QUFuOEMvRCxxREFBc0Q7QUFHdEQseUVBR3lDO0FBTXpDLHlEQU15QztBQVFoQyw0RkFaUCxpQkFBVyxPQVlPO0FBUHBCLHlEQUE4RDtBQUM5RCwrREFBb0U7QUEwQnZELFFBQUEsbUJBQW1CLEdBQTJDO0lBQ3pFLEdBQUcsRUFBRTtRQUNILFdBQVcsRUFBRSxFQUFFO1FBQ2YsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFO1FBQ2xELG1CQUFtQixFQUFFLElBQUk7UUFDekIsV0FBVyxFQUFFLElBQUk7S0FDbEI7SUFDRCxHQUFHLEVBQUU7UUFDSCxXQUFXLEVBQUUsRUFBRTtRQUNmLGNBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtRQUNsRCxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLFdBQVcsRUFBRSxJQUFJO0tBQ2xCO0lBQ0QsTUFBTSxFQUFFO1FBQ04sV0FBVyxFQUFFLENBQUM7UUFDZCxjQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUU7UUFD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WUFDZixXQUFXLEVBQUUsR0FBRyxFQUFFLFNBQVM7WUFDM0IsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksd0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWE7WUFDdEUsU0FBUztZQUNULFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksd0JBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVk7WUFDbkUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksd0JBQWdCLENBQUMsR0FBRyxDQUFDLFlBQVk7WUFDbkUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2Qsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQjtTQUNyRCxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGlCQUFXLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQTNDRCxnQ0EyQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIFJlcG9zaXRvcnlJbWFnZSxcbiAgdHlwZSBJQ2x1c3RlcixcbiAgdHlwZSBJQmFzZVNlcnZpY2Vcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjclwiO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbnMsXG4gIHR5cGUgSVZwYyxcbiAgdHlwZSBVc2VyRGF0YSxcbiAgdHlwZSBJTWFjaGluZUltYWdlLFxuICB0eXBlIElTZWN1cml0eUdyb3VwXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBSdW50aW1lLFxuICBIYW5kbGVyLFxuICB0eXBlIEFyY2hpdGVjdHVyZSxcbiAgdHlwZSBGdW5jdGlvblVybEF1dGhUeXBlLFxuICB0eXBlIEZ1bmN0aW9uVXJsQ29yc09wdGlvbnMsXG4gIHR5cGUgSUZ1bmN0aW9uLFxuICB0eXBlIEludm9rZU1vZGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7XG4gIHR5cGUgUG9saWN5U3RhdGVtZW50LFxuICB0eXBlIFBvbGljeURvY3VtZW50LFxuICB0eXBlIElNYW5hZ2VkUG9saWN5LFxuICB0eXBlIElHcmFudGFibGUsXG4gIEdyYW50XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICB0eXBlIElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcixcbiAgdHlwZSBBcHBsaWNhdGlvbkxpc3RlbmVyXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHsgdHlwZSBJQXV0b1NjYWxpbmdHcm91cCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXV0b3NjYWxpbmdcIjtcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLy8gSW1wb3J0IHR5cGUtc2FmZSBpbnRlcmZhY2VzXG5pbXBvcnQge1xuICB0eXBlIElFY3NDb21wdXRlLFxuICB0eXBlIElMYW1iZGFDb21wdXRlLFxuICB0eXBlIElFYzJDb21wdXRlLFxuICB0eXBlIEFueUNvbXB1dGUsXG4gIGlzQ29tcHV0ZSxcbiAgaXNFY3NDb21wdXRlLFxuICBpc0xhbWJkYUNvbXB1dGUsXG4gIGlzRWMyQ29tcHV0ZVxufSBmcm9tIFwiLi9pbnRlcmZhY2VzL2NvbXB1dGUuanNcIjtcbmltcG9ydCB7IHR5cGUgQ29ubmVjdGlvblNwZWMgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2Nvbm5lY3Rvci5qc1wiO1xuaW1wb3J0IHsgcHJvY2Vzc0Nvbm5lY3Rpb25zIH0gZnJvbSBcIi4vY29ubmVjdGlvbnMuanNcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCB7XG4gIEZqYWxsTG9nZ2VyLFxuICB3YXJuSWZQcm9wZXJ0aWVzSWdub3JlZFxufSBmcm9tIFwiLi4vLi4vdXRpbHMvdmFsaWRhdGlvbkxvZ2dlci5qc1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBNYW5pZmVzdFNlcnZpY2UsXG4gIHR5cGUgTWFuaWZlc3RMYW1iZGFcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL21hbmlmZXN0V3JpdGVyLmpzXCI7XG5cbmltcG9ydCBFY3NDbHVzdGVyLCB7XG4gIHR5cGUgRWNzQ2x1c3RlclByb3BzLFxuICBTY2FsaW5nVHlwZSxcbiAgdHlwZSBEb21haW5Db25maWcsXG4gIHR5cGUgRWNzQ2FwYWNpdHlQcm92aWRlcixcbiAgdHlwZSBFYzJDYXBhY2l0eUNvbmZpZ1xufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2Vjc1wiO1xuaW1wb3J0IHsgRWMySW5zdGFuY2UgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2VjMlwiO1xuaW1wb3J0IHsgTGFtYmRhRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9jb21wdXRlL2xhbWJkYVwiO1xuaW1wb3J0IHsgdHlwZSBTZWNyZXRJbXBvcnQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5cbmV4cG9ydCB0eXBlIENvbXB1dGVUeXBlID0gXCJlY3NcIiB8IFwiZWMyXCIgfCBcImxhbWJkYVwiO1xuXG4vLyBSZS1leHBvcnQgZnJvbSBlY3MudHMgdG8gbWFpbnRhaW4gc2luZ2xlIHNvdXJjZSBvZiB0cnV0aFxuZXhwb3J0IHsgU2NhbGluZ1R5cGUgfTtcbmV4cG9ydCB0eXBlIHsgRWNzQ2FwYWNpdHlQcm92aWRlciwgRWMyQ2FwYWNpdHlDb25maWcgfTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGRlZmF1bHRzIGZvciBlYWNoIGNvbXB1dGUgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wdXRlVHlwZUNvbmZpZyB7XG4gIC8qKiBEZWZhdWx0IHBvcnQgZm9yIHRoZSBjb21wdXRlIHR5cGUuIEVDUzogODAsIEVDMjogMjIsIExhbWJkYTogMCAobm8gcG9ydCkgKi9cbiAgZGVmYXVsdFBvcnQ6IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgc2NhbGluZyBsaW1pdHMgKi9cbiAgZGVmYXVsdFNjYWxpbmc6IHtcbiAgICBtaW5DYXBhY2l0eTogbnVtYmVyO1xuICAgIG1heENhcGFjaXR5OiBudW1iZXI7XG4gIH07XG4gIC8qKiBXaGV0aGVyIHRoaXMgY29tcHV0ZSB0eXBlIHN1cHBvcnRzIHNlY3VyaXR5IGdyb3VwIGNvbm5lY3Rpb25zICovXG4gIHN1cHBvcnRzQ29ubmVjdGlvbnM6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoaXMgY29tcHV0ZSB0eXBlIHJlcXVpcmVzIGEgVlBDICovXG4gIHJlcXVpcmVzVnBjOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQ09NUFVURV9UWVBFX0NPTkZJRzogUmVjb3JkPENvbXB1dGVUeXBlLCBDb21wdXRlVHlwZUNvbmZpZz4gPSB7XG4gIGVjczoge1xuICAgIGRlZmF1bHRQb3J0OiA4MCxcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDUgfSxcbiAgICBzdXBwb3J0c0Nvbm5lY3Rpb25zOiB0cnVlLFxuICAgIHJlcXVpcmVzVnBjOiB0cnVlXG4gIH0sXG4gIGVjMjoge1xuICAgIGRlZmF1bHRQb3J0OiAyMixcbiAgICBkZWZhdWx0U2NhbGluZzogeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDMgfSxcbiAgICBzdXBwb3J0c0Nvbm5lY3Rpb25zOiB0cnVlLFxuICAgIHJlcXVpcmVzVnBjOiB0cnVlXG4gIH0sXG4gIGxhbWJkYToge1xuICAgIGRlZmF1bHRQb3J0OiAwLFxuICAgIGRlZmF1bHRTY2FsaW5nOiB7IG1pbkNhcGFjaXR5OiAwLCBtYXhDYXBhY2l0eTogMTAwIH0sXG4gICAgc3VwcG9ydHNDb25uZWN0aW9uczogZmFsc2UsXG4gICAgcmVxdWlyZXNWcGM6IGZhbHNlXG4gIH1cbn07XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgRUNTIGNhcGFjaXR5IHByb3ZpZGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NDYXBhY2l0eVByb3ZpZGVyQ29uZmlnIHtcbiAgLyoqIFdoZXRoZXIgdGhpcyB1c2VzIFNwb3QgcHJpY2luZyAqL1xuICB1c2VzU3BvdDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBydW5zIG9uIEVDMiBpbnN0YW5jZXMgKHZzIHNlcnZlcmxlc3MgRmFyZ2F0ZSkgKi9cbiAgdXNlc0VjMkluc3RhbmNlczogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEVDU19DQVBBQ0lUWV9QUk9WSURFUl9DT05GSUc6IFJlY29yZDxcbiAgRWNzQ2FwYWNpdHlQcm92aWRlcixcbiAgRWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZ1xuPiA9IHtcbiAgRkFSR0FURToge1xuICAgIHVzZXNTcG90OiBmYWxzZSxcbiAgICB1c2VzRWMySW5zdGFuY2VzOiBmYWxzZVxuICB9LFxuICBGQVJHQVRFX1NQT1Q6IHtcbiAgICB1c2VzU3BvdDogdHJ1ZSxcbiAgICB1c2VzRWMySW5zdGFuY2VzOiBmYWxzZVxuICB9LFxuICBFQzI6IHtcbiAgICB1c2VzU3BvdDogZmFsc2UsXG4gICAgdXNlc0VjMkluc3RhbmNlczogdHJ1ZVxuICB9XG59O1xuXG4vKipcbiAqIERlZmF1bHQgdmFsdWVzIGZvciBjb21wdXRlIHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXG4gKiBDZW50cmFsaXNlZCBjb25zdGFudHMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgY29kZWJhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QVVRFX0RFRkFVTFRTID0ge1xuICBFQzI6IHtcbiAgICBJTlNUQU5DRV9UWVBFOiBcInQzLm1pY3JvXCIsXG4gICAgTUlOX0NBUEFDSVRZOiAxLFxuICAgIE1BWF9DQVBBQ0lUWTogMVxuICB9LFxuICBFQ1M6IHtcbiAgICAvKiogQVdTIHNhbXBsZSBpbWFnZSB1c2VkIHdoZW4gbm8gRUNSIHJlcG9zaXRvcnkgaXMgcHJvdmlkZWQgKi9cbiAgICBGQUxMQkFDS19JTUFHRTogXCJhbWF6b24vYW1hem9uLWVjcy1zYW1wbGVcIixcbiAgICAvKiogRGVmYXVsdCB0YWcgZm9yIEVDUiBpbWFnZXMgKi9cbiAgICBJTUFHRV9UQUc6IFwibGF0ZXN0XCJcbiAgfSxcbiAgTEFNQkRBOiB7XG4gICAgSEFORExFUjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgUlVOVElNRTogUnVudGltZS5OT0RFSlNfMjJfWFxuICB9XG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcHV0ZVR5cGVDb25maWcodHlwZTogQ29tcHV0ZVR5cGUpOiBDb21wdXRlVHlwZUNvbmZpZyB7XG4gIHJldHVybiBDT01QVVRFX1RZUEVfQ09ORklHW3R5cGVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWNzQ2FwYWNpdHlQcm92aWRlckNvbmZpZyhcbiAgcHJvdmlkZXI6IEVjc0NhcGFjaXR5UHJvdmlkZXJcbik6IEVjc0NhcGFjaXR5UHJvdmlkZXJDb25maWcge1xuICByZXR1cm4gRUNTX0NBUEFDSVRZX1BST1ZJREVSX0NPTkZJR1twcm92aWRlcl07XG59XG5cbi8vIFJlLWV4cG9ydCBMYW1iZGEgdHlwZXMgZnJvbSBDREsgZm9yIHVzZXIgY29udmVuaWVuY2VcbmV4cG9ydCB7XG4gIEFyY2hpdGVjdHVyZSxcbiAgSHR0cE1ldGhvZCxcbiAgSW52b2tlTW9kZSxcbiAgdHlwZSBGdW5jdGlvblVybENvcnNPcHRpb25zXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgYSBjb250YWluZXIgaW4gYW4gRUNTIHRhc2suXG4gKlxuICogRm9yIHNpbmdsZS1jb250YWluZXIgc2VydmljZXMsIGBuYW1lYCBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gYCR7c2VydmljZU5hbWV9Q29udGFpbmVyYC5cbiAqIEZvciBtdWx0aS1jb250YWluZXIgdGFza3MsIHRoZSBmaXJzdCBjb250YWluZXIgd2l0aCBhIGBwb3J0YCBpcyB0aGUgKipwcmltYXJ5IGNvbnRhaW5lcioqXG4gKiB0aGF0IHJlY2VpdmVzIGxvYWQgYmFsYW5jZXIgdHJhZmZpYy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2luZ2xlIGNvbnRhaW5lciAobmFtZSBhdXRvLWdlbmVyYXRlZClcbiAqIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTXVsdGktY29udGFpbmVyIHdpdGggc2lkZWNhcnNcbiAqIGNvbnRhaW5lcnM6IFtcbiAqICAgeyBuYW1lOiBcImFwcFwiLCBwb3J0OiAzMDAwIH0sICAgICAgICAgICAgICAgICAgICAvLyBQcmltYXJ5IC0gcmVjZWl2ZXMgQUxCIHRyYWZmaWNcbiAqICAgeyBuYW1lOiBcImRhdGFkb2dcIiwgaW1hZ2U6IFwiZGF0YWRvZy9hZ2VudFwiIH0gICAgIC8vIFNpZGVjYXIgLSBtb25pdG9yaW5nXG4gKiBdXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ29udGFpbmVyQ29uZmlnIHtcbiAgLyoqIENvbnRhaW5lciBuYW1lLiBPcHRpb25hbCBmb3Igc2luZ2xlLWNvbnRhaW5lciBzZXJ2aWNlcy4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIENvbnRhaW5lciBpbWFnZS4gT3B0aW9uczpcbiAgICogLSBPbWl0OiBVc2VzIGFwcCdzIGRlZmF1bHQgRUNSIHJlcG9zaXRvcnkgKHByaW1hcnkgY29udGFpbmVyIG9ubHkpXG4gICAqIC0gc3RyaW5nOiBFQ1IgcmVwb3NpdG9yeSBuYW1lIG9yIHB1YmxpYyBpbWFnZSBVUkxcbiAgICogLSBSZXBvc2l0b3J5OiBDREsgRUNSIFJlcG9zaXRvcnkgY29uc3RydWN0XG4gICAqL1xuICBpbWFnZT86IHN0cmluZyB8IFJlcG9zaXRvcnk7XG4gIC8qKlxuICAgKiBQb3J0IHRoZSBjb250YWluZXIgbGlzdGVucyBvbi5cbiAgICogVGhlIGZpcnN0IGNvbnRhaW5lciB3aXRoIGEgcG9ydCBiZWNvbWVzIHRoZSAqKnByaW1hcnkgY29udGFpbmVyKipcbiAgICogYW5kIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgbG9hZCBiYWxhbmNlci5cbiAgICovXG4gIHBvcnQ/OiBudW1iZXI7XG4gIC8qKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgKi9cbiAgZW52aXJvbm1lbnQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKipcbiAgICogU2VjcmV0cyBmcm9tIEFXUyBTU00gUGFyYW1ldGVyIFN0b3JlLlxuICAgKiBBcnJheSBvZiBzZWNyZXQgbmFtZXMgdGhhdCB3aWxsIGJlIGZldGNoZWQgZnJvbSB0aGUgc2VydmljZSdzIFNTTSBuYW1lc3BhY2UuXG4gICAqIFRoZSBuYW1lc3BhY2UgcGF0aCBpcyBhdXRvLWRldGVybWluZWQgZnJvbSBhcHAvY2x1c3Rlci9zZXJ2aWNlIG5hbWVzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBTZWNyZXRzIGF0IC9teWFwcC9hcGktY2x1c3Rlci91c2Vycy9BUElfS0VZIGFuZCAvbXlhcHAvYXBpLWNsdXN0ZXIvdXNlcnMvREJfUEFTU1dPUkRcbiAgICogc2VjcmV0czogW1wiQVBJX0tFWVwiLCBcIkRCX1BBU1NXT1JEXCJdXG4gICAqL1xuICBzZWNyZXRzPzogc3RyaW5nW107XG4gIC8qKiBTZWNyZXRzIGltcG9ydGVkIGZyb20gb3RoZXIgQ0RLIHJlc291cmNlcyAoQVdTIFNlY3JldHMgTWFuYWdlcikgKi9cbiAgc2VjcmV0c0ltcG9ydD86IFJlY29yZDxzdHJpbmcsIFNlY3JldEltcG9ydD47XG4gIC8qKiBDb21tYW5kIHRvIHJ1biBpbiB0aGUgY29udGFpbmVyICovXG4gIGNvbW1hbmQ/OiBzdHJpbmdbXTtcbiAgLyoqIEVudHJ5IHBvaW50IGZvciB0aGUgY29udGFpbmVyICovXG4gIGVudHJ5UG9pbnQ/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBjb250YWluZXIgaXMgZXNzZW50aWFsLlxuICAgKiBJZiBhbiBlc3NlbnRpYWwgY29udGFpbmVyIHN0b3BzLCBhbGwgY29udGFpbmVycyBpbiB0aGUgdGFzayBzdG9wLlxuICAgKiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICBlc3NlbnRpYWw/OiBib29sZWFuO1xuICAvKipcbiAgICogSGVhbHRoIGNoZWNrIGNvbmZpZ3VyYXRpb24uXG4gICAqIERlZmF1bHQ6IEZvciBwcmltYXJ5IGNvbnRhaW5lciB3aXRoIHBvcnQsIHVzZXMgY3VybCBoZWFsdGggY2hlY2suXG4gICAqL1xuICBoZWFsdGhDaGVjaz86IHtcbiAgICBjb21tYW5kOiBzdHJpbmdbXTtcbiAgICBpbnRlcnZhbD86IG51bWJlcjtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIHJldHJpZXM/OiBudW1iZXI7XG4gICAgc3RhcnRQZXJpb2Q/OiBudW1iZXI7XG4gIH07XG59XG5cbi8qKlxuICogRUNTIHNjYWxpbmcgY29uZmlndXJhdGlvbi5cbiAqIC0gT21pdDogZW5hYmxlZCB3aXRoIGRlZmF1bHRzXG4gKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICogLSBgeyBtaW5DYXBhY2l0eTogMiwgbWF4Q2FwYWNpdHk6IDEwIH1gOiBjdXN0b20gc2NhbGluZ1xuICogLSBgZmFsc2VgOiBleHBsaWNpdGx5IGRpc2FibGVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzU2NhbGluZ0NvbmZpZyB7XG4gIG1pbkNhcGFjaXR5PzogbnVtYmVyO1xuICBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgc2NhbGluZ1R5cGU/OiBTY2FsaW5nVHlwZTtcbn1cblxuLyoqXG4gKiBDbHVzdGVyLWxldmVsIGNvbmZpZ3VyYXRpb24uXG4gKiBDb250cm9scyB0aGUgc2hhcmVkIEFMQiBmb3IgYWxsIHNlcnZpY2VzIGluIHRoaXMgY2x1c3Rlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY3NDbHVzdGVyQ29uZmlnIHtcbiAgLyoqXG4gICAqIERvbWFpbiBmb3IgSFRUUFMgYWNjZXNzLlxuICAgKiAtIE9taXQ6IEFMQiBjcmVhdGVkIHdpdGggZGVmYXVsdCBETlMgKCouZWxiLmFtYXpvbmF3cy5jb20pXG4gICAqIC0gU3BlY2lmaWVkOiBDcmVhdGVzIEFDTSBjZXJ0aWZpY2F0ZSArIFJvdXRlNTMgRE5TIEEgcmVjb3JkXG4gICAqL1xuICBkb21haW4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvYWQgYmFsYW5jZXIgY29uZmlndXJhdGlvbi5cbiAgICogLSBPbWl0IG9yIFwicHVibGljXCI6IEludGVybmV0LWZhY2luZyBBTEIgKGRlZmF1bHQpXG4gICAqIC0gXCJpbnRlcm5hbFwiOiBWUEMtb25seSBBTEJcbiAgICogLSBmYWxzZTogTm8gQUxCIChmb3Igd29ya2Vycy9iYWNrZ3JvdW5kIHByb2Nlc3NvcnMpXG4gICAqL1xuICBsb2FkQmFsYW5jZXI/OiBmYWxzZSB8IFwicHVibGljXCIgfCBcImludGVybmFsXCI7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBkaXJlY3QgRUMyIGFjY2VzcyB3aXRob3V0IEFMQi5cbiAgICogVXNlcyBob3N0IG5ldHdvcmsgbW9kZSBmb3IgcHJlZGljdGFibGUgcG9ydHMuXG4gICAqIEFjY2VzcyB2aWEgRUMyIHB1YmxpYyBJUCBhdCBjb250YWluZXIgcG9ydC5cbiAgICovXG4gIGRpcmVjdEFjY2Vzcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkdmFuY2VkIGRvbWFpbiBjb25maWd1cmF0aW9uIGZvciByb3V0aW5nIHBvbGljaWVzIChsYXRlbmN5LCB3ZWlnaHRlZCwgZ2VvKS5cbiAgICogT25seSB1c2VkIHdoZW4gZG9tYWluIGlzIHNwZWNpZmllZC5cbiAgICogQWxsb3dzIGZvciBtdWx0aS1yZWdpb24gZGVwbG95bWVudHMgd2l0aCBhZHZhbmNlZCBETlMgcm91dGluZy5cbiAgICovXG4gIGRvbWFpbkNvbmZpZz86IERvbWFpbkNvbmZpZztcbn1cblxuLyoqXG4gKiBSb3V0aW5nIGNvbmZpZ3VyYXRpb24gZm9yIHBhdGgvaG9zdC1iYXNlZCByb3V0aW5nIG9uIHRoZSBBTEIuXG4gKiBSZXF1aXJlZCB3aGVuIGNsdXN0ZXIgaGFzIG11bHRpcGxlIHNlcnZpY2VzIHdpdGggcG9ydHMuXG4gKiBPcHRpb25hbCBmb3Igc2luZ2xlIHNlcnZpY2UgKGdldHMgYWxsIHRyYWZmaWMgYXV0b21hdGljYWxseSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzUm91dGluZ0NvbmZpZyB7XG4gIC8qKlxuICAgKiBQYXRoIHBhdHRlcm4gZm9yIHJvdXRpbmcgKGUuZy4sIFwiL2FwaS8qXCIsIFwiL3VzZXJzLypcIikuXG4gICAqIFVzZXMgQUxCIHBhdGgtYmFzZWQgcm91dGluZy5cbiAgICovXG4gIHBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvc3QgaGVhZGVyIGZvciByb3V0aW5nIChlLmcuLCBcImFwaS5leGFtcGxlLmNvbVwiKS5cbiAgICogVXNlcyBBTEIgaG9zdC1iYXNlZCByb3V0aW5nLlxuICAgKi9cbiAgaG9zdD86IHN0cmluZztcblxuICAvKipcbiAgICogUHJpb3JpdHkgZm9yIHRoaXMgcm91dGluZyBydWxlICgxLTUwMDAwKS5cbiAgICogTG93ZXIgbnVtYmVyID0gaGlnaGVyIHByaW9yaXR5LlxuICAgKiBBdXRvLWFzc2lnbmVkIGlmIG9taXR0ZWQuXG4gICAqL1xuICBwcmlvcml0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogSGVhbHRoIGNoZWNrIHBhdGggZm9yIHRoaXMgc2VydmljZSdzIHRhcmdldCBncm91cC5cbiAgICogRGVmYXVsdDogXCIvXCJcbiAgICovXG4gIGhlYWx0aENoZWNrUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIHNlcnZpY2UgaW4gYW4gRUNTIGNsdXN0ZXIuXG4gKiBFYWNoIHNlcnZpY2UgZ2V0cyBpdHMgb3duIHRhc2sgZGVmaW5pdGlvbiwgc2NhbGluZyBjb25maWcsIGFuZCB0YXJnZXQgZ3JvdXAuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbXBsZSBzZXJ2aWNlXG4gKiB7IG5hbWU6IFwiYXBpXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0gfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTZXJ2aWNlIHdpdGggcm91dGluZyAoZm9yIG11bHRpLXNlcnZpY2UgY2x1c3RlcnMpXG4gKiB7IG5hbWU6IFwidXNlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMCB9XSwgcm91dGluZzogeyBwYXRoOiBcIi91c2Vycy8qXCIsIHByaW9yaXR5OiAxMDAgfSB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNlcnZpY2Ugd2l0aCBtdWx0aXBsZSByb3V0aW5nIHJ1bGVzIChzYW1lIHRhcmdldCBncm91cClcbiAqIHsgbmFtZTogXCJ3ZWJcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMCB9XSwgcm91dGluZzogW1xuICogICB7IHBhdGg6IFwiL2FwaS92Mi8qXCIsIHByaW9yaXR5OiA1MCB9LFxuICogICB7IHBhdGg6IFwiLypcIiwgcHJpb3JpdHk6IDIwMCB9LFxuICogXX1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2VydmljZSB3aXRoIHNpZGVjYXJzXG4gKiB7XG4gKiAgIG5hbWU6IFwiYXBpXCIsXG4gKiAgIGNvbnRhaW5lcnM6IFtcbiAqICAgICB7IG5hbWU6IFwiYXBwXCIsIHBvcnQ6IDMwMDAgfSxcbiAqICAgICB7IG5hbWU6IFwiZGF0YWRvZ1wiLCBpbWFnZTogXCJkYXRhZG9nL2FnZW50XCIgfVxuICogICBdXG4gKiB9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzU2VydmljZUNvbmZpZyB7XG4gIC8qKiBTZXJ2aWNlIG5hbWUgKHVuaXF1ZSB3aXRoaW4gY2x1c3RlcikgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgaW1hZ2UgZm9yIHRoaXMgc2VydmljZSAoYXBwbGllcyB0byBmaXJzdCBjb250YWluZXIgd2l0aG91dCBleHBsaWNpdCBpbWFnZSkuXG4gICAqIC0gT21pdDogVXNlcyBhcHAncyBkZWZhdWx0IEVDUiByZXBvc2l0b3J5XG4gICAqIC0gc3RyaW5nOiBFQ1IgcmVwb3NpdG9yeSBuYW1lIG9yIHB1YmxpYyBpbWFnZSBVUkxcbiAgICogLSBSZXBvc2l0b3J5OiBDREsgRUNSIFJlcG9zaXRvcnkgY29uc3RydWN0XG4gICAqL1xuICBpbWFnZT86IHN0cmluZyB8IFJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBjb25maWd1cmF0aW9uKHMpIGZvciB0aGlzIHNlcnZpY2UuXG4gICAqIEZvciBzaW5nbGUtY29udGFpbmVyIHNlcnZpY2VzLCBjb250YWluZXIgbmFtZSBpcyBvcHRpb25hbCBhbmQgYXV0by1nZW5lcmF0ZWQuXG4gICAqIEZvciBtdWx0aS1jb250YWluZXIgc2VydmljZXMsIHRoZSBmaXJzdCBjb250YWluZXIgd2l0aCBhIHBvcnQgaXMgdGhlIHByaW1hcnkgY29udGFpbmVyLlxuICAgKi9cbiAgY29udGFpbmVycz86IEVjc0NvbnRhaW5lckNvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBSb3V0aW5nIHJ1bGVzIGZvciB0aGlzIHNlcnZpY2Ugb24gdGhlIGNsdXN0ZXIncyBBTEIuXG4gICAqIFJlcXVpcmVkIHdoZW4gY2x1c3RlciBoYXMgbXVsdGlwbGUgc2VydmljZXMgd2l0aCBwb3J0cy5cbiAgICogT3B0aW9uYWwgZm9yIHNpbmdsZSBzZXJ2aWNlIChnZXRzIC8qIGF1dG9tYXRpY2FsbHkpLlxuICAgKiBDYW4gYmUgYSBzaW5nbGUgcnVsZSBvciBhbiBhcnJheSBvZiBydWxlcyBwb2ludGluZyB0byB0aGUgc2FtZSB0YXJnZXQgZ3JvdXAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIE11bHRpcGxlIHJvdXRlcyBmb3IgdGhlIHNhbWUgc2VydmljZVxuICAgKiByb3V0aW5nOiBbXG4gICAqICAgeyBwYXRoOiBcIi9hcGkvdjIvKlwiLCBwcmlvcml0eTogNTAgfSxcbiAgICogICB7IHBhdGg6IFwiLypcIiwgcHJpb3JpdHk6IDIwMCB9LFxuICAgKiBdXG4gICAqL1xuICByb3V0aW5nPzogRWNzUm91dGluZ0NvbmZpZyB8IEVjc1JvdXRpbmdDb25maWdbXTtcblxuICAvKiogQ1BVIHVuaXRzIGZvciB0aGlzIHNlcnZpY2UncyB0YXNrcyAoMjU2LTQwOTYpICovXG4gIGNwdT86IG51bWJlcjtcblxuICAvKiogTWVtb3J5IGluIE1pQiBmb3IgdGhpcyBzZXJ2aWNlJ3MgdGFza3MgKDUxMi0zMDcyMCkgKi9cbiAgbWVtb3J5TGltaXRNaUI/OiBudW1iZXI7XG5cbiAgLyoqIERlc2lyZWQgbnVtYmVyIG9mIHRhc2tzLiBEZWZhdWx0OiAyICovXG4gIGRlc2lyZWRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogU2NhbGluZyBjb25maWd1cmF0aW9uLlxuICAgKiAtIE9taXQ6IGVuYWJsZWQgd2l0aCBkZWZhdWx0c1xuICAgKiAtIGZhbHNlOiBkaXNhYmxlZFxuICAgKi9cbiAgc2NhbGluZz86IEVjc1NjYWxpbmdDb25maWcgfCBmYWxzZTtcblxuICAvKipcbiAgICogUGF0aCB0byBEb2NrZXJmaWxlIGZvciBidWlsZGluZyB0aGlzIHNlcnZpY2UncyBpbWFnZS5cbiAgICogTWV0YWRhdGEgZm9yIENMSSBidWlsZCBwcm9jZXNzLCBub3QgdXNlZCBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAgICovXG4gIGRvY2tlcmZpbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb2NrZXIgYnVpbGQgdGFyZ2V0IHN0YWdlIGZvciBtdWx0aS1zdGFnZSBEb2NrZXJmaWxlcy5cbiAgICogV2hlbiBzcGVjaWZpZWQsIHRoZSBDTEkgYnVpbGRzIHdpdGggYC0tdGFyZ2V0IDxkb2NrZXJUYXJnZXQ+YC5cbiAgICogVGhlIGltYWdlIHRhZyBzdWZmaXggaXMgYWxzbyB1cGRhdGVkOiBgPHNlcnZpY2U+LTx0YXJnZXQ+LWxhdGVzdGAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIERvY2tlcmZpbGU6IEZST00gbm9kZSBBUyBiYXNlIC4uLiBGUk9NIGJhc2UgQVMgYXBpIC4uLiBGUk9NIGJhc2UgQVMgd29ya2VyXG4gICAqIHsgbmFtZTogXCJhcGlcIiwgZG9ja2VyVGFyZ2V0OiBcImFwaVwiIH0gICAvLyBidWlsZHM6IG15YXBwLWFwaS1hcGktbGF0ZXN0XG4gICAqIHsgbmFtZTogXCJ3b3JrZXJcIiwgZG9ja2VyVGFyZ2V0OiBcIndvcmtlclwiIH0gIC8vIGJ1aWxkczogbXlhcHAtd29ya2VyLXdvcmtlci1sYXRlc3RcbiAgICovXG4gIGRvY2tlclRhcmdldD86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBpbmxpbmUgcG9saWNpZXMgZm9yIHRoaXMgc2VydmljZSdzIHRhc2sgcm9sZS5cbiAgICogQWRkZWQgb24gdG9wIG9mIHRoZSBkZWZhdWx0IEVDUyBFeGVjIHBlcm1pc3Npb25zLlxuICAgKiBVc2UgZm9yIHNlcnZpY2Utc3BlY2lmaWMgQVdTIHBlcm1pc3Npb25zIChTMywgRHluYW1vREIsIFNRUywgZXRjLikuXG4gICAqL1xuICB0YXNrUm9sZUlubGluZVBvbGljaWVzPzogUmVjb3JkPHN0cmluZywgUG9saWN5RG9jdW1lbnQ+O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG1hbmFnZWQgcG9saWNpZXMgZm9yIHRoaXMgc2VydmljZSdzIHRhc2sgcm9sZS5cbiAgICogQWRkZWQgb24gdG9wIG9mIHRoZSBkZWZhdWx0IEVDUyBFeGVjIHBlcm1pc3Npb25zLlxuICAgKi9cbiAgdGFza1JvbGVNYW5hZ2VkUG9saWNpZXM/OiBJTWFuYWdlZFBvbGljeVtdO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhpcyBzZXJ2aWNlIG5lZWRzIHRvIGNvbm5lY3QgdG8gKGUuZy4sIGRhdGFiYXNlcywgUzMgYnVja2V0cywgU1FTIHF1ZXVlcykuXG4gICAqIENyZWF0ZXMgc2VjdXJpdHkgZ3JvdXAgcnVsZXMgZm9yIElDb25uZWN0YWJsZSByZXNvdXJjZXMgYW5kIElBTSBncmFudHMgZm9yIElBTSByZXNvdXJjZXMuXG4gICAqIEZvbGxvd3MgbGVhc3QtcHJpdmlsZWdlIC0gb25seSB0aGlzIHNlcnZpY2UgZ2V0cyBhY2Nlc3MsIG5vdCBhbGwgc2VydmljZXMgaW4gdGhlIGNsdXN0ZXIuXG4gICAqXG4gICAqIFN1cHBvcnRzOlxuICAgKiAtIElDb25uZWN0YWJsZTogU2VjdXJpdHkgZ3JvdXAgcmVzb3VyY2VzIChSRFMsIEVDUywgZXRjLilcbiAgICogLSBJU3RvcmFnZUNvbm5lY3RvcjogUzMgYnVja2V0cyAoSUFNIGdyYW50cylcbiAgICogLSBJRHluYW1vREJDb25uZWN0b3I6IER5bmFtb0RCIHRhYmxlcyAoSUFNIGdyYW50cylcbiAgICogLSBJUXVldWVDb25uZWN0b3I6IFNRUyBxdWV1ZXMgKElBTSBncmFudHMpXG4gICAqIC0gQ29ubmVjdGlvbkNvbmZpZzogRXhwbGljaXQgYWNjZXNzIGxldmVsIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gU2ltcGxlIGNvbm5lY3Rpb25zIChkZWZhdWx0IHBlcm1pc3Npb25zKVxuICAgKiBjb25uZWN0aW9uczogW2RhdGFiYXNlLCBidWNrZXQsIGNhY2hlLCBxdWV1ZV1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gRXhwbGljaXQgYWNjZXNzIGxldmVsc1xuICAgKiBjb25uZWN0aW9uczogW1xuICAgKiAgIGRhdGFiYXNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlY3VyaXR5IGdyb3VwIChSRFMpXG4gICAqICAgeyByZXNvdXJjZTogY2FjaGUsIGFjY2VzczogXCJyZWFkXCIgfSwgICAvLyBSZWFkLW9ubHkgRHluYW1vREJcbiAgICogICB7IHJlc291cmNlOiBidWNrZXQsIGFjY2VzczogXCJ3cml0ZVwiIH0sIC8vIFdyaXRlLW9ubHkgUzNcbiAgICogICB7IHJlc291cmNlOiBxdWV1ZSwgYWNjZXNzOiBcImNvbnN1bWVcIiB9IC8vIENvbnN1bWUtb25seSBTUVNcbiAgICogXVxuICAgKi9cbiAgY29ubmVjdGlvbnM/OiBDb25uZWN0aW9uU3BlY1tdO1xuXG4gIC8qKlxuICAgKiBDYXBhY2l0eSBwcm92aWRlciBmb3IgdGhpcyBzZXJ2aWNlLiBSRVFVSVJFRC5cbiAgICogRWFjaCBzZXJ2aWNlIHNwZWNpZmllcyBpdHMgb3duIGNhcGFjaXR5IHByb3ZpZGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBNaXhlZCBGQVJHQVRFIGFuZCBFQzIgc2VydmljZXMgaW4gc2FtZSBjbHVzdGVyXG4gICAqIHtcbiAgICogICBzZXJ2aWNlczogW1xuICAgKiAgICAgeyBuYW1lOiBcImFwaVwiLCBjYXBhY2l0eVByb3ZpZGVyOiBcIkZBUkdBVEVcIiB9LFxuICAgKiAgICAgeyBuYW1lOiBcIndvcmtlclwiLCBjYXBhY2l0eVByb3ZpZGVyOiBcIkVDMlwiLCBlYzJDb25maWc6IHsgaW5zdGFuY2VUeXBlOiBcInQzLm1pY3JvXCIgfSB9XG4gICAqICAgXVxuICAgKiB9XG4gICAqL1xuICBjYXBhY2l0eVByb3ZpZGVyOiBFY3NDYXBhY2l0eVByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBFQzIgY2FwYWNpdHkgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBzZXJ2aWNlLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBzZXJ2aWNlIGNhcGFjaXR5UHJvdmlkZXIgaXMgXCJFQzJcIi5cbiAgICogU2VydmljZXMgd2l0aCBtYXRjaGluZyBlYzJDb25maWcgc2hhcmUgYW4gQVNHIGZvciBlZmZpY2llbmN5LlxuICAgKi9cbiAgZWMyQ29uZmlnPzogRWMyQ2FwYWNpdHlDb25maWc7XG5cbiAgLyoqXG4gICAqIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGF0aCBmb3Igc2VjcmV0cy5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgc2VjcmV0cyBhcmUgZmV0Y2hlZCBmcm9tIC88YXBwPi88Y2x1c3Rlcj4vPHNlcnZpY2U+LlxuICAgKiBVc2UgdGhpcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb252ZW50aW9uLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBPdmVycmlkZSBkZWZhdWx0IHBhdGhcbiAgICogc3NtU2VjcmV0c1BhdGg6IFwiL2N1c3RvbS9wYXRoL3RvL3NlY3JldHNcIlxuICAgKi9cbiAgc3NtU2VjcmV0c1BhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU1NIIGFjY2VzcyBjb25maWd1cmF0aW9uIGZvciBFQzIgaW5zdGFuY2VzLlxuICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIGF1dG8tZ2VuZXJhdGVkIGtleVxuICogLSBgeyBrZXlOYW1lOiBcIm15LWtleVwiIH1gOiBlbmFibGVkIHdpdGggZXhpc3Rpbmcga2V5XG4gKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTc2hDb25maWcge1xuICAvKiogU1NIIGtleSBwYWlyIG5hbWUgKi9cbiAga2V5TmFtZT86IHN0cmluZztcbiAgLyoqIEFsbG93ZWQgQ0lEUiBibG9ja3MgZm9yIFNTSCBhY2Nlc3MgKi9cbiAgYWxsb3dlZENpZHJzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogTGFtYmRhIGZ1bmN0aW9uIFVSTCBjb25maWd1cmF0aW9uLlxuICogLSBPbWl0OiBkaXNhYmxlZCAoZGVmYXVsdClcbiAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIElBTSBhdXRoXG4gKiAtIGB7IGF1dGhUeXBlOiBcIk5PTkVcIiwgY29yczogey4uLn0gfWA6IHB1YmxpYyB3aXRoIENPUlNcbiAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uVXJsQ29uZmlnIHtcbiAgLyoqIEF1dGhlbnRpY2F0aW9uIHR5cGUuIERlZmF1bHQ6IEFXU19JQU0gKi9cbiAgYXV0aFR5cGU/OiBGdW5jdGlvblVybEF1dGhUeXBlO1xuICAvKiogQ09SUyBjb25maWd1cmF0aW9uICovXG4gIGNvcnM/OiBGdW5jdGlvblVybENvcnNPcHRpb25zO1xuICAvKiogSW52b2tlIG1vZGUuIFVzZSBSRVNQT05TRV9TVFJFQU0gZm9yIExhbWJkYSBzdHJlYW1pbmcuIERlZmF1bHQ6IEJVRkZFUkVEICovXG4gIGludm9rZU1vZGU/OiBJbnZva2VNb2RlO1xufVxuXG5pbnRlcmZhY2UgQmFzZUNvbXB1dGVQcm9wcyB7XG4gIHZwYz86IElWcGM7XG59XG5cbi8qKlxuICogRUNTIGNvbXB1dGUgY29uZmlndXJhdGlvbi5cbiAqIENyZWF0ZXMgYW4gRUNTIGNsdXN0ZXIgd2l0aCBvbmUgb3IgbW9yZSBzZXJ2aWNlcyBzaGFyaW5nIGEgbG9hZCBiYWxhbmNlci5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2luZ2xlIHNlcnZpY2VcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiV2ViQXBwXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBwLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFt7IG5hbWU6IFwid2ViXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0gfV1cbiAqIH0pKTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTXVsdGktc2VydmljZSBjbHVzdGVyIHdpdGggcm91dGluZ1xuICogYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJBcGlDbHVzdGVyXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBpLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFtcbiAqICAgICB7IG5hbWU6IFwidXNlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMCB9XSwgcm91dGluZzogeyBwYXRoOiBcIi91c2Vycy8qXCIgfSB9LFxuICogICAgIHsgbmFtZTogXCJvcmRlcnNcIiwgY29udGFpbmVyczogW3sgcG9ydDogMzAwMSB9XSwgcm91dGluZzogeyBwYXRoOiBcIi9vcmRlcnMvKlwiIH0gfVxuICogICBdXG4gKiB9KSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEludGVybmFsIHdvcmtlcnMgKG5vIEFMQilcbiAqIGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiV29ya2Vyc1wiLCB7XG4gKiAgIHR5cGU6IFwiZWNzXCIsXG4gKiAgIGNsdXN0ZXI6IHsgbG9hZEJhbGFuY2VyOiBmYWxzZSB9LFxuICogICBzZXJ2aWNlczogW3sgbmFtZTogXCJwcm9jZXNzb3JcIiB9LCB7IG5hbWU6IFwiZW1haWxlclwiIH1dXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ29tcHV0ZVByb3BzIGV4dGVuZHMgQmFzZUNvbXB1dGVQcm9wcyB7XG4gIHR5cGU6IFwiZWNzXCI7XG5cbiAgLyoqXG4gICAqIEFwcGxpY2F0aW9uIG5hbWUgZm9yIFNTTSBzZWNyZXRzIG5hbWVzcGFjZS5cbiAgICogV2hlbiBjb250YWluZXJzIHVzZSBzZWNyZXRzLCB0aGUgcGF0aCBpcyBkZXJpdmVkIGFzOiAvPGFwcE5hbWU+LzxjbHVzdGVyTmFtZT4vPHNlcnZpY2VOYW1lPlxuICAgKiBBdXRvLWRlcml2ZWQgZnJvbSBBcHAuZ2V0TmFtZSgpIGlmIG5vdCBzcGVjaWZpZWQuXG4gICAqL1xuICBhcHBOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDbHVzdGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqIENvbnRyb2xzIHRoZSBzaGFyZWQgQUxCIGZvciBhbGwgc2VydmljZXMgaW4gdGhpcyBjbHVzdGVyLlxuICAgKiAtIE9taXQ6IEFMQiBjcmVhdGVkIHdpdGggZGVmYXVsdCBzZXR0aW5nc1xuICAgKiAtIGB7IGRvbWFpbjogXCIuLi5cIiB9YDogQUxCIHdpdGggSFRUUFMgKyBETlNcbiAgICogLSBgeyBsb2FkQmFsYW5jZXI6IGZhbHNlIH1gOiBObyBBTEIgKGludGVybmFsIHdvcmtlcnMpXG4gICAqL1xuICBjbHVzdGVyPzogRWNzQ2x1c3RlckNvbmZpZztcblxuICAvKipcbiAgICogU2VydmljZXMgaW4gdGhpcyBjbHVzdGVyLlxuICAgKiBFYWNoIHNlcnZpY2UgZ2V0cyBpdHMgb3duIHRhc2sgZGVmaW5pdGlvbiwgc2NhbGluZywgYW5kIHRhcmdldCBncm91cC5cbiAgICogRWFjaCBzZXJ2aWNlIE1VU1Qgc3BlY2lmeSBpdHMgb3duIGNhcGFjaXR5UHJvdmlkZXIuXG4gICAqIEFsbCBzZXJ2aWNlcyBzaGFyZSB0aGUgY2x1c3RlcidzIEFMQiAodW5sZXNzIGRpc2FibGVkKS5cbiAgICovXG4gIHNlcnZpY2VzOiBFY3NTZXJ2aWNlQ29uZmlnW107XG5cbiAgLyoqXG4gICAqIEVDUiByZXBvc2l0b3J5IGZvciBhbGwgc2VydmljZXMgKGRlZmF1bHQgaW1hZ2UpLlxuICAgKiBJbmRpdmlkdWFsIHNlcnZpY2VzIGNhbiBvdmVycmlkZSB3aXRoIHRoZWlyIG93biBgaW1hZ2VgIHByb3BlcnR5LlxuICAgKi9cbiAgZWNyUmVwb3NpdG9yeT86IFJlcG9zaXRvcnkgfCBSZXBvc2l0b3J5SW1hZ2U7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gRG9ja2VyZmlsZSBmb3IgYnVpbGRpbmcgY3VzdG9tIGltYWdlLlxuICAgKiBOb3RlOiBUaGlzIGlzIG1ldGFkYXRhIGZvciB0aGUgQ0xJIGJ1aWxkIHByb2Nlc3MsXG4gICAqIG5vdCB1c2VkIGR1cmluZyBDREsgc3ludGhlc2lzLlxuICAgKi9cbiAgZG9ja2VyZmlsZVBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWMyQ29tcHV0ZVByb3BzIGV4dGVuZHMgQmFzZUNvbXB1dGVQcm9wcyB7XG4gIHR5cGU6IFwiZWMyXCI7XG5cbiAgLyoqIEVDMiBpbnN0YW5jZSB0eXBlLiBEZWZhdWx0OiBcInQzLm1pY3JvXCIgKi9cbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTU0ggYWNjZXNzIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT21pdDogZGlzYWJsZWQgKGRlZmF1bHQpXG4gICAqIC0gYHt9YDogZW5hYmxlZCB3aXRoIGRlZmF1bHRzXG4gICAqIC0gYGZhbHNlYDogZXhwbGljaXRseSBkaXNhYmxlZFxuICAgKi9cbiAgc3NoPzogU3NoQ29uZmlnIHwgZmFsc2U7XG4gIC8qKiBVc2VyIGRhdGEgc2NyaXB0ICovXG4gIHVzZXJEYXRhPzogVXNlckRhdGE7XG4gIC8qKiBNYWNoaW5lIGltYWdlIChBTUkpICovXG4gIG1hY2hpbmVJbWFnZT86IElNYWNoaW5lSW1hZ2U7XG4gIC8qKiBNaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMuIERlZmF1bHQ6IDEgKi9cbiAgbWluQ2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMuIERlZmF1bHQ6IDEgKi9cbiAgbWF4Q2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQZXJjZW50YWdlIG9mIGNhcGFjaXR5IHRvIHJ1biBvbiBTcG90IGluc3RhbmNlcyAoMC0xMDApLlxuICAgKiAtIE9taXQgb3IgMDogQWxsIE9uLURlbWFuZCBpbnN0YW5jZXMgKGRlZmF1bHQpXG4gICAqIC0gMTAwOiBBbGwgU3BvdCBpbnN0YW5jZXNcbiAgICogLSA1MDogSGFsZiBTcG90LCBoYWxmIE9uLURlbWFuZFxuICAgKlxuICAgKiBTcG90IGluc3RhbmNlcyBjYW4gcmVkdWNlIGNvc3RzIGJ5IHVwIHRvIDkwJSBidXQgbWF5IGJlIGludGVycnVwdGVkLlxuICAgKiBVc2UgZm9yIGZhdWx0LXRvbGVyYW50IHdvcmtsb2Fkcy5cbiAgICovXG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQmFzZSBMYW1iZGEgY29uZmlndXJhdGlvbiBzaGFyZWQgYnkgYm90aCBjb250YWluZXIgYW5kIGNvZGUgZGVwbG95bWVudHMuXG4gKi9cbmludGVyZmFjZSBCYXNlTGFtYmRhUHJvcHMgZXh0ZW5kcyBCYXNlQ29tcHV0ZVByb3BzIHtcbiAgdHlwZTogXCJsYW1iZGFcIjtcbiAgLyoqIFRpbWVvdXQgaW4gc2Vjb25kcy4gRGVmYXVsdDogMyAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICAvKiogTWVtb3J5IHNpemUgaW4gTUIuIERlZmF1bHQ6IDEyOCAqL1xuICBtZW1vcnlTaXplPzogbnVtYmVyO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbiAgLyoqIENQVSBhcmNoaXRlY3R1cmUuIERlZmF1bHQ6IHg4Nl82NC4gVXNlIEFyY2hpdGVjdHVyZS5BUk1fNjQgZm9yIEdyYXZpdG9uMi4gKi9cbiAgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuICAvKiogTGFtYmRhIGZ1bmN0aW9uIGRlc2NyaXB0aW9uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgZGVzY3JpcHRpb24gKi9cbiAgcm9sZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8vIElubGluZSBwb2xpY2llcyAtIHJvdXRlZCB0byBleGVjdXRpb24gcm9sZSBmb3IgRUNTLCB0YXNrIHJvbGUgZm9yIExhbWJkYVxuICAvKiogSW5saW5lIElBTSBwb2xpY3kgc3RhdGVtZW50cyAqL1xuICBpbmxpbmVQb2xpY3k/OiBQb2xpY3lTdGF0ZW1lbnRbXTtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIFVSTCBjb25maWd1cmF0aW9uLlxuICAgKiAtIE9taXQ6IGRpc2FibGVkIChkZWZhdWx0KVxuICAgKiAtIGB7fWA6IGVuYWJsZWQgd2l0aCBJQU0gYXV0aFxuICAgKiAtIGB7IGF1dGhUeXBlOiBcIk5PTkVcIiB9YDogcHVibGljIGFjY2Vzc1xuICAgKiAtIGBmYWxzZWA6IGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgICovXG4gIGZ1bmN0aW9uVXJsPzogRnVuY3Rpb25VcmxDb25maWcgfCBmYWxzZTtcbiAgLyoqIEVudmlyb25tZW50IHZhcmlhYmxlcyAqL1xuICBlbnZpcm9ubWVudD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFNlY3JldHMgZnJvbSBBV1MgU1NNIFBhcmFtZXRlciBTdG9yZS5cbiAgICogQXJyYXkgb2Ygc2VjcmV0IG5hbWVzIHRoYXQgd2lsbCBiZSBmZXRjaGVkIGZyb20gdGhlIExhbWJkYSdzIFNTTSBuYW1lc3BhY2UuXG4gICAqIFRoZSBuYW1lc3BhY2UgcGF0aCBpcyBhdXRvLWRldGVybWluZWQgYXM6IC88YXBwTmFtZT4vbGFtYmRhLzxmdW5jdGlvbk5hbWU+XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHNlY3JldHM6IFtcIkFQSV9LRVlcIiwgXCJTVFJJUEVfU0VDUkVUXCJdXG4gICAqL1xuICBzZWNyZXRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGF0aCBmb3Igc2VjcmV0cy5cbiAgICogSWYgc2VjcmV0cyBhcmUgZGVmaW5lZCwgdGhpcyBwYXRoIGlzIHVzZWQgYXMgdGhlIGJhc2UgcGF0aC5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdXNlczogLzxhcHBOYW1lPi9sYW1iZGEvPGZ1bmN0aW9uTmFtZT5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc3NtU2VjcmV0c1BhdGg6IFwiL215YXBwL2N1c3RvbS9wYXRoXCJcbiAgICovXG4gIHNzbVNlY3JldHNQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZWNyZXRzIGltcG9ydGVkIGZyb20gb3RoZXIgQ0RLIHJlc291cmNlcyAoQVdTIFNlY3JldHMgTWFuYWdlcikuXG4gICAqIFVzZWQgZm9yIENESy1tYW5hZ2VkIHNlY3JldHMgbGlrZSBkYXRhYmFzZSBjcmVkZW50aWFscy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc2VjcmV0c0ltcG9ydDoge1xuICAgKiAgIERBVEFCQVNFX1VTRVJOQU1FOiBkYXRhYmFzZS5nZXRDcmVkZW50aWFscygpLmdldEltcG9ydChcInVzZXJuYW1lXCIpLFxuICAgKiAgIERBVEFCQVNFX1BBU1NXT1JEOiBkYXRhYmFzZS5nZXRDcmVkZW50aWFscygpLmdldEltcG9ydChcInBhc3N3b3JkXCIpXG4gICAqIH1cbiAgICovXG4gIHNlY3JldHNJbXBvcnQ/OiBSZWNvcmQ8c3RyaW5nLCBTZWNyZXRJbXBvcnQ+O1xuXG4gIC8qKlxuICAgKiBBcHBsaWNhdGlvbiBuYW1lIGZvciBTU00gc2VjcmV0cyBwYXRoIGRlcml2YXRpb24uXG4gICAqIEF1dG8tZGVyaXZlZCBmcm9tIEFwcCBpbnN0YW5jZSB3aGVuIHVzaW5nIENvbXB1dGVGYWN0b3J5LlxuICAgKiBPbmx5IHNwZWNpZnkgZm9yIGFkdmFuY2VkIHVzZSBjYXNlcy5cbiAgICovXG4gIGFwcE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB0aGlzIExhbWJkYSBuZWVkcyB0byBjb25uZWN0IHRvIChlLmcuLCBkYXRhYmFzZXMsIFMzIGJ1Y2tldHMsIFNRUyBxdWV1ZXMpLlxuICAgKiBDcmVhdGVzIHNlY3VyaXR5IGdyb3VwIHJ1bGVzIGZvciBJQ29ubmVjdGFibGUgcmVzb3VyY2VzIGFuZCBJQU0gZ3JhbnRzIGZvciBJQU0gcmVzb3VyY2VzLlxuICAgKlxuICAgKiBTdXBwb3J0czpcbiAgICogLSBJQ29ubmVjdGFibGU6IFNlY3VyaXR5IGdyb3VwIHJlc291cmNlcyAoUkRTLCBFQ1MsIGV0Yy4pXG4gICAqIC0gSVN0b3JhZ2VDb25uZWN0b3I6IFMzIGJ1Y2tldHMgKElBTSBncmFudHMpXG4gICAqIC0gSUR5bmFtb0RCQ29ubmVjdG9yOiBEeW5hbW9EQiB0YWJsZXMgKElBTSBncmFudHMpXG4gICAqIC0gSVF1ZXVlQ29ubmVjdG9yOiBTUVMgcXVldWVzIChJQU0gZ3JhbnRzKVxuICAgKiAtIENvbm5lY3Rpb25Db25maWc6IEV4cGxpY2l0IGFjY2VzcyBsZXZlbCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbm5lY3Rpb25zOiBbXG4gICAqICAgZGF0YWJhc2UsXG4gICAqICAgeyByZXNvdXJjZTogcXVldWUsIGFjY2VzczogXCJzZW5kXCIgfVxuICAgKiBdXG4gICAqL1xuICBjb25uZWN0aW9ucz86IENvbm5lY3Rpb25TcGVjW107XG5cbiAgLyoqXG4gICAqIEV2ZW50QnJpZGdlIHNjaGVkdWxlIGV4cHJlc3Npb24gZm9yIHNjaGVkdWxlZCBMYW1iZGEgaW52b2NhdGlvbnMuXG4gICAqIFVzZXMgY3JvbiBvciByYXRlIHN5bnRheDogXCJyYXRlKDEgaG91cilcIiBvciBcImNyb24oMCAxMiAqICogPyAqKVwiLlxuICAgKi9cbiAgc2NoZWR1bGVFeHByZXNzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnRhaW5lci1iYXNlZCBMYW1iZGEgdXNpbmcgRUNSIGltYWdlLlxuICpcbiAqIFVzZXMgRG9ja2VyIGltYWdlIGZyb20gRUNSIHJlcG9zaXRvcnkuIEhhbmRsZXIgYW5kIHJ1bnRpbWUgYXJlXG4gKiBhdXRvbWF0aWNhbGx5IHNldCB0byBGUk9NX0lNQUdFLlxuICpcbiAqIEBleGFtcGxlXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIkltYWdlTGFtYmRhXCIsIHtcbiAqICAgdHlwZTogXCJsYW1iZGFcIixcbiAqICAgZGVwbG95bWVudDogXCJjb250YWluZXJcIixcbiAqICAgZWNyUmVwb3NpdG9yeTogYXBwLmdldERlZmF1bHRDb250YWluZXJSZWdpc3RyeSgpXG4gKiB9KSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyTGFtYmRhUHJvcHMgZXh0ZW5kcyBCYXNlTGFtYmRhUHJvcHMge1xuICAvKiogQ29udGFpbmVyLWJhc2VkIGRlcGxveW1lbnQgdXNpbmcgRUNSIGltYWdlICovXG4gIGRlcGxveW1lbnQ6IFwiY29udGFpbmVyXCI7XG4gIC8qKiBFQ1IgcmVwb3NpdG9yeSBjb250YWluaW5nIHRoZSBMYW1iZGEgY29udGFpbmVyIGltYWdlICovXG4gIGVjclJlcG9zaXRvcnk6IFJlcG9zaXRvcnkgfCBSZXBvc2l0b3J5SW1hZ2U7XG59XG5cbi8qKlxuICogQ29kZS1iYXNlZCBMYW1iZGEgdXNpbmcgaW5saW5lIGNvZGUgb3IgUzMuXG4gKlxuICogVXNlcyB0cmFkaXRpb25hbCBMYW1iZGEgZGVwbG95bWVudCB3aXRoIGNvZGUsIGhhbmRsZXIsIGFuZCBydW50aW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBhcHAuYWRkQ29tcHV0ZShDb21wdXRlRmFjdG9yeS5idWlsZChcIkNvZGVMYW1iZGFcIiwge1xuICogICB0eXBlOiBcImxhbWJkYVwiLFxuICogICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAqICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXCIuL2xhbWJkYVwiKSxcbiAqICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gKiAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIwX1hcbiAqIH0pKTtcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlTGFtYmRhUHJvcHMgZXh0ZW5kcyBCYXNlTGFtYmRhUHJvcHMge1xuICAvKiogQ29kZS1iYXNlZCBkZXBsb3ltZW50ICovXG4gIGRlcGxveW1lbnQ6IFwiY29kZVwiO1xuICAvKiogTGFtYmRhIGNvZGUgKGZyb20gYXNzZXQsIFMzLCBvciBpbmxpbmUpICovXG4gIGNvZGU6IENvZGU7XG4gIC8qKiBIYW5kbGVyIGZ1bmN0aW9uLiBEZWZhdWx0OiBcImluZGV4LmhhbmRsZXJcIiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogTGFtYmRhIHJ1bnRpbWUuIERlZmF1bHQ6IE5PREVKU18yMl9YICovXG4gIHJ1bnRpbWU/OiBSdW50aW1lO1xufVxuXG4vKipcbiAqIExhbWJkYSBjb21wdXRlIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogRGlzY3JpbWluYXRlZCB1bmlvbiBlbnN1cmluZyB0eXBlLXNhZmUgTGFtYmRhIGNvbmZpZ3VyYXRpb246XG4gKiAtIGBkZXBsb3ltZW50OiBcImNvbnRhaW5lclwiYCByZXF1aXJlcyBgZWNyUmVwb3NpdG9yeWBcbiAqIC0gYGRlcGxveW1lbnQ6IFwiY29kZVwiYCByZXF1aXJlcyBgY29kZWAgYW5kIGFsbG93cyBgaGFuZGxlcmAvYHJ1bnRpbWVgXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnRhaW5lci1iYXNlZCBMYW1iZGFcbiAqIHsgdHlwZTogXCJsYW1iZGFcIiwgZGVwbG95bWVudDogXCJjb250YWluZXJcIiwgZWNyUmVwb3NpdG9yeTogZWNyIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ29kZS1iYXNlZCBMYW1iZGFcbiAqIHsgdHlwZTogXCJsYW1iZGFcIiwgZGVwbG95bWVudDogXCJjb2RlXCIsIGNvZGU6IENvZGUuZnJvbUFzc2V0KFwiLi9sYW1iZGFcIikgfVxuICovXG5leHBvcnQgdHlwZSBMYW1iZGFDb21wdXRlUHJvcHMgPSBDb250YWluZXJMYW1iZGFQcm9wcyB8IENvZGVMYW1iZGFQcm9wcztcblxuLy8gVHlwZS1zYWZlIHByb3BzIHdpdGggbGl0ZXJhbCBkaXNjcmltaW5hdG9ycyBmb3IgZmFjdG9yeSBvdmVybG9hZHNcbmV4cG9ydCB0eXBlIElFY3NDb21wdXRlUHJvcHMgPSBFY3NDb21wdXRlUHJvcHM7XG5leHBvcnQgdHlwZSBJTGFtYmRhQ29tcHV0ZVByb3BzID0gTGFtYmRhQ29tcHV0ZVByb3BzO1xuZXhwb3J0IHR5cGUgSUVjMkNvbXB1dGVQcm9wcyA9IEVjMkNvbXB1dGVQcm9wcztcblxuZXhwb3J0IHR5cGUgSUNvbXB1dGVQcm9wcyA9XG4gIHwgSUVjc0NvbXB1dGVQcm9wc1xuICB8IElMYW1iZGFDb21wdXRlUHJvcHNcbiAgfCBJRWMyQ29tcHV0ZVByb3BzO1xuXG4vKipcbiAqIFZhbGlkYXRlcyBjb21wdXRlIHByb3BzIGFuZCBsb2dzIHdhcm5pbmdzIGZvciBpZ25vcmVkIG9yIG1pc2NvbmZpZ3VyZWQgb3B0aW9ucy5cbiAqIFRoZXNlIGNoZWNrcyBoZWxwIGNhdGNoIGlzc3VlcyB3aGVuIHByb3BzIGNvbWUgZnJvbSBkeW5hbWljIHNvdXJjZXMgd2hlcmVcbiAqIFR5cGVTY3JpcHQncyBjb21waWxlLXRpbWUgY2hlY2tzIG1heSBub3QgYXBwbHkuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29tcHV0ZVByb3BzKHByb3BzOiBJQ29tcHV0ZVByb3BzKTogdm9pZCB7XG4gIC8vIEVDUy1zcGVjaWZpYyBvcHRpb25zIG9uIG5vbi1FQ1MgY29tcHV0ZVxuICB3YXJuSWZQcm9wZXJ0aWVzSWdub3JlZChcbiAgICBwcm9wcyxcbiAgICBbXCJjYXBhY2l0eVByb3ZpZGVyXCIsIFwiZWMyQ29uZmlnXCIsIFwic2VydmljZXNcIiwgXCJjbHVzdGVyXCJdLFxuICAgIFwiZWNzXCIsXG4gICAgXCJFQ1MgY29tcHV0ZVwiXG4gICk7XG5cbiAgLy8gTGFtYmRhLXNwZWNpZmljIG9wdGlvbnMgb24gbm9uLUxhbWJkYSBjb21wdXRlXG4gIHdhcm5JZlByb3BlcnRpZXNJZ25vcmVkKFxuICAgIHByb3BzLFxuICAgIFtcImZ1bmN0aW9uVXJsXCIsIFwiaGFuZGxlclwiLCBcInJ1bnRpbWVcIl0sXG4gICAgXCJsYW1iZGFcIixcbiAgICBcIkxhbWJkYSBjb21wdXRlXCJcbiAgKTtcblxuICAvLyBFQzItc3BlY2lmaWMgb3B0aW9ucyBvbiBub24tRUMyIGNvbXB1dGVcbiAgd2FybklmUHJvcGVydGllc0lnbm9yZWQoXG4gICAgcHJvcHMsXG4gICAgW1wic3NoXCIsIFwidXNlckRhdGFcIiwgXCJtYWNoaW5lSW1hZ2VcIl0sXG4gICAgXCJlYzJcIixcbiAgICBcIkVDMiBjb21wdXRlXCJcbiAgKTtcblxuICAvLyBFQ1Mtc3BlY2lmaWMgdmFsaWRhdGlvbiAtIHR5cGUgbmFycm93aW5nIGhhbmRsZWQgYnkgZGlzY3JpbWluYXRlZCB1bmlvblxuICBpZiAocHJvcHMudHlwZSA9PT0gXCJlY3NcIikge1xuICAgIHZhbGlkYXRlRWNzUHJvcHMocHJvcHMpO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIEVDUy1zcGVjaWZpYyBwcm9wcy5cbiAqIEV4dHJhY3RlZCBmb3IgY2xhcml0eSBhbmQgZGV0YWlsIHBhcml0eSB3aXRoIGRhdGFiYXNlL25ldHdvcmsgcGF0dGVybnMuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRWNzUHJvcHMocHJvcHM6IEVjc0NvbXB1dGVQcm9wcyk6IHZvaWQge1xuICAvLyBWYWxpZGF0ZSBzZXJ2aWNlcyBhcnJheSBleGlzdHMgYW5kIGlzIG5vdCBlbXB0eVxuICBpZiAoIXByb3BzLnNlcnZpY2VzIHx8IHByb3BzLnNlcnZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQXQgbGVhc3Qgb25lIHNlcnZpY2UgbXVzdCBiZSBzcGVjaWZpZWQgaW4gJ3NlcnZpY2VzJyBhcnJheS5cIlxuICAgICk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB1bmlxdWUgc2VydmljZSBuYW1lc1xuICBjb25zdCBzZXJ2aWNlTmFtZXMgPSBwcm9wcy5zZXJ2aWNlcy5tYXAoKHMpID0+IHMubmFtZSk7XG4gIGNvbnN0IGR1cGxpY2F0ZU5hbWVzID0gc2VydmljZU5hbWVzLmZpbHRlcihcbiAgICAobmFtZSwgaW5kZXgpID0+IHNlcnZpY2VOYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpbmRleFxuICApO1xuICBpZiAoZHVwbGljYXRlTmFtZXMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBEdXBsaWNhdGUgc2VydmljZSBuYW1lczogJHtbLi4ubmV3IFNldChkdXBsaWNhdGVOYW1lcyldLmpvaW4oXCIsIFwiKX1gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHNlcnZpY2UgbmFtZSBmb3JtYXRcbiAgY29uc3QgaW52YWxpZE5hbWVzID0gcHJvcHMuc2VydmljZXMuZmlsdGVyKFxuICAgIChzKSA9PiAhL15bYS16QS1aXVthLXpBLVowLTktXSokLy50ZXN0KHMubmFtZSlcbiAgKTtcbiAgaWYgKGludmFsaWROYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgc2VydmljZSBuYW1lczogJHtpbnZhbGlkTmFtZXMubWFwKChzKSA9PiBzLm5hbWUpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICBcIlNlcnZpY2UgbmFtZXMgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgYW5kIGh5cGhlbnMuXCJcbiAgICApO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgcm91dGluZyB3aGVuIG11bHRpcGxlIHNlcnZpY2VzIGhhdmUgcG9ydHNcbiAgY29uc3Qgc2VydmljZXNXaXRoUG9ydHMgPSBwcm9wcy5zZXJ2aWNlcy5maWx0ZXIoKHMpID0+XG4gICAgcy5jb250YWluZXJzPy5zb21lKChjKSA9PiBjLnBvcnQpXG4gICk7XG5cbiAgaWYgKHNlcnZpY2VzV2l0aFBvcnRzLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBtaXNzaW5nUm91dGluZyA9IHNlcnZpY2VzV2l0aFBvcnRzLmZpbHRlcigocykgPT4ge1xuICAgICAgY29uc3QgcnVsZXMgPSBBcnJheS5pc0FycmF5KHMucm91dGluZylcbiAgICAgICAgPyBzLnJvdXRpbmdcbiAgICAgICAgOiBzLnJvdXRpbmdcbiAgICAgICAgICA/IFtzLnJvdXRpbmddXG4gICAgICAgICAgOiBbXTtcbiAgICAgIHJldHVybiAhcnVsZXMuc29tZSgocikgPT4gci5wYXRoIHx8IHIuaG9zdCk7XG4gICAgfSk7XG4gICAgaWYgKG1pc3NpbmdSb3V0aW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFNlcnZpY2VzIHdpdGggcG9ydHMgcmVxdWlyZSByb3V0aW5nIGNvbmZpZyB3aGVuIGNsdXN0ZXIgaGFzIG11bHRpcGxlIHNlcnZpY2VzOiBgICtcbiAgICAgICAgICBgJHttaXNzaW5nUm91dGluZy5tYXAoKHMpID0+IHMubmFtZSkuam9pbihcIiwgXCIpfS4gYCArXG4gICAgICAgICAgXCJBZGQgcm91dGluZzogeyBwYXRoOiAnLy4uLicgfSBvciByb3V0aW5nOiB7IGhvc3Q6ICcuLi4nIH0gdG8gZWFjaCBzZXJ2aWNlLlwiXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGVhY2ggc2VydmljZSdzIGNvbnRhaW5lcnNcbiAgZm9yIChjb25zdCBzZXJ2aWNlIG9mIHByb3BzLnNlcnZpY2VzKSB7XG4gICAgaWYgKHNlcnZpY2UuY29udGFpbmVycyAmJiBzZXJ2aWNlLmNvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBjb250YWluZXIgbmFtZXMgd2l0aGluIHNlcnZpY2UgKG9ubHkgbmFtZWQgY29udGFpbmVycylcbiAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWVzID0gc2VydmljZS5jb250YWluZXJzXG4gICAgICAgIC5maWx0ZXIoKGMpID0+IGMubmFtZSlcbiAgICAgICAgLm1hcCgoYykgPT4gYy5uYW1lKTtcbiAgICAgIGNvbnN0IGR1cGxpY2F0ZUNvbnRhaW5lck5hbWVzID0gY29udGFpbmVyTmFtZXMuZmlsdGVyKFxuICAgICAgICAobmFtZSwgaW5kZXgpID0+IGNvbnRhaW5lck5hbWVzLmluZGV4T2YobmFtZSkgIT09IGluZGV4XG4gICAgICApO1xuICAgICAgaWYgKGR1cGxpY2F0ZUNvbnRhaW5lck5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBTZXJ2aWNlICcke3NlcnZpY2UubmFtZX0nOiBEdXBsaWNhdGUgY29udGFpbmVyIG5hbWVzOiBgICtcbiAgICAgICAgICAgIGAke1suLi5uZXcgU2V0KGR1cGxpY2F0ZUNvbnRhaW5lck5hbWVzKV0uam9pbihcIiwgXCIpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VydmljZS5jYXBhY2l0eVByb3ZpZGVyID09PSBcIkVDMlwiICYmICFzZXJ2aWNlLmVjMkNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU2VydmljZSAnJHtzZXJ2aWNlLm5hbWV9JyB1c2VzIEVDMiBjYXBhY2l0eSBwcm92aWRlciBidXQgbm8gZWMyQ29uZmlnIGlzIGRlZmluZWQuIGAgK1xuICAgICAgICAgIFwiUHJvdmlkZSBlYzJDb25maWcgb24gdGhlIHNlcnZpY2UuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gV2FybiBpZiBzZXJ2aWNlIGVjMkNvbmZpZyBpcyBkZWZpbmVkIGJ1dCBjYXBhY2l0eVByb3ZpZGVyIGlzIG5vdCBFQzJcbiAgICBpZiAoc2VydmljZS5lYzJDb25maWcgJiYgc2VydmljZS5jYXBhY2l0eVByb3ZpZGVyICE9PSBcIkVDMlwiKSB7XG4gICAgICBGamFsbExvZ2dlci53YXJuKFxuICAgICAgICBgU2VydmljZSAnJHtzZXJ2aWNlLm5hbWV9JyBoYXMgZWMyQ29uZmlnIGJ1dCBjYXBhY2l0eVByb3ZpZGVyIGlzIG5vdCAnRUMyJy4gYCArXG4gICAgICAgICAgXCJUaGUgZWMyQ29uZmlnIHdpbGwgYmUgaWdub3JlZCB1bmxlc3MgY2FwYWNpdHlQcm92aWRlciBpcyBzZXQgdG8gJ0VDMicuXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQnVpbGQgY29udGFpbmVyIGNvbmZpZ3VyYXRpb25zIGZvciBhbiBFQ1Mgc2VydmljZS5cbiAqIENvbnZlcnRzIHVzZXItZmFjaW5nIEVjc0NvbnRhaW5lckNvbmZpZyB0byBpbnRlcm5hbCBFY3NDbHVzdGVyUHJvcHMgZm9ybWF0LlxuICogQGludGVybmFsIEV4cG9ydGVkIGZvciB0ZXN0aW5nIG9ubHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ29udGFpbmVyQ29uZmlncyhcbiAgc2VydmljZTogRWNzU2VydmljZUNvbmZpZ1xuKTogRWNzQ2x1c3RlclByb3BzW1wic2VydmljZXNcIl1bbnVtYmVyXVtcImNvbnRhaW5lcnNcIl0ge1xuICBpZiAoc2VydmljZS5jb250YWluZXJzICYmIHNlcnZpY2UuY29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHNlcnZpY2UuY29udGFpbmVycy5tYXAoKGMsIGluZGV4KSA9PiAoe1xuICAgICAgbmFtZTogYy5uYW1lIHx8IGAke3NlcnZpY2UubmFtZX1Db250YWluZXIke2luZGV4ID4gMCA/IGluZGV4IDogXCJcIn1gLFxuICAgICAgaW1hZ2U6IGMuaW1hZ2UsXG4gICAgICBwb3J0OiBjLnBvcnQsXG4gICAgICBlbnZpcm9ubWVudDogYy5lbnZpcm9ubWVudCxcbiAgICAgIHNlY3JldHM6IGMuc2VjcmV0cyxcbiAgICAgIHNlY3JldHNJbXBvcnQ6IGMuc2VjcmV0c0ltcG9ydCxcbiAgICAgIGNvbW1hbmQ6IGMuY29tbWFuZCxcbiAgICAgIGVudHJ5UG9pbnQ6IGMuZW50cnlQb2ludCxcbiAgICAgIGVzc2VudGlhbDogYy5lc3NlbnRpYWwsXG4gICAgICBoZWFsdGhDaGVjazogYy5oZWFsdGhDaGVja1xuICAgIH0pKTtcbiAgfVxuICAvLyBEZWZhdWx0IGNvbnRhaW5lciAobm8gcG9ydCA9IHdvcmtlcilcbiAgcmV0dXJuIFt7IG5hbWU6IGAke3NlcnZpY2UubmFtZX1Db250YWluZXJgIH1dO1xufVxuXG4vKipcbiAqIFJlc29sdmVkIHNjYWxpbmcgY29uZmlndXJhdGlvbiBmb3IgYW4gRUNTIHNlcnZpY2UuXG4gKiBAaW50ZXJuYWwgRXhwb3J0ZWQgZm9yIHRlc3Rpbmcgb25seVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkU2NhbGluZ0NvbmZpZyB7XG4gIHNjYWxpbmdUeXBlOiBTY2FsaW5nVHlwZSB8IHVuZGVmaW5lZDtcbiAgbWluQ2FwYWNpdHk6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgbWF4Q2FwYWNpdHk6IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHNjYWxpbmcgY29uZmlndXJhdGlvbiBmcm9tIHNlcnZpY2UgcHJvcHMuXG4gKiBIYW5kbGVzIHRoZSB0aHJlZSBjYXNlczogZXhwbGljaXQgY29uZmlnLCBkaXNhYmxlZCAoZmFsc2UpLCBvciBkZWZhdWx0ICh1bmRlZmluZWQpLlxuICogQGludGVybmFsIEV4cG9ydGVkIGZvciB0ZXN0aW5nIG9ubHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTY2FsaW5nQ29uZmlnKFxuICBzY2FsaW5nOiBFY3NTY2FsaW5nQ29uZmlnIHwgZmFsc2UgfCB1bmRlZmluZWRcbik6IFJlc29sdmVkU2NhbGluZ0NvbmZpZyB7XG4gIGlmIChzY2FsaW5nID09PSBmYWxzZSkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2FsaW5nVHlwZTogdW5kZWZpbmVkLFxuICAgICAgbWluQ2FwYWNpdHk6IHVuZGVmaW5lZCxcbiAgICAgIG1heENhcGFjaXR5OiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG4gIGlmIChzY2FsaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NhbGluZ1R5cGU6IFNjYWxpbmdUeXBlLkNQVSxcbiAgICAgIG1pbkNhcGFjaXR5OiB1bmRlZmluZWQsXG4gICAgICBtYXhDYXBhY2l0eTogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjYWxpbmdUeXBlOiBzY2FsaW5nLnNjYWxpbmdUeXBlID8/IFNjYWxpbmdUeXBlLkNQVSxcbiAgICBtaW5DYXBhY2l0eTogc2NhbGluZy5taW5DYXBhY2l0eSxcbiAgICBtYXhDYXBhY2l0eTogc2NhbGluZy5tYXhDYXBhY2l0eVxuICB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVkIExhbWJkYSBkZXBsb3ltZW50IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRMYW1iZGFEZXBsb3ltZW50IHtcbiAgY29kZTogQ29kZTtcbiAgaGFuZGxlcjogc3RyaW5nO1xuICBydW50aW1lOiBSdW50aW1lO1xufVxuXG4vKipcbiAqIFJlc29sdmUgTGFtYmRhIGRlcGxveW1lbnQgY29uZmlndXJhdGlvbiBmcm9tIHByb3BzLlxuICogSGFuZGxlcyBjb250YWluZXIgdnMgY29kZSBkZXBsb3ltZW50IHR5cGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUxhbWJkYURlcGxveW1lbnQoXG4gIHByb3BzOiBJTGFtYmRhQ29tcHV0ZVByb3BzXG4pOiBSZXNvbHZlZExhbWJkYURlcGxveW1lbnQge1xuICBpZiAocHJvcHMuZGVwbG95bWVudCA9PT0gXCJjb250YWluZXJcIikge1xuICAgIGlmICghKHByb3BzLmVjclJlcG9zaXRvcnkgaW5zdGFuY2VvZiBSZXBvc2l0b3J5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImVjclJlcG9zaXRvcnkgbXVzdCBiZSBhIFJlcG9zaXRvcnkgaW5zdGFuY2UgZm9yIExhbWJkYSBjb21wdXRlIHR5cGVcIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IENvZGUuZnJvbUVjckltYWdlKHByb3BzLmVjclJlcG9zaXRvcnksIHtcbiAgICAgICAgdGFnT3JEaWdlc3Q6IENPTVBVVEVfREVGQVVMVFMuRUNTLklNQUdFX1RBR1xuICAgICAgfSksXG4gICAgICBoYW5kbGVyOiBIYW5kbGVyLkZST01fSU1BR0UsXG4gICAgICBydW50aW1lOiBSdW50aW1lLkZST01fSU1BR0VcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgY29kZTogcHJvcHMuY29kZSxcbiAgICBoYW5kbGVyOiBwcm9wcy5oYW5kbGVyIHx8IENPTVBVVEVfREVGQVVMVFMuTEFNQkRBLkhBTkRMRVIsXG4gICAgcnVudGltZTogcHJvcHMucnVudGltZSB8fCBDT01QVVRFX0RFRkFVTFRTLkxBTUJEQS5SVU5USU1FXG4gIH07XG59XG5cbi8qKlxuICogRmFjdG9yeSBmb3IgY3JlYXRpbmcgY29tcHV0ZSByZXNvdXJjZXMgd2l0aCB0eXBlLXNhZmUgcmV0dXJuIHR5cGVzLlxuICpcbiAqIFRoZSBmYWN0b3J5IHVzZXMgb3ZlcmxvYWRzIHRvIGluZmVyIHRoZSBzcGVjaWZpYyBjb21wdXRlIHR5cGUgZnJvbSBwcm9wcyxcbiAqIGVuc3VyaW5nIFR5cGVTY3JpcHQgcHJvdmlkZXMgb25seSB0aGUgcmVsZXZhbnQgbWV0aG9kcyBmb3IgZWFjaCBjb21wdXRlIHR5cGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEVDUyBjb21wdXRlIC0gcmV0dXJucyBFY3NDb21wdXRlIHdpdGggRUNTLXNwZWNpZmljIG1ldGhvZHNcbiAqIGNvbnN0IGVjcyA9IGFwcC5hZGRDb21wdXRlKENvbXB1dGVGYWN0b3J5LmJ1aWxkKFwiV2ViQXBwXCIsIHtcbiAqICAgdHlwZTogXCJlY3NcIixcbiAqICAgY2x1c3RlcjogeyBkb21haW46IFwiYXBwLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgc2VydmljZXM6IFt7IG5hbWU6IFwid2ViXCIsIGNvbnRhaW5lcnM6IFt7IHBvcnQ6IDMwMDAgfV0gfV1cbiAqIH0pKTtcbiAqIGVjcy5nZXRMb2FkQmFsYW5jZXIoKTsgLy8gQXZhaWxhYmxlIG9uIEVjc0NvbXB1dGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTGFtYmRhIGNvbXB1dGUgLSByZXR1cm5zIExhbWJkYUNvbXB1dGUgd2l0aCBMYW1iZGEtc3BlY2lmaWMgbWV0aG9kc1xuICogY29uc3QgbGFtYmRhID0gYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJGblwiLCB7XG4gKiAgIHR5cGU6IFwibGFtYmRhXCIsXG4gKiAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICogICBjb2RlOiBDb2RlLmZyb21Bc3NldChcIi4vbGFtYmRhXCIpXG4gKiB9KSk7XG4gKiBsYW1iZGEuZ2V0RnVuY3Rpb25VcmwoKTsgLy8gQXZhaWxhYmxlIG9uIExhbWJkYUNvbXB1dGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRUMyIGNvbXB1dGUgLSByZXR1cm5zIEVjMkNvbXB1dGUgd2l0aCBFQzItc3BlY2lmaWMgbWV0aG9kc1xuICogY29uc3QgZWMyID0gYXBwLmFkZENvbXB1dGUoQ29tcHV0ZUZhY3RvcnkuYnVpbGQoXCJJbnN0YW5jZVwiLCB7XG4gKiAgIHR5cGU6IFwiZWMyXCIsXG4gKiAgIGluc3RhbmNlVHlwZTogXCJ0My5taWNyb1wiXG4gKiB9KSk7XG4gKiBlYzIuZ2V0QXV0b1NjYWxpbmdHcm91cCgpOyAvLyBBdmFpbGFibGUgb24gRWMyQ29tcHV0ZVxuICovXG5leHBvcnQgY2xhc3MgQ29tcHV0ZUZhY3Rvcnkge1xuICAvLyBPdmVybG9hZDogRUNTIHByb3BzIHJldHVybnMgRWNzQ29tcHV0ZVxuICBzdGF0aWMgYnVpbGQoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSUVjc0NvbXB1dGVQcm9wc1xuICApOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IEVjc0NvbXB1dGU7XG4gIC8vIE92ZXJsb2FkOiBMYW1iZGEgcHJvcHMgcmV0dXJucyBMYW1iZGFDb21wdXRlXG4gIHN0YXRpYyBidWlsZChcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJTGFtYmRhQ29tcHV0ZVByb3BzXG4gICk6IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gTGFtYmRhQ29tcHV0ZTtcbiAgLy8gT3ZlcmxvYWQ6IEVDMiBwcm9wcyByZXR1cm5zIEVjMkNvbXB1dGVcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElFYzJDb21wdXRlUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBFYzJDb21wdXRlO1xuICAvLyBJbXBsZW1lbnRhdGlvbiBzaWduYXR1cmVcbiAgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElDb21wdXRlUHJvcHNcbiAgKTogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBBbnlDb21wdXRlIHtcbiAgICByZXR1cm4gKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KTogQW55Q29tcHV0ZSA9PiB7XG4gICAgICB2YWxpZGF0ZUNvbXB1dGVQcm9wcyhwcm9wcyk7XG5cbiAgICAgIC8vIEF1dG8tZGVyaXZlIGFwcE5hbWUgZnJvbSBBcHAgaW5zdGFuY2UgZm9yIEVDUyBjb21wdXRlXG4gICAgICBjb25zdCB0eXBlQ29uZmlnID0gQ09NUFVURV9UWVBFX0NPTkZJR1twcm9wcy50eXBlXTtcbiAgICAgIGNvbnN0IG5lZWRzVnBjID1cbiAgICAgICAgdHlwZUNvbmZpZy5yZXF1aXJlc1ZwYyB8fFxuICAgICAgICAoXCJjb25uZWN0aW9uc1wiIGluIHByb3BzICYmXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShwcm9wcy5jb25uZWN0aW9ucykgJiZcbiAgICAgICAgICBwcm9wcy5jb25uZWN0aW9ucy5sZW5ndGggPiAwKTtcbiAgICAgIGxldCBjb21wdXRlUHJvcHM6IElDb21wdXRlUHJvcHMgPSB7XG4gICAgICAgIC4uLntcbiAgICAgICAgICB2cGM6IG5lZWRzVnBjID8gYXBwLmdldFZwYygpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGVjclJlcG9zaXRvcnk6IGFwcC5nZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKVxuICAgICAgICB9LFxuICAgICAgICAuLi5wcm9wc1xuICAgICAgfTtcblxuICAgICAgaWYgKGNvbXB1dGVQcm9wcy50eXBlID09PSBcImVjc1wiKSB7XG4gICAgICAgIGNvbXB1dGVQcm9wcyA9IHtcbiAgICAgICAgICAuLi5jb21wdXRlUHJvcHMsXG4gICAgICAgICAgYXBwTmFtZTogY29tcHV0ZVByb3BzLmFwcE5hbWUgPz8gYXBwLmdldE5hbWUoKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgc3BlY2lmaWMgY29tcHV0ZSBjbGFzcyBiYXNlZCBvbiB0eXBlIGRpc2NyaW1pbmF0b3JcbiAgICAgIHN3aXRjaCAoY29tcHV0ZVByb3BzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImVjc1wiOiB7XG4gICAgICAgICAgLy8gUmVnaXN0ZXIgRUNTIHNlcnZpY2VzIHdpdGggbWFuaWZlc3QgY29sbGVjdG9yIGZvciBDTEkgZGlzY292ZXJ5XG4gICAgICAgICAgY29uc3QgY29sbGVjdG9yID0gYXBwLmdldE1hbmlmZXN0Q29sbGVjdG9yKCk7XG4gICAgICAgICAgY29uc3QgY2x1c3Rlck5hbWUgPSBpZDtcbiAgICAgICAgICBjb25zdCBhcHBOYW1lID0gY29tcHV0ZVByb3BzLmFwcE5hbWUgPz8gYXBwLmdldE5hbWUoKTtcblxuICAgICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiBjb21wdXRlUHJvcHMuc2VydmljZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hbmlmZXN0U2VydmljZTogTWFuaWZlc3RTZXJ2aWNlID0ge1xuICAgICAgICAgICAgICBuYW1lOiBzZXJ2aWNlLm5hbWUsXG4gICAgICAgICAgICAgIGNsdXN0ZXJOYW1lXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBJbmNsdWRlIGRvY2tlcmZpbGVQYXRoIGlmIHNwZWNpZmllZCAobWV0YWRhdGEgZm9yIENMSSlcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlLmRvY2tlcmZpbGVQYXRoKSB7XG4gICAgICAgICAgICAgIG1hbmlmZXN0U2VydmljZS5kb2NrZXJmaWxlUGF0aCA9IHNlcnZpY2UuZG9ja2VyZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEluY2x1ZGUgZG9ja2VyVGFyZ2V0IGlmIHNwZWNpZmllZCAobWV0YWRhdGEgZm9yIENMSSlcbiAgICAgICAgICAgIGlmIChzZXJ2aWNlLmRvY2tlclRhcmdldCkge1xuICAgICAgICAgICAgICBtYW5pZmVzdFNlcnZpY2UuZG9ja2VyVGFyZ2V0ID0gc2VydmljZS5kb2NrZXJUYXJnZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZpbmQgY29udGFpbmVyIHBvcnQgZnJvbSBmaXJzdCBjb250YWluZXIgd2l0aCBhIHBvcnRcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcldpdGhQb3J0ID0gc2VydmljZS5jb250YWluZXJzPy5maW5kKFxuICAgICAgICAgICAgICAoYykgPT4gYy5wb3J0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyV2l0aFBvcnQ/LnBvcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBtYW5pZmVzdFNlcnZpY2UuY29udGFpbmVyUG9ydCA9IGNvbnRhaW5lcldpdGhQb3J0LnBvcnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFnZ3JlZ2F0ZSBzZWNyZXRzIGZyb20gYWxsIGNvbnRhaW5lcnMgKGRlZHVwbGljYXRlZClcbiAgICAgICAgICAgIGNvbnN0IGFsbFNlY3JldHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udGFpbmVyIG9mIHNlcnZpY2UuY29udGFpbmVycyA/PyBbXSkge1xuICAgICAgICAgICAgICBpZiAoY29udGFpbmVyLnNlY3JldHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3JldCBvZiBjb250YWluZXIuc2VjcmV0cykge1xuICAgICAgICAgICAgICAgICAgYWxsU2VjcmV0cy5hZGQoc2VjcmV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGxTZWNyZXRzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICAgIG1hbmlmZXN0U2VydmljZS5zZWNyZXRzID0gQXJyYXkuZnJvbShhbGxTZWNyZXRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSW5jbHVkZSBzc21TZWNyZXRzUGF0aCAoZXhwbGljaXQgb3IgZGVyaXZlZClcbiAgICAgICAgICAgIG1hbmlmZXN0U2VydmljZS5zc21TZWNyZXRzUGF0aCA9XG4gICAgICAgICAgICAgIHNlcnZpY2Uuc3NtU2VjcmV0c1BhdGggPz9cbiAgICAgICAgICAgICAgYC8ke2FwcE5hbWV9LyR7Y2x1c3Rlck5hbWV9LyR7c2VydmljZS5uYW1lfWA7XG5cbiAgICAgICAgICAgIGNvbGxlY3Rvci5hZGRTZXJ2aWNlKG1hbmlmZXN0U2VydmljZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgRWNzQ29tcHV0ZShzY29wZSwgaWQsIGNvbXB1dGVQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImxhbWJkYVwiOiB7XG4gICAgICAgICAgLy8gQWRkIGFwcE5hbWUgdG8gcHJvcHMgZm9yIExhbWJkYSAobmVlZGVkIGZvciBzZWNyZXRzIHBhdGggZGVyaXZhdGlvbilcbiAgICAgICAgICBjb25zdCBsYW1iZGFDb21wdXRlUHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5jb21wdXRlUHJvcHMsXG4gICAgICAgICAgICBhcHBOYW1lOiBhcHAuZ2V0TmFtZSgpXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIC8vIEFsd2F5cyByZWdpc3RlciBMYW1iZGEgd2l0aCBtYW5pZmVzdCBjb2xsZWN0b3IgZm9yIENMSSBkaXNjb3ZlcnlcbiAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgYWxsIExhbWJkYXMgYXJlIGRpc2NvdmVyYWJsZSBmb3Igc2VjcmV0cyBtYW5hZ2VtZW50LFxuICAgICAgICAgIC8vIGV2ZW4gdGhvc2UgdGhhdCBkb24ndCBjdXJyZW50bHkgaGF2ZSBzZWNyZXRzIGNvbmZpZ3VyZWRcbiAgICAgICAgICBjb25zdCBjb2xsZWN0b3IgPSBhcHAuZ2V0TWFuaWZlc3RDb2xsZWN0b3IoKTtcbiAgICAgICAgICBjb25zdCBtYW5pZmVzdExhbWJkYTogTWFuaWZlc3RMYW1iZGEgPSB7XG4gICAgICAgICAgICBuYW1lOiBpZCxcbiAgICAgICAgICAgIHNzbVNlY3JldHNQYXRoOlxuICAgICAgICAgICAgICBsYW1iZGFDb21wdXRlUHJvcHMuc3NtU2VjcmV0c1BhdGggfHxcbiAgICAgICAgICAgICAgYC8ke2xhbWJkYUNvbXB1dGVQcm9wcy5hcHBOYW1lfS9sYW1iZGEvJHtpZH1gXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsYW1iZGFDb21wdXRlUHJvcHMuc2VjcmV0cyAmJlxuICAgICAgICAgICAgbGFtYmRhQ29tcHV0ZVByb3BzLnNlY3JldHMubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbWFuaWZlc3RMYW1iZGEuc2VjcmV0cyA9IGxhbWJkYUNvbXB1dGVQcm9wcy5zZWNyZXRzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb2xsZWN0b3IuYWRkTGFtYmRhKG1hbmlmZXN0TGFtYmRhKTtcblxuICAgICAgICAgIHJldHVybiBuZXcgTGFtYmRhQ29tcHV0ZShzY29wZSwgaWQsIGxhbWJkYUNvbXB1dGVQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImVjMlwiOlxuICAgICAgICAgIHJldHVybiBuZXcgRWMyQ29tcHV0ZShzY29wZSwgaWQsIGNvbXB1dGVQcm9wcyk7XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZTogbmV2ZXIgPSBjb21wdXRlUHJvcHM7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFVuc3VwcG9ydGVkIGNvbXB1dGUgdHlwZTogJHtTdHJpbmcoKF9leGhhdXN0aXZlIGFzIElDb21wdXRlUHJvcHMpLnR5cGUpfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEVDUyBjb21wdXRlIHdyYXBwZXIgaW1wbGVtZW50aW5nIElFY3NDb21wdXRlLlxuICogUHJvdmlkZXMgdHlwZS1zYWZlIGFjY2VzcyB0byBFQ1Mtc3BlY2lmaWMgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgY2xhc3MgRWNzQ29tcHV0ZSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElFY3NDb21wdXRlIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbXB1dGVUeXBlID0gXCJlY3NcIiBhcyBjb25zdDtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIHJlYWRvbmx5IGVjc0NsdXN0ZXI6IEVjc0NsdXN0ZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElFY3NDb21wdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gVHJhbnNmb3JtIEVjc1NlcnZpY2VDb25maWdbXSB0byBFY3NTZXJ2aWNlUHJvcHNbXSBmb3IgRWNzQ2x1c3RlclxuICAgIGNvbnN0IHNlcnZpY2VzOiBFY3NDbHVzdGVyUHJvcHNbXCJzZXJ2aWNlc1wiXSA9IHByb3BzLnNlcnZpY2VzLm1hcChcbiAgICAgIChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBidWlsZENvbnRhaW5lckNvbmZpZ3Moc2VydmljZSk7XG4gICAgICAgIGNvbnN0IHsgc2NhbGluZ1R5cGUsIG1pbkNhcGFjaXR5LCBtYXhDYXBhY2l0eSB9ID0gcmVzb2x2ZVNjYWxpbmdDb25maWcoXG4gICAgICAgICAgc2VydmljZS5zY2FsaW5nXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBzZXJ2aWNlLm5hbWUsXG4gICAgICAgICAgaW1hZ2U6IHNlcnZpY2UuaW1hZ2UsXG4gICAgICAgICAgY29udGFpbmVycyxcbiAgICAgICAgICBjcHU6IHNlcnZpY2UuY3B1LFxuICAgICAgICAgIG1lbW9yeUxpbWl0TWlCOiBzZXJ2aWNlLm1lbW9yeUxpbWl0TWlCLFxuICAgICAgICAgIGRlc2lyZWRDb3VudDogc2VydmljZS5kZXNpcmVkQ291bnQsXG4gICAgICAgICAgc2NhbGluZ1R5cGUsXG4gICAgICAgICAgbWluQ2FwYWNpdHksXG4gICAgICAgICAgbWF4Q2FwYWNpdHksXG4gICAgICAgICAgcm91dGluZzogc2VydmljZS5yb3V0aW5nLFxuICAgICAgICAgIHRhc2tSb2xlSW5saW5lUG9saWNpZXM6IHNlcnZpY2UudGFza1JvbGVJbmxpbmVQb2xpY2llcyxcbiAgICAgICAgICB0YXNrUm9sZU1hbmFnZWRQb2xpY2llczogc2VydmljZS50YXNrUm9sZU1hbmFnZWRQb2xpY2llcyxcbiAgICAgICAgICBjb25uZWN0aW9uczogc2VydmljZS5jb25uZWN0aW9ucyxcbiAgICAgICAgICBjYXBhY2l0eVByb3ZpZGVyOiBzZXJ2aWNlLmNhcGFjaXR5UHJvdmlkZXIsXG4gICAgICAgICAgZWMyQ29uZmlnOiBzZXJ2aWNlLmVjMkNvbmZpZyxcbiAgICAgICAgICBzc21TZWNyZXRzUGF0aDogc2VydmljZS5zc21TZWNyZXRzUGF0aCxcbiAgICAgICAgICBkb2NrZXJUYXJnZXQ6IHNlcnZpY2UuZG9ja2VyVGFyZ2V0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEJ1aWxkIGNsdXN0ZXIgY29uZmlnXG4gICAgY29uc3QgY2x1c3RlcjogRWNzQ2x1c3RlclByb3BzW1wiY2x1c3RlclwiXSA9IHByb3BzLmNsdXN0ZXJcbiAgICAgID8ge1xuICAgICAgICAgIGRvbWFpbjogcHJvcHMuY2x1c3Rlci5kb21haW4sXG4gICAgICAgICAgbG9hZEJhbGFuY2VyOiBwcm9wcy5jbHVzdGVyLmxvYWRCYWxhbmNlcixcbiAgICAgICAgICBkaXJlY3RBY2Nlc3M6IHByb3BzLmNsdXN0ZXIuZGlyZWN0QWNjZXNzLFxuICAgICAgICAgIGRvbWFpbkNvbmZpZzogcHJvcHMuY2x1c3Rlci5kb21haW5Db25maWdcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBlY3NQcm9wczogRWNzQ2x1c3RlclByb3BzID0ge1xuICAgICAgY2x1c3Rlck5hbWU6IGlkLFxuICAgICAgYXBwTmFtZTogcHJvcHMuYXBwTmFtZSxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgZWNyUmVwb3NpdG9yeTogcHJvcHMuZWNyUmVwb3NpdG9yeSB8fCBDT01QVVRFX0RFRkFVTFRTLkVDUy5GQUxMQkFDS19JTUFHRSxcbiAgICAgIGNsdXN0ZXIsXG4gICAgICBzZXJ2aWNlc1xuICAgIH07XG5cbiAgICB0aGlzLmVjc0NsdXN0ZXIgPSBuZXcgRWNzQ2x1c3RlcihzY29wZSwgYCR7aWR9RWNzYCwgZWNzUHJvcHMpO1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLmVjc0NsdXN0ZXIuY29ubmVjdGlvbnM7XG4gIH1cblxuICAvKiogR2V0IHRoZSBFQ1MgY2x1c3Rlci4gKi9cbiAgZ2V0Q2x1c3RlcigpOiBJQ2x1c3RlciB7XG4gICAgcmV0dXJuIHRoaXMuZWNzQ2x1c3Rlci5nZXRDbHVzdGVyKCk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIGlmIG9uZSB3YXMgY3JlYXRlZC4gKi9cbiAgZ2V0TG9hZEJhbGFuY2VyKCk6IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZWNzQ2x1c3Rlci5nZXRMb2FkQmFsYW5jZXIoKTtcbiAgfVxuXG4gIC8qKiBHZXQgYSBzcGVjaWZpYyBzZXJ2aWNlIGJ5IG5hbWUuICovXG4gIGdldFNlcnZpY2UobmFtZTogc3RyaW5nKTogSUJhc2VTZXJ2aWNlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5lY3NDbHVzdGVyLmdldFNlcnZpY2UobmFtZSk7XG4gIH1cblxuICAvKiogR2V0IGFsbCBzZXJ2aWNlcyBpbiB0aGUgY2x1c3Rlci4gKi9cbiAgZ2V0QWxsU2VydmljZXMoKTogSUJhc2VTZXJ2aWNlW10ge1xuICAgIGNvbnN0IHNlcnZpY2VzTWFwID0gdGhpcy5lY3NDbHVzdGVyLmdldFNlcnZpY2VzKCk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oc2VydmljZXNNYXAudmFsdWVzKCkpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgc2VjdXJpdHkgZ3JvdXAgZm9yIHRoZSBjbHVzdGVyLiAqL1xuICBnZXRTZWN1cml0eUdyb3VwKCk6IElTZWN1cml0eUdyb3VwIHtcbiAgICAvLyBSZXR1cm4gdGhlIGZpcnN0IHNlY3VyaXR5IGdyb3VwIGZyb20gY29ubmVjdGlvbnNcbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IHRoaXMuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHM7XG4gICAgaWYgKHNlY3VyaXR5R3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2VjdXJpdHkgZ3JvdXBzIGZvdW5kIGZvciBFQ1MgY2x1c3RlclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlY3VyaXR5R3JvdXBzWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgQUxCIGxpc3RlbmVyIGlmIHRoaXMgaXMgYW4gRUNTIGNvbXB1dGUgd2l0aCBBTEIuXG4gICAqL1xuICBnZXRMaXN0ZW5lcigpOiBBcHBsaWNhdGlvbkxpc3RlbmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5lY3NDbHVzdGVyLmdldExpc3RlbmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB1bmRlcmx5aW5nIEVDUyBjbHVzdGVyIGNvbnN0cnVjdC5cbiAgICovXG4gIGdldEVjc0NsdXN0ZXIoKTogRWNzQ2x1c3RlciB7XG4gICAgcmV0dXJuIHRoaXMuZWNzQ2x1c3RlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgZWNzOkV4ZWN1dGVDb21tYW5kIHBlcm1pc3Npb24gZm9yIEVDUyBzZXJ2aWNlcy5cbiAgICogVXNlcyB3aWxkY2FyZCByZXNvdXJjZSBiZWNhdXNlIGVjczpFeGVjdXRlQ29tbWFuZCB0YXJnZXRzIHRhc2sgQVJOc1xuICAgKiB3aGljaCBhcmUgbm90IGtub3duIHVudGlsIHJ1bnRpbWUgKHRhc2tzIGFyZSBlcGhlbWVyYWwpLlxuICAgKi9cbiAgZ3JhbnRFeGVjdXRlQ29tbWFuZChncmFudGVlOiBJR3JhbnRhYmxlKTogR3JhbnQge1xuICAgIHJldHVybiBHcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogW1wiZWNzOkV4ZWN1dGVDb21tYW5kXCJdLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbXCIqXCJdXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBMYW1iZGEgY29tcHV0ZSB3cmFwcGVyIGltcGxlbWVudGluZyBJTGFtYmRhQ29tcHV0ZS5cbiAqIFByb3ZpZGVzIHR5cGUtc2FmZSBhY2Nlc3MgdG8gTGFtYmRhLXNwZWNpZmljIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYUNvbXB1dGUgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJTGFtYmRhQ29tcHV0ZSB7XG4gIHB1YmxpYyByZWFkb25seSBjb21wdXRlVHlwZSA9IFwibGFtYmRhXCIgYXMgY29uc3Q7XG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9uczogQ29ubmVjdGlvbnM7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsYW1iZGFGdW5jdGlvbjogTGFtYmRhRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElMYW1iZGFDb21wdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgeyBjb2RlLCBoYW5kbGVyLCBydW50aW1lIH0gPSByZXNvbHZlTGFtYmRhRGVwbG95bWVudChwcm9wcyk7XG5cbiAgICAvLyBDb252ZXJ0IHByZXNlbmNlLWJhc2VkIGZ1bmN0aW9uVXJsIGNvbmZpZyB0byBsZWdhY3kgYm9vbGVhbiBmb3JtYXRcbiAgICBjb25zdCBmdW5jdGlvblVybENvbmZpZyA9IHByb3BzLmZ1bmN0aW9uVXJsO1xuICAgIGNvbnN0IGVuYWJsZUZ1bmN0aW9uVXJsID1cbiAgICAgIGZ1bmN0aW9uVXJsQ29uZmlnICE9PSB1bmRlZmluZWQgJiYgZnVuY3Rpb25VcmxDb25maWcgIT09IGZhbHNlO1xuICAgIGNvbnN0IGZ1bmN0aW9uVXJsQXV0aFR5cGUgPVxuICAgICAgZW5hYmxlRnVuY3Rpb25VcmwgJiYgdHlwZW9mIGZ1bmN0aW9uVXJsQ29uZmlnID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gZnVuY3Rpb25VcmxDb25maWcuYXV0aFR5cGVcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZnVuY3Rpb25VcmxDb3JzID1cbiAgICAgIGVuYWJsZUZ1bmN0aW9uVXJsICYmIHR5cGVvZiBmdW5jdGlvblVybENvbmZpZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IGZ1bmN0aW9uVXJsQ29uZmlnLmNvcnNcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZnVuY3Rpb25VcmxJbnZva2VNb2RlID1cbiAgICAgIGVuYWJsZUZ1bmN0aW9uVXJsICYmIHR5cGVvZiBmdW5jdGlvblVybENvbmZpZyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IGZ1bmN0aW9uVXJsQ29uZmlnLmludm9rZU1vZGVcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBsYW1iZGFQcm9wcyA9IHtcbiAgICAgIGNvZGUsXG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIGhhbmRsZXIsXG4gICAgICBydW50aW1lLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBwcm9wcy5hcmNoaXRlY3R1cmUsXG4gICAgICB0aW1lb3V0OiBwcm9wcy50aW1lb3V0LFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSxcbiAgICAgIGxhbWJkYURlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHJvbGVEZXNjcmlwdGlvbjogcHJvcHMucm9sZURlc2NyaXB0aW9uLFxuICAgICAgaW5saW5lUG9saWN5OiBwcm9wcy5pbmxpbmVQb2xpY3kgfHwgW10sXG4gICAgICBlbmFibGVGdW5jdGlvblVybCxcbiAgICAgIGZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gICAgICBmdW5jdGlvblVybENvcnMsXG4gICAgICBmdW5jdGlvblVybEludm9rZU1vZGUsXG4gICAgICBzY2hlZHVsZUV4cHJlc3Npb246IHByb3BzLnNjaGVkdWxlRXhwcmVzc2lvbixcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplOiBwcm9wcy5lcGhlbWVyYWxTdG9yYWdlU2l6ZSxcbiAgICAgIHNlY3JldHM6IHByb3BzLnNlY3JldHMsXG4gICAgICBzc21TZWNyZXRzUGF0aDogcHJvcHMuc3NtU2VjcmV0c1BhdGgsXG4gICAgICBzZWNyZXRzSW1wb3J0OiBwcm9wcy5zZWNyZXRzSW1wb3J0LFxuICAgICAgZW52aXJvbm1lbnQ6IHByb3BzLmVudmlyb25tZW50LFxuICAgICAgYXBwTmFtZTogcHJvcHMuYXBwTmFtZSxcbiAgICAgIGZ1bmN0aW9uTmFtZTogaWRcbiAgICB9O1xuXG4gICAgdGhpcy5sYW1iZGFGdW5jdGlvbiA9IG5ldyBMYW1iZGFGdW5jdGlvbihzY29wZSwgYCR7aWR9TGFtYmRhYCwgbGFtYmRhUHJvcHMpO1xuXG4gICAgLy8gQ0RLJ3MgRnVuY3Rpb24uY29ubmVjdGlvbnMgZ2V0dGVyIHRocm93cyBmb3Igbm9uLVZQQyBMYW1iZGFzLCBzbyBvbmx5XG4gICAgLy8gYWNjZXNzIGl0IHdoZW4gYSBWUEMgaXMgY29uZmlndXJlZC4gTm9uLVZQQyBMYW1iZGFzIGdldCBhbiBlbXB0eVxuICAgIC8vIENvbm5lY3Rpb25zIG9iamVjdCB0byBzYXRpc2Z5IHRoZSBJQ29ubmVjdGFibGUgaW50ZXJmYWNlLlxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSBwcm9wcy52cGNcbiAgICAgID8gdGhpcy5sYW1iZGFGdW5jdGlvbi5jb25uZWN0aW9uc1xuICAgICAgOiBuZXcgQ29ubmVjdGlvbnMoKTtcblxuICAgIC8vIFByb2Nlc3MgY29ubmVjdGlvbnMgdXNpbmcgdGhlIHVuaWZpZWQgY29ubmVjdG9yIGludGVyZmFjZVxuICAgIGlmIChwcm9wcy5jb25uZWN0aW9ucyAmJiBwcm9wcy5jb25uZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIXByb3BzLnZwYykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYExhbWJkYSAnJHtpZH0nIGhhcyBjb25uZWN0aW9ucyBjb25maWd1cmVkIGJ1dCBubyBWUEMuIGAgK1xuICAgICAgICAgICAgXCJBIFZQQyBpcyByZXF1aXJlZCBmb3Igc2VjdXJpdHkgZ3JvdXAgY29ubmVjdGlvbnMuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2Nlc3NDb25uZWN0aW9ucyhcbiAgICAgICAgICBwcm9wcy5jb25uZWN0aW9ucyxcbiAgICAgICAgICB0aGlzLmxhbWJkYUZ1bmN0aW9uLCAvLyBJR3JhbnRhYmxlIChleGVjdXRpb24gcm9sZSlcbiAgICAgICAgICB0aGlzLmxhbWJkYUZ1bmN0aW9uIC8vIElDb25uZWN0YWJsZSAoc2VjdXJpdHkgZ3JvdXApXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZhaWxlZCB0byBwcm9jZXNzIGNvbm5lY3Rpb25zIGZvciBMYW1iZGEgJyR7aWR9JzogJHtcbiAgICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIExhbWJkYSBmdW5jdGlvbiBieSBuYW1lLlxuICAgKiBTaW5jZSB3ZSBvbmx5IGhhdmUgb25lIGZ1bmN0aW9uLCBuYW1lIGlzIGlnbm9yZWQuXG4gICAqL1xuICBnZXRGdW5jdGlvbihfbmFtZT86IHN0cmluZyk6IElGdW5jdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGFtYmRhRnVuY3Rpb247XG4gIH1cblxuICAvKiogR2V0IGFsbCBMYW1iZGEgZnVuY3Rpb25zLiAqL1xuICBnZXRBbGxGdW5jdGlvbnMoKTogSUZ1bmN0aW9uW10ge1xuICAgIHJldHVybiBbdGhpcy5sYW1iZGFGdW5jdGlvbl07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdW5jdGlvbiBVUkwgZm9yIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKi9cbiAgZ2V0RnVuY3Rpb25VcmwoX25hbWU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxhbWJkYUZ1bmN0aW9uLmdldEZ1bmN0aW9uVXJsKCk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgaW52b2tlIHBlcm1pc3Npb25zIHRvIGEgZ3JhbnRlZS5cbiAgICovXG4gIGdyYW50SW52b2tlKGdyYW50ZWU6IElHcmFudGFibGUsIF9mdW5jdGlvbk5hbWU/OiBzdHJpbmcpOiBHcmFudCB7XG4gICAgcmV0dXJuIHRoaXMubGFtYmRhRnVuY3Rpb24uZ3JhbnRJbnZva2UoZ3JhbnRlZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzZWN1cml0eSBncm91cCBmb3IgVlBDLWVuYWJsZWQgTGFtYmRhIGZ1bmN0aW9ucy5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIExhbWJkYSBpcyBub3QgVlBDLWVuYWJsZWQuXG4gICAqL1xuICBnZXRTZWN1cml0eUdyb3VwKCk6IElTZWN1cml0eUdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IHRoaXMuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHM7XG4gICAgcmV0dXJuIHNlY3VyaXR5R3JvdXBzLmxlbmd0aCA+IDAgPyBzZWN1cml0eUdyb3Vwc1swXSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgTGFtYmRhIGZ1bmN0aW9uIGNvbnN0cnVjdC5cbiAgICovXG4gIGdldExhbWJkYUZ1bmN0aW9uKCk6IExhbWJkYUZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5sYW1iZGFGdW5jdGlvbjtcbiAgfVxufVxuXG4vKipcbiAqIEVDMiBjb21wdXRlIHdyYXBwZXIgaW1wbGVtZW50aW5nIElFYzJDb21wdXRlLlxuICogUHJvdmlkZXMgdHlwZS1zYWZlIGFjY2VzcyB0byBFQzItc3BlY2lmaWMgcmVzb3VyY2VzLlxuICovXG5leHBvcnQgY2xhc3MgRWMyQ29tcHV0ZSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElFYzJDb21wdXRlIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbXB1dGVUeXBlID0gXCJlYzJcIiBhcyBjb25zdDtcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25zOiBDb25uZWN0aW9ucztcblxuICBwcml2YXRlIHJlYWRvbmx5IGVjMkluc3RhbmNlOiBFYzJJbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSUVjMkNvbXB1dGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBlbmFibGVTU0ggPSBwcm9wcy5zc2ggIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5zc2ggIT09IGZhbHNlO1xuXG4gICAgY29uc3QgZWMyUHJvcHMgPSB7XG4gICAgICBzZXJ2aWNlTmFtZTogYCR7aWR9U2VydmljZWAsXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZSB8fCBDT01QVVRFX0RFRkFVTFRTLkVDMi5JTlNUQU5DRV9UWVBFLFxuICAgICAgZW5hYmxlU1NILFxuICAgICAgdXNlckRhdGE6IHByb3BzLnVzZXJEYXRhLFxuICAgICAgbWFjaGluZUltYWdlOiBwcm9wcy5tYWNoaW5lSW1hZ2UsXG4gICAgICBtaW5DYXBhY2l0eTogcHJvcHMubWluQ2FwYWNpdHkgfHwgQ09NUFVURV9ERUZBVUxUUy5FQzIuTUlOX0NBUEFDSVRZLFxuICAgICAgbWF4Q2FwYWNpdHk6IHByb3BzLm1heENhcGFjaXR5IHx8IENPTVBVVEVfREVGQVVMVFMuRUMyLk1BWF9DQVBBQ0lUWSxcbiAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgc3BvdENhcGFjaXR5UGVyY2VudGFnZTogcHJvcHMuc3BvdENhcGFjaXR5UGVyY2VudGFnZVxuICAgIH07XG5cbiAgICB0aGlzLmVjMkluc3RhbmNlID0gbmV3IEVjMkluc3RhbmNlKHNjb3BlLCBgJHtpZH1FYzJgLCBlYzJQcm9wcyk7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuZWMySW5zdGFuY2UuY29ubmVjdGlvbnM7XG4gIH1cblxuICAvKiogR2V0IHRoZSBBdXRvIFNjYWxpbmcgR3JvdXAuICovXG4gIGdldEF1dG9TY2FsaW5nR3JvdXAoKTogSUF1dG9TY2FsaW5nR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmVjMkluc3RhbmNlLmdldEF1dG9TY2FsaW5nR3JvdXAoKTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHNlY3VyaXR5IGdyb3VwLiAqL1xuICBnZXRTZWN1cml0eUdyb3VwKCk6IElTZWN1cml0eUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5lYzJJbnN0YW5jZS5hc2dTZWN1cml0eUdyb3VwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdW5kZXJseWluZyBFQzIgaW5zdGFuY2UgY29uc3RydWN0LlxuICAgKi9cbiAgZ2V0RWMySW5zdGFuY2UoKTogRWMySW5zdGFuY2Uge1xuICAgIHJldHVybiB0aGlzLmVjMkluc3RhbmNlO1xuICB9XG59XG5cbi8vIFJlLWV4cG9ydCB0eXBlIGd1YXJkcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IGlzQ29tcHV0ZSwgaXNFY3NDb21wdXRlLCBpc0xhbWJkYUNvbXB1dGUsIGlzRWMyQ29tcHV0ZSB9O1xuZXhwb3J0IHR5cGUgeyBJRWNzQ29tcHV0ZSwgSUxhbWJkYUNvbXB1dGUsIElFYzJDb21wdXRlLCBBbnlDb21wdXRlIH07XG4iXX0=
@@ -53,7 +53,7 @@ export interface SecretRotationConfig {
53
53
  export interface EncryptionConfig {
54
54
  storageKey?: EncryptionKeySpec;
55
55
  }
56
- export type PerformanceInsightsRetentionPeriod = 7 | 31 | 93 | 186 | 372 | 731;
56
+ export type PerformanceInsightsRetentionPeriod = 7 | 31 | 93 | 186 | 372;
57
57
  export interface PerformanceInsightsConfig {
58
58
  encryptionKey?: EncryptionKeySpec;
59
59
  /** Retention period in days. Default: 31 (1 month). */
@@ -230,7 +230,7 @@ export type IDatabaseProps = AuroraDatabaseProps | InstanceDatabaseProps | Globa
230
230
  * // Aurora database - returns RelationalDatabase
231
231
  * const aurora = app.addDatabase(DatabaseFactory.build("Main", {
232
232
  * type: "Aurora",
233
- * databaseName: "myapp"
233
+ * databaseName: "my_app"
234
234
  * }));
235
235
  * aurora.getHostEndpoint(); // Available
236
236
  *
@@ -283,7 +283,7 @@ export declare class DynamoDBDatabase extends Construct implements IDynamoDBData
283
283
  * @example
284
284
  * const db = app.addDatabase(DatabaseFactory.build("Main", {
285
285
  * type: "Aurora",
286
- * databaseName: "myapp"
286
+ * databaseName: "my_app"
287
287
  * }));
288
288
  * db.grantConnect(lambda);
289
289
  */