projen 0.98.32 → 0.98.33

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 (554) hide show
  1. package/.jsii +1754 -474
  2. package/lib/ai-instructions.js +2 -2
  3. package/lib/awscdk/auto-discover.js +5 -5
  4. package/lib/awscdk/awscdk-app-java.js +1 -1
  5. package/lib/awscdk/awscdk-app-py.js +1 -1
  6. package/lib/awscdk/awscdk-app-ts.js +1 -1
  7. package/lib/awscdk/awscdk-construct.js +2 -2
  8. package/lib/awscdk/awscdk-deps-java.js +1 -1
  9. package/lib/awscdk/awscdk-deps-js.js +1 -1
  10. package/lib/awscdk/awscdk-deps-py.js +1 -1
  11. package/lib/awscdk/awscdk-deps.js +1 -1
  12. package/lib/awscdk/cdk-config.js +4 -4
  13. package/lib/awscdk/cdk-tasks.js +1 -1
  14. package/lib/awscdk/integration-test.js +1 -1
  15. package/lib/awscdk/internal.d.ts +1 -2
  16. package/lib/awscdk/lambda-extension.js +1 -1
  17. package/lib/awscdk/lambda-function.js +2 -2
  18. package/lib/awscdk/private/feature-flags-v2.const.d.ts +2 -3
  19. package/lib/awscdk/private/feature-flags-v2.const.js +4 -5
  20. package/lib/build/build-workflow.js +1 -1
  21. package/lib/cdk/auto-discover-base.js +2 -2
  22. package/lib/cdk/construct-lib.js +1 -1
  23. package/lib/cdk/integration-test-base.js +1 -1
  24. package/lib/cdk/jsii-docgen.js +1 -1
  25. package/lib/cdk/jsii-project.js +1 -1
  26. package/lib/cdk8s/auto-discover.js +2 -2
  27. package/lib/cdk8s/cdk8s-app-py.js +1 -1
  28. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  29. package/lib/cdk8s/cdk8s-construct.js +1 -1
  30. package/lib/cdk8s/cdk8s-deps-py.js +1 -1
  31. package/lib/cdk8s/cdk8s-deps.js +1 -1
  32. package/lib/cdk8s/integration-test.js +1 -1
  33. package/lib/cdktf/cdktf-construct.js +1 -1
  34. package/lib/circleci/circleci.js +1 -1
  35. package/lib/cli/index.js +6 -3
  36. package/lib/component.js +1 -1
  37. package/lib/dependencies.js +1 -1
  38. package/lib/dev-env.js +1 -1
  39. package/lib/docker-compose/docker-compose-service.js +1 -1
  40. package/lib/docker-compose/docker-compose.js +1 -1
  41. package/lib/file.js +1 -1
  42. package/lib/gitattributes.js +1 -1
  43. package/lib/github/actions-provider.js +1 -1
  44. package/lib/github/auto-approve.js +1 -1
  45. package/lib/github/auto-merge.js +1 -1
  46. package/lib/github/auto-queue.js +1 -1
  47. package/lib/github/dependabot.js +1 -1
  48. package/lib/github/github-credentials.js +1 -1
  49. package/lib/github/github-project.js +1 -1
  50. package/lib/github/github.js +1 -1
  51. package/lib/github/merge-queue.js +1 -1
  52. package/lib/github/mergify.js +1 -1
  53. package/lib/github/pr-template.js +1 -1
  54. package/lib/github/pull-request-backport.js +1 -1
  55. package/lib/github/pull-request-lint.js +1 -1
  56. package/lib/github/stale.js +1 -1
  57. package/lib/github/task-workflow-job.js +1 -1
  58. package/lib/github/task-workflow.js +1 -1
  59. package/lib/github/workflow-actions.js +1 -1
  60. package/lib/github/workflow-jobs.js +1 -1
  61. package/lib/github/workflow-steps.js +1 -1
  62. package/lib/github/workflows.js +1 -1
  63. package/lib/gitlab/configuration.js +1 -1
  64. package/lib/gitlab/gitlab-configuration.js +1 -1
  65. package/lib/gitlab/nested-configuration.js +1 -1
  66. package/lib/gitpod.js +1 -1
  67. package/lib/ignore-file.js +1 -1
  68. package/lib/ini.js +1 -1
  69. package/lib/java/java-project.js +1 -1
  70. package/lib/java/junit.js +1 -1
  71. package/lib/java/maven-compile.js +1 -1
  72. package/lib/java/maven-packaging.js +1 -1
  73. package/lib/java/maven-sample.js +1 -1
  74. package/lib/java/pom.js +2 -2
  75. package/lib/java/projenrc.js +1 -1
  76. package/lib/javascript/biome/biome-config.d.ts +126 -50
  77. package/lib/javascript/biome/biome-config.js +74 -39
  78. package/lib/javascript/biome/biome.js +1 -1
  79. package/lib/javascript/bundler.js +1 -1
  80. package/lib/javascript/eslint.js +1 -1
  81. package/lib/javascript/jest.js +4 -4
  82. package/lib/javascript/license-checker.js +1 -1
  83. package/lib/javascript/node-package.js +1 -1
  84. package/lib/javascript/node-project.js +1 -1
  85. package/lib/javascript/npm-config.js +1 -1
  86. package/lib/javascript/prettier.js +1 -1
  87. package/lib/javascript/projenrc.js +1 -1
  88. package/lib/javascript/typescript-config.js +2 -2
  89. package/lib/javascript/upgrade-dependencies.js +2 -2
  90. package/lib/javascript/yarnrc.js +1 -1
  91. package/lib/json-patch.js +1 -1
  92. package/lib/json.js +1 -1
  93. package/lib/license.js +1 -1
  94. package/lib/logger.js +1 -1
  95. package/lib/makefile.js +1 -1
  96. package/lib/object-file.js +1 -1
  97. package/lib/project-build.js +1 -1
  98. package/lib/project-tree.js +1 -1
  99. package/lib/project.js +1 -1
  100. package/lib/projects.js +1 -1
  101. package/lib/projenrc-json.js +2 -2
  102. package/lib/projenrc.js +1 -1
  103. package/lib/python/pip.js +1 -1
  104. package/lib/python/poetry.js +2 -2
  105. package/lib/python/projenrc.js +1 -1
  106. package/lib/python/pyproject-toml-file.js +1 -1
  107. package/lib/python/pytest-sample.js +1 -1
  108. package/lib/python/pytest.js +1 -1
  109. package/lib/python/python-project.js +1 -1
  110. package/lib/python/python-sample.js +1 -1
  111. package/lib/python/requirements-file.js +1 -1
  112. package/lib/python/setuppy.js +1 -1
  113. package/lib/python/setuptools.js +1 -1
  114. package/lib/python/uv-config.d.ts +437 -21
  115. package/lib/python/uv-config.js +437 -2
  116. package/lib/python/uv.js +1 -1
  117. package/lib/python/venv.js +1 -1
  118. package/lib/readme.js +1 -1
  119. package/lib/release/publisher.js +1 -1
  120. package/lib/release/release-trigger.js +1 -1
  121. package/lib/release/release.js +1 -1
  122. package/lib/renovatebot.js +1 -1
  123. package/lib/sample-file.js +2 -2
  124. package/lib/semver.js +1 -1
  125. package/lib/source-code.js +1 -1
  126. package/lib/task-runtime.js +1 -1
  127. package/lib/task.js +1 -1
  128. package/lib/tasks.js +1 -1
  129. package/lib/testing.js +1 -1
  130. package/lib/textfile.js +1 -1
  131. package/lib/toml.js +1 -1
  132. package/lib/typescript/projenrc-ts.js +1 -1
  133. package/lib/typescript/projenrc.js +1 -1
  134. package/lib/typescript/typescript-typedoc.js +1 -1
  135. package/lib/typescript/typescript.js +6 -6
  136. package/lib/version.js +2 -2
  137. package/lib/vscode/devcontainer.js +1 -1
  138. package/lib/vscode/extensions.js +1 -1
  139. package/lib/vscode/launch-config.js +1 -1
  140. package/lib/vscode/settings.js +1 -1
  141. package/lib/vscode/vscode.js +1 -1
  142. package/lib/web/next.js +3 -3
  143. package/lib/web/postcss.js +1 -1
  144. package/lib/web/react.js +4 -4
  145. package/lib/web/tailwind.js +1 -1
  146. package/lib/xmlfile.js +1 -1
  147. package/lib/yaml.js +1 -1
  148. package/node_modules/@oozcitak/dom/README.md +2 -4
  149. package/node_modules/@oozcitak/dom/lib/algorithm/AbortAlgorithm.js +7 -29
  150. package/node_modules/@oozcitak/dom/lib/algorithm/AbortAlgorithm.js.map +1 -1
  151. package/node_modules/@oozcitak/dom/lib/algorithm/AttrAlgorithm.js +3 -3
  152. package/node_modules/@oozcitak/dom/lib/algorithm/AttrAlgorithm.js.map +1 -1
  153. package/node_modules/@oozcitak/dom/lib/algorithm/BoundaryPointAlgorithm.js +14 -14
  154. package/node_modules/@oozcitak/dom/lib/algorithm/BoundaryPointAlgorithm.js.map +1 -1
  155. package/node_modules/@oozcitak/dom/lib/algorithm/CharacterDataAlgorithm.js +40 -62
  156. package/node_modules/@oozcitak/dom/lib/algorithm/CharacterDataAlgorithm.js.map +1 -1
  157. package/node_modules/@oozcitak/dom/lib/algorithm/CreateAlgorithm.js +53 -54
  158. package/node_modules/@oozcitak/dom/lib/algorithm/CreateAlgorithm.js.map +1 -1
  159. package/node_modules/@oozcitak/dom/lib/algorithm/CustomElementAlgorithm.js +14 -14
  160. package/node_modules/@oozcitak/dom/lib/algorithm/CustomElementAlgorithm.js.map +1 -1
  161. package/node_modules/@oozcitak/dom/lib/algorithm/DOMAlgorithm.js +29 -51
  162. package/node_modules/@oozcitak/dom/lib/algorithm/DOMAlgorithm.js.map +1 -1
  163. package/node_modules/@oozcitak/dom/lib/algorithm/DOMTokenListAlgorithm.js +11 -11
  164. package/node_modules/@oozcitak/dom/lib/algorithm/DOMTokenListAlgorithm.js.map +1 -1
  165. package/node_modules/@oozcitak/dom/lib/algorithm/DocumentAlgorithm.js +25 -63
  166. package/node_modules/@oozcitak/dom/lib/algorithm/DocumentAlgorithm.js.map +1 -1
  167. package/node_modules/@oozcitak/dom/lib/algorithm/ElementAlgorithm.js +79 -85
  168. package/node_modules/@oozcitak/dom/lib/algorithm/ElementAlgorithm.js.map +1 -1
  169. package/node_modules/@oozcitak/dom/lib/algorithm/EventAlgorithm.d.ts +1 -1
  170. package/node_modules/@oozcitak/dom/lib/algorithm/EventAlgorithm.js +96 -153
  171. package/node_modules/@oozcitak/dom/lib/algorithm/EventAlgorithm.js.map +1 -1
  172. package/node_modules/@oozcitak/dom/lib/algorithm/EventTargetAlgorithm.js +15 -37
  173. package/node_modules/@oozcitak/dom/lib/algorithm/EventTargetAlgorithm.js.map +1 -1
  174. package/node_modules/@oozcitak/dom/lib/algorithm/MutationAlgorithm.js +229 -404
  175. package/node_modules/@oozcitak/dom/lib/algorithm/MutationAlgorithm.js.map +1 -1
  176. package/node_modules/@oozcitak/dom/lib/algorithm/MutationObserverAlgorithm.js +47 -109
  177. package/node_modules/@oozcitak/dom/lib/algorithm/MutationObserverAlgorithm.js.map +1 -1
  178. package/node_modules/@oozcitak/dom/lib/algorithm/NamespaceAlgorithm.d.ts +5 -1
  179. package/node_modules/@oozcitak/dom/lib/algorithm/NamespaceAlgorithm.js +19 -19
  180. package/node_modules/@oozcitak/dom/lib/algorithm/NamespaceAlgorithm.js.map +1 -1
  181. package/node_modules/@oozcitak/dom/lib/algorithm/NodeAlgorithm.js +69 -124
  182. package/node_modules/@oozcitak/dom/lib/algorithm/NodeAlgorithm.js.map +1 -1
  183. package/node_modules/@oozcitak/dom/lib/algorithm/NodeIteratorAlgorithm.js +11 -11
  184. package/node_modules/@oozcitak/dom/lib/algorithm/NodeIteratorAlgorithm.js.map +1 -1
  185. package/node_modules/@oozcitak/dom/lib/algorithm/OrderedSetAlgorithm.js +20 -72
  186. package/node_modules/@oozcitak/dom/lib/algorithm/OrderedSetAlgorithm.js.map +1 -1
  187. package/node_modules/@oozcitak/dom/lib/algorithm/ParentNodeAlgorithm.js +12 -34
  188. package/node_modules/@oozcitak/dom/lib/algorithm/ParentNodeAlgorithm.js.map +1 -1
  189. package/node_modules/@oozcitak/dom/lib/algorithm/RangeAlgorithm.js +183 -289
  190. package/node_modules/@oozcitak/dom/lib/algorithm/RangeAlgorithm.js.map +1 -1
  191. package/node_modules/@oozcitak/dom/lib/algorithm/SelectorsAlgorithm.js +2 -2
  192. package/node_modules/@oozcitak/dom/lib/algorithm/SelectorsAlgorithm.js.map +1 -1
  193. package/node_modules/@oozcitak/dom/lib/algorithm/ShadowTreeAlgorithm.js +65 -140
  194. package/node_modules/@oozcitak/dom/lib/algorithm/ShadowTreeAlgorithm.js.map +1 -1
  195. package/node_modules/@oozcitak/dom/lib/algorithm/TextAlgorithm.js +63 -89
  196. package/node_modules/@oozcitak/dom/lib/algorithm/TextAlgorithm.js.map +1 -1
  197. package/node_modules/@oozcitak/dom/lib/algorithm/TraversalAlgorithm.js +6 -6
  198. package/node_modules/@oozcitak/dom/lib/algorithm/TraversalAlgorithm.js.map +1 -1
  199. package/node_modules/@oozcitak/dom/lib/algorithm/TreeAlgorithm.js +141 -208
  200. package/node_modules/@oozcitak/dom/lib/algorithm/TreeAlgorithm.js.map +1 -1
  201. package/node_modules/@oozcitak/dom/lib/algorithm/TreeWalkerAlgorithm.js +13 -13
  202. package/node_modules/@oozcitak/dom/lib/algorithm/TreeWalkerAlgorithm.js.map +1 -1
  203. package/node_modules/@oozcitak/dom/lib/algorithm/WebIDLAlgorithm.js +1 -1
  204. package/node_modules/@oozcitak/dom/lib/algorithm/WebIDLAlgorithm.js.map +1 -1
  205. package/node_modules/@oozcitak/dom/lib/algorithm/XMLAlgorithm.js +16 -16
  206. package/node_modules/@oozcitak/dom/lib/algorithm/XMLAlgorithm.js.map +1 -1
  207. package/node_modules/@oozcitak/dom/lib/algorithm/index.js +42 -31
  208. package/node_modules/@oozcitak/dom/lib/algorithm/index.js.map +1 -1
  209. package/node_modules/@oozcitak/dom/lib/dom/AbortControllerImpl.js +12 -15
  210. package/node_modules/@oozcitak/dom/lib/dom/AbortControllerImpl.js.map +1 -1
  211. package/node_modules/@oozcitak/dom/lib/dom/AbortSignalImpl.js +20 -43
  212. package/node_modules/@oozcitak/dom/lib/dom/AbortSignalImpl.js.map +1 -1
  213. package/node_modules/@oozcitak/dom/lib/dom/AbstractRangeImpl.js +20 -62
  214. package/node_modules/@oozcitak/dom/lib/dom/AbstractRangeImpl.js.map +1 -1
  215. package/node_modules/@oozcitak/dom/lib/dom/AttrImpl.js +53 -92
  216. package/node_modules/@oozcitak/dom/lib/dom/AttrImpl.js.map +1 -1
  217. package/node_modules/@oozcitak/dom/lib/dom/CDATASectionImpl.js +13 -27
  218. package/node_modules/@oozcitak/dom/lib/dom/CDATASectionImpl.js.map +1 -1
  219. package/node_modules/@oozcitak/dom/lib/dom/CharacterDataImpl.js +40 -88
  220. package/node_modules/@oozcitak/dom/lib/dom/CharacterDataImpl.js.map +1 -1
  221. package/node_modules/@oozcitak/dom/lib/dom/ChildNodeImpl.js +41 -55
  222. package/node_modules/@oozcitak/dom/lib/dom/ChildNodeImpl.js.map +1 -1
  223. package/node_modules/@oozcitak/dom/lib/dom/CommentImpl.js +13 -28
  224. package/node_modules/@oozcitak/dom/lib/dom/CommentImpl.js.map +1 -1
  225. package/node_modules/@oozcitak/dom/lib/dom/CustomEventImpl.js +14 -36
  226. package/node_modules/@oozcitak/dom/lib/dom/CustomEventImpl.js.map +1 -1
  227. package/node_modules/@oozcitak/dom/lib/dom/DOMException.js +114 -204
  228. package/node_modules/@oozcitak/dom/lib/dom/DOMException.js.map +1 -1
  229. package/node_modules/@oozcitak/dom/lib/dom/DOMImpl.js +51 -68
  230. package/node_modules/@oozcitak/dom/lib/dom/DOMImpl.js.map +1 -1
  231. package/node_modules/@oozcitak/dom/lib/dom/DOMImplementationImpl.js +32 -31
  232. package/node_modules/@oozcitak/dom/lib/dom/DOMImplementationImpl.js.map +1 -1
  233. package/node_modules/@oozcitak/dom/lib/dom/DOMTokenListImpl.js +105 -163
  234. package/node_modules/@oozcitak/dom/lib/dom/DOMTokenListImpl.js.map +1 -1
  235. package/node_modules/@oozcitak/dom/lib/dom/DocumentFragmentImpl.d.ts +1 -1
  236. package/node_modules/@oozcitak/dom/lib/dom/DocumentFragmentImpl.js +30 -73
  237. package/node_modules/@oozcitak/dom/lib/dom/DocumentFragmentImpl.js.map +1 -1
  238. package/node_modules/@oozcitak/dom/lib/dom/DocumentImpl.d.ts +1 -1
  239. package/node_modules/@oozcitak/dom/lib/dom/DocumentImpl.js +198 -330
  240. package/node_modules/@oozcitak/dom/lib/dom/DocumentImpl.js.map +1 -1
  241. package/node_modules/@oozcitak/dom/lib/dom/DocumentOrShadowRootImpl.js +3 -5
  242. package/node_modules/@oozcitak/dom/lib/dom/DocumentOrShadowRootImpl.js.map +1 -1
  243. package/node_modules/@oozcitak/dom/lib/dom/DocumentTypeImpl.js +29 -75
  244. package/node_modules/@oozcitak/dom/lib/dom/DocumentTypeImpl.js.map +1 -1
  245. package/node_modules/@oozcitak/dom/lib/dom/ElementImpl.d.ts +1 -1
  246. package/node_modules/@oozcitak/dom/lib/dom/ElementImpl.js +234 -393
  247. package/node_modules/@oozcitak/dom/lib/dom/ElementImpl.js.map +1 -1
  248. package/node_modules/@oozcitak/dom/lib/dom/EventImpl.js +89 -137
  249. package/node_modules/@oozcitak/dom/lib/dom/EventImpl.js.map +1 -1
  250. package/node_modules/@oozcitak/dom/lib/dom/EventTargetImpl.js +32 -57
  251. package/node_modules/@oozcitak/dom/lib/dom/EventTargetImpl.js.map +1 -1
  252. package/node_modules/@oozcitak/dom/lib/dom/HTMLCollectionImpl.js +58 -64
  253. package/node_modules/@oozcitak/dom/lib/dom/HTMLCollectionImpl.js.map +1 -1
  254. package/node_modules/@oozcitak/dom/lib/dom/MutationObserverImpl.js +36 -88
  255. package/node_modules/@oozcitak/dom/lib/dom/MutationObserverImpl.js.map +1 -1
  256. package/node_modules/@oozcitak/dom/lib/dom/MutationRecordImpl.js +33 -60
  257. package/node_modules/@oozcitak/dom/lib/dom/MutationRecordImpl.js.map +1 -1
  258. package/node_modules/@oozcitak/dom/lib/dom/NamedNodeMapImpl.js +33 -47
  259. package/node_modules/@oozcitak/dom/lib/dom/NamedNodeMapImpl.js.map +1 -1
  260. package/node_modules/@oozcitak/dom/lib/dom/NodeFilterImpl.js +58 -42
  261. package/node_modules/@oozcitak/dom/lib/dom/NodeFilterImpl.js.map +1 -1
  262. package/node_modules/@oozcitak/dom/lib/dom/NodeImpl.d.ts +1 -1
  263. package/node_modules/@oozcitak/dom/lib/dom/NodeImpl.js +375 -471
  264. package/node_modules/@oozcitak/dom/lib/dom/NodeImpl.js.map +1 -1
  265. package/node_modules/@oozcitak/dom/lib/dom/NodeIteratorImpl.js +29 -49
  266. package/node_modules/@oozcitak/dom/lib/dom/NodeIteratorImpl.js.map +1 -1
  267. package/node_modules/@oozcitak/dom/lib/dom/NodeListImpl.js +69 -97
  268. package/node_modules/@oozcitak/dom/lib/dom/NodeListImpl.js.map +1 -1
  269. package/node_modules/@oozcitak/dom/lib/dom/NodeListStaticImpl.js +66 -93
  270. package/node_modules/@oozcitak/dom/lib/dom/NodeListStaticImpl.js.map +1 -1
  271. package/node_modules/@oozcitak/dom/lib/dom/NonDocumentTypeChildNodeImpl.js +33 -43
  272. package/node_modules/@oozcitak/dom/lib/dom/NonDocumentTypeChildNodeImpl.js.map +1 -1
  273. package/node_modules/@oozcitak/dom/lib/dom/NonElementParentNodeImpl.js +9 -11
  274. package/node_modules/@oozcitak/dom/lib/dom/NonElementParentNodeImpl.js.map +1 -1
  275. package/node_modules/@oozcitak/dom/lib/dom/ParentNodeImpl.js +73 -121
  276. package/node_modules/@oozcitak/dom/lib/dom/ParentNodeImpl.js.map +1 -1
  277. package/node_modules/@oozcitak/dom/lib/dom/ProcessingInstructionImpl.js +19 -36
  278. package/node_modules/@oozcitak/dom/lib/dom/ProcessingInstructionImpl.js.map +1 -1
  279. package/node_modules/@oozcitak/dom/lib/dom/RangeImpl.js +174 -241
  280. package/node_modules/@oozcitak/dom/lib/dom/RangeImpl.js.map +1 -1
  281. package/node_modules/@oozcitak/dom/lib/dom/ShadowRootImpl.js +22 -43
  282. package/node_modules/@oozcitak/dom/lib/dom/ShadowRootImpl.js.map +1 -1
  283. package/node_modules/@oozcitak/dom/lib/dom/SlotableImpl.js +13 -25
  284. package/node_modules/@oozcitak/dom/lib/dom/SlotableImpl.js.map +1 -1
  285. package/node_modules/@oozcitak/dom/lib/dom/StaticRangeImpl.js +12 -25
  286. package/node_modules/@oozcitak/dom/lib/dom/StaticRangeImpl.js.map +1 -1
  287. package/node_modules/@oozcitak/dom/lib/dom/TextImpl.js +34 -80
  288. package/node_modules/@oozcitak/dom/lib/dom/TextImpl.js.map +1 -1
  289. package/node_modules/@oozcitak/dom/lib/dom/TraverserImpl.js +15 -23
  290. package/node_modules/@oozcitak/dom/lib/dom/TraverserImpl.js.map +1 -1
  291. package/node_modules/@oozcitak/dom/lib/dom/TreeWalkerImpl.js +46 -64
  292. package/node_modules/@oozcitak/dom/lib/dom/TreeWalkerImpl.js.map +1 -1
  293. package/node_modules/@oozcitak/dom/lib/dom/WindowImpl.js +21 -42
  294. package/node_modules/@oozcitak/dom/lib/dom/WindowImpl.js.map +1 -1
  295. package/node_modules/@oozcitak/dom/lib/dom/XMLDocumentImpl.js +6 -20
  296. package/node_modules/@oozcitak/dom/lib/dom/XMLDocumentImpl.js.map +1 -1
  297. package/node_modules/@oozcitak/dom/lib/dom/index.js +92 -91
  298. package/node_modules/@oozcitak/dom/lib/dom/index.js.map +1 -1
  299. package/node_modules/@oozcitak/dom/lib/dom/interfaces.d.ts +28 -25
  300. package/node_modules/@oozcitak/dom/lib/dom/interfaces.js +9 -7
  301. package/node_modules/@oozcitak/dom/lib/dom/interfaces.js.map +1 -1
  302. package/node_modules/@oozcitak/dom/lib/index.js +5 -4
  303. package/node_modules/@oozcitak/dom/lib/index.js.map +1 -1
  304. package/node_modules/@oozcitak/dom/lib/parser/DOMParserImpl.js +13 -15
  305. package/node_modules/@oozcitak/dom/lib/parser/DOMParserImpl.js.map +1 -1
  306. package/node_modules/@oozcitak/dom/lib/parser/XMLParserImpl.js +78 -128
  307. package/node_modules/@oozcitak/dom/lib/parser/XMLParserImpl.js.map +1 -1
  308. package/node_modules/@oozcitak/dom/lib/parser/XMLStringLexer.js +107 -123
  309. package/node_modules/@oozcitak/dom/lib/parser/XMLStringLexer.js.map +1 -1
  310. package/node_modules/@oozcitak/dom/lib/parser/index.js +2 -1
  311. package/node_modules/@oozcitak/dom/lib/parser/index.js.map +1 -1
  312. package/node_modules/@oozcitak/dom/lib/parser/interfaces.d.ts +2 -2
  313. package/node_modules/@oozcitak/dom/lib/parser/interfaces.js +2 -1
  314. package/node_modules/@oozcitak/dom/lib/parser/interfaces.js.map +1 -1
  315. package/node_modules/@oozcitak/dom/lib/serializer/LocalNameSet.js +10 -12
  316. package/node_modules/@oozcitak/dom/lib/serializer/LocalNameSet.js.map +1 -1
  317. package/node_modules/@oozcitak/dom/lib/serializer/NamespacePrefixMap.js +23 -25
  318. package/node_modules/@oozcitak/dom/lib/serializer/NamespacePrefixMap.js.map +1 -1
  319. package/node_modules/@oozcitak/dom/lib/serializer/XMLSerializerImpl.js +405 -517
  320. package/node_modules/@oozcitak/dom/lib/serializer/XMLSerializerImpl.js.map +1 -1
  321. package/node_modules/@oozcitak/dom/lib/serializer/index.js +2 -1
  322. package/node_modules/@oozcitak/dom/lib/serializer/index.js.map +1 -1
  323. package/node_modules/@oozcitak/dom/lib/util/Cast.js +6 -8
  324. package/node_modules/@oozcitak/dom/lib/util/Cast.js.map +1 -1
  325. package/node_modules/@oozcitak/dom/lib/util/EmptySet.d.ts +13 -5
  326. package/node_modules/@oozcitak/dom/lib/util/EmptySet.js +33 -46
  327. package/node_modules/@oozcitak/dom/lib/util/EmptySet.js.map +1 -1
  328. package/node_modules/@oozcitak/dom/lib/util/Guard.js +47 -49
  329. package/node_modules/@oozcitak/dom/lib/util/Guard.js.map +1 -1
  330. package/node_modules/@oozcitak/dom/lib/util/index.js +4 -3
  331. package/node_modules/@oozcitak/dom/lib/util/index.js.map +1 -1
  332. package/node_modules/@oozcitak/dom/package.json +14 -41
  333. package/node_modules/@oozcitak/infra/LICENSE +21 -21
  334. package/node_modules/@oozcitak/infra/README.md +11 -13
  335. package/node_modules/@oozcitak/infra/lib/Base64.js +3 -3
  336. package/node_modules/@oozcitak/infra/lib/Base64.js.map +1 -1
  337. package/node_modules/@oozcitak/infra/lib/Byte.js +1 -1
  338. package/node_modules/@oozcitak/infra/lib/Byte.js.map +1 -1
  339. package/node_modules/@oozcitak/infra/lib/ByteSequence.js +19 -39
  340. package/node_modules/@oozcitak/infra/lib/ByteSequence.js.map +1 -1
  341. package/node_modules/@oozcitak/infra/lib/CodePoints.js +1 -0
  342. package/node_modules/@oozcitak/infra/lib/CodePoints.js.map +1 -1
  343. package/node_modules/@oozcitak/infra/lib/JSON.d.ts +1 -1
  344. package/node_modules/@oozcitak/infra/lib/JSON.js +18 -40
  345. package/node_modules/@oozcitak/infra/lib/JSON.js.map +1 -1
  346. package/node_modules/@oozcitak/infra/lib/List.d.ts +4 -4
  347. package/node_modules/@oozcitak/infra/lib/List.js +49 -173
  348. package/node_modules/@oozcitak/infra/lib/List.js.map +1 -1
  349. package/node_modules/@oozcitak/infra/lib/Map.d.ts +1 -1
  350. package/node_modules/@oozcitak/infra/lib/Map.js +43 -177
  351. package/node_modules/@oozcitak/infra/lib/Map.js.map +1 -1
  352. package/node_modules/@oozcitak/infra/lib/Namespace.js +1 -0
  353. package/node_modules/@oozcitak/infra/lib/Namespace.js.map +1 -1
  354. package/node_modules/@oozcitak/infra/lib/Queue.d.ts +1 -1
  355. package/node_modules/@oozcitak/infra/lib/Queue.js +2 -2
  356. package/node_modules/@oozcitak/infra/lib/Queue.js.map +1 -1
  357. package/node_modules/@oozcitak/infra/lib/Set.d.ts +1 -1
  358. package/node_modules/@oozcitak/infra/lib/Set.js +76 -254
  359. package/node_modules/@oozcitak/infra/lib/Set.js.map +1 -1
  360. package/node_modules/@oozcitak/infra/lib/Stack.d.ts +1 -1
  361. package/node_modules/@oozcitak/infra/lib/Stack.js +2 -2
  362. package/node_modules/@oozcitak/infra/lib/Stack.js.map +1 -1
  363. package/node_modules/@oozcitak/infra/lib/String.d.ts +2 -2
  364. package/node_modules/@oozcitak/infra/lib/String.js +75 -131
  365. package/node_modules/@oozcitak/infra/lib/String.js.map +1 -1
  366. package/node_modules/@oozcitak/infra/lib/index.js +46 -19
  367. package/node_modules/@oozcitak/infra/lib/index.js.map +1 -1
  368. package/node_modules/@oozcitak/infra/package.json +41 -54
  369. package/node_modules/@oozcitak/url/LICENSE +21 -21
  370. package/node_modules/@oozcitak/url/README.md +25 -27
  371. package/node_modules/@oozcitak/url/lib/URLAlgorithm.d.ts +3 -3
  372. package/node_modules/@oozcitak/url/lib/URLAlgorithm.js +287 -460
  373. package/node_modules/@oozcitak/url/lib/URLAlgorithm.js.map +1 -1
  374. package/node_modules/@oozcitak/url/lib/URLImpl.js +285 -331
  375. package/node_modules/@oozcitak/url/lib/URLImpl.js.map +1 -1
  376. package/node_modules/@oozcitak/url/lib/URLSearchParamsImpl.d.ts +1 -1
  377. package/node_modules/@oozcitak/url/lib/URLSearchParamsImpl.js +71 -190
  378. package/node_modules/@oozcitak/url/lib/URLSearchParamsImpl.js.map +1 -1
  379. package/node_modules/@oozcitak/url/lib/index.js +3 -2
  380. package/node_modules/@oozcitak/url/lib/index.js.map +1 -1
  381. package/node_modules/@oozcitak/url/lib/interfaces.d.ts +2 -2
  382. package/node_modules/@oozcitak/url/lib/interfaces.js +2 -1
  383. package/node_modules/@oozcitak/url/lib/interfaces.js.map +1 -1
  384. package/node_modules/@oozcitak/url/package.json +42 -55
  385. package/node_modules/@oozcitak/util/LICENSE +21 -21
  386. package/node_modules/@oozcitak/util/README.md +8 -10
  387. package/node_modules/@oozcitak/util/lib/CompareCache.js +12 -12
  388. package/node_modules/@oozcitak/util/lib/CompareCache.js.map +1 -1
  389. package/node_modules/@oozcitak/util/lib/FixedSizeSet.d.ts +6 -6
  390. package/node_modules/@oozcitak/util/lib/FixedSizeSet.js +42 -117
  391. package/node_modules/@oozcitak/util/lib/FixedSizeSet.js.map +1 -1
  392. package/node_modules/@oozcitak/util/lib/Lazy.js +17 -19
  393. package/node_modules/@oozcitak/util/lib/Lazy.js.map +1 -1
  394. package/node_modules/@oozcitak/util/lib/ObjectCache.d.ts +4 -4
  395. package/node_modules/@oozcitak/util/lib/ObjectCache.js +44 -118
  396. package/node_modules/@oozcitak/util/lib/ObjectCache.js.map +1 -1
  397. package/node_modules/@oozcitak/util/lib/StringWalker.js +41 -47
  398. package/node_modules/@oozcitak/util/lib/StringWalker.js.map +1 -1
  399. package/node_modules/@oozcitak/util/lib/index.d.ts +23 -25
  400. package/node_modules/@oozcitak/util/lib/index.js +62 -88
  401. package/node_modules/@oozcitak/util/lib/index.js.map +1 -1
  402. package/node_modules/@oozcitak/util/package.json +37 -50
  403. package/node_modules/argparse/LICENSE +254 -0
  404. package/node_modules/argparse/README.md +84 -0
  405. package/node_modules/argparse/argparse.js +3707 -0
  406. package/node_modules/argparse/lib/sub.js +67 -0
  407. package/node_modules/argparse/lib/textwrap.js +440 -0
  408. package/node_modules/argparse/package.json +31 -0
  409. package/node_modules/{xmlbuilder2/node_modules/js-yaml → js-yaml}/README.md +36 -88
  410. package/node_modules/{xmlbuilder2/node_modules/js-yaml → js-yaml}/bin/js-yaml.js +17 -23
  411. package/node_modules/js-yaml/dist/js-yaml.js +3880 -0
  412. package/node_modules/js-yaml/dist/js-yaml.min.js +2 -0
  413. package/node_modules/{xmlbuilder2/node_modules/js-yaml/dist/js-yaml.js → js-yaml/dist/js-yaml.mjs} +2926 -3075
  414. package/node_modules/js-yaml/index.js +47 -0
  415. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/dumper.js +205 -90
  416. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/exception.js +22 -10
  417. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/loader.js +149 -76
  418. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/schema/core.js +1 -8
  419. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js → js-yaml/lib/schema/default.js} +1 -7
  420. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/schema/json.js +1 -7
  421. package/node_modules/js-yaml/lib/schema.js +121 -0
  422. package/node_modules/js-yaml/lib/snippet.js +101 -0
  423. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/binary.js +4 -17
  424. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/float.js +2 -21
  425. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/int.js +18 -35
  426. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/null.js +2 -1
  427. package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type.js +14 -9
  428. package/node_modules/js-yaml/package.json +66 -0
  429. package/node_modules/xmlbuilder2/README.md +8 -7
  430. package/node_modules/xmlbuilder2/lib/builder/BuilderFunctions.js +36 -37
  431. package/node_modules/xmlbuilder2/lib/builder/BuilderFunctions.js.map +1 -1
  432. package/node_modules/xmlbuilder2/lib/builder/BuilderFunctionsCB.js +3 -3
  433. package/node_modules/xmlbuilder2/lib/builder/BuilderFunctionsCB.js.map +1 -1
  434. package/node_modules/xmlbuilder2/lib/builder/XMLBuilderCBImpl.d.ts +0 -1
  435. package/node_modules/xmlbuilder2/lib/builder/XMLBuilderCBImpl.js +235 -333
  436. package/node_modules/xmlbuilder2/lib/builder/XMLBuilderCBImpl.js.map +1 -1
  437. package/node_modules/xmlbuilder2/lib/builder/XMLBuilderImpl.js +271 -371
  438. package/node_modules/xmlbuilder2/lib/builder/XMLBuilderImpl.js.map +1 -1
  439. package/node_modules/xmlbuilder2/lib/builder/dom.js +13 -13
  440. package/node_modules/xmlbuilder2/lib/builder/dom.js.map +1 -1
  441. package/node_modules/xmlbuilder2/lib/builder/index.js +9 -8
  442. package/node_modules/xmlbuilder2/lib/builder/index.js.map +1 -1
  443. package/node_modules/xmlbuilder2/lib/constants.js +1 -0
  444. package/node_modules/xmlbuilder2/lib/constants.js.map +1 -1
  445. package/node_modules/xmlbuilder2/lib/index.js +7 -6
  446. package/node_modules/xmlbuilder2/lib/index.js.map +1 -1
  447. package/node_modules/xmlbuilder2/lib/interfaces.d.ts +25 -24
  448. package/node_modules/xmlbuilder2/lib/interfaces.js +1 -0
  449. package/node_modules/xmlbuilder2/lib/interfaces.js.map +1 -1
  450. package/node_modules/xmlbuilder2/lib/readers/BaseReader.js +53 -56
  451. package/node_modules/xmlbuilder2/lib/readers/BaseReader.js.map +1 -1
  452. package/node_modules/xmlbuilder2/lib/readers/JSONReader.js +7 -24
  453. package/node_modules/xmlbuilder2/lib/readers/JSONReader.js.map +1 -1
  454. package/node_modules/xmlbuilder2/lib/readers/ObjectReader.js +59 -77
  455. package/node_modules/xmlbuilder2/lib/readers/ObjectReader.js.map +1 -1
  456. package/node_modules/xmlbuilder2/lib/readers/XMLReader.js +61 -126
  457. package/node_modules/xmlbuilder2/lib/readers/XMLReader.js.map +1 -1
  458. package/node_modules/xmlbuilder2/lib/readers/YAMLReader.js +9 -26
  459. package/node_modules/xmlbuilder2/lib/readers/YAMLReader.js.map +1 -1
  460. package/node_modules/xmlbuilder2/lib/readers/index.js +5 -4
  461. package/node_modules/xmlbuilder2/lib/readers/index.js.map +1 -1
  462. package/node_modules/xmlbuilder2/lib/writers/BaseCBWriter.d.ts +1 -0
  463. package/node_modules/xmlbuilder2/lib/writers/BaseCBWriter.js +14 -8
  464. package/node_modules/xmlbuilder2/lib/writers/BaseCBWriter.js.map +1 -1
  465. package/node_modules/xmlbuilder2/lib/writers/BaseWriter.js +474 -609
  466. package/node_modules/xmlbuilder2/lib/writers/BaseWriter.js.map +1 -1
  467. package/node_modules/xmlbuilder2/lib/writers/JSONCBWriter.js +48 -64
  468. package/node_modules/xmlbuilder2/lib/writers/JSONCBWriter.js.map +1 -1
  469. package/node_modules/xmlbuilder2/lib/writers/JSONWriter.js +54 -95
  470. package/node_modules/xmlbuilder2/lib/writers/JSONWriter.js.map +1 -1
  471. package/node_modules/xmlbuilder2/lib/writers/MapWriter.js +21 -36
  472. package/node_modules/xmlbuilder2/lib/writers/MapWriter.js.map +1 -1
  473. package/node_modules/xmlbuilder2/lib/writers/ObjectWriter.js +131 -166
  474. package/node_modules/xmlbuilder2/lib/writers/ObjectWriter.js.map +1 -1
  475. package/node_modules/xmlbuilder2/lib/writers/XMLCBWriter.d.ts +1 -1
  476. package/node_modules/xmlbuilder2/lib/writers/XMLCBWriter.js +42 -56
  477. package/node_modules/xmlbuilder2/lib/writers/XMLCBWriter.js.map +1 -1
  478. package/node_modules/xmlbuilder2/lib/writers/XMLWriter.js +48 -62
  479. package/node_modules/xmlbuilder2/lib/writers/XMLWriter.js.map +1 -1
  480. package/node_modules/xmlbuilder2/lib/writers/YAMLCBWriter.js +43 -59
  481. package/node_modules/xmlbuilder2/lib/writers/YAMLCBWriter.js.map +1 -1
  482. package/node_modules/xmlbuilder2/lib/writers/YAMLWriter.js +49 -89
  483. package/node_modules/xmlbuilder2/lib/writers/YAMLWriter.js.map +1 -1
  484. package/node_modules/xmlbuilder2/lib/writers/index.js +6 -5
  485. package/node_modules/xmlbuilder2/lib/writers/index.js.map +1 -1
  486. package/node_modules/xmlbuilder2/lib/xmlbuilder2.min.js +2 -8
  487. package/node_modules/xmlbuilder2/lib/xmlbuilder2.min.js.LICENSE.txt +10 -0
  488. package/node_modules/xmlbuilder2/package.json +34 -52
  489. package/package.json +8 -13
  490. package/node_modules/sprintf-js/.npmignore +0 -1
  491. package/node_modules/sprintf-js/LICENSE +0 -24
  492. package/node_modules/sprintf-js/README.md +0 -88
  493. package/node_modules/sprintf-js/bower.json +0 -14
  494. package/node_modules/sprintf-js/demo/angular.html +0 -20
  495. package/node_modules/sprintf-js/dist/angular-sprintf.min.js +0 -4
  496. package/node_modules/sprintf-js/dist/angular-sprintf.min.js.map +0 -1
  497. package/node_modules/sprintf-js/dist/angular-sprintf.min.map +0 -1
  498. package/node_modules/sprintf-js/dist/sprintf.min.js +0 -4
  499. package/node_modules/sprintf-js/dist/sprintf.min.js.map +0 -1
  500. package/node_modules/sprintf-js/dist/sprintf.min.map +0 -1
  501. package/node_modules/sprintf-js/gruntfile.js +0 -36
  502. package/node_modules/sprintf-js/package.json +0 -22
  503. package/node_modules/sprintf-js/src/angular-sprintf.js +0 -18
  504. package/node_modules/sprintf-js/src/sprintf.js +0 -208
  505. package/node_modules/sprintf-js/test/test.js +0 -82
  506. package/node_modules/xmlbuilder2/node_modules/argparse/LICENSE +0 -21
  507. package/node_modules/xmlbuilder2/node_modules/argparse/README.md +0 -257
  508. package/node_modules/xmlbuilder2/node_modules/argparse/index.js +0 -3
  509. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/append/constant.js +0 -47
  510. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/append.js +0 -53
  511. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/count.js +0 -40
  512. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/help.js +0 -47
  513. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/store/constant.js +0 -43
  514. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/store/false.js +0 -27
  515. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/store/true.js +0 -26
  516. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/store.js +0 -50
  517. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/subparsers.js +0 -149
  518. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action/version.js +0 -47
  519. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action.js +0 -146
  520. package/node_modules/xmlbuilder2/node_modules/argparse/lib/action_container.js +0 -482
  521. package/node_modules/xmlbuilder2/node_modules/argparse/lib/argparse.js +0 -14
  522. package/node_modules/xmlbuilder2/node_modules/argparse/lib/argument/error.js +0 -50
  523. package/node_modules/xmlbuilder2/node_modules/argparse/lib/argument/exclusive.js +0 -54
  524. package/node_modules/xmlbuilder2/node_modules/argparse/lib/argument/group.js +0 -75
  525. package/node_modules/xmlbuilder2/node_modules/argparse/lib/argument_parser.js +0 -1161
  526. package/node_modules/xmlbuilder2/node_modules/argparse/lib/const.js +0 -21
  527. package/node_modules/xmlbuilder2/node_modules/argparse/lib/help/added_formatters.js +0 -87
  528. package/node_modules/xmlbuilder2/node_modules/argparse/lib/help/formatter.js +0 -795
  529. package/node_modules/xmlbuilder2/node_modules/argparse/lib/namespace.js +0 -76
  530. package/node_modules/xmlbuilder2/node_modules/argparse/lib/utils.js +0 -57
  531. package/node_modules/xmlbuilder2/node_modules/argparse/package.json +0 -34
  532. package/node_modules/xmlbuilder2/node_modules/js-yaml/dist/js-yaml.min.js +0 -1
  533. package/node_modules/xmlbuilder2/node_modules/js-yaml/index.js +0 -7
  534. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/mark.js +0 -76
  535. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +0 -25
  536. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/schema.js +0 -108
  537. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/type/js/function.js +0 -93
  538. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +0 -60
  539. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +0 -28
  540. package/node_modules/xmlbuilder2/node_modules/js-yaml/lib/js-yaml.js +0 -39
  541. package/node_modules/xmlbuilder2/node_modules/js-yaml/package.json +0 -49
  542. /package/node_modules/{xmlbuilder2/node_modules/js-yaml → js-yaml}/LICENSE +0 -0
  543. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/common.js +0 -0
  544. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/schema/failsafe.js +0 -0
  545. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/bool.js +0 -0
  546. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/map.js +0 -0
  547. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/merge.js +0 -0
  548. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/omap.js +0 -0
  549. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/pairs.js +0 -0
  550. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/seq.js +0 -0
  551. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/set.js +0 -0
  552. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/str.js +0 -0
  553. /package/node_modules/{xmlbuilder2/node_modules/js-yaml/lib/js-yaml → js-yaml/lib}/type/timestamp.js +0 -0
  554. /package/node_modules/xmlbuilder2/{LICENSE → LICENSE.txt} +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TrailingCommas2 = exports.TrailingCommas = exports.Semicolons = exports.QuoteProperties = exports.OperatorLinebreak = exports.ArrowParentheses = exports.WhitespaceSensitivity = exports.SelfCloseVoidElements = exports.QuoteStyle = exports.VcsClientKind = exports.RuleDomainValue = exports.JsxRuntime = exports.LineEnding = exports.IndentStyle = exports.Expand = exports.AttributePosition = void 0;
