projen 0.53.9 → 0.53.12

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 (158) hide show
  1. package/.jsii +180 -111
  2. package/changelog.md +6 -1
  3. package/docs/api/API.md +20 -12
  4. package/lib/awscdk/auto-discover.js +4 -4
  5. package/lib/awscdk/awscdk-app-java.js +3 -3
  6. package/lib/awscdk/awscdk-app-py.js +11 -9
  7. package/lib/awscdk/awscdk-app-ts.js +4 -4
  8. package/lib/awscdk/awscdk-construct.js +2 -2
  9. package/lib/awscdk/awscdk-deps-java.js +1 -1
  10. package/lib/awscdk/awscdk-deps-js.js +1 -1
  11. package/lib/awscdk/awscdk-deps.js +1 -1
  12. package/lib/awscdk/cdk-config.js +1 -1
  13. package/lib/awscdk/cdk-tasks.js +1 -1
  14. package/lib/awscdk/integration-test.js +1 -1
  15. package/lib/awscdk/lambda-extension.js +1 -1
  16. package/lib/awscdk/lambda-function.js +2 -2
  17. package/lib/build/build-workflow.js +1 -1
  18. package/lib/cdk/auto-discover-base.js +2 -2
  19. package/lib/cdk/construct-lib.js +1 -1
  20. package/lib/cdk/integration-test-base.js +1 -1
  21. package/lib/cdk/jsii-docgen.js +1 -1
  22. package/lib/cdk/jsii-project.js +1 -1
  23. package/lib/cdk8s/auto-discover.js +2 -2
  24. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  25. package/lib/cdk8s/cdk8s-construct.js +1 -1
  26. package/lib/cdk8s/integration-test.js +1 -1
  27. package/lib/cdktf/cdktf-construct.js +1 -1
  28. package/lib/component.js +1 -1
  29. package/lib/dependencies.js +1 -1
  30. package/lib/dev-env.js +1 -1
  31. package/lib/docker-compose.js +2 -2
  32. package/lib/file.js +1 -1
  33. package/lib/gitattributes.js +1 -1
  34. package/lib/github/auto-approve.js +1 -1
  35. package/lib/github/auto-merge.js +1 -1
  36. package/lib/github/dependabot.js +1 -1
  37. package/lib/github/github-project.js +1 -1
  38. package/lib/github/github.js +1 -1
  39. package/lib/github/mergify.js +1 -1
  40. package/lib/github/pr-template.js +1 -1
  41. package/lib/github/pull-request-lint.js +1 -1
  42. package/lib/github/stale.js +1 -1
  43. package/lib/github/task-workflow.js +1 -1
  44. package/lib/github/workflows.js +1 -1
  45. package/lib/gitlab/configuration.js +1 -1
  46. package/lib/gitlab/gitlab-configuration.js +1 -1
  47. package/lib/gitlab/nested-configuration.js +1 -1
  48. package/lib/gitpod.js +1 -1
  49. package/lib/ignore-file.js +1 -1
  50. package/lib/ini.js +1 -1
  51. package/lib/java/java-project.js +1 -1
  52. package/lib/java/junit.js +1 -1
  53. package/lib/java/maven-compile.js +1 -1
  54. package/lib/java/maven-packaging.js +1 -1
  55. package/lib/java/maven-sample.js +1 -1
  56. package/lib/java/pom.js +1 -1
  57. package/lib/java/projenrc.js +1 -1
  58. package/lib/javascript/bundler.js +1 -1
  59. package/lib/javascript/eslint.js +1 -1
  60. package/lib/javascript/jest.js +1 -1
  61. package/lib/javascript/node-package.js +1 -1
  62. package/lib/javascript/node-project.js +1 -1
  63. package/lib/javascript/npm-config.js +1 -1
  64. package/lib/javascript/prettier.js +1 -1
  65. package/lib/javascript/projenrc.js +1 -1
  66. package/lib/javascript/typescript-config.js +1 -1
  67. package/lib/javascript/upgrade-dependencies.d.ts +5 -2
  68. package/lib/javascript/upgrade-dependencies.js +51 -41
  69. package/lib/json.js +1 -1
  70. package/lib/license.js +1 -1
  71. package/lib/logger.js +1 -1
  72. package/lib/makefile.js +1 -1
  73. package/lib/object-file.js +1 -1
  74. package/lib/project-build.js +1 -1
  75. package/lib/project.js +1 -1
  76. package/lib/projects.js +1 -1
  77. package/lib/projenrc-json.js +1 -1
  78. package/lib/python/pip.js +1 -1
  79. package/lib/python/poetry.js +2 -2
  80. package/lib/python/projenrc.js +1 -1
  81. package/lib/python/pytest-sample.js +1 -1
  82. package/lib/python/pytest.js +1 -1
  83. package/lib/python/python-project.js +1 -1
  84. package/lib/python/python-sample.js +1 -1
  85. package/lib/python/requirements-file.js +1 -1
  86. package/lib/python/setuppy.js +1 -1
  87. package/lib/python/setuptools.js +1 -1
  88. package/lib/python/venv.js +1 -1
  89. package/lib/readme.js +1 -1
  90. package/lib/release/publisher.js +1 -1
  91. package/lib/release/release-trigger.js +1 -1
  92. package/lib/release/release.d.ts +14 -0
  93. package/lib/release/release.js +26 -2
  94. package/lib/sample-file.js +2 -2
  95. package/lib/semver.js +1 -1
  96. package/lib/source-code.d.ts +6 -0
  97. package/lib/source-code.js +6 -4
  98. package/lib/task-runtime.js +1 -1
  99. package/lib/task.d.ts +4 -0
  100. package/lib/task.js +12 -4
  101. package/lib/tasks.js +1 -1
  102. package/lib/testing.js +1 -1
  103. package/lib/textfile.js +1 -1
  104. package/lib/toml.js +1 -1
  105. package/lib/typescript/projenrc.js +1 -1
  106. package/lib/typescript/typescript-typedoc.js +1 -1
  107. package/lib/typescript/typescript.js +3 -3
  108. package/lib/version.js +1 -1
  109. package/lib/vscode/devcontainer.js +1 -1
  110. package/lib/vscode/launch-config.js +1 -1
  111. package/lib/vscode/vscode.js +1 -1
  112. package/lib/web/next.js +3 -3
  113. package/lib/web/postcss.js +1 -1
  114. package/lib/web/react.js +4 -4
  115. package/lib/web/tailwind.js +1 -1
  116. package/lib/xmlfile.js +1 -1
  117. package/lib/yaml.js +1 -1
  118. package/node_modules/yaml/browser/dist/compose/compose-doc.js +1 -1
  119. package/node_modules/yaml/browser/dist/compose/compose-node.js +13 -4
  120. package/node_modules/yaml/browser/dist/compose/composer.js +5 -7
  121. package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +9 -2
  122. package/node_modules/yaml/browser/dist/compose/resolve-props.js +2 -0
  123. package/node_modules/yaml/browser/dist/doc/Document.js +9 -2
  124. package/node_modules/yaml/browser/dist/doc/directives.js +7 -4
  125. package/node_modules/yaml/browser/dist/index.js +1 -2
  126. package/node_modules/yaml/browser/dist/parse/lexer.js +16 -7
  127. package/node_modules/yaml/browser/dist/parse/parser.js +64 -30
  128. package/node_modules/yaml/browser/dist/schema/common/null.js +3 -1
  129. package/node_modules/yaml/browser/dist/stringify/stringifyDocument.js +26 -8
  130. package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +1 -1
  131. package/node_modules/yaml/browser/dist/visit.js +150 -62
  132. package/node_modules/yaml/dist/compose/compose-doc.js +1 -1
  133. package/node_modules/yaml/dist/compose/compose-node.js +13 -4
  134. package/node_modules/yaml/dist/compose/composer.d.ts +1 -1
  135. package/node_modules/yaml/dist/compose/composer.js +7 -9
  136. package/node_modules/yaml/dist/compose/resolve-block-scalar.js +9 -2
  137. package/node_modules/yaml/dist/compose/resolve-props.js +2 -0
  138. package/node_modules/yaml/dist/doc/Document.d.ts +1 -1
  139. package/node_modules/yaml/dist/doc/Document.js +16 -9
  140. package/node_modules/yaml/dist/doc/directives.d.ts +3 -1
  141. package/node_modules/yaml/dist/doc/directives.js +7 -4
  142. package/node_modules/yaml/dist/index.d.ts +2 -2
  143. package/node_modules/yaml/dist/index.js +1 -2
  144. package/node_modules/yaml/dist/options.d.ts +0 -8
  145. package/node_modules/yaml/dist/parse/lexer.js +16 -7
  146. package/node_modules/yaml/dist/parse/parser.js +64 -30
  147. package/node_modules/yaml/dist/schema/common/null.js +3 -1
  148. package/node_modules/yaml/dist/stringify/stringifyDocument.js +26 -8
  149. package/node_modules/yaml/dist/stringify/stringifyPair.js +1 -1
  150. package/node_modules/yaml/dist/test-events.js +8 -9
  151. package/node_modules/yaml/dist/visit.d.ts +49 -10
  152. package/node_modules/yaml/dist/visit.js +149 -60
  153. package/node_modules/yaml/package.json +3 -3
  154. package/package.json +2 -2
  155. package/releasetag.txt +1 -1
  156. package/version.txt +1 -1
  157. package/node_modules/yaml/browser/dist/options.js +0 -18
  158. package/node_modules/yaml/dist/options.js +0 -20
@@ -489,5 +489,5 @@ class NodeProject extends github_1.GitHubProject {
489
489
  }
490
490
  exports.NodeProject = NodeProject;
491
491
  _a = JSII_RTTI_SYMBOL_1;
