obsidian-dev-utils 88.8.0 → 89.0.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 (672) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/demo-vault-helper/main.js +20 -23
  3. package/dist/integration-test-plugin/main.js +2218 -1734
  4. package/dist/lib/cjs/__merged.cjs +57 -35
  5. package/dist/lib/cjs/__merged.d.cts +12 -10
  6. package/dist/lib/cjs/abort-controller.cjs +15 -22
  7. package/dist/lib/cjs/array.cjs +27 -26
  8. package/dist/lib/cjs/array.d.cts +25 -7
  9. package/dist/lib/cjs/async-events.cjs +87 -91
  10. package/dist/lib/cjs/async-events.d.cts +50 -50
  11. package/dist/lib/cjs/async.cjs +80 -80
  12. package/dist/lib/cjs/async.d.cts +23 -23
  13. package/dist/lib/cjs/beeper.cjs +11 -15
  14. package/dist/lib/cjs/blob.cjs +14 -25
  15. package/dist/lib/cjs/codemirror/index.cjs +11 -15
  16. package/dist/lib/cjs/codemirror/state-field-spec.cjs +11 -15
  17. package/dist/lib/cjs/debug-controller.cjs +11 -15
  18. package/dist/lib/cjs/debug.cjs +24 -32
  19. package/dist/lib/cjs/debug.d.cts +1 -1
  20. package/dist/lib/cjs/disposable.cjs +59 -43
  21. package/dist/lib/cjs/disposable.d.cts +27 -8
  22. package/dist/lib/cjs/enum.cjs +11 -15
  23. package/dist/lib/cjs/error.cjs +28 -33
  24. package/dist/lib/cjs/function.cjs +30 -34
  25. package/dist/lib/cjs/function.d.cts +26 -26
  26. package/dist/lib/cjs/generated-during-build.cjs +12 -16
  27. package/dist/lib/cjs/html-element.cjs +84 -89
  28. package/dist/lib/cjs/html-element.d.cts +15 -15
  29. package/dist/lib/cjs/index.cjs +11 -15
  30. package/dist/lib/cjs/integration-test-setup.cjs +11 -15
  31. package/dist/lib/cjs/integration-test-vitest-global-setup.cjs +11 -15
  32. package/dist/lib/cjs/jest-setup.cjs +11 -15
  33. package/dist/lib/cjs/library.cjs +11 -15
  34. package/dist/lib/cjs/object-utils.cjs +120 -117
  35. package/dist/lib/cjs/object-utils.d.cts +27 -27
  36. package/dist/lib/cjs/obsidian/@types/dataview/data-model/value.d.cts +1 -1
  37. package/dist/lib/cjs/obsidian/@types/dataview/expression/field.d.cts +1 -1
  38. package/dist/lib/cjs/obsidian/@types/dataview/expression/functions.d.cts +4 -4
  39. package/dist/lib/cjs/obsidian/active-file-provider.cjs +11 -15
  40. package/dist/lib/cjs/obsidian/app.cjs +11 -15
  41. package/dist/lib/cjs/obsidian/async-with-notice.cjs +28 -32
  42. package/dist/lib/cjs/obsidian/async-with-notice.d.cts +2 -2
  43. package/dist/lib/cjs/obsidian/attachment-path.cjs +20 -24
  44. package/dist/lib/cjs/obsidian/attachment-path.d.cts +5 -5
  45. package/dist/lib/cjs/obsidian/backlink.cjs +12 -16
  46. package/dist/lib/cjs/obsidian/bases-view-registrar.cjs +11 -15
  47. package/dist/lib/cjs/obsidian/callout.cjs +27 -26
  48. package/dist/lib/cjs/obsidian/callout.d.cts +9 -3
  49. package/dist/lib/cjs/obsidian/canvas.cjs +13 -16
  50. package/dist/lib/cjs/obsidian/case-insensitive-file-index.cjs +18 -20
  51. package/dist/lib/cjs/obsidian/code-block-markdown-information.cjs +11 -15
  52. package/dist/lib/cjs/obsidian/code-block-markdown-information.d.cts +2 -2
  53. package/dist/lib/cjs/obsidian/code-block-reg-exp.cjs +11 -15
  54. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.cjs +18 -16
  55. package/dist/lib/cjs/obsidian/command-handlers/abstract-file-command-handler.d.cts +5 -0
  56. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +56 -31
  57. package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +42 -8
  58. package/dist/lib/cjs/obsidian/command-handlers/command-handler.cjs +11 -15
  59. package/dist/lib/cjs/obsidian/command-handlers/command-handler.d.cts +10 -0
  60. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.cjs +26 -30
  61. package/dist/lib/cjs/obsidian/command-handlers/editor-command-handler.d.cts +8 -8
  62. package/dist/lib/cjs/obsidian/command-handlers/file-command-handler.cjs +12 -16
  63. package/dist/lib/cjs/obsidian/command-handlers/folder-command-handler.cjs +12 -16
  64. package/dist/lib/cjs/obsidian/command-handlers/global-command-handler.cjs +13 -17
  65. package/dist/lib/cjs/obsidian/command-handlers/index.cjs +11 -15
  66. package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.cjs +11 -15
  67. package/dist/lib/cjs/obsidian/command-handlers/open-settings-command-handler.cjs +11 -15
  68. package/dist/lib/cjs/obsidian/command-handlers/unlock-active-note-command-handler.cjs +11 -15
  69. package/dist/lib/cjs/obsidian/command-registrar.cjs +11 -15
  70. package/dist/lib/cjs/obsidian/community-plugins.cjs +28 -25
  71. package/dist/lib/cjs/obsidian/community-plugins.d.cts +19 -5
  72. package/dist/lib/cjs/obsidian/components/abort-signal-component.cjs +11 -15
  73. package/dist/lib/cjs/obsidian/components/all-windows-event-component.cjs +11 -15
  74. package/dist/lib/cjs/obsidian/components/all-windows-event-component.d.cts +4 -4
  75. package/dist/lib/cjs/obsidian/components/async-error-handler-component.cjs +13 -16
  76. package/dist/lib/cjs/obsidian/components/async-events-component.cjs +11 -15
  77. package/dist/lib/cjs/obsidian/components/case-insensitive-file-index-component.cjs +11 -15
  78. package/dist/lib/cjs/obsidian/components/component-ex.cjs +26 -28
  79. package/dist/lib/cjs/obsidian/components/component-ex.d.cts +3 -3
  80. package/dist/lib/cjs/obsidian/components/console-debug-component.cjs +14 -18
  81. package/dist/lib/cjs/obsidian/components/console-debug-component.d.cts +2 -2
  82. package/dist/lib/cjs/obsidian/components/disposable-component.cjs +11 -15
  83. package/dist/lib/cjs/obsidian/components/embed-extensions-component.cjs +11 -15
  84. package/dist/lib/cjs/obsidian/components/generate-markdown-link-default-params-component.cjs +11 -15
  85. package/dist/lib/cjs/obsidian/components/index.cjs +14 -15
  86. package/dist/lib/cjs/obsidian/components/index.d.cts +1 -0
  87. package/dist/lib/cjs/obsidian/components/layout-ready-component.cjs +11 -15
  88. package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +11 -15
  89. package/dist/lib/cjs/obsidian/components/monkey-around-component.cjs +29 -33
  90. package/dist/lib/cjs/obsidian/components/monkey-around-component.d.cts +55 -55
  91. package/dist/lib/cjs/obsidian/components/notebook-navigator-menu-event-registrar-component.cjs +297 -0
  92. package/dist/lib/cjs/obsidian/components/notebook-navigator-menu-event-registrar-component.d.cts +139 -0
  93. package/dist/lib/cjs/obsidian/components/plugin-context-component.cjs +11 -15
  94. package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +28 -31
  95. package/dist/lib/cjs/obsidian/components/plugin-settings-component.cjs +26 -30
  96. package/dist/lib/cjs/obsidian/components/plugin-settings-component.d.cts +8 -8
  97. package/dist/lib/cjs/obsidian/components/plugin-settings-tab-component.cjs +11 -15
  98. package/dist/lib/cjs/obsidian/components/pointer-position-component.cjs +13 -17
  99. package/dist/lib/cjs/obsidian/components/registry-component.cjs +11 -15
  100. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +72 -62
  101. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.d.cts +12 -1
  102. package/dist/lib/cjs/obsidian/components/syntax-highlighting-component.cjs +16 -20
  103. package/dist/lib/cjs/obsidian/components/syntax-highlighting-component.d.cts +8 -8
  104. package/dist/lib/cjs/obsidian/constructors/get-dom-events-handlers-constructor.cjs +14 -18
  105. package/dist/lib/cjs/obsidian/constructors/index.cjs +11 -15
  106. package/dist/lib/cjs/obsidian/css-class.cjs +11 -15
  107. package/dist/lib/cjs/obsidian/data-handler.cjs +11 -15
  108. package/dist/lib/cjs/obsidian/dataview-link.cjs +13 -17
  109. package/dist/lib/cjs/obsidian/dataview.cjs +35 -41
  110. package/dist/lib/cjs/obsidian/dataview.d.cts +2 -2
  111. package/dist/lib/cjs/obsidian/demo-vault-helper.cjs +13 -17
  112. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +22 -26
  113. package/dist/lib/cjs/obsidian/desktop-trusted-input.cjs +23 -21
  114. package/dist/lib/cjs/obsidian/editor-extension-registrar.cjs +11 -15
  115. package/dist/lib/cjs/obsidian/editor-suggest-registrar.cjs +11 -15
  116. package/dist/lib/cjs/obsidian/editor.cjs +17 -19
  117. package/dist/lib/cjs/obsidian/events.cjs +12 -16
  118. package/dist/lib/cjs/obsidian/events.d.cts +2 -2
  119. package/dist/lib/cjs/obsidian/extensions-registrar.cjs +11 -15
  120. package/dist/lib/cjs/obsidian/file-change.cjs +76 -80
  121. package/dist/lib/cjs/obsidian/file-change.d.cts +3 -3
  122. package/dist/lib/cjs/obsidian/file-manager.cjs +33 -22
  123. package/dist/lib/cjs/obsidian/file-manager.d.cts +20 -1
  124. package/dist/lib/cjs/obsidian/file-system.cjs +15 -19
  125. package/dist/lib/cjs/obsidian/file-system.d.cts +3 -3
  126. package/dist/lib/cjs/obsidian/frontmatter-link-cache-with-offsets.cjs +11 -15
  127. package/dist/lib/cjs/obsidian/frontmatter.cjs +15 -19
  128. package/dist/lib/cjs/obsidian/hover-link-source-registrar.cjs +11 -15
  129. package/dist/lib/cjs/obsidian/html-element.cjs +13 -17
  130. package/dist/lib/cjs/obsidian/html-element.d.cts +2 -2
  131. package/dist/lib/cjs/obsidian/i18n/custom-type-options.cjs +11 -15
  132. package/dist/lib/cjs/obsidian/i18n/default-translations.cjs +11 -15
  133. package/dist/lib/cjs/obsidian/i18n/i18n.cjs +13 -16
  134. package/dist/lib/cjs/obsidian/i18n/i18n.d.cts +7 -0
  135. package/dist/lib/cjs/obsidian/i18n/index.cjs +11 -15
  136. package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +11 -15
  137. package/dist/lib/cjs/obsidian/i18n/locales/index.cjs +11 -15
  138. package/dist/lib/cjs/obsidian/i18n/locales/translations-map.cjs +11 -15
  139. package/dist/lib/cjs/obsidian/index.cjs +14 -15
  140. package/dist/lib/cjs/obsidian/index.d.cts +1 -0
  141. package/dist/lib/cjs/obsidian/is-in-obsidian.cjs +11 -15
  142. package/dist/lib/cjs/obsidian/link-update-progress.cjs +11 -15
  143. package/dist/lib/cjs/obsidian/link.cjs +91 -81
  144. package/dist/lib/cjs/obsidian/link.d.cts +22 -22
  145. package/dist/lib/cjs/obsidian/logger.cjs +21 -25
  146. package/dist/lib/cjs/obsidian/logger.d.cts +5 -5
  147. package/dist/lib/cjs/obsidian/loop.cjs +14 -18
  148. package/dist/lib/cjs/obsidian/loop.d.cts +1 -1
  149. package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.cjs +12 -16
  150. package/dist/lib/cjs/obsidian/markdown-code-block-processor-registrar.d.cts +3 -3
  151. package/dist/lib/cjs/obsidian/markdown-code-block-processor.cjs +35 -40
  152. package/dist/lib/cjs/obsidian/markdown-code-block-processor.d.cts +3 -3
  153. package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.cjs +12 -16
  154. package/dist/lib/cjs/obsidian/markdown-post-processor-registrar.d.cts +3 -3
  155. package/dist/lib/cjs/obsidian/markdown-view.cjs +11 -15
  156. package/dist/lib/cjs/obsidian/markdown.cjs +22 -24
  157. package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +11 -15
  158. package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +1 -1
  159. package/dist/lib/cjs/obsidian/metadata-cache.cjs +16 -20
  160. package/dist/lib/cjs/obsidian/metadata-cache.d.cts +2 -2
  161. package/dist/lib/cjs/obsidian/modals/alert.cjs +11 -15
  162. package/dist/lib/cjs/obsidian/modals/confirm.cjs +11 -15
  163. package/dist/lib/cjs/obsidian/modals/index.cjs +11 -15
  164. package/dist/lib/cjs/obsidian/modals/minimizable-modal.cjs +28 -32
  165. package/dist/lib/cjs/obsidian/modals/modal.cjs +11 -15
  166. package/dist/lib/cjs/obsidian/modals/prompt.cjs +11 -15
  167. package/dist/lib/cjs/obsidian/modals/select-item.cjs +16 -20
  168. package/dist/lib/cjs/obsidian/modals/select-item.d.cts +1 -1
  169. package/dist/lib/cjs/obsidian/modals/select-option.cjs +11 -15
  170. package/dist/lib/cjs/obsidian/modals/suggest-modal-command-builder.cjs +26 -28
  171. package/dist/lib/cjs/obsidian/modals/suggest-modal-command-builder.d.cts +5 -5
  172. package/dist/lib/cjs/obsidian/notebook-navigator.cjs +155 -0
  173. package/dist/lib/cjs/obsidian/notebook-navigator.d.cts +132 -0
  174. package/dist/lib/cjs/obsidian/obsidian-protocol-handler-registrar.cjs +11 -15
  175. package/dist/lib/cjs/obsidian/obsidian-settings.cjs +11 -15
  176. package/dist/lib/cjs/obsidian/parse-link.cjs +61 -62
  177. package/dist/lib/cjs/obsidian/parse-link.d.cts +4 -4
  178. package/dist/lib/cjs/obsidian/path-settings.cjs +27 -25
  179. package/dist/lib/cjs/obsidian/pdf.cjs +13 -17
  180. package/dist/lib/cjs/obsidian/pdf.d.cts +2 -2
  181. package/dist/lib/cjs/obsidian/plugin/index.cjs +11 -15
  182. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +11 -15
  183. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +156 -52
  184. package/dist/lib/cjs/obsidian/plugin/plugin-context.cjs +17 -21
  185. package/dist/lib/cjs/obsidian/plugin/plugin-context.d.cts +2 -2
  186. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.cjs +20 -24
  187. package/dist/lib/cjs/obsidian/plugin/plugin-event-source.d.cts +11 -9
  188. package/dist/lib/cjs/obsidian/plugin/plugin-settings-tab.cjs +29 -33
  189. package/dist/lib/cjs/obsidian/plugin/plugin.cjs +33 -16
  190. package/dist/lib/cjs/obsidian/plugin/plugin.d.cts +11 -1
  191. package/dist/lib/cjs/obsidian/plugin-cli-handler-registrar.cjs +11 -15
  192. package/dist/lib/cjs/obsidian/popovers/field-popover.cjs +11 -15
  193. package/dist/lib/cjs/obsidian/popovers/index.cjs +11 -15
  194. package/dist/lib/cjs/obsidian/popovers/popover-anchor.cjs +14 -18
  195. package/dist/lib/cjs/obsidian/popovers/popover-anchor.d.cts +2 -2
  196. package/dist/lib/cjs/obsidian/popovers/popover.cjs +19 -23
  197. package/dist/lib/cjs/obsidian/queue.cjs +16 -20
  198. package/dist/lib/cjs/obsidian/queue.d.cts +2 -2
  199. package/dist/lib/cjs/obsidian/react/app-context.cjs +11 -15
  200. package/dist/lib/cjs/obsidian/react/index.cjs +11 -15
  201. package/dist/lib/cjs/obsidian/reference.cjs +11 -15
  202. package/dist/lib/cjs/obsidian/resource-lock.cjs +157 -78
  203. package/dist/lib/cjs/obsidian/resource-lock.d.cts +5 -0
  204. package/dist/lib/cjs/obsidian/resource-url.cjs +12 -16
  205. package/dist/lib/cjs/obsidian/ribbon-icon-registrar.cjs +11 -15
  206. package/dist/lib/cjs/obsidian/ribbon-icon-registrar.d.cts +2 -2
  207. package/dist/lib/cjs/obsidian/setting-components/checkbox-component.cjs +18 -22
  208. package/dist/lib/cjs/obsidian/setting-components/checkbox-component.d.cts +5 -5
  209. package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.cjs +28 -31
  210. package/dist/lib/cjs/obsidian/setting-components/code-highlighter-component.d.cts +2 -2
  211. package/dist/lib/cjs/obsidian/setting-components/date-component.cjs +14 -18
  212. package/dist/lib/cjs/obsidian/setting-components/date-component.d.cts +2 -2
  213. package/dist/lib/cjs/obsidian/setting-components/date-time-component.cjs +14 -18
  214. package/dist/lib/cjs/obsidian/setting-components/date-time-component.d.cts +2 -2
  215. package/dist/lib/cjs/obsidian/setting-components/email-component.cjs +14 -18
  216. package/dist/lib/cjs/obsidian/setting-components/email-component.d.cts +2 -2
  217. package/dist/lib/cjs/obsidian/setting-components/file-component.cjs +11 -15
  218. package/dist/lib/cjs/obsidian/setting-components/index.cjs +11 -15
  219. package/dist/lib/cjs/obsidian/setting-components/month-component.cjs +14 -18
  220. package/dist/lib/cjs/obsidian/setting-components/month-component.d.cts +2 -2
  221. package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.cjs +17 -21
  222. package/dist/lib/cjs/obsidian/setting-components/multiple-dropdown-component.d.cts +2 -2
  223. package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.cjs +14 -18
  224. package/dist/lib/cjs/obsidian/setting-components/multiple-email-component.d.cts +2 -2
  225. package/dist/lib/cjs/obsidian/setting-components/multiple-file-component.cjs +12 -16
  226. package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.cjs +15 -19
  227. package/dist/lib/cjs/obsidian/setting-components/multiple-text-component.d.cts +2 -2
  228. package/dist/lib/cjs/obsidian/setting-components/number-component.cjs +14 -18
  229. package/dist/lib/cjs/obsidian/setting-components/number-component.d.cts +2 -2
  230. package/dist/lib/cjs/obsidian/setting-components/password-component.cjs +14 -18
  231. package/dist/lib/cjs/obsidian/setting-components/password-component.d.cts +2 -2
  232. package/dist/lib/cjs/obsidian/setting-components/setting-component-wrapper.cjs +16 -20
  233. package/dist/lib/cjs/obsidian/setting-components/setting-component-wrapper.d.cts +2 -2
  234. package/dist/lib/cjs/obsidian/setting-components/telephone-component.cjs +14 -18
  235. package/dist/lib/cjs/obsidian/setting-components/telephone-component.d.cts +2 -2
  236. package/dist/lib/cjs/obsidian/setting-components/text-based-component.cjs +16 -20
  237. package/dist/lib/cjs/obsidian/setting-components/text-based-component.d.cts +2 -2
  238. package/dist/lib/cjs/obsidian/setting-components/time-component.cjs +14 -18
  239. package/dist/lib/cjs/obsidian/setting-components/time-component.d.cts +2 -2
  240. package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.cjs +15 -19
  241. package/dist/lib/cjs/obsidian/setting-components/tri-state-checkbox-component.d.cts +2 -2
  242. package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.cjs +16 -20
  243. package/dist/lib/cjs/obsidian/setting-components/typed-dropdown-component.d.cts +2 -2
  244. package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.cjs +18 -22
  245. package/dist/lib/cjs/obsidian/setting-components/typed-multiple-dropdown-component.d.cts +2 -2
  246. package/dist/lib/cjs/obsidian/setting-components/typed-range-text-component.cjs +11 -15
  247. package/dist/lib/cjs/obsidian/setting-components/typed-text-component.cjs +16 -19
  248. package/dist/lib/cjs/obsidian/setting-components/typed-text-component.d.cts +4 -4
  249. package/dist/lib/cjs/obsidian/setting-components/url-component.cjs +14 -18
  250. package/dist/lib/cjs/obsidian/setting-components/url-component.d.cts +2 -2
  251. package/dist/lib/cjs/obsidian/setting-components/validator-component.cjs +45 -49
  252. package/dist/lib/cjs/obsidian/setting-components/validator-component.d.cts +2 -2
  253. package/dist/lib/cjs/obsidian/setting-components/value-component-with-change-tracking.cjs +11 -15
  254. package/dist/lib/cjs/obsidian/setting-components/week-component.cjs +14 -18
  255. package/dist/lib/cjs/obsidian/setting-components/week-component.d.cts +2 -2
  256. package/dist/lib/cjs/obsidian/setting-ex.cjs +76 -80
  257. package/dist/lib/cjs/obsidian/setting-ex.d.cts +42 -42
  258. package/dist/lib/cjs/obsidian/setting-group-ex.cjs +14 -18
  259. package/dist/lib/cjs/obsidian/setting-group-ex.d.cts +2 -2
  260. package/dist/lib/cjs/obsidian/status-bar-item-registrar.cjs +11 -15
  261. package/dist/lib/cjs/obsidian/validation.cjs +11 -15
  262. package/dist/lib/cjs/obsidian/vault-delete.cjs +23 -20
  263. package/dist/lib/cjs/obsidian/vault-delete.d.cts +16 -2
  264. package/dist/lib/cjs/obsidian/vault-transaction.cjs +17 -18
  265. package/dist/lib/cjs/obsidian/vault.cjs +81 -63
  266. package/dist/lib/cjs/obsidian/vault.d.cts +32 -11
  267. package/dist/lib/cjs/obsidian/view-registrar.cjs +11 -15
  268. package/dist/lib/cjs/obsidian/workspace.cjs +12 -16
  269. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +11 -15
  270. package/dist/lib/cjs/path.cjs +18 -22
  271. package/dist/lib/cjs/path.d.cts +1 -1
  272. package/dist/lib/cjs/reg-exp.cjs +38 -35
  273. package/dist/lib/cjs/reg-exp.d.cts +4 -4
  274. package/dist/lib/cjs/script-utils/build.cjs +21 -25
  275. package/dist/lib/cjs/script-utils/build.d.cts +1 -1
  276. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +24 -28
  277. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +36 -34
  278. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/custom-esbuild-options-plugin.cjs +11 -15
  279. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/dependency.cjs +20 -24
  280. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-esm-plugin.cjs +13 -17
  281. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.cjs +16 -20
  282. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/index.cjs +11 -15
  283. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.cjs +11 -15
  284. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.cts +6 -2
  285. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +32 -36
  286. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/rename-css-plugin.cjs +11 -15
  287. package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +11 -15
  288. package/dist/lib/cjs/script-utils/bundlers/esbuild.cjs +11 -15
  289. package/dist/lib/cjs/script-utils/bundlers/index.cjs +11 -15
  290. package/dist/lib/cjs/script-utils/check-project-types.cjs +13 -17
  291. package/dist/lib/cjs/script-utils/check-project-types.d.cts +12 -4
  292. package/dist/lib/cjs/script-utils/cli-utils.cjs +39 -47
  293. package/dist/lib/cjs/script-utils/cli-utils.d.cts +6 -6
  294. package/dist/lib/cjs/script-utils/code-generator.cjs +11 -15
  295. package/dist/lib/cjs/script-utils/commitlint-config.cjs +11 -15
  296. package/dist/lib/cjs/script-utils/demo-vault-coverage.cjs +22 -23
  297. package/dist/lib/cjs/script-utils/demo-vault.cjs +11 -15
  298. package/dist/lib/cjs/script-utils/env-toggle.cjs +13 -17
  299. package/dist/lib/cjs/script-utils/exec.cjs +40 -44
  300. package/dist/lib/cjs/script-utils/exec.d.cts +4 -4
  301. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +12 -16
  302. package/dist/lib/cjs/script-utils/formatters/index.cjs +11 -15
  303. package/dist/lib/cjs/script-utils/fs.cjs +13 -17
  304. package/dist/lib/cjs/script-utils/git.cjs +11 -15
  305. package/dist/lib/cjs/script-utils/index.cjs +11 -15
  306. package/dist/lib/cjs/script-utils/json.cjs +15 -19
  307. package/dist/lib/cjs/script-utils/json.d.cts +2 -2
  308. package/dist/lib/cjs/script-utils/linters/cspell.cjs +12 -16
  309. package/dist/lib/cjs/script-utils/linters/eslint-agnostic-core-boundary.cjs +11 -15
  310. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +402 -16
  311. package/dist/lib/cjs/script-utils/linters/eslint-no-restricted-syntax.cjs +11 -15
  312. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +11 -15
  313. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.cjs +27 -31
  314. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.cts +3 -1
  315. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.cjs +27 -31
  316. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-unused-params-members.d.cts +3 -1
  317. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.cjs +21 -25
  318. package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.d.cts +3 -1
  319. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +11 -15
  320. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.cjs +109 -113
  321. package/dist/lib/cjs/script-utils/linters/eslint-rules/params-options-name-match.d.cts +3 -1
  322. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.cjs +13 -17
  323. package/dist/lib/cjs/script-utils/linters/eslint-rules/prefer-noop-async.d.cts +3 -1
  324. package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.cjs +21 -25
  325. package/dist/lib/cjs/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.cts +3 -1
  326. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.cjs +51 -55
  327. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-component-suffix.d.cts +9 -3
  328. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.cjs +25 -27
  329. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-method-template.d.cts +6 -2
  330. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.cjs +33 -37
  331. package/dist/lib/cjs/script-utils/linters/eslint-rules/require-super-call.d.cts +3 -1
  332. package/dist/lib/cjs/script-utils/linters/eslint-rules/rule-tester-helper.cjs +11 -15
  333. package/dist/lib/cjs/script-utils/linters/eslint.cjs +14 -18
  334. package/dist/lib/cjs/script-utils/linters/index.cjs +14 -15
  335. package/dist/lib/cjs/script-utils/linters/index.d.cts +1 -0
  336. package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.cjs +18 -17
  337. package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.d.cts +2 -2
  338. package/dist/lib/cjs/script-utils/linters/markdownlint-ignores.cjs +138 -0
  339. package/dist/lib/cjs/script-utils/linters/markdownlint-ignores.d.cts +35 -0
  340. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +20 -23
  341. package/dist/lib/cjs/script-utils/linters/over-exposure.cjs +18 -22
  342. package/dist/lib/cjs/script-utils/linters/over-exposure.d.cts +54 -18
  343. package/dist/lib/cjs/script-utils/nano-staged-config.cjs +11 -15
  344. package/dist/lib/cjs/script-utils/npm-publish.cjs +11 -15
  345. package/dist/lib/cjs/script-utils/npm-run.cjs +20 -17
  346. package/dist/lib/cjs/script-utils/npm-run.d.cts +16 -2
  347. package/dist/lib/cjs/script-utils/npm.cjs +21 -25
  348. package/dist/lib/cjs/script-utils/npm.d.cts +11 -11
  349. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +11 -15
  350. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +165 -55
  351. package/dist/lib/cjs/script-utils/root.cjs +11 -15
  352. package/dist/lib/cjs/script-utils/test-runners/index.cjs +11 -15
  353. package/dist/lib/cjs/script-utils/test-runners/integration-test-plugin.cjs +11 -15
  354. package/dist/lib/cjs/script-utils/test-runners/vitest-config.cjs +12 -15
  355. package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +11 -15
  356. package/dist/lib/cjs/script-utils/validate-declarations.cjs +11 -15
  357. package/dist/lib/cjs/script-utils/version.cjs +62 -63
  358. package/dist/lib/cjs/script-utils/version.d.cts +21 -21
  359. package/dist/lib/cjs/script-utils/warnings-as-errors.cjs +11 -15
  360. package/dist/lib/cjs/setup.cjs +11 -15
  361. package/dist/lib/cjs/setup.d.cts +1 -1
  362. package/dist/lib/cjs/strict-proxy.cjs +30 -34
  363. package/dist/lib/cjs/strict-proxy.d.cts +2 -2
  364. package/dist/lib/cjs/string.cjs +90 -93
  365. package/dist/lib/cjs/string.d.cts +60 -60
  366. package/dist/lib/cjs/transformers/date-transformer.cjs +11 -15
  367. package/dist/lib/cjs/transformers/duration-transformer.cjs +11 -15
  368. package/dist/lib/cjs/transformers/group-transformer.cjs +11 -15
  369. package/dist/lib/cjs/transformers/index.cjs +11 -15
  370. package/dist/lib/cjs/transformers/map-transformer.cjs +12 -16
  371. package/dist/lib/cjs/transformers/set-transformer.cjs +12 -16
  372. package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +11 -15
  373. package/dist/lib/cjs/transformers/transformer.cjs +11 -15
  374. package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +12 -16
  375. package/dist/lib/cjs/transformers/typed-transformer.cjs +11 -15
  376. package/dist/lib/cjs/two-way-map.cjs +11 -15
  377. package/dist/lib/cjs/type-guards.cjs +16 -20
  378. package/dist/lib/cjs/type-guards.d.cts +6 -6
  379. package/dist/lib/cjs/type.cjs +13 -17
  380. package/dist/lib/cjs/type.d.cts +2 -2
  381. package/dist/lib/cjs/url.cjs +18 -22
  382. package/dist/lib/cjs/url.d.cts +4 -4
  383. package/dist/lib/cjs/value-provider.cjs +15 -19
  384. package/dist/lib/cjs/value-provider.d.cts +6 -6
  385. package/dist/lib/cjs/value-wrapper.cjs +11 -15
  386. package/dist/lib/cjs/vitest-setup.cjs +11 -15
  387. package/dist/lib/esm/__merged.d.mts +12 -10
  388. package/dist/lib/esm/__merged.mjs +51 -23
  389. package/dist/lib/esm/abort-controller.mjs +5 -8
  390. package/dist/lib/esm/array.d.mts +25 -7
  391. package/dist/lib/esm/array.mjs +16 -12
  392. package/dist/lib/esm/async-events.d.mts +50 -50
  393. package/dist/lib/esm/async-events.mjs +81 -78
  394. package/dist/lib/esm/async.d.mts +23 -23
  395. package/dist/lib/esm/async.mjs +70 -66
  396. package/dist/lib/esm/blob.mjs +4 -11
  397. package/dist/lib/esm/debug.d.mts +1 -1
  398. package/dist/lib/esm/debug.mjs +14 -18
  399. package/dist/lib/esm/disposable.d.mts +27 -8
  400. package/dist/lib/esm/disposable.mjs +47 -29
  401. package/dist/lib/esm/error.mjs +18 -19
  402. package/dist/lib/esm/function.d.mts +26 -26
  403. package/dist/lib/esm/function.mjs +20 -20
  404. package/dist/lib/esm/generated-during-build.mjs +1 -1
  405. package/dist/lib/esm/html-element.d.mts +15 -15
  406. package/dist/lib/esm/html-element.mjs +74 -75
  407. package/dist/lib/esm/object-utils.d.mts +27 -27
  408. package/dist/lib/esm/object-utils.mjs +109 -102
  409. package/dist/lib/esm/obsidian/@types/dataview/data-model/value.d.mts +1 -1
  410. package/dist/lib/esm/obsidian/@types/dataview/expression/field.d.mts +1 -1
  411. package/dist/lib/esm/obsidian/@types/dataview/expression/functions.d.mts +4 -4
  412. package/dist/lib/esm/obsidian/app.mjs +1 -1
  413. package/dist/lib/esm/obsidian/async-with-notice.d.mts +2 -2
  414. package/dist/lib/esm/obsidian/async-with-notice.mjs +18 -18
  415. package/dist/lib/esm/obsidian/attachment-path.d.mts +5 -5
  416. package/dist/lib/esm/obsidian/attachment-path.mjs +10 -10
  417. package/dist/lib/esm/obsidian/backlink.mjs +2 -2
  418. package/dist/lib/esm/obsidian/callout.d.mts +9 -3
  419. package/dist/lib/esm/obsidian/callout.mjs +17 -12
  420. package/dist/lib/esm/obsidian/canvas.mjs +3 -2
  421. package/dist/lib/esm/obsidian/case-insensitive-file-index.mjs +8 -6
  422. package/dist/lib/esm/obsidian/code-block-markdown-information.d.mts +2 -2
  423. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +5 -0
  424. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +8 -2
  425. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +42 -8
  426. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +46 -17
  427. package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +10 -0
  428. package/dist/lib/esm/obsidian/command-handlers/command-handler.mjs +1 -1
  429. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +8 -8
  430. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +16 -16
  431. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +2 -2
  432. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +2 -2
  433. package/dist/lib/esm/obsidian/command-handlers/global-command-handler.mjs +3 -3
  434. package/dist/lib/esm/obsidian/community-plugins.d.mts +19 -5
  435. package/dist/lib/esm/obsidian/community-plugins.mjs +17 -11
  436. package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +4 -4
  437. package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +1 -1
  438. package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +3 -2
  439. package/dist/lib/esm/obsidian/components/component-ex.d.mts +3 -3
  440. package/dist/lib/esm/obsidian/components/component-ex.mjs +16 -14
  441. package/dist/lib/esm/obsidian/components/console-debug-component.d.mts +2 -2
  442. package/dist/lib/esm/obsidian/components/console-debug-component.mjs +4 -4
  443. package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
  444. package/dist/lib/esm/obsidian/components/index.mjs +3 -1
  445. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +5 -5
  446. package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +55 -55
  447. package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +19 -19
  448. package/dist/lib/esm/obsidian/components/notebook-navigator-menu-event-registrar-component.d.mts +139 -0
  449. package/dist/lib/esm/obsidian/components/notebook-navigator-menu-event-registrar-component.mjs +196 -0
  450. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +18 -17
  451. package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +8 -8
  452. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +18 -18
  453. package/dist/lib/esm/obsidian/components/pointer-position-component.mjs +3 -3
  454. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +12 -1
  455. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +62 -48
  456. package/dist/lib/esm/obsidian/components/syntax-highlighting-component.d.mts +8 -8
  457. package/dist/lib/esm/obsidian/components/syntax-highlighting-component.mjs +6 -6
  458. package/dist/lib/esm/obsidian/constructors/get-dom-events-handlers-constructor.mjs +4 -4
  459. package/dist/lib/esm/obsidian/data-handler.mjs +1 -1
  460. package/dist/lib/esm/obsidian/dataview-link.mjs +3 -3
  461. package/dist/lib/esm/obsidian/dataview.d.mts +2 -2
  462. package/dist/lib/esm/obsidian/dataview.mjs +25 -27
  463. package/dist/lib/esm/obsidian/demo-vault-helper.mjs +4 -3
  464. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +12 -12
  465. package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +13 -7
  466. package/dist/lib/esm/obsidian/editor.mjs +7 -5
  467. package/dist/lib/esm/obsidian/events.d.mts +2 -2
  468. package/dist/lib/esm/obsidian/events.mjs +2 -2
  469. package/dist/lib/esm/obsidian/file-change.d.mts +3 -3
  470. package/dist/lib/esm/obsidian/file-change.mjs +67 -67
  471. package/dist/lib/esm/obsidian/file-manager.d.mts +20 -1
  472. package/dist/lib/esm/obsidian/file-manager.mjs +22 -8
  473. package/dist/lib/esm/obsidian/file-system.d.mts +3 -3
  474. package/dist/lib/esm/obsidian/file-system.mjs +4 -4
  475. package/dist/lib/esm/obsidian/frontmatter.mjs +5 -5
  476. package/dist/lib/esm/obsidian/html-element.d.mts +2 -2
  477. package/dist/lib/esm/obsidian/html-element.mjs +3 -3
  478. package/dist/lib/esm/obsidian/i18n/i18n.d.mts +7 -0
  479. package/dist/lib/esm/obsidian/i18n/i18n.mjs +3 -2
  480. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  481. package/dist/lib/esm/obsidian/index.mjs +3 -1
  482. package/dist/lib/esm/obsidian/link.d.mts +22 -22
  483. package/dist/lib/esm/obsidian/link.mjs +76 -62
  484. package/dist/lib/esm/obsidian/logger.d.mts +5 -5
  485. package/dist/lib/esm/obsidian/logger.mjs +11 -11
  486. package/dist/lib/esm/obsidian/loop.d.mts +1 -1
  487. package/dist/lib/esm/obsidian/loop.mjs +4 -4
  488. package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.d.mts +3 -3
  489. package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.mjs +2 -2
  490. package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +3 -3
  491. package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +25 -26
  492. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.d.mts +3 -3
  493. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.mjs +2 -2
  494. package/dist/lib/esm/obsidian/markdown.mjs +12 -10
  495. package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +1 -1
  496. package/dist/lib/esm/obsidian/metadata-cache.d.mts +2 -2
  497. package/dist/lib/esm/obsidian/metadata-cache.mjs +6 -6
  498. package/dist/lib/esm/obsidian/modals/confirm.mjs +1 -1
  499. package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +18 -18
  500. package/dist/lib/esm/obsidian/modals/select-item.d.mts +1 -1
  501. package/dist/lib/esm/obsidian/modals/select-item.mjs +6 -6
  502. package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.d.mts +5 -5
  503. package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.mjs +16 -14
  504. package/dist/lib/esm/obsidian/notebook-navigator.d.mts +132 -0
  505. package/dist/lib/esm/obsidian/notebook-navigator.mjs +49 -0
  506. package/dist/lib/esm/obsidian/parse-link.d.mts +4 -4
  507. package/dist/lib/esm/obsidian/parse-link.mjs +51 -48
  508. package/dist/lib/esm/obsidian/path-settings.mjs +17 -11
  509. package/dist/lib/esm/obsidian/pdf.d.mts +2 -2
  510. package/dist/lib/esm/obsidian/pdf.mjs +3 -3
  511. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +156 -52
  512. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +1 -1
  513. package/dist/lib/esm/obsidian/plugin/plugin-context.d.mts +2 -2
  514. package/dist/lib/esm/obsidian/plugin/plugin-context.mjs +7 -7
  515. package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +11 -9
  516. package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +10 -10
  517. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +20 -20
  518. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +11 -1
  519. package/dist/lib/esm/obsidian/plugin/plugin.mjs +23 -2
  520. package/dist/lib/esm/obsidian/popovers/popover-anchor.d.mts +2 -2
  521. package/dist/lib/esm/obsidian/popovers/popover-anchor.mjs +4 -4
  522. package/dist/lib/esm/obsidian/popovers/popover.mjs +9 -9
  523. package/dist/lib/esm/obsidian/queue.d.mts +2 -2
  524. package/dist/lib/esm/obsidian/queue.mjs +6 -6
  525. package/dist/lib/esm/obsidian/resource-lock.d.mts +5 -0
  526. package/dist/lib/esm/obsidian/resource-lock.mjs +147 -64
  527. package/dist/lib/esm/obsidian/resource-url.mjs +2 -2
  528. package/dist/lib/esm/obsidian/ribbon-icon-registrar.d.mts +2 -2
  529. package/dist/lib/esm/obsidian/ribbon-icon-registrar.mjs +1 -1
  530. package/dist/lib/esm/obsidian/setting-components/checkbox-component.d.mts +5 -5
  531. package/dist/lib/esm/obsidian/setting-components/checkbox-component.mjs +8 -8
  532. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.d.mts +2 -2
  533. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +18 -17
  534. package/dist/lib/esm/obsidian/setting-components/date-component.d.mts +2 -2
  535. package/dist/lib/esm/obsidian/setting-components/date-component.mjs +4 -4
  536. package/dist/lib/esm/obsidian/setting-components/date-time-component.d.mts +2 -2
  537. package/dist/lib/esm/obsidian/setting-components/date-time-component.mjs +4 -4
  538. package/dist/lib/esm/obsidian/setting-components/email-component.d.mts +2 -2
  539. package/dist/lib/esm/obsidian/setting-components/email-component.mjs +4 -4
  540. package/dist/lib/esm/obsidian/setting-components/month-component.d.mts +2 -2
  541. package/dist/lib/esm/obsidian/setting-components/month-component.mjs +4 -4
  542. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.d.mts +2 -2
  543. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +7 -7
  544. package/dist/lib/esm/obsidian/setting-components/multiple-email-component.d.mts +2 -2
  545. package/dist/lib/esm/obsidian/setting-components/multiple-email-component.mjs +4 -4
  546. package/dist/lib/esm/obsidian/setting-components/multiple-file-component.mjs +2 -2
  547. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.d.mts +2 -2
  548. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +5 -5
  549. package/dist/lib/esm/obsidian/setting-components/number-component.d.mts +2 -2
  550. package/dist/lib/esm/obsidian/setting-components/number-component.mjs +4 -4
  551. package/dist/lib/esm/obsidian/setting-components/password-component.d.mts +2 -2
  552. package/dist/lib/esm/obsidian/setting-components/password-component.mjs +4 -4
  553. package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.d.mts +2 -2
  554. package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.mjs +6 -6
  555. package/dist/lib/esm/obsidian/setting-components/telephone-component.d.mts +2 -2
  556. package/dist/lib/esm/obsidian/setting-components/telephone-component.mjs +4 -4
  557. package/dist/lib/esm/obsidian/setting-components/text-based-component.d.mts +2 -2
  558. package/dist/lib/esm/obsidian/setting-components/text-based-component.mjs +6 -6
  559. package/dist/lib/esm/obsidian/setting-components/time-component.d.mts +2 -2
  560. package/dist/lib/esm/obsidian/setting-components/time-component.mjs +4 -4
  561. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.d.mts +2 -2
  562. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.mjs +5 -5
  563. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.d.mts +2 -2
  564. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +6 -6
  565. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.d.mts +2 -2
  566. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +8 -8
  567. package/dist/lib/esm/obsidian/setting-components/typed-text-component.d.mts +4 -4
  568. package/dist/lib/esm/obsidian/setting-components/typed-text-component.mjs +6 -5
  569. package/dist/lib/esm/obsidian/setting-components/url-component.d.mts +2 -2
  570. package/dist/lib/esm/obsidian/setting-components/url-component.mjs +4 -4
  571. package/dist/lib/esm/obsidian/setting-components/validator-component.d.mts +2 -2
  572. package/dist/lib/esm/obsidian/setting-components/validator-component.mjs +35 -35
  573. package/dist/lib/esm/obsidian/setting-components/week-component.d.mts +2 -2
  574. package/dist/lib/esm/obsidian/setting-components/week-component.mjs +4 -4
  575. package/dist/lib/esm/obsidian/setting-ex.d.mts +42 -42
  576. package/dist/lib/esm/obsidian/setting-ex.mjs +66 -66
  577. package/dist/lib/esm/obsidian/setting-group-ex.d.mts +2 -2
  578. package/dist/lib/esm/obsidian/setting-group-ex.mjs +4 -4
  579. package/dist/lib/esm/obsidian/vault-delete.d.mts +16 -2
  580. package/dist/lib/esm/obsidian/vault-delete.mjs +12 -6
  581. package/dist/lib/esm/obsidian/vault-transaction.mjs +8 -4
  582. package/dist/lib/esm/obsidian/vault.d.mts +32 -11
  583. package/dist/lib/esm/obsidian/vault.mjs +67 -47
  584. package/dist/lib/esm/obsidian/view-registrar.mjs +1 -1
  585. package/dist/lib/esm/obsidian/workspace.mjs +2 -2
  586. package/dist/lib/esm/path.d.mts +1 -1
  587. package/dist/lib/esm/path.mjs +7 -7
  588. package/dist/lib/esm/reg-exp.d.mts +4 -4
  589. package/dist/lib/esm/reg-exp.mjs +28 -21
  590. package/dist/lib/esm/script-utils/build.d.mts +1 -1
  591. package/dist/lib/esm/script-utils/build.mjs +15 -12
  592. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +14 -14
  593. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +26 -20
  594. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +10 -10
  595. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +3 -3
  596. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +6 -6
  597. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +6 -2
  598. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +1 -1
  599. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +20 -20
  600. package/dist/lib/esm/script-utils/check-project-types.d.mts +12 -4
  601. package/dist/lib/esm/script-utils/check-project-types.mjs +3 -3
  602. package/dist/lib/esm/script-utils/cli-utils.d.mts +6 -6
  603. package/dist/lib/esm/script-utils/cli-utils.mjs +29 -33
  604. package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +12 -9
  605. package/dist/lib/esm/script-utils/env-toggle.mjs +3 -3
  606. package/dist/lib/esm/script-utils/exec.d.mts +4 -4
  607. package/dist/lib/esm/script-utils/exec.mjs +32 -32
  608. package/dist/lib/esm/script-utils/formatters/dprint.mjs +2 -2
  609. package/dist/lib/esm/script-utils/fs.mjs +3 -3
  610. package/dist/lib/esm/script-utils/json.d.mts +2 -2
  611. package/dist/lib/esm/script-utils/json.mjs +5 -5
  612. package/dist/lib/esm/script-utils/linters/cspell.mjs +2 -2
  613. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +392 -2
  614. package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +3 -1
  615. package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +17 -17
  616. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.d.mts +3 -1
  617. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +17 -17
  618. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.d.mts +3 -1
  619. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +11 -11
  620. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.d.mts +3 -1
  621. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.mjs +99 -99
  622. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +3 -1
  623. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +3 -3
  624. package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.mts +3 -1
  625. package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.mjs +11 -11
  626. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +9 -3
  627. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +41 -41
  628. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +6 -2
  629. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +15 -13
  630. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.d.mts +3 -1
  631. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +23 -23
  632. package/dist/lib/esm/script-utils/linters/eslint.mjs +4 -4
  633. package/dist/lib/esm/script-utils/linters/index.d.mts +1 -0
  634. package/dist/lib/esm/script-utils/linters/index.mjs +3 -1
  635. package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.d.mts +2 -2
  636. package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +8 -3
  637. package/dist/lib/esm/script-utils/linters/markdownlint-ignores.d.mts +35 -0
  638. package/dist/lib/esm/script-utils/linters/markdownlint-ignores.mjs +33 -0
  639. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +13 -9
  640. package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +54 -18
  641. package/dist/lib/esm/script-utils/linters/over-exposure.mjs +8 -8
  642. package/dist/lib/esm/script-utils/npm-run.d.mts +16 -2
  643. package/dist/lib/esm/script-utils/npm-run.mjs +9 -3
  644. package/dist/lib/esm/script-utils/npm.d.mts +11 -11
  645. package/dist/lib/esm/script-utils/npm.mjs +11 -11
  646. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +165 -55
  647. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +1 -1
  648. package/dist/lib/esm/script-utils/test-runners/vitest-config.mjs +2 -1
  649. package/dist/lib/esm/script-utils/validate-declarations.mjs +1 -1
  650. package/dist/lib/esm/script-utils/version.d.mts +21 -21
  651. package/dist/lib/esm/script-utils/version.mjs +48 -45
  652. package/dist/lib/esm/setup.d.mts +1 -1
  653. package/dist/lib/esm/setup.mjs +1 -1
  654. package/dist/lib/esm/strict-proxy.d.mts +2 -2
  655. package/dist/lib/esm/strict-proxy.mjs +20 -20
  656. package/dist/lib/esm/string.d.mts +60 -60
  657. package/dist/lib/esm/string.mjs +80 -79
  658. package/dist/lib/esm/transformers/map-transformer.mjs +2 -2
  659. package/dist/lib/esm/transformers/set-transformer.mjs +2 -2
  660. package/dist/lib/esm/transformers/two-way-map-transformer.mjs +2 -2
  661. package/dist/lib/esm/type-guards.d.mts +6 -6
  662. package/dist/lib/esm/type-guards.mjs +6 -6
  663. package/dist/lib/esm/type.d.mts +2 -2
  664. package/dist/lib/esm/type.mjs +3 -3
  665. package/dist/lib/esm/url.d.mts +4 -4
  666. package/dist/lib/esm/url.mjs +8 -8
  667. package/dist/lib/esm/value-provider.d.mts +6 -6
  668. package/dist/lib/esm/value-provider.mjs +5 -5
  669. package/obsidian/components/notebook-navigator-menu-event-registrar-component/package.json +6 -0
  670. package/obsidian/notebook-navigator/package.json +6 -0
  671. package/package.json +17 -33
  672. package/script-utils/linters/markdownlint-ignores/package.json +6 -0
