@mnaoumov/typescript-dev-toolkit 1.3.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (177) hide show
  1. package/README.md +4 -0
  2. package/assets/docs-site/components/ConstructorBlock.astro +16 -0
  3. package/assets/docs-site/components/ImportStatement.astro +12 -0
  4. package/assets/docs-site/components/MemberDetail.astro +101 -0
  5. package/assets/docs-site/components/MethodTable.astro +45 -0
  6. package/assets/docs-site/components/PropertyTable.astro +45 -0
  7. package/assets/docs-site/components/SiteTitle.astro +43 -0
  8. package/assets/docs-site/components/TypeSignature.astro +20 -0
  9. package/assets/docs-site/fonts/inter-latin-400-normal.ttf +0 -0
  10. package/assets/docs-site/fonts/inter-latin-700-normal.ttf +0 -0
  11. package/assets/docs-site/styles/global.css +221 -0
  12. package/dist/lib/cjs/build.cjs +1 -1
  13. package/dist/lib/cjs/build.d.cts +1 -1
  14. package/dist/lib/cjs/commitlint-config.cjs +18 -3
  15. package/dist/lib/cjs/commitlint-config.d.cts +6 -0
  16. package/dist/lib/cjs/commitlint-forbidden-patterns.cjs +2 -2
  17. package/dist/lib/cjs/commitlint-forbidden-patterns.d.cts +1 -1
  18. package/dist/lib/cjs/commitlint-spellcheck-header.cjs +2 -2
  19. package/dist/lib/cjs/commitlint-spellcheck-header.d.cts +1 -1
  20. package/dist/lib/cjs/docs-site/api-doc-constants.cjs +171 -0
  21. package/dist/lib/cjs/docs-site/api-doc-constants.d.cts +18 -0
  22. package/dist/lib/cjs/docs-site/api-doc-jsdoc.cjs +414 -0
  23. package/dist/lib/cjs/docs-site/api-doc-jsdoc.d.cts +149 -0
  24. package/dist/lib/cjs/docs-site/api-doc-link-rendering.cjs +377 -0
  25. package/dist/lib/cjs/docs-site/api-doc-link-rendering.d.cts +185 -0
  26. package/dist/lib/cjs/docs-site/api-doc-package-sites.cjs +118 -0
  27. package/dist/lib/cjs/docs-site/api-doc-package-sites.d.cts +36 -0
  28. package/dist/lib/cjs/docs-site/api-doc-page-generation.cjs +561 -0
  29. package/dist/lib/cjs/docs-site/api-doc-page-generation.d.cts +159 -0
  30. package/dist/lib/cjs/docs-site/api-doc-route-segments.cjs +42 -0
  31. package/dist/lib/cjs/docs-site/api-doc-route-segments.d.cts +25 -0
  32. package/dist/lib/cjs/docs-site/api-doc-settings.cjs +47 -0
  33. package/dist/lib/cjs/docs-site/api-doc-settings.d.cts +53 -0
  34. package/dist/lib/cjs/docs-site/api-doc-source-processing.cjs +288 -0
  35. package/dist/lib/cjs/docs-site/api-doc-source-processing.d.cts +75 -0
  36. package/dist/lib/cjs/docs-site/api-doc-text-utils.cjs +281 -0
  37. package/dist/lib/cjs/docs-site/api-doc-text-utils.d.cts +178 -0
  38. package/dist/lib/cjs/docs-site/api-doc-type-merging.cjs +157 -0
  39. package/dist/lib/cjs/docs-site/api-doc-type-merging.d.cts +51 -0
  40. package/dist/lib/cjs/docs-site/api-doc-types.cjs +22 -0
  41. package/dist/lib/cjs/docs-site/api-doc-types.d.cts +157 -0
  42. package/dist/lib/cjs/docs-site/api-docs.cjs +143 -0
  43. package/dist/lib/cjs/docs-site/api-docs.d.cts +34 -0
  44. package/dist/lib/cjs/docs-site/astro-config.cjs +169 -0
  45. package/dist/lib/cjs/docs-site/astro-config.d.cts +23 -0
  46. package/dist/lib/cjs/docs-site/docs-links.cjs +123 -0
  47. package/dist/lib/cjs/docs-site/docs-links.d.cts +32 -0
  48. package/dist/lib/cjs/docs-site/docs-site-assets.cjs +64 -0
  49. package/dist/lib/cjs/docs-site/docs-site-assets.d.cts +23 -0
  50. package/dist/lib/cjs/docs-site/docs-site-commands.cjs +72 -0
  51. package/dist/lib/cjs/docs-site/docs-site-commands.d.cts +29 -0
  52. package/dist/lib/cjs/docs-site/docs-site-config.cjs +122 -0
  53. package/dist/lib/cjs/docs-site/docs-site-config.d.cts +162 -0
  54. package/dist/lib/cjs/docs-site/index.cjs +116 -0
  55. package/dist/lib/cjs/docs-site/index.d.cts +26 -0
  56. package/dist/lib/cjs/docs-site/link-check.cjs +197 -0
  57. package/dist/lib/cjs/docs-site/link-check.d.cts +163 -0
  58. package/dist/lib/cjs/docs-site/og-image-page.cjs +45 -0
  59. package/dist/lib/cjs/docs-site/og-image-page.d.cts +15 -0
  60. package/dist/lib/cjs/docs-site/og-image.cjs +326 -0
  61. package/dist/lib/cjs/docs-site/og-image.d.cts +70 -0
  62. package/dist/lib/cjs/docs-site/og-images.cjs +170 -0
  63. package/dist/lib/cjs/docs-site/og-images.d.cts +41 -0
  64. package/dist/lib/cjs/docs-site/route-data.cjs +47 -0
  65. package/dist/lib/cjs/docs-site/route-data.d.cts +14 -0
  66. package/dist/lib/cjs/docs-site/satteri-github-alerts.cjs +97 -0
  67. package/dist/lib/cjs/docs-site/satteri-github-alerts.d.cts +31 -0
  68. package/dist/lib/cjs/docs-site/satteri-relative-links.cjs +87 -0
  69. package/dist/lib/cjs/docs-site/satteri-relative-links.d.cts +29 -0
  70. package/dist/lib/cjs/docs-site/unrendered-alerts.cjs +51 -0
  71. package/dist/lib/cjs/docs-site/unrendered-alerts.d.cts +38 -0
  72. package/dist/lib/cjs/index.cjs +4 -1
  73. package/dist/lib/cjs/index.d.cts +1 -0
  74. package/dist/lib/cjs/library-build.cjs +1 -1
  75. package/dist/lib/cjs/library-build.d.cts +2 -2
  76. package/dist/lib/cjs/linters/eslint-config.cjs +17 -17
  77. package/dist/lib/cjs/linters/eslint-config.d.cts +1 -7
  78. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +2 -2
  79. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.d.cts +5 -8
  80. package/dist/lib/cjs/package-manager.cjs +2 -2
  81. package/dist/lib/esm/build.d.mts +1 -1
  82. package/dist/lib/esm/build.mjs +1 -1
  83. package/dist/lib/esm/commitlint-config.d.mts +6 -0
  84. package/dist/lib/esm/commitlint-config.mjs +7 -3
  85. package/dist/lib/esm/commitlint-forbidden-patterns.d.mts +1 -1
  86. package/dist/lib/esm/commitlint-forbidden-patterns.mjs +2 -2
  87. package/dist/lib/esm/commitlint-spellcheck-header.d.mts +1 -1
  88. package/dist/lib/esm/commitlint-spellcheck-header.mjs +2 -2
  89. package/dist/lib/esm/docs-site/api-doc-constants.d.mts +18 -0
  90. package/dist/lib/esm/docs-site/api-doc-constants.mjs +143 -0
  91. package/dist/lib/esm/docs-site/api-doc-jsdoc.d.mts +149 -0
  92. package/dist/lib/esm/docs-site/api-doc-jsdoc.mjs +377 -0
  93. package/dist/lib/esm/docs-site/api-doc-link-rendering.d.mts +185 -0
  94. package/dist/lib/esm/docs-site/api-doc-link-rendering.mjs +356 -0
  95. package/dist/lib/esm/docs-site/api-doc-package-sites.d.mts +36 -0
  96. package/dist/lib/esm/docs-site/api-doc-package-sites.mjs +91 -0
  97. package/dist/lib/esm/docs-site/api-doc-page-generation.d.mts +159 -0
  98. package/dist/lib/esm/docs-site/api-doc-page-generation.mjs +548 -0
  99. package/dist/lib/esm/docs-site/api-doc-route-segments.d.mts +25 -0
  100. package/dist/lib/esm/docs-site/api-doc-route-segments.mjs +17 -0
  101. package/dist/lib/esm/docs-site/api-doc-settings.d.mts +53 -0
  102. package/dist/lib/esm/docs-site/api-doc-settings.mjs +22 -0
  103. package/dist/lib/esm/docs-site/api-doc-source-processing.d.mts +75 -0
  104. package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +274 -0
  105. package/dist/lib/esm/docs-site/api-doc-text-utils.d.mts +178 -0
  106. package/dist/lib/esm/docs-site/api-doc-text-utils.mjs +239 -0
  107. package/dist/lib/esm/docs-site/api-doc-type-merging.d.mts +51 -0
  108. package/dist/lib/esm/docs-site/api-doc-type-merging.mjs +129 -0
  109. package/dist/lib/esm/docs-site/api-doc-types.d.mts +157 -0
  110. package/dist/lib/esm/docs-site/api-doc-types.mjs +6 -0
  111. package/dist/lib/esm/docs-site/api-docs.d.mts +34 -0
  112. package/dist/lib/esm/docs-site/api-docs.mjs +139 -0
  113. package/dist/lib/esm/docs-site/astro-config.d.mts +23 -0
  114. package/dist/lib/esm/docs-site/astro-config.mjs +135 -0
  115. package/dist/lib/esm/docs-site/docs-links.d.mts +32 -0
  116. package/dist/lib/esm/docs-site/docs-links.mjs +113 -0
  117. package/dist/lib/esm/docs-site/docs-site-assets.d.mts +23 -0
  118. package/dist/lib/esm/docs-site/docs-site-assets.mjs +32 -0
  119. package/dist/lib/esm/docs-site/docs-site-commands.d.mts +29 -0
  120. package/dist/lib/esm/docs-site/docs-site-commands.mjs +46 -0
  121. package/dist/lib/esm/docs-site/docs-site-config.d.mts +162 -0
  122. package/dist/lib/esm/docs-site/docs-site-config.mjs +98 -0
  123. package/dist/lib/esm/docs-site/index.d.mts +26 -0
  124. package/dist/lib/esm/docs-site/index.mjs +58 -0
  125. package/dist/lib/esm/docs-site/link-check.d.mts +163 -0
  126. package/dist/lib/esm/docs-site/link-check.mjs +166 -0
  127. package/dist/lib/esm/docs-site/og-image-page.d.mts +15 -0
  128. package/dist/lib/esm/docs-site/og-image-page.mjs +21 -0
  129. package/dist/lib/esm/docs-site/og-image.d.mts +70 -0
  130. package/dist/lib/esm/docs-site/og-image.mjs +292 -0
  131. package/dist/lib/esm/docs-site/og-images.d.mts +41 -0
  132. package/dist/lib/esm/docs-site/og-images.mjs +156 -0
  133. package/dist/lib/esm/docs-site/route-data.d.mts +14 -0
  134. package/dist/lib/esm/docs-site/route-data.mjs +23 -0
  135. package/dist/lib/esm/docs-site/satteri-github-alerts.d.mts +31 -0
  136. package/dist/lib/esm/docs-site/satteri-github-alerts.mjs +72 -0
  137. package/dist/lib/esm/docs-site/satteri-relative-links.d.mts +29 -0
  138. package/dist/lib/esm/docs-site/satteri-relative-links.mjs +63 -0
  139. package/dist/lib/esm/docs-site/unrendered-alerts.d.mts +38 -0
  140. package/dist/lib/esm/docs-site/unrendered-alerts.mjs +26 -0
  141. package/dist/lib/esm/index.d.mts +1 -0
  142. package/dist/lib/esm/index.mjs +3 -1
  143. package/dist/lib/esm/library-build.d.mts +2 -2
  144. package/dist/lib/esm/library-build.mjs +1 -1
  145. package/dist/lib/esm/linters/eslint-config.d.mts +1 -7
  146. package/dist/lib/esm/linters/eslint-config.mjs +17 -17
  147. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.d.mts +5 -8
  148. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +2 -2
  149. package/dist/lib/esm/package-manager.mjs +2 -2
  150. package/docs-site/api-doc-constants/package.json +6 -0
  151. package/docs-site/api-doc-jsdoc/package.json +6 -0
  152. package/docs-site/api-doc-link-rendering/package.json +6 -0
  153. package/docs-site/api-doc-package-sites/package.json +6 -0
  154. package/docs-site/api-doc-page-generation/package.json +6 -0
  155. package/docs-site/api-doc-route-segments/package.json +6 -0
  156. package/docs-site/api-doc-settings/package.json +6 -0
  157. package/docs-site/api-doc-source-processing/package.json +6 -0
  158. package/docs-site/api-doc-text-utils/package.json +6 -0
  159. package/docs-site/api-doc-type-merging/package.json +6 -0
  160. package/docs-site/api-doc-types/package.json +6 -0
  161. package/docs-site/api-docs/package.json +6 -0
  162. package/docs-site/astro-config/package.json +6 -0
  163. package/docs-site/docs-links/package.json +6 -0
  164. package/docs-site/docs-site-assets/package.json +6 -0
  165. package/docs-site/docs-site-commands/package.json +6 -0
  166. package/docs-site/docs-site-config/package.json +6 -0
  167. package/docs-site/index/package.json +6 -0
  168. package/docs-site/link-check/package.json +6 -0
  169. package/docs-site/og-image/package.json +6 -0
  170. package/docs-site/og-image-page/package.json +6 -0
  171. package/docs-site/og-images/package.json +6 -0
  172. package/docs-site/package.json +6 -0
  173. package/docs-site/route-data/package.json +6 -0
  174. package/docs-site/satteri-github-alerts/package.json +6 -0
  175. package/docs-site/satteri-relative-links/package.json +6 -0
  176. package/docs-site/unrendered-alerts/package.json +6 -0
  177. package/package.json +75 -5