492
- NodeProject[_a] = { fqn: "projen.javascript.NodeProject", version: "0.53.9" };
492
+ NodeProject[_a] = { fqn: "projen.javascript.NodeProject", version: "0.53.12" };
493
493
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvbm9kZS1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQTRCO0FBQzVCLG9DQUF5QztBQUN6QyxzQ0FBa0Q7QUFDbEQsc0NBTW1CO0FBQ25CLG1EQUFrRTtBQUVsRSxnREFBNEM7QUFDNUMsOENBS3VCO0FBQ3ZCLHdDQUFxQztBQUNyQyx3Q0FBdUU7QUFFdkUsa0NBQW9DO0FBQ3BDLHdDQUFxQztBQUNyQyx1Q0FBb0Q7QUFDcEQsaUNBQTJDO0FBQzNDLGlEQUl3QjtBQUN4Qix5Q0FBdUQ7QUFDdkQsaUVBQXFFO0FBRXJFLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQztBQTRTL0I7O0dBRUc7QUFDSCxJQUFZLFdBVVg7QUFWRCxXQUFZLFdBQVc7SUFDckI7O09BRUc7SUFDSCw2REFBWSxDQUFBO0lBRVo7O09BRUc7SUFDSCwrQ0FBSyxDQUFBO0FBQ1AsQ0FBQyxFQVZXLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBVXRCO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFhO0lBaUg1QyxZQUFZLE9BQTJCOztRQUNyQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksMEJBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLHNCQUFzQixTQUFHLE9BQU8sQ0FBQyxzQkFBc0IsbUNBQUksRUFBRSxDQUFDO1FBQ25FLElBQUksQ0FBQyxtQkFBbUIsU0FDdEIsT0FBTyxDQUFDLG1CQUFtQixtQ0FBSSx1Q0FBMkIsQ0FBQztRQUM3RCxJQUFJLENBQUMsa0JBQWtCLFNBQUcsT0FBTyxDQUFDLGtCQUFrQixtQ0FBSSxNQUFNLENBQUM7UUFDL0QsSUFBSSxDQUFDLDRCQUE0QixHQUFHLFdBQUksQ0FBQyxJQUFJ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RUFDaEIsTUFBTSxFQUNOLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxFQUVaLG1FQUFtRSxFQUNuRSxTQUFTLEVBRVQsa0RBQWtELEVBQ2xELFVBQVUsRUFDVixRQUFRLEVBRVIscUJBQXFCLEVBQ3JCLGFBQWEsRUFFYiwrREFBK0QsRUFDL0QsZUFBZSxFQUVmLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YsZ0JBQWdCLEVBRWhCLG9CQUFvQixFQUNwQixlQUFlLEVBRWYseUJBQXlCLEVBQ3pCLGNBQWMsRUFFZCx3QkFBd0IsRUFDeEIsT0FBTyxFQUVQLHVCQUF1QixFQUN2QixpQkFBaUIsRUFFakIsZ0RBQWdELEVBQ2hELFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFDLElBQVU7UUFDOUIsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGtCQUFrQjs7UUFDM0IsYUFBTyxJQUFJLENBQUMsYUFBYSwwQ0FBRSxXQUFXLENBQUMsQ0FBQyxFQUFFO0lBQzVDLENBQUM7O0FBaHFCSCxrQ0FpcUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBCdWlsZFdvcmtmbG93IH0gZnJvbSBcIi4uL2J1aWxkXCI7XG5pbXBvcnQgeyBQUk9KRU5fRElSLCBQUk9KRU5fUkMgfSBmcm9tIFwiLi4vY29tbW9uXCI7XG5pbXBvcnQge1xuICBBdXRvTWVyZ2UsXG4gIERlcGVuZGFib3RPcHRpb25zLFxuICBHaXRIdWJQcm9qZWN0LFxuICBHaXRIdWJQcm9qZWN0T3B0aW9ucyxcbiAgR2l0SWRlbnRpdHksXG59IGZyb20gXCIuLi9naXRodWJcIjtcbmltcG9ydCB7IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUiB9IGZyb20gXCIuLi9naXRodWIvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBKb2JTdGVwLCBUcmlnZ2VycyB9IGZyb20gXCIuLi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBJZ25vcmVGaWxlIH0gZnJvbSBcIi4uL2lnbm9yZS1maWxlXCI7XG5pbXBvcnQge1xuICBQcmV0dGllcixcbiAgUHJldHRpZXJPcHRpb25zLFxuICBVcGdyYWRlRGVwZW5kZW5jaWVzLFxuICBVcGdyYWRlRGVwZW5kZW5jaWVzT3B0aW9ucyxcbn0gZnJvbSBcIi4uL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IExpY2Vuc2UgfSBmcm9tIFwiLi4vbGljZW5zZVwiO1xuaW1wb3J0IHsgUHVibGlzaGVyLCBSZWxlYXNlLCBSZWxlYXNlUHJvamVjdE9wdGlvbnMgfSBmcm9tIFwiLi4vcmVsZWFzZVwiO1xuaW1wb3J0IHsgVGFzayB9IGZyb20gXCIuLi90YXNrXCI7XG5pbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tIFwiLi4vdXRpbFwiO1xuaW1wb3J0IHsgVmVyc2lvbiB9IGZyb20gXCIuLi92ZXJzaW9uXCI7XG5pbXBvcnQgeyBCdW5kbGVyLCBCdW5kbGVyT3B0aW9ucyB9IGZyb20gXCIuL2J1bmRsZXJcIjtcbmltcG9ydCB7IEplc3QsIEplc3RPcHRpb25zIH0gZnJvbSBcIi4vamVzdFwiO1xuaW1wb3J0IHtcbiAgTm9kZVBhY2thZ2UsXG4gIE5vZGVQYWNrYWdlTWFuYWdlcixcbiAgTm9kZVBhY2thZ2VPcHRpb25zLFxufSBmcm9tIFwiLi9ub2RlLXBhY2thZ2VcIjtcbmltcG9ydCB7IFByb2plbnJjLCBQcm9qZW5yY09wdGlvbnMgfSBmcm9tIFwiLi9wcm9qZW5yY1wiO1xuaW1wb3J0IHsgVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlIH0gZnJvbSBcIi4vdXBncmFkZS1kZXBlbmRlbmNpZXNcIjtcblxuY29uc3QgUFJPSkVOX1NDUklQVCA9IFwicHJvamVuXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZVByb2plY3RPcHRpb25zXG4gIGV4dGVuZHMgR2l0SHViUHJvamVjdE9wdGlvbnMsXG4gICAgTm9kZVBhY2thZ2VPcHRpb25zLFxuICAgIFJlbGVhc2VQcm9qZWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBMaWNlbnNlIGNvcHlyaWdodCBvd25lci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgYXV0aG9yTmFtZSBvciBcIlwiIGlmIGBhdXRob3JOYW1lYCBpcyB1bmRlZmluZWQuXG4gICAqL1xuICByZWFkb25seSBjb3B5cmlnaHRPd25lcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvcHlyaWdodCB5ZWFycyB0byBwdXQgaW4gdGhlIExJQ0VOU0UgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBjdXJyZW50IHllYXJcbiAgICovXG4gIHJlYWRvbmx5IGNvcHlyaWdodFBlcmlvZD86IHN0cmluZztcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiBwcm9qZW4gdG8gaW5zdGFsbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0cyB0byB0aGUgbGF0ZXN0IHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgb2YgXCJwcm9qZW5cIiBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIGEgZGV2RGVwZW5kZW5jeS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVuRGV2RGVwZW5kZW5jeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIEdpdEh1YiB3b3JrZmxvdyBmb3IgYnVpbGRpbmcgUFJzLlxuICAgKiBAZGVmYXVsdCAtIHRydWUgaWYgbm90IGEgc3VicHJvamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRXb3JrZmxvdz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlIGZpbGVzIG1vZGlmaWVkIGR1cmluZyBidWlsZHMgdG8gcHVsbC1yZXF1ZXN0IGJyYW5jaGVzLiBUaGlzIG1lYW5zXG4gICAqIHRoYXQgYW55IGZpbGVzIHN5bnRoZXNpemVkIGJ5IHByb2plbiBvciBlLmcuIHRlc3Qgc25hcHNob3RzIHdpbGwgYWx3YXlzIGJlIHVwLXRvLWRhdGVcbiAgICogYmVmb3JlIGEgUFIgaXMgbWVyZ2VkLlxuICAgKlxuICAgKiBJbXBsaWVzIHRoYXQgUFIgYnVpbGRzIGRvIG5vdCBoYXZlIGFudGktdGFtcGVyIGNoZWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbXV0YWJsZUJ1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVmaW5lIGEgR2l0SHViIHdvcmtmbG93IHN0ZXAgZm9yIHNlbmRpbmcgY29kZSBjb3ZlcmFnZSBtZXRyaWNzIHRvIGh0dHBzOi8vY29kZWNvdi5pby9cbiAgICogVXNlcyBjb2RlY292L2NvZGVjb3YtYWN0aW9uQHYxXG4gICAqIEEgc2VjcmV0IGlzIHJlcXVpcmVkIGZvciBwcml2YXRlIHJlcG9zLiBDb25maWd1cmVkIHdpdGggQGNvZGVDb3ZUb2tlblNlY3JldFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUNvdj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgc2VjcmV0IG5hbWUgZm9yIGEgc3BlY2lmaWVkIGh0dHBzOi8vY29kZWNvdi5pby8gdG9rZW5cbiAgICogQSBzZWNyZXQgaXMgcmVxdWlyZWQgdG8gc2VuZCBjb3ZlcmFnZSBmb3IgcHJpdmF0ZSByZXBvc2l0b3JpZXNcbiAgICogQGRlZmF1bHQgLSBpZiB0aGlzIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCBvbmx5IHB1YmxpYyByZXBvc2l0b3JpZXMgYXJlIHN1cHBvcnRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUNvdlRva2VuU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBERVBSRUNBVEVEOiByZW5hbWVkIHRvIGByZWxlYXNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlIGlmIG5vdCBhIHN1YnByb2plY3RcbiAgICogQGRlcHJlY2F0ZWQgc2VlIGByZWxlYXNlYC5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGVhc2VXb3JrZmxvdz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZCByZWxlYXNlIG1hbmFnZW1lbnQgdG8gdGhpcyBwcm9qZWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWUgKGZhbHNlIGZvciBzdWJwcm9qZWN0cylcbiAgICovXG4gIHJlYWRvbmx5IHJlbGVhc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbWFpbiByZWxlYXNlIGJyYW5jaC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJtYWluXCJcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRSZWxlYXNlQnJhbmNoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtmbG93IHN0ZXBzIHRvIHVzZSBpbiBvcmRlciB0byBib290c3RyYXAgdGhpcyByZXBvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcInlhcm4gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSAmJiB5YXJuIHByb2plblwiXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd0Jvb3RzdHJhcFN0ZXBzPzogSm9iU3RlcFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2l0IGlkZW50aXR5IHRvIHVzZSBpbiB3b3JrZmxvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gR2l0SHViIEFjdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93R2l0SWRlbnRpdHk/OiBHaXRJZGVudGl0eTtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSByZWxlYXNlIHRvIG5wbSB3aGVuIG5ldyB2ZXJzaW9ucyBhcmUgaW50cm9kdWNlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlbGVhc2VUb05wbT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBub2RlIHZlcnNpb24gdG8gdXNlIGluIEdpdEh1YiB3b3JrZmxvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc2FtZSBhcyBgbWluTm9kZVZlcnNpb25gXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd05vZGVWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgZGVwZW5kYWJvdCB0byBoYW5kbGUgZGVwZW5kZW5jeSB1cGdyYWRlcy5cbiAgICogQ2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgZGVwc1VwZ3JhZGVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kYWJvdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGRlcGVuZGFib3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRhYm90T3B0aW9ucz86IERlcGVuZGFib3RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBVc2UgZ2l0aHViIHdvcmtmbG93cyB0byBoYW5kbGUgZGVwZW5kZW5jeSB1cGdyYWRlcy5cbiAgICogQ2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgZGVwZW5kYWJvdGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGRlcHNVcGdyYWRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgZGVwc1VwZ3JhZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZXBzVXBncmFkZU9wdGlvbnM/OiBVcGdyYWRlRGVwZW5kZW5jaWVzT3B0aW9ucztcblxuICAvKipcbiAgICogUGVyaW9kaWNhbGx5IHN1Ym1pdHMgYSBwdWxsIHJlcXVlc3QgZm9yIHByb2plbiB1cGdyYWRlcyAoZXhlY3V0ZXMgYHlhcm5cbiAgICogcHJvamVuOnVwZ3JhZGVgKS5cbiAgICpcbiAgICogVGhpcyBzZXR0aW5nIGlzIGEgR2l0SHViIHNlY3JldCBuYW1lIHdoaWNoIGNvbnRhaW5zIGEgR2l0SHViIEFjY2VzcyBUb2tlblxuICAgKiB3aXRoIGByZXBvYCBhbmQgYHdvcmtmbG93YCBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogVGhpcyB0b2tlbiBpcyB1c2VkIHRvIHN1Ym1pdCB0aGUgdXBncmFkZSBwdWxsIHJlcXVlc3QsIHdoaWNoIHdpbGwgbGlrZWx5XG4gICAqIGluY2x1ZGUgd29ya2Zsb3cgdXBkYXRlcy5cbiAgICpcbiAgICogVG8gY3JlYXRlIGEgcGVyc29uYWwgYWNjZXNzIHRva2VuIHNlZSBodHRwczovL2dpdGh1Yi5jb20vc2V0dGluZ3MvdG9rZW5zXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYXV0b21hdGljIHByb2plbiB1cGdyYWRlIHB1bGwgcmVxdWVzdHNcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBnaXRodWJUb2tlblNlY3JldGAgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHByb2plblVwZ3JhZGVTZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgYXBwcm92ZSBwcm9qZW4gdXBncmFkZSBQUnMsIGFsbG93aW5nIHRoZW0gdG8gYmVcbiAgICogbWVyZ2VkIGJ5IG1lcmdpZnkgKGlmIGNvbmZpZ3VlZCkuXG4gICAqXG4gICAqIFRocm93IGlmIHNldCB0byB0cnVlIGJ1dCBgYXV0b0FwcHJvdmVPcHRpb25zYCBhcmUgbm90IGRlZmluZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgYXV0b0FwcHJvdmVQcm9qZW5VcGdyYWRlc2AuXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5VcGdyYWRlQXV0b01lcmdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBhcHByb3ZlIHByb2plbiB1cGdyYWRlIFBScywgYWxsb3dpbmcgdGhlbSB0byBiZVxuICAgKiBtZXJnZWQgYnkgbWVyZ2lmeSAoaWYgY29uZmlndWVkKS5cbiAgICpcbiAgICogVGhyb3cgaWYgc2V0IHRvIHRydWUgYnV0IGBhdXRvQXBwcm92ZU9wdGlvbnNgIGFyZSBub3QgZGVmaW5lZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGF1dG9BcHByb3ZlUHJvamVuVXBncmFkZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGFwcHJvdmUgZGVwcyB1cGdyYWRlIFBScywgYWxsb3dpbmcgdGhlbSB0byBiZVxuICAgKiBtZXJnZWQgYnkgbWVyZ2lmeSAoaWYgY29uZmlndWVkKS5cbiAgICpcbiAgICogVGhyb3cgaWYgc2V0IHRvIHRydWUgYnV0IGBhdXRvQXBwcm92ZU9wdGlvbnNgIGFyZSBub3QgZGVmaW5lZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBhdXRvQXBwcm92ZVVwZ3JhZGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9taXplIHRoZSBwcm9qZW5VcGdyYWRlIHNjaGVkdWxlIGluIGNyb24gZXhwcmVzc2lvbi5cbiAgICpcbiAgIEBkZWZhdWx0IFsgXCIwIDYgKiAqICpcIiBdXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5VcGdyYWRlU2NoZWR1bGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRGVmaW5lcyBhbiAubnBtaWdub3JlIGZpbGUuIE5vcm1hbGx5IHRoaXMgaXMgb25seSBuZWVkZWQgZm9yIGxpYnJhcmllcyB0aGF0XG4gICAqIGFyZSBwYWNrYWdlZCBhcyB0YXJiYWxscy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbnBtaWdub3JlRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZW50cmllcyB0byAubnBtaWdub3JlLlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBgcHJvamVjdC5hZGRQYWNrYWdlSWdub3JlYFxuICAgKi9cbiAgcmVhZG9ubHkgbnBtaWdub3JlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgYSBHaXRIdWIgcHVsbCByZXF1ZXN0IHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdFRlbXBsYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSBwdWxsIHJlcXVlc3QgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBjb250ZW50XG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU2V0dXAgcHJldHRpZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcmV0dGllcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByZXR0aWVyIG9wdGlvbnNcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByZXR0aWVyT3B0aW9ucz86IFByZXR0aWVyT3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnRyaWVzIHRvIC5naXRpZ25vcmVcbiAgICovXG4gIHJlYWRvbmx5IGdpdGlnbm9yZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTZXR1cCBqZXN0IHVuaXQgdGVzdHNcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgamVzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEplc3Qgb3B0aW9uc1xuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgamVzdE9wdGlvbnM/OiBKZXN0T3B0aW9ucztcblxuICAvKipcbiAgICogR2VuZXJhdGUgKG9uY2UpIC5wcm9qZW5yYy5qcyAoaW4gSmF2YVNjcmlwdCkuIFNldCB0byBgZmFsc2VgIGluIG9yZGVyIHRvIGRpc2FibGVcbiAgICogLnByb2plbnJjLmpzIGdlbmVyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSBpZiBwcm9qZW5yY0pzb24gaXMgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjSnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciAucHJvamVucmMuanNcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjSnNPcHRpb25zPzogUHJvamVucmNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBgQnVuZGxlcmAuXG4gICAqL1xuICByZWFkb25seSBidW5kbGVyT3B0aW9ucz86IEJ1bmRsZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBIGRpcmVjdG9yeSB3aGljaCB3aWxsIGNvbnRhaW4gYnVpbGQgYXJ0aWZhY3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImRpc3RcIlxuICAgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3RzRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgYHBhY2thZ2VgIHRhc2sgdGhhdCB3aWxsIHByb2R1Y2UgYW4gbnBtIHRhcmJhbGwgdW5kZXIgdGhlXG4gICAqIGFydGlmYWN0cyBkaXJlY3RvcnkgKGUuZy4gYGRpc3RgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHdvcmtmbG93IHRyaWdnZXJzXG4gICAqIEBkZWZhdWx0IFwieyBwdWxsUmVxdWVzdDoge30sIHdvcmtmbG93RGlzcGF0Y2g6IHt9IH1cIlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRXb3JrZmxvd1RyaWdnZXJzPzogVHJpZ2dlcnM7XG59XG5cbi8qKlxuICogQXV0b21hdGljIGJ1bXAgbW9kZXNcbiAqL1xuZXhwb3J0IGVudW0gQXV0b1JlbGVhc2Uge1xuICAvKipcbiAgICogQXV0b21hdGljYWxseSBidW1wICYgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uIGZvciBldmVyeSBjb21taXQgdG8gXCJtYWluXCJcbiAgICovXG4gIEVWRVJZX0NPTU1JVCxcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBidW1wICYgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uIG9uIGEgZGFpbHkgYmFzaXMuXG4gICAqL1xuICBEQUlMWSxcbn1cblxuLyoqXG4gKiBOb2RlLmpzIHByb2plY3RcbiAqXG4gKiBAcGppZCBub2RlXG4gKi9cbmV4cG9ydCBjbGFzcyBOb2RlUHJvamVjdCBleHRlbmRzIEdpdEh1YlByb2plY3Qge1xuICAvKipcbiAgICogQVBJIGZvciBtYW5hZ2luZyB0aGUgbm9kZSBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhY2thZ2U6IE5vZGVQYWNrYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgLm5wbWlnbm9yZSBmaWxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5wbWlnbm9yZT86IElnbm9yZUZpbGU7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgcGFja2FnZS5hbGxvd0xpYnJhcnlEZXBlbmRlbmNpZXNgXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93TGlicmFyeURlcGVuZGVuY2llcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLmFsbG93TGlicmFyeURlcGVuZGVuY2llcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYHBhY2thZ2UuZW50cnlwb2ludGBcbiAgICovXG4gIHB1YmxpYyBnZXQgZW50cnlwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UuZW50cnlwb2ludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWMgUFIgbWVyZ2VzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF1dG9NZXJnZT86IEF1dG9NZXJnZTtcblxuICAvKipcbiAgICogVGhlIFBSIGJ1aWxkIEdpdEh1YiB3b3JrZmxvdy4gYHVuZGVmaW5lZGAgaWYgYGJ1aWxkV29ya2Zsb3dgIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkV29ya2Zsb3c/OiBCdWlsZFdvcmtmbG93O1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlIHB1Ymxpc2hlci4gVGhpcyB3aWxsIGJlIGB1bmRlZmluZWRgIGlmIHRoZSBwcm9qZWN0IGRvZXMgbm90IGhhdmUgYVxuICAgKiByZWxlYXNlIHdvcmtmbG93LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYHJlbGVhc2UucHVibGlzaGVyYC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaXNoZXI/OiBQdWJsaXNoZXI7XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgbWFuYWdlbWVudC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZWxlYXNlPzogUmVsZWFzZTtcblxuICAvKipcbiAgICogTWluaW11bSBub2RlLmpzIHZlcnNpb24gcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5Ob2RlVmVyc2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UubWluTm9kZVZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogTWF4aW11bSBub2RlIHZlcnNpb24gcmVxdWlyZWQgYnkgdGhpcyBwYWNha2dlLlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhOb2RlVmVyc2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UubWF4Tm9kZVZlcnNpb247XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IG5vZGVWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBtYW5hZ2VyIHRvIHVzZS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBwYWNrYWdlLnBhY2thZ2VNYW5hZ2VyYFxuICAgKi9cbiAgcHVibGljIGdldCBwYWNrYWdlTWFuYWdlcigpOiBOb2RlUGFja2FnZU1hbmFnZXIge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbW1hbmQgdG8gdXNlIHRvIHJ1biBzY3JpcHRzIChlLmcuIGB5YXJuIHJ1bmAgb3IgYG5wbSBydW5gIGRlcGVuZHMgb24gdGhlIHBhY2thZ2UgbWFuYWdlcikuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcnVuU2NyaXB0Q29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSmVzdCBjb25maWd1cmF0aW9uIChpZiBlbmFibGVkKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGplc3Q/OiBKZXN0O1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYHBhY2thZ2UuYWRkRmllbGQoeCwgeSlgXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1hbmlmZXN0KCkge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UubWFuaWZlc3Q7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYnVuZGxlcjogQnVuZGxlcjtcblxuICAvKipcbiAgICogVGhlIGJ1aWxkIG91dHB1dCBkaXJlY3RvcnkuIEFuIG5wbSB0YXJiYWxsIHdpbGwgYmUgY3JlYXRlZCB1bmRlciB0aGUgYGpzYFxuICAgKiBzdWJkaXJlY3RvcnkuIEZvciBleGFtcGxlLCBpZiB0aGlzIGlzIHNldCB0byBgZGlzdGAgKHRoZSBkZWZhdWx0KSwgdGhlIG5wbVxuICAgKiB0YXJiYWxsIHdpbGwgYmUgcGxhY2VkIHVuZGVyIGBkaXN0L2pzL2Jvb20tYm9vbS0xLjIuMy50Z2AuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXJ0aWZhY3RzRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgbnBtIHRhcmJhbGwgYWZ0ZXIgYnVpbGQgKGAke2FydGlmYWN0c0RpcmVjdG9yeX0vanNgKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcnRpZmFjdHNKYXZhc2NyaXB0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1cGdyYWRlIHdvcmtmbG93LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZ3JhZGVXb3JrZmxvdz86IFVwZ3JhZGVEZXBlbmRlbmNpZXM7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd0Jvb3RzdHJhcFN0ZXBzOiBKb2JTdGVwW107XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dHaXRJZGVudGl0eTogR2l0SWRlbnRpdHk7XG4gIHB1YmxpYyByZWFkb25seSBwcmV0dGllcj86IFByZXR0aWVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE5vZGVQcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5wYWNrYWdlID0gbmV3IE5vZGVQYWNrYWdlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMud29ya2Zsb3dCb290c3RyYXBTdGVwcyA9IG9wdGlvbnMud29ya2Zsb3dCb290c3RyYXBTdGVwcyA/PyBbXTtcbiAgICB0aGlzLndvcmtmbG93R2l0SWRlbnRpdHkgPVxuICAgICAgb3B0aW9ucy53b3JrZmxvd0dpdElkZW50aXR5ID8/IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUjtcbiAgICB0aGlzLmFydGlmYWN0c0RpcmVjdG9yeSA9IG9wdGlvbnMuYXJ0aWZhY3RzRGlyZWN0b3J5ID8/IFwiZGlzdFwiO1xuICAgIHRoaXMuYXJ0aWZhY3RzSmF2YXNjcmlwdERpcmVjdG9yeSA9IGpvaW4odGhpcy5hcnRpZmFjdHNEaXJlY3RvcnksIFwianNcIik7XG5cbiAgICB0aGlzLnJ1blNjcmlwdENvbW1hbmQgPSAoKCkgPT4ge1xuICAgICAgc3dpdGNoICh0aGlzLnBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLk5QTTpcbiAgICAgICAgICByZXR1cm4gXCJucG0gcnVuXCI7XG4gICAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk46XG4gICAgICAgICAgcmV0dXJuIFwieWFybiBydW5cIjtcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgICAgICByZXR1cm4gXCJwbnBtIHJ1blwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBwYWNrYWdlIG1hbmFnZXIgJHt0aGlzLnBhY2thZ2VNYW5hZ2VyfWApO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICB0aGlzLm5vZGVWZXJzaW9uID1cbiAgICAgIG9wdGlvbnMud29ya2Zsb3dOb2RlVmVyc2lvbiA/PyB0aGlzLnBhY2thZ2UubWluTm9kZVZlcnNpb247XG5cbiAgICAvLyBhZGQgUEFUSCBmb3IgYWxsIHRhc2tzIHdoaWNoIGluY2x1ZGVzIHRoZSBwcm9qZWN0J3MgbnBtIC5iaW4gbGlzdFxuICAgIHRoaXMudGFza3MuYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIlBBVEhcIixcbiAgICAgICckKG5weCAtYyBcIm5vZGUgLWUgXFxcXFwiY29uc29sZS5sb2cocHJvY2Vzcy5lbnYuUEFUSClcXFxcXCJcIiknXG4gICAgKTtcblxuICAgIHRoaXMuYWRkTGljZW5zZShvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zLm5wbWlnbm9yZUVuYWJsZWQgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5ucG1pZ25vcmUgPSBuZXcgSWdub3JlRmlsZSh0aGlzLCBcIi5ucG1pZ25vcmVcIik7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0R2l0SWdub3JlKCk7XG5cbiAgICBpZiAob3B0aW9ucy5naXRpZ25vcmU/Lmxlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCBpIG9mIG9wdGlvbnMuZ2l0aWdub3JlKSB7XG4gICAgICAgIHRoaXMuZ2l0aWdub3JlLmV4Y2x1ZGUoaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubnBtaWdub3JlPy5sZW5ndGgpIHtcbiAgICAgIGlmICghdGhpcy5ucG1pZ25vcmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICcubnBtaWdub3JlIGlzIG5vdCBkZWZpbmVkIGZvciBhbiBBUFAgcHJvamVjdCB0eXBlLiBBZGQgXCJucG1JZ25vcmU6IHRydWVcIiB0byBvdmVycmlkZSB0aGlzJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGkgb2Ygb3B0aW9ucy5ucG1pZ25vcmUpIHtcbiAgICAgICAgdGhpcy5ucG1pZ25vcmUuZXhjbHVkZShpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZWplY3RlZCkge1xuICAgICAgdGhpcy5zZXRTY3JpcHQoUFJPSkVOX1NDUklQVCwgdGhpcy5wYWNrYWdlLnByb2plbkNvbW1hbmQpO1xuICAgIH1cblxuICAgIHRoaXMubnBtaWdub3JlPy5leGNsdWRlKGAvJHtQUk9KRU5fUkN9YCk7XG4gICAgdGhpcy5ucG1pZ25vcmU/LmV4Y2x1ZGUoYC8ke1BST0pFTl9ESVJ9L2ApO1xuICAgIHRoaXMuZ2l0aWdub3JlLmluY2x1ZGUoYC8ke1BST0pFTl9SQ31gKTtcblxuICAgIGNvbnN0IHByb2plbiA9IG9wdGlvbnMucHJvamVuRGV2RGVwZW5kZW5jeSA/PyB0cnVlO1xuICAgIGlmIChwcm9qZW4gJiYgIXRoaXMuZWplY3RlZCkge1xuICAgICAgY29uc3QgcG9zdGZpeCA9IG9wdGlvbnMucHJvamVuVmVyc2lvbiA/IGBAJHtvcHRpb25zLnByb2plblZlcnNpb259YCA6IFwiXCI7XG4gICAgICB0aGlzLmFkZERldkRlcHMoYHByb2plbiR7cG9zdGZpeH1gKTtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1wiZGVmYXVsdFJlbGVhc2VCcmFuY2hcIiBpcyB0ZW1wb3JhcmlseSBhIHJlcXVpcmVkIG9wdGlvbiB3aGlsZSB3ZSBtaWdyYXRlIGl0cyBkZWZhdWx0IHZhbHVlIGZyb20gXCJtYXN0ZXJcIiB0byBcIm1haW5cIidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRFbmFibGVkID0gb3B0aW9ucy5idWlsZFdvcmtmbG93ID8/ICh0aGlzLnBhcmVudCA/IGZhbHNlIDogdHJ1ZSk7XG5cbiAgICAvLyBjb25maWd1cmUgamVzdCBpZiBlbmFibGVkXG4gICAgLy8gbXVzdCBiZSBiZWZvcmUgdGhlIGJ1aWxkL3JlbGVhc2Ugd29ya2Zsb3dzXG4gICAgaWYgKG9wdGlvbnMuamVzdCA/PyB0cnVlKSB7XG4gICAgICB0aGlzLmplc3QgPSBuZXcgSmVzdCh0aGlzLCBvcHRpb25zLmplc3RPcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoYnVpbGRFbmFibGVkICYmIHRoaXMuZ2l0aHViKSB7XG4gICAgICB0aGlzLmJ1aWxkV29ya2Zsb3cgPSBuZXcgQnVpbGRXb3JrZmxvdyh0aGlzLCB7XG4gICAgICAgIGJ1aWxkVGFzazogdGhpcy5idWlsZFRhc2ssXG4gICAgICAgIGFydGlmYWN0c0RpcmVjdG9yeTogdGhpcy5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgIGNvbnRhaW5lckltYWdlOiBvcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2UsXG4gICAgICAgIGdpdElkZW50aXR5OiB0aGlzLndvcmtmbG93R2l0SWRlbnRpdHksXG4gICAgICAgIG11dGFibGVCdWlsZDogb3B0aW9ucy5tdXRhYmxlQnVpbGQsXG4gICAgICAgIHByZUJ1aWxkU3RlcHM6IHRoaXMucmVuZGVyV29ya2Zsb3dTZXR1cCh7XG4gICAgICAgICAgbXV0YWJsZTogb3B0aW9ucy5tdXRhYmxlQnVpbGQgPz8gdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIHBvc3RCdWlsZFN0ZXBzOiBvcHRpb25zLnBvc3RCdWlsZFN0ZXBzLFxuICAgICAgICBydW5zT246IG9wdGlvbnMud29ya2Zsb3dSdW5zT24sXG4gICAgICAgIHdvcmtmbG93VHJpZ2dlcnM6IG9wdGlvbnMuYnVpbGRXb3JrZmxvd1RyaWdnZXJzLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHJ1biBjb2RlY292IGlmIGVuYWJsZWQgb3IgYSBzZWNyZXQgdG9rZW4gbmFtZSBpcyBwYXNzZWQgaW5cbiAgICAgIC8vIEFORCBqZXN0IG11c3QgYmUgY29uZmlndXJlZFxuICAgICAgaWYgKFxuICAgICAgICAob3B0aW9ucy5jb2RlQ292IHx8IG9wdGlvbnMuY29kZUNvdlRva2VuU2VjcmV0KSAmJlxuICAgICAgICB0aGlzLmplc3Q/LmNvbmZpZ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYnVpbGRXb3JrZmxvdy5hZGRQb3N0QnVpbGRTdGVwcyh7XG4gICAgICAgICAgbmFtZTogXCJVcGxvYWQgY292ZXJhZ2UgdG8gQ29kZWNvdlwiLFxuICAgICAgICAgIHVzZXM6IFwiY29kZWNvdi9jb2RlY292LWFjdGlvbkB2MVwiLFxuICAgICAgICAgIHdpdGg6IG9wdGlvbnMuY29kZUNvdlRva2VuU2VjcmV0XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICB0b2tlbjogYFxcJHt7IHNlY3JldHMuJHtvcHRpb25zLmNvZGVDb3ZUb2tlblNlY3JldH0gfX1gLFxuICAgICAgICAgICAgICAgIGRpcmVjdG9yeTogdGhpcy5qZXN0LmNvbmZpZy5jb3ZlcmFnZURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmplc3QuY29uZmlnLmNvdmVyYWdlRGlyZWN0b3J5LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWxlYXNlID1cbiAgICAgIG9wdGlvbnMucmVsZWFzZSA/P1xuICAgICAgb3B0aW9ucy5yZWxlYXNlV29ya2Zsb3cgPz9cbiAgICAgICh0aGlzLnBhcmVudCA/IGZhbHNlIDogdHJ1ZSk7XG4gICAgaWYgKHJlbGVhc2UpIHtcbiAgICAgIHRoaXMuYWRkRGV2RGVwcyhWZXJzaW9uLlNUQU5EQVJEX1ZFUlNJT04pO1xuXG4gICAgICB0aGlzLnJlbGVhc2UgPSBuZXcgUmVsZWFzZSh0aGlzLCB7XG4gICAgICAgIHZlcnNpb25GaWxlOiBcInBhY2thZ2UuanNvblwiLCAvLyB0aGlzIGlzIHdoZXJlIFwidmVyc2lvblwiIGlzIHNldCBhZnRlciBidW1wXG4gICAgICAgIHRhc2s6IHRoaXMuYnVpbGRUYXNrLFxuICAgICAgICBicmFuY2g6IG9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2ggPz8gXCJtYWluXCIsXG4gICAgICAgIGFydGlmYWN0c0RpcmVjdG9yeTogdGhpcy5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgIC4uLm9wdGlvbnMsXG5cbiAgICAgICAgcmVsZWFzZVdvcmtmbG93U2V0dXBTdGVwczogW1xuICAgICAgICAgIC4uLnRoaXMucmVuZGVyV29ya2Zsb3dTZXR1cCh7IG11dGFibGU6IGZhbHNlIH0pLFxuICAgICAgICAgIC4uLihvcHRpb25zLnJlbGVhc2VXb3JrZmxvd1NldHVwU3RlcHMgPz8gW10pLFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucHVibGlzaGVyID0gdGhpcy5yZWxlYXNlLnB1Ymxpc2hlcjtcblxuICAgICAgaWYgKG9wdGlvbnMucmVsZWFzZVRvTnBtID8/IGZhbHNlKSB7XG4gICAgICAgIHRoaXMucmVsZWFzZS5wdWJsaXNoZXIucHVibGlzaFRvTnBtKHtcbiAgICAgICAgICByZWdpc3RyeTogdGhpcy5wYWNrYWdlLm5wbVJlZ2lzdHJ5LFxuICAgICAgICAgIG5wbVRva2VuU2VjcmV0OiB0aGlzLnBhY2thZ2UubnBtVG9rZW5TZWNyZXQsXG4gICAgICAgICAgY29kZUFydGlmYWN0T3B0aW9uczoge1xuICAgICAgICAgICAgYWNjZXNzS2V5SWRTZWNyZXQ6IG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8uYWNjZXNzS2V5SWRTZWNyZXQsXG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXQ6XG4gICAgICAgICAgICAgIG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8uc2VjcmV0QWNjZXNzS2V5U2VjcmV0LFxuICAgICAgICAgICAgcm9sZVRvQXNzdW1lOiBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM/LnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdmFsaWRhdGUgdGhhdCBubyByZWxlYXNlIG9wdGlvbnMgYXJlIHNlbGVjdGVkIGlmIHRoZSByZWxlYXNlIHdvcmtmbG93IGlzIGRpc2FibGVkLlxuICAgICAgaWYgKG9wdGlvbnMucmVsZWFzZVRvTnBtKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyZWxlYXNlVG9OcG1cIiBpcyBub3Qgc3VwcG9ydGVkIGZvciBBUFAgcHJvamVjdHMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucmVsZWFzZUV2ZXJ5Q29tbWl0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnXCJyZWxlYXNlRXZlcnlDb21taXRcIiBpcyBub3Qgc3VwcG9ydGVkIGZvciBBUFAgcHJvamVjdHMnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnJlbGVhc2VTY2hlZHVsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wicmVsZWFzZVNjaGVkdWxlXCIgaXMgbm90IHN1cHBvcnRlZCBmb3IgQVBQIHByb2plY3RzJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2l0aHViPy5tZXJnaWZ5ICYmIHRoaXMuYnVpbGRXb3JrZmxvdz8uYnVpbGRKb2JJZHMpIHtcbiAgICAgIHRoaXMuYXV0b01lcmdlID0gbmV3IEF1dG9NZXJnZSh0aGlzLmdpdGh1Yiwgb3B0aW9ucy5hdXRvTWVyZ2VPcHRpb25zKTtcbiAgICAgIHRoaXMuYXV0b01lcmdlLmFkZENvbmRpdGlvbnNMYXRlcih7XG4gICAgICAgIHJlbmRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLmJ1aWxkV29ya2Zsb3c/LmJ1aWxkSm9iSWRzLm1hcCgoaWQpID0+IGBzdGF0dXMtc3VjY2Vzcz0ke2lkfWApID8/XG4gICAgICAgICAgW10sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRhYm90ID0gb3B0aW9ucy5kZXBlbmRhYm90ID8/IGZhbHNlO1xuICAgIGNvbnN0IGRlcHNVcGdyYWRlID0gb3B0aW9ucy5kZXBzVXBncmFkZSA/PyAhZGVwZW5kYWJvdDtcblxuICAgIGlmIChkZXBlbmRhYm90ICYmIGRlcHNVcGdyYWRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiJ2RlcGVuZGFib3QnIGNhbm5vdCBiZSBjb25maWd1cmVkIHRvZ2V0aGVyIHdpdGggJ2RlcHNVcGdyYWRlJ1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIG9wdGlvbnMucHJvamVuVXBncmFkZUF1dG9NZXJnZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvcHRpb25zLmF1dG9BcHByb3ZlUHJvamVuVXBncmFkZXMgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIidwcm9qZW5VcGdyYWRlQXV0b01lcmdlJyBjYW5ub3QgYmUgY29uZmlndXJlZCB0b2dldGhlciB3aXRoICdhdXRvQXBwcm92ZVByb2plblVwZ3JhZGVzJ1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2plbkF1dG9BcHByb3ZlID1cbiAgICAgIG9wdGlvbnMuYXV0b0FwcHJvdmVQcm9qZW5VcGdyYWRlcyA/P1xuICAgICAgb3B0aW9ucy5wcm9qZW5VcGdyYWRlQXV0b01lcmdlID8/XG4gICAgICBmYWxzZTtcbiAgICBjb25zdCBkZXBzQXV0b0FwcHJvdmUgPSBvcHRpb25zLmF1dG9BcHByb3ZlVXBncmFkZXMgPz8gZmFsc2U7XG5cbiAgICBpZiAocHJvamVuQXV0b0FwcHJvdmUgJiYgIXRoaXMuYXV0b0FwcHJvdmUgJiYgdGhpcy5naXRodWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBdXRvbWF0aWMgYXBwcm92YWwgb2YgcHJvamVuIHVwZ3JhZGVzIHJlcXVpcmVzIGNvbmZpZ3VyaW5nIGBhdXRvQXBwcm92ZU9wdGlvbnNgXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRlcHNBdXRvQXBwcm92ZSAmJiAhdGhpcy5hdXRvQXBwcm92ZSAmJiB0aGlzLmdpdGh1Yikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkF1dG9tYXRpYyBhcHByb3ZhbCBvZiBkZXBlbmRlbmNpZXMgdXBncmFkZXMgcmVxdWlyZXMgY29uZmlndXJpbmcgYGF1dG9BcHByb3ZlT3B0aW9uc2BcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRvQXBwcm92ZUxhYmVsID0gKGNvbmRpdGlvbjogYm9vbGVhbikgPT5cbiAgICAgIGNvbmRpdGlvbiAmJiB0aGlzLmF1dG9BcHByb3ZlPy5sYWJlbFxuICAgICAgICA/IFt0aGlzLmF1dG9BcHByb3ZlLmxhYmVsXVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGxldCBpZ25vcmVzUHJvamVuO1xuICAgIGlmIChkZXBlbmRhYm90KSB7XG4gICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgICAgbGFiZWxzOiBhdXRvQXBwcm92ZUxhYmVsKGRlcHNBdXRvQXBwcm92ZSksXG4gICAgICB9O1xuICAgICAgY29uc3QgZGVwZW5kYWJvdENvbmYgPSB0aGlzLmdpdGh1Yj8uYWRkRGVwZW5kYWJvdChcbiAgICAgICAgZGVlcE1lcmdlKFtkZWZhdWx0T3B0aW9ucywgb3B0aW9ucy5kZXBlbmRhYm90T3B0aW9ucyA/PyB7fV0pXG4gICAgICApO1xuICAgICAgaWdub3Jlc1Byb2plbiA9IGRlcGVuZGFib3RDb25mPy5pZ25vcmVzUHJvamVuO1xuICAgIH1cbiAgICBpZiAoZGVwc1VwZ3JhZGUpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zOiBVcGdyYWRlRGVwZW5kZW5jaWVzT3B0aW9ucyA9IHtcbiAgICAgICAgLy8gaWYgcHJvamVuIHNlY3JldCBpcyBkZWZpbmVkIHdlIGNhbiBhbHNvIHVwZ3JhZGUgcHJvamVuIGhlcmUuXG4gICAgICAgIGlnbm9yZVByb2plbjogIW9wdGlvbnMucHJvamVuVXBncmFkZVNlY3JldCxcbiAgICAgICAgd29ya2Zsb3dPcHRpb25zOiB7XG4gICAgICAgICAgLy8gaWYgcHJvamVuIHNlY3JldCBpcyBkZWZpbmVkLCB1c2UgaXQgKG90aGVyd2lzZSBkZWZhdWx0IHRvIEdJVEhVQl9UT0tFTikuXG4gICAgICAgICAgc2VjcmV0OiBvcHRpb25zLnByb2plblVwZ3JhZGVTZWNyZXQsXG4gICAgICAgICAgY29udGFpbmVyOiBvcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2VcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGltYWdlOiBvcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2UsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGxhYmVsczogYXV0b0FwcHJvdmVMYWJlbChkZXBzQXV0b0FwcHJvdmUpLFxuICAgICAgICAgIGdpdElkZW50aXR5OiB0aGlzLndvcmtmbG93R2l0SWRlbnRpdHksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgdGhpcy51cGdyYWRlV29ya2Zsb3cgPSBuZXcgVXBncmFkZURlcGVuZGVuY2llcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgZGVlcE1lcmdlKFtkZWZhdWx0T3B0aW9ucywgb3B0aW9ucy5kZXBzVXBncmFkZU9wdGlvbnMgPz8ge31dKVxuICAgICAgKTtcbiAgICAgIGlnbm9yZXNQcm9qZW4gPSB0aGlzLnVwZ3JhZGVXb3JrZmxvdy5pZ25vcmVzUHJvamVuO1xuICAgIH1cblxuICAgIC8vIGNyZWF0ZSBhIGRlZGljYXRlZCB3b3JrZmxvdyB0byB1cGdyYWRlIHByb2plbiBpdHNlbGYgaWYgbmVlZGVkXG4gICAgaWYgKGlnbm9yZXNQcm9qZW4gJiYgdGhpcy5wYWNrYWdlLnBhY2thZ2VOYW1lICE9PSBcInByb2plblwiKSB7XG4gICAgICBuZXcgVXBncmFkZURlcGVuZGVuY2llcyh0aGlzLCB7XG4gICAgICAgIGluY2x1ZGU6IFtcInByb2plblwiXSxcbiAgICAgICAgdGFza05hbWU6IFwidXBncmFkZS1wcm9qZW5cIixcbiAgICAgICAgcHVsbFJlcXVlc3RUaXRsZTogXCJ1cGdyYWRlIHByb2plblwiLFxuICAgICAgICBpZ25vcmVQcm9qZW46IGZhbHNlLFxuICAgICAgICB3b3JrZmxvdzogISFvcHRpb25zLnByb2plblVwZ3JhZGVTZWNyZXQsXG4gICAgICAgIHdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICAgIHNjaGVkdWxlOiBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUuZXhwcmVzc2lvbnMoXG4gICAgICAgICAgICBvcHRpb25zLnByb2plblVwZ3JhZGVTY2hlZHVsZSA/PyBbXCIwIDYgKiAqICpcIl1cbiAgICAgICAgICApLFxuICAgICAgICAgIGNvbnRhaW5lcjogb3B0aW9ucy53b3JrZmxvd0NvbnRhaW5lckltYWdlXG4gICAgICAgICAgICA/IHsgaW1hZ2U6IG9wdGlvbnMud29ya2Zsb3dDb250YWluZXJJbWFnZSB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzZWNyZXQ6IG9wdGlvbnMucHJvamVuVXBncmFkZVNlY3JldCxcbiAgICAgICAgICBsYWJlbHM6IGF1dG9BcHByb3ZlTGFiZWwocHJvamVuQXV0b0FwcHJvdmUpLFxuICAgICAgICAgIGdpdElkZW50aXR5OiB0aGlzLndvcmtmbG93R2l0SWRlbnRpdHksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wdWxsUmVxdWVzdFRlbXBsYXRlID8/IHRydWUpIHtcbiAgICAgIHRoaXMuZ2l0aHViPy5hZGRQdWxsUmVxdWVzdFRlbXBsYXRlKFxuICAgICAgICAuLi4ob3B0aW9ucy5wdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHMgPz8gW10pXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2plbnJjSnMgPSBvcHRpb25zLnByb2plbnJjSnMgPz8gIW9wdGlvbnMucHJvamVucmNKc29uO1xuICAgIGlmIChwcm9qZW5yY0pzKSB7XG4gICAgICBuZXcgUHJvamVucmModGhpcywgb3B0aW9ucy5wcm9qZW5yY0pzT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgYnVuZGxlciBjb21wb25lbnQgLSB0aGlzIGVuYWJsZXMgdGhpbmdzIGxpa2UgTGFtYmRhIGJ1bmRsaW5nIGFuZCBpbiB0aGUgZnV0dXJlIHdlYiBidW5kbGluZy5cbiAgICB0aGlzLmJ1bmRsZXIgPSBuZXcgQnVuZGxlcih0aGlzLCBvcHRpb25zLmJ1bmRsZXJPcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zLnBhY2thZ2UgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5wYWNrYWdlVGFzay5leGVjKGBta2RpciAtcCAke3RoaXMuYXJ0aWZhY3RzSmF2YXNjcmlwdERpcmVjdG9yeX1gKTtcblxuICAgICAgLy8gYWx3YXlzIHVzZSBucG0gaGVyZSAtIHlhcm4gZG9lc24ndCBhZGQgbXVjaCB2YWx1ZVxuICAgICAgLy8gc2FkbHkgd2UgY2Fubm90IHVzZSAtLXBhY2stZGVzdGluYXRpb24gYmVjYXVzZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IG9sZGVyIG5wbVxuICAgICAgdGhpcy5wYWNrYWdlVGFzay5leGVjKFxuICAgICAgICBgbXYgJChucG0gcGFjaykgJHt0aGlzLmFydGlmYWN0c0phdmFzY3JpcHREaXJlY3Rvcnl9L2BcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHJldHRpZXIgPz8gZmFsc2UpIHtcbiAgICAgIHRoaXMucHJldHRpZXIgPSBuZXcgUHJldHRpZXIodGhpcywgeyAuLi5vcHRpb25zLnByZXR0aWVyT3B0aW9ucyB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkQmlucyhiaW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gICAgdGhpcy5wYWNrYWdlLmFkZEJpbihiaW5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgY29udGVudHMgb2YgYW4gbnBtIHBhY2thZ2UuanNvbiBzY3JpcHQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBzY3JpcHQgbmFtZVxuICAgKiBAcGFyYW0gY29tbWFuZCBUaGUgY29tbWFuZCB0byBleGVjdXRlXG4gICAqL1xuICBwdWJsaWMgc2V0U2NyaXB0KG5hbWU6IHN0cmluZywgY29tbWFuZDogc3RyaW5nKSB7XG4gICAgdGhpcy5wYWNrYWdlLnNldFNjcmlwdChuYW1lLCBjb21tYW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBucG0gc2NyaXB0IChhbHdheXMgc3VjY2Vzc2Z1bCkuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzY3JpcHQuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlU2NyaXB0KG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucGFja2FnZS5yZW1vdmVTY3JpcHQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGEgc2NyaXB0IGJ5IHRoZSBuYW1lIG5hbWUgaXMgZGVmaW5lZC5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHNjcmlwdFxuICAgKi9cbiAgcHVibGljIGhhc1NjcmlwdChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLmhhc1NjcmlwdChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBERVBSRUNBVEVEXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgcHJvamVjdC5jb21waWxlVGFzay5leGVjKClgXG4gICAqL1xuICBwdWJsaWMgYWRkQ29tcGlsZUNvbW1hbmQoLi4uY29tbWFuZHM6IHN0cmluZ1tdKSB7XG4gICAgZm9yIChjb25zdCBjIG9mIGNvbW1hbmRzKSB7XG4gICAgICB0aGlzLmNvbXBpbGVUYXNrLmV4ZWMoYyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERFUFJFQ0FURURcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBwcm9qZWN0LnRlc3RUYXNrLmV4ZWMoKWBcbiAgICovXG4gIHB1YmxpYyBhZGRUZXN0Q29tbWFuZCguLi5jb21tYW5kczogc3RyaW5nW10pIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgY29tbWFuZHMpIHtcbiAgICAgIHRoaXMudGVzdFRhc2suZXhlYyhjKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGlyZWN0bHkgc2V0IGZpZWxkcyBpbiBgcGFja2FnZS5qc29uYC5cbiAgICogQHBhcmFtIGZpZWxkcyBUaGUgZmllbGRzIHRvIHNldFxuICAgKi9cbiAgcHVibGljIGFkZEZpZWxkcyhmaWVsZHM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkcykpIHtcbiAgICAgIHRoaXMucGFja2FnZS5hZGRGaWVsZChuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMga2V5d29yZHMgdG8gcGFja2FnZS5qc29uIChkZWR1cGxpY2F0ZWQpXG4gICAqIEBwYXJhbSBrZXl3b3JkcyBUaGUga2V5d29yZHMgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkS2V5d29yZHMoLi4ua2V5d29yZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wYWNrYWdlLmFkZEtleXdvcmRzKC4uLmtleXdvcmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZXQgb2Ygd29ya2Zsb3cgc3RlcHMgd2hpY2ggc2hvdWxkIGJlIGV4ZWN1dGVkIHRvIGJvb3RzdHJhcCBhXG4gICAqIHdvcmtmbG93LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zLlxuICAgKiBAcmV0dXJucyBKb2Igc3RlcHNcbiAgICovXG4gIHB1YmxpYyByZW5kZXJXb3JrZmxvd1NldHVwKFxuICAgIG9wdGlvbnM6IFJlbmRlcldvcmtmbG93U2V0dXBPcHRpb25zID0ge31cbiAgKTogSm9iU3RlcFtdIHtcbiAgICBjb25zdCBpbnN0YWxsID0gbmV3IEFycmF5PEpvYlN0ZXA+KCk7XG5cbiAgICAvLyBmaXJzdCBydW4gdGhlIHdvcmtmbG93IGJvb3RzdHJhcCBzdGVwc1xuICAgIGluc3RhbGwucHVzaCguLi50aGlzLndvcmtmbG93Qm9vdHN0cmFwU3RlcHMpO1xuXG4gICAgaWYgKHRoaXMubm9kZVZlcnNpb24pIHtcbiAgICAgIGluc3RhbGwucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiU2V0dXAgTm9kZS5qc1wiLFxuICAgICAgICB1c2VzOiBcImFjdGlvbnMvc2V0dXAtbm9kZUB2Mi4yLjBcIixcbiAgICAgICAgd2l0aDogeyBcIm5vZGUtdmVyc2lvblwiOiB0aGlzLm5vZGVWZXJzaW9uIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTSkge1xuICAgICAgaW5zdGFsbC5wdXNoKHtcbiAgICAgICAgbmFtZTogXCJTZXR1cCBwbnBtXCIsXG4gICAgICAgIHVzZXM6IFwicG5wbS9hY3Rpb24tc2V0dXBAdjIuMC4xXCIsXG4gICAgICAgIHdpdGg6IHsgdmVyc2lvbjogXCI2LjE0LjdcIiB9LCAvLyBjdXJyZW50IGxhdGVzdC4gU2hvdWxkIHByb2JhYmx5IGJlY29tZSB0dW5hYmxlLlxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbXV0YWJsZSA9IG9wdGlvbnMubXV0YWJsZSA/PyBmYWxzZTtcblxuICAgIGluc3RhbGwucHVzaCh7XG4gICAgICBuYW1lOiBcIkluc3RhbGwgZGVwZW5kZW5jaWVzXCIsXG4gICAgICBydW46IG11dGFibGVcbiAgICAgICAgPyB0aGlzLnBhY2thZ2UuaW5zdGFsbEFuZFVwZGF0ZUxvY2tmaWxlQ29tbWFuZFxuICAgICAgICA6IHRoaXMucGFja2FnZS5pbnN0YWxsQ29tbWFuZCxcbiAgICB9KTtcblxuICAgIHJldHVybiBpbnN0YWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgbm9ybWFsIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQHBhcmFtIGRlcHMgTmFtZXMgbW9kdWxlcyB0byBpbnN0YWxsLiBCeSBkZWZhdWx0LCB0aGUgdGhlIGRlcGVuZGVuY3kgd2lsbFxuICAgKiBiZSBpbnN0YWxsZWQgaW4gdGhlIG5leHQgYG5weCBwcm9qZW5gIHJ1biBhbmQgdGhlIHZlcnNpb24gd2lsbCBiZSByZWNvcmRlZFxuICAgKiBpbiB5b3VyIGBwYWNrYWdlLmpzb25gIGZpbGUuIFlvdSBjYW4gdXBncmFkZSBtYW51YWxseSBvciB1c2luZyBgeWFyblxuICAgKiBhZGQvdXBncmFkZWAuIElmIHlvdSB3aXNoIHRvIHNwZWNpZnkgYSB2ZXJzaW9uIHJhbmdlIHVzZSB0aGlzIHN5bnRheDpcbiAgICogYG1vZHVsZUBeN2AuXG4gICAqL1xuICBwdWJsaWMgYWRkRGVwcyguLi5kZXBzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UuYWRkRGVwcyguLi5kZXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGRldmVsb3BtZW50L3Rlc3QgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwcyBOYW1lcyBtb2R1bGVzIHRvIGluc3RhbGwuIEJ5IGRlZmF1bHQsIHRoZSB0aGUgZGVwZW5kZW5jeSB3aWxsXG4gICAqIGJlIGluc3RhbGxlZCBpbiB0aGUgbmV4dCBgbnB4IHByb2plbmAgcnVuIGFuZCB0aGUgdmVyc2lvbiB3aWxsIGJlIHJlY29yZGVkXG4gICAqIGluIHlvdXIgYHBhY2thZ2UuanNvbmAgZmlsZS4gWW91IGNhbiB1cGdyYWRlIG1hbnVhbGx5IG9yIHVzaW5nIGB5YXJuXG4gICAqIGFkZC91cGdyYWRlYC4gSWYgeW91IHdpc2ggdG8gc3BlY2lmeSBhIHZlcnNpb24gcmFuZ2UgdXNlIHRoaXMgc3ludGF4OlxuICAgKiBgbW9kdWxlQF43YC5cbiAgICovXG4gIHB1YmxpYyBhZGREZXZEZXBzKC4uLmRlcHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZS5hZGREZXZEZXBzKC4uLmRlcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgcGVlciBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIFdoZW4gYWRkaW5nIHBlZXIgZGVwZW5kZW5jaWVzLCBhIGRldkRlcGVuZGVuY3kgd2lsbCBhbHNvIGJlIGFkZGVkIG9uIHRoZVxuICAgKiBwaW5uZWQgdmVyc2lvbiBvZiB0aGUgZGVjbGFyZWQgcGVlci4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IHlvdSBhcmUgdGVzdGluZ1xuICAgKiB5b3VyIGNvZGUgYWdhaW5zdCB0aGUgbWluaW11bSB2ZXJzaW9uIHJlcXVpcmVkIGZyb20geW91ciBjb25zdW1lcnMuXG4gICAqXG4gICAqIEBwYXJhbSBkZXBzIE5hbWVzIG1vZHVsZXMgdG8gaW5zdGFsbC4gQnkgZGVmYXVsdCwgdGhlIHRoZSBkZXBlbmRlbmN5IHdpbGxcbiAgICogYmUgaW5zdGFsbGVkIGluIHRoZSBuZXh0IGBucHggcHJvamVuYCBydW4gYW5kIHRoZSB2ZXJzaW9uIHdpbGwgYmUgcmVjb3JkZWRcbiAgICogaW4geW91ciBgcGFja2FnZS5qc29uYCBmaWxlLiBZb3UgY2FuIHVwZ3JhZGUgbWFudWFsbHkgb3IgdXNpbmcgYHlhcm5cbiAgICogYWRkL3VwZ3JhZGVgLiBJZiB5b3Ugd2lzaCB0byBzcGVjaWZ5IGEgdmVyc2lvbiByYW5nZSB1c2UgdGhpcyBzeW50YXg6XG4gICAqIGBtb2R1bGVAXjdgLlxuICAgKi9cbiAgcHVibGljIGFkZFBlZXJEZXBzKC4uLmRlcHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZS5hZGRQZWVyRGVwcyguLi5kZXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGJ1bmRsZWQgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBCdW5kbGVkIGRlcGVuZGVuY2llcyB3aWxsIGJlIGFkZGVkIGFzIG5vcm1hbCBkZXBlbmRlbmNpZXMgYXMgd2VsbCBhcyB0byB0aGVcbiAgICogYGJ1bmRsZWREZXBlbmRlbmNpZXNgIHNlY3Rpb24gb2YgeW91ciBgcGFja2FnZS5qc29uYC5cbiAgICpcbiAgICogQHBhcmFtIGRlcHMgTmFtZXMgbW9kdWxlcyB0byBpbnN0YWxsLiBCeSBkZWZhdWx0LCB0aGUgdGhlIGRlcGVuZGVuY3kgd2lsbFxuICAgKiBiZSBpbnN0YWxsZWQgaW4gdGhlIG5leHQgYG5weCBwcm9qZW5gIHJ1biBhbmQgdGhlIHZlcnNpb24gd2lsbCBiZSByZWNvcmRlZFxuICAgKiBpbiB5b3VyIGBwYWNrYWdlLmpzb25gIGZpbGUuIFlvdSBjYW4gdXBncmFkZSBtYW51YWxseSBvciB1c2luZyBgeWFyblxuICAgKiBhZGQvdXBncmFkZWAuIElmIHlvdSB3aXNoIHRvIHNwZWNpZnkgYSB2ZXJzaW9uIHJhbmdlIHVzZSB0aGlzIHN5bnRheDpcbiAgICogYG1vZHVsZUBeN2AuXG4gICAqL1xuICBwdWJsaWMgYWRkQnVuZGxlZERlcHMoLi4uZGVwczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLmFkZEJ1bmRsZWREZXBzKC4uLmRlcHMpO1xuICB9XG5cbiAgcHVibGljIGFkZFBhY2thZ2VJZ25vcmUocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5ucG1pZ25vcmU/LmFkZFBhdHRlcm5zKHBhdHRlcm4pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRMaWNlbnNlKG9wdGlvbnM6IE5vZGVQcm9qZWN0T3B0aW9ucykge1xuICAgIGlmICh0aGlzLnBhY2thZ2UubGljZW5zZSkge1xuICAgICAgbmV3IExpY2Vuc2UodGhpcywge1xuICAgICAgICBzcGR4OiB0aGlzLnBhY2thZ2UubGljZW5zZSxcbiAgICAgICAgY29weXJpZ2h0T3duZXI6IG9wdGlvbnMuY29weXJpZ2h0T3duZXIgPz8gb3B0aW9ucy5hdXRob3JOYW1lLFxuICAgICAgICBjb3B5cmlnaHRQZXJpb2Q6IG9wdGlvbnMuY29weXJpZ2h0UGVyaW9kLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGREZWZhdWx0R2l0SWdub3JlKCkge1xuICAgIHRoaXMuZ2l0aWdub3JlLmV4Y2x1ZGUoXG4gICAgICBcIiMgTG9nc1wiLFxuICAgICAgXCJsb2dzXCIsXG4gICAgICBcIioubG9nXCIsXG4gICAgICBcIm5wbS1kZWJ1Zy5sb2cqXCIsXG4gICAgICBcInlhcm4tZGVidWcubG9nKlwiLFxuICAgICAgXCJ5YXJuLWVycm9yLmxvZypcIixcbiAgICAgIFwibGVybmEtZGVidWcubG9nKlwiLFxuXG4gICAgICBcIiMgRGlhZ25vc3RpYyByZXBvcnRzIChodHRwczovL25vZGVqcy5vcmcvYXBpL3JlcG9ydC5odG1sKVwiLFxuICAgICAgXCJyZXBvcnQuWzAtOV0qLlswLTldKi5bMC05XSouWzAtOV0qLmpzb25cIixcblxuICAgICAgXCIjIFJ1bnRpbWUgZGF0YVwiLFxuICAgICAgXCJwaWRzXCIsXG4gICAgICBcIioucGlkXCIsXG4gICAgICBcIiouc2VlZFwiLFxuICAgICAgXCIqLnBpZC5sb2NrXCIsXG5cbiAgICAgIFwiIyBEaXJlY3RvcnkgZm9yIGluc3RydW1lbnRlZCBsaWJzIGdlbmVyYXRlZCBieSBqc2NvdmVyYWdlL0pTQ292ZXJcIixcbiAgICAgIFwibGliLWNvdlwiLFxuXG4gICAgICBcIiMgQ292ZXJhZ2UgZGlyZWN0b3J5IHVzZWQgYnkgdG9vbHMgbGlrZSBpc3RhbmJ1bFwiLFxuICAgICAgXCJjb3ZlcmFnZVwiLFxuICAgICAgXCIqLmxjb3ZcIixcblxuICAgICAgXCIjIG55YyB0ZXN0IGNvdmVyYWdlXCIsXG4gICAgICBcIi5ueWNfb3V0cHV0XCIsXG5cbiAgICAgIFwiIyBDb21waWxlZCBiaW5hcnkgYWRkb25zIChodHRwczovL25vZGVqcy5vcmcvYXBpL2FkZG9ucy5odG1sKVwiLFxuICAgICAgXCJidWlsZC9SZWxlYXNlXCIsXG5cbiAgICAgIFwiIyBEZXBlbmRlbmN5IGRpcmVjdG9yaWVzXCIsXG4gICAgICBcIm5vZGVfbW9kdWxlcy9cIixcbiAgICAgIFwianNwbV9wYWNrYWdlcy9cIixcblxuICAgICAgXCIjIFR5cGVTY3JpcHQgY2FjaGVcIixcbiAgICAgIFwiKi50c2J1aWxkaW5mb1wiLFxuXG4gICAgICBcIiMgT3B0aW9uYWwgZXNsaW50IGNhY2hlXCIsXG4gICAgICBcIi5lc2xpbnRjYWNoZVwiLFxuXG4gICAgICBcIiMgT3V0cHV0IG9mICducG0gcGFjaydcIixcbiAgICAgIFwiKi50Z3pcIixcblxuICAgICAgXCIjIFlhcm4gSW50ZWdyaXR5IGZpbGVcIixcbiAgICAgIFwiLnlhcm4taW50ZWdyaXR5XCIsXG5cbiAgICAgIFwiIyBwYXJjZWwtYnVuZGxlciBjYWNoZSAoaHR0cHM6Ly9wYXJjZWxqcy5vcmcvKVwiLFxuICAgICAgXCIuY2FjaGVcIlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2hlbGwgY29tbWFuZCB0byBleGVjdXRlIGluIG9yZGVyIHRvIHJ1biBhIHRhc2suIFRoaXMgd2lsbFxuICAgKiB0eXBpY2FsbHkgYmUgYG5weCBwcm9qZW4gVEFTS2AuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrIFRoZSB0YXNrIGZvciB3aGljaCB0aGUgY29tbWFuZCBpcyByZXF1aXJlZFxuICAgKi9cbiAgcHVibGljIHJ1blRhc2tDb21tYW5kKHRhc2s6IFRhc2spIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wYWNrYWdlLnByb2plbkNvbW1hbmR9ICR7dGFzay5uYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGpvYiBJRCBvZiB0aGUgYnVpbGQgd29ya2Zsb3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJ1aWxkV29ya2Zsb3dKb2JJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZFdvcmtmbG93Py5idWlsZEpvYklkc1swXTtcbiAgfVxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGByZW5kZXJJbnN0YWxsU3RlcHMoKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyV29ya2Zsb3dTZXR1cE9wdGlvbnMge1xuICAvKipcbiAgICogU2hvdWxkIHRoZSBwYWNha2dlIGxvY2tmaWxlIGJlIHVwZGF0ZWQ/XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBtdXRhYmxlPzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -42,5 +42,5 @@ class NpmConfig extends component_1.Component {
42
42
  }