3
+ exports.JsonTrailingCommas = exports.JsTrailingCommas = exports.Semicolons = exports.QuoteProperties = exports.OperatorLinebreak = exports.ArrowParentheses = exports.WhitespaceSensitivity = exports.SelfCloseVoidElements = exports.QuoteStyle = exports.VcsClientKind = exports.RuleDomainValue = exports.JsxRuntime = exports.LineEnding = exports.IndentStyle = exports.Expand = exports.AttributePosition = void 0;
4
4
  exports.toJson_BiomeConfiguration = toJson_BiomeConfiguration;
5
5
  exports.toJson_AssistConfiguration = toJson_AssistConfiguration;
6
6
  exports.toJson_CssConfiguration = toJson_CssConfiguration;
@@ -406,11 +406,12 @@ var AttributePosition;
406
406
  */
407
407
  var Expand;
408
408
  (function (Expand) {
409
- /** auto */
409
+ /** Objects are expanded when the first property has a leading newline. Arrays are always
410
+ expanded if they are shorter than the line width. (auto) */
410
411
  Expand["AUTO"] = "auto";
411
- /** always */
412
+ /** Objects and arrays are always expanded. (always) */
412
413
  Expand["ALWAYS"] = "always";
413
- /** never */
414
+ /** Objects and arrays are never expanded, if they are shorter than the line width. (never) */
414
415
  Expand["NEVER"] = "never";
415
416
  })(Expand || (exports.Expand = Expand = {}));
416
417
  /**
@@ -418,9 +419,9 @@ var Expand;
418
419
  */
419
420
  var IndentStyle;
420
421
  (function (IndentStyle) {
421
- /** tab */
422
+ /** Indent with Tab (tab) */
422
423
  IndentStyle["TAB"] = "tab";
423
- /** space */
424
+ /** Indent with Space (space) */
424
425
  IndentStyle["SPACE"] = "space";
425
426
  })(IndentStyle || (exports.IndentStyle = IndentStyle = {}));
426
427
  /**
@@ -428,13 +429,13 @@ var IndentStyle;
428
429
  */
429
430
  var LineEnding;
430
431
  (function (LineEnding) {
431
- /** lf */
432
+ /** Line Feed only (\n), common on Linux and macOS as well as inside git repos (lf) */
432
433
  LineEnding["LF"] = "lf";
433
- /** crlf */
434
+ /** Carriage Return + Line Feed characters (\r\n), common on Windows (crlf) */
434
435
  LineEnding["CRLF"] = "crlf";
435
- /** cr */
436
+ /** Carriage Return character only (\r), used very rarely (cr) */
436
437
  LineEnding["CR"] = "cr";
437
- /** auto */
438
+ /** Automatically use CRLF on Windows and LF on other platforms (auto) */
438
439
  LineEnding["AUTO"] = "auto";
439
440
  })(LineEnding || (exports.LineEnding = LineEnding = {}));
440
441
  /**
@@ -659,9 +660,18 @@ function toJson_JsFormatterConfiguration(obj) {
659
660
  */
660
661
  var JsxRuntime;
661
662
  (function (JsxRuntime) {
662
- /** transparent */
663
+ /** Indicates a modern or native JSX environment, that doesn't require
664
+ special handling by Biome. (transparent) */
663
665
  JsxRuntime["TRANSPARENT"] = "transparent";
664
- /** reactClassic */
666
+ /** Indicates a classic React environment that requires the `React` import.
667
+
668
+ Corresponds to the `react` value for the `jsx` option in TypeScript's
669
+ `tsconfig.json`.
670
+
671
+ This option should only be necessary if you cannot upgrade to a React
672
+ version that supports the new JSX runtime. For more information about
673
+ the old vs. new JSX runtime, please see:
674
+ <https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html> (reactClassic) */
665
675
  JsxRuntime["REACT_CLASSIC"] = "reactClassic";
666
676
  })(JsxRuntime || (exports.JsxRuntime = JsxRuntime = {}));
667
677
  /**
@@ -770,11 +780,11 @@ function toJson_JsonParserConfiguration(obj) {
770
780
  */
771
781
  var RuleDomainValue;
772
782
  (function (RuleDomainValue) {
773
- /** all */
783
+ /** Enables all the rules that belong to this domain (all) */
774
784
  RuleDomainValue["ALL"] = "all";
775
- /** none */
785
+ /** Disables all the rules that belong to this domain (none) */
776
786
  RuleDomainValue["NONE"] = "none";
777
- /** recommended */
787
+ /** Enables only the recommended rules for this domain (recommended) */
778
788
  RuleDomainValue["RECOMMENDED"] = "recommended";
779
789
  })(RuleDomainValue || (exports.RuleDomainValue = RuleDomainValue = {}));
780
790
  /**
@@ -921,9 +931,9 @@ var QuoteStyle;
921
931
  */
922
932
  var SelfCloseVoidElements;
923
933
  (function (SelfCloseVoidElements) {
924
- /** never */
934
+ /** The `/` inside void elements is removed by the formatter (never) */
925
935
  SelfCloseVoidElements["NEVER"] = "never";
926
- /** always */
936
+ /** The `/` inside void elements is always added (always) */
927
937
  SelfCloseVoidElements["ALWAYS"] = "always";
928
938
  })(SelfCloseVoidElements || (exports.SelfCloseVoidElements = SelfCloseVoidElements = {}));
929
939
  /**
@@ -931,11 +941,23 @@ var SelfCloseVoidElements;
931
941
  *
932
942
  * The following two cases won't produce the same output:
933
943
  *
934
- * | | html | output | | -------------- | :------------: | :----------: | | with spaces | `1<b> 2 </b>3` | 1<b> 2 </b>3 | | without spaces | `1<b>2</b>3` | 1<b>2</b>3 |
944
+ * | | html | output |
945
+ * | -------------- | :------------: | :----------: |
946
+ * | with spaces | `1<b> 2 </b>3` | 1<b> 2 </b>3 |
947
+ * | without spaces | `1<b>2</b>3` | 1<b>2</b>3 |
935
948
  *
936
949
  * This happens because whitespace is significant in inline elements.
937
950
  *
938
- * As a consequence of this, the formatter must format blocks that look like this (assume a small line width, <20): ```html <span>really long content</span> ``` as this, where the content hugs the tags: ```html <span >really long content</span > ```
951
+ * As a consequence of this, the formatter must format blocks that look like this (assume a small line width, <20):
952
+ * ```html
953
+ * <span>really long content</span>
954
+ * ```
955
+ * as this, where the content hugs the tags:
956
+ * ```html
957
+ * <span
958
+ * >really long content</span
959
+ * >
960
+ * ```
939
961
  *
940
962
  * Note that this is only necessary for inline elements. Block elements do not have this restriction.
941
963
  *
@@ -943,11 +965,22 @@ var SelfCloseVoidElements;
943
965
  */
944
966
  var WhitespaceSensitivity;
945
967
  (function (WhitespaceSensitivity) {
946
- /** css */
968
+ /** The formatter considers whitespace significant for elements that have an "inline" display style by default in
969
+ browser's user agent style sheets. (css) */
947
970
  WhitespaceSensitivity["CSS"] = "css";
948
- /** strict */
971
+ /** Leading and trailing whitespace in content is considered significant for all elements.
972
+
973
+ The formatter should leave at least one whitespace character if whitespace is present.
974
+ Otherwise, if there is no whitespace, it should not add any after `>` or before `<`. In other words, if there's no whitespace, the text content should hug the tags.
975
+
976
+ Example of text hugging the tags:
977
+ ```html
978
+ <b
979
+ >content</b
980
+ >
981
+ ``` (strict) */
949
982
  WhitespaceSensitivity["STRICT"] = "strict";
950
- /** ignore */
983
+ /** Whitespace is considered insignificant. The formatter is free to remove or add whitespace as it sees fit. (ignore) */
951
984
  WhitespaceSensitivity["IGNORE"] = "ignore";
952
985
  })(WhitespaceSensitivity || (exports.WhitespaceSensitivity = WhitespaceSensitivity = {}));
953
986
  /**
@@ -965,9 +998,9 @@ var ArrowParentheses;
965
998
  */
966
999
  var OperatorLinebreak;
967
1000
  (function (OperatorLinebreak) {
968
- /** after */
1001
+ /** The operator is placed after the expression (after) */
969
1002
  OperatorLinebreak["AFTER"] = "after";
970
- /** before */
1003
+ /** The operator is placed before the expression (before) */
971
1004
  OperatorLinebreak["BEFORE"] = "before";
972
1005
  })(OperatorLinebreak || (exports.OperatorLinebreak = OperatorLinebreak = {}));
973
1006
  /**
@@ -991,27 +1024,29 @@ var Semicolons;
991
1024
  Semicolons["AS_NEEDED"] = "asNeeded";
992
1025
  })(Semicolons || (exports.Semicolons = Semicolons = {}));
993
1026
  /**
994
- * Print trailing commas wherever possible in multi-line comma-separated syntactic structures.
1027
+ * Print trailing commas wherever possible in multi-line comma-separated syntactic structures for JavaScript/TypeScript files.
995
1028
  *
996
- * @schema TrailingCommas
1029
+ * @schema JsTrailingCommas
997
1030
  */