@@ -0,0 +1,72 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ const GITHUB_ALERT_ASIDE_VARIANTS = /* @__PURE__ */ new Map([
7
+ ["caution", "danger"],
8
+ ["important", "caution"],
9
+ ["note", "note"],
10
+ ["tip", "tip"],
11
+ ["warning", "caution"]
12
+ ]);
13
+ const ALERT_MARKER_REG_EXP = /^\[!(?<Type>\w+)\][\r\n]*/;
14
+ function satteriGitHubAlerts() {
15
+ return {
16
+ blockquote(node, context) {
17
+ const alert = parseAlert(node);
18
+ if (alert === null) {
19
+ return;
20
+ }
21
+ if (hasAlertAncestor(node, context)) {
22
+ return;
23
+ }
24
+ context.setProperty(alert.markerText, "value", alert.markerText.value.slice(alert.markerLength).trimStart());
25
+ context.replaceNode(node, {
26
+ children: [...node.children],
27
+ name: alert.variant,
28
+ type: "containerDirective"
29
+ });
30
+ },
31
+ name: "github-alerts"
32
+ };
33
+ }
34
+ function hasAlertAncestor(node, context) {
35
+ let ancestor = context.parent(node);
36
+ while (ancestor) {
37
+ if (ancestor.type === "blockquote" && parseAlert(ancestor) !== null) {
38
+ return true;
39
+ }
40
+ ancestor = context.parent(ancestor);
41
+ }
42
+ return false;
43
+ }
44
+ function parseAlert(node) {
45
+ const [firstChild] = node.children;
46
+ if (firstChild?.type !== "paragraph") {
47
+ return null;
48
+ }
49
+ const [firstGrandChild] = firstChild.children;
50
+ if (firstGrandChild?.type !== "text") {
51
+ return null;
52
+ }
53
+ const match = ALERT_MARKER_REG_EXP.exec(firstGrandChild.value);
54
+ const type = match?.groups?.["Type"]?.toLowerCase();
55
+ if (match === null || type === void 0) {
56
+ return null;
57
+ }
58
+ const variant = GITHUB_ALERT_ASIDE_VARIANTS.get(type);
59
+ if (variant === void 0) {
60
+ return null;
61
+ }
62
+ return {
63
+ markerLength: match[0].length,
64
+ markerText: firstGrandChild,
65
+ variant
66
+ };
67
+ }
68
+ export {
69
+ GITHUB_ALERT_ASIDE_VARIANTS,
70
+ satteriGitHubAlerts
71
+ };
72
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9zYXR0ZXJpLWdpdGh1Yi1hbGVydHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTXHUwMEU0dHRlcmkgbWRhc3QgcGx1Z2luIHRoYXQgdHVybnMgR2l0SHViIGFsZXJ0cyAoYD4gWyFOT1RFXWAgLi4uKSBpbnRvIFN0YXJsaWdodCBhc2lkZXMuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBCbG9ja3F1b3RlLFxuICBQYXJlbnRzLFxuICBUZXh0XG59IGZyb20gJ21kYXN0JztcbmltcG9ydCB0eXBlIHtcbiAgTWRhc3RQbHVnaW5EZWZpbml0aW9uLFxuICBNZGFzdFZpc2l0b3JDb250ZXh0XG59IGZyb20gJ3NhdHRlcmknO1xuXG4vKipcbiAqIFRoZSBTdGFybGlnaHQgYXNpZGUgdmFyaWFudCBlYWNoIEdpdEh1YiBhbGVydCB0eXBlIHJlbmRlcnMgYXMuXG4gKlxuICogU3RhcmxpZ2h0IGhhcyBmb3VyIHZhcmlhbnRzIGZvciBHaXRIdWIncyBmaXZlIHR5cGVzLCBzbyBgSU1QT1JUQU5UYCBhbmQgYFdBUk5JTkdgIHNoYXJlIGBjYXV0aW9uYCwgYW5kXG4gKiBgQ0FVVElPTmAgLSBHaXRIdWIncyBtb3N0IHNldmVyZSAtIHRha2VzIGBkYW5nZXJgLiBUaGlzIGlzIHRoZSBtYXBwaW5nIGBzdGFybGlnaHQtZ2l0aHViLWFsZXJ0c2AgdXNlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEdJVEhVQl9BTEVSVF9BU0lERV9WQVJJQU5UUzogUmVhZG9ubHlNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcChbXG4gIFsnY2F1dGlvbicsICdkYW5nZXInXSxcbiAgWydpbXBvcnRhbnQnLCAnY2F1dGlvbiddLFxuICBbJ25vdGUnLCAnbm90ZSddLFxuICBbJ3RpcCcsICd0aXAnXSxcbiAgWyd3YXJuaW5nJywgJ2NhdXRpb24nXVxuXSk7XG5cbmNvbnN0IEFMRVJUX01BUktFUl9SRUdfRVhQID0gL15cXFshKD88VHlwZT5cXHcrKVxcXVtcXHJcXG5dKi87XG5cbmludGVyZmFjZSBBbGVydCB7XG4gIG1hcmtlckxlbmd0aDogbnVtYmVyO1xuICBtYXJrZXJUZXh0OiBUZXh0O1xuICB2YXJpYW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU1x1MDBFNHR0ZXJpIG1kYXN0IHBsdWdpbiB0aGF0IHR1cm5zIEdpdEh1YiBhbGVydHMgaW50byBTdGFybGlnaHQgYXNpZGVzLlxuICpcbiAqIFRoZSBndWlkZXMga2VlcCBHaXRIdWIncyBgPiBbIVRZUEVdYCBzeW50YXggYmVjYXVzZSBpdCBhbHNvIHJlbmRlcnMgb24gR2l0SHViLCB3aGVyZSBtb3N0IHBlb3BsZSByZWFkXG4gKiB0aGUgcmVwb3NpdG9yeS4gVGhlIHNpdGUgdXNlZCB0byByZWx5IG9uIGBzdGFybGlnaHQtZ2l0aHViLWFsZXJ0c2AgZm9yIHRoZSBjb252ZXJzaW9uLCBhbmQgb25cbiAqIFN0YXJsaWdodCBgMC40MmAgdGhhdCBwbHVnaW4gc2lsZW50bHkgZG9lcyBub3RoaW5nOiBpdCByZWdpc3RlcnMgaXRzZWxmIGluIGZyb250IG9mIGFuIG1kYXN0IHBsdWdpblxuICogTkFNRUQgYHN0YXJsaWdodC1hc2lkZXNgLCB3aGlsZSBTdGFybGlnaHQgbm93IHJlZ2lzdGVycyBpdHMgYXNpZGVzIGFzIGFuIHVubmFtZWQgZmFjdG9yeSwgc28gdGhlIGxvb2t1cFxuICogbWlzc2VzIGFuZCB0aGUgcGx1Z2luIHJldHVybnMgd2l0aG91dCBhIHdvcmQuIEV2ZXJ5IGFsZXJ0IHRoZW4gcmVuZGVyZWQgYXMgYSBwbGFpbiBibG9ja3F1b3RlIG9wZW5pbmdcbiAqIHdpdGggdGhlIGxpdGVyYWwgYFshV0FSTklOR11gLlxuICpcbiAqIFRoaXMgcGx1Z2luIGRvZXMgdGhlIHNhbWUgY29udmVyc2lvbiBmcm9tIHRoZSBzaXRlJ3Mgb3duIGBtZGFzdFBsdWdpbnNgLCB3aGljaCBydW4gYmVmb3JlIGV2ZXJ5IHBsdWdpblxuICogU3RhcmxpZ2h0IGFwcGVuZHM6IGl0IHJlcGxhY2VzIHRoZSBibG9ja3F1b3RlIHdpdGggYSBgY29udGFpbmVyRGlyZWN0aXZlYCBuYW1lZCBhZnRlciB0aGUgYXNpZGUgdmFyaWFudCxcbiAqIGV4YWN0bHkgd2hhdCBgOjo6Y2F1dGlvbmAgcGFyc2VzIHRvLCBhbmQgU3RhcmxpZ2h0J3Mgb3duIGFzaWRlcyBwbHVnaW4gdGhlbiByZW5kZXJzIGl0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBwbHVnaW4gZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhdHRlcmlHaXRIdWJBbGVydHMoKTogTWRhc3RQbHVnaW5EZWZpbml0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICBibG9ja3F1b3RlKG5vZGUsIGNvbnRleHQ6IE1kYXN0VmlzaXRvckNvbnRleHQpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGFsZXJ0ID0gcGFyc2VBbGVydChub2RlKTtcbiAgICAgIGlmIChhbGVydCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEdpdEh1YiBkb2VzIG5vdCBuZXN0IGFsZXJ0cywgc28gbmVpdGhlciBkbyB3ZTogYW4gYWxlcnQgaW5zaWRlIGFuIGFsZXJ0IHN0YXlzIGEgYmxvY2txdW90ZS5cbiAgICAgIGlmIChoYXNBbGVydEFuY2VzdG9yKG5vZGUsIGNvbnRleHQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5zZXRQcm9wZXJ0eShhbGVydC5tYXJrZXJUZXh0LCAndmFsdWUnLCBhbGVydC5tYXJrZXJUZXh0LnZhbHVlLnNsaWNlKGFsZXJ0Lm1hcmtlckxlbmd0aCkudHJpbVN0YXJ0KCkpO1xuICAgICAgY29udGV4dC5yZXBsYWNlTm9kZShub2RlLCB7XG4gICAgICAgIGNoaWxkcmVuOiBbLi4ubm9kZS5jaGlsZHJlbl0sXG4gICAgICAgIG5hbWU6IGFsZXJ0LnZhcmlhbnQsXG4gICAgICAgIHR5cGU6ICdjb250YWluZXJEaXJlY3RpdmUnXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG5hbWU6ICdnaXRodWItYWxlcnRzJ1xuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNBbGVydEFuY2VzdG9yKG5vZGU6IEJsb2NrcXVvdGUsIGNvbnRleHQ6IE1kYXN0VmlzaXRvckNvbnRleHQpOiBib29sZWFuIHtcbiAgbGV0IGFuY2VzdG9yOiBQYXJlbnRzIHwgdW5kZWZpbmVkID0gY29udGV4dC5wYXJlbnQobm9kZSk7XG4gIHdoaWxlIChhbmNlc3Rvcikge1xuICAgIGlmIChhbmNlc3Rvci50eXBlID09PSAnYmxvY2txdW90ZScgJiYgcGFyc2VBbGVydChhbmNlc3RvcikgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFuY2VzdG9yID0gY29udGV4dC5wYXJlbnQoYW5jZXN0b3IpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFsZXJ0KG5vZGU6IEJsb2NrcXVvdGUpOiBBbGVydCB8IG51bGwge1xuICBjb25zdCBbZmlyc3RDaGlsZF0gPSBub2RlLmNoaWxkcmVuO1xuICBpZiAoZmlyc3RDaGlsZD8udHlwZSAhPT0gJ3BhcmFncmFwaCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IFtmaXJzdEdyYW5kQ2hpbGRdID0gZmlyc3RDaGlsZC5jaGlsZHJlbjtcbiAgaWYgKGZpcnN0R3JhbmRDaGlsZD8udHlwZSAhPT0gJ3RleHQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IEFMRVJUX01BUktFUl9SRUdfRVhQLmV4ZWMoZmlyc3RHcmFuZENoaWxkLnZhbHVlKTtcbiAgY29uc3QgdHlwZSA9IG1hdGNoPy5ncm91cHM/LlsnVHlwZSddPy50b0xvd2VyQ2FzZSgpO1xuICBpZiAobWF0Y2ggPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB2YXJpYW50ID0gR0lUSFVCX0FMRVJUX0FTSURFX1ZBUklBTlRTLmdldCh0eXBlKTtcbiAgaWYgKHZhcmlhbnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYXJrZXJMZW5ndGg6IG1hdGNoWzBdLmxlbmd0aCxcbiAgICBtYXJrZXJUZXh0OiBmaXJzdEdyYW5kQ2hpbGQsXG4gICAgdmFyaWFudFxuICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFzQk8sTUFBTSw4QkFBMkQsb0JBQUksSUFBSTtBQUFBLEVBQzlFLENBQUMsV0FBVyxRQUFRO0FBQUEsRUFDcEIsQ0FBQyxhQUFhLFNBQVM7QUFBQSxFQUN2QixDQUFDLFFBQVEsTUFBTTtBQUFBLEVBQ2YsQ0FBQyxPQUFPLEtBQUs7QUFBQSxFQUNiLENBQUMsV0FBVyxTQUFTO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLHVCQUF1QjtBQXdCdEIsU0FBUyxzQkFBNkM7QUFDM0QsU0FBTztBQUFBLElBQ0wsV0FBVyxNQUFNLFNBQW9DO0FBQ25ELFlBQU0sUUFBUSxXQUFXLElBQUk7QUFDN0IsVUFBSSxVQUFVLE1BQU07QUFDbEI7QUFBQSxNQUNGO0FBR0EsVUFBSSxpQkFBaUIsTUFBTSxPQUFPLEdBQUc7QUFDbkM7QUFBQSxNQUNGO0FBRUEsY0FBUSxZQUFZLE1BQU0sWUFBWSxTQUFTLE1BQU0sV0FBVyxNQUFNLE1BQU0sTUFBTSxZQUFZLEVBQUUsVUFBVSxDQUFDO0FBQzNHLGNBQVEsWUFBWSxNQUFNO0FBQUEsUUFDeEIsVUFBVSxDQUFDLEdBQUcsS0FBSyxRQUFRO0FBQUEsUUFDM0IsTUFBTSxNQUFNO0FBQUEsUUFDWixNQUFNO0FBQUEsTUFDUixDQUFDO0FBQUEsSUFDSDtBQUFBLElBQ0EsTUFBTTtBQUFBLEVBQ1I7QUFDRjtBQUVBLFNBQVMsaUJBQWlCLE1BQWtCLFNBQXVDO0FBQ2pGLE1BQUksV0FBZ0MsUUFBUSxPQUFPLElBQUk7QUFDdkQsU0FBTyxVQUFVO0FBQ2YsUUFBSSxTQUFTLFNBQVMsZ0JBQWdCLFdBQVcsUUFBUSxNQUFNLE1BQU07QUFDbkUsYUFBTztBQUFBLElBQ1Q7QUFFQSxlQUFXLFFBQVEsT0FBTyxRQUFRO0FBQUEsRUFDcEM7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLFdBQVcsTUFBZ0M7QUFDbEQsUUFBTSxDQUFDLFVBQVUsSUFBSSxLQUFLO0FBQzFCLE1BQUksWUFBWSxTQUFTLGFBQWE7QUFDcEMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLENBQUMsZUFBZSxJQUFJLFdBQVc7QUFDckMsTUFBSSxpQkFBaUIsU0FBUyxRQUFRO0FBQ3BDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxRQUFRLHFCQUFxQixLQUFLLGdCQUFnQixLQUFLO0FBQzdELFFBQU0sT0FBTyxPQUFPLFNBQVMsTUFBTSxHQUFHLFlBQVk7QUFDbEQsTUFBSSxVQUFVLFFBQVEsU0FBUyxRQUFXO0FBQ3hDLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxVQUFVLDRCQUE0QixJQUFJLElBQUk7QUFDcEQsTUFBSSxZQUFZLFFBQVc7QUFDekIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPO0FBQUEsSUFDTCxjQUFjLE1BQU0sQ0FBQyxFQUFFO0FBQUEsSUFDdkIsWUFBWTtBQUFBLElBQ1o7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,29 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Sätteri mdast plugin that converts absolute internal links to relative links.
6
+ */
7
+ import type { MdastPluginDefinition } from 'satteri';
8
+ /**
9
+ * Sätteri mdast plugin that converts absolute internal links to relative links.
10
+ *
11
+ * The generator emits markdown files with absolute links that embed the Astro config's `base` path
12
+ * (e.g., `/typescript-lib/api/...`). When the base path is overridden at build time, those links
13
+ * break because they still reference the config-time base.
14
+ *
15
+ * This plugin strips the known base prefix, computes a relative path from the current file to the
16
+ * target, and rewrites the link. Relative links are also skipped by `starlight-links-validator`
17
+ * (`errorOnRelativeLinks: false`).
18
+ *
19
+ * Sätteri is Astro's default Markdown processor as of Astro 7.3, and `markdown.remarkPlugins` now
20
+ * runs only on the separate `unified` processor from `@astrojs/markdown-remark` - which is no longer
21
+ * installed. This is the same rewrite expressed against Sätteri's mdast visitor: a `link` visitor
22
+ * rather than a `unist-util-visit` walk, `context.fileURL` rather than `file.history[0]`, and
23
+ * `context.setProperty` rather than assigning `node.url`, since the tree lives in Rust and mutations
24
+ * are recorded as commands rather than applied in place.
25
+ *
26
+ * @param base - The site's base path, e.g. `/typescript-lib`.
27
+ * @returns The plugin definition.
28
+ */
29
+ export declare function satteriRelativeLinks(base: string): MdastPluginDefinition;
@@ -0,0 +1,63 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ import { posix } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ function satteriRelativeLinks(base) {
9
+ const normalizedBase = base.endsWith("/") ? base : `${base}/`;
10
+ let cachedFileHref = null;
11
+ let cachedSlug = null;
12
+ return {
13
+ link(node, context) {
14
+ if (!node.url.startsWith(normalizedBase)) {
15
+ return;
16
+ }
17
+ const currentSlug = getCurrentSlug(context);
18
+ if (!currentSlug) {
19
+ return;
20
+ }
21
+ const stripped = node.url.slice(normalizedBase.length);
22
+ const [pathPart = "", ...anchorParts] = stripped.split("#");
23
+ const anchor = anchorParts.length > 0 ? `#${anchorParts.join("#")}` : "";
24
+ const targetSlug = pathPart.replace(/\/$/, "");
25
+ let relativePath = posix.relative(currentSlug, targetSlug);
26
+ if (relativePath === "") {
27
+ context.setProperty(node, "url", anchor === "" ? "./" : anchor);
28
+ return;
29
+ }
30
+ if (!relativePath.startsWith(".")) {
31
+ relativePath = `./${relativePath}`;
32
+ }
33
+ context.setProperty(node, "url", `${relativePath}/${anchor}`);
34
+ },
35
+ name: "relative-links"
36
+ };
37
+ function getCurrentSlug(context) {
38
+ const fileUrl = context.fileURL;
39
+ if (!fileUrl) {
40
+ return null;
41
+ }
42
+ if (fileUrl.href !== cachedFileHref) {
43
+ cachedFileHref = fileUrl.href;
44
+ cachedSlug = getContentSlug(fileURLToPath(fileUrl));
45
+ }
46
+ return cachedSlug;
47
+ }
48
+ }
49
+ function getContentSlug(filePath) {
50
+ const normalized = filePath.replaceAll("\\", "/");
51
+ const marker = "content/docs/";
52
+ const markerIndex = normalized.indexOf(marker);
53
+ if (markerIndex === -1) {
54
+ return null;
55
+ }
56
+ const relative = normalized.slice(markerIndex + marker.length);
57
+ const withoutExtension = relative.replace(/\.\w+$/, "");
58
+ return withoutExtension.replace(/\/index$/, "");
59
+ }
60
+ export {
61
+ satteriRelativeLinks
62
+ };
63
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9zYXR0ZXJpLXJlbGF0aXZlLWxpbmtzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogU1x1MDBFNHR0ZXJpIG1kYXN0IHBsdWdpbiB0aGF0IGNvbnZlcnRzIGFic29sdXRlIGludGVybmFsIGxpbmtzIHRvIHJlbGF0aXZlIGxpbmtzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgTWRhc3RQbHVnaW5EZWZpbml0aW9uLFxuICBNZGFzdFZpc2l0b3JDb250ZXh0XG59IGZyb20gJ3NhdHRlcmknO1xuXG5pbXBvcnQgeyBwb3NpeCB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuXG4vKipcbiAqIFNcdTAwRTR0dGVyaSBtZGFzdCBwbHVnaW4gdGhhdCBjb252ZXJ0cyBhYnNvbHV0ZSBpbnRlcm5hbCBsaW5rcyB0byByZWxhdGl2ZSBsaW5rcy5cbiAqXG4gKiBUaGUgZ2VuZXJhdG9yIGVtaXRzIG1hcmtkb3duIGZpbGVzIHdpdGggYWJzb2x1dGUgbGlua3MgdGhhdCBlbWJlZCB0aGUgQXN0cm8gY29uZmlnJ3MgYGJhc2VgIHBhdGhcbiAqIChlLmcuLCBgL3R5cGVzY3JpcHQtbGliL2FwaS8uLi5gKS4gV2hlbiB0aGUgYmFzZSBwYXRoIGlzIG92ZXJyaWRkZW4gYXQgYnVpbGQgdGltZSwgdGhvc2UgbGlua3NcbiAqIGJyZWFrIGJlY2F1c2UgdGhleSBzdGlsbCByZWZlcmVuY2UgdGhlIGNvbmZpZy10aW1lIGJhc2UuXG4gKlxuICogVGhpcyBwbHVnaW4gc3RyaXBzIHRoZSBrbm93biBiYXNlIHByZWZpeCwgY29tcHV0ZXMgYSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGN1cnJlbnQgZmlsZSB0byB0aGVcbiAqIHRhcmdldCwgYW5kIHJld3JpdGVzIHRoZSBsaW5rLiBSZWxhdGl2ZSBsaW5rcyBhcmUgYWxzbyBza2lwcGVkIGJ5IGBzdGFybGlnaHQtbGlua3MtdmFsaWRhdG9yYFxuICogKGBlcnJvck9uUmVsYXRpdmVMaW5rczogZmFsc2VgKS5cbiAqXG4gKiBTXHUwMEU0dHRlcmkgaXMgQXN0cm8ncyBkZWZhdWx0IE1hcmtkb3duIHByb2Nlc3NvciBhcyBvZiBBc3RybyA3LjMsIGFuZCBgbWFya2Rvd24ucmVtYXJrUGx1Z2luc2Agbm93XG4gKiBydW5zIG9ubHkgb24gdGhlIHNlcGFyYXRlIGB1bmlmaWVkYCBwcm9jZXNzb3IgZnJvbSBgQGFzdHJvanMvbWFya2Rvd24tcmVtYXJrYCAtIHdoaWNoIGlzIG5vIGxvbmdlclxuICogaW5zdGFsbGVkLiBUaGlzIGlzIHRoZSBzYW1lIHJld3JpdGUgZXhwcmVzc2VkIGFnYWluc3QgU1x1MDBFNHR0ZXJpJ3MgbWRhc3QgdmlzaXRvcjogYSBgbGlua2AgdmlzaXRvclxuICogcmF0aGVyIHRoYW4gYSBgdW5pc3QtdXRpbC12aXNpdGAgd2FsaywgYGNvbnRleHQuZmlsZVVSTGAgcmF0aGVyIHRoYW4gYGZpbGUuaGlzdG9yeVswXWAsIGFuZFxuICogYGNvbnRleHQuc2V0UHJvcGVydHlgIHJhdGhlciB0aGFuIGFzc2lnbmluZyBgbm9kZS51cmxgLCBzaW5jZSB0aGUgdHJlZSBsaXZlcyBpbiBSdXN0IGFuZCBtdXRhdGlvbnNcbiAqIGFyZSByZWNvcmRlZCBhcyBjb21tYW5kcyByYXRoZXIgdGhhbiBhcHBsaWVkIGluIHBsYWNlLlxuICpcbiAqIEBwYXJhbSBiYXNlIC0gVGhlIHNpdGUncyBiYXNlIHBhdGgsIGUuZy4gYC90eXBlc2NyaXB0LWxpYmAuXG4gKiBAcmV0dXJucyBUaGUgcGx1Z2luIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYXR0ZXJpUmVsYXRpdmVMaW5rcyhiYXNlOiBzdHJpbmcpOiBNZGFzdFBsdWdpbkRlZmluaXRpb24ge1xuICBjb25zdCBub3JtYWxpemVkQmFzZSA9IGJhc2UuZW5kc1dpdGgoJy8nKSA/IGJhc2UgOiBgJHtiYXNlfS9gO1xuXG4gIC8vIFRoZSBkZWZpbml0aW9uIGlzIHJldXNlZCBhY3Jvc3MgZG9jdW1lbnRzLCBzbyB0aGUgc2x1ZyBpcyBtZW1vaXplZCBwZXIgZmlsZSByYXRoZXIgdGhhbiBwZXIgbGluay5cbiAgLy8gRXZlcnkgbGluayBvbiBhIHBhZ2UgcmVzb2x2ZXMgdGhlIHNhbWUgb25lLCBhbmQgYW4gQVBJIHBhZ2UgY2FuIGNhcnJ5IGh1bmRyZWRzLlxuICBsZXQgY2FjaGVkRmlsZUhyZWY6IG51bGwgfCBzdHJpbmcgPSBudWxsO1xuICBsZXQgY2FjaGVkU2x1ZzogbnVsbCB8IHN0cmluZyA9IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICBsaW5rKG5vZGUsIGNvbnRleHQ6IE1kYXN0VmlzaXRvckNvbnRleHQpOiB2b2lkIHtcbiAgICAgIGlmICghbm9kZS51cmwuc3RhcnRzV2l0aChub3JtYWxpemVkQmFzZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50U2x1ZyA9IGdldEN1cnJlbnRTbHVnKGNvbnRleHQpO1xuICAgICAgaWYgKCFjdXJyZW50U2x1Zykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0cmlwcGVkID0gbm9kZS51cmwuc2xpY2Uobm9ybWFsaXplZEJhc2UubGVuZ3RoKTtcbiAgICAgIGNvbnN0IFtwYXRoUGFydCA9ICcnLCAuLi5hbmNob3JQYXJ0c10gPSBzdHJpcHBlZC5zcGxpdCgnIycpO1xuICAgICAgY29uc3QgYW5jaG9yID0gYW5jaG9yUGFydHMubGVuZ3RoID4gMCA/IGAjJHthbmNob3JQYXJ0cy5qb2luKCcjJyl9YCA6ICcnO1xuXG4gICAgICBjb25zdCB0YXJnZXRTbHVnID0gcGF0aFBhcnQucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICAgIC8vIFVzZSB0aGUgc2x1ZyBpdHNlbGYgYXMgdGhlIFwiZGlyZWN0b3J5XCIgXHUyMDE0IGVhY2ggcGFnZSBnZXRzIGl0cyBvd24gVVJMIGRpcmVjdG9yeVxuICAgICAgLy8gRS5nLiwgc2x1ZyBcImFwaS8uLi4vc29tZUZ1bmN0aW9uXCIgXHUyMTkyIFVSTCBcIi9hcGkvLi4uL3NvbWVGdW5jdGlvbi9cIlxuICAgICAgbGV0IHJlbGF0aXZlUGF0aCA9IHBvc2l4LnJlbGF0aXZlKGN1cnJlbnRTbHVnLCB0YXJnZXRTbHVnKTtcbiAgICAgIGlmIChyZWxhdGl2ZVBhdGggPT09ICcnKSB7XG4gICAgICAgIC8vIFNlbGYtbGluazogdGhlIHRhcmdldCBJUyB0aGUgY3VycmVudCBwYWdlIChlLmcuIGEgZnVuY3Rpb24gbGlua2luZyBgdGhpc2AgdG8gaXRzIG93biBwYWdlKS5cbiAgICAgICAgLy8gUHJlc2VydmUgYSBzYW1lLXBhZ2UgZnJhZ21lbnQsIG90aGVyd2lzZSBwb2ludCBhdCB0aGUgY3VycmVudCBkaXJlY3RvcnkuIEJ1aWxkaW5nIGAuL2AgYW5kXG4gICAgICAgIC8vIGAvYCBoZXJlIHdvdWxkIGVtaXQgYC4vL2AsIHdoaWNoIHJlc29sdmVzIHRvIGEgbm9uLWV4aXN0ZW50IGBwYWdlLy9gIFVSTCBhbmQgNDA0cy5cbiAgICAgICAgY29udGV4dC5zZXRQcm9wZXJ0eShub2RlLCAndXJsJywgYW5jaG9yID09PSAnJyA/ICcuLycgOiBhbmNob3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICByZWxhdGl2ZVBhdGggPSBgLi8ke3JlbGF0aXZlUGF0aH1gO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnNldFByb3BlcnR5KG5vZGUsICd1cmwnLCBgJHtyZWxhdGl2ZVBhdGh9LyR7YW5jaG9yfWApO1xuICAgIH0sXG4gICAgbmFtZTogJ3JlbGF0aXZlLWxpbmtzJ1xuICB9O1xuXG4gIGZ1bmN0aW9uIGdldEN1cnJlbnRTbHVnKGNvbnRleHQ6IE1kYXN0VmlzaXRvckNvbnRleHQpOiBudWxsIHwgc3RyaW5nIHtcbiAgICBjb25zdCBmaWxlVXJsID0gY29udGV4dC5maWxlVVJMO1xuICAgIGlmICghZmlsZVVybCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVVcmwuaHJlZiAhPT0gY2FjaGVkRmlsZUhyZWYpIHtcbiAgICAgIGNhY2hlZEZpbGVIcmVmID0gZmlsZVVybC5ocmVmO1xuICAgICAgY2FjaGVkU2x1ZyA9IGdldENvbnRlbnRTbHVnKGZpbGVVUkxUb1BhdGgoZmlsZVVybCkpO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZWRTbHVnO1xuICB9XG59XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGNvbnRlbnQtcmVsYXRpdmUgcGF0aCBmcm9tIGFuIGFic29sdXRlIGZpbGUgcGF0aCwgcHJlc2VydmluZyBjYXNlLlxuICpcbiAqIEdpdmVuIGAuLi4vY29udGVudC9kb2NzL2FwaS8uLi4vRm9vLm1kYCwgcmV0dXJucyBgYXBpLy4uLi9Gb29gLlxuICpcbiAqIEBwYXJhbSBmaWxlUGF0aCAtIFRoZSBkb2N1bWVudCdzIGFic29sdXRlIHBhdGguXG4gKiBAcmV0dXJucyBUaGUgc2x1Zywgb3IgYG51bGxgIGZvciBhIGRvY3VtZW50IG91dHNpZGUgdGhlIGNvbnRlbnQgY29sbGVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29udGVudFNsdWcoZmlsZVBhdGg6IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gZmlsZVBhdGgucmVwbGFjZUFsbCgnXFxcXCcsICcvJyk7XG4gIGNvbnN0IG1hcmtlciA9ICdjb250ZW50L2RvY3MvJztcbiAgY29uc3QgbWFya2VySW5kZXggPSBub3JtYWxpemVkLmluZGV4T2YobWFya2VyKTtcbiAgaWYgKG1hcmtlckluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmVsYXRpdmUgPSBub3JtYWxpemVkLnNsaWNlKG1hcmtlckluZGV4ICsgbWFya2VyLmxlbmd0aCk7XG4gIGNvbnN0IHdpdGhvdXRFeHRlbnNpb24gPSByZWxhdGl2ZS5yZXBsYWNlKC9cXC5cXHcrJC8sICcnKTtcbiAgLy8gU3RyaXAgdHJhaWxpbmcgL2luZGV4IFx1MjAxNCBpbmRleCBwYWdlcyByZXByZXNlbnQgdGhlIGRpcmVjdG9yeSwgbm90IGEgY2hpbGRcbiAgcmV0dXJuIHdpdGhvdXRFeHRlbnNpb24ucmVwbGFjZSgvXFwvaW5kZXgkLywgJycpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFXQSxTQUFTLGFBQWE7QUFDdEIsU0FBUyxxQkFBcUI7QUF1QnZCLFNBQVMscUJBQXFCLE1BQXFDO0FBQ3hFLFFBQU0saUJBQWlCLEtBQUssU0FBUyxHQUFHLElBQUksT0FBTyxHQUFHLElBQUk7QUFJMUQsTUFBSSxpQkFBZ0M7QUFDcEMsTUFBSSxhQUE0QjtBQUVoQyxTQUFPO0FBQUEsSUFDTCxLQUFLLE1BQU0sU0FBb0M7QUFDN0MsVUFBSSxDQUFDLEtBQUssSUFBSSxXQUFXLGNBQWMsR0FBRztBQUN4QztBQUFBLE1BQ0Y7QUFFQSxZQUFNLGNBQWMsZUFBZSxPQUFPO0FBQzFDLFVBQUksQ0FBQyxhQUFhO0FBQ2hCO0FBQUEsTUFDRjtBQUVBLFlBQU0sV0FBVyxLQUFLLElBQUksTUFBTSxlQUFlLE1BQU07QUFDckQsWUFBTSxDQUFDLFdBQVcsSUFBSSxHQUFHLFdBQVcsSUFBSSxTQUFTLE1BQU0sR0FBRztBQUMxRCxZQUFNLFNBQVMsWUFBWSxTQUFTLElBQUksSUFBSSxZQUFZLEtBQUssR0FBRyxDQUFDLEtBQUs7QUFFdEUsWUFBTSxhQUFhLFNBQVMsUUFBUSxPQUFPLEVBQUU7QUFHN0MsVUFBSSxlQUFlLE1BQU0sU0FBUyxhQUFhLFVBQVU7QUFDekQsVUFBSSxpQkFBaUIsSUFBSTtBQUl2QixnQkFBUSxZQUFZLE1BQU0sT0FBTyxXQUFXLEtBQUssT0FBTyxNQUFNO0FBQzlEO0FBQUEsTUFDRjtBQUVBLFVBQUksQ0FBQyxhQUFhLFdBQVcsR0FBRyxHQUFHO0FBQ2pDLHVCQUFlLEtBQUssWUFBWTtBQUFBLE1BQ2xDO0FBRUEsY0FBUSxZQUFZLE1BQU0sT0FBTyxHQUFHLFlBQVksSUFBSSxNQUFNLEVBQUU7QUFBQSxJQUM5RDtBQUFBLElBQ0EsTUFBTTtBQUFBLEVBQ1I7QUFFQSxXQUFTLGVBQWUsU0FBNkM7QUFDbkUsVUFBTSxVQUFVLFFBQVE7QUFDeEIsUUFBSSxDQUFDLFNBQVM7QUFDWixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksUUFBUSxTQUFTLGdCQUFnQjtBQUNuQyx1QkFBaUIsUUFBUTtBQUN6QixtQkFBYSxlQUFlLGNBQWMsT0FBTyxDQUFDO0FBQUEsSUFDcEQ7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUNGO0FBVUEsU0FBUyxlQUFlLFVBQWlDO0FBQ3ZELFFBQU0sYUFBYSxTQUFTLFdBQVcsTUFBTSxHQUFHO0FBQ2hELFFBQU0sU0FBUztBQUNmLFFBQU0sY0FBYyxXQUFXLFFBQVEsTUFBTTtBQUM3QyxNQUFJLGdCQUFnQixJQUFJO0FBQ3RCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxXQUFXLFdBQVcsTUFBTSxjQUFjLE9BQU8sTUFBTTtBQUM3RCxRQUFNLG1CQUFtQixTQUFTLFFBQVEsVUFBVSxFQUFFO0FBRXRELFNBQU8saUJBQWlCLFFBQVEsWUFBWSxFQUFFO0FBQ2hEOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,38 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Finds GitHub alerts that reached the built documentation site as plain blockquotes.
6
+ */
7
+ import type { DocumentationPage } from './link-check.mjs';
8
+ /**
9
+ * A GitHub alert that rendered as a plain blockquote.
10
+ */
11
+ export interface UnrenderedAlert {
12
+ /**
13
+ * The alert marker as it appears on the page, e.g. `[!WARNING]`.
14
+ */
15
+ marker: string;
16
+ /**
17
+ * The page's path relative to the output root.
18
+ */
19
+ relativePath: string;
20
+ }
21
+ /**
22
+ * Collects every GitHub alert that rendered as a plain blockquote rather than as a Starlight aside.
23
+ *
24
+ * The conversion is a markdown-processor plugin, and when a processor switch leaves it unregistered nothing
25
+ * fails: the site builds and every alert shows its literal `[!TYPE]` marker. Scanning the output is the
26
+ * check that holds whichever plugin performs the conversion.
27
+ *
28
+ * @param pages - The built pages.
29
+ * @returns The unrendered alerts, in page order.
30
+ */
31
+ export declare function collectUnrenderedAlerts(pages: readonly DocumentationPage[]): UnrenderedAlert[];
32
+ /**
33
+ * Formats unrendered alerts as one line each.
34
+ *
35
+ * @param unrenderedAlerts - The unrendered alerts.
36
+ * @returns The formatted report.
37
+ */
38
+ export declare function formatUnrenderedAlerts(unrenderedAlerts: readonly UnrenderedAlert[]): string;
@@ -0,0 +1,26 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ const UNRENDERED_ALERT_REG_EXP = /<blockquote[^>]*>\s*<p[^>]*>\s*\[!(?:caution|important|note|tip|warning)\]/giu;
7
+ function collectUnrenderedAlerts(pages) {
8
+ const unrenderedAlerts = [];
9
+ for (const page of pages) {
10
+ for (const match of page.html.matchAll(UNRENDERED_ALERT_REG_EXP)) {
11
+ unrenderedAlerts.push({
12
+ marker: match[0].slice(match[0].indexOf("[!")),
13
+ relativePath: page.relativePath
14
+ });
15
+ }
16
+ }
17
+ return unrenderedAlerts;
18
+ }
19
+ function formatUnrenderedAlerts(unrenderedAlerts) {
20
+ return unrenderedAlerts.map((alert) => ` ${alert.relativePath}: ${alert.marker}`).join("\n");
21
+ }
22
+ export {
23
+ collectUnrenderedAlerts,
24
+ formatUnrenderedAlerts
25
+ };
26
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS91bnJlbmRlcmVkLWFsZXJ0cy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEZpbmRzIEdpdEh1YiBhbGVydHMgdGhhdCByZWFjaGVkIHRoZSBidWlsdCBkb2N1bWVudGF0aW9uIHNpdGUgYXMgcGxhaW4gYmxvY2txdW90ZXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEb2N1bWVudGF0aW9uUGFnZSB9IGZyb20gJy4vbGluay1jaGVjay50cyc7XG5cbi8qKlxuICogQSBHaXRIdWIgYWxlcnQgdGhhdCByZW5kZXJlZCBhcyBhIHBsYWluIGJsb2NrcXVvdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5yZW5kZXJlZEFsZXJ0IHtcbiAgLyoqXG4gICAqIFRoZSBhbGVydCBtYXJrZXIgYXMgaXQgYXBwZWFycyBvbiB0aGUgcGFnZSwgZS5nLiBgWyFXQVJOSU5HXWAuXG4gICAqL1xuICBtYXJrZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhZ2UncyBwYXRoIHJlbGF0aXZlIHRvIHRoZSBvdXRwdXQgcm9vdC5cbiAgICovXG4gIHJlbGF0aXZlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1hdGNoZXMgYSBibG9ja3F1b3RlIHdob3NlIGZpcnN0IHBhcmFncmFwaCBvcGVucyB3aXRoIGEgR2l0SHViIGFsZXJ0IG1hcmtlciAtIHRoZSBleGFjdCBzaGFwZSBhbiBhbGVydFxuICogdGFrZXMgd2hlbiBub3RoaW5nIGNvbnZlcnRlZCBpdC4gQSBtYXJrZXIgcXVvdGVkIGluIHByb3NlIG9yIGluc2lkZSBgPGNvZGU+YCBkb2VzIG5vdCBtYXRjaCwgYmVjYXVzZSBpdFxuICogZG9lcyBub3Qgb3BlbiBhIGJsb2NrcXVvdGUncyBmaXJzdCBwYXJhZ3JhcGguXG4gKi9cbmNvbnN0IFVOUkVOREVSRURfQUxFUlRfUkVHX0VYUCA9IC88YmxvY2txdW90ZVtePl0qPlxccyo8cFtePl0qPlxccypcXFshKD86Y2F1dGlvbnxpbXBvcnRhbnR8bm90ZXx0aXB8d2FybmluZylcXF0vZ2l1O1xuXG4vKipcbiAqIENvbGxlY3RzIGV2ZXJ5IEdpdEh1YiBhbGVydCB0aGF0IHJlbmRlcmVkIGFzIGEgcGxhaW4gYmxvY2txdW90ZSByYXRoZXIgdGhhbiBhcyBhIFN0YXJsaWdodCBhc2lkZS5cbiAqXG4gKiBUaGUgY29udmVyc2lvbiBpcyBhIG1hcmtkb3duLXByb2Nlc3NvciBwbHVnaW4sIGFuZCB3aGVuIGEgcHJvY2Vzc29yIHN3aXRjaCBsZWF2ZXMgaXQgdW5yZWdpc3RlcmVkIG5vdGhpbmdcbiAqIGZhaWxzOiB0aGUgc2l0ZSBidWlsZHMgYW5kIGV2ZXJ5IGFsZXJ0IHNob3dzIGl0cyBsaXRlcmFsIGBbIVRZUEVdYCBtYXJrZXIuIFNjYW5uaW5nIHRoZSBvdXRwdXQgaXMgdGhlXG4gKiBjaGVjayB0aGF0IGhvbGRzIHdoaWNoZXZlciBwbHVnaW4gcGVyZm9ybXMgdGhlIGNvbnZlcnNpb24uXG4gKlxuICogQHBhcmFtIHBhZ2VzIC0gVGhlIGJ1aWx0IHBhZ2VzLlxuICogQHJldHVybnMgVGhlIHVucmVuZGVyZWQgYWxlcnRzLCBpbiBwYWdlIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFVucmVuZGVyZWRBbGVydHMocGFnZXM6IHJlYWRvbmx5IERvY3VtZW50YXRpb25QYWdlW10pOiBVbnJlbmRlcmVkQWxlcnRbXSB7XG4gIGNvbnN0IHVucmVuZGVyZWRBbGVydHM6IFVucmVuZGVyZWRBbGVydFtdID0gW107XG4gIGZvciAoY29uc3QgcGFnZSBvZiBwYWdlcykge1xuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcGFnZS5odG1sLm1hdGNoQWxsKFVOUkVOREVSRURfQUxFUlRfUkVHX0VYUCkpIHtcbiAgICAgIHVucmVuZGVyZWRBbGVydHMucHVzaCh7XG4gICAgICAgIG1hcmtlcjogbWF0Y2hbMF0uc2xpY2UobWF0Y2hbMF0uaW5kZXhPZignWyEnKSksXG4gICAgICAgIHJlbGF0aXZlUGF0aDogcGFnZS5yZWxhdGl2ZVBhdGhcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bnJlbmRlcmVkQWxlcnRzO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdW5yZW5kZXJlZCBhbGVydHMgYXMgb25lIGxpbmUgZWFjaC5cbiAqXG4gKiBAcGFyYW0gdW5yZW5kZXJlZEFsZXJ0cyAtIFRoZSB1bnJlbmRlcmVkIGFsZXJ0cy5cbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgcmVwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VW5yZW5kZXJlZEFsZXJ0cyh1bnJlbmRlcmVkQWxlcnRzOiByZWFkb25seSBVbnJlbmRlcmVkQWxlcnRbXSk6IHN0cmluZyB7XG4gIHJldHVybiB1bnJlbmRlcmVkQWxlcnRzLm1hcCgoYWxlcnQpID0+IGAgICR7YWxlcnQucmVsYXRpdmVQYXRofTogJHthbGVydC5tYXJrZXJ9YCkuam9pbignXFxuJyk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQTRCQSxNQUFNLDJCQUEyQjtBQVkxQixTQUFTLHdCQUF3QixPQUF3RDtBQUM5RixRQUFNLG1CQUFzQyxDQUFDO0FBQzdDLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLGVBQVcsU0FBUyxLQUFLLEtBQUssU0FBUyx3QkFBd0IsR0FBRztBQUNoRSx1QkFBaUIsS0FBSztBQUFBLFFBQ3BCLFFBQVEsTUFBTSxDQUFDLEVBQUUsTUFBTSxNQUFNLENBQUMsRUFBRSxRQUFRLElBQUksQ0FBQztBQUFBLFFBQzdDLGNBQWMsS0FBSztBQUFBLE1BQ3JCLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVFPLFNBQVMsdUJBQXVCLGtCQUFzRDtBQUMzRixTQUFPLGlCQUFpQixJQUFJLENBQUMsVUFBVSxLQUFLLE1BQU0sWUFBWSxLQUFLLE1BQU0sTUFBTSxFQUFFLEVBQUUsS0FBSyxJQUFJO0FBQzlGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -11,6 +11,7 @@ export * as 'code-generator' from './code-generator.mjs';
11
11
  export * as 'commitlint-config' from './commitlint-config.mjs';
12
12
  export * as 'commitlint-forbidden-patterns' from './commitlint-forbidden-patterns.mjs';
13
13
  export * as 'commitlint-spellcheck-header' from './commitlint-spellcheck-header.mjs';
14
+ export * as 'docs-site' from './docs-site/index.mjs';
14
15
  export * as 'env-toggle' from './env-toggle.mjs';
15
16
  export * as 'exec' from './exec.mjs';
16
17
  export * as 'forbidden-patterns' from './forbidden-patterns.mjs';
@@ -11,6 +11,7 @@ import * as code_generator from "./code-generator.mjs";
11
11
  import * as commitlint_config from "./commitlint-config.mjs";
12
12
  import * as commitlint_forbidden_patterns from "./commitlint-forbidden-patterns.mjs";
13
13
  import * as commitlint_spellcheck_header from "./commitlint-spellcheck-header.mjs";
14
+ import * as docs_site from "./docs-site/index.mjs";
14
15
  import * as env_toggle from "./env-toggle.mjs";
15
16
  import * as exec from "./exec.mjs";
16
17
  import * as forbidden_patterns from "./forbidden-patterns.mjs";