43
43
  exports.NpmConfig = NpmConfig;
44
44
  _a = JSII_RTTI_SYMBOL_1;
45
- NpmConfig[_a] = { fqn: "projen.javascript.NpmConfig", version: "0.53.9" };
45
+ NpmConfig[_a] = { fqn: "projen.javascript.NpmConfig", version: "0.53.12" };
46
46
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qYXZhc2NyaXB0L25wbS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBeUM7QUFDekMsZ0NBQWlDO0FBaUJqQzs7R0FFRztBQUNILE1BQWEsU0FBVSxTQUFRLHFCQUFTO0lBT3RDLFlBQVksT0FBb0IsRUFBRSxVQUE0QixFQUFFO1FBQzlELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQVBqQjs7O1dBR0c7UUFDYyxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBS2hDLElBQUksYUFBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFckQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksV0FBVyxDQUFDLEdBQVcsRUFBRSxLQUFjO1FBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7O0FBbkNILDhCQW9DQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IEluaUZpbGUgfSBmcm9tIFwiLi4vaW5pXCI7XG5pbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5cbi8qKlxuICogT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGxvY2FsIE5QTSBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOcG1Db25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFVSTCBvZiB0aGUgcmVnaXN0cnkgbWlycm9yIHRvIHVzZVxuICAgKlxuICAgKiBZb3UgY2FuIGNoYW5nZSB0aGlzIG9yIGFkZCBzY29wZWQgcmVnaXN0cmllcyB1c2luZyB0aGUgYWRkUmVnaXN0cnkgbWV0aG9kXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIG5wbWpzIGRlZmF1bHQgcmVnaXN0cnlcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdHJ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZpbGUgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBOUE0gY29uZmlnIGluIC5ucG1yY1xuICovXG5leHBvcnQgY2xhc3MgTnBtQ29uZmlnIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBjb25maWcgb2JqZWN0LiBUaGlzIG9iamVjdCBjYW4gYmUgbXV0YXRlZCB1bnRpbCB0aGUgcHJvamVjdCBpc1xuICAgKiBzeW50aGVzaXplZC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBhbnkgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBOb2RlUHJvamVjdCwgb3B0aW9uczogTnBtQ29uZmlnT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICBuZXcgSW5pRmlsZShwcm9qZWN0LCBcIi5ucG1yY1wiLCB7IG9iajogdGhpcy5jb25maWcgfSk7XG5cbiAgICBpZiAob3B0aW9ucy5yZWdpc3RyeSkge1xuICAgICAgdGhpcy5hZGRSZWdpc3RyeShvcHRpb25zLnJlZ2lzdHJ5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogY29uZmlndXJlIGEgc2NvcGVkIHJlZ2lzdHJ5XG4gICAqXG4gICAqIEBwYXJhbSB1cmwgdGhlIFVSTCBvZiB0aGUgcmVnaXN0cnkgdG8gdXNlXG4gICAqIEBwYXJhbSBzY29wZSB0aGUgc2NvcGUgdGhlIHJlZ2lzdHJ5IGlzIHVzZWQgZm9yOyBsZWF2ZSBlbXB0eSBmb3IgdGhlIGRlZmF1bHQgcmVnaXN0cnlcbiAgICovXG4gIHB1YmxpYyBhZGRSZWdpc3RyeSh1cmw6IHN0cmluZywgc2NvcGU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmFkZENvbmZpZyhzY29wZSA/IGAke3Njb3BlfTpyZWdpc3RyeWAgOiBcInJlZ2lzdHJ5XCIsIHVybCk7XG4gIH1cblxuICAvKipcbiAgICogY29uZmlndXJlIGEgZ2VuZXJpYyBwcm9wZXJ0eVxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHlcbiAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHlcbiAgICovXG4gIHB1YmxpYyBhZGRDb25maWcobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jb25maWdbbmFtZV0gPSB2YWx1ZTtcbiAgfVxufVxuIl19
@@ -167,5 +167,5 @@ class Prettier extends component_1.Component {
167
167
  }
168
168
  exports.Prettier = Prettier;
169
169
  _a = JSII_RTTI_SYMBOL_1;