998
- var TrailingCommas;
999
- (function (TrailingCommas) {
1031
+ var JsTrailingCommas;
1032
+ (function (JsTrailingCommas) {
1000
1033
  /** all */
1001
- TrailingCommas["ALL"] = "all";
1034
+ JsTrailingCommas["ALL"] = "all";
1002
1035
  /** es5 */
1003
- TrailingCommas["ES5"] = "es5";
1036
+ JsTrailingCommas["ES5"] = "es5";
1004
1037
  /** none */
1005
- TrailingCommas["NONE"] = "none";
1006
- })(TrailingCommas || (exports.TrailingCommas = TrailingCommas = {}));
1038
+ JsTrailingCommas["NONE"] = "none";
1039
+ })(JsTrailingCommas || (exports.JsTrailingCommas = JsTrailingCommas = {}));
1007
1040
  /**
1008
- * @schema TrailingCommas2
1041
+ * Print trailing commas wherever possible in multi-line comma-separated syntactic structures for JSON files.
1042
+ *
1043
+ * @schema JsonTrailingCommas
1009
1044
  */
1010
- var TrailingCommas2;
1011
- (function (TrailingCommas2) {
1045
+ var JsonTrailingCommas;
1046
+ (function (JsonTrailingCommas) {
1012
1047
  /** none */
1013
- TrailingCommas2["NONE"] = "none";
1048
+ JsonTrailingCommas["NONE"] = "none";
1014
1049
  /** all */
1015
- TrailingCommas2["ALL"] = "all";
1016
- })(TrailingCommas2 || (exports.TrailingCommas2 = TrailingCommas2 = {}));
1017
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlvbWUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2phdmFzY3JpcHQvYmlvbWUvYmlvbWUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTZIQSw4REFzQkM7QUFrQ0QsZ0VBU0M7QUFrREQsMERBV0M7QUE4Q0QsOERBVUM7QUF1R0Qsc0VBa0JDO0FBa0NELGtFQVNDO0FBb0NELDREQVNDO0FBZ0RELDREQVdDO0FBMkRELHdEQVlDO0FBMkNELDREQVVDO0FBeUNELGdFQVVDO0FBaUdELHdEQWtCQztBQW9ERCwwREFXQztBQXlCRCx3Q0FRQztBQXNCRCxzRUFPQztBQTRERCw0RUFZQztBQXNCRCxzRUFPQztBQW9DRCxzRUFTQztBQW9FRCw4RUFPQztBQW9FRCxvRkFhQztBQXNCRCw4RUFPQztBQW9CRCx3RUFPQztBQWtERCw4RUFXQztBQW9CRCx3RUFPQztBQXNCRCx3RUFPQztBQTRGRCw4RUFnQkM7QUFzQkQsd0VBT0M7QUFzQkQsd0VBT0M7QUFzQkQsb0VBT0M7QUEySUQsMEVBc0JDO0FBa0NELG9FQU9DO0FBMENELG9FQVNDO0FBc0JELHdFQU9DO0FBMEVELDhFQWNDO0FBc0JELHdFQU9DO0FBNkJELHdFQVFDO0FBd0VELG9DQWVDO0FBMkJELGdGQVFDO0FBb0JELDhFQU9DO0FBMkZELHNGQWlCQztBQWtDRCxnRkFTQztBQTRERCxzQ0FXQztBQTN5RUQ7OztHQUdHO0FBQ0gscUZBQXFGO0FBQ3JGLFNBQWdCLHlCQUF5QixDQUFDLEdBQW1DO0lBQzNFLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQUMsT0FBTyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNO1FBQ3JCLFFBQVEsRUFBRSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2hELEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxH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SUFBWSxjQU9YO0FBUEQsV0FBWSxjQUFjO0lBQ3hCLFVBQVU7SUFDViw2QkFBVyxDQUFBO0lBQ1gsVUFBVTtJQUNWLDZCQUFXLENBQUE7SUFDWCxXQUFXO0lBQ1gsK0JBQWEsQ0FBQTtBQUNmLENBQUMsRUFQVyxjQUFjLDhCQUFkLGNBQWMsUUFPekI7QUFFRDs7R0FFRztBQUNILElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN6QixXQUFXO0lBQ1gsZ0NBQWEsQ0FBQTtJQUNiLFVBQVU7SUFDViw4QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGVBQWUsK0JBQWYsZUFBZSxRQUsxQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcIm5vZGUgLi9wcm9qZW4uanNcIi5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBpcyBjb250YWluZWQgaW5zaWRlIHRoZSBmaWxlIGBiaW9tZS5qc29uYFxuICpcbiAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmlvbWVDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEEgZmllbGQgZm9yIHRoZSBbSlNPTiBzY2hlbWFdKGh0dHBzOi8vanNvbi1zY2hlbWEub3JnLykgc3BlY2lmaWNhdGlvblxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiMkc2NoZW1hXG4gICAqL1xuICByZWFkb25seSBzY2hlbWE/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIGFzc2lzdHNcbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgQ3NzIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2Nzc1xuICAgKi9cbiAgcmVhZG9ubHkgY3NzPzogQ3NzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHBhdGhzIHRvIG90aGVyIEpTT04gZmlsZXMsIHVzZWQgdG8gZXh0ZW5kcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNleHRlbmRzXG4gICAqL1xuICByZWFkb25seSBleHRlbmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBmaWxlc3lzdGVtXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2ZpbGVzXG4gICAqL1xuICByZWFkb25seSBmaWxlcz86IEZpbGVzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGZvcm1hdHRlclxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBHcmFwaFFMIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2dyYXBocWxcbiAgICovXG4gIHJlYWRvbmx5IGdyYXBocWw/OiBHcmFwaHFsQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEdyYXBoUUwgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jZ3JpdFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JpdD86IEdyaXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgSFRNTCBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNodG1sXG4gICAqL1xuICByZWFkb25seSBodG1sPzogSHRtbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2phdmFzY3JpcHRcbiAgICovXG4gIHJlYWRvbmx5IGphdmFzY3JpcHQ/OiBKc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2pzb25cbiAgICovXG4gIHJlYWRvbmx5IGpzb24/OiBKc29uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBsaW50ZXJcbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBMaW50ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ3JhbnVsYXIgcGF0dGVybnMgdGhhdCBzaG91bGQgYmUgYXBwbGllZCBvbmx5IHRvIGEgc3ViIHNldCBvZiBmaWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNvdmVycmlkZXNcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE92ZXJyaWRlUGF0dGVybltdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHBsdWdpbnMgdG8gbG9hZC5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jcGx1Z2luc1xuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2lucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhdCB0aGUgcm9vdCBvZiBhIEJpb21lIHByb2plY3QuIEJ5IGRlZmF1bHQsIHRoaXMgaXMgYHRydWVgLlxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNyb290XG4gICAqL1xuICByZWFkb25seSByb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFZDUyBpbnRlZ3JhdGlvblxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiN2Y3NcbiAgICovXG4gIHJlYWRvbmx5IHZjcz86IFZjc0NvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Jpb21lQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Jpb21lQ29uZmlndXJhdGlvbihvYmo6IEJpb21lQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJyRzY2hlbWEnOiBvYmouc2NoZW1hLFxuICAgICdhc3Npc3QnOiB0b0pzb25fQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnY3NzJzogdG9Kc29uX0Nzc0NvbmZpZ3VyYXRpb24ob2JqLmNzcyksXG4gICAgJ2V4dGVuZHMnOiBvYmouZXh0ZW5kcz8ubWFwKHkgPT4geSksXG4gICAgJ2ZpbGVzJzogdG9Kc29uX0ZpbGVzQ29uZmlndXJhdGlvbihvYmouZmlsZXMpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnZ3JhcGhxbCc6IHRvSnNvbl9HcmFwaHFsQ29uZmlndXJhdGlvbihvYmouZ3JhcGhxbCksXG4gICAgJ2dyaXQnOiB0b0pzb25fR3JpdENvbmZpZ3VyYXRpb24ob2JqLmdyaXQpLFxuICAgICdodG1sJzogdG9Kc29uX0h0bWxDb25maWd1cmF0aW9uKG9iai5odG1sKSxcbiAgICAnamF2YXNjcmlwdCc6IHRvSnNvbl9Kc0NvbmZpZ3VyYXRpb24ob2JqLmphdmFzY3JpcHQpLFxuICAgICdqc29uJzogdG9Kc29uX0pzb25Db25maWd1cmF0aW9uKG9iai5qc29uKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gICAgJ292ZXJyaWRlcyc6IG9iai5vdmVycmlkZXM/Lm1hcCh5ID0+IHRvSnNvbl9PdmVycmlkZVBhdHRlcm4oeSkpLFxuICAgICdwbHVnaW5zJzogb2JqLnBsdWdpbnM/Lm1hcCh5ID0+IHkpLFxuICAgICdyb290Jzogb2JqLnJvb3QsXG4gICAgJ3Zjcyc6IHRvSnNvbl9WY3NDb25maWd1cmF0aW9uKG9iai52Y3MpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIEJpb21lIHNob3VsZCBmYWlsIGluIENMSSBpZiB0aGUgYXNzaXN0IHdlcmUgbm90IGFwcGxpZWQgdG8gdGhlIGNvZGUuXG4gICAqXG4gICAqIEBzY2hlbWEgQXNzaXN0Q29uZmlndXJhdGlvbiNhY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25zPzogQWN0aW9ucztcblxuICAvKipcbiAgICogV2hldGhlciBCaW9tZSBzaG91bGQgZW5hYmxlIGFzc2lzdCB2aWEgTFNQIGFuZCBDTEkuXG4gICAqXG4gICAqIEBzY2hlbWEgQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMuIEJpb21lIHdpbGwgaW5jbHVkZSBmaWxlcy9mb2xkZXJzIHRoYXQgd2lsbCBtYXRjaCB0aGVzZSBwYXR0ZXJucy5cbiAgICpcbiAgICogQHNjaGVtYSBBc3Npc3RDb25maWd1cmF0aW9uI2luY2x1ZGVzXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdBc3Npc3RDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhY3Rpb25zJzogdG9Kc29uX0FjdGlvbnMob2JqLmFjdGlvbnMpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBDU1MgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIENzc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENTUyBhc3Npc3Qgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIENzc0NvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBDc3NBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDU1MgZm9ybWF0dGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ1NTIGdsb2JhbHNcbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI2dsb2JhbHNcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ1NTIGxpbnRlciBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IENzc0xpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENTUyBwYXJzaW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI3BhcnNlclxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VyPzogQ3NzUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0NvbmZpZ3VyYXRpb24ob2JqOiBDc3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0Nzc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Dc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdnbG9iYWxzJzogb2JqLmdsb2JhbHM/Lm1hcCh5ID0+IHkpLFxuICAgICdsaW50ZXInOiB0b0pzb25fQ3NzTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0Nzc1BhcnNlckNvbmZpZ3VyYXRpb24ob2JqLnBhcnNlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZmlsZXN5c3RlbVxuICpcbiAqIEBzY2hlbWEgRmlsZXNDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZXNDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqICoqRGVwcmVjYXRlZDoqKiBQbGVhc2UgdXNlIF9mb3JjZS1pZ25vcmUgc3ludGF4XyBpbiBgZmlsZXMuaW5jbHVkZXNgIGluc3RlYWQ6IDxodHRwczovL2Jpb21lanMuZGV2L3JlZmVyZW5jZS9jb25maWd1cmF0aW9uLyNmaWxlc2luY2x1ZGVzPlxuICAgKlxuICAgKiBTZXQgb2YgZmlsZSBhbmQgZm9sZGVyIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHVuY29uZGl0aW9uYWxseSBpZ25vcmVkIGJ5IEJpb21lJ3Mgc2Nhbm5lci5cbiAgICpcbiAgICogQHNjaGVtYSBGaWxlc0NvbmZpZ3VyYXRpb24jZXhwZXJpbWVudGFsU2Nhbm5lcklnbm9yZXNcbiAgICovXG4gIHJlYWRvbmx5IGV4cGVyaW1lbnRhbFNjYW5uZXJJZ25vcmVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRlbGxzIEJpb21lIHRvIG5vdCBlbWl0IGRpYWdub3N0aWNzIHdoZW4gaGFuZGxpbmcgZmlsZXMgdGhhdCBpdCBkb2Vzbid0IGtub3dcbiAgICpcbiAgICogQHNjaGVtYSBGaWxlc0NvbmZpZ3VyYXRpb24jaWdub3JlVW5rbm93blxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlVW5rbm93bj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zLiBCaW9tZSB3aWxsIGhhbmRsZSBvbmx5IHRob3NlIGZpbGVzL2ZvbGRlcnMgdGhhdCB3aWxsIG1hdGNoIHRoZXNlIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAc2NoZW1hIEZpbGVzQ29uZmlndXJhdGlvbiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYWxsb3dlZCBzaXplIGZvciBzb3VyY2UgY29kZSBmaWxlcyBpbiBieXRlcy4gRmlsZXMgYWJvdmUgdGhpcyBsaW1pdCB3aWxsIGJlIGlnbm9yZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIERlZmF1bHRzIHRvIDEgTWlCXG4gICAqXG4gICAqIEBkZWZhdWx0IDEgTWlCXG4gICAqIEBzY2hlbWEgRmlsZXNDb25maWd1cmF0aW9uI21heFNpemVcbiAgICovXG4gIHJlYWRvbmx5IG1heFNpemU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0ZpbGVzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0ZpbGVzQ29uZmlndXJhdGlvbihvYmo6IEZpbGVzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V4cGVyaW1lbnRhbFNjYW5uZXJJZ25vcmVzJzogb2JqLmV4cGVyaW1lbnRhbFNjYW5uZXJJZ25vcmVzPy5tYXAoeSA9PiB5KSxcbiAgICAnaWdub3JlVW5rbm93bic6IG9iai5pZ25vcmVVbmtub3duLFxuICAgICdpbmNsdWRlcyc6IG9iai5pbmNsdWRlcz8ubWFwKHkgPT4geSksXG4gICAgJ21heFNpemUnOiBvYmoubWF4U2l6ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEdlbmVyaWMgb3B0aW9ucyBhcHBsaWVkIHRvIGFsbCBmaWxlc1xuICpcbiAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZSBwb3NpdGlvbiBzdHlsZSBpbiBIVE1MLWlzaCBsYW5ndWFnZXMuIERlZmF1bHRzIHRvIGF1dG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG8uXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogUHV0IHRoZSBgPmAgb2YgYSBtdWx0aS1saW5lIEhUTUwgb3IgSlNYIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lIGluc3RlYWQgb2YgYmVpbmcgYWxvbmUgb24gdGhlIG5leHQgbGluZSAoZG9lcyBub3QgYXBwbHkgdG8gc2VsZiBjbG9zaW5nIGVsZW1lbnRzKS5cbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTYW1lTGluZVxuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNhbWVMaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgc3BhY2VzIGFyb3VuZCBicmFja2V0cyBpbiBvYmplY3QgbGl0ZXJhbHMuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U3BhY2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNwYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhwYW5kIGFycmF5cyBhbmQgb2JqZWN0cyBvbiBtdWx0aXBsZSBsaW5lcy4gV2hlbiBzZXQgdG8gYGF1dG9gLCBvYmplY3QgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcyBpZiB0aGUgZmlyc3QgcHJvcGVydHkgaGFzIGEgbmV3bGluZSwgYW5kIGFycmF5IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLiBXaGVuIHNldCB0byBgYWx3YXlzYCwgdGhlc2UgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcywgcmVnYXJkbGVzcyBvZiBsZW5ndGggb2YgdGhlIGxpc3QuIFdoZW4gc2V0IHRvIGBuZXZlcmAsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLiBXaGVuIGZvcm1hdHRpbmcgYHBhY2thZ2UuanNvbmAsIEJpb21lIHdpbGwgdXNlIGBhbHdheXNgIHVubGVzcyBjb25maWd1cmVkIG90aGVyd2lzZS4gRGVmYXVsdHMgdG8gXCJhdXRvXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9cIi5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2V4cGFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhwYW5kPzogRXhwYW5kO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGZvcm1hdHRpbmcgc2hvdWxkIGJlIGFsbG93ZWQgdG8gcHJvY2VlZCBpZiBhIGdpdmVuIGZpbGUgaGFzIHN5bnRheCBlcnJvcnNcbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2Zvcm1hdFdpdGhFcnJvcnNcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdFdpdGhFcnJvcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4gVGhlIGZvcm1hdHRlciB3aWxsIGluY2x1ZGUgZmlsZXMvZm9sZGVycyB0aGF0IHdpbGwgbWF0Y2ggdGhlc2UgcGF0dGVybnMuXG4gICAqXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24sIDIgYnkgZGVmYXVsdFxuICAgKlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaW5lIGVuZGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0J3MgdGhlIG1heCB3aWR0aCBvZiBhIGxpbmUuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBVc2UgYW55IGAuZWRpdG9yY29uZmlnYCBmaWxlcyB0byBjb25maWd1cmUgdGhlIGZvcm1hdHRlci4gQ29uZmlndXJhdGlvbiBpbiBgYmlvbWUuanNvbmAgd2lsbCBvdmVycmlkZSBgLmVkaXRvcmNvbmZpZ2AgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogRGVmYXVsdDogYHRydWVgLlxuICAgKlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdXNlRWRpdG9yY29uZmlnXG4gICAqL1xuICByZWFkb25seSB1c2VFZGl0b3Jjb25maWc/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhdHRyaWJ1dGVQb3NpdGlvbic6IG9iai5hdHRyaWJ1dGVQb3NpdGlvbixcbiAgICAnYnJhY2tldFNhbWVMaW5lJzogb2JqLmJyYWNrZXRTYW1lTGluZSxcbiAgICAnYnJhY2tldFNwYWNpbmcnOiBvYmouYnJhY2tldFNwYWNpbmcsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnZXhwYW5kJzogb2JqLmV4cGFuZCxcbiAgICAnZm9ybWF0V2l0aEVycm9ycyc6IG9iai5mb3JtYXRXaXRoRXJyb3JzLFxuICAgICdpbmNsdWRlcyc6IG9iai5pbmNsdWRlcz8ubWFwKHkgPT4geSksXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICd1c2VFZGl0b3Jjb25maWcnOiBvYmoudXNlRWRpdG9yY29uZmlnLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEdyYXBocWxDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhxbENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQXNzaXN0IG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsQ29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEdyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBHcmFwaFFMIGZvcm1hdHRlciBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgR3JhcGhxbENvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBHcmFwaHFsQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcmFwaHFsQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyYXBocWxDb25maWd1cmF0aW9uKG9iajogR3JhcGhxbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhc3Npc3QnOiB0b0pzb25fR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9HcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0dyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyBhcHBsaWVkIHRvIEdyaXRRTCBmaWxlc1xuICpcbiAqIEBzY2hlbWEgR3JpdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcml0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBc3Npc3Qgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogR3JpdEFzc2lzdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEZvcm1hdHRpbmcgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRDb25maWd1cmF0aW9uI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEZvcm1hdHRpbmcgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRDb25maWd1cmF0aW9uI2xpbnRlclxuICAgKi9cbiAgcmVhZG9ubHkgbGludGVyPzogR3JpdExpbnRlckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyaXRDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JpdENvbmZpZ3VyYXRpb24ob2JqOiBHcml0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9Hcml0QXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZm9ybWF0dGVyJzogdG9Kc29uX0dyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdsaW50ZXInOiB0b0pzb25fR3JpdExpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIGFwcGxpZWQgdG8gSFRNTCBmaWxlc1xuICpcbiAqIEBzY2hlbWEgSHRtbENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdG1sQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIEh0bWxDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogSHRtbEFzc2lzdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgZnVsbCBzdXBwb3J0IGZvciBIVE1MLCBWdWUsIFN2ZWx0ZSBhbmQgQXN0cm8gZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbENvbmZpZ3VyYXRpb24jZXhwZXJpbWVudGFsRnVsbFN1cHBvcnRFbmFibGVkXG4gICAqL1xuICByZWFkb25seSBleHBlcmltZW50YWxGdWxsU3VwcG9ydEVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBIVE1MIGZvcm1hdHRlciBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbENvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogSFRNTCBsaW50ZXIgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxDb25maWd1cmF0aW9uI2xpbnRlclxuICAgKi9cbiAgcmVhZG9ubHkgbGludGVyPzogSHRtbExpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEhUTUwgcGFyc2luZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbENvbmZpZ3VyYXRpb24jcGFyc2VyXG4gICAqL1xuICByZWFkb25seSBwYXJzZXI/OiBIdG1sUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sQ29uZmlndXJhdGlvbihvYmo6IEh0bWxDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0h0bWxBc3Npc3RDb25maWd1cmF0aW9uKG9iai5hc3Npc3QpLFxuICAgICdleHBlcmltZW50YWxGdWxsU3VwcG9ydEVuYWJsZWQnOiBvYmouZXhwZXJpbWVudGFsRnVsbFN1cHBvcnRFbmFibGVkLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9IdG1sTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0h0bWxQYXJzZXJDb25maWd1cmF0aW9uKG9iai5wYXJzZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBzZXQgb2Ygb3B0aW9ucyBhcHBsaWVkIHRvIHRoZSBKYXZhU2NyaXB0IGZpbGVzXG4gKlxuICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc0NvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQXNzaXN0IG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBKc0Fzc2lzdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEZvcm1hdHRpbmcgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2JhbCBiaW5kaW5ncyB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBhbmFseXplcnNcbiAgICpcbiAgICogSWYgZGVmaW5lZCBoZXJlLCB0aGV5IHNob3VsZCBub3QgZW1pdCBkaWFnbm9zdGljcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jZ2xvYmFsc1xuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgcnVudGltZSBvciB0cmFuc2Zvcm1hdGlvbiB1c2VkIGZvciBpbnRlcnByZXRpbmcgSlNYLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNqc3hSdW50aW1lXG4gICAqL1xuICByZWFkb25seSBqc3hSdW50aW1lPzogSnN4UnVudGltZTtcblxuICAvKipcbiAgICogTGludGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBKc0xpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFBhcnNpbmcgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzQ29uZmlndXJhdGlvbiNwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IEpzUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNDb25maWd1cmF0aW9uKG9iajogSnNDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0pzQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZm9ybWF0dGVyJzogdG9Kc29uX0pzRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnZ2xvYmFscyc6IG9iai5nbG9iYWxzPy5tYXAoeSA9PiB5KSxcbiAgICAnanN4UnVudGltZSc6IG9iai5qc3hSdW50aW1lLFxuICAgICdsaW50ZXInOiB0b0pzb25fSnNMaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICAgICdwYXJzZXInOiB0b0pzb25fSnNQYXJzZXJDb25maWd1cmF0aW9uKG9iai5wYXJzZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyBhcHBsaWVkIHRvIEpTT04gZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEpzb25Db25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQXNzaXN0IG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEpzb25Bc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBGb3JtYXR0aW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBMaW50aW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IEpzb25MaW50ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBQYXJzaW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvbiNwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IEpzb25QYXJzZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25Db25maWd1cmF0aW9uKG9iajogSnNvbkNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhc3Npc3QnOiB0b0pzb25fSnNvbkFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Kc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0pzb25MaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICAgICdwYXJzZXInOiB0b0pzb25fSnNvblBhcnNlckNvbmZpZ3VyYXRpb24ob2JqLnBhcnNlciksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIExpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEFuIG9iamVjdCB3aGVyZSB0aGUga2V5cyBhcmUgdGhlIG5hbWVzIG9mIHRoZSBkb21haW5zLCBhbmQgdGhlIHZhbHVlcyBhcmUgYGFsbGAsIGByZWNvbW1lbmRlZGAsIG9yIGBub25lYC5cbiAgICpcbiAgICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uI2RvbWFpbnNcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbnM/OiB7IFtrZXk6IHN0cmluZ106IFJ1bGVEb21haW5WYWx1ZSB9O1xuXG4gIC8qKlxuICAgKiBpZiBgZmFsc2VgLCBpdCBkaXNhYmxlcyB0aGUgZmVhdHVyZSBhbmQgdGhlIGxpbnRlciB3b24ndCBiZSBleGVjdXRlZC4gYHRydWVgIGJ5IGRlZmF1bHRcbiAgICpcbiAgICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4gVGhlIGFuYWx5emVyIHdpbGwgaGFuZGxlIG9ubHkgdGhvc2UgZmlsZXMvZm9sZGVycyB0aGF0IHdpbGwgbWF0Y2ggdGhlc2UgcGF0dGVybnMuXG4gICAqXG4gICAqIEBzY2hlbWEgTGludGVyQ29uZmlndXJhdGlvbiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBydWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIExpbnRlckNvbmZpZ3VyYXRpb24jcnVsZXNcbiAgICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogUnVsZXM7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0xpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9MaW50ZXJDb25maWd1cmF0aW9uKG9iajogTGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2RvbWFpbnMnOiAoKG9iai5kb21haW5zKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouZG9tYWlucykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSksXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnaW5jbHVkZXMnOiBvYmouaW5jbHVkZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdydWxlcyc6IHRvSnNvbl9SdWxlcyhvYmoucnVsZXMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZVBhdHRlcm4ge1xuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEpzb24gbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBDU1MgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jY3NzXG4gICAqL1xuICByZWFkb25seSBjc3M/OiBDc3NDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgZmlsZXN5c3RlbVxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNmaWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM/OiBPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEpzb24gbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBHcmFwaHFsIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2dyYXBocWxcbiAgICovXG4gIHJlYWRvbmx5IGdyYXBocWw/OiBHcmFwaHFsQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEdyaXRRTCBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNncml0XG4gICAqL1xuICByZWFkb25seSBncml0PzogR3JpdENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBHcml0UUwgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaHRtbD86IEh0bWxDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4gQmlvbWUgd2lsbCBpbmNsdWRlIGZpbGVzL2ZvbGRlcnMgdGhhdCB3aWxsIG1hdGNoIHRoZXNlIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEphdmFTY3JpcHQgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jamF2YXNjcmlwdFxuICAgKi9cbiAgcmVhZG9ubHkgamF2YXNjcmlwdD86IEpzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEpzb24gbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4janNvblxuICAgKi9cbiAgcmVhZG9ubHkganNvbj86IEpzb25Db25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgSnNvbiBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgYWRkaXRpb25hbCBwbHVnaW5zXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI3BsdWdpbnNcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnT3ZlcnJpZGVQYXR0ZXJuJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fT3ZlcnJpZGVQYXR0ZXJuKG9iajogT3ZlcnJpZGVQYXR0ZXJuIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX092ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnY3NzJzogdG9Kc29uX0Nzc0NvbmZpZ3VyYXRpb24ob2JqLmNzcyksXG4gICAgJ2ZpbGVzJzogdG9Kc29uX092ZXJyaWRlRmlsZXNDb25maWd1cmF0aW9uKG9iai5maWxlcyksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9PdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2dyYXBocWwnOiB0b0pzb25fR3JhcGhxbENvbmZpZ3VyYXRpb24ob2JqLmdyYXBocWwpLFxuICAgICdncml0JzogdG9Kc29uX0dyaXRDb25maWd1cmF0aW9uKG9iai5ncml0KSxcbiAgICAnaHRtbCc6IHRvSnNvbl9IdG1sQ29uZmlndXJhdGlvbihvYmouaHRtbCksXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgICAnamF2YXNjcmlwdCc6IHRvSnNvbl9Kc0NvbmZpZ3VyYXRpb24ob2JqLmphdmFzY3JpcHQpLFxuICAgICdqc29uJzogdG9Kc29uX0pzb25Db25maWd1cmF0aW9uKG9iai5qc29uKSxcbiAgICAnbGludGVyJzogdG9Kc29uX092ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGx1Z2lucyc6IG9iai5wbHVnaW5zPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNldCBvZiBwcm9wZXJ0aWVzIHRvIGludGVncmF0ZSBCaW9tZSB3aXRoIGEgVkNTIHNvZnR3YXJlLlxuICpcbiAqIEBzY2hlbWEgVmNzQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZjc0NvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGtpbmQgb2YgY2xpZW50LlxuICAgKlxuICAgKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb24jY2xpZW50S2luZFxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50S2luZD86IFZjc0NsaWVudEtpbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtYWluIGJyYW5jaCBvZiB0aGUgcHJvamVjdFxuICAgKlxuICAgKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb24jZGVmYXVsdEJyYW5jaFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEJyYW5jaD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBCaW9tZSBzaG91bGQgaW50ZWdyYXRlIGl0c2VsZiB3aXRoIHRoZSBWQ1MgY2xpZW50XG4gICAqXG4gICAqIEBzY2hlbWEgVmNzQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGZvbGRlciB3aGVyZSBCaW9tZSBzaG91bGQgY2hlY2sgZm9yIFZDUyBmaWxlcy4gQnkgZGVmYXVsdCwgQmlvbWUgd2lsbCB1c2UgdGhlIHNhbWUgZm9sZGVyIHdoZXJlIGBiaW9tZS5qc29uYCB3YXMgZm91bmQuXG4gICAqXG4gICAqIElmIEJpb21lIGNhbid0IGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24sIGl0IHdpbGwgYXR0ZW1wdCB0byB1c2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIElmIG5vIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgY2FuJ3QgYmUgZm91bmQsIEJpb21lIHdvbid0IHVzZSB0aGUgVkNTIGludGVncmF0aW9uLCBhbmQgYSBkaWFnbm9zdGljIHdpbGwgYmUgZW1pdHRlZFxuICAgKlxuICAgKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb24jcm9vdFxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciBCaW9tZSBzaG91bGQgdXNlIHRoZSBWQ1MgaWdub3JlIGZpbGUuIFdoZW4gW3RydWVdLCBCaW9tZSB3aWxsIGlnbm9yZSB0aGUgZmlsZXMgc3BlY2lmaWVkIGluIHRoZSBpZ25vcmUgZmlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI3VzZUlnbm9yZUZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHVzZUlnbm9yZUZpbGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdWY3NDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fVmNzQ29uZmlndXJhdGlvbihvYmo6IFZjc0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdjbGllbnRLaW5kJzogb2JqLmNsaWVudEtpbmQsXG4gICAgJ2RlZmF1bHRCcmFuY2gnOiBvYmouZGVmYXVsdEJyYW5jaCxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdyb290Jzogb2JqLnJvb3QsXG4gICAgJ3VzZUlnbm9yZUZpbGUnOiBvYmoudXNlSWdub3JlRmlsZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgQWN0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbnMge1xuICAvKipcbiAgICogSXQgZW5hYmxlcyB0aGUgYXNzaXN0IGFjdGlvbnMgcmVjb21tZW5kZWQgYnkgQmlvbWUuIGB0cnVlYCBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBAc2NoZW1hIEFjdGlvbnMjcmVjb21tZW5kZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlY29tbWVuZGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBBY3Rpb25zI3NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogU291cmNlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdBY3Rpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQWN0aW9ucyhvYmo6IEFjdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZWNvbW1lbmRlZCc6IG9iai5yZWNvbW1lbmRlZCxcbiAgICAnc291cmNlJzogdG9Kc29uX1NvdXJjZShvYmouc291cmNlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgQ1NTIGFzc2lzdCBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBDc3NBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3NzQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBhc3Npc3QgZm9yIENTUyBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDc3NBc3Npc3RDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ3NzQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IENzc0Fzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIENTUyBmb3JtYXR0ZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBDU1MgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gQ1NTIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gQ1NTIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIERlZmF1bHQgdG8gMi5cbiAgICpcbiAgICogQGRlZmF1bHQgMi5cbiAgICogQHNjaGVtYSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbGluZSBlbmRpbmcgYXBwbGllZCB0byBDU1MgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gYGF1dG9gIHVzZXMgQ1JMRiBvbiBXaW5kb3dzIGFuZCBMRiBvbiBvdGhlciBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lIGFwcGxpZWQgdG8gQ1NTIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBxdW90ZXMgdXNlZCBpbiBDU1MgY29kZS4gRGVmYXVsdHMgdG8gZG91YmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBkb3VibGUuXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNxdW90ZVN0eWxlXG4gICAqL1xuICByZWFkb25seSBxdW90ZVN0eWxlPzogUXVvdGVTdHlsZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAncXVvdGVTdHlsZSc6IG9iai5xdW90ZVN0eWxlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBDU1MgbGludGVyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIENzc0xpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NMaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGxpbnRlciBmb3IgQ1NTIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0xpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Nzc0xpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Dc3NMaW50ZXJDb25maWd1cmF0aW9uKG9iajogQ3NzTGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgQ1NTIHBhcnNlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBDc3NQYXJzZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3NzUGFyc2VyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBbGxvdyBjb21tZW50cyB0byBhcHBlYXIgb24gaW5jb3JyZWN0IGxpbmVzIGluIGAuY3NzYCBmaWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIENzc1BhcnNlckNvbmZpZ3VyYXRpb24jYWxsb3dXcm9uZ0xpbmVDb21tZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dXcm9uZ0xpbmVDb21tZW50cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgcGFyc2luZyBvZiBDU1MgTW9kdWxlcyBzcGVjaWZpYyBmZWF0dXJlcy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NQYXJzZXJDb25maWd1cmF0aW9uI2Nzc01vZHVsZXNcbiAgICovXG4gIHJlYWRvbmx5IGNzc01vZHVsZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHBhcnNpbmcgb2YgVGFpbHdpbmQgQ1NTIDQuMCBkaXJlY3RpdmVzIGFuZCBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzUGFyc2VyQ29uZmlndXJhdGlvbiN0YWlsd2luZERpcmVjdGl2ZXNcbiAgICovXG4gIHJlYWRvbmx5IHRhaWx3aW5kRGlyZWN0aXZlcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Nzc1BhcnNlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Dc3NQYXJzZXJDb25maWd1cmF0aW9uKG9iajogQ3NzUGFyc2VyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FsbG93V3JvbmdMaW5lQ29tbWVudHMnOiBvYmouYWxsb3dXcm9uZ0xpbmVDb21tZW50cyxcbiAgICAnY3NzTW9kdWxlcyc6IG9iai5jc3NNb2R1bGVzLFxuICAgICd0YWlsd2luZERpcmVjdGl2ZXMnOiBvYmoudGFpbHdpbmREaXJlY3RpdmVzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBBdHRyaWJ1dGVQb3NpdGlvblxuICovXG5leHBvcnQgZW51bSBBdHRyaWJ1dGVQb3NpdGlvbiB7XG4gIC8qKiBhdXRvICovXG4gIEFVVE8gPSBcImF1dG9cIixcbiAgLyoqIG11bHRpbGluZSAqL1xuICBNVUxUSUxJTkUgPSBcIm11bHRpbGluZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgRXhwYW5kXG4gKi9cbmV4cG9ydCBlbnVtIEV4cGFuZCB7XG4gIC8qKiBhdXRvICovXG4gIEFVVE8gPSBcImF1dG9cIixcbiAgLyoqIGFsd2F5cyAqL1xuICBBTFdBWVMgPSBcImFsd2F5c1wiLFxuICAvKiogbmV2ZXIgKi9cbiAgTkVWRVIgPSBcIm5ldmVyXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBJbmRlbnRTdHlsZVxuICovXG5leHBvcnQgZW51bSBJbmRlbnRTdHlsZSB7XG4gIC8qKiB0YWIgKi9cbiAgVEFCID0gXCJ0YWJcIixcbiAgLyoqIHNwYWNlICovXG4gIFNQQUNFID0gXCJzcGFjZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgTGluZUVuZGluZ1xuICovXG5leHBvcnQgZW51bSBMaW5lRW5kaW5nIHtcbiAgLyoqIGxmICovXG4gIExGID0gXCJsZlwiLFxuICAvKiogY3JsZiAqL1xuICBDUkxGID0gXCJjcmxmXCIsXG4gIC8qKiBjciAqL1xuICBDUiA9IFwiY3JcIixcbiAgLyoqIGF1dG8gKi9cbiAgQVVUTyA9IFwiYXV0b1wiLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgR3JhcGhRTCBsaW50ZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBmb3JtYXR0ZXIgZm9yIEdyYXBoUUwgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBHcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgR3JhcGhRTCBmb3JtYXR0ZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCBzcGFjZXMgYXJvdW5kIGJyYWNrZXRzIGluIG9iamVjdCBsaXRlcmFscy4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZS5cbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U3BhY2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNwYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBmb3JtYXR0ZXIgZm9yIEdyYXBoUUwgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUgYXBwbGllZCB0byBHcmFwaFFMIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24gYXBwbGllZCB0byBHcmFwaFFMIGZpbGVzLiBEZWZhdWx0IHRvIDIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIuXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaW5lIGVuZGluZyBhcHBsaWVkIHRvIEdyYXBoUUwgZmlsZXMuIGBhdXRvYCB1c2VzIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0J3MgdGhlIG1heCB3aWR0aCBvZiBhIGxpbmUgYXBwbGllZCB0byBHcmFwaFFMIGZpbGVzLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHF1b3RlcyB1c2VkIGluIEdyYXBoUUwgY29kZS4gRGVmYXVsdHMgdG8gZG91YmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBkb3VibGUuXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jcXVvdGVTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVvdGVTdHlsZT86IFF1b3RlU3R5bGU7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2JyYWNrZXRTcGFjaW5nJzogb2JqLmJyYWNrZXRTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICdxdW90ZVN0eWxlJzogb2JqLnF1b3RlU3R5bGUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlIGhvdyB0aGUgR3JhcGhRTCBsaW50ZXIgYmVoYXZlcy5cbiAqXG4gKiBAc2NoZW1hIEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBHcmFwaFFMIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uKG9iajogR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEdyaXRBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpdEFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgYXNzaXN0IGZ1bmN0aW9uYWxpdHkgZm9yIEdyaXQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdEFzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyaXRBc3Npc3RDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JpdEFzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBHcml0QXNzaXN0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBmb3JtYXR0ZXIgZm9yIEdyaXQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUgYXBwbGllZCB0byBHcml0IGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24gYXBwbGllZCB0byBHcml0IGZpbGVzLiBEZWZhdWx0IHRvIDIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIuXG4gICAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaW5lIGVuZGluZyBhcHBsaWVkIHRvIEdyaXQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQncyB0aGUgbWF4IHdpZHRoIG9mIGEgbGluZSBhcHBsaWVkIHRvIEdyaXQgZmlsZXMuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Hcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgR3JpdExpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcml0TGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBsaW50ZXIgZm9yIEdyaXQgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgR3JpdExpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyaXRMaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JpdExpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBHcml0TGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgSFRNTCBhc3Npc3QgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgSHRtbEFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdG1sQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBhc3Npc3QgZm9yIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEh0bWxBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBIVE1MIGZvcm1hdHRlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGUgcG9zaXRpb24gc3R5bGUgaW4gSFRNTCBlbGVtZW50cy4gRGVmYXVsdHMgdG8gYXV0by5cbiAgICpcbiAgICogQGRlZmF1bHQgYXV0by5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBodWcgdGhlIGNsb3NpbmcgYnJhY2tldCBvZiBtdWx0aWxpbmUgSFRNTCB0YWdzIHRvIHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZSwgcmF0aGVyIHRoYW4gYmVpbmcgYWxvbmUgb24gdGhlIGZvbGxvd2luZyBsaW5lLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNhbWVMaW5lXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBmb3JtYXR0ZXIgZm9yIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmRlbnQgdGhlIGA8c2NyaXB0PmAgYW5kIGA8c3R5bGU+YCB0YWdzIGZvciBIVE1MIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZS5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTY3JpcHRBbmRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U2NyaXB0QW5kU3R5bGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24gYXBwbGllZCB0byBIVE1MIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIERlZmF1bHQgdG8gMi5cbiAgICpcbiAgICogQGRlZmF1bHQgMi5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBgYXV0b2AgdXNlcyBDUkxGIG9uIFdpbmRvd3MgYW5kIExGIG9uIG90aGVyIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lIGFwcGxpZWQgdG8gSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdm9pZCBlbGVtZW50cyBzaG91bGQgYmUgc2VsZi1jbG9zZWQuIERlZmF1bHRzIHRvIG5ldmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBuZXZlci5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNzZWxmQ2xvc2VWb2lkRWxlbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IHNlbGZDbG9zZVZvaWRFbGVtZW50cz86IFNlbGZDbG9zZVZvaWRFbGVtZW50cztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhY2NvdW50IGZvciB3aGl0ZXNwYWNlIHNlbnNpdGl2aXR5IHdoZW4gZm9ybWF0dGluZyBIVE1MIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykuIERlZmF1bHRzIHRvIFwiY3NzXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGNzc1wiLlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3doaXRlc3BhY2VTZW5zaXRpdml0eVxuICAgKi9cbiAgcmVhZG9ubHkgd2hpdGVzcGFjZVNlbnNpdGl2aXR5PzogV2hpdGVzcGFjZVNlbnNpdGl2aXR5O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0h0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhdHRyaWJ1dGVQb3NpdGlvbic6IG9iai5hdHRyaWJ1dGVQb3NpdGlvbixcbiAgICAnYnJhY2tldFNhbWVMaW5lJzogb2JqLmJyYWNrZXRTYW1lTGluZSxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdpbmRlbnRTY3JpcHRBbmRTdHlsZSc6IG9iai5pbmRlbnRTY3JpcHRBbmRTdHlsZSxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ3NlbGZDbG9zZVZvaWRFbGVtZW50cyc6IG9iai5zZWxmQ2xvc2VWb2lkRWxlbWVudHMsXG4gICAgJ3doaXRlc3BhY2VTZW5zaXRpdml0eSc6IG9iai53aGl0ZXNwYWNlU2Vuc2l0aXZpdHksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIEhUTUwgbGludGVyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIEh0bWxMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbExpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgbGludGVyIGZvciBIVE1MIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbExpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0h0bWxMaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSHRtbExpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBIdG1sTGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgSFRNTCBwYXJzZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgSHRtbFBhcnNlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdG1sUGFyc2VyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwYXJzaW5nIG9mIGRvdWJsZSB0ZXh0IGV4cHJlc3Npb25zIHN1Y2ggYXMgYHt7IGV4cHJlc3Npb24gfX1gIGluc2lkZSBgLmh0bWxgIGZpbGVzXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24jaW50ZXJwb2xhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJwb2xhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0h0bWxQYXJzZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24ob2JqOiBIdG1sUGFyc2VyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ludGVycG9sYXRpb24nOiBvYmouaW50ZXJwb2xhdGlvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEFzc2lzdCBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBKYXZhU2NyaXB0IGFzc2lzdFxuICpcbiAqIEBzY2hlbWEgSnNBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGFzc2lzdCBmb3IgSmF2YVNjcmlwdCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNBc3Npc3RDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNBc3Npc3RDb25maWd1cmF0aW9uKG9iajogSnNBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogRm9ybWF0dGluZyBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBKYXZhU2NyaXB0IGZpbGVzXG4gKlxuICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgbm9uLW5lY2Vzc2FyeSBwYXJlbnRoZXNlcyB0byBhcnJvdyBmdW5jdGlvbnMuIERlZmF1bHRzIHRvIFwiYWx3YXlzXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFsd2F5c1wiLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhcnJvd1BhcmVudGhlc2VzXG4gICAqL1xuICByZWFkb25seSBhcnJvd1BhcmVudGhlc2VzPzogQXJyb3dQYXJlbnRoZXNlcztcblxuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZSBwb3NpdGlvbiBzdHlsZSBpbiBKU1ggZWxlbWVudHMuIERlZmF1bHRzIHRvIGF1dG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG8uXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2F0dHJpYnV0ZVBvc2l0aW9uXG4gICAqL1xuICByZWFkb25seSBhdHRyaWJ1dGVQb3NpdGlvbj86IEF0dHJpYnV0ZVBvc2l0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGh1ZyB0aGUgY2xvc2luZyBicmFja2V0IG9mIG11bHRpbGluZSBIVE1ML0pTWCB0YWdzIHRvIHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZSwgcmF0aGVyIHRoYW4gYmVpbmcgYWxvbmUgb24gdGhlIGZvbGxvd2luZyBsaW5lLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTYW1lTGluZVxuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNhbWVMaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgc3BhY2VzIGFyb3VuZCBicmFja2V0cyBpbiBvYmplY3QgbGl0ZXJhbHMuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgSmF2YVNjcmlwdCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBleHBhbmQgYXJyYXlzIGFuZCBvYmplY3RzIG9uIG11bHRpcGxlIGxpbmVzLiBXaGVuIHNldCB0byBgYXV0b2AsIG9iamVjdCBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIG11bHRpcGxlIGxpbmVzIGlmIHRoZSBmaXJzdCBwcm9wZXJ0eSBoYXMgYSBuZXdsaW5lLCBhbmQgYXJyYXkgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBhIHNpbmdsZSBsaW5lIGlmIGl0IGZpdHMgaW4gdGhlIGxpbmUuIFdoZW4gc2V0IHRvIGBhbHdheXNgLCB0aGVzZSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIG11bHRpcGxlIGxpbmVzLCByZWdhcmRsZXNzIG9mIGxlbmd0aCBvZiB0aGUgbGlzdC4gV2hlbiBzZXQgdG8gYG5ldmVyYCwgdGhlc2UgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBhIHNpbmdsZSBsaW5lIGlmIGl0IGZpdHMgaW4gdGhlIGxpbmUuIFdoZW4gZm9ybWF0dGluZyBgcGFja2FnZS5qc29uYCwgQmlvbWUgd2lsbCB1c2UgYGFsd2F5c2AgdW5sZXNzIGNvbmZpZ3VyZWQgb3RoZXJ3aXNlLiBEZWZhdWx0cyB0byBcImF1dG9cIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYXV0b1wiLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNleHBhbmRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGFuZD86IEV4cGFuZDtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIEphdmFTY3JpcHQgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiBhcHBsaWVkIHRvIEphdmFTY3JpcHQgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gRGVmYXVsdCB0byAyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHF1b3RlcyB1c2VkIGluIEpTWC4gRGVmYXVsdHMgdG8gZG91YmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBkb3VibGUuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2pzeFF1b3RlU3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGpzeFF1b3RlU3R5bGU/OiBRdW90ZVN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaW5lIGVuZGluZyBhcHBsaWVkIHRvIEphdmFTY3JpcHQgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gYGF1dG9gIHVzZXMgQ1JMRiBvbiBXaW5kb3dzIGFuZCBMRiBvbiBvdGhlciBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0J3MgdGhlIG1heCB3aWR0aCBvZiBhIGxpbmUgYXBwbGllZCB0byBKYXZhU2NyaXB0IChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZW4gYnJlYWtpbmcgYmluYXJ5IGV4cHJlc3Npb25zIGludG8gbXVsdGlwbGUgbGluZXMsIHdoZXRoZXIgdG8gYnJlYWsgdGhlbSBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGJpbmFyeSBvcGVyYXRvci4gRGVmYXVsdHMgdG8gXCJhZnRlclwiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhZnRlclwiLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNvcGVyYXRvckxpbmVicmVha1xuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0b3JMaW5lYnJlYWs/OiBPcGVyYXRvckxpbmVicmVhaztcblxuICAvKipcbiAgICogV2hlbiBwcm9wZXJ0aWVzIGluIG9iamVjdHMgYXJlIHF1b3RlZC4gRGVmYXVsdHMgdG8gYXNOZWVkZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFzTmVlZGVkLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNxdW90ZVByb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IHF1b3RlUHJvcGVydGllcz86IFF1b3RlUHJvcGVydGllcztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcXVvdGVzIHVzZWQgaW4gSmF2YVNjcmlwdCBjb2RlLiBEZWZhdWx0cyB0byBkb3VibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGRvdWJsZS5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jcXVvdGVTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVvdGVTdHlsZT86IFF1b3RlU3R5bGU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvcm1hdHRlciBwcmludHMgc2VtaWNvbG9ucyBmb3IgYWxsIHN0YXRlbWVudHMgb3Igb25seSBpbiBmb3Igc3RhdGVtZW50cyB3aGVyZSBpdCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiBBU0kuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3NlbWljb2xvbnNcbiAgICovXG4gIHJlYWRvbmx5IHNlbWljb2xvbnM/OiBTZW1pY29sb25zO1xuXG4gIC8qKlxuICAgKiBQcmludCB0cmFpbGluZyBjb21tYXMgd2hlcmV2ZXIgcG9zc2libGUgaW4gbXVsdGktbGluZSBjb21tYS1zZXBhcmF0ZWQgc3ludGFjdGljIHN0cnVjdHVyZXMuIERlZmF1bHRzIHRvIFwiYWxsXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFsbFwiLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN0cmFpbGluZ0NvbW1hc1xuICAgKi9cbiAgcmVhZG9ubHkgdHJhaWxpbmdDb21tYXM/OiBUcmFpbGluZ0NvbW1hcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXJyb3dQYXJlbnRoZXNlcyc6IG9iai5hcnJvd1BhcmVudGhlc2VzLFxuICAgICdhdHRyaWJ1dGVQb3NpdGlvbic6IG9iai5hdHRyaWJ1dGVQb3NpdGlvbixcbiAgICAnYnJhY2tldFNhbWVMaW5lJzogb2JqLmJyYWNrZXRTYW1lTGluZSxcbiAgICAnYnJhY2tldFNwYWNpbmcnOiBvYmouYnJhY2tldFNwYWNpbmcsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnZXhwYW5kJzogb2JqLmV4cGFuZCxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdqc3hRdW90ZVN0eWxlJzogb2JqLmpzeFF1b3RlU3R5bGUsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAnb3BlcmF0b3JMaW5lYnJlYWsnOiBvYmoub3BlcmF0b3JMaW5lYnJlYWssXG4gICAgJ3F1b3RlUHJvcGVydGllcyc6IG9iai5xdW90ZVByb3BlcnRpZXMsXG4gICAgJ3F1b3RlU3R5bGUnOiBvYmoucXVvdGVTdHlsZSxcbiAgICAnc2VtaWNvbG9ucyc6IG9iai5zZW1pY29sb25zLFxuICAgICd0cmFpbGluZ0NvbW1hcyc6IG9iai50cmFpbGluZ0NvbW1hcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEluZGljYXRlcyB0aGUgdHlwZSBvZiBydW50aW1lIG9yIHRyYW5zZm9ybWF0aW9uIHVzZWQgZm9yIGludGVycHJldGluZyBKU1guXG4gKlxuICogQHNjaGVtYSBKc3hSdW50aW1lXG4gKi9cbmV4cG9ydCBlbnVtIEpzeFJ1bnRpbWUge1xuICAvKiogdHJhbnNwYXJlbnQgKi9cbiAgVFJBTlNQQVJFTlQgPSBcInRyYW5zcGFyZW50XCIsXG4gIC8qKiByZWFjdENsYXNzaWMgKi9cbiAgUkVBQ1RfQ0xBU1NJQyA9IFwicmVhY3RDbGFzc2ljXCIsXG59XG5cbi8qKlxuICogTGludGVyIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEphdmFTY3JpcHQgbGludGVyXG4gKlxuICogQHNjaGVtYSBKc0xpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc0xpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgbGludGVyIGZvciBKYXZhU2NyaXB0IChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc0xpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBKc0xpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIEphdmFTY3JpcHQgcGFyc2VyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIEpzUGFyc2VyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzUGFyc2VyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBFbmFibGVzIHBhcnNpbmcgb2YgR3JpdCBtZXRhdmFyaWFibGVzLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZWAuXG4gICAqIEBzY2hlbWEgSnNQYXJzZXJDb25maWd1cmF0aW9uI2dyaXRNZXRhdmFyaWFibGVzXG4gICAqL1xuICByZWFkb25seSBncml0TWV0YXZhcmlhYmxlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgZmlsZXMgbGlrZSBgLmpzYC9gLm1qc2AvYC5janNgIG1heSBjb250YWluIEpTWCBzeW50YXguXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZWAuXG4gICAqIEBzY2hlbWEgSnNQYXJzZXJDb25maWd1cmF0aW9uI2pzeEV2ZXJ5d2hlcmVcbiAgICovXG4gIHJlYWRvbmx5IGpzeEV2ZXJ5d2hlcmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJdCBlbmFibGVzIHRoZSBleHBlcmltZW50YWwgYW5kIHVuc2FmZSBwYXJzaW5nIG9mIHBhcmFtZXRlciBkZWNvcmF0b3JzXG4gICAqXG4gICAqIFRoZXNlIGRlY29yYXRvcnMgYmVsb25nIHRvIGFuIG9sZCBwcm9wb3NhbCwgYW5kIHRoZXkgYXJlIHN1YmplY3QgdG8gY2hhbmdlLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzUGFyc2VyQ29uZmlndXJhdGlvbiN1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgdW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc1BhcnNlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc1BhcnNlckNvbmZpZ3VyYXRpb24ob2JqOiBKc1BhcnNlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdncml0TWV0YXZhcmlhYmxlcyc6IG9iai5ncml0TWV0YXZhcmlhYmxlcyxcbiAgICAnanN4RXZlcnl3aGVyZSc6IG9iai5qc3hFdmVyeXdoZXJlLFxuICAgICd1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZCc6IG9iai51bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEFzc2lzdCBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSBKU09OIGxpbnRlclxuICpcbiAqIEBzY2hlbWEgSnNvbkFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBhc3Npc3QgZm9yIEpTT04gKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvbkFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEpzb25Bc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5zZXJ0IHNwYWNlcyBhcm91bmQgYnJhY2tldHMgaW4gb2JqZWN0IGxpdGVyYWxzLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgSlNPTiAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4cGFuZCBhcnJheXMgYW5kIG9iamVjdHMgb24gbXVsdGlwbGUgbGluZXMuIFdoZW4gc2V0IHRvIGBhdXRvYCwgb2JqZWN0IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIG5ld2xpbmUsIGFuZCBhcnJheSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS4gV2hlbiBzZXQgdG8gYGFsd2F5c2AsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMsIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoIG9mIHRoZSBsaXN0LiBXaGVuIHNldCB0byBgbmV2ZXJgLCB0aGVzZSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS4gV2hlbiBmb3JtYXR0aW5nIGBwYWNrYWdlLmpzb25gLCBCaW9tZSB3aWxsIHVzZSBgYWx3YXlzYCB1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UuIERlZmF1bHRzIHRvIFwiYXV0b1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvXCIuXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUgYXBwbGllZCB0byBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiBhcHBsaWVkIHRvIEpTT04gKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gRGVmYXVsdCB0byAyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyLlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbGluZSBlbmRpbmcgYXBwbGllZCB0byBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIGBhdXRvYCB1c2VzIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0J3MgdGhlIG1heCB3aWR0aCBvZiBhIGxpbmUgYXBwbGllZCB0byBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIERlZmF1bHRzIHRvIDgwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MC5cbiAgICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogUHJpbnQgdHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIGluIG11bHRpLWxpbmUgY29tbWEtc2VwYXJhdGVkIHN5bnRhY3RpYyBzdHJ1Y3R1cmVzLiBEZWZhdWx0cyB0byBcIm5vbmVcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgbm9uZVwiLlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI3RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ0NvbW1hcz86IFRyYWlsaW5nQ29tbWFzMjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYnJhY2tldFNwYWNpbmcnOiBvYmouYnJhY2tldFNwYWNpbmcsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnZXhwYW5kJzogb2JqLmV4cGFuZCxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ3RyYWlsaW5nQ29tbWFzJzogb2JqLnRyYWlsaW5nQ29tbWFzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogTGludGVyIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEpTT04gbGludGVyXG4gKlxuICogQHNjaGVtYSBKc29uTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25MaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGxpbnRlciBmb3IgSlNPTiAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25MaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25MaW50ZXJDb25maWd1cmF0aW9uKG9iajogSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIEpTT04gcGFyc2VyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIEpzb25QYXJzZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvblBhcnNlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQWxsb3cgcGFyc2luZyBjb21tZW50cyBpbiBgLmpzb25gIGZpbGVzXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvblBhcnNlckNvbmZpZ3VyYXRpb24jYWxsb3dDb21tZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dDb21tZW50cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsbG93IHBhcnNpbmcgdHJhaWxpbmcgY29tbWFzIGluIGAuanNvbmAgZmlsZXNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uUGFyc2VyQ29uZmlndXJhdGlvbiNhbGxvd1RyYWlsaW5nQ29tbWFzXG4gICAqL1xuICByZWFkb25seSBhbGxvd1RyYWlsaW5nQ29tbWFzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvblBhcnNlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uUGFyc2VyQ29uZmlndXJhdGlvbihvYmo6IEpzb25QYXJzZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWxsb3dDb21tZW50cyc6IG9iai5hbGxvd0NvbW1lbnRzLFxuICAgICdhbGxvd1RyYWlsaW5nQ29tbWFzJzogb2JqLmFsbG93VHJhaWxpbmdDb21tYXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFJ1bGVEb21haW5WYWx1ZVxuICovXG5leHBvcnQgZW51bSBSdWxlRG9tYWluVmFsdWUge1xuICAvKiogYWxsICovXG4gIEFMTCA9IFwiYWxsXCIsXG4gIC8qKiBub25lICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbiAgLyoqIHJlY29tbWVuZGVkICovXG4gIFJFQ09NTUVOREVEID0gXCJyZWNvbW1lbmRlZFwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgUnVsZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdWxlcyB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI2ExMXlcbiAgICovXG4gIHJlYWRvbmx5IGExMVk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjY29tcGxleGl0eVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGxleGl0eT86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNjb3JyZWN0bmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgY29ycmVjdG5lc3M/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjbnVyc2VyeVxuICAgKi9cbiAgcmVhZG9ubHkgbnVyc2VyeT86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNwZXJmb3JtYW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgcGVyZm9ybWFuY2U/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEl0IGVuYWJsZXMgdGhlIGxpbnQgcnVsZXMgcmVjb21tZW5kZWQgYnkgQmlvbWUuIGB0cnVlYCBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBAc2NoZW1hIFJ1bGVzI3JlY29tbWVuZGVkXG4gICAqL1xuICByZWFkb25seSByZWNvbW1lbmRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjc2VjdXJpdHlcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5PzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI3N0eWxlXG4gICAqL1xuICByZWFkb25seSBzdHlsZT86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNzdXNwaWNpb3VzXG4gICAqL1xuICByZWFkb25seSBzdXNwaWNpb3VzPzogYW55O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdSdWxlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1J1bGVzKG9iajogUnVsZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhMTF5Jzogb2JqLmExMVksXG4gICAgJ2NvbXBsZXhpdHknOiBvYmouY29tcGxleGl0eSxcbiAgICAnY29ycmVjdG5lc3MnOiBvYmouY29ycmVjdG5lc3MsXG4gICAgJ251cnNlcnknOiBvYmoubnVyc2VyeSxcbiAgICAncGVyZm9ybWFuY2UnOiBvYmoucGVyZm9ybWFuY2UsXG4gICAgJ3JlY29tbWVuZGVkJzogb2JqLnJlY29tbWVuZGVkLFxuICAgICdzZWN1cml0eSc6IG9iai5zZWN1cml0eSxcbiAgICAnc3R5bGUnOiBvYmouc3R5bGUsXG4gICAgJ3N1c3BpY2lvdXMnOiBvYmouc3VzcGljaW91cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgYWN0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbiNhY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25zPzogQWN0aW9ucztcblxuICAvKipcbiAgICogaWYgYGZhbHNlYCwgaXQgZGlzYWJsZXMgdGhlIGZlYXR1cmUgYW5kIHRoZSBhc3Npc3Qgd29uJ3QgYmUgZXhlY3V0ZWQuIGB0cnVlYCBieSBkZWZhdWx0XG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9PdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhY3Rpb25zJzogdG9Kc29uX0FjdGlvbnMob2JqLmFjdGlvbnMpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIE92ZXJyaWRlRmlsZXNDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogRmlsZSBzaXplIGxpbWl0IGluIGJ5dGVzXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb24jbWF4U2l6ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4U2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9PdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbihvYmo6IE92ZXJyaWRlRmlsZXNDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbWF4U2l6ZSc6IG9iai5tYXhTaXplLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZSBwb3NpdGlvbiBzdHlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYXR0cmlidXRlUG9zaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZVBvc2l0aW9uPzogQXR0cmlidXRlUG9zaXRpb247XG5cbiAgLyoqXG4gICAqIFB1dCB0aGUgYD5gIG9mIGEgbXVsdGktbGluZSBIVE1MIG9yIEpTWCBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZSBpbnN0ZWFkIG9mIGJlaW5nIGFsb25lIG9uIHRoZSBuZXh0IGxpbmUgKGRvZXMgbm90IGFwcGx5IHRvIHNlbGYgY2xvc2luZyBlbGVtZW50cykuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTYW1lTGluZVxuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNhbWVMaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgc3BhY2VzIGFyb3VuZCBicmFja2V0cyBpbiBvYmplY3QgbGl0ZXJhbHMuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTcGFjaW5nXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U3BhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4cGFuZCBhcnJheXMgYW5kIG9iamVjdHMgb24gbXVsdGlwbGUgbGluZXMuIFdoZW4gc2V0IHRvIGBhdXRvYCwgb2JqZWN0IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIG5ld2xpbmUsIGFuZCBhcnJheSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS4gV2hlbiBzZXQgdG8gYGFsd2F5c2AsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMsIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoIG9mIHRoZSBsaXN0LiBXaGVuIHNldCB0byBgbmV2ZXJgLCB0aGVzZSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS4gV2hlbiBmb3JtYXR0aW5nIGBwYWNrYWdlLmpzb25gLCBCaW9tZSB3aWxsIHVzZSBgYWx3YXlzYCB1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UuIERlZmF1bHRzIHRvIFwiYXV0b1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvXCIuXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2V4cGFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhwYW5kPzogRXhwYW5kO1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgd2hldGhlciBmb3JtYXR0aW5nIHNob3VsZCBiZSBhbGxvd2VkIHRvIHByb2NlZWQgaWYgYSBnaXZlbiBmaWxlIGhhcyBzeW50YXggZXJyb3JzXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2Zvcm1hdFdpdGhFcnJvcnNcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdFdpdGhFcnJvcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24sIDIgYnkgZGVmYXVsdCAoZGVwcmVjYXRlZCwgdXNlIGBpbmRlbnQtd2lkdGhgKVxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTaXplXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uLCAyIGJ5IGRlZmF1bHRcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaW5lIGVuZGluZy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQncyB0aGUgbWF4IHdpZHRoIG9mIGEgbGluZS4gRGVmYXVsdHMgdG8gODAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDgwLlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXR0cmlidXRlUG9zaXRpb24nOiBvYmouYXR0cmlidXRlUG9zaXRpb24sXG4gICAgJ2JyYWNrZXRTYW1lTGluZSc6IG9iai5icmFja2V0U2FtZUxpbmUsXG4gICAgJ2JyYWNrZXRTcGFjaW5nJzogb2JqLmJyYWNrZXRTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2V4cGFuZCc6IG9iai5leHBhbmQsXG4gICAgJ2Zvcm1hdFdpdGhFcnJvcnMnOiBvYmouZm9ybWF0V2l0aEVycm9ycyxcbiAgICAnaW5kZW50U2l6ZSc6IG9iai5pbmRlbnRTaXplLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgcnVsZXNcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24jZG9tYWluc1xuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWlucz86IHsgW2tleTogc3RyaW5nXTogUnVsZURvbWFpblZhbHVlIH07XG5cbiAgLyoqXG4gICAqIGlmIGBmYWxzZWAsIGl0IGRpc2FibGVzIHRoZSBmZWF0dXJlIGFuZCB0aGUgbGludGVyIHdvbid0IGJlIGV4ZWN1dGVkLiBgdHJ1ZWAgYnkgZGVmYXVsdFxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTGlzdCBvZiBydWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbiNydWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBSdWxlcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uKG9iajogT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZG9tYWlucyc6ICgob2JqLmRvbWFpbnMpID09PSB1bmRlZmluZWQpID8gdW5kZWZpbmVkIDogKE9iamVjdC5lbnRyaWVzKG9iai5kb21haW5zKS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pKSxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdydWxlcyc6IHRvSnNvbl9SdWxlcyhvYmoucnVsZXMpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogSW50ZWdyYXRpb24gd2l0aCB0aGUgZ2l0IGNsaWVudCBhcyBWQ1NcbiAqXG4gKiBAc2NoZW1hIFZjc0NsaWVudEtpbmRcbiAqL1xuZXhwb3J0IGVudW0gVmNzQ2xpZW50S2luZCB7XG4gIC8qKiBnaXQgKi9cbiAgR0lUID0gXCJnaXRcIixcbn1cblxuLyoqXG4gKiBBIGxpc3Qgb2YgcnVsZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBncm91cFxuICpcbiAqIEBzY2hlbWEgU291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlIHtcbiAgLyoqXG4gICAqIFByb3ZpZGVzIGEgY29kZSBhY3Rpb24gdG8gc29ydCB0aGUgaW1wb3J0cyBhbmQgZXhwb3J0cyBpbiB0aGUgZmlsZSB1c2luZyBhIGJ1aWx0LWluIG9yIGN1c3RvbSBvcmRlci5cbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2Ujb3JnYW5pemVJbXBvcnRzXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6ZUltcG9ydHM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHJlY29tbWVuZGVkIHJ1bGVzIGZvciB0aGlzIGdyb3VwXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3JlY29tbWVuZGVkXG4gICAqL1xuICByZWFkb25seSByZWNvbW1lbmRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuZm9yY2UgYXR0cmlidXRlIHNvcnRpbmcgaW4gSlNYIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSN1c2VTb3J0ZWRBdHRyaWJ1dGVzXG4gICAqL1xuICByZWFkb25seSB1c2VTb3J0ZWRBdHRyaWJ1dGVzPzogYW55O1xuXG4gIC8qKlxuICAgKiBTb3J0IHRoZSBrZXlzIG9mIGEgSlNPTiBvYmplY3QgaW4gbmF0dXJhbCBvcmRlci5cbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlU29ydGVkS2V5c1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkS2V5cz86IGFueTtcblxuICAvKipcbiAgICogRW5mb3JjZSBvcmRlcmluZyBvZiBDU1MgcHJvcGVydGllcyBhbmQgbmVzdGVkIHJ1bGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSN1c2VTb3J0ZWRQcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSB1c2VTb3J0ZWRQcm9wZXJ0aWVzPzogYW55O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdTb3VyY2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Tb3VyY2Uob2JqOiBTb3VyY2UgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvcmdhbml6ZUltcG9ydHMnOiBvYmoub3JnYW5pemVJbXBvcnRzLFxuICAgICdyZWNvbW1lbmRlZCc6IG9iai5yZWNvbW1lbmRlZCxcbiAgICAndXNlU29ydGVkQXR0cmlidXRlcyc6IG9iai51c2VTb3J0ZWRBdHRyaWJ1dGVzLFxuICAgICd1c2VTb3J0ZWRLZXlzJzogb2JqLnVzZVNvcnRlZEtleXMsXG4gICAgJ3VzZVNvcnRlZFByb3BlcnRpZXMnOiBvYmoudXNlU29ydGVkUHJvcGVydGllcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgUXVvdGVTdHlsZVxuICovXG5leHBvcnQgZW51bSBRdW90ZVN0eWxlIHtcbiAgLyoqIGRvdWJsZSAqL1xuICBET1VCTEUgPSBcImRvdWJsZVwiLFxuICAvKiogc2luZ2xlICovXG4gIFNJTkdMRSA9IFwic2luZ2xlXCIsXG59XG5cbi8qKlxuICogQ29udHJvbHMgd2hldGhlciB2b2lkLWVsZW1lbnRzIHNob3VsZCBiZSBzZWxmIGNsb3NlZFxuICpcbiAqIEBzY2hlbWEgU2VsZkNsb3NlVm9pZEVsZW1lbnRzXG4gKi9cbmV4cG9ydCBlbnVtIFNlbGZDbG9zZVZvaWRFbGVtZW50cyB7XG4gIC8qKiBuZXZlciAqL1xuICBORVZFUiA9IFwibmV2ZXJcIixcbiAgLyoqIGFsd2F5cyAqL1xuICBBTFdBWVMgPSBcImFsd2F5c1wiLFxufVxuXG4vKipcbiAqIFdoaXRlc3BhY2Ugc2Vuc2l0aXZpdHkgZm9yIEhUTUwgZm9ybWF0dGluZy5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIHR3byBjYXNlcyB3b24ndCBwcm9kdWNlIHRoZSBzYW1lIG91dHB1dDpcbiAqXG4gKiB8ICAgICAgICAgICAgICAgIHwgICAgICBodG1sICAgICAgfCAgICBvdXRwdXQgICAgfCB8IC0tLS0tLS0tLS0tLS0tIHwgOi0tLS0tLS0tLS0tLTogfCA6LS0tLS0tLS0tLTogfCB8IHdpdGggc3BhY2VzICAgIHwgYDE8Yj4gMiA8L2I+M2AgfCAxPGI+IDIgPC9iPjMgfCB8IHdpdGhvdXQgc3BhY2VzIHwgIGAxPGI+MjwvYj4zYCAgfCAgMTxiPjI8L2I+MyAgfFxuICpcbiAqIFRoaXMgaGFwcGVucyBiZWNhdXNlIHdoaXRlc3BhY2UgaXMgc2lnbmlmaWNhbnQgaW4gaW5saW5lIGVsZW1lbnRzLlxuICpcbiAqIEFzIGEgY29uc2VxdWVuY2Ugb2YgdGhpcywgdGhlIGZvcm1hdHRlciBtdXN0IGZvcm1hdCBibG9ja3MgdGhhdCBsb29rIGxpa2UgdGhpcyAoYXNzdW1lIGEgc21hbGwgbGluZSB3aWR0aCwgPDIwKTogYGBgaHRtbCA8c3Bhbj5yZWFsbHkgbG9uZyBjb250ZW50PC9zcGFuPiBgYGAgYXMgdGhpcywgd2hlcmUgdGhlIGNvbnRlbnQgaHVncyB0aGUgdGFnczogYGBgaHRtbCA8c3BhbiA+cmVhbGx5IGxvbmcgY29udGVudDwvc3BhbiA+IGBgYFxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBpbmxpbmUgZWxlbWVudHMuIEJsb2NrIGVsZW1lbnRzIGRvIG5vdCBoYXZlIHRoaXMgcmVzdHJpY3Rpb24uXG4gKlxuICogQHNjaGVtYSBXaGl0ZXNwYWNlU2Vuc2l0aXZpdHlcbiAqL1xuZXhwb3J0IGVudW0gV2hpdGVzcGFjZVNlbnNpdGl2aXR5IHtcbiAgLyoqIGNzcyAqL1xuICBDU1MgPSBcImNzc1wiLFxuICAvKiogc3RyaWN0ICovXG4gIFNUUklDVCA9IFwic3RyaWN0XCIsXG4gIC8qKiBpZ25vcmUgKi9cbiAgSUdOT1JFID0gXCJpZ25vcmVcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEFycm93UGFyZW50aGVzZXNcbiAqL1xuZXhwb3J0IGVudW0gQXJyb3dQYXJlbnRoZXNlcyB7XG4gIC8qKiBhbHdheXMgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbiAgLyoqIGFzTmVlZGVkICovXG4gIEFTX05FRURFRCA9IFwiYXNOZWVkZWRcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIE9wZXJhdG9yTGluZWJyZWFrXG4gKi9cbmV4cG9ydCBlbnVtIE9wZXJhdG9yTGluZWJyZWFrIHtcbiAgLyoqIGFmdGVyICovXG4gIEFGVEVSID0gXCJhZnRlclwiLFxuICAvKiogYmVmb3JlICovXG4gIEJFRk9SRSA9IFwiYmVmb3JlXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBRdW90ZVByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGVudW0gUXVvdGVQcm9wZXJ0aWVzIHtcbiAgLyoqIGFzTmVlZGVkICovXG4gIEFTX05FRURFRCA9IFwiYXNOZWVkZWRcIixcbiAgLyoqIHByZXNlcnZlICovXG4gIFBSRVNFUlZFID0gXCJwcmVzZXJ2ZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgU2VtaWNvbG9uc1xuICovXG5leHBvcnQgZW51bSBTZW1pY29sb25zIHtcbiAgLyoqIGFsd2F5cyAqL1xuICBBTFdBWVMgPSBcImFsd2F5c1wiLFxuICAvKiogYXNOZWVkZWQgKi9cbiAgQVNfTkVFREVEID0gXCJhc05lZWRlZFwiLFxufVxuXG4vKipcbiAqIFByaW50IHRyYWlsaW5nIGNvbW1hcyB3aGVyZXZlciBwb3NzaWJsZSBpbiBtdWx0aS1saW5lIGNvbW1hLXNlcGFyYXRlZCBzeW50YWN0aWMgc3RydWN0dXJlcy5cbiAqXG4gKiBAc2NoZW1hIFRyYWlsaW5nQ29tbWFzXG4gKi9cbmV4cG9ydCBlbnVtIFRyYWlsaW5nQ29tbWFzIHtcbiAgLyoqIGFsbCAqL1xuICBBTEwgPSBcImFsbFwiLFxuICAvKiogZXM1ICovXG4gIEVTNSA9IFwiZXM1XCIsXG4gIC8qKiBub25lICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIFRyYWlsaW5nQ29tbWFzMlxuICovXG5leHBvcnQgZW51bSBUcmFpbGluZ0NvbW1hczIge1xuICAvKiogbm9uZSAqL1xuICBOT05FID0gXCJub25lXCIsXG4gIC8qKiBhbGwgKi9cbiAgQUxMID0gXCJhbGxcIixcbn1cbiJdfQ==
1050
+ JsonTrailingCommas["ALL"] = "all";
1051
+ })(JsonTrailingCommas || (exports.JsonTrailingCommas = JsonTrailingCommas = {}));
1052
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlvbWUtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2phdmFzY3JpcHQvYmlvbWUvYmlvbWUtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThIQSw4REFzQkM7QUFtQ0QsZ0VBU0M7QUFrREQsMERBV0M7QUFrREQsOERBVUM7QUErR0Qsc0VBa0JDO0FBa0NELGtFQVNDO0FBb0NELDREQVNDO0FBZ0RELDREQVdDO0FBMkRELHdEQVlDO0FBMkNELDREQVVDO0FBMENELGdFQVVDO0FBa0dELHdEQWtCQztBQXdERCwwREFXQztBQXlCRCx3Q0FRQztBQXNCRCxzRUFPQztBQTRERCw0RUFZQztBQXNCRCxzRUFPQztBQW9DRCxzRUFTQztBQXFFRCw4RUFPQztBQW9FRCxvRkFhQztBQXNCRCw4RUFPQztBQW9CRCx3RUFPQztBQWtERCw4RUFXQztBQW9CRCx3RUFPQztBQXNCRCx3RUFPQztBQTRGRCw4RUFnQkM7QUFzQkQsd0VBT0M7QUFzQkQsd0VBT0M7QUFzQkQsb0VBT0M7QUFnSkQsMEVBc0JDO0FBMkNELG9FQU9DO0FBMkNELG9FQVNDO0FBc0JELHdFQU9DO0FBK0VELDhFQWNDO0FBc0JELHdFQU9DO0FBNkJELHdFQVFDO0FBd0VELG9DQWVDO0FBMkJELGdGQVFDO0FBb0JELDhFQU9DO0FBaUdELHNGQWlCQztBQWtDRCxnRkFTQztBQWdFRCxzQ0FXQztBQTcxRUQ7OztHQUdHO0FBQ0gscUZBQXFGO0FBQ3JGLFNBQWdCLHlCQUF5QixDQUFDLEdBQW1DO0lBQzNFLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQUMsT0FBTyxTQUFTLENBQUM7SUFBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHO1FBQ2IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNO1FBQ3JCLFFBQVEsRUFBRSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ2hELEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxH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O0lBQ2pCLGVBQWU7SUFDZixvQ0FBc0IsQ0FBQTtBQUN4QixDQUFDLEVBTFcsVUFBVSwwQkFBVixVQUFVLFFBS3JCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUMxQixVQUFVO0lBQ1YsK0JBQVcsQ0FBQTtJQUNYLFVBQVU7SUFDViwrQkFBVyxDQUFBO0lBQ1gsV0FBVztJQUNYLGlDQUFhLENBQUE7QUFDZixDQUFDLEVBUFcsZ0JBQWdCLGdDQUFoQixnQkFBZ0IsUUFPM0I7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxrQkFLWDtBQUxELFdBQVksa0JBQWtCO0lBQzVCLFdBQVc7SUFDWCxtQ0FBYSxDQUFBO0lBQ2IsVUFBVTtJQUNWLGlDQUFXLENBQUE7QUFDYixDQUFDLEVBTFcsa0JBQWtCLGtDQUFsQixrQkFBa0IsUUFLN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB+fiBHZW5lcmF0ZWQgYnkgcHJvamVuLiBUbyBtb2RpZnksIGVkaXQgLnByb2plbnJjLnRzIGFuZCBydW4gXCJub2RlIC4vcHJvamVuLmpzXCIuXG4vKipcbiAqIFRoZSBjb25maWd1cmF0aW9uIHRoYXQgaXMgY29udGFpbmVkIGluc2lkZSB0aGUgZmlsZSBgYmlvbWUuanNvbmBcbiAqXG4gKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpb21lQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBIGZpZWxkIGZvciB0aGUgW0pTT04gc2NoZW1hXShodHRwczovL2pzb24tc2NoZW1hLm9yZy8pIHNwZWNpZmljYXRpb25cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jJHNjaGVtYVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhc3Npc3RzXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIENzcyBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNjc3NcbiAgICovXG4gIHJlYWRvbmx5IGNzcz86IENzc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXRocyB0byBvdGhlciBKU09OIGZpbGVzLCB1c2VkIHRvIGV4dGVuZHMgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jZXh0ZW5kc1xuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZW5kcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZmlsZXN5c3RlbVxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNmaWxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM/OiBGaWxlc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBmb3JtYXR0ZXJcbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBGb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgR3JhcGhRTCBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNncmFwaHFsXG4gICAqL1xuICByZWFkb25seSBncmFwaHFsPzogR3JhcGhxbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBHcmFwaFFMIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2dyaXRcbiAgICovXG4gIHJlYWRvbmx5IGdyaXQ/OiBHcml0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEhUTUwgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaHRtbD86IEh0bWxDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgSmF2YVNjcmlwdCBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNqYXZhc2NyaXB0XG4gICAqL1xuICByZWFkb25seSBqYXZhc2NyaXB0PzogSnNDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgSnNvbiBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIEJpb21lQ29uZmlndXJhdGlvbiNqc29uXG4gICAqL1xuICByZWFkb25seSBqc29uPzogSnNvbkNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgbGludGVyXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI2xpbnRlclxuICAgKi9cbiAgcmVhZG9ubHkgbGludGVyPzogTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdyYW51bGFyIHBhdHRlcm5zIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgb25seSB0byBhIHN1YiBzZXQgb2YgZmlsZXNcbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jb3ZlcnJpZGVzXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBPdmVycmlkZVBhdHRlcm5bXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBwbHVnaW5zIHRvIGxvYWQuXG4gICAqXG4gICAqIEBzY2hlbWEgQmlvbWVDb25maWd1cmF0aW9uI3BsdWdpbnNcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgaXMgYXQgdGhlIHJvb3Qgb2YgYSBCaW9tZVxuICAgKiBwcm9qZWN0LiBCeSBkZWZhdWx0LCB0aGlzIGlzIGB0cnVlYC5cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jcm9vdFxuICAgKi9cbiAgcmVhZG9ubHkgcm9vdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBWQ1MgaW50ZWdyYXRpb25cbiAgICpcbiAgICogQHNjaGVtYSBCaW9tZUNvbmZpZ3VyYXRpb24jdmNzXG4gICAqL1xuICByZWFkb25seSB2Y3M/OiBWY3NDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCaW9tZUNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9CaW9tZUNvbmZpZ3VyYXRpb24ob2JqOiBCaW9tZUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICckc2NoZW1hJzogb2JqLnNjaGVtYSxcbiAgICAnYXNzaXN0JzogdG9Kc29uX0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Nzcyc6IHRvSnNvbl9Dc3NDb25maWd1cmF0aW9uKG9iai5jc3MpLFxuICAgICdleHRlbmRzJzogb2JqLmV4dGVuZHM/Lm1hcCh5ID0+IHkpLFxuICAgICdmaWxlcyc6IHRvSnNvbl9GaWxlc0NvbmZpZ3VyYXRpb24ob2JqLmZpbGVzKSxcbiAgICAnZm9ybWF0dGVyJzogdG9Kc29uX0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2dyYXBocWwnOiB0b0pzb25fR3JhcGhxbENvbmZpZ3VyYXRpb24ob2JqLmdyYXBocWwpLFxuICAgICdncml0JzogdG9Kc29uX0dyaXRDb25maWd1cmF0aW9uKG9iai5ncml0KSxcbiAgICAnaHRtbCc6IHRvSnNvbl9IdG1sQ29uZmlndXJhdGlvbihvYmouaHRtbCksXG4gICAgJ2phdmFzY3JpcHQnOiB0b0pzb25fSnNDb25maWd1cmF0aW9uKG9iai5qYXZhc2NyaXB0KSxcbiAgICAnanNvbic6IHRvSnNvbl9Kc29uQ29uZmlndXJhdGlvbihvYmouanNvbiksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9MaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICAgICdvdmVycmlkZXMnOiBvYmoub3ZlcnJpZGVzPy5tYXAoeSA9PiB0b0pzb25fT3ZlcnJpZGVQYXR0ZXJuKHkpKSxcbiAgICAncGx1Z2lucyc6IG9iai5wbHVnaW5zPy5tYXAoeSA9PiB5KSxcbiAgICAncm9vdCc6IG9iai5yb290LFxuICAgICd2Y3MnOiB0b0pzb25fVmNzQ29uZmlndXJhdGlvbihvYmoudmNzKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgQXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogV2hldGhlciBCaW9tZSBzaG91bGQgZmFpbCBpbiBDTEkgaWYgdGhlIGFzc2lzdCB3ZXJlIG5vdCBhcHBsaWVkIHRvIHRoZSBjb2RlLlxuICAgKlxuICAgKiBAc2NoZW1hIEFzc2lzdENvbmZpZ3VyYXRpb24jYWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9ucz86IEFjdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgQmlvbWUgc2hvdWxkIGVuYWJsZSBhc3Npc3QgdmlhIExTUCBhbmQgQ0xJLlxuICAgKlxuICAgKiBAc2NoZW1hIEFzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9iIHBhdHRlcm5zLiBCaW9tZSB3aWxsIGluY2x1ZGUgZmlsZXMvZm9sZGVycyB0aGF0IHdpbGxcbiAgICogbWF0Y2ggdGhlc2UgcGF0dGVybnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQXNzaXN0Q29uZmlndXJhdGlvbiNpbmNsdWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYWN0aW9ucyc6IHRvSnNvbl9BY3Rpb25zKG9iai5hY3Rpb25zKSxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdpbmNsdWRlcyc6IG9iai5pbmNsdWRlcz8ubWFwKHkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIGFwcGxpZWQgdG8gQ1NTIGZpbGVzXG4gKlxuICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3NzQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDU1MgYXNzaXN0IG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBDc3NDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogQ3NzQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ1NTIGZvcm1hdHRlciBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQ29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIENTUyBnbG9iYWxzXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQ29uZmlndXJhdGlvbiNnbG9iYWxzXG4gICAqL1xuICByZWFkb25seSBnbG9iYWxzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENTUyBsaW50ZXIgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIENzc0NvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBDc3NMaW50ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDU1MgcGFyc2luZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQ29uZmlndXJhdGlvbiNwYXJzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IENzc1BhcnNlckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Nzc0NvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Dc3NDb25maWd1cmF0aW9uKG9iajogQ3NzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9Dc3NBc3Npc3RDb25maWd1cmF0aW9uKG9iai5hc3Npc3QpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnZ2xvYmFscyc6IG9iai5nbG9iYWxzPy5tYXAoeSA9PiB5KSxcbiAgICAnbGludGVyJzogdG9Kc29uX0Nzc0xpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gICAgJ3BhcnNlcic6IHRvSnNvbl9Dc3NQYXJzZXJDb25maWd1cmF0aW9uKG9iai5wYXJzZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGZpbGVzeXN0ZW1cbiAqXG4gKiBAc2NoZW1hIEZpbGVzQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVzQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiAqKkRlcHJlY2F0ZWQ6KiogUGxlYXNlIHVzZSBfZm9yY2UtaWdub3JlIHN5bnRheF8gaW4gYGZpbGVzLmluY2x1ZGVzYFxuICAgKiBpbnN0ZWFkOiA8aHR0cHM6Ly9iaW9tZWpzLmRldi9yZWZlcmVuY2UvY29uZmlndXJhdGlvbi8jZmlsZXNpbmNsdWRlcz5cbiAgICpcbiAgICogU2V0IG9mIGZpbGUgYW5kIGZvbGRlciBuYW1lcyB0aGF0IHNob3VsZCBiZSB1bmNvbmRpdGlvbmFsbHkgaWdub3JlZCBieVxuICAgKiBCaW9tZSdzIHNjYW5uZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgRmlsZXNDb25maWd1cmF0aW9uI2V4cGVyaW1lbnRhbFNjYW5uZXJJZ25vcmVzXG4gICAqL1xuICByZWFkb25seSBleHBlcmltZW50YWxTY2FubmVySWdub3Jlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUZWxscyBCaW9tZSB0byBub3QgZW1pdCBkaWFnbm9zdGljcyB3aGVuIGhhbmRsaW5nIGZpbGVzIHRoYXQgaXQgZG9lc24ndCBrbm93XG4gICAqXG4gICAqIEBzY2hlbWEgRmlsZXNDb25maWd1cmF0aW9uI2lnbm9yZVVua25vd25cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVVua25vd24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYiBwYXR0ZXJucy4gQmlvbWUgd2lsbCBoYW5kbGUgb25seSB0aG9zZSBmaWxlcy9mb2xkZXJzIHRoYXQgd2lsbFxuICAgKiBtYXRjaCB0aGVzZSBwYXR0ZXJucy5cbiAgICpcbiAgICogQHNjaGVtYSBGaWxlc0NvbmZpZ3VyYXRpb24jaW5jbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBmb3Igc291cmNlIGNvZGUgZmlsZXMgaW4gYnl0ZXMuIEZpbGVzIGFib3ZlXG4gICAqIHRoaXMgbGltaXQgd2lsbCBiZSBpZ25vcmVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBEZWZhdWx0cyB0byAxIE1pQlxuICAgKlxuICAgKiBAZGVmYXVsdCAxIE1pQlxuICAgKiBAc2NoZW1hIEZpbGVzQ29uZmlndXJhdGlvbiNtYXhTaXplXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdGaWxlc0NvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9GaWxlc0NvbmZpZ3VyYXRpb24ob2JqOiBGaWxlc0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdleHBlcmltZW50YWxTY2FubmVySWdub3Jlcyc6IG9iai5leHBlcmltZW50YWxTY2FubmVySWdub3Jlcz8ubWFwKHkgPT4geSksXG4gICAgJ2lnbm9yZVVua25vd24nOiBvYmouaWdub3JlVW5rbm93bixcbiAgICAnaW5jbHVkZXMnOiBvYmouaW5jbHVkZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdtYXhTaXplJzogb2JqLm1heFNpemUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBHZW5lcmljIG9wdGlvbnMgYXBwbGllZCB0byBhbGwgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGUgcG9zaXRpb24gc3R5bGUgaW4gSFRNTC1pc2ggbGFuZ3VhZ2VzLiBEZWZhdWx0cyB0byBhdXRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYXR0cmlidXRlUG9zaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZVBvc2l0aW9uPzogQXR0cmlidXRlUG9zaXRpb247XG5cbiAgLyoqXG4gICAqIFB1dCB0aGUgYD5gIG9mIGEgbXVsdGktbGluZSBIVE1MIG9yIEpTWCBlbGVtZW50IGF0IHRoZSBlbmQgb2YgdGhlIGxhc3QgbGluZSBpbnN0ZWFkIG9mIGJlaW5nIGFsb25lIG9uIHRoZSBuZXh0IGxpbmUgKGRvZXMgbm90IGFwcGx5IHRvIHNlbGYgY2xvc2luZyBlbGVtZW50cykuXG4gICAqXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U2FtZUxpbmVcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTYW1lTGluZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5zZXJ0IHNwYWNlcyBhcm91bmQgYnJhY2tldHMgaW4gb2JqZWN0IGxpdGVyYWxzLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGV4cGFuZCBhcnJheXMgYW5kIG9iamVjdHMgb24gbXVsdGlwbGUgbGluZXMuXG4gICAqIFdoZW4gc2V0IHRvIGBhdXRvYCwgb2JqZWN0IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlIGZpcnN0IHByb3BlcnR5IGhhcyBhIG5ld2xpbmUsXG4gICAqIGFuZCBhcnJheSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS5cbiAgICogV2hlbiBzZXQgdG8gYGFsd2F5c2AsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gbXVsdGlwbGUgbGluZXMsIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoIG9mIHRoZSBsaXN0LlxuICAgKiBXaGVuIHNldCB0byBgbmV2ZXJgLCB0aGVzZSBsaXRlcmFscyBhcmUgZm9ybWF0dGVkIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgZml0cyBpbiB0aGUgbGluZS5cbiAgICogV2hlbiBmb3JtYXR0aW5nIGBwYWNrYWdlLmpzb25gLCBCaW9tZSB3aWxsIHVzZSBgYWx3YXlzYCB1bmxlc3MgY29uZmlndXJlZCBvdGhlcndpc2UuIERlZmF1bHRzIHRvIFwiYXV0b1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvXCIuXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNleHBhbmRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGFuZD86IEV4cGFuZDtcblxuICAvKipcbiAgICogV2hldGhlciBmb3JtYXR0aW5nIHNob3VsZCBiZSBhbGxvd2VkIHRvIHByb2NlZWQgaWYgYSBnaXZlbiBmaWxlXG4gICAqIGhhcyBzeW50YXggZXJyb3JzXG4gICAqXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNmb3JtYXRXaXRoRXJyb3JzXG4gICAqL1xuICByZWFkb25seSBmb3JtYXRXaXRoRXJyb3JzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMuIFRoZSBmb3JtYXR0ZXIgd2lsbCBpbmNsdWRlIGZpbGVzL2ZvbGRlcnMgdGhhdCB3aWxsXG4gICAqIG1hdGNoIHRoZXNlIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAc2NoZW1hIEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5jbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUuXG4gICAqXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uLCAyIGJ5IGRlZmF1bHRcbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbGluZSBlbmRpbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVXNlIGFueSBgLmVkaXRvcmNvbmZpZ2AgZmlsZXMgdG8gY29uZmlndXJlIHRoZSBmb3JtYXR0ZXIuIENvbmZpZ3VyYXRpb25cbiAgICogaW4gYGJpb21lLmpzb25gIHdpbGwgb3ZlcnJpZGUgYC5lZGl0b3Jjb25maWdgIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIERlZmF1bHQ6IGB0cnVlYC5cbiAgICpcbiAgICogQHNjaGVtYSBGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3VzZUVkaXRvcmNvbmZpZ1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlRWRpdG9yY29uZmlnPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXR0cmlidXRlUG9zaXRpb24nOiBvYmouYXR0cmlidXRlUG9zaXRpb24sXG4gICAgJ2JyYWNrZXRTYW1lTGluZSc6IG9iai5icmFja2V0U2FtZUxpbmUsXG4gICAgJ2JyYWNrZXRTcGFjaW5nJzogb2JqLmJyYWNrZXRTcGFjaW5nLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2V4cGFuZCc6IG9iai5leHBhbmQsXG4gICAgJ2Zvcm1hdFdpdGhFcnJvcnMnOiBvYmouZm9ybWF0V2l0aEVycm9ycyxcbiAgICAnaW5jbHVkZXMnOiBvYmouaW5jbHVkZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAndXNlRWRpdG9yY29uZmlnJzogb2JqLnVzZUVkaXRvcmNvbmZpZyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBHcmFwaFFMIGZpbGVzXG4gKlxuICogQHNjaGVtYSBHcmFwaHFsQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBocWxDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEFzc2lzdCBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgR3JhcGhxbENvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBHcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogR3JhcGhRTCBmb3JtYXR0ZXIgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxDb25maWd1cmF0aW9uI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgR3JhcGhxbENvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JhcGhxbENvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9HcmFwaHFsQ29uZmlndXJhdGlvbihvYmo6IEdyYXBocWxDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0dyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uKG9iai5hc3Npc3QpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9HcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBHcml0UUwgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEdyaXRDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQXNzaXN0IG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBHcml0Q29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEdyaXRBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBGb3JtYXR0aW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBHcml0Q29uZmlndXJhdGlvbiNmb3JtYXR0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBGb3JtYXR0aW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBHcml0Q29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IEdyaXRMaW50ZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcml0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyaXRDb25maWd1cmF0aW9uKG9iajogR3JpdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhc3Npc3QnOiB0b0pzb25fR3JpdEFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Hcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmouZm9ybWF0dGVyKSxcbiAgICAnbGludGVyJzogdG9Kc29uX0dyaXRMaW50ZXJDb25maWd1cmF0aW9uKG9iai5saW50ZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyBhcHBsaWVkIHRvIEhUTUwgZmlsZXNcbiAqXG4gKiBAc2NoZW1hIEh0bWxDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNhc3Npc3RcbiAgICovXG4gIHJlYWRvbmx5IGFzc2lzdD86IEh0bWxBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIGZ1bGwgc3VwcG9ydCBmb3IgSFRNTCwgVnVlLCBTdmVsdGUgYW5kIEFzdHJvIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxDb25maWd1cmF0aW9uI2V4cGVyaW1lbnRhbEZ1bGxTdXBwb3J0RW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhwZXJpbWVudGFsRnVsbFN1cHBvcnRFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSFRNTCBmb3JtYXR0ZXIgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxDb25maWd1cmF0aW9uI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEhUTUwgbGludGVyIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBIdG1sQ29uZmlndXJhdGlvbiNsaW50ZXJcbiAgICovXG4gIHJlYWRvbmx5IGxpbnRlcj86IEh0bWxMaW50ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBIVE1MIHBhcnNpbmcgb3B0aW9uc1xuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxDb25maWd1cmF0aW9uI3BhcnNlclxuICAgKi9cbiAgcmVhZG9ubHkgcGFyc2VyPzogSHRtbFBhcnNlckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0h0bWxDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSHRtbENvbmZpZ3VyYXRpb24ob2JqOiBIdG1sQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9IdG1sQXNzaXN0Q29uZmlndXJhdGlvbihvYmouYXNzaXN0KSxcbiAgICAnZXhwZXJpbWVudGFsRnVsbFN1cHBvcnRFbmFibGVkJzogb2JqLmV4cGVyaW1lbnRhbEZ1bGxTdXBwb3J0RW5hYmxlZCxcbiAgICAnZm9ybWF0dGVyJzogdG9Kc29uX0h0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdsaW50ZXInOiB0b0pzb25fSHRtbExpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gICAgJ3BhcnNlcic6IHRvSnNvbl9IdG1sUGFyc2VyQ29uZmlndXJhdGlvbihvYmoucGFyc2VyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEEgc2V0IG9mIG9wdGlvbnMgYXBwbGllZCB0byB0aGUgSmF2YVNjcmlwdCBmaWxlc1xuICpcbiAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEFzc2lzdCBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogSnNBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBGb3JtYXR0aW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9iYWwgYmluZGluZ3MgdGhhdCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgYW5hbHl6ZXJzXG4gICAqXG4gICAqIElmIGRlZmluZWQgaGVyZSwgdGhleSBzaG91bGQgbm90IGVtaXQgZGlhZ25vc3RpY3MuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uI2dsb2JhbHNcbiAgICovXG4gIHJlYWRvbmx5IGdsb2JhbHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSB0eXBlIG9mIHJ1bnRpbWUgb3IgdHJhbnNmb3JtYXRpb24gdXNlZCBmb3IgaW50ZXJwcmV0aW5nIEpTWC5cbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24janN4UnVudGltZVxuICAgKi9cbiAgcmVhZG9ubHkganN4UnVudGltZT86IEpzeFJ1bnRpbWU7XG5cbiAgLyoqXG4gICAqIExpbnRlciBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNDb25maWd1cmF0aW9uI2xpbnRlclxuICAgKi9cbiAgcmVhZG9ubHkgbGludGVyPzogSnNMaW50ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBQYXJzaW5nIG9wdGlvbnNcbiAgICpcbiAgICogQHNjaGVtYSBKc0NvbmZpZ3VyYXRpb24jcGFyc2VyXG4gICAqL1xuICByZWFkb25seSBwYXJzZXI/OiBKc1BhcnNlckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzQ29uZmlndXJhdGlvbihvYmo6IEpzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9Kc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Zvcm1hdHRlcic6IHRvSnNvbl9Kc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2dsb2JhbHMnOiBvYmouZ2xvYmFscz8ubWFwKHkgPT4geSksXG4gICAgJ2pzeFJ1bnRpbWUnOiBvYmouanN4UnVudGltZSxcbiAgICAnbGludGVyJzogdG9Kc29uX0pzTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0pzUGFyc2VyQ29uZmlndXJhdGlvbihvYmoucGFyc2VyKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgYXBwbGllZCB0byBKU09OIGZpbGVzXG4gKlxuICogQHNjaGVtYSBKc29uQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEFzc2lzdCBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jYXNzaXN0XG4gICAqL1xuICByZWFkb25seSBhc3Npc3Q/OiBKc29uQXNzaXN0Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogRm9ybWF0dGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jZm9ybWF0dGVyXG4gICAqL1xuICByZWFkb25seSBmb3JtYXR0ZXI/OiBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogTGludGluZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBKc29uTGludGVyQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogUGFyc2luZyBvcHRpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkNvbmZpZ3VyYXRpb24jcGFyc2VyXG4gICAqL1xuICByZWFkb25seSBwYXJzZXI/OiBKc29uUGFyc2VyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNvbkNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Kc29uQ29uZmlndXJhdGlvbihvYmo6IEpzb25Db25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXNzaXN0JzogdG9Kc29uX0pzb25Bc3Npc3RDb25maWd1cmF0aW9uKG9iai5hc3Npc3QpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqLmZvcm1hdHRlciksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9Kc29uTGludGVyQ29uZmlndXJhdGlvbihvYmoubGludGVyKSxcbiAgICAncGFyc2VyJzogdG9Kc29uX0pzb25QYXJzZXJDb25maWd1cmF0aW9uKG9iai5wYXJzZXIpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBbiBvYmplY3Qgd2hlcmUgdGhlIGtleXMgYXJlIHRoZSBuYW1lcyBvZiB0aGUgZG9tYWlucywgYW5kIHRoZSB2YWx1ZXMgYXJlIGBhbGxgLCBgcmVjb21tZW5kZWRgLCBvciBgbm9uZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgTGludGVyQ29uZmlndXJhdGlvbiNkb21haW5zXG4gICAqL1xuICByZWFkb25seSBkb21haW5zPzogeyBba2V5OiBzdHJpbmddOiBSdWxlRG9tYWluVmFsdWUgfTtcblxuICAvKipcbiAgICogaWYgYGZhbHNlYCwgaXQgZGlzYWJsZXMgdGhlIGZlYXR1cmUgYW5kIHRoZSBsaW50ZXIgd29uJ3QgYmUgZXhlY3V0ZWQuIGB0cnVlYCBieSBkZWZhdWx0XG4gICAqXG4gICAqIEBzY2hlbWEgTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMuIFRoZSBhbmFseXplciB3aWxsIGhhbmRsZSBvbmx5IHRob3NlIGZpbGVzL2ZvbGRlcnMgdGhhdCB3aWxsXG4gICAqIG1hdGNoIHRoZXNlIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAc2NoZW1hIExpbnRlckNvbmZpZ3VyYXRpb24jaW5jbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcnVsZXNcbiAgICpcbiAgICogQHNjaGVtYSBMaW50ZXJDb25maWd1cmF0aW9uI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFJ1bGVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdMaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fTGludGVyQ29uZmlndXJhdGlvbihvYmo6IExpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkb21haW5zJzogKChvYmouZG9tYWlucykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmRvbWFpbnMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ2luY2x1ZGVzJzogb2JqLmluY2x1ZGVzPy5tYXAoeSA9PiB5KSxcbiAgICAncnVsZXMnOiB0b0pzb25fUnVsZXMob2JqLnJ1bGVzKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcnJpZGVQYXR0ZXJuIHtcbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2Fzc2lzdFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaXN0PzogT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgQ1NTIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2Nzc1xuICAgKi9cbiAgcmVhZG9ubHkgY3NzPzogQ3NzQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGZpbGVzeXN0ZW1cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzPzogT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2Zvcm1hdHRlclxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVyPzogT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgR3JhcGhxbCBsYW5ndWFnZVxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNncmFwaHFsXG4gICAqL1xuICByZWFkb25seSBncmFwaHFsPzogR3JhcGhxbENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBHcml0UUwgbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jZ3JpdFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JpdD86IEdyaXRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciB0aGUgR3JpdFFMIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2h0bWxcbiAgICovXG4gIHJlYWRvbmx5IGh0bWw/OiBIdG1sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGdsb2IgcGF0dGVybnMuIEJpb21lIHdpbGwgaW5jbHVkZSBmaWxlcy9mb2xkZXJzIHRoYXQgd2lsbFxuICAgKiBtYXRjaCB0aGVzZSBwYXR0ZXJucy5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jaW5jbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2phdmFzY3JpcHRcbiAgICovXG4gIHJlYWRvbmx5IGphdmFzY3JpcHQ/OiBKc0NvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBKc29uIGxhbmd1YWdlXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVQYXR0ZXJuI2pzb25cbiAgICovXG4gIHJlYWRvbmx5IGpzb24/OiBKc29uQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogU3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIEpzb24gbGFuZ3VhZ2VcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZVBhdHRlcm4jbGludGVyXG4gICAqL1xuICByZWFkb25seSBsaW50ZXI/OiBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZm9yIGFkZGl0aW9uYWwgcGx1Z2luc1xuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlUGF0dGVybiNwbHVnaW5zXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ092ZXJyaWRlUGF0dGVybicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlUGF0dGVybihvYmo6IE92ZXJyaWRlUGF0dGVybiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2Fzc2lzdCc6IHRvSnNvbl9PdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24ob2JqLmFzc2lzdCksXG4gICAgJ2Nzcyc6IHRvSnNvbl9Dc3NDb25maWd1cmF0aW9uKG9iai5jc3MpLFxuICAgICdmaWxlcyc6IHRvSnNvbl9PdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbihvYmouZmlsZXMpLFxuICAgICdmb3JtYXR0ZXInOiB0b0pzb25fT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iai5mb3JtYXR0ZXIpLFxuICAgICdncmFwaHFsJzogdG9Kc29uX0dyYXBocWxDb25maWd1cmF0aW9uKG9iai5ncmFwaHFsKSxcbiAgICAnZ3JpdCc6IHRvSnNvbl9Hcml0Q29uZmlndXJhdGlvbihvYmouZ3JpdCksXG4gICAgJ2h0bWwnOiB0b0pzb25fSHRtbENvbmZpZ3VyYXRpb24ob2JqLmh0bWwpLFxuICAgICdpbmNsdWRlcyc6IG9iai5pbmNsdWRlcz8ubWFwKHkgPT4geSksXG4gICAgJ2phdmFzY3JpcHQnOiB0b0pzb25fSnNDb25maWd1cmF0aW9uKG9iai5qYXZhc2NyaXB0KSxcbiAgICAnanNvbic6IHRvSnNvbl9Kc29uQ29uZmlndXJhdGlvbihvYmouanNvbiksXG4gICAgJ2xpbnRlcic6IHRvSnNvbl9PdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24ob2JqLmxpbnRlciksXG4gICAgJ3BsdWdpbnMnOiBvYmoucGx1Z2lucz8ubWFwKHkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBTZXQgb2YgcHJvcGVydGllcyB0byBpbnRlZ3JhdGUgQmlvbWUgd2l0aCBhIFZDUyBzb2Z0d2FyZS5cbiAqXG4gKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWY3NDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBraW5kIG9mIGNsaWVudC5cbiAgICpcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI2NsaWVudEtpbmRcbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudEtpbmQ/OiBWY3NDbGllbnRLaW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFpbiBicmFuY2ggb2YgdGhlIHByb2plY3RcbiAgICpcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI2RlZmF1bHRCcmFuY2hcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRCcmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgQmlvbWUgc2hvdWxkIGludGVncmF0ZSBpdHNlbGYgd2l0aCB0aGUgVkNTIGNsaWVudFxuICAgKlxuICAgKiBAc2NoZW1hIFZjc0NvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIgd2hlcmUgQmlvbWUgc2hvdWxkIGNoZWNrIGZvciBWQ1MgZmlsZXMuIEJ5IGRlZmF1bHQsIEJpb21lIHdpbGwgdXNlIHRoZSBzYW1lXG4gICAqIGZvbGRlciB3aGVyZSBgYmlvbWUuanNvbmAgd2FzIGZvdW5kLlxuICAgKlxuICAgKiBJZiBCaW9tZSBjYW4ndCBmaW5kIHRoZSBjb25maWd1cmF0aW9uLCBpdCB3aWxsIGF0dGVtcHQgdG8gdXNlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKiBJZiBubyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGNhbid0IGJlIGZvdW5kLCBCaW9tZSB3b24ndCB1c2UgdGhlIFZDUyBpbnRlZ3JhdGlvbiwgYW5kIGEgZGlhZ25vc3RpY1xuICAgKiB3aWxsIGJlIGVtaXR0ZWRcbiAgICpcbiAgICogQHNjaGVtYSBWY3NDb25maWd1cmF0aW9uI3Jvb3RcbiAgICovXG4gIHJlYWRvbmx5IHJvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgQmlvbWUgc2hvdWxkIHVzZSB0aGUgVkNTIGlnbm9yZSBmaWxlLiBXaGVuIFt0cnVlXSwgQmlvbWUgd2lsbCBpZ25vcmUgdGhlIGZpbGVzXG4gICAqIHNwZWNpZmllZCBpbiB0aGUgaWdub3JlIGZpbGUuXG4gICAqXG4gICAqIEBzY2hlbWEgVmNzQ29uZmlndXJhdGlvbiN1c2VJZ25vcmVGaWxlXG4gICAqL1xuICByZWFkb25seSB1c2VJZ25vcmVGaWxlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVmNzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1Zjc0NvbmZpZ3VyYXRpb24ob2JqOiBWY3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnY2xpZW50S2luZCc6IG9iai5jbGllbnRLaW5kLFxuICAgICdkZWZhdWx0QnJhbmNoJzogb2JqLmRlZmF1bHRCcmFuY2gsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAncm9vdCc6IG9iai5yb290LFxuICAgICd1c2VJZ25vcmVGaWxlJzogb2JqLnVzZUlnbm9yZUZpbGUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEFjdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25zIHtcbiAgLyoqXG4gICAqIEl0IGVuYWJsZXMgdGhlIGFzc2lzdCBhY3Rpb25zIHJlY29tbWVuZGVkIGJ5IEJpb21lLiBgdHJ1ZWAgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogQHNjaGVtYSBBY3Rpb25zI3JlY29tbWVuZGVkXG4gICAqL1xuICByZWFkb25seSByZWNvbW1lbmRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgQWN0aW9ucyNzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IFNvdXJjZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQWN0aW9ucycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0FjdGlvbnMob2JqOiBBY3Rpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAncmVjb21tZW5kZWQnOiBvYmoucmVjb21tZW5kZWQsXG4gICAgJ3NvdXJjZSc6IHRvSnNvbl9Tb3VyY2Uob2JqLnNvdXJjZSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIENTUyBhc3Npc3QgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgQ3NzQXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzc0Fzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgYXNzaXN0IGZvciBDU1MgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzQXNzaXN0Q29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ3NzQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0Nzc0Fzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBDc3NBc3Npc3RDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBDU1MgZm9ybWF0dGVyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgQ1NTIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIENTUyAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFN0eWxlPzogSW5kZW50U3R5bGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiBhcHBsaWVkIHRvIENTUyAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0IHRvIDIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIuXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nIGFwcGxpZWQgdG8gQ1NTIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIGBhdXRvYCB1c2VzIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQncyB0aGUgbWF4IHdpZHRoIG9mIGEgbGluZSBhcHBsaWVkIHRvIENTUyAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lV2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcXVvdGVzIHVzZWQgaW4gQ1NTIGNvZGUuIERlZmF1bHRzIHRvIGRvdWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZG91YmxlLlxuICAgKiBAc2NoZW1hIENzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jcXVvdGVTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVvdGVTdHlsZT86IFF1b3RlU3R5bGU7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0Nzc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Dc3NGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogQ3NzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gICAgJ3F1b3RlU3R5bGUnOiBvYmoucXVvdGVTdHlsZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgQ1NTIGxpbnRlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBDc3NMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3NzTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBsaW50ZXIgZm9yIENTUyBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBDc3NMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDc3NMaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ3NzTGludGVyQ29uZmlndXJhdGlvbihvYmo6IENzc0xpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIENTUyBwYXJzZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgQ3NzUGFyc2VyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzc1BhcnNlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQWxsb3cgY29tbWVudHMgdG8gYXBwZWFyIG9uIGluY29ycmVjdCBsaW5lcyBpbiBgLmNzc2AgZmlsZXNcbiAgICpcbiAgICogQHNjaGVtYSBDc3NQYXJzZXJDb25maWd1cmF0aW9uI2FsbG93V3JvbmdMaW5lQ29tbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93V3JvbmdMaW5lQ29tbWVudHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHBhcnNpbmcgb2YgQ1NTIE1vZHVsZXMgc3BlY2lmaWMgZmVhdHVyZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ3NzUGFyc2VyQ29uZmlndXJhdGlvbiNjc3NNb2R1bGVzXG4gICAqL1xuICByZWFkb25seSBjc3NNb2R1bGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBwYXJzaW5nIG9mIFRhaWx3aW5kIENTUyA0LjAgZGlyZWN0aXZlcyBhbmQgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIENzc1BhcnNlckNvbmZpZ3VyYXRpb24jdGFpbHdpbmREaXJlY3RpdmVzXG4gICAqL1xuICByZWFkb25seSB0YWlsd2luZERpcmVjdGl2ZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDc3NQYXJzZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ3NzUGFyc2VyQ29uZmlndXJhdGlvbihvYmo6IENzc1BhcnNlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhbGxvd1dyb25nTGluZUNvbW1lbnRzJzogb2JqLmFsbG93V3JvbmdMaW5lQ29tbWVudHMsXG4gICAgJ2Nzc01vZHVsZXMnOiBvYmouY3NzTW9kdWxlcyxcbiAgICAndGFpbHdpbmREaXJlY3RpdmVzJzogb2JqLnRhaWx3aW5kRGlyZWN0aXZlcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgQXR0cmlidXRlUG9zaXRpb25cbiAqL1xuZXhwb3J0IGVudW0gQXR0cmlidXRlUG9zaXRpb24ge1xuICAvKiogYXV0byAqL1xuICBBVVRPID0gXCJhdXRvXCIsXG4gIC8qKiBtdWx0aWxpbmUgKi9cbiAgTVVMVElMSU5FID0gXCJtdWx0aWxpbmVcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEV4cGFuZFxuICovXG5leHBvcnQgZW51bSBFeHBhbmQge1xuICAvKiogT2JqZWN0cyBhcmUgZXhwYW5kZWQgd2hlbiB0aGUgZmlyc3QgcHJvcGVydHkgaGFzIGEgbGVhZGluZyBuZXdsaW5lLiBBcnJheXMgYXJlIGFsd2F5c1xuZXhwYW5kZWQgaWYgdGhleSBhcmUgc2hvcnRlciB0aGFuIHRoZSBsaW5lIHdpZHRoLiAoYXV0bykgKi9cbiAgQVVUTyA9IFwiYXV0b1wiLFxuICAvKiogT2JqZWN0cyBhbmQgYXJyYXlzIGFyZSBhbHdheXMgZXhwYW5kZWQuIChhbHdheXMpICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG4gIC8qKiBPYmplY3RzIGFuZCBhcnJheXMgYXJlIG5ldmVyIGV4cGFuZGVkLCBpZiB0aGV5IGFyZSBzaG9ydGVyIHRoYW4gdGhlIGxpbmUgd2lkdGguIChuZXZlcikgKi9cbiAgTkVWRVIgPSBcIm5ldmVyXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBJbmRlbnRTdHlsZVxuICovXG5leHBvcnQgZW51bSBJbmRlbnRTdHlsZSB7XG4gIC8qKiBJbmRlbnQgd2l0aCBUYWIgKHRhYikgKi9cbiAgVEFCID0gXCJ0YWJcIixcbiAgLyoqIEluZGVudCB3aXRoIFNwYWNlIChzcGFjZSkgKi9cbiAgU1BBQ0UgPSBcInNwYWNlXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBMaW5lRW5kaW5nXG4gKi9cbmV4cG9ydCBlbnVtIExpbmVFbmRpbmcge1xuICAvKiogTGluZSBGZWVkIG9ubHkgKFxcbiksIGNvbW1vbiBvbiBMaW51eCBhbmQgbWFjT1MgYXMgd2VsbCBhcyBpbnNpZGUgZ2l0IHJlcG9zIChsZikgKi9cbiAgTEYgPSBcImxmXCIsXG4gIC8qKiBDYXJyaWFnZSBSZXR1cm4gKyBMaW5lIEZlZWQgY2hhcmFjdGVycyAoXFxyXFxuKSwgY29tbW9uIG9uIFdpbmRvd3MgKGNybGYpICovXG4gIENSTEYgPSBcImNybGZcIixcbiAgLyoqIENhcnJpYWdlIFJldHVybiBjaGFyYWN0ZXIgb25seSAoXFxyKSwgdXNlZCB2ZXJ5IHJhcmVseSAoY3IpICovXG4gIENSID0gXCJjclwiLFxuICAvKiogQXV0b21hdGljYWxseSB1c2UgQ1JMRiBvbiBXaW5kb3dzIGFuZCBMRiBvbiBvdGhlciBwbGF0Zm9ybXMgKGF1dG8pICovXG4gIEFVVE8gPSBcImF1dG9cIixcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIEdyYXBoUUwgbGludGVyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIEdyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBHcmFwaFFMIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcmFwaHFsQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyYXBocWxBc3Npc3RDb25maWd1cmF0aW9uKG9iajogR3JhcGhxbEFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIEdyYXBoUUwgZm9ybWF0dGVyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgc3BhY2VzIGFyb3VuZCBicmFja2V0cyBpbiBvYmplY3QgbGl0ZXJhbHMuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBHcmFwaFFMIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gR3JhcGhRTCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gR3JhcGhRTCBmaWxlcy4gRGVmYXVsdCB0byAyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyLlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbGluZSBlbmRpbmcgYXBwbGllZCB0byBHcmFwaFFMIGZpbGVzLiBgYXV0b2AgdXNlcyBDUkxGIG9uIFdpbmRvd3MgYW5kIExGIG9uIG90aGVyIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lIGFwcGxpZWQgdG8gR3JhcGhRTCBmaWxlcy4gRGVmYXVsdHMgdG8gODAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDgwLlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBxdW90ZXMgdXNlZCBpbiBHcmFwaFFMIGNvZGUuIERlZmF1bHRzIHRvIGRvdWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZG91YmxlLlxuICAgKiBAc2NoZW1hIEdyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3F1b3RlU3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHF1b3RlU3R5bGU/OiBRdW90ZVN0eWxlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcmFwaHFsRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyYXBocWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogR3JhcGhxbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAncXVvdGVTdHlsZSc6IG9iai5xdW90ZVN0eWxlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZSBob3cgdGhlIEdyYXBoUUwgbGludGVyIGJlaGF2ZXMuXG4gKlxuICogQHNjaGVtYSBHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGZvcm1hdHRlciBmb3IgR3JhcGhRTCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbiNlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnR3JhcGhxbExpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9HcmFwaHFsTGludGVyQ29uZmlndXJhdGlvbihvYmo6IEdyYXBocWxMaW50ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBHcml0QXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaXRBc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGFzc2lzdCBmdW5jdGlvbmFsaXR5IGZvciBHcml0IGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRBc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcml0QXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyaXRBc3Npc3RDb25maWd1cmF0aW9uKG9iajogR3JpdEFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBHcml0IGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5kZW50IHN0eWxlIGFwcGxpZWQgdG8gR3JpdCBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gR3JpdCBmaWxlcy4gRGVmYXVsdCB0byAyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyLlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFdpZHRoXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRXaWR0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbGluZSBlbmRpbmcgYXBwbGllZCB0byBHcml0IGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVFbmRpbmdcbiAgICovXG4gIHJlYWRvbmx5IGxpbmVFbmRpbmc/OiBMaW5lRW5kaW5nO1xuXG4gIC8qKlxuICAgKiBXaGF0J3MgdGhlIG1heCB3aWR0aCBvZiBhIGxpbmUgYXBwbGllZCB0byBHcml0IGZpbGVzLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZVdpZHRoXG4gICAqL1xuICByZWFkb25seSBsaW5lV2lkdGg/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0dyaXRGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fR3JpdEZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBHcml0Rm9ybWF0dGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdsaW5lRW5kaW5nJzogb2JqLmxpbmVFbmRpbmcsXG4gICAgJ2xpbmVXaWR0aCc6IG9iai5saW5lV2lkdGgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEdyaXRMaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpdExpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgbGludGVyIGZvciBHcml0IGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEdyaXRMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdHcml0TGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0dyaXRMaW50ZXJDb25maWd1cmF0aW9uKG9iajogR3JpdExpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIEhUTUwgYXNzaXN0IGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIEh0bWxBc3Npc3RDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgYXNzaXN0IGZvciBIVE1MIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0h0bWxBc3Npc3RDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSHRtbEFzc2lzdENvbmZpZ3VyYXRpb24ob2JqOiBIdG1sQXNzaXN0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgSFRNTCBmb3JtYXR0ZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlIHBvc2l0aW9uIHN0eWxlIGluIEhUTUwgZWxlbWVudHMuIERlZmF1bHRzIHRvIGF1dG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG8uXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYXR0cmlidXRlUG9zaXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0ZVBvc2l0aW9uPzogQXR0cmlidXRlUG9zaXRpb247XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaHVnIHRoZSBjbG9zaW5nIGJyYWNrZXQgb2YgbXVsdGlsaW5lIEhUTUwgdGFncyB0byB0aGUgZW5kIG9mIHRoZSBsYXN0IGxpbmUsIHJhdGhlciB0aGFuIGJlaW5nIGFsb25lIG9uIHRoZSBmb2xsb3dpbmcgbGluZS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2JyYWNrZXRTYW1lTGluZVxuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNhbWVMaW5lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBIVE1MIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5kZW50IHRoZSBgPHNjcmlwdD5gIGFuZCBgPHN0eWxlPmAgdGFncyBmb3IgSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50U2NyaXB0QW5kU3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFNjcmlwdEFuZFN0eWxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0IHRvIDIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaW5lIGVuZGluZyBhcHBsaWVkIHRvIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gYGF1dG9gIHVzZXMgQ1JMRiBvbiBXaW5kb3dzIGFuZCBMRiBvbiBvdGhlciBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQncyB0aGUgbWF4IHdpZHRoIG9mIGEgbGluZSBhcHBsaWVkIHRvIEhUTUwgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gRGVmYXVsdHMgdG8gODAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDgwLlxuICAgKiBAc2NoZW1hIEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHZvaWQgZWxlbWVudHMgc2hvdWxkIGJlIHNlbGYtY2xvc2VkLiBEZWZhdWx0cyB0byBuZXZlci5cbiAgICpcbiAgICogQGRlZmF1bHQgbmV2ZXIuXG4gICAqIEBzY2hlbWEgSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24jc2VsZkNsb3NlVm9pZEVsZW1lbnRzXG4gICAqL1xuICByZWFkb25seSBzZWxmQ2xvc2VWb2lkRWxlbWVudHM/OiBTZWxmQ2xvc2VWb2lkRWxlbWVudHM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWNjb3VudCBmb3Igd2hpdGVzcGFjZSBzZW5zaXRpdml0eSB3aGVuIGZvcm1hdHRpbmcgSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpLiBEZWZhdWx0cyB0byBcImNzc1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBjc3NcIi5cbiAgICogQHNjaGVtYSBIdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbiN3aGl0ZXNwYWNlU2Vuc2l0aXZpdHlcbiAgICovXG4gIHJlYWRvbmx5IHdoaXRlc3BhY2VTZW5zaXRpdml0eT86IFdoaXRlc3BhY2VTZW5zaXRpdml0eTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSHRtbEZvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9IdG1sRm9ybWF0dGVyQ29uZmlndXJhdGlvbihvYmo6IEh0bWxGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXR0cmlidXRlUG9zaXRpb24nOiBvYmouYXR0cmlidXRlUG9zaXRpb24sXG4gICAgJ2JyYWNrZXRTYW1lTGluZSc6IG9iai5icmFja2V0U2FtZUxpbmUsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnaW5kZW50U2NyaXB0QW5kU3R5bGUnOiBvYmouaW5kZW50U2NyaXB0QW5kU3R5bGUsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICAgICdzZWxmQ2xvc2VWb2lkRWxlbWVudHMnOiBvYmouc2VsZkNsb3NlVm9pZEVsZW1lbnRzLFxuICAgICd3aGl0ZXNwYWNlU2Vuc2l0aXZpdHknOiBvYmoud2hpdGVzcGFjZVNlbnNpdGl2aXR5LFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogT3B0aW9ucyB0aGF0IGNoYW5nZXMgaG93IHRoZSBIVE1MIGxpbnRlciBiZWhhdmVzXG4gKlxuICogQHNjaGVtYSBIdG1sTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0bWxMaW50ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGxpbnRlciBmb3IgSFRNTCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdIdG1sTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0h0bWxMaW50ZXJDb25maWd1cmF0aW9uKG9iajogSHRtbExpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgY2hhbmdlcyBob3cgdGhlIEhUTUwgcGFyc2VyIGJlaGF2ZXNcbiAqXG4gKiBAc2NoZW1hIEh0bWxQYXJzZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogRW5hYmxlcyB0aGUgcGFyc2luZyBvZiBkb3VibGUgdGV4dCBleHByZXNzaW9ucyBzdWNoIGFzIGB7eyBleHByZXNzaW9uIH19YCBpbnNpZGUgYC5odG1sYCBmaWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIEh0bWxQYXJzZXJDb25maWd1cmF0aW9uI2ludGVycG9sYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGludGVycG9sYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdIdG1sUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0h0bWxQYXJzZXJDb25maWd1cmF0aW9uKG9iajogSHRtbFBhcnNlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdpbnRlcnBvbGF0aW9uJzogb2JqLmludGVycG9sYXRpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBc3Npc3Qgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgSmF2YVNjcmlwdCBhc3Npc3RcbiAqXG4gKiBAc2NoZW1hIEpzQXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzQXNzaXN0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBhc3Npc3QgZm9yIEphdmFTY3JpcHQgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Fzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IEpzQXNzaXN0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEZvcm1hdHRpbmcgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgSmF2YVNjcmlwdCBmaWxlc1xuICpcbiAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIG5vbi1uZWNlc3NhcnkgcGFyZW50aGVzZXMgdG8gYXJyb3cgZnVuY3Rpb25zLiBEZWZhdWx0cyB0byBcImFsd2F5c1wiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhbHdheXNcIi5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jYXJyb3dQYXJlbnRoZXNlc1xuICAgKi9cbiAgcmVhZG9ubHkgYXJyb3dQYXJlbnRoZXNlcz86IEFycm93UGFyZW50aGVzZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGUgcG9zaXRpb24gc3R5bGUgaW4gSlNYIGVsZW1lbnRzLiBEZWZhdWx0cyB0byBhdXRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhdXRvLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBodWcgdGhlIGNsb3NpbmcgYnJhY2tldCBvZiBtdWx0aWxpbmUgSFRNTC9KU1ggdGFncyB0byB0aGUgZW5kIG9mIHRoZSBsYXN0IGxpbmUsIHJhdGhlciB0aGFuIGJlaW5nIGFsb25lIG9uIHRoZSBmb2xsb3dpbmcgbGluZS4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U2FtZUxpbmVcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTYW1lTGluZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5zZXJ0IHNwYWNlcyBhcm91bmQgYnJhY2tldHMgaW4gb2JqZWN0IGxpdGVyYWxzLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNicmFja2V0U3BhY2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNwYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBmb3JtYXR0ZXIgZm9yIEphdmFTY3JpcHQgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhwYW5kIGFycmF5cyBhbmQgb2JqZWN0cyBvbiBtdWx0aXBsZSBsaW5lcy5cbiAgICogV2hlbiBzZXQgdG8gYGF1dG9gLCBvYmplY3QgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcyBpZiB0aGUgZmlyc3QgcHJvcGVydHkgaGFzIGEgbmV3bGluZSxcbiAgICogYW5kIGFycmF5IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIHNldCB0byBgYWx3YXlzYCwgdGhlc2UgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcywgcmVnYXJkbGVzcyBvZiBsZW5ndGggb2YgdGhlIGxpc3QuXG4gICAqIFdoZW4gc2V0IHRvIGBuZXZlcmAsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIGZvcm1hdHRpbmcgYHBhY2thZ2UuanNvbmAsIEJpb21lIHdpbGwgdXNlIGBhbHdheXNgIHVubGVzcyBjb25maWd1cmVkIG90aGVyd2lzZS4gRGVmYXVsdHMgdG8gXCJhdXRvXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9cIi5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUgYXBwbGllZCB0byBKYXZhU2NyaXB0IChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24gYXBwbGllZCB0byBKYXZhU2NyaXB0IChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIERlZmF1bHQgdG8gMi5cbiAgICpcbiAgICogQGRlZmF1bHQgMi5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBxdW90ZXMgdXNlZCBpbiBKU1guIERlZmF1bHRzIHRvIGRvdWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZG91YmxlLlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNqc3hRdW90ZVN0eWxlXG4gICAqL1xuICByZWFkb25seSBqc3hRdW90ZVN0eWxlPzogUXVvdGVTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbGluZSBlbmRpbmcgYXBwbGllZCB0byBKYXZhU2NyaXB0IChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuIGBhdXRvYCB1c2VzIENSTEYgb24gV2luZG93cyBhbmQgTEYgb24gb3RoZXIgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lIGFwcGxpZWQgdG8gSmF2YVNjcmlwdCAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGVuIGJyZWFraW5nIGJpbmFyeSBleHByZXNzaW9ucyBpbnRvIG11bHRpcGxlIGxpbmVzLCB3aGV0aGVyIHRvIGJyZWFrIHRoZW0gYmVmb3JlIG9yIGFmdGVyIHRoZSBiaW5hcnkgb3BlcmF0b3IuIERlZmF1bHRzIHRvIFwiYWZ0ZXJcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgYWZ0ZXJcIi5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jb3BlcmF0b3JMaW5lYnJlYWtcbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdG9yTGluZWJyZWFrPzogT3BlcmF0b3JMaW5lYnJlYWs7XG5cbiAgLyoqXG4gICAqIFdoZW4gcHJvcGVydGllcyBpbiBvYmplY3RzIGFyZSBxdW90ZWQuIERlZmF1bHRzIHRvIGFzTmVlZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhc05lZWRlZC5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jcXVvdGVQcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBxdW90ZVByb3BlcnRpZXM/OiBRdW90ZVByb3BlcnRpZXM7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHF1b3RlcyB1c2VkIGluIEphdmFTY3JpcHQgY29kZS4gRGVmYXVsdHMgdG8gZG91YmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBkb3VibGUuXG4gICAqIEBzY2hlbWEgSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uI3F1b3RlU3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHF1b3RlU3R5bGU/OiBRdW90ZVN0eWxlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb3JtYXR0ZXIgcHJpbnRzIHNlbWljb2xvbnMgZm9yIGFsbCBzdGF0ZW1lbnRzIG9yIG9ubHkgaW4gZm9yIHN0YXRlbWVudHMgd2hlcmUgaXQgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgQVNJLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNzZW1pY29sb25zXG4gICAqL1xuICByZWFkb25seSBzZW1pY29sb25zPzogU2VtaWNvbG9ucztcblxuICAvKipcbiAgICogUHJpbnQgdHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIGluIG11bHRpLWxpbmUgY29tbWEtc2VwYXJhdGVkIHN5bnRhY3RpYyBzdHJ1Y3R1cmVzLiBEZWZhdWx0cyB0byBcImFsbFwiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhbGxcIi5cbiAgICogQHNjaGVtYSBKc0Zvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdDb21tYXNcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nQ29tbWFzPzogSnNUcmFpbGluZ0NvbW1hcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogSnNGb3JtYXR0ZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXJyb3dQYXJlbnRoZXNlcyc6IG9iai5hcnJvd1BhcmVudGhlc2VzLFxuICAgICdhdHRyaWJ1dGVQb3NpdGlvbic6IG9iai5hdHRyaWJ1dGVQb3NpdGlvbixcbiAgICAnYnJhY2tldFNhbWVMaW5lJzogb2JqLmJyYWNrZXRTYW1lTGluZSxcbiAgICAnYnJhY2tldFNwYWNpbmcnOiBvYmouYnJhY2tldFNwYWNpbmcsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnZXhwYW5kJzogb2JqLmV4cGFuZCxcbiAgICAnaW5kZW50U3R5bGUnOiBvYmouaW5kZW50U3R5bGUsXG4gICAgJ2luZGVudFdpZHRoJzogb2JqLmluZGVudFdpZHRoLFxuICAgICdqc3hRdW90ZVN0eWxlJzogb2JqLmpzeFF1b3RlU3R5bGUsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAnb3BlcmF0b3JMaW5lYnJlYWsnOiBvYmoub3BlcmF0b3JMaW5lYnJlYWssXG4gICAgJ3F1b3RlUHJvcGVydGllcyc6IG9iai5xdW90ZVByb3BlcnRpZXMsXG4gICAgJ3F1b3RlU3R5bGUnOiBvYmoucXVvdGVTdHlsZSxcbiAgICAnc2VtaWNvbG9ucyc6IG9iai5zZW1pY29sb25zLFxuICAgICd0cmFpbGluZ0NvbW1hcyc6IG9iai50cmFpbGluZ0NvbW1hcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEluZGljYXRlcyB0aGUgdHlwZSBvZiBydW50aW1lIG9yIHRyYW5zZm9ybWF0aW9uIHVzZWQgZm9yIGludGVycHJldGluZyBKU1guXG4gKlxuICogQHNjaGVtYSBKc3hSdW50aW1lXG4gKi9cbmV4cG9ydCBlbnVtIEpzeFJ1bnRpbWUge1xuICAvKiogSW5kaWNhdGVzIGEgbW9kZXJuIG9yIG5hdGl2ZSBKU1ggZW52aXJvbm1lbnQsIHRoYXQgZG9lc24ndCByZXF1aXJlXG5zcGVjaWFsIGhhbmRsaW5nIGJ5IEJpb21lLiAodHJhbnNwYXJlbnQpICovXG4gIFRSQU5TUEFSRU5UID0gXCJ0cmFuc3BhcmVudFwiLFxuICAvKiogSW5kaWNhdGVzIGEgY2xhc3NpYyBSZWFjdCBlbnZpcm9ubWVudCB0aGF0IHJlcXVpcmVzIHRoZSBgUmVhY3RgIGltcG9ydC5cblxuQ29ycmVzcG9uZHMgdG8gdGhlIGByZWFjdGAgdmFsdWUgZm9yIHRoZSBganN4YCBvcHRpb24gaW4gVHlwZVNjcmlwdCdzXG5gdHNjb25maWcuanNvbmAuXG5cblRoaXMgb3B0aW9uIHNob3VsZCBvbmx5IGJlIG5lY2Vzc2FyeSBpZiB5b3UgY2Fubm90IHVwZ3JhZGUgdG8gYSBSZWFjdFxudmVyc2lvbiB0aGF0IHN1cHBvcnRzIHRoZSBuZXcgSlNYIHJ1bnRpbWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0XG50aGUgb2xkIHZzLiBuZXcgSlNYIHJ1bnRpbWUsIHBsZWFzZSBzZWU6XG48aHR0cHM6Ly9sZWdhY3kucmVhY3Rqcy5vcmcvYmxvZy8yMDIwLzA5LzIyL2ludHJvZHVjaW5nLXRoZS1uZXctanN4LXRyYW5zZm9ybS5odG1sPiAocmVhY3RDbGFzc2ljKSAqL1xuICBSRUFDVF9DTEFTU0lDID0gXCJyZWFjdENsYXNzaWNcIixcbn1cblxuLyoqXG4gKiBMaW50ZXIgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgSmF2YVNjcmlwdCBsaW50ZXJcbiAqXG4gKiBAc2NoZW1hIEpzTGludGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzTGludGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDb250cm9sIHRoZSBsaW50ZXIgZm9yIEphdmFTY3JpcHQgKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc0xpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzTGludGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzTGludGVyQ29uZmlndXJhdGlvbihvYmo6IEpzTGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgSmF2YVNjcmlwdCBwYXJzZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgSnNQYXJzZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNQYXJzZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIEVuYWJsZXMgcGFyc2luZyBvZiBHcml0IG1ldGF2YXJpYWJsZXMuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlYC5cbiAgICogQHNjaGVtYSBKc1BhcnNlckNvbmZpZ3VyYXRpb24jZ3JpdE1ldGF2YXJpYWJsZXNcbiAgICovXG4gIHJlYWRvbmx5IGdyaXRNZXRhdmFyaWFibGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiBlbmFibGVkLCBmaWxlcyBsaWtlIGAuanNgL2AubWpzYC9gLmNqc2AgbWF5IGNvbnRhaW4gSlNYIHN5bnRheC5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlYC5cbiAgICogQHNjaGVtYSBKc1BhcnNlckNvbmZpZ3VyYXRpb24janN4RXZlcnl3aGVyZVxuICAgKi9cbiAgcmVhZG9ubHkganN4RXZlcnl3aGVyZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEl0IGVuYWJsZXMgdGhlIGV4cGVyaW1lbnRhbCBhbmQgdW5zYWZlIHBhcnNpbmcgb2YgcGFyYW1ldGVyIGRlY29yYXRvcnNcbiAgICpcbiAgICogVGhlc2UgZGVjb3JhdG9ycyBiZWxvbmcgdG8gYW4gb2xkIHByb3Bvc2FsLCBhbmQgdGhleSBhcmUgc3ViamVjdCB0byBjaGFuZ2UuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNQYXJzZXJDb25maWd1cmF0aW9uI3Vuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkXG4gICAqL1xuICByZWFkb25seSB1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzUGFyc2VyQ29uZmlndXJhdGlvbihvYmo6IEpzUGFyc2VyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2dyaXRNZXRhdmFyaWFibGVzJzogb2JqLmdyaXRNZXRhdmFyaWFibGVzLFxuICAgICdqc3hFdmVyeXdoZXJlJzogb2JqLmpzeEV2ZXJ5d2hlcmUsXG4gICAgJ3Vuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkJzogb2JqLnVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQXNzaXN0IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIEpTT04gbGludGVyXG4gKlxuICogQHNjaGVtYSBKc29uQXNzaXN0Q29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpzb25Bc3Npc3RDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgdGhlIGFzc2lzdCBmb3IgSlNPTiAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIEpzb25Bc3Npc3RDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25Bc3Npc3RDb25maWd1cmF0aW9uKG9iajogSnNvbkFzc2lzdENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgc3BhY2VzIGFyb3VuZCBicmFja2V0cyBpbiBvYmplY3QgbGl0ZXJhbHMuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUuXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29udHJvbCB0aGUgZm9ybWF0dGVyIGZvciBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhwYW5kIGFycmF5cyBhbmQgb2JqZWN0cyBvbiBtdWx0aXBsZSBsaW5lcy5cbiAgICogV2hlbiBzZXQgdG8gYGF1dG9gLCBvYmplY3QgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcyBpZiB0aGUgZmlyc3QgcHJvcGVydHkgaGFzIGEgbmV3bGluZSxcbiAgICogYW5kIGFycmF5IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIHNldCB0byBgYWx3YXlzYCwgdGhlc2UgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcywgcmVnYXJkbGVzcyBvZiBsZW5ndGggb2YgdGhlIGxpc3QuXG4gICAqIFdoZW4gc2V0IHRvIGBuZXZlcmAsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIGZvcm1hdHRpbmcgYHBhY2thZ2UuanNvbmAsIEJpb21lIHdpbGwgdXNlIGBhbHdheXNgIHVubGVzcyBjb25maWd1cmVkIG90aGVyd2lzZS4gRGVmYXVsdHMgdG8gXCJhdXRvXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9cIi5cbiAgICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNleHBhbmRcbiAgICovXG4gIHJlYWRvbmx5IGV4cGFuZD86IEV4cGFuZDtcblxuICAvKipcbiAgICogVGhlIGluZGVudCBzdHlsZSBhcHBsaWVkIHRvIEpTT04gKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy5cbiAgICpcbiAgICogQHNjaGVtYSBKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRTdHlsZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50U3R5bGU/OiBJbmRlbnRTdHlsZTtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGluZGVudGF0aW9uIGFwcGxpZWQgdG8gSlNPTiAoYW5kIGl0cyBzdXBlciBsYW5ndWFnZXMpIGZpbGVzLiBEZWZhdWx0IHRvIDIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDIuXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jaW5kZW50V2lkdGhcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaW5lIGVuZGluZyBhcHBsaWVkIHRvIEpTT04gKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gYGF1dG9gIHVzZXMgQ1JMRiBvbiBXaW5kb3dzIGFuZCBMRiBvbiBvdGhlciBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jbGluZUVuZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgbGluZUVuZGluZz86IExpbmVFbmRpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQncyB0aGUgbWF4IHdpZHRoIG9mIGEgbGluZSBhcHBsaWVkIHRvIEpTT04gKGFuZCBpdHMgc3VwZXIgbGFuZ3VhZ2VzKSBmaWxlcy4gRGVmYXVsdHMgdG8gODAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDgwLlxuICAgKiBAc2NoZW1hIEpzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQcmludCB0cmFpbGluZyBjb21tYXMgd2hlcmV2ZXIgcG9zc2libGUgaW4gbXVsdGktbGluZSBjb21tYS1zZXBhcmF0ZWQgc3ludGFjdGljIHN0cnVjdHVyZXMuIERlZmF1bHRzIHRvIFwibm9uZVwiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBub25lXCIuXG4gICAqIEBzY2hlbWEgSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24jdHJhaWxpbmdDb21tYXNcbiAgICovXG4gIHJlYWRvbmx5IHRyYWlsaW5nQ29tbWFzPzogSnNvblRyYWlsaW5nQ29tbWFzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uRm9ybWF0dGVyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25Gb3JtYXR0ZXJDb25maWd1cmF0aW9uKG9iajogSnNvbkZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdicmFja2V0U3BhY2luZyc6IG9iai5icmFja2V0U3BhY2luZyxcbiAgICAnZW5hYmxlZCc6IG9iai5lbmFibGVkLFxuICAgICdleHBhbmQnOiBvYmouZXhwYW5kLFxuICAgICdpbmRlbnRTdHlsZSc6IG9iai5pbmRlbnRTdHlsZSxcbiAgICAnaW5kZW50V2lkdGgnOiBvYmouaW5kZW50V2lkdGgsXG4gICAgJ2xpbmVFbmRpbmcnOiBvYmoubGluZUVuZGluZyxcbiAgICAnbGluZVdpZHRoJzogb2JqLmxpbmVXaWR0aCxcbiAgICAndHJhaWxpbmdDb21tYXMnOiBvYmoudHJhaWxpbmdDb21tYXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBMaW50ZXIgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgSlNPTiBsaW50ZXJcbiAqXG4gKiBAc2NoZW1hIEpzb25MaW50ZXJDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ29udHJvbCB0aGUgbGludGVyIGZvciBKU09OIChhbmQgaXRzIHN1cGVyIGxhbmd1YWdlcykgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0pzb25MaW50ZXJDb25maWd1cmF0aW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fSnNvbkxpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBKc29uTGludGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIE9wdGlvbnMgdGhhdCBjaGFuZ2VzIGhvdyB0aGUgSlNPTiBwYXJzZXIgYmVoYXZlc1xuICpcbiAqIEBzY2hlbWEgSnNvblBhcnNlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKc29uUGFyc2VyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBBbGxvdyBwYXJzaW5nIGNvbW1lbnRzIGluIGAuanNvbmAgZmlsZXNcbiAgICpcbiAgICogQHNjaGVtYSBKc29uUGFyc2VyQ29uZmlndXJhdGlvbiNhbGxvd0NvbW1lbnRzXG4gICAqL1xuICByZWFkb25seSBhbGxvd0NvbW1lbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgcGFyc2luZyB0cmFpbGluZyBjb21tYXMgaW4gYC5qc29uYCBmaWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIEpzb25QYXJzZXJDb25maWd1cmF0aW9uI2FsbG93VHJhaWxpbmdDb21tYXNcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93VHJhaWxpbmdDb21tYXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdKc29uUGFyc2VyQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0pzb25QYXJzZXJDb25maWd1cmF0aW9uKG9iajogSnNvblBhcnNlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhbGxvd0NvbW1lbnRzJzogb2JqLmFsbG93Q29tbWVudHMsXG4gICAgJ2FsbG93VHJhaWxpbmdDb21tYXMnOiBvYmouYWxsb3dUcmFpbGluZ0NvbW1hcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgUnVsZURvbWFpblZhbHVlXG4gKi9cbmV4cG9ydCBlbnVtIFJ1bGVEb21haW5WYWx1ZSB7XG4gIC8qKiBFbmFibGVzIGFsbCB0aGUgcnVsZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBkb21haW4gKGFsbCkgKi9cbiAgQUxMID0gXCJhbGxcIixcbiAgLyoqIERpc2FibGVzIGFsbCB0aGUgcnVsZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBkb21haW4gKG5vbmUpICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbiAgLyoqIEVuYWJsZXMgb25seSB0aGUgcmVjb21tZW5kZWQgcnVsZXMgZm9yIHRoaXMgZG9tYWluIChyZWNvbW1lbmRlZCkgKi9cbiAgUkVDT01NRU5ERUQgPSBcInJlY29tbWVuZGVkXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBSdWxlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjYTExeVxuICAgKi9cbiAgcmVhZG9ubHkgYTExWT86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNjb21wbGV4aXR5XG4gICAqL1xuICByZWFkb25seSBjb21wbGV4aXR5PzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI2NvcnJlY3RuZXNzXG4gICAqL1xuICByZWFkb25seSBjb3JyZWN0bmVzcz86IGFueTtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNudXJzZXJ5XG4gICAqL1xuICByZWFkb25seSBudXJzZXJ5PzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI3BlcmZvcm1hbmNlXG4gICAqL1xuICByZWFkb25seSBwZXJmb3JtYW5jZT86IGFueTtcblxuICAvKipcbiAgICogSXQgZW5hYmxlcyB0aGUgbGludCBydWxlcyByZWNvbW1lbmRlZCBieSBCaW9tZS4gYHRydWVgIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEBzY2hlbWEgUnVsZXMjcmVjb21tZW5kZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlY29tbWVuZGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBSdWxlcyNzZWN1cml0eVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHk/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgUnVsZXMjc3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IHN0eWxlPzogYW55O1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFJ1bGVzI3N1c3BpY2lvdXNcbiAgICovXG4gIHJlYWRvbmx5IHN1c3BpY2lvdXM/OiBhbnk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1J1bGVzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUnVsZXMob2JqOiBSdWxlcyB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2ExMXknOiBvYmouYTExWSxcbiAgICAnY29tcGxleGl0eSc6IG9iai5jb21wbGV4aXR5LFxuICAgICdjb3JyZWN0bmVzcyc6IG9iai5jb3JyZWN0bmVzcyxcbiAgICAnbnVyc2VyeSc6IG9iai5udXJzZXJ5LFxuICAgICdwZXJmb3JtYW5jZSc6IG9iai5wZXJmb3JtYW5jZSxcbiAgICAncmVjb21tZW5kZWQnOiBvYmoucmVjb21tZW5kZWQsXG4gICAgJ3NlY3VyaXR5Jzogb2JqLnNlY3VyaXR5LFxuICAgICdzdHlsZSc6IG9iai5zdHlsZSxcbiAgICAnc3VzcGljaW91cyc6IG9iai5zdXNwaWNpb3VzLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTGlzdCBvZiBhY3Rpb25zXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVBc3Npc3RDb25maWd1cmF0aW9uI2FjdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbnM/OiBBY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBpZiBgZmFsc2VgLCBpdCBkaXNhYmxlcyB0aGUgZmVhdHVyZSBhbmQgdGhlIGFzc2lzdCB3b24ndCBiZSBleGVjdXRlZC4gYHRydWVgIGJ5IGRlZmF1bHRcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUFzc2lzdENvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ092ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbihvYmo6IE92ZXJyaWRlQXNzaXN0Q29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2FjdGlvbnMnOiB0b0pzb25fQWN0aW9ucyhvYmouYWN0aW9ucyksXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBGaWxlIHNpemUgbGltaXQgaW4gYnl0ZXNcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbiNtYXhTaXplXG4gICAqL1xuICByZWFkb25seSBtYXhTaXplPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUZpbGVzQ29uZmlndXJhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX092ZXJyaWRlRmlsZXNDb25maWd1cmF0aW9uKG9iajogT3ZlcnJpZGVGaWxlc0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdtYXhTaXplJzogb2JqLm1heFNpemUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgYXR0cmlidXRlIHBvc2l0aW9uIHN0eWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNhdHRyaWJ1dGVQb3NpdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlUG9zaXRpb24/OiBBdHRyaWJ1dGVQb3NpdGlvbjtcblxuICAvKipcbiAgICogUHV0IHRoZSBgPmAgb2YgYSBtdWx0aS1saW5lIEhUTUwgb3IgSlNYIGVsZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBsaW5lIGluc3RlYWQgb2YgYmVpbmcgYWxvbmUgb24gdGhlIG5leHQgbGluZSAoZG9lcyBub3QgYXBwbHkgdG8gc2VsZiBjbG9zaW5nIGVsZW1lbnRzKS5cbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNhbWVMaW5lXG4gICAqL1xuICByZWFkb25seSBicmFja2V0U2FtZUxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCBzcGFjZXMgYXJvdW5kIGJyYWNrZXRzIGluIG9iamVjdCBsaXRlcmFscy4gRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZS5cbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jYnJhY2tldFNwYWNpbmdcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTcGFjaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZXhwYW5kIGFycmF5cyBhbmQgb2JqZWN0cyBvbiBtdWx0aXBsZSBsaW5lcy5cbiAgICogV2hlbiBzZXQgdG8gYGF1dG9gLCBvYmplY3QgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcyBpZiB0aGUgZmlyc3QgcHJvcGVydHkgaGFzIGEgbmV3bGluZSxcbiAgICogYW5kIGFycmF5IGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIHNldCB0byBgYWx3YXlzYCwgdGhlc2UgbGl0ZXJhbHMgYXJlIGZvcm1hdHRlZCBvbiBtdWx0aXBsZSBsaW5lcywgcmVnYXJkbGVzcyBvZiBsZW5ndGggb2YgdGhlIGxpc3QuXG4gICAqIFdoZW4gc2V0IHRvIGBuZXZlcmAsIHRoZXNlIGxpdGVyYWxzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSBpZiBpdCBmaXRzIGluIHRoZSBsaW5lLlxuICAgKiBXaGVuIGZvcm1hdHRpbmcgYHBhY2thZ2UuanNvbmAsIEJpb21lIHdpbGwgdXNlIGBhbHdheXNgIHVubGVzcyBjb25maWd1cmVkIG90aGVyd2lzZS4gRGVmYXVsdHMgdG8gXCJhdXRvXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGF1dG9cIi5cbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZXhwYW5kXG4gICAqL1xuICByZWFkb25seSBleHBhbmQ/OiBFeHBhbmQ7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyB3aGV0aGVyIGZvcm1hdHRpbmcgc2hvdWxkIGJlIGFsbG93ZWQgdG8gcHJvY2VlZCBpZiBhIGdpdmVuIGZpbGVcbiAgICogaGFzIHN5bnRheCBlcnJvcnNcbiAgICpcbiAgICogQHNjaGVtYSBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24jZm9ybWF0V2l0aEVycm9yc1xuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0V2l0aEVycm9ycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBpbmRlbnRhdGlvbiwgMiBieSBkZWZhdWx0IChkZXByZWNhdGVkLCB1c2UgYGluZGVudC13aWR0aGApXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFNpemVcbiAgICovXG4gIHJlYWRvbmx5IGluZGVudFNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRlbnQgc3R5bGUuXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2luZGVudFN0eWxlXG4gICAqL1xuICByZWFkb25seSBpbmRlbnRTdHlsZT86IEluZGVudFN0eWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgaW5kZW50YXRpb24sIDIgYnkgZGVmYXVsdFxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNpbmRlbnRXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZW50V2lkdGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGxpbmUgZW5kaW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlRm9ybWF0dGVyQ29uZmlndXJhdGlvbiNsaW5lRW5kaW5nXG4gICAqL1xuICByZWFkb25seSBsaW5lRW5kaW5nPzogTGluZUVuZGluZztcblxuICAvKipcbiAgICogV2hhdCdzIHRoZSBtYXggd2lkdGggb2YgYSBsaW5lLiBEZWZhdWx0cyB0byA4MC5cbiAgICpcbiAgICogQGRlZmF1bHQgODAuXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVGb3JtYXR0ZXJDb25maWd1cmF0aW9uI2xpbmVXaWR0aFxuICAgKi9cbiAgcmVhZG9ubHkgbGluZVdpZHRoPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9PdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24ob2JqOiBPdmVycmlkZUZvcm1hdHRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhdHRyaWJ1dGVQb3NpdGlvbic6IG9iai5hdHRyaWJ1dGVQb3NpdGlvbixcbiAgICAnYnJhY2tldFNhbWVMaW5lJzogb2JqLmJyYWNrZXRTYW1lTGluZSxcbiAgICAnYnJhY2tldFNwYWNpbmcnOiBvYmouYnJhY2tldFNwYWNpbmcsXG4gICAgJ2VuYWJsZWQnOiBvYmouZW5hYmxlZCxcbiAgICAnZXhwYW5kJzogb2JqLmV4cGFuZCxcbiAgICAnZm9ybWF0V2l0aEVycm9ycyc6IG9iai5mb3JtYXRXaXRoRXJyb3JzLFxuICAgICdpbmRlbnRTaXplJzogb2JqLmluZGVudFNpemUsXG4gICAgJ2luZGVudFN0eWxlJzogb2JqLmluZGVudFN0eWxlLFxuICAgICdpbmRlbnRXaWR0aCc6IG9iai5pbmRlbnRXaWR0aCxcbiAgICAnbGluZUVuZGluZyc6IG9iai5saW5lRW5kaW5nLFxuICAgICdsaW5lV2lkdGgnOiBvYmoubGluZVdpZHRoLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTGlzdCBvZiBydWxlc1xuICAgKlxuICAgKiBAc2NoZW1hIE92ZXJyaWRlTGludGVyQ29uZmlndXJhdGlvbiNkb21haW5zXG4gICAqL1xuICByZWFkb25seSBkb21haW5zPzogeyBba2V5OiBzdHJpbmddOiBSdWxlRG9tYWluVmFsdWUgfTtcblxuICAvKipcbiAgICogaWYgYGZhbHNlYCwgaXQgZGlzYWJsZXMgdGhlIGZlYXR1cmUgYW5kIHRoZSBsaW50ZXIgd29uJ3QgYmUgZXhlY3V0ZWQuIGB0cnVlYCBieSBkZWZhdWx0XG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uI2VuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHJ1bGVzXG4gICAqXG4gICAqIEBzY2hlbWEgT3ZlcnJpZGVMaW50ZXJDb25maWd1cmF0aW9uI3J1bGVzXG4gICAqL1xuICByZWFkb25seSBydWxlcz86IFJ1bGVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9PdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24ob2JqOiBPdmVycmlkZUxpbnRlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkb21haW5zJzogKChvYmouZG9tYWlucykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmRvbWFpbnMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdlbmFibGVkJzogb2JqLmVuYWJsZWQsXG4gICAgJ3J1bGVzJzogdG9Kc29uX1J1bGVzKG9iai5ydWxlcyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBJbnRlZ3JhdGlvbiB3aXRoIHRoZSBnaXQgY2xpZW50IGFzIFZDU1xuICpcbiAqIEBzY2hlbWEgVmNzQ2xpZW50S2luZFxuICovXG5leHBvcnQgZW51bSBWY3NDbGllbnRLaW5kIHtcbiAgLyoqIGdpdCAqL1xuICBHSVQgPSBcImdpdFwiLFxufVxuXG4vKipcbiAqIEEgbGlzdCBvZiBydWxlcyB0aGF0IGJlbG9uZyB0byB0aGlzIGdyb3VwXG4gKlxuICogQHNjaGVtYSBTb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3VyY2Uge1xuICAvKipcbiAgICogUHJvdmlkZXMgYSBjb2RlIGFjdGlvbiB0byBzb3J0IHRoZSBpbXBvcnRzIGFuZCBleHBvcnRzIGluIHRoZSBmaWxlIHVzaW5nIGEgYnVpbHQtaW4gb3IgY3VzdG9tIG9yZGVyLlxuICAgKiBTZWUgPGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvb3JnYW5pemUtaW1wb3J0cz5cbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2Ujb3JnYW5pemVJbXBvcnRzXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6ZUltcG9ydHM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHJlY29tbWVuZGVkIHJ1bGVzIGZvciB0aGlzIGdyb3VwXG4gICAqXG4gICAqIEBzY2hlbWEgU291cmNlI3JlY29tbWVuZGVkXG4gICAqL1xuICByZWFkb25seSByZWNvbW1lbmRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuZm9yY2UgYXR0cmlidXRlIHNvcnRpbmcgaW4gSlNYIGVsZW1lbnRzLlxuICAgKiBTZWUgPGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvdXNlLXNvcnRlZC1hdHRyaWJ1dGVzPlxuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSN1c2VTb3J0ZWRBdHRyaWJ1dGVzXG4gICAqL1xuICByZWFkb25seSB1c2VTb3J0ZWRBdHRyaWJ1dGVzPzogYW55O1xuXG4gIC8qKlxuICAgKiBTb3J0IHRoZSBrZXlzIG9mIGEgSlNPTiBvYmplY3QgaW4gbmF0dXJhbCBvcmRlci5cbiAgICogU2VlIDxodHRwczovL2Jpb21lanMuZGV2L2Fzc2lzdC9hY3Rpb25zL3VzZS1zb3J0ZWQta2V5cz5cbiAgICpcbiAgICogQHNjaGVtYSBTb3VyY2UjdXNlU29ydGVkS2V5c1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlU29ydGVkS2V5cz86IGFueTtcblxuICAvKipcbiAgICogRW5mb3JjZSBvcmRlcmluZyBvZiBDU1MgcHJvcGVydGllcyBhbmQgbmVzdGVkIHJ1bGVzLlxuICAgKiBTZWUgPGh0dHBzOi8vYmlvbWVqcy5kZXYvYXNzaXN0L2FjdGlvbnMvdXNlLXNvcnRlZC1wcm9wZXJ0aWVzPlxuICAgKlxuICAgKiBAc2NoZW1hIFNvdXJjZSN1c2VTb3J0ZWRQcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSB1c2VTb3J0ZWRQcm9wZXJ0aWVzPzogYW55O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdTb3VyY2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9Tb3VyY2Uob2JqOiBTb3VyY2UgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdvcmdhbml6ZUltcG9ydHMnOiBvYmoub3JnYW5pemVJbXBvcnRzLFxuICAgICdyZWNvbW1lbmRlZCc6IG9iai5yZWNvbW1lbmRlZCxcbiAgICAndXNlU29ydGVkQXR0cmlidXRlcyc6IG9iai51c2VTb3J0ZWRBdHRyaWJ1dGVzLFxuICAgICd1c2VTb3J0ZWRLZXlzJzogb2JqLnVzZVNvcnRlZEtleXMsXG4gICAgJ3VzZVNvcnRlZFByb3BlcnRpZXMnOiBvYmoudXNlU29ydGVkUHJvcGVydGllcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgUXVvdGVTdHlsZVxuICovXG5leHBvcnQgZW51bSBRdW90ZVN0eWxlIHtcbiAgLyoqIGRvdWJsZSAqL1xuICBET1VCTEUgPSBcImRvdWJsZVwiLFxuICAvKiogc2luZ2xlICovXG4gIFNJTkdMRSA9IFwic2luZ2xlXCIsXG59XG5cbi8qKlxuICogQ29udHJvbHMgd2hldGhlciB2b2lkLWVsZW1lbnRzIHNob3VsZCBiZSBzZWxmIGNsb3NlZFxuICpcbiAqIEBzY2hlbWEgU2VsZkNsb3NlVm9pZEVsZW1lbnRzXG4gKi9cbmV4cG9ydCBlbnVtIFNlbGZDbG9zZVZvaWRFbGVtZW50cyB7XG4gIC8qKiBUaGUgYC9gIGluc2lkZSB2b2lkIGVsZW1lbnRzIGlzIHJlbW92ZWQgYnkgdGhlIGZvcm1hdHRlciAobmV2ZXIpICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxuICAvKiogVGhlIGAvYCBpbnNpZGUgdm9pZCBlbGVtZW50cyBpcyBhbHdheXMgYWRkZWQgKGFsd2F5cykgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbn1cblxuLyoqXG4gKiBXaGl0ZXNwYWNlIHNlbnNpdGl2aXR5IGZvciBIVE1MIGZvcm1hdHRpbmcuXG4gKlxuICogVGhlIGZvbGxvd2luZyB0d28gY2FzZXMgd29uJ3QgcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQ6XG4gKlxuICogfCAgICAgICAgICAgICAgICB8ICAgICAgaHRtbCAgICAgIHwgICAgb3V0cHV0ICAgIHxcbiAqIHwgLS0tLS0tLS0tLS0tLS0gfCA6LS0tLS0tLS0tLS0tOiB8IDotLS0tLS0tLS0tOiB8XG4gKiB8IHdpdGggc3BhY2VzICAgIHwgYDE8Yj4gMiA8L2I+M2AgfCAxPGI+IDIgPC9iPjMgfFxuICogfCB3aXRob3V0IHNwYWNlcyB8ICBgMTxiPjI8L2I+M2AgIHwgIDE8Yj4yPC9iPjMgIHxcbiAqXG4gKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB3aGl0ZXNwYWNlIGlzIHNpZ25pZmljYW50IGluIGlubGluZSBlbGVtZW50cy5cbiAqXG4gKiBBcyBhIGNvbnNlcXVlbmNlIG9mIHRoaXMsIHRoZSBmb3JtYXR0ZXIgbXVzdCBmb3JtYXQgYmxvY2tzIHRoYXQgbG9vayBsaWtlIHRoaXMgKGFzc3VtZSBhIHNtYWxsIGxpbmUgd2lkdGgsIDwyMCk6XG4gKiBgYGBodG1sXG4gKiA8c3Bhbj5yZWFsbHkgbG9uZyBjb250ZW50PC9zcGFuPlxuICogYGBgXG4gKiBhcyB0aGlzLCB3aGVyZSB0aGUgY29udGVudCBodWdzIHRoZSB0YWdzOlxuICogYGBgaHRtbFxuICogPHNwYW5cbiAqID5yZWFsbHkgbG9uZyBjb250ZW50PC9zcGFuXG4gKiA+XG4gKiBgYGBcbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgaW5saW5lIGVsZW1lbnRzLiBCbG9jayBlbGVtZW50cyBkbyBub3QgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLlxuICpcbiAqIEBzY2hlbWEgV2hpdGVzcGFjZVNlbnNpdGl2aXR5XG4gKi9cbmV4cG9ydCBlbnVtIFdoaXRlc3BhY2VTZW5zaXRpdml0eSB7XG4gIC8qKiBUaGUgZm9ybWF0dGVyIGNvbnNpZGVycyB3aGl0ZXNwYWNlIHNpZ25pZmljYW50IGZvciBlbGVtZW50cyB0aGF0IGhhdmUgYW4gXCJpbmxpbmVcIiBkaXNwbGF5IHN0eWxlIGJ5IGRlZmF1bHQgaW5cbmJyb3dzZXIncyB1c2VyIGFnZW50IHN0eWxlIHNoZWV0cy4gKGNzcykgKi9cbiAgQ1NTID0gXCJjc3NcIixcbiAgLyoqIExlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gY29udGVudCBpcyBjb25zaWRlcmVkIHNpZ25pZmljYW50IGZvciBhbGwgZWxlbWVudHMuXG5cblRoZSBmb3JtYXR0ZXIgc2hvdWxkIGxlYXZlIGF0IGxlYXN0IG9uZSB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpZiB3aGl0ZXNwYWNlIGlzIHByZXNlbnQuXG5PdGhlcndpc2UsIGlmIHRoZXJlIGlzIG5vIHdoaXRlc3BhY2UsIGl0IHNob3VsZCBub3QgYWRkIGFueSBhZnRlciBgPmAgb3IgYmVmb3JlIGA8YC4gSW4gb3RoZXIgd29yZHMsIGlmIHRoZXJlJ3Mgbm8gd2hpdGVzcGFjZSwgdGhlIHRleHQgY29udGVudCBzaG91bGQgaHVnIHRoZSB0YWdzLlxuXG5FeGFtcGxlIG9mIHRleHQgaHVnZ2luZyB0aGUgdGFnczpcbmBgYGh0bWxcbjxiXG4gICAgPmNvbnRlbnQ8L2Jcbj5cbmBgYCAoc3RyaWN0KSAqL1xuICBTVFJJQ1QgPSBcInN0cmljdFwiLFxuICAvKiogV2hpdGVzcGFjZSBpcyBjb25zaWRlcmVkIGluc2lnbmlmaWNhbnQuIFRoZSBmb3JtYXR0ZXIgaXMgZnJlZSB0byByZW1vdmUgb3IgYWRkIHdoaXRlc3BhY2UgYXMgaXQgc2VlcyBmaXQuIChpZ25vcmUpICovXG4gIElHTk9SRSA9IFwiaWdub3JlXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBBcnJvd1BhcmVudGhlc2VzXG4gKi9cbmV4cG9ydCBlbnVtIEFycm93UGFyZW50aGVzZXMge1xuICAvKiogYWx3YXlzICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG4gIC8qKiBhc05lZWRlZCAqL1xuICBBU19ORUVERUQgPSBcImFzTmVlZGVkXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBPcGVyYXRvckxpbmVicmVha1xuICovXG5leHBvcnQgZW51bSBPcGVyYXRvckxpbmVicmVhayB7XG4gIC8qKiBUaGUgb3BlcmF0b3IgaXMgcGxhY2VkIGFmdGVyIHRoZSBleHByZXNzaW9uIChhZnRlcikgKi9cbiAgQUZURVIgPSBcImFmdGVyXCIsXG4gIC8qKiBUaGUgb3BlcmF0b3IgaXMgcGxhY2VkIGJlZm9yZSB0aGUgZXhwcmVzc2lvbiAoYmVmb3JlKSAqL1xuICBCRUZPUkUgPSBcImJlZm9yZVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgUXVvdGVQcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBlbnVtIFF1b3RlUHJvcGVydGllcyB7XG4gIC8qKiBhc05lZWRlZCAqL1xuICBBU19ORUVERUQgPSBcImFzTmVlZGVkXCIsXG4gIC8qKiBwcmVzZXJ2ZSAqL1xuICBQUkVTRVJWRSA9IFwicHJlc2VydmVcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIFNlbWljb2xvbnNcbiAqL1xuZXhwb3J0IGVudW0gU2VtaWNvbG9ucyB7XG4gIC8qKiBhbHdheXMgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbiAgLyoqIGFzTmVlZGVkICovXG4gIEFTX05FRURFRCA9IFwiYXNOZWVkZWRcIixcbn1cblxuLyoqXG4gKiBQcmludCB0cmFpbGluZyBjb21tYXMgd2hlcmV2ZXIgcG9zc2libGUgaW4gbXVsdGktbGluZSBjb21tYS1zZXBhcmF0ZWQgc3ludGFjdGljIHN0cnVjdHVyZXMgZm9yIEphdmFTY3JpcHQvVHlwZVNjcmlwdCBmaWxlcy5cbiAqXG4gKiBAc2NoZW1hIEpzVHJhaWxpbmdDb21tYXNcbiAqL1xuZXhwb3J0IGVudW0gSnNUcmFpbGluZ0NvbW1hcyB7XG4gIC8qKiBhbGwgKi9cbiAgQUxMID0gXCJhbGxcIixcbiAgLyoqIGVzNSAqL1xuICBFUzUgPSBcImVzNVwiLFxuICAvKiogbm9uZSAqL1xuICBOT05FID0gXCJub25lXCIsXG59XG5cbi8qKlxuICogUHJpbnQgdHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIGluIG11bHRpLWxpbmUgY29tbWEtc2VwYXJhdGVkIHN5bnRhY3RpYyBzdHJ1Y3R1cmVzIGZvciBKU09OIGZpbGVzLlxuICpcbiAqIEBzY2hlbWEgSnNvblRyYWlsaW5nQ29tbWFzXG4gKi9cbmV4cG9ydCBlbnVtIEpzb25UcmFpbGluZ0NvbW1hcyB7XG4gIC8qKiBub25lICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbiAgLyoqIGFsbCAqL1xuICBBTEwgPSBcImFsbFwiLFxufVxuIl19