obsidian-dev-utils 88.7.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 (679) hide show
  1. package/CHANGELOG.md +23 -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 +16 -17
  353. package/dist/lib/cjs/script-utils/test-runners/index.d.cts +1 -0
  354. package/dist/lib/cjs/script-utils/test-runners/integration-test-plugin.cjs +11 -15
  355. package/dist/lib/cjs/script-utils/test-runners/vitest-config.cjs +325 -0
  356. package/dist/lib/cjs/script-utils/test-runners/vitest-config.d.cts +118 -0
  357. package/dist/lib/cjs/script-utils/test-runners/vitest.cjs +11 -15
  358. package/dist/lib/cjs/script-utils/validate-declarations.cjs +11 -15
  359. package/dist/lib/cjs/script-utils/version.cjs +62 -63
  360. package/dist/lib/cjs/script-utils/version.d.cts +21 -21
  361. package/dist/lib/cjs/script-utils/warnings-as-errors.cjs +11 -15
  362. package/dist/lib/cjs/setup.cjs +11 -15
  363. package/dist/lib/cjs/setup.d.cts +1 -1
  364. package/dist/lib/cjs/strict-proxy.cjs +30 -34
  365. package/dist/lib/cjs/strict-proxy.d.cts +2 -2
  366. package/dist/lib/cjs/string.cjs +90 -93
  367. package/dist/lib/cjs/string.d.cts +60 -60
  368. package/dist/lib/cjs/transformers/date-transformer.cjs +11 -15
  369. package/dist/lib/cjs/transformers/duration-transformer.cjs +11 -15
  370. package/dist/lib/cjs/transformers/group-transformer.cjs +11 -15
  371. package/dist/lib/cjs/transformers/index.cjs +11 -15
  372. package/dist/lib/cjs/transformers/map-transformer.cjs +12 -16
  373. package/dist/lib/cjs/transformers/set-transformer.cjs +12 -16
  374. package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +11 -15
  375. package/dist/lib/cjs/transformers/transformer.cjs +11 -15
  376. package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +12 -16
  377. package/dist/lib/cjs/transformers/typed-transformer.cjs +11 -15
  378. package/dist/lib/cjs/two-way-map.cjs +11 -15
  379. package/dist/lib/cjs/type-guards.cjs +16 -20
  380. package/dist/lib/cjs/type-guards.d.cts +6 -6
  381. package/dist/lib/cjs/type.cjs +13 -17
  382. package/dist/lib/cjs/type.d.cts +2 -2
  383. package/dist/lib/cjs/url.cjs +18 -22
  384. package/dist/lib/cjs/url.d.cts +4 -4
  385. package/dist/lib/cjs/value-provider.cjs +15 -19
  386. package/dist/lib/cjs/value-provider.d.cts +6 -6
  387. package/dist/lib/cjs/value-wrapper.cjs +11 -15
  388. package/dist/lib/cjs/vitest-setup.cjs +11 -15
  389. package/dist/lib/esm/__merged.d.mts +12 -10
  390. package/dist/lib/esm/__merged.mjs +51 -23
  391. package/dist/lib/esm/abort-controller.mjs +5 -8
  392. package/dist/lib/esm/array.d.mts +25 -7
  393. package/dist/lib/esm/array.mjs +16 -12
  394. package/dist/lib/esm/async-events.d.mts +50 -50
  395. package/dist/lib/esm/async-events.mjs +81 -78
  396. package/dist/lib/esm/async.d.mts +23 -23
  397. package/dist/lib/esm/async.mjs +70 -66
  398. package/dist/lib/esm/blob.mjs +4 -11
  399. package/dist/lib/esm/debug.d.mts +1 -1
  400. package/dist/lib/esm/debug.mjs +14 -18
  401. package/dist/lib/esm/disposable.d.mts +27 -8
  402. package/dist/lib/esm/disposable.mjs +47 -29
  403. package/dist/lib/esm/error.mjs +18 -19
  404. package/dist/lib/esm/function.d.mts +26 -26
  405. package/dist/lib/esm/function.mjs +20 -20
  406. package/dist/lib/esm/generated-during-build.mjs +1 -1
  407. package/dist/lib/esm/html-element.d.mts +15 -15
  408. package/dist/lib/esm/html-element.mjs +74 -75
  409. package/dist/lib/esm/object-utils.d.mts +27 -27
  410. package/dist/lib/esm/object-utils.mjs +109 -102
  411. package/dist/lib/esm/obsidian/@types/dataview/data-model/value.d.mts +1 -1
  412. package/dist/lib/esm/obsidian/@types/dataview/expression/field.d.mts +1 -1
  413. package/dist/lib/esm/obsidian/@types/dataview/expression/functions.d.mts +4 -4
  414. package/dist/lib/esm/obsidian/app.mjs +1 -1
  415. package/dist/lib/esm/obsidian/async-with-notice.d.mts +2 -2
  416. package/dist/lib/esm/obsidian/async-with-notice.mjs +18 -18
  417. package/dist/lib/esm/obsidian/attachment-path.d.mts +5 -5
  418. package/dist/lib/esm/obsidian/attachment-path.mjs +10 -10
  419. package/dist/lib/esm/obsidian/backlink.mjs +2 -2
  420. package/dist/lib/esm/obsidian/callout.d.mts +9 -3
  421. package/dist/lib/esm/obsidian/callout.mjs +17 -12
  422. package/dist/lib/esm/obsidian/canvas.mjs +3 -2
  423. package/dist/lib/esm/obsidian/case-insensitive-file-index.mjs +8 -6
  424. package/dist/lib/esm/obsidian/code-block-markdown-information.d.mts +2 -2
  425. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.d.mts +5 -0
  426. package/dist/lib/esm/obsidian/command-handlers/abstract-file-command-handler.mjs +8 -2
  427. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +42 -8
  428. package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +46 -17
  429. package/dist/lib/esm/obsidian/command-handlers/command-handler.d.mts +10 -0
  430. package/dist/lib/esm/obsidian/command-handlers/command-handler.mjs +1 -1
  431. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.d.mts +8 -8
  432. package/dist/lib/esm/obsidian/command-handlers/editor-command-handler.mjs +16 -16
  433. package/dist/lib/esm/obsidian/command-handlers/file-command-handler.mjs +2 -2
  434. package/dist/lib/esm/obsidian/command-handlers/folder-command-handler.mjs +2 -2
  435. package/dist/lib/esm/obsidian/command-handlers/global-command-handler.mjs +3 -3
  436. package/dist/lib/esm/obsidian/community-plugins.d.mts +19 -5
  437. package/dist/lib/esm/obsidian/community-plugins.mjs +17 -11
  438. package/dist/lib/esm/obsidian/components/all-windows-event-component.d.mts +4 -4
  439. package/dist/lib/esm/obsidian/components/all-windows-event-component.mjs +1 -1
  440. package/dist/lib/esm/obsidian/components/async-error-handler-component.mjs +3 -2
  441. package/dist/lib/esm/obsidian/components/component-ex.d.mts +3 -3
  442. package/dist/lib/esm/obsidian/components/component-ex.mjs +16 -14
  443. package/dist/lib/esm/obsidian/components/console-debug-component.d.mts +2 -2
  444. package/dist/lib/esm/obsidian/components/console-debug-component.mjs +4 -4
  445. package/dist/lib/esm/obsidian/components/index.d.mts +1 -0
  446. package/dist/lib/esm/obsidian/components/index.mjs +3 -1
  447. package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +5 -5
  448. package/dist/lib/esm/obsidian/components/monkey-around-component.d.mts +55 -55
  449. package/dist/lib/esm/obsidian/components/monkey-around-component.mjs +19 -19
  450. package/dist/lib/esm/obsidian/components/notebook-navigator-menu-event-registrar-component.d.mts +139 -0
  451. package/dist/lib/esm/obsidian/components/notebook-navigator-menu-event-registrar-component.mjs +196 -0
  452. package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +18 -17
  453. package/dist/lib/esm/obsidian/components/plugin-settings-component.d.mts +8 -8
  454. package/dist/lib/esm/obsidian/components/plugin-settings-component.mjs +18 -18
  455. package/dist/lib/esm/obsidian/components/pointer-position-component.mjs +3 -3
  456. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.d.mts +12 -1
  457. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +62 -48
  458. package/dist/lib/esm/obsidian/components/syntax-highlighting-component.d.mts +8 -8
  459. package/dist/lib/esm/obsidian/components/syntax-highlighting-component.mjs +6 -6
  460. package/dist/lib/esm/obsidian/constructors/get-dom-events-handlers-constructor.mjs +4 -4
  461. package/dist/lib/esm/obsidian/data-handler.mjs +1 -1
  462. package/dist/lib/esm/obsidian/dataview-link.mjs +3 -3
  463. package/dist/lib/esm/obsidian/dataview.d.mts +2 -2
  464. package/dist/lib/esm/obsidian/dataview.mjs +25 -27
  465. package/dist/lib/esm/obsidian/demo-vault-helper.mjs +4 -3
  466. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +12 -12
  467. package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +13 -7
  468. package/dist/lib/esm/obsidian/editor.mjs +7 -5
  469. package/dist/lib/esm/obsidian/events.d.mts +2 -2
  470. package/dist/lib/esm/obsidian/events.mjs +2 -2
  471. package/dist/lib/esm/obsidian/file-change.d.mts +3 -3
  472. package/dist/lib/esm/obsidian/file-change.mjs +67 -67
  473. package/dist/lib/esm/obsidian/file-manager.d.mts +20 -1
  474. package/dist/lib/esm/obsidian/file-manager.mjs +22 -8
  475. package/dist/lib/esm/obsidian/file-system.d.mts +3 -3
  476. package/dist/lib/esm/obsidian/file-system.mjs +4 -4
  477. package/dist/lib/esm/obsidian/frontmatter.mjs +5 -5
  478. package/dist/lib/esm/obsidian/html-element.d.mts +2 -2
  479. package/dist/lib/esm/obsidian/html-element.mjs +3 -3
  480. package/dist/lib/esm/obsidian/i18n/i18n.d.mts +7 -0
  481. package/dist/lib/esm/obsidian/i18n/i18n.mjs +3 -2
  482. package/dist/lib/esm/obsidian/index.d.mts +1 -0
  483. package/dist/lib/esm/obsidian/index.mjs +3 -1
  484. package/dist/lib/esm/obsidian/link.d.mts +22 -22
  485. package/dist/lib/esm/obsidian/link.mjs +76 -62
  486. package/dist/lib/esm/obsidian/logger.d.mts +5 -5
  487. package/dist/lib/esm/obsidian/logger.mjs +11 -11
  488. package/dist/lib/esm/obsidian/loop.d.mts +1 -1
  489. package/dist/lib/esm/obsidian/loop.mjs +4 -4
  490. package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.d.mts +3 -3
  491. package/dist/lib/esm/obsidian/markdown-code-block-processor-registrar.mjs +2 -2
  492. package/dist/lib/esm/obsidian/markdown-code-block-processor.d.mts +3 -3
  493. package/dist/lib/esm/obsidian/markdown-code-block-processor.mjs +25 -26
  494. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.d.mts +3 -3
  495. package/dist/lib/esm/obsidian/markdown-post-processor-registrar.mjs +2 -2
  496. package/dist/lib/esm/obsidian/markdown.mjs +12 -10
  497. package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +1 -1
  498. package/dist/lib/esm/obsidian/metadata-cache.d.mts +2 -2
  499. package/dist/lib/esm/obsidian/metadata-cache.mjs +6 -6
  500. package/dist/lib/esm/obsidian/modals/confirm.mjs +1 -1
  501. package/dist/lib/esm/obsidian/modals/minimizable-modal.mjs +18 -18
  502. package/dist/lib/esm/obsidian/modals/select-item.d.mts +1 -1
  503. package/dist/lib/esm/obsidian/modals/select-item.mjs +6 -6
  504. package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.d.mts +5 -5
  505. package/dist/lib/esm/obsidian/modals/suggest-modal-command-builder.mjs +16 -14
  506. package/dist/lib/esm/obsidian/notebook-navigator.d.mts +132 -0
  507. package/dist/lib/esm/obsidian/notebook-navigator.mjs +49 -0
  508. package/dist/lib/esm/obsidian/parse-link.d.mts +4 -4
  509. package/dist/lib/esm/obsidian/parse-link.mjs +51 -48
  510. package/dist/lib/esm/obsidian/path-settings.mjs +17 -11
  511. package/dist/lib/esm/obsidian/pdf.d.mts +2 -2
  512. package/dist/lib/esm/obsidian/pdf.mjs +3 -3
  513. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +156 -52
  514. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +1 -1
  515. package/dist/lib/esm/obsidian/plugin/plugin-context.d.mts +2 -2
  516. package/dist/lib/esm/obsidian/plugin/plugin-context.mjs +7 -7
  517. package/dist/lib/esm/obsidian/plugin/plugin-event-source.d.mts +11 -9
  518. package/dist/lib/esm/obsidian/plugin/plugin-event-source.mjs +10 -10
  519. package/dist/lib/esm/obsidian/plugin/plugin-settings-tab.mjs +20 -20
  520. package/dist/lib/esm/obsidian/plugin/plugin.d.mts +11 -1
  521. package/dist/lib/esm/obsidian/plugin/plugin.mjs +23 -2
  522. package/dist/lib/esm/obsidian/popovers/popover-anchor.d.mts +2 -2
  523. package/dist/lib/esm/obsidian/popovers/popover-anchor.mjs +4 -4
  524. package/dist/lib/esm/obsidian/popovers/popover.mjs +9 -9
  525. package/dist/lib/esm/obsidian/queue.d.mts +2 -2
  526. package/dist/lib/esm/obsidian/queue.mjs +6 -6
  527. package/dist/lib/esm/obsidian/resource-lock.d.mts +5 -0
  528. package/dist/lib/esm/obsidian/resource-lock.mjs +147 -64
  529. package/dist/lib/esm/obsidian/resource-url.mjs +2 -2
  530. package/dist/lib/esm/obsidian/ribbon-icon-registrar.d.mts +2 -2
  531. package/dist/lib/esm/obsidian/ribbon-icon-registrar.mjs +1 -1
  532. package/dist/lib/esm/obsidian/setting-components/checkbox-component.d.mts +5 -5
  533. package/dist/lib/esm/obsidian/setting-components/checkbox-component.mjs +8 -8
  534. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.d.mts +2 -2
  535. package/dist/lib/esm/obsidian/setting-components/code-highlighter-component.mjs +18 -17
  536. package/dist/lib/esm/obsidian/setting-components/date-component.d.mts +2 -2
  537. package/dist/lib/esm/obsidian/setting-components/date-component.mjs +4 -4
  538. package/dist/lib/esm/obsidian/setting-components/date-time-component.d.mts +2 -2
  539. package/dist/lib/esm/obsidian/setting-components/date-time-component.mjs +4 -4
  540. package/dist/lib/esm/obsidian/setting-components/email-component.d.mts +2 -2
  541. package/dist/lib/esm/obsidian/setting-components/email-component.mjs +4 -4
  542. package/dist/lib/esm/obsidian/setting-components/month-component.d.mts +2 -2
  543. package/dist/lib/esm/obsidian/setting-components/month-component.mjs +4 -4
  544. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.d.mts +2 -2
  545. package/dist/lib/esm/obsidian/setting-components/multiple-dropdown-component.mjs +7 -7
  546. package/dist/lib/esm/obsidian/setting-components/multiple-email-component.d.mts +2 -2
  547. package/dist/lib/esm/obsidian/setting-components/multiple-email-component.mjs +4 -4
  548. package/dist/lib/esm/obsidian/setting-components/multiple-file-component.mjs +2 -2
  549. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.d.mts +2 -2
  550. package/dist/lib/esm/obsidian/setting-components/multiple-text-component.mjs +5 -5
  551. package/dist/lib/esm/obsidian/setting-components/number-component.d.mts +2 -2
  552. package/dist/lib/esm/obsidian/setting-components/number-component.mjs +4 -4
  553. package/dist/lib/esm/obsidian/setting-components/password-component.d.mts +2 -2
  554. package/dist/lib/esm/obsidian/setting-components/password-component.mjs +4 -4
  555. package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.d.mts +2 -2
  556. package/dist/lib/esm/obsidian/setting-components/setting-component-wrapper.mjs +6 -6
  557. package/dist/lib/esm/obsidian/setting-components/telephone-component.d.mts +2 -2
  558. package/dist/lib/esm/obsidian/setting-components/telephone-component.mjs +4 -4
  559. package/dist/lib/esm/obsidian/setting-components/text-based-component.d.mts +2 -2
  560. package/dist/lib/esm/obsidian/setting-components/text-based-component.mjs +6 -6
  561. package/dist/lib/esm/obsidian/setting-components/time-component.d.mts +2 -2
  562. package/dist/lib/esm/obsidian/setting-components/time-component.mjs +4 -4
  563. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.d.mts +2 -2
  564. package/dist/lib/esm/obsidian/setting-components/tri-state-checkbox-component.mjs +5 -5
  565. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.d.mts +2 -2
  566. package/dist/lib/esm/obsidian/setting-components/typed-dropdown-component.mjs +6 -6
  567. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.d.mts +2 -2
  568. package/dist/lib/esm/obsidian/setting-components/typed-multiple-dropdown-component.mjs +8 -8
  569. package/dist/lib/esm/obsidian/setting-components/typed-text-component.d.mts +4 -4
  570. package/dist/lib/esm/obsidian/setting-components/typed-text-component.mjs +6 -5
  571. package/dist/lib/esm/obsidian/setting-components/url-component.d.mts +2 -2
  572. package/dist/lib/esm/obsidian/setting-components/url-component.mjs +4 -4
  573. package/dist/lib/esm/obsidian/setting-components/validator-component.d.mts +2 -2
  574. package/dist/lib/esm/obsidian/setting-components/validator-component.mjs +35 -35
  575. package/dist/lib/esm/obsidian/setting-components/week-component.d.mts +2 -2
  576. package/dist/lib/esm/obsidian/setting-components/week-component.mjs +4 -4
  577. package/dist/lib/esm/obsidian/setting-ex.d.mts +42 -42
  578. package/dist/lib/esm/obsidian/setting-ex.mjs +66 -66
  579. package/dist/lib/esm/obsidian/setting-group-ex.d.mts +2 -2
  580. package/dist/lib/esm/obsidian/setting-group-ex.mjs +4 -4
  581. package/dist/lib/esm/obsidian/vault-delete.d.mts +16 -2
  582. package/dist/lib/esm/obsidian/vault-delete.mjs +12 -6
  583. package/dist/lib/esm/obsidian/vault-transaction.mjs +8 -4
  584. package/dist/lib/esm/obsidian/vault.d.mts +32 -11
  585. package/dist/lib/esm/obsidian/vault.mjs +67 -47
  586. package/dist/lib/esm/obsidian/view-registrar.mjs +1 -1
  587. package/dist/lib/esm/obsidian/workspace.mjs +2 -2
  588. package/dist/lib/esm/path.d.mts +1 -1
  589. package/dist/lib/esm/path.mjs +7 -7
  590. package/dist/lib/esm/reg-exp.d.mts +4 -4
  591. package/dist/lib/esm/reg-exp.mjs +28 -21
  592. package/dist/lib/esm/script-utils/build.d.mts +1 -1
  593. package/dist/lib/esm/script-utils/build.mjs +15 -12
  594. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +14 -14
  595. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +26 -20
  596. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/dependency.mjs +10 -10
  597. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-esm-plugin.mjs +3 -3
  598. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/fix-source-maps-plugin.mjs +6 -6
  599. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.d.mts +6 -2
  600. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/obsidian-plugin-builder.mjs +1 -1
  601. package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +20 -20
  602. package/dist/lib/esm/script-utils/check-project-types.d.mts +12 -4
  603. package/dist/lib/esm/script-utils/check-project-types.mjs +3 -3
  604. package/dist/lib/esm/script-utils/cli-utils.d.mts +6 -6
  605. package/dist/lib/esm/script-utils/cli-utils.mjs +29 -33
  606. package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +12 -9
  607. package/dist/lib/esm/script-utils/env-toggle.mjs +3 -3
  608. package/dist/lib/esm/script-utils/exec.d.mts +4 -4
  609. package/dist/lib/esm/script-utils/exec.mjs +32 -32
  610. package/dist/lib/esm/script-utils/formatters/dprint.mjs +2 -2
  611. package/dist/lib/esm/script-utils/fs.mjs +3 -3
  612. package/dist/lib/esm/script-utils/json.d.mts +2 -2
  613. package/dist/lib/esm/script-utils/json.mjs +5 -5
  614. package/dist/lib/esm/script-utils/linters/cspell.mjs +2 -2
  615. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +392 -2
  616. package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.d.mts +3 -1
  617. package/dist/lib/esm/script-utils/linters/eslint-rules/no-async-callback-to-unsafe-return.mjs +17 -17
  618. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.d.mts +3 -1
  619. package/dist/lib/esm/script-utils/linters/eslint-rules/no-unused-params-members.mjs +17 -17
  620. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.d.mts +3 -1
  621. package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +11 -11
  622. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.d.mts +3 -1
  623. package/dist/lib/esm/script-utils/linters/eslint-rules/params-options-name-match.mjs +99 -99
  624. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.d.mts +3 -1
  625. package/dist/lib/esm/script-utils/linters/eslint-rules/prefer-noop-async.mjs +3 -3
  626. package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.d.mts +3 -1
  627. package/dist/lib/esm/script-utils/linters/eslint-rules/readonly-params-options-result-members.mjs +11 -11
  628. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.d.mts +9 -3
  629. package/dist/lib/esm/script-utils/linters/eslint-rules/require-component-suffix.mjs +41 -41
  630. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.d.mts +6 -2
  631. package/dist/lib/esm/script-utils/linters/eslint-rules/require-method-template.mjs +15 -13
  632. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.d.mts +3 -1
  633. package/dist/lib/esm/script-utils/linters/eslint-rules/require-super-call.mjs +23 -23
  634. package/dist/lib/esm/script-utils/linters/eslint.mjs +4 -4
  635. package/dist/lib/esm/script-utils/linters/index.d.mts +1 -0
  636. package/dist/lib/esm/script-utils/linters/index.mjs +3 -1
  637. package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.d.mts +2 -2
  638. package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +8 -3
  639. package/dist/lib/esm/script-utils/linters/markdownlint-ignores.d.mts +35 -0
  640. package/dist/lib/esm/script-utils/linters/markdownlint-ignores.mjs +33 -0
  641. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +13 -9
  642. package/dist/lib/esm/script-utils/linters/over-exposure.d.mts +54 -18
  643. package/dist/lib/esm/script-utils/linters/over-exposure.mjs +8 -8
  644. package/dist/lib/esm/script-utils/npm-run.d.mts +16 -2
  645. package/dist/lib/esm/script-utils/npm-run.mjs +9 -3
  646. package/dist/lib/esm/script-utils/npm.d.mts +11 -11
  647. package/dist/lib/esm/script-utils/npm.mjs +11 -11
  648. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +165 -55
  649. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +1 -1
  650. package/dist/lib/esm/script-utils/test-runners/index.d.mts +1 -0
  651. package/dist/lib/esm/script-utils/test-runners/index.mjs +4 -2
  652. package/dist/lib/esm/script-utils/test-runners/vitest-config.d.mts +118 -0
  653. package/dist/lib/esm/script-utils/test-runners/vitest-config.mjs +210 -0
  654. package/dist/lib/esm/script-utils/validate-declarations.mjs +1 -1
  655. package/dist/lib/esm/script-utils/version.d.mts +21 -21
  656. package/dist/lib/esm/script-utils/version.mjs +48 -45
  657. package/dist/lib/esm/setup.d.mts +1 -1
  658. package/dist/lib/esm/setup.mjs +1 -1
  659. package/dist/lib/esm/strict-proxy.d.mts +2 -2
  660. package/dist/lib/esm/strict-proxy.mjs +20 -20
  661. package/dist/lib/esm/string.d.mts +60 -60
  662. package/dist/lib/esm/string.mjs +80 -79
  663. package/dist/lib/esm/transformers/map-transformer.mjs +2 -2
  664. package/dist/lib/esm/transformers/set-transformer.mjs +2 -2
  665. package/dist/lib/esm/transformers/two-way-map-transformer.mjs +2 -2
  666. package/dist/lib/esm/type-guards.d.mts +6 -6
  667. package/dist/lib/esm/type-guards.mjs +6 -6
  668. package/dist/lib/esm/type.d.mts +2 -2
  669. package/dist/lib/esm/type.mjs +3 -3
  670. package/dist/lib/esm/url.d.mts +4 -4
  671. package/dist/lib/esm/url.mjs +8 -8
  672. package/dist/lib/esm/value-provider.d.mts +6 -6
  673. package/dist/lib/esm/value-provider.mjs +5 -5
  674. package/dist/templates/scripts/vitest-config.ts +2 -88
  675. package/obsidian/components/notebook-navigator-menu-event-registrar-component/package.json +6 -0
  676. package/obsidian/notebook-navigator/package.json +6 -0
  677. package/package.json +17 -33
  678. package/script-utils/linters/markdownlint-ignores/package.json +6 -0
  679. package/script-utils/test-runners/vitest-config/package.json +6 -0