170
- Prettier[_a] = { fqn: "projen.javascript.Prettier", version: "0.53.9" };
170
+ Prettier[_a] = { fqn: "projen.javascript.Prettier", version: "0.53.12" };
171
171
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldHRpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC9wcmV0dGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUF5QztBQUN6QyxnREFBNEM7QUFFNUMsa0NBQW1DO0FBRW5DLGdEQUE0QztBQW1NNUMsSUFBWSxXQVVYO0FBVkQsV0FBWSxXQUFXO0lBQ3JCOztPQUVHO0lBQ0gsZ0NBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCw4QkFBZSxDQUFBO0FBQ2pCLENBQUMsRUFWVyxXQUFXLEdBQVgsbUJBQVcsS0FBWCxtQkFBVyxRQVV0QjtBQUVELElBQVksMEJBVVg7QUFWRCxXQUFZLDBCQUEwQjtJQUNwQzs7T0FFRztJQUNILDJDQUFhLENBQUE7SUFFYjs7T0FFRztJQUNILHlDQUFXLENBQUE7QUFDYixDQUFDLEVBVlcsMEJBQTBCLEdBQTFCLGtDQUEwQixLQUExQixrQ0FBMEIsUUFVckM7QUFFRCxJQUFZLFNBcUJYO0FBckJELFdBQVksU0FBUztJQUNuQjs7O09BR0c7SUFDSCwwQkFBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxzQkFBUyxDQUFBO0lBRVQ7O09BRUc7SUFDSCwwQkFBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxzQkFBUyxDQUFBO0FBQ1gsQ0FBQyxFQXJCVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQXFCcEI7QUFFRCxJQUFZLHlCQWVYO0FBZkQsV0FBWSx5QkFBeUI7SUFDbkM7O09BRUc7SUFDSCx3Q0FBVyxDQUFBO0lBRVg7O09BRUc7SUFDSCw4Q0FBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILDhDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFmVyx5QkFBeUIsR0FBekIsaUNBQXlCLEtBQXpCLGlDQUF5QixRQWVwQztBQXdCRCxJQUFZLFNBZVg7QUFmRCxXQUFZLFNBQVM7SUFDbkI7O09BRUc7SUFDSCw4QkFBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILDRCQUFlLENBQUE7SUFFZjs7T0FFRztJQUNILGtDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFmVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQWVwQjtBQUVELElBQVksVUFlWDtBQWZELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILG9DQUFzQixDQUFBO0lBRXRCOztPQUVHO0lBQ0gsdUNBQXlCLENBQUE7SUFFekI7O09BRUc7SUFDSCxtQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBZlcsVUFBVSxHQUFWLGtCQUFVLEtBQVYsa0JBQVUsUUFlckI7QUFFRCxJQUFZLGFBZVg7QUFmRCxXQUFZLGFBQWE7SUFDdkI7O09BRUc7SUFDSCw0QkFBVyxDQUFBO0lBRVg7O09BRUc7SUFDSCw0QkFBVyxDQUFBO0lBRVg7O09BRUc7SUFDSCw4QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQWZXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBZXhCO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxxQkFBUztJQXNCckMsWUFBWSxPQUFvQixFQUFFLE9BQXdCOztRQUN4RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsVUFBVSxTQUFHLE9BQU8sQ0FBQyxTQUFTLG1DQUFJLEVBQUUsQ0FBQztRQUUxQyxVQUFJLE9BQU8sQ0FBQyxVQUFVLG1DQUFJLElBQUksRUFBRTtZQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksd0JBQVUsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztTQUM5RDtRQUVELE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLEdBQUcsT0FBTyxDQUFDLFFBQVE7U0FDcEIsQ0FBQztRQUVGLElBQUksZUFBUSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRTtZQUN4QyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2xFLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQXhDTSxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQWdCO1FBQy9CLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBWSxFQUFpQixFQUFFLENBQUMsQ0FBQyxZQUFZLFFBQVEsQ0FBQztRQUMxRSxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUF1Q0Q7Ozs7T0FJRztJQUNJLFdBQVcsQ0FBQyxRQUEwQjtRQUMzQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxnQkFBZ0IsQ0FBQyxPQUFlOztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUU7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sYUFBYTtRQUNsQiwwR0FBMEc7UUFDMUcsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFZLEVBQW1CLEVBQUUsQ0FDckQsQ0FBQyxZQUFZLHdCQUFVLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTVFSCw0QkE2RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBJZ25vcmVGaWxlIH0gZnJvbSBcIi4uL2lnbm9yZS1maWxlXCI7XG5pbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBKc29uRmlsZSB9IGZyb20gXCIuLi9qc29uXCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB7IFNvdXJjZUNvZGUgfSBmcm9tIFwiLi4vc291cmNlLWNvZGVcIjtcbi8qKlxuICogT3B0aW9ucyBmb3IgUHJldHRpZXJcbiAqXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldHRpZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIERlZmluZXMgYW4gLnByZXR0aWVySWdub3JlIGZpbGVcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlRmlsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByZXR0aWVyIHNldHRpbmdzLlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgc2V0dGluZ3NcbiAgICovXG4gIHJlYWRvbmx5IHNldHRpbmdzPzogUHJldHRpZXJTZXR0aW5ncztcblxuICAvKipcbiAgICogUHJvdmlkZSBhIGxpc3Qgb2YgcGF0dGVybnMgdG8gb3ZlcnJpZGUgcHJldHRpZXIgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICogQHNlZSBodHRwczovL3ByZXR0aWVyLmlvL2RvY3MvZW4vY29uZmlndXJhdGlvbi5odG1sI2NvbmZpZ3VyYXRpb24tb3ZlcnJpZGVzXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBQcmV0dGllck92ZXJyaWRlW107XG59XG4vKipcbiAqIE9wdGlvbnMgdG8gc2V0IGluIFByZXR0aWVyIGRpcmVjdGx5IG9yIHRocm91Z2ggb3ZlcnJpZGVzXG4gKlxuICogQHNlZSBodHRwczovL3ByZXR0aWVyLmlvL2RvY3MvZW4vb3B0aW9ucy5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldHRpZXJTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBJbmNsdWRlIHBhcmVudGhlc2VzIGFyb3VuZCBhIHNvbGUgYXJyb3cgZnVuY3Rpb24gcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBcnJvd1BhcmVucy5BTFdBWVNcbiAgICovXG4gIHJlYWRvbmx5IGFycm93UGFyZW5zPzogQXJyb3dQYXJlbnM7XG4gIC8qKlxuICAgKiBQdXQgPiBvZiBvcGVuaW5nIHRhZ3Mgb24gdGhlIGxhc3QgbGluZSBpbnN0ZWFkIG9mIG9uIGEgbmV3IGxpbmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuICAvKipcbiAgICogUHJpbnQgc3BhY2VzIGJldHdlZW4gYnJhY2tldHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFByaW50ICh0byBzdGRlcnIpIHdoZXJlIGEgY3Vyc29yIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiB3b3VsZCBtb3ZlIHRvIGFmdGVyIGZvcm1hdHRpbmcuXG4gICAqIFRoaXMgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1yYW5nZS1zdGFydCBhbmQgLS1yYW5nZS1lbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0xXG4gICAqL1xuICByZWFkb25seSBjdXJzb3JPZmZzZXQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBDb250cm9sIGhvdyBQcmV0dGllciBmb3JtYXRzIHF1b3RlZCBjb2RlIGVtYmVkZGVkIGluIHRoZSBmaWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBFbWJlZGRlZExhbmd1YWdlRm9ybWF0dGluZy5BVVRPXG4gICAqL1xuICByZWFkb25seSBlbWJlZGRlZExhbmd1YWdlRm9ybWF0dGluZz86IEVtYmVkZGVkTGFuZ3VhZ2VGb3JtYXR0aW5nO1xuICAvKipcbiAgICogV2hpY2ggZW5kIG9mIGxpbmUgY2hhcmFjdGVycyB0byBhcHBseS5cbiAgICpcbiAgICogQGRlZmF1bHQgRW5kT2ZMaW5lLkxGXG4gICAqL1xuICByZWFkb25seSBlbmRPZkxpbmU/OiBFbmRPZkxpbmU7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBpbnB1dCBmaWxlcGF0aC4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gZG8gcGFyc2VyIGluZmVyZW5jZS5cbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXBhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3cgdG8gaGFuZGxlIHdoaXRlc3BhY2VzIGluIEhUTUwuXG4gICAqXG4gICAqIEBkZWZhdWx0IEhUTUxXaGl0ZXNwYWNlU2Vuc2l0aXZpdHkuQ1NTXG4gICAqL1xuICByZWFkb25seSBodG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5PzogSFRNTFdoaXRlc3BhY2VTZW5zaXRpdml0eTtcbiAgLyoqXG4gICAqIEluc2VydCBAZm9ybWF0IHByYWdtYSBpbnRvIGZpbGUncyBmaXJzdCBkb2NibG9jayBjb21tZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zZXJ0UHJhZ21hPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFVzZSBzaW5nbGUgcXVvdGVzIGluIEpTWC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGpzeFNpbmdsZVF1b3RlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoaWNoIHBhcnNlciB0byB1c2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUHJldHRpZXIgYXV0b21hdGljYWxseSBpbmZlcnMgdGhlIHBhcnNlciBmcm9tIHRoZSBpbnB1dCBmaWxlIHBhdGgsIHNvIHlvdSBzaG91bGRu4oCZdCBoYXZlIHRvIGNoYW5nZSB0aGlzIHNldHRpbmcuXG4gICAqL1xuICByZWFkb25seSBwYXJzZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGQgYSBwbHVnaW4uIE11bHRpcGxlIHBsdWdpbnMgY2FuIGJlIHBhc3NlZCBhcyBzZXBhcmF0ZSBgLS1wbHVnaW5gcy5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbnM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEN1c3RvbSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBwcmV0dGllciBwbHVnaW5zIGluIG5vZGVfbW9kdWxlcyBzdWJkaXJlY3RvcnkuXG4gICAqIE92ZXJyaWRlcyBkZWZhdWx0IGJlaGF2aW9yIHdoZW4gcGx1Z2lucyBhcmUgc2VhcmNoZWQgcmVsYXRpdmVseSB0byB0aGUgbG9jYXRpb24gb2ZcbiAgICogUHJldHRpZXIuXG4gICAqIE11bHRpcGxlIHZhbHVlcyBhcmUgYWNjZXB0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5TZWFyY2hEaXJzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgbGluZSBsZW5ndGggd2hlcmUgUHJldHRpZXIgd2lsbCB0cnkgd3JhcC5cbiAgICpcbiAgICogQGRlZmF1bHQgODBcbiAgICovXG4gIHJlYWRvbmx5IHByaW50V2lkdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBIb3cgdG8gd3JhcCBwcm9zZS5cbiAgICpcbiAgICogQGRlZmF1bHQgUHJvc2VXcmFwLlBSRVNFUlZFXG4gICAqL1xuICByZWFkb25seSBwcm9zZVdyYXA/OiBQcm9zZVdyYXA7XG4gIC8qKlxuICAgKiBDaGFuZ2Ugd2hlbiBwcm9wZXJ0aWVzIGluIG9iamVjdHMgYXJlIHF1b3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgUXVvdGVQcm9wcy5BU05FRURFRFxuICAgKi9cbiAgcmVhZG9ubHkgcXVvdGVQcm9wcz86IFF1b3RlUHJvcHM7XG4gIC8qKlxuICAgKiBGb3JtYXQgY29kZSBlbmRpbmcgYXQgYSBnaXZlbiBjaGFyYWN0ZXIgb2Zmc2V0IChleGNsdXNpdmUpLlxuICAgKiBUaGUgcmFuZ2Ugd2lsbCBleHRlbmQgZm9yd2FyZHMgdG8gdGhlIGVuZCBvZiB0aGUgc2VsZWN0ZWQgc3RhdGVtZW50LlxuICAgKiBUaGlzIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tY3Vyc29yLW9mZnNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgcmVhZG9ubHkgcmFuZ2VFbmQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBGb3JtYXQgY29kZSBzdGFydGluZyBhdCBhIGdpdmVuIGNoYXJhY3RlciBvZmZzZXQuXG4gICAqIFRoZSByYW5nZSB3aWxsIGV4dGVuZCBiYWNrd2FyZHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBsaW5lIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGVkXG4gICAqIHN0YXRlbWVudC5cbiAgICogVGhpcyBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCAtLWN1cnNvci1vZmZzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IHJhbmdlU3RhcnQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBSZXF1aXJlIGVpdGhlciAnQHByZXR0aWVyJyBvciAnQGZvcm1hdCcgdG8gYmUgcHJlc2VudCBpbiB0aGUgZmlsZSdzIGZpcnN0IGRvY2Jsb2NrXG4gICAqIGNvbW1lbnRcbiAgICogaW4gb3JkZXIgZm9yIGl0IHRvIGJlIGZvcm1hdHRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVQcmFnbWE/OiBib29sZWFuO1xuICAvKipcbiAgICogUHJpbnQgc2VtaWNvbG9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VtaT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBVc2Ugc2luZ2xlIHF1b3RlcyBpbnN0ZWFkIG9mIGRvdWJsZSBxdW90ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzaW5nbGVRdW90ZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc3BhY2VzIHBlciBpbmRlbnRhdGlvbiBsZXZlbC5cbiAgICpcbiAgICogQGRlZmF1bHQgMlxuICAgKi9cbiAgcmVhZG9ubHkgdGFiV2lkdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQcmludCB0cmFpbGluZyBjb21tYXMgd2hlcmV2ZXIgcG9zc2libGUgd2hlbiBtdWx0aS1saW5lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUcmFpbGluZ0NvbW1hLkVTNVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdDb21tYT86IFRyYWlsaW5nQ29tbWE7XG4gIC8qKlxuICAgKiBJbmRlbnQgd2l0aCB0YWJzIGluc3RlYWQgb2Ygc3BhY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlVGFicz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRlbnQgc2NyaXB0IGFuZCBzdHlsZSB0YWdzIGluIFZ1ZSBmaWxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHZ1ZUluZGVudFNjcmlwdEFuZFN0eWxlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gQXJyb3dQYXJlbnMge1xuICAvKipcbiAgICogQWx3YXlzIGluY2x1ZGUgcGFyZW5zLiBFeGFtcGxlOiBgKHgpID0+IHhgXG4gICAqL1xuICBBTFdBWVMgPSBcImFsd2F5c1wiLFxuXG4gIC8qKlxuICAgKiBPbWl0IHBhcmVucyB3aGVuIHBvc3NpYmxlLiBFeGFtcGxlOiBgeCA9PiB4YFxuICAgKi9cbiAgQVZPSUQgPSBcImF2b2lkXCIsXG59XG5cbmV4cG9ydCBlbnVtIEVtYmVkZGVkTGFuZ3VhZ2VGb3JtYXR0aW5nIHtcbiAgLyoqXG4gICAqIEZvcm1hdCBlbWJlZGRlZCBjb2RlIGlmIFByZXR0aWVyIGNhbiBhdXRvbWF0aWNhbGx5IGlkZW50aWZ5IGl0LlxuICAgKi9cbiAgQVVUTyA9IFwiYXV0b1wiLFxuXG4gIC8qKlxuICAgKiBOZXZlciBhdXRvbWF0aWNhbGx5IGZvcm1hdCBlbWJlZGRlZCBjb2RlLlxuICAgKi9cbiAgT0ZGID0gXCJvZmZcIixcbn1cblxuZXhwb3J0IGVudW0gRW5kT2ZMaW5lIHtcbiAgLyoqXG4gICAqIE1haW50YWluIGV4aXN0aW5nIChtaXhlZCB2YWx1ZXMgd2l0aGluIG9uZSBmaWxlIGFyZSBub3JtYWxpc2VkIGJ5IGxvb2tpbmdcbiAgICogYXQgd2hhdCdzIHVzZWQgYWZ0ZXIgdGhlIGZpcnN0IGxpbmUpXG4gICAqL1xuICBBVVRPID0gXCJhdXRvXCIsXG5cbiAgLyoqXG4gICAqIENhcnJpYWdlIFJldHVybiBjaGFyYWN0ZXIgb25seSAoXFxyKSwgdXNlZCB2ZXJ5IHJhcmVseVxuICAgKi9cbiAgQ1IgPSBcImNyXCIsXG5cbiAgLyoqXG4gICAqIENhcnJpYWdlIFJldHVybiArIExpbmUgRmVlZCBjaGFyYWN0ZXJzIChcXHJcXG4pLCBjb21tb24gb24gV2luZG93c1xuICAgKi9cbiAgQ1JMRiA9IFwiY3JsZlwiLFxuXG4gIC8qKlxuICAgKiBMaW5lIEZlZWQgb25seSAoXFxuKSwgY29tbW9uIG9uIExpbnV4IGFuZCBtYWNPUyBhcyB3ZWxsIGFzIGluc2lkZSBnaXQgcmVwb3NcbiAgICovXG4gIExGID0gXCJsZlwiLFxufVxuXG5leHBvcnQgZW51bSBIVE1MV2hpdGVzcGFjZVNlbnNpdGl2aXR5IHtcbiAgLyoqXG4gICAqIFJlc3BlY3QgdGhlIGRlZmF1bHQgdmFsdWUgb2YgQ1NTIGRpc3BsYXkgcHJvcGVydHkuXG4gICAqL1xuICBDU1MgPSBcImNzc1wiLFxuXG4gIC8qKlxuICAgKiBXaGl0ZXNwYWNlcyBhcmUgY29uc2lkZXJlZCBpbnNpZ25pZmljYW50LlxuICAgKi9cbiAgSUdOT1JFID0gXCJpZ25vcmVcIixcblxuICAvKipcbiAgICogV2hpdGVzcGFjZXMgYXJlIGNvbnNpZGVyZWQgc2lnbmlmaWNhbnQuXG4gICAqL1xuICBTVFJJQ1QgPSBcInN0cmljdFwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByZXR0aWVyT3ZlcnJpZGUge1xuICAvKipcbiAgICogRXhjbHVkZSB0aGVzZSBmaWxlcyBmcm9tIHRoaXMgb3ZlcnJpZGUuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlRmlsZXM/OiBGaWxlcztcbiAgLyoqXG4gICAqIEluY2x1ZGUgdGhlc2UgZmlsZXMgaW4gdGhpcyBvdmVycmlkZS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzOiBGaWxlcztcbiAgLyoqXG4gICAqIFRoZSBvcHRpb25zIHRvIGFwcGx5IGZvciB0aGlzIG92ZXJyaWRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dGluZ3M6IFByZXR0aWVyU2V0dGluZ3M7XG59XG5cbi8qKlxuICogRXhjbHVkZSB0aGVzZSBmaWxlcyBmcm9tIHRoaXMgb3ZlcnJpZGUuXG4gKlxuICogSW5jbHVkZSB0aGVzZSBmaWxlcyBpbiB0aGlzIG92ZXJyaWRlLlxuICovXG5leHBvcnQgdHlwZSBGaWxlcyA9IHN0cmluZ1tdIHwgc3RyaW5nO1xuXG5leHBvcnQgZW51bSBQcm9zZVdyYXAge1xuICAvKipcbiAgICogV3JhcCBwcm9zZSBpZiBpdCBleGNlZWRzIHRoZSBwcmludCB3aWR0aC5cbiAgICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG5cbiAgLyoqXG4gICAqIERvIG5vdCB3cmFwIHByb3NlLlxuICAgKi9cbiAgTkVWRVIgPSBcIm5ldmVyXCIsXG5cbiAgLyoqXG4gICAqIFdyYXAgcHJvc2UgYXMtaXMuXG4gICAqL1xuICBQUkVTRVJWRSA9IFwicHJlc2VydmVcIixcbn1cblxuZXhwb3J0IGVudW0gUXVvdGVQcm9wcyB7XG4gIC8qKlxuICAgKiBPbmx5IGFkZCBxdW90ZXMgYXJvdW5kIG9iamVjdCBwcm9wZXJ0aWVzIHdoZXJlIHJlcXVpcmVkLlxuICAgKi9cbiAgQVNORUVERUQgPSBcImFzLW5lZWRlZFwiLFxuXG4gIC8qKlxuICAgKiBJZiBhdCBsZWFzdCBvbmUgcHJvcGVydHkgaW4gYW4gb2JqZWN0IHJlcXVpcmVzIHF1b3RlcywgcXVvdGUgYWxsIHByb3BlcnRpZXMuXG4gICAqL1xuICBDT05TSVNURU5UID0gXCJjb25zaXN0ZW50XCIsXG5cbiAgLyoqXG4gICAqIFJlc3BlY3QgdGhlIGlucHV0IHVzZSBvZiBxdW90ZXMgaW4gb2JqZWN0IHByb3BlcnRpZXMuXG4gICAqL1xuICBQUkVTRVJWRSA9IFwicHJlc2VydmVcIixcbn1cblxuZXhwb3J0IGVudW0gVHJhaWxpbmdDb21tYSB7XG4gIC8qKlxuICAgKiBUcmFpbGluZyBjb21tYXMgd2hlcmV2ZXIgcG9zc2libGUgKGluY2x1ZGluZyBmdW5jdGlvbiBhcmd1bWVudHMpLlxuICAgKi9cbiAgQUxMID0gXCJhbGxcIixcblxuICAvKipcbiAgICogVHJhaWxpbmcgY29tbWFzIHdoZXJlIHZhbGlkIGluIEVTNSAob2JqZWN0cywgYXJyYXlzLCBldGMuKVxuICAgKi9cbiAgRVM1ID0gXCJlczVcIixcblxuICAvKipcbiAgICogTm8gdHJhaWxpbmcgY29tbWFzLlxuICAgKi9cbiAgTk9ORSA9IFwibm9uZVwiLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgcHJldHRpZXIgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFByZXR0aWVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogUHJldHRpZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzUHJldHRpZXIgPSAoYzogQ29tcG9uZW50KTogYyBpcyBQcmV0dGllciA9PiBjIGluc3RhbmNlb2YgUHJldHRpZXI7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzUHJldHRpZXIpO1xuICB9XG4gIC8qKlxuICAgKiBEaXJlY3QgYWNjZXNzIHRvIHRoZSBwcmV0dGllciBzZXR0aW5nc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNldHRpbmdzOiBQcmV0dGllclNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBUaGUgLnByZXR0aWVySWdub3JlIGZpbGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWdub3JlRmlsZT86IElnbm9yZUZpbGU7XG5cbiAgLyoqXG4gICAqIERpcmVjdCBhY2Nlc3MgdG8gdGhlIHByZXR0aWVyIG92ZXJyaWRlc1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX292ZXJyaWRlczogUHJldHRpZXJPdmVycmlkZVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBQcmV0dGllck9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuX292ZXJyaWRlcyA9IG9wdGlvbnMub3ZlcnJpZGVzID8/IFtdO1xuXG4gICAgaWYgKG9wdGlvbnMuaWdub3JlRmlsZSA/PyB0cnVlKSB7XG4gICAgICB0aGlzLmlnbm9yZUZpbGUgPSBuZXcgSWdub3JlRmlsZShwcm9qZWN0LCBcIi5wcmV0dGllcmlnbm9yZVwiKTtcbiAgICB9XG5cbiAgICBwcm9qZWN0LmFkZERldkRlcHMoXCJwcmV0dGllclwiKTtcblxuICAgIHRoaXMuc2V0dGluZ3MgPSB7XG4gICAgICAuLi5vcHRpb25zLnNldHRpbmdzLFxuICAgIH07XG5cbiAgICBuZXcgSnNvbkZpbGUocHJvamVjdCwgXCIucHJldHRpZXJyYy5qc29uXCIsIHtcbiAgICAgIG9iajogKCkgPT4gKHsgLi4udGhpcy5zZXR0aW5ncywgb3ZlcnJpZGVzOiBbLi4udGhpcy5fb3ZlcnJpZGVzXSB9KSxcbiAgICAgIG1hcmtlcjogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcHJldHRpZXIgb3ZlcnJpZGVcbiAgICogQHNlZSBodHRwczovL3ByZXR0aWVyLmlvL2RvY3MvZW4vY29uZmlndXJhdGlvbi5odG1sI2NvbmZpZ3VyYXRpb24tb3ZlcnJpZGVzXG4gICAqIEBwYXJhbSB7UHJldHRpZXJPdmVycmlkZX0gb3ZlcnJpZGVcbiAgICovXG4gIHB1YmxpYyBhZGRPdmVycmlkZShvdmVycmlkZTogUHJldHRpZXJPdmVycmlkZSkge1xuICAgIHRoaXMub3ZlcnJpZGVzLnB1c2gob3ZlcnJpZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgUHJldHRpZXIgaWdub3JlIFBhdHRlcm5zXG4gICAqIHRoZXNlIHBhdHRlcm5zIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGZpbGUgLnByZXR0aWVyaWdub3JlXG4gICAqXG4gICAqIEBwYXJhbSBwYXR0ZXJuIGZpbGVwYXR0ZXJucyBzbyBleGNsdWRlIGZyb20gcHJldHRpZXIgZm9ybWF0dGluZ1xuICAgKi9cbiAgcHVibGljIGFkZElnbm9yZVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5pZ25vcmVGaWxlPy5hZGRQYXR0ZXJucyhwYXR0ZXJuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgQWNjZXNzIHRvIHRoZSBQcmV0dGllcm92ZXJyaWRlcyB0byBleHRlbmQgdGhvc2VcbiAgICovXG4gIHB1YmxpYyBnZXQgb3ZlcnJpZGVzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5fb3ZlcnJpZGVzXTtcbiAgfVxuXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCkge1xuICAgIC8vIEFkZCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBTb3VyY2VDb2RlIGZpbGVzIHRvIC5wcmV0dGllcmlnbm9yZSBhcyB0aGV5IG1heSBub3QgYmUgZm9ybWF0dGVkIGNvcnJlY3RseS5cbiAgICBjb25zdCBpc1NvdXJjZUNvZGUgPSAoYzogQ29tcG9uZW50KTogYyBpcyBTb3VyY2VDb2RlID0+XG4gICAgICBjIGluc3RhbmNlb2YgU291cmNlQ29kZTtcbiAgICB0aGlzLnByb2plY3QuY29tcG9uZW50cy5maWx0ZXIoaXNTb3VyY2VDb2RlKS5mb3JFYWNoKChjKSA9PiB7XG4gICAgICB0aGlzLmFkZElnbm9yZVBhdHRlcm4oYy5maWxlUGF0aCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -50,5 +50,5 @@ class Projenrc extends component_1.Component {
50
50
  }
51
51
  exports.Projenrc = Projenrc;
52
52
  _a = JSII_RTTI_SYMBOL_1;
53
- Projenrc[_a] = { fqn: "projen.javascript.Projenrc", version: "0.53.9" };
53
+ Projenrc[_a] = { fqn: "projen.javascript.Projenrc", version: "0.53.12" };
54
54
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVucmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC9wcm9qZW5yYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJCQUErQztBQUMvQywrQkFBK0I7QUFDL0IsNENBQXlDO0FBRXpDLHFEQUEyRDtBQVMzRDs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLHFCQUFTO0lBR3JDLFlBQVksT0FBZ0IsRUFBRSxVQUEyQixFQUFFOztRQUN6RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsTUFBTSxTQUFHLE9BQU8sQ0FBQyxRQUFRLG1DQUFJLGNBQWMsQ0FBQztRQUVqRCx5REFBeUQ7UUFDekQsTUFBQSxPQUFPLENBQUMsV0FBVywwQ0FBRSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFFakQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLE1BQU0sR0FBRyxjQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELElBQUksZUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxpQkFBaUI7U0FDMUI7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsT0FBTztTQUNSO1FBRUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQyxNQUFNLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxHQUFHLHdDQUF1QixDQUFDO1lBQzNELFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtZQUM1QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7WUFDcEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1NBQ3JCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUNsQyxLQUFLLENBQUMsSUFBSSxDQUNSLFdBQVcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLFVBQVUsS0FBSyxDQUMxRSxDQUFDO1FBQ0YsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsU0FBUyxJQUFJLGVBQWUsSUFBSSxDQUFDLENBQUM7UUFDcEUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRS9CLGtCQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3RCLDBDQUEwQyxNQUFNLEVBQUUsQ0FDbkQsQ0FBQztJQUNKLENBQUM7O0FBbkRILDRCQW9EQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyByZW5kZXJKYXZhU2NyaXB0T3B0aW9ucyB9IGZyb20gXCIuL3JlbmRlci1vcHRpb25zXCI7XG5leHBvcnQgaW50ZXJmYWNlIFByb2plbnJjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVucmMgZmlsZS5cbiAgICogQGRlZmF1bHQgXCIucHJvamVucmMuanNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZW5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2V0cyB1cCBhIGphdmFzY3JpcHQgcHJvamVjdCB0byB1c2UgVHlwZVNjcmlwdCBmb3IgcHJvamVucmMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9qZW5yYyBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmNmaWxlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogUHJvamVucmNPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMucmNmaWxlID0gb3B0aW9ucy5maWxlbmFtZSA/PyBcIi5wcm9qZW5yYy5qc1wiO1xuXG4gICAgLy8gdGhpcyBpcyB0aGUgdGFzayBwcm9qZW4gZXhlY3V0ZXMgd2hlbiBydW5uaW5nIGBwcm9qZW5gXG4gICAgcHJvamVjdC5kZWZhdWx0VGFzaz8uZXhlYyhgbm9kZSAke3RoaXMucmNmaWxlfWApO1xuXG4gICAgdGhpcy5nZW5lcmF0ZVByb2plbnJjKCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlUHJvamVucmMoKSB7XG4gICAgY29uc3QgcmNmaWxlID0gcmVzb2x2ZSh0aGlzLnByb2plY3Qub3V0ZGlyLCB0aGlzLnJjZmlsZSk7XG4gICAgaWYgKGV4aXN0c1N5bmMocmNmaWxlKSkge1xuICAgICAgcmV0dXJuOyAvLyBhbHJlYWR5IGV4aXN0c1xuICAgIH1cblxuICAgIGNvbnN0IGJvb3RzdHJhcCA9IHRoaXMucHJvamVjdC5pbml0UHJvamVjdDtcbiAgICBpZiAoIWJvb3RzdHJhcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0gYm9vdHN0cmFwLmZxbi5zcGxpdChcIi5cIik7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IHBhcnRzWzBdO1xuICAgIGNvbnN0IGltcG9ydE5hbWUgPSBwYXJ0c1sxXTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKFwiLlwiKTtcblxuICAgIGNvbnN0IHsgcmVuZGVyZWRPcHRpb25zLCBpbXBvcnRzIH0gPSByZW5kZXJKYXZhU2NyaXB0T3B0aW9ucyh7XG4gICAgICBjb21tZW50czogYm9vdHN0cmFwLmNvbW1lbnRzLFxuICAgICAgYXJnczogYm9vdHN0cmFwLmFyZ3MsXG4gICAgICB0eXBlOiBib290c3RyYXAudHlwZSxcbiAgICB9KTtcblxuICAgIGltcG9ydHMuYWRkKGltcG9ydE5hbWUpO1xuXG4gICAgY29uc3QgbGluZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgY29uc3QgeyAke1suLi5pbXBvcnRzXS5zb3J0KCkuam9pbihcIiwgXCIpfSB9ID0gcmVxdWlyZShcIiR7bW9kdWxlTmFtZX1cIik7YFxuICAgICk7XG4gICAgbGluZXMucHVzaCgpO1xuICAgIGxpbmVzLnB1c2goYGNvbnN0IHByb2plY3QgPSBuZXcgJHtjbGFzc05hbWV9KCR7cmVuZGVyZWRPcHRpb25zfSk7YCk7XG4gICAgbGluZXMucHVzaCgpO1xuICAgIGxpbmVzLnB1c2goXCJwcm9qZWN0LnN5bnRoKCk7XCIpO1xuXG4gICAgd3JpdGVGaWxlU3luYyhyY2ZpbGUsIGxpbmVzLmpvaW4oXCJcXG5cIikpO1xuICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcbiAgICAgIGBQcm9qZWN0IGRlZmluaXRpb24gZmlsZSB3YXMgY3JlYXRlZCBhdCAke3JjZmlsZX1gXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -80,5 +80,5 @@ class TypescriptConfig {
80
80
  }
81
81
  exports.TypescriptConfig = TypescriptConfig;
82
82
  _a = JSII_RTTI_SYMBOL_1;
