hyperp 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cli/bin/hyperp.js CHANGED
@@ -4,6 +4,29 @@ const { Command } = require("commander");
4
4
  const { deploy } = require("./commands/deploy");
5
5
  const { destroy } = require("./commands/destroy");
6
6
  const { listRuns } = require("./commands/list-runs");
7
+ const path = require("path");
8
+ const fs = require("fs");
9
+
10
+ // Read version from package.json (try multiple possible locations)
11
+ function getVersion() {
12
+ const possiblePaths = [
13
+ path.join(__dirname, "../../package.json"), // From npm package
14
+ path.join(__dirname, "../../../package.json"), // From npm package (alternative)
15
+ path.join(__dirname, "../../../../package.json"), // From npm package (another alternative)
16
+ ];
17
+
18
+ for (const pkgPath of possiblePaths) {
19
+ if (fs.existsSync(pkgPath)) {
20
+ try {
21
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
22
+ return pkg.version || "1.0.0";
23
+ } catch (e) {
24
+ // Continue to next path
25
+ }
26
+ }
27
+ }
28
+ return "1.0.0"; // Fallback
29
+ }
7
30
 
8
31
  const program = new Command();
9
32
 
@@ -12,7 +35,7 @@ program
12
35
  .description(
13
36
  "CLI tool for Hyperp - Fully automated pay-as-you-go compute platform"
14
37
  )
15
- .version("1.0.0");
38
+ .version(getVersion());
16
39
 
17
40
  program
18
41
  .command("deploy")
@@ -362,16 +362,17 @@ class HyperpStack extends cdk.Stack {
362
362
  vpcSubnets: { subnetType: ec2.SubnetType.PUBLIC },
363
363
  securityGroups: [ecsTaskSecurityGroup],
364
364
  allowPublicSubnet: true,
365
- environment: {
366
- EFS_FILE_SYSTEM_ID: fileSystem.fileSystemId,
367
- },
368
- role: lambdaRole,
369
- filesystem: lambda.FileSystem.fromEfsAccessPoint(lambdaAccessPoint, "/mnt/efs"),
370
365
  bundling: {
371
366
  minify: true,
372
367
  sourceMap: true,
373
368
  format: aws_lambda_nodejs_1.OutputFormat.CJS,
374
369
  },
370
+ depsLockFilePath: undefined, // Don't require lock file - dependencies are in root package.json
371
+ environment: {
372
+ EFS_FILE_SYSTEM_ID: fileSystem.fileSystemId,
373
+ },
374
+ role: lambdaRole,
375
+ filesystem: lambda.FileSystem.fromEfsAccessPoint(lambdaAccessPoint, "/mnt/efs"),
375
376
  });
376
377
  // ============================================
377
378
  // Collect subnet IDs for environment variables
@@ -412,6 +413,7 @@ class HyperpStack extends cdk.Stack {
412
413
  sourceMap: true,
413
414
  format: aws_lambda_nodejs_1.OutputFormat.CJS,
414
415
  },
416
+ depsLockFilePath: undefined, // Don't require lock file - dependencies are in root package.json
415
417
  });
416
418
  // Create Function URL for GitHub Webhook Handler
417
419
  const webhookFunctionUrl = githubWebhookHandler.addFunctionUrl({
@@ -457,6 +459,7 @@ class HyperpStack extends cdk.Stack {
457
459
  sourceMap: true,
458
460
  format: aws_lambda_nodejs_1.OutputFormat.CJS,
459
461
  },
462
+ depsLockFilePath: undefined, // Don't require lock file - dependencies are in root package.json
460
463
  });
461
464
  // ============================================
462
465
  // EventBridge Rule for ECS Task State Changes
@@ -544,6 +547,7 @@ class HyperpStack extends cdk.Stack {
544
547
  sourceMap: true,
545
548
  format: aws_lambda_nodejs_1.OutputFormat.CJS,
546
549
  },
550
+ depsLockFilePath: undefined, // Don't require lock file - dependencies are in root package.json
547
551
  });
548
552
  // Create Function URL