@@ -40,16 +40,11 @@ if you want to view the source, please visit the github repository of this plugi
40
40
  globalThisRecord[key] ??= newFuncs[key]?.();
41
41
  }
42
42
 
43
- function name(obj) {
44
- return obj;
45
- }
46
-
47
43
  function extractDefault(module) {
48
44
  return module && module.__esModule && 'default' in module ? module.default : module;
49
45
  }
50
46
 
51
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
- 'obsidian',
47
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
53
48
  '@codemirror/autocomplete',
54
49
  '@codemirror/collab',
55
50
  '@codemirror/commands',
@@ -60,11 +55,12 @@ if you want to view the source, please visit the github repository of this plugi
60
55
  '@codemirror/text',
61
56
  '@codemirror/view',
62
57
  '@lezer/common',
58
+ '@lezer/highlight',
63
59
  '@lezer/lr',
64
- '@lezer/highlight'];
65
-
60
+ 'obsidian']
61
+ );
66
62
 
67
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
63
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
68
64
  '@codemirror/closebrackets',
69
65
  '@codemirror/comment',
70
66
  '@codemirror/fold',
@@ -76,11 +72,11 @@ if you want to view the source, please visit the github repository of this plugi
76
72
  '@codemirror/rangeset',
77
73
  '@codemirror/rectangular-selection',
78
74
  '@codemirror/stream-parser',
79
- '@codemirror/tooltip'];
80
-
75
+ '@codemirror/tooltip']
76
+ );
81
77
 
82
78
  function requirePatched(id) {
83
- if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
79
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
84
80
  return originalRequire?.(id);
85
81
  }
86
82
 
@@ -89,8 +85,8 @@ if you want to view the source, please visit the github repository of this plugi
89
85
  if (id === 'process' || id === 'node:process') {
90
86
  // eslint-disable-next-line no-console -- Valid usage.
91
87
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
93
- return globalThis.process;
88
+
89
+ return process;
94
90
  }
95
91
  } else {
96
92
  const module = originalRequire?.(id);
@@ -173,8 +169,8 @@ function exec(command, options = {}) {
173
169
  if (batchResult) {
174
170
  return batchResult;
175
171
  }
176
- const args = command.filter((part) => typeof part === "string");
177
- const commandLine = buildCommandLine(args);
172
+ const $arguments = command.filter((part) => typeof part === "string");
173
+ const commandLine = buildCommandLine($arguments);
178
174
  const maxCommandLength2 = getMaxCommandLength();
179
175
  if (commandLine.length > maxCommandLength2) {
180
176
  return Promise.reject(
@@ -186,7 +182,7 @@ function exec(command, options = {}) {
186
182
  return execString({
187
183
  command: commandLine,
188
184
  options,
189
- rawArgs: args
185
+ rawArguments: $arguments
190
186
  });
191
187
  }
192
188
  const maxCommandLength = getMaxCommandLength();
@@ -206,7 +202,7 @@ function execString(params) {
206
202
  const {
207
203
  command,
208
204
  options = {},
209
- rawArgs
205
+ rawArguments
210
206
  } = params;
211
207
  const {
212
208
  cwd = import_node_process.default.cwd(),
@@ -224,7 +220,7 @@ function execString(params) {
224
220
  cwd,
225
221
  env,
226
222
  isInteractive,
227
- rawArgs
223
+ rawArguments
228
224
  }));
229
225
  let stdout = "";
230
226
  let stderr = "";
@@ -247,7 +243,7 @@ function execString(params) {
247
243
  });
248
244
  childStdout.on("end", () => {
249
245
  stdout = (0, import_string.trimEnd)({
250
- str: stdout,
246
+ $string: stdout,
251
247
  suffix: "\n"
252
248
  });
253
249
  });
@@ -259,7 +255,7 @@ function execString(params) {
259
255
  });
260
256
  childStderr.on("end", () => {
261
257
  stderr = (0, import_string.trimEnd)({
262
- str: stderr,
258
+ $string: stderr,
263
259
  suffix: "\n"
264
260
  });
265
261
  });
@@ -281,9 +277,9 @@ ${stderr}`));
281
277
  stdout
282
278
  });
283
279
  });
284
- child.on("error", (err) => {
280
+ child.on("error", (error) => {
285
281
  if (!ignoreExitCode) {
286
- reject(err);
282
+ reject(error);
287
283
  return;
288
284
  }
289
285
  if (!shouldIncludeDetails) {
@@ -301,8 +297,8 @@ ${stderr}`));
301
297
  }
302
298
  const LOCAL_STORAGE_NODE_OPTION = "--localstorage-file=:memory:";
303
299
  const CHILD_ENV = buildChildEnv(import_node_process.default.env, import_node_process.default.allowedNodeEnvironmentFlags);
