@aws-solutions-constructs/core 2.98.0 → 2.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/.jsii +423 -19
  2. package/index.d.ts +2 -0
  3. package/index.js +3 -1
  4. package/lib/constructs-feature-flags.d.ts +2 -0
  5. package/lib/constructs-feature-flags.js +12 -6
  6. package/lib/polly-helper.d.ts +50 -0
  7. package/lib/polly-helper.js +138 -0
  8. package/lib/step-function-helper.js +12 -2
  9. package/lib/validation.d.ts +60 -0
  10. package/lib/validation.js +594 -0
  11. package/lib/vpc-helper.d.ts +2 -1
  12. package/lib/vpc-helper.js +7 -1
  13. package/nohoist.sh +6 -1
  14. package/package.json +4 -5
  15. package/test/alb-helper.test.js +14 -14
  16. package/test/apigateway-helper.test.js +4 -4
  17. package/test/bedrock-inference-helper.test.js +2 -2
  18. package/test/cloudfront-distribution-s3-helper.test.js +8 -8
  19. package/test/constructs-feature-flags.test.js +10 -3
  20. package/test/dynamo-table.test.js +4 -4
  21. package/test/elasticsearch-helper.test.js +2 -2
  22. package/test/eventbridge-helper.test.js +2 -2
  23. package/test/fargate-helper.test.js +9 -9
  24. package/test/glue-job-helper.test.js +4 -4
  25. package/test/kendra-helper.test.js +6 -6
  26. package/test/kinesis-streams-helper.test.js +2 -2
  27. package/test/lambda-helper.test.js +5 -5
  28. package/test/opensearch-helper.test.js +2 -2
  29. package/test/override-warning-service.test.js +13 -13
  30. package/test/pipes-helper.test.js +12 -12
  31. package/test/polly-helper.test.d.ts +13 -0
  32. package/test/polly-helper.test.js +495 -0
  33. package/test/s3-bucket.test.js +5 -5
  34. package/test/sagemaker-helper.test.js +7 -7
  35. package/test/secretsmanager-helper.test.js +2 -2
  36. package/test/sns-helper.test.js +7 -7
  37. package/test/sqs-helper.test.js +13 -13
  38. package/test/step-function-helper.test.js +6 -6
  39. package/test/test-helper.d.ts +1 -1
  40. package/test/test-helper.js +1 -1
  41. package/test/utils.test.js +9 -9
  42. package/test/validation.test.d.ts +13 -0
  43. package/test/validation.test.js +218 -0
  44. package/test/vpc-helper.test.js +33 -6
  45. package/test/waf-helper.test.js +2 -2
  46. package/test/websocket-api-helper.test.js +4 -4
@@ -240,8 +240,8 @@ test("buildWebSocketApiProps creates correct WebSocket API props", () => {
240
240
  expect(propsWithDefaultRoute.connectRouteOptions).toEqual(__1.connectRouteOptions);
241
241
  const propsWithoutDefaultRoute = (0, __1.buildWebSocketApiProps)(role, queue, false);
242
242
  expect(propsWithoutDefaultRoute.defaultRouteOptions).toBeUndefined();
243
- expect(() => (0, __1.buildWebSocketApiProps)(role, undefined, true)).toThrowError("role and sqs must be provided to create a default route");
244
- expect(() => (0, __1.buildWebSocketApiProps)(undefined, queue, true)).toThrowError("role and sqs must be provided to create a default route");
243
+ expect(() => (0, __1.buildWebSocketApiProps)(role, undefined, true)).toThrow("role and sqs must be provided to create a default route");
244
+ expect(() => (0, __1.buildWebSocketApiProps)(undefined, queue, true)).toThrow("role and sqs must be provided to create a default route");
245
245
  });
246
246
  test("buildWebSocketApiProps creates correct WebSocket API props with different values of defaultIamAuthorization and connectRouteOptions", () => {
247
247
  const app = new cdk.App();
@@ -316,7 +316,7 @@ test("buildWebSocketQueueApi with defaultIamAuthorization is set to false and co
316
316
  ],
317
317
  },
318
318
  });
319
- expect(printWarningSpy).toBeCalledWith("This construct will create a WebSocket with NO Authorizer (defaultIamAuthorization is set to false).");
319
+ expect(printWarningSpy).toHaveBeenCalledWith("This construct will create a WebSocket with NO Authorizer (defaultIamAuthorization is set to false).");
320
320
  printWarningSpy.mockRestore();
321
321
  });
322
322
  test("buildWebSocketQueueApi when passing a custom route name, it should add a custom route integration to the websocket", () => {
@@ -468,4 +468,4 @@ test("buildWebSocketQueueApi when passing a custom route name, with requestTempl
468
468
  },
469
469
  });
470
470
  });