@@ -13,7 +13,7 @@ export interface PrintWithStackTraceParams {
13
13
  /**
14
14
  * The arguments to print.
15
15
  */
16
- readonly args: unknown[];
16
+ readonly $arguments: unknown[];
17
17
  /**
18
18
  * The debugger instance.
19
19
  */
@@ -48,9 +48,9 @@ function getDebugger(namespace, framesToSkip = 0) {
48
48
  let debuggerEx = debuggersMap.get(key);
49
49
  if (!debuggerEx) {
50
50
  debuggerEx = getSharedDebugLibInstance()(namespace);
51
- debuggerEx.log = (message, ...args) => {
51
+ debuggerEx.log = (message, ...$arguments) => {
52
52
  logWithCaller({
53
- args,
53
+ $arguments,
54
54
  framesToSkip,
55
55
  message,
56
56
  namespace
@@ -65,16 +65,16 @@ function getLibDebugger(namespace) {
65
65
  }
66
66
  function printWithStackTrace(params) {
67
67
  const {
68
- args,
68
+ $arguments,
69
69
  debuggerInstance,
70
70
  message,
71
71
  stackTrace
72
72
  } = params;
73
73
  if (!Library.shouldPrintStackTrace) {
74
- debuggerInstance(message, ...args);
74
+ debuggerInstance(message, ...$arguments);
75
75
  return;
76
76
  }
77
- debuggerInstance(message, ...args, "\n\n---\nContext stack trace:\n", makeStackTraceError(stackTrace));
77
+ debuggerInstance(message, ...$arguments, "\n\n---\nContext stack trace:\n", makeStackTraceError(stackTrace));
78
78
  }
79
79
  function showInitialDebugMessage(pluginId) {
80
80
  const isEnabled = getSharedDebugLibInstance().enabled(pluginId);
@@ -94,25 +94,21 @@ function disableNamespaces(namespaces) {
94
94
  continue;
95
95
  }
96
96
  const negatedNamespace = NEGATED_NAMESPACE_PREFIX + namespace;
97
- if (set.has(namespace)) {
98
- set.delete(namespace);
99
- }
97
+ set.delete(namespace);
100
98
  set.add(negatedNamespace);
101
99
  }
102
- setNamespaces(Array.from(set));
100
+ setNamespaces([...set]);
103
101
  }
104
102
  function enableNamespaces(namespaces) {
105
103
  const set = new Set(getNamespaces());
106
104
  for (const namespace of toArray(namespaces)) {
107
105
  if (!namespace.startsWith(NEGATED_NAMESPACE_PREFIX)) {
108
106
  const negatedNamespace = NEGATED_NAMESPACE_PREFIX + namespace;
109
- if (set.has(negatedNamespace)) {
110
- set.delete(negatedNamespace);
111
- }
107
+ set.delete(negatedNamespace);
112
108
  }
113
109
  set.add(namespace);
114
110
  }
115
- setNamespaces(Array.from(set));
111
+ setNamespaces([...set]);
116
112
  }
117
113
  function getNamespaces() {
118
114
  return toArray(getSharedDebugLibInstance().load() ?? "");
@@ -122,7 +118,7 @@ function getSharedDebugLibInstance() {
122
118
  }
123
119
  function logWithCaller(params) {
124
120
  const {
125
- args,
121
+ $arguments,
126
122
  framesToSkip,
127
123
  message,
128
124
  namespace
@@ -131,13 +127,13 @@ function logWithCaller(params) {
131
127
  return;
132
128
  }
133
129
  if (!Library.shouldPrintStackTrace) {
134
- console.debug(message, ...args);
130
+ console.debug(message, ...$arguments);
135
131
  return;
136
132
  }
137
133
  const CALLER_LINE_INDEX = 4;
138
134
  const stackLines = ensureNonNullable(new Error().stack).split("\n");
139
135
  stackLines.splice(0, CALLER_LINE_INDEX + framesToSkip);
140
- console.debug(message, ...args, "\n\n---\nLogger stack trace:\n", makeStackTraceError(stackLines.join("\n")));
136
+ console.debug(message, ...$arguments, "\n\n---\nLogger stack trace:\n", makeStackTraceError(stackLines.join("\n")));
141
137
  }
142
138
  function makeStackTraceError(stackTrace) {
143
139
  return new CustomStackTraceError({
@@ -150,7 +146,7 @@ function setNamespaces(namespaces) {
150
146
  getSharedDebugLibInstance().enable(toArray(namespaces).join(NAMESPACE_SEPARATOR));
151
147
  }
152
148
  function toArray(namespaces) {
153
- return typeof namespaces === "string" ? namespaces.split(NAMESPACE_SEPARATOR).filter(Boolean) : namespaces.flatMap(toArray);
149
+ return typeof namespaces === "string" ? namespaces.split(NAMESPACE_SEPARATOR).filter(Boolean) : namespaces.flatMap((namespace) => toArray(namespace));
154
150
  }
155
151
  export {
156
152
  enableLibraryDebuggers,
@@ -160,4 +156,4 @@ export {
160
156
  printWithStackTrace,
161
157
  showInitialDebugMessage
162
158
  };
163
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlYnVnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGRlYnVnZ2luZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyIH0gZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnQ29udHJvbGxlciB9IGZyb20gJy4vZGVidWctY29udHJvbGxlci50cyc7XG5cbmltcG9ydCB7IEN1c3RvbVN0YWNrVHJhY2VFcnJvciB9IGZyb20gJy4vZXJyb3IudHMnO1xuaW1wb3J0IHtcbiAgTGlicmFyeSxcbiAgTElCUkFSWV9OQU1FXG59IGZyb20gJy4vbGlicmFyeS50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1zdGF0ZS50cyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuXG5jb25zdCBOQU1FU1BBQ0VfU0VQQVJBVE9SID0gJywnO1xuY29uc3QgTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYID0gJy0nO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBwcmludFdpdGhTdGFja1RyYWNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmludFdpdGhTdGFja1RyYWNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudHMgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBhcmdzOiB1bmtub3duW107XG5cbiAgLyoqXG4gICAqIFRoZSBkZWJ1Z2dlciBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnZ2VySW5zdGFuY2U6IERlYnVnZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tUcmFjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBsb2dXaXRoQ2FsbGVyfS5cbiAqL1xuaW50ZXJmYWNlIExvZ1dpdGhDYWxsZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5IGFyZ3M6IHVua25vd25bXTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gICAqL1xuICByZWFkb25seSBmcmFtZXNUb1NraXA6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBkZWJ1Z2dlciBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgdGhlIGRlYnVnZ2VycyBmb3IgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVMaWJyYXJ5RGVidWdnZXJzKCk6IHZvaWQge1xuICBlbmFibGVOYW1lc3BhY2VzKFtMSUJSQVJZX05BTUUsIGAke0xJQlJBUllfTkFNRX06KmBdKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVidWcgY29udHJvbGxlci5cbiAqXG4gKiBAcmV0dXJucyBBIGRlYnVnIGNvbnRyb2xsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWJ1Z0NvbnRyb2xsZXIoKTogRGVidWdDb250cm9sbGVyIHtcbiAgcmV0dXJuIHtcbiAgICBkaXNhYmxlOiBkaXNhYmxlTmFtZXNwYWNlcyxcbiAgICBlbmFibGU6IGVuYWJsZU5hbWVzcGFjZXMsXG4gICAgZ2V0OiBnZXROYW1lc3BhY2VzLFxuICAgIHNldDogc2V0TmFtZXNwYWNlc1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBkZWJ1Z2dlciBpbnN0YW5jZSB3aXRoIGEgbG9nIGZ1bmN0aW9uIHRoYXQgaW5jbHVkZXMgdGhlIGNhbGxlcidzIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBkZWJ1Z2dlciBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmcmFtZXNUb1NraXAgLSBUaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwIGluIHRoZSBzdGFjayB0cmFjZS5cbiAqIEByZXR1cm5zIEEgZGVidWdnZXIgaW5zdGFuY2Ugd2l0aCBhIGxvZyBmdW5jdGlvbiB0aGF0IGluY2x1ZGVzIHRoZSBjYWxsZXIncyBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdnZXIobmFtZXNwYWNlOiBzdHJpbmcsIGZyYW1lc1RvU2tpcCA9IDApOiBEZWJ1Z2dlciB7XG4gIGNvbnN0IGtleSA9IGAke25hbWVzcGFjZX06JHtTdHJpbmcoZnJhbWVzVG9Ta2lwKX1gO1xuICBjb25zdCBkZWJ1Z2dlcnNNYXAgPSBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoJ2RlYnVnZ2VycycsIG5ldyBNYXA8c3RyaW5nLCBEZWJ1Z2dlcj4oKSkudmFsdWU7XG4gIGxldCBkZWJ1Z2dlckV4ID0gZGVidWdnZXJzTWFwLmdldChrZXkpO1xuICBpZiAoIWRlYnVnZ2VyRXgpIHtcbiAgICBkZWJ1Z2dlckV4ID0gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpKG5hbWVzcGFjZSk7XG4gICAgZGVidWdnZXJFeC5sb2cgPSAobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICAgIGxvZ1dpdGhDYWxsZXIoe1xuICAgICAgICBhcmdzLFxuICAgICAgICBmcmFtZXNUb1NraXAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIG5hbWVzcGFjZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGRlYnVnZ2Vyc01hcC5zZXQoa2V5LCBkZWJ1Z2dlckV4KTtcbiAgfVxuXG4gIHJldHVybiBkZWJ1Z2dlckV4O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBkZWJ1Z2dlciBpbnN0YW5jZSBmb3IgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGxpYnJhcnkuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBkZWJ1Z2dlciBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEEgZGVidWdnZXIgaW5zdGFuY2UgZm9yIHRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCBsaWJyYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGliRGVidWdnZXIobmFtZXNwYWNlOiBzdHJpbmcpOiBEZWJ1Z2dlciB7XG4gIHJldHVybiBnZXREZWJ1Z2dlcihgJHtMaWJyYXJ5LmRlYnVnUHJlZml4TmFtZXNwYWNlfSR7TElCUkFSWV9OQU1FfToke25hbWVzcGFjZX1gKTtcbn1cblxuLyoqXG4gKiBQcmludHMgYSBtZXNzYWdlIHdpdGggYSBzdGFjayB0cmFjZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHByaW50aW5nIHRoZSBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRXaXRoU3RhY2tUcmFjZShwYXJhbXM6IFByaW50V2l0aFN0YWNrVHJhY2VQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgIGFyZ3MsXG4gICAgZGVidWdnZXJJbnN0YW5jZSxcbiAgICBtZXNzYWdlLFxuICAgIHN0YWNrVHJhY2VcbiAgfSA9IHBhcmFtcztcbiAgaWYgKCFMaWJyYXJ5LnNob3VsZFByaW50U3RhY2tUcmFjZSkge1xuICAgIGRlYnVnZ2VySW5zdGFuY2UobWVzc2FnZSwgLi4uYXJncyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVidWdnZXJJbnN0YW5jZShtZXNzYWdlLCAuLi5hcmdzLCAnXFxuXFxuLS0tXFxuQ29udGV4dCBzdGFjayB0cmFjZTpcXG4nLCBtYWtlU3RhY2tUcmFjZUVycm9yKHN0YWNrVHJhY2UpKTtcbn1cblxuLyoqXG4gKiBTaG93cyBhbiBpbml0aWFsIGRlYnVnIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIHBsdWdpbiBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dJbml0aWFsRGVidWdNZXNzYWdlKHBsdWdpbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgaXNFbmFibGVkID0gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZWQocGx1Z2luSWQpO1xuICBjb25zdCBzdGF0ZSA9IGlzRW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCc7XG4gIGNvbnN0IGNoYW5nZUFjdGlvbiA9IGlzRW5hYmxlZCA/ICdkaXNhYmxlJyA6ICdlbmFibGUnO1xuICBjb25zdCBuYW1lc3BhY2VzID0gZ2V0TmFtZXNwYWNlcygpO1xuICBzZXROYW1lc3BhY2VzKHBsdWdpbklkKTtcbiAgZ2V0RGVidWdnZXIocGx1Z2luSWQpKFxuICAgIGBEZWJ1ZyBtZXNzYWdlcyBmb3IgcGx1Z2luICR7cGx1Z2luSWR9IGFyZSAke3N0YXRlfS4gU2VlIGh0dHBzOi8vbW5hb3Vtb3YuZGV2L29ic2lkaWFuLWRldi11dGlscy9ndWlkZXMvZGVidWdnaW5nLyBob3cgdG8gJHtjaGFuZ2VBY3Rpb259IHRoZW0uYFxuICApO1xuICBzZXROYW1lc3BhY2VzKG5hbWVzcGFjZXMpO1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlTmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBjb25zdCBzZXQgPSBuZXcgU2V0KGdldE5hbWVzcGFjZXMoKSk7XG4gIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIHRvQXJyYXkobmFtZXNwYWNlcykpIHtcbiAgICBpZiAobmFtZXNwYWNlLnN0YXJ0c1dpdGgoTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5lZ2F0ZWROYW1lc3BhY2UgPSBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggKyBuYW1lc3BhY2U7XG4gICAgaWYgKHNldC5oYXMobmFtZXNwYWNlKSkge1xuICAgICAgc2V0LmRlbGV0ZShuYW1lc3BhY2UpO1xuICAgIH1cbiAgICBzZXQuYWRkKG5lZ2F0ZWROYW1lc3BhY2UpO1xuICB9XG4gIHNldE5hbWVzcGFjZXMoQXJyYXkuZnJvbShzZXQpKTtcbn1cblxuZnVuY3Rpb24gZW5hYmxlTmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBjb25zdCBzZXQgPSBuZXcgU2V0KGdldE5hbWVzcGFjZXMoKSk7XG4gIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIHRvQXJyYXkobmFtZXNwYWNlcykpIHtcbiAgICBpZiAoIW5hbWVzcGFjZS5zdGFydHNXaXRoKE5FR0FURURfTkFNRVNQQUNFX1BSRUZJWCkpIHtcbiAgICAgIGNvbnN0IG5lZ2F0ZWROYW1lc3BhY2UgPSBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggKyBuYW1lc3BhY2U7XG4gICAgICBpZiAoc2V0LmhhcyhuZWdhdGVkTmFtZXNwYWNlKSkge1xuICAgICAgICBzZXQuZGVsZXRlKG5lZ2F0ZWROYW1lc3BhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXQuYWRkKG5hbWVzcGFjZSk7XG4gIH1cbiAgc2V0TmFtZXNwYWNlcyhBcnJheS5mcm9tKHNldCkpO1xufVxuXG5mdW5jdGlvbiBnZXROYW1lc3BhY2VzKCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHRvQXJyYXkoZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmxvYWQoKSA/PyAnJyk7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKTogdHlwZW9mIGRlYnVnIHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSgnZGVidWcnLCBkZWJ1ZykudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGxvZ1dpdGhDYWxsZXIocGFyYW1zOiBMb2dXaXRoQ2FsbGVyUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBhcmdzLFxuICAgIGZyYW1lc1RvU2tpcCxcbiAgICBtZXNzYWdlLFxuICAgIG5hbWVzcGFjZVxuICB9ID0gcGFyYW1zO1xuICBpZiAoIWdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKS5lbmFibGVkKG5hbWVzcGFjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIUxpYnJhcnkuc2hvdWxkUHJpbnRTdGFja1RyYWNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gVmFsaWQgdXNhZ2UuXG4gICAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi5hcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQSBjYWxsZXIgbGluZSBpbmRleCBpcyA0IGJlY2F1c2UgdGhlIGNhbGwgc3RhY2sgaXMgYXMgZm9sbG93czpcbiAgICpcbiAgICogMDogRXJyb3JcbiAgICogMTogICAgIGF0IGxvZ1dpdGhDYWxsZXIgKD86Pzo/KVxuICAgKiAyOiAgICAgYXQgZGVidWdJbnN0YW5jZS5sb2cgKD86Pzo/KVxuICAgKiAzOiAgICAgYXQgZGVidWcgKD86Pzo/KVxuICAgKiA0OiAgICAgYXQgZnVuY3Rpb25OYW1lIChwYXRoL3RvL2NhbGxlci5qczo/Oj8pXG4gICAqL1xuICBjb25zdCBDQUxMRVJfTElORV9JTkRFWCA9IDQ7XG5cbiAgY29uc3Qgc3RhY2tMaW5lcyA9IGVuc3VyZU5vbk51bGxhYmxlKG5ldyBFcnJvcigpLnN0YWNrKS5zcGxpdCgnXFxuJyk7XG4gIHN0YWNrTGluZXMuc3BsaWNlKDAsIENBTExFUl9MSU5FX0lOREVYICsgZnJhbWVzVG9Ta2lwKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBWYWxpZCB1c2FnZS5cbiAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi5hcmdzLCAnXFxuXFxuLS0tXFxuTG9nZ2VyIHN0YWNrIHRyYWNlOlxcbicsIG1ha2VTdGFja1RyYWNlRXJyb3Ioc3RhY2tMaW5lcy5qb2luKCdcXG4nKSkpO1xufVxuXG5mdW5jdGlvbiBtYWtlU3RhY2tUcmFjZUVycm9yKHN0YWNrVHJhY2U6IHN0cmluZyk6IEN1c3RvbVN0YWNrVHJhY2VFcnJvciB7XG4gIHJldHVybiBuZXcgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKHtcbiAgICBjYXVzZTogdW5kZWZpbmVkLFxuICAgIG1lc3NhZ2U6ICdEZWJ1ZyBtb2RlOiBpbnRlbnRpb25hbCBwbGFjZWhvbGRlciBlcnJvci4gU2VlIGh0dHBzOi8vbW5hb3Vtb3YuZGV2L29ic2lkaWFuLWRldi11dGlscy9ndWlkZXMvZGVidWdnaW5nLy4nLFxuICAgIHN0YWNrVHJhY2VcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZXMgLSBUaGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKi9cbmZ1bmN0aW9uIHNldE5hbWVzcGFjZXMobmFtZXNwYWNlczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZSh0b0FycmF5KG5hbWVzcGFjZXMpLmpvaW4oTkFNRVNQQUNFX1NFUEFSQVRPUikpO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gdHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcy5zcGxpdChOQU1FU1BBQ0VfU0VQQVJBVE9SKS5maWx0ZXIoQm9vbGVhbikgOiBuYW1lc3BhY2VzLmZsYXRNYXAodG9BcnJheSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLE9BQU8sV0FBVztBQUlsQixTQUFTLDZCQUE2QjtBQUN0QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsZ0NBQWdDO0FBQ3pDLFNBQVMseUJBQXlCO0FBRWxDLE1BQU0sc0JBQXNCO0FBQzVCLE1BQU0sMkJBQTJCO0FBdUQxQixTQUFTLHlCQUErQjtBQUM3QyxtQkFBaUIsQ0FBQyxjQUFjLEdBQUcsWUFBWSxJQUFJLENBQUM7QUFDdEQ7QUFPTyxTQUFTLHFCQUFzQztBQUNwRCxTQUFPO0FBQUEsSUFDTCxTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsRUFDUDtBQUNGO0FBU08sU0FBUyxZQUFZLFdBQW1CLGVBQWUsR0FBYTtBQUN6RSxRQUFNLE1BQU0sR0FBRyxTQUFTLElBQUksT0FBTyxZQUFZLENBQUM7QUFDaEQsUUFBTSxlQUFlLHlCQUF5QixhQUFhLG9CQUFJLElBQXNCLENBQUMsRUFBRTtBQUN4RixNQUFJLGFBQWEsYUFBYSxJQUFJLEdBQUc7QUFDckMsTUFBSSxDQUFDLFlBQVk7QUFDZixpQkFBYSwwQkFBMEIsRUFBRSxTQUFTO0FBQ2xELGVBQVcsTUFBTSxDQUFDLFlBQW9CLFNBQTBCO0FBQzlELG9CQUFjO0FBQUEsUUFDWjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0g7QUFFQSxpQkFBYSxJQUFJLEtBQUssVUFBVTtBQUFBLEVBQ2xDO0FBRUEsU0FBTztBQUNUO0FBUU8sU0FBUyxlQUFlLFdBQTZCO0FBQzFELFNBQU8sWUFBWSxHQUFHLFFBQVEsb0JBQW9CLEdBQUcsWUFBWSxJQUFJLFNBQVMsRUFBRTtBQUNsRjtBQU9PLFNBQVMsb0JBQW9CLFFBQXlDO0FBQzNFLFFB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
159
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlYnVnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGRlYnVnZ2luZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnZ2VyIH0gZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgdHlwZSB7IERlYnVnQ29udHJvbGxlciB9IGZyb20gJy4vZGVidWctY29udHJvbGxlci50cyc7XG5cbmltcG9ydCB7IEN1c3RvbVN0YWNrVHJhY2VFcnJvciB9IGZyb20gJy4vZXJyb3IudHMnO1xuaW1wb3J0IHtcbiAgTGlicmFyeSxcbiAgTElCUkFSWV9OQU1FXG59IGZyb20gJy4vbGlicmFyeS50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuLWRldi11dGlscy1zdGF0ZS50cyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuXG5jb25zdCBOQU1FU1BBQ0VfU0VQQVJBVE9SID0gJywnO1xuY29uc3QgTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYID0gJy0nO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBwcmludFdpdGhTdGFja1RyYWNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmludFdpdGhTdGFja1RyYWNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudHMgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSAkYXJndW1lbnRzOiB1bmtub3duW107XG5cbiAgLyoqXG4gICAqIFRoZSBkZWJ1Z2dlciBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlYnVnZ2VySW5zdGFuY2U6IERlYnVnZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIHRvIHByaW50LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tUcmFjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBsb2dXaXRoQ2FsbGVyfS5cbiAqL1xuaW50ZXJmYWNlIExvZ1dpdGhDYWxsZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBwcmludC5cbiAgICovXG4gIHJlYWRvbmx5ICRhcmd1bWVudHM6IHVua25vd25bXTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gICAqL1xuICByZWFkb25seSBmcmFtZXNUb1NraXA6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBkZWJ1Z2dlciBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgdGhlIGRlYnVnZ2VycyBmb3IgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGxpYnJhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVMaWJyYXJ5RGVidWdnZXJzKCk6IHZvaWQge1xuICBlbmFibGVOYW1lc3BhY2VzKFtMSUJSQVJZX05BTUUsIGAke0xJQlJBUllfTkFNRX06KmBdKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVidWcgY29udHJvbGxlci5cbiAqXG4gKiBAcmV0dXJucyBBIGRlYnVnIGNvbnRyb2xsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWJ1Z0NvbnRyb2xsZXIoKTogRGVidWdDb250cm9sbGVyIHtcbiAgcmV0dXJuIHtcbiAgICBkaXNhYmxlOiBkaXNhYmxlTmFtZXNwYWNlcyxcbiAgICBlbmFibGU6IGVuYWJsZU5hbWVzcGFjZXMsXG4gICAgZ2V0OiBnZXROYW1lc3BhY2VzLFxuICAgIHNldDogc2V0TmFtZXNwYWNlc1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBkZWJ1Z2dlciBpbnN0YW5jZSB3aXRoIGEgbG9nIGZ1bmN0aW9uIHRoYXQgaW5jbHVkZXMgdGhlIGNhbGxlcidzIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBkZWJ1Z2dlciBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmcmFtZXNUb1NraXAgLSBUaGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwIGluIHRoZSBzdGFjayB0cmFjZS5cbiAqIEByZXR1cm5zIEEgZGVidWdnZXIgaW5zdGFuY2Ugd2l0aCBhIGxvZyBmdW5jdGlvbiB0aGF0IGluY2x1ZGVzIHRoZSBjYWxsZXIncyBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdnZXIobmFtZXNwYWNlOiBzdHJpbmcsIGZyYW1lc1RvU2tpcCA9IDApOiBEZWJ1Z2dlciB7XG4gIGNvbnN0IGtleSA9IGAke25hbWVzcGFjZX06JHtTdHJpbmcoZnJhbWVzVG9Ta2lwKX1gO1xuICBjb25zdCBkZWJ1Z2dlcnNNYXAgPSBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoJ2RlYnVnZ2VycycsIG5ldyBNYXA8c3RyaW5nLCBEZWJ1Z2dlcj4oKSkudmFsdWU7XG4gIGxldCBkZWJ1Z2dlckV4ID0gZGVidWdnZXJzTWFwLmdldChrZXkpO1xuICBpZiAoIWRlYnVnZ2VyRXgpIHtcbiAgICBkZWJ1Z2dlckV4ID0gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpKG5hbWVzcGFjZSk7XG4gICAgZGVidWdnZXJFeC5sb2cgPSAobWVzc2FnZTogc3RyaW5nLCAuLi4kYXJndW1lbnRzOiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICAgIGxvZ1dpdGhDYWxsZXIoe1xuICAgICAgICAkYXJndW1lbnRzLFxuICAgICAgICBmcmFtZXNUb1NraXAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIG5hbWVzcGFjZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGRlYnVnZ2Vyc01hcC5zZXQoa2V5LCBkZWJ1Z2dlckV4KTtcbiAgfVxuXG4gIHJldHVybiBkZWJ1Z2dlckV4O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBkZWJ1Z2dlciBpbnN0YW5jZSBmb3IgdGhlIGBvYnNpZGlhbi1kZXYtdXRpbHNgIGxpYnJhcnkuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBkZWJ1Z2dlciBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEEgZGVidWdnZXIgaW5zdGFuY2UgZm9yIHRoZSBgb2JzaWRpYW4tZGV2LXV0aWxzYCBsaWJyYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGliRGVidWdnZXIobmFtZXNwYWNlOiBzdHJpbmcpOiBEZWJ1Z2dlciB7XG4gIHJldHVybiBnZXREZWJ1Z2dlcihgJHtMaWJyYXJ5LmRlYnVnUHJlZml4TmFtZXNwYWNlfSR7TElCUkFSWV9OQU1FfToke25hbWVzcGFjZX1gKTtcbn1cblxuLyoqXG4gKiBQcmludHMgYSBtZXNzYWdlIHdpdGggYSBzdGFjayB0cmFjZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHByaW50aW5nIHRoZSBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRXaXRoU3RhY2tUcmFjZShwYXJhbXM6IFByaW50V2l0aFN0YWNrVHJhY2VQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgICRhcmd1bWVudHMsXG4gICAgZGVidWdnZXJJbnN0YW5jZSxcbiAgICBtZXNzYWdlLFxuICAgIHN0YWNrVHJhY2VcbiAgfSA9IHBhcmFtcztcbiAgaWYgKCFMaWJyYXJ5LnNob3VsZFByaW50U3RhY2tUcmFjZSkge1xuICAgIGRlYnVnZ2VySW5zdGFuY2UobWVzc2FnZSwgLi4uJGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGVidWdnZXJJbnN0YW5jZShtZXNzYWdlLCAuLi4kYXJndW1lbnRzLCAnXFxuXFxuLS0tXFxuQ29udGV4dCBzdGFjayB0cmFjZTpcXG4nLCBtYWtlU3RhY2tUcmFjZUVycm9yKHN0YWNrVHJhY2UpKTtcbn1cblxuLyoqXG4gKiBTaG93cyBhbiBpbml0aWFsIGRlYnVnIG1lc3NhZ2UuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIHBsdWdpbiBJRC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dJbml0aWFsRGVidWdNZXNzYWdlKHBsdWdpbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgaXNFbmFibGVkID0gZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZWQocGx1Z2luSWQpO1xuICBjb25zdCBzdGF0ZSA9IGlzRW5hYmxlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCc7XG4gIGNvbnN0IGNoYW5nZUFjdGlvbiA9IGlzRW5hYmxlZCA/ICdkaXNhYmxlJyA6ICdlbmFibGUnO1xuICBjb25zdCBuYW1lc3BhY2VzID0gZ2V0TmFtZXNwYWNlcygpO1xuICBzZXROYW1lc3BhY2VzKHBsdWdpbklkKTtcbiAgZ2V0RGVidWdnZXIocGx1Z2luSWQpKFxuICAgIGBEZWJ1ZyBtZXNzYWdlcyBmb3IgcGx1Z2luICR7cGx1Z2luSWR9IGFyZSAke3N0YXRlfS4gU2VlIGh0dHBzOi8vbW5hb3Vtb3YuZGV2L29ic2lkaWFuLWRldi11dGlscy9ndWlkZXMvZGVidWdnaW5nLyBob3cgdG8gJHtjaGFuZ2VBY3Rpb259IHRoZW0uYFxuICApO1xuICBzZXROYW1lc3BhY2VzKG5hbWVzcGFjZXMpO1xufVxuXG5mdW5jdGlvbiBkaXNhYmxlTmFtZXNwYWNlcyhuYW1lc3BhY2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuICBjb25zdCBzZXQgPSBuZXcgU2V0KGdldE5hbWVzcGFjZXMoKSk7XG4gIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIHRvQXJyYXkobmFtZXNwYWNlcykpIHtcbiAgICBpZiAobmFtZXNwYWNlLnN0YXJ0c1dpdGgoTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5lZ2F0ZWROYW1lc3BhY2UgPSBORUdBVEVEX05BTUVTUEFDRV9QUkVGSVggKyBuYW1lc3BhY2U7XG4gICAgc2V0LmRlbGV0ZShuYW1lc3BhY2UpO1xuICAgIHNldC5hZGQobmVnYXRlZE5hbWVzcGFjZSk7XG4gIH1cbiAgc2V0TmFtZXNwYWNlcyhbLi4uc2V0XSk7XG59XG5cbmZ1bmN0aW9uIGVuYWJsZU5hbWVzcGFjZXMobmFtZXNwYWNlczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3Qgc2V0ID0gbmV3IFNldChnZXROYW1lc3BhY2VzKCkpO1xuICBmb3IgKGNvbnN0IG5hbWVzcGFjZSBvZiB0b0FycmF5KG5hbWVzcGFjZXMpKSB7XG4gICAgaWYgKCFuYW1lc3BhY2Uuc3RhcnRzV2l0aChORUdBVEVEX05BTUVTUEFDRV9QUkVGSVgpKSB7XG4gICAgICBjb25zdCBuZWdhdGVkTmFtZXNwYWNlID0gTkVHQVRFRF9OQU1FU1BBQ0VfUFJFRklYICsgbmFtZXNwYWNlO1xuICAgICAgc2V0LmRlbGV0ZShuZWdhdGVkTmFtZXNwYWNlKTtcbiAgICB9XG4gICAgc2V0LmFkZChuYW1lc3BhY2UpO1xuICB9XG4gIHNldE5hbWVzcGFjZXMoWy4uLnNldF0pO1xufVxuXG5mdW5jdGlvbiBnZXROYW1lc3BhY2VzKCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHRvQXJyYXkoZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmxvYWQoKSA/PyAnJyk7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKTogdHlwZW9mIGRlYnVnIHtcbiAgcmV0dXJuIGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSgnZGVidWcnLCBkZWJ1ZykudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGxvZ1dpdGhDYWxsZXIocGFyYW1zOiBMb2dXaXRoQ2FsbGVyUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICAkYXJndW1lbnRzLFxuICAgIGZyYW1lc1RvU2tpcCxcbiAgICBtZXNzYWdlLFxuICAgIG5hbWVzcGFjZVxuICB9ID0gcGFyYW1zO1xuICBpZiAoIWdldFNoYXJlZERlYnVnTGliSW5zdGFuY2UoKS5lbmFibGVkKG5hbWVzcGFjZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIUxpYnJhcnkuc2hvdWxkUHJpbnRTdGFja1RyYWNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGUgLS0gVmFsaWQgdXNhZ2UuXG4gICAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi4kYXJndW1lbnRzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogQSBjYWxsZXIgbGluZSBpbmRleCBpcyA0IGJlY2F1c2UgdGhlIGNhbGwgc3RhY2sgaXMgYXMgZm9sbG93czpcbiAgICpcbiAgICogMDogRXJyb3JcbiAgICogMTogICAgIGF0IGxvZ1dpdGhDYWxsZXIgKD86Pzo/KVxuICAgKiAyOiAgICAgYXQgZGVidWdJbnN0YW5jZS5sb2cgKD86Pzo/KVxuICAgKiAzOiAgICAgYXQgZGVidWcgKD86Pzo/KVxuICAgKiA0OiAgICAgYXQgZnVuY3Rpb25OYW1lIChwYXRoL3RvL2NhbGxlci5qczo/Oj8pXG4gICAqL1xuICBjb25zdCBDQUxMRVJfTElORV9JTkRFWCA9IDQ7XG5cbiAgY29uc3Qgc3RhY2tMaW5lcyA9IGVuc3VyZU5vbk51bGxhYmxlKG5ldyBFcnJvcigpLnN0YWNrKS5zcGxpdCgnXFxuJyk7XG4gIHN0YWNrTGluZXMuc3BsaWNlKDAsIENBTExFUl9MSU5FX0lOREVYICsgZnJhbWVzVG9Ta2lwKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBWYWxpZCB1c2FnZS5cbiAgY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi4kYXJndW1lbnRzLCAnXFxuXFxuLS0tXFxuTG9nZ2VyIHN0YWNrIHRyYWNlOlxcbicsIG1ha2VTdGFja1RyYWNlRXJyb3Ioc3RhY2tMaW5lcy5qb2luKCdcXG4nKSkpO1xufVxuXG5mdW5jdGlvbiBtYWtlU3RhY2tUcmFjZUVycm9yKHN0YWNrVHJhY2U6IHN0cmluZyk6IEN1c3RvbVN0YWNrVHJhY2VFcnJvciB7XG4gIHJldHVybiBuZXcgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKHtcbiAgICBjYXVzZTogdW5kZWZpbmVkLFxuICAgIG1lc3NhZ2U6ICdEZWJ1ZyBtb2RlOiBpbnRlbnRpb25hbCBwbGFjZWhvbGRlciBlcnJvci4gU2VlIGh0dHBzOi8vbW5hb3Vtb3YuZGV2L29ic2lkaWFuLWRldi11dGlscy9ndWlkZXMvZGVidWdnaW5nLy4nLFxuICAgIHN0YWNrVHJhY2VcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZXMgLSBUaGUgbmFtZXNwYWNlcyB0byBlbmFibGUuXG4gKi9cbmZ1bmN0aW9uIHNldE5hbWVzcGFjZXMobmFtZXNwYWNlczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcbiAgZ2V0U2hhcmVkRGVidWdMaWJJbnN0YW5jZSgpLmVuYWJsZSh0b0FycmF5KG5hbWVzcGFjZXMpLmpvaW4oTkFNRVNQQUNFX1NFUEFSQVRPUikpO1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KG5hbWVzcGFjZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gdHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcy5zcGxpdChOQU1FU1BBQ0VfU0VQQVJBVE9SKS5maWx0ZXIoQm9vbGVhbikgOiBuYW1lc3BhY2VzLmZsYXRN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
@@ -226,6 +226,15 @@ export declare class AsyncCallbackDisposable extends AsyncDisposableBase {
226
226
  */
227
227
  protected performDisposeAsync(): Promise<void>;
228
228
  }
229
+ /**
230
+ * Disposes a {@link Disposable}.
231
+ *
232
+ * Prefer this over calling `disposable[Symbol.dispose]()` at the call site: it reads better and keeps the
233
+ * well-known symbol referenced in a single place.
234
+ *
235
+ * @param disposable - the disposable to dispose
236
+ */
237
+ export declare function dispose(disposable: Disposable): void;
229
238
  /**
230
239
  * Abstract base for a {@link DisposableEx}: it carries the re-dispose guard (via {@link MultipleDisposeBehavior})
231
240
  * and the {@link DisposableEx.dispose} alias; a subclass only implements {@link DisposableBase.performDispose}.
@@ -318,34 +327,44 @@ export declare class CombineDisposable extends DisposableBase {
318
327
  protected performDispose(): void;
319
328
  private getOrderedChildren;
320
329
  }
330
+ /**
331
+ * Disposes an {@link AsyncDisposable}.
332
+ *
333
+ * Prefer this over calling `asyncDisposable[Symbol.asyncDispose]()` at the call site: it reads better and
334
+ * keeps the well-known symbol referenced in a single place.
335
+ *
336
+ * @param asyncDisposable - the async disposable to dispose
337
+ * @returns A {@link Promise} that resolves once the disposal completes.
338
+ */
339
+ export declare function disposeAsync(asyncDisposable: AsyncDisposable): Promise<void>;
321
340
  /**
322
341
  * Type guard to check if an object implements the {@link AsyncDisposable} interface.
323
342
  *
324
- * @param obj - the object to check for the {@link AsyncDisposable} interface
343
+ * @param $unknown - the object to check for the {@link AsyncDisposable} interface
325
344
  * @returns Whether the object implements the {@link AsyncDisposable} interface
326
345
  */
327
- export declare function isAsyncDisposable(obj: unknown): obj is AsyncDisposable;
346
+ export declare function isAsyncDisposable($unknown: unknown): $unknown is AsyncDisposable;
328
347
  /**
329
348
  * Type guard to check if an object implements the {@link AsyncDisposableEx} interface.
330
349
  *
331
- * @param obj - the object to check for the {@link AsyncDisposableEx} interface
350
+ * @param $unknown - the object to check for the {@link AsyncDisposableEx} interface
332
351
  * @returns Whether the object implements the {@link AsyncDisposableEx} interface
333
352
  */
334
- export declare function isAsyncDisposableEx(obj: unknown): obj is AsyncDisposableEx;
353
+ export declare function isAsyncDisposableEx($unknown: unknown): $unknown is AsyncDisposableEx;
335
354
  /**
336
355
  * Type guard to check if an object implements the {@link Disposable} interface.
337
356
  *
338
- * @param obj - the object to check for the {@link Disposable} interface
357
+ * @param $unknown - the object to check for the {@link Disposable} interface
339
358
  * @returns Whether the object implements the {@link Disposable} interface
340
359
  */
341
- export declare function isDisposable(obj: unknown): obj is Disposable;
360
+ export declare function isDisposable($unknown: unknown): $unknown is Disposable;
342
361
  /**
343
362
  * Type guard to check if an object implements the {@link DisposableEx} interface.
344
363
  *
345
- * @param obj - the object to check for the {@link DisposableEx} interface
364
+ * @param $unknown - the object to check for the {@link DisposableEx} interface
346
365
  * @returns Whether the object implements the {@link DisposableEx} interface
347
366
  */
348
- export declare function isDisposableEx(obj: unknown): obj is DisposableEx;
367
+ export declare function isDisposableEx($unknown: unknown): $unknown is DisposableEx;
349
368
  /**
350
369
  * Adapts a plain {@link AsyncDisposable} into an {@link AsyncDisposableEx} by adding a convenience
351
370
  * {@link AsyncDisposableEx.asyncDispose} method that delegates to `Symbol.asyncDispose`.
@@ -97,6 +97,9 @@ class AsyncCallbackDisposable extends AsyncDisposableBase {
97
97
  await this.callback();
98
98
  }
99
99
  }
100
+ function dispose(disposable) {
101
+ disposable[Symbol.dispose]();
102
+ }
100
103
  class DisposableBase {
101
104
  /**
102
105
  * How the disposable behaves when disposed more than once.
@@ -190,12 +193,15 @@ class CombineAsyncDisposable extends AsyncDisposableBase {
190
193
  }
191
194
  getOrderedChildren() {
192
195
  switch (this.disposeOrder) {
193
- case 1 /* Fifo */:
196
+ case 1 /* Fifo */: {
194
197
  return this.children;
195
- case 0 /* Lifo */:
198
+ }
199
+ case 0 /* Lifo */: {
196
200
  return [...this.children].reverse();
197
- default:
201
+ }
202
+ default: {
198
203
  assertNever(this.disposeOrder);
204
+ }
199
205
  }
200
206
  }
201
207
  }
@@ -237,41 +243,47 @@ class CombineDisposable extends DisposableBase {
237
243
  }
238
244
  getOrderedChildren() {
239
245
  switch (this.disposeOrder) {
240
- case 1 /* Fifo */:
246
+ case 1 /* Fifo */: {
241
247
  return this.children;
242
- case 0 /* Lifo */:
248
+ }
249
+ case 0 /* Lifo */: {
243
250
  return [...this.children].reverse();
244
- default:
251
+ }
252
+ default: {
245
253
  assertNever(this.disposeOrder);
254
+ }
246
255
  }
247
256
  }
248
257
  }
249
- function isAsyncDisposable(obj) {
250
- const asyncDisposable = obj;
258
+ async function disposeAsync(asyncDisposable) {
259
+ await asyncDisposable[Symbol.asyncDispose]();
260
+ }
261
+ function isAsyncDisposable($unknown) {
262
+ const asyncDisposable = $unknown;
251
263
  return !!asyncDisposable[Symbol.asyncDispose];
252
264
  }
253
- function isAsyncDisposableEx(obj) {
254
- const asyncDisposableEx = obj;
255
- return isAsyncDisposable(obj) && typeof asyncDisposableEx.asyncDispose === "function";
265
+ function isAsyncDisposableEx($unknown) {
266
+ const asyncDisposableEx = $unknown;
267
+ return isAsyncDisposable($unknown) && typeof asyncDisposableEx.asyncDispose === "function";
256
268
  }
257
- function isDisposable(obj) {
258
- const disposable = obj;
269
+ function isDisposable($unknown) {
270
+ const disposable = $unknown;
259
271
  return !!disposable[Symbol.dispose];
260
272
  }
261
- function isDisposableEx(obj) {
262
- const disposableEx = obj;
263
- return isDisposable(obj) && typeof disposableEx.dispose === "function";
273
+ function isDisposableEx($unknown) {
274
+ const disposableEx = $unknown;
275
+ return isDisposable($unknown) && typeof disposableEx.dispose === "function";
264
276
  }
265
277
  function toAsyncDisposableEx(asyncDisposable) {
266
278
  if (isAsyncDisposableEx(asyncDisposable)) {
267
279
  return asyncDisposable;
268
280
  }
269
281
  return {
270
- asyncDispose,
271
- [Symbol.asyncDispose]: asyncDispose
282
+ asyncDispose: asyncDisposeAdapted,
283
+ [Symbol.asyncDispose]: asyncDisposeAdapted
272
284
  };
273
- function asyncDispose() {
274
- return Promise.resolve(asyncDisposable[Symbol.asyncDispose]());
285
+ function asyncDisposeAdapted() {
286
+ return disposeAsync(asyncDisposable);
275
287
  }
276
288
  }
277
289
  function toDisposableEx(disposable) {
@@ -279,11 +291,11 @@ function toDisposableEx(disposable) {
279
291
  return disposable;
280
292
  }
281
293
  return {
282
- dispose,
283
- [Symbol.dispose]: dispose
294
+ dispose: disposeAdapted,
295
+ [Symbol.dispose]: disposeAdapted
284
296
  };
285
- function dispose() {
286
- disposable[Symbol.dispose]();
297
+ function disposeAdapted() {
298
+ dispose(disposable);
287
299
  }
288
300
  }
289
301
  function shouldPerformDispose(isDisposed, multipleDisposeBehavior) {
@@ -291,14 +303,18 @@ function shouldPerformDispose(isDisposed, multipleDisposeBehavior) {
291
303
  return true;
292
304
  }
293
305
  switch (multipleDisposeBehavior) {
294
- case 1 /* Ignore */:
306
+ case 1 /* Ignore */: {
295
307
  return false;
296
- case 0 /* Invoke */:
308
+ }
309
+ case 0 /* Invoke */: {
297
310
  return true;
298
- case 2 /* Throw */:
311
+ }
312
+ case 2 /* Throw */: {
299
313
  throw new Error("This disposable has already been disposed.");
300
- default:
314
+ }
315
+ default: {
301
316
  assertNever(multipleDisposeBehavior);
317
+ }
302
318
  }
303
319
  }
304
320
  export {
@@ -311,6 +327,8 @@ export {
311
327
  DisposeErrorBehavior,
312
328
  DisposeOrder,
313
329
  MultipleDisposeBehavior,
330
+ dispose,
331
+ disposeAsync,
314
332
  isAsyncDisposable,
315
333
  isAsyncDisposableEx,
316
334
  isDisposable,
@@ -318,4 +336,4 @@ export {
318
336
  toAsyncDisposableEx,
319
337
  toDisposableEx
320
338
  };
321
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rpc3Bvc2FibGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIHV0aWxpdGllcyBmb3IgYHVzaW5nYCAvIGBhd2FpdCB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgZXJyb3Igc2VtYW50aWNzIG9mIGEge0BsaW5rIENvbWJpbmVEaXNwb3NhYmxlfSBvciB7QGxpbmsgQ29tYmluZUFzeW5jRGlzcG9zYWJsZX0gd2hlblxuICogb25lIG9mIGl0cyBjaGlsZHJlbiB0aHJvd3Mgd2hpbGUgYmVpbmcgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBlbnVtIERpc3Bvc2VFcnJvckJlaGF2aW9yIHtcbiAgLyoqXG4gICAqIERpc3Bvc2UgZXZlcnkgY2hpbGQgZXZlbiBpZiBzb21lIG9mIHRoZW0gdGhyb3csIGNvbGxlY3RpbmcgdGhlIHRocm93biBlcnJvcnMgYW5kIHJlLXRocm93aW5nIHRoZW1cbiAgICogYXMgYSBzaW5nbGUge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfSBvbmNlIGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gZGlzcG9zZWQuXG4gICAqL1xuICBBZ2dyZWdhdGUsXG5cbiAgLyoqXG4gICAqIFJlLXRocm93IHRoZSBmaXJzdCBlcnJvciBhIGNoaWxkIHRocm93cyBpbW1lZGlhdGVseSwgbGVhdmluZyB0aGUgcmVtYWluaW5nIGNoaWxkcmVuIHVuZGlzcG9zZWQuXG4gICAqL1xuICBGYWlsRmFzdFxufVxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG9yZGVyIGluIHdoaWNoIGEge0BsaW5rIENvbWJpbmVEaXNwb3NhYmxlfSBvciB7QGxpbmsgQ29tYmluZUFzeW5jRGlzcG9zYWJsZX0gZGlzcG9zZXNcbiAqIGl0cyBjaGlsZHJlbi5cbiAqL1xuZXhwb3J0IGVudW0gRGlzcG9zZU9yZGVyIHtcbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIGxhc3QtcmVnaXN0ZXJlZCBjaGlsZCBmaXJzdCAobGFzdC1pbiwgZmlyc3Qtb3V0KSwgbGlrZSBuZXN0ZWQgYHVzaW5nYCBkZWNsYXJhdGlvbnNcbiAgICogdW53aW5kaW5nIGluIHJldmVyc2UuXG4gICAqL1xuICBMaWZvLFxuXG4gIC8qKlxuICAgKiBEaXNwb3NlIHRoZSBmaXJzdC1yZWdpc3RlcmVkIGNoaWxkIGZpcnN0IChmaXJzdC1pbiwgZmlyc3Qtb3V0KS5cbiAgICovXG4gIEZpZm9cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGhvdyBhIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9IG9yIHtAbGluayBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZX0gYmVoYXZlcyB3aGVuIGl0IGlzXG4gKiBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAqL1xuZXhwb3J0IGVudW0gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3Ige1xuICAvKipcbiAgICogSW52b2tlIHRoZSBjYWxsYmFjayBvbiBldmVyeSBkaXNwb3NlLlxuICAgKi9cbiAgSW52b2tlLFxuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoZSBmaXJzdCBkaXNwb3NlIG9ubHk7IHN1YnNlcXVlbnQgZGlzcG9zZXMgYXJlIG5vLW9wcy5cbiAgICovXG4gIElnbm9yZSxcblxuICAvKipcbiAgICogSW52b2tlIHRoZSBjYWxsYmFjayBvbiB0aGUgZmlyc3QgZGlzcG9zZSBvbmx5OyBzdWJzZXF1ZW50IGRpc3Bvc2VzIHRocm93LlxuICAgKi9cbiAgVGhyb3dcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0aW5nIGFuIHtAbGluayBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIGRpc3Bvc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FsbGJhY2s6IEFzeW5jRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGRpc3Bvc2FibGUgYmVoYXZlcyB3aGVuIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBBbiB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlfSB0aGF0IGFkZGl0aW9uYWxseSBleHBvc2VzIGEgY29udmVuaWVuY2Uge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZX1cbiAqIG1ldGhvZCwgc28gYSBzdG9yZWQgaGFuZGxlIGNhbiBiZSBkaXNwb3NlZCBhcyBgaGFuZGxlLmFzeW5jRGlzcG9zZSgpYCBpbnN0ZWFkIG9mIHRoZSBjbHVua2llclxuICogYGhhbmRsZVtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3luY0Rpc3Bvc2FibGVFeCBleHRlbmRzIEFzeW5jRGlzcG9zYWJsZSB7XG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBEZWxlZ2F0ZXMgdG8gYHRoaXNbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKWAuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSBkaXNwb3NhbCBjb21wbGV0ZXMuXG4gICAqL1xuICBhc3luY0Rpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGNhbGxiYWNrIGludm9rZWQgd2hlbiBhbiB7QGxpbmsgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGV9IGlzIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgdHlwZSBBc3luY0Rpc3Bvc2VDYWxsYmFjayA9ICh0aGlzOiB2b2lkKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3RpbmcgYSB7QGxpbmsgQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIGRpc3Bvc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FsbGJhY2s6IERpc3Bvc2VDYWxsYmFjaztcblxuICAvKipcbiAgICogSG93IHRoZSBkaXNwb3NhYmxlIGJlaGF2ZXMgd2hlbiBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yPzogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lQXN5bmNEaXNwb3NhYmxlQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFzeW5jIGRpc3Bvc2FibGVzIHRvIGRpc3Bvc2Ugd2hlbiB0aGUgY29tYmluZXIgaXMgZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBhc3luY0Rpc3Bvc2FibGVzOiBJdGVyYWJsZTxBc3luY0Rpc3Bvc2FibGU+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIGNoaWxkcmVuIGFyZSBkaXNwb3NlZC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERpc3Bvc2VPcmRlci5MaWZvfVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcG9zZU9yZGVyPzogRGlzcG9zZU9yZGVyO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGNvbWJpbmVyIGJlaGF2ZXMgd2hlbiBvbmUgb2YgaXRzIGNoaWxkcmVuIHRocm93cyB3aGlsZSBiZWluZyBkaXNwb3NlZC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERpc3Bvc2VFcnJvckJlaGF2aW9yLkFnZ3JlZ2F0ZX1cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yQmVoYXZpb3I/OiBEaXNwb3NlRXJyb3JCZWhhdmlvcjtcblxuICAvKipcbiAgICogSG93IHRoZSBjb21iaW5lciBiZWhhdmVzIHdoZW4gaXQgaXMgZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICByZWFkb25seSBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcj86IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3RpbmcgYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVEaXNwb3NhYmxlQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRpc3Bvc2FibGVzIHRvIGRpc3Bvc2Ugd2hlbiB0aGUgY29tYmluZXIgaXMgZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBkaXNwb3NhYmxlczogSXRlcmFibGU8RGlzcG9zYWJsZT47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGRyZW4gYXJlIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZU9yZGVyLkxpZm99XG4gICAqL1xuICByZWFkb25seSBkaXNwb3NlT3JkZXI/OiBEaXNwb3NlT3JkZXI7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIG9uZSBvZiBpdHMgY2hpbGRyZW4gdGhyb3dzIHdoaWxlIGJlaW5nIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlfVxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcj86IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGNvbWJpbmVyIGJlaGF2ZXMgd2hlbiBpdCBpcyBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yPzogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I7XG59XG5cbi8qKlxuICogQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCBhZGRpdGlvbmFsbHkgZXhwb3NlcyBhIGNvbnZlbmllbmNlIHtAbGluayBEaXNwb3NhYmxlRXguZGlzcG9zZX0gbWV0aG9kLCBzbyBhXG4gKiBzdG9yZWQgaGFuZGxlIGNhbiBiZSBkaXNwb3NlZCBhcyBgaGFuZGxlLmRpc3Bvc2UoKWAgaW5zdGVhZCBvZiB0aGUgY2x1bmtpZXIgYGhhbmRsZVtTeW1ib2wuZGlzcG9zZV0oKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcG9zYWJsZUV4IGV4dGVuZHMgRGlzcG9zYWJsZSB7XG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBEZWxlZ2F0ZXMgdG8gYHRoaXNbU3ltYm9sLmRpc3Bvc2VdKClgLlxuICAgKi9cbiAgZGlzcG9zZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERpc3Bvc2VDYWxsYmFjayA9ICh0aGlzOiB2b2lkKSA9PiB2b2lkO1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgZm9yIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH06IGl0IGNhcnJpZXMgdGhlIHJlLWRpc3Bvc2UgZ3VhcmQgKHZpYVxuICoge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSkgYW5kIHRoZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXguYXN5bmNEaXNwb3NlfSBhbGlhczsgYSBzdWJjbGFzcyBvbmx5XG4gKiBpbXBsZW1lbnRzIHtAbGluayBBc3luY0Rpc3Bvc2FibGVCYXNlLnBlcmZvcm1EaXNwb3NlQXN5bmN9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXN5bmNEaXNwb3NhYmxlQmFzZSBpbXBsZW1lbnRzIEFzeW5jRGlzcG9zYWJsZUV4IHtcbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICBwcm90ZWN0ZWQgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGlzcG9zYWJsZSBoYXMgYmVlbiBkaXNwb3NlZCAoaXRzIHRlYXJkb3duIGhhcyBydW4gYXQgbGVhc3Qgb25jZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBvbmNlIGRpc3Bvc2FsIGhhcyBzdGFydGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3Bvc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBDb252ZW5pZW5jZSBhbGlhcyB0aGF0IGRlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpYC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRlYXJkb3duIGNvbXBsZXRlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luY0Rpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXNbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0IGJ5IHJ1bm5pbmcge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2VBc3luY30sIGhvbm9yaW5nIHRoZSBjb25maWd1cmVkXG4gICAqIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcn0gb24gYSByZXBlYXQgZGlzcG9zZS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRlYXJkb3duIGNvbXBsZXRlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFzaG91bGRQZXJmb3JtRGlzcG9zZSh0aGlzLl9pc0Rpc3Bvc2VkLCB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRGlzcG9zZWQgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMucGVyZm9ybURpc3Bvc2VBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBhY3R1YWwgdGVhcmRvd24uIENhbGxlZCBhdCBtb3N0IG9uY2UgdW5sZXNzIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JbnZva2V9IGlzIHNldC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzYWJsZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRlYXJkb3duIGNvbXBsZXRlcy5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2FibGU8dm9pZD47XG59XG5cbi8qKlxuICogQW4gYXN5bmMgZGlzcG9zYWJsZSB0aGF0IGV4ZWN1dGVzIGEgY2FsbGJhY2sgd2hlbiBkaXNwb3NlZCB2aWEgYGF3YWl0IHVzaW5nYCAob3IgYSBtYW51YWxcbiAqIGBhd2FpdCBkaXNwb3NhYmxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FsbGJhY2s6IEFzeW5jRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZX0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBwYXJhbXMuY2FsbGJhY2s7XG4gICAgdGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA9IHBhcmFtcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA/PyBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgZGlzcG9zZSBjYWxsYmFjay5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBjYWxsYmFjayBjb21wbGV0ZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcGVyZm9ybURpc3Bvc2VBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNhbGxiYWNrKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGZvciBhIHtAbGluayBEaXNwb3NhYmxlRXh9OiBpdCBjYXJyaWVzIHRoZSByZS1kaXNwb3NlIGd1YXJkICh2aWEge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSlcbiAqIGFuZCB0aGUge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBhbGlhczsgYSBzdWJjbGFzcyBvbmx5IGltcGxlbWVudHMge0BsaW5rIERpc3Bvc2FibGVCYXNlLnBlcmZvcm1EaXNwb3NlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgRGlzcG9zYWJsZUV4IHtcbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICBwcm90ZWN0ZWQgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGlzcG9zYWJsZSBoYXMgYmVlbiBkaXNwb3NlZCAoaXRzIHRlYXJkb3duIGhhcyBydW4gYXQgbGVhc3Qgb25jZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBvbmNlIGRpc3Bvc2FsIGhhcyBzdGFydGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3Bvc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBDb252ZW5pZW5jZSBhbGlhcyB0aGF0IGRlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKWAuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QgYnkgcnVubmluZyB7QGxpbmsgRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2V9LCBob25vcmluZyB0aGUgY29uZmlndXJlZFxuICAgKiB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3J9IG9uIGEgcmVwZWF0IGRpc3Bvc2UuXG4gICAqL1xuICBwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZFBlcmZvcm1EaXNwb3NlKHRoaXMuX2lzRGlzcG9zZWQsIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgdGhpcy5wZXJmb3JtRGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBhY3R1YWwgdGVhcmRvd24uIENhbGxlZCBhdCBtb3N0IG9uY2UgdW5sZXNzIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JbnZva2V9IGlzIHNldC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgZGlzcG9zYWJsZSB0aGF0IGV4ZWN1dGVzIGEgY2FsbGJhY2sgd2hlbiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENhbGxiYWNrRGlzcG9zYWJsZSBleHRlbmRzIERpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjaztcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBkaXNwb3NlIGNhbGxiYWNrLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBlcmZvcm1EaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gdGhhdCBjb21iaW5lcyBtdWx0aXBsZSBhc3luYyBkaXNwb3NhYmxlcyBhbmQgZGlzcG9zZXMgYWxsIG9mIHRoZW0gd2hlbiBpdFxuICogaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21iaW5lQXN5bmNEaXNwb3NhYmxlIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IHJlYWRvbmx5IEFzeW5jRGlzcG9zYWJsZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcjogRGlzcG9zZU9yZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yQmVoYXZpb3I6IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tYmluZUFzeW5jRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gWy4uLnBhcmFtcy5hc3luY0Rpc3Bvc2FibGVzXTtcbiAgICB0aGlzLmRpc3Bvc2VPcmRlciA9IHBhcmFtcy5kaXNwb3NlT3JkZXIgPz8gRGlzcG9zZU9yZGVyLkxpZm87XG4gICAgdGhpcy5lcnJvckJlaGF2aW9yID0gcGFyYW1zLmVycm9yQmVoYXZpb3IgPz8gRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlO1xuICAgIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBwYXJhbXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPz8gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIGFsbCBjb21iaW5lZCBjaGlsZHJlbiBpbiB0aGUgY29uZmlndXJlZCB7QGxpbmsgRGlzcG9zZU9yZGVyfSwgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIERpc3Bvc2VFcnJvckJlaGF2aW9yfSB3aGVuIGEgY2hpbGQgdGhyb3dzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXNwb3NlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmdldE9yZGVyZWRDaGlsZHJlbigpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjaGlsZFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JCZWhhdmlvciA9PT0gRGlzcG9zZUVycm9yQmVoYXZpb3IuRmFpbEZhc3QpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBBZ2dyZWdhdGVFcnJvcihlcnJvcnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JkZXJlZENoaWxkcmVuKCk6IHJlYWRvbmx5IEFzeW5jRGlzcG9zYWJsZVtdIHtcbiAgICBzd2l0Y2ggKHRoaXMuZGlzcG9zZU9yZGVyKSB7XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5GaWZvOlxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbjtcbiAgICAgIGNhc2UgRGlzcG9zZU9yZGVyLkxpZm86XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5jaGlsZHJlbl0ucmV2ZXJzZSgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0TmV2ZXIodGhpcy5kaXNwb3NlT3JkZXIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gdGhhdCBjb21iaW5lcyBtdWx0aXBsZSBkaXNwb3NhYmxlcyBhbmQgZGlzcG9zZXMgYWxsIG9mIHRoZW0gd2hlbiBpdCBpc1xuICogZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21iaW5lRGlzcG9zYWJsZSBleHRlbmRzIERpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGlsZHJlbjogcmVhZG9ubHkgRGlzcG9zYWJsZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcjogRGlzcG9zZU9yZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yQmVoYXZpb3I6IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDb21iaW5lRGlzcG9zYWJsZX0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IENvbWJpbmVEaXNwb3NhYmxlQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbLi4ucGFyYW1zLmRpc3Bvc2FibGVzXTtcbiAgICB0aGlzLmRpc3Bvc2VPcmRlciA9IHBhcmFtcy5kaXNwb3NlT3JkZXIgPz8gRGlzcG9zZU9yZGVyLkxpZm87XG4gICAgdGhpcy5lcnJvckJlaGF2aW9yID0gcGFyYW1zLmVycm9yQmVoYXZpb3IgPz8gRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlO1xuICAgIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBwYXJhbXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPz8gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIGFsbCBjb21iaW5lZCBjaGlsZHJlbiBpbiB0aGUgY29uZmlndXJlZCB7QGxpbmsgRGlzcG9zZU9yZGVyfSwgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIERpc3Bvc2VFcnJvckJlaGF2aW9yfSB3aGVuIGEgY2hpbGQgdGhyb3dzLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBlcmZvcm1EaXNwb3NlKCk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmdldE9yZGVyZWRDaGlsZHJlbigpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjaGlsZFtTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICh0aGlzLmVycm9yQmVoYXZpb3IgPT09IERpc3Bvc2VFcnJvckJlaGF2aW9yLkZhaWxGYXN0KSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVyZWRDaGlsZHJlbigpOiByZWFkb25seSBEaXNwb3NhYmxlW10ge1xuICAgIHN3aXRjaCAodGhpcy5kaXNwb3NlT3JkZXIpIHtcbiAgICAgIGNhc2UgRGlzcG9zZU9yZGVyLkZpZm86XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICAgICAgY2FzZSBEaXNwb3NlT3JkZXIuTGlmbzpcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmNoaWxkcmVuXS5yZXZlcnNlKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnROZXZlcih0aGlzLmRpc3Bvc2VPcmRlcik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZX0gaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBvYmogLSB0aGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZX0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZX0gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jRGlzcG9zYWJsZShvYmo6IHVua25vd24pOiBvYmogaXMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgY29uc3QgYXN5bmNEaXNwb3NhYmxlID0gb2JqIGFzIFBhcnRpYWw8QXN5bmNEaXNwb3NhYmxlPjtcbiAgcmV0dXJuICEhYXN5bmNEaXNwb3NhYmxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBvYmogLSB0aGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2VcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0Rpc3Bvc2FibGVFeChvYmo6IHVua25vd24pOiBvYmogaXMgQXN5bmNEaXNwb3NhYmxlRXgge1xuICBjb25zdCBhc3luY0Rpc3Bvc2FibGVFeCA9IG9iaiBhcyBQYXJ0aWFsPEFzeW5jRGlzcG9zYWJsZUV4PjtcbiAgcmV0dXJuIGlzQXN5bmNEaXNwb3NhYmxlKG9iaikgJiYgdHlwZW9mIGFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBvYmogLSB0aGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUge0BsaW5rIERpc3Bvc2FibGV9IGludGVyZmFjZVxuICogQHJldHVybnMgV2hldGhlciB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBEaXNwb3NhYmxlfSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGlzcG9zYWJsZShvYmo6IHVua25vd24pOiBvYmogaXMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGRpc3Bvc2FibGUgPSBvYmogYXMgUGFydGlhbDxEaXNwb3NhYmxlPjtcbiAgcmV0dXJuICEhZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV07XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBvYmogLSB0aGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rpc3Bvc2FibGVFeChvYmo6IHVua25vd24pOiBvYmogaXMgRGlzcG9zYWJsZUV4IHtcbiAgY29uc3QgZGlzcG9zYWJsZUV4ID0gb2JqIGFzIFBhcnRpYWw8RGlzcG9zYWJsZUV4PjtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZShvYmopICYmIHR5cGVvZiBkaXNwb3NhYmxlRXguZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBBZGFwdHMgYSBwbGFpbiB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlfSBpbnRvIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gYnkgYWRkaW5nIGEgY29udmVuaWVuY2VcbiAqIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeC5hc3luY0Rpc3Bvc2V9IG1ldGhvZCB0aGF0IGRlbGVnYXRlcyB0byBgU3ltYm9sLmFzeW5jRGlzcG9zZWAuXG4gKlxuICogSWYgdGhlIG9iamVjdCBhbHJlYWR5IGltcGxlbWVudHMge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBhc3luY0Rpc3Bvc2FibGUgLSB0aGUgYXN5bmMgZGlzcG9zYWJsZSB0byBhZGFwdFxuICogQHJldHVybnMgQW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSB3cmFwcGluZyB0aGUgYXN5bmMgZGlzcG9zYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQXN5bmNEaXNwb3NhYmxlRXgoYXN5bmNEaXNwb3NhYmxlOiBBc3luY0Rpc3Bvc2FibGUpOiBBc3luY0Rpc3Bvc2FibGVFeCB7XG4gIGlmIChpc0FzeW5jRGlzcG9zYWJsZUV4KGFzeW5jRGlzcG9zYWJsZSkpIHtcbiAgICByZXR1cm4gYXN5bmNEaXNwb3NhYmxlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luY0Rpc3Bvc2UsXG4gICAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOiBhc3luY0Rpc3Bvc2VcbiAgfTtcblxuICBmdW5jdGlvbiBhc3luY0Rpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBZGFwdHMgYSBwbGFpbiB7QGxpbmsgRGlzcG9zYWJsZX0gaW50byBhIHtAbGluayBEaXNwb3NhYmxlRXh9IGJ5IGFkZGluZyBhIGNvbnZlbmllbmNlXG4gKiB7QGxpbmsgRGlzcG9zYWJsZUV4LmRpc3Bvc2V9IG1ldGhvZCB0aGF0IGRlbGVnYXRlcyB0byBgU3ltYm9sLmRpc3Bvc2VgLlxuICpcbiAqIElmIHRoZSBvYmplY3QgYWxyZWFkeSBpbXBsZW1lbnRzIHtAbGluayBEaXNwb3NhYmxlRXh9LCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIGRpc3Bvc2FibGUgLSB0aGUgZGlzcG9zYWJsZSB0byBhZGFwdFxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB3cmFwcGluZyB0aGUgZGlzcG9zYWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRGlzcG9zYWJsZUV4KGRpc3Bvc2FibGU6IERpc3Bvc2FibGUpOiBEaXNwb3NhYmxlRXgge1xuICBpZiAoaXNEaXNwb3NhYmxlRXgoZGlzcG9zYWJsZSkpIHtcbiAgICByZXR1cm4gZGlzcG9zYWJsZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZGlzcG9zZSxcbiAgICBbU3ltYm9sLmRpc3Bvc2VdOiBkaXNwb3NlXG4gIH07XG5cbiAgZnVuY3Rpb24gZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBkaXNwb3NhYmxlW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgZGlzcG9zYWJsZSdzIHRlYXJkb3duIHNob3VsZCBydW4gb24gdGhlIGN1cnJlbnQgZGlzcG9zZSBjYWxsLCBhcHBseWluZyB0aGVcbiAqIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcn0gcmUtZGlzcG9zZSBwb2xpY3kuIFNpbmdsZSBzb3VyY2Ugb2YgdGhlIGd1YXJkIHNoYXJlZCBieVxuICoge0BsaW5rIERpc3Bvc2FibGVCYXNlfSBhbmQge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2V9LlxuICpcbiAqIEBwYXJhbSBpc0Rpc3Bvc2VkIC0gV2hldGhlciB0aGUgZGlzcG9zYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9uY2UuXG4gKiBAcGFyYW0gbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgLSBUaGUgcmUtZGlzcG9zZSBiZWhhdmlvci5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSB0ZWFyZG93biBzaG91bGQgcnVuLCBgZmFsc2VgIHdoZW4gaXQgc2hvdWxkIGJlIHNraXBwZWQuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFBlcmZvcm1EaXNwb3NlKGlzRGlzcG9zZWQ6IGJvb2xlYW4sIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcik6IGJvb2xlYW4ge1xuICBpZiAoIWlzRGlzcG9zZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaCAobXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpIHtcbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZTpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuVGhyb3c6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgZGlzcG9zYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkLicpO1xuICAgIGRlZmF1bHQ6XG4gICAgICBhc3NlcnROZXZlcihtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcik7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsU0FBUyxtQkFBbUI7QUFNckIsSUFBSyx1QkFBTCxrQkFBS0EsMEJBQUw7QUFLTCxFQUFBQSw0Q0FBQTtBQUtBLEVBQUFBLDRDQUFBO0FBVlUsU0FBQUE7QUFBQSxHQUFBO0FBaUJMLElBQUssZUFBTCxrQkFBS0Msa0JBQUw7QUFLTCxFQUFBQSw0QkFBQTtBQUtBLEVBQUFBLDRCQUFBO0FBVlUsU0FBQUE7QUFBQSxHQUFBO0FBaUJMLElBQUssMEJBQUwsa0JBQUtDLDZCQUFMO0FBSUwsRUFBQUEsa0RBQUE7QUFLQSxFQUFBQSxrREFBQTtBQUtBLEVBQUFBLGtEQUFBO0FBZFUsU0FBQUE7QUFBQSxHQUFBO0FBeUpMLE1BQWUsb0JBQWlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTTNELDBCQUFtRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU83RCxJQUFjLGFBQXNCO0FBQ2xDLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVRLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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
339
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rpc3Bvc2FibGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIHV0aWxpdGllcyBmb3IgYHVzaW5nYCAvIGBhd2FpdCB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgZXJyb3Igc2VtYW50aWNzIG9mIGEge0BsaW5rIENvbWJpbmVEaXNwb3NhYmxlfSBvciB7QGxpbmsgQ29tYmluZUFzeW5jRGlzcG9zYWJsZX0gd2hlblxuICogb25lIG9mIGl0cyBjaGlsZHJlbiB0aHJvd3Mgd2hpbGUgYmVpbmcgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBlbnVtIERpc3Bvc2VFcnJvckJlaGF2aW9yIHtcbiAgLyoqXG4gICAqIERpc3Bvc2UgZXZlcnkgY2hpbGQgZXZlbiBpZiBzb21lIG9mIHRoZW0gdGhyb3csIGNvbGxlY3RpbmcgdGhlIHRocm93biBlcnJvcnMgYW5kIHJlLXRocm93aW5nIHRoZW1cbiAgICogYXMgYSBzaW5nbGUge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfSBvbmNlIGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gZGlzcG9zZWQuXG4gICAqL1xuICBBZ2dyZWdhdGUsXG5cbiAgLyoqXG4gICAqIFJlLXRocm93IHRoZSBmaXJzdCBlcnJvciBhIGNoaWxkIHRocm93cyBpbW1lZGlhdGVseSwgbGVhdmluZyB0aGUgcmVtYWluaW5nIGNoaWxkcmVuIHVuZGlzcG9zZWQuXG4gICAqL1xuICBGYWlsRmFzdFxufVxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIG9yZGVyIGluIHdoaWNoIGEge0BsaW5rIENvbWJpbmVEaXNwb3NhYmxlfSBvciB7QGxpbmsgQ29tYmluZUFzeW5jRGlzcG9zYWJsZX0gZGlzcG9zZXNcbiAqIGl0cyBjaGlsZHJlbi5cbiAqL1xuZXhwb3J0IGVudW0gRGlzcG9zZU9yZGVyIHtcbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIGxhc3QtcmVnaXN0ZXJlZCBjaGlsZCBmaXJzdCAobGFzdC1pbiwgZmlyc3Qtb3V0KSwgbGlrZSBuZXN0ZWQgYHVzaW5nYCBkZWNsYXJhdGlvbnNcbiAgICogdW53aW5kaW5nIGluIHJldmVyc2UuXG4gICAqL1xuICBMaWZvLFxuXG4gIC8qKlxuICAgKiBEaXNwb3NlIHRoZSBmaXJzdC1yZWdpc3RlcmVkIGNoaWxkIGZpcnN0IChmaXJzdC1pbiwgZmlyc3Qtb3V0KS5cbiAgICovXG4gIEZpZm9cbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGhvdyBhIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9IG9yIHtAbGluayBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZX0gYmVoYXZlcyB3aGVuIGl0IGlzXG4gKiBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAqL1xuZXhwb3J0IGVudW0gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3Ige1xuICAvKipcbiAgICogSW52b2tlIHRoZSBjYWxsYmFjayBvbiBldmVyeSBkaXNwb3NlLlxuICAgKi9cbiAgSW52b2tlLFxuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoZSBmaXJzdCBkaXNwb3NlIG9ubHk7IHN1YnNlcXVlbnQgZGlzcG9zZXMgYXJlIG5vLW9wcy5cbiAgICovXG4gIElnbm9yZSxcblxuICAvKipcbiAgICogSW52b2tlIHRoZSBjYWxsYmFjayBvbiB0aGUgZmlyc3QgZGlzcG9zZSBvbmx5OyBzdWJzZXF1ZW50IGRpc3Bvc2VzIHRocm93LlxuICAgKi9cbiAgVGhyb3dcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0aW5nIGFuIHtAbGluayBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIGRpc3Bvc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FsbGJhY2s6IEFzeW5jRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGRpc3Bvc2FibGUgYmVoYXZlcyB3aGVuIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBBbiB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlfSB0aGF0IGFkZGl0aW9uYWxseSBleHBvc2VzIGEgY29udmVuaWVuY2Uge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZX1cbiAqIG1ldGhvZCwgc28gYSBzdG9yZWQgaGFuZGxlIGNhbiBiZSBkaXNwb3NlZCBhcyBgaGFuZGxlLmFzeW5jRGlzcG9zZSgpYCBpbnN0ZWFkIG9mIHRoZSBjbHVua2llclxuICogYGhhbmRsZVtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3luY0Rpc3Bvc2FibGVFeCBleHRlbmRzIEFzeW5jRGlzcG9zYWJsZSB7XG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBEZWxlZ2F0ZXMgdG8gYHRoaXNbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKWAuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSBkaXNwb3NhbCBjb21wbGV0ZXMuXG4gICAqL1xuICBhc3luY0Rpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGNhbGxiYWNrIGludm9rZWQgd2hlbiBhbiB7QGxpbmsgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGV9IGlzIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgdHlwZSBBc3luY0Rpc3Bvc2VDYWxsYmFjayA9ICh0aGlzOiB2b2lkKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3RpbmcgYSB7QGxpbmsgQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSB3aGVuIGRpc3Bvc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FsbGJhY2s6IERpc3Bvc2VDYWxsYmFjaztcblxuICAvKipcbiAgICogSG93IHRoZSBkaXNwb3NhYmxlIGJlaGF2ZXMgd2hlbiBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yPzogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lQXN5bmNEaXNwb3NhYmxlQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGFzeW5jIGRpc3Bvc2FibGVzIHRvIGRpc3Bvc2Ugd2hlbiB0aGUgY29tYmluZXIgaXMgZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBhc3luY0Rpc3Bvc2FibGVzOiBJdGVyYWJsZTxBc3luY0Rpc3Bvc2FibGU+O1xuXG4gIC8qKlxuICAgKiBUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIGNoaWxkcmVuIGFyZSBkaXNwb3NlZC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERpc3Bvc2VPcmRlci5MaWZvfVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcG9zZU9yZGVyPzogRGlzcG9zZU9yZGVyO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGNvbWJpbmVyIGJlaGF2ZXMgd2hlbiBvbmUgb2YgaXRzIGNoaWxkcmVuIHRocm93cyB3aGlsZSBiZWluZyBkaXNwb3NlZC5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERpc3Bvc2VFcnJvckJlaGF2aW9yLkFnZ3JlZ2F0ZX1cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yQmVoYXZpb3I/OiBEaXNwb3NlRXJyb3JCZWhhdmlvcjtcblxuICAvKipcbiAgICogSG93IHRoZSBjb21iaW5lciBiZWhhdmVzIHdoZW4gaXQgaXMgZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICByZWFkb25seSBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcj86IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yO1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3RpbmcgYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVEaXNwb3NhYmxlQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRpc3Bvc2FibGVzIHRvIGRpc3Bvc2Ugd2hlbiB0aGUgY29tYmluZXIgaXMgZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBkaXNwb3NhYmxlczogSXRlcmFibGU8RGlzcG9zYWJsZT47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGRyZW4gYXJlIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZU9yZGVyLkxpZm99XG4gICAqL1xuICByZWFkb25seSBkaXNwb3NlT3JkZXI/OiBEaXNwb3NlT3JkZXI7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIG9uZSBvZiBpdHMgY2hpbGRyZW4gdGhyb3dzIHdoaWxlIGJlaW5nIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlfVxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcj86IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGNvbWJpbmVyIGJlaGF2ZXMgd2hlbiBpdCBpcyBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yPzogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I7XG59XG5cbi8qKlxuICogQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCBhZGRpdGlvbmFsbHkgZXhwb3NlcyBhIGNvbnZlbmllbmNlIHtAbGluayBEaXNwb3NhYmxlRXguZGlzcG9zZX0gbWV0aG9kLCBzbyBhXG4gKiBzdG9yZWQgaGFuZGxlIGNhbiBiZSBkaXNwb3NlZCBhcyBgaGFuZGxlLmRpc3Bvc2UoKWAgaW5zdGVhZCBvZiB0aGUgY2x1bmtpZXIgYGhhbmRsZVtTeW1ib2wuZGlzcG9zZV0oKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcG9zYWJsZUV4IGV4dGVuZHMgRGlzcG9zYWJsZSB7XG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBEZWxlZ2F0ZXMgdG8gYHRoaXNbU3ltYm9sLmRpc3Bvc2VdKClgLlxuICAgKi9cbiAgZGlzcG9zZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERpc3Bvc2VDYWxsYmFjayA9ICh0aGlzOiB2b2lkKSA9PiB2b2lkO1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgZm9yIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH06IGl0IGNhcnJpZXMgdGhlIHJlLWRpc3Bvc2UgZ3VhcmQgKHZpYVxuICoge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSkgYW5kIHRoZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXguYXN5bmNEaXNwb3NlfSBhbGlhczsgYSBzdWJjbGFzcyBvbmx5XG4gKiBpbXBsZW1lbnRzIHtAbGluayBBc3luY0Rpc3Bvc2FibGVCYXNlLnBlcmZvcm1EaXNwb3NlQXN5bmN9LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXN5bmNEaXNwb3NhYmxlQmFzZSBpbXBsZW1lbnRzIEFzeW5jRGlzcG9zYWJsZUV4IHtcbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICBwcm90ZWN0ZWQgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGlzcG9zYWJsZSBoYXMgYmVlbiBkaXNwb3NlZCAoaXRzIHRlYXJkb3duIGhhcyBydW4gYXQgbGVhc3Qgb25jZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBvbmNlIGRpc3Bvc2FsIGhhcyBzdGFydGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3Bvc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBDb252ZW5pZW5jZSBhbGlhcyB0aGF0IGRlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpYC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRlYXJkb3duIGNvbXBsZXRlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luY0Rpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXNbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0IGJ5IHJ1bm5pbmcge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2VBc3luY30sIGhvbm9yaW5nIHRoZSBjb25maWd1cmVkXG4gICAqIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcn0gb24gYSByZXBlYXQgZGlzcG9zZS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRlYXJkb3duIGNvbXBsZXRlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFzaG91bGRQZXJmb3JtRGlzcG9zZSh0aGlzLl9pc0Rpc3Bvc2VkLCB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRGlzcG9zZWQgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMucGVyZm9ybURpc3Bvc2VBc3luYygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBhY3R1YWwgdGVhcmRvd24uIENhbGxlZCBhdCBtb3N0IG9uY2UgdW5sZXNzIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JbnZva2V9IGlzIHNldC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzYWJsZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRlYXJkb3duIGNvbXBsZXRlcy5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2FibGU8dm9pZD47XG59XG5cbi8qKlxuICogQW4gYXN5bmMgZGlzcG9zYWJsZSB0aGF0IGV4ZWN1dGVzIGEgY2FsbGJhY2sgd2hlbiBkaXNwb3NlZCB2aWEgYGF3YWl0IHVzaW5nYCAob3IgYSBtYW51YWxcbiAqIGBhd2FpdCBkaXNwb3NhYmxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FsbGJhY2s6IEFzeW5jRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZX0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBwYXJhbXMuY2FsbGJhY2s7XG4gICAgdGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA9IHBhcmFtcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA/PyBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgZGlzcG9zZSBjYWxsYmFjay5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBjYWxsYmFjayBjb21wbGV0ZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcGVyZm9ybURpc3Bvc2VBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNhbGxiYWNrKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwb3NlcyBhIHtAbGluayBEaXNwb3NhYmxlfS5cbiAqXG4gKiBQcmVmZXIgdGhpcyBvdmVyIGNhbGxpbmcgYGRpc3Bvc2FibGVbU3ltYm9sLmRpc3Bvc2VdKClgIGF0IHRoZSBjYWxsIHNpdGU6IGl0IHJlYWRzIGJldHRlciBhbmQga2VlcHMgdGhlXG4gKiB3ZWxsLWtub3duIHN5bWJvbCByZWZlcmVuY2VkIGluIGEgc2luZ2xlIHBsYWNlLlxuICpcbiAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gdGhlIGRpc3Bvc2FibGUgdG8gZGlzcG9zZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZShkaXNwb3NhYmxlOiBEaXNwb3NhYmxlKTogdm9pZCB7XG4gIGRpc3Bvc2FibGVbU3ltYm9sLmRpc3Bvc2VdKCk7XG59XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBmb3IgYSB7QGxpbmsgRGlzcG9zYWJsZUV4fTogaXQgY2FycmllcyB0aGUgcmUtZGlzcG9zZSBndWFyZCAodmlhIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcn0pXG4gKiBhbmQgdGhlIHtAbGluayBEaXNwb3NhYmxlRXguZGlzcG9zZX0gYWxpYXM7IGEgc3ViY2xhc3Mgb25seSBpbXBsZW1lbnRzIHtAbGluayBEaXNwb3NhYmxlQmFzZS5wZXJmb3JtRGlzcG9zZX0uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEaXNwb3NhYmxlQmFzZSBpbXBsZW1lbnRzIERpc3Bvc2FibGVFeCB7XG4gIC8qKlxuICAgKiBIb3cgdGhlIGRpc3Bvc2FibGUgYmVoYXZlcyB3aGVuIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcHJvdGVjdGVkIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA9IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIGRpc3Bvc2FibGUgaGFzIGJlZW4gZGlzcG9zZWQgKGl0cyB0ZWFyZG93biBoYXMgcnVuIGF0IGxlYXN0IG9uY2UpLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgb25jZSBkaXNwb3NhbCBoYXMgc3RhcnRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgaXNEaXNwb3NlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNEaXNwb3NlZDtcbiAgfVxuXG4gIHByaXZhdGUgX2lzRGlzcG9zZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGlzcG9zZXMgdGhlIG9iamVjdC4gQ29udmVuaWVuY2UgYWxpYXMgdGhhdCBkZWxlZ2F0ZXMgdG8gYHRoaXNbU3ltYm9sLmRpc3Bvc2VdKClgLlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0IGJ5IHJ1bm5pbmcge0BsaW5rIERpc3Bvc2FibGVCYXNlLnBlcmZvcm1EaXNwb3NlfSwgaG9ub3JpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSBvbiBhIHJlcGVhdCBkaXNwb3NlLlxuICAgKi9cbiAgcHVibGljIFtTeW1ib2wuZGlzcG9zZV0oKTogdm9pZCB7XG4gICAgaWYgKCFzaG91bGRQZXJmb3JtRGlzcG9zZSh0aGlzLl9pc0Rpc3Bvc2VkLCB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzRGlzcG9zZWQgPSB0cnVlO1xuICAgIHRoaXMucGVyZm9ybURpc3Bvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyB0aGUgYWN0dWFsIHRlYXJkb3duLiBDYWxsZWQgYXQgbW9zdCBvbmNlIHVubGVzcyB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSW52b2tlfSBpcyBzZXQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcGVyZm9ybURpc3Bvc2UoKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBIGRpc3Bvc2FibGUgdGhhdCBleGVjdXRlcyBhIGNhbGxiYWNrIHdoZW4gZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDYWxsYmFja0Rpc3Bvc2FibGUgZXh0ZW5kcyBEaXNwb3NhYmxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FsbGJhY2s6IERpc3Bvc2VDYWxsYmFjaztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB7QGxpbmsgQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ2FsbGJhY2tEaXNwb3NhYmxlQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2FsbGJhY2sgPSBwYXJhbXMuY2FsbGJhY2s7XG4gICAgdGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA9IHBhcmFtcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA/PyBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgZGlzcG9zZSBjYWxsYmFjay5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGxiYWNrKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9IHRoYXQgY29tYmluZXMgbXVsdGlwbGUgYXN5bmMgZGlzcG9zYWJsZXMgYW5kIGRpc3Bvc2VzIGFsbCBvZiB0aGVtIHdoZW4gaXRcbiAqIGlzIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgY2xhc3MgQ29tYmluZUFzeW5jRGlzcG9zYWJsZSBleHRlbmRzIEFzeW5jRGlzcG9zYWJsZUJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuOiByZWFkb25seSBBc3luY0Rpc3Bvc2FibGVbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwb3NlT3JkZXI6IERpc3Bvc2VPcmRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvckJlaGF2aW9yOiBEaXNwb3NlRXJyb3JCZWhhdmlvcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB7QGxpbmsgQ29tYmluZUFzeW5jRGlzcG9zYWJsZX0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IENvbWJpbmVBc3luY0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFsuLi5wYXJhbXMuYXN5bmNEaXNwb3NhYmxlc107XG4gICAgdGhpcy5kaXNwb3NlT3JkZXIgPSBwYXJhbXMuZGlzcG9zZU9yZGVyID8/IERpc3Bvc2VPcmRlci5MaWZvO1xuICAgIHRoaXMuZXJyb3JCZWhhdmlvciA9IHBhcmFtcy5lcnJvckJlaGF2aW9yID8/IERpc3Bvc2VFcnJvckJlaGF2aW9yLkFnZ3JlZ2F0ZTtcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyBhbGwgY29tYmluZWQgY2hpbGRyZW4gaW4gdGhlIGNvbmZpZ3VyZWQge0BsaW5rIERpc3Bvc2VPcmRlcn0sIGFwcGx5aW5nIHRoZSBjb25maWd1cmVkXG4gICAqIHtAbGluayBEaXNwb3NlRXJyb3JCZWhhdmlvcn0gd2hlbiBhIGNoaWxkIHRocm93cy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIGFsbCBjaGlsZHJlbiBoYXZlIGJlZW4gZGlzcG9zZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcGVyZm9ybURpc3Bvc2VBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlcnJvcnM6IHVua25vd25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5nZXRPcmRlcmVkQ2hpbGRyZW4oKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2hpbGRbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICh0aGlzLmVycm9yQmVoYXZpb3IgPT09IERpc3Bvc2VFcnJvckJlaGF2aW9yLkZhaWxGYXN0KSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcnMucHVzaChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE9yZGVyZWRDaGlsZHJlbigpOiByZWFkb25seSBBc3luY0Rpc3Bvc2FibGVbXSB7XG4gICAgc3dpdGNoICh0aGlzLmRpc3Bvc2VPcmRlcikge1xuICAgICAgY2FzZSBEaXNwb3NlT3JkZXIuRmlmbzoge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbjtcbiAgICAgIH1cbiAgICAgIGNhc2UgRGlzcG9zZU9yZGVyLkxpZm86IHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmNoaWxkcmVuXS5yZXZlcnNlKCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGFzc2VydE5ldmVyKHRoaXMuZGlzcG9zZU9yZGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBIHtAbGluayBEaXNwb3NhYmxlRXh9IHRoYXQgY29tYmluZXMgbXVsdGlwbGUgZGlzcG9zYWJsZXMgYW5kIGRpc3Bvc2VzIGFsbCBvZiB0aGVtIHdoZW4gaXQgaXNcbiAqIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgY2xhc3MgQ29tYmluZURpc3Bvc2FibGUgZXh0ZW5kcyBEaXNwb3NhYmxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IHJlYWRvbmx5IERpc3Bvc2FibGVbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwb3NlT3JkZXI6IERpc3Bvc2VPcmRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvckJlaGF2aW9yOiBEaXNwb3NlRXJyb3JCZWhhdmlvcjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDb21iaW5lRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gWy4uLnBhcmFtcy5kaXNwb3NhYmxlc107XG4gICAgdGhpcy5kaXNwb3NlT3JkZXIgPSBwYXJhbXMuZGlzcG9zZU9yZGVyID8/IERpc3Bvc2VPcmRlci5MaWZvO1xuICAgIHRoaXMuZXJyb3JCZWhhdmlvciA9IHBhcmFtcy5lcnJvckJlaGF2aW9yID8/IERpc3Bvc2VFcnJvckJlaGF2aW9yLkFnZ3JlZ2F0ZTtcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyBhbGwgY29tYmluZWQgY2hpbGRyZW4gaW4gdGhlIGNvbmZpZ3VyZWQge0BsaW5rIERpc3Bvc2VPcmRlcn0sIGFwcGx5aW5nIHRoZSBjb25maWd1cmVkXG4gICAqIHtAbGluayBEaXNwb3NlRXJyb3JCZWhhdmlvcn0gd2hlbiBhIGNoaWxkIHRocm93cy5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvcnM6IHVua25vd25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5nZXRPcmRlcmVkQ2hpbGRyZW4oKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2hpbGRbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAodGhpcy5lcnJvckJlaGF2aW9yID09PSBEaXNwb3NlRXJyb3JCZWhhdmlvci5GYWlsRmFzdCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkQ2hpbGRyZW4oKTogcmVhZG9ubHkgRGlzcG9zYWJsZVtdIHtcbiAgICBzd2l0Y2ggKHRoaXMuZGlzcG9zZU9yZGVyKSB7XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5GaWZvOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICAgICAgfVxuICAgICAgY2FzZSBEaXNwb3NlT3JkZXIuTGlmbzoge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuY2hpbGRyZW5dLnJldmVyc2UoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYXNzZXJ0TmV2ZXIodGhpcy5kaXNwb3NlT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERpc3Bvc2VzIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9LlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgY2FsbGluZyBgYXN5bmNEaXNwb3NhYmxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgIGF0IHRoZSBjYWxsIHNpdGU6IGl0IHJlYWRzIGJldHRlciBhbmRcbiAqIGtlZXBzIHRoZSB3ZWxsLWtub3duIHN5bWJvbCByZWZlcmVuY2VkIGluIGEgc2luZ2xlIHBsYWNlLlxuICpcbiAqIEBwYXJhbSBhc3luY0Rpc3Bvc2FibGUgLSB0aGUgYXN5bmMgZGlzcG9zYWJsZSB0byBkaXNwb3NlXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc3Bvc2VBc3luYyhhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlfSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICogQHJldHVybnMgV2hldGhlciB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0Rpc3Bvc2FibGUoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGUge1xuICBjb25zdCBhc3luY0Rpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPEFzeW5jRGlzcG9zYWJsZT47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWNvbXB1dGVkLXByb3BlcnR5LWV4aXN0ZW5jZS1jaGVjayAtLSBgT2JqZWN0Lmhhc093bmAgaXMgb3duLXByb3BlcnR5LW9ubHksIGFuZCBgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdYCBpcyBhIHByb3RvdHlwZSBtZXRob2Qgb24gZXZlcnkgY2xhc3MtYmFzZWQgZGlzcG9zYWJsZSBoZXJlLlxuICByZXR1cm4gISFhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNEaXNwb3NhYmxlRXgoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGFzeW5jRGlzcG9zYWJsZUV4ID0gJHVua25vd24gYXMgUGFydGlhbDxBc3luY0Rpc3Bvc2FibGVFeD47XG4gIHJldHVybiBpc0FzeW5jRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSAkdW5rbm93biAtIHRoZSBvYmplY3QgdG8gY2hlY2sgZm9yIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEaXNwb3NhYmxlKCR1bmtub3duOiB1bmtub3duKTogJHVua25vd24gaXMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGRpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPERpc3Bvc2FibGU+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1jb21wdXRlZC1wcm9wZXJ0eS1leGlzdGVuY2UtY2hlY2sgLS0gYE9iamVjdC5oYXNPd25gIGlzIG93bi1wcm9wZXJ0eS1vbmx5LCBhbmQgYFtTeW1ib2wuZGlzcG9zZV1gIGlzIGEgcHJvdG90eXBlIG1ldGhvZCBvbiBldmVyeSBjbGFzcy1iYXNlZCBkaXNwb3NhYmxlIGhlcmUuXG4gIHJldHVybiAhIWRpc3Bvc2FibGVbU3ltYm9sLmRpc3Bvc2VdO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBEaXNwb3NhYmxlRXh9IGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gJHVua25vd24gLSB0aGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rpc3Bvc2FibGVFeCgkdW5rbm93bjogdW5rbm93bik6ICR1bmtub3duIGlzIERpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGRpc3Bvc2FibGVFeCA9ICR1bmtub3duIGFzIFBhcnRpYWw8RGlzcG9zYWJsZUV4PjtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGRpc3Bvc2FibGVFeC5kaXNwb3NlID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIEFkYXB0cyBhIHBsYWluIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludG8gYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBieSBhZGRpbmcgYSBjb252ZW5pZW5jZVxuICoge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZX0gbWV0aG9kIHRoYXQgZGVsZWdhdGVzIHRvIGBTeW1ib2wuYXN5bmNEaXNwb3NlYC5cbiAqXG4gKiBJZiB0aGUgb2JqZWN0IGFscmVhZHkgaW1wbGVtZW50cyB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9LCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIGFzeW5jRGlzcG9zYWJsZSAtIHRoZSBhc3luYyBkaXNwb3NhYmxlIHRvIGFkYXB0XG4gKiBAcmV0dXJucyBBbiB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9IHdyYXBwaW5nIHRoZSBhc3luYyBkaXNwb3NhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Bc3luY0Rpc3Bvc2FibGVFeChhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IEFzeW5jRGlzcG9zYWJsZUV4IHtcbiAgaWYgKGlzQXN5bmNEaXNwb3NhYmxlRXgoYXN5bmNEaXNwb3NhYmxlKSkge1xuICAgIHJldHVybiBhc3luY0Rpc3Bvc2FibGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzeW5jRGlzcG9zZTogYXN5bmNEaXNwb3NlQWRhcHRlZCxcbiAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jRGlzcG9zZUFkYXB0ZWRcbiAgfTtcblxuICBmdW5jdGlvbiBhc3luY0Rpc3Bvc2VBZGFwdGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBkaXNwb3NlQXN5bmMoYXN5bmNEaXNwb3NhYmxlKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkYXB0cyBhIHBsYWluIHtAbGluayBEaXNwb3NhYmxlfSBpbnRvIGEge0BsaW5rIERpc3Bvc2FibGVFeH0gYnkgYWRkaW5nIGEgY29udmVuaWVuY2VcbiAqIHtAbGluayBEaXNwb3NhYmxlRXguZGlzcG9zZX0gbWV0aG9kIHRoYXQgZGVsZWdhdGVzIHRvIGBTeW1ib2wuZGlzcG9zZWAuXG4gKlxuICogSWYgdGhlIG9iamVjdCBhbHJlYWR5IGltcGxlbWVudHMge0BsaW5rIERpc3Bvc2FibGVFeH0sIGl0IGlzIHJldHVybmVkIHVuY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0gZGlzcG9zYWJsZSAtIHRoZSBkaXNwb3NhYmxlIHRvIGFkYXB0XG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlRXh9IHdyYXBwaW5nIHRoZSBkaXNwb3NhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9EaXNwb3NhYmxlRXgoZGlzcG9zYWJsZTogRGlzcG9zYWJsZSk6IERpc3Bvc2FibGVFeCB7XG4gIGlmIChpc0Rpc3Bvc2FibGVFeChkaXNwb3NhYmxlKSkge1xuICAgIHJldHVybiBkaXNwb3NhYmxlO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkaXNwb3NlOiBkaXNwb3NlQWRhcHRlZCxcbiAgICBbU3ltYm9sLmRpc3Bvc2VdOiBkaXNwb3NlQWRhcHRlZFxuICB9O1xuXG4gIGZ1bmN0aW9uIGRpc3Bvc2VBZGFwdGVkKCk6IHZvaWQge1xuICAgIGRpc3Bvc2UoZGlzcG9zYWJsZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoZXRoZXIgYSBkaXNwb3NhYmxlJ3MgdGVhcmRvd24gc2hvdWxkIHJ1biBvbiB0aGUgY3VycmVudCBkaXNwb3NlIGNhbGwsIGFwcGx5aW5nIHRoZVxuICoge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSByZS1kaXNwb3NlIHBvbGljeS4gU2luZ2xlIHNvdXJjZSBvZiB0aGUgZ3VhcmQgc2hhcmVkIGJ5XG4gKiB7QGxpbmsgRGlzcG9zYWJsZUJhc2V9IGFuZCB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlQmFzZX0uXG4gKlxuICogQHBhcmFtIGlzRGlzcG9zZWQgLSBXaGV0aGVyIHRoZSBkaXNwb3NhYmxlIGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQgb25jZS5cbiAqIEBwYXJhbSBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvciAtIFRoZSByZS1kaXNwb3NlIGJlaGF2aW9yLlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gdGhlIHRlYXJkb3duIHNob3VsZCBydW4sIGBmYWxzZWAgd2hlbiBpdCBzaG91bGQgYmUgc2tpcHBlZC5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkUGVyZm9ybURpc3Bvc2UoaXNEaXNwb3NlZDogYm9vbGVhbiwgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yKTogYm9vbGVhbiB7XG4gIGlmICghaXNEaXNwb3NlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3dpdGNoIChtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcikge1xuICAgIGNhc2UgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlOiB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNhc2UgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSW52b2tlOiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2FzZSBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5UaHJvdzoge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGRpc3Bvc2FibGUgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZC4nKTtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgYXNzZXJ0TmV2ZXIobXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLG1CQUFtQjtBQU1yQixJQUFLLHVCQUFMLGtCQUFLQSwwQkFBTDtBQUtMLEVBQUFBLDRDQUFBO0FBS0EsRUFBQUEsNENBQUE7QUFWVSxTQUFBQTtBQUFBLEdBQUE7QUFpQkwsSUFBSyxlQUFMLGtCQUFLQyxrQkFBTDtBQUtMLEVBQUFBLDRCQUFBO0FBS0EsRUFBQUEsNEJBQUE7QUFWVSxTQUFBQTtBQUFBLEdBQUE7QUFpQkwsSUFBSywwQkFBTCxrQkFBS0MsNkJBQUw7QUFJTCxFQUFBQSxrREFBQTtBQUtBLEVBQUFBLGtEQUFBO0FBS0EsRUFBQUEsa0RBQUE7QUFkVSxTQUFBQTtBQUFBLEdBQUE7QUF5SkwsTUFBZSxvQkFBaUQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNM0QsMEJBQW1EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTzdELElBQWMsYUFBc0I7QUFDbEMsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUFBLEVBRVEsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9mLGVBQThCO0FBQ25DLFdBQU8sS0FBSyxPQUFPLFlBQVksRUFBRTtBQUFBLEVBQ25DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRQSxPQUFjLE9BQU8sWUFBWSxJQUFtQjtBQUNsRCxRQUFJLENBQUMscUJBQXFCLEtBQUssYUFBYSxLQUFLLHVCQUF1QixHQUFHO0FBQ3pFO0FBQUEsSUFDRjtBQUVBLFNBQUssY0FBYztBQUNuQixVQUFNLEtBQUssb0JBQW9CO0FBQUEsRUFDakM7QUFRRjtBQU1PLE1BQU0sZ0NBQWdDLG9CQUFvQjtBQUFBLEVBQzlDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFB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QU8sQ0FBQyxDQUFDLFdBQVcsT0FBTyxPQUFPO0FBQ3BDO0FBUU8sU0FBUyxlQUFlLFVBQTZDO0FBQzFFLFFBQU0sZUFBZTtBQUNyQixTQUFPLGFBQWEsUUFBUSxLQUFLLE9BQU8sYUFBYSxZQUFZO0FBQ25FO0FBV08sU0FBUyxvQkFBb0IsaUJBQXFEO0FBQ3ZGLE1BQUksb0JBQW9CLGVBQWUsR0FBRztBQUN4QyxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU87QUFBQSxJQUNMLGNBQWM7QUFBQSxJQUNkLENBQUMsT0FBTyxZQUFZLEdBQUc7QUFBQSxFQUN6QjtBQUVBLFdBQVMsc0JBQXFDO0FBQzVDLFdBQU8sYUFBYSxlQUFlO0FBQUEsRUFDckM7QUFDRjtBQVdPLFNBQVMsZUFBZSxZQUFzQztBQUNuRSxNQUFJLGVBQWUsVUFBVSxHQUFHO0FBQzlCLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLElBQ1QsQ0FBQyxPQUFPLE9BQU8sR0FBRztBQUFBLEVBQ3BCO0FBRUEsV0FBUyxpQkFBdUI7QUFDOUIsWUFBUSxVQUFVO0FBQUEsRUFDcEI7QUFDRjtBQVdBLFNBQVMscUJBQXFCLFlBQXFCLHlCQUEyRDtBQUM1RyxNQUFJLENBQUMsWUFBWTtBQUNmLFdBQU87QUFBQSxFQUNUO0FBRUEsVUFBUSx5QkFBeUI7QUFBQSxJQUMvQixLQUFLLGdCQUFnQztBQUNuQyxhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FBSyxnQkFBZ0M7QUFDbkMsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssZUFBK0I7QUFDbEMsWUFBTSxJQUFJLE1BQU0sNENBQTRDO0FBQUEsSUFDOUQ7QUFBQSxJQUNBLFNBQVM7QUFDUCxrQkFBWSx1QkFBdUI7QUFBQSxJQUNyQztBQUFBLEVBQ0Y7QUFDRjsiLAogICJuYW1lcyI6IFsiRGlzcG9zZUVycm9yQmVoYXZpb3IiLCAiRGlzcG9zZU9yZGVyIiwgIk11bHRpcGxlRGlzcG9zZUJlaGF2aW9yIl0KfQo=