304
- function buildCommandLine(args) {
305
- return import_node_process.default.platform === "win32" ? (0, import_cli_utils.toCommandLine)(args) : (0, import_cli_utils.toPosixCommandLine)(args);
300
+ function buildCommandLine($arguments) {
301
+ return import_node_process.default.platform === "win32" ? (0, import_cli_utils.toCommandLine)($arguments) : (0, import_cli_utils.toPosixCommandLine)($arguments);
306
302
  }
307
303
  async function executeBatches(params) {
308
304
  const { baseCommand, batches, options } = params;
@@ -328,19 +324,19 @@ function getMaxCommandLength() {
328
324
  return import_node_process.default.platform === "win32" ? WINDOWS_MAX_COMMAND_LENGTH : UNIX_MAX_COMMAND_LENGTH;
329
325
  }
330
326
  function handleBatchedCommand(parts, options) {
331
- const execArgs = parts.filter(isExecArg);
332
- if (execArgs.length === 0) {
327
+ const execArguments = parts.filter(isExecArgument);
328
+ if (execArguments.length === 0) {
333
329
  return void 0;
334
330
  }
335
- if (execArgs.length > 1) {
336
- return Promise.reject(new Error("Only one ExecArg with batchedArgs is allowed per command"));
331
+ if (execArguments.length > 1) {
332
+ return Promise.reject(new Error("Only one ExecArg with batchedArguments is allowed per command"));
337
333
  }
338
- const execArg = execArgs[0];
339
- (0, import_type_guards.assertNonNullable)(execArg);
334
+ const execArgument = execArguments[0];
335
+ (0, import_type_guards.assertNonNullable)(execArgument);
340
336
  const staticParts = parts.filter((part) => typeof part === "string");
341
337
  const baseCommand = buildCommandLine(staticParts);
342
338
  const maxCommandLength = getMaxCommandLength();
343
- const fullCommand = `${baseCommand} ${buildCommandLine([...execArg.batchedArgs])}`;
339
+ const fullCommand = `${baseCommand} ${buildCommandLine([...execArgument.batchedArguments])}`;
344
340
  if (fullCommand.length <= maxCommandLength) {
345
341
  return execString({
346
342
  command: fullCommand,
@@ -349,20 +345,20 @@ function handleBatchedCommand(parts, options) {
349
345
  }
350
346
  const batches = [];
351
347
  let currentBatch = [];
352
- for (const arg of execArg.batchedArgs) {
353
- const tentative = `${baseCommand} ${buildCommandLine([...currentBatch, arg])}`;
348
+ for (const argument of execArgument.batchedArguments) {
349
+ const tentative = `${baseCommand} ${buildCommandLine([...currentBatch, argument])}`;
354
350
  if (tentative.length > maxCommandLength) {
355
351
  if (currentBatch.length === 0) {
356
352
  return Promise.reject(
357
353
  new Error(
358
- `Cannot split command into batches: a single argument (${String(arg.length)} chars) plus the base command (${String(baseCommand.length)} chars) exceeds the max command length (${String(maxCommandLength)}).`
354
+ `Cannot split command into batches: a single argument (${String(argument.length)} chars) plus the base command (${String(baseCommand.length)} chars) exceeds the max command length (${String(maxCommandLength)}).`
359
355
  )
360
356
  );
361
357
  }
362
358
  batches.push(currentBatch);
363
- currentBatch = [arg];
359
+ currentBatch = [argument];
364
360
  } else {
365
- currentBatch.push(arg);
361
+ currentBatch.push(argument);
366
362
  }
367
363
  }
368
364
  if (currentBatch.length > 0) {
@@ -374,23 +370,23 @@ function handleBatchedCommand(parts, options) {
374
370
  options
375
371
  });
376
372
  }
377
- function isExecArg(part) {
378
- return typeof part === "object" && "batchedArgs" in part;
373
+ function isExecArgument(part) {
374
+ return typeof part === "object" && "batchedArguments" in part;
379
375
  }
380
376
  function spawnViaShell(params) {
381
- const { command, cwd, env: extraEnv, isInteractive = false, rawArgs } = params;
377
+ const { command, cwd, env: extraEnv, isInteractive = false, rawArguments } = params;
382
378
  const env = {
383
379
  ...CHILD_ENV,
384
380
  ...extraEnv
385
381
  };
386
382
  const stdio = isInteractive ? "inherit" : "pipe";
387
383
  if (import_node_process.default.platform === "win32" && command.includes("\n")) {
388
- if (!rawArgs) {
384
+ if (!rawArguments) {
389
385
  throw new Error("Commands containing newlines cannot be executed through cmd.exe on Windows. Pass an argument array instead of a string.");
390
386
  }
391
- const [program, ...args] = rawArgs;
387
+ const [program, ...$arguments] = rawArguments;
392
388
  (0, import_type_guards.assertNonNullable)(program, "Command array must not be empty");
393
- return (0, import_node_child_process.spawn)(program, args, {
389
+ return (0, import_node_child_process.spawn)(program, $arguments, {
394
390
  cwd,
395
391
  env,
396
392
  stdio
@@ -410,4 +406,4 @@ function spawnViaShell(params) {
410
406
  buildChildEnv,
411
407
  exec
412
408
  });
413
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9leGVjLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZyBjb21tYW5kcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IHRyaW1FbmQgfSBmcm9tICcuLi9zdHJpbmcudHMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICcuLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQge1xuICBjbWRFc2NhcGVDb21tYW5kTGluZSxcbiAgdG9Db21tYW5kTGluZSxcbiAgdG9Qb3NpeENvbW1hbmRMaW5lXG59IGZyb20gJy4vY2xpLXV0aWxzLnRzJztcblxuLyoqXG4gKiBBIGNvbW1hbmQgcGFydDogZWl0aGVyIGEgcGxhaW4gc3RyaW5nIG9yIGFuIHtAbGluayBFeGVjQXJnfSB3aXRoIGJhdGNoZWQgYXJndW1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBDb21tYW5kUGFydCA9IEV4ZWNBcmcgfCBzdHJpbmc7XG5cbi8qKlxuICogQSBjb21tYW5kIGFyZ3VtZW50IHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGFyZ3MgdG8gYmUgYmF0Y2hlZC5cbiAqIElmIHRoZSBleHBhbmRlZCBjb21tYW5kIGV4Y2VlZHMgdGhlIHBsYXRmb3JtJ3MgbWF4IGNvbW1hbmQgbGVuZ3RoLFxuICogdGhlIGJhdGNoZWQgYXJncyBhcmUgc3BsaXQgaW50byBzZXF1ZW50aWFsIGV4ZWN1dGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY0FyZyB7XG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHRvIGJhdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgYmF0Y2hlZEFyZ3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBleGVjfSB0aGF0IHJldHVybiBkZXRhaWxlZCByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNEZXRhaWxlZE9wdGlvbnMgZXh0ZW5kcyBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIGB0cnVlYCB0byByZWNlaXZlIGRldGFpbGVkIHJlc3VsdHMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlsczogdHJ1ZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBleGVjdXRpbmcgYSBjb21tYW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY3VycmVudCB3b3JraW5nIGZvbGRlciBmb3IgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGNoaWxkIHByb2Nlc3MsIG1lcmdlZCBvdmVyIHRoZSBpbmhlcml0ZWQgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB7fWBcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IE5vZGVKUy5Qcm9jZXNzRW52O1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGF0dGFjaGVzIHRoZSBjaGlsZCBwcm9jZXNzJ3Mgc3RkaW8gZGlyZWN0bHkgdG8gdGhlIHRlcm1pbmFsIChgc3RkaW86ICdpbmhlcml0J2ApIGluc3RlYWRcbiAgICogb2YgY2FwdHVyaW5nIGl0LiBVc2UgZm9yIGxvbmctcnVubmluZyBvciBpbnRlcmFjdGl2ZSBjb21tYW5kcyBzdWNoIGFzIGRldiBzZXJ2ZXJzIGFuZCB3YXRjaCBtb2RlLlxuICAgKiBCZWNhdXNlIHRoZSBvdXRwdXQgaXMgbm90IGNhcHR1cmVkLCB0aGUgcmVzb2x2ZWQgc3Rkb3V0IGlzIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbnRlcmFjdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgc3VwcHJlc3NlcyB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc1F1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNvbW1hbmQgZmFpbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRmFpbElmQ2FsbGVkRnJvbU91dHNpZGVSb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBpZ25vcmVzIHRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZElnbm9yZUV4aXRDb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYGZhbHNlYCwgb25seSByZXR1cm5zIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVEZXRhaWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gaW5wdXQgdG8gYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBzdGRpbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJlc3VsdCBvZiB7QGxpbmsgZXhlY30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBBbiBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuIEEgdmFsdWUgb2YgYG51bGxgIGluZGljYXRlcyB0aGF0IHRoZSBwcm9jZXNzIGRpZCBub3QgZXhpdCBub3JtYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudWxsIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgcHJvY2VzcyB0byBiZSB0ZXJtaW5hdGVkLiBBIHZhbHVlIG9mIGBudWxsYCBpbmRpY2F0ZXMgdGhhdCBubyBzaWduYWwgd2FzIHJlY2VpdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpdFNpZ25hbDogTm9kZUpTLlNpZ25hbHMgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIHN0YW5kYXJkIGVycm9yIG91dHB1dCBmcm9tIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RkZXJyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RhbmRhcmQgb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBzdGRvdXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZXhlY30gdGhhdCByZXR1cm4gb25seSBzdGRvdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY1NpbXBsZU9wdGlvbnMgZXh0ZW5kcyBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIGBmYWxzZWAgb3Igb21pdHRlZCB0byByZWNlaXZlIG9ubHkgc3Rkb3V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlscz86IGZhbHNlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleGVjU3RyaW5nfS5cbiAqL1xuaW50ZXJmYWNlIEV4ZWNTdHJpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlYyBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9ucz86IEV4ZWNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYXJndW1lbnQgYXJyYXkgKGlmIGF2YWlsYWJsZSksIHVzZWQgYnkgdGhlIFBvd2VyU2hlbGxcbiAgICogZmFsbGJhY2sgcGF0aCB0byBxdW90ZSBhcmd1bWVudHMgd2l0aCBQb3dlclNoZWxsLW5hdGl2ZSBzaW5nbGUgcXVvdGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3QXJncz86IHN0cmluZ1tdO1xufVxuLyoqXG4gKiBBcHBlbmRzIGEgc2luZ2xlIGBub2RlYCBDTEkgb3B0aW9uIHRvIGEgYE5PREVfT1BUSU9OU2Agc3RyaW5nLCBwcmVzZXJ2aW5nIGFueSBvcHRpb25zIGFscmVhZHkgcHJlc2VudC5cbiAqXG4gKiBAcGFyYW0gZXhpc3RpbmdOb2RlT3B0aW9ucyAtIFRoZSBjdXJyZW50IGBOT0RFX09QVElPTlNgIHZhbHVlIChlLmcuIGBwcm9jZXNzLmVudi5OT0RFX09QVElPTlNgKSwgaWYgYW55LlxuICogQHBhcmFtIG9wdGlvbiAtIFRoZSBgbm9kZWAgQ0xJIG9wdGlvbiB0byBhcHBlbmQgKGUuZy4gYC0tbG9jYWxzdG9yYWdlLWZpbGU9Om1lbW9yeTpgKS5cbiAqIEByZXR1cm5zIFRoZSBjb21iaW5lZCBgTk9ERV9PUFRJT05TYCBzdHJpbmcuIElmIGBvcHRpb25gIGlzIGFscmVhZHkgcHJlc2VudCwgdGhlIHZhbHVlIGlzIHJldHVybmVkIHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZE5vZGVPcHRpb24oZXhpc3RpbmdOb2RlT3B0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkLCBvcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRyaW1tZWQgPSAoZXhpc3RpbmdOb2RlT3B0aW9ucyA/PyAnJykudHJpbSgpO1xuICBpZiAodHJpbW1lZCA9PT0gJycpIHtcbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG4gIGlmICh0cmltbWVkLnNwbGl0KC9cXHMrLykuaW5jbHVkZXMob3B0aW9uKSkge1xuICAgIHJldHVybiB0cmltbWVkO1xuICB9XG4gIHJldHVybiBgJHt0cmltbWVkfSAke29wdGlvbn1gO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgZW52aXJvbm1lbnQgZm9yIGNoaWxkIHByb2Nlc3NlczogdGhlIHBhcmVudCBlbnZpcm9ubWVudCBwbHVzIGBERUJVR19DT0xPUlNgLCBhbmQgXHUyMDE0IHdoZW5cbiAqIHRoZSBydW5uaW5nIGBub2RlYCBzdXBwb3J0cyBpdCBcdTIwMTQge0BsaW5rIExPQ0FMX1NUT1JBR0VfTk9ERV9PUFRJT059IGFwcGVuZGVkIHRvIGBOT0RFX09QVElPTlNgLlxuICpcbiAqIFRoZSBzdXBwb3J0IGNoZWNrIGd1YXJkcyBhZ2FpbnN0IG9sZGVyIGBub2RlYCAoPCAyMik6IHBhc3NpbmcgYW4gb3B0aW9uIGBub2RlYCBkb2VzIG5vdCByZWNvZ25pemUgdmlhXG4gKiBgTk9ERV9PUFRJT05TYCBtYWtlcyBpdCBleGl0IGJlZm9yZSBydW5uaW5nLCB3aGljaCB3b3VsZCBicmVhayBldmVyeSBzcGF3bmVkIHRvb2wuXG4gKlxuICogQHBhcmFtIGJhc2VFbnYgLSBUaGUgcGFyZW50IGVudmlyb25tZW50IHRvIGV4dGVuZCAodHlwaWNhbGx5IGBwcm9jZXNzLmVudmApLlxuICogQHBhcmFtIGFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFncyAtIFRoZSBgbm9kZWAgb3B0aW9ucyBhY2NlcHRlZCB2aWEgYE5PREVfT1BUSU9OU2AgKHR5cGljYWxseSBgcHJvY2Vzcy5hbGxvd2VkTm9kZUVudmlyb25tZW50RmxhZ3NgKS5cbiAqIEByZXR1cm5zIFRoZSBlbnZpcm9ubWVudCB0byBwYXNzIHRvIHNwYXduZWQgY2hpbGQgcHJvY2Vzc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRDaGlsZEVudihiYXNlRW52OiBOb2RlSlMuUHJvY2Vzc0VudiwgYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzOiBSZWFkb25seVNldDxzdHJpbmc+KTogTm9kZUpTLlByb2Nlc3NFbnYge1xuICBjb25zdCBlbnY6IE5vZGVKUy5Qcm9jZXNzRW52ID0ge1xuICAgIERFQlVHX0NPTE9SUzogJzEnLFxuICAgIC4uLmJhc2VFbnZcbiAgfTtcbiAgaWYgKGFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFncy5oYXMoJy0tbG9jYWxzdG9yYWdlLWZpbGUnKSkge1xuICAgIGVudlsnTk9ERV9PUFRJT05TJ10gPSBhcHBlbmROb2RlT3B0aW9uKGJhc2VFbnZbJ05PREVfT1BUSU9OUyddLCBMT0NBTF9TVE9SQUdFX05PREVfT1BUSU9OKTtcbiAgfVxuICByZXR1cm4gZW52O1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kLlxuICogQHRocm93cyBJZiB0aGUgY29tbWFuZCBmYWlscyB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgZmFsc2VgLlxuICogICAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSBpbmNsdWRlcyB0aGUgZXhpdCBjb2RlIGFuZCBzdGRlcnIuXG4gKiAgICAgICAgIElmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBhbmQgaWdub3JlRXhpdENvZGUgaXMgYHRydWVgLFxuICogICAgICAgICB0aGUgZXJyb3IgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjKGNvbW1hbmQ6IENvbW1hbmRQYXJ0W10gfCBzdHJpbmcsIG9wdGlvbnM/OiBFeGVjU2ltcGxlT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9uczogRXhlY0RldGFpbGVkT3B0aW9ucyk6IFByb21pc2U8RXhlY1Jlc3VsdD47XG4vKipcbiAqIEV4ZWN1dGVzIGEgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kIG9yIGFuIEV4ZWNSZXN1bHQgb2JqZWN0LlxuICogICAgICAgICAgVGhlIEV4ZWNSZXN1bHQgb2JqZWN0IGNvbnRhaW5zIHRoZSBleGl0IGNvZGUsIGV4aXQgc2lnbmFsLCBzdGRlcnIsIGFuZCBzdGRvdXQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWMoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9uczogRXhlY09wdGlvbnMgPSB7fSk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShjb21tYW5kKSkge1xuICAgIGNvbnN0IGJhdGNoUmVzdWx0ID0gaGFuZGxlQmF0Y2hlZENvbW1hbmQoY29tbWFuZCwgb3B0aW9ucyk7XG4gICAgaWYgKGJhdGNoUmVzdWx0KSB7XG4gICAgICByZXR1cm4gYmF0Y2hSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IGFyZ3MgPSBjb21tYW5kLmZpbHRlcigocGFydCk6IHBhcnQgaXMgc3RyaW5nID0+IHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJyk7XG4gICAgY29uc3QgY29tbWFuZExpbmUgPSBidWlsZENvbW1hbmRMaW5lKGFyZ3MpO1xuXG4gICAgY29uc3QgbWF4Q29tbWFuZExlbmd0aCA9IGdldE1heENvbW1hbmRMZW5ndGgoKTtcbiAgICBpZiAoY29tbWFuZExpbmUubGVuZ3RoID4gbWF4Q29tbWFuZExlbmd0aCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYENvbW1hbmQgbGluZSBpcyB0b28gbG9uZyAoJHtTdHJpbmcoY29tbWFuZExpbmUubGVuZ3RoKX0gY2hhcnMsIG1heCAke1N0cmluZyhtYXhDb21tYW5kTGVuZ3RoKX0gb24gJHtwcm9jZXNzLnBsYXRmb3JtfSkuIENvbnNpZGVyIHNwbGl0dGluZyBpbnRvIHNtYWxsZXIgYmF0Y2hlcyBvciB1c2UgRXhlY0FyZy5gXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4ZWNTdHJpbmcoe1xuICAgICAgY29tbWFuZDogY29tbWFuZExpbmUsXG4gICAgICBvcHRpb25zLFxuICAgICAgcmF3QXJnczogYXJnc1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbWF4Q29tbWFuZExlbmd0aCA9IGdldE1heENvbW1hbmRMZW5ndGgoKTtcbiAgaWYgKGNvbW1hbmQubGVuZ3RoID4gbWF4Q29tbWFuZExlbmd0aCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgYENvbW1hbmQgbGluZSBpcyB0b28gbG9uZyAoJHtTdHJpbmcoY29tbWFuZC5sZW5ndGgpfSBjaGFycywgbWF4ICR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSBvbiAke3Byb2Nlc3MucGxhdGZvcm19KS4gQ29uc2lkZXIgc3BsaXR0aW5nIGludG8gc21hbGxlciBiYXRjaGVzIG9yIHVzZSBFeGVjQXJnLmBcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGV4ZWNTdHJpbmcoe1xuICAgIGNvbW1hbmQsXG4gICAgb3B0aW9uc1xuICB9KTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIHNpbmdsZSBzdHJpbmcgY29tbWFuZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBleGVjdXRpb24uXG4gKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIGV4ZWNTdHJpbmcocGFyYW1zOiBFeGVjU3RyaW5nUGFyYW1zKTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBjb21tYW5kLFxuICAgIG9wdGlvbnMgPSB7fSxcbiAgICByYXdBcmdzXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHtcbiAgICBjd2QgPSBwcm9jZXNzLmN3ZCgpLFxuICAgIGVudixcbiAgICBpc0ludGVyYWN0aXZlID0gZmFsc2UsXG4gICAgaXNRdWlldDogcXVpZXQgPSBmYWxzZSxcbiAgICBzaG91bGRJZ25vcmVFeGl0Q29kZTogaWdub3JlRXhpdENvZGUgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlRGV0YWlscyA9IGZhbHNlLFxuICAgIHN0ZGluID0gJydcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBnZXRMaWJEZWJ1Z2dlcignRXhlYycpKGBFeGVjdXRpbmcgY29tbWFuZDogJHtjb21tYW5kfWApO1xuXG4gICAgY29uc3QgY2hpbGQgPSBzcGF3blZpYVNoZWxsKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTcGF3blZpYVNoZWxsUGFyYW1zPih7XG4gICAgICBjb21tYW5kLFxuICAgICAgY3dkLFxuICAgICAgZW52LFxuICAgICAgaXNJbnRlcmFjdGl2ZSxcbiAgICAgIHJhd0FyZ3NcbiAgICB9KSk7XG5cbiAgICBsZXQgc3Rkb3V0ID0gJyc7XG4gICAgbGV0IHN0ZGVyciA9ICcnO1xuXG4gICAgLy8gSW4gaW50ZXJhY3RpdmUgbW9kZSB0aGUgY2hpbGQncyBzdGRpbyBpcyBpbmhlcml0ZWQgYnkgdGhlIHRlcm1pbmFsLCBzbyB0aGVyZSBhcmUgbm8gc3RyZWFtcyB0byByZWFkIGFuZCBub3RoaW5nIGlzIGNhcHR1cmVkLlxuICAgIGlmICghaXNJbnRlcmFjdGl2ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzdGRlcnI6IGNoaWxkU3RkZXJyLFxuICAgICAgICBzdGRpbjogY2hpbGRTdGRpbixcbiAgICAgICAgc3Rkb3V0OiBjaGlsZFN0ZG91dFxuICAgICAgfSA9IGNoaWxkO1xuICAgICAgYXNzZXJ0Tm9uTnVsbGFibGUoY2hpbGRTdGRpbiwgJ0NoaWxkIHByb2Nlc3Mgc3RkaW4gaXMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgYXNzZXJ0Tm9uTnVsbGFibGUoY2hpbGRTdGRvdXQsICdDaGlsZCBwcm9jZXNzIHN0ZG91dCBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgICBhc3NlcnROb25OdWxsYWJsZShjaGlsZFN0ZGVyciwgJ0NoaWxkIHByb2Nlc3Mgc3RkZXJyIGlzIG5vdCBhdmFpbGFibGUnKTtcblxuICAgICAgY2hpbGRTdGRpbi53cml0ZShzdGRpbik7XG4gICAgICBjaGlsZFN0ZGluLmVuZCgpO1xuXG4gICAgICBjaGlsZFN0ZG91dC5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgaWYgKCFxdWlldCkge1xuICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHN0ZG91dCArPSBkYXRhLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGNoaWxkU3Rkb3V0Lm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIHN0ZG91dCA9IHRyaW1FbmQoe1xuICAgICAgICAgIHN0cjogc3Rkb3V0LFxuICAgICAgICAgIHN1ZmZpeDogJ1xcbidcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGRTdGRlcnIub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGlmICghcXVpZXQpIHtcbiAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBzdGRlcnIgKz0gZGF0YS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZFN0ZGVyci5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBzdGRlcnIgPSB0cmltRW5kKHtcbiAgICAgICAgICBzdHI6IHN0ZGVycixcbiAgICAgICAgICBzdWZmaXg6ICdcXG4nXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hpbGQub24oJ2Nsb3NlJywgKGV4aXRDb2RlLCBleGl0U2lnbmFsKSA9PiB7XG4gICAgICBpZiAoZXhpdENvZGUgIT09IDAgJiYgIWlnbm9yZUV4aXRDb2RlKSB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYENvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlICR7ZXhpdENvZGUgPyBTdHJpbmcoZXhpdENvZGUpIDogJyhudWxsKSd9XFxuJHtzdGRlcnJ9YCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghc2hvdWxkSW5jbHVkZURldGFpbHMpIHtcbiAgICAgICAgcmVzb2x2ZShzdGRvdXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgZXhpdENvZGUsXG4gICAgICAgIGV4aXRTaWduYWwsXG4gICAgICAgIHN0ZGVycixcbiAgICAgICAgc3Rkb3V0XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNoaWxkLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGlmICghaWdub3JlRXhpdENvZGUpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzaG91bGRJbmNsdWRlRGV0YWlscykge1xuICAgICAgICByZXNvbHZlKHN0ZG91dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGV4aXRDb2RlOiBudWxsLFxuICAgICAgICBleGl0U2lnbmFsOiBudWxsLFxuICAgICAgICBzdGRlcnIsXG4gICAgICAgIHN0ZG91dFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEEgYG5vZGVgIENMSSBvcHRpb24gKHBhc3NlZCB2aWEgYE5PREVfT1BUSU9OU2ApIHRoYXQgcHJvdmlkZXMgYW4gaW4tbWVtb3J5IGBsb2NhbFN0b3JhZ2VgIHRvIGV2ZXJ5XG4gKiBzcGF3bmVkIGBub2RlYCBwcm9jZXNzLiBOb2RlIDIyKyBleHBvc2VzIGFuIGV4cGVyaW1lbnRhbCBXZWIgU3RvcmFnZSBgbG9jYWxTdG9yYWdlYCwgYnV0IGFjY2Vzc2luZyBpdFxuICogd2l0aG91dCBgLS1sb2NhbHN0b3JhZ2UtZmlsZWAgZW1pdHMgYW4gYEV4cGVyaW1lbnRhbFdhcm5pbmdgIGFuZCBsZWF2ZXMgYGxvY2FsU3RvcmFnZWAgdW5hdmFpbGFibGUuXG4gKiBQb2ludGluZyBpdCBhdCB0aGUgc3BlY2lhbCBgOm1lbW9yeTpgIGRhdGFiYXNlIGdpdmVzIGVhY2ggcHJvY2VzcyBhIHdvcmtpbmcsIG5vbi1wZXJzaXN0ZW50XG4gKiBgbG9jYWxTdG9yYWdlYCAobm8gZmlsZSBvbiBkaXNrLCBubyBzdGF0ZSBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMpIFx1MjAxNCBtYXRjaGluZyB0aGUgcmVhbCBPYnNpZGlhblxuICogKEVsZWN0cm9uKSBydW50aW1lIGFuZCBzaWxlbmNpbmcgdGhlIHdhcm5pbmcgYnkgYWRkcmVzc2luZyBpdHMgcm9vdCBjYXVzZSByYXRoZXIgdGhhbiBzdXBwcmVzc2luZyBpdC5cbiAqXG4gKiBJdCBpcyBhcHBsaWVkIG9ubHkgd2hlbiB0aGUgcnVubmluZyBgbm9kZWAgYWN0dWFsbHkgc3VwcG9ydHMgaXQgKHNlZSB7QGxpbmsgYnVpbGRDaGlsZEVudn0pOiBwYXNzaW5nXG4gKiBhbiBvcHRpb24gYG5vZGVgIGRvZXMgbm90IHJlY29nbml6ZSB2aWEgYE5PREVfT1BUSU9OU2AgbWFrZXMgaXQgcmVmdXNlIHRvIHN0YXJ0LCBzbyBhbiBvbGRlciBgbm9kZWBcbiAqICg8IDIyKSBtdXN0IGJlIGxlZnQgdW50b3VjaGVkLlxuICovXG5jb25zdCBMT0NBTF9TVE9SQUdFX05PREVfT1BUSU9OID0gJy0tbG9jYWxzdG9yYWdlLWZpbGU9Om1lbW9yeTonO1xuXG4vKipcbiAqIERlZmF1bHQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHBhc3NlZCB0byBjaGlsZCBwcm9jZXNzZXMuXG4gKi9cbmNvbnN0IENISUxEX0VOViA9IGJ1aWxkQ2hpbGRFbnYocHJvY2Vzcy5lbnYsIHByb2Nlc3MuYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzKTtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZXhlY3V0ZUJhdGNoZXN9LlxuICovXG5pbnRlcmZhY2UgRXhlY3V0ZUJhdGNoZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGJhc2UgY29tbWFuZCB3aXRob3V0IGJhdGNoZWQgYXJncy5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VDb21tYW5kOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYXRjaGVzIG9mIGFyZ3MuXG4gICAqL1xuICByZWFkb25seSBiYXRjaGVzOiBzdHJpbmdbXVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlYyBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uczogRXhlY09wdGlvbnM7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNwYXduVmlhU2hlbGx9LlxuICovXG5pbnRlcmZhY2UgU3Bhd25WaWFTaGVsbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCBzdHJpbmcgdG8gZXhlY3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3dkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIG1lcmdlZCBvdmVyIHRoZSBpbmhlcml0ZWQgY2hpbGQgZW52aXJvbm1lbnQuXG4gICAqL1xuICByZWFkb25seSBlbnY/OiBOb2RlSlMuUHJvY2Vzc0VudjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBhdHRhY2hlcyB0aGUgY2hpbGQncyBzdGRpbyB0byB0aGUgdGVybWluYWwgaW5zdGVhZCBvZiBwaXBpbmcgaXQuXG4gICAqL1xuICByZWFkb25seSBpc0ludGVyYWN0aXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIGFyZ3VtZW50IGFycmF5IChpZiBhdmFpbGFibGUpLlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3QXJncz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGNvbW1hbmQtbGluZSBzdHJpbmcgZnJvbSBhbiBhcmd1bWVudCBhcnJheSwgcXVvdGVkIGZvciB0aGUgc2hlbGwgdGhhdFxuICoge0BsaW5rIHNwYXduVmlhU2hlbGx9IHdpbGwgcm91dGUgdGhyb3VnaCBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS5cbiAqXG4gKiBPbiBXaW5kb3dzIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIHZpYSBgY21kLmV4ZWAsIHNvIGl0IHVzZXMgdGhlXG4gKiBgQ29tbWFuZExpbmVUb0FyZ3ZXYCBjb252ZW50aW9uICh7QGxpbmsgdG9Db21tYW5kTGluZX0pOyB7QGxpbmsgc3Bhd25WaWFTaGVsbH1cbiAqIHRoZW4gYXBwbGllcyB7QGxpbmsgY21kRXNjYXBlQ29tbWFuZExpbmV9IG9uIHRvcCBmb3IgYGNtZC5leGVgIG1ldGFjaGFyYWN0ZXJzLlxuICogRWxzZXdoZXJlIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkIHZpYSBgc2ggLWNgLCBzbyBpdCB1c2VzIFBPU0lYIHNpbmdsZS1xdW90ZVxuICogcXVvdGluZyAoe0BsaW5rIHRvUG9zaXhDb21tYW5kTGluZX0pIGFuZCBuZWVkcyBubyBmdXJ0aGVyIGVzY2FwaW5nLlxuICpcbiAqIFRoZSBwbGF0Zm9ybSBicmFuY2ggaGVyZSBNVVNUIHN0YXkgaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4ge0BsaW5rIHNwYXduVmlhU2hlbGx9LlxuICpcbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50IGFycmF5IHRvIHF1b3RlIGFuZCBqb2luLlxuICogQHJldHVybnMgVGhlIHF1b3RlZCBjb21tYW5kLWxpbmUgc3RyaW5nIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybSdzIHNoZWxsLlxuICovXG5mdW5jdGlvbiBidWlsZENvbW1hbmRMaW5lKGFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyB0b0NvbW1hbmRMaW5lKGFyZ3MpIDogdG9Qb3NpeENvbW1hbmRMaW5lKGFyZ3MpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGJhdGNoZWQgY29tbWFuZHMgc2VxdWVudGlhbGx5IGFuZCBjb25jYXRlbmF0ZXMgc3Rkb3V0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGJhdGNoZWQgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgY29uY2F0ZW5hdGVkIHJlc3VsdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUJhdGNoZXMocGFyYW1zOiBFeGVjdXRlQmF0Y2hlc1BhcmFtcyk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBjb25zdCB7IGJhc2VDb21tYW5kLCBiYXRjaGVzLCBvcHRpb25zIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHJlc3VsdHM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBiYXRjaCBvZiBiYXRjaGVzKSB7XG4gICAgY29uc3QgYmF0Y2hDb21tYW5kID0gYCR7YmFzZUNvbW1hbmR9ICR7YnVpbGRDb21tYW5kTGluZShiYXRjaCl9YDtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjU3RyaW5nKHtcbiAgICAgIGNvbW1hbmQ6IGJhdGNoQ29tbWFuZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLnNob3VsZEluY2x1ZGVEZXRhaWxzKSB7XG4gICAgcmV0dXJuIHsgZXhpdENvZGU6IDAsIGV4aXRTaWduYWw6IG51bGwsIHN0ZGVycjogJycsIHN0ZG91dDogcmVzdWx0cy5qb2luKCdcXG4nKSB9O1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHMuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgbWF4IGNvbW1hbmQgbGluZSBsZW5ndGguXG4gKlxuICogQHJldHVybnMgVGhlIG1heCBjb21tYW5kIGxlbmd0aCBpbiBjaGFyYWN0ZXJzLlxuICovXG5mdW5jdGlvbiBnZXRNYXhDb21tYW5kTGVuZ3RoKCk6IG51bWJlciB7XG4gIGNvbnN0IFdJTkRPV1NfTUFYX0NPTU1BTkRfTEVOR1RIID0gODE5MTtcbiAgY29uc3QgVU5JWF9NQVhfQ09NTUFORF9MRU5HVEggPSAxMzEwNzI7XG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gV0lORE9XU19NQVhfQ09NTUFORF9MRU5HVEggOiBVTklYX01BWF9DT01NQU5EX0xFTkdUSDtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGEgY29tbWFuZCBhcnJheSB0aGF0IG1heSBjb250YWluIGFuIHtAbGluayBFeGVjQXJnfS5cbiAqIFJldHVybnMgYSBQcm9taXNlIGlmIGJhdGNoaW5nIGlzIG5lZWRlZCwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGNvbW1hbmRcbiAqIGhhcyBubyBFeGVjQXJnIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LlxuICpcbiAqIEBwYXJhbSBwYXJ0cyAtIFRoZSBjb21tYW5kIHBhcnRzLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgZXhlYyBvcHRpb25zLlxuICogQHJldHVybnMgQSBQcm9taXNlIGlmIGJhdGNoaW5nIGlzIGhhbmRsZWQsIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBoYW5kbGVCYXRjaGVkQ29tbWFuZChwYXJ0czogQ29tbWFuZFBhcnRbXSwgb3B0aW9uczogRXhlY09wdGlvbnMpOiBQcm9taXNlPEV4ZWNSZXN1bHQgfCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZXhlY0FyZ3MgPSBwYXJ0cy5maWx0ZXIoaXNFeGVjQXJnKTtcbiAgaWYgKGV4ZWNBcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGV4ZWNBcmdzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdPbmx5IG9uZSBFeGVjQXJnIHdpdGggYmF0Y2hlZEFyZ3MgaXMgYWxsb3dlZCBwZXIgY29tbWFuZCcpKTtcbiAgfVxuXG4gIGNvbnN0IGV4ZWNBcmcgPSBleGVjQXJnc1swXTtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUoZXhlY0FyZyk7XG4gIGNvbnN0IHN0YXRpY1BhcnRzID0gcGFydHMuZmlsdGVyKChwYXJ0KTogcGFydCBpcyBzdHJpbmcgPT4gdHlwZW9mIHBhcnQgPT09ICdzdHJpbmcnKTtcbiAgY29uc3QgYmFzZUNvbW1hbmQgPSBidWlsZENvbW1hbmRMaW5lKHN0YXRpY1BhcnRzKTtcbiAgY29uc3QgbWF4Q29tbWFuZExlbmd0aCA9IGdldE1heENvbW1hbmRMZW5ndGgoKTtcblxuICAvLyBUcnkgZXhwYW5kaW5nIGFsbCBhcmdzIGlubGluZVxuICBjb25zdCBmdWxsQ29tbWFuZCA9IGAke2Jhc2VDb21tYW5kfSAke2J1aWxkQ29tbWFuZExpbmUoWy4uLmV4ZWNBcmcuYmF0Y2hlZEFyZ3NdKX1gO1xuICBpZiAoZnVsbENvbW1hbmQubGVuZ3RoIDw9IG1heENvbW1hbmRMZW5ndGgpIHtcbiAgICByZXR1cm4gZXhlY1N0cmluZyh7XG4gICAgICBjb21tYW5kOiBmdWxsQ29tbWFuZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNwbGl0IGludG8gYmF0Y2hlc1xuICBjb25zdCBiYXRjaGVzOiBzdHJpbmdbXVtdID0gW107XG4gIGxldCBjdXJyZW50QmF0Y2g6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBhcmcgb2YgZXhlY0FyZy5iYXRjaGVkQXJncykge1xuICAgIGNvbnN0IHRlbnRhdGl2ZSA9IGAke2Jhc2VDb21tYW5kfSAke2J1aWxkQ29tbWFuZExpbmUoWy4uLmN1cnJlbnRCYXRjaCwgYXJnXSl9YDtcbiAgICBpZiAodGVudGF0aXZlLmxlbmd0aCA+IG1heENvbW1hbmRMZW5ndGgpIHtcbiAgICAgIGlmIChjdXJyZW50QmF0Y2gubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ2Fubm90IHNwbGl0IGNvbW1hbmQgaW50byBiYXRjaGVzOiBhIHNpbmdsZSBhcmd1bWVudCAoJHtTdHJpbmcoYXJnLmxlbmd0aCl9IGNoYXJzKSBwbHVzIHRoZSBiYXNlIGNvbW1hbmQgKCR7U3RyaW5nKGJhc2VDb21tYW5kLmxlbmd0aCl9IGNoYXJzKSBleGNlZWRzIHRoZSBtYXggY29tbWFuZCBsZW5ndGggKCR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSkuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJhdGNoZXMucHVzaChjdXJyZW50QmF0Y2gpO1xuICAgICAgY3VycmVudEJhdGNoID0gW2FyZ107XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRCYXRjaC5wdXNoKGFyZyk7XG4gICAgfVxuICB9XG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBBbHdheXMgdHJ1ZSBhZnRlciB0aGUgbG9vcDsgYmF0Y2hlZEFyZ3MgaXMgbm9uLWVtcHR5IGF0IHRoaXMgcG9pbnQuICovXG4gIGlmIChjdXJyZW50QmF0Y2gubGVuZ3RoID4gMCkge1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gICAgYmF0Y2hlcy5wdXNoKGN1cnJlbnRCYXRjaCk7XG4gIH1cblxuICByZXR1cm4gZXhlY3V0ZUJhdGNoZXMoe1xuICAgIGJhc2VDb21tYW5kLFxuICAgIGJhdGNoZXMsXG4gICAgb3B0aW9uc1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBjb21tYW5kIHBhcnQgaXMgYW4ge0BsaW5rIEV4ZWNBcmd9LlxuICpcbiAqIEBwYXJhbSBwYXJ0IC0gVGhlIGNvbW1hbmQgcGFydCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHBhcnQgaXMgYW4gRXhlY0FyZy5cbiAqL1xuZnVuY3Rpb24gaXNFeGVjQXJnKHBhcnQ6IENvbW1hbmRQYXJ0KTogcGFydCBpcyBFeGVjQXJnIHtcbiAgcmV0dXJuIHR5cGVvZiBwYXJ0ID09PSAnb2JqZWN0JyAmJiAnYmF0Y2hlZEFyZ3MnIGluIHBhcnQ7XG59XG5cbi8qKlxuICogU3Bhd25zIGEgY2hpbGQgcHJvY2VzcyB2aWEgdGhlIGFwcHJvcHJpYXRlIHNoZWxsLlxuICpcbiAqIE9uIFdpbmRvd3MsIGlmIHRoZSBjb21tYW5kIGNvbnRhaW5zIG5ld2xpbmVzICh3aGljaCBgY21kLmV4ZWAgY2Fubm90IGhhbmRsZSlcbiAqIGFuZCB0aGUgcmF3IGFyZ3MgYXJyYXkgaXMgYXZhaWxhYmxlLCBzcGF3bnMgdGhlIHByb2Nlc3MgZGlyZWN0bHkgd2l0aG91dFxuICogYW55IHNoZWxsIFx1MjAxNCBwYXNzaW5nIGFyZ3MgdmlhIGBDcmVhdGVQcm9jZXNzYCwgd2hpY2ggYXZvaWRzIGFsbCBxdW90aW5nIGlzc3Vlcy5cbiAqXG4gKiBPbiBXaW5kb3dzIChjbWQuZXhlIHBhdGgpLCBhcHBsaWVzIGBeYC1lc2NhcGluZyBmb3IgY21kIG1ldGFjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3Igc3Bhd25pbmcgdGhlIGNoaWxkIHByb2Nlc3MuXG4gKiBAcmV0dXJucyBUaGUgc3Bhd25lZCBjaGlsZCBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiBzcGF3blZpYVNoZWxsKHBhcmFtczogU3Bhd25WaWFTaGVsbFBhcmFtcyk6IENoaWxkUHJvY2VzcyB7XG4gIGNvbnN0IHsgY29tbWFuZCwgY3dkLCBlbnY6IGV4dHJhRW52LCBpc0ludGVyYWN0aXZlID0gZmFsc2UsIHJhd0FyZ3MgfSA9IHBhcmFtcztcbiAgY29uc3QgZW52OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHtcbiAgICAuLi5DSElMRF9FTlYsXG4gICAgLi4uZXh0cmFFbnZcbiAgfTtcbiAgY29uc3Qgc3RkaW86ICdpbmhlcml0JyB8ICdwaXBlJyA9IGlzSW50ZXJhY3RpdmUgPyAnaW5oZXJpdCcgOiAncGlwZSc7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIGNvbW1hbmQuaW5jbHVkZXMoJ1xcbicpKSB7XG4gICAgaWYgKCFyYXdBcmdzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbW1hbmRzIGNvbnRhaW5pbmcgbmV3bGluZXMgY2Fubm90IGJlIGV4ZWN1dGVkIHRocm91Z2ggY21kLmV4ZSBvbiBXaW5kb3dzLiBQYXNzIGFuIGFyZ3VtZW50IGFycmF5IGluc3RlYWQgb2YgYSBzdHJpbmcuJyk7XG4gICAgfVxuICAgIGNvbnN0IFtwcm9ncmFtLCAuLi5hcmdzXSA9IHJhd0FyZ3M7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUocHJvZ3JhbSwgJ0NvbW1hbmQgYXJyYXkgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICByZXR1cm4gc3Bhd24ocHJvZ3JhbSwgYXJncywge1xuICAgICAgY3dkLFxuICAgICAgZW52LFxuICAgICAgc3RkaW9cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHNoZWxsQ29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBjbWRFc2NhcGVDb21tYW5kTGluZShjb21tYW5kKSA6IGNvbW1hbmQ7XG4gIHJldHVybiBzcGF3bihzaGVsbENvbW1hbmQsIFtdLCB7XG4gICAgY3dkLFxuICAgIGVudixcbiAgICBzaGVsbDogdHJ1ZSxcbiAgICBzdGRpb1xuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsZ0NBQXNCO0FBQ3RCLDBCQUFvQjtBQUVwQixtQkFBK0I7QUFDL0IsMEJBQTRDO0FBQzVDLG9CQUF3QjtBQUN4Qix5QkFBa0M7QUFDbEMsdUJBSU87QUEwSkEsU0FBUyxpQkFBaUIscUJBQXlDLFFBQXdCO0FBQ2hHLFFBQU0sV0FBVyx1QkFBdUIsSUFBSSxLQUFLO0FBQ2pELE1BQUksWUFBWSxJQUFJO0FBQ2xCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxRQUFRLE1BQU0sS0FBSyxFQUFFLFNBQVMsTUFB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
409
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9leGVjLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGV4ZWN1dGluZyBjb21tYW5kcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5cbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnLi4vZGVidWcudHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IHRyaW1FbmQgfSBmcm9tICcuLi9zdHJpbmcudHMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm9uTnVsbGFibGUgfSBmcm9tICcuLi90eXBlLWd1YXJkcy50cyc7XG5pbXBvcnQge1xuICBjbWRFc2NhcGVDb21tYW5kTGluZSBhcyBjb21tYW5kRXNjYXBlQ29tbWFuZExpbmUsXG4gIHRvQ29tbWFuZExpbmUsXG4gIHRvUG9zaXhDb21tYW5kTGluZVxufSBmcm9tICcuL2NsaS11dGlscy50cyc7XG5cbi8qKlxuICogQSBjb21tYW5kIHBhcnQ6IGVpdGhlciBhIHBsYWluIHN0cmluZyBvciBhbiB7QGxpbmsgRXhlY0FyZ3VtZW50fSB3aXRoIGJhdGNoZWQgYXJndW1lbnRzLlxuICovXG5leHBvcnQgdHlwZSBDb21tYW5kUGFydCA9IEV4ZWNBcmd1bWVudCB8IHN0cmluZztcblxuLyoqXG4gKiBBIGNvbW1hbmQgYXJndW1lbnQgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgYXJncyB0byBiZSBiYXRjaGVkLlxuICogSWYgdGhlIGV4cGFuZGVkIGNvbW1hbmQgZXhjZWVkcyB0aGUgcGxhdGZvcm0ncyBtYXggY29tbWFuZCBsZW5ndGgsXG4gKiB0aGUgYmF0Y2hlZCBhcmdzIGFyZSBzcGxpdCBpbnRvIHNlcXVlbnRpYWwgZXhlY3V0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjQXJndW1lbnQge1xuICAvKipcbiAgICogVGhlIGFyZ3VtZW50cyB0byBiYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGJhdGNoZWRBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBleGVjfSB0aGF0IHJldHVybiBkZXRhaWxlZCByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNEZXRhaWxlZE9wdGlvbnMgZXh0ZW5kcyBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIGB0cnVlYCB0byByZWNlaXZlIGRldGFpbGVkIHJlc3VsdHMuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlsczogdHJ1ZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBleGVjdXRpbmcgYSBjb21tYW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWNPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY3VycmVudCB3b3JraW5nIGZvbGRlciBmb3IgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGNoaWxkIHByb2Nlc3MsIG1lcmdlZCBvdmVyIHRoZSBpbmhlcml0ZWQgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB7fWBcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IE5vZGVKUy5Qcm9jZXNzRW52O1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGF0dGFjaGVzIHRoZSBjaGlsZCBwcm9jZXNzJ3Mgc3RkaW8gZGlyZWN0bHkgdG8gdGhlIHRlcm1pbmFsIChgc3RkaW86ICdpbmhlcml0J2ApIGluc3RlYWRcbiAgICogb2YgY2FwdHVyaW5nIGl0LiBVc2UgZm9yIGxvbmctcnVubmluZyBvciBpbnRlcmFjdGl2ZSBjb21tYW5kcyBzdWNoIGFzIGRldiBzZXJ2ZXJzIGFuZCB3YXRjaCBtb2RlLlxuICAgKiBCZWNhdXNlIHRoZSBvdXRwdXQgaXMgbm90IGNhcHR1cmVkLCB0aGUgcmVzb2x2ZWQgc3Rkb3V0IGlzIGFuIGVtcHR5IHN0cmluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNJbnRlcmFjdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgc3VwcHJlc3NlcyB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc1F1aWV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNvbW1hbmQgZmFpbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRmFpbElmQ2FsbGVkRnJvbU91dHNpZGVSb290PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYHRydWVgLCBpZ25vcmVzIHRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZElnbm9yZUV4aXRDb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgYGZhbHNlYCwgb25seSByZXR1cm5zIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVEZXRhaWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gaW5wdXQgdG8gYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBzdGRpbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJlc3VsdCBvZiB7QGxpbmsgZXhlY30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBBbiBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuIEEgdmFsdWUgb2YgYG51bGxgIGluZGljYXRlcyB0aGF0IHRoZSBwcm9jZXNzIGRpZCBub3QgZXhpdCBub3JtYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudWxsIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIHNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgcHJvY2VzcyB0byBiZSB0ZXJtaW5hdGVkLiBBIHZhbHVlIG9mIGBudWxsYCBpbmRpY2F0ZXMgdGhhdCBubyBzaWduYWwgd2FzIHJlY2VpdmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhpdFNpZ25hbDogTm9kZUpTLlNpZ25hbHMgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBIHN0YW5kYXJkIGVycm9yIG91dHB1dCBmcm9tIHRoZSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RkZXJyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RhbmRhcmQgb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQuXG4gICAqL1xuICByZWFkb25seSBzdGRvdXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZXhlY30gdGhhdCByZXR1cm4gb25seSBzdGRvdXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY1NpbXBsZU9wdGlvbnMgZXh0ZW5kcyBFeGVjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIGBmYWxzZWAgb3Igb21pdHRlZCB0byByZWNlaXZlIG9ubHkgc3Rkb3V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRGV0YWlscz86IGZhbHNlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleGVjU3RyaW5nfS5cbiAqL1xuaW50ZXJmYWNlIEV4ZWNTdHJpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlYyBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9ucz86IEV4ZWNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYXJndW1lbnQgYXJyYXkgKGlmIGF2YWlsYWJsZSksIHVzZWQgYnkgdGhlIFBvd2VyU2hlbGxcbiAgICogZmFsbGJhY2sgcGF0aCB0byBxdW90ZSBhcmd1bWVudHMgd2l0aCBQb3dlclNoZWxsLW5hdGl2ZSBzaW5nbGUgcXVvdGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3QXJndW1lbnRzPzogc3RyaW5nW107XG59XG4vKipcbiAqIEFwcGVuZHMgYSBzaW5nbGUgYG5vZGVgIENMSSBvcHRpb24gdG8gYSBgTk9ERV9PUFRJT05TYCBzdHJpbmcsIHByZXNlcnZpbmcgYW55IG9wdGlvbnMgYWxyZWFkeSBwcmVzZW50LlxuICpcbiAqIEBwYXJhbSBleGlzdGluZ05vZGVPcHRpb25zIC0gVGhlIGN1cnJlbnQgYE5PREVfT1BUSU9OU2AgdmFsdWUgKGUuZy4gYHByb2Nlc3MuZW52Lk5PREVfT1BUSU9OU2ApLCBpZiBhbnkuXG4gKiBAcGFyYW0gb3B0aW9uIC0gVGhlIGBub2RlYCBDTEkgb3B0aW9uIHRvIGFwcGVuZCAoZS5nLiBgLS1sb2NhbHN0b3JhZ2UtZmlsZT06bWVtb3J5OmApLlxuICogQHJldHVybnMgVGhlIGNvbWJpbmVkIGBOT0RFX09QVElPTlNgIHN0cmluZy4gSWYgYG9wdGlvbmAgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kTm9kZU9wdGlvbihleGlzdGluZ05vZGVPcHRpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9wdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpbW1lZCA9IChleGlzdGluZ05vZGVPcHRpb25zID8/ICcnKS50cmltKCk7XG4gIGlmICh0cmltbWVkID09PSAnJykge1xuICAgIHJldHVybiBvcHRpb247XG4gIH1cbiAgaWYgKHRyaW1tZWQuc3BsaXQoL1xccysvKS5pbmNsdWRlcyhvcHRpb24pKSB7XG4gICAgcmV0dXJuIHRyaW1tZWQ7XG4gIH1cbiAgcmV0dXJuIGAke3RyaW1tZWR9ICR7b3B0aW9ufWA7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBlbnZpcm9ubWVudCBmb3IgY2hpbGQgcHJvY2Vzc2VzOiB0aGUgcGFyZW50IGVudmlyb25tZW50IHBsdXMgYERFQlVHX0NPTE9SU2AsIGFuZCBcdTIwMTQgd2hlblxuICogdGhlIHJ1bm5pbmcgYG5vZGVgIHN1cHBvcnRzIGl0IFx1MjAxNCB7QGxpbmsgTE9DQUxfU1RPUkFHRV9OT0RFX09QVElPTn0gYXBwZW5kZWQgdG8gYE5PREVfT1BUSU9OU2AuXG4gKlxuICogVGhlIHN1cHBvcnQgY2hlY2sgZ3VhcmRzIGFnYWluc3Qgb2xkZXIgYG5vZGVgICg8IDIyKTogcGFzc2luZyBhbiBvcHRpb24gYG5vZGVgIGRvZXMgbm90IHJlY29nbml6ZSB2aWFcbiAqIGBOT0RFX09QVElPTlNgIG1ha2VzIGl0IGV4aXQgYmVmb3JlIHJ1bm5pbmcsIHdoaWNoIHdvdWxkIGJyZWFrIGV2ZXJ5IHNwYXduZWQgdG9vbC5cbiAqXG4gKiBAcGFyYW0gYmFzZUVudiAtIFRoZSBwYXJlbnQgZW52aXJvbm1lbnQgdG8gZXh0ZW5kICh0eXBpY2FsbHkgYHByb2Nlc3MuZW52YCkuXG4gKiBAcGFyYW0gYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzIC0gVGhlIGBub2RlYCBvcHRpb25zIGFjY2VwdGVkIHZpYSBgTk9ERV9PUFRJT05TYCAodHlwaWNhbGx5IGBwcm9jZXNzLmFsbG93ZWROb2RlRW52aXJvbm1lbnRGbGFnc2ApLlxuICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IHRvIHBhc3MgdG8gc3Bhd25lZCBjaGlsZCBwcm9jZXNzZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENoaWxkRW52KGJhc2VFbnY6IE5vZGVKUy5Qcm9jZXNzRW52LCBhbGxvd2VkTm9kZUVudmlyb25tZW50RmxhZ3M6IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBOb2RlSlMuUHJvY2Vzc0VudiB7XG4gIGNvbnN0IGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSB7XG4gICAgREVCVUdfQ09MT1JTOiAnMScsXG4gICAgLi4uYmFzZUVudlxuICB9O1xuICBpZiAoYWxsb3dlZE5vZGVFbnZpcm9ubWVudEZsYWdzLmhhcygnLS1sb2NhbHN0b3JhZ2UtZmlsZScpKSB7XG4gICAgZW52WydOT0RFX09QVElPTlMnXSA9IGFwcGVuZE5vZGVPcHRpb24oYmFzZUVudlsnTk9ERV9PUFRJT05TJ10sIExPQ0FMX1NUT1JBR0VfTk9ERV9PUFRJT04pO1xuICB9XG4gIHJldHVybiBlbnY7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQuXG4gKiBAdGhyb3dzIElmIHRoZSBjb21tYW5kIGZhaWxzIHdpdGggYSBub24temVybyBleGl0IGNvZGUgYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGBmYWxzZWAuXG4gKiAgICAgICAgIFRoZSBlcnJvciBtZXNzYWdlIGluY2x1ZGVzIHRoZSBleGl0IGNvZGUgYW5kIHN0ZGVyci5cbiAqICAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgZXhlY3V0aW9uIGFuZCBpZ25vcmVFeGl0Q29kZSBpcyBgdHJ1ZWAsXG4gKiAgICAgICAgIHRoZSBlcnJvciBpcyByZXNvbHZlZCB3aXRoIHRoZSBzdGRvdXQgYW5kIHN0ZGVyci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWMoY29tbWFuZDogQ29tbWFuZFBhcnRbXSB8IHN0cmluZywgb3B0aW9ucz86IEV4ZWNTaW1wbGVPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+O1xuLyoqXG4gKiBFeGVjdXRlcyBhIGNvbW1hbmQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBleGVjdXRlLiBJdCBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBleGVjdXRpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggRXhlY1Jlc3VsdCBvYmplY3QuXG4gKiAgICAgICAgICBUaGUgRXhlY1Jlc3VsdCBvYmplY3QgY29udGFpbnMgdGhlIGV4aXQgY29kZSwgZXhpdCBzaWduYWwsIHN0ZGVyciwgYW5kIHN0ZG91dC5cbiAqIEB0aHJvd3MgSWYgdGhlIGNvbW1hbmQgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSBhbmQgaWdub3JlRXhpdENvZGUgaXMgYGZhbHNlYC5cbiAqICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4aXQgY29kZSBhbmQgc3RkZXJyLlxuICogICAgICAgICBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBleGVjdXRpb24gYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGB0cnVlYCxcbiAqICAgICAgICAgdGhlIGVycm9yIGlzIHJlc29sdmVkIHdpdGggdGhlIHN0ZG91dCBhbmQgc3RkZXJyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zOiBFeGVjRGV0YWlsZWRPcHRpb25zKTogUHJvbWlzZTxFeGVjUmVzdWx0Pjtcbi8qKlxuICogRXhlY3V0ZXMgYSBjb21tYW5kLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgb3IgYW4gRXhlY1Jlc3VsdCBvYmplY3QuXG4gKiAgICAgICAgICBUaGUgRXhlY1Jlc3VsdCBvYmplY3QgY29udGFpbnMgdGhlIGV4aXQgY29kZSwgZXhpdCBzaWduYWwsIHN0ZGVyciwgYW5kIHN0ZG91dC5cbiAqIEB0aHJvd3MgSWYgdGhlIGNvbW1hbmQgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSBhbmQgaWdub3JlRXhpdENvZGUgaXMgYGZhbHNlYC5cbiAqICAgICAgICAgVGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkZXMgdGhlIGV4aXQgY29kZSBhbmQgc3RkZXJyLlxuICogICAgICAgICBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBleGVjdXRpb24gYW5kIGlnbm9yZUV4aXRDb2RlIGlzIGB0cnVlYCxcbiAqICAgICAgICAgdGhlIGVycm9yIGlzIHJlc29sdmVkIHdpdGggdGhlIHN0ZG91dCBhbmQgc3RkZXJyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlYyhjb21tYW5kOiBDb21tYW5kUGFydFtdIHwgc3RyaW5nLCBvcHRpb25zOiBFeGVjT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNvbW1hbmQpKSB7XG4gICAgY29uc3QgYmF0Y2hSZXN1bHQgPSBoYW5kbGVCYXRjaGVkQ29tbWFuZChjb21tYW5kLCBvcHRpb25zKTtcbiAgICBpZiAoYmF0Y2hSZXN1bHQpIHtcbiAgICAgIHJldHVybiBiYXRjaFJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgJGFyZ3VtZW50cyA9IGNvbW1hbmQuZmlsdGVyKChwYXJ0KTogcGFydCBpcyBzdHJpbmcgPT4gdHlwZW9mIHBhcnQgPT09ICdzdHJpbmcnKTtcbiAgICBjb25zdCBjb21tYW5kTGluZSA9IGJ1aWxkQ29tbWFuZExpbmUoJGFyZ3VtZW50cyk7XG5cbiAgICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4Q29tbWFuZExlbmd0aCgpO1xuICAgIGlmIChjb21tYW5kTGluZS5sZW5ndGggPiBtYXhDb21tYW5kTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgQ29tbWFuZCBsaW5lIGlzIHRvbyBsb25nICgke1N0cmluZyhjb21tYW5kTGluZS5sZW5ndGgpfSBjaGFycywgbWF4ICR7U3RyaW5nKG1heENvbW1hbmRMZW5ndGgpfSBvbiAke3Byb2Nlc3MucGxhdGZvcm19KS4gQ29uc2lkZXIgc3BsaXR0aW5nIGludG8gc21hbGxlciBiYXRjaGVzIG9yIHVzZSBFeGVjQXJnLmBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhlY1N0cmluZyh7XG4gICAgICBjb21tYW5kOiBjb21tYW5kTGluZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICByYXdBcmd1bWVudHM6ICRhcmd1bWVudHNcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG1heENvbW1hbmRMZW5ndGggPSBnZXRNYXhDb21tYW5kTGVuZ3RoKCk7XG4gIGlmIChjb21tYW5kLmxlbmd0aCA+IG1heENvbW1hbmRMZW5ndGgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICBuZXcgRXJyb3IoXG4gICAgICAgIGBDb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgKCR7U3RyaW5nKGNvbW1hbmQubGVuZ3RoKX0gY2hhcnMsIG1heCAke1N0cmluZyhtYXhDb21tYW5kTGVuZ3RoKX0gb24gJHtwcm9jZXNzLnBsYXRmb3JtfSkuIENvbnNpZGVyIHNwbGl0dGluZyBpbnRvIHNtYWxsZXIgYmF0Y2hlcyBvciB1c2UgRXhlY0FyZy5gXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBleGVjU3RyaW5nKHtcbiAgICBjb21tYW5kLFxuICAgIG9wdGlvbnNcbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYSBzaW5nbGUgc3RyaW5nIGNvbW1hbmQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXhlY3V0aW9uLlxuICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBleGVjU3RyaW5nKHBhcmFtczogRXhlY1N0cmluZ1BhcmFtcyk6IFByb21pc2U8RXhlY1Jlc3VsdCB8IHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgY29tbWFuZCxcbiAgICBvcHRpb25zID0ge30sXG4gICAgcmF3QXJndW1lbnRzXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHtcbiAgICBjd2QgPSBwcm9jZXNzLmN3ZCgpLFxuICAgIGVudixcbiAgICBpc0ludGVyYWN0aXZlID0gZmFsc2UsXG4gICAgaXNRdWlldDogcXVpZXQgPSBmYWxzZSxcbiAgICBzaG91bGRJZ25vcmVFeGl0Q29kZTogaWdub3JlRXhpdENvZGUgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlRGV0YWlscyA9IGZhbHNlLFxuICAgIHN0ZGluID0gJydcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBnZXRMaWJEZWJ1Z2dlcignRXhlYycpKGBFeGVjdXRpbmcgY29tbWFuZDogJHtjb21tYW5kfWApO1xuXG4gICAgY29uc3QgY2hpbGQgPSBzcGF3blZpYVNoZWxsKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxTcGF3blZpYVNoZWxsUGFyYW1zPih7XG4gICAgICBjb21tYW5kLFxuICAgICAgY3dkLFxuICAgICAgZW52LFxuICAgICAgaXNJbnRlcmFjdGl2ZSxcbiAgICAgIHJhd0FyZ3VtZW50c1xuICAgIH0pKTtcblxuICAgIGxldCBzdGRvdXQgPSAnJztcbiAgICBsZXQgc3RkZXJyID0gJyc7XG5cbiAgICAvLyBJbiBpbnRlcmFjdGl2ZSBtb2RlIHRoZSBjaGlsZCdzIHN0ZGlvIGlzIGluaGVyaXRlZCBieSB0aGUgdGVybWluYWwsIHNvIHRoZXJlIGFyZSBubyBzdHJlYW1zIHRvIHJlYWQgYW5kIG5vdGhpbmcgaXMgY2FwdHVyZWQuXG4gICAgaWYgKCFpc0ludGVyYWN0aXZlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0ZGVycjogY2hpbGRTdGRlcnIsXG4gICAgICAgIHN0ZGluOiBjaGlsZFN0ZGluLFxuICAgICAgICBzdGRvdXQ6IGNoaWxkU3Rkb3V0XG4gICAgICB9ID0gY2hpbGQ7XG4gICAgICBhc3NlcnROb25OdWxsYWJsZShjaGlsZFN0ZGluLCAnQ2hpbGQgcHJvY2VzcyBzdGRpbiBpcyBub3QgYXZhaWxhYmxlJyk7XG4gICAgICBhc3NlcnROb25OdWxsYWJsZShjaGlsZFN0ZG91dCwgJ0NoaWxkIHByb2Nlc3Mgc3Rkb3V0IGlzIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgIGFzc2VydE5vbk51bGxhYmxlKGNoaWxkU3RkZXJyLCAnQ2hpbGQgcHJvY2VzcyBzdGRlcnIgaXMgbm90IGF2YWlsYWJsZScpO1xuXG4gICAgICBjaGlsZFN0ZGluLndyaXRlKHN0ZGluKTtcbiAgICAgIGNoaWxkU3RkaW4uZW5kKCk7XG5cbiAgICAgIGNoaWxkU3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBpZiAoIXF1aWV0KSB7XG4gICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Rkb3V0ICs9IGRhdGEudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGRTdGRvdXQub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgc3Rkb3V0ID0gdHJpbUVuZCh7XG4gICAgICAgICAgJHN0cmluZzogc3Rkb3V0LFxuICAgICAgICAgIHN1ZmZpeDogJ1xcbidcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGRTdGRlcnIub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGlmICghcXVpZXQpIHtcbiAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBzdGRlcnIgKz0gZGF0YS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZFN0ZGVyci5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBzdGRlcnIgPSB0cmltRW5kKHtcbiAgICAgICAgICAkc3RyaW5nOiBzdGRlcnIsXG4gICAgICAgICAgc3VmZml4OiAnXFxuJ1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoaWxkLm9uKCdjbG9zZScsIChleGl0Q29kZSwgZXhpdFNpZ25hbCkgPT4ge1xuICAgICAgaWYgKGV4aXRDb2RlICE9PSAwICYmICFpZ25vcmVFeGl0Q29kZSkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb21tYW5kIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAke2V4aXRDb2RlID8gU3RyaW5nKGV4aXRDb2RlKSA6ICcobnVsbCknfVxcbiR7c3RkZXJyfWApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNob3VsZEluY2x1ZGVEZXRhaWxzKSB7XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIGV4aXRDb2RlLFxuICAgICAgICBleGl0U2lnbmFsLFxuICAgICAgICBzdGRlcnIsXG4gICAgICAgIHN0ZG91dFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgIGlmICghaWdub3JlRXhpdENvZGUpIHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNob3VsZEluY2x1ZGVEZXRhaWxzKSB7XG4gICAgICAgIHJlc29sdmUoc3Rkb3V0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgZXhpdENvZGU6IG51bGwsXG4gICAgICAgIGV4aXRTaWduYWw6IG51bGwsXG4gICAgICAgIHN0ZGVycixcbiAgICAgICAgc3Rkb3V0XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQSBgbm9kZWAgQ0xJIG9wdGlvbiAocGFzc2VkIHZpYSBgTk9ERV9PUFRJT05TYCkgdGhhdCBwcm92aWRlcyBhbiBpbi1tZW1vcnkgYGxvY2FsU3RvcmFnZWAgdG8gZXZlcnlcbiAqIHNwYXduZWQgYG5vZGVgIHByb2Nlc3MuIE5vZGUgMjIrIGV4cG9zZXMgYW4gZXhwZXJpbWVudGFsIFdlYiBTdG9yYWdlIGBsb2NhbFN0b3JhZ2VgLCBidXQgYWNjZXNzaW5nIGl0XG4gKiB3aXRob3V0IGAtLWxvY2Fsc3RvcmFnZS1maWxlYCBlbWl0cyBhbiBgRXhwZXJpbWVudGFsV2FybmluZ2AgYW5kIGxlYXZlcyBgbG9jYWxTdG9yYWdlYCB1bmF2YWlsYWJsZS5cbiAqIFBvaW50aW5nIGl0IGF0IHRoZSBzcGVjaWFsIGA6bWVtb3J5OmAgZGF0YWJhc2UgZ2l2ZXMgZWFjaCBwcm9jZXNzIGEgd29ya2luZywgbm9uLXBlcnNpc3RlbnRcbiAqIGBsb2NhbFN0b3JhZ2VgIChubyBmaWxlIG9uIGRpc2ssIG5vIHN0YXRlIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcykgXHUyMDE0IG1hdGNoaW5nIHRoZSByZWFsIE9ic2lkaWFuXG4gKiAoRWxlY3Ryb24pIHJ1bnRpbWUgYW5kIHNpbGVuY2luZyB0aGUgd2FybmluZyBieSBhZGRyZXNzaW5nIGl0cyByb290IGNhdXNlIHJhdGhlciB0aGFuIHN1cHByZXNzaW5nIGl0LlxuICpcbiAqIEl0IGlzIGFwcGxpZWQgb25seSB3aGVuIHRoZSBydW5uaW5nIGBub2RlYCBhY3R1YWxseSBzdXBwb3J0cyBpdCAoc2VlIHtAbGluayBidWlsZENoaWxkRW52fSk6IHBhc3NpbmdcbiAqIGFuIG9wdGlvbiBgbm9kZWAgZG9lcyBub3QgcmVjb2duaXplIHZpYSBgTk9ERV9PUFRJT05TYCBtYWtlcyBpdCByZWZ1c2UgdG8gc3RhcnQsIHNvIGFuIG9sZGVyIGBub2RlYFxuICogKDwgMjIpIG11c3QgYmUgbGVmdCB1bnRvdWNoZWQuXG4gKi9cbmNvbnN0IExPQ0FMX1NUT1JBR0VfTk9ERV9PUFRJT04gPSAnLS1sb2NhbHN0b3JhZ2UtZmlsZT06bWVtb3J5Oic7XG5cbi8qKlxuICogRGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcGFzc2VkIHRvIGNoaWxkIHByb2Nlc3Nlcy5cbiAqL1xuY29uc3QgQ0hJTERfRU5WID0gYnVpbGRDaGlsZEVudihwcm9jZXNzLmVudiwgcHJvY2Vzcy5hbGxvd2VkTm9kZUVudmlyb25tZW50RmxhZ3MpO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleGVjdXRlQmF0Y2hlc30uXG4gKi9cbmludGVyZmFjZSBFeGVjdXRlQmF0Y2hlc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBjb21tYW5kIHdpdGhvdXQgYmF0Y2hlZCBhcmdzLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUNvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJhdGNoZXMgb2YgYXJncy5cbiAgICovXG4gIHJlYWRvbmx5IGJhdGNoZXM6IHN0cmluZ1tdW107XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBFeGVjT3B0aW9ucztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc3Bhd25WaWFTaGVsbH0uXG4gKi9cbmludGVyZmFjZSBTcGF3blZpYVNoZWxsUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHN0cmluZyB0byBleGVjdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBjd2Q6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbWVyZ2VkIG92ZXIgdGhlIGluaGVyaXRlZCBjaGlsZCBlbnZpcm9ubWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IE5vZGVKUy5Qcm9jZXNzRW52O1xuXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGF0dGFjaGVzIHRoZSBjaGlsZCdzIHN0ZGlvIHRvIHRoZSB0ZXJtaW5hbCBpbnN0ZWFkIG9mIHBpcGluZyBpdC5cbiAgICovXG4gIHJlYWRvbmx5IGlzSW50ZXJhY3RpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgYXJndW1lbnQgYXJyYXkgKGlmIGF2YWlsYWJsZSkuXG4gICAqL1xuICByZWFkb25seSByYXdBcmd1bWVudHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBjb21tYW5kLWxpbmUgc3RyaW5nIGZyb20gYW4gYXJndW1lbnQgYXJyYXksIHF1b3RlZCBmb3IgdGhlIHNoZWxsIHRoYXRcbiAqIHtAbGluayBzcGF3blZpYVNoZWxsfSB3aWxsIHJvdXRlIHRocm91Z2ggb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICogT24gV2luZG93cyB0aGUgY29tbWFuZCBpcyBleGVjdXRlZCB2aWEgYGNtZC5leGVgLCBzbyBpdCB1c2VzIHRoZVxuICogYENvbW1hbmRMaW5lVG9Bcmd2V2AgY29udmVudGlvbiAoe0BsaW5rIHRvQ29tbWFuZExpbmV9KTsge0BsaW5rIHNwYXduVmlhU2hlbGx9XG4gKiB0aGVuIGFwcGxpZXMge0BsaW5rIGNtZEVzY2FwZUNvbW1hbmRMaW5lfSBvbiB0b3AgZm9yIGBjbWQuZXhlYCBtZXRhY2hhcmFjdGVycy5cbiAqIEVsc2V3aGVyZSB0aGUgY29tbWFuZCBpcyBleGVjdXRlZCB2aWEgYHNoIC1jYCwgc28gaXQgdXNlcyBQT1NJWCBzaW5nbGUtcXVvdGVcbiAqIHF1b3RpbmcgKHtAbGluayB0b1Bvc2l4Q29tbWFuZExpbmV9KSBhbmQgbmVlZHMgbm8gZnVydGhlciBlc2NhcGluZy5cbiAqXG4gKiBUaGUgcGxhdGZvcm0gYnJhbmNoIGhlcmUgTVVTVCBzdGF5IGluIHN5bmMgd2l0aCB0aGUgb25lIGluIHtAbGluayBzcGF3blZpYVNoZWxsfS5cbiAqXG4gKiBAcGFyYW0gJGFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudCBhcnJheSB0byBxdW90ZSBhbmQgam9pbi5cbiAqIEByZXR1cm5zIFRoZSBxdW90ZWQgY29tbWFuZC1saW5lIHN0cmluZyBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0ncyBzaGVsbC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDb21tYW5kTGluZSgkYXJndW1lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gdG9Db21tYW5kTGluZSgkYXJndW1lbnRzKSA6IHRvUG9zaXhDb21tYW5kTGluZSgkYXJndW1lbnRzKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBiYXRjaGVkIGNvbW1hbmRzIHNlcXVlbnRpYWxseSBhbmQgY29uY2F0ZW5hdGVzIHN0ZG91dC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBiYXRjaGVkIGV4ZWN1dGlvbi5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNvbmNhdGVuYXRlZCByZXN1bHQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVCYXRjaGVzKHBhcmFtczogRXhlY3V0ZUJhdGNoZXNQYXJhbXMpOiBQcm9taXNlPEV4ZWNSZXN1bHQgfCBzdHJpbmc+IHtcbiAgY29uc3QgeyBiYXNlQ29tbWFuZCwgYmF0Y2hlcywgb3B0aW9ucyB9ID0gcGFyYW1zO1xuICBjb25zdCByZXN1bHRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYmF0Y2ggb2YgYmF0Y2hlcykge1xuICAgIGNvbnN0IGJhdGNoQ29tbWFuZCA9IGAke2Jhc2VDb21tYW5kfSAke2J1aWxkQ29tbWFuZExpbmUoYmF0Y2gpfWA7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY1N0cmluZyh7XG4gICAgICBjb21tYW5kOiBiYXRjaENvbW1hbmQsXG4gICAgICBvcHRpb25zXG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy5zaG91bGRJbmNsdWRlRGV0YWlscykge1xuICAgIHJldHVybiB7IGV4aXRDb2RlOiAwLCBleGl0U2lnbmFsOiBudWxsLCBzdGRlcnI6ICcnLCBzdGRvdXQ6IHJlc3VsdHMuam9pbignXFxuJykgfTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIG1heCBjb21tYW5kIGxpbmUgbGVuZ3RoLlxuICpcbiAqIEByZXR1cm5zIFRoZSBtYXggY29tbWFuZCBsZW5ndGggaW4gY2hhcmFjdGVycy5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF4Q29tbWFuZExlbmd0aCgpOiBudW1iZXIge1xuICBjb25zdCBXSU5ET1dTX01BWF9DT01NQU5EX0xFTkdUSCA9IDgxOTE7XG4gIGNvbnN0IFVOSVhfTUFYX0NPTU1BTkRfTEVOR1RIID0gMTMxXzA3MjtcbiAgcmV0dXJuIHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBXSU5ET1dTX01BWF9DT01NQU5EX0xFTkdUSCA6IFVOSVhfTUFYX0NPTU1BTkRfTEVOR1RIO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYSBjb21tYW5kIGFycmF5IHRoYXQgbWF5IGNvbnRhaW4gYW4ge0BsaW5rIEV4ZWNBcmd1bWVudH0uXG4gKiBSZXR1cm5zIGEgUHJvbWlzZSBpZiBiYXRjaGluZyBpcyBuZWVkZWQsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBjb21tYW5kXG4gKiBoYXMgbm8gRXhlY0FyZyBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCBub3JtYWxseS5cbiAqXG4gKiBAcGFyYW0gcGFydHMgLSBUaGUgY29tbWFuZCBwYXJ0cy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGV4ZWMgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEgUHJvbWlzZSBpZiBiYXRjaGluZyBpcyBoYW5kbGVkLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlQmF0Y2hlZENvbW1hbmQocGFydHM6IENvbW1hbmRQYXJ0W10sIG9wdGlvbnM6IEV4ZWNPcHRpb25zKTogUHJvbWlzZTxFeGVjUmVzdWx0IHwgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGV4ZWNBcmd1bWVudHMgPSBwYXJ0cy5maWx0ZXIoaXNFeGVjQXJndW1lbnQpO1xuICBpZiAoZXhlY0FyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChleGVjQXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdPbmx5IG9uZSBFeGVjQXJnIHdpdGggYmF0Y2hlZEFyZ3VtZW50cyBpcyBhbGxvd2VkIHBlciBjb21tYW5kJykpO1xuICB9XG5cbiAgY29uc3QgZXhlY0FyZ3VtZW50ID0gZXhlY0FyZ3VtZW50c1swXTtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUoZXhlY0FyZ3VtZW50KTtcbiAgY29uc3Qgc3RhdGljUGFydHMgPSBwYXJ0cy5maWx0ZXIoKHBhcnQpOiBwYXJ0IGlzIHN0cmluZyA9PiB0eXBlb2YgcGFydCA9PT0gJ3N0cmluZycpO1xuICBjb25zdCBiYXNlQ29tbWFuZCA9IGJ1aWxkQ29tbWFuZExpbmUoc3RhdGljUGFydHMpO1xuICBjb25zdCBtYXhDb21tYW5kTGVuZ3RoID0gZ2V0TWF4Q29tbWFuZExlbmd0aCgpO1xuXG4gIC8vIFRyeSBleHBhbmRpbmcgYWxsIGFyZ3MgaW5saW5lXG4gIGNvbnN0IGZ1bGxDb21tYW5kID0gYCR7YmFzZUNvbW1hbmR9ICR7YnVpbGRDb21tYW5kTGluZShbLi4uZXhlY0FyZ3VtZW50LmJhdGNoZWRBcmd1bWVudHNdKX1gO1xuICBpZiAoZnVsbENvbW1hbmQubGVuZ3RoIDw9IG1heENvbW1hbmRMZW5ndGgpIHtcbiAgICByZXR1cm4gZXhlY1N0cmluZyh7XG4gICAgICBjb21tYW5kOiBmdWxsQ29tbWFuZCxcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNwbGl0IGludG8gYmF0Y2hlc1xuICBjb25zdCBiYXRjaGVzOiBzdHJpbmdbXVtdID0gW107XG4gIGxldCBjdXJyZW50QmF0Y2g6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBleGVjQXJndW1lbnQuYmF0Y2hlZEFyZ3VtZW50cykge1xuICAgIGNvbnN0IHRlbnRhdGl2ZSA9IGAke2Jhc2VDb21tYW5kfSAke2J1aWxkQ29tbWFuZExpbmUoWy4uLmN1cnJlbnRCYXRjaCwgYXJndW1lbnRdKX1gO1xuICAgIGlmICh0ZW50YXRpdmUubGVuZ3RoID4gbWF4Q29tbWFuZExlbmd0aCkge1xuICAgICAgaWYgKGN1cnJlbnRCYXRjaC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3Qgc3BsaXQgY29tbWFuZCBpbnRvIGJhdGNoZXM6IGEgc2luZ2xlIGFyZ3VtZW50ICgke1N0cmluZyhhcmd1bWVudC5sZW5ndGgpfSBjaGFycykgcGx1cyB0aGUgYmFzZSBjb21tYW5kICgke1N0cmluZyhiYXNlQ29tbWFuZC5sZW5ndGgpfSBjaGFycykgZXhjZWVkcyB0aGUgbWF4IGNvbW1hbmQgbGVuZ3RoICgke1N0cmluZyhtYXhDb21tYW5kTGVuZ3RoKX0pLmBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBiYXRjaGVzLnB1c2goY3VycmVudEJhdGNoKTtcbiAgICAgIGN1cnJlbnRCYXRjaCA9IFthcmd1bWVudF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRCYXRjaC5wdXNoKGFyZ3VtZW50KTtcbiAgICB9XG4gIH1cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEFsd2F5cyB0cnVlIGFmdGVyIHRoZSBsb29wOyBiYXRjaGVkQXJndW1lbnRzIGlzIG5vbi1lbXB0eSBhdCB0aGlzIHBvaW50LiAqL1xuICBpZiAoY3VycmVudEJhdGNoLmxlbmd0aCA+IDApIHtcbiAgICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICAgIGJhdGNoZXMucHVzaChjdXJyZW50QmF0Y2gpO1xuICB9XG5cbiAgcmV0dXJuIGV4ZWN1dGVCYXRjaGVzKHtcbiAgICBiYXNlQ29tbWFuZCxcbiAgICBiYXRjaGVzLFxuICAgIG9wdGlvbnNcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgY29tbWFuZCBwYXJ0IGlzIGFuIHtAbGluayBFeGVjQXJndW1lbnR9LlxuICpcbiAqIEBwYXJhbSBwYXJ0IC0gVGhlIGNvbW1hbmQgcGFydCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHBhcnQgaXMgYW4gRXhlY0FyZy5cbiAqL1xuZnVuY3Rpb24gaXNFeGVjQXJndW1lbnQocGFydDogQ29tbWFuZFBhcnQpOiBwYXJ0IGlzIEV4ZWNBcmd1bWVudCB7XG4gIHJldHVybiB0eXBlb2YgcGFydCA9PT0gJ29iamVjdCcgJiYgJ2JhdGNoZWRBcmd1bWVudHMnIGluIHBhcnQ7XG59XG5cbi8qKlxuICogU3Bhd25zIGEgY2hpbGQgcHJvY2VzcyB2aWEgdGhlIGFwcHJvcHJpYXRlIHNoZWxsLlxuICpcbiAqIE9uIFdpbmRvd3MsIGlmIHRoZSBjb21tYW5kIGNvbnRhaW5zIG5ld2xpbmVzICh3aGljaCBgY21kLmV4ZWAgY2Fubm90IGhhbmRsZSlcbiAqIGFuZCB0aGUgcmF3IGFyZ3MgYXJyYXkgaXMgYXZhaWxhYmxlLCBzcGF3bnMgdGhlIHByb2Nlc3MgZGlyZWN0bHkgd2l0aG91dFxuICogYW55IHNoZWxsIFx1MjAxNCBwYXNzaW5nIGFyZ3MgdmlhIGBDcmVhdGVQcm9jZXNzYCwgd2hpY2ggYXZvaWRzIGFsbCBxdW90aW5nIGlzc3Vlcy5cbiAqXG4gKiBPbiBXaW5kb3dzIChjbWQuZXhlIHBhdGgpLCBhcHBsaWVzIGBeYC1lc2NhcGluZyBmb3IgY21kIG1ldGFjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3Igc3Bhd25pbmcgdGhlIGNoaWxkIHByb2Nlc3MuXG4gKiBAcmV0dXJucyBUaGUgc3Bhd25lZCBjaGlsZCBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiBzcGF3blZpYVNoZWxsKHBhcmFtczogU3Bhd25WaWFTaGVsbFBhcmFtcyk6IENoaWxkUHJvY2VzcyB7XG4gIGNvbnN0IHsgY29tbWFuZCwgY3dkLCBlbnY6IGV4dHJhRW52LCBpc0ludGVyYWN0aXZlID0gZmFsc2UsIHJhd0FyZ3VtZW50cyB9ID0gcGFyYW1zO1xuICBjb25zdCBlbnY6IE5vZGVKUy5Qcm9jZXNzRW52ID0ge1xuICAgIC4uLkNISUxEX0VOVixcbiAgICAuLi5leHRyYUVudlxuICB9O1xuICBjb25zdCBzdGRpbzogJ2luaGVyaXQnIHwgJ3BpcGUnID0gaXNJbnRlcmFjdGl2ZSA/ICdpbmhlcml0JyA6ICdwaXBlJztcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgJiYgY29tbWFuZC5pbmNsdWRlcygnXFxuJykpIHtcbiAgICBpZiAoIXJhd0FyZ3VtZW50cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21tYW5kcyBjb250YWluaW5nIG5ld2xpbmVzIGNhbm5vdCBiZSBleGVjdXRlZCB0aHJvdWdoIGNtZC5leGUgb24gV2luZG93cy4gUGFzcyBhbiBhcmd1bWVudCBhcnJheSBpbnN0ZWFkIG9mIGEgc3RyaW5nLicpO1xuICAgIH1cbiAgICBjb25zdCBbcHJvZ3JhbSwgLi4uJGFyZ3VtZW50c10gPSByYXdBcmd1bWVudHM7XG4gICAgYXNzZXJ0Tm9uTnVsbGFibGUocHJvZ3JhbSwgJ0NvbW1hbmQgYXJyYXkgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICByZXR1cm4gc3Bhd24ocHJvZ3JhbSwgJGFyZ3VtZW50cywge1xuICAgICAgY3dkLFxuICAgICAgZW52LFxuICAgICAgc3RkaW9cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHNoZWxsQ29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyBjb21tYW5kRXNjYXBlQ29tbWFuZExpbmUoY29tbWFuZCkgOiBjb21tYW5kO1xuICByZXR1cm4gc3Bhd24oc2hlbGxDb21tYW5kLCBbXSwge1xuICAgIGN3ZCxcbiAgICBlbnYsXG4gICAgc2hlbGw6IHRydWUsXG4gICAgc3RkaW9cbiAgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsZ0NBQXNCO0FBQ3RCLDBCQUFvQjtBQUVwQixtQkFBK0I7QUFDL0IsMEJBQTRDO0FBQzVDLG9CQUF3QjtBQUN4Qix5QkFBa0M7QUFDbEMsdUJBSU87QUEwSkEsU0FBUyxpQkFBaUIscUJBQXlDLFFBQXdCO0FBQ2hHLFFBQU0sV0FBVyx1QkFBdUIsSUFBSSxLQUFLO0FBQ2pELE1BQUksWUFBWSxJQUFJO0FBQ2xCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxRQUFRLE1BQU0sS0FBSyxFQUFFLFNBQVMsTUFBTSxHQUFHO0FBQ3pDLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxHQUFHLE9BQU8sSUFBSSxNQUFNO0FBQzdCO0FBYU8sU0FBUyxjQUFjLFNBQTRCLDZCQUFxRTtBQUM3SCxRQUFNLE1BQXlCO0FBQUEsSUFDN0IsY0FBYztBQUFBLElBQ2QsR0FBRztBQUFBLEVBQ0w7QUFDQSxNQUFJLDRCQUE0QixJQUFJLHFCQUFxQixHQUFHO0FBQzFELFFBQUksY0FBYyxJQUFJLGlCQUFpQixRQUFRLGNBQWMsR0FBRyx5QkFBeUI7QUFBQSxFQUMzRjtBQUNBLFNBQU87QUFDVDtBQXVDTyxTQUFTLEtBQUssU0FBaUMsVUFBdUIsQ0FBQyxHQUFpQztBQUM3RyxNQUFJLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFDMUIsVUFBTSxjQUFjLHFCQUFxQixTQUFTLE9BQU87QUFDekQsUUFBSSxhQUFhO0FBQ2YsYUFBTztBQUFBLElBQ1Q7QUFDQSxVQUFNLGFBQWEsUUFBUSxPQUFPLENBQUMsU0FBeUIsT0FBTyxTQUFTLFFBQVE7QUFDcEYsVUFBTSxjQUFjLGlCQUFpQixVQUFVO0FBRS9DLFVBQU1BLG9CQUFtQixvQkFBb0I7QUFDN0MsUUFBSSxZQUFZLFNBQVNBLG1CQUFrQjtBQUN6QyxhQUFPLFFBQVE7QUFBQSxRQUNiLElBQUk7QUFBQSxVQUNGLDZCQUE2QixPQUFPLFlBQVksTUFBTSxDQUFDLGVBQWUsT0FBT0EsaUJBQWdCLENBQUMsT0FBTyxvQkFBQUMsUUFBUSxRQUFRO0FBQUEsUUFDdkg7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFdBQU8sV0FBVztBQUFBLE1BQ2hCLFNBQVM7QUFBQSxNQUNUO0FBQUEsTUFDQSxjQUFjO0FBQUEsSUFDaEIsQ0FBQztBQUFBLEVBQ0g7QUFFQSxRQUFNLG1CQUFtQixvQkFBb0I7QUFDN0MsTUFBSSxRQUFRLFNBQVMsa0JBQWtCO0FBQ3JDLFdBQU8sUUFBUTtBQUFBLE1BQ2IsSUFBSTtBQUFBLFFBQ0YsNkJBQTZCLE9BQU8sUUFBUSxNQUFNLENBQUMsZUFBZSxPQUFPLGdCQUFnQixDQUFDLE9BQU8sb0JBQUFBLFFBQVEsUUFBUTtBQUFBLE1BQ25IO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFFQSxTQUFPLFdBQVc7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVFBLFNBQVMsV0FBVyxRQUF3RDtBQUMxRSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0EsVUFBVSxDQUFDO0FBQUEsSUFDWDtBQUFBLEVBQ0YsSUFBSTtBQUNKLFFBQU07QUFBQSxJQUNKLE1BQU0sb0JBQUFBLFFBQVEsSUFBSTtBQUFBLElBQ2xCO0FBQUEsSUFDQSxnQkFBZ0I7QUFBQSxJQUNoQixTQUFTLFFBQVE7QUFBQSxJQUNqQixzQkFBc0IsaUJBQWlCO0FBQUEsSUFDdkMsdUJBQXVCO0FBQUEsSUFDdkIsUUFBUTtBQUFBLEVBQ1YsSUFBSTtBQUVKLFNBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3RDLHFDQUFlLE1BQU0sRUFBRSxzQkFBc0IsT0FBTyxFQUFFO0FBRXRELFVBQU0sUUFBUSxrQkFBYyxpREFBaUQ7QUFBQSxNQUMzRTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGLENBQUMsQ0FBQztBQUVGLFFBQUksU0FBUztBQUNiLFFBQUksU0FBUztBQUdiLFFBQUksQ0FBQyxlQUFlO0FBQ2xCLFlBQU07QUFBQSxRQUNKLFFBQVE7QUFBQSxRQUNSLE9BQU87QUFBQSxRQUNQLFFBQVE7QUFBQSxNQUNWLElBQUk7QUFDSixnREFBa0IsWUFBWSxzQ0FBc0M7QUFDcEUsZ0RBQWtCLGFBQWEsdUNBQXVDO0FBQ3RFLGdEQUFrQixhQUFhLHVDQUF1QztBQUV0RSxpQkFBVyxNQUFNLEtBQUs7QUFDdEIsaUJBQVcsSUFBSTtBQUVmLGtCQUFZLEdBQUcsUUFBUSxDQUFDLFNBQWlCO0FBQ3ZDLFlBQUksQ0FBQyxPQUFPO0FBQ1YsOEJBQUFBLFFBQVEsT0FBTyxNQUFNLElBQUk7QUFBQSxRQUMzQjtBQUNBLGtCQUFVLEtBQUssU0FBUyxPQUFPO0FBQUEsTUFDakMsQ0FBQztBQUVELGtCQUFZLEdBQUcsT0FBTyxNQUFNO0FBQzFCLHFCQUFTLHVCQUFRO0FBQUEsVUFDZixTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVixDQUFDO0FBQUEsTUFDSCxDQUFDO0FBRUQsa0JBQVksR0FBRyxRQUFRLENBQUMsU0FBaUI7QUFDdkMsWUFBSSxDQUFDLE9BQU87QUFDViw4QkFBQUEsUUFBUSxPQUFPLE1BQU0sSUFBSTtBQUFBLFFBQzNCO0FBQ0Esa0JBQVUsS0FBSyxTQUFTLE9BQU87QUFBQSxNQUNqQyxDQUFDO0FBRUQsa0JBQVksR0FBRyxPQUFPLE1BQU07QUFDMUIscUJBQVMsdUJBQVE7QUFBQSxVQUNmLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNWLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNIO0FBRUEsVUFBTSxHQUFHLFNBQVMsQ0FBQyxVQUFVLGVBQWU7QUFDMUMsVUFBSSxhQUFhLEtBQUssQ0FBQyxnQkFBZ0I7QUFDckMsZUFBTyxJQUFJLE1BQU0saUNBQWlDLFdBQVcsT0FBTyxRQUFRLElBQUksUUFBUTtBQUFBLEVBQUssTUFBTSxFQUFFLENBQUM7QUFDdEc7QUFBQSxNQUNGO0FBRUEsVUFBSSxDQUFDLHNCQUFzQjtBQUN6QixnQkFBUSxNQUFNO0FBQ2Q7QUFBQSxNQUNGO0FBQ0EsY0FBUTtBQUFBLFFBQ047QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILENBQUM7QUFFRCxVQUFNLEdBQUcsU0FBUyxDQUFDLFVBQVU7QUFDM0IsVUFBSSxDQUFDLGdCQUFnQjtBQUNuQixlQUFPLEtBQUs7QUFDWjtBQUFBLE1BQ0Y7QUFFQSxVQUFJLENBQUMsc0JBQXNCO0FBQ3pCLGdCQUFRLE1BQU07QUFDZDtBQUFBLE1BQ0Y7QUFFQSxjQUFRO0FBQUEsUUFDTixVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDtBQWNBLE1BQU0sNEJBQTRCO0FBS2xDLE1BQU0sWUFBWSxjQUFjLG9CQUFBQSxRQUFRLEtBQUssb0JBQUFBLFFBQVEsMkJBQTJCO0FBbUVoRixTQUFTLGlCQUFpQixZQUE4QjtBQUN0RCxTQUFPLG9CQUFBQSxRQUFRLGFBQWEsY0FBVSxnQ0FBYyxVQUFVLFFBQUkscUNBQW1CLFVBQVU7QUFDakc7QUFRQSxlQUFlLGVBQWUsUUFBNEQ7QUFDeEYsUUFBTSxFQUFFLGFBQWEsU0FBUyxRQUFRLElBQUk7QUFDMUMsUUFBTSxVQUFvQixDQUFDO0FBRTNCLGFBQVcsU0FBUyxTQUFTO0FBQzNCLFVBQU0sZUFBZSxHQUFHLFdBQVcsSUFBSSxpQkFBaUIsS0FBSyxDQUFDO0FBQzlELFVBQU0sU0FBUyxNQUFNLFdBQVc7QUFBQSxNQUM5QixTQUFTO0FBQUEsTUFDVDtBQUFBLElBQ0YsQ0FBQztBQUNELFFBQUksT0FBTyxXQUFXLFVBQVU7QUFDOUIsY0FBUSxLQUFLLE1BQU07QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFFBQVEsc0JBQXNCO0FBQ2hDLFdBQU8sRUFBRSxVQUFVLEdBQUcsWUFBWSxNQUFNLFFBQVEsSUFBSSxRQUFRLFFBQVEsS0FBSyxJQUFJLEVBQUU7QUFBQSxFQUNqRjtBQUVBLFNBQU8sUUFBUSxLQUFLLElBQUk7QUFDMUI7QUFPQSxTQUFTLHNCQUE4QjtBQUNyQyxRQUFNLDZCQUE2QjtBQUNuQyxRQUFNLDBCQUEwQjtBQUNoQyxTQUFPLG9CQUFBQSxRQUFRLGFBQWEsVUFBVSw2QkFBNkI7QUFDckU7QUFXQSxTQUFTLHFCQUFxQixPQUFzQixTQUFnRTtBQUNsSCxRQUFNLGdCQUFnQixNQUFNLE9BQU8sY0FBYztBQUNqRCxNQUFJLGNBQWMsV0FBVyxHQUFHO0FBQzlCLFdBQU87QUFBQSxFQUNUO0FBQ0EsTUFBSSxjQUFjLFNBQVMsR0FBRztBQUM1QixXQUFPLFFBQVEsT0FBTyxJQUFJLE1BQU0sK0RBQStELENBQUM7QUFBQSxFQUNsRztBQUVBLFFBQU0sZUFBZSxjQUFjLENBQUM7QUFDcEMsNENBQWtCLFlBQVk7QUFDOUIsUUFBTSxjQUFjLE1BQU0sT0FBTyxDQUFDLFNBQXlCLE9BQU8sU0FBUyxRQUFRO0FBQ25GLFFBQU0sY0FBYyxpQkFBaUIsV0FBVztBQUNoRCxRQUFNLG1CQUFtQixvQkFBb0I7QUFHN0MsUUFBTSxjQUFjLEdBQUcsV0FBVyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsYUFBYSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFGLE1BQUksWUFBWSxVQUFVLGtCQUFrQjtBQUMxQyxXQUFPLFdBQVc7QUFBQSxNQUNoQixTQUFTO0FBQUEsTUFDVDtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFHQSxRQUFNLFVBQXNCLENBQUM7QUFDN0IsTUFBSSxlQUF5QixDQUFDO0FBRTlCLGFBQVcsWUFBWSxhQUFhLGtCQUFrQjtBQUNwRCxVQUFNLFlBQVksR0FBRyxXQUFXLElBQUksaUJBQWlCLENBQUMsR0FBRyxjQUFjLFFBQVEsQ0FBQyxDQUFDO0FBQ2pGLFFBQUksVUFBVSxTQUFTLGtCQUFrQjtBQUN2QyxVQUFJLGFBQWEsV0FBVyxHQUFHO0FBQzdCLGVBQU8sUUFBUTtBQUFBLFVBQ2IsSUFBSTtBQUFBLFlBQ0YseURBQXlELE9BQU8sU0FBUyxNQUFNLENBQUMsa0NBQWtDLE9BQU8sWUFBWSxNQUFNLENBQUMsMkNBQTJDLE9BQU8sZ0JBQWdCLENBQUM7QUFBQSxVQUNqTjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0EsY0FBUSxLQUFLLFlBQVk7QUFDekIscUJBQWUsQ0FBQyxRQUFRO0FBQUEsSUFDMUIsT0FBTztBQUNMLG1CQUFhLEtBQUssUUFBUTtBQUFBLElBQzVCO0FBQUEsRUFDRjtBQUVBLE1BQUksYUFBYSxTQUFTLEdBQUc7QUFFM0IsWUFBUSxLQUFLLFlBQVk7QUFBQSxFQUMzQjtBQUVBLFNBQU8sZUFBZTtBQUFBLElBQ3BCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVFBLFNBQVMsZUFBZSxNQUF5QztBQUMvRCxTQUFPLE9BQU8sU0FBUyxZQUFZLHNCQUFzQjtBQUMzRDtBQWNBLFNBQVMsY0FBYyxRQUEyQztBQUNoRSxRQUFNLEVBQUUsU0FBUyxLQUFLLEtBQUssVUFBVSxnQkFBZ0IsT0FBTyxhQUFhLElBQUk7QUFDN0UsUUFBTSxNQUF5QjtBQUFBLElBQzdCLEdBQUc7QUFBQSxJQUNILEdBQUc7QUFBQSxFQUNMO0FBQ0EsUUFBTSxRQUE0QixnQkFBZ0IsWUFBWTtBQUM5RCxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsV0FBVyxRQUFRLFNBQVMsSUFBSSxHQUFHO0FBQzFELFFBQUksQ0FBQyxjQUFjO0FBQ2pCLFlBQU0sSUFBSSxNQUFNLHlIQUF5SDtBQUFBLElBQzNJO0FBQ0EsVUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLElBQUk7QUFDakMsOENBQWtCLFNBQVMsaUNBQWlDO0FBQzVELGVBQU8saUNBQU0sU0FBUyxZQUFZO0FBQUEsTUFDaEM7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFFQSxRQUFNLGVBQWUsb0JBQUFBLFFBQVEsYUFBYSxjQUFVLGlCQUFBQyxzQkFBeUIsT0FBTyxJQUFJO0FBQ3hGLGFBQU8saUNBQU0sY0FBYyxDQUFDLEdBQUc7QUFBQSxJQUM3QjtBQUFBLElBQ0E7QUFBQSxJQUNBLE9BQU87QUFBQSxJQUNQO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbIm1heENvbW1hbmRMZW5ndGgiLCAicHJvY2VzcyIsICJjb21tYW5kRXNjYXBlQ29tbWFuZExpbmUiXQp9Cg==
@@ -5,19 +5,19 @@
5
5
  * Contains utility functions for executing commands.
6
6
  */
7
7
  /**
8
- * A command part: either a plain string or an {@link ExecArg} with batched arguments.
8
+ * A command part: either a plain string or an {@link ExecArgument} with batched arguments.
9
9
  */
10
- export type CommandPart = ExecArg | string;
10
+ export type CommandPart = ExecArgument | string;
11
11
  /**
12
12
  * A command argument that contains a list of args to be batched.
13
13
  * If the expanded command exceeds the platform's max command length,
14
14
  * the batched args are split into sequential executions.
15
15
  */
16
- export interface ExecArg {
16
+ export interface ExecArgument {
17
17
  /**
18
18
  * The arguments to batch.
19
19
  */
20
- readonly batchedArgs: readonly string[];
20
+ readonly batchedArguments: readonly string[];
21
21
  }
22
22
  /**
23
23
  * Options for {@link exec} that return detailed results.
@@ -40,16 +40,11 @@ if you want to view the source, please visit the github repository of this plugi
40
40
  globalThisRecord[key] ??= newFuncs[key]?.();
41
41
  }
42
42
 
43
- function name(obj) {
44
- return obj;
45
- }
46
-
47
43
  function extractDefault(module) {
48
44
  return module && module.__esModule && 'default' in module ? module.default : module;
49
45
  }
50
46
 
51
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
- 'obsidian',
47
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
53
48
  '@codemirror/autocomplete',
54
49
  '@codemirror/collab',
55
50
  '@codemirror/commands',
@@ -60,11 +55,12 @@ if you want to view the source, please visit the github repository of this plugi
60
55
  '@codemirror/text',
61
56
  '@codemirror/view',
62
57
  '@lezer/common',
58
+ '@lezer/highlight',
63
59
  '@lezer/lr',
64
- '@lezer/highlight'];
65
-
60
+ 'obsidian']
61
+ );
66
62
 
67
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
63
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
68
64
  '@codemirror/closebrackets',
69
65
  '@codemirror/comment',
70
66
  '@codemirror/fold',
@@ -76,11 +72,11 @@ if you want to view the source, please visit the github repository of this plugi
76
72
  '@codemirror/rangeset',
77
73
  '@codemirror/rectangular-selection',
78
74
  '@codemirror/stream-parser',
79
- '@codemirror/tooltip'];
80
-
75
+ '@codemirror/tooltip']
76
+ );
81
77
 
82
78
  function requirePatched(id) {
83
- if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
79
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
84
80
  return originalRequire?.(id);
85
81
  }
86
82
 
@@ -89,8 +85,8 @@ if you want to view the source, please visit the github repository of this plugi
89
85
  if (id === 'process' || id === 'node:process') {
90
86
  // eslint-disable-next-line no-console -- Valid usage.
91
87
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
93
- return globalThis.process;
88
+
89
+ return process;
94
90
  }
95
91
  } else {
96
92
  const module = originalRequire?.(id);
@@ -161,10 +157,10 @@ async function format(options) {
161
157
  }
162
158
  const command = rewrite ? "fmt" : "check";
163
159
  const targets = paths?.length ? paths : ["**/*"];
164
- await (0, import_root.execFromRoot)(["npx", "dprint", command, "--config", dprintJsonPath, { batchedArgs: targets }]);
160
+ await (0, import_root.execFromRoot)(["npx", "dprint", command, "--config", dprintJsonPath, { batchedArguments: targets }]);
165
161
  }
166
162
  // Annotate the CommonJS export names for ESM import in node:
167
163
  0 && (module.exports = {
168
164
  format
169
165
  });
170
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9mb3JtYXR0ZXJzL2RwcmludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbG9jYWxSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpO1xuICAgICAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBhY3RpdmVXaW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIH1cblxuICAgICAgLy8gRmFsbGJhY2sgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyB1bmtub3duXG4gICAgICByZXR1cm4gJyc7XG4gICAgfSkoKTtcbi8qKlxuICogQGZpbGVcbiAqXG4gKiBGb3JtYXQgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0IHtcbiAgZ2V0Rm9sZGVyTmFtZSxcbiAgam9pblxufSBmcm9tICcuLi8uLi9wYXRoLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBmb3JtYXR9IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBmb3JtYXQuIElmIG9taXR0ZWQsIGZvcm1hdHMgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXdyaXRlIHRoZSBzb3VyY2UgY29kZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSByZXdyaXRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBGb3JtYXQgdGhlIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBGb3JtYXRPcHRpb25zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc291cmNlIGNvZGUgaGFzIGJlZW4gZm9ybWF0dGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZm9ybWF0KG9wdGlvbnM/OiBGb3JtYXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcGF0aHMsIHJld3JpdGUgPSB0cnVlIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCByb290Rm9sZGVyID0gZ2V0Um9vdEZvbGRlcigpO1xuICBhc3NlcnROb25OdWxsYWJsZShyb290Rm9sZGVyLCAnUm9vdCBmb2xkZXIgbm90IGZvdW5kJyk7XG4gIGxldCBkcHJpbnRKc29uUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EcHJpbnRKc29uIH0pO1xuICBpZiAoIWV4aXN0c1N5bmMoZHByaW50SnNvblBhdGgpKSB7XG4gICAgY29uc3QgcGFja2FnZUZvbGRlciA9IGdldFJvb3RGb2xkZXIoZ2V0Rm9sZGVyTmFtZShpbXBvcnQubWV0YS51cmwpKTtcbiAgICBhc3NlcnROb25OdWxsYWJsZShwYWNrYWdlRm9sZGVyLCAnQ291bGQgbm90IGZpbmQgcGFja2FnZSBmb2xkZXIuJyk7XG4gICAgZHByaW50SnNvblBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IGN3ZDogcGFja2FnZUZvbGRlciwgcGF0aDogam9pbihPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3RUZW1wbGF0ZXMsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRHByaW50SnNvbikgfSk7XG4gIH1cblxuICBpZiAoIWV4aXN0c1N5bmMoZHByaW50SnNvblBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkcHJpbnQuanNvbiBub3QgZm91bmQnKTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1hbmQgPSByZXdyaXRlID8gJ2ZtdCcgOiAnY2hlY2snO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbJyoqLyonXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsnbnB4JywgJ2RwcmludCcsIGNvbW1hbmQsICctLWNvbmZpZycsIGRwcmludEpzb25QYXRoLCB7IGJhdGNoZWRBcmdzOiB0YXJnZXRzIH1dKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNCQSxxQkFBMkI7QUFFM0Isa0JBR087QUFDUCx5QkFBa0M7QUFDbEMsMkNBQTBDO0FBQzFDLGtCQUlPO0FBbENQLElBQUksb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0sTUFBTTtBQUMxRCxNQUFJLE9BQU8sZUFBZSxVQUFVO0FBQ2xDLFVBQU0sZUFBZTtBQUNyQixVQUFNLE1BQU0sYUFBYSxVQUFVO0FBQ25DLFFBQUksT0FBTyxJQUFJLGtCQUFrQixZQUFZO0FBQzNDLGFBQU8sSUFBSSxjQUFjLFVBQVUsRUFBRTtBQUFBLElBQ3ZDO0FBQUEsRUFDRjtBQUVBLE1BQUksT0FBTyxXQUFXLGFBQWE7QUFDakMsV0FBTyxhQUFhLFNBQVM7QUFBQSxFQUMvQjtBQUdBLFNBQU87QUFDVCxHQUFHO0FBNENQLGVBQXNCLE9BQU8sU0FBd0M7QUFDbkUsUUFBTSxFQUFFLE9BQU8sVUFBVSxLQUFLLElBQUksV0FBVyxDQUFDO0FBQzlDLFFBQU0saUJBQWEsMkJBQWM7QUFDakMsNENBQWtCLFlBQVksdUJBQXVCO0FBQ3JELE1BQUkscUJBQWlCLHFDQUF3QixFQUFFLE1BQU0sK0RBQTBCLFdBQVcsQ0FBQztBQUMzRixNQUFJLEtBQUMsMkJBQVcsY0FBYyxHQUFHO0FBQy9CLFVBQU0sb0JBQWdCLCtCQUFjLDJCQUFjLGlCQUFlLENBQUM7QUFDbEUsOENBQWtCLGVBQWUsZ0NBQWdDO0FBQ2pFLHlCQUFpQixxQ0FBd0IsRUFBRSxLQUFLLGVBQWUsVUFBTSxrQkFBSywrREFBMEIsZUFBZSwrREFBMEIsVUFBVSxFQUFFLENBQUM7QUFBQSxFQUM1SjtBQUVBLE1BQUksS0FBQywyQkFBVyxjQUFjLEdBQUc7QUFDL0IsVUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQUEsRUFDekM7QUFFQSxRQUFNLFVBQVUsVUFBVSxRQUFRO0FBRWxDLFFBQU0sVUFBVSxPQUFPLFNBQVMsUUFBUSxDQUFDLE1BQU07QUFFL0MsWUFBTSwwQkFBYSxDQUFDLE9BQU8sVUFBVSxTQUFTLFlBQVksZ0JBQWdCLEVBQUUsYUFBYSxRQUFRLENBQUMsQ0FBQztBQUNyRzsiLAogICJuYW1lcyI6IFtdCn0K
166
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9mb3JtYXR0ZXJzL2RwcmludC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsidmFyIF9faW1wb3J0X21ldGFfdXJsID0gZ2xvYmFsVGhpc1snaW1wb3J0Lm1ldGEudXJsJ10gPz8gKCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgX19maWxlbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbG9jYWxSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgY29uc3QgdXJsID0gbG9jYWxSZXF1aXJlKCdub2RlOnVybCcpO1xuICAgICAgICBpZiAodHlwZW9mIHVybC5wYXRoVG9GaWxlVVJMID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIHVybC5wYXRoVG9GaWxlVVJMKF9fZmlsZW5hbWUpLmhyZWY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBhY3RpdmVXaW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIH1cblxuICAgICAgLy8gRmFsbGJhY2sgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBlbnZpcm9ubWVudCBpcyB1bmtub3duXG4gICAgICByZXR1cm4gJyc7XG4gICAgfSkoKTtcbi8qKlxuICogQGZpbGVcbiAqXG4gKiBGb3JtYXQgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0IHtcbiAgZ2V0Rm9sZGVyTmFtZSxcbiAgam9pblxufSBmcm9tICcuLi8uLi9wYXRoLnRzJztcbmltcG9ydCB7IGFzc2VydE5vbk51bGxhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHsgT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocyB9IGZyb20gJy4uL29ic2lkaWFuLWRldi11dGlscy1yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBmb3JtYXR9IGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBmb3JtYXQuIElmIG9taXR0ZWQsIGZvcm1hdHMgdGhlIGVudGlyZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXdyaXRlIHRoZSBzb3VyY2UgY29kZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSByZXdyaXRlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBGb3JtYXQgdGhlIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBGb3JtYXRPcHRpb25zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc291cmNlIGNvZGUgaGFzIGJlZW4gZm9ybWF0dGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZm9ybWF0KG9wdGlvbnM/OiBGb3JtYXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcGF0aHMsIHJld3JpdGUgPSB0cnVlIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCByb290Rm9sZGVyID0gZ2V0Um9vdEZvbGRlcigpO1xuICBhc3NlcnROb25OdWxsYWJsZShyb290Rm9sZGVyLCAnUm9vdCBmb2xkZXIgbm90IGZvdW5kJyk7XG4gIGxldCBkcHJpbnRKc29uUGF0aCA9IHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogT2JzaWRpYW5EZXZVdGlsc1JlcG9QYXRocy5EcHJpbnRKc29uIH0pO1xuICBpZiAoIWV4aXN0c1N5bmMoZHByaW50SnNvblBhdGgpKSB7XG4gICAgY29uc3QgcGFja2FnZUZvbGRlciA9IGdldFJvb3RGb2xkZXIoZ2V0Rm9sZGVyTmFtZShpbXBvcnQubWV0YS51cmwpKTtcbiAgICBhc3NlcnROb25OdWxsYWJsZShwYWNrYWdlRm9sZGVyLCAnQ291bGQgbm90IGZpbmQgcGFja2FnZSBmb2xkZXIuJyk7XG4gICAgZHByaW50SnNvblBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IGN3ZDogcGFja2FnZUZvbGRlciwgcGF0aDogam9pbihPYnNpZGlhbkRldlV0aWxzUmVwb1BhdGhzLkRpc3RUZW1wbGF0ZXMsIE9ic2lkaWFuRGV2VXRpbHNSZXBvUGF0aHMuRHByaW50SnNvbikgfSk7XG4gIH1cblxuICBpZiAoIWV4aXN0c1N5bmMoZHByaW50SnNvblBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdkcHJpbnQuanNvbiBub3QgZm91bmQnKTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1hbmQgPSByZXdyaXRlID8gJ2ZtdCcgOiAnY2hlY2snO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbJyoqLyonXTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsnbnB4JywgJ2RwcmludCcsIGNvbW1hbmQsICctLWNvbmZpZycsIGRwcmludEpzb25QYXRoLCB7IGJhdGNoZWRBcmd1bWVudHM6IHRhcmdldHMgfV0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzQkEscUJBQTJCO0FBRTNCLGtCQUdPO0FBQ1AseUJBQWtDO0FBQ2xDLDJDQUEwQztBQUMxQyxrQkFJTztBQWxDUCxJQUFJLG9CQUFvQixXQUFXLGlCQUFpQixNQUFNLE1BQU07QUFDMUQsTUFBSSxPQUFPLGVBQWUsVUFBVTtBQUNsQyxVQUFNLGVBQWU7QUFDckIsVUFBTSxNQUFNLGFBQWEsVUFBVTtBQUNuQyxRQUFJLE9BQU8sSUFBSSxrQkFBa0IsWUFBWTtBQUMzQyxhQUFPLElBQUksY0FBYyxVQUFVLEVBQUU7QUFBQSxJQUN2QztBQUFBLEVBQ0Y7QUFFQSxNQUFJLE9BQU8sV0FBVyxhQUFhO0FBQ2pDLFdBQU8sYUFBYSxTQUFTO0FBQUEsRUFDL0I7QUFHQSxTQUFPO0FBQ1QsR0FBRztBQTRDUCxlQUFzQixPQUFPLFNBQXdDO0FBQ25FLFFBQU0sRUFBRSxPQUFPLFVBQVUsS0FBSyxJQUFJLFdBQVcsQ0FBQztBQUM5QyxRQUFNLGlCQUFhLDJCQUFjO0FBQ2pDLDRDQUFrQixZQUFZLHVCQUF1QjtBQUNyRCxNQUFJLHFCQUFpQixxQ0FBd0IsRUFBRSxNQUFNLCtEQUEwQixXQUFXLENBQUM7QUFDM0YsTUFBSSxLQUFDLDJCQUFXLGNBQWMsR0FBRztBQUMvQixVQUFNLG9CQUFnQiwrQkFBYywyQkFBYyxpQkFBZSxDQUFDO0FBQ2xFLDhDQUFrQixlQUFlLGdDQUFnQztBQUNqRSx5QkFBaUIscUNBQXdCLEVBQUUsS0FBSyxlQUFlLFVBQU0sa0JBQUssK0RBQTBCLGVBQWUsK0RBQTBCLFVBQVUsRUFBRSxDQUFDO0FBQUEsRUFDNUo7QUFFQSxNQUFJLEtBQUMsMkJBQVcsY0FBYyxHQUFHO0FBQy9CLFVBQU0sSUFBSSxNQUFNLHVCQUF1QjtBQUFBLEVBQ3pDO0FBRUEsUUFBTSxVQUFVLFVBQVUsUUFBUTtBQUVsQyxRQUFNLFVBQVUsT0FBTyxTQUFTLFFBQVEsQ0FBQyxNQUFNO0FBRS9DLFlBQU0sMEJBQWEsQ0FBQyxPQUFPLFVBQVUsU0FBUyxZQUFZLGdCQUFnQixFQUFFLGtCQUFrQixRQUFRLENBQUMsQ0FBQztBQUMxRzsiLAogICJuYW1lcyI6IFtdCn0K
@@ -40,16 +40,11 @@ if you want to view the source, please visit the github repository of this plugi
40
40
  globalThisRecord[key] ??= newFuncs[key]?.();
41
41
  }
42
42
 
43
- function name(obj) {
44
- return obj;
45
- }
46
-
47
43
  function extractDefault(module) {
48
44
  return module && module.__esModule && 'default' in module ? module.default : module;
49
45
  }
50
46
 
51
- const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
52
- 'obsidian',
47
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
53
48
  '@codemirror/autocomplete',
54
49
  '@codemirror/collab',
55
50
  '@codemirror/commands',
@@ -60,11 +55,12 @@ if you want to view the source, please visit the github repository of this plugi
60
55
  '@codemirror/text',
61
56
  '@codemirror/view',
62
57
  '@lezer/common',
58
+ '@lezer/highlight',
63
59
  '@lezer/lr',
64
- '@lezer/highlight'];
65
-
60
+ 'obsidian']
61
+ );
66
62
 
67
- const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
63
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
68
64
  '@codemirror/closebrackets',
69
65
  '@codemirror/comment',
70
66
  '@codemirror/fold',
@@ -76,11 +72,11 @@ if you want to view the source, please visit the github repository of this plugi
76
72
  '@codemirror/rangeset',
77
73
  '@codemirror/rectangular-selection',
78
74
  '@codemirror/stream-parser',
79
- '@codemirror/tooltip'];
80
-
75
+ '@codemirror/tooltip']
76
+ );
81
77
 
82
78
  function requirePatched(id) {
83
- if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
79
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
84
80
  return originalRequire?.(id);
85
81
  }
86
82
 
@@ -89,8 +85,8 @@ if you want to view the source, please visit the github repository of this plugi
89
85
  if (id === 'process' || id === 'node:process') {
90
86
  // eslint-disable-next-line no-console -- Valid usage.
91
87
  console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
92
- // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
93
- return globalThis.process;
88
+
89
+ return process;
94
90
  }
95
91
  } else {
96
92
  const module = originalRequire?.(id);
@@ -143,4 +139,4 @@ var dprint = __toESM(__extractDefault(require('./dprint.cjs')), 1);
143
139
  0 && (module.exports = {
144
140
  dprint
145
141
  });
146
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9mb3JtYXR0ZXJzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2RwcmludCcgZnJvbSAnLi9kcHJpbnQudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBLGFBQTBCOyIsCiAgIm5hbWVzIjogW10KfQo=
142
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9mb3JtYXR0ZXJzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2RwcmludCcgZnJvbSAnLi9kcHJpbnQudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUEsYUFBMEI7IiwKICAibmFtZXMiOiBbXQp9Cg==