471
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWFwaS1oZWxwZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnNvY2tldC1hcGktaGVscGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILG1DQUFtQztBQUNuQyx1REFBa0U7QUFDbEUsd0RBQXdEO0FBQ3hELDJGQUFrRjtBQUNsRiw2RkFBcUY7QUFDckYsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQywwQkFNWTtBQUNaLHNDQUFzQztBQUV0QyxJQUFJLENBQUMsNEVBQTRFLEVBQUUsR0FBRyxFQUFFO0lBQ3RGLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUU7UUFDOUMsSUFBSSxFQUFFLElBQUk7UUFDVixlQUFlLEVBQUU7WUFDZixLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRTtnQkFDN0MsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDO1lBQ0YsZUFBZSxFQUFFLEVBQUU7U0FDRztLQUN6QixDQUFDLENBQUM7SUFFSCxJQUFBLDBCQUFzQixFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7UUFDdkMsS0FBSztRQUNMLGtCQUFrQixFQUFFLElBQUk7S0FDekIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxRQUFRLENBQUMscUJBQXFCLENBQUMsZ0JBQWdC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QUNFLEdBQUcsRUFBRSxrQkFBSyxDQUFDLGdCQUFnQixDQUFDLG9EQUFvRCxDQUFDO3FCQUNsRjtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENhcHR1cmUsIE1hdGNoLCBUZW1wbGF0ZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hc3NlcnRpb25zXCI7XG5pbXBvcnQgKiBhcyBhcGlnd3YyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRJYW1BdXRob3JpemVyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djItYXV0aG9yaXplcnNcIjtcbmltcG9ydCB7IFdlYlNvY2tldE1vY2tJbnRlZ3JhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uc1wiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzcXMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zcXNcIjtcbmltcG9ydCB7XG4gIGJ1aWxkV2ViU29ja2V0QXBpUHJvcHMsXG4gIGJ1aWxkV2ViU29ja2V0UXVldWVBcGksXG4gIGJ1aWxkV2ViU29ja2V0UXVldWVSb3V0ZU9wdGlvbnMsXG4gIGNvbm5lY3RSb3V0ZU9wdGlvbnMsXG4gIERFRkFVTFRfUk9VVEVfUVVFVUVfVlRMX0NPTkZJRyxcbn0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tIFwiLi4vbGliL3V0aWxzXCI7XG5cbnRlc3QoXCJjcmVhdGVzIEFQSSBHYXRld2F5IHJvbGUgYW5kIGdyYW50cyBwZXJtaXNzaW9ucyBhbmQgYXBpZ2F0ZXdheSBzdGFnZSBzZXR1cFwiLCAoKSA9PiB7XG4gIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhhcHAsIFwiVGVzdFN0YWNrXCIpO1xuICBjb25zdCBxdWV1ZSA9IG5ldyBzcXMuUXVldWUoc3RhY2ssIFwiVGVzdFF1ZXVlXCIsIHtcbiAgICBmaWZvOiB0cnVlLFxuICAgIGRlYWRMZXR0ZXJRdWV1ZToge1xuICAgICAgcXVldWU6IG5ldyBzcXMuUXVldWUoc3RhY2ssIFwiRGVhZExldHRlclF1ZXVlXCIsIHtcbiAgICAgICAgZmlmbzogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICAgbWF4UmVjZWl2ZUNvdW50OiAxMCxcbiAgICB9IGFzIHNxcy5EZWFkTGV0dGVyUXVldWUsXG4gIH0pO1xuXG4gIGJ1aWxkV2ViU29ja2V0UXVldWVBcGkoc3RhY2ssIFwiVGVzdEFwaVwiLCB7XG4gICAgcXVldWUsXG4gICAgY3JlYXRlRGVmYXVsdFJvdXRlOiB0cnVlLFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpJQU06OlJvbGVcIiwgMSk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6SUFNOjpSb2xlXCIsIHtcbiAgICBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQ6IHtcbiAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgQWN0aW9uOiBcInN0czpBc3N1bWVSb2xlXCIsXG4gICAgICAgICAgRWZmZWN0OiBcIkFsbG93XCIsXG4gICAgICAgICAgUHJpbmNpcGFsOiB7XG4gICAgICAgICAgICBTZXJ2aWNlOiBcImFwaWdhdGV3YXkuYW1hem9uYXdzLmNvbVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH0pO1xuXG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6U1FTOjpRdWV1ZVwiLCAyKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpTUVM6OlF1ZXVlXCIsIHtcbiAgICBGaWZvUXVldWU6IHRydWUsXG4gICAgUmVkcml2ZVBvbGljeToge1xuICAgICAgZGVhZExldHRlclRhcmdldEFybjoge1xuICAgICAgICBcIkZuOjpHZXRBdHRcIjogW01hdGNoLmFueVZhbHVlKCksIFwiQXJuXCJdLFxuICAgICAgfSxcbiAgICAgIG1heFJlY2VpdmVDb3VudDogMTAsXG4gICAgfSxcbiAgfSk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6U1FTOjpRdWV1ZVwiLCB7XG4gICAgRmlmb1F1ZXVlOiB0cnVlLFxuICAgIFJlZHJpdmVQb2xpY3k6IE1hdGNoLmFic2VudCgpLFxuICB9KTtcblxuICBjb25zdCBzcXNRdWV1ZUNhcHR1cmUgPSBuZXcgQ2FwdHVyZSgpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OklBTTo6UG9saWN5XCIsIHtcbiAgICBQb2xpY3lEb2N1bWVudDoge1xuICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246IFtcInNxczpTZW5kTWVzc2FnZVwiLCBcInNxczpHZXRRdWV1ZUF0dHJpYnV0ZXNcIiwgXCJzcXM6R2V0UXVldWVVcmxcIl0sXG4gICAgICAgICAgRWZmZWN0OiBcIkFsbG93XCIsXG4gICAgICAgICAgUmVzb3VyY2U6IHtcbiAgICAgICAgICAgIFwiRm46OkdldEF0dFwiOiBbc3FzUXVldWVDYXB0dXJlLCBcIkFyblwiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICBcImxvZ3M6Q3JlYXRlTG9nR3JvdXBcIixcbiAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dTdHJlYW1cIixcbiAgICAgICAgICAgIFwibG9nczpEZXNjcmliZUxvZ0dyb3Vwc1wiLFxuICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nU3RyZWFtc1wiLFxuICAgICAgICAgICAgXCJsb2dzOlB1dExvZ0V2ZW50c1wiLFxuICAgICAgICAgICAgXCJsb2dzOkdldExvZ0V2ZW50c1wiLFxuICAgICAgICAgICAgXCJsb2dzOkZpbHRlckxvZ0V2ZW50c1wiLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgRWZmZWN0OiBcIkFsbG93XCIsXG4gICAgICAgICAgUmVzb3VyY2U6IHtcbiAgICAgICAgICAgIFwiRm46OkdldEF0dFwiOiBbTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cChcIkxvZ0dyb3VwKlwiKSwgXCJBcm5cIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSk7XG5cbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVwiLCAxKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlN0YWdlXCIsIDEpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6U3RhZ2VcIiwge1xuICAgIFN0YWdlTmFtZTogXCJwcm9kXCIsXG4gICAgQXV0b0RlcGxveTogdHJ1ZSxcbiAgfSk7XG5cbiAgY29uc3QgYXBpZ3d2MkNhdHB1cmUgPSBuZXcgQ2FwdHVyZSgpO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcIiwgMik7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLCB7XG4gICAgQXBpSWQ6IHtcbiAgICAgIFJlZjogYXBpZ3d2MkNhdHB1cmUsXG4gICAgfSxcbiAgICBBdXRob3JpemF0aW9uVHlwZTogXCJOT05FXCIsXG4gICAgUm91dGVLZXk6IFwiJGRlZmF1bHRcIixcbiAgICBUYXJnZXQ6IHtcbiAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICBcIlwiLFxuICAgICAgICBbXG4gICAgICAgICAgXCJpbnRlZ3JhdGlvbnMvXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiV2ViU29ja2V0QXBpVGVzdEFwaWRlZmF1bHRSb3V0ZWRlZmF1bHRcIiksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsIHtcbiAgICBBcGlJZDoge1xuICAgICAgUmVmOiBhcGlnd3YyQ2F0cHVyZSxcbiAgICB9LFxuICAgIEF1dGhvcml6YXRpb25UeXBlOiBcIkFXU19JQU1cIixcbiAgICBSb3V0ZUtleTogXCIkY29ubmVjdFwiLFxuICAgIFRhcmdldDoge1xuICAgICAgXCJGbjo6Sm9pblwiOiBbXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFtcbiAgICAgICAgICBcImludGVncmF0aW9ucy9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWY6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoXCJXZWJTb2NrZXRBcGlUZXN0QXBpY29ubmVjdFJvdXRlY29ubmVjdFwiKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIiwge1xuICAgIEFwaUlkOiB7XG4gICAgICBSZWY6IGFwaWd3djJDYXRwdXJlLmFzU3RyaW5nKCksXG4gICAgfSxcbiAgICBDcmVkZW50aWFsc0Fybjoge1xuICAgICAgXCJGbjo6R2V0QXR0XCI6IFtNYXRjaC5hbnlWYWx1ZSgpLCBcIkFyblwiXSxcbiAgICB9LFxuICAgIEludGVncmF0aW9uTWV0aG9kOiBcIlBPU1RcIixcbiAgICBJbnRlZ3JhdGlvblR5cGU6IFwiQVdTXCIsXG4gICAgSW50ZWdyYXRpb25Vcmk6IHtcbiAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICBcIlwiLFxuICAgICAgICBbXG4gICAgICAgICAgXCJhcm46XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBcIkFXUzo6UGFydGl0aW9uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIjphcGlnYXRld2F5OlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlZjogXCJBV1M6OlJlZ2lvblwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCI6c3FzOnBhdGgvXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBcIkFXUzo6QWNjb3VudElkXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIkZuOjpHZXRBdHRcIjogW3Nxc1F1ZXVlQ2FwdHVyZS5hc1N0cmluZygpLCBcIlF1ZXVlTmFtZVwiXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgXSxcbiAgICB9LFxuICAgIFBhc3N0aHJvdWdoQmVoYXZpb3I6IFwiTkVWRVJcIixcbiAgICBSZXF1ZXN0UGFyYW1ldGVyczoge1xuICAgICAgXCJpbnRlZ3JhdGlvbi5yZXF1ZXN0LmhlYWRlci5Db250ZW50LVR5cGVcIjogXCInYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1wiLFxuICAgIH0sXG4gICAgUmVxdWVzdFRlbXBsYXRlczoge1xuICAgICAgJGRlZmF1bHQ6IERFRkFVTFRfUk9VVEVfUVVFVUVfVlRMX0NPTkZJRyxcbiAgICB9LFxuICAgIFRlbXBsYXRlU2VsZWN0aW9uRXhwcmVzc2lvbjogXCJcXFxcJGRlZmF1bHRcIixcbiAgfSk7XG59KTtcblxudGVzdChcImNyZWF0ZXMgQVBJIEdhdGV3YXkgcm9sZSBhbmQgZ3JhbnRzIHBlcm1pc3Npb25zIGFuZCBhcGlnYXRld2F5IHN0YWdlIHNldHVwXCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKGFwcCwgXCJUZXN0U3RhY2tcIik7XG5cbiAgbmV3IGFwaWd3djIuV2ViU29ja2V0QXBpKHN0YWNrLCBgV2ViU29ja2V0QXBpYCwge1xuICAgIGFwaU5hbWU6IFwiVGVzdEFwaVwiLFxuICAgIGNvbm5lY3RSb3V0ZU9wdGlvbnM6IHtcbiAgICAgIGludGVncmF0aW9uOiBuZXcgV2ViU29ja2V0TW9ja0ludGVncmF0aW9uKFwiY29ubmVjdC1tb2NrXCIpLFxuICAgICAgYXV0aG9yaXplcjogbmV3IFdlYlNvY2tldElhbUF1dGhvcml6ZXIoKSxcbiAgICB9LFxuICAgIGRpc2Nvbm5lY3RSb3V0ZU9wdGlvbnM6IHtcbiAgICAgIGludGVncmF0aW9uOiBuZXcgV2ViU29ja2V0TW9ja0ludGVncmF0aW9uKFwiZGlzY29ubmVjdC1tb2NrXCIpLFxuICAgIH0sXG4gICAgZGVmYXVsdFJvdXRlT3B0aW9uczoge1xuICAgICAgaW50ZWdyYXRpb246IG5ldyBXZWJTb2NrZXRNb2NrSW50ZWdyYXRpb24oXCJkZWZhdWx0LW1vY2tcIiksXG4gICAgfSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCIsIDEpO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6U3RhZ2VcIiwgMCk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblwiLCAzKTtcbiAgdGVtcGxhdGUuYWxsUmVzb3VyY2VzUHJvcGVydGllcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblwiLCB7XG4gICAgSW50ZWdyYXRpb25UeXBlOiBcIk1PQ0tcIixcbiAgfSk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLCB7XG4gICAgQXBpSWQ6IE1hdGNoLmFueVZhbHVlKCksXG4gICAgQXV0aG9yaXphdGlvblR5cGU6IFwiQVdTX0lBTVwiLFxuICAgIFJvdXRlS2V5OiBcIiRjb25uZWN0XCIsXG4gICAgVGFyZ2V0OiB7XG4gICAgICBcIkZuOjpKb2luXCI6IFtcIlwiLCBbXCJpbnRlZ3JhdGlvbnMvXCIsIHsgUmVmOiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiV2ViU29ja2V0QXBpY29ubmVjdFJvdXRlY29ubmVjdG1vY2tcIikgfV1dLFxuICAgIH0sXG4gIH0pO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLCB7XG4gICAgQXBpSWQ6IE1hdGNoLmFueVZhbHVlKCksXG4gICAgUm91dGVLZXk6IFwiJGRpc2Nvbm5lY3RcIixcbiAgICBUYXJnZXQ6IHtcbiAgICAgIFwiRm46OkpvaW5cIjogW1wiXCIsIFtcImludGVncmF0aW9ucy9cIiwgeyBSZWY6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoXCJXZWJTb2NrZXRBcGlkaXNjb25uZWN0Um91dGVkaXNjb25uZWN0bW9ja1wiKSB9XV0sXG4gICAgfSxcbiAgfSk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsIHtcbiAgICBBcGlJZDogTWF0Y2guYW55VmFsdWUoKSxcbiAgICBSb3V0ZUtleTogXCIkZGVmYXVsdFwiLFxuICAgIFRhcmdldDoge1xuICAgICAgXCJGbjo6Sm9pblwiOiBbXCJcIiwgW1wiaW50ZWdyYXRpb25zL1wiLCB7IFJlZjogTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cChcIldlYlNvY2tldEFwaWRlZmF1bHRSb3V0ZWRlZmF1bHRtb2NrXCIpIH1dXSxcbiAgICB9LFxuICB9KTtcbn0pO1xuXG50ZXN0KFwiYnVpbGRXZWJTb2NrZXRBcGlQcm9wcyBjcmVhdGVzIGNvcnJlY3QgV2ViU29ja2V0IEFQSSBwcm9wc1wiLCAoKSA9PiB7XG4gIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhhcHAsIFwiVGVzdFN0YWNrXCIpO1xuICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHN0YWNrLCBcIlRlc3RSb2xlXCIsIHtcbiAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImFwaWdhdGV3YXkuYW1hem9uYXdzLmNvbVwiKSxcbiAgfSk7XG4gIGNvbnN0IHF1ZXVlID0gbmV3IHNxcy5RdWV1ZShzdGFjaywgXCJUZXN0UXVldWVcIik7XG5cbiAgY29uc3QgcHJvcHNXaXRoRGVmYXVsdFJvdXRlID0gYnVpbGRXZWJTb2NrZXRBcGlQcm9wcyhyb2xlLCBxdWV1ZSwgdHJ1ZSk7XG4gIGV4cGVjdChwcm9wc1dpdGhEZWZhdWx0Um91dGUuZGVmYXVsdFJvdXRlT3B0aW9ucykudG9CZURlZmluZWQoKTtcbiAgZXhwZWN0KHByb3BzV2l0aERlZmF1bHRSb3V0ZS5kZWZhdWx0Um91dGVPcHRpb25zKS50b0VxdWFsKFxuICAgIGJ1aWxkV2ViU29ja2V0UXVldWVSb3V0ZU9wdGlvbnMocm9sZSwgcXVldWUsIFwiJGRlZmF1bHRcIiwgeyAkZGVmYXVsdDogREVGQVVMVF9ST1VURV9RVUVVRV9WVExfQ09ORklHIH0pXG4gICk7XG4gIGV4cGVjdChwcm9wc1dpdGhEZWZhdWx0Um91dGUuY29ubmVjdFJvdXRlT3B0aW9ucykudG9FcXVhbChjb25uZWN0Um91dGVPcHRpb25zKTtcblxuICBjb25zdCBwcm9wc1dpdGhvdXREZWZhdWx0Um91dGUgPSBidWlsZFdlYlNvY2tldEFwaVByb3BzKHJvbGUsIHF1ZXVlLCBmYWxzZSk7XG4gIGV4cGVjdChwcm9wc1dpdGhvdXREZWZhdWx0Um91dGUuZGVmYXVsdFJvdXRlT3B0aW9ucykudG9CZVVuZGVmaW5lZCgpO1xuXG4gIGV4cGVjdCgoKSA9PiBidWlsZFdlYlNvY2tldEFwaVByb3BzKHJvbGUsIHVuZGVmaW5lZCwgdHJ1ZSkpLnRvVGhyb3dFcnJvcihcbiAgICBcInJvbGUgYW5kIHNxcyBtdXN0IGJlIHByb3ZpZGVkIHRvIGNyZWF0ZSBhIGRlZmF1bHQgcm91dGVcIlxuICApO1xuICBleHBlY3QoKCkgPT4gYnVpbGRXZWJTb2NrZXRBcGlQcm9wcyh1bmRlZmluZWQsIHF1ZXVlLCB0cnVlKSkudG9UaHJvd0Vycm9yKFxuICAgIFwicm9sZSBhbmQgc3FzIG11c3QgYmUgcHJvdmlkZWQgdG8gY3JlYXRlIGEgZGVmYXVsdCByb3V0ZVwiXG4gICk7XG59KTtcblxudGVzdChcImJ1aWxkV2ViU29ja2V0QXBpUHJvcHMgY3JlYXRlcyBjb3JyZWN0IFdlYlNvY2tldCBBUEkgcHJvcHMgd2l0aCBkaWZmZXJlbnQgdmFsdWVzIG9mIGRlZmF1bHRJYW1BdXRob3JpemF0aW9uIGFuZCBjb25uZWN0Um91dGVPcHRpb25zXCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKGFwcCwgXCJUZXN0U3RhY2tcIik7XG4gIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUoc3RhY2ssIFwiVGVzdFJvbGVcIiwge1xuICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tXCIpLFxuICB9KTtcbiAgY29uc3QgcXVldWUgPSBuZXcgc3FzLlF1ZXVlKHN0YWNrLCBcIlRlc3RRdWV1ZVwiKTtcblxuICAvLyBkbyBub3QgY3JlYXRlICRkZWZhdWx0IGFuZCAkY29ubmVjdFxuICBjb25zdCBhcGlQcm9wc1dpdGhOb0RlZmF1bHRBbmRDb25uZWN0ID0gYnVpbGRXZWJTb2NrZXRBcGlQcm9wcyhyb2xlLCBxdWV1ZSwgZmFsc2UsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICBleHBlY3QoYXBpUHJvcHNXaXRoTm9EZWZhdWx0QW5kQ29ubmVjdC5kZWZhdWx0Um91dGVPcHRpb25zKS50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChhcGlQcm9wc1dpdGhOb0RlZmF1bHRBbmRDb25uZWN0LmNvbm5lY3RSb3V0ZU9wdGlvbnMpLnRvQmVVbmRlZmluZWQoKTtcblxuICAvLyBjcmVhdGUgJGRlZmF1bHQsIGRvIG5vdCBjcmVhdGUgJGNvbm5lY3RcbiAgY29uc3QgYXBpUHJvcHNXaXRoTm9Db25uZWN0ID0gYnVpbGRXZWJTb2NrZXRBcGlQcm9wcyhyb2xlLCBxdWV1ZSwgdHJ1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gIGV4cGVjdChhcGlQcm9wc1dpdGhOb0Nvbm5lY3QuZGVmYXVsdFJvdXRlT3B0aW9ucykudG9CZURlZmluZWQoKTtcbiAgZXhwZWN0KGFwaVByb3BzV2l0aE5vQ29ubmVjdC5jb25uZWN0Um91dGVPcHRpb25zKS50b0JlVW5kZWZpbmVkKCk7XG59KTtcblxudGVzdChcImJ1aWxkV2ViU29ja2V0UXVldWVBcGkgd2l0aCBkZWZhdWx0SWFtQXV0aG9yaXphdGlvbiBpcyBub3Qgc2V0XCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKGFwcCwgXCJUZXN0U3RhY2tcIik7XG4gIGNvbnN0IHF1ZXVlID0gbmV3IHNxcy5RdWV1ZShzdGFjaywgXCJUZXN0UXVldWVcIik7XG5cbiAgLy8gbm90IHN1cHBseWluZyBhdXRob3JpemVyIHdpdGggJGNvbm5lY3Qgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgc3ludGhlc2l6ZWQgc3RhY2sgd2l0aCBhZGRcbiAgLy8gYW4gYXV0aG9yaXplciBiZWNhdXNlIGRlZmF1bHRJYW1BdXRob3JpemF0aW9uIGlzIG5vdCBzZXQgdG8gZmFsc2UuXG4gIGJ1aWxkV2ViU29ja2V0UXVldWVBcGkoc3RhY2ssIFwiVGVzdEFwaVwiLCB7XG4gICAgcXVldWUsXG4gICAgY3JlYXRlRGVmYXVsdFJvdXRlOiB0cnVlLFxuICAgIHdlYlNvY2tldEFwaVByb3BzOiB7XG4gICAgICBjb25uZWN0Um91dGVPcHRpb25zOiB7XG4gICAgICAgIGludGVncmF0aW9uOiBuZXcgV2ViU29ja2V0TW9ja0ludGVncmF0aW9uKFwidXNlci1jcmVhdGVkLW1vY2tcIiksXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsIHtcbiAgICBBcGlJZDogTWF0Y2guYW55VmFsdWUoKSxcbiAgICBBdXRob3JpemF0aW9uVHlwZTogXCJBV1NfSUFNXCIsXG4gICAgUm91dGVLZXk6IFwiJGNvbm5lY3RcIixcbiAgICBUYXJnZXQ6IHtcbiAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICBcIlwiLFxuICAgICAgICBbXCJpbnRlZ3JhdGlvbnMvXCIsIHsgUmVmOiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiV2ViU29ja2V0QXBpVGVzdEFwaWNvbm5lY3RSb3V0ZXVzZXJjcmVhdGVkbW9ja1wiKSB9XSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSk7XG59KTtcblxudGVzdChcImJ1aWxkV2ViU29ja2V0UXVldWVBcGkgd2l0aCBkZWZhdWx0SWFtQXV0aG9yaXphdGlvbiBpcyBzZXQgdG8gZmFsc2UgYW5kIGNvbm5lY3RSb3V0ZU9wdGlvbnMgZG9lcyBub3Qgc2V0IGF1dGhvcml6ZXJcIiwgKCkgPT4ge1xuICBjb25zdCBhcHAgPSBuZXcgY2RrLkFwcCgpO1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soYXBwLCBcIlRlc3RTdGFja1wiKTtcbiAgY29uc3QgcXVldWUgPSBuZXcgc3FzLlF1ZXVlKHN0YWNrLCBcIlRlc3RRdWV1ZVwiKTtcbiAgY29uc3QgcHJpbnRXYXJuaW5nU3B5ID0gamVzdC5zcHlPbih1dGlscywgXCJwcmludFdhcm5pbmdcIik7XG5cbiAgLy8gbm90IHN1cHBseWluZyBhdXRob3JpemVyIHdpdGggJGNvbm5lY3Qgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCB0aGUgc3ludGhlc2l6ZWQgc3RhY2sgd2l0aCBhZGRcbiAgLy8gYW4gYXV0aG9yaXplciBiZWNhdXNlIGRlZmF1bHRJYW1BdXRob3JpemF0aW9uIGlzIG5vdCBzZXQgdG8gZmFsc2UuXG4gIGJ1aWxkV2ViU29ja2V0UXVldWVBcGkoc3RhY2ssIFwiVGVzdEFwaVwiLCB7XG4gICAgcXVldWUsXG4gICAgY3JlYXRlRGVmYXVsdFJvdXRlOiBmYWxzZSxcbiAgICB3ZWJTb2NrZXRBcGlQcm9wczoge1xuICAgICAgY29ubmVjdFJvdXRlT3B0aW9uczoge1xuICAgICAgICBpbnRlZ3JhdGlvbjogbmV3IFdlYlNvY2tldE1vY2tJbnRlZ3JhdGlvbihcInVzZXItY3JlYXRlZC1tb2NrXCIpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmF1bHRJYW1BdXRob3JpemF0aW9uOiBmYWxzZSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcIiwge1xuICAgIEFwaUlkOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgIEF1dGhvcml6YXRpb25UeXBlOiBcIk5PTkVcIixcbiAgICBSb3V0ZUtleTogXCIkY29ubmVjdFwiLFxuICAgIFRhcmdldDoge1xuICAgICAgXCJGbjo6Sm9pblwiOiBbXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFtcImludGVncmF0aW9ucy9cIiwgeyBSZWY6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoXCJXZWJTb2NrZXRBcGlUZXN0QXBpY29ubmVjdFJvdXRldXNlcmNyZWF0ZWRtb2NrXCIpIH1dLFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcblxuICBleHBlY3QocHJpbnRXYXJuaW5nU3B5KS50b0JlQ2FsbGVkV2l0aChcbiAgICBcIlRoaXMgY29uc3RydWN0IHdpbGwgY3JlYXRlIGEgV2ViU29ja2V0IHdpdGggTk8gQXV0aG9yaXplciAoZGVmYXVsdElhbUF1dGhvcml6YXRpb24gaXMgc2V0IHRvIGZhbHNlKS5cIlxuICApO1xuICBwcmludFdhcm5pbmdTcHkubW9ja1Jlc3RvcmUoKTtcbn0pO1xuXG50ZXN0KFwiYnVpbGRXZWJTb2NrZXRRdWV1ZUFwaSB3aGVuIHBhc3NpbmcgYSBjdXN0b20gcm91dGUgbmFtZSwgaXQgc2hvdWxkIGFkZCBhIGN1c3RvbSByb3V0ZSBpbnRlZ3JhdGlvbiB0byB0aGUgd2Vic29ja2V0XCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKGFwcCwgXCJUZXN0U3RhY2tcIik7XG4gIGNvbnN0IHF1ZXVlID0gbmV3IHNxcy5RdWV1ZShzdGFjaywgXCJUZXN0UXVldWVcIik7XG5cbiAgY29uc3QgY3VzdG9tUm91dGVOYW1lID0gXCJmYWtlcm91dGVuYW1lXCI7XG5cbiAgYnVpbGRXZWJTb2NrZXRRdWV1ZUFwaShzdGFjaywgXCJUZXN0QXBpXCIsIHtcbiAgICBxdWV1ZSxcbiAgICBjcmVhdGVEZWZhdWx0Um91dGU6IGZhbHNlLFxuICAgIGRlZmF1bHRJYW1BdXRob3JpemF0aW9uOiBmYWxzZSxcbiAgICBjdXN0b21Sb3V0ZU5hbWUsXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uXCIsIDEpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIiwge1xuICAgIEFwaUlkOiB7XG4gICAgICBSZWY6IE1hdGNoLmFueVZhbHVlKCksXG4gICAgfSxcbiAgICBDcmVkZW50aWFsc0Fybjoge1xuICAgICAgXCJGbjo6R2V0QXR0XCI6IFtNYXRjaC5hbnlWYWx1ZSgpLCBcIkFyblwiXSxcbiAgICB9LFxuICAgIEludGVncmF0aW9uTWV0aG9kOiBcIlBPU1RcIixcbiAgICBJbnRlZ3JhdGlvblR5cGU6IFwiQVdTXCIsXG4gICAgSW50ZWdyYXRpb25Vcmk6IHtcbiAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICBcIlwiLFxuICAgICAgICBbXG4gICAgICAgICAgXCJhcm46XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBcIkFXUzo6UGFydGl0aW9uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIjphcGlnYXRld2F5OlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlZjogXCJBV1M6OlJlZ2lvblwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCI6c3FzOnBhdGgvXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBcIkFXUzo6QWNjb3VudElkXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIkZuOjpHZXRBdHRcIjogW01hdGNoLmFueVZhbHVlKCksIFwiUXVldWVOYW1lXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgUGFzc3Rocm91Z2hCZWhhdmlvcjogXCJORVZFUlwiLFxuICAgIFJlcXVlc3RQYXJhbWV0ZXJzOiB7XG4gICAgICBcImludGVncmF0aW9uLnJlcXVlc3QuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiBcIidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXCIsXG4gICAgfSxcbiAgICBSZXF1ZXN0VGVtcGxhdGVzOiB7XG4gICAgICBbY3VzdG9tUm91dGVOYW1lXTogREVGQVVMVF9ST1VURV9RVUVVRV9WVExfQ09ORklHLFxuICAgIH0sXG4gICAgVGVtcGxhdGVTZWxlY3Rpb25FeHByZXNzaW9uOiBjdXN0b21Sb3V0ZU5hbWUsXG4gIH0pO1xuXG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLCAxKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsIHtcbiAgICBBcGlJZDoge1xuICAgICAgUmVmOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgIH0sXG4gICAgUm91dGVLZXk6IGN1c3RvbVJvdXRlTmFtZSxcbiAgICBUYXJnZXQ6IHtcbiAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICBcIlwiLFxuICAgICAgICBbXG4gICAgICAgICAgXCJpbnRlZ3JhdGlvbnMvXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiV2ViU29ja2V0QXBpVGVzdEFwaWZha2Vyb3V0ZW5hbWVSb3V0ZWZha2Vyb3V0ZW5hbWVcIiksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSk7XG59KTtcblxudGVzdChcImJ1aWxkV2ViU29ja2V0UXVldWVBcGkgd2hlbiBwYXNzaW5nIGEgY3VzdG9tIHJvdXRlIG5hbWUsIHdpdGggcmVxdWVzdFRlbXBsYXRlLCBzaG91bGQgbWFwIHRoZSByZXF1ZXN0IHRlbXBsYXRlIHRvIHRoZSBjdXN0b20gcm91dGVcIiwgKCkgPT4ge1xuICBjb25zdCBhcHAgPSBuZXcgY2RrLkFwcCgpO1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soYXBwLCBcIlRlc3RTdGFja1wiKTtcbiAgY29uc3QgcXVldWUgPSBuZXcgc3FzLlF1ZXVlKHN0YWNrLCBcIlRlc3RRdWV1ZVwiKTtcblxuICBjb25zdCBjdXN0b21Sb3V0ZU5hbWUgPSBcImZha2Vyb3V0ZW5hbWVcIjtcblxuICBidWlsZFdlYlNvY2tldFF1ZXVlQXBpKHN0YWNrLCBcIlRlc3RBcGlcIiwge1xuICAgIHF1ZXVlLFxuICAgIGNyZWF0ZURlZmF1bHRSb3V0ZTogZmFsc2UsXG4gICAgZGVmYXVsdElhbUF1dGhvcml6YXRpb246IGZhbHNlLFxuICAgIGN1c3RvbVJvdXRlTmFtZSxcbiAgICBkZWZhdWx0Um91dGVSZXF1ZXN0VGVtcGxhdGU6IHtcbiAgICAgIFtjdXN0b21Sb3V0ZU5hbWVdOiBcImEmZmFrZSZ2dGxcIixcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblwiLCAxKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uXCIsIHtcbiAgICBBcGlJZDoge1xuICAgICAgUmVmOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgIH0sXG4gICAgQ3JlZGVudGlhbHNBcm46IHtcbiAgICAgIFwiRm46OkdldEF0dFwiOiBbTWF0Y2guYW55VmFsdWUoKSwgXCJBcm5cIl0sXG4gICAgfSxcbiAgICBJbnRlZ3JhdGlvbk1ldGhvZDogXCJQT1NUXCIsXG4gICAgSW50ZWdyYXRpb25UeXBlOiBcIkFXU1wiLFxuICAgIEludGVncmF0aW9uVXJpOiB7XG4gICAgICBcIkZuOjpKb2luXCI6IFtcbiAgICAgICAgXCJcIixcbiAgICAgICAgW1xuICAgICAgICAgIFwiYXJuOlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlZjogXCJBV1M6OlBhcnRpdGlvblwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCI6YXBpZ2F0ZXdheTpcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWY6IFwiQVdTOjpSZWdpb25cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiOnNxczpwYXRoL1wiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlZjogXCJBV1M6OkFjY291bnRJZFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIvXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJGbjo6R2V0QXR0XCI6IFtNYXRjaC5hbnlWYWx1ZSgpLCBcIlF1ZXVlTmFtZVwiXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgXSxcbiAgICB9LFxuICAgIFBhc3N0aHJvdWdoQmVoYXZpb3I6IFwiTkVWRVJcIixcbiAgICBSZXF1ZXN0UGFyYW1ldGVyczoge1xuICAgICAgXCJpbnRlZ3JhdGlvbi5yZXF1ZXN0LmhlYWRlci5Db250ZW50LVR5cGVcIjogXCInYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1wiLFxuICAgIH0sXG4gICAgUmVxdWVzdFRlbXBsYXRlczoge1xuICAgICAgW2N1c3RvbVJvdXRlTmFtZV06IFwiYSZmYWtlJnZ0bFwiLFxuICAgIH0sXG4gICAgVGVtcGxhdGVTZWxlY3Rpb25FeHByZXNzaW9uOiBjdXN0b21Sb3V0ZU5hbWUsXG4gIH0pO1xuXG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLCAxKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsIHtcbiAgICBBcGlJZDoge1xuICAgICAgUmVmOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgIH0sXG4gICAgUm91dGVLZXk6IGN1c3RvbVJvdXRlTmFtZSxcbiAgICBUYXJnZXQ6IHtcbiAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICBcIlwiLFxuICAgICAgICBbXG4gICAgICAgICAgXCJpbnRlZ3JhdGlvbnMvXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiV2ViU29ja2V0QXBpVGVzdEFwaWZha2Vyb3V0ZW5hbWVSb3V0ZWZha2Vyb3V0ZW5hbWVcIiksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSk7XG59KTtcbiJdfQ==
471
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWFwaS1oZWxwZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnNvY2tldC1hcGktaGVscGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILG1DQUFtQztBQUNuQyx1REFBa0U7QUFDbEUsd0RBQXdEO0FBQ3hELDJGQUFrRjtBQUNsRiw2RkFBcUY7QUFDckYsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQywwQkFNWTtBQUNaLHNDQUFzQztBQUV0QyxJQUFJLENBQUMsNEVBQTRFLEVBQUUsR0FBRyxFQUFFO0lBQ3RGLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDOUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUU7UUFDOUMsSUFBSSxFQUFFLElBQUk7UUFDVixlQUFlLEVBQUU7WUFDZixLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRTtnQkFDN0MsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDO1lBQ0YsZUFBZSxFQUFFLEVBQUU7U0FDRztLQUN6QixDQUFDLENBQUM7SUFFSCxJQUFBLDBCQUFzQixFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7UUFDdkMsS0FBSztRQUNMLGtCQUFrQixFQUFFLElBQUk7S0FDekIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxRQUFRLENBQUMscUJBQXFCLENBQUMsZ0JBQWdC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d0JBQ0UsR0FBRyxFQUFFLGtCQUFLLENBQUMsZ0JBQWdCLENBQUMsb0RBQW9ELENBQUM7cUJBQ2xGO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ2FwdHVyZSwgTWF0Y2gsIFRlbXBsYXRlIH0gZnJvbSBcImF3cy1jZGstbGliL2Fzc2VydGlvbnNcIjtcbmltcG9ydCAqIGFzIGFwaWd3djIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djJcIjtcbmltcG9ydCB7IFdlYlNvY2tldElhbUF1dGhvcml6ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXl2Mi1hdXRob3JpemVyc1wiO1xuaW1wb3J0IHsgV2ViU29ja2V0TW9ja0ludGVncmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djItaW50ZWdyYXRpb25zXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIHNxcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiO1xuaW1wb3J0IHtcbiAgYnVpbGRXZWJTb2NrZXRBcGlQcm9wcyxcbiAgYnVpbGRXZWJTb2NrZXRRdWV1ZUFwaSxcbiAgYnVpbGRXZWJTb2NrZXRRdWV1ZVJvdXRlT3B0aW9ucyxcbiAgY29ubmVjdFJvdXRlT3B0aW9ucyxcbiAgREVGQVVMVF9ST1VURV9RVUVVRV9WVExfQ09ORklHLFxufSBmcm9tIFwiLi5cIjtcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gXCIuLi9saWIvdXRpbHNcIjtcblxudGVzdChcImNyZWF0ZXMgQVBJIEdhdGV3YXkgcm9sZSBhbmQgZ3JhbnRzIHBlcm1pc3Npb25zIGFuZCBhcGlnYXRld2F5IHN0YWdlIHNldHVwXCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKGFwcCwgXCJUZXN0U3RhY2tcIik7XG4gIGNvbnN0IHF1ZXVlID0gbmV3IHNxcy5RdWV1ZShzdGFjaywgXCJUZXN0UXVldWVcIiwge1xuICAgIGZpZm86IHRydWUsXG4gICAgZGVhZExldHRlclF1ZXVlOiB7XG4gICAgICBxdWV1ZTogbmV3IHNxcy5RdWV1ZShzdGFjaywgXCJEZWFkTGV0dGVyUXVldWVcIiwge1xuICAgICAgICBmaWZvOiB0cnVlLFxuICAgICAgfSksXG4gICAgICBtYXhSZWNlaXZlQ291bnQ6IDEwLFxuICAgIH0gYXMgc3FzLkRlYWRMZXR0ZXJRdWV1ZSxcbiAgfSk7XG5cbiAgYnVpbGRXZWJTb2NrZXRRdWV1ZUFwaShzdGFjaywgXCJUZXN0QXBpXCIsIHtcbiAgICBxdWV1ZSxcbiAgICBjcmVhdGVEZWZhdWx0Um91dGU6IHRydWUsXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OklBTTo6Um9sZVwiLCAxKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpJQU06OlJvbGVcIiwge1xuICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDoge1xuICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246IFwic3RzOkFzc3VtZVJvbGVcIixcbiAgICAgICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgICAgICBQcmluY2lwYWw6IHtcbiAgICAgICAgICAgIFNlcnZpY2U6IFwiYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSk7XG5cbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpTUVM6OlF1ZXVlXCIsIDIpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OlNRUzo6UXVldWVcIiwge1xuICAgIEZpZm9RdWV1ZTogdHJ1ZSxcbiAgICBSZWRyaXZlUG9saWN5OiB7XG4gICAgICBkZWFkTGV0dGVyVGFyZ2V0QXJuOiB7XG4gICAgICAgIFwiRm46OkdldEF0dFwiOiBbTWF0Y2guYW55VmFsdWUoKSwgXCJBcm5cIl0sXG4gICAgICB9LFxuICAgICAgbWF4UmVjZWl2ZUNvdW50OiAxMCxcbiAgICB9LFxuICB9KTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpTUVM6OlF1ZXVlXCIsIHtcbiAgICBGaWZvUXVldWU6IHRydWUsXG4gICAgUmVkcml2ZVBvbGljeTogTWF0Y2guYWJzZW50KCksXG4gIH0pO1xuXG4gIGNvbnN0IHNxc1F1ZXVlQ2FwdHVyZSA9IG5ldyBDYXB0dXJlKCk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6SUFNOjpQb2xpY3lcIiwge1xuICAgIFBvbGljeURvY3VtZW50OiB7XG4gICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIEFjdGlvbjogW1wic3FzOlNlbmRNZXNzYWdlXCIsIFwic3FzOkdldFF1ZXVlQXR0cmlidXRlc1wiLCBcInNxczpHZXRRdWV1ZVVybFwiXSxcbiAgICAgICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgICAgICBSZXNvdXJjZToge1xuICAgICAgICAgICAgXCJGbjo6R2V0QXR0XCI6IFtzcXNRdWV1ZUNhcHR1cmUsIFwiQXJuXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dHcm91cFwiLFxuICAgICAgICAgICAgXCJsb2dzOkNyZWF0ZUxvZ1N0cmVhbVwiLFxuICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nR3JvdXBzXCIsXG4gICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dTdHJlYW1zXCIsXG4gICAgICAgICAgICBcImxvZ3M6UHV0TG9nRXZlbnRzXCIsXG4gICAgICAgICAgICBcImxvZ3M6R2V0TG9nRXZlbnRzXCIsXG4gICAgICAgICAgICBcImxvZ3M6RmlsdGVyTG9nRXZlbnRzXCIsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgICAgICBSZXNvdXJjZToge1xuICAgICAgICAgICAgXCJGbjo6R2V0QXR0XCI6IFtNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiTG9nR3JvdXAqXCIpLCBcIkFyblwiXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcblxuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCIsIDEpO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6U3RhZ2VcIiwgMSk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpTdGFnZVwiLCB7XG4gICAgU3RhZ2VOYW1lOiBcInByb2RcIixcbiAgICBBdXRvRGVwbG95OiB0cnVlLFxuICB9KTtcblxuICBjb25zdCBhcGlnd3YyQ2F0cHVyZSA9IG5ldyBDYXB0dXJlKCk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLCAyKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsIHtcbiAgICBBcGlJZDoge1xuICAgICAgUmVmOiBhcGlnd3YyQ2F0cHVyZSxcbiAgICB9LFxuICAgIEF1dGhvcml6YXRpb25UeXBlOiBcIk5PTkVcIixcbiAgICBSb3V0ZUtleTogXCIkZGVmYXVsdFwiLFxuICAgIFRhcmdldDoge1xuICAgICAgXCJGbjo6Sm9pblwiOiBbXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFtcbiAgICAgICAgICBcImludGVncmF0aW9ucy9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWY6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoXCJXZWJTb2NrZXRBcGlUZXN0QXBpZGVmYXVsdFJvdXRlZGVmYXVsdFwiKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcIiwge1xuICAgIEFwaUlkOiB7XG4gICAgICBSZWY6IGFwaWd3djJDYXRwdXJlLFxuICAgIH0sXG4gICAgQXV0aG9yaXphdGlvblR5cGU6IFwiQVdTX0lBTVwiLFxuICAgIFJvdXRlS2V5OiBcIiRjb25uZWN0XCIsXG4gICAgVGFyZ2V0OiB7XG4gICAgICBcIkZuOjpKb2luXCI6IFtcbiAgICAgICAgXCJcIixcbiAgICAgICAgW1xuICAgICAgICAgIFwiaW50ZWdyYXRpb25zL1wiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlZjogTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cChcIldlYlNvY2tldEFwaVRlc3RBcGljb25uZWN0Um91dGVjb25uZWN0XCIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICBdLFxuICAgIH0sXG4gIH0pO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblwiLCB7XG4gICAgQXBpSWQ6IHtcbiAgICAgIFJlZjogYXBpZ3d2MkNhdHB1cmUuYXNTdHJpbmcoKSxcbiAgICB9LFxuICAgIENyZWRlbnRpYWxzQXJuOiB7XG4gICAgICBcIkZuOjpHZXRBdHRcIjogW01hdGNoLmFueVZhbHVlKCksIFwiQXJuXCJdLFxuICAgIH0sXG4gICAgSW50ZWdyYXRpb25NZXRob2Q6IFwiUE9TVFwiLFxuICAgIEludGVncmF0aW9uVHlwZTogXCJBV1NcIixcbiAgICBJbnRlZ3JhdGlvblVyaToge1xuICAgICAgXCJGbjo6Sm9pblwiOiBbXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFtcbiAgICAgICAgICBcImFybjpcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWY6IFwiQVdTOjpQYXJ0aXRpb25cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiOmFwaWdhdGV3YXk6XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBcIkFXUzo6UmVnaW9uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIjpzcXM6cGF0aC9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWY6IFwiQVdTOjpBY2NvdW50SWRcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiL1wiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiRm46OkdldEF0dFwiOiBbc3FzUXVldWVDYXB0dXJlLmFzU3RyaW5nKCksIFwiUXVldWVOYW1lXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgUGFzc3Rocm91Z2hCZWhhdmlvcjogXCJORVZFUlwiLFxuICAgIFJlcXVlc3RQYXJhbWV0ZXJzOiB7XG4gICAgICBcImludGVncmF0aW9uLnJlcXVlc3QuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiBcIidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXCIsXG4gICAgfSxcbiAgICBSZXF1ZXN0VGVtcGxhdGVzOiB7XG4gICAgICAkZGVmYXVsdDogREVGQVVMVF9ST1VURV9RVUVVRV9WVExfQ09ORklHLFxuICAgIH0sXG4gICAgVGVtcGxhdGVTZWxlY3Rpb25FeHByZXNzaW9uOiBcIlxcXFwkZGVmYXVsdFwiLFxuICB9KTtcbn0pO1xuXG50ZXN0KFwiY3JlYXRlcyBBUEkgR2F0ZXdheSByb2xlIGFuZCBncmFudHMgcGVybWlzc2lvbnMgYW5kIGFwaWdhdGV3YXkgc3RhZ2Ugc2V0dXBcIiwgKCkgPT4ge1xuICBjb25zdCBhcHAgPSBuZXcgY2RrLkFwcCgpO1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soYXBwLCBcIlRlc3RTdGFja1wiKTtcblxuICBuZXcgYXBpZ3d2Mi5XZWJTb2NrZXRBcGkoc3RhY2ssIGBXZWJTb2NrZXRBcGlgLCB7XG4gICAgYXBpTmFtZTogXCJUZXN0QXBpXCIsXG4gICAgY29ubmVjdFJvdXRlT3B0aW9uczoge1xuICAgICAgaW50ZWdyYXRpb246IG5ldyBXZWJTb2NrZXRNb2NrSW50ZWdyYXRpb24oXCJjb25uZWN0LW1vY2tcIiksXG4gICAgICBhdXRob3JpemVyOiBuZXcgV2ViU29ja2V0SWFtQXV0aG9yaXplcigpLFxuICAgIH0sXG4gICAgZGlzY29ubmVjdFJvdXRlT3B0aW9uczoge1xuICAgICAgaW50ZWdyYXRpb246IG5ldyBXZWJTb2NrZXRNb2NrSW50ZWdyYXRpb24oXCJkaXNjb25uZWN0LW1vY2tcIiksXG4gICAgfSxcbiAgICBkZWZhdWx0Um91dGVPcHRpb25zOiB7XG4gICAgICBpbnRlZ3JhdGlvbjogbmV3IFdlYlNvY2tldE1vY2tJbnRlZ3JhdGlvbihcImRlZmF1bHQtbW9ja1wiKSxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIiwgMSk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpTdGFnZVwiLCAwKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uXCIsIDMpO1xuICB0ZW1wbGF0ZS5hbGxSZXNvdXJjZXNQcm9wZXJ0aWVzKFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uXCIsIHtcbiAgICBJbnRlZ3JhdGlvblR5cGU6IFwiTU9DS1wiLFxuICB9KTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsIHtcbiAgICBBcGlJZDogTWF0Y2guYW55VmFsdWUoKSxcbiAgICBBdXRob3JpemF0aW9uVHlwZTogXCJBV1NfSUFNXCIsXG4gICAgUm91dGVLZXk6IFwiJGNvbm5lY3RcIixcbiAgICBUYXJnZXQ6IHtcbiAgICAgIFwiRm46OkpvaW5cIjogW1wiXCIsIFtcImludGVncmF0aW9ucy9cIiwgeyBSZWY6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoXCJXZWJTb2NrZXRBcGljb25uZWN0Um91dGVjb25uZWN0bW9ja1wiKSB9XV0sXG4gICAgfSxcbiAgfSk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsIHtcbiAgICBBcGlJZDogTWF0Y2guYW55VmFsdWUoKSxcbiAgICBSb3V0ZUtleTogXCIkZGlzY29ubmVjdFwiLFxuICAgIFRhcmdldDoge1xuICAgICAgXCJGbjo6Sm9pblwiOiBbXCJcIiwgW1wiaW50ZWdyYXRpb25zL1wiLCB7IFJlZjogTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cChcIldlYlNvY2tldEFwaWRpc2Nvbm5lY3RSb3V0ZWRpc2Nvbm5lY3Rtb2NrXCIpIH1dXSxcbiAgICB9LFxuICB9KTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcIiwge1xuICAgIEFwaUlkOiBNYXRjaC5hbnlWYWx1ZSgpLFxuICAgIFJvdXRlS2V5OiBcIiRkZWZhdWx0XCIsXG4gICAgVGFyZ2V0OiB7XG4gICAgICBcIkZuOjpKb2luXCI6IFtcIlwiLCBbXCJpbnRlZ3JhdGlvbnMvXCIsIHsgUmVmOiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiV2ViU29ja2V0QXBpZGVmYXVsdFJvdXRlZGVmYXVsdG1vY2tcIikgfV1dLFxuICAgIH0sXG4gIH0pO1xufSk7XG5cbnRlc3QoXCJidWlsZFdlYlNvY2tldEFwaVByb3BzIGNyZWF0ZXMgY29ycmVjdCBXZWJTb2NrZXQgQVBJIHByb3BzXCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKGFwcCwgXCJUZXN0U3RhY2tcIik7XG4gIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUoc3RhY2ssIFwiVGVzdFJvbGVcIiwge1xuICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tXCIpLFxuICB9KTtcbiAgY29uc3QgcXVldWUgPSBuZXcgc3FzLlF1ZXVlKHN0YWNrLCBcIlRlc3RRdWV1ZVwiKTtcblxuICBjb25zdCBwcm9wc1dpdGhEZWZhdWx0Um91dGUgPSBidWlsZFdlYlNvY2tldEFwaVByb3BzKHJvbGUsIHF1ZXVlLCB0cnVlKTtcbiAgZXhwZWN0KHByb3BzV2l0aERlZmF1bHRSb3V0ZS5kZWZhdWx0Um91dGVPcHRpb25zKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QocHJvcHNXaXRoRGVmYXVsdFJvdXRlLmRlZmF1bHRSb3V0ZU9wdGlvbnMpLnRvRXF1YWwoXG4gICAgYnVpbGRXZWJTb2NrZXRRdWV1ZVJvdXRlT3B0aW9ucyhyb2xlLCBxdWV1ZSwgXCIkZGVmYXVsdFwiLCB7ICRkZWZhdWx0OiBERUZBVUxUX1JPVVRFX1FVRVVFX1ZUTF9DT05GSUcgfSlcbiAgKTtcbiAgZXhwZWN0KHByb3BzV2l0aERlZmF1bHRSb3V0ZS5jb25uZWN0Um91dGVPcHRpb25zKS50b0VxdWFsKGNvbm5lY3RSb3V0ZU9wdGlvbnMpO1xuXG4gIGNvbnN0IHByb3BzV2l0aG91dERlZmF1bHRSb3V0ZSA9IGJ1aWxkV2ViU29ja2V0QXBpUHJvcHMocm9sZSwgcXVldWUsIGZhbHNlKTtcbiAgZXhwZWN0KHByb3BzV2l0aG91dERlZmF1bHRSb3V0ZS5kZWZhdWx0Um91dGVPcHRpb25zKS50b0JlVW5kZWZpbmVkKCk7XG5cbiAgZXhwZWN0KCgpID0+IGJ1aWxkV2ViU29ja2V0QXBpUHJvcHMocm9sZSwgdW5kZWZpbmVkLCB0cnVlKSkudG9UaHJvdyhcbiAgICBcInJvbGUgYW5kIHNxcyBtdXN0IGJlIHByb3ZpZGVkIHRvIGNyZWF0ZSBhIGRlZmF1bHQgcm91dGVcIlxuICApO1xuICBleHBlY3QoKCkgPT4gYnVpbGRXZWJTb2NrZXRBcGlQcm9wcyh1bmRlZmluZWQsIHF1ZXVlLCB0cnVlKSkudG9UaHJvdyhcbiAgICBcInJvbGUgYW5kIHNxcyBtdXN0IGJlIHByb3ZpZGVkIHRvIGNyZWF0ZSBhIGRlZmF1bHQgcm91dGVcIlxuICApO1xufSk7XG5cbnRlc3QoXCJidWlsZFdlYlNvY2tldEFwaVByb3BzIGNyZWF0ZXMgY29ycmVjdCBXZWJTb2NrZXQgQVBJIHByb3BzIHdpdGggZGlmZmVyZW50IHZhbHVlcyBvZiBkZWZhdWx0SWFtQXV0aG9yaXphdGlvbiBhbmQgY29ubmVjdFJvdXRlT3B0aW9uc1wiLCAoKSA9PiB7XG4gIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhhcHAsIFwiVGVzdFN0YWNrXCIpO1xuICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHN0YWNrLCBcIlRlc3RSb2xlXCIsIHtcbiAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImFwaWdhdGV3YXkuYW1hem9uYXdzLmNvbVwiKSxcbiAgfSk7XG4gIGNvbnN0IHF1ZXVlID0gbmV3IHNxcy5RdWV1ZShzdGFjaywgXCJUZXN0UXVldWVcIik7XG5cbiAgLy8gZG8gbm90IGNyZWF0ZSAkZGVmYXVsdCBhbmQgJGNvbm5lY3RcbiAgY29uc3QgYXBpUHJvcHNXaXRoTm9EZWZhdWx0QW5kQ29ubmVjdCA9IGJ1aWxkV2ViU29ja2V0QXBpUHJvcHMocm9sZSwgcXVldWUsIGZhbHNlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgZXhwZWN0KGFwaVByb3BzV2l0aE5vRGVmYXVsdEFuZENvbm5lY3QuZGVmYXVsdFJvdXRlT3B0aW9ucykudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QoYXBpUHJvcHNXaXRoTm9EZWZhdWx0QW5kQ29ubmVjdC5jb25uZWN0Um91dGVPcHRpb25zKS50b0JlVW5kZWZpbmVkKCk7XG5cbiAgLy8gY3JlYXRlICRkZWZhdWx0LCBkbyBub3QgY3JlYXRlICRjb25uZWN0XG4gIGNvbnN0IGFwaVByb3BzV2l0aE5vQ29ubmVjdCA9IGJ1aWxkV2ViU29ja2V0QXBpUHJvcHMocm9sZSwgcXVldWUsIHRydWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICBleHBlY3QoYXBpUHJvcHNXaXRoTm9Db25uZWN0LmRlZmF1bHRSb3V0ZU9wdGlvbnMpLnRvQmVEZWZpbmVkKCk7XG4gIGV4cGVjdChhcGlQcm9wc1dpdGhOb0Nvbm5lY3QuY29ubmVjdFJvdXRlT3B0aW9ucykudG9CZVVuZGVmaW5lZCgpO1xufSk7XG5cbnRlc3QoXCJidWlsZFdlYlNvY2tldFF1ZXVlQXBpIHdpdGggZGVmYXVsdElhbUF1dGhvcml6YXRpb24gaXMgbm90IHNldFwiLCAoKSA9PiB7XG4gIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhhcHAsIFwiVGVzdFN0YWNrXCIpO1xuICBjb25zdCBxdWV1ZSA9IG5ldyBzcXMuUXVldWUoc3RhY2ssIFwiVGVzdFF1ZXVlXCIpO1xuXG4gIC8vIG5vdCBzdXBwbHlpbmcgYXV0aG9yaXplciB3aXRoICRjb25uZWN0IHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgdGhlIHN5bnRoZXNpemVkIHN0YWNrIHdpdGggYWRkXG4gIC8vIGFuIGF1dGhvcml6ZXIgYmVjYXVzZSBkZWZhdWx0SWFtQXV0aG9yaXphdGlvbiBpcyBub3Qgc2V0IHRvIGZhbHNlLlxuICBidWlsZFdlYlNvY2tldFF1ZXVlQXBpKHN0YWNrLCBcIlRlc3RBcGlcIiwge1xuICAgIHF1ZXVlLFxuICAgIGNyZWF0ZURlZmF1bHRSb3V0ZTogdHJ1ZSxcbiAgICB3ZWJTb2NrZXRBcGlQcm9wczoge1xuICAgICAgY29ubmVjdFJvdXRlT3B0aW9uczoge1xuICAgICAgICBpbnRlZ3JhdGlvbjogbmV3IFdlYlNvY2tldE1vY2tJbnRlZ3JhdGlvbihcInVzZXItY3JlYXRlZC1tb2NrXCIpLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiLCB7XG4gICAgQXBpSWQ6IE1hdGNoLmFueVZhbHVlKCksXG4gICAgQXV0aG9yaXphdGlvblR5cGU6IFwiQVdTX0lBTVwiLFxuICAgIFJvdXRlS2V5OiBcIiRjb25uZWN0XCIsXG4gICAgVGFyZ2V0OiB7XG4gICAgICBcIkZuOjpKb2luXCI6IFtcbiAgICAgICAgXCJcIixcbiAgICAgICAgW1wiaW50ZWdyYXRpb25zL1wiLCB7IFJlZjogTWF0Y2guc3RyaW5nTGlrZVJlZ2V4cChcIldlYlNvY2tldEFwaVRlc3RBcGljb25uZWN0Um91dGV1c2VyY3JlYXRlZG1vY2tcIikgfV0sXG4gICAgICBdLFxuICAgIH0sXG4gIH0pO1xufSk7XG5cbnRlc3QoXCJidWlsZFdlYlNvY2tldFF1ZXVlQXBpIHdpdGggZGVmYXVsdElhbUF1dGhvcml6YXRpb24gaXMgc2V0IHRvIGZhbHNlIGFuZCBjb25uZWN0Um91dGVPcHRpb25zIGRvZXMgbm90IHNldCBhdXRob3JpemVyXCIsICgpID0+IHtcbiAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKGFwcCwgXCJUZXN0U3RhY2tcIik7XG4gIGNvbnN0IHF1ZXVlID0gbmV3IHNxcy5RdWV1ZShzdGFjaywgXCJUZXN0UXVldWVcIik7XG4gIGNvbnN0IHByaW50V2FybmluZ1NweSA9IGplc3Quc3B5T24odXRpbHMsIFwicHJpbnRXYXJuaW5nXCIpO1xuXG4gIC8vIG5vdCBzdXBwbHlpbmcgYXV0aG9yaXplciB3aXRoICRjb25uZWN0IHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgdGhlIHN5bnRoZXNpemVkIHN0YWNrIHdpdGggYWRkXG4gIC8vIGFuIGF1dGhvcml6ZXIgYmVjYXVzZSBkZWZhdWx0SWFtQXV0aG9yaXphdGlvbiBpcyBub3Qgc2V0IHRvIGZhbHNlLlxuICBidWlsZFdlYlNvY2tldFF1ZXVlQXBpKHN0YWNrLCBcIlRlc3RBcGlcIiwge1xuICAgIHF1ZXVlLFxuICAgIGNyZWF0ZURlZmF1bHRSb3V0ZTogZmFsc2UsXG4gICAgd2ViU29ja2V0QXBpUHJvcHM6IHtcbiAgICAgIGNvbm5lY3RSb3V0ZU9wdGlvbnM6IHtcbiAgICAgICAgaW50ZWdyYXRpb246IG5ldyBXZWJTb2NrZXRNb2NrSW50ZWdyYXRpb24oXCJ1c2VyLWNyZWF0ZWQtbW9ja1wiKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkZWZhdWx0SWFtQXV0aG9yaXphdGlvbjogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsIHtcbiAgICBBcGlJZDogTWF0Y2guYW55VmFsdWUoKSxcbiAgICBBdXRob3JpemF0aW9uVHlwZTogXCJOT05FXCIsXG4gICAgUm91dGVLZXk6IFwiJGNvbm5lY3RcIixcbiAgICBUYXJnZXQ6IHtcbiAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICBcIlwiLFxuICAgICAgICBbXCJpbnRlZ3JhdGlvbnMvXCIsIHsgUmVmOiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKFwiV2ViU29ja2V0QXBpVGVzdEFwaWNvbm5lY3RSb3V0ZXVzZXJjcmVhdGVkbW9ja1wiKSB9XSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSk7XG5cbiAgZXhwZWN0KHByaW50V2FybmluZ1NweSkuIHRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgIFwiVGhpcyBjb25zdHJ1Y3Qgd2lsbCBjcmVhdGUgYSBXZWJTb2NrZXQgd2l0aCBOTyBBdXRob3JpemVyIChkZWZhdWx0SWFtQXV0aG9yaXphdGlvbiBpcyBzZXQgdG8gZmFsc2UpLlwiXG4gICk7XG4gIHByaW50V2FybmluZ1NweS5tb2NrUmVzdG9yZSgpO1xufSk7XG5cbnRlc3QoXCJidWlsZFdlYlNvY2tldFF1ZXVlQXBpIHdoZW4gcGFzc2luZyBhIGN1c3RvbSByb3V0ZSBuYW1lLCBpdCBzaG91bGQgYWRkIGEgY3VzdG9tIHJvdXRlIGludGVncmF0aW9uIHRvIHRoZSB3ZWJzb2NrZXRcIiwgKCkgPT4ge1xuICBjb25zdCBhcHAgPSBuZXcgY2RrLkFwcCgpO1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soYXBwLCBcIlRlc3RTdGFja1wiKTtcbiAgY29uc3QgcXVldWUgPSBuZXcgc3FzLlF1ZXVlKHN0YWNrLCBcIlRlc3RRdWV1ZVwiKTtcblxuICBjb25zdCBjdXN0b21Sb3V0ZU5hbWUgPSBcImZha2Vyb3V0ZW5hbWVcIjtcblxuICBidWlsZFdlYlNvY2tldFF1ZXVlQXBpKHN0YWNrLCBcIlRlc3RBcGlcIiwge1xuICAgIHF1ZXVlLFxuICAgIGNyZWF0ZURlZmF1bHRSb3V0ZTogZmFsc2UsXG4gICAgZGVmYXVsdElhbUF1dGhvcml6YXRpb246IGZhbHNlLFxuICAgIGN1c3RvbVJvdXRlTmFtZSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIiwgMSk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblwiLCB7XG4gICAgQXBpSWQ6IHtcbiAgICAgIFJlZjogTWF0Y2guYW55VmFsdWUoKSxcbiAgICB9LFxuICAgIENyZWRlbnRpYWxzQXJuOiB7XG4gICAgICBcIkZuOjpHZXRBdHRcIjogW01hdGNoLmFueVZhbHVlKCksIFwiQXJuXCJdLFxuICAgIH0sXG4gICAgSW50ZWdyYXRpb25NZXRob2Q6IFwiUE9TVFwiLFxuICAgIEludGVncmF0aW9uVHlwZTogXCJBV1NcIixcbiAgICBJbnRlZ3JhdGlvblVyaToge1xuICAgICAgXCJGbjo6Sm9pblwiOiBbXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFtcbiAgICAgICAgICBcImFybjpcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWY6IFwiQVdTOjpQYXJ0aXRpb25cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiOmFwaWdhdGV3YXk6XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBcIkFXUzo6UmVnaW9uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIjpzcXM6cGF0aC9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWY6IFwiQVdTOjpBY2NvdW50SWRcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiL1wiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiRm46OkdldEF0dFwiOiBbTWF0Y2guYW55VmFsdWUoKSwgXCJRdWV1ZU5hbWVcIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBQYXNzdGhyb3VnaEJlaGF2aW9yOiBcIk5FVkVSXCIsXG4gICAgUmVxdWVzdFBhcmFtZXRlcnM6IHtcbiAgICAgIFwiaW50ZWdyYXRpb24ucmVxdWVzdC5oZWFkZXIuQ29udGVudC1UeXBlXCI6IFwiJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcIixcbiAgICB9LFxuICAgIFJlcXVlc3RUZW1wbGF0ZXM6IHtcbiAgICAgIFtjdXN0b21Sb3V0ZU5hbWVdOiBERUZBVUxUX1JPVVRFX1FVRVVFX1ZUTF9DT05GSUcsXG4gICAgfSxcbiAgICBUZW1wbGF0ZVNlbGVjdGlvbkV4cHJlc3Npb246IGN1c3RvbVJvdXRlTmFtZSxcbiAgfSk7XG5cbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsIDEpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcIiwge1xuICAgIEFwaUlkOiB7XG4gICAgICBSZWY6IE1hdGNoLmFueVZhbHVlKCksXG4gICAgfSxcbiAgICBSb3V0ZUtleTogY3VzdG9tUm91dGVOYW1lLFxuICAgIFRhcmdldDoge1xuICAgICAgXCJGbjo6Sm9pblwiOiBbXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFtcbiAgICAgICAgICBcImludGVncmF0aW9ucy9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWY6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoXCJXZWJTb2NrZXRBcGlUZXN0QXBpZmFrZXJvdXRlbmFtZVJvdXRlZmFrZXJvdXRlbmFtZVwiKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcbn0pO1xuXG50ZXN0KFwiYnVpbGRXZWJTb2NrZXRRdWV1ZUFwaSB3aGVuIHBhc3NpbmcgYSBjdXN0b20gcm91dGUgbmFtZSwgd2l0aCByZXF1ZXN0VGVtcGxhdGUsIHNob3VsZCBtYXAgdGhlIHJlcXVlc3QgdGVtcGxhdGUgdG8gdGhlIGN1c3RvbSByb3V0ZVwiLCAoKSA9PiB7XG4gIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayhhcHAsIFwiVGVzdFN0YWNrXCIpO1xuICBjb25zdCBxdWV1ZSA9IG5ldyBzcXMuUXVldWUoc3RhY2ssIFwiVGVzdFF1ZXVlXCIpO1xuXG4gIGNvbnN0IGN1c3RvbVJvdXRlTmFtZSA9IFwiZmFrZXJvdXRlbmFtZVwiO1xuXG4gIGJ1aWxkV2ViU29ja2V0UXVldWVBcGkoc3RhY2ssIFwiVGVzdEFwaVwiLCB7XG4gICAgcXVldWUsXG4gICAgY3JlYXRlRGVmYXVsdFJvdXRlOiBmYWxzZSxcbiAgICBkZWZhdWx0SWFtQXV0aG9yaXphdGlvbjogZmFsc2UsXG4gICAgY3VzdG9tUm91dGVOYW1lLFxuICAgIGRlZmF1bHRSb3V0ZVJlcXVlc3RUZW1wbGF0ZToge1xuICAgICAgW2N1c3RvbVJvdXRlTmFtZV06IFwiYSZmYWtlJnZ0bFwiLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpBcGlHYXRld2F5VjI6OkludGVncmF0aW9uXCIsIDEpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIiwge1xuICAgIEFwaUlkOiB7XG4gICAgICBSZWY6IE1hdGNoLmFueVZhbHVlKCksXG4gICAgfSxcbiAgICBDcmVkZW50aWFsc0Fybjoge1xuICAgICAgXCJGbjo6R2V0QXR0XCI6IFtNYXRjaC5hbnlWYWx1ZSgpLCBcIkFyblwiXSxcbiAgICB9LFxuICAgIEludGVncmF0aW9uTWV0aG9kOiBcIlBPU1RcIixcbiAgICBJbnRlZ3JhdGlvblR5cGU6IFwiQVdTXCIsXG4gICAgSW50ZWdyYXRpb25Vcmk6IHtcbiAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICBcIlwiLFxuICAgICAgICBbXG4gICAgICAgICAgXCJhcm46XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBcIkFXUzo6UGFydGl0aW9uXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIjphcGlnYXRld2F5OlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlZjogXCJBV1M6OlJlZ2lvblwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCI6c3FzOnBhdGgvXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVmOiBcIkFXUzo6QWNjb3VudElkXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcIkZuOjpHZXRBdHRcIjogW01hdGNoLmFueVZhbHVlKCksIFwiUXVldWVOYW1lXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgUGFzc3Rocm91Z2hCZWhhdmlvcjogXCJORVZFUlwiLFxuICAgIFJlcXVlc3RQYXJhbWV0ZXJzOiB7XG4gICAgICBcImludGVncmF0aW9uLnJlcXVlc3QuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiBcIidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXCIsXG4gICAgfSxcbiAgICBSZXF1ZXN0VGVtcGxhdGVzOiB7XG4gICAgICBbY3VzdG9tUm91dGVOYW1lXTogXCJhJmZha2UmdnRsXCIsXG4gICAgfSxcbiAgICBUZW1wbGF0ZVNlbGVjdGlvbkV4cHJlc3Npb246IGN1c3RvbVJvdXRlTmFtZSxcbiAgfSk7XG5cbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXCIsIDEpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcIiwge1xuICAgIEFwaUlkOiB7XG4gICAgICBSZWY6IE1hdGNoLmFueVZhbHVlKCksXG4gICAgfSxcbiAgICBSb3V0ZUtleTogY3VzdG9tUm91dGVOYW1lLFxuICAgIFRhcmdldDoge1xuICAgICAgXCJGbjo6Sm9pblwiOiBbXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFtcbiAgICAgICAgICBcImludGVncmF0aW9ucy9cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBSZWY6IE1hdGNoLnN0cmluZ0xpa2VSZWdleHAoXCJXZWJTb2NrZXRBcGlUZXN0QXBpZmFrZXJvdXRlbmFtZVJvdXRlZmFrZXJvdXRlbmFtZVwiKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcbn0pO1xuIl19