549
553
  const functionUrl = cliRestApiLambda.addFunctionUrl({
@@ -561,4 +565,4 @@ class HyperpStack extends cdk.Stack {
561
565
  }
562
566
  }
563
567
  exports.HyperpStack = HyperpStack;
564
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlwZXJwLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2h5cGVycC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBbUM7QUFFbkMseURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MseURBQTJDO0FBQzNDLG1FQUFxRDtBQUNyRCx1REFBeUM7QUFDekMsK0RBQWlEO0FBQ2pELHFFQUE2RTtBQUM3RSwyREFBNkM7QUFDN0MseURBQTJDO0FBQzNDLCtEQUFpRDtBQUNqRCx3RUFBMEQ7QUFFMUQsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUV6QixNQUFhLFdBQVksU0FBUSxHQUFHLENBQUMsS0FBSztJQUN4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLGdGQUFnRjtRQUNoRiw2RUFBNkU7UUFDN0Usd0RBQXdEO1FBQ3hELE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBa0IsRUFBVSxFQUFFO1lBQ25ELG9GQUFvRjtZQUNwRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDakUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUM7WUFDRCw4RUFBOEU7WUFDOUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzlELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDO1lB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QUFFLFdBQVcsQ0FBQyxHQUFHO1lBQ3RCLFdBQVcsRUFBRSwyQkFBMkI7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBdG5CRCxrQ0FzbkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCI7XG5pbXBvcnQgKiBhcyBlY3IgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3JcIjtcbmltcG9ydCAqIGFzIGVmcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVmc1wiO1xuaW1wb3J0ICogYXMgZHluYW1vZGIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0ICogYXMgczMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvbiwgT3V0cHV0Rm9ybWF0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCI7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xuaW1wb3J0ICogYXMgczNkZXBsb3kgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50XCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcblxuZXhwb3J0IGNsYXNzIEh5cGVycFN0YWNrIGV4dGVuZHMgY2RrLlN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBjZGsuU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgLy8gUmVzb2x2ZSBMYW1iZGEgZW50cnkgcGF0aHMgLSBoYW5kbGUgYm90aCBkZXZlbG9wbWVudCBhbmQgbnBtIHBhY2thZ2UgY29udGV4dHNcbiAgICAvLyBXaGVuIGNvbXBpbGVkLCBfX2Rpcm5hbWUgaXMgZGlzdC9saWIvLCBzbyB3ZSBuZWVkIHRvIGdvIHVwIHRvIHBhY2thZ2Ugcm9vdFxuICAgIC8vIFdoZW4gaW4gbnBtIHBhY2thZ2UsIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFja2FnZSByb290XG4gICAgY29uc3QgZ2V0TGFtYmRhUGF0aCA9IChsYW1iZGFQYXRoOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgLy8gVHJ5IHJlbGF0aXZlIHRvIF9fZGlybmFtZSBmaXJzdCAoZm9yIG5wbSBwYWNrYWdlIC0gZ28gdXAgMiBsZXZlbHMgZnJvbSBkaXN0L2xpYi8pXG4gICAgICBjb25zdCBucG1QYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi8uLi9sYW1iZGFcIiwgbGFtYmRhUGF0aCk7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhucG1QYXRoKSkge1xuICAgICAgICByZXR1cm4gbnBtUGF0aDtcbiAgICAgIH1cbiAgICAgIC8vIFRyeSByZWxhdGl2ZSB0byBfX2Rpcm5hbWUgd2l0aCBvbmUgbGVzcyBsZXZlbCAoZm9yIGRldmVsb3BtZW50IC0gZnJvbSBsaWIvKVxuICAgICAgY29uc3QgZGV2UGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vbGFtYmRhXCIsIGxhbWJkYVBhdGgpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZGV2UGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGRldlBhdGg7XG4gICAgICB9XG4gICAgICAvLyBGYWxsYmFjazogdHJ5IHRvIGZpbmQgcGFja2FnZSByb290IGJ5IGxvb2tpbmcgZm9yIHBhY2thZ2UuanNvblxuICAgICAgbGV0IGN1cnJlbnREaXIgPSBfX2Rpcm5hbWU7XG4gICAgICB3aGlsZSAoY3VycmVudERpciAhPT0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpKSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihjdXJyZW50RGlyLCBcInBhY2thZ2UuanNvblwiKTtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkge1xuICAgICAgICAgIGNvbnN0IGxhbWJkYUZ1bGxQYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsIFwibGFtYmRhXCIsIGxhbWJkYVBhdGgpO1xuICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGxhbWJkYUZ1bGxQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhbWJkYUZ1bGxQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgICAgfVxuICAgICAgLy8gTGFzdCByZXNvcnQ6IHJldHVybiB0aGUgcGF0aCByZWxhdGl2ZSB0byBfX2Rpcm5hbWUgKHdpbGwgZmFpbCBpZiBmaWxlIGRvZXNuJ3QgZXhpc3QpXG4gICAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9sYW1iZGFcIiwgbGFtYmRhUGF0aCk7XG4gICAgfTtcblxuICAgIC8vIEdldCBHaXRIdWIgQXBwIGNvbmZpZ3VyYXRpb24gZnJvbSBDREsgY29udGV4dFxuICAgIGNvbnN0IGdpdGh1YkFwcElkID1cbiAgICAgIHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwiZ2l0aHViQXBwSWRcIikgfHwgcHJvY2Vzcy5lbnYuR0lUSFVCX0FQUF9JRDtcbiAgICBjb25zdCBnaXRodWJBcHBXZWJob29rU2VjcmV0ID1cbiAgICAgIHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwiZ2l0aHViQXBwV2ViaG9va1NlY3JldFwiKSB8fFxuICAgICAgcHJvY2Vzcy5lbnYuR0lUSFVCX0FQUF9XRUJIT09LX1NFQ1JFVDtcblxuICAgIGlmICghZ2l0aHViQXBwSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJHaXRIdWIgQXBwIElEIGlzIHJlcXVpcmVkLiBQcm92aWRlIGl0IHZpYSAtLWdpdGh1Yi1hcHAtaWQgb3IgQ0RLIGNvbnRleHQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFnaXRodWJBcHBXZWJob29rU2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiR2l0SHViIEFwcCB3ZWJob29rIHNlY3JldCBpcyByZXF1aXJlZC4gUHJvdmlkZSBpdCB2aWEgLS1naXRodWItYXBwLXdlYmhvb2stc2VjcmV0IG9yIENESyBjb250ZXh0LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gVlBDIC0gTGFyZ2UgYWRkcmVzc2FibGUgVlBDIChQdWJsaWMgc3VibmV0cyBvbmx5IHRvIGF2b2lkIE5BVCBnYXRld2F5IGNvc3RzKVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgdnBjID0gbmV3IGVjMi5WcGModGhpcywgXCJIeXBlcnBWcGNcIiwge1xuICAgICAgbWF4QXpzOiAzLFxuICAgICAgaXBBZGRyZXNzZXM6IGVjMi5JcEFkZHJlc3Nlcy5jaWRyKFwiMTAuMC4wLjAvMTZcIiksXG4gICAgICBuYXRHYXRld2F5czogMCwgLy8gTm8gTkFUIGdhdGV3YXlzIC0gdXNpbmcgcHVibGljIHN1Ym5ldHMgb25seVxuICAgICAgc3VibmV0Q29uZmlndXJhdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgY2lkck1hc2s6IDIwLFxuICAgICAgICAgIG5hbWU6IFwiUHVibGljXCIsXG4gICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUzMgQnVja2V0IGZvciBhcnRpZmFjdHMgKEdpdEh1YiBBcHAgUEVNIGtleSlcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIExldCBDREsgZ2VuZXJhdGUgYSB1bmlxdWUgYnVja2V0IG5hbWUgdG8gYXZvaWQgZ2xvYmFsIG5hbWluZyBjb25mbGljdHNcbiAgICAvLyBUaGUgYnVja2V0IG5hbWUgd2lsbCBiZSBhdmFpbGFibGUgdmlhIHN0YWNrIG91dHB1dHNcbiAgICBjb25zdCBhcnRpZmFjdHNCdWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsIFwiSHlwZXJwQXJ0aWZhY3RzQnVja2V0XCIsIHtcbiAgICAgIC8vIFJlbW92ZWQgZml4ZWQgYnVja2V0TmFtZSB0byBhdm9pZCBnbG9iYWwgbmFtaW5nIGNvbmZsaWN0c1xuICAgICAgLy8gQ0RLIHdpbGwgZ2VuZXJhdGU6IGh5cGVycHN0YWNrLWh5cGVycGFydGlmYWN0c2J1Y2tldC08cmFuZG9tPlxuICAgICAgdmVyc2lvbmVkOiB0cnVlLFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IHMzLkJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiBmYWxzZSwgLy8gS2VlcCBvYmplY3RzIHdoZW4gc3RhY2sgaXMgZGVsZXRlZFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBEeW5hbW9EQiBUYWJsZSB3aXRoIEdTSVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgdGFibGUgPSBuZXcgZHluYW1vZGIuVGFibGUodGhpcywgXCJIeXBlcnBUYWJsZVwiLCB7XG4gICAgICB0YWJsZU5hbWU6IFwiaHlwZXJwXCIsXG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJQS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgc29ydEtleTogeyBuYW1lOiBcIlNLXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBiaWxsaW5nTW9kZTogZHluYW1vZGIuQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNULFxuICAgICAgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIEdTSTEgZm9yIHF1ZXJ5aW5nIHdvcmtmbG93cywgd29ya2Zsb3cgcnVucywgZXRjLlxuICAgIHRhYmxlLmFkZEdsb2JhbFNlY29uZGFyeUluZGV4KHtcbiAgICAgIGluZGV4TmFtZTogXCJHU0kxXCIsXG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJHU0kxLVBLXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwiR1NJMS1TS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgIH0pO1xuXG4gICAgLy8gR1NJMiBmb3IgcXVlcnlpbmcgd29ya2Zsb3cgcnVucyBieSBjb21taXQgaGFzaFxuICAgIHRhYmxlLmFkZEdsb2JhbFNlY29uZGFyeUluZGV4KHtcbiAgICAgIGluZGV4TmFtZTogXCJHU0kyXCIsXG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJHU0kyLVBLXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwiR1NJMi1TS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgIH0pO1xuXG4gICAgLy8gR1NJMyBmb3IgcXVlcnlpbmcgYWxsIHdvcmtmbG93IHJ1bnMgc29ydGVkIGJ5IGNyZWF0aW9uIHRpbWVcbiAgICB0YWJsZS5hZGRHbG9iYWxTZWNvbmRhcnlJbmRleCh7XG4gICAgICBpbmRleE5hbWU6IFwiR1NJM1wiLFxuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwiR1NJMy1QS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgc29ydEtleTogeyBuYW1lOiBcIkdTSTMtU0tcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgIHByb2plY3Rpb25UeXBlOiBkeW5hbW9kYi5Qcm9qZWN0aW9uVHlwZS5JTkNMVURFLFxuICAgICAgbm9uS2V5QXR0cmlidXRlczogW1xuICAgICAgICBcIndvcmtmbG93TmFtZVwiLFxuICAgICAgICBcInN0YXR1c1wiLFxuICAgICAgICBcImNyZWF0ZWRBdFwiLFxuICAgICAgICBcInVwZGF0ZWRBdFwiLFxuICAgICAgICBcImVudGl0eUlkXCIsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBFQ1IgUmVwb3NpdG9yeVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZWNyUmVwb3NpdG9yeSA9IG5ldyBlY3IuUmVwb3NpdG9yeSh0aGlzLCBcIkh5cGVycFJlcG9zaXRvcnlcIiwge1xuICAgICAgcmVwb3NpdG9yeU5hbWU6IFwiaHlwZXJwLTFcIixcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgIGltYWdlU2Nhbk9uUHVzaDogZmFsc2UsXG4gICAgICBsaWZlY3ljbGVSdWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiS2VlcCBsYXN0IDEwMCBpbWFnZXNcIixcbiAgICAgICAgICBtYXhJbWFnZUNvdW50OiAxMDAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBFQ1MgQ2x1c3RlclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgY2x1c3RlciA9IG5ldyBlY3MuQ2x1c3Rlcih0aGlzLCBcIkh5cGVycENsdXN0ZXJcIiwge1xuICAgICAgY2x1c3Rlck5hbWU6IFwiaHlwZXJwLTFcIixcbiAgICAgIHZwYzogdnBjLFxuICAgICAgY29udGFpbmVySW5zaWdodHM6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEVGUyBGaWxlIFN5c3RlbSBmb3IgYXJ0aWZhY3Qgc2hhcmluZ1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZmlsZVN5c3RlbSA9IG5ldyBlZnMuRmlsZVN5c3RlbSh0aGlzLCBcIkh5cGVycEVmc1wiLCB7XG4gICAgICB2cGM6IHZwYyxcbiAgICAgIGVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgIGxpZmVjeWNsZVBvbGljeTogZWZzLkxpZmVjeWNsZVBvbGljeS5BRlRFUl8xNF9EQVlTLFxuICAgICAgcGVyZm9ybWFuY2VNb2RlOiBlZnMuUGVyZm9ybWFuY2VNb2RlLkdFTkVSQUxfUFVSUE9TRSxcbiAgICAgIHRocm91Z2hwdXRNb2RlOiBlZnMuVGhyb3VnaHB1dE1vZGUuRUxBU1RJQyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgIGZpbGVTeXN0ZW1Qb2xpY3k6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkNsaWVudE1vdW50XCIsXG4gICAgICAgICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50V3JpdGVcIixcbiAgICAgICAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbTpDbGllbnRSb290QWNjZXNzXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcHJpbmNpcGFsczogW25ldyBpYW0uQW55UHJpbmNpcGFsKCldLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgICBCb29sOiB7XG4gICAgICAgICAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbTpBY2Nlc3NlZFZpYU1vdW50VGFyZ2V0XCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gU2VjdXJpdHkgZ3JvdXAgZm9yIEVDUyB0YXNrc1xuICAgIGNvbnN0IGVjc1Rhc2tTZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIFwiRWNzVGFza1NlY3VyaXR5R3JvdXBcIixcbiAgICAgIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlNlY3VyaXR5IGdyb3VwIGZvciBFQ1MgdGFza3NcIixcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gQWxsb3cgRUNTIHRhc2tzIHRvIGNvbm5lY3QgdG8gRUZTIG9uIE5GUyBwb3J0XG4gICAgZmlsZVN5c3RlbS5jb25uZWN0aW9ucy5hbGxvd0Zyb20oXG4gICAgICBlY3NUYXNrU2VjdXJpdHlHcm91cCxcbiAgICAgIGVjMi5Qb3J0LnRjcCgyMDQ5KSxcbiAgICAgIFwiQWxsb3cgTkZTIGZyb20gRUNTIHRhc2tzXCJcbiAgICApO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBDbG91ZFdhdGNoIExvZ3NcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGVjc0xvZ0dyb3VwID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgXCJIeXBlcnBFY3NMb2dHcm91cFwiLCB7XG4gICAgICBsb2dHcm91cE5hbWU6IFwiL2h5cGVycFwiLFxuICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBJQU0gUm9sZXNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgLy8gRUNTIFRhc2sgRXhlY3V0aW9uIFJvbGVcbiAgICBjb25zdCBlY3NUYXNrRXhlY3V0aW9uUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkVjc1Rhc2tFeGVjdXRpb25Sb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiZWNzLXRhc2tzLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FtYXpvbkVDU1Rhc2tFeGVjdXRpb25Sb2xlUG9saWN5XCJcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBFQ1IgcGVybWlzc2lvbnNcbiAgICBlY3JSZXBvc2l0b3J5LmdyYW50UHVsbChlY3NUYXNrRXhlY3V0aW9uUm9sZSk7XG5cbiAgICAvLyBFQ1MgVGFzayBSb2xlIChmb3IgY29udGFpbmVycylcbiAgICBjb25zdCBlY3NUYXNrUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkVjc1Rhc2tSb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiZWNzLXRhc2tzLmFtYXpvbmF3cy5jb21cIiksXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBFRlMgcGVybWlzc2lvbnMgdG8gdGFzayByb2xlXG4gICAgZWNzVGFza1JvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkNsaWVudE1vdW50XCIsXG4gICAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbTpDbGllbnRXcml0ZVwiLFxuICAgICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50Um9vdEFjY2Vzc1wiLFxuICAgICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW06RGVzY3JpYmVNb3VudFRhcmdldHNcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbZmlsZVN5c3RlbS5maWxlU3lzdGVtQXJuXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEdyYW50IEVDUiBwdXNoL3B1bGwgZm9yIGltYWdlIGJ1aWxkc1xuICAgIGVjclJlcG9zaXRvcnkuZ3JhbnRQdWxsUHVzaChlY3NUYXNrUm9sZSk7XG5cbiAgICAvLyBHcmFudCBTMyBhY2Nlc3MgZm9yIHJlYWRpbmcgcmVwb3NpdG9yeSBjb250ZW50IGFuZCB1cGxvYWRpbmcgYXJ0aWZhY3RzXG4gICAgZWNzVGFza1JvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInMzOkdldE9iamVjdFwiLCBcInMzOkxpc3RCdWNrZXRcIiwgXCJzMzpQdXRPYmplY3RcIl0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEdyYW50IER5bmFtb0RCIHBlcm1pc3Npb25zIGZvciB1c2FnZSBjYWxjdWxhdG9yIHRhc2tzXG4gICAgdGFibGUuZ3JhbnRSZWFkV3JpdGVEYXRhKGVjc1Rhc2tSb2xlKTtcbiAgICAvLyBFeHBsaWNpdGx5IGdyYW50IFVwZGF0ZUl0ZW0gcGVybWlzc2lvbiB0byBlbnN1cmUgdXNhZ2UgY2FsY3VsYXRvciBjYW4gdXBkYXRlIGl0ZW1zXG4gICAgZWNzVGFza1JvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImR5bmFtb2RiOkdldEl0ZW1cIixcbiAgICAgICAgICBcImR5bmFtb2RiOlB1dEl0ZW1cIixcbiAgICAgICAgICBcImR5bmFtb2RiOlVwZGF0ZUl0ZW1cIixcbiAgICAgICAgICBcImR5bmFtb2RiOlF1ZXJ5XCIsXG4gICAgICAgICAgXCJkeW5hbW9kYjpTY2FuXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW3RhYmxlLnRhYmxlQXJuLCBgJHt0YWJsZS50YWJsZUFybn0vaW5kZXgvKmBdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBMYW1iZGEgRXhlY3V0aW9uIFJvbGVcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGxhbWJkYVJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJIeXBlcnBMYW1iZGFSb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwibGFtYmRhLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGVcIlxuICAgICAgICApLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlXCJcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBEeW5hbW9EQiBwZXJtaXNzaW9uc1xuICAgIHRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGFSb2xlKTtcblxuICAgIC8vIEdyYW50IFMzIHBlcm1pc3Npb25zIChyZWFkIGFuZCB3cml0ZSBmb3IgZG93bmxvYWRhYmxlIGFydGlmYWN0cylcbiAgICBhcnRpZmFjdHNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUobGFtYmRhUm9sZSk7XG5cbiAgICAvLyBHcmFudCBDbG91ZFdhdGNoIExvZ3MgcGVybWlzc2lvbnNcbiAgICBsYW1iZGFSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJsb2dzOkdldExvZ0V2ZW50c1wiLCBcImxvZ3M6RGVzY3JpYmVMb2dTdHJlYW1zXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBHcmFudCBFQ1MgcGVybWlzc2lvbnMgZm9yIGRvd25sb2FkYWJsZSBjcmVhdG9yIHRhc2tzXG4gICAgbGFtYmRhUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiZWNzOlJlZ2lzdGVyVGFza0RlZmluaXRpb25cIixcbiAgICAgICAgICBcImVjczpSdW5UYXNrXCIsXG4gICAgICAgICAgXCJlY3M6RGVzY3JpYmVUYXNrc1wiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBHcmFudCBFQ1MgcGVybWlzc2lvbnNcbiAgICBsYW1iZGFSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJlY3M6UmVnaXN0ZXJUYXNrRGVmaW5pdGlvblwiLFxuICAgICAgICAgIFwiZWNzOlJ1blRhc2tcIixcbiAgICAgICAgICBcImVjczpEZXNjcmliZVRhc2tzXCIsXG4gICAgICAgICAgXCJlY3M6U3RvcFRhc2tcIixcbiAgICAgICAgICBcImVjczpMaXN0VGFza3NcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgSUFNIFBhc3NSb2xlIGZvciBFQ1NcbiAgICBsYW1iZGFSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJpYW06UGFzc1JvbGVcIl0sXG4gICAgICAgIHJlc291cmNlczogW2Vjc1Rhc2tFeGVjdXRpb25Sb2xlLnJvbGVBcm4sIGVjc1Rhc2tSb2xlLnJvbGVBcm5dLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgRUNSIHBlcm1pc3Npb25zXG4gICAgbGFtYmRhUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiZWNyOkdldEF1dGhvcml6YXRpb25Ub2tlblwiLFxuICAgICAgICAgIFwiZWNyOkJhdGNoQ2hlY2tMYXllckF2YWlsYWJpbGl0eVwiLFxuICAgICAgICAgIFwiZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXJcIixcbiAgICAgICAgICBcImVjcjpCYXRjaEdldEltYWdlXCIsXG4gICAgICAgICAgXCJlY3I6QmF0Y2hEZWxldGVJbWFnZVwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBHcmFudCBMYW1iZGEgaW52b2tlIHBlcm1pc3Npb25zIChmb3IgRUZTIGNvbnRyb2xsZXIpXG4gICAgbGFtYmRhUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wibGFtYmRhOkludm9rZUZ1bmN0aW9uXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpsYW1iZGE6JHt0aGlzLnJlZ2lvbn06JHt0aGlzLmFjY291bnR9OmZ1bmN0aW9uOmh5cGVycC1lZnMtY29udHJvbGxlcmAsXG4gICAgICAgICAgYGFybjphd3M6bGFtYmRhOiR7dGhpcy5yZWdpb259OiR7dGhpcy5hY2NvdW50fTpmdW5jdGlvbjpoeXBlcnAtZWZzLWNvbnRyb2xsZXI6KmAsXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEVGUyBDb250cm9sbGVyIExhbWJkYVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQ3JlYXRlIGFuIGFjY2VzcyBwb2ludCBmb3IgTGFtYmRhIHRvIG1vdW50IEVGU1xuICAgIC8vIE1vdW50IGF0IC9oeXBlcnAtYXJ0aWZhY3RzIHNvIExhbWJkYSBoYXMgd3JpdGUgYWNjZXNzIHRvIHRoYXQgZGlyZWN0b3J5XG4gICAgY29uc3QgbGFtYmRhQWNjZXNzUG9pbnQgPSBuZXcgZWZzLkFjY2Vzc1BvaW50KFxuICAgICAgdGhpcyxcbiAgICAgIFwiTGFtYmRhRWZzQWNjZXNzUG9pbnRcIixcbiAgICAgIHtcbiAgICAgICAgZmlsZVN5c3RlbTogZmlsZVN5c3RlbSxcbiAgICAgICAgcGF0aDogXCIvaHlwZXJwLWFydGlmYWN0c1wiLFxuICAgICAgICBjcmVhdGVBY2w6IHtcbiAgICAgICAgICBvd25lckdpZDogXCIxMDAwXCIsXG4gICAgICAgICAgb3duZXJVaWQ6IFwiMTAwMFwiLFxuICAgICAgICAgIHBlcm1pc3Npb25zOiBcIjc3N1wiLCAvLyBNb3JlIHBlcm1pc3NpdmUgZm9yIExhbWJkYSB0byBjcmVhdGUgc3ViZGlyZWN0b3JpZXNcbiAgICAgICAgfSxcbiAgICAgICAgcG9zaXhVc2VyOiB7XG4gICAgICAgICAgdWlkOiBcIjEwMDBcIixcbiAgICAgICAgICBnaWQ6IFwiMTAwMFwiLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBlZnNDb250cm9sbGVyTGFtYmRhID0gbmV3IE5vZGVqc0Z1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiSHlwZXJwRWZzQ29udHJvbGxlclwiLFxuICAgICAge1xuICAgICAgICBmdW5jdGlvbk5hbWU6IFwiaHlwZXJwLWVmcy1jb250cm9sbGVyXCIsXG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgICBoYW5kbGVyOiBcImhhbmRsZXJcIixcbiAgICAgICAgZW50cnk6IGdldExhbWJkYVBhdGgoXCJlZnMtY29udHJvbGxlci9pbmRleC50c1wiKSxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgICB2cGNTdWJuZXRzOiB7IHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyB9LFxuICAgICAgICBzZWN1cml0eUdyb3VwczogW2Vjc1Rhc2tTZWN1cml0eUdyb3VwXSxcbiAgICAgICAgYWxsb3dQdWJsaWNTdWJuZXQ6IHRydWUsXG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgRUZTX0ZJTEVfU1lTVEVNX0lEOiBmaWxlU3lzdGVtLmZpbGVTeXN0ZW1JZCxcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZTogbGFtYmRhUm9sZSxcbiAgICAgICAgZmlsZXN5c3RlbTogbGFtYmRhLkZpbGVTeXN0ZW0uZnJvbUVmc0FjY2Vzc1BvaW50KFxuICAgICAgICAgIGxhbWJkYUFjY2Vzc1BvaW50LFxuICAgICAgICAgIFwiL21udC9lZnNcIlxuICAgICAgICApLFxuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgICAgZm9ybWF0OiBPdXRwdXRGb3JtYXQuQ0pTLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENvbGxlY3Qgc3VibmV0IElEcyBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBwdWJsaWNTdWJuZXRJZHMgPSB2cGMucHVibGljU3VibmV0c1xuICAgICAgLm1hcCgoc3VibmV0KSA9PiBzdWJuZXQuc3VibmV0SWQpXG4gICAgICAuam9pbihcIixcIik7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEdpdEh1YiBXZWJob29rIEhhbmRsZXIgTGFtYmRhXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBnaXRodWJXZWJob29rSGFuZGxlciA9IG5ldyBOb2RlanNGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIkh5cGVycEdpdGh1YldlYmhvb2tIYW5kbGVyXCIsXG4gICAgICB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogXCJoeXBlcnAtZ2l0aHViLXdlYmhvb2staGFuZGxlclwiLFxuICAgICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgICAgaGFuZGxlcjogXCJoYW5kbGVyXCIsXG4gICAgICAgIGVudHJ5OiBnZXRMYW1iZGFQYXRoKFwiZ2l0aHViLXdlYmhvb2staGFuZGxlci9pbmRleC50c1wiKSxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgIG1lbW9yeVNpemU6IDEwMjQsXG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgRFlOQU1PREJfVEFCTEVfTkFNRTogdGFibGUudGFibGVOYW1lLFxuICAgICAgICAgIFMzX0JVQ0tFVF9OQU1FOiBhcnRpZmFjdHNCdWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICBFQ1NfQ0xVU1RFUl9BUk46IGNsdXN0ZXIuY2x1c3RlckFybixcbiAgICAgICAgICBFQ1NfQ0xVU1RFUl9OQU1FOiBjbHVzdGVyLmNsdXN0ZXJOYW1lLFxuICAgICAgICAgIEVDUl9SRVBPU0lUT1JZX1VSSTogZWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5VXJpLFxuICAgICAgICAgIEVDUl9SRVBPU0lUT1JZX05BTUU6IGVjclJlcG9zaXRvcnkucmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgRUNTX1RBU0tfRVhFQ1VUSU9OX1JPTEVfQVJOOiBlY3NUYXNrRXhlY3V0aW9uUm9sZS5yb2xlQXJuLFxuICAgICAgICAgIEVDU19UQVNLX1JPTEVfQVJOOiBlY3NUYXNrUm9sZS5yb2xlQXJuLFxuICAgICAgICAgIEVGU19GSUxFX1NZU1RFTV9JRDogZmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICAgICAgRUNTX1RBU0tfU0VDVVJJVFlfR1JPVVBfSUQ6IGVjc1Rhc2tTZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgICBQVUJMSUNfU1VCTkVUX0lEUzogcHVibGljU3VibmV0SWRzLFxuICAgICAgICAgIEVGU19DT05UUk9MTEVSX0xBTUJEQV9BUk46IGVmc0NvbnRyb2xsZXJMYW1iZGEuZnVuY3Rpb25Bcm4sXG4gICAgICAgICAgR0lUSFVCX0FQUF9JRDogZ2l0aHViQXBwSWQsXG4gICAgICAgICAgR0lUSFVCX0FQUF9XRUJIT09LX1NFQ1JFVDogZ2l0aHViQXBwV2ViaG9va1NlY3JldCxcbiAgICAgICAgICBBV1NfQUNDT1VOVF9JRDogdGhpcy5hY2NvdW50LFxuICAgICAgICB9LFxuICAgICAgICByb2xlOiBsYW1iZGFSb2xlLFxuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgICAgZm9ybWF0OiBPdXRwdXRGb3JtYXQuQ0pTLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgRnVuY3Rpb24gVVJMIGZvciBHaXRIdWIgV2ViaG9vayBIYW5kbGVyXG4gICAgY29uc3Qgd2ViaG9va0Z1bmN0aW9uVXJsID0gZ2l0aHViV2ViaG9va0hhbmRsZXIuYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgYXV0aFR5cGU6IGxhbWJkYS5GdW5jdGlvblVybEF1dGhUeXBlLk5PTkUsIC8vIFB1YmxpYyBhY2Nlc3MgZm9yIEdpdEh1YiB3ZWJob29rc1xuICAgICAgY29yczoge1xuICAgICAgICBhbGxvd2VkT3JpZ2luczogW1wiKlwiXSxcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFtsYW1iZGEuSHR0cE1ldGhvZC5QT1NUXSxcbiAgICAgICAgYWxsb3dlZEhlYWRlcnM6IFtcIipcIl0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBUYXNrIFN0YXRlIENoYW5nZSBIYW5kbGVyIExhbWJkYVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgdGFza1N0YXRlQ2hhbmdlSGFuZGxlciA9IG5ldyBOb2RlanNGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIkh5cGVycFRhc2tTdGF0ZUNoYW5nZUhhbmRsZXJcIixcbiAgICAgIHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBcImh5cGVycC10YXNrLXN0YXRlLWNoYW5nZS1oYW5kbGVyXCIsXG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgICBoYW5kbGVyOiBcImhhbmRsZXJcIixcbiAgICAgICAgZW50cnk6IGdldExhbWJkYVBhdGgoXCJ0YXNrLXN0YXRlLWNoYW5nZS1oYW5kbGVyL2luZGV4LnRzXCIpLFxuICAgICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcygyKSxcbiAgICAgICAgbWVtb3J5U2l6ZTogNTEyLFxuICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgIERZTkFNT0RCX1RBQkxFX05BTUU6IHRhYmxlLnRhYmxlTmFtZSxcbiAgICAgICAgICBFQ1NfQ0xVU1RFUl9BUk46IGNsdXN0ZXIuY2x1c3RlckFybixcbiAgICAgICAgICBFQ1NfQ0xVU1RFUl9OQU1FOiBjbHVzdGVyLmNsdXN0ZXJOYW1lLFxuICAgICAgICAgIEVDUl9SRVBPU0lUT1JZX1VSSTogZWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5VXJpLFxuICAgICAgICAgIEVDU19UQVNLX0VYRUNVVElPTl9ST0xFX0FSTjogZWNzVGFza0V4ZWN1dGlvblJvbGUucm9sZUFybixcbiAgICAgICAgICBFQ1NfVEFTS19ST0xFX0FSTjogZWNzVGFza1JvbGUucm9sZUFybixcbiAgICAgICAgICBFRlNfRklMRV9TWVNURU1fSUQ6IGZpbGVTeXN0ZW0uZmlsZVN5c3RlbUlkLFxuICAgICAgICAgIEVDU19UQVNLX1NFQ1VSSVRZX0dST1VQX0lEOiBlY3NUYXNrU2VjdXJpdHlHcm91cC5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgICAgUFVCTElDX1NVQk5FVF9JRFM6IHB1YmxpY1N1Ym5ldElkcyxcbiAgICAgICAgICBFRlNfQ09OVFJPTExFUl9MQU1CREFfQVJOOiBlZnNDb250cm9sbGVyTGFtYmRhLmZ1bmN0aW9uQXJuLFxuICAgICAgICAgIEFXU19BQ0NPVU5UX0lEOiB0aGlzLmFjY291bnQsXG4gICAgICAgICAgRkFSR0FURV9WQ1BVX1BSSUNFX1BFUl9IT1VSOiBcIjAuMDQwNDhcIixcbiAgICAgICAgICBGQVJHQVRFX0dCX1BSSUNFX1BFUl9IT1VSOiBcIjAuMDA0NDQ1XCIsXG4gICAgICAgICAgUzNfQlVDS0VUX05BTUU6IGFydGlmYWN0c0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgIEdJVEhVQl9BUFBfSUQ6IGdpdGh1YkFwcElkLFxuICAgICAgICAgIERPV05MT0FEQUJMRV9DUkVBVE9SX0lNQUdFOlxuICAgICAgICAgICAgXCJwdWJsaWMuZWNyLmF3cy9iNmc5dDhmMS9kb3dubG9hZGFibGUtY3JlYXRvcjpsYXRlc3RcIixcbiAgICAgICAgICBVU0FHRV9DQUxDVUxBVE9SX0lNQUdFOlxuICAgICAgICAgICAgXCJwdWJsaWMuZWNyLmF3cy9iNmc5dDhmMS91c2FnZS1jYWxjdWxhdG9yOmxhdGVzdFwiLFxuICAgICAgICB9LFxuICAgICAgICByb2xlOiBsYW1iZGFSb2xlLFxuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgICAgZm9ybWF0OiBPdXRwdXRGb3JtYXQuQ0pTLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEV2ZW50QnJpZGdlIFJ1bGUgZm9yIEVDUyBUYXNrIFN0YXRlIENoYW5nZXNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGVjc1Rhc2tTdGF0ZUNoYW5nZVJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCJFY3NUYXNrU3RhdGVDaGFuZ2VSdWxlXCIsXG4gICAgICB7XG4gICAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICAgIHNvdXJjZTogW1wiYXdzLmVjc1wiXSxcbiAgICAgICAgICBkZXRhaWxUeXBlOiBbXCJFQ1MgVGFzayBTdGF0ZSBDaGFuZ2VcIl0sXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBjbHVzdGVyQXJuOiBbY2x1c3Rlci5jbHVzdGVyQXJuXSxcbiAgICAgICAgICAgIGxhc3RTdGF0dXM6IFtcIlNUT1BQRURcIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZWNzVGFza1N0YXRlQ2hhbmdlUnVsZS5hZGRUYXJnZXQoXG4gICAgICBuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbih0YXNrU3RhdGVDaGFuZ2VIYW5kbGVyKVxuICAgICk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE91dHB1dHNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiVnBjSWRcIiwge1xuICAgICAgdmFsdWU6IHZwYy52cGNJZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlZQQyBJRFwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJDbHVzdGVyQXJuXCIsIHtcbiAgICAgIHZhbHVlOiBjbHVzdGVyLmNsdXN0ZXJBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogXCJFQ1MgQ2x1c3RlciBBUk5cIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiRWNyUmVwb3NpdG9yeVVyaVwiLCB7XG4gICAgICB2YWx1ZTogZWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5VXJpLFxuICAgICAgZGVzY3JpcHRpb246IFwiRUNSIFJlcG9zaXRvcnkgVVJJXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkR5bmFtb0RiVGFibGVOYW1lXCIsIHtcbiAgICAgIHZhbHVlOiB0YWJsZS50YWJsZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogXCJEeW5hbW9EQiBUYWJsZSBOYW1lXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIlMzQnVja2V0TmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYXJ0aWZhY3RzQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTMyBBcnRpZmFjdHMgQnVja2V0IE5hbWVcIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiRWZzRmlsZVN5c3RlbUlkXCIsIHtcbiAgICAgIHZhbHVlOiBmaWxlU3lzdGVtLmZpbGVTeXN0ZW1JZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkVGUyBGaWxlIFN5c3RlbSBJRFwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJHaXRodWJXZWJob29rSGFuZGxlckFyblwiLCB7XG4gICAgICB2YWx1ZTogZ2l0aHViV2ViaG9va0hhbmRsZXIuZnVuY3Rpb25Bcm4sXG4gICAgICBkZXNjcmlwdGlvbjogXCJHaXRIdWIgV2ViaG9vayBIYW5kbGVyIExhbWJkYSBBUk5cIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiR2l0aHViV2ViaG9va0hhbmRsZXJVcmxcIiwge1xuICAgICAgdmFsdWU6IHdlYmhvb2tGdW5jdGlvblVybC51cmwsXG4gICAgICBkZXNjcmlwdGlvbjogXCJHaXRIdWIgV2ViaG9vayBIYW5kbGVyIEZ1bmN0aW9uIFVSTFwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJUYXNrU3RhdGVDaGFuZ2VIYW5kbGVyQXJuXCIsIHtcbiAgICAgIHZhbHVlOiB0YXNrU3RhdGVDaGFuZ2VIYW5kbGVyLmZ1bmN0aW9uQXJuLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGFzayBTdGF0ZSBDaGFuZ2UgSGFuZGxlciBMYW1iZGEgQVJOXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIlB1YmxpY1N1Ym5ldElkc1wiLCB7XG4gICAgICB2YWx1ZTogcHVibGljU3VibmV0SWRzLFxuICAgICAgZGVzY3JpcHRpb246IFwiUHVibGljIFN1Ym5ldCBJRHNcIixcbiAgICB9KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUkVTVCBBUEkgTGFtYmRhIGZvciBDTElcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGNsaVJlc3RBcGlMYW1iZGEgPSBuZXcgTm9kZWpzRnVuY3Rpb24odGhpcywgXCJIeXBlcnBDbGlSZXN0QXBpXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJoeXBlcnAtY2xpLXJlc3QtYXBpXCIsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6IFwiaGFuZGxlclwiLFxuICAgICAgZW50cnk6IGdldExhbWJkYVBhdGgoXCJjbGktcmVzdC1hcGkvaW5kZXgudHNcIiksXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBEWU5BTU9EQl9UQUJMRV9OQU1FOiB0YWJsZS50YWJsZU5hbWUsXG4gICAgICAgIEVDU19DTFVTVEVSX05BTUU6IGNsdXN0ZXIuY2x1c3Rlck5hbWUsXG4gICAgICAgIEVGU19GSUxFX1NZU1RFTV9JRDogZmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICAgIFBVQkxJQ19TVUJORVRfSURTOiB2cGMucHVibGljU3VibmV0cy5tYXAoKHMpID0+IHMuc3VibmV0SWQpLmpvaW4oXCIsXCIpLFxuICAgICAgICBFQ1NfVEFTS19TRUNVUklUWV9HUk9VUF9JRDogZWNzVGFza1NlY3VyaXR5R3JvdXAuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICBFQ1NfVEFTS19FWEVDVVRJT05fUk9MRV9BUk46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLnJvbGVBcm4sXG4gICAgICAgIEVDU19UQVNLX1JPTEVfQVJOOiBlY3NUYXNrUm9sZS5yb2xlQXJuLFxuICAgICAgICBTM19CVUNLRVRfTkFNRTogYXJ0aWZhY3RzQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgIERPV05MT0FEQUJMRV9DUkVBVE9SX0lNQUdFOlxuICAgICAgICAgIFwicHVibGljLmVjci5hd3MvYjZnOXQ4ZjEvZG93bmxvYWRhYmxlLWNyZWF0b3I6bGF0ZXN0XCIsXG4gICAgICAgIEdJVEhVQl9BUFBfSUQ6IGdpdGh1YkFwcElkLFxuICAgICAgICBHSVRIVUJfQVBQX1dFQkhPT0tfU0VDUkVUOiBnaXRodWJBcHBXZWJob29rU2VjcmV0LFxuICAgICAgfSxcbiAgICAgIHJvbGU6IGxhbWJkYVJvbGUsXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgICAgZm9ybWF0OiBPdXRwdXRGb3JtYXQuQ0pTLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBGdW5jdGlvbiBVUkxcbiAgICBjb25zdCBmdW5jdGlvblVybCA9IGNsaVJlc3RBcGlMYW1iZGEuYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgYXV0aFR5cGU6IGxhbWJkYS5GdW5jdGlvblVybEF1dGhUeXBlLk5PTkUsIC8vIFB1YmxpYyBhY2Nlc3MgKGNhbiBiZSBzZWN1cmVkIGxhdGVyKVxuICAgICAgY29yczoge1xuICAgICAgICBhbGxvd2VkT3JpZ2luczogW1wiKlwiXSxcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFtsYW1iZGEuSHR0cE1ldGhvZC5HRVQsIGxhbWJkYS5IdHRwTWV0aG9kLlBPU1RdLFxuICAgICAgICBhbGxvd2VkSGVhZGVyczogW1wiKlwiXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkNsaVJlc3RBcGlVcmxcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uVXJsLnVybCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNMSSBSRVNUIEFQSSBGdW5jdGlvbiBVUkxcIixcbiAgICB9KTtcbiAgfVxufVxuIl19
568
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlwZXJwLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2h5cGVycC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBbUM7QUFFbkMseURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MseURBQTJDO0FBQzNDLG1FQUFxRDtBQUNyRCx1REFBeUM7QUFDekMsK0RBQWlEO0FBQ2pELHFFQUE2RTtBQUM3RSwyREFBNkM7QUFDN0MseURBQTJDO0FBQzNDLCtEQUFpRDtBQUNqRCx3RUFBMEQ7QUFFMUQsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUV6QixNQUFhLFdBQVksU0FBUSxHQUFHLENBQUMsS0FBSztJQUN4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLGdGQUFnRjtRQUNoRiw2RUFBNkU7UUFDN0Usd0RBQXdEO1FBQ3hELE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBa0IsRUFBVSxFQUFFO1lBQ25ELG9GQUFvRjtZQUNwRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDakUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUM7WUFDRCw4RUFBOEU7WUFDOUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzlELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDO1lB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Q0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUMvRCxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUM7YUFDdEI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUN2QyxLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUc7WUFDdEIsV0FBVyxFQUFFLDJCQUEyQjtTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUExbkJELGtDQTBuQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCAqIGFzIGVjciBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjclwiO1xuaW1wb3J0ICogYXMgZWZzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWZzXCI7XG5pbXBvcnQgKiBhcyBkeW5hbW9kYiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IE5vZGVqc0Z1bmN0aW9uLCBPdXRwdXRGb3JtYXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanNcIjtcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzXCI7XG5pbXBvcnQgKiBhcyBzM2RlcGxveSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnRcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuXG5leHBvcnQgY2xhc3MgSHlwZXJwU3RhY2sgZXh0ZW5kcyBjZGsuU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IGNkay5TdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBSZXNvbHZlIExhbWJkYSBlbnRyeSBwYXRocyAtIGhhbmRsZSBib3RoIGRldmVsb3BtZW50IGFuZCBucG0gcGFja2FnZSBjb250ZXh0c1xuICAgIC8vIFdoZW4gY29tcGlsZWQsIF9fZGlybmFtZSBpcyBkaXN0L2xpYi8sIHNvIHdlIG5lZWQgdG8gZ28gdXAgdG8gcGFja2FnZSByb290XG4gICAgLy8gV2hlbiBpbiBucG0gcGFja2FnZSwgd2UgbmVlZCB0byBmaW5kIHRoZSBwYWNrYWdlIHJvb3RcbiAgICBjb25zdCBnZXRMYW1iZGFQYXRoID0gKGxhbWJkYVBhdGg6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICAvLyBUcnkgcmVsYXRpdmUgdG8gX19kaXJuYW1lIGZpcnN0IChmb3IgbnBtIHBhY2thZ2UgLSBnbyB1cCAyIGxldmVscyBmcm9tIGRpc3QvbGliLylcbiAgICAgIGNvbnN0IG5wbVBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uLy4uL2xhbWJkYVwiLCBsYW1iZGFQYXRoKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKG5wbVBhdGgpKSB7XG4gICAgICAgIHJldHVybiBucG1QYXRoO1xuICAgICAgfVxuICAgICAgLy8gVHJ5IHJlbGF0aXZlIHRvIF9fZGlybmFtZSB3aXRoIG9uZSBsZXNzIGxldmVsIChmb3IgZGV2ZWxvcG1lbnQgLSBmcm9tIGxpYi8pXG4gICAgICBjb25zdCBkZXZQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9sYW1iZGFcIiwgbGFtYmRhUGF0aCk7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhkZXZQYXRoKSkge1xuICAgICAgICByZXR1cm4gZGV2UGF0aDtcbiAgICAgIH1cbiAgICAgIC8vIEZhbGxiYWNrOiB0cnkgdG8gZmluZCBwYWNrYWdlIHJvb3QgYnkgbG9va2luZyBmb3IgcGFja2FnZS5qc29uXG4gICAgICBsZXQgY3VycmVudERpciA9IF9fZGlybmFtZTtcbiAgICAgIHdoaWxlIChjdXJyZW50RGlyICE9PSBwYXRoLmRpcm5hbWUoY3VycmVudERpcikpIHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsIFwicGFja2FnZS5qc29uXCIpO1xuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpKSB7XG4gICAgICAgICAgY29uc3QgbGFtYmRhRnVsbFBhdGggPSBwYXRoLmpvaW4oY3VycmVudERpciwgXCJsYW1iZGFcIiwgbGFtYmRhUGF0aCk7XG4gICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMobGFtYmRhRnVsbFBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFtYmRhRnVsbFBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnREaXIgPSBwYXRoLmRpcm5hbWUoY3VycmVudERpcik7XG4gICAgICB9XG4gICAgICAvLyBMYXN0IHJlc29ydDogcmV0dXJuIHRoZSBwYXRoIHJlbGF0aXZlIHRvIF9fZGlybmFtZSAod2lsbCBmYWlsIGlmIGZpbGUgZG9lc24ndCBleGlzdClcbiAgICAgIHJldHVybiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL2xhbWJkYVwiLCBsYW1iZGFQYXRoKTtcbiAgICB9O1xuXG4gICAgLy8gR2V0IEdpdEh1YiBBcHAgY29uZmlndXJhdGlvbiBmcm9tIENESyBjb250ZXh0XG4gICAgY29uc3QgZ2l0aHViQXBwSWQgPVxuICAgICAgdGhpcy5ub2RlLnRyeUdldENvbnRleHQoXCJnaXRodWJBcHBJZFwiKSB8fCBwcm9jZXNzLmVudi5HSVRIVUJfQVBQX0lEO1xuICAgIGNvbnN0IGdpdGh1YkFwcFdlYmhvb2tTZWNyZXQgPVxuICAgICAgdGhpcy5ub2RlLnRyeUdldENvbnRleHQoXCJnaXRodWJBcHBXZWJob29rU2VjcmV0XCIpIHx8XG4gICAgICBwcm9jZXNzLmVudi5HSVRIVUJfQVBQX1dFQkhPT0tfU0VDUkVUO1xuXG4gICAgaWYgKCFnaXRodWJBcHBJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkdpdEh1YiBBcHAgSUQgaXMgcmVxdWlyZWQuIFByb3ZpZGUgaXQgdmlhIC0tZ2l0aHViLWFwcC1pZCBvciBDREsgY29udGV4dC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWdpdGh1YkFwcFdlYmhvb2tTZWNyZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJHaXRIdWIgQXBwIHdlYmhvb2sgc2VjcmV0IGlzIHJlcXVpcmVkLiBQcm92aWRlIGl0IHZpYSAtLWdpdGh1Yi1hcHAtd2ViaG9vay1zZWNyZXQgb3IgQ0RLIGNvbnRleHQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBWUEMgLSBMYXJnZSBhZGRyZXNzYWJsZSBWUEMgKFB1YmxpYyBzdWJuZXRzIG9ubHkgdG8gYXZvaWQgTkFUIGdhdGV3YXkgY29zdHMpXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCB2cGMgPSBuZXcgZWMyLlZwYyh0aGlzLCBcIkh5cGVycFZwY1wiLCB7XG4gICAgICBtYXhBenM6IDMsXG4gICAgICBpcEFkZHJlc3NlczogZWMyLklwQWRkcmVzc2VzLmNpZHIoXCIxMC4wLjAuMC8xNlwiKSxcbiAgICAgIG5hdEdhdGV3YXlzOiAwLCAvLyBObyBOQVQgZ2F0ZXdheXMgLSB1c2luZyBwdWJsaWMgc3VibmV0cyBvbmx5XG4gICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjaWRyTWFzazogMjAsXG4gICAgICAgICAgbmFtZTogXCJQdWJsaWNcIixcbiAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBTMyBCdWNrZXQgZm9yIGFydGlmYWN0cyAoR2l0SHViIEFwcCBQRU0ga2V5KVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTGV0IENESyBnZW5lcmF0ZSBhIHVuaXF1ZSBidWNrZXQgbmFtZSB0byBhdm9pZCBnbG9iYWwgbmFtaW5nIGNvbmZsaWN0c1xuICAgIC8vIFRoZSBidWNrZXQgbmFtZSB3aWxsIGJlIGF2YWlsYWJsZSB2aWEgc3RhY2sgb3V0cHV0c1xuICAgIGNvbnN0IGFydGlmYWN0c0J1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgXCJIeXBlcnBBcnRpZmFjdHNCdWNrZXRcIiwge1xuICAgICAgLy8gUmVtb3ZlZCBmaXhlZCBidWNrZXROYW1lIHRvIGF2b2lkIGdsb2JhbCBuYW1pbmcgY29uZmxpY3RzXG4gICAgICAvLyBDREsgd2lsbCBnZW5lcmF0ZTogaHlwZXJwc3RhY2staHlwZXJwYXJ0aWZhY3RzYnVja2V0LTxyYW5kb20+XG4gICAgICB2ZXJzaW9uZWQ6IHRydWUsXG4gICAgICBlbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gICAgICBibG9ja1B1YmxpY0FjY2VzczogczMuQmxvY2tQdWJsaWNBY2Nlc3MuQkxPQ0tfQUxMLFxuICAgICAgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IGZhbHNlLCAvLyBLZWVwIG9iamVjdHMgd2hlbiBzdGFjayBpcyBkZWxldGVkXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIER5bmFtb0RCIFRhYmxlIHdpdGggR1NJXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCB0YWJsZSA9IG5ldyBkeW5hbW9kYi5UYWJsZSh0aGlzLCBcIkh5cGVycFRhYmxlXCIsIHtcbiAgICAgIHRhYmxlTmFtZTogXCJoeXBlcnBcIixcbiAgICAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcIlBLXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwiU0tcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgIGJpbGxpbmdNb2RlOiBkeW5hbW9kYi5CaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QsXG4gICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgICBwb2ludEluVGltZVJlY292ZXJ5OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gR1NJMSBmb3IgcXVlcnlpbmcgd29ya2Zsb3dzLCB3b3JrZmxvdyBydW5zLCBldGMuXG4gICAgdGFibGUuYWRkR2xvYmFsU2Vjb25kYXJ5SW5kZXgoe1xuICAgICAgaW5kZXhOYW1lOiBcIkdTSTFcIixcbiAgICAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcIkdTSTEtUEtcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgIHNvcnRLZXk6IHsgbmFtZTogXCJHU0kxLVNLXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgfSk7XG5cbiAgICAvLyBHU0kyIGZvciBxdWVyeWluZyB3b3JrZmxvdyBydW5zIGJ5IGNvbW1pdCBoYXNoXG4gICAgdGFibGUuYWRkR2xvYmFsU2Vjb25kYXJ5SW5kZXgoe1xuICAgICAgaW5kZXhOYW1lOiBcIkdTSTJcIixcbiAgICAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcIkdTSTItUEtcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgIHNvcnRLZXk6IHsgbmFtZTogXCJHU0kyLVNLXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgfSk7XG5cbiAgICAvLyBHU0kzIGZvciBxdWVyeWluZyBhbGwgd29ya2Zsb3cgcnVucyBzb3J0ZWQgYnkgY3JlYXRpb24gdGltZVxuICAgIHRhYmxlLmFkZEdsb2JhbFNlY29uZGFyeUluZGV4KHtcbiAgICAgIGluZGV4TmFtZTogXCJHU0kzXCIsXG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJHU0kzLVBLXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwiR1NJMy1TS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgcHJvamVjdGlvblR5cGU6IGR5bmFtb2RiLlByb2plY3Rpb25UeXBlLklOQ0xVREUsXG4gICAgICBub25LZXlBdHRyaWJ1dGVzOiBbXG4gICAgICAgIFwid29ya2Zsb3dOYW1lXCIsXG4gICAgICAgIFwic3RhdHVzXCIsXG4gICAgICAgIFwiY3JlYXRlZEF0XCIsXG4gICAgICAgIFwidXBkYXRlZEF0XCIsXG4gICAgICAgIFwiZW50aXR5SWRcIixcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEVDUiBSZXBvc2l0b3J5XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBlY3JSZXBvc2l0b3J5ID0gbmV3IGVjci5SZXBvc2l0b3J5KHRoaXMsIFwiSHlwZXJwUmVwb3NpdG9yeVwiLCB7XG4gICAgICByZXBvc2l0b3J5TmFtZTogXCJoeXBlcnAtMVwiLFxuICAgICAgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgaW1hZ2VTY2FuT25QdXNoOiBmYWxzZSxcbiAgICAgIGxpZmVjeWNsZVJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJLZWVwIGxhc3QgMTAwIGltYWdlc1wiLFxuICAgICAgICAgIG1heEltYWdlQ291bnQ6IDEwMCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEVDUyBDbHVzdGVyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBjbHVzdGVyID0gbmV3IGVjcy5DbHVzdGVyKHRoaXMsIFwiSHlwZXJwQ2x1c3RlclwiLCB7XG4gICAgICBjbHVzdGVyTmFtZTogXCJoeXBlcnAtMVwiLFxuICAgICAgdnBjOiB2cGMsXG4gICAgICBjb250YWluZXJJbnNpZ2h0czogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gRUZTIEZpbGUgU3lzdGVtIGZvciBhcnRpZmFjdCBzaGFyaW5nXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBmaWxlU3lzdGVtID0gbmV3IGVmcy5GaWxlU3lzdGVtKHRoaXMsIFwiSHlwZXJwRWZzXCIsIHtcbiAgICAgIHZwYzogdnBjLFxuICAgICAgZW5jcnlwdGVkOiB0cnVlLFxuICAgICAgbGlmZWN5Y2xlUG9saWN5OiBlZnMuTGlmZWN5Y2xlUG9saWN5LkFGVEVSXzE0X0RBWVMsXG4gICAgICBwZXJmb3JtYW5jZU1vZGU6IGVmcy5QZXJmb3JtYW5jZU1vZGUuR0VORVJBTF9QVVJQT1NFLFxuICAgICAgdGhyb3VnaHB1dE1vZGU6IGVmcy5UaHJvdWdocHV0TW9kZS5FTEFTVElDLFxuICAgICAgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgZmlsZVN5c3RlbVBvbGljeTogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50TW91bnRcIixcbiAgICAgICAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbTpDbGllbnRXcml0ZVwiLFxuICAgICAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkNsaWVudFJvb3RBY2Nlc3NcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwcmluY2lwYWxzOiBbbmV3IGlhbS5BbnlQcmluY2lwYWwoKV0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgIEJvb2w6IHtcbiAgICAgICAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkFjY2Vzc2VkVmlhTW91bnRUYXJnZXRcIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBTZWN1cml0eSBncm91cCBmb3IgRUNTIHRhc2tzXG4gICAgY29uc3QgZWNzVGFza1NlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgXCJFY3NUYXNrU2VjdXJpdHlHcm91cFwiLFxuICAgICAge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiU2VjdXJpdHkgZ3JvdXAgZm9yIEVDUyB0YXNrc1wiLFxuICAgICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBBbGxvdyBFQ1MgdGFza3MgdG8gY29ubmVjdCB0byBFRlMgb24gTkZTIHBvcnRcbiAgICBmaWxlU3lzdGVtLmNvbm5lY3Rpb25zLmFsbG93RnJvbShcbiAgICAgIGVjc1Rhc2tTZWN1cml0eUdyb3VwLFxuICAgICAgZWMyLlBvcnQudGNwKDIwNDkpLFxuICAgICAgXCJBbGxvdyBORlMgZnJvbSBFQ1MgdGFza3NcIlxuICAgICk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENsb3VkV2F0Y2ggTG9nc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZWNzTG9nR3JvdXAgPSBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCBcIkh5cGVycEVjc0xvZ0dyb3VwXCIsIHtcbiAgICAgIGxvZ0dyb3VwTmFtZTogXCIvaHlwZXJwXCIsXG4gICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIElBTSBSb2xlc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAvLyBFQ1MgVGFzayBFeGVjdXRpb24gUm9sZVxuICAgIGNvbnN0IGVjc1Rhc2tFeGVjdXRpb25Sb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiRWNzVGFza0V4ZWN1dGlvblJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlY3MtdGFza3MuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJzZXJ2aWNlLXJvbGUvQW1hem9uRUNTVGFza0V4ZWN1dGlvblJvbGVQb2xpY3lcIlxuICAgICAgICApLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IEVDUiBwZXJtaXNzaW9uc1xuICAgIGVjclJlcG9zaXRvcnkuZ3JhbnRQdWxsKGVjc1Rhc2tFeGVjdXRpb25Sb2xlKTtcblxuICAgIC8vIEVDUyBUYXNrIFJvbGUgKGZvciBjb250YWluZXJzKVxuICAgIGNvbnN0IGVjc1Rhc2tSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiRWNzVGFza1JvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlY3MtdGFza3MuYW1hem9uYXdzLmNvbVwiKSxcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IEVGUyBwZXJtaXNzaW9ucyB0byB0YXNrIHJvbGVcbiAgICBlY3NUYXNrUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50TW91bnRcIixcbiAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkNsaWVudFdyaXRlXCIsXG4gICAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbTpDbGllbnRSb290QWNjZXNzXCIsXG4gICAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbTpEZXNjcmliZU1vdW50VGFyZ2V0c1wiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtmaWxlU3lzdGVtLmZpbGVTeXN0ZW1Bcm5dLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgRUNSIHB1c2gvcHVsbCBmb3IgaW1hZ2UgYnVpbGRzXG4gICAgZWNyUmVwb3NpdG9yeS5ncmFudFB1bGxQdXNoKGVjc1Rhc2tSb2xlKTtcblxuICAgIC8vIEdyYW50IFMzIGFjY2VzcyBmb3IgcmVhZGluZyByZXBvc2l0b3J5IGNvbnRlbnQgYW5kIHVwbG9hZGluZyBhcnRpZmFjdHNcbiAgICBlY3NUYXNrUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wiczM6R2V0T2JqZWN0XCIsIFwiczM6TGlzdEJ1Y2tldFwiLCBcInMzOlB1dE9iamVjdFwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgRHluYW1vREIgcGVybWlzc2lvbnMgZm9yIHVzYWdlIGNhbGN1bGF0b3IgdGFza3NcbiAgICB0YWJsZS5ncmFudFJlYWRXcml0ZURhdGEoZWNzVGFza1JvbGUpO1xuICAgIC8vIEV4cGxpY2l0bHkgZ3JhbnQgVXBkYXRlSXRlbSBwZXJtaXNzaW9uIHRvIGVuc3VyZSB1c2FnZSBjYWxjdWxhdG9yIGNhbiB1cGRhdGUgaXRlbXNcbiAgICBlY3NUYXNrUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiZHluYW1vZGI6R2V0SXRlbVwiLFxuICAgICAgICAgIFwiZHluYW1vZGI6UHV0SXRlbVwiLFxuICAgICAgICAgIFwiZHluYW1vZGI6VXBkYXRlSXRlbVwiLFxuICAgICAgICAgIFwiZHluYW1vZGI6UXVlcnlcIixcbiAgICAgICAgICBcImR5bmFtb2RiOlNjYW5cIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbdGFibGUudGFibGVBcm4sIGAke3RhYmxlLnRhYmxlQXJufS9pbmRleC8qYF0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIExhbWJkYSBFeGVjdXRpb24gUm9sZVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgbGFtYmRhUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkh5cGVycExhbWJkYVJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJsYW1iZGEuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhVlBDQWNjZXNzRXhlY3V0aW9uUm9sZVwiXG4gICAgICAgICksXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVcIlxuICAgICAgICApLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIEdyYW50IER5bmFtb0RCIHBlcm1pc3Npb25zXG4gICAgdGFibGUuZ3JhbnRSZWFkV3JpdGVEYXRhKGxhbWJkYVJvbGUpO1xuXG4gICAgLy8gR3JhbnQgUzMgcGVybWlzc2lvbnMgKHJlYWQgYW5kIHdyaXRlIGZvciBkb3dubG9hZGFibGUgYXJ0aWZhY3RzKVxuICAgIGFydGlmYWN0c0J1Y2tldC5ncmFudFJlYWRXcml0ZShsYW1iZGFSb2xlKTtcblxuICAgIC8vIEdyYW50IENsb3VkV2F0Y2ggTG9ncyBwZXJtaXNzaW9uc1xuICAgIGxhbWJkYVJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcImxvZ3M6R2V0TG9nRXZlbnRzXCIsIFwibG9nczpEZXNjcmliZUxvZ1N0cmVhbXNcIl0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEdyYW50IEVDUyBwZXJtaXNzaW9ucyBmb3IgZG93bmxvYWRhYmxlIGNyZWF0b3IgdGFza3NcbiAgICBsYW1iZGFSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJlY3M6UmVnaXN0ZXJUYXNrRGVmaW5pdGlvblwiLFxuICAgICAgICAgIFwiZWNzOlJ1blRhc2tcIixcbiAgICAgICAgICBcImVjczpEZXNjcmliZVRhc2tzXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEdyYW50IEVDUyBwZXJtaXNzaW9uc1xuICAgIGxhbWJkYVJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImVjczpSZWdpc3RlclRhc2tEZWZpbml0aW9uXCIsXG4gICAgICAgICAgXCJlY3M6UnVuVGFza1wiLFxuICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza3NcIixcbiAgICAgICAgICBcImVjczpTdG9wVGFza1wiLFxuICAgICAgICAgIFwiZWNzOkxpc3RUYXNrc1wiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBHcmFudCBJQU0gUGFzc1JvbGUgZm9yIEVDU1xuICAgIGxhbWJkYVJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcImlhbTpQYXNzUm9sZVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbZWNzVGFza0V4ZWN1dGlvblJvbGUucm9sZUFybiwgZWNzVGFza1JvbGUucm9sZUFybl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBHcmFudCBFQ1IgcGVybWlzc2lvbnNcbiAgICBsYW1iZGFSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJlY3I6R2V0QXV0aG9yaXphdGlvblRva2VuXCIsXG4gICAgICAgICAgXCJlY3I6QmF0Y2hDaGVja0xheWVyQXZhaWxhYmlsaXR5XCIsXG4gICAgICAgICAgXCJlY3I6R2V0RG93bmxvYWRVcmxGb3JMYXllclwiLFxuICAgICAgICAgIFwiZWNyOkJhdGNoR2V0SW1hZ2VcIixcbiAgICAgICAgICBcImVjcjpCYXRjaERlbGV0ZUltYWdlXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEdyYW50IExhbWJkYSBpbnZva2UgcGVybWlzc2lvbnMgKGZvciBFRlMgY29udHJvbGxlcilcbiAgICBsYW1iZGFSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJsYW1iZGE6SW52b2tlRnVuY3Rpb25cIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46YXdzOmxhbWJkYToke3RoaXMucmVnaW9ufToke3RoaXMuYWNjb3VudH06ZnVuY3Rpb246aHlwZXJwLWVmcy1jb250cm9sbGVyYCxcbiAgICAgICAgICBgYXJuOmF3czpsYW1iZGE6JHt0aGlzLnJlZ2lvbn06JHt0aGlzLmFjY291bnR9OmZ1bmN0aW9uOmh5cGVycC1lZnMtY29udHJvbGxlcjoqYCxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gRUZTIENvbnRyb2xsZXIgTGFtYmRhXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBDcmVhdGUgYW4gYWNjZXNzIHBvaW50IGZvciBMYW1iZGEgdG8gbW91bnQgRUZTXG4gICAgLy8gTW91bnQgYXQgL2h5cGVycC1hcnRpZmFjdHMgc28gTGFtYmRhIGhhcyB3cml0ZSBhY2Nlc3MgdG8gdGhhdCBkaXJlY3RvcnlcbiAgICBjb25zdCBsYW1iZGFBY2Nlc3NQb2ludCA9IG5ldyBlZnMuQWNjZXNzUG9pbnQoXG4gICAgICB0aGlzLFxuICAgICAgXCJMYW1iZGFFZnNBY2Nlc3NQb2ludFwiLFxuICAgICAge1xuICAgICAgICBmaWxlU3lzdGVtOiBmaWxlU3lzdGVtLFxuICAgICAgICBwYXRoOiBcIi9oeXBlcnAtYXJ0aWZhY3RzXCIsXG4gICAgICAgIGNyZWF0ZUFjbDoge1xuICAgICAgICAgIG93bmVyR2lkOiBcIjEwMDBcIixcbiAgICAgICAgICBvd25lclVpZDogXCIxMDAwXCIsXG4gICAgICAgICAgcGVybWlzc2lvbnM6IFwiNzc3XCIsIC8vIE1vcmUgcGVybWlzc2l2ZSBmb3IgTGFtYmRhIHRvIGNyZWF0ZSBzdWJkaXJlY3Rvcmllc1xuICAgICAgICB9LFxuICAgICAgICBwb3NpeFVzZXI6IHtcbiAgICAgICAgICB1aWQ6IFwiMTAwMFwiLFxuICAgICAgICAgIGdpZDogXCIxMDAwXCIsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGVmc0NvbnRyb2xsZXJMYW1iZGEgPSBuZXcgTm9kZWpzRnVuY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJIeXBlcnBFZnNDb250cm9sbGVyXCIsXG4gICAgICB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogXCJoeXBlcnAtZWZzLWNvbnRyb2xsZXJcIixcbiAgICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICAgIGhhbmRsZXI6IFwiaGFuZGxlclwiLFxuICAgICAgICBlbnRyeTogZ2V0TGFtYmRhUGF0aChcImVmcy1jb250cm9sbGVyL2luZGV4LnRzXCIpLFxuICAgICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICAgIG1lbW9yeVNpemU6IDUxMixcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDIH0sXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbZWNzVGFza1NlY3VyaXR5R3JvdXBdLFxuICAgICAgICBhbGxvd1B1YmxpY1N1Ym5ldDogdHJ1ZSxcbiAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgICAgc291cmNlTWFwOiB0cnVlLFxuICAgICAgICAgIGZvcm1hdDogT3V0cHV0Rm9ybWF0LkNKUyxcbiAgICAgICAgfSxcbiAgICAgICAgZGVwc0xvY2tGaWxlUGF0aDogdW5kZWZpbmVkLCAvLyBEb24ndCByZXF1aXJlIGxvY2sgZmlsZSAtIGRlcGVuZGVuY2llcyBhcmUgaW4gcm9vdCBwYWNrYWdlLmpzb25cbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBFRlNfRklMRV9TWVNURU1fSUQ6IGZpbGVTeXN0ZW0uZmlsZVN5c3RlbUlkLFxuICAgICAgICB9LFxuICAgICAgICByb2xlOiBsYW1iZGFSb2xlLFxuICAgICAgICBmaWxlc3lzdGVtOiBsYW1iZGEuRmlsZVN5c3RlbS5mcm9tRWZzQWNjZXNzUG9pbnQoXG4gICAgICAgICAgbGFtYmRhQWNjZXNzUG9pbnQsXG4gICAgICAgICAgXCIvbW50L2Vmc1wiXG4gICAgICAgICksXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQ29sbGVjdCBzdWJuZXQgSURzIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IHB1YmxpY1N1Ym5ldElkcyA9IHZwYy5wdWJsaWNTdWJuZXRzXG4gICAgICAubWFwKChzdWJuZXQpID0+IHN1Ym5ldC5zdWJuZXRJZClcbiAgICAgIC5qb2luKFwiLFwiKTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gR2l0SHViIFdlYmhvb2sgSGFuZGxlciBMYW1iZGFcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGdpdGh1YldlYmhvb2tIYW5kbGVyID0gbmV3IE5vZGVqc0Z1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiSHlwZXJwR2l0aHViV2ViaG9va0hhbmRsZXJcIixcbiAgICAgIHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBcImh5cGVycC1naXRodWItd2ViaG9vay1oYW5kbGVyXCIsXG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgICBoYW5kbGVyOiBcImhhbmRsZXJcIixcbiAgICAgICAgZW50cnk6IGdldExhbWJkYVBhdGgoXCJnaXRodWItd2ViaG9vay1oYW5kbGVyL2luZGV4LnRzXCIpLFxuICAgICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgbWVtb3J5U2l6ZTogMTAyNCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBEWU5BTU9EQl9UQUJMRV9OQU1FOiB0YWJsZS50YWJsZU5hbWUsXG4gICAgICAgICAgUzNfQlVDS0VUX05BTUU6IGFydGlmYWN0c0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgIEVDU19DTFVTVEVSX0FSTjogY2x1c3Rlci5jbHVzdGVyQXJuLFxuICAgICAgICAgIEVDU19DTFVTVEVSX05BTUU6IGNsdXN0ZXIuY2x1c3Rlck5hbWUsXG4gICAgICAgICAgRUNSX1JFUE9TSVRPUllfVVJJOiBlY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlVcmksXG4gICAgICAgICAgRUNSX1JFUE9TSVRPUllfTkFNRTogZWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICBFQ1NfVEFTS19FWEVDVVRJT05fUk9MRV9BUk46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLnJvbGVBcm4sXG4gICAgICAgICAgRUNTX1RBU0tfUk9MRV9BUk46IGVjc1Rhc2tSb2xlLnJvbGVBcm4sXG4gICAgICAgICAgRUZTX0ZJTEVfU1lTVEVNX0lEOiBmaWxlU3lzdGVtLmZpbGVTeXN0ZW1JZCxcbiAgICAgICAgICBFQ1NfVEFTS19TRUNVUklUWV9HUk9VUF9JRDogZWNzVGFza1NlY3VyaXR5R3JvdXAuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICAgIFBVQkxJQ19TVUJORVRfSURTOiBwdWJsaWNTdWJuZXRJZHMsXG4gICAgICAgICAgRUZTX0NPTlRST0xMRVJfTEFNQkRBX0FSTjogZWZzQ29udHJvbGxlckxhbWJkYS5mdW5jdGlvbkFybixcbiAgICAgICAgICBHSVRIVUJfQVBQX0lEOiBnaXRodWJBcHBJZCxcbiAgICAgICAgICBHSVRIVUJfQVBQX1dFQkhPT0tfU0VDUkVUOiBnaXRodWJBcHBXZWJob29rU2VjcmV0LFxuICAgICAgICAgIEFXU19BQ0NPVU5UX0lEOiB0aGlzLmFjY291bnQsXG4gICAgICAgIH0sXG4gICAgICAgIHJvbGU6IGxhbWJkYVJvbGUsXG4gICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgICAgICBmb3JtYXQ6IE91dHB1dEZvcm1hdC5DSlMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IHVuZGVmaW5lZCwgLy8gRG9uJ3QgcmVxdWlyZSBsb2NrIGZpbGUgLSBkZXBlbmRlbmNpZXMgYXJlIGluIHJvb3QgcGFja2FnZS5qc29uXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBGdW5jdGlvbiBVUkwgZm9yIEdpdEh1YiBXZWJob29rIEhhbmRsZXJcbiAgICBjb25zdCB3ZWJob29rRnVuY3Rpb25VcmwgPSBnaXRodWJXZWJob29rSGFuZGxlci5hZGRGdW5jdGlvblVybCh7XG4gICAgICBhdXRoVHlwZTogbGFtYmRhLkZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSwgLy8gUHVibGljIGFjY2VzcyBmb3IgR2l0SHViIHdlYmhvb2tzXG4gICAgICBjb3JzOiB7XG4gICAgICAgIGFsbG93ZWRPcmlnaW5zOiBbXCIqXCJdLFxuICAgICAgICBhbGxvd2VkTWV0aG9kczogW2xhbWJkYS5IdHRwTWV0aG9kLlBPU1RdLFxuICAgICAgICBhbGxvd2VkSGVhZGVyczogW1wiKlwiXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFRhc2sgU3RhdGUgQ2hhbmdlIEhhbmRsZXIgTGFtYmRhXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCB0YXNrU3RhdGVDaGFuZ2VIYW5kbGVyID0gbmV3IE5vZGVqc0Z1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiSHlwZXJwVGFza1N0YXRlQ2hhbmdlSGFuZGxlclwiLFxuICAgICAge1xuICAgICAgICBmdW5jdGlvbk5hbWU6IFwiaHlwZXJwLXRhc2stc3RhdGUtY2hhbmdlLWhhbmRsZXJcIixcbiAgICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICAgIGhhbmRsZXI6IFwiaGFuZGxlclwiLFxuICAgICAgICBlbnRyeTogZ2V0TGFtYmRhUGF0aChcInRhc2stc3RhdGUtY2hhbmdlLWhhbmRsZXIvaW5kZXgudHNcIiksXG4gICAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDIpLFxuICAgICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgRFlOQU1PREJfVEFCTEVfTkFNRTogdGFibGUudGFibGVOYW1lLFxuICAgICAgICAgIEVDU19DTFVTVEVSX0FSTjogY2x1c3Rlci5jbHVzdGVyQXJuLFxuICAgICAgICAgIEVDU19DTFVTVEVSX05BTUU6IGNsdXN0ZXIuY2x1c3Rlck5hbWUsXG4gICAgICAgICAgRUNSX1JFUE9TSVRPUllfVVJJOiBlY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlVcmksXG4gICAgICAgICAgRUNTX1RBU0tfRVhFQ1VUSU9OX1JPTEVfQVJOOiBlY3NUYXNrRXhlY3V0aW9uUm9sZS5yb2xlQXJuLFxuICAgICAgICAgIEVDU19UQVNLX1JPTEVfQVJOOiBlY3NUYXNrUm9sZS5yb2xlQXJuLFxuICAgICAgICAgIEVGU19GSUxFX1NZU1RFTV9JRDogZmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICAgICAgRUNTX1RBU0tfU0VDVVJJVFlfR1JPVVBfSUQ6IGVjc1Rhc2tTZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgICBQVUJMSUNfU1VCTkVUX0lEUzogcHVibGljU3VibmV0SWRzLFxuICAgICAgICAgIEVGU19DT05UUk9MTEVSX0xBTUJEQV9BUk46IGVmc0NvbnRyb2xsZXJMYW1iZGEuZnVuY3Rpb25Bcm4sXG4gICAgICAgICAgQVdTX0FDQ09VTlRfSUQ6IHRoaXMuYWNjb3VudCxcbiAgICAgICAgICBGQVJHQVRFX1ZDUFVfUFJJQ0VfUEVSX0hPVVI6IFwiMC4wNDA0OFwiLFxuICAgICAgICAgIEZBUkdBVEVfR0JfUFJJQ0VfUEVSX0hPVVI6IFwiMC4wMDQ0NDVcIixcbiAgICAgICAgICBTM19CVUNLRVRfTkFNRTogYXJ0aWZhY3RzQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgR0lUSFVCX0FQUF9JRDogZ2l0aHViQXBwSWQsXG4gICAgICAgICAgRE9XTkxPQURBQkxFX0NSRUFUT1JfSU1BR0U6XG4gICAgICAgICAgICBcInB1YmxpYy5lY3IuYXdzL2I2Zzl0OGYxL2Rvd25sb2FkYWJsZS1jcmVhdG9yOmxhdGVzdFwiLFxuICAgICAgICAgIFVTQUdFX0NBTENVTEFUT1JfSU1BR0U6XG4gICAgICAgICAgICBcInB1YmxpYy5lY3IuYXdzL2I2Zzl0OGYxL3VzYWdlLWNhbGN1bGF0b3I6bGF0ZXN0XCIsXG4gICAgICAgIH0sXG4gICAgICAgIHJvbGU6IGxhbWJkYVJvbGUsXG4gICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgICAgICBmb3JtYXQ6IE91dHB1dEZvcm1hdC5DSlMsXG4gICAgICAgIH0sXG4gICAgICAgIGRlcHNMb2NrRmlsZVBhdGg6IHVuZGVmaW5lZCwgLy8gRG9uJ3QgcmVxdWlyZSBsb2NrIGZpbGUgLSBkZXBlbmRlbmNpZXMgYXJlIGluIHJvb3QgcGFja2FnZS5qc29uXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gRXZlbnRCcmlkZ2UgUnVsZSBmb3IgRUNTIFRhc2sgU3RhdGUgQ2hhbmdlc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZWNzVGFza1N0YXRlQ2hhbmdlUnVsZSA9IG5ldyBldmVudHMuUnVsZShcbiAgICAgIHRoaXMsXG4gICAgICBcIkVjc1Rhc2tTdGF0ZUNoYW5nZVJ1bGVcIixcbiAgICAgIHtcbiAgICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgICAgc291cmNlOiBbXCJhd3MuZWNzXCJdLFxuICAgICAgICAgIGRldGFpbFR5cGU6IFtcIkVDUyBUYXNrIFN0YXRlIENoYW5nZVwiXSxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGNsdXN0ZXJBcm46IFtjbHVzdGVyLmNsdXN0ZXJBcm5dLFxuICAgICAgICAgICAgbGFzdFN0YXR1czogW1wiU1RPUFBFRFwiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICBlY3NUYXNrU3RhdGVDaGFuZ2VSdWxlLmFkZFRhcmdldChcbiAgICAgIG5ldyB0YXJnZXRzLkxhbWJkYUZ1bmN0aW9uKHRhc2tTdGF0ZUNoYW5nZUhhbmRsZXIpXG4gICAgKTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gT3V0cHV0c1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJWcGNJZFwiLCB7XG4gICAgICB2YWx1ZTogdnBjLnZwY0lkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVlBDIElEXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkNsdXN0ZXJBcm5cIiwge1xuICAgICAgdmFsdWU6IGNsdXN0ZXIuY2x1c3RlckFybixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkVDUyBDbHVzdGVyIEFSTlwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJFY3JSZXBvc2l0b3J5VXJpXCIsIHtcbiAgICAgIHZhbHVlOiBlY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlVcmksXG4gICAgICBkZXNjcmlwdGlvbjogXCJFQ1IgUmVwb3NpdG9yeSBVUklcIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiRHluYW1vRGJUYWJsZU5hbWVcIiwge1xuICAgICAgdmFsdWU6IHRhYmxlLnRhYmxlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkR5bmFtb0RCIFRhYmxlIE5hbWVcIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiUzNCdWNrZXROYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBhcnRpZmFjdHNCdWNrZXQuYnVja2V0TmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlMzIEFydGlmYWN0cyBCdWNrZXQgTmFtZVwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJFZnNGaWxlU3lzdGVtSWRcIiwge1xuICAgICAgdmFsdWU6IGZpbGVTeXN0ZW0uZmlsZVN5c3RlbUlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiRUZTIEZpbGUgU3lzdGVtIElEXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkdpdGh1YldlYmhvb2tIYW5kbGVyQXJuXCIsIHtcbiAgICAgIHZhbHVlOiBnaXRodWJXZWJob29rSGFuZGxlci5mdW5jdGlvbkFybixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkdpdEh1YiBXZWJob29rIEhhbmRsZXIgTGFtYmRhIEFSTlwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJHaXRodWJXZWJob29rSGFuZGxlclVybFwiLCB7XG4gICAgICB2YWx1ZTogd2ViaG9va0Z1bmN0aW9uVXJsLnVybCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkdpdEh1YiBXZWJob29rIEhhbmRsZXIgRnVuY3Rpb24gVVJMXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIlRhc2tTdGF0ZUNoYW5nZUhhbmRsZXJBcm5cIiwge1xuICAgICAgdmFsdWU6IHRhc2tTdGF0ZUNoYW5nZUhhbmRsZXIuZnVuY3Rpb25Bcm4sXG4gICAgICBkZXNjcmlwdGlvbjogXCJUYXNrIFN0YXRlIENoYW5nZSBIYW5kbGVyIExhbWJkYSBBUk5cIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiUHVibGljU3VibmV0SWRzXCIsIHtcbiAgICAgIHZhbHVlOiBwdWJsaWNTdWJuZXRJZHMsXG4gICAgICBkZXNjcmlwdGlvbjogXCJQdWJsaWMgU3VibmV0IElEc1wiLFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBSRVNUIEFQSSBMYW1iZGEgZm9yIENMSVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgY2xpUmVzdEFwaUxhbWJkYSA9IG5ldyBOb2RlanNGdW5jdGlvbih0aGlzLCBcIkh5cGVycENsaVJlc3RBcGlcIiwge1xuICAgICAgZnVuY3Rpb25OYW1lOiBcImh5cGVycC1jbGktcmVzdC1hcGlcIixcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogXCJoYW5kbGVyXCIsXG4gICAgICBlbnRyeTogZ2V0TGFtYmRhUGF0aChcImNsaS1yZXN0LWFwaS9pbmRleC50c1wiKSxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwKSxcbiAgICAgIG1lbW9yeVNpemU6IDUxMixcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIERZTkFNT0RCX1RBQkxFX05BTUU6IHRhYmxlLnRhYmxlTmFtZSxcbiAgICAgICAgRUNTX0NMVVNURVJfTkFNRTogY2x1c3Rlci5jbHVzdGVyTmFtZSxcbiAgICAgICAgRUZTX0ZJTEVfU1lTVEVNX0lEOiBmaWxlU3lzdGVtLmZpbGVTeXN0ZW1JZCxcbiAgICAgICAgUFVCTElDX1NVQk5FVF9JRFM6IHZwYy5wdWJsaWNTdWJuZXRzLm1hcCgocykgPT4gcy5zdWJuZXRJZCkuam9pbihcIixcIiksXG4gICAgICAgIEVDU19UQVNLX1NFQ1VSSVRZX0dST1VQX0lEOiBlY3NUYXNrU2VjdXJpdHlHcm91cC5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgIEVDU19UQVNLX0VYRUNVVElPTl9ST0xFX0FSTjogZWNzVGFza0V4ZWN1dGlvblJvbGUucm9sZUFybixcbiAgICAgICAgRUNTX1RBU0tfUk9MRV9BUk46IGVjc1Rhc2tSb2xlLnJvbGVBcm4sXG4gICAgICAgIFMzX0JVQ0tFVF9OQU1FOiBhcnRpZmFjdHNCdWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgRE9XTkxPQURBQkxFX0NSRUFUT1JfSU1BR0U6XG4gICAgICAgICAgXCJwdWJsaWMuZWNyLmF3cy9iNmc5dDhmMS9kb3dubG9hZGFibGUtY3JlYXRvcjpsYXRlc3RcIixcbiAgICAgICAgR0lUSFVCX0FQUF9JRDogZ2l0aHViQXBwSWQsXG4gICAgICAgIEdJVEhVQl9BUFBfV0VCSE9PS19TRUNSRVQ6IGdpdGh1YkFwcFdlYmhvb2tTZWNyZXQsXG4gICAgICB9LFxuICAgICAgcm9sZTogbGFtYmRhUm9sZSxcbiAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgc291cmNlTWFwOiB0cnVlLFxuICAgICAgICBmb3JtYXQ6IE91dHB1dEZvcm1hdC5DSlMsXG4gICAgICB9LFxuICAgICAgZGVwc0xvY2tGaWxlUGF0aDogdW5kZWZpbmVkLCAvLyBEb24ndCByZXF1aXJlIGxvY2sgZmlsZSAtIGRlcGVuZGVuY2llcyBhcmUgaW4gcm9vdCBwYWNrYWdlLmpzb25cbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBGdW5jdGlvbiBVUkxcbiAgICBjb25zdCBmdW5jdGlvblVybCA9IGNsaVJlc3RBcGlMYW1iZGEuYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgYXV0aFR5cGU6IGxhbWJkYS5GdW5jdGlvblVybEF1dGhUeXBlLk5PTkUsIC8vIFB1YmxpYyBhY2Nlc3MgKGNhbiBiZSBzZWN1cmVkIGxhdGVyKVxuICAgICAgY29yczoge1xuICAgICAgICBhbGxvd2VkT3JpZ2luczogW1wiKlwiXSxcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFtsYW1iZGEuSHR0cE1ldGhvZC5HRVQsIGxhbWJkYS5IdHRwTWV0aG9kLlBPU1RdLFxuICAgICAgICBhbGxvd2VkSGVhZGVyczogW1wiKlwiXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkNsaVJlc3RBcGlVcmxcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uVXJsLnVybCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNMSSBSRVNUIEFQSSBGdW5jdGlvbiBVUkxcIixcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -409,6 +409,12 @@ export class HyperpStack extends cdk.Stack {
409
409
  vpcSubnets: { subnetType: ec2.SubnetType.PUBLIC },
410
410
  securityGroups: [ecsTaskSecurityGroup],
411
411
  allowPublicSubnet: true,
412
+ bundling: {
413
+ minify: true,
414
+ sourceMap: true,
415
+ format: OutputFormat.CJS,
416
+ },
417
+ depsLockFilePath: undefined, // Don't require lock file - dependencies are in root package.json
412
418
  environment: {
413
419
  EFS_FILE_SYSTEM_ID: fileSystem.fileSystemId,
414
420
  },
@@ -417,11 +423,6 @@ export class HyperpStack extends cdk.Stack {
417
423
  lambdaAccessPoint,
418
424
  "/mnt/efs"
419
425
  ),
420
- bundling: {
421
- minify: true,
422
- sourceMap: true,
423
- format: OutputFormat.CJS,
424
- },
425
426
  }
426
427
  );
427
428
 
@@ -468,6 +469,7 @@ export class HyperpStack extends cdk.Stack {
468
469
  sourceMap: true,
469
470
  format: OutputFormat.CJS,
470
471
  },
472
+ depsLockFilePath: undefined, // Don't require lock file - dependencies are in root package.json
471
473
  }
472
474
  );
473
475
 
@@ -521,6 +523,7 @@ export class HyperpStack extends cdk.Stack {
521
523
  sourceMap: true,
522
524
  format: OutputFormat.CJS,
523
525
  },
526
+ depsLockFilePath: undefined, // Don't require lock file - dependencies are in root package.json
524
527
  }
525
528
  );
526
529
 
@@ -629,6 +632,7 @@ export class HyperpStack extends cdk.Stack {
629
632
  sourceMap: true,
630
633
  format: OutputFormat.CJS,
631
634
  },
635
+ depsLockFilePath: undefined, // Don't require lock file - dependencies are in root package.json
632
636
  });
633
637
 
634
638
  // Create Function URL
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hyperp",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Fully automated servereless compute platform on AWS",
5
5
  "main": "index.js",
6
6
  "bin": {