@@ -42,6 +43,7 @@ export {
42
43
  commitlint_config as "commitlint-config",
43
44
  commitlint_forbidden_patterns as "commitlint-forbidden-patterns",
44
45
  commitlint_spellcheck_header as "commitlint-spellcheck-header",
46
+ docs_site as "docs-site",
45
47
  env_toggle as "env-toggle",
46
48
  exec,
47
49
  forbidden_patterns as "forbidden-patterns",
@@ -65,4 +67,4 @@ export {
65
67
  validate_declarations as "validate-declarations",
66
68
  version
67
69
  };
68
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2J1aWxkJyBmcm9tICcuL2J1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdidW5kbGVycycgZnJvbSAnLi9idW5kbGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnY2hlY2stcHJvamVjdC10eXBlcycgZnJvbSAnLi9jaGVjay1wcm9qZWN0LXR5cGVzLnRzJztcbmV4cG9ydCAqIGFzICdjbGktdXRpbHMnIGZyb20gJy4vY2xpLXV0aWxzLnRzJztcbmV4cG9ydCAqIGFzICdjb2RlLWdlbmVyYXRvcicgZnJvbSAnLi9jb2RlLWdlbmVyYXRvci50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1jb25maWcnIGZyb20gJy4vY29tbWl0bGludC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zJyBmcm9tICcuL2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zLnRzJztcbmV4cG9ydCAqIGFzICdjb21taXRsaW50LXNwZWxsY2hlY2staGVhZGVyJyBmcm9tICcuL2NvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXIudHMnO1xuZXhwb3J0ICogYXMgJ2Vudi10b2dnbGUnIGZyb20gJy4vZW52LXRvZ2dsZS50cyc7XG5leHBvcnQgKiBhcyAnZXhlYycgZnJvbSAnLi9leGVjLnRzJztcbmV4cG9ydCAqIGFzICdmb3JiaWRkZW4tcGF0dGVybnMnIGZyb20gJy4vZm9yYmlkZGVuLXBhdHRlcm5zLnRzJztcbmV4cG9ydCAqIGFzICdmb3JtYXR0ZXJzJyBmcm9tICcuL2Zvcm1hdHRlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2ZzJyBmcm9tICcuL2ZzLnRzJztcbmV4cG9ydCAqIGFzICdnYXRlJyBmcm9tICcuL2dhdGUudHMnO1xuZXhwb3J0ICogYXMgJ2dpdCcgZnJvbSAnLi9naXQudHMnO1xuZXhwb3J0ICogYXMgJ2pzb24nIGZyb20gJy4vanNvbi50cyc7XG5leHBvcnQgKiBhcyAnbGlicmFyeS1idWlsZCcgZnJvbSAnLi9saWJyYXJ5LWJ1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdsaW50ZXJzJyBmcm9tICcuL2xpbnRlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ25hbm8tc3RhZ2VkLWNvbmZpZycgZnJvbSAnLi9uYW5vLXN0YWdlZC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1wdWJsaXNoJyBmcm9tICcuL25wbS1wdWJsaXNoLnRzJztcbmV4cG9ydCAqIGFzICducG0tcnVuJyBmcm9tICcuL25wbS1ydW4udHMnO1xuZXhwb3J0ICogYXMgJ25wbScgZnJvbSAnLi9ucG0udHMnO1xuZXhwb3J0ICogYXMgJ3BhY2thZ2UtbG9jay1pbnRlZ3JpdHknIGZyb20gJy4vcGFja2FnZS1sb2NrLWludGVncml0eS50cyc7XG5leHBvcnQgKiBhcyAncGFja2FnZS1tYW5hZ2VyJyBmcm9tICcuL3BhY2thZ2UtbWFuYWdlci50cyc7XG5leHBvcnQgKiBhcyAncmVsZWFzZWQtaXNzdWVzJyBmcm9tICcuL3JlbGVhc2VkLWlzc3Vlcy50cyc7XG5leHBvcnQgKiBhcyAncmVwby1wYXRocycgZnJvbSAnLi9yZXBvLXBhdGhzLnRzJztcbmV4cG9ydCAqIGFzICdyb290JyBmcm9tICcuL3Jvb3QudHMnO1xuZXhwb3J0ICogYXMgJ3Rlc3QtcnVubmVycycgZnJvbSAnLi90ZXN0LXJ1bm5lcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlY2xhcmF0aW9ucycgZnJvbSAnLi92YWxpZGF0ZS1kZWNsYXJhdGlvbnMudHMnO1xuZXhwb3J0ICogYXMgJ3ZlcnNpb24nIGZyb20gJy4vdmVyc2lvbi50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVksV0FBYTtBQUN6QixZQUFZLGNBQWdCO0FBQzVCLFlBQVlBLHlCQUEyQjtBQUN2QyxZQUFZQyxlQUFpQjtBQUM3QixZQUFZQyxvQkFBc0I7QUFDbEMsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLG1DQUFxQztBQUNqRCxZQUFZQyxrQ0FBb0M7QUFDaEQsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVksVUFBWTtBQUN4QixZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWSxnQkFBa0I7QUFDOUIsWUFBWSxRQUFVO0FBQ3RCLFlBQVksVUFBWTtBQUN4QixZQUFZLFNBQVc7QUFDdkIsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLG1CQUFxQjtBQUNqQyxZQUFZLGFBQWU7QUFDM0IsWUFBWUMsd0JBQTBCO0FBQ3RDLFlBQVlDLGlCQUFtQjtBQUMvQixZQUFZQyxhQUFlO0FBQzNCLFlBQVksU0FBVztBQUN2QixZQUFZQyw0QkFBOEI7QUFDMUMsWUFBWUMscUJBQXVCO0FBQ25DLFlBQVlDLHFCQUF1QjtBQUNuQyxZQUFZQyxnQkFBa0I7QUFDOUIsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZQywyQkFBNkI7QUFDekMsWUFBWSxhQUFlOyIsCiAgIm5hbWVzIjogWyJjaGVjay1wcm9qZWN0LXR5cGVzIiwgImNsaS11dGlscyIsICJjb2RlLWdlbmVyYXRvciIsICJjb21taXRsaW50LWNvbmZpZyIsICJjb21taXRsaW50LWZvcmJpZGRlbi1wYXR0ZXJucyIsICJjb21taXRsaW50LXNwZWxsY2hlY2staGVhZGVyIiwgImVudi10b2dnbGUiLCAiZm9yYmlkZGVuLXBhdHRlcm5zIiwgImxpYnJhcnktYnVpbGQiLCAibmFuby1zdGFnZWQtY29uZmlnIiwgIm5wbS1wdWJsaXNoIiwgIm5wbS1ydW4iLCAicGFja2FnZS1sb2NrLWludGVncml0eSIsICJwYWNrYWdlLW1hbmFnZXIiLCAicmVsZWFzZWQtaXNzdWVzIiwgInJlcG8tcGF0aHMiLCAidGVzdC1ydW5uZXJzIiwgInZhbGlkYXRlLWRlY2xhcmF0aW9ucyJdCn0K
70
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2J1aWxkJyBmcm9tICcuL2J1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdidW5kbGVycycgZnJvbSAnLi9idW5kbGVycy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnY2hlY2stcHJvamVjdC10eXBlcycgZnJvbSAnLi9jaGVjay1wcm9qZWN0LXR5cGVzLnRzJztcbmV4cG9ydCAqIGFzICdjbGktdXRpbHMnIGZyb20gJy4vY2xpLXV0aWxzLnRzJztcbmV4cG9ydCAqIGFzICdjb2RlLWdlbmVyYXRvcicgZnJvbSAnLi9jb2RlLWdlbmVyYXRvci50cyc7XG5leHBvcnQgKiBhcyAnY29tbWl0bGludC1jb25maWcnIGZyb20gJy4vY29tbWl0bGludC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zJyBmcm9tICcuL2NvbW1pdGxpbnQtZm9yYmlkZGVuLXBhdHRlcm5zLnRzJztcbmV4cG9ydCAqIGFzICdjb21taXRsaW50LXNwZWxsY2hlY2staGVhZGVyJyBmcm9tICcuL2NvbW1pdGxpbnQtc3BlbGxjaGVjay1oZWFkZXIudHMnO1xuZXhwb3J0ICogYXMgJ2RvY3Mtc2l0ZScgZnJvbSAnLi9kb2NzLXNpdGUvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2Vudi10b2dnbGUnIGZyb20gJy4vZW52LXRvZ2dsZS50cyc7XG5leHBvcnQgKiBhcyAnZXhlYycgZnJvbSAnLi9leGVjLnRzJztcbmV4cG9ydCAqIGFzICdmb3JiaWRkZW4tcGF0dGVybnMnIGZyb20gJy4vZm9yYmlkZGVuLXBhdHRlcm5zLnRzJztcbmV4cG9ydCAqIGFzICdmb3JtYXR0ZXJzJyBmcm9tICcuL2Zvcm1hdHRlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2ZzJyBmcm9tICcuL2ZzLnRzJztcbmV4cG9ydCAqIGFzICdnYXRlJyBmcm9tICcuL2dhdGUudHMnO1xuZXhwb3J0ICogYXMgJ2dpdCcgZnJvbSAnLi9naXQudHMnO1xuZXhwb3J0ICogYXMgJ2pzb24nIGZyb20gJy4vanNvbi50cyc7XG5leHBvcnQgKiBhcyAnbGlicmFyeS1idWlsZCcgZnJvbSAnLi9saWJyYXJ5LWJ1aWxkLnRzJztcbmV4cG9ydCAqIGFzICdsaW50ZXJzJyBmcm9tICcuL2xpbnRlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ25hbm8tc3RhZ2VkLWNvbmZpZycgZnJvbSAnLi9uYW5vLXN0YWdlZC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ25wbS1wdWJsaXNoJyBmcm9tICcuL25wbS1wdWJsaXNoLnRzJztcbmV4cG9ydCAqIGFzICducG0tcnVuJyBmcm9tICcuL25wbS1ydW4udHMnO1xuZXhwb3J0ICogYXMgJ25wbScgZnJvbSAnLi9ucG0udHMnO1xuZXhwb3J0ICogYXMgJ3BhY2thZ2UtbG9jay1pbnRlZ3JpdHknIGZyb20gJy4vcGFja2FnZS1sb2NrLWludGVncml0eS50cyc7XG5leHBvcnQgKiBhcyAncGFja2FnZS1tYW5hZ2VyJyBmcm9tICcuL3BhY2thZ2UtbWFuYWdlci50cyc7XG5leHBvcnQgKiBhcyAncmVsZWFzZWQtaXNzdWVzJyBmcm9tICcuL3JlbGVhc2VkLWlzc3Vlcy50cyc7XG5leHBvcnQgKiBhcyAncmVwby1wYXRocycgZnJvbSAnLi9yZXBvLXBhdGhzLnRzJztcbmV4cG9ydCAqIGFzICdyb290JyBmcm9tICcuL3Jvb3QudHMnO1xuZXhwb3J0ICogYXMgJ3Rlc3QtcnVubmVycycgZnJvbSAnLi90ZXN0LXJ1bm5lcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRlLWRlY2xhcmF0aW9ucycgZnJvbSAnLi92YWxpZGF0ZS1kZWNsYXJhdGlvbnMudHMnO1xuZXhwb3J0ICogYXMgJ3ZlcnNpb24nIGZyb20gJy4vdmVyc2lvbi50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQUVBLFlBQVksV0FBYTtBQUN6QixZQUFZLGNBQWdCO0FBQzVCLFlBQVlBLHlCQUEyQjtBQUN2QyxZQUFZQyxlQUFpQjtBQUM3QixZQUFZQyxvQkFBc0I7QUFDbEMsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLG1DQUFxQztBQUNqRCxZQUFZQyxrQ0FBb0M7QUFDaEQsWUFBWUMsZUFBaUI7QUFDN0IsWUFBWUMsZ0JBQWtCO0FBQzlCLFlBQVksVUFBWTtBQUN4QixZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWSxnQkFBa0I7QUFDOUIsWUFBWSxRQUFVO0FBQ3RCLFlBQVksVUFBWTtBQUN4QixZQUFZLFNBQVc7QUFDdkIsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLG1CQUFxQjtBQUNqQyxZQUFZLGFBQWU7QUFDM0IsWUFBWUMsd0JBQTBCO0FBQ3RDLFlBQVlDLGlCQUFtQjtBQUMvQixZQUFZQyxhQUFlO0FBQzNCLFlBQVksU0FBVztBQUN2QixZQUFZQyw0QkFBOEI7QUFDMUMsWUFBWUMscUJBQXVCO0FBQ25DLFlBQVlDLHFCQUF1QjtBQUNuQyxZQUFZQyxnQkFBa0I7QUFDOUIsWUFBWSxVQUFZO0FBQ3hCLFlBQVlDLGtCQUFvQjtBQUNoQyxZQUFZQywyQkFBNkI7QUFDekMsWUFBWSxhQUFlOyIsCiAgIm5hbWVzIjogWyJjaGVjay1wcm9qZWN0LXR5cGVzIiwgImNsaS11dGlscyIsICJjb2RlLWdlbmVyYXRvciIsICJjb21taXRsaW50LWNvbmZpZyIsICJjb21taXRsaW50LWZvcmJpZGRlbi1wYXR0ZXJucyIsICJjb21taXRsaW50LXNwZWxsY2hlY2staGVhZGVyIiwgImRvY3Mtc2l0ZSIsICJlbnYtdG9nZ2xlIiwgImZvcmJpZGRlbi1wYXR0ZXJucyIsICJsaWJyYXJ5LWJ1aWxkIiwgIm5hbm8tc3RhZ2VkLWNvbmZpZyIsICJucG0tcHVibGlzaCIsICJucG0tcnVuIiwgInBhY2thZ2UtbG9jay1pbnRlZ3JpdHkiLCAicGFja2FnZS1tYW5hZ2VyIiwgInJlbGVhc2VkLWlzc3VlcyIsICJyZXBvLXBhdGhzIiwgInRlc3QtcnVubmVycyIsICJ2YWxpZGF0ZS1kZWNsYXJhdGlvbnMiXQp9Cg==
@@ -19,8 +19,8 @@ export declare const LIBRARY_BANNER = "/*\nTHIS IS A GENERATED/BUNDLED FILE BY E
19
19
  */
20
20
  export declare const LIBRARY_BUILD_STEPS: readonly string[];
21
21
  /**
22
- * The export condition the `obsidian-dev-utils` workspace maps every subpath onto its TypeScript source with, so a
23
- * package there can import a sibling package's source before anything is built. Pass it to
22
+ * The export condition a repository holding several packages maps every subpath onto its TypeScript source with, so
23
+ * a package there can import a sibling package's source before anything is built. Pass it to
24
24
  * {@link generateLibraryExports} through {@link GenerateLibraryExportsOptions.sourceCondition}.
25
25
  */
26
26
  export declare const SOURCE_CONDITION = "@mnaoumov/source";
@@ -520,4 +520,4 @@ export {
520
520
  generateLibraryIndex,
521
521
  runBuildSteps
522
522
  };
523
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWJyYXJ5LWJ1aWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgYnVpbGQgcGlwZWxpbmUgb2YgYSBUeXBlU2NyaXB0IExJQlJBUlkgcGFja2FnZTogb25lIGBkaXN0L2xpYi97Y2pzLGVzbX1gIHRyZWUgb2YgdW5idW5kbGVkIG1vZHVsZXMgYmVzaWRlIGl0c1xuICogYC5kLmN0c2AgLyBgLmQubXRzYCBkZWNsYXJhdGlvbnMsIHRoZSBnZW5lcmF0ZWQgYGluZGV4LnRzYCBiYXJyZWxzLCBhbmQgdGhlIGdlbmVyYXRlZCBgcGFja2FnZS5qc29uYCBgZXhwb3J0c2AgbWFwLlxuICpcbiAqIEVhY2ggc3RlcCB3b3JrcyBvbiB0aGUgY3VycmVudCB3b3JraW5nIGZvbGRlciwgd2hpY2ggaXMgdGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQuIEEgcmVwb3NpdG9yeSdzXG4gKiBgc2NyaXB0cy9idWlsZC0qLnRzYCBlbnRyeSBwb2ludHMgYXJlIHRoaW4gYHdyYXBDbGlUYXNrYCB3cmFwcGVycyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaXRzIGBidWlsZGAgc2NyaXB0XG4gKiBydW5zIHRoZW0gaW4gb3JkZXIgdGhyb3VnaCB7QGxpbmsgcnVuQnVpbGRTdGVwc30uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBCdWlsZE9wdGlvbnMsXG4gIFBsdWdpblxufSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB0eXBlIHsgRGlyZW50IH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFN5bWJvbCBhcyBUc1N5bWJvbCxcbiAgVHlwZUNoZWNrZXJcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IGFzeW5jTWFwIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGlzRGVlcEVxdWFsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgbm9ybWFsaXplSWZSZWxhdGl2ZSxcbiAgcmVsYXRpdmVcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgcmVsYXRpdmUgYXMgcmVsYXRpdmVOYXRpdmUsXG4gIHJlc29sdmUgYXMgcmVzb2x2ZU5hdGl2ZVxufSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2dyYW0sXG4gIGZvckVhY2hDaGlsZCxcbiAgaXNJZGVudGlmaWVyLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIFN5bWJvbEZsYWdzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgdHlwZSB7IFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuXG5pbXBvcnQgeyBidWlsZENsZWFuIH0gZnJvbSAnLi9idWlsZC50cyc7XG5pbXBvcnQgeyBjaGFuZ2VFeHRlbnNpb25QbHVnaW4gfSBmcm9tICcuL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9jaGFuZ2UtZXh0ZW5zaW9uLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBmaXhFc21QbHVnaW4gfSBmcm9tICcuL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9maXgtZXNtLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBwcmVwcm9jZXNzUGx1Z2luIH0gZnJvbSAnLi9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMnO1xuaW1wb3J0IHsgcGFyc2VUc0NvbmZpZyB9IGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4vY29kZS1nZW5lcmF0b3IudHMnO1xuaW1wb3J0IHsgcmVhZGRpclBvc2l4IH0gZnJvbSAnLi9mcy50cyc7XG5pbXBvcnQgeyB3cml0ZUpzb24gfSBmcm9tICcuL2pzb24udHMnO1xuaW1wb3J0IHsgbnBtUnVuT3B0aW9uYWwgfSBmcm9tICcuL25wbS1ydW4udHMnO1xuaW1wb3J0IHsgZWRpdFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGV4ZWNGcm9tUm9vdCB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogVGhlIGJhbm5lciBldmVyeSBlbWl0dGVkIGxpYnJhcnkgbW9kdWxlIG9wZW5zIHdpdGguXG4gKi9cbmV4cG9ydCBjb25zdCBMSUJSQVJZX0JBTk5FUiA9IGAvKlxuVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgRVNCVUlMRFxuaWYgeW91IHdhbnQgdG8gdmlldyB0aGUgc291cmNlLCBwbGVhc2UgdmlzaXQgdGhlIGdpdGh1YiByZXBvc2l0b3J5IG9mIHRoaXMgcGx1Z2luXG4qL1xuYDtcblxuLyoqXG4gKiBUaGUgc3RlcHMgb2YgYSBsaWJyYXJ5IGJ1aWxkLCBpbiB0aGUgb3JkZXIge0BsaW5rIHJ1bkJ1aWxkU3RlcHN9IHJ1bnMgdGhlbS5cbiAqL1xuZXhwb3J0IGNvbnN0IExJQlJBUllfQlVJTERfU1RFUFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnYnVpbGQ6Y2xlYW4nLFxuICAnYnVpbGQ6Z2VuZXJhdGUtaW5kZXgnLFxuICAnYnVpbGQ6Y29tcGlsZScsXG4gICdidWlsZDp0eXBlcycsXG4gICdidWlsZDp2YWxpZGF0ZS1kZWNsYXJhdGlvbnMnLFxuICAnYnVpbGQ6bGliJyxcbiAgJ2J1aWxkOmdlbmVyYXRlLWV4cG9ydHMnXG5dO1xuXG4vKipcbiAqIFRoZSBleHBvcnQgY29uZGl0aW9uIHRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCB3b3Jrc3BhY2UgbWFwcyBldmVyeSBzdWJwYXRoIG9udG8gaXRzIFR5cGVTY3JpcHQgc291cmNlIHdpdGgsIHNvIGFcbiAqIHBhY2thZ2UgdGhlcmUgY2FuIGltcG9ydCBhIHNpYmxpbmcgcGFja2FnZSdzIHNvdXJjZSBiZWZvcmUgYW55dGhpbmcgaXMgYnVpbHQuIFBhc3MgaXQgdG9cbiAqIHtAbGluayBnZW5lcmF0ZUxpYnJhcnlFeHBvcnRzfSB0aHJvdWdoIHtAbGluayBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucy5zb3VyY2VDb25kaXRpb259LlxuICovXG5leHBvcnQgY29uc3QgU09VUkNFX0NPTkRJVElPTiA9ICdAbW5hb3Vtb3Yvc291cmNlJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgYnVpbGRMaWJyYXJ5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZExpYnJhcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHByZXByb2Nlc3MgcGx1Z2luIGZvciBvbmUgb3V0cHV0IGZvcm1hdC4gRGVmYXVsdHMgdG8gdGhlIGdlbmVyaWMgb25lLCB3aGljaCBjYXJyaWVzIG5vXG4gICAqIGVudmlyb25tZW50LXNwZWNpZmljIGByZXF1aXJlYCBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5PzogKGlzRXNtOiBib29sZWFuKSA9PiBQbHVnaW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdlbmVyYXRlTGlicmFyeUV4cG9ydHN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlTGlicmFyeUV4cG9ydHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIGV4cG9ydCBjb25kaXRpb24gdG8gcHV0IGZpcnN0IGluIGV2ZXJ5IGVudHJ5LCBtYXBwaW5nIHRoZSBzdWJwYXRoIG9udG8gaXRzIFR5cGVTY3JpcHQgc291cmNlLiBPbmx5IGFcbiAgICogcmVwb3NpdG9yeSBob2xkaW5nIHNldmVyYWwgcGFja2FnZXMgdGhhdCBpbXBvcnQgZWFjaCBvdGhlciBuZWVkcyBvbmU7IG5vdGhpbmcgb3V0c2lkZSBpdCBzZXRzIHRoZSBjb25kaXRpb24sIGFuZFxuICAgKiB0aGUgc291cmNlcyBpdCBwb2ludHMgYXQgZG8gbm90IHNoaXAsIHNvIHRoZSBwdWJsaXNoIGhhcyB0byBzdHJpcCBpdCBhZ2Fpbi4gT21pdHRlZCwgdGhlIG1hcCBoYXMgbm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUNvbmRpdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxudHlwZSBNb2R1bGVGb3JtYXQgPSAnY2pzJyB8ICdlc20nO1xuXG5jb25zdCBERUNMQVJBVElPTl9SRUZFUkVOQ0VfVFlQRVMgPSBuZXcgU2V0KFsnbm9kZSddKTtcblxuLy8gVGhlIGxpYnMgdGhhdCBkZXNjcmliZSBhIGhvc3QncyBnbG9iYWxzIHJhdGhlciB0aGFuIHRoZSBsYW5ndWFnZSwgd2hpY2ggY29uc3VtZXJzIGNvbmZsaWN0IG92ZXIuIEVhY2ggZGVjbGFyYXRpb25cbi8vIGdldHMgdGhlIG9uZXMgaXQgdXNlczsgZXZlcnkgb3RoZXIgbGliIGlzIHNoYXJlZCB0aHJvdWdoIGBsaWJyYXJ5LXJlZmVyZW5jZXNgLlxuY29uc3QgRU5WSVJPTk1FTlRfTElCX1BSRUZJWEVTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnZG9tJywgJ3NjcmlwdGhvc3QnLCAnd2Vid29ya2VyJ107XG5jb25zdCBOT0RFX1RZUEVTX1BBVEhfU0VHTUVOVCA9ICcvbm9kZV9tb2R1bGVzL0B0eXBlcy9ub2RlLyc7XG5jb25zdCBMSUJfUkVQTEFDRU1FTlRfUkVHX0VYUCA9IC9cXC9ub2RlX21vZHVsZXNcXC9AdHlwZXNjcmlwdFxcL2xpYi0oPzxMaWI+W14vXSspXFwvKD88U3ViTGliPi4rKVxcLmRcXC50cyQvO1xuXG4vLyBUaGUgZGVjbGFyYXRpb24gdGhhdCBjYXJyaWVzIG9ubHkgdGhlIGBsaWJgIGFuZCBgdHlwZXNgIHJlZmVyZW5jZXMuIEV2ZXJ5IGRlY2xhcmF0aW9uIGJ1dCB0aGUgcm9vdCBvbmUgcmVmZXJlbmNlc1xuLy8gaXQsIHJhdGhlciB0aGFuIHRoZSByb290IGJhcnJlbCwgd2hpY2ggd291bGQgbG9hZCBldmVyeSBtb2R1bGUgb2YgdGhlIHBhY2thZ2UsIG9wdGlvbmFsIHBlZXJzJyB0eXBlcyBpbmNsdWRlZC5cbmNvbnN0IExJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUUgPSAnbGlicmFyeS1yZWZlcmVuY2VzJztcbi8vIFNwZWxsZWQgYXBhcnQgb24gcHVycG9zZToge0BsaW5rIGNvbGxlY3RBbGxMaWJzfSBzY2FucyBldmVyeSBzb3VyY2UgZmlsZSBvZiB0aGUgcGFja2FnZSBiZWluZyBidWlsdCBmb3IgdGhlXG4vLyBkaXJlY3RpdmUsIHRoaXMgb25lIGluY2x1ZGVkLCBzbyBhIGxpdGVyYWwgb25lIGhlcmUgd291bGQgYmUgcmVhZCBhcyBhIGxpYiB0aGlzIHBhY2thZ2UgbmVlZHMuXG5jb25zdCBSRUZFUkVOQ0VfTElCX0RJUkVDVElWRSA9IFsnPHJlZmVyZW5jZScsICdsaWI9J10uam9pbignICcpO1xuY29uc3QgUkVGRVJFTkNFX0xJQl9SRUdfRVhQID0gL1xcL1xcL1xcLyA8cmVmZXJlbmNlIGxpYj1cIig/PExpYj5bXlwiXSspXCIgXFwvPi9nbTtcblxuLy8gQSBiYXJlLXNwZWNpZmllciAobm9uLXJlbGF0aXZlKSB0eXBlLW9ubHkgaW1wb3J0LCBlLmcuIGBpbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO2AuXG5jb25zdCBCQVJFX1RZUEVfSU1QT1JUX1JFR19FWFAgPSAvXmltcG9ydCB0eXBlICg/PENsYXVzZT4uKz8pIGZyb20gJyg/PFNwZWNpZmllcj5bXi4nXVteJ10qKSc7JC9nbTtcblxuLy8gQSBiYXJlLXNwZWNpZmllciAobm9uLXJlbGF0aXZlKSBpbmxpbmUgaW1wb3J0IHR5cGUgbm9kZSwgZS5nLiBgaW1wb3J0KFwidHlwZS1mZXN0XCIpLlByb21pc2FibGVgLlxuY29uc3QgQkFSRV9JTkxJTkVfSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9pbXBvcnRcXChcIig/PFNwZWNpZmllcj5bXi5cIl1bXlwiXSopXCJcXCkvZztcblxuY29uc3QgU1RBVElDX0lNUE9SVF9SRUdfRVhQID0gL2Zyb20gJyg/PEltcG9ydFBhdGg+Lis/KVxcLnRzJzsvZ207XG5cbi8vIElubGluZSBpbXBvcnQtdHlwZSBub2RlcyAoYHR5cGVvZiBpbXBvcnQoJy4vZm9vLnRzJylgKSBwcmVzZXJ2ZSB0aGUgc291cmNlIHF1b3RlIHN0eWxlLlxuLy8gSGFuZC1hdXRob3JlZCBgLmQudHNgIGZpbGVzIGVtaXQgc2luZ2xlIHF1b3RlczsgdHNjLWdlbmVyYXRlZCBkZWNsYXJhdGlvbnMgZW1pdCBkb3VibGUgcXVvdGVzLlxuLy8gQ2FwdHVyZSB0aGUgcXVvdGUgYW5kIHJldXNlIGl0IGluIHRoZSByZXBsYWNlbWVudCBzbyBib3RoIHN0eWxlcyBhcmUgcmV3cml0dGVuLlxuY29uc3QgRFlOQU1JQ19JTVBPUlRfUkVHX0VYUCA9IC9pbXBvcnRcXCgoPzxRdW90ZT5bJ1wiXSkoPzxJbXBvcnRQYXRoPi4rPylcXC50c1xcazxRdW90ZT5cXCkvZ207XG5cbmVudW0gR2VuZXJhdGVJbmRleFJlc3VsdCB7XG4gIFNraXBwZWQgPSAnc2tpcHBlZCcsXG4gIFN1Y2Nlc3MgPSAnc3VjY2Vzcydcbn1cblxuaW50ZXJmYWNlIEFkZEVudmlyb25tZW50R2xvYmFsc1BhcmFtcyB7XG4gIHJlYWRvbmx5IGxpYnM6IFNldDxzdHJpbmc+O1xuICByZWFkb25seSBwcm9ncmFtOiBQcm9ncmFtO1xuICByZWFkb25seSBzeW1ib2w6IFRzU3ltYm9sO1xuICByZWFkb25seSB0eXBlczogU2V0PHN0cmluZz47XG59XG5cbmludGVyZmFjZSBCdWlsZExpYnJhcnlGb3JtYXRQYXJhbXMge1xuICByZWFkb25seSBmb3JtYXQ6IE1vZHVsZUZvcm1hdDtcbiAgcmVhZG9ubHkgbGliRmlsZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeTogKGlzRXNtOiBib29sZWFuKSA9PiBQbHVnaW47XG59XG5cbmludGVyZmFjZSBCdWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmVQYXJhbXMge1xuICByZWFkb25seSBkZWNsYXJhdGlvbkZpbGVQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4dGVuc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBtb2R1bGVEaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbGxlY3RFbnZpcm9ubWVudERpcmVjdGl2ZXNQYXJhbXMge1xuICByZWFkb25seSBhdmFpbGFibGVUeXBlczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGRlY2xhcmF0aW9uRmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgU2V0RXhwb3J0UGFyYW1zIHtcbiAgcmVhZG9ubHkgZXhwb3J0Q29uZGl0aW9uczogUGFja2FnZUpzb24uRXhwb3J0Q29uZGl0aW9ucztcbiAgcmVhZG9ubHkgaXNXaWxkY2FyZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc291cmNlQ29uZGl0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHNyY0ZvbGRlcjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVG9EaXN0UGF0aFBhcmFtcyB7XG4gIHJlYWRvbmx5IGZvcm1hdDogc3RyaW5nO1xuICByZWFkb25seSBpbXBvcnRQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgYW4gZWFybGllciBidWlsZCBsZWZ0OiBgZGlzdC9gLCB0aGUgZ2VuZXJhdGVkIGBpbmRleC50c2AgYmFycmVscywgdGhlIGAuZC50c2AgZmlsZXMgYHRzY2Agd3JvdGVcbiAqIGJlc2lkZSB0aGUgc291cmNlcyAoaGFuZC1hdXRob3JlZCBvbmVzIHVuZGVyIGBAdHlwZXNgIHN0YXkpLCBhbmQgdGhlIHBlci1zdWJwYXRoIGBwYWNrYWdlLmpzb25gIHN0dWJzLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBldmVyeXRoaW5nIGhhcyBiZWVuIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENsZWFuTGlicmFyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRDbGVhbigpO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KFJlcG9QYXRocy5TcmMsIHsgcmVjdXJzaXZlOiB0cnVlIH0pKSB7XG4gICAgaWYgKGJhc2VuYW1lKGZpbGUpID09PSBSZXBvUGF0aHMuSW5kZXhUcyBhcyBzdHJpbmcpIHtcbiAgICAgIGF3YWl0IHJtKGpvaW4oUmVwb1BhdGhzLlNyYywgZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5EdHNFeHRlbnNpb24pICYmICFmaWxlLnNwbGl0KCcvJykuaW5jbHVkZXMoUmVwb1BhdGhzLlR5cGVzKSkge1xuICAgICAgYXdhaXQgcm0oam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuQ3VycmVudEZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSkpIHtcbiAgICBpZiAoKGJhc2VuYW1lKGZpbGUpICE9PSBSZXBvUGF0aHMuUGFja2FnZUpzb24gYXMgc3RyaW5nKSB8fCAoZmlsZSA9PT0gUmVwb1BhdGhzLlBhY2thZ2VKc29uIGFzIHN0cmluZykgfHwgZmlsZS5zdGFydHNXaXRoKFJlcG9QYXRocy5Ob2RlTW9kdWxlcykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGF3YWl0IHJtKGZpbGUpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGV2ZXJ5IHNvdXJjZSBtb2R1bGUsIHVuYnVuZGxlZCwgaW50byBgZGlzdC9saWIvY2pzYCAoYC5janNgKSBhbmQgYGRpc3QvbGliL2VzbWAgKGAubWpzYCkuXG4gKlxuICogVGhlIG91dHB1dCBmb2xkZXJzIG11c3QgYWxyZWFkeSBleGlzdDsge0BsaW5rIGJ1aWxkTGlicmFyeVR5cGVzfSBjcmVhdGVzIHRoZW0uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgYnVpbGQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBib3RoIGZvcm1hdHMgaGF2ZSBiZWVuIGJ1aWx0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRMaWJyYXJ5KG9wdGlvbnM6IEJ1aWxkTGlicmFyeU9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5ID0gKGlzRXNtOiBib29sZWFuKTogUGx1Z2luID0+IHByZXByb2Nlc3NQbHVnaW4oeyBpc0VzbSB9KSB9ID0gb3B0aW9ucztcbiAgY29uc3QgbGliRmlsZXMgPSBhd2FpdCBnZXRMaWJGaWxlcygpO1xuICBhd2FpdCBidWlsZExpYnJhcnlGb3JtYXQoeyBmb3JtYXQ6ICdjanMnLCBsaWJGaWxlcywgcHJlcHJvY2Vzc1BsdWdpbkZhY3RvcnkgfSk7XG4gIGF3YWl0IGJ1aWxkTGlicmFyeUZvcm1hdCh7IGZvcm1hdDogJ2VzbScsIGxpYkZpbGVzLCBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeSB9KTtcbn1cblxuLyoqXG4gKiBFbWl0cyB0aGUgZGVjbGFyYXRpb25zIHdpdGggYHRzYyAtLXByb2plY3QgLi90c2NvbmZpZy50eXBlcy5qc29uYCwgdGhlbiBjb3BpZXMgZWFjaCBvbmUgaW50byBgZGlzdC9saWJgIHR3aWNlOiBhcyBhXG4gKiBgLmQuY3RzYCB3aG9zZSByZWxhdGl2ZSBpbXBvcnRzIG5hbWUgYC5janNgIGZpbGVzIGFuZCB3aG9zZSBiYXJlIHR5cGUgaW1wb3J0cyBjYXJyeSBgcmVzb2x1dGlvbi1tb2RlOiBpbXBvcnRgLCBhbmRcbiAqIGFzIGEgYC5kLm10c2Agd2hvc2UgcmVsYXRpdmUgaW1wb3J0cyBuYW1lIGAubWpzYCBmaWxlcy5cbiAqXG4gKiBUaGUgbGlicmFyeSdzIHJvb3QgZGVjbGFyYXRpb24gKGBsaWJyYXJ5LnRzYCB3aGVyZSB0aGUgcGFja2FnZSBoYXMgb25lLCBvdGhlcndpc2UgdGhlIGdlbmVyYXRlZCBgaW5kZXgudHNgKSBjYXJyaWVzXG4gKiBldmVyeSBgbGliYCBhbmQgYHR5cGVzYCByZWZlcmVuY2UgdGhlIHBhY2thZ2UgbmVlZHMuIEV2ZXJ5IG90aGVyIGRlY2xhcmF0aW9uIHJlZmVyZW5jZXMgYSBgbGlicmFyeS1yZWZlcmVuY2VzYFxuICogZGVjbGFyYXRpb24gYmVzaWRlIGl0IGJ5IHBhdGgsIG5ldmVyIHRoZSByb290OiB0aGUgcm9vdCBiYXJyZWwgcmUtZXhwb3J0cyBldmVyeSBtb2R1bGUsIHNvIHJlZmVyZW5jaW5nIGl0IG1hZGUgZWFjaFxuICogc3VicGF0aCBsb2FkIHRoZSB3aG9sZSBwYWNrYWdlLCBhbmQgYSBjb25zdW1lciB0eXBlLWNoZWNraW5nIHdpdGggYHNraXBMaWJDaGVjazogZmFsc2VgIHRoZW4gbmVlZGVkIGV2ZXJ5IG9wdGlvbmFsXG4gKiBwZWVyIGluc3RhbGxlZC5cbiAqXG4gKiBgbGlicmFyeS1yZWZlcmVuY2VzYCBjYXJyaWVzIG9ubHkgdGhlIGxpYnMgdGhhdCBkZXNjcmliZSB0aGUgbGFuZ3VhZ2UgKGBlczIwMjJgLCBgZXNuZXh0LmRpc3Bvc2FibGVgKSwgd2hpY2ggbm9cbiAqIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoLiBUaGUgb25lcyB0aGF0IGRlc2NyaWJlIGEgaG9zdCAoYGRvbWAsIGBkb20uaXRlcmFibGVgLCBgd2Vid29ya2VyYCkgYW5kIGB0eXBlcz1cIm5vZGVcImAgZ29cbiAqIG9ubHkgaW50byB0aGUgZGVjbGFyYXRpb25zIHRoYXQgbmFtZSBvbmUgb2YgdGhlaXIgZ2xvYmFscywgZm91bmQgYnkgcmVzb2x2aW5nIGV2ZXJ5IG5hbWUgaW4gdGhlIGVtaXR0ZWRcbiAqIGRlY2xhcmF0aW9ucyB3aXRoIHRoZSB0eXBlIGNoZWNrZXIuIE90aGVyd2lzZSBhIGJyb3dzZXIgY29uc3VtZXIgb2YgYSBwdXJlIHN1YnBhdGggZ290IGFsbCBvZiBgQHR5cGVzL25vZGVgLCBhbmQgaXRzXG4gKiBgc2V0VGltZW91dGAgcmV0dXJuZWQgYE5vZGVKUy5UaW1lb3V0YC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRlY2xhcmF0aW9ucyBoYXZlIGJlZW4gd3JpdHRlbi5cbiAqIEB0aHJvd3MgSWYgYSBzb3VyY2UgbW9kdWxlIGlzIG5hbWVkIGBsaWJyYXJ5LXJlZmVyZW5jZXNgLCB3aGljaCB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIGdlbmVyYXRlZCBkZWNsYXJhdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkTGlicmFyeVR5cGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoZXhpc3RzU3luYyhqb2luKFJlcG9QYXRocy5TcmMsIGAke0xJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUV9JHtSZXBvUGF0aHMuVHNFeHRlbnNpb259YCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzcmMvJHtMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FfSR7UmVwb1BhdGhzLlRzRXh0ZW5zaW9ufSBjb2xsaWRlcyB3aXRoIHRoZSBnZW5lcmF0ZWQgZGVjbGFyYXRpb24gb2YgdGhlIHNhbWUgbmFtZS5gKTtcbiAgfVxuXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ3RzYycgfSksICctLXByb2plY3QnLCAnLi90c2NvbmZpZy50eXBlcy5qc29uJ10pO1xuXG4gIGNvbnN0IGxpYnJhcnlGaWxlTmFtZSA9IGV4aXN0c1N5bmMoam9pbihSZXBvUGF0aHMuU3JjLCAnbGlicmFyeS50cycpKSA/ICdsaWJyYXJ5JyA6ICdpbmRleCc7XG4gIGNvbnN0IGFsbExpYnMgPSBhd2FpdCBjb2xsZWN0QWxsTGlicygpO1xuICBjb25zdCBhbGxUeXBlcyA9IGNvbGxlY3RBbGxUeXBlcygpO1xuICBjb25zdCBkaXJlY3RpdmVzID0gYnVpbGRBbGxSZWZlcmVuY2VMaWJEaXJlY3RpdmVzKGFsbExpYnMpICsgYnVpbGRBbGxSZWZlcmVuY2VUeXBlc0RpcmVjdGl2ZXMoYWxsVHlwZXMpO1xuICAvLyBPbmx5IHRoZSBsaWJzIG5vIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoLiBUaGUgZW52aXJvbm1lbnQgZ2xvYmFscyBnbyB0byB0aGUgZGVjbGFyYXRpb25zIHRoYXQgdXNlIHRoZW0uXG4gIGNvbnN0IHNoYXJlZERpcmVjdGl2ZXMgPSBidWlsZEFsbFJlZmVyZW5jZUxpYkRpcmVjdGl2ZXMoYWxsTGlicy5maWx0ZXIoKGxpYikgPT4gIWlzRW52aXJvbm1lbnRMaWIobGliKSkpO1xuXG4gIGF3YWl0IG1rZGlyKGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5DanMpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgbWtkaXIoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkVzbSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkNqcywgTElCUkFSWV9SRUZFUkVOQ0VTX0ZJTEVfTkFNRSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSwgc2hhcmVkRGlyZWN0aXZlcyk7XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKFJlcG9QYXRocy5EaXN0TGliLCBSZXBvUGF0aHMuRXNtLCBMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FICsgUmVwb1BhdGhzLkRtdHNFeHRlbnNpb24pLCBzaGFyZWREaXJlY3RpdmVzKTtcblxuICBjb25zdCBzcmNGaWxlcyA9IGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgZGVjbGFyYXRpb25GaWxlcyA9IHNyY0ZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aChSZXBvUGF0aHMuRHRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5zdGFydHNXaXRoKFJlcG9QYXRocy5UZXN0SGVscGVycykpO1xuICBjb25zdCBlbnZpcm9ubWVudERpcmVjdGl2ZXMgPSBjb2xsZWN0RW52aXJvbm1lbnREaXJlY3RpdmVzKHsgYXZhaWxhYmxlVHlwZXM6IGFsbFR5cGVzLCBkZWNsYXJhdGlvbkZpbGVzIH0pO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBkZWNsYXJhdGlvbkZpbGVzKSB7XG4gICAgY29uc3QgZm9sZGVyID0gZGlybmFtZShmaWxlKTtcbiAgICBjb25zdCBuYW1lID0gYmFzZW5hbWUoZmlsZSwgUmVwb1BhdGhzLkR0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oUmVwb1BhdGhzLlNyYywgZmlsZSksICd1dGYtOCcpO1xuXG4gICAgY29uc3QgY3RzUGF0aCA9IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5DanMsIGZvbGRlciwgbmFtZSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKTtcbiAgICBjb25zdCBtdHNQYXRoID0gam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkVzbSwgZm9sZGVyLCBuYW1lICsgUmVwb1BhdGhzLkRtdHNFeHRlbnNpb24pO1xuXG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShjdHNQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShtdHNQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBsZXQgY3RzQ29udGVudCA9IHRvQ3RzQ29udGVudChjb250ZW50KTtcbiAgICBsZXQgbXRzQ29udGVudCA9IHRvTXRzQ29udGVudChjb250ZW50KTtcblxuICAgIGlmIChuYW1lID09PSBsaWJyYXJ5RmlsZU5hbWUgJiYgZm9sZGVyID09PSAnLicpIHtcbiAgICAgIGN0c0NvbnRlbnQgPSBkaXJlY3RpdmVzICsgY3RzQ29udGVudDtcbiAgICAgIG10c0NvbnRlbnQgPSBkaXJlY3RpdmVzICsgbXRzQ29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlsZURpcmVjdGl2ZXMgPSBlbnZpcm9ubWVudERpcmVjdGl2ZXMuZ2V0KGZpbGUpID8/ICcnO1xuICAgICAgY3RzQ29udGVudCA9IGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZSh7IGRlY2xhcmF0aW9uRmlsZVBhdGg6IGN0c1BhdGgsIGV4dGVuc2lvbjogUmVwb1BhdGhzLkRjdHNFeHRlbnNpb24sIG1vZHVsZURpcmVjdG9yeTogUmVwb1BhdGhzLkNqcyB9KVxuICAgICAgICArIGZpbGVEaXJlY3RpdmVzICsgY3RzQ29udGVudDtcbiAgICAgIG10c0NvbnRlbnQgPSBidWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmUoeyBkZWNsYXJhdGlvbkZpbGVQYXRoOiBtdHNQYXRoLCBleHRlbnNpb246IFJlcG9QYXRocy5EbXRzRXh0ZW5zaW9uLCBtb2R1bGVEaXJlY3Rvcnk6IFJlcG9QYXRocy5Fc20gfSlcbiAgICAgICAgKyBmaWxlRGlyZWN0aXZlcyArIG10c0NvbnRlbnQ7XG4gICAgfVxuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGN0c1BhdGgsIGN0c0NvbnRlbnQpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShtdHNQYXRoLCBtdHNDb250ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2VuZXJhdGVzIHRoZSBgZXhwb3J0c2AgbWFwIG9mIHRoZSBwYWNrYWdlJ3MgYHBhY2thZ2UuanNvbmAgZnJvbSBpdHMgc291cmNlIGZvbGRlcnMsIGFuZCB3cml0ZXMgYSBgcGFja2FnZS5qc29uYFxuICogc3R1YiBwZXIgc3VicGF0aCBmb3IgcmVzb2x2ZXJzIHRoYXQgZG8gbm90IHJlYWQgYGV4cG9ydHNgLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1hcCBpcyBjdXJyZW50LlxuICogQHRocm93cyBJZiB0aGUgbWFwIGNoYW5nZWQsIHNvIHRoZSBjaGFuZ2UgZ2V0cyByZXZpZXdlZCBhbmQgY29tbWl0dGVkIHJhdGhlciB0aGFuIHNoaXBwZWQgdW5zZWVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVMaWJyYXJ5RXhwb3J0cyhvcHRpb25zOiBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgc291cmNlQ29uZGl0aW9uIH0gPSBvcHRpb25zO1xuICBjb25zdCBzcmNGb2xkZXJzOiBzdHJpbmdbXSA9IFtSZXBvUGF0aHMuU3JjXTtcblxuICBmb3IgKGNvbnN0IGRpcmVudCBvZiBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUsIHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICBpZiAoIWRpcmVudC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gam9pbihkaXJlbnQucGFyZW50UGF0aCwgZGlyZW50Lm5hbWUpO1xuXG4gICAgaWYgKHBhdGguaW5jbHVkZXMoUmVwb1BhdGhzLlN0eWxlcykgfHwgcGF0aC5pbmNsdWRlcyhSZXBvUGF0aHMuVGVzdEhlbHBlcnMpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBzcmNGb2xkZXJzLnB1c2gocGF0aCk7XG4gIH1cblxuICBzcmNGb2xkZXJzLnNvcnQoKTtcblxuICBsZXQgaXNDaGFuZ2VkID0gZmFsc2U7XG5cbiAgYXdhaXQgZWRpdFBhY2thZ2VKc29uKGFzeW5jIChwYWNrYWdlSnNvbikgPT4ge1xuICAgIGNvbnN0IG9sZEV4cG9ydHMgPSBwYWNrYWdlSnNvbi5leHBvcnRzO1xuICAgIGNvbnN0IGV4cG9ydENvbmRpdGlvbnM6IFBhY2thZ2VKc29uLkV4cG9ydENvbmRpdGlvbnMgPSB7fTtcbiAgICBwYWNrYWdlSnNvbi5leHBvcnRzID0gZXhwb3J0Q29uZGl0aW9ucztcbiAgICBmb3IgKGNvbnN0IHNyY0ZvbGRlciBvZiBzcmNGb2xkZXJzKSB7XG4gICAgICBhd2FpdCBzZXRFeHBvcnQoeyBleHBvcnRDb25kaXRpb25zLCBpc1dpbGRjYXJkOiBmYWxzZSwgc291cmNlQ29uZGl0aW9uLCBzcmNGb2xkZXIgfSk7XG4gICAgICBhd2FpdCBzZXRFeHBvcnQoeyBleHBvcnRDb25kaXRpb25zLCBpc1dpbGRjYXJkOiB0cnVlLCBzb3VyY2VDb25kaXRpb24sIHNyY0ZvbGRlciB9KTtcbiAgICB9XG5cbiAgICBpc0NoYW5nZWQgPSAhaXNEZWVwRXF1YWwob2xkRXhwb3J0cywgcGFja2FnZUpzb24uZXhwb3J0cyk7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IGNoYW5nZWQgaW4gdGhlIGBlZGl0UGFja2FnZUpzb25gLCBFU0xpbnQgbWlzdGFrZW5seSBkb2VzIG5vdCByZWNvZ25pemUgaXQuXG4gIGlmIChpc0NoYW5nZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhY2thZ2UgZXhwb3J0cyBoYXZlIGNoYW5nZWQuIFBsZWFzZSByZXZpZXcgdGhlIGNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLicpO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGBpbmRleC50c2AgYmFycmVsIGluIGV2ZXJ5IHNvdXJjZSBmb2xkZXIgdGhhdCBoYXMgc29tZXRoaW5nIHRvIGV4cG9ydCwgcmUtZXhwb3J0aW5nIGVhY2ggbW9kdWxlIGFuZFxuICogZWFjaCBzdWItYmFycmVsIHVuZGVyIGl0cyBvd24gbmFtZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGJhcnJlbHMgaGF2ZSBiZWVuIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUxpYnJhcnlJbmRleCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2VuZXJhdGVJbmRleChSZXBvUGF0aHMuU3JjKTtcbn1cblxuLyoqXG4gKiBSdW5zIGVhY2ggbmFtZWQgbnBtIHNjcmlwdCB0aGUgcGFja2FnZSBkZWZpbmVzLCBpbiBvcmRlciwgc2tpcHBpbmcgdGhlIG9uZXMgaXQgZG9lcyBub3QgZGVmaW5lLlxuICpcbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBucG0gc2NyaXB0IG5hbWVzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGV2ZXJ5IHN0ZXAgaGFzIHJ1bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHMoc3RlcHM6IHJlYWRvbmx5IHN0cmluZ1tdID0gTElCUkFSWV9CVUlMRF9TVEVQUyk6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcHMpIHtcbiAgICBhd2FpdCBucG1SdW5PcHRpb25hbChzdGVwKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgd2hhdCBhIGNvbnN1bWVyIG5lZWRzIGxvYWRlZCBmb3Igb25lIHN5bWJvbCBhIGRlY2xhcmF0aW9uIG5hbWVzLiBBIHN5bWJvbCBhbnkgRVMgbGliIGRlY2xhcmVzIG5lZWRzIG5vdGhpbmcsXG4gKiBiZWNhdXNlIG5vIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoIHRob3NlIGxpYnMuIE90aGVyd2lzZSBlYWNoIGVudmlyb25tZW50IGxpYiB0aGF0IGRlY2xhcmVzIGl0IGFkZHMgaXRzZWxmLCBhbmRcbiAqIGZhaWxpbmcgdGhhdCBgQHR5cGVzL25vZGVgIGFkZHMgYG5vZGVgLiBBIHN5bWJvbCBkZWNsYXJlZCBpbiB0aGUgcGFja2FnZSdzIG93biBmaWxlcyBhZGRzIG5vdGhpbmc6IHRoZSBkZWNsYXJhdGlvblxuICogdGhhdCBob2xkcyBpdCBjYXJyaWVzIGl0cyBvd24gZGlyZWN0aXZlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHN5bWJvbCwgdGhlIHByb2dyYW0gaXQgd2FzIHJlc29sdmVkIGluLCBhbmQgdGhlIHNldHMgdG8gYWRkIHRvLlxuICovXG5mdW5jdGlvbiBhZGRFbnZpcm9ubWVudEdsb2JhbHMocGFyYW1zOiBBZGRFbnZpcm9ubWVudEdsb2JhbHNQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBsaWJzLCBwcm9ncmFtLCBzeW1ib2wsIHR5cGVzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVudmlyb25tZW50TGliczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGlzTm9kZSA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygc3ltYm9sLmRlY2xhcmF0aW9ucyA/PyBbXSkge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBkZWNsYXJhdGlvbi5nZXRTb3VyY2VGaWxlKCk7XG4gICAgaWYgKHByb2dyYW0uaXNTb3VyY2VGaWxlRGVmYXVsdExpYnJhcnkoc291cmNlRmlsZSkpIHtcbiAgICAgIGNvbnN0IGxpYiA9IHRvTGliTmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgIGlmICghaXNFbnZpcm9ubWVudExpYihsaWIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVudmlyb25tZW50TGlicy5wdXNoKGxpYik7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VGaWxlLmZpbGVOYW1lLmluY2x1ZGVzKE5PREVfVFlQRVNfUEFUSF9TRUdNRU5UKSkge1xuICAgICAgaXNOb2RlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW52aXJvbm1lbnRMaWJzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IGxpYiBvZiBlbnZpcm9ubWVudExpYnMpIHtcbiAgICAgIGxpYnMuYWRkKGxpYik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTm9kZSkge1xuICAgIHR5cGVzLmFkZCgnbm9kZScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWxsUmVmZXJlbmNlTGliRGlyZWN0aXZlcyhsaWJzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtcbiAgICBsaWJzXG4gICAgICAubWFwKChsaWIpID0+IGAvLy8gJHtSRUZFUkVOQ0VfTElCX0RJUkVDVElWRX1cIiR7bGlifVwiIC8+YClcbiAgICAgIC5qb2luKCdcXG4nKVxuICB9XFxuYDtcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxSZWZlcmVuY2VUeXBlc0RpcmVjdGl2ZXModHlwZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVzLmxlbmd0aCA9PT0gMFxuICAgID8gJydcbiAgICA6IGAke1xuICAgICAgdHlwZXNcbiAgICAgICAgLm1hcCgodHlwZSkgPT4gYC8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiJHt0eXBlfVwiIC8+YClcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfVxcbmA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkTGlicmFyeUZvcm1hdChwYXJhbXM6IEJ1aWxkTGlicmFyeUZvcm1hdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGZvcm1hdCwgbGliRmlsZXMsIHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5IH0gPSBwYXJhbXM7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGZvcm1hdCA9PT0gJ2NqcycgPyBSZXBvUGF0aHMuQ2pzRXh0ZW5zaW9uIDogUmVwb1BhdGhzLk1qc0V4dGVuc2lvbjtcbiAgY29uc3QgYnVpbGRPcHRpb25zOiBCdWlsZE9wdGlvbnMgPSB7XG4gICAgLy8gRXhwbGljaXQsIGJlY2F1c2UgZXNidWlsZCBvdGhlcndpc2UgdGFrZXMgdGhlIGZvbGRlciBpdHMgc2VydmljZSBwcm9jZXNzIHN0YXJ0ZWQgaW4uXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gZXNidWlsZCdzIG93biBvcHRpb24gbmFtZS5cbiAgICBhYnNXb3JraW5nRGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGJhbm5lcjoge1xuICAgICAganM6IExJQlJBUllfQkFOTkVSXG4gICAgfSxcbiAgICBidW5kbGU6IGZhbHNlLFxuICAgIGVudHJ5UG9pbnRzOiBsaWJGaWxlcyxcbiAgICBmb3JtYXQsXG4gICAgbG9nTGV2ZWw6ICdpbmZvJyxcbiAgICBvdXRkaXI6IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIGZvcm1hdCksXG4gICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICBwbHVnaW5zOiBbXG4gICAgICBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeShmb3JtYXQgPT09ICdlc20nKSxcbiAgICAgIGZpeEVzbVBsdWdpbigpLFxuICAgICAgY2hhbmdlRXh0ZW5zaW9uUGx1Z2luKGV4dGVuc2lvbilcbiAgICBdLFxuICAgIHNvdXJjZW1hcDogJ2lubGluZScsXG4gICAgdGFyZ2V0OiAnRVMyMDIyJyxcbiAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICB3cml0ZTogZmFsc2VcbiAgfTtcblxuICBjb25zdCBidWlsZENvbnRleHQgPSBhd2FpdCBjb250ZXh0KGJ1aWxkT3B0aW9ucyk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYnVpbGRDb250ZXh0LnJlYnVpbGQoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBidWlsZENvbnRleHQuZGlzcG9zZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZShwYXJhbXM6IEJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZVBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgZGVjbGFyYXRpb25GaWxlUGF0aCwgZXh0ZW5zaW9uLCBtb2R1bGVEaXJlY3RvcnkgfSA9IHBhcmFtcztcbiAgY29uc3QgbGlicmFyeUZpbGVQYXRoID0gam9pbihSZXBvUGF0aHMuRGlzdExpYiwgbW9kdWxlRGlyZWN0b3J5LCBMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FICsgZXh0ZW5zaW9uKTtcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlTmF0aXZlKGRpcm5hbWUoZGVjbGFyYXRpb25GaWxlUGF0aCksIGxpYnJhcnlGaWxlUGF0aCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJyk7XG4gIGlmICghcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cbiAgcmV0dXJuIGAvLy8gPHJlZmVyZW5jZSBwYXRoPVwiJHtyZWxhdGl2ZVBhdGh9XCIgLz5cXG5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0QWxsTGlicygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIC8vIFRoZSBSRVNPTFZFRCBvcHRpb25zLCBiZWNhdXNlIGEgcGFja2FnZSdzIGB0c2NvbmZpZy5qc29uYCBpbmhlcml0cyBgbGliYCBmcm9tIHRoZSBzaGFyZWQgYmFzZS4gVGhlIHJlc29sdmVkXG4gIC8vIG5hbWVzIGFyZSBmaWxlIG5hbWVzIChgbGliLmRvbS5pdGVyYWJsZS5kLnRzYCksIHNvIHRoZXkgYXJlIG1hcHBlZCBiYWNrIG9udG8gdGhlIG5hbWVzIGEgZGlyZWN0aXZlIHRha2VzLlxuICBjb25zdCB7IG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcoUmVwb1BhdGhzLlRzQ29uZmlnSnNvbik7XG4gIGNvbnN0IGxpYnMgPSBuZXcgU2V0KChvcHRpb25zLmxpYiA/PyBbXSkubWFwKChsaWIpID0+IHRvTGliTmFtZShsaWIpKSk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KSkge1xuICAgIGlmICghZmlsZS5lbmRzV2l0aCgnLnRzJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZUNvbnRlbnQgPSByZWFkRmlsZVN5bmMoam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSwgJ3V0Zi04Jyk7XG4gICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbHdheXMgY2FwdHVyZXMgaXRzIG9uZSBncm91cCwgc28gbm8gZmFsbGJhY2sgZm9yIGEgbWlzc2luZyBvbmUgaXMgbmVlZGVkLlxuICAgIGZvciAoY29uc3QgWywgbGliXSBvZiBzb3VyY2VDb250ZW50Lm1hdGNoQWxsKFJFRkVSRU5DRV9MSUJfUkVHX0VYUCkpIHtcbiAgICAgIGxpYnMuYWRkKFN0cmluZyhsaWIpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4ubGlic10uc29ydCgpO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0QWxsVHlwZXMoKTogc3RyaW5nW10ge1xuICBjb25zdCB7IG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcoUmVwb1BhdGhzLlRzQ29uZmlnSnNvbik7XG4gIHJldHVybiAob3B0aW9ucy50eXBlcyA/PyBbXSlcbiAgICAuZmlsdGVyKCh0eXBlKSA9PiBERUNMQVJBVElPTl9SRUZFUkVOQ0VfVFlQRVMuaGFzKHR5cGUpKVxuICAgIC5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RFbnZpcm9ubWVudERpcmVjdGl2ZXMocGFyYW1zOiBDb2xsZWN0RW52aXJvbm1lbnREaXJlY3RpdmVzUGFyYW1zKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHsgYXZhaWxhYmxlVHlwZXMsIGRlY2xhcmF0aW9uRmlsZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgeyBvcHRpb25zIH0gPSBwYXJzZVRzQ29uZmlnKFJlcG9QYXRocy5Uc0NvbmZpZ0pzb24pO1xuICBjb25zdCBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbSh7XG4gICAgb3B0aW9uczogeyAuLi5vcHRpb25zLCBub0VtaXQ6IHRydWUgfSxcbiAgICByb290TmFtZXM6IGRlY2xhcmF0aW9uRmlsZXMubWFwKChmaWxlKSA9PiByZXNvbHZlTmF0aXZlKFJlcG9QYXRocy5TcmMsIGZpbGUpKVxuICB9KTtcbiAgY29uc3QgY2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3QgZGlyZWN0aXZlc0J5RmlsZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGRlY2xhcmF0aW9uRmlsZXMpIHtcbiAgICAvLyBUaGUgcHJvZ3JhbSB3YXMgaGFuZGVkIGV2ZXJ5IG9uZSBvZiB0aGVzZSBhcyBhIHJvb3QgbmFtZSwgc28gZWFjaCBvbmUgaXMgaW4gaXQuXG4gICAgY29uc3Qgc291cmNlRmlsZSA9IGVuc3VyZU5vbk51bGxhYmxlKHByb2dyYW0uZ2V0U291cmNlRmlsZShyZXNvbHZlTmF0aXZlKFJlcG9QYXRocy5TcmMsIGZpbGUpKSk7XG4gICAgY29uc3QgbGlicyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmdW5jdGlvbiB2aXNpdChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICBpZiAoaXNJZGVudGlmaWVyKG5vZGUpIHx8IGlzU3RyaW5nTGl0ZXJhbChub2RlKSkge1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZSk7XG4gICAgICAgIGlmIChzeW1ib2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFkZEVudmlyb25tZW50R2xvYmFscyh7IGxpYnMsIHByb2dyYW0sIHN5bWJvbDogcmVzb2x2ZUFsaWFzKGNoZWNrZXIsIHN5bWJvbCksIHR5cGVzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpO1xuICAgIH1cbiAgICB2aXNpdChzb3VyY2VGaWxlKTtcblxuICAgIGNvbnN0IG5lZWRlZFR5cGVzID0gWy4uLnR5cGVzXS5maWx0ZXIoKHR5cGUpID0+IGF2YWlsYWJsZVR5cGVzLmluY2x1ZGVzKHR5cGUpKTtcbiAgICBpZiAobGlicy5zaXplID4gMCB8fCBuZWVkZWRUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBkaXJlY3RpdmVzQnlGaWxlLnNldChcbiAgICAgICAgZmlsZSxcbiAgICAgICAgKGxpYnMuc2l6ZSA+IDAgPyBidWlsZEFsbFJlZmVyZW5jZUxpYkRpcmVjdGl2ZXMoWy4uLmxpYnNdLnNvcnQoKSkgOiAnJykgKyBidWlsZEFsbFJlZmVyZW5jZVR5cGVzRGlyZWN0aXZlcyhuZWVkZWRUeXBlcy5zb3J0KCkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXJlY3RpdmVzQnlGaWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUluZGV4KGZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxHZW5lcmF0ZUluZGV4UmVzdWx0PiB7XG4gIGNvbnN0IGRpcmVudHMgPSBhd2FpdCByZWFkZGlyUG9zaXgoZm9sZGVyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IG1heWJlTGluZXMgPSBhd2FpdCBhc3luY01hcChkaXJlbnRzLCAoZGlyZW50KSA9PiBoYW5kbGVJbmRleERpcmVudChmb2xkZXIsIGRpcmVudCkpO1xuICBjb25zdCBsaW5lcyA9IG1heWJlTGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lICE9PSB1bmRlZmluZWQpO1xuXG4gIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gR2VuZXJhdGVJbmRleFJlc3VsdC5Ta2lwcGVkO1xuICB9XG5cbiAgYXdhaXQgZ2VuZXJhdGUoam9pbihmb2xkZXIsIFJlcG9QYXRocy5JbmRleFRzKSwgbGluZXMpO1xuICByZXR1cm4gR2VuZXJhdGVJbmRleFJlc3VsdC5TdWNjZXNzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRMaWJGaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGxldCBmaWxlcyA9IGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgZmlsZXMgPSBmaWxlcy5tYXAoKGZpbGUpID0+IG5vcm1hbGl6ZUlmUmVsYXRpdmUoam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSkpO1xuICByZXR1cm4gZmlsZXMuZmlsdGVyKChmaWxlKSA9PlxuICAgIGZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLlRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5lbmRzV2l0aChSZXBvUGF0aHMuRHRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5lbmRzV2l0aCgnLnRlc3QudHMnKVxuICAgICYmICFmaWxlLmluY2x1ZGVzKGAvJHtSZXBvUGF0aHMuVGVzdEhlbHBlcnN9L2ApXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUluZGV4RGlyZW50KGZvbGRlcjogc3RyaW5nLCBkaXJlbnQ6IERpcmVudCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGlmIChpc0V4Y2x1ZGVkRnJvbUluZGV4KGZvbGRlciwgZGlyZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBzb3VyY2VGaWxlOiBzdHJpbmc7XG4gIGxldCBuYW1lOiBzdHJpbmc7XG4gIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdlbmVyYXRlSW5kZXgoam9pbihmb2xkZXIsIGRpcmVudC5uYW1lKSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gR2VuZXJhdGVJbmRleFJlc3VsdC5TdWNjZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNvdXJjZUZpbGUgPSBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oZGlyZW50Lm5hbWUsIFJlcG9QYXRocy5JbmRleFRzKSk7XG4gICAgbmFtZSA9IGRpcmVudC5uYW1lO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUoZGlyZW50Lm5hbWUpO1xuICAgIG5hbWUgPSBiYXNlbmFtZShkaXJlbnQubmFtZSwgZXh0ZW5zaW9uKTtcbiAgICBzb3VyY2VGaWxlID0gbm9ybWFsaXplSWZSZWxhdGl2ZShkaXJlbnQubmFtZSk7XG4gIH1cblxuICByZXR1cm4gYGV4cG9ydCAqIGFzICcke25hbWV9JyBmcm9tICcke3NvdXJjZUZpbGV9JztgO1xufVxuXG5mdW5jdGlvbiBpc0Vudmlyb25tZW50TGliKGxpYjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBFTlZJUk9OTUVOVF9MSUJfUFJFRklYRVMuc29tZSgocHJlZml4KSA9PiBsaWIuc3RhcnRzV2l0aChwcmVmaXgpKTtcbn1cblxuZnVuY3Rpb24gaXNFeGNsdWRlZEZpbGVOYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIW5hbWUuZW5kc1dpdGgoUmVwb1BhdGhzLlRzRXh0ZW5zaW9uKSB8fCBuYW1lLmVuZHNXaXRoKCcudGVzdC50cycpIHx8IG5hbWUgPT09ICdzZXR1cC50cycgfHwgbmFtZS5lbmRzV2l0aCgnLXNldHVwLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWRGcm9tSW5kZXgoZm9sZGVyOiBzdHJpbmcsIGRpcmVudDogRGlyZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IGV4Y2x1ZGVkTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1JlcG9QYXRocy5JbmRleFRzLCBSZXBvUGF0aHMuVHlwZXMsIFJlcG9QYXRocy5TdHlsZXMsIFJlcG9QYXRocy5UZXN0SGVscGVyc107XG4gIGNvbnN0IGlzRXhjbHVkZWRFbnRyeSA9IGV4Y2x1ZGVkTmFtZXMuaW5jbHVkZXMoZGlyZW50Lm5hbWUpIHx8IGRpcmVudC5uYW1lLmVuZHNXaXRoKFJlcG9QYXRocy5EdHNFeHRlbnNpb24pIHx8IGZvbGRlci5zcGxpdCgnLycpLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIHJldHVybiBpc0V4Y2x1ZGVkRW50cnkgfHwgKGRpcmVudC5pc0ZpbGUoKSAmJiBpc0V4Y2x1ZGVkRmlsZU5hbWUoZGlyZW50Lm5hbWUpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFsaWFzKGNoZWNrZXI6IFR5cGVDaGVja2VyLCBzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBgU3ltYm9sRmxhZ3NgIGlzIGEgYml0IHNldC5cbiAgcmV0dXJuIChzeW1ib2wuZmxhZ3MgJiBTeW1ib2xGbGFncy5BbGlhcykgPT09IDAgPyBzeW1ib2wgOiBjaGVja2VyLmdldEFsaWFzZWRTeW1ib2woc3ltYm9sKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0RXhwb3J0KHBhcmFtczogU2V0RXhwb3J0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZXhwb3J0Q29uZGl0aW9ucywgaXNXaWxkY2FyZCwgc291cmNlQ29uZGl0aW9uLCBzcmNGb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgaW1wb3J0UGF0aCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IHNyY0ZvbGRlcixcbiAgICByZXBsYWNlcjogUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXIsXG4gICAgc2VhcmNoVmFsdWU6IFJlcG9QYXRocy5TcmNcbiAgfSk7XG4gIGNvbnN0IGNvbmRpdGlvblBhdGggPSBpc1dpbGRjYXJkID8gYCR7aW1wb3J0UGF0aH0vJHtSZXBvUGF0aHMuQW55fWAgOiBpbXBvcnRQYXRoO1xuICBjb25zdCBkbXRzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5Fc20sIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55RG10cyA6IFJlcG9QYXRocy5JbmRleERtdHMgfSk7XG4gIGNvbnN0IGRjdHNQYXRoID0gdG9EaXN0UGF0aCh7IGZvcm1hdDogUmVwb1BhdGhzLkNqcywgaW1wb3J0UGF0aCwgbmFtZTogaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlEY3RzIDogUmVwb1BhdGhzLkluZGV4RGN0cyB9KTtcbiAgY29uc3QgZG10c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRtdHNQYXRoKTtcbiAgY29uc3QgZGN0c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRjdHNQYXRoKTtcblxuICBpZiAoIWlzV2lsZGNhcmQgJiYgIWV4aXN0c1N5bmMoZGN0c1BhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNUeXBlc09ubHkgPSBpbXBvcnRQYXRoLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIGNvbnN0IG1qc1BhdGggPSB0b0Rpc3RQYXRoKHsgZm9ybWF0OiBSZXBvUGF0aHMuRXNtLCBpbXBvcnRQYXRoLCBuYW1lOiBpc1dpbGRjYXJkID8gUmVwb1BhdGhzLkFueU1qcyA6IFJlcG9QYXRocy5JbmRleE1qcyB9KTtcbiAgY29uc3QgY2pzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5DanMsIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55Q2pzIDogUmVwb1BhdGhzLkluZGV4Q2pzIH0pO1xuXG4gIGlmIChpc1R5cGVzT25seSkge1xuICAgIGV4cG9ydENvbmRpdGlvbnNbY29uZGl0aW9uUGF0aF0gPSB7XG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGhcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oUmVwb1BhdGhzLlNyYywgaW1wb3J0UGF0aCwgaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlUcyA6IFJlcG9QYXRocy5JbmRleFRzKSk7XG5cbiAgICBleHBvcnRDb25kaXRpb25zW2NvbmRpdGlvblBhdGhdID0ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgICAvLyBGaXJzdCwgc28gaXQgd2lucyB3aGVyZXZlciBpdCBpcyBzZXQ6IGluc2lkZSB0aGUgcmVwb3NpdG9yeSwgYmVmb3JlIGFueXRoaW5nIGlzIGJ1aWx0LlxuICAgICAgLi4uKHNvdXJjZUNvbmRpdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgW3NvdXJjZUNvbmRpdGlvbl06IHNvdXJjZVBhdGggfSksXG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoLFxuICAgICAgICBkZWZhdWx0OiBtanNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGgsXG4gICAgICAgIGRlZmF1bHQ6IGNqc1BhdGhcbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgfTtcbiAgfVxuXG4gIGlmIChpbXBvcnRQYXRoID09PSBSZXBvUGF0aHMuQ3VycmVudEZvbGRlciBhcyBzdHJpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzV2lsZGNhcmQpIHtcbiAgICBhd2FpdCB3cml0ZVN1YnBhdGhQYWNrYWdlSnNvbihcbiAgICAgIGltcG9ydFBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzOiByZWxhdGl2ZShpbXBvcnRQYXRoLCBkY3RzUGF0aCkgfVxuICAgICAgICA6IHsgbWFpbjogcmVsYXRpdmUoaW1wb3J0UGF0aCwgY2pzUGF0aCksIG1vZHVsZTogcmVsYXRpdmUoaW1wb3J0UGF0aCwgbWpzUGF0aCksIHR5cGU6ICdtb2R1bGUnLCB0eXBlczogcmVsYXRpdmUoaW1wb3J0UGF0aCwgZGN0c1BhdGgpIH1cbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoZGN0c0ZvbGRlclBhdGgpKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShmaWxlLCBSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgcGFja2FnZUpzb25Gb2xkZXJQYXRoID0gam9pbihpbXBvcnRQYXRoLCBuYW1lKTtcbiAgICBjb25zdCB0eXBlcyA9IHJlbGF0aXZlKHBhY2thZ2VKc29uRm9sZGVyUGF0aCwgam9pbihkY3RzRm9sZGVyUGF0aCwgbmFtZSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSk7XG4gICAgYXdhaXQgd3JpdGVTdWJwYXRoUGFja2FnZUpzb24oXG4gICAgICBwYWNrYWdlSnNvbkZvbGRlclBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgbWFpbjogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRjdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLkNqc0V4dGVuc2lvbikpLFxuICAgICAgICAgIG1vZHVsZTogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRtdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLk1qc0V4dGVuc2lvbikpLFxuICAgICAgICAgIHR5cGU6ICdtb2R1bGUnLFxuICAgICAgICAgIHR5cGVzXG4gICAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQ3RzQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGNvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdmcm9tIFxcJyQ8SW1wb3J0UGF0aD4uY2pzXFwnOycsXG4gICAgc2VhcmNoVmFsdWU6IFNUQVRJQ19JTVBPUlRfUkVHX0VYUFxuICB9KTtcbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQoJDxRdW90ZT4kPEltcG9ydFBhdGg+LmNqcyQ8UXVvdGU+KScsXG4gICAgc2VhcmNoVmFsdWU6IERZTkFNSUNfSU1QT1JUX1JFR19FWFBcbiAgfSk7XG5cbiAgLy8gQSBgLmQuY3RzYCBmaWxlIGlzIGEgQ29tbW9uSlMgbW9kdWxlLiBUeXBlLW9ubHkgaW1wb3J0cyBvZiBhIGJhcmUgc3BlY2lmaWVyIHJlc29sdmluZyB0byBhblxuICAvLyBFU00tb25seSBwYWNrYWdlIG5lZWQgYSBgcmVzb2x1dGlvbi1tb2RlYCBhdHRyaWJ1dGUsIGVsc2UgYHRzY2AgcmVwb3J0cyBUUzE1NDEgLyBUUzE1NDIuXG4gIC8vIFBhc3NpbmcgYCdpbXBvcnQnYCBpcyB2YWxpZCBmb3IgQ29tbW9uSlMgdGFyZ2V0cyB0b28sIHNvIGV2ZXJ5IGJhcmUgc3BlY2lmaWVyIHJlY2VpdmVzIGl0LlxuICAvLyBUaGUgRVNNIGAuZC5tdHNgIG5lZWRzIG5vIHN1Y2ggYXR0cmlidXRlLCBzbyB0aGlzIHRyYW5zZm9ybSBydW5zIG9uIENvbW1vbkpTIGNvbnRlbnQgb25seS5cbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQgdHlwZSAkPENsYXVzZT4gZnJvbSBcXCckPFNwZWNpZmllcj5cXCcgd2l0aCB7IFxcJ3Jlc29sdXRpb24tbW9kZVxcJzogXFwnaW1wb3J0XFwnIH07JyxcbiAgICBzZWFyY2hWYWx1ZTogQkFSRV9UWVBFX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogY3RzQ29udGVudCxcbiAgICByZXBsYWNlcjogJ2ltcG9ydChcIiQ8U3BlY2lmaWVyPlwiLCB7IHdpdGg6IHsgXFwncmVzb2x1dGlvbi1tb2RlXFwnOiBcXCdpbXBvcnRcXCcgfSB9KScsXG4gICAgc2VhcmNoVmFsdWU6IEJBUkVfSU5MSU5FX0lNUE9SVF9UWVBFX1JFR19FWFBcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvRGlzdFBhdGgocGFyYW1zOiBUb0Rpc3RQYXRoUGFyYW1zKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZUlmUmVsYXRpdmUoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgcGFyYW1zLmZvcm1hdCwgcGFyYW1zLmltcG9ydFBhdGgsIHBhcmFtcy5uYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRvTGliTmFtZShsaWJGaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQSBsaWIgYSBwYWNrYWdlIHJlcGxhY2VkIChgQHR5cGVzY3JpcHQvbGliLWRvbWAsIGBAdHlwZXNjcmlwdC9saWItZG9tL2l0ZXJhYmxlLmQudHNgKSBpcyBuYW1lZCBieSBpdHMgcGF0aCwgbm90IGJ5XG4gIC8vIGl0cyBmaWxlIG5hbWUsIHdoaWNoIGlzIGBpbmRleC5kLnRzYCBmb3IgdGhlIGxpYidzIHJvb3QuXG4gIGNvbnN0IHJlcGxhY2VtZW50TWF0Y2ggPSBMSUJfUkVQTEFDRU1FTlRfUkVHX0VYUC5leGVjKGxpYkZpbGVQYXRoKTtcbiAgaWYgKHJlcGxhY2VtZW50TWF0Y2g/Lmdyb3VwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbHdheXMgY2FwdHVyZXMgYm90aCBncm91cHMuXG4gICAgY29uc3QgbGliID0gU3RyaW5nKHJlcGxhY2VtZW50TWF0Y2guZ3JvdXBzWydMaWInXSk7XG4gICAgY29uc3Qgc3ViTGliID0gU3RyaW5nKHJlcGxhY2VtZW50TWF0Y2guZ3JvdXBzWydTdWJMaWInXSk7XG4gICAgcmV0dXJuIChzdWJMaWIgPT09ICdpbmRleCcgPyBsaWIgOiBgJHtsaWJ9LiR7c3ViTGliLnJlcGxhY2VBbGwoJy8nLCAnLicpfWApLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VuYW1lKGxpYkZpbGVQYXRoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15saWJcXC4vLCAnJykucmVwbGFjZSgvXFwuZFxcLnRzJC8sICcnKTtcbn1cblxuZnVuY3Rpb24gdG9NdHNDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG10c0NvbnRlbnQgPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBjb250ZW50LFxuICAgIHJlcGxhY2VyOiAnZnJvbSBcXCckPEltcG9ydFBhdGg+Lm1qc1xcJzsnLFxuICAgIHNlYXJjaFZhbHVlOiBTVEFUSUNfSU1QT1JUX1JFR19FWFBcbiAgfSk7XG4gIHJldHVybiByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBtdHNDb250ZW50LFxuICAgIHJlcGxhY2VyOiAnaW1wb3J0KCQ8UXVvdGU+JDxJbXBvcnRQYXRoPi5tanMkPFF1b3RlPiknLFxuICAgIHNlYXJjaFZhbHVlOiBEWU5BTUlDX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZVN1YnBhdGhQYWNrYWdlSnNvbihmb2xkZXI6IHN0cmluZywgcGFja2FnZUpzb246IFBhY2thZ2VKc29uKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG1rZGlyKGZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlSnNvbihqb2luKGZvbGRlciwgUmVwb1BhdGhzLlBhY2thZ2VKc29uKSwgcGFja2FnZUpzb24pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQSxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLG1CQUFtQjtBQUM1QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGtCQUFrQjtBQUMzQixTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLGVBQWU7QUFDeEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFLFlBQVk7QUFBQSxFQUNaLFdBQVc7QUFBQSxPQUNOO0FBQ1AsT0FBTyxhQUFhO0FBQ3BCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBSVAsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxvQkFBb0I7QUFLdEIsTUFBTSxpQkFBaUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVN2QixNQUFNLHNCQUF5QztBQUFBLEVBQ3BEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFPTyxNQUFNLG1CQUFtQjtBQTJCaEMsTUFBTSw4QkFBOEIsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUlwRCxNQUFNLDJCQUE4QyxDQUFDLE9BQU8sY0FBYyxXQUFXO0FBQ3JGLE1BQU0sMEJBQTBCO0FBQ2hDLE1BQU0sMEJBQTBCO0FBSWhDLE1BQU0sK0JBQStCO0FBR3JDLE1BQU0sMEJBQTBCLENBQUMsY0FBYyxNQUFNLEVBQUUsS0FBSyxHQUFHO0FBQy9ELE1BQU0sd0JBQXdCO0FBRzlCLE1BQU0sMkJBQTJCO0FBR2pDLE1BQU0sa0NBQWtDO0FBRXhDLE1BQU0sd0JBQXdCO0FBSzlCLE1BQU0seUJBQXlCO0FBa0QvQixlQUFzQixvQkFBbUM7QUFDdkQsUUFBTSxXQUFXO0FBQ2pCLGFBQVcsUUFBUSxNQUFNLGFBQWEsVUFBVSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUMsR0FBRztBQUN6RSxRQUFJLFNBQVMsSUFBSSxNQUFNLFVBQVUsU0FBbUI7QUFDbEQsWUFBTSxHQUFHLEtBQUssVUFBVSxLQUFLLElBQUksQ0FBQztBQUFBLElBQ3BDO0FBRUEsUUFBSSxLQUFLLFNBQVMsVUFBVSxZQUFZLEtBQUssQ0FBQyxLQUFLLE1BQU0sR0FBRyxFQUFFLFNBQVMsVUFBVSxLQUFLLEdBQUc7QUFDdkYsWUFBTSxHQUFHLEtBQUssVUFBVSxLQUFLLElBQUksQ0FBQztBQUFBLElBQ3BDO0FBQUEsRUFDRjtBQUVBLGFBQVcsUUFBUSxNQUFNLGFBQWEsVUFBVSxlQUFlLEVBQUUsV0FBVyxLQUFLLENBQUMsR0FBRztBQUNuRixRQUFLLFNBQVMsSUFBSSxNQUFNLFVBQVUsZUFBMkIsU0FBUyxVQUFVLGVBQTBCLEtBQUssV0FBVyxVQUFVLFdBQVcsR0FBRztBQUNoSjtBQUFBLElBQ0Y7QUFFQSxVQUFNLEdBQUcsSUFBSTtBQUFBLEVBQ2Y7QUFDRjtBQVVBLGVBQXNCLGFBQWEsVUFBK0IsQ0FBQyxHQUFrQjtBQUNuRixRQUFNLEVBQUUsMEJBQTBCLENBQUMsVUFBMkIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSTtBQUM5RixRQUFNLFdBQVcsTUFBTSxZQUFZO0FBQ25DLFFBQU0sbUJBQW1CLEVBQUUsUUFBUSxPQUFPLFVBQVUsd0JBQXdCLENBQUM7QUFDN0UsUUFBTSxtQkFBbUIsRUFBRSxRQUFRLE9BQU8sVUFBVSx3QkFBd0IsQ0FBQztBQUMvRTtBQXNCQSxlQUFzQixvQkFBbUM7QUFDdkQsTUFBSSxXQUFXLEtBQUssVUFBVSxLQUFLLEdBQUcsNEJBQTRCLEdBQUcsVUFBVSxXQUFXLEVBQUUsQ0FBQyxHQUFHO0FBQzlGLFVBQU0sSUFBSSxNQUFNLE9BQU8sNEJBQTRCLEdBQUcsVUFBVSxXQUFXLDREQUE0RDtBQUFBLEVBQ3pJO0FBRUEsUUFBTSxhQUFhLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxNQUFNLE1BQU0sQ0FBQyxHQUFHLGFBQWEsdUJBQXVCLENBQUM7QUFFakcsUUFBTSxrQkFBa0IsV0FBVyxLQUFLLFVBQVUsS0FBSyxZQUFZLENBQUMsSUFBSSxZQUFZO0FBQ3BGLFFBQU0sVUFBVSxNQUFNLGVBQWU7QUFDckMsUUFBTSxXQUFXLGdCQUFnQjtBQUNqQyxRQUFNLGFBQWEsK0JBQStCLE9BQU8sSUFBSSxpQ0FBaUMsUUFBUTtBQUV0RyxRQUFNLG1CQUFtQiwrQkFBK0IsUUFBUSxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUV2RyxRQUFNLE1BQU0sS0FBSyxVQUFVLFNBQVMsVUFBVSxHQUFHLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUN2RSxRQUFNLE1BQU0sS0FBSyxVQUFVLFNBQVMsVUFBVSxHQUFHLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUN2RSxRQUFNLFVBQVUsS0FBSyxVQUFVLFNBQVMsVUFBVSxLQUFLLCtCQUErQixVQUFVLGFBQWEsR0FBRyxnQkFBZ0I7QUFDaEksUUFBTSxVQUFVLEtBQUssVUFBVSxTQUFTLFVBQVUsS0FBSywrQkFBK0IsVUFBVSxhQUFhLEdBQUcsZ0JBQWdCO0FBRWhJLFFBQU0sV0FBVyxNQUFNLGFBQWEsVUFBVSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDdEUsUUFBTSxtQkFBbUIsU0FBUyxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsVUFBVSxZQUFZLEtBQUssQ0FBQyxLQUFLLFdBQVcsVUFBVSxXQUFXLENBQUM7QUFDbkksUUFBTSx3QkFBd0IsNkJBQTZCLEVBQUUsZ0JBQWdCLFVBQVUsaUJBQWlCLENBQUM7QUFFekcsYUFBVyxRQUFRLGtCQUFrQjtBQUNuQyxVQUFNLFNBQVMsUUFBUSxJQUFJO0FBQzNCLFVBQU0sT0FBTyxTQUFTLE1BQU0sVUFBVSxZQUFZO0FBQ2xELFVBQU0sVUFBVSxNQUFNLFNBQVMsS0FBSyxVQUFVLEtBQUssSUFBSSxHQUFHLE9BQU87QUFFakUsVUFBTSxVQUFVLEtBQUssVUFBVSxTQUFTLFVBQVUsS0FBSyxRQUFRLE9BQU8sVUFBVSxhQUFhO0FBQzdGLFVBQU0sVUFBVSxLQUFLLFVBQVUsU0FBUyxVQUFVLEtBQUssUUFBUSxPQUFPLFVBQVUsYUFBYTtBQUU3RixVQUFNLE1BQU0sUUFBUSxPQUFPLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNqRCxVQUFNLE1BQU0sUUFBUSxPQUFPLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUVqRCxRQUFJLGFBQWEsYUFBYSxPQUFPO0FBQ3JDLFFBQUksYUFBYSxhQUFhLE9BQU87QUFFckMsUUFBSSxTQUFTLG1CQUFtQixXQUFXLEtBQUs7QUFDOUMsbUJBQWEsYUFBYTtBQUMxQixtQkFBYSxhQUFhO0FBQUEsSUFDNUIsT0FBTztBQUNMLFlBQU0saUJBQWlCLHNCQUFzQixJQUFJLElBQUksS0FBSztBQUMxRCxtQkFBYSw0QkFBNEIsRUFBRSxxQkFBcUIsU0FBUyxXQUFXLFVBQVUsZUFBZSxpQkFBaUIsVUFBVSxJQUFJLENBQUMsSUFDekksaUJBQWlCO0FBQ3JCLG1CQUFhLDRCQUE0QixFQUFFLHFCQUFxQixTQUFTLFdBQVcsVUFBVSxlQUFlLGlCQUFpQixVQUFVLElBQUksQ0FBQyxJQUN6SSxpQkFBaUI7QUFBQSxJQUN2QjtBQUVBLFVBQU0sVUFBVSxTQUFTLFVBQVU7QUFDbkMsVUFBTSxVQUFVLFNBQVMsVUFBVTtBQUFBLEVBQ3JDO0FBQ0Y7QUFVQSxlQUFzQix1QkFBdUIsVUFBeUMsQ0FBQyxHQUFrQjtBQUN2RyxRQUFNLEVBQUUsZ0JBQWdCLElBQUk7QUFDNUIsUUFBTSxhQUF1QixDQUFDLFVBQVUsR0FBRztBQUUzQyxhQUFXLFVBQVUsTUFBTSxhQUFhLFVBQVUsS0FBSyxFQUFFLFdBQVcsTUFBTSxlQUFlLEtBQUssQ0FBQyxHQUFHO0FBQ2hHLFFBQUksQ0FBQyxPQUFPLFlBQVksR0FBRztBQUN6QjtBQUFBLElBQ0Y7QUFFQSxVQUFNLE9BQU8sS0FBSyxPQUFPLFlBQVksT0FBTyxJQUFJO0FBRWhELFFBQUksS0FBSyxTQUFTLFVBQVUsTUFBTSxLQUFLLEtBQUssU0FBUyxVQUFVLFdBQVcsR0FBRztBQUMzRTtBQUFBLElBQ0Y7QUFFQSxlQUFXLEtBQUssSUFBSTtBQUFBLEVBQ3RCO0FBRUEsYUFBVyxLQUFLO0FBRWhCLE1BQUksWUFBWTtBQUVoQixRQUFNLGdCQUFnQixPQUFPLGdCQUFnQjtBQUMzQyxVQUFNLGFBQWEsWUFBWTtBQUMvQixVQUFNLG1CQUFpRCxDQUFDO0FBQ3hELGdCQUFZLFVBQVU7QUFDdEIsZUFBVyxhQUFhLFlBQVk7QUFDbEMsWUFBTSxVQUFVLEVBQUUsa0JBQWtCLFlBQVksT0FBTyxpQkFBaUIsVUFBVSxDQUFDO0FBQ25GLFlBQU0sVUFBVSxFQUFFLGtCQUFrQixZQUFZLE1BQU0saUJBQWlCLFVBQVUsQ0FBQztBQUFBLElBQ3BGO0FBRUEsZ0JBQVksQ0FBQyxZQUFZLFlBQVksWUFBWSxPQUFPO0FBQUEsRUFDMUQsQ0FBQztBQUdELE1BQUksV0FBVztBQUNiLFVBQU0sSUFBSSxNQUFNLDBFQUEwRTtBQUFBLEVBQzVGO0FBQ0Y7QUFRQSxlQUFzQix1QkFBc0M7QUFDMUQsUUFBTSxjQUFjLFVBQVUsR0FBRztBQUNuQztBQVFBLGVBQXNCLGNBQWMsUUFBMkIscUJBQW9DO0FBQ2pHLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFVBQU0sZUFBZSxJQUFJO0FBQUEsRUFDM0I7QUFDRjtBQVVBLFNBQVMsc0JBQXNCLFFBQTJDO0FBQ3hFLFFBQU0sRUFBRSxNQUFNLFNBQVMsUUFBUSxNQUFNLElBQUk7QUFDekMsUUFBTSxrQkFBNEIsQ0FBQztBQUNuQyxNQUFJLFNBQVM7QUFFYixhQUFXLGVBQWUsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ25ELFVBQU0sYUFBYSxZQUFZLGNBQWM7QUFDN0MsUUFBSSxRQUFRLDJCQUEyQixVQUFVLEdBQUc7QUFDbEQsWUFBTSxNQUFNLFVBQVUsV0FBVyxRQUFRO0FBQ3pDLFVBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHO0FBQzFCO0FBQUEsTUFDRjtBQUNBLHNCQUFnQixLQUFLLEdBQUc7QUFBQSxJQUMxQixXQUFXLFdBQVcsU0FBUyxTQUFTLHVCQUF1QixHQUFHO0FBQ2hFLGVBQVM7QUFBQSxJQUNYO0FBQUEsRUFDRjtBQUVBLE1BQUksZ0JBQWdCLFNBQVMsR0FBRztBQUM5QixlQUFXLE9BQU8saUJBQWlCO0FBQ2pDLFdBQUssSUFBSSxHQUFHO0FBQUEsSUFDZDtBQUFBLEVBQ0YsV0FBVyxRQUFRO0FBQ2pCLFVBQU0sSUFBSSxNQUFNO0FBQUEsRUFDbEI7QUFDRjtBQUVBLFNBQVMsK0JBQStCLE1BQXdCO0FBQzlELFNBQU8sR0FDTCxLQUNHLElBQUksQ0FBQyxRQUFRLE9BQU8sdUJBQXVCLElBQUksR0FBRyxNQUFNLEVBQ3hELEtBQUssSUFBSSxDQUNkO0FBQUE7QUFDRjtBQUVBLFNBQVMsaUNBQWlDLE9BQXlCO0FBQ2pFLFNBQU8sTUFBTSxXQUFXLElBQ3BCLEtBQ0EsR0FDQSxNQUNHLElBQUksQ0FBQyxTQUFTLHlCQUF5QixJQUFJLE1BQU0sRUFDakQsS0FBSyxJQUFJLENBQ2Q7QUFBQTtBQUNKO0FBRUEsZUFBZSxtQkFBbUIsUUFBaUQ7QUFDakYsUUFBTSxFQUFFLFFBQVEsVUFBVSx3QkFBd0IsSUFBSTtBQUN0RCxRQUFNLFlBQVksV0FBVyxRQUFRLFVBQVUsZUFBZSxVQUFVO0FBQ3hFLFFBQU0sZUFBNkI7QUFBQTtBQUFBO0FBQUEsSUFHakMsZUFBZSxRQUFRLElBQUk7QUFBQSxJQUMzQixRQUFRO0FBQUEsTUFDTixJQUFJO0FBQUEsSUFDTjtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLElBQ2I7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLFFBQVEsS0FBSyxVQUFVLFNBQVMsTUFBTTtBQUFBLElBQ3RDLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxNQUNQLHdCQUF3QixXQUFXLEtBQUs7QUFBQSxNQUN4QyxhQUFhO0FBQUEsTUFDYixzQkFBc0IsU0FBUztBQUFBLElBQ2pDO0FBQUEsSUFDQSxXQUFXO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZUFBZSxNQUFNLFFBQVEsWUFBWTtBQUMvQyxNQUFJO0FBQ0YsVUFBTSxhQUFhLFFBQVE7QUFBQSxFQUM3QixVQUFFO0FBQ0EsVUFBTSxhQUFhLFFBQVE7QUFBQSxFQUM3QjtBQUNGO0FBRUEsU0FBUyw0QkFBNEIsUUFBbUQ7QUFDdEYsUUFBTSxFQUFFLHFCQUFxQixXQUFXLGdCQUFnQixJQUFJO0FBQzVELFFBQU0sa0JBQWtCLEtBQUssVUFBVSxTQUFTLGlCQUFpQiwrQkFBK0IsU0FBUztBQUN6RyxNQUFJLGVBQWUsZUFBZSxRQUFRLG1CQUFtQixHQUFHLGVBQWUsRUFBRSxXQUFXLE1BQU0sR0FBRztBQUNyRyxNQUFJLENBQUMsYUFBYSxXQUFXLEdBQUcsR0FBRztBQUNqQyxtQkFBZSxLQUFLLFlBQVk7QUFBQSxFQUNsQztBQUNBLFNBQU8sd0JBQXdCLFlBQVk7QUFBQTtBQUM3QztBQUVBLGVBQWUsaUJBQW9DO0FBR2pELFFBQU0sRUFBRSxRQUFRLElBQUksY0FBYyxVQUFVLFlBQVk7QUFDeEQsUUFBTSxPQUFPLElBQUksS0FBSyxRQUFRLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFckUsYUFBVyxRQUFRLE1BQU0sYUFBYSxVQUFVLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQyxHQUFHO0FBQ3pFLFFBQUksQ0FBQyxLQUFLLFNBQVMsS0FBSyxHQUFHO0FBQ3pCO0FBQUEsSUFDRjtBQUVBLFVBQU0sZ0JBQWdCLGFBQWEsS0FBSyxVQUFVLEtBQUssSUFBSSxHQUFHLE9BQU87QUFFckUsZUFBVyxDQUFDLEVBQUUsR0FBRyxLQUFLLGNBQWMsU0FBUyxxQkFBcUIsR0FBRztBQUNuRSxXQUFLLElBQUksT0FBTyxHQUFHLEVBQUUsWUFBWSxDQUFDO0FBQUEsSUFDcEM7QUFBQSxFQUNGO0FBRUEsU0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUs7QUFDeEI7QUFFQSxTQUFTLGtCQUE0QjtBQUNuQyxRQUFNLEVBQUUsUUFBUSxJQUFJLGNBQWMsVUFBVSxZQUFZO0FBQ3hELFVBQVEsUUFBUSxTQUFTLENBQUMsR0FDdkIsT0FBTyxDQUFDLFNBQVMsNEJBQTRCLElBQUksSUFBSSxDQUFDLEVBQ3RELEtBQUs7QUFDVjtBQUVBLFNBQVMsNkJBQTZCLFFBQWlFO0FBQ3JHLFFBQU0sRUFBRSxnQkFBZ0IsaUJBQWlCLElBQUk7QUFDN0MsUUFBTSxFQUFFLFFBQVEsSUFBSSxjQUFjLFVBQVUsWUFBWTtBQUN4RCxRQUFNLFVBQVUsY0FBYztBQUFBLElBQzVCLFNBQVMsRUFBRSxHQUFHLFNBQVMsUUFBUSxLQUFLO0FBQUEsSUFDcEMsV0FBVyxpQkFBaUIsSUFBSSxDQUFDLFNBQVMsY0FBYyxVQUFVLEtBQUssSUFBSSxDQUFDO0FBQUEsRUFDOUUsQ0FBQztBQUNELFFBQU0sVUFBVSxRQUFRLGVBQWU7QUFDdkMsUUFBTSxtQkFBbUIsb0JBQUksSUFBb0I7QUFFakQsYUFBVyxRQUFRLGtCQUFrQjtBQU1uQyxRQUFTQSxTQUFULFNBQWUsTUFBa0I7QUFDL0IsVUFBSSxhQUFhLElBQUksS0FBSyxnQkFBZ0IsSUFBSSxHQUFHO0FBQy9DLGNBQU0sU0FBUyxRQUFRLG9CQUFvQixJQUFJO0FBQy9DLFlBQUksV0FBVyxRQUFXO0FBQ3hCLGdDQUFzQixFQUFFLE1BQU0sU0FBUyxRQUFRLGFBQWEsU0FBUyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDdkY7QUFBQSxNQUNGO0FBQ0EsbUJBQWEsTUFBTUEsTUFBSztBQUFBLElBQzFCO0FBUlMsZ0JBQUFBO0FBSlQsVUFBTSxhQUFhLGtCQUFrQixRQUFRLGNBQWMsY0FBYyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDOUYsVUFBTSxPQUFPLG9CQUFJLElBQVk7QUFDN0IsVUFBTSxRQUFRLG9CQUFJLElBQVk7QUFXOUIsSUFBQUEsT0FBTSxVQUFVO0FBRWhCLFVBQU0sY0FBYyxDQUFDLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxTQUFTLGVBQWUsU0FBUyxJQUFJLENBQUM7QUFDN0UsUUFBSSxLQUFLLE9BQU8sS0FBSyxZQUFZLFNBQVMsR0FBRztBQUMzQyx1QkFBaUI7QUFBQSxRQUNmO0FBQUEsU0FDQyxLQUFLLE9BQU8sSUFBSSwrQkFBK0IsQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLGlDQUFpQyxZQUFZLEtBQUssQ0FBQztBQUFBLE1BQy9IO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxlQUFlLGNBQWMsUUFBOEM7QUFDekUsUUFBTSxVQUFVLE1BQU0sYUFBYSxRQUFRLEVBQUUsZUFBZSxLQUFLLENBQUM7QUFDbEUsUUFBTSxhQUFhLE1BQU0sU0FBUyxTQUFTLENBQUMsV0FBVyxrQkFBa0IsUUFBUSxNQUFNLENBQUM7QUFDeEYsUUFBTSxRQUFRLFdBQVcsT0FBTyxDQUFDLFNBQVMsU0FBUyxNQUFTO0FBRTVELE1BQUksTUFBTSxXQUFXLEdBQUc7QUFDdEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFNBQVMsS0FBSyxRQUFRLFVBQVUsT0FBTyxHQUFHLEtBQUs7QUFDckQsU0FBTztBQUNUO0FBRUEsZUFBZSxjQUFpQztBQUM5QyxNQUFJLFFBQVEsTUFBTSxhQUFhLFVBQVUsS0FBSyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ2pFLFVBQVEsTUFBTSxJQUFJLENBQUMsU0FBUyxvQkFBb0IsS0FBSyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDMUUsU0FBTyxNQUFNO0FBQUEsSUFBTyxDQUFDLFNBQ25CLEtBQUssU0FBUyxVQUFVLFdBQVcsS0FBSyxDQUFDLEtBQUssU0FBUyxVQUFVLFlBQVksS0FBSyxDQUFDLEtBQUssU0FBUyxVQUFVLEtBQ3hHLENBQUMsS0FBSyxTQUFTLElBQUksVUFBVSxXQUFXLEdBQUc7QUFBQSxFQUNoRDtBQUNGO0FBRUEsZUFBZSxrQkFBa0IsUUFBZ0IsUUFBNkM7QUFDNUYsTUFBSSxvQkFBb0IsUUFBUSxNQUFNLEdBQUc7QUFDdkM7QUFBQSxFQUNGO0FBRUEsTUFBSTtBQUNKLE1BQUk7QUFDSixNQUFJLE9BQU8sWUFBWSxHQUFHO0FBQ3hCLFVBQU0sU0FBUyxNQUFNLGNBQWMsS0FBSyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQzVELFFBQUksV0FBVyx5QkFBNkI7QUFDMUM7QUFBQSxJQUNGO0FBQ0EsaUJBQWEsb0JBQW9CLEtBQUssT0FBTyxNQUFNLFVBQVUsT0FBTyxDQUFDO0FBQ3JFLFdBQU8sT0FBTztBQUFBLEVBQ2hCLE9BQU87QUFDTCxVQUFNLFlBQVksUUFBUSxPQUFPLElBQUk7QUFDckMsV0FBTyxTQUFTLE9BQU8sTUFBTSxTQUFTO0FBQ3RDLGlCQUFhLG9CQUFvQixPQUFPLElBQUk7QUFBQSxFQUM5QztBQUVBLFNBQU8sZ0JBQWdCLElBQUksV0FBVyxVQUFVO0FBQ2xEO0FBRUEsU0FBUyxpQkFBaUIsS0FBc0I7QUFDOUMsU0FBTyx5QkFBeUIsS0FBSyxDQUFDLFdBQVcsSUFBSSxXQUFXLE1BQU0sQ0FBQztBQUN6RTtBQUVBLFNBQVMsbUJBQW1CLE1BQXVCO0FBQ2pELFNBQU8sQ0FBQyxLQUFLLFNBQVMsVUFBVSxXQUFXLEtBQUssS0FBSyxTQUFTLFVBQVUsS0FBSyxTQUFTLGNBQWMsS0FBSyxTQUFTLFdBQVc7QUFDL0g7QUFFQSxTQUFTLG9CQUFvQixRQUFnQixRQUF5QjtBQUNwRSxRQUFNLGdCQUFtQyxDQUFDLFVBQVUsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsV0FBVztBQUNySCxRQUFNLGtCQUFrQixjQUFjLFNBQVMsT0FBTyxJQUFJLEtBQUssT0FBTyxLQUFLLFNBQVMsVUFBVSxZQUFZLEtBQUssT0FBTyxNQUFNLEdBQUcsRUFBRSxTQUFTLFVBQVUsS0FBSztBQUN6SixTQUFPLG1CQUFvQixPQUFPLE9BQU8sS0FBSyxtQkFBbUIsT0FBTyxJQUFJO0FBQzlFO0FBRUEsU0FBUyxhQUFhLFNBQXNCLFFBQTRCO0FBRXRFLFVBQVEsT0FBTyxRQUFRLFlBQVksV0FBVyxJQUFJLFNBQVMsUUFBUSxpQkFBaUIsTUFBTTtBQUM1RjtBQUVBLGVBQWUsVUFBVSxRQUF3QztBQUMvRCxRQUFNLEVBQUUsa0JBQWtCLFlBQVksaUJBQWlCLFVBQVUsSUFBSTtBQUNyRSxRQUFNLGFBQWEsV0FBVztBQUFBLElBQzVCLFNBQVM7QUFBQSxJQUNULFVBQVUsVUFBVTtBQUFBLElBQ3BCLGFBQWEsVUFBVTtBQUFBLEVBQ3pCLENBQUM7QUFDRCxRQUFNLGdCQUFnQixhQUFhLEdBQUcsVUFBVSxJQUFJLFVBQVUsR0FBRyxLQUFLO0FBQ3RFLFFBQU0sV0FBVyxXQUFXLEVBQUUsUUFBUSxVQUFVLEtBQUssWUFBWSxNQUFNLGFBQWEsVUFBVSxVQUFVLFVBQVUsVUFBVSxDQUFDO0FBQzdILFFBQU0sV0FBVyxXQUFXLEVBQUUsUUFBUSxVQUFVLEtBQUssWUFBWSxNQUFNLGFBQWEsVUFBVSxVQUFVLFVBQVUsVUFBVSxDQUFDO0FBQzdILFFBQU0saUJBQWlCLFFBQVEsUUFBUTtBQUN2QyxRQUFNLGlCQUFpQixRQUFRLFFBQVE7QUFFdkMsTUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUN4QztBQUFBLEVBQ0Y7QUFFQSxRQUFNLGNBQWMsV0FBVyxTQUFTLFVBQVUsS0FBSztBQUN2RCxRQUFNLFVBQVUsV0FBVyxFQUFFLFFBQVEsVUFBVSxLQUFLLFlBQVksTUFBTSxhQUFhLFVBQVUsU0FBUyxVQUFVLFNBQVMsQ0FBQztBQUMxSCxRQUFNLFVBQVUsV0FBVyxFQUFFLFFBQVEsVUFBVSxLQUFLLFlBQVksTUFBTSxhQUFhLFVBQVUsU0FBUyxVQUFVLFNBQVMsQ0FBQztBQUUxSCxNQUFJLGFBQWE7QUFDZixxQkFBaUIsYUFBYSxJQUFJO0FBQUEsTUFDaEMsUUFBUTtBQUFBLFFBQ04sT0FBTztBQUFBLE1BQ1Q7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNQLE9BQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0YsT0FBTztBQUNMLFVBQU0sYUFBYSxvQkFBb0IsS0FBSyxVQUFVLEtBQUssWUFBWSxhQUFhLFVBQVUsUUFBUSxVQUFVLE9BQU8sQ0FBQztBQUV4SCxxQkFBaUIsYUFBYSxJQUFJO0FBQUE7QUFBQTtBQUFBLE1BR2hDLEdBQUksb0JBQW9CLFVBQWEsRUFBRSxDQUFDLGVBQWUsR0FBRyxXQUFXO0FBQUEsTUFDckUsUUFBUTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLE1BQ1g7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxNQUNYO0FBQUE7QUFBQSxJQUVGO0FBQUEsRUFDRjtBQUVBLE1BQUksZUFBZSxVQUFVLGVBQXlCO0FBQ3BEO0FBQUEsRUFDRjtBQUVBLE1BQUksQ0FBQyxZQUFZO0FBQ2YsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBLGNBQ0ksRUFBRSxNQUFNLFVBQVUsT0FBTyxTQUFTLFlBQVksUUFBUSxFQUFFLElBQ3hELEVBQUUsTUFBTSxTQUFTLFlBQVksT0FBTyxHQUFHLFFBQVEsU0FBUyxZQUFZLE9BQU8sR0FBRyxNQUFNLFVBQVUsT0FBTyxTQUFTLFlBQVksUUFBUSxFQUFFO0FBQUEsSUFDMUk7QUFDQTtBQUFBLEVBQ0Y7QUFFQSxhQUFXLFFBQVEsTUFBTSxhQUFhLGNBQWMsR0FBRztBQUNyRCxRQUFJLENBQUMsS0FBSyxTQUFTLFVBQVUsYUFBYSxHQUFHO0FBQzNDO0FBQUEsSUFDRjtBQUNBLFVBQU0sT0FBTyxTQUFTLE1BQU0sVUFBVSxhQUFhO0FBQ25ELFVBQU0sd0JBQXdCLEtBQUssWUFBWSxJQUFJO0FBQ25ELFVBQU0sUUFBUSxTQUFTLHVCQUF1QixLQUFLLGdCQUFnQixPQUFPLFVBQVUsYUFBYSxDQUFDO0FBQ2xHLFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQSxjQUNJLEVBQUUsTUFBTSxVQUFVLE1BQU0sSUFDeEI7QUFBQSxRQUNBLE1BQU0sU0FBUyx1QkFBdUIsS0FBSyxnQkFBZ0IsT0FBTyxVQUFVLFlBQVksQ0FBQztBQUFBLFFBQ3pGLFFBQVEsU0FBUyx1QkFBdUIsS0FBSyxnQkFBZ0IsT0FBTyxVQUFVLFlBQVksQ0FBQztBQUFBLFFBQzNGLE1BQU07QUFBQSxRQUNOO0FBQUEsTUFDRjtBQUFBLElBQ0o7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLGFBQWEsU0FBeUI7QUFDN0MsTUFBSSxhQUFhLFdBQVc7QUFBQSxJQUMxQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0QsZUFBYSxXQUFXO0FBQUEsSUFDdEIsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLEVBQ2YsQ0FBQztBQU1ELGVBQWEsV0FBVztBQUFBLElBQ3RCLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxFQUNmLENBQUM7QUFDRCxTQUFPLFdBQVc7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0g7QUFFQSxTQUFTLFdBQVcsUUFBa0M7QUFDcEQsU0FBTyxvQkFBb0IsS0FBSyxVQUFVLFNBQVMsT0FBTyxRQUFRLE9BQU8sWUFBWSxPQUFPLElBQUksQ0FBQztBQUNuRztBQUVBLFNBQVMsVUFBVSxhQUE2QjtBQUc5QyxRQUFNLG1CQUFtQix3QkFBd0IsS0FBSyxXQUFXO0FBQ2pFLE1BQUksa0JBQWtCLFdBQVcsUUFBVztBQUUxQyxVQUFNLE1BQU0sT0FBTyxpQkFBaUIsT0FBTyxLQUFLLENBQUM7QUFDakQsVUFBTSxTQUFTLE9BQU8saUJBQWlCLE9BQU8sUUFBUSxDQUFDO0FBQ3ZELFlBQVEsV0FBVyxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxXQUFXLEtBQUssR0FBRyxDQUFDLElBQUksWUFBWTtBQUFBLEVBQzFGO0FBQ0EsU0FBTyxTQUFTLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxVQUFVLEVBQUUsRUFBRSxRQUFRLFlBQVksRUFBRTtBQUN6RjtBQUVBLFNBQVMsYUFBYSxTQUF5QjtBQUM3QyxRQUFNLGFBQWEsV0FBVztBQUFBLElBQzVCLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxFQUNmLENBQUM7QUFDRCxTQUFPLFdBQVc7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0g7QUFFQSxlQUFlLHdCQUF3QixRQUFnQixhQUF5QztBQUM5RixRQUFNLE1BQU0sUUFBUSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ3ZDLFFBQU0sVUFBVSxLQUFLLFFBQVEsVUFBVSxXQUFXLEdBQUcsV0FBVztBQUNsRTsiLCJuYW1lcyI6WyJ2aXNpdCJdfQ==
523
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWJyYXJ5LWJ1aWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgYnVpbGQgcGlwZWxpbmUgb2YgYSBUeXBlU2NyaXB0IExJQlJBUlkgcGFja2FnZTogb25lIGBkaXN0L2xpYi97Y2pzLGVzbX1gIHRyZWUgb2YgdW5idW5kbGVkIG1vZHVsZXMgYmVzaWRlIGl0c1xuICogYC5kLmN0c2AgLyBgLmQubXRzYCBkZWNsYXJhdGlvbnMsIHRoZSBnZW5lcmF0ZWQgYGluZGV4LnRzYCBiYXJyZWxzLCBhbmQgdGhlIGdlbmVyYXRlZCBgcGFja2FnZS5qc29uYCBgZXhwb3J0c2AgbWFwLlxuICpcbiAqIEVhY2ggc3RlcCB3b3JrcyBvbiB0aGUgY3VycmVudCB3b3JraW5nIGZvbGRlciwgd2hpY2ggaXMgdGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQuIEEgcmVwb3NpdG9yeSdzXG4gKiBgc2NyaXB0cy9idWlsZC0qLnRzYCBlbnRyeSBwb2ludHMgYXJlIHRoaW4gYHdyYXBDbGlUYXNrYCB3cmFwcGVycyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaXRzIGBidWlsZGAgc2NyaXB0XG4gKiBydW5zIHRoZW0gaW4gb3JkZXIgdGhyb3VnaCB7QGxpbmsgcnVuQnVpbGRTdGVwc30uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBCdWlsZE9wdGlvbnMsXG4gIFBsdWdpblxufSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB0eXBlIHsgRGlyZW50IH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFN5bWJvbCBhcyBUc1N5bWJvbCxcbiAgVHlwZUNoZWNrZXJcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IGFzeW5jTWFwIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGlzRGVlcEVxdWFsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgbm9ybWFsaXplSWZSZWxhdGl2ZSxcbiAgcmVsYXRpdmVcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgcmVsYXRpdmUgYXMgcmVsYXRpdmVOYXRpdmUsXG4gIHJlc29sdmUgYXMgcmVzb2x2ZU5hdGl2ZVxufSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2dyYW0sXG4gIGZvckVhY2hDaGlsZCxcbiAgaXNJZGVudGlmaWVyLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIFN5bWJvbEZsYWdzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgdHlwZSB7IFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuXG5pbXBvcnQgeyBidWlsZENsZWFuIH0gZnJvbSAnLi9idWlsZC50cyc7XG5pbXBvcnQgeyBjaGFuZ2VFeHRlbnNpb25QbHVnaW4gfSBmcm9tICcuL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9jaGFuZ2UtZXh0ZW5zaW9uLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBmaXhFc21QbHVnaW4gfSBmcm9tICcuL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9maXgtZXNtLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBwcmVwcm9jZXNzUGx1Z2luIH0gZnJvbSAnLi9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMnO1xuaW1wb3J0IHsgcGFyc2VUc0NvbmZpZyB9IGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4vY29kZS1nZW5lcmF0b3IudHMnO1xuaW1wb3J0IHsgcmVhZGRpclBvc2l4IH0gZnJvbSAnLi9mcy50cyc7XG5pbXBvcnQgeyB3cml0ZUpzb24gfSBmcm9tICcuL2pzb24udHMnO1xuaW1wb3J0IHsgbnBtUnVuT3B0aW9uYWwgfSBmcm9tICcuL25wbS1ydW4udHMnO1xuaW1wb3J0IHsgZWRpdFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGV4ZWNGcm9tUm9vdCB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogVGhlIGJhbm5lciBldmVyeSBlbWl0dGVkIGxpYnJhcnkgbW9kdWxlIG9wZW5zIHdpdGguXG4gKi9cbmV4cG9ydCBjb25zdCBMSUJSQVJZX0JBTk5FUiA9IGAvKlxuVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgRVNCVUlMRFxuaWYgeW91IHdhbnQgdG8gdmlldyB0aGUgc291cmNlLCBwbGVhc2UgdmlzaXQgdGhlIGdpdGh1YiByZXBvc2l0b3J5IG9mIHRoaXMgcGx1Z2luXG4qL1xuYDtcblxuLyoqXG4gKiBUaGUgc3RlcHMgb2YgYSBsaWJyYXJ5IGJ1aWxkLCBpbiB0aGUgb3JkZXIge0BsaW5rIHJ1bkJ1aWxkU3RlcHN9IHJ1bnMgdGhlbS5cbiAqL1xuZXhwb3J0IGNvbnN0IExJQlJBUllfQlVJTERfU1RFUFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnYnVpbGQ6Y2xlYW4nLFxuICAnYnVpbGQ6Z2VuZXJhdGUtaW5kZXgnLFxuICAnYnVpbGQ6Y29tcGlsZScsXG4gICdidWlsZDp0eXBlcycsXG4gICdidWlsZDp2YWxpZGF0ZS1kZWNsYXJhdGlvbnMnLFxuICAnYnVpbGQ6bGliJyxcbiAgJ2J1aWxkOmdlbmVyYXRlLWV4cG9ydHMnXG5dO1xuXG4vKipcbiAqIFRoZSBleHBvcnQgY29uZGl0aW9uIGEgcmVwb3NpdG9yeSBob2xkaW5nIHNldmVyYWwgcGFja2FnZXMgbWFwcyBldmVyeSBzdWJwYXRoIG9udG8gaXRzIFR5cGVTY3JpcHQgc291cmNlIHdpdGgsIHNvXG4gKiBhIHBhY2thZ2UgdGhlcmUgY2FuIGltcG9ydCBhIHNpYmxpbmcgcGFja2FnZSdzIHNvdXJjZSBiZWZvcmUgYW55dGhpbmcgaXMgYnVpbHQuIFBhc3MgaXQgdG9cbiAqIHtAbGluayBnZW5lcmF0ZUxpYnJhcnlFeHBvcnRzfSB0aHJvdWdoIHtAbGluayBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucy5zb3VyY2VDb25kaXRpb259LlxuICovXG5leHBvcnQgY29uc3QgU09VUkNFX0NPTkRJVElPTiA9ICdAbW5hb3Vtb3Yvc291cmNlJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgYnVpbGRMaWJyYXJ5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZExpYnJhcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHByZXByb2Nlc3MgcGx1Z2luIGZvciBvbmUgb3V0cHV0IGZvcm1hdC4gRGVmYXVsdHMgdG8gdGhlIGdlbmVyaWMgb25lLCB3aGljaCBjYXJyaWVzIG5vXG4gICAqIGVudmlyb25tZW50LXNwZWNpZmljIGByZXF1aXJlYCBwYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5PzogKGlzRXNtOiBib29sZWFuKSA9PiBQbHVnaW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdlbmVyYXRlTGlicmFyeUV4cG9ydHN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlTGlicmFyeUV4cG9ydHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIGV4cG9ydCBjb25kaXRpb24gdG8gcHV0IGZpcnN0IGluIGV2ZXJ5IGVudHJ5LCBtYXBwaW5nIHRoZSBzdWJwYXRoIG9udG8gaXRzIFR5cGVTY3JpcHQgc291cmNlLiBPbmx5IGFcbiAgICogcmVwb3NpdG9yeSBob2xkaW5nIHNldmVyYWwgcGFja2FnZXMgdGhhdCBpbXBvcnQgZWFjaCBvdGhlciBuZWVkcyBvbmU7IG5vdGhpbmcgb3V0c2lkZSBpdCBzZXRzIHRoZSBjb25kaXRpb24sIGFuZFxuICAgKiB0aGUgc291cmNlcyBpdCBwb2ludHMgYXQgZG8gbm90IHNoaXAsIHNvIHRoZSBwdWJsaXNoIGhhcyB0byBzdHJpcCBpdCBhZ2Fpbi4gT21pdHRlZCwgdGhlIG1hcCBoYXMgbm9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZUNvbmRpdGlvbj86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxudHlwZSBNb2R1bGVGb3JtYXQgPSAnY2pzJyB8ICdlc20nO1xuXG5jb25zdCBERUNMQVJBVElPTl9SRUZFUkVOQ0VfVFlQRVMgPSBuZXcgU2V0KFsnbm9kZSddKTtcblxuLy8gVGhlIGxpYnMgdGhhdCBkZXNjcmliZSBhIGhvc3QncyBnbG9iYWxzIHJhdGhlciB0aGFuIHRoZSBsYW5ndWFnZSwgd2hpY2ggY29uc3VtZXJzIGNvbmZsaWN0IG92ZXIuIEVhY2ggZGVjbGFyYXRpb25cbi8vIGdldHMgdGhlIG9uZXMgaXQgdXNlczsgZXZlcnkgb3RoZXIgbGliIGlzIHNoYXJlZCB0aHJvdWdoIGBsaWJyYXJ5LXJlZmVyZW5jZXNgLlxuY29uc3QgRU5WSVJPTk1FTlRfTElCX1BSRUZJWEVTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnZG9tJywgJ3NjcmlwdGhvc3QnLCAnd2Vid29ya2VyJ107XG5jb25zdCBOT0RFX1RZUEVTX1BBVEhfU0VHTUVOVCA9ICcvbm9kZV9tb2R1bGVzL0B0eXBlcy9ub2RlLyc7XG5jb25zdCBMSUJfUkVQTEFDRU1FTlRfUkVHX0VYUCA9IC9cXC9ub2RlX21vZHVsZXNcXC9AdHlwZXNjcmlwdFxcL2xpYi0oPzxMaWI+W14vXSspXFwvKD88U3ViTGliPi4rKVxcLmRcXC50cyQvO1xuXG4vLyBUaGUgZGVjbGFyYXRpb24gdGhhdCBjYXJyaWVzIG9ubHkgdGhlIGBsaWJgIGFuZCBgdHlwZXNgIHJlZmVyZW5jZXMuIEV2ZXJ5IGRlY2xhcmF0aW9uIGJ1dCB0aGUgcm9vdCBvbmUgcmVmZXJlbmNlc1xuLy8gaXQsIHJhdGhlciB0aGFuIHRoZSByb290IGJhcnJlbCwgd2hpY2ggd291bGQgbG9hZCBldmVyeSBtb2R1bGUgb2YgdGhlIHBhY2thZ2UsIG9wdGlvbmFsIHBlZXJzJyB0eXBlcyBpbmNsdWRlZC5cbmNvbnN0IExJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUUgPSAnbGlicmFyeS1yZWZlcmVuY2VzJztcbi8vIFNwZWxsZWQgYXBhcnQgb24gcHVycG9zZToge0BsaW5rIGNvbGxlY3RBbGxMaWJzfSBzY2FucyBldmVyeSBzb3VyY2UgZmlsZSBvZiB0aGUgcGFja2FnZSBiZWluZyBidWlsdCBmb3IgdGhlXG4vLyBkaXJlY3RpdmUsIHRoaXMgb25lIGluY2x1ZGVkLCBzbyBhIGxpdGVyYWwgb25lIGhlcmUgd291bGQgYmUgcmVhZCBhcyBhIGxpYiB0aGlzIHBhY2thZ2UgbmVlZHMuXG5jb25zdCBSRUZFUkVOQ0VfTElCX0RJUkVDVElWRSA9IFsnPHJlZmVyZW5jZScsICdsaWI9J10uam9pbignICcpO1xuY29uc3QgUkVGRVJFTkNFX0xJQl9SRUdfRVhQID0gL1xcL1xcL1xcLyA8cmVmZXJlbmNlIGxpYj1cIig/PExpYj5bXlwiXSspXCIgXFwvPi9nbTtcblxuLy8gQSBiYXJlLXNwZWNpZmllciAobm9uLXJlbGF0aXZlKSB0eXBlLW9ubHkgaW1wb3J0LCBlLmcuIGBpbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO2AuXG5jb25zdCBCQVJFX1RZUEVfSU1QT1JUX1JFR19FWFAgPSAvXmltcG9ydCB0eXBlICg/PENsYXVzZT4uKz8pIGZyb20gJyg/PFNwZWNpZmllcj5bXi4nXVteJ10qKSc7JC9nbTtcblxuLy8gQSBiYXJlLXNwZWNpZmllciAobm9uLXJlbGF0aXZlKSBpbmxpbmUgaW1wb3J0IHR5cGUgbm9kZSwgZS5nLiBgaW1wb3J0KFwidHlwZS1mZXN0XCIpLlByb21pc2FibGVgLlxuY29uc3QgQkFSRV9JTkxJTkVfSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9pbXBvcnRcXChcIig/PFNwZWNpZmllcj5bXi5cIl1bXlwiXSopXCJcXCkvZztcblxuY29uc3QgU1RBVElDX0lNUE9SVF9SRUdfRVhQID0gL2Zyb20gJyg/PEltcG9ydFBhdGg+Lis/KVxcLnRzJzsvZ207XG5cbi8vIElubGluZSBpbXBvcnQtdHlwZSBub2RlcyAoYHR5cGVvZiBpbXBvcnQoJy4vZm9vLnRzJylgKSBwcmVzZXJ2ZSB0aGUgc291cmNlIHF1b3RlIHN0eWxlLlxuLy8gSGFuZC1hdXRob3JlZCBgLmQudHNgIGZpbGVzIGVtaXQgc2luZ2xlIHF1b3RlczsgdHNjLWdlbmVyYXRlZCBkZWNsYXJhdGlvbnMgZW1pdCBkb3VibGUgcXVvdGVzLlxuLy8gQ2FwdHVyZSB0aGUgcXVvdGUgYW5kIHJldXNlIGl0IGluIHRoZSByZXBsYWNlbWVudCBzbyBib3RoIHN0eWxlcyBhcmUgcmV3cml0dGVuLlxuY29uc3QgRFlOQU1JQ19JTVBPUlRfUkVHX0VYUCA9IC9pbXBvcnRcXCgoPzxRdW90ZT5bJ1wiXSkoPzxJbXBvcnRQYXRoPi4rPylcXC50c1xcazxRdW90ZT5cXCkvZ207XG5cbmVudW0gR2VuZXJhdGVJbmRleFJlc3VsdCB7XG4gIFNraXBwZWQgPSAnc2tpcHBlZCcsXG4gIFN1Y2Nlc3MgPSAnc3VjY2Vzcydcbn1cblxuaW50ZXJmYWNlIEFkZEVudmlyb25tZW50R2xvYmFsc1BhcmFtcyB7XG4gIHJlYWRvbmx5IGxpYnM6IFNldDxzdHJpbmc+O1xuICByZWFkb25seSBwcm9ncmFtOiBQcm9ncmFtO1xuICByZWFkb25seSBzeW1ib2w6IFRzU3ltYm9sO1xuICByZWFkb25seSB0eXBlczogU2V0PHN0cmluZz47XG59XG5cbmludGVyZmFjZSBCdWlsZExpYnJhcnlGb3JtYXRQYXJhbXMge1xuICByZWFkb25seSBmb3JtYXQ6IE1vZHVsZUZvcm1hdDtcbiAgcmVhZG9ubHkgbGliRmlsZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeTogKGlzRXNtOiBib29sZWFuKSA9PiBQbHVnaW47XG59XG5cbmludGVyZmFjZSBCdWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmVQYXJhbXMge1xuICByZWFkb25seSBkZWNsYXJhdGlvbkZpbGVQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4dGVuc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBtb2R1bGVEaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbGxlY3RFbnZpcm9ubWVudERpcmVjdGl2ZXNQYXJhbXMge1xuICByZWFkb25seSBhdmFpbGFibGVUeXBlczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGRlY2xhcmF0aW9uRmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgU2V0RXhwb3J0UGFyYW1zIHtcbiAgcmVhZG9ubHkgZXhwb3J0Q29uZGl0aW9uczogUGFja2FnZUpzb24uRXhwb3J0Q29uZGl0aW9ucztcbiAgcmVhZG9ubHkgaXNXaWxkY2FyZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc291cmNlQ29uZGl0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHNyY0ZvbGRlcjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVG9EaXN0UGF0aFBhcmFtcyB7XG4gIHJlYWRvbmx5IGZvcm1hdDogc3RyaW5nO1xuICByZWFkb25seSBpbXBvcnRQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgYW4gZWFybGllciBidWlsZCBsZWZ0OiBgZGlzdC9gLCB0aGUgZ2VuZXJhdGVkIGBpbmRleC50c2AgYmFycmVscywgdGhlIGAuZC50c2AgZmlsZXMgYHRzY2Agd3JvdGVcbiAqIGJlc2lkZSB0aGUgc291cmNlcyAoaGFuZC1hdXRob3JlZCBvbmVzIHVuZGVyIGBAdHlwZXNgIHN0YXkpLCBhbmQgdGhlIHBlci1zdWJwYXRoIGBwYWNrYWdlLmpzb25gIHN0dWJzLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBldmVyeXRoaW5nIGhhcyBiZWVuIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENsZWFuTGlicmFyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRDbGVhbigpO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KFJlcG9QYXRocy5TcmMsIHsgcmVjdXJzaXZlOiB0cnVlIH0pKSB7XG4gICAgaWYgKGJhc2VuYW1lKGZpbGUpID09PSBSZXBvUGF0aHMuSW5kZXhUcyBhcyBzdHJpbmcpIHtcbiAgICAgIGF3YWl0IHJtKGpvaW4oUmVwb1BhdGhzLlNyYywgZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5EdHNFeHRlbnNpb24pICYmICFmaWxlLnNwbGl0KCcvJykuaW5jbHVkZXMoUmVwb1BhdGhzLlR5cGVzKSkge1xuICAgICAgYXdhaXQgcm0oam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuQ3VycmVudEZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSkpIHtcbiAgICBpZiAoKGJhc2VuYW1lKGZpbGUpICE9PSBSZXBvUGF0aHMuUGFja2FnZUpzb24gYXMgc3RyaW5nKSB8fCAoZmlsZSA9PT0gUmVwb1BhdGhzLlBhY2thZ2VKc29uIGFzIHN0cmluZykgfHwgZmlsZS5zdGFydHNXaXRoKFJlcG9QYXRocy5Ob2RlTW9kdWxlcykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGF3YWl0IHJtKGZpbGUpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGV2ZXJ5IHNvdXJjZSBtb2R1bGUsIHVuYnVuZGxlZCwgaW50byBgZGlzdC9saWIvY2pzYCAoYC5janNgKSBhbmQgYGRpc3QvbGliL2VzbWAgKGAubWpzYCkuXG4gKlxuICogVGhlIG91dHB1dCBmb2xkZXJzIG11c3QgYWxyZWFkeSBleGlzdDsge0BsaW5rIGJ1aWxkTGlicmFyeVR5cGVzfSBjcmVhdGVzIHRoZW0uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgYnVpbGQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBib3RoIGZvcm1hdHMgaGF2ZSBiZWVuIGJ1aWx0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRMaWJyYXJ5KG9wdGlvbnM6IEJ1aWxkTGlicmFyeU9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5ID0gKGlzRXNtOiBib29sZWFuKTogUGx1Z2luID0+IHByZXByb2Nlc3NQbHVnaW4oeyBpc0VzbSB9KSB9ID0gb3B0aW9ucztcbiAgY29uc3QgbGliRmlsZXMgPSBhd2FpdCBnZXRMaWJGaWxlcygpO1xuICBhd2FpdCBidWlsZExpYnJhcnlGb3JtYXQoeyBmb3JtYXQ6ICdjanMnLCBsaWJGaWxlcywgcHJlcHJvY2Vzc1BsdWdpbkZhY3RvcnkgfSk7XG4gIGF3YWl0IGJ1aWxkTGlicmFyeUZvcm1hdCh7IGZvcm1hdDogJ2VzbScsIGxpYkZpbGVzLCBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeSB9KTtcbn1cblxuLyoqXG4gKiBFbWl0cyB0aGUgZGVjbGFyYXRpb25zIHdpdGggYHRzYyAtLXByb2plY3QgLi90c2NvbmZpZy50eXBlcy5qc29uYCwgdGhlbiBjb3BpZXMgZWFjaCBvbmUgaW50byBgZGlzdC9saWJgIHR3aWNlOiBhcyBhXG4gKiBgLmQuY3RzYCB3aG9zZSByZWxhdGl2ZSBpbXBvcnRzIG5hbWUgYC5janNgIGZpbGVzIGFuZCB3aG9zZSBiYXJlIHR5cGUgaW1wb3J0cyBjYXJyeSBgcmVzb2x1dGlvbi1tb2RlOiBpbXBvcnRgLCBhbmRcbiAqIGFzIGEgYC5kLm10c2Agd2hvc2UgcmVsYXRpdmUgaW1wb3J0cyBuYW1lIGAubWpzYCBmaWxlcy5cbiAqXG4gKiBUaGUgbGlicmFyeSdzIHJvb3QgZGVjbGFyYXRpb24gKGBsaWJyYXJ5LnRzYCB3aGVyZSB0aGUgcGFja2FnZSBoYXMgb25lLCBvdGhlcndpc2UgdGhlIGdlbmVyYXRlZCBgaW5kZXgudHNgKSBjYXJyaWVzXG4gKiBldmVyeSBgbGliYCBhbmQgYHR5cGVzYCByZWZlcmVuY2UgdGhlIHBhY2thZ2UgbmVlZHMuIEV2ZXJ5IG90aGVyIGRlY2xhcmF0aW9uIHJlZmVyZW5jZXMgYSBgbGlicmFyeS1yZWZlcmVuY2VzYFxuICogZGVjbGFyYXRpb24gYmVzaWRlIGl0IGJ5IHBhdGgsIG5ldmVyIHRoZSByb290OiB0aGUgcm9vdCBiYXJyZWwgcmUtZXhwb3J0cyBldmVyeSBtb2R1bGUsIHNvIHJlZmVyZW5jaW5nIGl0IG1hZGUgZWFjaFxuICogc3VicGF0aCBsb2FkIHRoZSB3aG9sZSBwYWNrYWdlLCBhbmQgYSBjb25zdW1lciB0eXBlLWNoZWNraW5nIHdpdGggYHNraXBMaWJDaGVjazogZmFsc2VgIHRoZW4gbmVlZGVkIGV2ZXJ5IG9wdGlvbmFsXG4gKiBwZWVyIGluc3RhbGxlZC5cbiAqXG4gKiBgbGlicmFyeS1yZWZlcmVuY2VzYCBjYXJyaWVzIG9ubHkgdGhlIGxpYnMgdGhhdCBkZXNjcmliZSB0aGUgbGFuZ3VhZ2UgKGBlczIwMjJgLCBgZXNuZXh0LmRpc3Bvc2FibGVgKSwgd2hpY2ggbm9cbiAqIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoLiBUaGUgb25lcyB0aGF0IGRlc2NyaWJlIGEgaG9zdCAoYGRvbWAsIGBkb20uaXRlcmFibGVgLCBgd2Vid29ya2VyYCkgYW5kIGB0eXBlcz1cIm5vZGVcImAgZ29cbiAqIG9ubHkgaW50byB0aGUgZGVjbGFyYXRpb25zIHRoYXQgbmFtZSBvbmUgb2YgdGhlaXIgZ2xvYmFscywgZm91bmQgYnkgcmVzb2x2aW5nIGV2ZXJ5IG5hbWUgaW4gdGhlIGVtaXR0ZWRcbiAqIGRlY2xhcmF0aW9ucyB3aXRoIHRoZSB0eXBlIGNoZWNrZXIuIE90aGVyd2lzZSBhIGJyb3dzZXIgY29uc3VtZXIgb2YgYSBwdXJlIHN1YnBhdGggZ290IGFsbCBvZiBgQHR5cGVzL25vZGVgLCBhbmQgaXRzXG4gKiBgc2V0VGltZW91dGAgcmV0dXJuZWQgYE5vZGVKUy5UaW1lb3V0YC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRlY2xhcmF0aW9ucyBoYXZlIGJlZW4gd3JpdHRlbi5cbiAqIEB0aHJvd3MgSWYgYSBzb3VyY2UgbW9kdWxlIGlzIG5hbWVkIGBsaWJyYXJ5LXJlZmVyZW5jZXNgLCB3aGljaCB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIGdlbmVyYXRlZCBkZWNsYXJhdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkTGlicmFyeVR5cGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoZXhpc3RzU3luYyhqb2luKFJlcG9QYXRocy5TcmMsIGAke0xJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUV9JHtSZXBvUGF0aHMuVHNFeHRlbnNpb259YCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzcmMvJHtMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FfSR7UmVwb1BhdGhzLlRzRXh0ZW5zaW9ufSBjb2xsaWRlcyB3aXRoIHRoZSBnZW5lcmF0ZWQgZGVjbGFyYXRpb24gb2YgdGhlIHNhbWUgbmFtZS5gKTtcbiAgfVxuXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ3RzYycgfSksICctLXByb2plY3QnLCAnLi90c2NvbmZpZy50eXBlcy5qc29uJ10pO1xuXG4gIGNvbnN0IGxpYnJhcnlGaWxlTmFtZSA9IGV4aXN0c1N5bmMoam9pbihSZXBvUGF0aHMuU3JjLCAnbGlicmFyeS50cycpKSA/ICdsaWJyYXJ5JyA6ICdpbmRleCc7XG4gIGNvbnN0IGFsbExpYnMgPSBhd2FpdCBjb2xsZWN0QWxsTGlicygpO1xuICBjb25zdCBhbGxUeXBlcyA9IGNvbGxlY3RBbGxUeXBlcygpO1xuICBjb25zdCBkaXJlY3RpdmVzID0gYnVpbGRBbGxSZWZlcmVuY2VMaWJEaXJlY3RpdmVzKGFsbExpYnMpICsgYnVpbGRBbGxSZWZlcmVuY2VUeXBlc0RpcmVjdGl2ZXMoYWxsVHlwZXMpO1xuICAvLyBPbmx5IHRoZSBsaWJzIG5vIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoLiBUaGUgZW52aXJvbm1lbnQgZ2xvYmFscyBnbyB0byB0aGUgZGVjbGFyYXRpb25zIHRoYXQgdXNlIHRoZW0uXG4gIGNvbnN0IHNoYXJlZERpcmVjdGl2ZXMgPSBidWlsZEFsbFJlZmVyZW5jZUxpYkRpcmVjdGl2ZXMoYWxsTGlicy5maWx0ZXIoKGxpYikgPT4gIWlzRW52aXJvbm1lbnRMaWIobGliKSkpO1xuXG4gIGF3YWl0IG1rZGlyKGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5DanMpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgbWtkaXIoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkVzbSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkNqcywgTElCUkFSWV9SRUZFUkVOQ0VTX0ZJTEVfTkFNRSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSwgc2hhcmVkRGlyZWN0aXZlcyk7XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKFJlcG9QYXRocy5EaXN0TGliLCBSZXBvUGF0aHMuRXNtLCBMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FICsgUmVwb1BhdGhzLkRtdHNFeHRlbnNpb24pLCBzaGFyZWREaXJlY3RpdmVzKTtcblxuICBjb25zdCBzcmNGaWxlcyA9IGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgZGVjbGFyYXRpb25GaWxlcyA9IHNyY0ZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aChSZXBvUGF0aHMuRHRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5zdGFydHNXaXRoKFJlcG9QYXRocy5UZXN0SGVscGVycykpO1xuICBjb25zdCBlbnZpcm9ubWVudERpcmVjdGl2ZXMgPSBjb2xsZWN0RW52aXJvbm1lbnREaXJlY3RpdmVzKHsgYXZhaWxhYmxlVHlwZXM6IGFsbFR5cGVzLCBkZWNsYXJhdGlvbkZpbGVzIH0pO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBkZWNsYXJhdGlvbkZpbGVzKSB7XG4gICAgY29uc3QgZm9sZGVyID0gZGlybmFtZShmaWxlKTtcbiAgICBjb25zdCBuYW1lID0gYmFzZW5hbWUoZmlsZSwgUmVwb1BhdGhzLkR0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oUmVwb1BhdGhzLlNyYywgZmlsZSksICd1dGYtOCcpO1xuXG4gICAgY29uc3QgY3RzUGF0aCA9IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5DanMsIGZvbGRlciwgbmFtZSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKTtcbiAgICBjb25zdCBtdHNQYXRoID0gam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkVzbSwgZm9sZGVyLCBuYW1lICsgUmVwb1BhdGhzLkRtdHNFeHRlbnNpb24pO1xuXG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShjdHNQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShtdHNQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBsZXQgY3RzQ29udGVudCA9IHRvQ3RzQ29udGVudChjb250ZW50KTtcbiAgICBsZXQgbXRzQ29udGVudCA9IHRvTXRzQ29udGVudChjb250ZW50KTtcblxuICAgIGlmIChuYW1lID09PSBsaWJyYXJ5RmlsZU5hbWUgJiYgZm9sZGVyID09PSAnLicpIHtcbiAgICAgIGN0c0NvbnRlbnQgPSBkaXJlY3RpdmVzICsgY3RzQ29udGVudDtcbiAgICAgIG10c0NvbnRlbnQgPSBkaXJlY3RpdmVzICsgbXRzQ29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlsZURpcmVjdGl2ZXMgPSBlbnZpcm9ubWVudERpcmVjdGl2ZXMuZ2V0KGZpbGUpID8/ICcnO1xuICAgICAgY3RzQ29udGVudCA9IGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZSh7IGRlY2xhcmF0aW9uRmlsZVBhdGg6IGN0c1BhdGgsIGV4dGVuc2lvbjogUmVwb1BhdGhzLkRjdHNFeHRlbnNpb24sIG1vZHVsZURpcmVjdG9yeTogUmVwb1BhdGhzLkNqcyB9KVxuICAgICAgICArIGZpbGVEaXJlY3RpdmVzICsgY3RzQ29udGVudDtcbiAgICAgIG10c0NvbnRlbnQgPSBidWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmUoeyBkZWNsYXJhdGlvbkZpbGVQYXRoOiBtdHNQYXRoLCBleHRlbnNpb246IFJlcG9QYXRocy5EbXRzRXh0ZW5zaW9uLCBtb2R1bGVEaXJlY3Rvcnk6IFJlcG9QYXRocy5Fc20gfSlcbiAgICAgICAgKyBmaWxlRGlyZWN0aXZlcyArIG10c0NvbnRlbnQ7XG4gICAgfVxuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGN0c1BhdGgsIGN0c0NvbnRlbnQpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShtdHNQYXRoLCBtdHNDb250ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2VuZXJhdGVzIHRoZSBgZXhwb3J0c2AgbWFwIG9mIHRoZSBwYWNrYWdlJ3MgYHBhY2thZ2UuanNvbmAgZnJvbSBpdHMgc291cmNlIGZvbGRlcnMsIGFuZCB3cml0ZXMgYSBgcGFja2FnZS5qc29uYFxuICogc3R1YiBwZXIgc3VicGF0aCBmb3IgcmVzb2x2ZXJzIHRoYXQgZG8gbm90IHJlYWQgYGV4cG9ydHNgLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1hcCBpcyBjdXJyZW50LlxuICogQHRocm93cyBJZiB0aGUgbWFwIGNoYW5nZWQsIHNvIHRoZSBjaGFuZ2UgZ2V0cyByZXZpZXdlZCBhbmQgY29tbWl0dGVkIHJhdGhlciB0aGFuIHNoaXBwZWQgdW5zZWVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVMaWJyYXJ5RXhwb3J0cyhvcHRpb25zOiBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgc291cmNlQ29uZGl0aW9uIH0gPSBvcHRpb25zO1xuICBjb25zdCBzcmNGb2xkZXJzOiBzdHJpbmdbXSA9IFtSZXBvUGF0aHMuU3JjXTtcblxuICBmb3IgKGNvbnN0IGRpcmVudCBvZiBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUsIHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICBpZiAoIWRpcmVudC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gam9pbihkaXJlbnQucGFyZW50UGF0aCwgZGlyZW50Lm5hbWUpO1xuXG4gICAgaWYgKHBhdGguaW5jbHVkZXMoUmVwb1BhdGhzLlN0eWxlcykgfHwgcGF0aC5pbmNsdWRlcyhSZXBvUGF0aHMuVGVzdEhlbHBlcnMpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBzcmNGb2xkZXJzLnB1c2gocGF0aCk7XG4gIH1cblxuICBzcmNGb2xkZXJzLnNvcnQoKTtcblxuICBsZXQgaXNDaGFuZ2VkID0gZmFsc2U7XG5cbiAgYXdhaXQgZWRpdFBhY2thZ2VKc29uKGFzeW5jIChwYWNrYWdlSnNvbikgPT4ge1xuICAgIGNvbnN0IG9sZEV4cG9ydHMgPSBwYWNrYWdlSnNvbi5leHBvcnRzO1xuICAgIGNvbnN0IGV4cG9ydENvbmRpdGlvbnM6IFBhY2thZ2VKc29uLkV4cG9ydENvbmRpdGlvbnMgPSB7fTtcbiAgICBwYWNrYWdlSnNvbi5leHBvcnRzID0gZXhwb3J0Q29uZGl0aW9ucztcbiAgICBmb3IgKGNvbnN0IHNyY0ZvbGRlciBvZiBzcmNGb2xkZXJzKSB7XG4gICAgICBhd2FpdCBzZXRFeHBvcnQoeyBleHBvcnRDb25kaXRpb25zLCBpc1dpbGRjYXJkOiBmYWxzZSwgc291cmNlQ29uZGl0aW9uLCBzcmNGb2xkZXIgfSk7XG4gICAgICBhd2FpdCBzZXRFeHBvcnQoeyBleHBvcnRDb25kaXRpb25zLCBpc1dpbGRjYXJkOiB0cnVlLCBzb3VyY2VDb25kaXRpb24sIHNyY0ZvbGRlciB9KTtcbiAgICB9XG5cbiAgICBpc0NoYW5nZWQgPSAhaXNEZWVwRXF1YWwob2xkRXhwb3J0cywgcGFja2FnZUpzb24uZXhwb3J0cyk7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IGNoYW5nZWQgaW4gdGhlIGBlZGl0UGFja2FnZUpzb25gLCBFU0xpbnQgbWlzdGFrZW5seSBkb2VzIG5vdCByZWNvZ25pemUgaXQuXG4gIGlmIChpc0NoYW5nZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhY2thZ2UgZXhwb3J0cyBoYXZlIGNoYW5nZWQuIFBsZWFzZSByZXZpZXcgdGhlIGNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLicpO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGBpbmRleC50c2AgYmFycmVsIGluIGV2ZXJ5IHNvdXJjZSBmb2xkZXIgdGhhdCBoYXMgc29tZXRoaW5nIHRvIGV4cG9ydCwgcmUtZXhwb3J0aW5nIGVhY2ggbW9kdWxlIGFuZFxuICogZWFjaCBzdWItYmFycmVsIHVuZGVyIGl0cyBvd24gbmFtZS5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGJhcnJlbHMgaGF2ZSBiZWVuIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUxpYnJhcnlJbmRleCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2VuZXJhdGVJbmRleChSZXBvUGF0aHMuU3JjKTtcbn1cblxuLyoqXG4gKiBSdW5zIGVhY2ggbmFtZWQgbnBtIHNjcmlwdCB0aGUgcGFja2FnZSBkZWZpbmVzLCBpbiBvcmRlciwgc2tpcHBpbmcgdGhlIG9uZXMgaXQgZG9lcyBub3QgZGVmaW5lLlxuICpcbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBucG0gc2NyaXB0IG5hbWVzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGV2ZXJ5IHN0ZXAgaGFzIHJ1bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHMoc3RlcHM6IHJlYWRvbmx5IHN0cmluZ1tdID0gTElCUkFSWV9CVUlMRF9TVEVQUyk6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcHMpIHtcbiAgICBhd2FpdCBucG1SdW5PcHRpb25hbChzdGVwKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgd2hhdCBhIGNvbnN1bWVyIG5lZWRzIGxvYWRlZCBmb3Igb25lIHN5bWJvbCBhIGRlY2xhcmF0aW9uIG5hbWVzLiBBIHN5bWJvbCBhbnkgRVMgbGliIGRlY2xhcmVzIG5lZWRzIG5vdGhpbmcsXG4gKiBiZWNhdXNlIG5vIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoIHRob3NlIGxpYnMuIE90aGVyd2lzZSBlYWNoIGVudmlyb25tZW50IGxpYiB0aGF0IGRlY2xhcmVzIGl0IGFkZHMgaXRzZWxmLCBhbmRcbiAqIGZhaWxpbmcgdGhhdCBgQHR5cGVzL25vZGVgIGFkZHMgYG5vZGVgLiBBIHN5bWJvbCBkZWNsYXJlZCBpbiB0aGUgcGFja2FnZSdzIG93biBmaWxlcyBhZGRzIG5vdGhpbmc6IHRoZSBkZWNsYXJhdGlvblxuICogdGhhdCBob2xkcyBpdCBjYXJyaWVzIGl0cyBvd24gZGlyZWN0aXZlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHN5bWJvbCwgdGhlIHByb2dyYW0gaXQgd2FzIHJlc29sdmVkIGluLCBhbmQgdGhlIHNldHMgdG8gYWRkIHRvLlxuICovXG5mdW5jdGlvbiBhZGRFbnZpcm9ubWVudEdsb2JhbHMocGFyYW1zOiBBZGRFbnZpcm9ubWVudEdsb2JhbHNQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBsaWJzLCBwcm9ncmFtLCBzeW1ib2wsIHR5cGVzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVudmlyb25tZW50TGliczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGlzTm9kZSA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygc3ltYm9sLmRlY2xhcmF0aW9ucyA/PyBbXSkge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBkZWNsYXJhdGlvbi5nZXRTb3VyY2VGaWxlKCk7XG4gICAgaWYgKHByb2dyYW0uaXNTb3VyY2VGaWxlRGVmYXVsdExpYnJhcnkoc291cmNlRmlsZSkpIHtcbiAgICAgIGNvbnN0IGxpYiA9IHRvTGliTmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgIGlmICghaXNFbnZpcm9ubWVudExpYihsaWIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVudmlyb25tZW50TGlicy5wdXNoKGxpYik7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VGaWxlLmZpbGVOYW1lLmluY2x1ZGVzKE5PREVfVFlQRVNfUEFUSF9TRUdNRU5UKSkge1xuICAgICAgaXNOb2RlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW52aXJvbm1lbnRMaWJzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IGxpYiBvZiBlbnZpcm9ubWVudExpYnMpIHtcbiAgICAgIGxpYnMuYWRkKGxpYik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTm9kZSkge1xuICAgIHR5cGVzLmFkZCgnbm9kZScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWxsUmVmZXJlbmNlTGliRGlyZWN0aXZlcyhsaWJzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtcbiAgICBsaWJzXG4gICAgICAubWFwKChsaWIpID0+IGAvLy8gJHtSRUZFUkVOQ0VfTElCX0RJUkVDVElWRX1cIiR7bGlifVwiIC8+YClcbiAgICAgIC5qb2luKCdcXG4nKVxuICB9XFxuYDtcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxSZWZlcmVuY2VUeXBlc0RpcmVjdGl2ZXModHlwZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVzLmxlbmd0aCA9PT0gMFxuICAgID8gJydcbiAgICA6IGAke1xuICAgICAgdHlwZXNcbiAgICAgICAgLm1hcCgodHlwZSkgPT4gYC8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiJHt0eXBlfVwiIC8+YClcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfVxcbmA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkTGlicmFyeUZvcm1hdChwYXJhbXM6IEJ1aWxkTGlicmFyeUZvcm1hdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGZvcm1hdCwgbGliRmlsZXMsIHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5IH0gPSBwYXJhbXM7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGZvcm1hdCA9PT0gJ2NqcycgPyBSZXBvUGF0aHMuQ2pzRXh0ZW5zaW9uIDogUmVwb1BhdGhzLk1qc0V4dGVuc2lvbjtcbiAgY29uc3QgYnVpbGRPcHRpb25zOiBCdWlsZE9wdGlvbnMgPSB7XG4gICAgLy8gRXhwbGljaXQsIGJlY2F1c2UgZXNidWlsZCBvdGhlcndpc2UgdGFrZXMgdGhlIGZvbGRlciBpdHMgc2VydmljZSBwcm9jZXNzIHN0YXJ0ZWQgaW4uXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gZXNidWlsZCdzIG93biBvcHRpb24gbmFtZS5cbiAgICBhYnNXb3JraW5nRGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGJhbm5lcjoge1xuICAgICAganM6IExJQlJBUllfQkFOTkVSXG4gICAgfSxcbiAgICBidW5kbGU6IGZhbHNlLFxuICAgIGVudHJ5UG9pbnRzOiBsaWJGaWxlcyxcbiAgICBmb3JtYXQsXG4gICAgbG9nTGV2ZWw6ICdpbmZvJyxcbiAgICBvdXRkaXI6IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIGZvcm1hdCksXG4gICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICBwbHVnaW5zOiBbXG4gICAgICBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeShmb3JtYXQgPT09ICdlc20nKSxcbiAgICAgIGZpeEVzbVBsdWdpbigpLFxuICAgICAgY2hhbmdlRXh0ZW5zaW9uUGx1Z2luKGV4dGVuc2lvbilcbiAgICBdLFxuICAgIHNvdXJjZW1hcDogJ2lubGluZScsXG4gICAgdGFyZ2V0OiAnRVMyMDIyJyxcbiAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICB3cml0ZTogZmFsc2VcbiAgfTtcblxuICBjb25zdCBidWlsZENvbnRleHQgPSBhd2FpdCBjb250ZXh0KGJ1aWxkT3B0aW9ucyk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYnVpbGRDb250ZXh0LnJlYnVpbGQoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBidWlsZENvbnRleHQuZGlzcG9zZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZShwYXJhbXM6IEJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZVBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgZGVjbGFyYXRpb25GaWxlUGF0aCwgZXh0ZW5zaW9uLCBtb2R1bGVEaXJlY3RvcnkgfSA9IHBhcmFtcztcbiAgY29uc3QgbGlicmFyeUZpbGVQYXRoID0gam9pbihSZXBvUGF0aHMuRGlzdExpYiwgbW9kdWxlRGlyZWN0b3J5LCBMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FICsgZXh0ZW5zaW9uKTtcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlTmF0aXZlKGRpcm5hbWUoZGVjbGFyYXRpb25GaWxlUGF0aCksIGxpYnJhcnlGaWxlUGF0aCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJyk7XG4gIGlmICghcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cbiAgcmV0dXJuIGAvLy8gPHJlZmVyZW5jZSBwYXRoPVwiJHtyZWxhdGl2ZVBhdGh9XCIgLz5cXG5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0QWxsTGlicygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIC8vIFRoZSBSRVNPTFZFRCBvcHRpb25zLCBiZWNhdXNlIGEgcGFja2FnZSdzIGB0c2NvbmZpZy5qc29uYCBpbmhlcml0cyBgbGliYCBmcm9tIHRoZSBzaGFyZWQgYmFzZS4gVGhlIHJlc29sdmVkXG4gIC8vIG5hbWVzIGFyZSBmaWxlIG5hbWVzIChgbGliLmRvbS5pdGVyYWJsZS5kLnRzYCksIHNvIHRoZXkgYXJlIG1hcHBlZCBiYWNrIG9udG8gdGhlIG5hbWVzIGEgZGlyZWN0aXZlIHRha2VzLlxuICBjb25zdCB7IG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcoUmVwb1BhdGhzLlRzQ29uZmlnSnNvbik7XG4gIGNvbnN0IGxpYnMgPSBuZXcgU2V0KChvcHRpb25zLmxpYiA/PyBbXSkubWFwKChsaWIpID0+IHRvTGliTmFtZShsaWIpKSk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KSkge1xuICAgIGlmICghZmlsZS5lbmRzV2l0aCgnLnRzJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZUNvbnRlbnQgPSByZWFkRmlsZVN5bmMoam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSwgJ3V0Zi04Jyk7XG4gICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbHdheXMgY2FwdHVyZXMgaXRzIG9uZSBncm91cCwgc28gbm8gZmFsbGJhY2sgZm9yIGEgbWlzc2luZyBvbmUgaXMgbmVlZGVkLlxuICAgIGZvciAoY29uc3QgWywgbGliXSBvZiBzb3VyY2VDb250ZW50Lm1hdGNoQWxsKFJFRkVSRU5DRV9MSUJfUkVHX0VYUCkpIHtcbiAgICAgIGxpYnMuYWRkKFN0cmluZyhsaWIpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4ubGlic10uc29ydCgpO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0QWxsVHlwZXMoKTogc3RyaW5nW10ge1xuICBjb25zdCB7IG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcoUmVwb1BhdGhzLlRzQ29uZmlnSnNvbik7XG4gIHJldHVybiAob3B0aW9ucy50eXBlcyA/PyBbXSlcbiAgICAuZmlsdGVyKCh0eXBlKSA9PiBERUNMQVJBVElPTl9SRUZFUkVOQ0VfVFlQRVMuaGFzKHR5cGUpKVxuICAgIC5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RFbnZpcm9ubWVudERpcmVjdGl2ZXMocGFyYW1zOiBDb2xsZWN0RW52aXJvbm1lbnREaXJlY3RpdmVzUGFyYW1zKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHsgYXZhaWxhYmxlVHlwZXMsIGRlY2xhcmF0aW9uRmlsZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgeyBvcHRpb25zIH0gPSBwYXJzZVRzQ29uZmlnKFJlcG9QYXRocy5Uc0NvbmZpZ0pzb24pO1xuICBjb25zdCBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbSh7XG4gICAgb3B0aW9uczogeyAuLi5vcHRpb25zLCBub0VtaXQ6IHRydWUgfSxcbiAgICByb290TmFtZXM6IGRlY2xhcmF0aW9uRmlsZXMubWFwKChmaWxlKSA9PiByZXNvbHZlTmF0aXZlKFJlcG9QYXRocy5TcmMsIGZpbGUpKVxuICB9KTtcbiAgY29uc3QgY2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3QgZGlyZWN0aXZlc0J5RmlsZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGRlY2xhcmF0aW9uRmlsZXMpIHtcbiAgICAvLyBUaGUgcHJvZ3JhbSB3YXMgaGFuZGVkIGV2ZXJ5IG9uZSBvZiB0aGVzZSBhcyBhIHJvb3QgbmFtZSwgc28gZWFjaCBvbmUgaXMgaW4gaXQuXG4gICAgY29uc3Qgc291cmNlRmlsZSA9IGVuc3VyZU5vbk51bGxhYmxlKHByb2dyYW0uZ2V0U291cmNlRmlsZShyZXNvbHZlTmF0aXZlKFJlcG9QYXRocy5TcmMsIGZpbGUpKSk7XG4gICAgY29uc3QgbGlicyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmdW5jdGlvbiB2aXNpdChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICBpZiAoaXNJZGVudGlmaWVyKG5vZGUpIHx8IGlzU3RyaW5nTGl0ZXJhbChub2RlKSkge1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZSk7XG4gICAgICAgIGlmIChzeW1ib2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFkZEVudmlyb25tZW50R2xvYmFscyh7IGxpYnMsIHByb2dyYW0sIHN5bWJvbDogcmVzb2x2ZUFsaWFzKGNoZWNrZXIsIHN5bWJvbCksIHR5cGVzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpO1xuICAgIH1cbiAgICB2aXNpdChzb3VyY2VGaWxlKTtcblxuICAgIGNvbnN0IG5lZWRlZFR5cGVzID0gWy4uLnR5cGVzXS5maWx0ZXIoKHR5cGUpID0+IGF2YWlsYWJsZVR5cGVzLmluY2x1ZGVzKHR5cGUpKTtcbiAgICBpZiAobGlicy5zaXplID4gMCB8fCBuZWVkZWRUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBkaXJlY3RpdmVzQnlGaWxlLnNldChcbiAgICAgICAgZmlsZSxcbiAgICAgICAgKGxpYnMuc2l6ZSA+IDAgPyBidWlsZEFsbFJlZmVyZW5jZUxpYkRpcmVjdGl2ZXMoWy4uLmxpYnNdLnNvcnQoKSkgOiAnJykgKyBidWlsZEFsbFJlZmVyZW5jZVR5cGVzRGlyZWN0aXZlcyhuZWVkZWRUeXBlcy5zb3J0KCkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXJlY3RpdmVzQnlGaWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUluZGV4KGZvbGRlcjogc3RyaW5nKTogUHJvbWlzZTxHZW5lcmF0ZUluZGV4UmVzdWx0PiB7XG4gIGNvbnN0IGRpcmVudHMgPSBhd2FpdCByZWFkZGlyUG9zaXgoZm9sZGVyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IG1heWJlTGluZXMgPSBhd2FpdCBhc3luY01hcChkaXJlbnRzLCAoZGlyZW50KSA9PiBoYW5kbGVJbmRleERpcmVudChmb2xkZXIsIGRpcmVudCkpO1xuICBjb25zdCBsaW5lcyA9IG1heWJlTGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lICE9PSB1bmRlZmluZWQpO1xuXG4gIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gR2VuZXJhdGVJbmRleFJlc3VsdC5Ta2lwcGVkO1xuICB9XG5cbiAgYXdhaXQgZ2VuZXJhdGUoam9pbihmb2xkZXIsIFJlcG9QYXRocy5JbmRleFRzKSwgbGluZXMpO1xuICByZXR1cm4gR2VuZXJhdGVJbmRleFJlc3VsdC5TdWNjZXNzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRMaWJGaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGxldCBmaWxlcyA9IGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgZmlsZXMgPSBmaWxlcy5tYXAoKGZpbGUpID0+IG5vcm1hbGl6ZUlmUmVsYXRpdmUoam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSkpO1xuICByZXR1cm4gZmlsZXMuZmlsdGVyKChmaWxlKSA9PlxuICAgIGZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLlRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5lbmRzV2l0aChSZXBvUGF0aHMuRHRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5lbmRzV2l0aCgnLnRlc3QudHMnKVxuICAgICYmICFmaWxlLmluY2x1ZGVzKGAvJHtSZXBvUGF0aHMuVGVzdEhlbHBlcnN9L2ApXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUluZGV4RGlyZW50KGZvbGRlcjogc3RyaW5nLCBkaXJlbnQ6IERpcmVudCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGlmIChpc0V4Y2x1ZGVkRnJvbUluZGV4KGZvbGRlciwgZGlyZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBzb3VyY2VGaWxlOiBzdHJpbmc7XG4gIGxldCBuYW1lOiBzdHJpbmc7XG4gIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdlbmVyYXRlSW5kZXgoam9pbihmb2xkZXIsIGRpcmVudC5uYW1lKSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gR2VuZXJhdGVJbmRleFJlc3VsdC5TdWNjZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNvdXJjZUZpbGUgPSBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oZGlyZW50Lm5hbWUsIFJlcG9QYXRocy5JbmRleFRzKSk7XG4gICAgbmFtZSA9IGRpcmVudC5uYW1lO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUoZGlyZW50Lm5hbWUpO1xuICAgIG5hbWUgPSBiYXNlbmFtZShkaXJlbnQubmFtZSwgZXh0ZW5zaW9uKTtcbiAgICBzb3VyY2VGaWxlID0gbm9ybWFsaXplSWZSZWxhdGl2ZShkaXJlbnQubmFtZSk7XG4gIH1cblxuICByZXR1cm4gYGV4cG9ydCAqIGFzICcke25hbWV9JyBmcm9tICcke3NvdXJjZUZpbGV9JztgO1xufVxuXG5mdW5jdGlvbiBpc0Vudmlyb25tZW50TGliKGxpYjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBFTlZJUk9OTUVOVF9MSUJfUFJFRklYRVMuc29tZSgocHJlZml4KSA9PiBsaWIuc3RhcnRzV2l0aChwcmVmaXgpKTtcbn1cblxuZnVuY3Rpb24gaXNFeGNsdWRlZEZpbGVOYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIW5hbWUuZW5kc1dpdGgoUmVwb1BhdGhzLlRzRXh0ZW5zaW9uKSB8fCBuYW1lLmVuZHNXaXRoKCcudGVzdC50cycpIHx8IG5hbWUgPT09ICdzZXR1cC50cycgfHwgbmFtZS5lbmRzV2l0aCgnLXNldHVwLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWRGcm9tSW5kZXgoZm9sZGVyOiBzdHJpbmcsIGRpcmVudDogRGlyZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IGV4Y2x1ZGVkTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1JlcG9QYXRocy5JbmRleFRzLCBSZXBvUGF0aHMuVHlwZXMsIFJlcG9QYXRocy5TdHlsZXMsIFJlcG9QYXRocy5UZXN0SGVscGVyc107XG4gIGNvbnN0IGlzRXhjbHVkZWRFbnRyeSA9IGV4Y2x1ZGVkTmFtZXMuaW5jbHVkZXMoZGlyZW50Lm5hbWUpIHx8IGRpcmVudC5uYW1lLmVuZHNXaXRoKFJlcG9QYXRocy5EdHNFeHRlbnNpb24pIHx8IGZvbGRlci5zcGxpdCgnLycpLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIHJldHVybiBpc0V4Y2x1ZGVkRW50cnkgfHwgKGRpcmVudC5pc0ZpbGUoKSAmJiBpc0V4Y2x1ZGVkRmlsZU5hbWUoZGlyZW50Lm5hbWUpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFsaWFzKGNoZWNrZXI6IFR5cGVDaGVja2VyLCBzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBgU3ltYm9sRmxhZ3NgIGlzIGEgYml0IHNldC5cbiAgcmV0dXJuIChzeW1ib2wuZmxhZ3MgJiBTeW1ib2xGbGFncy5BbGlhcykgPT09IDAgPyBzeW1ib2wgOiBjaGVja2VyLmdldEFsaWFzZWRTeW1ib2woc3ltYm9sKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0RXhwb3J0KHBhcmFtczogU2V0RXhwb3J0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZXhwb3J0Q29uZGl0aW9ucywgaXNXaWxkY2FyZCwgc291cmNlQ29uZGl0aW9uLCBzcmNGb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgaW1wb3J0UGF0aCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IHNyY0ZvbGRlcixcbiAgICByZXBsYWNlcjogUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXIsXG4gICAgc2VhcmNoVmFsdWU6IFJlcG9QYXRocy5TcmNcbiAgfSk7XG4gIGNvbnN0IGNvbmRpdGlvblBhdGggPSBpc1dpbGRjYXJkID8gYCR7aW1wb3J0UGF0aH0vJHtSZXBvUGF0aHMuQW55fWAgOiBpbXBvcnRQYXRoO1xuICBjb25zdCBkbXRzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5Fc20sIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55RG10cyA6IFJlcG9QYXRocy5JbmRleERtdHMgfSk7XG4gIGNvbnN0IGRjdHNQYXRoID0gdG9EaXN0UGF0aCh7IGZvcm1hdDogUmVwb1BhdGhzLkNqcywgaW1wb3J0UGF0aCwgbmFtZTogaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlEY3RzIDogUmVwb1BhdGhzLkluZGV4RGN0cyB9KTtcbiAgY29uc3QgZG10c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRtdHNQYXRoKTtcbiAgY29uc3QgZGN0c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRjdHNQYXRoKTtcblxuICBpZiAoIWlzV2lsZGNhcmQgJiYgIWV4aXN0c1N5bmMoZGN0c1BhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNUeXBlc09ubHkgPSBpbXBvcnRQYXRoLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIGNvbnN0IG1qc1BhdGggPSB0b0Rpc3RQYXRoKHsgZm9ybWF0OiBSZXBvUGF0aHMuRXNtLCBpbXBvcnRQYXRoLCBuYW1lOiBpc1dpbGRjYXJkID8gUmVwb1BhdGhzLkFueU1qcyA6IFJlcG9QYXRocy5JbmRleE1qcyB9KTtcbiAgY29uc3QgY2pzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5DanMsIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55Q2pzIDogUmVwb1BhdGhzLkluZGV4Q2pzIH0pO1xuXG4gIGlmIChpc1R5cGVzT25seSkge1xuICAgIGV4cG9ydENvbmRpdGlvbnNbY29uZGl0aW9uUGF0aF0gPSB7XG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGhcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oUmVwb1BhdGhzLlNyYywgaW1wb3J0UGF0aCwgaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlUcyA6IFJlcG9QYXRocy5JbmRleFRzKSk7XG5cbiAgICBleHBvcnRDb25kaXRpb25zW2NvbmRpdGlvblBhdGhdID0ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgICAvLyBGaXJzdCwgc28gaXQgd2lucyB3aGVyZXZlciBpdCBpcyBzZXQ6IGluc2lkZSB0aGUgcmVwb3NpdG9yeSwgYmVmb3JlIGFueXRoaW5nIGlzIGJ1aWx0LlxuICAgICAgLi4uKHNvdXJjZUNvbmRpdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgW3NvdXJjZUNvbmRpdGlvbl06IHNvdXJjZVBhdGggfSksXG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoLFxuICAgICAgICBkZWZhdWx0OiBtanNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGgsXG4gICAgICAgIGRlZmF1bHQ6IGNqc1BhdGhcbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgfTtcbiAgfVxuXG4gIGlmIChpbXBvcnRQYXRoID09PSBSZXBvUGF0aHMuQ3VycmVudEZvbGRlciBhcyBzdHJpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzV2lsZGNhcmQpIHtcbiAgICBhd2FpdCB3cml0ZVN1YnBhdGhQYWNrYWdlSnNvbihcbiAgICAgIGltcG9ydFBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzOiByZWxhdGl2ZShpbXBvcnRQYXRoLCBkY3RzUGF0aCkgfVxuICAgICAgICA6IHsgbWFpbjogcmVsYXRpdmUoaW1wb3J0UGF0aCwgY2pzUGF0aCksIG1vZHVsZTogcmVsYXRpdmUoaW1wb3J0UGF0aCwgbWpzUGF0aCksIHR5cGU6ICdtb2R1bGUnLCB0eXBlczogcmVsYXRpdmUoaW1wb3J0UGF0aCwgZGN0c1BhdGgpIH1cbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoZGN0c0ZvbGRlclBhdGgpKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShmaWxlLCBSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgcGFja2FnZUpzb25Gb2xkZXJQYXRoID0gam9pbihpbXBvcnRQYXRoLCBuYW1lKTtcbiAgICBjb25zdCB0eXBlcyA9IHJlbGF0aXZlKHBhY2thZ2VKc29uRm9sZGVyUGF0aCwgam9pbihkY3RzRm9sZGVyUGF0aCwgbmFtZSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSk7XG4gICAgYXdhaXQgd3JpdGVTdWJwYXRoUGFja2FnZUpzb24oXG4gICAgICBwYWNrYWdlSnNvbkZvbGRlclBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgbWFpbjogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRjdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLkNqc0V4dGVuc2lvbikpLFxuICAgICAgICAgIG1vZHVsZTogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRtdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLk1qc0V4dGVuc2lvbikpLFxuICAgICAgICAgIHR5cGU6ICdtb2R1bGUnLFxuICAgICAgICAgIHR5cGVzXG4gICAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQ3RzQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGNvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdmcm9tIFxcJyQ8SW1wb3J0UGF0aD4uY2pzXFwnOycsXG4gICAgc2VhcmNoVmFsdWU6IFNUQVRJQ19JTVBPUlRfUkVHX0VYUFxuICB9KTtcbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQoJDxRdW90ZT4kPEltcG9ydFBhdGg+LmNqcyQ8UXVvdGU+KScsXG4gICAgc2VhcmNoVmFsdWU6IERZTkFNSUNfSU1QT1JUX1JFR19FWFBcbiAgfSk7XG5cbiAgLy8gQSBgLmQuY3RzYCBmaWxlIGlzIGEgQ29tbW9uSlMgbW9kdWxlLiBUeXBlLW9ubHkgaW1wb3J0cyBvZiBhIGJhcmUgc3BlY2lmaWVyIHJlc29sdmluZyB0byBhblxuICAvLyBFU00tb25seSBwYWNrYWdlIG5lZWQgYSBgcmVzb2x1dGlvbi1tb2RlYCBhdHRyaWJ1dGUsIGVsc2UgYHRzY2AgcmVwb3J0cyBUUzE1NDEgLyBUUzE1NDIuXG4gIC8vIFBhc3NpbmcgYCdpbXBvcnQnYCBpcyB2YWxpZCBmb3IgQ29tbW9uSlMgdGFyZ2V0cyB0b28sIHNvIGV2ZXJ5IGJhcmUgc3BlY2lmaWVyIHJlY2VpdmVzIGl0LlxuICAvLyBUaGUgRVNNIGAuZC5tdHNgIG5lZWRzIG5vIHN1Y2ggYXR0cmlidXRlLCBzbyB0aGlzIHRyYW5zZm9ybSBydW5zIG9uIENvbW1vbkpTIGNvbnRlbnQgb25seS5cbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQgdHlwZSAkPENsYXVzZT4gZnJvbSBcXCckPFNwZWNpZmllcj5cXCcgd2l0aCB7IFxcJ3Jlc29sdXRpb24tbW9kZVxcJzogXFwnaW1wb3J0XFwnIH07JyxcbiAgICBzZWFyY2hWYWx1ZTogQkFSRV9UWVBFX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogY3RzQ29udGVudCxcbiAgICByZXBsYWNlcjogJ2ltcG9ydChcIiQ8U3BlY2lmaWVyPlwiLCB7IHdpdGg6IHsgXFwncmVzb2x1dGlvbi1tb2RlXFwnOiBcXCdpbXBvcnRcXCcgfSB9KScsXG4gICAgc2VhcmNoVmFsdWU6IEJBUkVfSU5MSU5FX0lNUE9SVF9UWVBFX1JFR19FWFBcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvRGlzdFBhdGgocGFyYW1zOiBUb0Rpc3RQYXRoUGFyYW1zKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZUlmUmVsYXRpdmUoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgcGFyYW1zLmZvcm1hdCwgcGFyYW1zLmltcG9ydFBhdGgsIHBhcmFtcy5uYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRvTGliTmFtZShsaWJGaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQSBsaWIgYSBwYWNrYWdlIHJlcGxhY2VkIChgQHR5cGVzY3JpcHQvbGliLWRvbWAsIGBAdHlwZXNjcmlwdC9saWItZG9tL2l0ZXJhYmxlLmQudHNgKSBpcyBuYW1lZCBieSBpdHMgcGF0aCwgbm90IGJ5XG4gIC8vIGl0cyBmaWxlIG5hbWUsIHdoaWNoIGlzIGBpbmRleC5kLnRzYCBmb3IgdGhlIGxpYidzIHJvb3QuXG4gIGNvbnN0IHJlcGxhY2VtZW50TWF0Y2ggPSBMSUJfUkVQTEFDRU1FTlRfUkVHX0VYUC5leGVjKGxpYkZpbGVQYXRoKTtcbiAgaWYgKHJlcGxhY2VtZW50TWF0Y2g/Lmdyb3VwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbHdheXMgY2FwdHVyZXMgYm90aCBncm91cHMuXG4gICAgY29uc3QgbGliID0gU3RyaW5nKHJlcGxhY2VtZW50TWF0Y2guZ3JvdXBzWydMaWInXSk7XG4gICAgY29uc3Qgc3ViTGliID0gU3RyaW5nKHJlcGxhY2VtZW50TWF0Y2guZ3JvdXBzWydTdWJMaWInXSk7XG4gICAgcmV0dXJuIChzdWJMaWIgPT09ICdpbmRleCcgPyBsaWIgOiBgJHtsaWJ9LiR7c3ViTGliLnJlcGxhY2VBbGwoJy8nLCAnLicpfWApLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VuYW1lKGxpYkZpbGVQYXRoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15saWJcXC4vLCAnJykucmVwbGFjZSgvXFwuZFxcLnRzJC8sICcnKTtcbn1cblxuZnVuY3Rpb24gdG9NdHNDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG10c0NvbnRlbnQgPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBjb250ZW50LFxuICAgIHJlcGxhY2VyOiAnZnJvbSBcXCckPEltcG9ydFBhdGg+Lm1qc1xcJzsnLFxuICAgIHNlYXJjaFZhbHVlOiBTVEFUSUNfSU1QT1JUX1JFR19FWFBcbiAgfSk7XG4gIHJldHVybiByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBtdHNDb250ZW50LFxuICAgIHJlcGxhY2VyOiAnaW1wb3J0KCQ8UXVvdGU+JDxJbXBvcnRQYXRoPi5tanMkPFF1b3RlPiknLFxuICAgIHNlYXJjaFZhbHVlOiBEWU5BTUlDX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZVN1YnBhdGhQYWNrYWdlSnNvbihmb2xkZXI6IHN0cmluZywgcGFja2FnZUpzb246IFBhY2thZ2VKc29uKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG1rZGlyKGZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlSnNvbihqb2luKGZvbGRlciwgUmVwb1BhdGhzLlBhY2thZ2VKc29uKSwgcGFja2FnZUpzb24pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVCQSxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLG1CQUFtQjtBQUM1QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGtCQUFrQjtBQUMzQixTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLGVBQWU7QUFDeEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFLFlBQVk7QUFBQSxFQUNaLFdBQVc7QUFBQSxPQUNOO0FBQ1AsT0FBTyxhQUFhO0FBQ3BCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBSVAsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyx3QkFBd0I7QUFDakMsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxvQkFBb0I7QUFDN0IsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxvQkFBb0I7QUFLdEIsTUFBTSxpQkFBaUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVN2QixNQUFNLHNCQUF5QztBQUFBLEVBQ3BEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0Y7QUFPTyxNQUFNLG1CQUFtQjtBQTJCaEMsTUFBTSw4QkFBOEIsb0JBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUlwRCxNQUFNLDJCQUE4QyxDQUFDLE9BQU8sY0FBYyxXQUFXO0FBQ3JGLE1BQU0sMEJBQTBCO0FBQ2hDLE1BQU0sMEJBQTBCO0FBSWhDLE1BQU0sK0JBQStCO0FBR3JDLE1BQU0sMEJBQTBCLENBQUMsY0FBYyxNQUFNLEVBQUUsS0FBSyxHQUFHO0FBQy9ELE1BQU0sd0JBQXdCO0FBRzlCLE1BQU0sMkJBQTJCO0FBR2pDLE1BQU0sa0NBQWtDO0FBRXhDLE1BQU0sd0JBQXdCO0FBSzlCLE1BQU0seUJBQXlCO0FBa0QvQixlQUFzQixvQkFBbUM7QUFDdkQsUUFBTSxXQUFXO0FBQ2pCLGFBQVcsUUFBUSxNQUFNLGFBQWEsVUFBVSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUMsR0FBRztBQUN6RSxRQUFJLFNBQVMsSUFBSSxNQUFNLFVBQVUsU0FBbUI7QUFDbEQsWUFBTSxHQUFHLEtBQUssVUFBVSxLQUFLLElBQUksQ0FBQztBQUFBLElBQ3BDO0FBRUEsUUFBSSxLQUFLLFNBQVMsVUFBVSxZQUFZLEtBQUssQ0FBQyxLQUFLLE1BQU0sR0FBRyxFQUFFLFNBQVMsVUFBVSxLQUFLLEdBQUc7QUFDdkYsWUFBTSxHQUFHLEtBQUssVUFBVSxLQUFLLElBQUksQ0FBQztBQUFBLElBQ3BDO0FBQUEsRUFDRjtBQUVBLGFBQVcsUUFBUSxNQUFNLGFBQWEsVUFBVSxlQUFlLEVBQUUsV0FBVyxLQUFLLENBQUMsR0FBRztBQUNuRixRQUFLLFNBQVMsSUFBSSxNQUFNLFVBQVUsZUFBMkIsU0FBUyxVQUFVLGVBQTBCLEtBQUssV0FBVyxVQUFVLFdBQVcsR0FBRztBQUNoSjtBQUFBLElBQ0Y7QUFFQSxVQUFNLEdBQUcsSUFBSTtBQUFBLEVBQ2Y7QUFDRjtBQVVBLGVBQXNCLGFBQWEsVUFBK0IsQ0FBQyxHQUFrQjtBQUNuRixRQUFNLEVBQUUsMEJBQTBCLENBQUMsVUFBMkIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSTtBQUM5RixRQUFNLFdBQVcsTUFBTSxZQUFZO0FBQ25DLFFBQU0sbUJBQW1CLEVBQUUsUUFBUSxPQUFPLFVBQVUsd0JBQXdCLENBQUM7QUFDN0UsUUFBTSxtQkFBbUIsRUFBRSxRQUFRLE9BQU8sVUFBVSx3QkFBd0IsQ0FBQztBQUMvRTtBQXNCQSxlQUFzQixvQkFBbUM7QUFDdkQsTUFBSSxXQUFXLEtBQUssVUFBVSxLQUFLLEdBQUcsNEJBQTRCLEdBQUcsVUFBVSxXQUFXLEVBQUUsQ0FBQyxHQUFHO0FBQzlGLFVBQU0sSUFBSSxNQUFNLE9BQU8sNEJBQTRCLEdBQUcsVUFBVSxXQUFXLDREQUE0RDtBQUFBLEVBQ3pJO0FBRUEsUUFBTSxhQUFhLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxNQUFNLE1BQU0sQ0FBQyxHQUFHLGFBQWEsdUJBQXVCLENBQUM7QUFFakcsUUFBTSxrQkFBa0IsV0FBVyxLQUFLLFVBQVUsS0FBSyxZQUFZLENBQUMsSUFBSSxZQUFZO0FBQ3BGLFFBQU0sVUFBVSxNQUFNLGVBQWU7QUFDckMsUUFBTSxXQUFXLGdCQUFnQjtBQUNqQyxRQUFNLGFBQWEsK0JBQStCLE9BQU8sSUFBSSxpQ0FBaUMsUUFBUTtBQUV0RyxRQUFNLG1CQUFtQiwrQkFBK0IsUUFBUSxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUV2RyxRQUFNLE1BQU0sS0FBSyxVQUFVLFNBQVMsVUFBVSxHQUFHLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUN2RSxRQUFNLE1BQU0sS0FBSyxVQUFVLFNBQVMsVUFBVSxHQUFHLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUN2RSxRQUFNLFVBQVUsS0FBSyxVQUFVLFNBQVMsVUFBVSxLQUFLLCtCQUErQixVQUFVLGFBQWEsR0FBRyxnQkFBZ0I7QUFDaEksUUFBTSxVQUFVLEtBQUssVUFBVSxTQUFTLFVBQVUsS0FBSywrQkFBK0IsVUFBVSxhQUFhLEdBQUcsZ0JBQWdCO0FBRWhJLFFBQU0sV0FBVyxNQUFNLGFBQWEsVUFBVSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDdEUsUUFBTSxtQkFBbUIsU0FBUyxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsVUFBVSxZQUFZLEtBQUssQ0FBQyxLQUFLLFdBQVcsVUFBVSxXQUFXLENBQUM7QUFDbkksUUFBTSx3QkFBd0IsNkJBQTZCLEVBQUUsZ0JBQWdCLFVBQVUsaUJBQWlCLENBQUM7QUFFekcsYUFBVyxRQUFRLGtCQUFrQjtBQUNuQyxVQUFNLFNBQVMsUUFBUSxJQUFJO0FBQzNCLFVBQU0sT0FBTyxTQUFTLE1BQU0sVUFBVSxZQUFZO0FBQ2xELFVBQU0sVUFBVSxNQUFNLFNBQVMsS0FBSyxVQUFVLEtBQUssSUFBSSxHQUFHLE9BQU87QUFFakUsVUFBTSxVQUFVLEtBQUssVUFBVSxTQUFTLFVBQVUsS0FBSyxRQUFRLE9BQU8sVUFBVSxhQUFhO0FBQzdGLFVBQU0sVUFBVSxLQUFLLFVBQVUsU0FBUyxVQUFVLEtBQUssUUFBUSxPQUFPLFVBQVUsYUFBYTtBQUU3RixVQUFNLE1BQU0sUUFBUSxPQUFPLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUNqRCxVQUFNLE1BQU0sUUFBUSxPQUFPLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUVqRCxRQUFJLGFBQWEsYUFBYSxPQUFPO0FBQ3JDLFFBQUksYUFBYSxhQUFhLE9BQU87QUFFckMsUUFBSSxTQUFTLG1CQUFtQixXQUFXLEtBQUs7QUFDOUMsbUJBQWEsYUFBYTtBQUMxQixtQkFBYSxhQUFhO0FBQUEsSUFDNUIsT0FBTztBQUNMLFlBQU0saUJBQWlCLHNCQUFzQixJQUFJLElBQUksS0FBSztBQUMxRCxtQkFBYSw0QkFBNEIsRUFBRSxxQkFBcUIsU0FBUyxXQUFXLFVBQVUsZUFBZSxpQkFBaUIsVUFBVSxJQUFJLENBQUMsSUFDekksaUJBQWlCO0FBQ3JCLG1CQUFhLDRCQUE0QixFQUFFLHFCQUFxQixTQUFTLFdBQVcsVUFBVSxlQUFlLGlCQUFpQixVQUFVLElBQUksQ0FBQyxJQUN6SSxpQkFBaUI7QUFBQSxJQUN2QjtBQUVBLFVBQU0sVUFBVSxTQUFTLFVBQVU7QUFDbkMsVUFBTSxVQUFVLFNBQVMsVUFBVTtBQUFBLEVBQ3JDO0FBQ0Y7QUFVQSxlQUFzQix1QkFBdUIsVUFBeUMsQ0FBQyxHQUFrQjtBQUN2RyxRQUFNLEVBQUUsZ0JBQWdCLElBQUk7QUFDNUIsUUFBTSxhQUF1QixDQUFDLFVBQVUsR0FBRztBQUUzQyxhQUFXLFVBQVUsTUFBTSxhQUFhLFVBQVUsS0FBSyxFQUFFLFdBQVcsTUFBTSxlQUFlLEtBQUssQ0FBQyxHQUFHO0FBQ2hHLFFBQUksQ0FBQyxPQUFPLFlBQVksR0FBRztBQUN6QjtBQUFBLElBQ0Y7QUFFQSxVQUFNLE9BQU8sS0FBSyxPQUFPLFlBQVksT0FBTyxJQUFJO0FBRWhELFFBQUksS0FBSyxTQUFTLFVBQVUsTUFBTSxLQUFLLEtBQUssU0FBUyxVQUFVLFdBQVcsR0FBRztBQUMzRTtBQUFBLElBQ0Y7QUFFQSxlQUFXLEtBQUssSUFBSTtBQUFBLEVBQ3RCO0FBRUEsYUFBVyxLQUFLO0FBRWhCLE1BQUksWUFBWTtBQUVoQixRQUFNLGdCQUFnQixPQUFPLGdCQUFnQjtBQUMzQyxVQUFNLGFBQWEsWUFBWTtBQUMvQixVQUFNLG1CQUFpRCxDQUFDO0FBQ3hELGdCQUFZLFVBQVU7QUFDdEIsZUFBVyxhQUFhLFlBQVk7QUFDbEMsWUFBTSxVQUFVLEVBQUUsa0JBQWtCLFlBQVksT0FBTyxpQkFBaUIsVUFBVSxDQUFDO0FBQ25GLFlBQU0sVUFBVSxFQUFFLGtCQUFrQixZQUFZLE1BQU0saUJBQWlCLFVBQVUsQ0FBQztBQUFBLElBQ3BGO0FBRUEsZ0JBQVksQ0FBQyxZQUFZLFlBQVksWUFBWSxPQUFPO0FBQUEsRUFDMUQsQ0FBQztBQUdELE1BQUksV0FBVztBQUNiLFVBQU0sSUFBSSxNQUFNLDBFQUEwRTtBQUFBLEVBQzVGO0FBQ0Y7QUFRQSxlQUFzQix1QkFBc0M7QUFDMUQsUUFBTSxjQUFjLFVBQVUsR0FBRztBQUNuQztBQVFBLGVBQXNCLGNBQWMsUUFBMkIscUJBQW9DO0FBQ2pHLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFVBQU0sZUFBZSxJQUFJO0FBQUEsRUFDM0I7QUFDRjtBQVVBLFNBQVMsc0JBQXNCLFFBQTJDO0FBQ3hFLFFBQU0sRUFBRSxNQUFNLFNBQVMsUUFBUSxNQUFNLElBQUk7QUFDekMsUUFBTSxrQkFBNEIsQ0FBQztBQUNuQyxNQUFJLFNBQVM7QUFFYixhQUFXLGVBQWUsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ25ELFVBQU0sYUFBYSxZQUFZLGNBQWM7QUFDN0MsUUFBSSxRQUFRLDJCQUEyQixVQUFVLEdBQUc7QUFDbEQsWUFBTSxNQUFNLFVBQVUsV0FBVyxRQUFRO0FBQ3pDLFVBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHO0FBQzFCO0FBQUEsTUFDRjtBQUNBLHNCQUFnQixLQUFLLEdBQUc7QUFBQSxJQUMxQixXQUFXLFdBQVcsU0FBUyxTQUFTLHVCQUF1QixHQUFHO0FBQ2hFLGVBQVM7QUFBQSxJQUNYO0FBQUEsRUFDRjtBQUVBLE1BQUksZ0JBQWdCLFNBQVMsR0FBRztBQUM5QixlQUFXLE9BQU8saUJBQWlCO0FBQ2pDLFdBQUssSUFBSSxHQUFHO0FBQUEsSUFDZDtBQUFBLEVBQ0YsV0FBVyxRQUFRO0FBQ2pCLFVBQU0sSUFBSSxNQUFNO0FBQUEsRUFDbEI7QUFDRjtBQUVBLFNBQVMsK0JBQStCLE1BQXdCO0FBQzlELFNBQU8sR0FDTCxLQUNHLElBQUksQ0FBQyxRQUFRLE9BQU8sdUJBQXVCLElBQUksR0FBRyxNQUFNLEVBQ3hELEtBQUssSUFBSSxDQUNkO0FBQUE7QUFDRjtBQUVBLFNBQVMsaUNBQWlDLE9BQXlCO0FBQ2pFLFNBQU8sTUFBTSxXQUFXLElBQ3BCLEtBQ0EsR0FDQSxNQUNHLElBQUksQ0FBQyxTQUFTLHlCQUF5QixJQUFJLE1BQU0sRUFDakQsS0FBSyxJQUFJLENBQ2Q7QUFBQTtBQUNKO0FBRUEsZUFBZSxtQkFBbUIsUUFBaUQ7QUFDakYsUUFBTSxFQUFFLFFBQVEsVUFBVSx3QkFBd0IsSUFBSTtBQUN0RCxRQUFNLFlBQVksV0FBVyxRQUFRLFVBQVUsZUFBZSxVQUFVO0FBQ3hFLFFBQU0sZUFBNkI7QUFBQTtBQUFBO0FBQUEsSUFHakMsZUFBZSxRQUFRLElBQUk7QUFBQSxJQUMzQixRQUFRO0FBQUEsTUFDTixJQUFJO0FBQUEsSUFDTjtBQUFBLElBQ0EsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLElBQ2I7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLFFBQVEsS0FBSyxVQUFVLFNBQVMsTUFBTTtBQUFBLElBQ3RDLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxNQUNQLHdCQUF3QixXQUFXLEtBQUs7QUFBQSxNQUN4QyxhQUFhO0FBQUEsTUFDYixzQkFBc0IsU0FBUztBQUFBLElBQ2pDO0FBQUEsSUFDQSxXQUFXO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZUFBZSxNQUFNLFFBQVEsWUFBWTtBQUMvQyxNQUFJO0FBQ0YsVUFBTSxhQUFhLFFBQVE7QUFBQSxFQUM3QixVQUFFO0FBQ0EsVUFBTSxhQUFhLFFBQVE7QUFBQSxFQUM3QjtBQUNGO0FBRUEsU0FBUyw0QkFBNEIsUUFBbUQ7QUFDdEYsUUFBTSxFQUFFLHFCQUFxQixXQUFXLGdCQUFnQixJQUFJO0FBQzVELFFBQU0sa0JBQWtCLEtBQUssVUFBVSxTQUFTLGlCQUFpQiwrQkFBK0IsU0FBUztBQUN6RyxNQUFJLGVBQWUsZUFBZSxRQUFRLG1CQUFtQixHQUFHLGVBQWUsRUFBRSxXQUFXLE1BQU0sR0FBRztBQUNyRyxNQUFJLENBQUMsYUFBYSxXQUFXLEdBQUcsR0FBRztBQUNqQyxtQkFBZSxLQUFLLFlBQVk7QUFBQSxFQUNsQztBQUNBLFNBQU8sd0JBQXdCLFlBQVk7QUFBQTtBQUM3QztBQUVBLGVBQWUsaUJBQW9DO0FBR2pELFFBQU0sRUFBRSxRQUFRLElBQUksY0FBYyxVQUFVLFlBQVk7QUFDeEQsUUFBTSxPQUFPLElBQUksS0FBSyxRQUFRLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFckUsYUFBVyxRQUFRLE1BQU0sYUFBYSxVQUFVLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQyxHQUFHO0FBQ3pFLFFBQUksQ0FBQyxLQUFLLFNBQVMsS0FBSyxHQUFHO0FBQ3pCO0FBQUEsSUFDRjtBQUVBLFVBQU0sZ0JBQWdCLGFBQWEsS0FBSyxVQUFVLEtBQUssSUFBSSxHQUFHLE9BQU87QUFFckUsZUFBVyxDQUFDLEVBQUUsR0FBRyxLQUFLLGNBQWMsU0FBUyxxQkFBcUIsR0FBRztBQUNuRSxXQUFLLElBQUksT0FBTyxHQUFHLEVBQUUsWUFBWSxDQUFDO0FBQUEsSUFDcEM7QUFBQSxFQUNGO0FBRUEsU0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUs7QUFDeEI7QUFFQSxTQUFTLGtCQUE0QjtBQUNuQyxRQUFNLEVBQUUsUUFBUSxJQUFJLGNBQWMsVUFBVSxZQUFZO0FBQ3hELFVBQVEsUUFBUSxTQUFTLENBQUMsR0FDdkIsT0FBTyxDQUFDLFNBQVMsNEJBQTRCLElBQUksSUFBSSxDQUFDLEVBQ3RELEtBQUs7QUFDVjtBQUVBLFNBQVMsNkJBQTZCLFFBQWlFO0FBQ3JHLFFBQU0sRUFBRSxnQkFBZ0IsaUJBQWlCLElBQUk7QUFDN0MsUUFBTSxFQUFFLFFBQVEsSUFBSSxjQUFjLFVBQVUsWUFBWTtBQUN4RCxRQUFNLFVBQVUsY0FBYztBQUFBLElBQzVCLFNBQVMsRUFBRSxHQUFHLFNBQVMsUUFBUSxLQUFLO0FBQUEsSUFDcEMsV0FBVyxpQkFBaUIsSUFBSSxDQUFDLFNBQVMsY0FBYyxVQUFVLEtBQUssSUFBSSxDQUFDO0FBQUEsRUFDOUUsQ0FBQztBQUNELFFBQU0sVUFBVSxRQUFRLGVBQWU7QUFDdkMsUUFBTSxtQkFBbUIsb0JBQUksSUFBb0I7QUFFakQsYUFBVyxRQUFRLGtCQUFrQjtBQU1uQyxRQUFTQSxTQUFULFNBQWUsTUFBa0I7QUFDL0IsVUFBSSxhQUFhLElBQUksS0FBSyxnQkFBZ0IsSUFBSSxHQUFHO0FBQy9DLGNBQU0sU0FBUyxRQUFRLG9CQUFvQixJQUFJO0FBQy9DLFlBQUksV0FBVyxRQUFXO0FBQ3hCLGdDQUFzQixFQUFFLE1BQU0sU0FBUyxRQUFRLGFBQWEsU0FBUyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDdkY7QUFBQSxNQUNGO0FBQ0EsbUJBQWEsTUFBTUEsTUFBSztBQUFBLElBQzFCO0FBUlMsZ0JBQUFBO0FBSlQsVUFBTSxhQUFhLGtCQUFrQixRQUFRLGNBQWMsY0FBYyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDOUYsVUFBTSxPQUFPLG9CQUFJLElBQVk7QUFDN0IsVUFBTSxRQUFRLG9CQUFJLElBQVk7QUFXOUIsSUFBQUEsT0FBTSxVQUFVO0FBRWhCLFVBQU0sY0FBYyxDQUFDLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxTQUFTLGVBQWUsU0FBUyxJQUFJLENBQUM7QUFDN0UsUUFBSSxLQUFLLE9BQU8sS0FBSyxZQUFZLFNBQVMsR0FBRztBQUMzQyx1QkFBaUI7QUFBQSxRQUNmO0FBQUEsU0FDQyxLQUFLLE9BQU8sSUFBSSwrQkFBK0IsQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLGlDQUFpQyxZQUFZLEtBQUssQ0FBQztBQUFBLE1BQy9IO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxlQUFlLGNBQWMsUUFBOEM7QUFDekUsUUFBTSxVQUFVLE1BQU0sYUFBYSxRQUFRLEVBQUUsZUFBZSxLQUFLLENBQUM7QUFDbEUsUUFBTSxhQUFhLE1BQU0sU0FBUyxTQUFTLENBQUMsV0FBVyxrQkFBa0IsUUFBUSxNQUFNLENBQUM7QUFDeEYsUUFBTSxRQUFRLFdBQVcsT0FBTyxDQUFDLFNBQVMsU0FBUyxNQUFTO0FBRTVELE1BQUksTUFBTSxXQUFXLEdBQUc7QUFDdEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFNBQVMsS0FBSyxRQUFRLFVBQVUsT0FBTyxHQUFHLEtBQUs7QUFDckQsU0FBTztBQUNUO0FBRUEsZUFBZSxjQUFpQztBQUM5QyxNQUFJLFFBQVEsTUFBTSxhQUFhLFVBQVUsS0FBSyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ2pFLFVBQVEsTUFBTSxJQUFJLENBQUMsU0FBUyxvQkFBb0IsS0FBSyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDMUUsU0FBTyxNQUFNO0FBQUEsSUFBTyxDQUFDLFNBQ25CLEtBQUssU0FBUyxVQUFVLFdBQVcsS0FBSyxDQUFDLEtBQUssU0FBUyxVQUFVLFlBQVksS0FBSyxDQUFDLEtBQUssU0FBUyxVQUFVLEtBQ3hHLENBQUMsS0FBSyxTQUFTLElBQUksVUFBVSxXQUFXLEdBQUc7QUFBQSxFQUNoRDtBQUNGO0FBRUEsZUFBZSxrQkFBa0IsUUFBZ0IsUUFBNkM7QUFDNUYsTUFBSSxvQkFBb0IsUUFBUSxNQUFNLEdBQUc7QUFDdkM7QUFBQSxFQUNGO0FBRUEsTUFBSTtBQUNKLE1BQUk7QUFDSixNQUFJLE9BQU8sWUFBWSxHQUFHO0FBQ3hCLFVBQU0sU0FBUyxNQUFNLGNBQWMsS0FBSyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQzVELFFBQUksV0FBVyx5QkFBNkI7QUFDMUM7QUFBQSxJQUNGO0FBQ0EsaUJBQWEsb0JBQW9CLEtBQUssT0FBTyxNQUFNLFVBQVUsT0FBTyxDQUFDO0FBQ3JFLFdBQU8sT0FBTztBQUFBLEVBQ2hCLE9BQU87QUFDTCxVQUFNLFlBQVksUUFBUSxPQUFPLElBQUk7QUFDckMsV0FBTyxTQUFTLE9BQU8sTUFBTSxTQUFTO0FBQ3RDLGlCQUFhLG9CQUFvQixPQUFPLElBQUk7QUFBQSxFQUM5QztBQUVBLFNBQU8sZ0JBQWdCLElBQUksV0FBVyxVQUFVO0FBQ2xEO0FBRUEsU0FBUyxpQkFBaUIsS0FBc0I7QUFDOUMsU0FBTyx5QkFBeUIsS0FBSyxDQUFDLFdBQVcsSUFBSSxXQUFXLE1BQU0sQ0FBQztBQUN6RTtBQUVBLFNBQVMsbUJBQW1CLE1BQXVCO0FBQ2pELFNBQU8sQ0FBQyxLQUFLLFNBQVMsVUFBVSxXQUFXLEtBQUssS0FBSyxTQUFTLFVBQVUsS0FBSyxTQUFTLGNBQWMsS0FBSyxTQUFTLFdBQVc7QUFDL0g7QUFFQSxTQUFTLG9CQUFvQixRQUFnQixRQUF5QjtBQUNwRSxRQUFNLGdCQUFtQyxDQUFDLFVBQVUsU0FBUyxVQUFVLE9BQU8sVUFBVSxRQUFRLFVBQVUsV0FBVztBQUNySCxRQUFNLGtCQUFrQixjQUFjLFNBQVMsT0FBTyxJQUFJLEtBQUssT0FBTyxLQUFLLFNBQVMsVUFBVSxZQUFZLEtBQUssT0FBTyxNQUFNLEdBQUcsRUFBRSxTQUFTLFVBQVUsS0FBSztBQUN6SixTQUFPLG1CQUFvQixPQUFPLE9BQU8sS0FBSyxtQkFBbUIsT0FBTyxJQUFJO0FBQzlFO0FBRUEsU0FBUyxhQUFhLFNBQXNCLFFBQTRCO0FBRXRFLFVBQVEsT0FBTyxRQUFRLFlBQVksV0FBVyxJQUFJLFNBQVMsUUFBUSxpQkFBaUIsTUFBTTtBQUM1RjtBQUVBLGVBQWUsVUFBVSxRQUF3QztBQUMvRCxRQUFNLEVBQUUsa0JBQWtCLFlBQVksaUJBQWlCLFVBQVUsSUFBSTtBQUNyRSxRQUFNLGFBQWEsV0FBVztBQUFBLElBQzVCLFNBQVM7QUFBQSxJQUNULFVBQVUsVUFBVTtBQUFBLElBQ3BCLGFBQWEsVUFBVTtBQUFBLEVBQ3pCLENBQUM7QUFDRCxRQUFNLGdCQUFnQixhQUFhLEdBQUcsVUFBVSxJQUFJLFVBQVUsR0FBRyxLQUFLO0FBQ3RFLFFBQU0sV0FBVyxXQUFXLEVBQUUsUUFBUSxVQUFVLEtBQUssWUFBWSxNQUFNLGFBQWEsVUFBVSxVQUFVLFVBQVUsVUFBVSxDQUFDO0FBQzdILFFBQU0sV0FBVyxXQUFXLEVBQUUsUUFBUSxVQUFVLEtBQUssWUFBWSxNQUFNLGFBQWEsVUFBVSxVQUFVLFVBQVUsVUFBVSxDQUFDO0FBQzdILFFBQU0saUJBQWlCLFFBQVEsUUFBUTtBQUN2QyxRQUFNLGlCQUFpQixRQUFRLFFBQVE7QUFFdkMsTUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUN4QztBQUFBLEVBQ0Y7QUFFQSxRQUFNLGNBQWMsV0FBVyxTQUFTLFVBQVUsS0FBSztBQUN2RCxRQUFNLFVBQVUsV0FBVyxFQUFFLFFBQVEsVUFBVSxLQUFLLFlBQVksTUFBTSxhQUFhLFVBQVUsU0FBUyxVQUFVLFNBQVMsQ0FBQztBQUMxSCxRQUFNLFVBQVUsV0FBVyxFQUFFLFFBQVEsVUFBVSxLQUFLLFlBQVksTUFBTSxhQUFhLFVBQVUsU0FBUyxVQUFVLFNBQVMsQ0FBQztBQUUxSCxNQUFJLGFBQWE7QUFDZixxQkFBaUIsYUFBYSxJQUFJO0FBQUEsTUFDaEMsUUFBUTtBQUFBLFFBQ04sT0FBTztBQUFBLE1BQ1Q7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNQLE9BQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBLEVBQ0YsT0FBTztBQUNMLFVBQU0sYUFBYSxvQkFBb0IsS0FBSyxVQUFVLEtBQUssWUFBWSxhQUFhLFVBQVUsUUFBUSxVQUFVLE9BQU8sQ0FBQztBQUV4SCxxQkFBaUIsYUFBYSxJQUFJO0FBQUE7QUFBQTtBQUFBLE1BR2hDLEdBQUksb0JBQW9CLFVBQWEsRUFBRSxDQUFDLGVBQWUsR0FBRyxXQUFXO0FBQUEsTUFDckUsUUFBUTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLE1BQ1g7QUFBQSxNQUNBLFNBQVM7QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxNQUNYO0FBQUE7QUFBQSxJQUVGO0FBQUEsRUFDRjtBQUVBLE1BQUksZUFBZSxVQUFVLGVBQXlCO0FBQ3BEO0FBQUEsRUFDRjtBQUVBLE1BQUksQ0FBQyxZQUFZO0FBQ2YsVUFBTTtBQUFBLE1BQ0o7QUFBQSxNQUNBLGNBQ0ksRUFBRSxNQUFNLFVBQVUsT0FBTyxTQUFTLFlBQVksUUFBUSxFQUFFLElBQ3hELEVBQUUsTUFBTSxTQUFTLFlBQVksT0FBTyxHQUFHLFFBQVEsU0FBUyxZQUFZLE9BQU8sR0FBRyxNQUFNLFVBQVUsT0FBTyxTQUFTLFlBQVksUUFBUSxFQUFFO0FBQUEsSUFDMUk7QUFDQTtBQUFBLEVBQ0Y7QUFFQSxhQUFXLFFBQVEsTUFBTSxhQUFhLGNBQWMsR0FBRztBQUNyRCxRQUFJLENBQUMsS0FBSyxTQUFTLFVBQVUsYUFBYSxHQUFHO0FBQzNDO0FBQUEsSUFDRjtBQUNBLFVBQU0sT0FBTyxTQUFTLE1BQU0sVUFBVSxhQUFhO0FBQ25ELFVBQU0sd0JBQXdCLEtBQUssWUFBWSxJQUFJO0FBQ25ELFVBQU0sUUFBUSxTQUFTLHVCQUF1QixLQUFLLGdCQUFnQixPQUFPLFVBQVUsYUFBYSxDQUFDO0FBQ2xHLFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQSxjQUNJLEVBQUUsTUFBTSxVQUFVLE1BQU0sSUFDeEI7QUFBQSxRQUNBLE1BQU0sU0FBUyx1QkFBdUIsS0FBSyxnQkFBZ0IsT0FBTyxVQUFVLFlBQVksQ0FBQztBQUFBLFFBQ3pGLFFBQVEsU0FBUyx1QkFBdUIsS0FBSyxnQkFBZ0IsT0FBTyxVQUFVLFlBQVksQ0FBQztBQUFBLFFBQzNGLE1BQU07QUFBQSxRQUNOO0FBQUEsTUFDRjtBQUFBLElBQ0o7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLGFBQWEsU0FBeUI7QUFDN0MsTUFBSSxhQUFhLFdBQVc7QUFBQSxJQUMxQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0QsZUFBYSxXQUFXO0FBQUEsSUFDdEIsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLEVBQ2YsQ0FBQztBQU1ELGVBQWEsV0FBVztBQUFBLElBQ3RCLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxFQUNmLENBQUM7QUFDRCxTQUFPLFdBQVc7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0g7QUFFQSxTQUFTLFdBQVcsUUFBa0M7QUFDcEQsU0FBTyxvQkFBb0IsS0FBSyxVQUFVLFNBQVMsT0FBTyxRQUFRLE9BQU8sWUFBWSxPQUFPLElBQUksQ0FBQztBQUNuRztBQUVBLFNBQVMsVUFBVSxhQUE2QjtBQUc5QyxRQUFNLG1CQUFtQix3QkFBd0IsS0FBSyxXQUFXO0FBQ2pFLE1BQUksa0JBQWtCLFdBQVcsUUFBVztBQUUxQyxVQUFNLE1BQU0sT0FBTyxpQkFBaUIsT0FBTyxLQUFLLENBQUM7QUFDakQsVUFBTSxTQUFTLE9BQU8saUJBQWlCLE9BQU8sUUFBUSxDQUFDO0FBQ3ZELFlBQVEsV0FBVyxVQUFVLE1BQU0sR0FBRyxHQUFHLElBQUksT0FBTyxXQUFXLEtBQUssR0FBRyxDQUFDLElBQUksWUFBWTtBQUFBLEVBQzFGO0FBQ0EsU0FBTyxTQUFTLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxVQUFVLEVBQUUsRUFBRSxRQUFRLFlBQVksRUFBRTtBQUN6RjtBQUVBLFNBQVMsYUFBYSxTQUF5QjtBQUM3QyxRQUFNLGFBQWEsV0FBVztBQUFBLElBQzVCLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxFQUNmLENBQUM7QUFDRCxTQUFPLFdBQVc7QUFBQSxJQUNoQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0g7QUFFQSxlQUFlLHdCQUF3QixRQUFnQixhQUF5QztBQUM5RixRQUFNLE1BQU0sUUFBUSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ3ZDLFFBQU0sVUFBVSxLQUFLLFFBQVEsVUFBVSxXQUFXLEdBQUcsV0FBVztBQUNsRTsiLCJuYW1lcyI6WyJ2aXNpdCJdfQ==
@@ -9,7 +9,7 @@
9
9
  * `eslint-plugin-n` and the generic in-house rules. A project-type layer (the Obsidian plugin one lives in
10
10
  * `@mnaoumov/obsidian-dev-toolkit`) builds on {@link getTypeScriptEslintConfigs} and adds only what is specific to it.
11
11
  */
12
- import type { ESLint, Linter } from 'eslint';
12
+ import type { Linter } from 'eslint';
13
13
  /**
14
14
  * The parameters for defining ESLint configurations.
15
15
  */
@@ -42,12 +42,6 @@ export interface GetTypeScriptEslintConfigsParams {
42
42
  * The ESLint configuration context.
43
43
  */
44
44
  readonly context: EslintConfigContext;
45
- /**
46
- * The plugin registered under the in-house namespace. A project-type layer that adds in-house rules of its own
47
- * passes ONE plugin carrying the generic rules and its own, because ESLint refuses two plugins under one namespace.
48
- * Defaults to the plugin carrying the generic rules alone.
49
- */
50
- readonly inHousePlugin?: ESLint.Plugin;
51
45
  /**
52
46
  * The oldest Node version shipped source has to run on, as a semver range. When omitted, `eslint-plugin-n` reads
53
47
  * the `engines` field of the project's `package.json`.