83
- TypescriptConfig[_a] = { fqn: "projen.javascript.TypescriptConfig", version: "0.53.9" };
83
+ TypescriptConfig[_a] = { fqn: "projen.javascript.TypescriptConfig", version: "0.53.12" };
84
84
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC90eXBlc2NyaXB0LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLGtDQUFtQztBQTJCbkM7Ozs7R0FJRztBQUNILElBQVksMEJBY1g7QUFkRCxXQUFZLDBCQUEwQjtJQUNwQzs7OztPQUlHO0lBQ0gsaURBQW1CLENBQUE7SUFFbkI7Ozs7T0FJRztJQUNILDJDQUFhLENBQUE7QUFDZixDQUFDLEVBZFcsMEJBQTBCLEdBQTFCLGtDQUEwQixLQUExQixrQ0FBMEIsUUFjckM7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxpQkEyQlg7QUEzQkQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCwwQ0FBcUIsQ0FBQTtJQUVyQjs7T0FFRztJQUNILG9DQUFlLENBQUE7SUFFZjs7T0FFRztJQUNILGtEQUE2QixDQUFBO0lBRTdCOzs7O09BSUc7SUFDSCw0Q0FBdUIsQ0FBQTtJQUV2Qjs7T0FFRztJQUNILGtEQUE2QixDQUFBO0FBQy9CLENBQUMsRUEzQlcsaUJBQWlCLEdBQWpCLHlCQUFpQixLQUFqQix5QkFBaUIsUUEyQjVCO0FBMFJELE1BQWEsZ0JBQWdCO0lBTzNCLFlBQVksT0FBb0IsRUFBRSxPQUFnQzs7UUFDaEUsTUFBTSxRQUFRLFNBQUcsT0FBTyxDQUFDLFFBQVEsbUNBQUksZUFBZSxDQUFDO1FBRXJELElBQUksQ0FBQyxPQUFPLFNBQUcsT0FBTyxDQUFDLE9BQU8sbUNBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTyxTQUFHLE9BQU8sQ0FBQyxPQUFPLG1DQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO1FBRS9DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxlQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRTtZQUMxQyxHQUFHLEVBQUU7Z0JBQ0gsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO2dCQUNyQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU87Z0JBQzNCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTzthQUM1QjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQUEsT0FBTyxDQUFDLFNBQVMsMENBQUUsT0FBTyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUU7SUFDN0MsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUFlO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxVQUFVLENBQUMsT0FBZTtRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDOztBQWpDSCw0Q0FrQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBKc29uRmlsZSB9IGZyb20gXCIuLi9qc29uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZXNjcmlwdENvbmZpZ09wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgXCJ0c2NvbmZpZy5qc29uXCJcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogU3BlY2lmaWVzIGEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zIHRoYXQgbWF0Y2ggVHlwZVNjcmlwdCBmaWxlcyB0byBiZSBpbmNsdWRlZCBpbiBjb21waWxhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbGwgLnRzIGZpbGVzIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgcmVzdWx0cyBmcm9tIHRoZSBcImluY2x1ZGVcIiBvcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9kZV9tb2R1bGVzIGlzIGV4Y2x1ZGVkIGJ5IGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ29tcGlsZXIgb3B0aW9ucyB0byB1c2UuXG4gICAqL1xuICByZWFkb25seSBjb21waWxlck9wdGlvbnM6IFR5cGVTY3JpcHRDb21waWxlck9wdGlvbnM7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBob3cgbW9kdWxlcyBnZXQgcmVzb2x2ZWQuXG4gKlxuICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9tb2R1bGUtcmVzb2x1dGlvbi5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIFR5cGVTY3JpcHRNb2R1bGVSZXNvbHV0aW9uIHtcbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQncyBmb3JtZXIgZGVmYXVsdCByZXNvbHV0aW9uIHN0cmF0ZWd5LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL21vZHVsZS1yZXNvbHV0aW9uLmh0bWwjY2xhc3NpY1xuICAgKi9cbiAgQ0xBU1NJQyA9IFwiY2xhc3NpY1wiLFxuXG4gIC8qKlxuICAgKiBSZXNvbHV0aW9uIHN0cmF0ZWd5IHdoaWNoIGF0dGVtcHRzIHRvIG1pbWljIHRoZSBOb2RlLmpzIG1vZHVsZSByZXNvbHV0aW9uIHN0cmF0ZWd5IGF0IHJ1bnRpbWUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svbW9kdWxlLXJlc29sdXRpb24uaHRtbCNub2RlXG4gICAqL1xuICBOT0RFID0gXCJub2RlXCIsXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBob3cgSlNYIHNob3VsZCBnZXQgdHJhbnNmb3JtZWQgaW50byB2YWxpZCBKYXZhU2NyaXB0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svanN4Lmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gVHlwZVNjcmlwdEpzeE1vZGUge1xuICAvKipcbiAgICogS2VlcHMgdGhlIEpTWCBhcyBwYXJ0IG9mIHRoZSBvdXRwdXQgdG8gYmUgZnVydGhlciBjb25zdW1lZCBieSBhbm90aGVyIHRyYW5zZm9ybSBzdGVwIChlLmcuIEJhYmVsKS5cbiAgICovXG4gIFBSRVNFUlZFID0gXCJwcmVzZXJ2ZVwiLFxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBKU1ggc3ludGF4IGludG8gUmVhY3QuY3JlYXRlRWxlbWVudCwgZG9lcyBub3QgbmVlZCB0byBnbyB0aHJvdWdoIGEgSlNYIHRyYW5zZm9ybWF0aW9uIGJlZm9yZSB1c2UsIGFuZCB0aGUgb3V0cHV0IHdpbGwgaGF2ZSBhIC5qcyBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIFJFQUNUID0gXCJyZWFjdFwiLFxuXG4gIC8qKlxuICAgKiBLZWVwcyBhbGwgSlNYIGxpa2UgJ3ByZXNlcnZlJyBtb2RlLCBidXQgb3V0cHV0IHdpbGwgaGF2ZSBhIC5qcyBleHRlbnNpb24uXG4gICAqL1xuICBSRUFDVF9OQVRJVkUgPSBcInJlYWN0LW5hdGl2ZVwiLFxuXG4gIC8qKlxuICAgKiBQYXNzZXMgYGtleWAgc2VwYXJhdGVseSBmcm9tIHByb3BzIGFuZCBhbHdheXMgcGFzc2VzIGBjaGlsZHJlbmAgYXMgcHJvcHMgKHNpbmNlIFJlYWN0IDE3KS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9yZWxlYXNlLW5vdGVzL3R5cGVzY3JpcHQtNC0xLmh0bWwjcmVhY3QtMTctanN4LWZhY3Rvcmllc1xuICAgKi9cbiAgUkVBQ1RfSlNYID0gXCJyZWFjdC1qc3hcIixcblxuICAvKipcbiAgICogU2FtZSBhcyBgUkVBQ1RfSlNYYCB3aXRoIGFkZGl0aW9uYWwgZGVidWcgZGF0YS5cbiAgICovXG4gIFJFQUNUX0pTWERFViA9IFwicmVhY3QtanN4ZGV2XCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNjcmlwdENvbXBpbGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbGxvdyBKYXZhU2NyaXB0IGZpbGVzIHRvIGJlIGNvbXBpbGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dKcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhhdCB5b3VyIGZpbGVzIGFyZSBwYXJzZWQgaW4gdGhlIEVDTUFTY3JpcHQgc3RyaWN0IG1vZGUsIGFuZCBlbWl0IOKAnHVzZSBzdHJpY3TigJ1cbiAgICogZm9yIGVhY2ggc291cmNlIGZpbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFsd2F5c1N0cmljdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9mZmVycyBhIHdheSB0byBjb25maWd1cmUgdGhlIHJvb3QgZGlyZWN0b3J5IGZvciB3aGVyZSBkZWNsYXJhdGlvbiBmaWxlcyBhcmUgZW1pdHRlZC5cbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGRlY2xhcmF0aW9uRGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUbyBiZSBzcGVjaWZpZWQgYWxvbmcgd2l0aCB0aGUgYWJvdmVcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGRlY2xhcmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW1pdCBfX2ltcG9ydFN0YXIgYW5kIF9faW1wb3J0RGVmYXVsdCBoZWxwZXJzIGZvciBydW50aW1lIGJhYmVsXG4gICAqIGVjb3N5c3RlbSBjb21wYXRpYmlsaXR5IGFuZCBlbmFibGUgLS1hbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzIGZvclxuICAgKiB0eXBlc3lzdGVtIGNvbXBhdGliaWxpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlc01vZHVsZUludGVyb3A/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBkZWNvcmF0b3JzLCB3aGljaCBpcyBpbiBzdGFnZSAyIG9mIHRoZSBUQzM5IHN0YW5kYXJkaXphdGlvbiBwcm9jZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBleHBlcmltZW50YWxEZWNvcmF0b3JzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgZGVjb3JhdG9ycywgd2hpY2ggaXMgaW4gc3RhZ2UgMiBvZiB0aGUgVEMzOSBzdGFuZGFyZGl6YXRpb24gcHJvY2Vzcy5cbiAgICogRGVjb3JhdG9ycyBhcmUgYSBsYW5ndWFnZSBmZWF0dXJlIHdoaWNoIGhhc27igJl0IHlldCBiZWVuIGZ1bGx5IHJhdGlmaWVkIGludG8gdGhlIEphdmFTY3JpcHQgc3BlY2lmaWNhdGlvbi5cbiAgICogVGhpcyBtZWFucyB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiB2ZXJzaW9uIGluIFR5cGVTY3JpcHQgbWF5IGRpZmZlciBmcm9tIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBKYXZhU2NyaXB0IHdoZW4gaXQgaXQgZGVjaWRlZCBieSBUQzM5LlxuICAgKiBZb3UgY2FuIGZpbmQgb3V0IG1vcmUgYWJvdXQgZGVjb3JhdG9yIHN1cHBvcnQgaW4gVHlwZVNjcmlwdCBpbiB0aGUgaGFuZGJvb2suXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svZGVjb3JhdG9ycy5odG1sXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZW1pdERlY29yYXRvck1ldGFkYXRhPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWxsb3cgaW5jb25zaXN0ZW50bHktY2FzZWQgcmVmZXJlbmNlcyB0byB0aGUgc2FtZSBmaWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2VDb25zaXN0ZW50Q2FzaW5nSW5GaWxlTmFtZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCwgaW5zdGVhZCBvZiB3cml0aW5nIG91dCBhIC5qcy5tYXAgZmlsZSB0byBwcm92aWRlIHNvdXJjZSBtYXBzLFxuICAgKiBUeXBlU2NyaXB0IHdpbGwgZW1iZWQgdGhlIHNvdXJjZSBtYXAgY29udGVudCBpbiB0aGUgLmpzIGZpbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBpbmxpbmVTb3VyY2VNYXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHNldCwgVHlwZVNjcmlwdCB3aWxsIGluY2x1ZGUgdGhlIG9yaWdpbmFsIGNvbnRlbnQgb2YgdGhlIC50cyBmaWxlIGFzIGFuIGVtYmVkZGVkXG4gICAqIHN0cmluZyBpbiB0aGUgc291cmNlIG1hcC4gVGhpcyBpcyBvZnRlbiB1c2VmdWwgaW4gdGhlIHNhbWUgY2FzZXMgYXMgaW5saW5lU291cmNlTWFwLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBpbmxpbmVTb3VyY2VzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyB0byBlbnN1cmUgdGhhdCBzZXBhcmF0ZSBjb21waWxhdGlvbiAoc3VjaCBhc1xuICAgKiB3aXRoIHRyYW5zcGlsZU1vZHVsZSBvciBAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS10eXBlc2NyaXB0KSB3b3VsZCBiZSBzYWZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNvbGF0ZWRNb2R1bGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3VwcG9ydCBKU1ggaW4gLnRzeCBmaWxlczogXCJyZWFjdFwiLCBcInByZXNlcnZlXCIsIFwicmVhY3QtbmF0aXZlXCIgZXRjLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGpzeD86IFR5cGVTY3JpcHRKc3hNb2RlO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgZm9yIHR5cGUgZGVmaW5pdGlvbnMgLyBsaWJyYXJpZXMgdG8gdXNlIChlZy4gRVMyMDE2LCBFUzUsIEVTMjAxOCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsgXCJlczIwMThcIiBdXG4gICAqL1xuICByZWFkb25seSBsaWI/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgbW9kdWxlIHN5c3RlbSBmb3IgdGhlIHByb2dyYW0uXG4gICAqIFNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9tb2R1bGVzLmh0bWwjYW1iaWVudC1tb2R1bGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIkNvbW1vbkpTXCJcbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZT86IHN0cmluZztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGhvdyBtb2R1bGVzIGdldCByZXNvbHZlZC4gRWl0aGVyIFwiTm9kZVwiIGZvciBOb2RlLmpzL2lvLmpzIHN0eWxlIHJlc29sdXRpb24sIG9yIFwiQ2xhc3NpY1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIm5vZGVcIlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlUmVzb2x1dGlvbj86IFR5cGVTY3JpcHRNb2R1bGVSZXNvbHV0aW9uO1xuXG4gIC8qKlxuICAgKiBEbyBub3QgZW1pdCBvdXRwdXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9FbWl0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG8gbm90IGVtaXQgY29tcGlsZXIgb3V0cHV0IGZpbGVzIGxpa2UgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSwgc291cmNlLW1hcHMgb3JcbiAgICogZGVjbGFyYXRpb25zIGlmIGFueSBlcnJvcnMgd2VyZSByZXBvcnRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9FbWl0T25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlcG9ydCBlcnJvcnMgZm9yIGZhbGx0aHJvdWdoIGNhc2VzIGluIHN3aXRjaCBzdGF0ZW1lbnRzLiBFbnN1cmVzIHRoYXQgYW55IG5vbi1lbXB0eVxuICAgKiBjYXNlIGluc2lkZSBhIHN3aXRjaCBzdGF0ZW1lbnQgaW5jbHVkZXMgZWl0aGVyIGJyZWFrIG9yIHJldHVybi4gVGhpcyBtZWFucyB5b3Ugd29u4oCZdFxuICAgKiBhY2NpZGVudGFsbHkgc2hpcCBhIGNhc2UgZmFsbHRocm91Z2ggYnVnLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBub0ZhbGx0aHJvdWdoQ2FzZXNJblN3aXRjaD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluIHNvbWUgY2FzZXMgd2hlcmUgbm8gdHlwZSBhbm5vdGF0aW9ucyBhcmUgcHJlc2VudCwgVHlwZVNjcmlwdCB3aWxsIGZhbGwgYmFjayB0byBhXG4gICAqIHR5cGUgb2YgYW55IGZvciBhIHZhcmlhYmxlIHdoZW4gaXQgY2Fubm90IGluZmVyIHRoZSB0eXBlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBub0ltcGxpY2l0QW55PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiBlbmFibGVkLCBUeXBlU2NyaXB0IHdpbGwgY2hlY2sgYWxsIGNvZGUgcGF0aHMgaW4gYSBmdW5jdGlvbiB0byBlbnN1cmUgdGhleVxuICAgKiByZXR1cm4gYSB2YWx1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9JbXBsaWNpdFJldHVybnM/OiBib29sZWFuO1xuICAvKipcbiAgICogUmFpc2UgZXJyb3Igb24g4oCYdGhpc+KAmSBleHByZXNzaW9ucyB3aXRoIGFuIGltcGxpZWQg4oCYYW554oCZIHR5cGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG5vSW1wbGljaXRUaGlzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmFpc2UgZXJyb3Igb24gdXNlIG9mIHRoZSBkb3Qgc3ludGF4IHRvIGFjY2VzcyBmaWVsZHMgd2hpY2ggYXJlIG5vdCBkZWZpbmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBub1Byb3BlcnR5QWNjZXNzRnJvbUluZGV4U2lnbmF0dXJlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmFpc2UgZXJyb3Igd2hlbiBhY2Nlc3NpbmcgaW5kZXhlcyBvbiBvYmplY3RzIHdpdGggdW5rbm93biBrZXlzIGRlZmluZWQgaW4gaW5kZXggc2lnbmF0dXJlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9VbmNoZWNrZWRJbmRleGVkQWNjZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVwb3J0IGVycm9ycyBvbiB1bnVzZWQgbG9jYWwgdmFyaWFibGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBub1VudXNlZExvY2Fscz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlcG9ydCBlcnJvcnMgb24gdW51c2VkIHBhcmFtZXRlcnMgaW4gZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBub1VudXNlZFBhcmFtZXRlcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvd3MgaW1wb3J0aW5nIG1vZHVsZXMgd2l0aCBhIOKAmC5qc29u4oCZIGV4dGVuc2lvbiwgd2hpY2ggaXMgYSBjb21tb24gcHJhY3RpY2VcbiAgICogaW4gbm9kZSBwcm9qZWN0cy4gVGhpcyBpbmNsdWRlcyBnZW5lcmF0aW5nIGEgdHlwZSBmb3IgdGhlIGltcG9ydCBiYXNlZCBvbiB0aGUgc3RhdGljIEpTT04gc2hhcGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVKc29uTW9kdWxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2tpcCB0eXBlIGNoZWNraW5nIG9mIGFsbCBkZWNsYXJhdGlvbiBmaWxlcyAoKi5kLnRzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNraXBMaWJDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpY3QgZmxhZyBlbmFibGVzIGEgd2lkZSByYW5nZSBvZiB0eXBlIGNoZWNraW5nIGJlaGF2aW9yIHRoYXQgcmVzdWx0cyBpbiBzdHJvbmdlciBndWFyYW50ZWVzXG4gICAqIG9mIHByb2dyYW0gY29ycmVjdG5lc3MuIFR1cm5pbmcgdGhpcyBvbiBpcyBlcXVpdmFsZW50IHRvIGVuYWJsaW5nIGFsbCBvZiB0aGUgc3RyaWN0IG1vZGUgZmFtaWx5XG4gICAqIG9wdGlvbnMsIHdoaWNoIGFyZSBvdXRsaW5lZCBiZWxvdy4gWW91IGNhbiB0aGVuIHR1cm4gb2ZmIGluZGl2aWR1YWwgc3RyaWN0IG1vZGUgZmFtaWx5IGNoZWNrcyBhc1xuICAgKiBuZWVkZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHN0cmljdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gc3RyaWN0TnVsbENoZWNrcyBpcyBmYWxzZSwgbnVsbCBhbmQgdW5kZWZpbmVkIGFyZSBlZmZlY3RpdmVseSBpZ25vcmVkIGJ5IHRoZSBsYW5ndWFnZS5cbiAgICogVGhpcyBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIGVycm9ycyBhdCBydW50aW1lLlxuICAgKiBXaGVuIHN0cmljdE51bGxDaGVja3MgaXMgdHJ1ZSwgbnVsbCBhbmQgdW5kZWZpbmVkIGhhdmUgdGhlaXIgb3duIGRpc3RpbmN0IHR5cGVzIGFuZCB5b3XigJlsbFxuICAgKiBnZXQgYSB0eXBlIGVycm9yIGlmIHlvdSB0cnkgdG8gdXNlIHRoZW0gd2hlcmUgYSBjb25jcmV0ZSB2YWx1ZSBpcyBleHBlY3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RyaWN0TnVsbENoZWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIHRydWUsIFR5cGVTY3JpcHQgd2lsbCByYWlzZSBhbiBlcnJvciB3aGVuIGEgY2xhc3MgcHJvcGVydHkgd2FzIGRlY2xhcmVkIGJ1dFxuICAgKiBub3Qgc2V0IGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RyaWN0UHJvcGVydHlJbml0aWFsaXphdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERvIG5vdCBlbWl0IGRlY2xhcmF0aW9ucyBmb3IgY29kZSB0aGF0IGhhcyBhbiBAaW50ZXJuYWwgYW5ub3RhdGlvbiBpbiBpdOKAmXMgSlNEb2MgY29tbWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RyaXBJbnRlcm5hbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE1vZGVybiBicm93c2VycyBzdXBwb3J0IGFsbCBFUzYgZmVhdHVyZXMsIHNvIEVTNiBpcyBhIGdvb2QgY2hvaWNlLiBZb3UgbWlnaHQgY2hvb3NlIHRvIHNldFxuICAgKiBhIGxvd2VyIHRhcmdldCBpZiB5b3VyIGNvZGUgaXMgZGVwbG95ZWQgdG8gb2xkZXIgZW52aXJvbm1lbnRzLCBvciBhIGhpZ2hlciB0YXJnZXQgaWYgeW91clxuICAgKiBjb2RlIGlzIGd1YXJhbnRlZWQgdG8gcnVuIGluIG5ld2VyIGVudmlyb25tZW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJFUzIwMThcIlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgY29tcGlsZWQgZmlsZXMuXG4gICAqL1xuICByZWFkb25seSBvdXREaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgaW5wdXQgZmlsZXMuXG4gICAqXG4gICAqIE9ubHkgdXNlIHRvIGNvbnRyb2wgdGhlIG91dHB1dCBkaXJlY3Rvcnkgc3RydWN0dXJlIHdpdGggYG91dERpcmAuXG4gICAqL1xuICByZWFkb25seSByb290RGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGxvdyBkZWZhdWx0IGltcG9ydHMgZnJvbSBtb2R1bGVzIHdpdGggbm8gZGVmYXVsdCBleHBvcnQuIFRoaXMgZG9lcyBub3QgYWZmZWN0IGNvZGUgZW1pdCwganVzdCB0eXBlY2hlY2tpbmcuXG4gICAqL1xuICByZWFkb25seSBhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTGV0cyB5b3Ugc2V0IGEgYmFzZSBkaXJlY3RvcnkgdG8gcmVzb2x2ZSBub24tYWJzb2x1dGUgbW9kdWxlIG5hbWVzLlxuICAgKlxuICAgKiBZb3UgY2FuIGRlZmluZSBhIHJvb3QgZm9sZGVyIHdoZXJlIHlvdSBjYW4gZG8gYWJzb2x1dGUgZmlsZSByZXNvbHV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZVVybD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBzZXJpZXMgb2YgZW50cmllcyB3aGljaCByZS1tYXAgaW1wb3J0cyB0byBsb29rdXAgbG9jYXRpb25zIHJlbGF0aXZlIHRvIHRoZSBiYXNlVXJsLCB0aGVyZSBpcyBhIGxhcmdlciBjb3ZlcmFnZSBvZiBwYXRocyBpbiB0aGUgaGFuZGJvb2suXG4gICAqXG4gICAqIHBhdGhzIGxldHMgeW91IGRlY2xhcmUgaG93IFR5cGVTY3JpcHQgc2hvdWxkIHJlc29sdmUgYW4gaW1wb3J0IGluIHlvdXIgcmVxdWlyZS9pbXBvcnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH07XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBlc2NyaXB0Q29uZmlnIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbXBpbGVyT3B0aW9uczogVHlwZVNjcmlwdENvbXBpbGVyT3B0aW9ucztcbiAgcHVibGljIHJlYWRvbmx5IGluY2x1ZGU6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgZXhjbHVkZTogc3RyaW5nW107XG4gIHB1YmxpYyByZWFkb25seSBmaWxlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZTogSnNvbkZpbGU7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogTm9kZVByb2plY3QsIG9wdGlvbnM6IFR5cGVzY3JpcHRDb25maWdPcHRpb25zKSB7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBvcHRpb25zLmZpbGVOYW1lID8/IFwidHNjb25maWcuanNvblwiO1xuXG4gICAgdGhpcy5pbmNsdWRlID0gb3B0aW9ucy5pbmNsdWRlID8/IFtcIioqLyoudHNcIl07XG4gICAgdGhpcy5leGNsdWRlID0gb3B0aW9ucy5leGNsdWRlID8/IFtcIm5vZGVfbW9kdWxlc1wiXTtcbiAgICB0aGlzLmZpbGVOYW1lID0gZmlsZU5hbWU7XG5cbiAgICB0aGlzLmNvbXBpbGVyT3B0aW9ucyA9IG9wdGlvbnMuY29tcGlsZXJPcHRpb25zO1xuXG4gICAgdGhpcy5maWxlID0gbmV3IEpzb25GaWxlKHByb2plY3QsIGZpbGVOYW1lLCB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB0aGlzLmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgaW5jbHVkZTogKCkgPT4gdGhpcy5pbmNsdWRlLFxuICAgICAgICBleGNsdWRlOiAoKSA9PiB0aGlzLmV4Y2x1ZGUsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcHJvamVjdC5ucG1pZ25vcmU/LmV4Y2x1ZGUoYC8ke2ZpbGVOYW1lfWApO1xuICB9XG5cbiAgcHVibGljIGFkZEluY2x1ZGUocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5pbmNsdWRlLnB1c2gocGF0dGVybik7XG4gIH1cblxuICBwdWJsaWMgYWRkRXhjbHVkZShwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4Y2x1ZGUucHVzaChwYXR0ZXJuKTtcbiAgfVxufVxuIl19
@@ -80,6 +80,10 @@ export declare class UpgradeDependencies extends Component {
80
80
  * Container definitions for the upgrade workflow.
81
81
  */
82
82
  containerOptions?: ContainerOptions;
83
+ /**
84
+ * The upgrade task.
85
+ */
86
+ readonly upgradeTask: Task;
83
87
  /**
84
88
  * A task run after the upgrade task.
85
89
  */
@@ -92,8 +96,7 @@ export declare class UpgradeDependencies extends Component {
92
96
  * @param steps workflow steps
93
97
  */
94
98
  addPostBuildSteps(...steps: JobStep[]): void;
95
- preSynthesize(): void;
96
- private createTask;
99
+ private renderTaskSteps;
97
100
  private createWorkflow;
98
101
  private createUpgrade;
99
102
  private createPr;
@@ -8,6 +8,7 @@ const github_1 = require("../github");
8
8
  const constants_1 = require("../github/constants");
9
9
  const workflow_actions_1 = require("../github/workflow-actions");
10
10
  const logging_1 = require("../logging");
11
+ const release_1 = require("../release");
11
12
  function context(value) {
12
13
  return `\${{ ${value} }}`;
13
14
  }
@@ -21,7 +22,7 @@ const PATCH_CREATED_OUTPUT = "patch_created";
21
22
  */
22
23
  class UpgradeDependencies extends component_1.Component {
23
24
  constructor(project, options = {}) {
24
- var _c, _d, _e, _f, _g, _h;
25
+ var _c, _d, _e, _f, _g, _h, _j, _k, _l;
25
26
  super(project);
26
27
  /**
27
28
  * The workflows that execute the upgrades. One workflow per branch.
@@ -38,6 +39,33 @@ class UpgradeDependencies extends component_1.Component {
38
39
  this.postUpgradeTask = (_h = project.tasks.tryFind("post-upgrade")) !== null && _h !== void 0 ? _h : project.tasks.addTask("post-upgrade", {
39
40
  description: "Runs after upgrading dependencies",
40
41
  });
42
+ this.upgradeTask = project.addTask((_j = options.taskName) !== null && _j !== void 0 ? _j : "upgrade", {
43
+ // this task should not run in CI mode because its designed to
44
+ // update package.json and lock files.
45
+ env: { CI: "0" },
46
+ description: this.pullRequestTitle,
47
+ steps: { toJSON: () => this.renderTaskSteps() },
48
+ });
49
+ this.upgradeTask.lock(); // this task is a lazy value, so make it readonly
50
+ if (this.upgradeTask && project.github && ((_k = options.workflow) !== null && _k !== void 0 ? _k : true)) {
51
+ if ((_l = options.workflowOptions) === null || _l === void 0 ? void 0 : _l.branches) {
52
+ for (const branch of options.workflowOptions.branches) {
53
+ this.workflows.push(this.createWorkflow(this.upgradeTask, project.github, branch));
54
+ }
55
+ }
56
+ else if (release_1.Release.of(project)) {
57
+ const release = release_1.Release.of(project);
58
+ release._forEachBranch((branch) => {
59
+ this.workflows.push(this.createWorkflow(this.upgradeTask, project.github, branch));
60
+ });
61
+ }
62
+ else {
63
+ // represents the default repository branch.
64
+ // just like not specifying anything.
65
+ const defaultBranch = undefined;
66
+ this.workflows.push(this.createWorkflow(this.upgradeTask, project.github, defaultBranch));
67
+ }
68
+ }
41
69
  }
42
70
  /**
43
71
  * Add steps to execute a successful build.
@@ -46,26 +74,9 @@ class UpgradeDependencies extends component_1.Component {
46
74
  addPostBuildSteps(...steps) {
47
75
  this.postBuildSteps.push(...steps);
48
76
  }
49
- // create a corresponding github workflow for each requested branch.
50
- preSynthesize() {
51
- var _c, _d, _e, _f, _g, _h, _j;
52
- // Create task only here to consider also packages that are from extended classes
53
- // Create task only if hasn't been overwritten manually
54
- const task = (_d = this._project.tasks.tryFind((_c = this.options.taskName) !== null && _c !== void 0 ? _c : "upgrade")) !== null && _d !== void 0 ? _d : this.createTask();
55
- if (task && this._project.github && ((_e = this.options.workflow) !== null && _e !== void 0 ? _e : true)) {
56
- // represents the default repository branch.
57
- // just like not specifying anything.
58
- const defaultBranch = undefined;
59
- const branches = (_j = (_g = (_f = this.options.workflowOptions) === null || _f === void 0 ? void 0 : _f.branches) !== null && _g !== void 0 ? _g : (_h = this._project.release) === null || _h === void 0 ? void 0 : _h.branches) !== null && _j !== void 0 ? _j : [defaultBranch];
60
- for (const branch of branches) {
61
- this.workflows.push(this.createWorkflow(task, this._project.github, branch));
62
- }
63
- }
64
- }
65
- createTask() {
66
- var _c, _d, _e, _f, _g, _h;
67
- const taskName = (_c = this.options.taskName) !== null && _c !== void 0 ? _c : "upgrade";
68
- const exclude = (_d = this.options.exclude) !== null && _d !== void 0 ? _d : [];
77
+ renderTaskSteps() {
78
+ var _c, _d, _e, _f, _g;
79
+ const exclude = (_c = this.options.exclude) !== null && _c !== void 0 ? _c : [];
69
80
  if (this.ignoresProjen) {
70
81
  exclude.push("projen");
71
82
  }
@@ -77,24 +88,21 @@ class UpgradeDependencies extends component_1.Component {
77
88
  .map((dep) => dep.name)
78
89
  .concat(exclude)),
79
90
  ];
80
- const ncuIncludes = (_e = this.options.include) === null || _e === void 0 ? void 0 : _e.filter((item) => !ncuExcludes.includes(item));
81
- const includeLength = (_g = (_f = this.options.include) === null || _f === void 0 ? void 0 : _f.length) !== null && _g !== void 0 ? _g : 0;
82
- const ncuIncludesLength = (_h = ncuIncludes === null || ncuIncludes === void 0 ? void 0 : ncuIncludes.length) !== null && _h !== void 0 ? _h : 0;
91
+ const ncuIncludes = (_d = this.options.include) === null || _d === void 0 ? void 0 : _d.filter((item) => !ncuExcludes.includes(item));
92
+ const includeLength = (_f = (_e = this.options.include) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0;
93
+ const ncuIncludesLength = (_g = ncuIncludes === null || ncuIncludes === void 0 ? void 0 : ncuIncludes.length) !== null && _g !== void 0 ? _g : 0;
83
94
  // If all explicit includes already have version pinned, don't add task.
84
95
  // Note that without explicit includes task gets added
85
96
  if (includeLength > 0 && ncuIncludesLength === 0) {
86
- return undefined;
97
+ return [{ exec: "echo No dependencies to upgrade." }];
87
98
  }
88
- const task = this._project.addTask(taskName, {
89
- // this task should not run in CI mode because its designed to
90
- // update package.json and lock files.
91
- env: { CI: "0" },
92
- description: this.pullRequestTitle,
93
- });
99
+ const steps = new Array();
94
100
  // update npm-check-updates before everything else, in case there is a bug
95
101
  // in it or one of its dependencies. This will make upgrade workflows
96
102
  // slightly more stable and resilient to upstream changes.
97
- task.exec(this._project.package.renderUpgradePackagesCommand([], ["npm-check-updates"]));
103
+ steps.push({
104
+ exec: this._project.package.renderUpgradePackagesCommand([], ["npm-check-updates"]),
105
+ });
98
106
  for (const dep of ["dev", "optional", "peer", "prod", "bundle"]) {
99
107
  const ncuCommand = [
100
108
  "npm-check-updates",
@@ -110,16 +118,18 @@ class UpgradeDependencies extends component_1.Component {
110
118
  else if (ncuExcludes.length > 0) {
111
119
  ncuCommand.push(`--reject='${ncuExcludes.join(",")}'`);
112
120
  }
113
- task.exec(ncuCommand.join(" "));
121
+ steps.push({ exec: ncuCommand.join(" ") });
114
122
  }
115
123
  // run "yarn/npm install" to update the lockfile and install any deps (such as projen)
116
- task.exec(this._project.package.installAndUpdateLockfileCommand);
124
+ steps.push({ exec: this._project.package.installAndUpdateLockfileCommand });
117
125
  // run upgrade command to upgrade transitive deps as well
118
- task.exec(this._project.package.renderUpgradePackagesCommand(exclude, this.options.include));
126
+ steps.push({
127
+ exec: this._project.package.renderUpgradePackagesCommand(exclude, this.options.include),
128
+ });
119
129
  // run "projen" to give projen a chance to update dependencies (it will also run "yarn install")
120
- task.exec(this._project.projenCommand);
121
- task.spawn(this.postUpgradeTask);
122
- return task;
130
+ steps.push({ exec: this._project.projenCommand });
131
+ steps.push({ spawn: this.postUpgradeTask.name });
132
+ return steps;
123
133
  }
124
134
  createWorkflow(task, github, branch) {
125
135
  var _c, _d;
@@ -251,7 +261,7 @@ class UpgradeDependencies extends component_1.Component {
251
261
  }
252
262
  exports.UpgradeDependencies = UpgradeDependencies;
253
263
  _a = JSII_RTTI_SYMBOL_1;
254
- UpgradeDependencies[_a] = { fqn: "projen.javascript.UpgradeDependencies", version: "0.53.9" };
264
+ UpgradeDependencies[_a] = { fqn: "projen.javascript.UpgradeDependencies", version: "0.53.12" };
255
265
  /**
256
266
  * How often to check for new versions and raise pull requests for version upgrades.
257
267
  */
@@ -268,7 +278,7 @@ class UpgradeDependenciesSchedule {
268
278
  }
269
279
  exports.UpgradeDependenciesSchedule = UpgradeDependenciesSchedule;
270
280
  _b = JSII_RTTI_SYMBOL_1;
271
- UpgradeDependenciesSchedule[_b] = { fqn: "projen.javascript.UpgradeDependenciesSchedule", version: "0.53.9" };
281
+ UpgradeDependenciesSchedule[_b] = { fqn: "projen.javascript.UpgradeDependenciesSchedule", version: "0.53.12" };
272
282
  /**
273
283
  * Disables automatic upgrades.
274
284
  */
@@ -295,4 +305,4 @@ UpgradeDependenciesSchedule.WEEKLY = new UpgradeDependenciesSchedule([
295
305
  UpgradeDependenciesSchedule.MONTHLY = new UpgradeDependenciesSchedule([
296
306
  "0 0 1 * *",
297
307
  ]);
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS1kZXBlbmRlbmNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC91cGdyYWRlLWRlcGVuZGVuY2llcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUF5QztBQUN6QyxzQ0FBMkU7QUFDM0UsbURBQWtFO0FBQ2xFLGlFQUE2RDtBQUc3RCx3Q0FBa0M7QUFHbEMsU0FBUyxPQUFPLENBQUMsS0FBYTtJQUM1QixPQUFPLFFBQVEsS0FBSyxLQUFLLENBQUM7QUFDNUIsQ0FBQztBQUVELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUN4QyxNQUFNLE9BQU8sR0FBRyxzQkFBc0IsSUFBSSxpQkFBaUIsTUFBTSxFQUFFLENBQUM7QUFDcEUsTUFBTSxvQkFBb0IsR0FBRyxjQUFjLENBQUM7QUFDNUMsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUM7QUFvRTdDOztHQUVHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxxQkFBUztJQTRCaEQsWUFBWSxPQUFvQixFQUFFLFVBQXNDLEVBQUU7O1FBQ3hFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQTVCakI7O1dBRUc7UUFDYSxjQUFTLEdBQXFCLEVBQUUsQ0FBQztRQTJCL0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixTQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsbUNBQUksc0JBQXNCLENBQUM7UUFDM0UsSUFBSSxDQUFDLGFBQWEsU0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksbUNBQUksSUFBSSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxXQUFXLGVBQ2QsT0FBTyxDQUFDLGVBQWUsMENBQUUsV0FBVyxtQ0FB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QTJCO0lBdUN0QyxZQUFvQyxJQUFjO1FBQWQsU0FBSSxHQUFKLElBQUksQ0FBVTtJQUFHLENBQUM7SUFQdEQ7O09BRUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQWM7UUFDdEMsT0FBTyxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7O0FBckNILGtFQXdDQzs7O0FBdkNDOztHQUVHO0FBQ29CLGlDQUFLLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUVuRTs7R0FFRztBQUNvQixpQ0FBSyxHQUFHLElBQUksMkJBQTJCLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBRTlFOztHQUVHO0FBQ29CLG1DQUFPLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQztJQUMvRCxhQUFhO0NBQ2QsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDb0Isa0NBQU0sR0FBRyxJQUFJLDJCQUEyQixDQUFDO0lBQzlELFdBQVc7Q0FDWixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNvQixtQ0FBTyxHQUFHLElBQUksMkJBQTJCLENBQUM7SUFDL0QsV0FBVztDQUNaLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IEdpdEh1YiwgR2l0aHViV29ya2Zsb3csIEdpdElkZW50aXR5LCB3b3JrZmxvd3MgfSBmcm9tIFwiLi4vZ2l0aHViXCI7XG5pbXBvcnQgeyBERUZBVUxUX0dJVEhVQl9BQ1RJT05TX1VTRVIgfSBmcm9tIFwiLi4vZ2l0aHViL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgV29ya2Zsb3dBY3Rpb25zIH0gZnJvbSBcIi4uL2dpdGh1Yi93b3JrZmxvdy1hY3Rpb25zXCI7XG5pbXBvcnQgeyBDb250YWluZXJPcHRpb25zLCBKb2JTdGVwIH0gZnJvbSBcIi4uL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWxcIjtcbmltcG9ydCB7IE5vZGVQcm9qZWN0IH0gZnJvbSBcIi4uL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IHdhcm4gfSBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgVGFzayB9IGZyb20gXCIuLi90YXNrXCI7XG5cbmZ1bmN0aW9uIGNvbnRleHQodmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gYFxcJHt7ICR7dmFsdWV9IH19YDtcbn1cblxuY29uc3QgUkVQTyA9IGNvbnRleHQoXCJnaXRodWIucmVwb3NpdG9yeVwiKTtcbmNvbnN0IFJVTl9JRCA9IGNvbnRleHQoXCJnaXRodWIucnVuX2lkXCIpO1xuY29uc3QgUlVOX1VSTCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHtSRVBPfS9hY3Rpb25zL3J1bnMvJHtSVU5fSUR9YDtcbmNvbnN0IENSRUFURV9QQVRDSF9TVEVQX0lEID0gXCJjcmVhdGVfcGF0Y2hcIjtcbmNvbnN0IFBBVENIX0NSRUFURURfT1VUUFVUID0gXCJwYXRjaF9jcmVhdGVkXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYFVwZ3JhZGVEZXBlbmRlbmNpZXNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZ3JhZGVEZXBlbmRlbmNpZXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgcGFja2FnZSBuYW1lcyB0byBleGNsdWRlIGR1cmluZyB0aGUgdXBncmFkZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb3RoaW5nIGlzIGV4Y2x1ZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHBhY2thZ2UgbmFtZXMgdG8gaW5jbHVkZSBkdXJpbmcgdGhlIHVwZ3JhZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXZlcnl0aGluZyBpcyBpbmNsdWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW5jbHVkZSBhIGdpdGh1YiB3b3JrZmxvdyBmb3IgY3JlYXRpbmcgUFIncyB0aGF0IHVwZ3JhZGVzIHRoZVxuICAgKiByZXF1aXJlZCBkZXBlbmRlbmNpZXMsIGVpdGhlciBieSBtYW51YWwgZGlzcGF0Y2gsIG9yIGJ5IGEgc2NoZWR1bGUuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYGZhbHNlYCwgb25seSBhIGxvY2FsIHByb2plbiB0YXNrIGlzIGNyZWF0ZWQsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBtYW51YWxseSB0b1xuICAgKiB1cGdyYWRlIHRoZSBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSBmb3Igcm9vdCBwcm9qZWN0cywgZmFsc2UgZm9yIHN1Yi1wcm9qZWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIGdpdGh1YiB3b3JrZmxvdy4gT25seSBhcHBsaWVzIGlmIGB3b3JrZmxvd2AgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd09wdGlvbnM/OiBVcGdyYWRlRGVwZW5kZW5jaWVzV29ya2Zsb3dPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFzayB0aGF0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogVGhpcyB3aWxsIGFsc28gYmUgdGhlIHdvcmtmbG93IG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwidXBncmFkZVwiLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFza05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpdGxlIG9mIHRoZSBwdWxsIHJlcXVlc3QgdG8gdXNlIChzaG91bGQgYmUgYWxsIGxvd2VyLWNhc2UpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcInVwZ3JhZGUgZGVwZW5kZW5jaWVzXCJcbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0VGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGlnbm9yZSBwcm9qZW4gdXBncmFkZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVByb2plbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZCBTaWduZWQtb2ZmLWJ5IGxpbmUgYnkgdGhlIGNvbW1pdHRlciBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHNpZ25vZmY/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFVwZ3JhZGUgbm9kZSBwcm9qZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFVwZ3JhZGVEZXBlbmRlbmNpZXMgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIHdvcmtmbG93cyB0aGF0IGV4ZWN1dGUgdGhlIHVwZ3JhZGVzLiBPbmUgd29ya2Zsb3cgcGVyIGJyYW5jaC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvd3M6IEdpdGh1YldvcmtmbG93W10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFVwZ3JhZGVEZXBlbmRlbmNpZXNPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcm9qZWN0OiBOb2RlUHJvamVjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBwdWxsUmVxdWVzdFRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHByb2plbiBpcyBhbHNvIHVwZ3JhZGVkIGluIHRoaXMgd29ya2Zsb3csXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWdub3Jlc1Byb2plbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGRlZmluaXRpb25zIGZvciB0aGUgdXBncmFkZSB3b3JrZmxvdy5cbiAgICovXG4gIHB1YmxpYyBjb250YWluZXJPcHRpb25zPzogQ29udGFpbmVyT3B0aW9ucztcblxuICAvKipcbiAgICogQSB0YXNrIHJ1biBhZnRlciB0aGUgdXBncmFkZSB0YXNrLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvc3RVcGdyYWRlVGFzazogVGFzaztcblxuICBwcml2YXRlIHJlYWRvbmx5IGdpdElkZW50aXR5OiBHaXRJZGVudGl0eTtcbiAgcHJpdmF0ZSByZWFkb25seSBwb3N0QnVpbGRTdGVwczogSm9iU3RlcFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBVcGdyYWRlRGVwZW5kZW5jaWVzT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLl9wcm9qZWN0ID0gcHJvamVjdDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMucHVsbFJlcXVlc3RUaXRsZSA9IG9wdGlvbnMucHVsbFJlcXVlc3RUaXRsZSA/PyBcInVwZ3JhZGUgZGVwZW5kZW5jaWVzXCI7XG4gICAgdGhpcy5pZ25vcmVzUHJvamVuID0gdGhpcy5vcHRpb25zLmlnbm9yZVByb2plbiA/PyB0cnVlO1xuICAgIHRoaXMuZ2l0SWRlbnRpdHkgPVxuICAgICAgb3B0aW9ucy53b3JrZmxvd09wdGlvbnM/LmdpdElkZW50aXR5ID8/IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUjtcbiAgICB0aGlzLnBvc3RCdWlsZFN0ZXBzID0gW107XG4gICAgdGhpcy5jb250YWluZXJPcHRpb25zID0gb3B0aW9ucy53b3JrZmxvd09wdGlvbnM/LmNvbnRhaW5lcjtcbiAgICBwcm9qZWN0LmFkZERldkRlcHMoXCJucG0tY2hlY2stdXBkYXRlc0BeMTJcIik7XG5cbiAgICB0aGlzLnBvc3RVcGdyYWRlVGFzayA9XG4gICAgICBwcm9qZWN0LnRhc2tzLnRyeUZpbmQoXCJwb3N0LXVwZ3JhZGVcIikgPz9cbiAgICAgIHByb2plY3QudGFza3MuYWRkVGFzayhcInBvc3QtdXBncmFkZVwiLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlJ1bnMgYWZ0ZXIgdXBncmFkaW5nIGRlcGVuZGVuY2llc1wiLFxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHN0ZXBzIHRvIGV4ZWN1dGUgYSBzdWNjZXNzZnVsIGJ1aWxkLlxuICAgKiBAcGFyYW0gc3RlcHMgd29ya2Zsb3cgc3RlcHNcbiAgICovXG4gIHB1YmxpYyBhZGRQb3N0QnVpbGRTdGVwcyguLi5zdGVwczogSm9iU3RlcFtdKSB7XG4gICAgdGhpcy5wb3N0QnVpbGRTdGVwcy5wdXNoKC4uLnN0ZXBzKTtcbiAgfVxuXG4gIC8vIGNyZWF0ZSBhIGNvcnJlc3BvbmRpbmcgZ2l0aHViIHdvcmtmbG93IGZvciBlYWNoIHJlcXVlc3RlZCBicmFuY2guXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCkge1xuICAgIC8vIENyZWF0ZSB0YXNrIG9ubHkgaGVyZSB0byBjb25zaWRlciBhbHNvIHBhY2thZ2VzIHRoYXQgYXJlIGZyb20gZXh0ZW5kZWQgY2xhc3Nlc1xuICAgIC8vIENyZWF0ZSB0YXNrIG9ubHkgaWYgaGFzbid0IGJlZW4gb3ZlcndyaXR0ZW4gbWFudWFsbHlcbiAgICBjb25zdCB0YXNrID1cbiAgICAgIHRoaXMuX3Byb2plY3QudGFza3MudHJ5RmluZCh0aGlzLm9wdGlvbnMudGFza05hbWUgPz8gXCJ1cGdyYWRlXCIpID8/XG4gICAgICB0aGlzLmNyZWF0ZVRhc2soKTtcbiAgICBpZiAodGFzayAmJiB0aGlzLl9wcm9qZWN0LmdpdGh1YiAmJiAodGhpcy5vcHRpb25zLndvcmtmbG93ID8/IHRydWUpKSB7XG4gICAgICAvLyByZXByZXNlbnRzIHRoZSBkZWZhdWx0IHJlcG9zaXRvcnkgYnJhbmNoLlxuICAgICAgLy8ganVzdCBsaWtlIG5vdCBzcGVjaWZ5aW5nIGFueXRoaW5nLlxuICAgICAgY29uc3QgZGVmYXVsdEJyYW5jaCA9IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgYnJhbmNoZXMgPSB0aGlzLm9wdGlvbnMud29ya2Zsb3dPcHRpb25zPy5icmFuY2hlcyA/P1xuICAgICAgICB0aGlzLl9wcm9qZWN0LnJlbGVhc2U/LmJyYW5jaGVzID8/IFtkZWZhdWx0QnJhbmNoXTtcbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGJyYW5jaGVzKSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzLnB1c2goXG4gICAgICAgICAgdGhpcy5jcmVhdGVXb3JrZmxvdyh0YXNrLCB0aGlzLl9wcm9qZWN0LmdpdGh1YiwgYnJhbmNoKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGFzaygpOiBUYXNrIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB0YXNrTmFtZSA9IHRoaXMub3B0aW9ucy50YXNrTmFtZSA/PyBcInVwZ3JhZGVcIjtcblxuICAgIGNvbnN0IGV4Y2x1ZGUgPSB0aGlzLm9wdGlvbnMuZXhjbHVkZSA/PyBbXTtcbiAgICBpZiAodGhpcy5pZ25vcmVzUHJvamVuKSB7XG4gICAgICBleGNsdWRlLnB1c2goXCJwcm9qZW5cIik7XG4gICAgfVxuXG4gICAgLy8gZXhjbHVkZSBkZXBlZGVuY2llcyB0aGF0IGhhcyBhbHJlYWR5IHZlcnNpb24gcGlubmVkIChmdWxseSBvciB3aXRoIHBhdGNoIHZlcnNpb24pIGJ5IFByb2plbiB3aXRoIG5jdSAoYnV0IG5vdCBwYWNrYWdlIG1hbmFnZXIgdXBncmFkZSlcbiAgICAvLyBHZXR0aW5nIG9ubHkgdW5pcXVlIHZhbHVlcyB0aHJvdWdoIHNldFxuICAgIGNvbnN0IG5jdUV4Y2x1ZGVzID0gW1xuICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWxsXG4gICAgICAgICAgLmZpbHRlcigoZGVwKSA9PiBkZXAudmVyc2lvbiAmJiBkZXAudmVyc2lvblswXSAhPT0gXCJeXCIpXG4gICAgICAgICAgLm1hcCgoZGVwKSA9PiBkZXAubmFtZSlcbiAgICAgICAgICAuY29uY2F0KGV4Y2x1ZGUpXG4gICAgICApLFxuICAgIF07XG5cbiAgICBjb25zdCBuY3VJbmNsdWRlcyA9IHRoaXMub3B0aW9ucy5pbmNsdWRlPy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4gIW5jdUV4Y2x1ZGVzLmluY2x1ZGVzKGl0ZW0pXG4gICAgKTtcblxuICAgIGNvbnN0IGluY2x1ZGVMZW5ndGggPSB0aGlzLm9wdGlvbnMuaW5jbHVkZT8ubGVuZ3RoID8/IDA7XG4gICAgY29uc3QgbmN1SW5jbHVkZXNMZW5ndGggPSBuY3VJbmNsdWRlcz8ubGVuZ3RoID8/IDA7XG5cbiAgICAvLyBJZiBhbGwgZXhwbGljaXQgaW5jbHVkZXMgYWxyZWFkeSBoYXZlIHZlcnNpb24gcGlubmVkLCBkb24ndCBhZGQgdGFzay5cbiAgICAvLyBOb3RlIHRoYXQgd2l0aG91dCBleHBsaWNpdCBpbmNsdWRlcyB0YXNrIGdldHMgYWRkZWRcbiAgICBpZiAoaW5jbHVkZUxlbmd0aCA+IDAgJiYgbmN1SW5jbHVkZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdGFzayA9IHRoaXMuX3Byb2plY3QuYWRkVGFzayh0YXNrTmFtZSwge1xuICAgICAgLy8gdGhpcyB0YXNrIHNob3VsZCBub3QgcnVuIGluIENJIG1vZGUgYmVjYXVzZSBpdHMgZGVzaWduZWQgdG9cbiAgICAgIC8vIHVwZGF0ZSBwYWNrYWdlLmpzb24gYW5kIGxvY2sgZmlsZXMuXG4gICAgICBlbnY6IHsgQ0k6IFwiMFwiIH0sXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5wdWxsUmVxdWVzdFRpdGxlLFxuICAgIH0pO1xuXG4gICAgLy8gdXBkYXRlIG5wbS1jaGVjay11cGRhdGVzIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UsIGluIGNhc2UgdGhlcmUgaXMgYSBidWdcbiAgICAvLyBpbiBpdCBvciBvbmUgb2YgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIG1ha2UgdXBncmFkZSB3b3JrZmxvd3NcbiAgICAvLyBzbGlnaHRseSBtb3JlIHN0YWJsZSBhbmQgcmVzaWxpZW50IHRvIHVwc3RyZWFtIGNoYW5nZXMuXG4gICAgdGFzay5leGVjKFxuICAgICAgdGhpcy5fcHJvamVjdC5wYWNrYWdlLnJlbmRlclVwZ3JhZGVQYWNrYWdlc0NvbW1hbmQoXG4gICAgICAgIFtdLFxuICAgICAgICBbXCJucG0tY2hlY2stdXBkYXRlc1wiXVxuICAgICAgKVxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IGRlcCBvZiBbXCJkZXZcIiwgXCJvcHRpb25hbFwiLCBcInBlZXJcIiwgXCJwcm9kXCIsIFwiYnVuZGxlXCJdKSB7XG4gICAgICBjb25zdCBuY3VDb21tYW5kID0gW1xuICAgICAgICBcIm5wbS1jaGVjay11cGRhdGVzXCIsXG4gICAgICAgIFwiLS1kZXBcIixcbiAgICAgICAgZGVwLFxuICAgICAgICBcIi0tdXBncmFkZVwiLFxuICAgICAgICBcIi0tdGFyZ2V0PW1pbm9yXCIsXG4gICAgICBdO1xuICAgICAgLy8gRG9uJ3QgYWRkIGluY2x1ZGVzIGFuZCBleGNsdWRlcyBzYW1lIHRpbWVcbiAgICAgIGlmIChuY3VJbmNsdWRlcykge1xuICAgICAgICBuY3VDb21tYW5kLnB1c2goYC0tZmlsdGVyPScke25jdUluY2x1ZGVzLmpvaW4oXCIsXCIpfSdgKTtcbiAgICAgIH0gZWxzZSBpZiAobmN1RXhjbHVkZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBuY3VDb21tYW5kLnB1c2goYC0tcmVqZWN0PScke25jdUV4Y2x1ZGVzLmpvaW4oXCIsXCIpfSdgKTtcbiAgICAgIH1cblxuICAgICAgdGFzay5leGVjKG5jdUNvbW1hbmQuam9pbihcIiBcIikpO1xuICAgIH1cblxuICAgIC8vIHJ1biBcInlhcm4vbnBtIGluc3RhbGxcIiB0byB1cGRhdGUgdGhlIGxvY2tmaWxlIGFuZCBpbnN0YWxsIGFueSBkZXBzIChzdWNoIGFzIHByb2plbilcbiAgICB0YXNrLmV4ZWModGhpcy5fcHJvamVjdC5wYWNrYWdlLmluc3RhbGxBbmRVcGRhdGVMb2NrZmlsZUNvbW1hbmQpO1xuXG4gICAgLy8gcnVuIHVwZ3JhZGUgY29tbWFuZCB0byB1cGdyYWRlIHRyYW5zaXRpdmUgZGVwcyBhcyB3ZWxsXG4gICAgdGFzay5leGVjKFxuICAgICAgdGhpcy5fcHJvamVjdC5wYWNrYWdlLnJlbmRlclVwZ3JhZGVQYWNrYWdlc0NvbW1hbmQoXG4gICAgICAgIGV4Y2x1ZGUsXG4gICAgICAgIHRoaXMub3B0aW9ucy5pbmNsdWRlXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIHJ1biBcInByb2plblwiIHRvIGdpdmUgcHJvamVuIGEgY2hhbmNlIHRvIHVwZGF0ZSBkZXBlbmRlbmNpZXMgKGl0IHdpbGwgYWxzbyBydW4gXCJ5YXJuIGluc3RhbGxcIilcbiAgICB0YXNrLmV4ZWModGhpcy5fcHJvamVjdC5wcm9qZW5Db21tYW5kKTtcblxuICAgIHRhc2suc3Bhd24odGhpcy5wb3N0VXBncmFkZVRhc2spO1xuXG4gICAgcmV0dXJuIHRhc2s7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdvcmtmbG93KFxuICAgIHRhc2s6IFRhc2ssXG4gICAgZ2l0aHViOiBHaXRIdWIsXG4gICAgYnJhbmNoPzogc3RyaW5nXG4gICk6IEdpdGh1YldvcmtmbG93IHtcbiAgICBjb25zdCBzY2hlZHVsZSA9XG4gICAgICB0aGlzLm9wdGlvbnMud29ya2Zsb3dPcHRpb25zPy5zY2hlZHVsZSA/P1xuICAgICAgVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlLkRBSUxZO1xuXG4gICAgY29uc3Qgd29ya2Zsb3dOYW1lID0gYCR7dGFzay5uYW1lfSR7XG4gICAgICBicmFuY2ggPyBgLSR7YnJhbmNoLnJlcGxhY2UoL1xcLy9nLCBcIi1cIil9YCA6IFwiXCJcbiAgICB9YDtcbiAgICBjb25zdCB3b3JrZmxvdyA9IGdpdGh1Yi5hZGRXb3JrZmxvdyh3b3JrZmxvd05hbWUpO1xuICAgIGNvbnN0IHRyaWdnZXJzOiB3b3JrZmxvd3MuVHJpZ2dlcnMgPSB7XG4gICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7fSxcbiAgICAgIHNjaGVkdWxlOiBzY2hlZHVsZS5jcm9uXG4gICAgICAgID8gc2NoZWR1bGUuY3Jvbi5tYXAoKGUpID0+ICh7IGNyb246IGUgfSkpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgd29ya2Zsb3cub24odHJpZ2dlcnMpO1xuXG4gICAgY29uc3QgdXBncmFkZSA9IHRoaXMuY3JlYXRlVXBncmFkZSh0YXNrLCBicmFuY2gpO1xuICAgIGNvbnN0IHByID0gdGhpcy5jcmVhdGVQcih3b3JrZmxvdywgdXBncmFkZSk7XG5cbiAgICBjb25zdCBqb2JzOiBSZWNvcmQ8c3RyaW5nLCB3b3JrZmxvd3MuSm9iPiA9IHt9O1xuICAgIGpvYnNbdXBncmFkZS5qb2JJZF0gPSB1cGdyYWRlLmpvYjtcbiAgICBqb2JzW3ByLmpvYklkXSA9IHByLmpvYjtcblxuICAgIHdvcmtmbG93LmFkZEpvYnMoam9icyk7XG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVVcGdyYWRlKHRhc2s6IFRhc2ssIGJyYW5jaD86IHN0cmluZyk6IFVwZ3JhZGUge1xuICAgIGNvbnN0IHJ1bnNPbiA9IHRoaXMub3B0aW9ucy53b3JrZmxvd09wdGlvbnM/LnJ1bnNPbiA/PyBbXCJ1YnVudHUtbGF0ZXN0XCJdO1xuXG4gICAgLy8gdGhhdHMgYWxsIHdlIHNob3VsZCBuZWVkIGF0IHRoaXMgc3RhZ2Ugc2luY2UgYWxsIHdlIGRvIGlzIGNsb25lLlxuICAgIC8vIG5vdGUgdGhhdCB0aGlzIGFsc28gcHJldmVudHMgbmV3IGNvZGUgdGhhdCBpcyBpbnRyb2R1Y2VkIGluIHRoZSB1cGdyYWRlXG4gICAgLy8gdG8gaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gYW55dGhpbmcsIGluIGNhc2UgaXRzIHNvbWVob3cgZXhlY3V0ZWQuIChmb3IgZXhhbXBsZSBkdXJpbmcgYnVpbGQpXG4gICAgY29uc3QgcGVybWlzc2lvbnM6IHdvcmtmbG93cy5Kb2JQZXJtaXNzaW9ucyA9IHtcbiAgICAgIGNvbnRlbnRzOiB3b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5SRUFELFxuICAgIH07XG5cbiAgICBjb25zdCBzdGVwczogd29ya2Zsb3dzLkpvYlN0ZXBbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJDaGVja291dFwiLFxuICAgICAgICB1c2VzOiBcImFjdGlvbnMvY2hlY2tvdXRAdjJcIixcbiAgICAgICAgd2l0aDogYnJhbmNoID8geyByZWY6IGJyYW5jaCB9IDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuX3Byb2plY3QucmVuZGVyV29ya2Zsb3dTZXR1cCh7IG11dGFibGU6IGZhbHNlIH0pLFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIlVwZ3JhZGUgZGVwZW5kZW5jaWVzXCIsXG4gICAgICAgIHJ1bjogdGhpcy5fcHJvamVjdC5ydW5UYXNrQ29tbWFuZCh0YXNrKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHN0ZXBzLnB1c2goLi4udGhpcy5wb3N0QnVpbGRTdGVwcyk7XG4gICAgc3RlcHMucHVzaChcbiAgICAgIC4uLldvcmtmbG93QWN0aW9ucy5jcmVhdGVVcGxvYWRHaXRQYXRjaCh7XG4gICAgICAgIHN0ZXBJZDogQ1JFQVRFX1BBVENIX1NURVBfSUQsXG4gICAgICAgIG91dHB1dE5hbWU6IFBBVENIX0NSRUFURURfT1VUUFVULFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGpvYjoge1xuICAgICAgICBuYW1lOiBcIlVwZ3JhZGVcIixcbiAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lck9wdGlvbnMsXG4gICAgICAgIHBlcm1pc3Npb25zOiBwZXJtaXNzaW9ucyxcbiAgICAgICAgcnVuc09uOiBydW5zT24gPz8gW1widWJ1bnR1LWxhdGVzdFwiXSxcbiAgICAgICAgc3RlcHM6IHN0ZXBzLFxuICAgICAgICBvdXRwdXRzOiB7XG4gICAgICAgICAgW1BBVENIX0NSRUFURURfT1VUUFVUXToge1xuICAgICAgICAgICAgc3RlcElkOiBDUkVBVEVfUEFUQ0hfU1RFUF9JRCxcbiAgICAgICAgICAgIG91dHB1dE5hbWU6IFBBVENIX0NSRUFURURfT1VUUFVULFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgam9iSWQ6IFwidXBncmFkZVwiLFxuICAgICAgcmVmOiBicmFuY2gsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUHIod29ya2Zsb3c6IEdpdGh1YldvcmtmbG93LCB1cGdyYWRlOiBVcGdyYWRlKTogUFIge1xuICAgIGNvbnN0IHNlY3JldE5hbWUgPVxuICAgICAgdGhpcy5vcHRpb25zLndvcmtmbG93T3B0aW9ucz8uc2VjcmV0ID8/IHdvcmtmbG93LnByb2plblRva2VuU2VjcmV0O1xuICAgIGlmICh0aGlzLm9wdGlvbnMud29ya2Zsb3dPcHRpb25zPy5zZWNyZXQgPT09IHdvcmtmbG93LnByb2plblRva2VuU2VjcmV0KSB7XG4gICAgICB3YXJuKFxuICAgICAgICBgTm8gbmVlZCB0byBzcGVjaWZ5IFwid29ya2Zsb3dPcHRpb25zLnNlY3JldFwiIHdoZW4gaXQgaXMgdGhlIHNhbWUgYXMgdGhlIGRlZmF1bHQgd29ya2Zsb3cgcHJvamVuIHRva2VuIHNlY3JldCAoXCIke3dvcmtmbG93LnByb2plblRva2VuU2VjcmV0fVwiKS5gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IGNvbnRleHQoYHNlY3JldHMuJHtzZWNyZXROYW1lfWApO1xuICAgIGNvbnN0IHJ1bnNPbiA9IHRoaXMub3B0aW9ucy53b3JrZmxvd09wdGlvbnM/LnJ1bnNPbiA/PyBbXCJ1YnVudHUtbGF0ZXN0XCJdO1xuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9IHdvcmtmbG93Lm5hbWU7XG4gICAgY29uc3QgYnJhbmNoTmFtZSA9IGBnaXRodWItYWN0aW9ucy8ke3dvcmtmbG93TmFtZX1gO1xuICAgIGNvbnN0IHByU3RlcElkID0gXCJjcmVhdGUtcHJcIjtcblxuICAgIGNvbnN0IHRpdGxlID0gYGNob3JlKGRlcHMpOiAke3RoaXMucHVsbFJlcXVlc3RUaXRsZX1gO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gW1xuICAgICAgXCJVcGdyYWRlcyBwcm9qZWN0IGRlcGVuZGVuY2llcy4gU2VlIGRldGFpbHMgaW4gW3dvcmtmbG93IHJ1bl0uXCIsXG4gICAgICBcIlwiLFxuICAgICAgYFtXb3JrZmxvdyBSdW5dOiAke1JVTl9VUkx9YCxcbiAgICAgIFwiXCIsXG4gICAgICBcIi0tLS0tLVwiLFxuICAgICAgXCJcIixcbiAgICAgIGAqQXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IHByb2plbiB2aWEgdGhlIFwiJHt3b3JrZmxvdy5uYW1lfVwiIHdvcmtmbG93KmAsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuXG4gICAgY29uc3QgY29tbWl0dGVyID0gYCR7dGhpcy5naXRJZGVudGl0eS5uYW1lfSA8JHt0aGlzLmdpdElkZW50aXR5LmVtYWlsfT5gO1xuXG4gICAgY29uc3Qgc3RlcHM6IHdvcmtmbG93cy5Kb2JTdGVwW10gPSBbXG4gICAgICAuLi5Xb3JrZmxvd0FjdGlvbnMuY2hlY2tvdXRXaXRoUGF0Y2goe1xuICAgICAgICB0b2tlbjogYFxcJHt7IHNlY3JldHMuJHt3b3JrZmxvdy5wcm9qZW5Ub2tlblNlY3JldH0gfX1gLFxuICAgICAgICByZWY6IHVwZ3JhZGUucmVmLFxuICAgICAgfSksXG4gICAgICAuLi5Xb3JrZmxvd0FjdGlvbnMuc2V0R2l0SWRlbnRpdHkodGhpcy5naXRJZGVudGl0eSksXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiQ3JlYXRlIFB1bGwgUmVxdWVzdFwiLFxuICAgICAgICBpZDogcHJTdGVwSWQsXG4gICAgICAgIHVzZXM6IFwicGV0ZXItZXZhbnMvY3JlYXRlLXB1bGwtcmVxdWVzdEB2M1wiLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgLy8gdGhlIHByIGNhbiBtb2RpZnkgd29ya2Zsb3cgZmlsZXMsIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSBjdXN0b21cbiAgICAgICAgICAvLyBzZWNyZXQgaWYgb25lIGlzIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICAgIFwiY29tbWl0LW1lc3NhZ2VcIjogYCR7dGl0bGV9XFxuXFxuJHtkZXNjcmlwdGlvbn1gLFxuICAgICAgICAgIGJyYW5jaDogYnJhbmNoTmFtZSxcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgbGFiZWxzOiB0aGlzLm9wdGlvbnMud29ya2Zsb3dPcHRpb25zPy5sYWJlbHM/LmpvaW4oXCIsXCIpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBhc3NpZ25lZXM6XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud29ya2Zsb3dPcHRpb25zPy5hc3NpZ25lZXM/LmpvaW4oXCIsXCIpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBib2R5OiBkZXNjcmlwdGlvbixcbiAgICAgICAgICBhdXRob3I6IGNvbW1pdHRlcixcbiAgICAgICAgICBjb21taXR0ZXI6IGNvbW1pdHRlcixcbiAgICAgICAgICBzaWdub2ZmOiB0aGlzLm9wdGlvbnMuc2lnbm9mZiA/PyB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGpvYjoge1xuICAgICAgICBuYW1lOiBcIkNyZWF0ZSBQdWxsIFJlcXVlc3RcIixcbiAgICAgICAgaWY6IGBcXCR7eyBuZWVkcy4ke3VwZ3JhZGUuam9iSWR9Lm91dHB1dHMuJHtQQVRDSF9DUkVBVEVEX09VVFBVVH0gfX1gLFxuICAgICAgICBuZWVkczogW3VwZ3JhZGUuam9iSWRdLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiB3b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgICBwdWxsUmVxdWVzdHM6IHdvcmtmbG93cy5Kb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICB9LFxuICAgICAgICBydW5zT246IHJ1bnNPbiA/PyBbXCJ1YnVudHUtbGF0ZXN0XCJdLFxuICAgICAgICBzdGVwczogc3RlcHMsXG4gICAgICB9LFxuICAgICAgam9iSWQ6IFwicHJcIixcbiAgICB9O1xuICB9XG59XG5cbmludGVyZmFjZSBVcGdyYWRlIHtcbiAgcmVhZG9ubHkgcmVmPzogc3RyaW5nO1xuICByZWFkb25seSBqb2I6IHdvcmtmbG93cy5Kb2I7XG4gIHJlYWRvbmx5IGpvYklkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQUiB7XG4gIHJlYWRvbmx5IGpvYjogd29ya2Zsb3dzLkpvYjtcbiAgcmVhZG9ubHkgam9iSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgVXBncmFkZURlcGVuZGVuY2llcy53b3JrZmxvd09wdGlvbnNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZ3JhZGVEZXBlbmRlbmNpZXNXb3JrZmxvd09wdGlvbnMge1xuICAvKipcbiAgICogU2NoZWR1bGUgdG8gcnVuIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUuREFJTFlcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlO1xuXG4gIC8qKlxuICAgKiBXaGljaCBzZWNyZXQgdG8gdXNlIHdoZW4gY3JlYXRpbmcgdGhlIFBSLlxuICAgKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBkZWZhdWx0IGdpdGh1YiB0b2tlbiwgUFIncyBjcmVhdGVkIGJ5IHRoaXMgd29ya2Zsb3dcbiAgICogd2lsbCBub3QgdHJpZ2dlciBhbnkgc3Vic2VxdWVudCB3b3JrZmxvd3MgKGkuZSB0aGUgYnVpbGQgd29ya2Zsb3cpLlxuICAgKiBUaGlzIGlzIHdoeSB0aGlzIHdvcmtmbG93IGFsc28gcnVucyAnYnVpbGQnIGJ5IGRlZmF1bHQsIGFuZCBtYW51YWxseSB1cGRhdGVzXG4gICAqIHRoZSBzdGF0dXMgY2hlY2sgb2YgdGhlIFBSLlxuICAgKlxuICAgKiBJZiB5b3UgcGFzcyBhIHRva2VuIHRoYXQgaGFzIHRoZSBgd29ya2Zsb3dgIHBlcm1pc3Npb25zLCB5b3UgY2FuIHNraXAgcnVubmluZ1xuICAgKiBidWlsZCBpbiB0aGlzIHdvcmtmbG93IGJ5IHNwZWNpZnlpbmcgYHJlYnVpbGQ6IGZhbHNlYC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vcGV0ZXItZXZhbnMvY3JlYXRlLXB1bGwtcmVxdWVzdC9pc3N1ZXMvNDhcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IGdpdGh1YiB0b2tlbi5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWxzIHRvIGFwcGx5IG9uIHRoZSBQUi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBsYWJlbHMuXG4gICAqL1xuICByZWFkb25seSBsYWJlbHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXNzaWduZWVzIHRvIGFkZCBvbiB0aGUgUFIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYXNzaWduZWVzXG4gICAqL1xuICByZWFkb25seSBhc3NpZ25lZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSm9iIGNvbnRhaW5lciBvcHRpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHRzXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXI/OiB3b3JrZmxvd3MuQ29udGFpbmVyT3B0aW9ucztcblxuICAvKipcbiAgICogTGlzdCBvZiBicmFuY2hlcyB0byBjcmVhdGUgUFIncyBmb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQWxsIHJlbGVhc2UgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgdGhlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBicmFuY2hlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2l0IGlkZW50aXR5IHRvIHVzZSBmb3IgY29tbWl0cy5cbiAgICogQGRlZmF1bHQgXCJnaXRodWItYWN0aW9uc0BnaXRodWIuY29tXCJcbiAgICovXG4gIHJlYWRvbmx5IGdpdElkZW50aXR5PzogR2l0SWRlbnRpdHk7XG5cbiAgLyoqXG4gICAqIEdpdGh1YiBSdW5uZXIgc2VsZWN0aW9uIGxhYmVsc1xuICAgKiBAZGVmYXVsdCBbXCJ1YnVudHUtbGF0ZXN0XCJdXG4gICAqL1xuICByZWFkb25seSBydW5zT24/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBIb3cgb2Z0ZW4gdG8gY2hlY2sgZm9yIG5ldyB2ZXJzaW9ucyBhbmQgcmFpc2UgcHVsbCByZXF1ZXN0cyBmb3IgdmVyc2lvbiB1cGdyYWRlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZSB7XG4gIC8qKlxuICAgKiBEaXNhYmxlcyBhdXRvbWF0aWMgdXBncmFkZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5FVkVSID0gbmV3IFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZShbXSk7XG5cbiAgLyoqXG4gICAqIEF0IDAwOjAwLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEQUlMWSA9IG5ldyBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUoW1wiMCAwICogKiAqXCJdKTtcblxuICAvKipcbiAgICogQXQgMDA6MDAgb24gZXZlcnkgZGF5LW9mLXdlZWsgZnJvbSBNb25kYXkgdGhyb3VnaCBGcmlkYXkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFdFRUtEQVkgPSBuZXcgVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlKFtcbiAgICBcIjAgMCAqICogMS01XCIsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBBdCAwMDowMCBvbiBNb25kYXkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFdFRUtMWSA9IG5ldyBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUoW1xuICAgIFwiMCAwICogKiAxXCIsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBBdCAwMDowMCBvbiBkYXktb2YtbW9udGggMS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9OVEhMWSA9IG5ldyBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUoW1xuICAgIFwiMCAwIDEgKiAqXCIsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzY2hlZHVsZSBmcm9tIGEgcmF3IGNyb24gZXhwcmVzc2lvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXhwcmVzc2lvbnMoY3Jvbjogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gbmV3IFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZShjcm9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNyb246IHN0cmluZ1tdKSB7fVxufVxuIl19
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS1kZXBlbmRlbmNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC91cGdyYWRlLWRlcGVuZGVuY2llcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUF5QztBQUN6QyxzQ0FBMkU7QUFDM0UsbURBQWtFO0FBQ2xFLGlFQUE2RDtBQUc3RCx3Q0FBa0M7QUFDbEMsd0NBQXFDO0FBSXJDLFNBQVMsT0FBTyxDQUFDLEtBQWE7SUFDNUIsT0FBTyxRQUFRLEtBQUssS0FBSyxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUMxQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDeEMsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLElBQUksaUJBQWlCLE1BQU0sRUFBRSxDQUFDO0FBQ3BFLE1BQU0sb0JBQW9CLEdBQUcsY0FBYyxDQUFDO0FBQzVDLE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDO0FBb0U3Qzs7R0FFRztBQUNILE1BQWEsbUJBQW9CLFNBQVEscUJBQVM7SUFpQ2hELFlBQVksT0FBb0IsRUFBRSxVQUFzQyxFQUFFOztRQUN4RSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFqQ2pCOztXQUVHO1FBQ2EsY0FBUyxHQUFxQixFQUFFLENBQUM7UUFnQy9DLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsU0FBRyxPQUFPLENBQUMsZ0JBQWdCLG1DQUFJLHNCQUFzQixDQUFDO1FBQzNFLElBQUksQ0FBQyxhQUFhLFNBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLG1DQUFJLElBQUksQ0FBQztRQUN2RCxJQUFJLENBQUMsV0FBVyxlQUNkLE9BQU8sQ0FBQyxlQUFlLDBD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QUFDO0FBRUg7O0dBRUc7QUFDb0IsbUNBQU8sR0FBRyxJQUFJLDJCQUEyQixDQUFDO0lBQy9ELFdBQVc7Q0FDWixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBHaXRIdWIsIEdpdGh1YldvcmtmbG93LCBHaXRJZGVudGl0eSwgd29ya2Zsb3dzIH0gZnJvbSBcIi4uL2dpdGh1YlwiO1xuaW1wb3J0IHsgREVGQVVMVF9HSVRIVUJfQUNUSU9OU19VU0VSIH0gZnJvbSBcIi4uL2dpdGh1Yi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFdvcmtmbG93QWN0aW9ucyB9IGZyb20gXCIuLi9naXRodWIvd29ya2Zsb3ctYWN0aW9uc1wiO1xuaW1wb3J0IHsgQ29udGFpbmVyT3B0aW9ucywgSm9iU3RlcCB9IGZyb20gXCIuLi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyB3YXJuIH0gZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IFJlbGVhc2UgfSBmcm9tIFwiLi4vcmVsZWFzZVwiO1xuaW1wb3J0IHsgVGFzayB9IGZyb20gXCIuLi90YXNrXCI7XG5pbXBvcnQgeyBUYXNrU3RlcCB9IGZyb20gXCIuLi90YXNrLW1vZGVsXCI7XG5cbmZ1bmN0aW9uIGNvbnRleHQodmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gYFxcJHt7ICR7dmFsdWV9IH19YDtcbn1cblxuY29uc3QgUkVQTyA9IGNvbnRleHQoXCJnaXRodWIucmVwb3NpdG9yeVwiKTtcbmNvbnN0IFJVTl9JRCA9IGNvbnRleHQoXCJnaXRodWIucnVuX2lkXCIpO1xuY29uc3QgUlVOX1VSTCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHtSRVBPfS9hY3Rpb25zL3J1bnMvJHtSVU5fSUR9YDtcbmNvbnN0IENSRUFURV9QQVRDSF9TVEVQX0lEID0gXCJjcmVhdGVfcGF0Y2hcIjtcbmNvbnN0IFBBVENIX0NSRUFURURfT1VUUFVUID0gXCJwYXRjaF9jcmVhdGVkXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYFVwZ3JhZGVEZXBlbmRlbmNpZXNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZ3JhZGVEZXBlbmRlbmNpZXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgcGFja2FnZSBuYW1lcyB0byBleGNsdWRlIGR1cmluZyB0aGUgdXBncmFkZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb3RoaW5nIGlzIGV4Y2x1ZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHBhY2thZ2UgbmFtZXMgdG8gaW5jbHVkZSBkdXJpbmcgdGhlIHVwZ3JhZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRXZlcnl0aGluZyBpcyBpbmNsdWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW5jbHVkZSBhIGdpdGh1YiB3b3JrZmxvdyBmb3IgY3JlYXRpbmcgUFIncyB0aGF0IHVwZ3JhZGVzIHRoZVxuICAgKiByZXF1aXJlZCBkZXBlbmRlbmNpZXMsIGVpdGhlciBieSBtYW51YWwgZGlzcGF0Y2gsIG9yIGJ5IGEgc2NoZWR1bGUuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgYGZhbHNlYCwgb25seSBhIGxvY2FsIHByb2plbiB0YXNrIGlzIGNyZWF0ZWQsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBtYW51YWxseSB0b1xuICAgKiB1cGdyYWRlIHRoZSBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSBmb3Igcm9vdCBwcm9qZWN0cywgZmFsc2UgZm9yIHN1Yi1wcm9qZWN0cy5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIGdpdGh1YiB3b3JrZmxvdy4gT25seSBhcHBsaWVzIGlmIGB3b3JrZmxvd2AgaXMgdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd09wdGlvbnM/OiBVcGdyYWRlRGVwZW5kZW5jaWVzV29ya2Zsb3dPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFzayB0aGF0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogVGhpcyB3aWxsIGFsc28gYmUgdGhlIHdvcmtmbG93IG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwidXBncmFkZVwiLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFza05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpdGxlIG9mIHRoZSBwdWxsIHJlcXVlc3QgdG8gdXNlIChzaG91bGQgYmUgYWxsIGxvd2VyLWNhc2UpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcInVwZ3JhZGUgZGVwZW5kZW5jaWVzXCJcbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0VGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIGlnbm9yZSBwcm9qZW4gdXBncmFkZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVByb2plbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZCBTaWduZWQtb2ZmLWJ5IGxpbmUgYnkgdGhlIGNvbW1pdHRlciBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHNpZ25vZmY/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFVwZ3JhZGUgbm9kZSBwcm9qZWN0IGRlcGVuZGVuY2llcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFVwZ3JhZGVEZXBlbmRlbmNpZXMgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIHdvcmtmbG93cyB0aGF0IGV4ZWN1dGUgdGhlIHVwZ3JhZGVzLiBPbmUgd29ya2Zsb3cgcGVyIGJyYW5jaC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvd3M6IEdpdGh1YldvcmtmbG93W10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFVwZ3JhZGVEZXBlbmRlbmNpZXNPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcm9qZWN0OiBOb2RlUHJvamVjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBwdWxsUmVxdWVzdFRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHByb2plbiBpcyBhbHNvIHVwZ3JhZGVkIGluIHRoaXMgd29ya2Zsb3csXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWdub3Jlc1Byb2plbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGRlZmluaXRpb25zIGZvciB0aGUgdXBncmFkZSB3b3JrZmxvdy5cbiAgICovXG4gIHB1YmxpYyBjb250YWluZXJPcHRpb25zPzogQ29udGFpbmVyT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHVwZ3JhZGUgdGFzay5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1cGdyYWRlVGFzazogVGFzaztcblxuICAvKipcbiAgICogQSB0YXNrIHJ1biBhZnRlciB0aGUgdXBncmFkZSB0YXNrLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvc3RVcGdyYWRlVGFzazogVGFzaztcblxuICBwcml2YXRlIHJlYWRvbmx5IGdpdElkZW50aXR5OiBHaXRJZGVudGl0eTtcbiAgcHJpdmF0ZSByZWFkb25seSBwb3N0QnVpbGRTdGVwczogSm9iU3RlcFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBVcGdyYWRlRGVwZW5kZW5jaWVzT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLl9wcm9qZWN0ID0gcHJvamVjdDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMucHVsbFJlcXVlc3RUaXRsZSA9IG9wdGlvbnMucHVsbFJlcXVlc3RUaXRsZSA/PyBcInVwZ3JhZGUgZGVwZW5kZW5jaWVzXCI7XG4gICAgdGhpcy5pZ25vcmVzUHJvamVuID0gdGhpcy5vcHRpb25zLmlnbm9yZVByb2plbiA/PyB0cnVlO1xuICAgIHRoaXMuZ2l0SWRlbnRpdHkgPVxuICAgICAgb3B0aW9ucy53b3JrZmxvd09wdGlvbnM/LmdpdElkZW50aXR5ID8/IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUjtcbiAgICB0aGlzLnBvc3RCdWlsZFN0ZXBzID0gW107XG4gICAgdGhpcy5jb250YWluZXJPcHRpb25zID0gb3B0aW9ucy53b3JrZmxvd09wdGlvbnM/LmNvbnRhaW5lcjtcbiAgICBwcm9qZWN0LmFkZERldkRlcHMoXCJucG0tY2hlY2stdXBkYXRlc0BeMTJcIik7XG5cbiAgICB0aGlzLnBvc3RVcGdyYWRlVGFzayA9XG4gICAgICBwcm9qZWN0LnRhc2tzLnRyeUZpbmQoXCJwb3N0LXVwZ3JhZGVcIikgPz9cbiAgICAgIHByb2plY3QudGFza3MuYWRkVGFzayhcInBvc3QtdXBncmFkZVwiLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlJ1bnMgYWZ0ZXIgdXBncmFkaW5nIGRlcGVuZGVuY2llc1wiLFxuICAgICAgfSk7XG5cbiAgICB0aGlzLnVwZ3JhZGVUYXNrID0gcHJvamVjdC5hZGRUYXNrKG9wdGlvbnMudGFza05hbWUgPz8gXCJ1cGdyYWRlXCIsIHtcbiAgICAgIC8vIHRoaXMgdGFzayBzaG91bGQgbm90IHJ1biBpbiBDSSBtb2RlIGJlY2F1c2UgaXRzIGRlc2lnbmVkIHRvXG4gICAgICAvLyB1cGRhdGUgcGFja2FnZS5qc29uIGFuZCBsb2NrIGZpbGVzLlxuICAgICAgZW52OiB7IENJOiBcIjBcIiB9LFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMucHVsbFJlcXVlc3RUaXRsZSxcbiAgICAgIHN0ZXBzOiB7IHRvSlNPTjogKCkgPT4gdGhpcy5yZW5kZXJUYXNrU3RlcHMoKSB9IGFzIGFueSxcbiAgICB9KTtcbiAgICB0aGlzLnVwZ3JhZGVUYXNrLmxvY2soKTsgLy8gdGhpcyB0YXNrIGlzIGEgbGF6eSB2YWx1ZSwgc28gbWFrZSBpdCByZWFkb25seVxuXG4gICAgaWYgKHRoaXMudXBncmFkZVRhc2sgJiYgcHJvamVjdC5naXRodWIgJiYgKG9wdGlvbnMud29ya2Zsb3cgPz8gdHJ1ZSkpIHtcbiAgICAgIGlmIChvcHRpb25zLndvcmtmbG93T3B0aW9ucz8uYnJhbmNoZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBicmFuY2ggb2Ygb3B0aW9ucy53b3JrZmxvd09wdGlvbnMuYnJhbmNoZXMpIHtcbiAgICAgICAgICB0aGlzLndvcmtmbG93cy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5jcmVhdGVXb3JrZmxvdyh0aGlzLnVwZ3JhZGVUYXNrLCBwcm9qZWN0LmdpdGh1YiwgYnJhbmNoKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoUmVsZWFzZS5vZihwcm9qZWN0KSkge1xuICAgICAgICBjb25zdCByZWxlYXNlID0gUmVsZWFzZS5vZihwcm9qZWN0KSE7XG4gICAgICAgIHJlbGVhc2UuX2ZvckVhY2hCcmFuY2goKGJyYW5jaDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy53b3JrZmxvd3MucHVzaChcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlV29ya2Zsb3codGhpcy51cGdyYWRlVGFzaywgcHJvamVjdC5naXRodWIhLCBicmFuY2gpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZXByZXNlbnRzIHRoZSBkZWZhdWx0IHJlcG9zaXRvcnkgYnJhbmNoLlxuICAgICAgICAvLyBqdXN0IGxpa2Ugbm90IHNwZWNpZnlpbmcgYW55dGhpbmcuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRCcmFuY2ggPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzLnB1c2goXG4gICAgICAgICAgdGhpcy5jcmVhdGVXb3JrZmxvdyh0aGlzLnVwZ3JhZGVUYXNrLCBwcm9qZWN0LmdpdGh1YiwgZGVmYXVsdEJyYW5jaClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIHN0ZXBzIHRvIGV4ZWN1dGUgYSBzdWNjZXNzZnVsIGJ1aWxkLlxuICAgKiBAcGFyYW0gc3RlcHMgd29ya2Zsb3cgc3RlcHNcbiAgICovXG4gIHB1YmxpYyBhZGRQb3N0QnVpbGRTdGVwcyguLi5zdGVwczogSm9iU3RlcFtdKSB7XG4gICAgdGhpcy5wb3N0QnVpbGRTdGVwcy5wdXNoKC4uLnN0ZXBzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVGFza1N0ZXBzKCk6IFRhc2tTdGVwW10ge1xuICAgIGNvbnN0IGV4Y2x1ZGUgPSB0aGlzLm9wdGlvbnMuZXhjbHVkZSA/PyBbXTtcbiAgICBpZiAodGhpcy5pZ25vcmVzUHJvamVuKSB7XG4gICAgICBleGNsdWRlLnB1c2goXCJwcm9qZW5cIik7XG4gICAgfVxuXG4gICAgLy8gZXhjbHVkZSBkZXBlZGVuY2llcyB0aGF0IGhhcyBhbHJlYWR5IHZlcnNpb24gcGlubmVkIChmdWxseSBvciB3aXRoIHBhdGNoIHZlcnNpb24pIGJ5IFByb2plbiB3aXRoIG5jdSAoYnV0IG5vdCBwYWNrYWdlIG1hbmFnZXIgdXBncmFkZSlcbiAgICAvLyBHZXR0aW5nIG9ubHkgdW5pcXVlIHZhbHVlcyB0aHJvdWdoIHNldFxuICAgIGNvbnN0IG5jdUV4Y2x1ZGVzID0gW1xuICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWxsXG4gICAgICAgICAgLmZpbHRlcigoZGVwKSA9PiBkZXAudmVyc2lvbiAmJiBkZXAudmVyc2lvblswXSAhPT0gXCJeXCIpXG4gICAgICAgICAgLm1hcCgoZGVwKSA9PiBkZXAubmFtZSlcbiAgICAgICAgICAuY29uY2F0KGV4Y2x1ZGUpXG4gICAgICApLFxuICAgIF07XG5cbiAgICBjb25zdCBuY3VJbmNsdWRlcyA9IHRoaXMub3B0aW9ucy5pbmNsdWRlPy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT4gIW5jdUV4Y2x1ZGVzLmluY2x1ZGVzKGl0ZW0pXG4gICAgKTtcblxuICAgIGNvbnN0IGluY2x1ZGVMZW5ndGggPSB0aGlzLm9wdGlvbnMuaW5jbHVkZT8ubGVuZ3RoID8/IDA7XG4gICAgY29uc3QgbmN1SW5jbHVkZXNMZW5ndGggPSBuY3VJbmNsdWRlcz8ubGVuZ3RoID8/IDA7XG5cbiAgICAvLyBJZiBhbGwgZXhwbGljaXQgaW5jbHVkZXMgYWxyZWFkeSBoYXZlIHZlcnNpb24gcGlubmVkLCBkb24ndCBhZGQgdGFzay5cbiAgICAvLyBOb3RlIHRoYXQgd2l0aG91dCBleHBsaWNpdCBpbmNsdWRlcyB0YXNrIGdldHMgYWRkZWRcbiAgICBpZiAoaW5jbHVkZUxlbmd0aCA+IDAgJiYgbmN1SW5jbHVkZXNMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbeyBleGVjOiBcImVjaG8gTm8gZGVwZW5kZW5jaWVzIHRvIHVwZ3JhZGUuXCIgfV07XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcHMgPSBuZXcgQXJyYXk8VGFza1N0ZXA+KCk7XG5cbiAgICAvLyB1cGRhdGUgbnBtLWNoZWNrLXVwZGF0ZXMgYmVmb3JlIGV2ZXJ5dGhpbmcgZWxzZSwgaW4gY2FzZSB0aGVyZSBpcyBhIGJ1Z1xuICAgIC8vIGluIGl0IG9yIG9uZSBvZiBpdHMgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgbWFrZSB1cGdyYWRlIHdvcmtmbG93c1xuICAgIC8vIHNsaWdodGx5IG1vcmUgc3RhYmxlIGFuZCByZXNpbGllbnQgdG8gdXBzdHJlYW0gY2hhbmdlcy5cbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIGV4ZWM6IHRoaXMuX3Byb2plY3QucGFja2FnZS5yZW5kZXJVcGdyYWRlUGFja2FnZXNDb21tYW5kKFxuICAgICAgICBbXSxcbiAgICAgICAgW1wibnBtLWNoZWNrLXVwZGF0ZXNcIl1cbiAgICAgICksXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGRlcCBvZiBbXCJkZXZcIiwgXCJvcHRpb25hbFwiLCBcInBlZXJcIiwgXCJwcm9kXCIsIFwiYnVuZGxlXCJdKSB7XG4gICAgICBjb25zdCBuY3VDb21tYW5kID0gW1xuICAgICAgICBcIm5wbS1jaGVjay11cGRhdGVzXCIsXG4gICAgICAgIFwiLS1kZXBcIixcbiAgICAgICAgZGVwLFxuICAgICAgICBcIi0tdXBncmFkZVwiLFxuICAgICAgICBcIi0tdGFyZ2V0PW1pbm9yXCIsXG4gICAgICBdO1xuICAgICAgLy8gRG9uJ3QgYWRkIGluY2x1ZGVzIGFuZCBleGNsdWRlcyBzYW1lIHRpbWVcbiAgICAgIGlmIChuY3VJbmNsdWRlcykge1xuICAgICAgICBuY3VDb21tYW5kLnB1c2goYC0tZmlsdGVyPScke25jdUluY2x1ZGVzLmpvaW4oXCIsXCIpfSdgKTtcbiAgICAgIH0gZWxzZSBpZiAobmN1RXhjbHVkZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBuY3VDb21tYW5kLnB1c2goYC0tcmVqZWN0PScke25jdUV4Y2x1ZGVzLmpvaW4oXCIsXCIpfSdgKTtcbiAgICAgIH1cblxuICAgICAgc3RlcHMucHVzaCh7IGV4ZWM6IG5jdUNvbW1hbmQuam9pbihcIiBcIikgfSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIFwieWFybi9ucG0gaW5zdGFsbFwiIHRvIHVwZGF0ZSB0aGUgbG9ja2ZpbGUgYW5kIGluc3RhbGwgYW55IGRlcHMgKHN1Y2ggYXMgcHJvamVuKVxuICAgIHN0ZXBzLnB1c2goeyBleGVjOiB0aGlzLl9wcm9qZWN0LnBhY2thZ2UuaW5zdGFsbEFuZFVwZGF0ZUxvY2tmaWxlQ29tbWFuZCB9KTtcblxuICAgIC8vIHJ1biB1cGdyYWRlIGNvbW1hbmQgdG8gdXBncmFkZSB0cmFuc2l0aXZlIGRlcHMgYXMgd2VsbFxuICAgIHN0ZXBzLnB1c2goe1xuICAgICAgZXhlYzogdGhpcy5fcHJvamVjdC5wYWNrYWdlLnJlbmRlclVwZ3JhZGVQYWNrYWdlc0NvbW1hbmQoXG4gICAgICAgIGV4Y2x1ZGUsXG4gICAgICAgIHRoaXMub3B0aW9ucy5pbmNsdWRlXG4gICAgICApLFxuICAgIH0pO1xuXG4gICAgLy8gcnVuIFwicHJvamVuXCIgdG8gZ2l2ZSBwcm9qZW4gYSBjaGFuY2UgdG8gdXBkYXRlIGRlcGVuZGVuY2llcyAoaXQgd2lsbCBhbHNvIHJ1biBcInlhcm4gaW5zdGFsbFwiKVxuICAgIHN0ZXBzLnB1c2goeyBleGVjOiB0aGlzLl9wcm9qZWN0LnByb2plbkNvbW1hbmQgfSk7XG5cbiAgICBzdGVwcy5wdXNoKHsgc3Bhd246IHRoaXMucG9zdFVwZ3JhZGVUYXNrLm5hbWUgfSk7XG5cbiAgICByZXR1cm4gc3RlcHM7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdvcmtmbG93KFxuICAgIHRhc2s6IFRhc2ssXG4gICAgZ2l0aHViOiBHaXRIdWIsXG4gICAgYnJhbmNoPzogc3RyaW5nXG4gICk6IEdpdGh1YldvcmtmbG93IHtcbiAgICBjb25zdCBzY2hlZHVsZSA9XG4gICAgICB0aGlzLm9wdGlvbnMud29ya2Zsb3dPcHRpb25zPy5zY2hlZHVsZSA/P1xuICAgICAgVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlLkRBSUxZO1xuXG4gICAgY29uc3Qgd29ya2Zsb3dOYW1lID0gYCR7dGFzay5uYW1lfSR7XG4gICAgICBicmFuY2ggPyBgLSR7YnJhbmNoLnJlcGxhY2UoL1xcLy9nLCBcIi1cIil9YCA6IFwiXCJcbiAgICB9YDtcbiAgICBjb25zdCB3b3JrZmxvdyA9IGdpdGh1Yi5hZGRXb3JrZmxvdyh3b3JrZmxvd05hbWUpO1xuICAgIGNvbnN0IHRyaWdnZXJzOiB3b3JrZmxvd3MuVHJpZ2dlcnMgPSB7XG4gICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7fSxcbiAgICAgIHNjaGVkdWxlOiBzY2hlZHVsZS5jcm9uXG4gICAgICAgID8gc2NoZWR1bGUuY3Jvbi5tYXAoKGUpID0+ICh7IGNyb246IGUgfSkpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgd29ya2Zsb3cub24odHJpZ2dlcnMpO1xuXG4gICAgY29uc3QgdXBncmFkZSA9IHRoaXMuY3JlYXRlVXBncmFkZSh0YXNrLCBicmFuY2gpO1xuICAgIGNvbnN0IHByID0gdGhpcy5jcmVhdGVQcih3b3JrZmxvdywgdXBncmFkZSk7XG5cbiAgICBjb25zdCBqb2JzOiBSZWNvcmQ8c3RyaW5nLCB3b3JrZmxvd3MuSm9iPiA9IHt9O1xuICAgIGpvYnNbdXBncmFkZS5qb2JJZF0gPSB1cGdyYWRlLmpvYjtcbiAgICBqb2JzW3ByLmpvYklkXSA9IHByLmpvYjtcblxuICAgIHdvcmtmbG93LmFkZEpvYnMoam9icyk7XG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVVcGdyYWRlKHRhc2s6IFRhc2ssIGJyYW5jaD86IHN0cmluZyk6IFVwZ3JhZGUge1xuICAgIGNvbnN0IHJ1bnNPbiA9IHRoaXMub3B0aW9ucy53b3JrZmxvd09wdGlvbnM/LnJ1bnNPbiA/PyBbXCJ1YnVudHUtbGF0ZXN0XCJdO1xuXG4gICAgLy8gdGhhdHMgYWxsIHdlIHNob3VsZCBuZWVkIGF0IHRoaXMgc3RhZ2Ugc2luY2UgYWxsIHdlIGRvIGlzIGNsb25lLlxuICAgIC8vIG5vdGUgdGhhdCB0aGlzIGFsc28gcHJldmVudHMgbmV3IGNvZGUgdGhhdCBpcyBpbnRyb2R1Y2VkIGluIHRoZSB1cGdyYWRlXG4gICAgLy8gdG8gaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gYW55dGhpbmcsIGluIGNhc2UgaXRzIHNvbWVob3cgZXhlY3V0ZWQuIChmb3IgZXhhbXBsZSBkdXJpbmcgYnVpbGQpXG4gICAgY29uc3QgcGVybWlzc2lvbnM6IHdvcmtmbG93cy5Kb2JQZXJtaXNzaW9ucyA9IHtcbiAgICAgIGNvbnRlbnRzOiB3b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5SRUFELFxuICAgIH07XG5cbiAgICBjb25zdCBzdGVwczogd29ya2Zsb3dzLkpvYlN0ZXBbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJDaGVja291dFwiLFxuICAgICAgICB1c2VzOiBcImFjdGlvbnMvY2hlY2tvdXRAdjJcIixcbiAgICAgICAgd2l0aDogYnJhbmNoID8geyByZWY6IGJyYW5jaCB9IDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMuX3Byb2plY3QucmVuZGVyV29ya2Zsb3dTZXR1cCh7IG11dGFibGU6IGZhbHNlIH0pLFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIlVwZ3JhZGUgZGVwZW5kZW5jaWVzXCIsXG4gICAgICAgIHJ1bjogdGhpcy5fcHJvamVjdC5ydW5UYXNrQ29tbWFuZCh0YXNrKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHN0ZXBzLnB1c2goLi4udGhpcy5wb3N0QnVpbGRTdGVwcyk7XG4gICAgc3RlcHMucHVzaChcbiAgICAgIC4uLldvcmtmbG93QWN0aW9ucy5jcmVhdGVVcGxvYWRHaXRQYXRjaCh7XG4gICAgICAgIHN0ZXBJZDogQ1JFQVRFX1BBVENIX1NURVBfSUQsXG4gICAgICAgIG91dHB1dE5hbWU6IFBBVENIX0NSRUFURURfT1VUUFVULFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGpvYjoge1xuICAgICAgICBuYW1lOiBcIlVwZ3JhZGVcIixcbiAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lck9wdGlvbnMsXG4gICAgICAgIHBlcm1pc3Npb25zOiBwZXJtaXNzaW9ucyxcbiAgICAgICAgcnVuc09uOiBydW5zT24gPz8gW1widWJ1bnR1LWxhdGVzdFwiXSxcbiAgICAgICAgc3RlcHM6IHN0ZXBzLFxuICAgICAgICBvdXRwdXRzOiB7XG4gICAgICAgICAgW1BBVENIX0NSRUFURURfT1VUUFVUXToge1xuICAgICAgICAgICAgc3RlcElkOiBDUkVBVEVfUEFUQ0hfU1RFUF9JRCxcbiAgICAgICAgICAgIG91dHB1dE5hbWU6IFBBVENIX0NSRUFURURfT1VUUFVULFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgam9iSWQ6IFwidXBncmFkZVwiLFxuICAgICAgcmVmOiBicmFuY2gsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUHIod29ya2Zsb3c6IEdpdGh1YldvcmtmbG93LCB1cGdyYWRlOiBVcGdyYWRlKTogUFIge1xuICAgIGNvbnN0IHNlY3JldE5hbWUgPVxuICAgICAgdGhpcy5vcHRpb25zLndvcmtmbG93T3B0aW9ucz8uc2VjcmV0ID8/IHdvcmtmbG93LnByb2plblRva2VuU2VjcmV0O1xuICAgIGlmICh0aGlzLm9wdGlvbnMud29ya2Zsb3dPcHRpb25zPy5zZWNyZXQgPT09IHdvcmtmbG93LnByb2plblRva2VuU2VjcmV0KSB7XG4gICAgICB3YXJuKFxuICAgICAgICBgTm8gbmVlZCB0byBzcGVjaWZ5IFwid29ya2Zsb3dPcHRpb25zLnNlY3JldFwiIHdoZW4gaXQgaXMgdGhlIHNhbWUgYXMgdGhlIGRlZmF1bHQgd29ya2Zsb3cgcHJvamVuIHRva2VuIHNlY3JldCAoXCIke3dvcmtmbG93LnByb2plblRva2VuU2VjcmV0fVwiKS5gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IGNvbnRleHQoYHNlY3JldHMuJHtzZWNyZXROYW1lfWApO1xuICAgIGNvbnN0IHJ1bnNPbiA9IHRoaXMub3B0aW9ucy53b3JrZmxvd09wdGlvbnM/LnJ1bnNPbiA/PyBbXCJ1YnVudHUtbGF0ZXN0XCJdO1xuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9IHdvcmtmbG93Lm5hbWU7XG4gICAgY29uc3QgYnJhbmNoTmFtZSA9IGBnaXRodWItYWN0aW9ucy8ke3dvcmtmbG93TmFtZX1gO1xuICAgIGNvbnN0IHByU3RlcElkID0gXCJjcmVhdGUtcHJcIjtcblxuICAgIGNvbnN0IHRpdGxlID0gYGNob3JlKGRlcHMpOiAke3RoaXMucHVsbFJlcXVlc3RUaXRsZX1gO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gW1xuICAgICAgXCJVcGdyYWRlcyBwcm9qZWN0IGRlcGVuZGVuY2llcy4gU2VlIGRldGFpbHMgaW4gW3dvcmtmbG93IHJ1bl0uXCIsXG4gICAgICBcIlwiLFxuICAgICAgYFtXb3JrZmxvdyBSdW5dOiAke1JVTl9VUkx9YCxcbiAgICAgIFwiXCIsXG4gICAgICBcIi0tLS0tLVwiLFxuICAgICAgXCJcIixcbiAgICAgIGAqQXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IHByb2plbiB2aWEgdGhlIFwiJHt3b3JrZmxvdy5uYW1lfVwiIHdvcmtmbG93KmAsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuXG4gICAgY29uc3QgY29tbWl0dGVyID0gYCR7dGhpcy5naXRJZGVudGl0eS5uYW1lfSA8JHt0aGlzLmdpdElkZW50aXR5LmVtYWlsfT5gO1xuXG4gICAgY29uc3Qgc3RlcHM6IHdvcmtmbG93cy5Kb2JTdGVwW10gPSBbXG4gICAgICAuLi5Xb3JrZmxvd0FjdGlvbnMuY2hlY2tvdXRXaXRoUGF0Y2goe1xuICAgICAgICB0b2tlbjogYFxcJHt7IHNlY3JldHMuJHt3b3JrZmxvdy5wcm9qZW5Ub2tlblNlY3JldH0gfX1gLFxuICAgICAgICByZWY6IHVwZ3JhZGUucmVmLFxuICAgICAgfSksXG4gICAgICAuLi5Xb3JrZmxvd0FjdGlvbnMuc2V0R2l0SWRlbnRpdHkodGhpcy5naXRJZGVudGl0eSksXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiQ3JlYXRlIFB1bGwgUmVxdWVzdFwiLFxuICAgICAgICBpZDogcHJTdGVwSWQsXG4gICAgICAgIHVzZXM6IFwicGV0ZXItZXZhbnMvY3JlYXRlLXB1bGwtcmVxdWVzdEB2M1wiLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgLy8gdGhlIHByIGNhbiBtb2RpZnkgd29ya2Zsb3cgZmlsZXMsIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSBjdXN0b21cbiAgICAgICAgICAvLyBzZWNyZXQgaWYgb25lIGlzIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICAgIFwiY29tbWl0LW1lc3NhZ2VcIjogYCR7dGl0bGV9XFxuXFxuJHtkZXNjcmlwdGlvbn1gLFxuICAgICAgICAgIGJyYW5jaDogYnJhbmNoTmFtZSxcbiAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgbGFiZWxzOiB0aGlzLm9wdGlvbnMud29ya2Zsb3dPcHRpb25zPy5sYWJlbHM/LmpvaW4oXCIsXCIpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBhc3NpZ25lZXM6XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud29ya2Zsb3dPcHRpb25zPy5hc3NpZ25lZXM/LmpvaW4oXCIsXCIpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBib2R5OiBkZXNjcmlwdGlvbixcbiAgICAgICAgICBhdXRob3I6IGNvbW1pdHRlcixcbiAgICAgICAgICBjb21taXR0ZXI6IGNvbW1pdHRlcixcbiAgICAgICAgICBzaWdub2ZmOiB0aGlzLm9wdGlvbnMuc2lnbm9mZiA/PyB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGpvYjoge1xuICAgICAgICBuYW1lOiBcIkNyZWF0ZSBQdWxsIFJlcXVlc3RcIixcbiAgICAgICAgaWY6IGBcXCR7eyBuZWVkcy4ke3VwZ3JhZGUuam9iSWR9Lm91dHB1dHMuJHtQQVRDSF9DUkVBVEVEX09VVFBVVH0gfX1gLFxuICAgICAgICBuZWVkczogW3VwZ3JhZGUuam9iSWRdLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiB3b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgICBwdWxsUmVxdWVzdHM6IHdvcmtmbG93cy5Kb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICB9LFxuICAgICAgICBydW5zT246IHJ1bnNPbiA/PyBbXCJ1YnVudHUtbGF0ZXN0XCJdLFxuICAgICAgICBzdGVwczogc3RlcHMsXG4gICAgICB9LFxuICAgICAgam9iSWQ6IFwicHJcIixcbiAgICB9O1xuICB9XG59XG5cbmludGVyZmFjZSBVcGdyYWRlIHtcbiAgcmVhZG9ubHkgcmVmPzogc3RyaW5nO1xuICByZWFkb25seSBqb2I6IHdvcmtmbG93cy5Kb2I7XG4gIHJlYWRvbmx5IGpvYklkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQUiB7XG4gIHJlYWRvbmx5IGpvYjogd29ya2Zsb3dzLkpvYjtcbiAgcmVhZG9ubHkgam9iSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgVXBncmFkZURlcGVuZGVuY2llcy53b3JrZmxvd09wdGlvbnNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZ3JhZGVEZXBlbmRlbmNpZXNXb3JrZmxvd09wdGlvbnMge1xuICAvKipcbiAgICogU2NoZWR1bGUgdG8gcnVuIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUuREFJTFlcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlO1xuXG4gIC8qKlxuICAgKiBXaGljaCBzZWNyZXQgdG8gdXNlIHdoZW4gY3JlYXRpbmcgdGhlIFBSLlxuICAgKlxuICAgKiBXaGVuIHVzaW5nIHRoZSBkZWZhdWx0IGdpdGh1YiB0b2tlbiwgUFIncyBjcmVhdGVkIGJ5IHRoaXMgd29ya2Zsb3dcbiAgICogd2lsbCBub3QgdHJpZ2dlciBhbnkgc3Vic2VxdWVudCB3b3JrZmxvd3MgKGkuZSB0aGUgYnVpbGQgd29ya2Zsb3cpLlxuICAgKiBUaGlzIGlzIHdoeSB0aGlzIHdvcmtmbG93IGFsc28gcnVucyAnYnVpbGQnIGJ5IGRlZmF1bHQsIGFuZCBtYW51YWxseSB1cGRhdGVzXG4gICAqIHRoZSBzdGF0dXMgY2hlY2sgb2YgdGhlIFBSLlxuICAgKlxuICAgKiBJZiB5b3UgcGFzcyBhIHRva2VuIHRoYXQgaGFzIHRoZSBgd29ya2Zsb3dgIHBlcm1pc3Npb25zLCB5b3UgY2FuIHNraXAgcnVubmluZ1xuICAgKiBidWlsZCBpbiB0aGlzIHdvcmtmbG93IGJ5IHNwZWNpZnlpbmcgYHJlYnVpbGQ6IGZhbHNlYC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vcGV0ZXItZXZhbnMvY3JlYXRlLXB1bGwtcmVxdWVzdC9pc3N1ZXMvNDhcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IGdpdGh1YiB0b2tlbi5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogTGFiZWxzIHRvIGFwcGx5IG9uIHRoZSBQUi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBsYWJlbHMuXG4gICAqL1xuICByZWFkb25seSBsYWJlbHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXNzaWduZWVzIHRvIGFkZCBvbiB0aGUgUFIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYXNzaWduZWVzXG4gICAqL1xuICByZWFkb25seSBhc3NpZ25lZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSm9iIGNvbnRhaW5lciBvcHRpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHRzXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXI/OiB3b3JrZmxvd3MuQ29udGFpbmVyT3B0aW9ucztcblxuICAvKipcbiAgICogTGlzdCBvZiBicmFuY2hlcyB0byBjcmVhdGUgUFIncyBmb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQWxsIHJlbGVhc2UgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgdGhlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBicmFuY2hlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2l0IGlkZW50aXR5IHRvIHVzZSBmb3IgY29tbWl0cy5cbiAgICogQGRlZmF1bHQgXCJnaXRodWItYWN0aW9uc0BnaXRodWIuY29tXCJcbiAgICovXG4gIHJlYWRvbmx5IGdpdElkZW50aXR5PzogR2l0SWRlbnRpdHk7XG5cbiAgLyoqXG4gICAqIEdpdGh1YiBSdW5uZXIgc2VsZWN0aW9uIGxhYmVsc1xuICAgKiBAZGVmYXVsdCBbXCJ1YnVudHUtbGF0ZXN0XCJdXG4gICAqL1xuICByZWFkb25seSBydW5zT24/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBIb3cgb2Z0ZW4gdG8gY2hlY2sgZm9yIG5ldyB2ZXJzaW9ucyBhbmQgcmFpc2UgcHVsbCByZXF1ZXN0cyBmb3IgdmVyc2lvbiB1cGdyYWRlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZSB7XG4gIC8qKlxuICAgKiBEaXNhYmxlcyBhdXRvbWF0aWMgdXBncmFkZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5FVkVSID0gbmV3IFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZShbXSk7XG5cbiAgLyoqXG4gICAqIEF0IDAwOjAwLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEQUlMWSA9IG5ldyBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUoW1wiMCAwICogKiAqXCJdKTtcblxuICAvKipcbiAgICogQXQgMDA6MDAgb24gZXZlcnkgZGF5LW9mLXdlZWsgZnJvbSBNb25kYXkgdGhyb3VnaCBGcmlkYXkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFdFRUtEQVkgPSBuZXcgVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlKFtcbiAgICBcIjAgMCAqICogMS01XCIsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBBdCAwMDowMCBvbiBNb25kYXkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFdFRUtMWSA9IG5ldyBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUoW1xuICAgIFwiMCAwICogKiAxXCIsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBBdCAwMDowMCBvbiBkYXktb2YtbW9udGggMS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9OVEhMWSA9IG5ldyBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUoW1xuICAgIFwiMCAwIDEgKiAqXCIsXG4gIF0pO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzY2hlZHVsZSBmcm9tIGEgcmF3IGNyb24gZXhwcmVzc2lvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXhwcmVzc2lvbnMoY3Jvbjogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gbmV3IFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZShjcm9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGNyb246IHN0cmluZ1tdKSB7fVxufVxuIl19