@mnaoumov/obsidian-lib 10.11.0 → 11.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 (460) hide show
  1. package/README.md +26 -0
  2. package/components/all-windows-status-bar-item-component/package.json +6 -0
  3. package/components/shared-component-pool-component/package.json +6 -0
  4. package/components/worker-component/package.json +6 -0
  5. package/components/worker-pool-component/package.json +6 -0
  6. package/components/workspace-layout-state-component/package.json +6 -0
  7. package/dist/lib/cjs/__merged.cjs +477 -285
  8. package/dist/lib/cjs/__merged.d.cts +26 -10
  9. package/dist/lib/cjs/anchored-suggest.cjs +1 -1
  10. package/dist/lib/cjs/app.cjs +2 -2
  11. package/dist/lib/cjs/async-with-notice.cjs +4 -4
  12. package/dist/lib/cjs/attachment-path.cjs +9 -9
  13. package/dist/lib/cjs/attachment-path.d.cts +3 -3
  14. package/dist/lib/cjs/attachment-unit-folder.cjs +2 -2
  15. package/dist/lib/cjs/backlink-index.cjs +5 -5
  16. package/dist/lib/cjs/backlink.cjs +7 -7
  17. package/dist/lib/cjs/bases-view-registrar.cjs +1 -1
  18. package/dist/lib/cjs/broken-link-candidates.cjs +1 -1
  19. package/dist/lib/cjs/bug-report-diagnostics.cjs +222 -0
  20. package/dist/lib/cjs/bug-report-diagnostics.d.cts +186 -0
  21. package/dist/lib/cjs/bug-report.cjs +38 -12
  22. package/dist/lib/cjs/bug-report.d.cts +65 -0
  23. package/dist/lib/cjs/bulk-operation-progress.cjs +1 -1
  24. package/dist/lib/cjs/bulk-operation.cjs +2 -2
  25. package/dist/lib/cjs/callout.cjs +6 -6
  26. package/dist/lib/cjs/canvas.cjs +11 -9
  27. package/dist/lib/cjs/canvas.d.cts +13 -0
  28. package/dist/lib/cjs/case-insensitive-file-index.cjs +3 -3
  29. package/dist/lib/cjs/code-block-render-handoff.cjs +5 -5
  30. package/dist/lib/cjs/codemirror/editor-mode-extension.cjs +4 -4
  31. package/dist/lib/cjs/codemirror/incremental-parse-state-field.cjs +2 -2
  32. package/dist/lib/cjs/codemirror/index.cjs +7 -7
  33. package/dist/lib/cjs/codemirror/inline-token-widgets.cjs +5 -5
  34. package/dist/lib/cjs/codemirror/markdown-editor-views.cjs +2 -2
  35. package/dist/lib/cjs/codemirror/settings-facet.cjs +1 -1
  36. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +17 -17
  37. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +13 -13
  38. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -2
  39. package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -2
  40. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +10 -10
  41. package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +7 -7
  42. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +3 -3
  43. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +3 -3
  44. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +2 -2
  45. package/dist/lib/cjs/command-handlers/index.cjs +15 -15
  46. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +95 -4
  47. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +34 -2
  48. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -2
  49. package/dist/lib/cjs/command-handlers/open-discussion-command-handler.cjs +2 -2
  50. package/dist/lib/cjs/command-handlers/open-feature-request-command-handler.cjs +2 -2
  51. package/dist/lib/cjs/command-handlers/open-git-hub-command-handler.cjs +1 -1
  52. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +2 -2
  53. package/dist/lib/cjs/command-handlers/undo-bulk-operation-command-handler.cjs +2 -2
  54. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -1
  55. package/dist/lib/cjs/community-plugins.cjs +3 -3
  56. package/dist/lib/cjs/components/abort-signal-component.cjs +2 -2
  57. package/dist/lib/cjs/components/all-windows-event-component.cjs +5 -5
  58. package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +245 -0
  59. package/dist/lib/cjs/components/all-windows-status-bar-item-component.d.cts +146 -0
  60. package/dist/lib/cjs/components/async-error-handler-component.cjs +5 -5
  61. package/dist/lib/cjs/components/async-events-component.cjs +1 -1
  62. package/dist/lib/cjs/components/bulk-operation-commit-component.cjs +12 -12
  63. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +2 -2
  64. package/dist/lib/cjs/components/component-ex.cjs +21 -11
  65. package/dist/lib/cjs/components/component-ex.d.cts +11 -0
  66. package/dist/lib/cjs/components/console-debug-component.cjs +2 -2
  67. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -2
  68. package/dist/lib/cjs/components/disposable-component.cjs +2 -2
  69. package/dist/lib/cjs/components/embed-extensions-component.cjs +21 -4
  70. package/dist/lib/cjs/components/embed-extensions-component.d.cts +8 -0
  71. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +24 -10
  72. package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +9 -0
  73. package/dist/lib/cjs/components/file-explorer-root-menu-component.cjs +7 -7
  74. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +2 -2
  75. package/dist/lib/cjs/components/incremental-file-index-component.cjs +4 -4
  76. package/dist/lib/cjs/components/index.cjs +54 -39
  77. package/dist/lib/cjs/components/index.d.cts +5 -0
  78. package/dist/lib/cjs/components/layout-ready-component.cjs +3 -3
  79. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +2 -2
  80. package/dist/lib/cjs/components/monkey-around-component.cjs +3 -3
  81. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +5 -5
  82. package/dist/lib/cjs/components/plugin-context-component.cjs +5 -5
  83. package/dist/lib/cjs/components/plugin-gate-component.cjs +69 -36
  84. package/dist/lib/cjs/components/plugin-gate-component.d.cts +36 -13
  85. package/dist/lib/cjs/components/plugin-notice-component.cjs +39 -33
  86. package/dist/lib/cjs/components/plugin-notice-component.d.cts +4 -3
  87. package/dist/lib/cjs/components/plugin-settings-component.cjs +119 -18
  88. package/dist/lib/cjs/components/plugin-settings-component.d.cts +35 -5
  89. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -2
  90. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +8 -8
  91. package/dist/lib/cjs/components/pointer-position-component.cjs +2 -2
  92. package/dist/lib/cjs/components/reconfigurable-editor-extension-component.cjs +3 -3
  93. package/dist/lib/cjs/components/registry-component.cjs +2 -2
  94. package/dist/lib/cjs/components/release-notes-component.cjs +6 -6
  95. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +25 -25
  96. package/dist/lib/cjs/components/rmdir-guard-component.cjs +2 -2
  97. package/dist/lib/cjs/components/settings-facet-component.cjs +1 -1
  98. package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
  99. package/dist/lib/cjs/components/shared-component-pool-component.cjs +368 -0
  100. package/dist/lib/cjs/components/shared-component-pool-component.d.cts +129 -0
  101. package/dist/lib/cjs/components/style-sheet-component.cjs +3 -3
  102. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +3 -3
  103. package/dist/lib/cjs/components/templates-language-component.cjs +1 -1
  104. package/dist/lib/cjs/components/worker-component.cjs +363 -0
  105. package/dist/lib/cjs/components/worker-component.d.cts +156 -0
  106. package/dist/lib/cjs/components/worker-pool-component.cjs +185 -0
  107. package/dist/lib/cjs/components/worker-pool-component.d.cts +102 -0
  108. package/dist/lib/cjs/components/workspace-layout-state-component.cjs +495 -0
  109. package/dist/lib/cjs/components/workspace-layout-state-component.d.cts +239 -0
  110. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +5 -5
  111. package/dist/lib/cjs/constructors/index.cjs +1 -1
  112. package/dist/lib/cjs/css-class.cjs +5 -1
  113. package/dist/lib/cjs/css-class.d.cts +16 -0
  114. package/dist/lib/cjs/data-handler.cjs +264 -6
  115. package/dist/lib/cjs/data-handler.d.cts +219 -2
  116. package/dist/lib/cjs/data-stores/data-store-locations.cjs +82 -24
  117. package/dist/lib/cjs/data-stores/data-store-locations.d.cts +15 -0
  118. package/dist/lib/cjs/data-stores/data-store-replica.cjs +33 -5
  119. package/dist/lib/cjs/data-stores/data-store-seeds.cjs +6 -6
  120. package/dist/lib/cjs/data-stores/data-store-seeds.d.cts +2 -2
  121. package/dist/lib/cjs/data-stores/data-store-transport.cjs +81 -8
  122. package/dist/lib/cjs/data-stores/data-store-transport.d.cts +30 -1
  123. package/dist/lib/cjs/data-stores/index.cjs +6 -6
  124. package/dist/lib/cjs/data-stores/local-data-store.cjs +74 -10
  125. package/dist/lib/cjs/data-stores/local-data-store.d.cts +58 -1
  126. package/dist/lib/cjs/data-stores/shared-data-store.cjs +76 -19
  127. package/dist/lib/cjs/data-stores/shared-data-store.d.cts +18 -1
  128. package/dist/lib/cjs/dataview-link.cjs +2 -2
  129. package/dist/lib/cjs/dataview.cjs +27 -7
  130. package/dist/lib/cjs/dataview.d.cts +14 -0
  131. package/dist/lib/cjs/debug.cjs +3 -3
  132. package/dist/lib/cjs/demo-vault-helper.cjs +34 -6
  133. package/dist/lib/cjs/demo-vault-helper.d.cts +6 -2
  134. package/dist/lib/cjs/desktop-bulk-operation-git.cjs +10 -10
  135. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +13 -13
  136. package/dist/lib/cjs/desktop-git-runner.cjs +4 -14
  137. package/dist/lib/cjs/desktop-git-runner.d.cts +8 -2
  138. package/dist/lib/cjs/desktop-operating-system.cjs +1 -1
  139. package/dist/lib/cjs/desktop-request-url-stream.cjs +8 -14
  140. package/dist/lib/cjs/desktop-trusted-input.cjs +2 -2
  141. package/dist/lib/cjs/disposable.cjs +150 -0
  142. package/dist/lib/cjs/disposable.d.cts +39 -0
  143. package/dist/lib/cjs/editor-extension-registrar.cjs +1 -1
  144. package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -2
  145. package/dist/lib/cjs/editor-suggest.cjs +1 -1
  146. package/dist/lib/cjs/editor.cjs +6 -6
  147. package/dist/lib/cjs/events.cjs +2 -2
  148. package/dist/lib/cjs/extensions-registrar.cjs +1 -1
  149. package/dist/lib/cjs/feature-request.cjs +1 -1
  150. package/dist/lib/cjs/file-change.cjs +10 -10
  151. package/dist/lib/cjs/file-explorer.cjs +2 -2
  152. package/dist/lib/cjs/file-manager.cjs +5 -5
  153. package/dist/lib/cjs/file-system.cjs +10 -10
  154. package/dist/lib/cjs/folder-note.cjs +4 -4
  155. package/dist/lib/cjs/frontmatter-formatting.cjs +7 -6
  156. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +1 -1
  157. package/dist/lib/cjs/frontmatter.cjs +5 -5
  158. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  159. package/dist/lib/cjs/git-rename-history.cjs +1 -1
  160. package/dist/lib/cjs/git-rename-history.d.cts +2 -2
  161. package/dist/lib/cjs/hotkey.cjs +1 -1
  162. package/dist/lib/cjs/hover-link-source-registrar.cjs +1 -1
  163. package/dist/lib/cjs/html-element.cjs +2 -2
  164. package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -1
  165. package/dist/lib/cjs/i18n/default-translations.cjs +1 -1
  166. package/dist/lib/cjs/i18n/i18n.cjs +7 -7
  167. package/dist/lib/cjs/i18n/index.cjs +4 -4
  168. package/dist/lib/cjs/i18n/locales/en.cjs +27 -1
  169. package/dist/lib/cjs/i18n/locales/en.d.cts +26 -0
  170. package/dist/lib/cjs/i18n/locales/index.cjs +2 -2
  171. package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -1
  172. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +26 -0
  173. package/dist/lib/cjs/index.cjs +147 -126
  174. package/dist/lib/cjs/index.d.cts +7 -0
  175. package/dist/lib/cjs/inline-token-renderer.cjs +2 -2
  176. package/dist/lib/cjs/is-in-obsidian.cjs +1 -1
  177. package/dist/lib/cjs/library-styles.cjs +3 -3
  178. package/dist/lib/cjs/link-and-tag-input-suggest.cjs +2 -2
  179. package/dist/lib/cjs/link.cjs +76 -56
  180. package/dist/lib/cjs/link.d.cts +20 -14
  181. package/dist/lib/cjs/logger.cjs +4 -4
  182. package/dist/lib/cjs/loop.cjs +10 -16
  183. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +17 -2
  184. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +7 -0
  185. package/dist/lib/cjs/markdown-code-block-processor.cjs +13 -13
  186. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -2
  187. package/dist/lib/cjs/markdown-view.cjs +191 -3
  188. package/dist/lib/cjs/markdown-view.d.cts +48 -1
  189. package/dist/lib/cjs/markdown.cjs +12 -12
  190. package/dist/lib/cjs/metadata-cache.cjs +23 -23
  191. package/dist/lib/cjs/metadata-cache.d.cts +5 -4
  192. package/dist/lib/cjs/misplaced-attachment.cjs +297 -0
  193. package/dist/lib/cjs/misplaced-attachment.d.cts +228 -0
  194. package/dist/lib/cjs/mobile-app-info.cjs +1 -1
  195. package/dist/lib/cjs/modals/alert.cjs +4 -4
  196. package/dist/lib/cjs/modals/code-block-builder.cjs +7 -7
  197. package/dist/lib/cjs/modals/confirm.cjs +4 -4
  198. package/dist/lib/cjs/modals/copy-text-manually.cjs +181 -0
  199. package/dist/lib/cjs/modals/copy-text-manually.d.cts +38 -0
  200. package/dist/lib/cjs/modals/index.cjs +17 -11
  201. package/dist/lib/cjs/modals/index.d.cts +2 -0
  202. package/dist/lib/cjs/modals/minimizable-modal.cjs +6 -6
  203. package/dist/lib/cjs/modals/modal-command-builder.cjs +3 -3
  204. package/dist/lib/cjs/modals/modal.cjs +3 -3
  205. package/dist/lib/cjs/modals/prompt.cjs +10 -10
  206. package/dist/lib/cjs/modals/prompt.d.cts +1 -1
  207. package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +202 -0
  208. package/dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts +30 -0
  209. package/dist/lib/cjs/modals/select-item.cjs +6 -6
  210. package/dist/lib/cjs/modals/select-option.cjs +3 -3
  211. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
  212. package/dist/lib/cjs/note-priority.cjs +2 -2
  213. package/dist/lib/cjs/notebook-navigator.cjs +12 -2
  214. package/dist/lib/cjs/notebook-navigator.d.cts +6 -0
  215. package/dist/lib/cjs/obsidian-lib-state.cjs +1 -1
  216. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +1 -1
  217. package/dist/lib/cjs/obsidian-settings.cjs +1 -1
  218. package/dist/lib/cjs/obsidian-word-characters.cjs +1 -1
  219. package/dist/lib/cjs/parse-link.cjs +14 -14
  220. package/dist/lib/cjs/path-compatibility.cjs +368 -0
  221. package/dist/lib/cjs/path-compatibility.d.cts +263 -0
  222. package/dist/lib/cjs/path-settings.cjs +3 -3
  223. package/dist/lib/cjs/pdf.cjs +2 -2
  224. package/dist/lib/cjs/plugin/index.cjs +18 -12
  225. package/dist/lib/cjs/plugin/index.d.cts +2 -0
  226. package/dist/lib/cjs/plugin/plugin-api.cjs +21 -12
  227. package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -1
  228. package/dist/lib/cjs/plugin/plugin-async-cleanup.cjs +6 -3
  229. package/dist/lib/cjs/plugin/plugin-async-cleanup.d.cts +5 -0
  230. package/dist/lib/cjs/plugin/plugin-context.cjs +10 -9
  231. package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -1
  232. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +4 -4
  233. package/dist/lib/cjs/plugin/plugin-install-state.cjs +49 -4
  234. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +30 -0
  235. package/dist/lib/cjs/plugin/plugin-instance.cjs +450 -0
  236. package/dist/lib/cjs/plugin/plugin-instance.d.cts +258 -0
  237. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -1
  238. package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +6 -4
  239. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +15 -15
  240. package/dist/lib/cjs/plugin/plugin.cjs +133 -34
  241. package/dist/lib/cjs/plugin/plugin.d.cts +35 -5
  242. package/dist/lib/cjs/plugin/settings-migration-api.cjs +1 -1
  243. package/dist/lib/cjs/plugin/third-party-plugin.cjs +231 -0
  244. package/dist/lib/cjs/plugin/third-party-plugin.d.cts +244 -0
  245. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -2
  246. package/dist/lib/cjs/popovers/field-popover.cjs +4 -4
  247. package/dist/lib/cjs/popovers/index.cjs +3 -3
  248. package/dist/lib/cjs/popovers/popover-anchor.cjs +1 -1
  249. package/dist/lib/cjs/popovers/popover.cjs +5 -5
  250. package/dist/lib/cjs/queue.cjs +8 -8
  251. package/dist/lib/cjs/react/app-context.cjs +3 -3
  252. package/dist/lib/cjs/react/index.cjs +1 -1
  253. package/dist/lib/cjs/reference-definition.cjs +1 -1
  254. package/dist/lib/cjs/reference.cjs +3 -3
  255. package/dist/lib/cjs/release-asset.cjs +5 -5
  256. package/dist/lib/cjs/rendered-markdown.cjs +4 -4
  257. package/dist/lib/cjs/request-url.cjs +4 -4
  258. package/dist/lib/cjs/resource-lock.cjs +46 -42
  259. package/dist/lib/cjs/resource-lock.d.cts +8 -7
  260. package/dist/lib/cjs/resource-url.cjs +3 -3
  261. package/dist/lib/cjs/ribbon-icon-registrar.cjs +1 -1
  262. package/dist/lib/cjs/setting-components/checkbox-component.cjs +3 -3
  263. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +7 -7
  264. package/dist/lib/cjs/setting-components/date-component.cjs +4 -4
  265. package/dist/lib/cjs/setting-components/date-time-component.cjs +4 -4
  266. package/dist/lib/cjs/setting-components/email-component.cjs +2 -2
  267. package/dist/lib/cjs/setting-components/file-component.cjs +2 -2
  268. package/dist/lib/cjs/setting-components/folder-list-component.cjs +3 -3
  269. package/dist/lib/cjs/setting-components/hotkey-component.cjs +5 -5
  270. package/dist/lib/cjs/setting-components/index.cjs +30 -30
  271. package/dist/lib/cjs/setting-components/list-component.cjs +5 -5
  272. package/dist/lib/cjs/setting-components/month-component.cjs +4 -4
  273. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +3 -3
  274. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +2 -2
  275. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +3 -3
  276. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +9 -6
  277. package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +4 -1
  278. package/dist/lib/cjs/setting-components/number-component.cjs +2 -2
  279. package/dist/lib/cjs/setting-components/password-component.cjs +2 -2
  280. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +3 -3
  281. package/dist/lib/cjs/setting-components/tag-list-component.cjs +4 -4
  282. package/dist/lib/cjs/setting-components/telephone-component.cjs +2 -2
  283. package/dist/lib/cjs/setting-components/text-based-component.cjs +1 -1
  284. package/dist/lib/cjs/setting-components/time-component.cjs +3 -3
  285. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +3 -3
  286. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +3 -3
  287. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +4 -4
  288. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -1
  289. package/dist/lib/cjs/setting-components/typed-text-component.cjs +3 -3
  290. package/dist/lib/cjs/setting-components/url-component.cjs +2 -2
  291. package/dist/lib/cjs/setting-components/validator-component.cjs +4 -4
  292. package/dist/lib/cjs/setting-components/week-component.cjs +4 -4
  293. package/dist/lib/cjs/setting-ex.cjs +26 -26
  294. package/dist/lib/cjs/setting-group-ex.cjs +2 -2
  295. package/dist/lib/cjs/settings-recovery.cjs +217 -0
  296. package/dist/lib/cjs/settings-recovery.d.cts +178 -0
  297. package/dist/lib/cjs/settings-tabs.cjs +5 -5
  298. package/dist/lib/cjs/status-bar-item-registrar.cjs +1 -1
  299. package/dist/lib/cjs/templater.cjs +14 -4
  300. package/dist/lib/cjs/templater.d.cts +6 -0
  301. package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -2
  302. package/dist/lib/cjs/transformers/index.cjs +1 -1
  303. package/dist/lib/cjs/trusted-input.cjs +1 -1
  304. package/dist/lib/cjs/validation.cjs +4 -4
  305. package/dist/lib/cjs/vault-delete.cjs +6 -6
  306. package/dist/lib/cjs/vault-transaction.cjs +5 -5
  307. package/dist/lib/cjs/vault.cjs +12 -12
  308. package/dist/lib/cjs/view-registrar.cjs +1 -1
  309. package/dist/lib/cjs/virtual-file.cjs +16 -14
  310. package/dist/lib/cjs/virtual-file.d.cts +2 -1
  311. package/dist/lib/cjs/wasm.cjs +119 -0
  312. package/dist/lib/cjs/wasm.d.cts +54 -0
  313. package/dist/lib/cjs/worker-protocol.cjs +209 -0
  314. package/dist/lib/cjs/worker-protocol.d.cts +282 -0
  315. package/dist/lib/cjs/workspace.cjs +1 -1
  316. package/dist/lib/esm/__merged.d.mts +26 -10
  317. package/dist/lib/esm/__merged.mjs +215 -5
  318. package/dist/lib/esm/app.mjs +2 -2
  319. package/dist/lib/esm/attachment-path.d.mts +3 -3
  320. package/dist/lib/esm/attachment-path.mjs +2 -2
  321. package/dist/lib/esm/backlink-index.mjs +2 -2
  322. package/dist/lib/esm/bug-report-diagnostics.d.mts +186 -0
  323. package/dist/lib/esm/bug-report-diagnostics.mjs +127 -0
  324. package/dist/lib/esm/bug-report.d.mts +65 -0
  325. package/dist/lib/esm/bug-report.mjs +33 -10
  326. package/dist/lib/esm/canvas.d.mts +13 -0
  327. package/dist/lib/esm/canvas.mjs +6 -5
  328. package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +13 -13
  329. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +14 -14
  330. package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +7 -7
  331. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +8 -8
  332. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +34 -2
  333. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +99 -3
  334. package/dist/lib/esm/components/all-windows-status-bar-item-component.d.mts +146 -0
  335. package/dist/lib/esm/components/all-windows-status-bar-item-component.mjs +154 -0
  336. package/dist/lib/esm/components/component-ex.d.mts +11 -0
  337. package/dist/lib/esm/components/component-ex.mjs +19 -6
  338. package/dist/lib/esm/components/disposable-component.mjs +1 -1
  339. package/dist/lib/esm/components/embed-extensions-component.d.mts +8 -0
  340. package/dist/lib/esm/components/embed-extensions-component.mjs +20 -3
  341. package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +9 -0
  342. package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +16 -2
  343. package/dist/lib/esm/components/index.d.mts +5 -0
  344. package/dist/lib/esm/components/index.mjs +12 -2
  345. package/dist/lib/esm/components/plugin-gate-component.d.mts +36 -13
  346. package/dist/lib/esm/components/plugin-gate-component.mjs +61 -26
  347. package/dist/lib/esm/components/plugin-notice-component.d.mts +4 -3
  348. package/dist/lib/esm/components/plugin-notice-component.mjs +30 -21
  349. package/dist/lib/esm/components/plugin-settings-component.d.mts +35 -5
  350. package/dist/lib/esm/components/plugin-settings-component.mjs +105 -4
  351. package/dist/lib/esm/components/rename-delete-handler-component.mjs +2 -2
  352. package/dist/lib/esm/components/shared-component-pool-component.d.mts +129 -0
  353. package/dist/lib/esm/components/shared-component-pool-component.mjs +280 -0
  354. package/dist/lib/esm/components/worker-component.d.mts +156 -0
  355. package/dist/lib/esm/components/worker-component.mjs +279 -0
  356. package/dist/lib/esm/components/worker-pool-component.d.mts +102 -0
  357. package/dist/lib/esm/components/worker-pool-component.mjs +95 -0
  358. package/dist/lib/esm/components/workspace-layout-state-component.d.mts +239 -0
  359. package/dist/lib/esm/components/workspace-layout-state-component.mjs +404 -0
  360. package/dist/lib/esm/css-class.d.mts +16 -0
  361. package/dist/lib/esm/css-class.mjs +5 -1
  362. package/dist/lib/esm/data-handler.d.mts +219 -2
  363. package/dist/lib/esm/data-handler.mjs +262 -5
  364. package/dist/lib/esm/data-stores/data-store-locations.d.mts +15 -0
  365. package/dist/lib/esm/data-stores/data-store-locations.mjs +80 -22
  366. package/dist/lib/esm/data-stores/data-store-replica.mjs +33 -5
  367. package/dist/lib/esm/data-stores/data-store-seeds.d.mts +2 -2
  368. package/dist/lib/esm/data-stores/data-store-seeds.mjs +4 -4
  369. package/dist/lib/esm/data-stores/data-store-transport.d.mts +30 -1
  370. package/dist/lib/esm/data-stores/data-store-transport.mjs +78 -5
  371. package/dist/lib/esm/data-stores/local-data-store.d.mts +58 -1
  372. package/dist/lib/esm/data-stores/local-data-store.mjs +71 -9
  373. package/dist/lib/esm/data-stores/shared-data-store.d.mts +18 -1
  374. package/dist/lib/esm/data-stores/shared-data-store.mjs +72 -15
  375. package/dist/lib/esm/dataview.d.mts +14 -0
  376. package/dist/lib/esm/dataview.mjs +19 -1
  377. package/dist/lib/esm/demo-vault-helper.d.mts +6 -2
  378. package/dist/lib/esm/demo-vault-helper.mjs +29 -1
  379. package/dist/lib/esm/desktop-demo-vault-opener.mjs +1 -1
  380. package/dist/lib/esm/desktop-git-runner.d.mts +8 -2
  381. package/dist/lib/esm/desktop-git-runner.mjs +3 -3
  382. package/dist/lib/esm/desktop-request-url-stream.mjs +4 -10
  383. package/dist/lib/esm/disposable.d.mts +39 -0
  384. package/dist/lib/esm/disposable.mjs +64 -0
  385. package/dist/lib/esm/file-system.mjs +2 -2
  386. package/dist/lib/esm/frontmatter-formatting.mjs +2 -1
  387. package/dist/lib/esm/generated-during-build.mjs +2 -2
  388. package/dist/lib/esm/git-rename-history.d.mts +2 -2
  389. package/dist/lib/esm/git-rename-history.mjs +1 -1
  390. package/dist/lib/esm/i18n/locales/en.d.mts +26 -0
  391. package/dist/lib/esm/i18n/locales/en.mjs +27 -1
  392. package/dist/lib/esm/i18n/locales/translations-map.d.mts +26 -0
  393. package/dist/lib/esm/index.d.mts +7 -0
  394. package/dist/lib/esm/index.mjs +15 -1
  395. package/dist/lib/esm/link.d.mts +20 -14
  396. package/dist/lib/esm/link.mjs +57 -38
  397. package/dist/lib/esm/loop.mjs +2 -8
  398. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +7 -0
  399. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +16 -1
  400. package/dist/lib/esm/markdown-view.d.mts +48 -1
  401. package/dist/lib/esm/markdown-view.mjs +192 -2
  402. package/dist/lib/esm/metadata-cache.d.mts +5 -4
  403. package/dist/lib/esm/metadata-cache.mjs +6 -6
  404. package/dist/lib/esm/misplaced-attachment.d.mts +228 -0
  405. package/dist/lib/esm/misplaced-attachment.mjs +212 -0
  406. package/dist/lib/esm/modals/copy-text-manually.d.mts +38 -0
  407. package/dist/lib/esm/modals/copy-text-manually.mjs +99 -0
  408. package/dist/lib/esm/modals/index.d.mts +2 -0
  409. package/dist/lib/esm/modals/index.mjs +5 -1
  410. package/dist/lib/esm/modals/prompt.d.mts +1 -1
  411. package/dist/lib/esm/modals/prompt.mjs +1 -1
  412. package/dist/lib/esm/modals/review-bug-report-diagnostics.d.mts +30 -0
  413. package/dist/lib/esm/modals/review-bug-report-diagnostics.mjs +120 -0
  414. package/dist/lib/esm/notebook-navigator.d.mts +6 -0
  415. package/dist/lib/esm/notebook-navigator.mjs +11 -2
  416. package/dist/lib/esm/parse-link.mjs +4 -4
  417. package/dist/lib/esm/path-compatibility.d.mts +263 -0
  418. package/dist/lib/esm/path-compatibility.mjs +277 -0
  419. package/dist/lib/esm/plugin/index.d.mts +2 -0
  420. package/dist/lib/esm/plugin/index.mjs +6 -2
  421. package/dist/lib/esm/plugin/plugin-api.d.mts +5 -1
  422. package/dist/lib/esm/plugin/plugin-api.mjs +13 -4
  423. package/dist/lib/esm/plugin/plugin-async-cleanup.d.mts +5 -0
  424. package/dist/lib/esm/plugin/plugin-async-cleanup.mjs +3 -1
  425. package/dist/lib/esm/plugin/plugin-context.mjs +2 -1
  426. package/dist/lib/esm/plugin/plugin-event-source.d.mts +4 -4
  427. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -1
  428. package/dist/lib/esm/plugin/plugin-install-state.d.mts +30 -0
  429. package/dist/lib/esm/plugin/plugin-install-state.mjs +44 -1
  430. package/dist/lib/esm/plugin/plugin-instance.d.mts +258 -0
  431. package/dist/lib/esm/plugin/plugin-instance.mjs +367 -0
  432. package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +6 -4
  433. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -1
  434. package/dist/lib/esm/plugin/plugin.d.mts +35 -5
  435. package/dist/lib/esm/plugin/plugin.mjs +118 -9
  436. package/dist/lib/esm/plugin/third-party-plugin.d.mts +244 -0
  437. package/dist/lib/esm/plugin/third-party-plugin.mjs +147 -0
  438. package/dist/lib/esm/release-asset.mjs +1 -1
  439. package/dist/lib/esm/resource-lock.d.mts +8 -7
  440. package/dist/lib/esm/resource-lock.mjs +31 -26
  441. package/dist/lib/esm/setting-components/multiple-text-component.d.mts +4 -1
  442. package/dist/lib/esm/setting-components/multiple-text-component.mjs +6 -3
  443. package/dist/lib/esm/settings-recovery.d.mts +178 -0
  444. package/dist/lib/esm/settings-recovery.mjs +125 -0
  445. package/dist/lib/esm/settings-tabs.mjs +2 -2
  446. package/dist/lib/esm/templater.d.mts +6 -0
  447. package/dist/lib/esm/templater.mjs +11 -2
  448. package/dist/lib/esm/vault.mjs +1 -1
  449. package/dist/lib/esm/virtual-file.d.mts +2 -1
  450. package/dist/lib/esm/virtual-file.mjs +7 -5
  451. package/dist/lib/esm/wasm.d.mts +54 -0
  452. package/dist/lib/esm/wasm.mjs +30 -0
  453. package/dist/lib/esm/worker-protocol.d.mts +282 -0
  454. package/dist/lib/esm/worker-protocol.mjs +113 -0
  455. package/dist/styles.css +16 -1
  456. package/modals/copy-text-manually/package.json +6 -0
  457. package/modals/review-bug-report-diagnostics/package.json +6 -0
  458. package/package.json +10 -8
  459. package/plugin/plugin-instance/package.json +6 -0
  460. package/plugin/third-party-plugin/package.json +6 -0
@@ -123,15 +123,15 @@ __export(virtual_file_exports, {
123
123
  registerVirtualFile: () => registerVirtualFile
124
124
  });
125
125
  module.exports = __toCommonJS(virtual_file_exports);
126
- var import_state = require('@codemirror/state');
127
- var import_disposable = require('@mnaoumov/typescript-lib/disposable');
128
- var import_implementations = require('@obsidian-typings/obsidian-public-latest/implementations');
129
- var import_obsidian = require('obsidian');
130
- var import_monkey_around_component = require('./components/monkey-around-component.cjs');
131
- var import_editor = require('./editor.cjs');
132
- var import_file_system = require('./file-system.cjs');
133
- var import_metadata_cache = require('./metadata-cache.cjs');
134
- var import_obsidian_lib_state = require('./obsidian-lib-state.cjs');
126
+ var import_state = require("@codemirror/state");
127
+ var import_disposable = require("@mnaoumov/typescript-lib/disposable");
128
+ var import_implementations = require("@obsidian-typings/obsidian-public-latest/implementations");
129
+ var import_obsidian = require("obsidian");
130
+ var import_monkey_around_component = require("./components/monkey-around-component.cjs");
131
+ var import_editor = require("./editor.cjs");
132
+ var import_file_system = require("./file-system.cjs");
133
+ var import_metadata_cache = require("./metadata-cache.cjs");
134
+ var import_obsidian_lib_state = require("./obsidian-lib-state.cjs");
135
135
  async function registerVirtualFile(params) {
136
136
  const { app, content } = params;
137
137
  const path = (0, import_obsidian.normalizePath)(params.path);
@@ -302,7 +302,7 @@ function installVirtualFile(params) {
302
302
  app.metadataCache.uniqueFileLookup.remove(file.name.toLowerCase(), file);
303
303
  if (app.vault.fileMap[path] === file) {
304
304
  Reflect.deleteProperty(app.vault.fileMap, path);
305
- metadata[Symbol.dispose]();
305
+ metadata.dispose();
306
306
  }
307
307
  patches.unload();
308
308
  window.URL.revokeObjectURL(url);
@@ -312,11 +312,13 @@ function installVirtualFile(params) {
312
312
  });
313
313
  return {
314
314
  content,
315
+ dispose: disposeRegistration,
315
316
  file,
316
- [Symbol.dispose]: () => {
317
- disposable[Symbol.dispose]();
318
- }
317
+ [Symbol.dispose]: disposeRegistration
319
318
  };
319
+ function disposeRegistration() {
320
+ disposable.dispose();
321
+ }
320
322
  function isMatching(target) {
321
323
  return (0, import_obsidian.normalizePath)(target).toLowerCase() === path.toLowerCase();
322
324
  }
@@ -337,4 +339,4 @@ function installVirtualFile(params) {
337
339
  0 && (module.exports = {
338
340
  registerVirtualFile
339
341
  });
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92aXJ0dWFsLWZpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICogRGlzcG9zYWJsZSwgcmVhZC1vbmx5IGZpbGVzIGJhY2tlZCBieSBtZW1vcnkgaW5zdGVhZCBvZiB0aGUgdmF1bHQgYWRhcHRlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBFZGl0b3JTdGF0ZSxcbiAgU3RhdGVFZmZlY3Rcbn0gZnJvbSAnQGNvZGVtaXJyb3Ivc3RhdGUnO1xuaW1wb3J0IHtcbiAgQ2FsbGJhY2tEaXNwb3NhYmxlLFxuICBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvclxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGlzcG9zYWJsZSc7XG5pbXBvcnQgeyBwYXJlbnRGb2xkZXJQYXRoIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHtcbiAgTWFya2Rvd25WaWV3LFxuICBub3JtYWxpemVQYXRoXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgTW9ua2V5QXJvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IHRvZ2dsZUVkaXRvclJlYWRPbmx5IH0gZnJvbSAnLi9lZGl0b3IudHMnO1xuaW1wb3J0IHsgZ2V0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgcGFyc2VNZXRhZGF0YSxcbiAgcmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGVcbn0gZnJvbSAnLi9tZXRhZGF0YS1jYWNoZS50cyc7XG5pbXBvcnQgeyBnZXRPYnNpZGlhbkxpYlN0YXRlIH0gZnJvbSAnLi9vYnNpZGlhbi1saWItc3RhdGUudHMnO1xuXG4vKipcblBhcmFtZXRlcnMgZm9yIHtAbGluayByZWdpc3RlclZpcnR1YWxGaWxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlclZpcnR1YWxGaWxlUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBhcHAgd2hvc2UgcmVzb2x2ZXIgYW5kIHJlYWQgbWV0aG9kcyBzZXJ2ZSB0aGUgZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuICAvKipcbiAgSW1tdXRhYmxlIFVURi04IHRleHQsIGFsc28gYXZhaWxhYmxlIHN5bmNocm9ub3VzbHkgb24gdGhlIHJlZ2lzdHJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbiAgLyoqXG4gIFVub2NjdXBpZWQgdmF1bHQtcmVsYXRpdmUgZmlsZSBwYXRoIGluIGFuIGV4aXN0aW5nIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuLyoqXG5BIG1lbW9yeSBmaWxlIGFuZCBpdHMgbGlmZXRpbWUuIERpc3Bvc2UgaXQgYmVmb3JlIGl0cyBvd25pbmcgcGx1Z2luIHVubG9hZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmlydHVhbEZpbGUgZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgLyoqXG4gIFRoZSBpbW11dGFibGUgdGV4dDsgYWNjZXNzaW5nIGl0IHJlcXVpcmVzIG5vIGFzeW5jaHJvbm91cyByZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuICAvKipcbiAgVGhlIGZpbGUgYWNjZXB0ZWQgYnkgT2JzaWRpYW4ncyBsaW5rIHJlc29sdmVyIGFuZCBmaWxlIHZpZXdzLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZTogVEZpbGU7XG59XG5cbmludGVyZmFjZSBJbnN0YWxsVmlydHVhbEZpbGVQYXJhbXMgZXh0ZW5kcyBSZWdpc3RlclZpcnR1YWxGaWxlUGFyYW1zIHtcbiAgcmVhZG9ubHkgY2FjaGU6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgcGFyc2VNZXRhZGF0YT4+IHwgUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuICByZWFkb25seSByZXNlcnZhdGlvbnM6IFNldDxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBpbW11dGFibGUgdGV4dCBhcyBhIGZpbGUgd2l0aG91dCB3cml0aW5nIHRvIHRoZSBhZGFwdGVyLlxuICpcbiAqIFRoZSBwYXJlbnQgZm9sZGVyIG11c3QgZXhpc3QuIE1hcmtkb3duIHZpZXdzIGFyZSByZWFkLW9ubHk7IHZhdWx0IGFuZCBhZGFwdGVyIG11dGF0aW9ucyBvZiB0aGVcbiAqIHBhdGggb3IgaXRzIGFuY2VzdG9ycyB0aHJvdy4gUmF3IGZpbGVzeXN0ZW0gYWNjZXNzIGFuZCB0aGlyZC1wYXJ0eSB2aWV3cyBhcmUgb3V0c2lkZSB0aGlzIGNvbnRyYWN0LlxuICogUmVzb3VyY2UgVVJMcyB1c2UgVVRGLTggYmxvYnMuIERpc3Bvc2luZyBjbG9zZXMgdmlld3Mgb2YgdGhpcyBmaWxlIGFuZCByZXZva2VzIGl0cyBVUkwuIE5vIGNyZWF0ZVxuICogb3IgZGVsZXRlIGV2ZW50cyBhcmUgZW1pdHRlZCwgc28gaW5kZXhlcnMgYW5kIHN5bmNocm9uaXphdGlvbiBuZXZlciB0cmVhdCBpdCBhcyBhIHBlcnNpc3RlZCBmaWxlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgYXBwLCBwYXRoIGFuZCBpbW11dGFibGUgdGV4dC5cbiAqIEByZXR1cm5zIFRoZSByZWdpc3RlcmVkIGZpbGUsIHN5bmNocm9ub3VzIGNvbnRlbnQgYW5kIGlkZW1wb3RlbnQgZGlzcG9zYWwgY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWdpc3RlclZpcnR1YWxGaWxlKHBhcmFtczogUmVnaXN0ZXJWaXJ0dWFsRmlsZVBhcmFtcyk6IFByb21pc2U8VmlydHVhbEZpbGU+IHtcbiAgY29uc3QgeyBhcHAsIGNvbnRlbnQgfSA9IHBhcmFtcztcbiAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgocGFyYW1zLnBhdGgpO1xuICBpZiAoIXBhdGggfHwgcGF0aCA9PT0gJy8nIHx8IHBhcmFtcy5wYXRoLnNwbGl0KC9bXFxcXC9dLykuc29tZSgocGFydCkgPT4gcGFydCA9PT0gJy4nIHx8IHBhcnQgPT09ICcuLicpIHx8IC9eW1xcXFwvXXw6Ly50ZXN0KHBhcmFtcy5wYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSB2aXJ0dWFsIGZpbGUgcmVxdWlyZXMgYSB2YXVsdC1yZWxhdGl2ZSBmaWxlIHBhdGgnKTtcbiAgfVxuICBjb25zdCByZXNlcnZhdGlvbnMgPSBnZXRPYnNpZGlhbkxpYlN0YXRlKCd2aXJ0dWFsRmlsZVBhdGhzVjEnLCBuZXcgU2V0PHN0cmluZz4oKSkudmFsdWU7XG4gIGNvbnN0IGtleSA9IHBhdGgudG9Mb3dlckNhc2UoKTtcbiAgaWYgKHJlc2VydmF0aW9ucy5oYXMoa2V5KSB8fCBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoSW5zZW5zaXRpdmUocGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgYWxyZWFkeSBleGlzdHM6ICR7cGF0aH1gKTtcbiAgfVxuICBjb25zdCBwYXJlbnQgPSBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpO1xuICBpZiAocGFyZW50ICYmIHBhcmVudCAhPT0gJy8nICYmICFhcHAudmF1bHQuZ2V0Rm9sZGVyQnlQYXRoKHBhcmVudCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBhcmVudCBmb2xkZXIgZG9lcyBub3QgZXhpc3Q6ICR7cGFyZW50fWApO1xuICB9XG4gIHJlc2VydmF0aW9ucy5hZGQoa2V5KTtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKHBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgYWxyZWFkeSBleGlzdHM6ICR7cGF0aH1gKTtcbiAgICB9XG4gICAgY29uc3QgY2FjaGUgPSBwYXRoLmVuZHNXaXRoKCcubWQnKSA/IGF3YWl0IHBhcnNlTWV0YWRhdGEoYXBwLCBjb250ZW50KSA6IHt9O1xuICAgIC8vIFJlY2hlY2sgYWZ0ZXIgYXN5bmNocm9ub3VzIHdvcmssIGJlZm9yZSBwdWJsaXNoaW5nIGFueXRoaW5nIHRvIHRoZSByZXNvbHZlci5cbiAgICBpZiAoYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aEluc2Vuc2l0aXZlKHBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgYWxyZWFkeSBleGlzdHM6ICR7cGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbGxWaXJ0dWFsRmlsZSh7IGFwcCwgY2FjaGUsIGNvbnRlbnQsIHBhdGgsIHJlc2VydmF0aW9ucyB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXNlcnZhdGlvbnMuZGVsZXRlKGtleSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zdGFsbFZpcnR1YWxGaWxlKHBhcmFtczogSW5zdGFsbFZpcnR1YWxGaWxlUGFyYW1zKTogVmlydHVhbEZpbGUge1xuICBjb25zdCB7IGFwcCwgY2FjaGUsIGNvbnRlbnQsIHBhdGgsIHJlc2VydmF0aW9ucyB9ID0gcGFyYW1zO1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZTogcGF0aCwgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlIH0pO1xuICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShjb250ZW50KTtcbiAgZmlsZS5zdGF0ID0geyBjdGltZTogRGF0ZS5ub3coKSwgbXRpbWU6IERhdGUubm93KCksIHNpemU6IGJ5dGVzLmJ5dGVMZW5ndGggfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGlzIGlzIHRoZSBicm93c2VyJ3MgQmxvYiBVUkwgQVBJIGluIE9ic2lkaWFuLCBub3QgTm9kZSdzIGltcGxlbWVudGF0aW9uLlxuICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IHBhdGguZW5kc1dpdGgoJy5tZCcpID8gJ3RleHQvbWFya2Rvd247Y2hhcnNldD11dGYtOCcgOiAndGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04JyB9KSk7XG4gIGNvbnN0IHBhdGNoZXMgPSBuZXcgTW9ua2V5QXJvdW5kQ29tcG9uZW50KCk7XG4gIHBhdGNoZXMubG9hZCgpO1xuICBjb25zdCBtZXRhZGF0YSA9IHJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlKHsgYXBwLCBjYWNoZSwgcGF0aE9yRmlsZTogZmlsZSB9KTtcbiAgYXBwLnZhdWx0LmZpbGVNYXBbcGF0aF0gPSBmaWxlO1xuICBhcHAubWV0YWRhdGFDYWNoZS51bmlxdWVGaWxlTG9va3VwLmFkZChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgZmlsZSk7XG5cbiAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHsgJG9iamVjdDogYXBwLnZhdWx0LCBtZXRob2ROYW1lOiAncmVhZCcsIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsQXJndW1lbnRzOiBbdGFyZ2V0XSB9KSA9PiB0YXJnZXQgPT09IGZpbGUgPyBQcm9taXNlLnJlc29sdmUoY29udGVudCkgOiBmYWxsYmFjaygpIH0pO1xuICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goeyAkb2JqZWN0OiBhcHAudmF1bHQsIG1ldGhvZE5hbWU6ICdjYWNoZWRSZWFkJywgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxBcmd1bWVudHM6IFt0YXJnZXRdIH0pID0+IHRhcmdldCA9PT0gZmlsZSA/IFByb21pc2UucmVzb2x2ZShjb250ZW50KSA6IGZhbGxiYWNrKCkgfSk7XG4gIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7ICRvYmplY3Q6IGFwcC52YXVsdCwgbWV0aG9kTmFtZTogJ3JlYWRCaW5hcnknLCBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogW3RhcmdldF0gfSkgPT4gdGFyZ2V0ID09PSBmaWxlID8gUHJvbWlzZS5yZXNvbHZlKG5ldyBVaW50OEFycmF5KGJ5dGVzKS5idWZmZXIpIDogZmFsbGJhY2soKSB9KTtcbiAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHsgJG9iamVjdDogYXBwLnZhdWx0LCBtZXRob2ROYW1lOiAnZ2V0UmVzb3VyY2VQYXRoJywgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxBcmd1bWVudHM6IFt0YXJnZXRdIH0pID0+IHRhcmdldCA9PT0gZmlsZSA/IHVybCA6IGZhbGxiYWNrKCkgfSk7XG4gIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7ICRvYmplY3Q6IGFwcC52YXVsdC5hZGFwdGVyLCBtZXRob2ROYW1lOiAncmVhZCcsIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsQXJndW1lbnRzOiBbdGFyZ2V0XSB9KSA9PiBpc01hdGNoaW5nKHRhcmdldCkgPyBQcm9taXNlLnJlc29sdmUoY29udGVudCkgOiBmYWxsYmFjaygpIH0pO1xuICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goeyAkb2JqZWN0OiBhcHAudmF1bHQuYWRhcHRlciwgbWV0aG9kTmFtZTogJ3JlYWRCaW5hcnknLCBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogW3RhcmdldF0gfSkgPT4gaXNNYXRjaGluZyh0YXJnZXQpID8gUHJvbWlzZS5yZXNvbHZlKG5ldyBVaW50OEFycmF5KGJ5dGVzKS5idWZmZXIpIDogZmFsbGJhY2soKSB9KTtcbiAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHsgJG9iamVjdDogYXBwLnZhdWx0LmFkYXB0ZXIsIG1ldGhvZE5hbWU6ICdnZXRSZXNvdXJjZVBhdGgnLCBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogW3RhcmdldF0gfSkgPT4gaXNNYXRjaGluZyh0YXJnZXQpID8gdXJsIDogZmFsbGJhY2soKSB9KTtcblxuICBmb3IgKGNvbnN0IG1ldGhvZE5hbWUgb2YgWydhcHBlbmQnLCAnYXBwZW5kQmluYXJ5JywgJ21vZGlmeScsICdtb2RpZnlCaW5hcnknLCAncHJvY2VzcycsICdkZWxldGUnLCAndHJhc2gnXSBhcyBjb25zdCkge1xuICAgIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7XG4gICAgICAkb2JqZWN0OiBhcHAudmF1bHQsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxBcmd1bWVudHM6IFt0YXJnZXRdIH0pID0+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGFibGUodGFyZ2V0LnBhdGgpO1xuICAgICAgICByZXR1cm4gZmFsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goe1xuICAgICRvYmplY3Q6IGFwcC52YXVsdCxcbiAgICBtZXRob2ROYW1lOiAncmVuYW1lJyxcbiAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogW3RhcmdldCwgZGVzdGluYXRpb25dIH0pID0+IHtcbiAgICAgIGFzc2VydFdyaXRhYmxlKHRhcmdldC5wYXRoKTtcbiAgICAgIGFzc2VydFdyaXRhYmxlKGRlc3RpbmF0aW9uKTtcbiAgICAgIHJldHVybiBmYWxsYmFjaygpO1xuICAgIH1cbiAgfSk7XG4gIGZvciAoY29uc3QgbWV0aG9kTmFtZSBvZiBbJ2NyZWF0ZScsICdjcmVhdGVCaW5hcnknLCAnY3JlYXRlRm9sZGVyJ10gYXMgY29uc3QpIHtcbiAgICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goe1xuICAgICAgJG9iamVjdDogYXBwLnZhdWx0LFxuICAgICAgbWV0aG9kTmFtZSxcbiAgICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsQXJndW1lbnRzOiBbdGFyZ2V0XSB9KSA9PiB7XG4gICAgICAgIGFzc2VydFdyaXRhYmxlKHRhcmdldCk7XG4gICAgICAgIHJldHVybiBmYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7XG4gICAgJG9iamVjdDogYXBwLnZhdWx0LFxuICAgIG1ldGhvZE5hbWU6ICdjb3B5JyxcbiAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogWywgZGVzdGluYXRpb25dIH0pID0+IHtcbiAgICAgIGFzc2VydFdyaXRhYmxlKGRlc3RpbmF0aW9uKTtcbiAgICAgIHJldHVybiBmYWxsYmFjaygpO1xuICAgIH1cbiAgfSk7XG4gIGZvciAoY29uc3QgbWV0aG9kTmFtZSBvZiBbJ3dyaXRlJywgJ3dyaXRlQmluYXJ5JywgJ2FwcGVuZCcsICdhcHBlbmRCaW5hcnknLCAncHJvY2VzcycsICdyZW1vdmUnLCAncm1kaXInLCAndHJhc2hMb2NhbCcsICd0cmFzaFN5c3RlbScsICdta2RpciddIGFzIGNvbnN0KSB7XG4gICAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgICRvYmplY3Q6IGFwcC52YXVsdC5hZGFwdGVyLFxuICAgICAgbWV0aG9kTmFtZSxcbiAgICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsQXJndW1lbnRzOiBbdGFyZ2V0XSB9KSA9PiB7XG4gICAgICAgIGFzc2VydFdyaXRhYmxlKHRhcmdldCk7XG4gICAgICAgIHJldHVybiBmYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7XG4gICAgJG9iamVjdDogYXBwLnZhdWx0LmFkYXB0ZXIsXG4gICAgbWV0aG9kTmFtZTogJ3JlbmFtZScsXG4gICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxBcmd1bWVudHM6IFt0YXJnZXQsIGRlc3RpbmF0aW9uXSB9KSA9PiB7XG4gICAgICBhc3NlcnRXcml0YWJsZSh0YXJnZXQpO1xuICAgICAgYXNzZXJ0V3JpdGFibGUoZGVzdGluYXRpb24pO1xuICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgfVxuICB9KTtcbiAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAkb2JqZWN0OiBhcHAudmF1bHQuYWRhcHRlcixcbiAgICBtZXRob2ROYW1lOiAnY29weScsXG4gICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxBcmd1bWVudHM6IFssIGRlc3RpbmF0aW9uXSB9KSA9PiB7XG4gICAgICBhc3NlcnRXcml0YWJsZShkZXN0aW5hdGlvbik7XG4gICAgICByZXR1cm4gZmFsbGJhY2soKTtcbiAgICB9XG4gIH0pO1xuICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goe1xuICAgICRvYmplY3Q6IGFwcC5maWxlTWFuYWdlcixcbiAgICBtZXRob2ROYW1lOiAncmVuYW1lRmlsZScsXG4gICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxBcmd1bWVudHM6IFt0YXJnZXQsIGRlc3RpbmF0aW9uXSB9KSA9PiB7XG4gICAgICBhc3NlcnRXcml0YWJsZSh0YXJnZXQucGF0aCk7XG4gICAgICBhc3NlcnRXcml0YWJsZShkZXN0aW5hdGlvbik7XG4gICAgICByZXR1cm4gZmFsbGJhY2soKTtcbiAgICB9XG4gIH0pO1xuICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goe1xuICAgICRvYmplY3Q6IGFwcC5maWxlTWFuYWdlcixcbiAgICBtZXRob2ROYW1lOiAndHJhc2hGaWxlJyxcbiAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogW3RhcmdldF0gfSkgPT4ge1xuICAgICAgYXNzZXJ0V3JpdGFibGUodGFyZ2V0LnBhdGgpO1xuICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgfVxuICB9KTtcbiAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAkb2JqZWN0OiBNYXJrZG93blZpZXcucHJvdG90eXBlLFxuICAgIG1ldGhvZE5hbWU6ICdzZXRWaWV3RGF0YScsXG4gICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxUaGlzIH0pID0+IHtcbiAgICAgIGZhbGxiYWNrKCk7XG4gICAgICBpZiAob3JpZ2luYWxUaGlzLmZpbGUgPT09IGZpbGUpIHtcbiAgICAgICAgcHJvdGVjdEVkaXRvcihvcmlnaW5hbFRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7XG4gICAgJG9iamVjdDogTWFya2Rvd25WaWV3LnByb3RvdHlwZSxcbiAgICBtZXRob2ROYW1lOiAnb25Mb2FkRmlsZScsXG4gICAgcGF0Y2hIYW5kbGVyOiBhc3luYyAoeyBmYWxsYmFjaywgb3JpZ2luYWxUaGlzIH0pID0+IHtcbiAgICAgIGF3YWl0IGZhbGxiYWNrKCk7XG4gICAgICBpZiAob3JpZ2luYWxUaGlzLmZpbGUgPT09IGZpbGUpIHtcbiAgICAgICAgcHJvdGVjdEVkaXRvcihvcmlnaW5hbFRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7XG4gICAgJG9iamVjdDogTWFya2Rvd25WaWV3LnByb3RvdHlwZSxcbiAgICBtZXRob2ROYW1lOiAnc2V0TW9kZScsXG4gICAgcGF0Y2hIYW5kbGVyOiBhc3luYyAoeyBmYWxsYmFjaywgb3JpZ2luYWxUaGlzIH0pID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tY29uZnVzaW5nLXZvaWQtZXhwcmVzc2lvbiAtLSBPYnNpZGlhbiByZXR1cm5zIGEgYm9vbGVhbiBkZXNwaXRlIGl0cyB2b2lkIGRlY2xhcmF0aW9uOyBzZXRTdGF0ZSBjb25zdW1lcyB0aGF0IHJlc3VsdC5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZhbGxiYWNrKCk7XG4gICAgICBpZiAob3JpZ2luYWxUaGlzLmZpbGUgPT09IGZpbGUpIHtcbiAgICAgICAgcHJvdGVjdEVkaXRvcihvcmlnaW5hbFRoaXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGRpc3Bvc2FibGUgPSBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICBjYWxsYmFjazogKCk6IHZvaWQgPT4ge1xuICAgICAgYXBwLndvcmtzcGFjZS5pdGVyYXRlQWxsTGVhdmVzKChsZWFmKSA9PiB7XG4gICAgICAgIGlmICgnZmlsZScgaW4gbGVhZi52aWV3ICYmIGxlYWYudmlldy5maWxlID09PSBmaWxlKSB7XG4gICAgICAgICAgbGVhZi5kZXRhY2goKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBhcHAubWV0YWRhdGFDYWNoZS51bmlxdWVGaWxlTG9va3VwLnJlbW92ZShmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgZmlsZSk7XG4gICAgICBpZiAoYXBwLnZhdWx0LmZpbGVNYXBbcGF0aF0gPT09IGZpbGUpIHtcbiAgICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShhcHAudmF1bHQuZmlsZU1hcCwgcGF0aCk7XG4gICAgICAgIG1ldGFkYXRhW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgICAgfVxuICAgICAgcGF0Y2hlcy51bmxvYWQoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlIFVSTCBiZWxvbmdzIHRvIHRoZSBicm93c2VyIHJlYWxtIHRoYXQgY3JlYXRlZCBpdC5cbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICByZXNlcnZhdGlvbnMuZGVsZXRlKHBhdGgudG9Mb3dlckNhc2UoKSk7XG4gICAgfSxcbiAgICBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNvbnRlbnQsXG4gICAgZmlsZSxcbiAgICBbU3ltYm9sLmRpc3Bvc2VdOiAoKTogdm9pZCA9PiB7XG4gICAgICBkaXNwb3NhYmxlW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBpc01hdGNoaW5nKHRhcmdldDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgodGFyZ2V0KS50b0xvd2VyQ2FzZSgpID09PSBwYXRoLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBwcm90ZWN0RWRpdG9yKHZpZXc6IE1hcmtkb3duVmlldyk6IHZvaWQge1xuICAgIHRvZ2dsZUVkaXRvclJlYWRPbmx5KHZpZXcuZWRpdG9yLCB0cnVlKTtcbiAgICAvLyBBIHZpcnR1YWwgZmlsZSBpcyBpbW11dGFibGUgZXZlbiB0byBwcm9ncmFtbWF0aWMgZWRpdG9yIHRyYW5zYWN0aW9ucy4gVGhlIG9yZGluYXJ5IHJlc291cmNlXG4gICAgLy8gbG9jayBwZXJtaXRzIHRob3NlIGZvciByb2xsYmFjazsgdGhpcyByZWdpc3RyYXRpb24gaGFzIG5vIHdyaXRhYmxlIGJ1ZmZlciB0byByb2xsIGJhY2suXG4gICAgdmlldy5lZGl0b3IuY20uZGlzcGF0Y2goe1xuICAgICAgZWZmZWN0czogU3RhdGVFZmZlY3QuYXBwZW5kQ29uZmlnLm9mKEVkaXRvclN0YXRlLmNoYW5nZUZpbHRlci5vZigoKSA9PiB2aWV3LmZpbGUgIT09IGZpbGUpKVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gYXNzZXJ0V3JpdGFibGUodGFyZ2V0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUGF0aCh0YXJnZXQpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGlzTWF0Y2hpbmcodGFyZ2V0KSB8fCBwYXRoLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChgJHtub3JtYWxpemVkfS9gKSB8fCBub3JtYWxpemVkID09PSAnLycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVmlydHVhbCBmaWxlIGlzIHJlYWQtb25seTogJHtwYXRofWApO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBVUEsbUJBR087QUFDUCx3QkFHTztBQUNQLDZCQUFpQztBQUNqQyxzQkFHTztBQUVQLHFDQUFzQztBQUN0QyxvQkFBcUM7QUFDckMseUJBQXdCO0FBQ3hCLDRCQUdPO0FBQ1AsZ0NBQW9DO0FBa0RwQyxlQUFzQixvQkFBb0IsUUFBeUQ7QUFDakcsUUFBTSxFQUFFLEtBQUssUUFBUSxJQUFJO0FBQ3pCLFFBQU0sV0FBTywrQkFBYyxPQUFPLElBQUk7QUFDdEMsTUFBSSxDQUFDLFFBQVEsU0FBUyxPQUFPLE9BQU8sS0FBSyxNQUFNLE9BQU8sRUFBRSxLQUFLLENBQUMsU0FBUyxTQUFTLE9BQU8sU0FBUyxJQUFJLEtBQUssV0FBVyxLQUFLLE9BQU8sSUFBSSxHQUFHO0FBQ3JJLFVBQU0sSUFBSSxNQUFNLG9EQUFvRDtBQUFBLEVBQ3RFO0FBQ0EsUUFBTSxtQkFBZSwrQ0FBb0Isc0JBQXNCLG9CQUFJLElBQVksQ0FBQyxFQUFFO0FBQ2xGLFFBQU0sTUFBTSxLQUFLLFlBQVk7QUFDN0IsTUFBSSxhQUFhLElBQUksR0FBRyxLQUFLLElBQUksTUFBTSxpQ0FBaUMsSUFBSSxHQUFHO0FBQzdFLFVBQU0sSUFBSSxNQUFNLHdCQUF3QixJQUFJLEVBQUU7QUFBQSxFQUNoRDtBQUNBLFFBQU0sYUFBUyx5Q0FBaUIsSUFBSTtBQUNwQyxNQUFJLFVBQVUsV0FBVyxPQUFPLENBQUMsSUFB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
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92aXJ0dWFsLWZpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICogRGlzcG9zYWJsZSwgcmVhZC1vbmx5IGZpbGVzIGJhY2tlZCBieSBtZW1vcnkgaW5zdGVhZCBvZiB0aGUgdmF1bHQgYWRhcHRlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGVFeCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9kaXNwb3NhYmxlJztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIEVkaXRvclN0YXRlLFxuICBTdGF0ZUVmZmVjdFxufSBmcm9tICdAY29kZW1pcnJvci9zdGF0ZSc7XG5pbXBvcnQge1xuICBDYWxsYmFja0Rpc3Bvc2FibGUsXG4gIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9kaXNwb3NhYmxlJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQge1xuICBNYXJrZG93blZpZXcsXG4gIG5vcm1hbGl6ZVBhdGhcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNb25rZXlBcm91bmRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbW9ua2V5LWFyb3VuZC1jb21wb25lbnQudHMnO1xuaW1wb3J0IHsgdG9nZ2xlRWRpdG9yUmVhZE9ubHkgfSBmcm9tICcuL2VkaXRvci50cyc7XG5pbXBvcnQgeyBnZXRGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBwYXJzZU1ldGFkYXRhLFxuICByZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZVxufSBmcm9tICcuL21ldGFkYXRhLWNhY2hlLnRzJztcbmltcG9ydCB7IGdldE9ic2lkaWFuTGliU3RhdGUgfSBmcm9tICcuL29ic2lkaWFuLWxpYi1zdGF0ZS50cyc7XG5cbi8qKlxuUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlZ2lzdGVyVmlydHVhbEZpbGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyVmlydHVhbEZpbGVQYXJhbXMge1xuICAvKipcbiAgVGhlIGFwcCB3aG9zZSByZXNvbHZlciBhbmQgcmVhZCBtZXRob2RzIHNlcnZlIHRoZSBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIC8qKlxuICBJbW11dGFibGUgVVRGLTggdGV4dCwgYWxzbyBhdmFpbGFibGUgc3luY2hyb25vdXNseSBvbiB0aGUgcmVnaXN0cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuICAvKipcbiAgVW5vY2N1cGllZCB2YXVsdC1yZWxhdGl2ZSBmaWxlIHBhdGggaW4gYW4gZXhpc3RpbmcgZm9sZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbkEgbWVtb3J5IGZpbGUgYW5kIGl0cyBsaWZldGltZS4gRGlzcG9zZSBpdCBiZWZvcmUgaXRzIG93bmluZyBwbHVnaW4gdW5sb2Fkcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaXJ0dWFsRmlsZSBleHRlbmRzIERpc3Bvc2FibGVFeCB7XG4gIC8qKlxuICBUaGUgaW1tdXRhYmxlIHRleHQ7IGFjY2Vzc2luZyBpdCByZXF1aXJlcyBubyBhc3luY2hyb25vdXMgcmVhZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbiAgLyoqXG4gIFRoZSBmaWxlIGFjY2VwdGVkIGJ5IE9ic2lkaWFuJ3MgbGluayByZXNvbHZlciBhbmQgZmlsZSB2aWV3cy5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGU6IFRGaWxlO1xufVxuXG5pbnRlcmZhY2UgSW5zdGFsbFZpcnR1YWxGaWxlUGFyYW1zIGV4dGVuZHMgUmVnaXN0ZXJWaXJ0dWFsRmlsZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGNhY2hlOiBBd2FpdGVkPFJldHVyblR5cGU8dHlwZW9mIHBhcnNlTWV0YWRhdGE+PiB8IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcbiAgcmVhZG9ubHkgcmVzZXJ2YXRpb25zOiBTZXQ8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgaW1tdXRhYmxlIHRleHQgYXMgYSBmaWxlIHdpdGhvdXQgd3JpdGluZyB0byB0aGUgYWRhcHRlci5cbiAqXG4gKiBUaGUgcGFyZW50IGZvbGRlciBtdXN0IGV4aXN0LiBNYXJrZG93biB2aWV3cyBhcmUgcmVhZC1vbmx5OyB2YXVsdCBhbmQgYWRhcHRlciBtdXRhdGlvbnMgb2YgdGhlXG4gKiBwYXRoIG9yIGl0cyBhbmNlc3RvcnMgdGhyb3cuIFJhdyBmaWxlc3lzdGVtIGFjY2VzcyBhbmQgdGhpcmQtcGFydHkgdmlld3MgYXJlIG91dHNpZGUgdGhpcyBjb250cmFjdC5cbiAqIFJlc291cmNlIFVSTHMgdXNlIFVURi04IGJsb2JzLiBEaXNwb3NpbmcgY2xvc2VzIHZpZXdzIG9mIHRoaXMgZmlsZSBhbmQgcmV2b2tlcyBpdHMgVVJMLiBObyBjcmVhdGVcbiAqIG9yIGRlbGV0ZSBldmVudHMgYXJlIGVtaXR0ZWQsIHNvIGluZGV4ZXJzIGFuZCBzeW5jaHJvbml6YXRpb24gbmV2ZXIgdHJlYXQgaXQgYXMgYSBwZXJzaXN0ZWQgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGFwcCwgcGF0aCBhbmQgaW1tdXRhYmxlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgcmVnaXN0ZXJlZCBmaWxlLCBzeW5jaHJvbm91cyBjb250ZW50IGFuZCBpZGVtcG90ZW50IGRpc3Bvc2FsIGNhbGxiYWNrLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJWaXJ0dWFsRmlsZShwYXJhbXM6IFJlZ2lzdGVyVmlydHVhbEZpbGVQYXJhbXMpOiBQcm9taXNlPFZpcnR1YWxGaWxlPiB7XG4gIGNvbnN0IHsgYXBwLCBjb250ZW50IH0gPSBwYXJhbXM7XG4gIGNvbnN0IHBhdGggPSBub3JtYWxpemVQYXRoKHBhcmFtcy5wYXRoKTtcbiAgaWYgKCFwYXRoIHx8IHBhdGggPT09ICcvJyB8fCBwYXJhbXMucGF0aC5zcGxpdCgvW1xcXFwvXS8pLnNvbWUoKHBhcnQpID0+IHBhcnQgPT09ICcuJyB8fCBwYXJ0ID09PSAnLi4nKSB8fCAvXltcXFxcL118Oi8udGVzdChwYXJhbXMucGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgdmlydHVhbCBmaWxlIHJlcXVpcmVzIGEgdmF1bHQtcmVsYXRpdmUgZmlsZSBwYXRoJyk7XG4gIH1cbiAgY29uc3QgcmVzZXJ2YXRpb25zID0gZ2V0T2JzaWRpYW5MaWJTdGF0ZSgndmlydHVhbEZpbGVQYXRoc1YxJywgbmV3IFNldDxzdHJpbmc+KCkpLnZhbHVlO1xuICBjb25zdCBrZXkgPSBwYXRoLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChyZXNlcnZhdGlvbnMuaGFzKGtleSkgfHwgYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aEluc2Vuc2l0aXZlKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIGFscmVhZHkgZXhpc3RzOiAke3BhdGh9YCk7XG4gIH1cbiAgY29uc3QgcGFyZW50ID0gcGFyZW50Rm9sZGVyUGF0aChwYXRoKTtcbiAgaWYgKHBhcmVudCAmJiBwYXJlbnQgIT09ICcvJyAmJiAhYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChwYXJlbnQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXJlbnQgZm9sZGVyIGRvZXMgbm90IGV4aXN0OiAke3BhcmVudH1gKTtcbiAgfVxuICByZXNlcnZhdGlvbnMuYWRkKGtleSk7XG4gIHRyeSB7XG4gICAgaWYgKGF3YWl0IGFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhwYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIGFscmVhZHkgZXhpc3RzOiAke3BhdGh9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlID0gcGF0aC5lbmRzV2l0aCgnLm1kJykgPyBhd2FpdCBwYXJzZU1ldGFkYXRhKGFwcCwgY29udGVudCkgOiB7fTtcbiAgICAvLyBSZWNoZWNrIGFmdGVyIGFzeW5jaHJvbm91cyB3b3JrLCBiZWZvcmUgcHVibGlzaGluZyBhbnl0aGluZyB0byB0aGUgcmVzb2x2ZXIuXG4gICAgaWYgKGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGhJbnNlbnNpdGl2ZShwYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIGFscmVhZHkgZXhpc3RzOiAke3BhdGh9YCk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YWxsVmlydHVhbEZpbGUoeyBhcHAsIGNhY2hlLCBjb250ZW50LCBwYXRoLCByZXNlcnZhdGlvbnMgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzZXJ2YXRpb25zLmRlbGV0ZShrZXkpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc3RhbGxWaXJ0dWFsRmlsZShwYXJhbXM6IEluc3RhbGxWaXJ0dWFsRmlsZVBhcmFtcyk6IFZpcnR1YWxGaWxlIHtcbiAgY29uc3QgeyBhcHAsIGNhY2hlLCBjb250ZW50LCBwYXRoLCByZXNlcnZhdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGU6IHBhdGgsIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZSB9KTtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoY29udGVudCk7XG4gIGZpbGUuc3RhdCA9IHsgY3RpbWU6IERhdGUubm93KCksIG10aW1lOiBEYXRlLm5vdygpLCBzaXplOiBieXRlcy5ieXRlTGVuZ3RoIH07XG4gIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtieXRlc10sIHsgdHlwZTogcGF0aC5lbmRzV2l0aCgnLm1kJykgPyAndGV4dC9tYXJrZG93bjtjaGFyc2V0PXV0Zi04JyA6ICd0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnIH0pKTtcbiAgY29uc3QgcGF0Y2hlcyA9IG5ldyBNb25rZXlBcm91bmRDb21wb25lbnQoKTtcbiAgcGF0Y2hlcy5sb2FkKCk7XG4gIGNvbnN0IG1ldGFkYXRhID0gcmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGUoeyBhcHAsIGNhY2hlLCBwYXRoT3JGaWxlOiBmaWxlIH0pO1xuICBhcHAudmF1bHQuZmlsZU1hcFtwYXRoXSA9IGZpbGU7XG4gIGFwcC5tZXRhZGF0YUNhY2hlLnVuaXF1ZUZpbGVMb29rdXAuYWRkKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLCBmaWxlKTtcblxuICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goeyAkb2JqZWN0OiBhcHAudmF1bHQsIG1ldGhvZE5hbWU6ICdyZWFkJywgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxBcmd1bWVudHM6IFt0YXJnZXRdIH0pID0+IHRhcmdldCA9PT0gZmlsZSA/IFByb21pc2UucmVzb2x2ZShjb250ZW50KSA6IGZhbGxiYWNrKCkgfSk7XG4gIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7ICRvYmplY3Q6IGFwcC52YXVsdCwgbWV0aG9kTmFtZTogJ2NhY2hlZFJlYWQnLCBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogW3RhcmdldF0gfSkgPT4gdGFyZ2V0ID09PSBmaWxlID8gUHJvbWlzZS5yZXNvbHZlKGNvbnRlbnQpIDogZmFsbGJhY2soKSB9KTtcbiAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHsgJG9iamVjdDogYXBwLnZhdWx0LCBtZXRob2ROYW1lOiAncmVhZEJpbmFyeScsIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsQXJndW1lbnRzOiBbdGFyZ2V0XSB9KSA9PiB0YXJnZXQgPT09IGZpbGUgPyBQcm9taXNlLnJlc29sdmUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlcikgOiBmYWxsYmFjaygpIH0pO1xuICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goeyAkb2JqZWN0OiBhcHAudmF1bHQsIG1ldGhvZE5hbWU6ICdnZXRSZXNvdXJjZVBhdGgnLCBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogW3RhcmdldF0gfSkgPT4gdGFyZ2V0ID09PSBmaWxlID8gdXJsIDogZmFsbGJhY2soKSB9KTtcbiAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHsgJG9iamVjdDogYXBwLnZhdWx0LmFkYXB0ZXIsIG1ldGhvZE5hbWU6ICdyZWFkJywgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxBcmd1bWVudHM6IFt0YXJnZXRdIH0pID0+IGlzTWF0Y2hpbmcodGFyZ2V0KSA/IFByb21pc2UucmVzb2x2ZShjb250ZW50KSA6IGZhbGxiYWNrKCkgfSk7XG4gIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7ICRvYmplY3Q6IGFwcC52YXVsdC5hZGFwdGVyLCBtZXRob2ROYW1lOiAncmVhZEJpbmFyeScsIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsQXJndW1lbnRzOiBbdGFyZ2V0XSB9KSA9PiBpc01hdGNoaW5nKHRhcmdldCkgPyBQcm9taXNlLnJlc29sdmUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlcikgOiBmYWxsYmFjaygpIH0pO1xuICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goeyAkb2JqZWN0OiBhcHAudmF1bHQuYWRhcHRlciwgbWV0aG9kTmFtZTogJ2dldFJlc291cmNlUGF0aCcsIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsQXJndW1lbnRzOiBbdGFyZ2V0XSB9KSA9PiBpc01hdGNoaW5nKHRhcmdldCkgPyB1cmwgOiBmYWxsYmFjaygpIH0pO1xuXG4gIGZvciAoY29uc3QgbWV0aG9kTmFtZSBvZiBbJ2FwcGVuZCcsICdhcHBlbmRCaW5hcnknLCAnbW9kaWZ5JywgJ21vZGlmeUJpbmFyeScsICdwcm9jZXNzJywgJ2RlbGV0ZScsICd0cmFzaCddIGFzIGNvbnN0KSB7XG4gICAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgICRvYmplY3Q6IGFwcC52YXVsdCxcbiAgICAgIG1ldGhvZE5hbWUsXG4gICAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogW3RhcmdldF0gfSkgPT4ge1xuICAgICAgICBhc3NlcnRXcml0YWJsZSh0YXJnZXQucGF0aCk7XG4gICAgICAgIHJldHVybiBmYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7XG4gICAgJG9iamVjdDogYXBwLnZhdWx0LFxuICAgIG1ldGhvZE5hbWU6ICdyZW5hbWUnLFxuICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsQXJndW1lbnRzOiBbdGFyZ2V0LCBkZXN0aW5hdGlvbl0gfSkgPT4ge1xuICAgICAgYXNzZXJ0V3JpdGFibGUodGFyZ2V0LnBhdGgpO1xuICAgICAgYXNzZXJ0V3JpdGFibGUoZGVzdGluYXRpb24pO1xuICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgfVxuICB9KTtcbiAgZm9yIChjb25zdCBtZXRob2ROYW1lIG9mIFsnY3JlYXRlJywgJ2NyZWF0ZUJpbmFyeScsICdjcmVhdGVGb2xkZXInXSBhcyBjb25zdCkge1xuICAgIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7XG4gICAgICAkb2JqZWN0OiBhcHAudmF1bHQsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxBcmd1bWVudHM6IFt0YXJnZXRdIH0pID0+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGFibGUodGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAkb2JqZWN0OiBhcHAudmF1bHQsXG4gICAgbWV0aG9kTmFtZTogJ2NvcHknLFxuICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsQXJndW1lbnRzOiBbLCBkZXN0aW5hdGlvbl0gfSkgPT4ge1xuICAgICAgYXNzZXJ0V3JpdGFibGUoZGVzdGluYXRpb24pO1xuICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgfVxuICB9KTtcbiAgZm9yIChjb25zdCBtZXRob2ROYW1lIG9mIFsnd3JpdGUnLCAnd3JpdGVCaW5hcnknLCAnYXBwZW5kJywgJ2FwcGVuZEJpbmFyeScsICdwcm9jZXNzJywgJ3JlbW92ZScsICdybWRpcicsICd0cmFzaExvY2FsJywgJ3RyYXNoU3lzdGVtJywgJ21rZGlyJ10gYXMgY29uc3QpIHtcbiAgICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goe1xuICAgICAgJG9iamVjdDogYXBwLnZhdWx0LmFkYXB0ZXIsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgcGF0Y2hIYW5kbGVyOiAoeyBmYWxsYmFjaywgb3JpZ2luYWxBcmd1bWVudHM6IFt0YXJnZXRdIH0pID0+IHtcbiAgICAgICAgYXNzZXJ0V3JpdGFibGUodGFyZ2V0KTtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAkb2JqZWN0OiBhcHAudmF1bHQuYWRhcHRlcixcbiAgICBtZXRob2ROYW1lOiAncmVuYW1lJyxcbiAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogW3RhcmdldCwgZGVzdGluYXRpb25dIH0pID0+IHtcbiAgICAgIGFzc2VydFdyaXRhYmxlKHRhcmdldCk7XG4gICAgICBhc3NlcnRXcml0YWJsZShkZXN0aW5hdGlvbik7XG4gICAgICByZXR1cm4gZmFsbGJhY2soKTtcbiAgICB9XG4gIH0pO1xuICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goe1xuICAgICRvYmplY3Q6IGFwcC52YXVsdC5hZGFwdGVyLFxuICAgIG1ldGhvZE5hbWU6ICdjb3B5JyxcbiAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogWywgZGVzdGluYXRpb25dIH0pID0+IHtcbiAgICAgIGFzc2VydFdyaXRhYmxlKGRlc3RpbmF0aW9uKTtcbiAgICAgIHJldHVybiBmYWxsYmFjaygpO1xuICAgIH1cbiAgfSk7XG4gIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7XG4gICAgJG9iamVjdDogYXBwLmZpbGVNYW5hZ2VyLFxuICAgIG1ldGhvZE5hbWU6ICdyZW5hbWVGaWxlJyxcbiAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbEFyZ3VtZW50czogW3RhcmdldCwgZGVzdGluYXRpb25dIH0pID0+IHtcbiAgICAgIGFzc2VydFdyaXRhYmxlKHRhcmdldC5wYXRoKTtcbiAgICAgIGFzc2VydFdyaXRhYmxlKGRlc3RpbmF0aW9uKTtcbiAgICAgIHJldHVybiBmYWxsYmFjaygpO1xuICAgIH1cbiAgfSk7XG4gIHBhdGNoZXMucmVnaXN0ZXJNZXRob2RQYXRjaCh7XG4gICAgJG9iamVjdDogYXBwLmZpbGVNYW5hZ2VyLFxuICAgIG1ldGhvZE5hbWU6ICd0cmFzaEZpbGUnLFxuICAgIHBhdGNoSGFuZGxlcjogKHsgZmFsbGJhY2ssIG9yaWdpbmFsQXJndW1lbnRzOiBbdGFyZ2V0XSB9KSA9PiB7XG4gICAgICBhc3NlcnRXcml0YWJsZSh0YXJnZXQucGF0aCk7XG4gICAgICByZXR1cm4gZmFsbGJhY2soKTtcbiAgICB9XG4gIH0pO1xuICBwYXRjaGVzLnJlZ2lzdGVyTWV0aG9kUGF0Y2goe1xuICAgICRvYmplY3Q6IE1hcmtkb3duVmlldy5wcm90b3R5cGUsXG4gICAgbWV0aG9kTmFtZTogJ3NldFZpZXdEYXRhJyxcbiAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrLCBvcmlnaW5hbFRoaXMgfSkgPT4ge1xuICAgICAgZmFsbGJhY2soKTtcbiAgICAgIGlmIChvcmlnaW5hbFRoaXMuZmlsZSA9PT0gZmlsZSkge1xuICAgICAgICBwcm90ZWN0RWRpdG9yKG9yaWdpbmFsVGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAkb2JqZWN0OiBNYXJrZG93blZpZXcucHJvdG90eXBlLFxuICAgIG1ldGhvZE5hbWU6ICdvbkxvYWRGaWxlJyxcbiAgICBwYXRjaEhhbmRsZXI6IGFzeW5jICh7IGZhbGxiYWNrLCBvcmlnaW5hbFRoaXMgfSkgPT4ge1xuICAgICAgYXdhaXQgZmFsbGJhY2soKTtcbiAgICAgIGlmIChvcmlnaW5hbFRoaXMuZmlsZSA9PT0gZmlsZSkge1xuICAgICAgICBwcm90ZWN0RWRpdG9yKG9yaWdpbmFsVGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcGF0Y2hlcy5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAkb2JqZWN0OiBNYXJrZG93blZpZXcucHJvdG90eXBlLFxuICAgIG1ldGhvZE5hbWU6ICdzZXRNb2RlJyxcbiAgICBwYXRjaEhhbmRsZXI6IGFzeW5jICh7IGZhbGxiYWNrLCBvcmlnaW5hbFRoaXMgfSkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1jb25mdXNpbmctdm9pZC1leHByZXNzaW9uIC0tIE9ic2lkaWFuIHJldHVybnMgYSBib29sZWFuIGRlc3BpdGUgaXRzIHZvaWQgZGVjbGFyYXRpb247IHNldFN0YXRlIGNvbnN1bWVzIHRoYXQgcmVzdWx0LlxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmFsbGJhY2soKTtcbiAgICAgIGlmIChvcmlnaW5hbFRoaXMuZmlsZSA9PT0gZmlsZSkge1xuICAgICAgICBwcm90ZWN0RWRpdG9yKG9yaWdpbmFsVGhpcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZGlzcG9zYWJsZSA9IG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBhcHAud29ya3NwYWNlLml0ZXJhdGVBbGxMZWF2ZXMoKGxlYWYpID0+IHtcbiAgICAgICAgaWYgKCdmaWxlJyBpbiBsZWFmLnZpZXcgJiYgbGVhZi52aWV3LmZpbGUgPT09IGZpbGUpIHtcbiAgICAgICAgICBsZWFmLmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGFwcC5tZXRhZGF0YUNhY2hlLnVuaXF1ZUZpbGVMb29rdXAucmVtb3ZlKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLCBmaWxlKTtcbiAgICAgIGlmIChhcHAudmF1bHQuZmlsZU1hcFtwYXRoXSA9PT0gZmlsZSkge1xuICAgICAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGFwcC52YXVsdC5maWxlTWFwLCBwYXRoKTtcbiAgICAgICAgbWV0YWRhdGEuZGlzcG9zZSgpO1xuICAgICAgfVxuICAgICAgcGF0Y2hlcy51bmxvYWQoKTtcbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICByZXNlcnZhdGlvbnMuZGVsZXRlKHBhdGgudG9Mb3dlckNhc2UoKSk7XG4gICAgfSxcbiAgICBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNvbnRlbnQsXG4gICAgZGlzcG9zZTogZGlzcG9zZVJlZ2lzdHJhdGlvbixcbiAgICBmaWxlLFxuICAgIFtTeW1ib2wuZGlzcG9zZV06IGRpc3Bvc2VSZWdpc3RyYXRpb25cbiAgfTtcblxuICBmdW5jdGlvbiBkaXNwb3NlUmVnaXN0cmF0aW9uKCk6IHZvaWQge1xuICAgIGRpc3Bvc2FibGUuZGlzcG9zZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNNYXRjaGluZyh0YXJnZXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBub3JtYWxpemVQYXRoKHRhcmdldCkudG9Mb3dlckNhc2UoKSA9PT0gcGF0aC50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvdGVjdEVkaXRvcih2aWV3OiBNYXJrZG93blZpZXcpOiB2b2lkIHtcbiAgICB0b2dnbGVFZGl0b3JSZWFkT25seSh2aWV3LmVkaXRvciwgdHJ1ZSk7XG4gICAgLy8gQSB2aXJ0dWFsIGZpbGUgaXMgaW1tdXRhYmxlIGV2ZW4gdG8gcHJvZ3JhbW1hdGljIGVkaXRvciB0cmFuc2FjdGlvbnMuIFRoZSBvcmRpbmFyeSByZXNvdXJjZVxuICAgIC8vIGxvY2sgcGVybWl0cyB0aG9zZSBmb3Igcm9sbGJhY2s7IHRoaXMgcmVnaXN0cmF0aW9uIGhhcyBubyB3cml0YWJsZSBidWZmZXIgdG8gcm9sbCBiYWNrLlxuICAgIHZpZXcuZWRpdG9yLmNtLmRpc3BhdGNoKHtcbiAgICAgIGVmZmVjdHM6IFN0YXRlRWZmZWN0LmFwcGVuZENvbmZpZy5vZihFZGl0b3JTdGF0ZS5jaGFuZ2VGaWx0ZXIub2YoKCkgPT4gdmlldy5maWxlICE9PSBmaWxlKSlcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzc2VydFdyaXRhYmxlKHRhcmdldDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVBhdGgodGFyZ2V0KS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChpc01hdGNoaW5nKHRhcmdldCkgfHwgcGF0aC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZH0vYCkgfHwgbm9ybWFsaXplZCA9PT0gJy8nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZpcnR1YWwgZmlsZSBpcyByZWFkLW9ubHk6ICR7cGF0aH1gKTtcbiAgICB9XG4gIH1cbn1cbiJd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
@@ -3,6 +3,7 @@
3
3
  * @file
4
4
  * Disposable, read-only files backed by memory instead of the vault adapter.
5
5
  */
6
+ import type { DisposableEx } from '@mnaoumov/typescript-lib/disposable' with { 'resolution-mode': 'import' };
6
7
  import type { App, TFile } from 'obsidian' with { 'resolution-mode': 'import' };
7
8
  /**
8
9
  Parameters for {@link registerVirtualFile}.
@@ -24,7 +25,7 @@ export interface RegisterVirtualFileParams {
24
25
  /**
25
26
  A memory file and its lifetime. Dispose it before its owning plugin unloads.
26
27
  */
27
- export interface VirtualFile extends Disposable {
28
+ export interface VirtualFile extends DisposableEx {
28
29
  /**
29
30
  The immutable text; accessing it requires no asynchronous read.
30
31
  */
@@ -0,0 +1,119 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function patchObsidianRequire() {
6
+ const originalRequire = require;
7
+ if (!originalRequire || originalRequire.__isPatched) {
8
+ return;
9
+ }
10
+ require = Object.assign(
11
+ (id) => requirePatched(id),
12
+ originalRequire,
13
+ {
14
+ __isPatched: true
15
+ }
16
+ );
17
+ function extractDefault($module) {
18
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
19
+ }
20
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
21
+ "@codemirror/autocomplete",
22
+ "@codemirror/collab",
23
+ "@codemirror/commands",
24
+ "@codemirror/language",
25
+ "@codemirror/lint",
26
+ "@codemirror/search",
27
+ "@codemirror/state",
28
+ "@codemirror/text",
29
+ "@codemirror/view",
30
+ "@lezer/common",
31
+ "@lezer/highlight",
32
+ "@lezer/lr",
33
+ "obsidian"
34
+ ]);
35
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
36
+ "@codemirror/closebrackets",
37
+ "@codemirror/comment",
38
+ "@codemirror/fold",
39
+ "@codemirror/gutter",
40
+ "@codemirror/highlight",
41
+ "@codemirror/history",
42
+ "@codemirror/matchbrackets",
43
+ "@codemirror/panel",
44
+ "@codemirror/rangeset",
45
+ "@codemirror/rectangular-selection",
46
+ "@codemirror/stream-parser",
47
+ "@codemirror/tooltip"
48
+ ]);
49
+ function requirePatched(id) {
50
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
51
+ return originalRequire?.(id);
52
+ }
53
+ const app = globalThis.app;
54
+ if (app?.isMobile) {
55
+ if (id === "process" || id === "node:process") {
56
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
57
+ return process;
58
+ }
59
+ } else {
60
+ const $module = originalRequire?.(id);
61
+ if ($module) {
62
+ return extractDefault($module);
63
+ }
64
+ }
65
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
66
+ return {};
67
+ }
68
+ })();
69
+
70
+ "use strict";
71
+ var __defProp = Object.defineProperty;
72
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
73
+ var __getOwnPropNames = Object.getOwnPropertyNames;
74
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
75
+ var __export = (target, all) => {
76
+ for (var name in all)
77
+ __defProp(target, name, { get: all[name], enumerable: true });
78
+ };
79
+ var __copyProps = (to, from, except, desc) => {
80
+ if (from && typeof from === "object" || typeof from === "function") {
81
+ for (let key of __getOwnPropNames(from))
82
+ if (!__hasOwnProp.call(to, key) && key !== except)
83
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
84
+ }
85
+ return to;
86
+ };
87
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
88
+ var wasm_exports = {};
89
+ __export(wasm_exports, {
90
+ compileWasmModule: () => compileWasmModule,
91
+ instantiateWasmModule: () => instantiateWasmModule
92
+ });
93
+ module.exports = __toCommonJS(wasm_exports);
94
+ const compiledModules = /* @__PURE__ */ new WeakMap();
95
+ async function compileWasmModule(bytes) {
96
+ let promise = compiledModules.get(bytes);
97
+ if (!promise) {
98
+ promise = WebAssembly.compile(toBufferSource(bytes));
99
+ compiledModules.set(bytes, promise);
100
+ promise.catch(() => {
101
+ compiledModules.delete(bytes);
102
+ });
103
+ }
104
+ return await promise;
105
+ }
106
+ async function instantiateWasmModule(source, imports = {}) {
107
+ const compiledModule = source instanceof WebAssembly.Module ? source : await compileWasmModule(source);
108
+ const instance = await WebAssembly.instantiate(compiledModule, imports);
109
+ return { exports: instance.exports, instance, module: compiledModule };
110
+ }
111
+ function toBufferSource(bytes) {
112
+ return bytes;
113
+ }
114
+ // Annotate the CommonJS export names for ESM import in node:
115
+ 0 && (module.exports = {
116
+ compileWasmModule,
117
+ instantiateWasmModule
118
+ });
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93YXNtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21waWxlcyBhbmQgaW5zdGFudGlhdGVzIFdlYkFzc2VtYmx5IG1vZHVsZXMgaW5saW5lZCBpbnRvIGEgcGx1Z2luJ3MgYnVuZGxlLlxuICpcbiAqIGBAbW5hb3Vtb3Yvb2JzaWRpYW4tZGV2LXRvb2xraXRgJ3MgYHdhc21gIGZlYXR1cmUgdHVybnMgYGltcG9ydCBieXRlcyBmcm9tICcuL21vZHVsZS53YXNtJ2AgaW50byBhIGBVaW50OEFycmF5YC4gVGhlc2VcbiAqIGhlbHBlcnMgY29tcGlsZSB0aG9zZSBieXRlcyBvbmNlIHBlciBieXRlcyBvYmplY3QgYW5kIGluc3RhbnRpYXRlIHRoZW0gd2l0aCB0eXBlZCBleHBvcnRzLiBUaGUgbW9kdWxlIGltcG9ydHMgbm90aGluZyxcbiAqIHNvIGEgd29ya2VyIGVudHJ5IHBvaW50IGNhbiBpbXBvcnQgaXQgdG9vLCBhbmQgYSBjb21waWxlZCBgV2ViQXNzZW1ibHkuTW9kdWxlYCBjYW4gYmUgcGFzc2VkIHRvIGEgd29ya2VyIGFzIGEgY2FsbFxuICogYXJndW1lbnQsIGJlY2F1c2UgaXQgaXMgc3RydWN0dXJlZC1jbG9uZWFibGUuXG4gKi9cblxuLyoqXG4gKiBBbiBpbnN0YW50aWF0ZWQgbW9kdWxlIHdpdGggdHlwZWQgZXhwb3J0cy5cbiAqXG4gKiBAdHlwZVBhcmFtIFRFeHBvcnRzIC0gVGhlIGV4cG9ydHMgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXNtSW5zdGFuY2U8VEV4cG9ydHMgZXh0ZW5kcyBXZWJBc3NlbWJseS5FeHBvcnRzPiB7XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UncyBleHBvcnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhwb3J0czogVEV4cG9ydHM7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlOiBXZWJBc3NlbWJseS5JbnN0YW5jZTtcblxuICAvKipcbiAgICogVGhlIGNvbXBpbGVkIG1vZHVsZSwgcmV1c2FibGUgZm9yIG1vcmUgaW5zdGFuY2VzIGFuZCBwYXNzYWJsZSB0byBhIHdvcmtlci5cbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZTogV2ViQXNzZW1ibHkuTW9kdWxlO1xufVxuXG5jb25zdCBjb21waWxlZE1vZHVsZXMgPSBuZXcgV2Vha01hcDxvYmplY3QsIFByb21pc2U8V2ViQXNzZW1ibHkuTW9kdWxlPj4oKTtcblxuLyoqXG4gKiBDb21waWxlcyBXZWJBc3NlbWJseSBieXRlcywgb25jZSBwZXIgYnl0ZXMgb2JqZWN0LlxuICpcbiAqIFRoZSBjYWNoZSBpcyBrZXllZCBieSB0aGUgYnl0ZXMgb2JqZWN0IGl0c2VsZiwgc28gdGhlIGNvbnN0YW50IGFuIGlubGluZWQgYC53YXNtYCBpbXBvcnQgZ2l2ZXMgaXMgY29tcGlsZWQgb25jZVxuICogaG93ZXZlciBtYW55IHRpbWVzIGl0IGlzIGFza2VkIGZvciwgYW5kIHRoZSBjb21waWxlZCBtb2R1bGUgaXMgcmVsZWFzZWQgd2l0aCB0aGF0IGNvbnN0YW50IHdoZW4gdGhlIHBsdWdpbiB1bmxvYWRzLiBBXG4gKiBmYWlsZWQgY29tcGlsYXRpb24gaXMgbm90IGNhY2hlZC5cbiAqXG4gKiBAcGFyYW0gYnl0ZXMgLSBUaGUgbW9kdWxlJ3MgYnl0ZXMuXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgbW9kdWxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcGlsZVdhc21Nb2R1bGUoYnl0ZXM6IEFycmF5QnVmZmVyIHwgQXJyYXlCdWZmZXJWaWV3KTogUHJvbWlzZTxXZWJBc3NlbWJseS5Nb2R1bGU+IHtcbiAgbGV0IHByb21pc2UgPSBjb21waWxlZE1vZHVsZXMuZ2V0KGJ5dGVzKTtcbiAgaWYgKCFwcm9taXNlKSB7XG4gICAgcHJvbWlzZSA9IFdlYkFzc2VtYmx5LmNvbXBpbGUodG9CdWZmZXJTb3VyY2UoYnl0ZXMpKTtcbiAgICBjb21waWxlZE1vZHVsZXMuc2V0KGJ5dGVzLCBwcm9taXNlKTtcbiAgICBwcm9taXNlLmNhdGNoKCgpID0+IHtcbiAgICAgIGNvbXBpbGVkTW9kdWxlcy5kZWxldGUoYnl0ZXMpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBhd2FpdCBwcm9taXNlO1xufVxuXG4vKipcbiAqIEluc3RhbnRpYXRlcyBhIFdlYkFzc2VtYmx5IG1vZHVsZSwgY29tcGlsaW5nIGl0IGZpcnN0IHdoZW4gZ2l2ZW4gYnl0ZXMuXG4gKlxuICogRWFjaCBjYWxsIG1ha2VzIGEgbmV3IGluc3RhbmNlIHdpdGggaXRzIG93biBtZW1vcnk7IG5vdGhpbmcgaGVyZSBrZWVwcyB0aGUgaW5zdGFuY2UsIHNvIGRyb3BwaW5nIGV2ZXJ5IHJlZmVyZW5jZSB0b1xuICogaXQgbGV0cyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgZnJlZSB0aGF0IG1lbW9yeS4gS2VlcCBpdCBpbiBhIGZpZWxkIGNsZWFyZWQgb24gdW5sb2FkIHJhdGhlciB0aGFuIGF0IG1vZHVsZSBzY29wZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRFeHBvcnRzIC0gVGhlIGV4cG9ydHMgdHlwZS4gSXQgaXMgbm90IGNoZWNrZWQgYWdhaW5zdCB0aGUgbW9kdWxlLlxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBtb2R1bGUncyBieXRlcywgb3IgYSBtb2R1bGUgY29tcGlsZWQgYnkge0BsaW5rIGNvbXBpbGVXYXNtTW9kdWxlfS5cbiAqIEBwYXJhbSBpbXBvcnRzIC0gVGhlIGltcG9ydCBvYmplY3QuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2Ugd2l0aCB0eXBlZCBleHBvcnRzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFudGlhdGVXYXNtTW9kdWxlPFRFeHBvcnRzIGV4dGVuZHMgV2ViQXNzZW1ibHkuRXhwb3J0cyA9IFdlYkFzc2VtYmx5LkV4cG9ydHM+KFxuICBzb3VyY2U6IEFycmF5QnVmZmVyIHwgQXJyYXlCdWZmZXJWaWV3IHwgV2ViQXNzZW1ibHkuTW9kdWxlLFxuICBpbXBvcnRzOiBXZWJBc3NlbWJseS5JbXBvcnRzID0ge31cbik6IFByb21pc2U8V2FzbUluc3RhbmNlPFRFeHBvcnRzPj4ge1xuICBjb25zdCBjb21waWxlZE1vZHVsZSA9IHNvdXJjZSBpbnN0YW5jZW9mIFdlYkFzc2VtYmx5Lk1vZHVsZSA/IHNvdXJjZSA6IGF3YWl0IGNvbXBpbGVXYXNtTW9kdWxlKHNvdXJjZSk7XG4gIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoY29tcGlsZWRNb2R1bGUsIGltcG9ydHMpO1xuICByZXR1cm4geyBleHBvcnRzOiBpbnN0YW5jZS5leHBvcnRzIGFzIFRFeHBvcnRzLCBpbnN0YW5jZSwgbW9kdWxlOiBjb21waWxlZE1vZHVsZSB9O1xufVxuXG5mdW5jdGlvbiB0b0J1ZmZlclNvdXJjZShieXRlczogQXJyYXlCdWZmZXIgfCBBcnJheUJ1ZmZlclZpZXcpOiBCdWZmZXJTb3VyY2Uge1xuICByZXR1cm4gYnl0ZXMgYXMgQnVmZmVyU291cmNlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpQ0EsTUFBTSxrQkFBa0Isb0JBQUksUUFBNkM7QUFZekUsZUFBc0Isa0JBQWtCLE9BQW1FO0FBQ3pHLE1BQUksVUFBVSxnQkFBZ0IsSUFBSSxLQUFLO0FBQ3ZDLE1BQUksQ0FBQyxTQUFTO0FBQ1osY0FBVSxZQUFZLFFBQVEsZUFBZSxLQUFLLENBQUM7QUFDbkQsb0JBQWdCLElBQUksT0FBTyxPQUFPO0FBQ2xDLFlBQVEsTUFBTSxNQUFNO0FBQ2xCLHNCQUFnQixPQUFPLEtBQUs7QUFBQSxJQUM5QixDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sTUFBTTtBQUNmO0FBYUEsZUFBc0Isc0JBQ3BCLFFBQ0EsVUFBK0IsQ0FBQyxHQUNDO0FBQ2pDLFFBQU0saUJBQWlCLGtCQUFrQixZQUFZLFNBQVMsU0FBUyxNQUFNLGtCQUFrQixNQUFNO0FBQ3JHLFFBQU0sV0FBVyxNQUFNLFlBQVksWUFBWSxnQkFBZ0IsT0FBTztBQUN0RSxTQUFPLEVBQUUsU0FBUyxTQUFTLFNBQXFCLFVBQVUsUUFBUSxlQUFlO0FBQ25GO0FBRUEsU0FBUyxlQUFlLE9BQW9EO0FBQzFFLFNBQU87QUFDVDsiLCJuYW1lcyI6W119
@@ -0,0 +1,54 @@
1
+ /// <reference path="./library-references.d.cts" />
2
+ /// <reference lib="dom" />
3
+ /**
4
+ * @file
5
+ *
6
+ * Compiles and instantiates WebAssembly modules inlined into a plugin's bundle.
7
+ *
8
+ * `@mnaoumov/obsidian-dev-toolkit`'s `wasm` feature turns `import bytes from './module.wasm'` into a `Uint8Array`. These
9
+ * helpers compile those bytes once per bytes object and instantiate them with typed exports. The module imports nothing,
10
+ * so a worker entry point can import it too, and a compiled `WebAssembly.Module` can be passed to a worker as a call
11
+ * argument, because it is structured-cloneable.
12
+ */
13
+ /**
14
+ * An instantiated module with typed exports.
15
+ *
16
+ * @typeParam TExports - The exports type.
17
+ */
18
+ export interface WasmInstance<TExports extends WebAssembly.Exports> {
19
+ /**
20
+ * The instance's exports.
21
+ */
22
+ readonly exports: TExports;
23
+ /**
24
+ * The instance.
25
+ */
26
+ readonly instance: WebAssembly.Instance;
27
+ /**
28
+ * The compiled module, reusable for more instances and passable to a worker.
29
+ */
30
+ readonly module: WebAssembly.Module;
31
+ }
32
+ /**
33
+ * Compiles WebAssembly bytes, once per bytes object.
34
+ *
35
+ * The cache is keyed by the bytes object itself, so the constant an inlined `.wasm` import gives is compiled once
36
+ * however many times it is asked for, and the compiled module is released with that constant when the plugin unloads. A
37
+ * failed compilation is not cached.
38
+ *
39
+ * @param bytes - The module's bytes.
40
+ * @returns The compiled module.
41
+ */
42
+ export declare function compileWasmModule(bytes: ArrayBuffer | ArrayBufferView): Promise<WebAssembly.Module>;
43
+ /**
44
+ * Instantiates a WebAssembly module, compiling it first when given bytes.
45
+ *
46
+ * Each call makes a new instance with its own memory; nothing here keeps the instance, so dropping every reference to
47
+ * it lets the garbage collector free that memory. Keep it in a field cleared on unload rather than at module scope.
48
+ *
49
+ * @typeParam TExports - The exports type. It is not checked against the module.
50
+ * @param source - The module's bytes, or a module compiled by {@link compileWasmModule}.
51
+ * @param imports - The import object.
52
+ * @returns The instance with typed exports.
53
+ */
54
+ export declare function instantiateWasmModule<TExports extends WebAssembly.Exports = WebAssembly.Exports>(source: ArrayBuffer | ArrayBufferView | WebAssembly.Module, imports?: WebAssembly.Imports): Promise<WasmInstance<TExports>>;
@@ -0,0 +1,209 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function patchObsidianRequire() {
6
+ const originalRequire = require;
7
+ if (!originalRequire || originalRequire.__isPatched) {
8
+ return;
9
+ }
10
+ require = Object.assign(
11
+ (id) => requirePatched(id),
12
+ originalRequire,
13
+ {
14
+ __isPatched: true
15
+ }
16
+ );
17
+ function extractDefault($module) {
18
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
19
+ }
20
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
21
+ "@codemirror/autocomplete",
22
+ "@codemirror/collab",
23
+ "@codemirror/commands",
24
+ "@codemirror/language",
25
+ "@codemirror/lint",
26
+ "@codemirror/search",
27
+ "@codemirror/state",
28
+ "@codemirror/text",
29
+ "@codemirror/view",
30
+ "@lezer/common",
31
+ "@lezer/highlight",
32
+ "@lezer/lr",
33
+ "obsidian"
34
+ ]);
35
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
36
+ "@codemirror/closebrackets",
37
+ "@codemirror/comment",
38
+ "@codemirror/fold",
39
+ "@codemirror/gutter",
40
+ "@codemirror/highlight",
41
+ "@codemirror/history",
42
+ "@codemirror/matchbrackets",
43
+ "@codemirror/panel",
44
+ "@codemirror/rangeset",
45
+ "@codemirror/rectangular-selection",
46
+ "@codemirror/stream-parser",
47
+ "@codemirror/tooltip"
48
+ ]);
49
+ function requirePatched(id) {
50
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
51
+ return originalRequire?.(id);
52
+ }
53
+ const app = globalThis.app;
54
+ if (app?.isMobile) {
55
+ if (id === "process" || id === "node:process") {
56
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
57
+ return process;
58
+ }
59
+ } else {
60
+ const $module = originalRequire?.(id);
61
+ if ($module) {
62
+ return extractDefault($module);
63
+ }
64
+ }
65
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
66
+ return {};
67
+ }
68
+ })();
69
+
70
+ "use strict";
71
+ var __defProp = Object.defineProperty;
72
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
73
+ var __getOwnPropNames = Object.getOwnPropertyNames;
74
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
75
+ var __export = (target, all) => {
76
+ for (var name in all)
77
+ __defProp(target, name, { get: all[name], enumerable: true });
78
+ };
79
+ var __copyProps = (to, from, except, desc) => {
80
+ if (from && typeof from === "object" || typeof from === "function") {
81
+ for (let key of __getOwnPropNames(from))
82
+ if (!__hasOwnProp.call(to, key) && key !== except)
83
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
84
+ }
85
+ return to;
86
+ };
87
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
88
+ var worker_protocol_exports = {};
89
+ __export(worker_protocol_exports, {
90
+ WORKER_PROTOCOL: () => WORKER_PROTOCOL,
91
+ exposeWorkerApi: () => exposeWorkerApi,
92
+ invokeWorkerHandler: () => invokeWorkerHandler,
93
+ isTransferredValue: () => isTransferredValue,
94
+ isWorkerRequestMessage: () => isWorkerRequestMessage,
95
+ isWorkerResponseMessage: () => isWorkerResponseMessage,
96
+ serializeWorkerError: () => serializeWorkerError,
97
+ unwrapTransferredValue: () => unwrapTransferredValue,
98
+ withTransfer: () => withTransfer
99
+ });
100
+ module.exports = __toCommonJS(worker_protocol_exports);
101
+ const WORKER_PROTOCOL = "obsidian-lib-worker-v1";
102
+ function exposeWorkerApi(handlers, port) {
103
+ const messagePort = port ?? getWorkerGlobalScope();
104
+ const abortControllers = /* @__PURE__ */ new Map();
105
+ messagePort.addEventListener("message", ($event) => {
106
+ const message = $event.data;
107
+ if (!isWorkerRequestMessage(message)) {
108
+ return;
109
+ }
110
+ if (message.kind === "cancel") {
111
+ abortControllers.get(message.id)?.abort(new Error("The call was cancelled"));
112
+ return;
113
+ }
114
+ const abortController = new AbortController();
115
+ abortControllers.set(message.id, abortController);
116
+ void answerCall(message, abortController.signal);
117
+ });
118
+ async function answerCall(message, abortSignal) {
119
+ let response;
120
+ try {
121
+ const value = await invokeWorkerHandler(handlers, message.method, message.arguments, { abortSignal });
122
+ response = { id: message.id, kind: "result", protocol: WORKER_PROTOCOL, value };
123
+ } catch (error) {
124
+ response = { error: serializeWorkerError(error), id: message.id, kind: "error", protocol: WORKER_PROTOCOL };
125
+ }
126
+ abortControllers.delete(message.id);
127
+ postResponse(messagePort, response);
128
+ }
129
+ }
130
+ async function invokeWorkerHandler(handlers, method, callArguments, context) {
131
+ const handler = Object.hasOwn(handlers, method) ? handlers[method] : void 0;
132
+ if (typeof handler !== "function") {
133
+ throw new TypeError(`The worker exposes no method named '${method}'`);
134
+ }
135
+ return await handler.apply(context, [...callArguments]);
136
+ }
137
+ function isTransferredValue(value) {
138
+ return typeof value === "object" && value !== null && value.__obsidianLibTransferredValue === true;
139
+ }
140
+ function isWorkerRequestMessage(message) {
141
+ if (!hasProtocol(message)) {
142
+ return false;
143
+ }
144
+ const candidate = message;
145
+ if (typeof candidate.id !== "number") {
146
+ return false;
147
+ }
148
+ if (candidate.kind === "cancel") {
149
+ return true;
150
+ }
151
+ return candidate.kind === "call" && typeof candidate.method === "string" && Array.isArray(candidate.arguments);
152
+ }
153
+ function isWorkerResponseMessage(message) {
154
+ if (!hasProtocol(message)) {
155
+ return false;
156
+ }
157
+ const candidate = message;
158
+ if (typeof candidate.id !== "number") {
159
+ return false;
160
+ }
161
+ if (candidate.kind === "result") {
162
+ return true;
163
+ }
164
+ return candidate.kind === "error" && typeof candidate.error === "object";
165
+ }
166
+ function serializeWorkerError(error) {
167
+ if (!(error instanceof Error)) {
168
+ return { message: String(error), name: "Error" };
169
+ }
170
+ return error.stack === void 0 ? { message: error.message, name: error.name } : { message: error.message, name: error.name, stack: error.stack };
171
+ }
172
+ function unwrapTransferredValue(result) {
173
+ return isTransferredValue(result) ? { transfer: [...result.transfer], value: result.value } : { transfer: [], value: result };
174
+ }
175
+ function withTransfer(value, transfer) {
176
+ return { __obsidianLibTransferredValue: true, transfer, value };
177
+ }
178
+ function getWorkerGlobalScope() {
179
+ const scope = globalThis;
180
+ return scope;
181
+ }
182
+ function hasProtocol(message) {
183
+ return typeof message === "object" && message !== null && message.protocol === WORKER_PROTOCOL;
184
+ }
185
+ function postResponse(port, response) {
186
+ if (response.kind === "error") {
187
+ port.postMessage(response, []);
188
+ return;
189
+ }
190
+ const { transfer, value } = unwrapTransferredValue(response.value);
191
+ try {
192
+ port.postMessage({ ...response, value }, transfer);
193
+ } catch (error) {
194
+ port.postMessage({ error: serializeWorkerError(error), id: response.id, kind: "error", protocol: WORKER_PROTOCOL }, []);
195
+ }
196
+ }
197
+ // Annotate the CommonJS export names for ESM import in node:
198
+ 0 && (module.exports = {
199
+ WORKER_PROTOCOL,
200
+ exposeWorkerApi,
201
+ invokeWorkerHandler,
202
+ isTransferredValue,
203
+ isWorkerRequestMessage,
204
+ isWorkerResponseMessage,
205
+ serializeWorkerError,
206
+ unwrapTransferredValue,
207
+ withTransfer
208
+ });
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93b3JrZXItcHJvdG9jb2wudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBtZXNzYWdlIHByb3RvY29sIGJldHdlZW4gYFdvcmtlckNvbXBvbmVudGAgb24gdGhlIG1haW4gdGhyZWFkIGFuZCB7QGxpbmsgZXhwb3NlV29ya2VyQXBpfSBpbnNpZGUgYSB3b3JrZXIuXG4gKlxuICogVGhpcyBtb2R1bGUgaW1wb3J0cyBub3RoaW5nLCBzbyBhIHdvcmtlciBlbnRyeSBwb2ludCBidW5kbGVkIGJ5IGBAbW5hb3Vtb3Yvb2JzaWRpYW4tZGV2LXRvb2xraXRgJ3MgYHdvcmtlcnNgIGZlYXR1cmVcbiAqIGNhbiBpbXBvcnQgaXQ6IGEgd29ya2VyIGhhcyBubyBgb2JzaWRpYW5gIG1vZHVsZSBhbmQgbm8gTm9kZSBidWlsdGlucy4gSXRzIG1lc3NhZ2Ugc2hhcGVzIGFyZSBhIHdpcmUgZm9ybWF0IGJldHdlZW5cbiAqIHRoZSBwbHVnaW4ncyBtYWluIGJ1bmRsZSBhbmQgaXRzIHdvcmtlciBidW5kbGUsIHdoaWNoIG1heSBjb21lIGZyb20gZGlmZmVyZW50IGNvcGllcyBvZiB0aGlzIGxpYnJhcnksIHNvIGZpZWxkcyBhcmVcbiAqIG9ubHkgZXZlciBhZGRlZCBhbmQgYSBjaGFuZ2Ugb2YgbWVhbmluZyBtb3ZlcyB0byBhIG5ldyB7QGxpbmsgV09SS0VSX1BST1RPQ09MfSB2YWx1ZS5cbiAqL1xuXG4vKipcbiAqIFRoZSB0YWcgZXZlcnkgbWVzc2FnZSBvZiB0aGlzIHByb3RvY29sIGNhcnJpZXMuIE1lc3NhZ2VzIHdpdGhvdXQgaXQgYXJlIGlnbm9yZWQgb24gYm90aCBzaWRlcywgc28gYSB3b3JrZXIgY2FuXG4gKiBleGNoYW5nZSBpdHMgb3duIG1lc3NhZ2VzIHRvby5cbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktFUl9QUk9UT0NPTCA9ICdvYnNpZGlhbi1saWItd29ya2VyLXYxJztcblxuLyoqXG4gKiBBbiBlcnJvciByZWR1Y2VkIHRvIHBsYWluIGRhdGEsIGJlY2F1c2UgYW4gYEVycm9yYCBsb3NlcyBpdHMgY2xhc3MgYWNyb3NzIHRoZSB3b3JrZXIgYm91bmRhcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFdvcmtlckVycm9yIHtcbiAgLyoqXG4gICAqIFRoZSBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIGluIHRoZSB3b3JrZXIsIHdoZW4gdGhlcmUgd2FzIG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVzdWx0IG1hcmtlZCB0byB0cmFuc2ZlciBzb21lIG9mIGl0cyBvYmplY3RzIHJhdGhlciB0aGFuIGNvcHkgdGhlbS4gQnVpbGQgaXQgd2l0aCB7QGxpbmsgd2l0aFRyYW5zZmVyfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZmVycmVkVmFsdWU8VFZhbHVlPiB7XG4gIC8qKlxuICAgKiBUaGUgbWFya2VyIHRoYXQgaWRlbnRpZmllcyB0aGUgd3JhcHBlciBzdHJ1Y3R1cmFsbHksIHNvIGEgd3JhcHBlciBidWlsdCBieSBhbm90aGVyIGNvcHkgb2YgdGhpcyBsaWJyYXJ5IGlzXG4gICAqIHJlY29nbml6ZWQgdG9vLlxuICAgKi9cbiAgcmVhZG9ubHkgX19vYnNpZGlhbkxpYlRyYW5zZmVycmVkVmFsdWU6IHRydWU7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3RzIHRvIHRyYW5zZmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNmZXI6IHJlYWRvbmx5IFRyYW5zZmVyYWJsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogVFZhbHVlO1xufVxuXG4vKipcbiAqIEEgdmFsdWUgc3BsaXQgZnJvbSBpdHMgdHJhbnNmZXIgbGlzdCwgcmVhZHkgdG8gcG9zdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbndyYXBwZWRUcmFuc2ZlcnJlZFZhbHVlIHtcbiAgLyoqXG4gICAqIFRoZSBvYmplY3RzIHRvIHRyYW5zZmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNmZXI6IFRyYW5zZmVyYWJsZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgdG8gcG9zdC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xufVxuXG4vKipcbiAqIEFuIEFQSSBhIHdvcmtlciBleHBvc2VzOiBhbiBvYmplY3Qgd2hvc2UgZXZlcnkgbWVtYmVyIGlzIGEgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUQXBpIC0gVGhlIEFQSSB0eXBlLlxuICovXG5leHBvcnQgdHlwZSBXb3JrZXJBcGk8VEFwaT4gPSB7IHJlYWRvbmx5IFtUTWV0aG9kIGluIGtleW9mIFRBcGldOiAoLi4ucGFyYW1ldGVyczogbmV2ZXJbXSkgPT4gdW5rbm93biB9O1xuXG4vKipcbiAqIFRoZSBoYW5kbGVycyBpbXBsZW1lbnRpbmcgYSB7QGxpbmsgV29ya2VyQXBpfSwgd2l0aCB0aGUge0BsaW5rIFdvcmtlckNhbGxDb250ZXh0fSBhcyBgdGhpc2AuXG4gKlxuICogRWFjaCBoYW5kbGVyIHRha2VzIHRoZSBtZXRob2QncyBhcmd1bWVudHMgYW5kIHJldHVybnMgaXRzIHJlc3VsdCwgb3IgYSBwcm9taXNlIG9mIGl0LCBvciB0aGUgcmVzdWx0IHdyYXBwZWQgYnlcbiAqIHtAbGluayB3aXRoVHJhbnNmZXJ9IHRvIHRyYW5zZmVyIGJ1ZmZlcnMgYmFjayBpbnN0ZWFkIG9mIGNvcHlpbmcgdGhlbS4gRGVjbGFyZSB0aGUgaGFuZGxlcnMgYXMgbWV0aG9kcyBvciBgZnVuY3Rpb25gXG4gKiBleHByZXNzaW9ucywgbm90IGFycm93IGZ1bmN0aW9ucywgd2hlbiB0aGV5IG5lZWQgYHRoaXNgLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2VyQXBpSGFuZGxlcnM8VEFwaSBleHRlbmRzIFdvcmtlckFwaTxUQXBpPj4gPSB7XG4gIHJlYWRvbmx5IFtUTWV0aG9kIGluIGtleW9mIFRBcGldOiAoXG4gICAgdGhpczogV29ya2VyQ2FsbENvbnRleHQsXG4gICAgLi4ucGFyYW1ldGVyczogUGFyYW1ldGVyczxUQXBpW1RNZXRob2RdPlxuICApID0+IFdvcmtlckhhbmRsZXJSZXN1bHQ8QXdhaXRlZDxSZXR1cm5UeXBlPFRBcGlbVE1ldGhvZF0+Pj47XG59O1xuXG4vKipcbiAqIFRoZSBjb250ZXh0IG9mIG9uZSBjYWxsLCBwYXNzZWQgdG8gYSBoYW5kbGVyIGFzIGB0aGlzYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJDYWxsQ29udGV4dCB7XG4gIC8qKlxuICAgKiBBYm9ydGVkIHdoZW4gdGhlIGNhbGxlciBjYW5jZWxzIHRoZSBjYWxsLiBBIGxvbmcgaGFuZGxlciBjaGVja3MgaXQgYmV0d2VlbiBzdGVwczsgbm90aGluZyBpbnRlcnJ1cHRzIGEgc3luY2hyb25vdXNcbiAgICogbG9vcCwgc28gYSBqb2IgdGhhdCBjYW5ub3QgY2hlY2sgaXQgaXMgc3RvcHBlZCBvbmx5IGJ5IHRlcm1pbmF0aW5nIHRoZSB3b3JrZXIuXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogQSBjYWxsIGZyb20gdGhlIG1haW4gdGhyZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtlckNhbGxNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBtZXRob2QncyBhcmd1bWVudHMuXG4gICAqL1xuICByZWFkb25seSBhcmd1bWVudHM6IHJlYWRvbmx5IHVua25vd25bXTtcblxuICAvKipcbiAgICogVGhlIGNhbGwgaWQsIHVuaXF1ZSBwZXIgYFdvcmtlckNvbXBvbmVudGAuXG4gICAqL1xuICByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSBraW5kLlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogJ2NhbGwnO1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIHRhZy5cbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sOiB0eXBlb2YgV09SS0VSX1BST1RPQ09MO1xufVxuXG4vKipcbiAqIEEgY2FuY2VsbGF0aW9uIG9mIGEgY2FsbCBmcm9tIHRoZSBtYWluIHRocmVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJDYW5jZWxNZXNzYWdlIHtcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY2FsbCB0byBjYW5jZWwuXG4gICAqL1xuICByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSBraW5kLlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogJ2NhbmNlbCc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm90b2NvbCB0YWcuXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbDogdHlwZW9mIFdPUktFUl9QUk9UT0NPTDtcbn1cblxuLyoqXG4gKiBBIGZhaWxlZCBjYWxsLCBhbnN3ZXJlZCBieSB0aGUgd29ya2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtlckVycm9yTWVzc2FnZSB7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IsIHJlZHVjZWQgdG8gcGxhaW4gZGF0YS5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yOiBTZXJpYWxpemVkV29ya2VyRXJyb3I7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY2FsbC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIGtpbmQuXG4gICAqL1xuICByZWFkb25seSBraW5kOiAnZXJyb3InO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdG9jb2wgdGFnLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2w6IHR5cGVvZiBXT1JLRVJfUFJPVE9DT0w7XG59XG5cbi8qKlxuICogV2hhdCBhIGhhbmRsZXIgbWF5IHJldHVybi5cbiAqXG4gKiBAdHlwZVBhcmFtIFRSZXN1bHQgLSBUaGUgbWV0aG9kJ3MgcmVzdWx0IHR5cGUuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtlckhhbmRsZXJSZXN1bHQ8VFJlc3VsdD4gPSBQcm9taXNlPFRyYW5zZmVycmVkVmFsdWU8VFJlc3VsdD4gfCBUUmVzdWx0PiB8IFRyYW5zZmVycmVkVmFsdWU8VFJlc3VsdD4gfCBUUmVzdWx0O1xuXG4vKipcbiAqIFRoZSBwb3J0IGEgd29ya2VyIHRhbGtzIHRocm91Z2g6IHRoZSB3b3JrZXIncyBnbG9iYWwgc2NvcGUsIG9yIGEgdGVzdCBkb3VibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2VyTWVzc2FnZVBvcnQge1xuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byBtZXNzYWdlcy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBBbHdheXMgYG1lc3NhZ2VgLlxuICAgKiBAcGFyYW0gbGlzdGVuZXIgLSBUaGUgbGlzdGVuZXIuXG4gICAqL1xuICByZWFkb25seSBhZGRFdmVudExpc3RlbmVyOiAodHlwZTogJ21lc3NhZ2UnLCBsaXN0ZW5lcjogKCRldmVudDogTWVzc2FnZUV2ZW50PHVua25vd24+KSA9PiB2b2lkKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBQb3N0cyBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB0cmFuc2ZlciAtIFRoZSBvYmplY3RzIHRvIHRyYW5zZmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdE1lc3NhZ2U6IChtZXNzYWdlOiB1bmtub3duLCB0cmFuc2ZlcjogVHJhbnNmZXJhYmxlW10pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQW55IG1lc3NhZ2Ugc2VudCB0byB0aGUgd29ya2VyLlxuICovXG5leHBvcnQgdHlwZSBXb3JrZXJSZXF1ZXN0TWVzc2FnZSA9IFdvcmtlckNhbGxNZXNzYWdlIHwgV29ya2VyQ2FuY2VsTWVzc2FnZTtcblxuLyoqXG4gKiBBbnkgbWVzc2FnZSBzZW50IGJ5IHRoZSB3b3JrZXIuXG4gKi9cbmV4cG9ydCB0eXBlIFdvcmtlclJlc3BvbnNlTWVzc2FnZSA9IFdvcmtlckVycm9yTWVzc2FnZSB8IFdvcmtlclJlc3VsdE1lc3NhZ2U7XG5cbi8qKlxuICogQSBzdWNjZXNzZnVsIGNhbGwsIGFuc3dlcmVkIGJ5IHRoZSB3b3JrZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2VyUmVzdWx0TWVzc2FnZSB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGNhbGwuXG4gICAqL1xuICByZWFkb25seSBpZDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSBraW5kLlxuICAgKi9cbiAgcmVhZG9ubHkga2luZDogJ3Jlc3VsdCc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm90b2NvbCB0YWcuXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbDogdHlwZW9mIFdPUktFUl9QUk9UT0NPTDtcblxuICAvKipcbiAgICogVGhlIHJlc3VsdC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgUHJvdG9jb2xUYWdnZWRNZXNzYWdlIHtcbiAgcmVhZG9ubHkgcHJvdG9jb2w/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIEV4cG9zZXMgaGFuZGxlcnMgdG8gdGhlIG1haW4gdGhyZWFkLiBDYWxsIGl0IG9uY2UsIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSB3b3JrZXIgZW50cnkgcG9pbnQuXG4gKlxuICogQSBoYW5kbGVyIHRoYXQgdGhyb3dzIG9yIHJlamVjdHMgYW5zd2VycyB3aXRoIGEge0BsaW5rIFNlcmlhbGl6ZWRXb3JrZXJFcnJvcn0sIHdoaWNoIHRoZSBjYWxsZXIgcmVjZWl2ZXMgYXMgYVxuICogYFdvcmtlckNhbGxFcnJvcmAuIEFuIHVua25vd24gbWV0aG9kIGFuc3dlcnMgd2l0aCBhbiBlcnJvciB0b28sIHNvIGEgY2FsbGVyIG5ldmVyIHdhaXRzIGZvciBub3RoaW5nLlxuICpcbiAqIEB0eXBlUGFyYW0gVEFwaSAtIFRoZSBBUEkgdHlwZS5cbiAqIEBwYXJhbSBoYW5kbGVycyAtIFRoZSBoYW5kbGVycy5cbiAqIEBwYXJhbSBwb3J0IC0gVGhlIHBvcnQgdG8gdGFsayB0aHJvdWdoLiBEZWZhdWx0cyB0byB0aGUgd29ya2VyJ3MgZ2xvYmFsIHNjb3BlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwb3NlV29ya2VyQXBpPFRBcGkgZXh0ZW5kcyBXb3JrZXJBcGk8VEFwaT4+KGhhbmRsZXJzOiBXb3JrZXJBcGlIYW5kbGVyczxUQXBpPiwgcG9ydD86IFdvcmtlck1lc3NhZ2VQb3J0KTogdm9pZCB7XG4gIGNvbnN0IG1lc3NhZ2VQb3J0ID0gcG9ydCA/PyBnZXRXb3JrZXJHbG9iYWxTY29wZSgpO1xuICBjb25zdCBhYm9ydENvbnRyb2xsZXJzID0gbmV3IE1hcDxudW1iZXIsIEFib3J0Q29udHJvbGxlcj4oKTtcblxuICBtZXNzYWdlUG9ydC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKCRldmVudCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSAkZXZlbnQuZGF0YTtcbiAgICBpZiAoIWlzV29ya2VyUmVxdWVzdE1lc3NhZ2UobWVzc2FnZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobWVzc2FnZS5raW5kID09PSAnY2FuY2VsJykge1xuICAgICAgYWJvcnRDb250cm9sbGVycy5nZXQobWVzc2FnZS5pZCk/LmFib3J0KG5ldyBFcnJvcignVGhlIGNhbGwgd2FzIGNhbmNlbGxlZCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgYWJvcnRDb250cm9sbGVycy5zZXQobWVzc2FnZS5pZCwgYWJvcnRDb250cm9sbGVyKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdm9pZCAtLSBgYW5zd2VyQ2FsbGAgbmV2ZXIgcmVqZWN0czogaXQgYW5zd2VycyBldmVyeSBmYWlsdXJlIGFzIGEgbWVzc2FnZS5cbiAgICB2b2lkIGFuc3dlckNhbGwobWVzc2FnZSwgYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGFuc3dlckNhbGwobWVzc2FnZTogV29ya2VyQ2FsbE1lc3NhZ2UsIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCByZXNwb25zZTogV29ya2VyUmVzcG9uc2VNZXNzYWdlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IGludm9rZVdvcmtlckhhbmRsZXIoaGFuZGxlcnMsIG1lc3NhZ2UubWV0aG9kLCBtZXNzYWdlLmFyZ3VtZW50cywgeyBhYm9ydFNpZ25hbCB9KTtcbiAgICAgIHJlc3BvbnNlID0geyBpZDogbWVzc2FnZS5pZCwga2luZDogJ3Jlc3VsdCcsIHByb3RvY29sOiBXT1JLRVJfUFJPVE9DT0wsIHZhbHVlIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlc3BvbnNlID0geyBlcnJvcjogc2VyaWFsaXplV29ya2VyRXJyb3IoZXJyb3IpLCBpZDogbWVzc2FnZS5pZCwga2luZDogJ2Vycm9yJywgcHJvdG9jb2w6IFdPUktFUl9QUk9UT0NPTCB9O1xuICAgIH1cbiAgICBhYm9ydENvbnRyb2xsZXJzLmRlbGV0ZShtZXNzYWdlLmlkKTtcbiAgICBwb3N0UmVzcG9uc2UobWVzc2FnZVBvcnQsIHJlc3BvbnNlKTtcbiAgfVxufVxuXG4vKipcbiAqIENhbGxzIG9uZSBoYW5kbGVyIGJ5IG5hbWUsIGFzIHRoZSB3b3JrZXIgZG9lcy4gYFdvcmtlckNvbXBvbmVudGAgdXNlcyBpdCBmb3IgaXRzIG1haW4tdGhyZWFkIGZhbGxiYWNrLCBzbyBib3RoIHBhdGhzXG4gKiBiZWhhdmUgYWxpa2UuXG4gKlxuICogQHBhcmFtIGhhbmRsZXJzIC0gVGhlIGhhbmRsZXJzLlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QgbmFtZS5cbiAqIEBwYXJhbSBjYWxsQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIGNhbGwgY29udGV4dC5cbiAqIEByZXR1cm5zIFRoZSByZXN1bHQsIG9yIGEge0BsaW5rIFRyYW5zZmVycmVkVmFsdWV9IHdyYXBwaW5nIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW52b2tlV29ya2VySGFuZGxlcihcbiAgaGFuZGxlcnM6IG9iamVjdCxcbiAgbWV0aG9kOiBzdHJpbmcsXG4gIGNhbGxBcmd1bWVudHM6IHJlYWRvbmx5IHVua25vd25bXSxcbiAgY29udGV4dDogV29ya2VyQ2FsbENvbnRleHRcbik6IFByb21pc2U8dW5rbm93bj4ge1xuICBjb25zdCBoYW5kbGVyID0gT2JqZWN0Lmhhc093bihoYW5kbGVycywgbWV0aG9kKSA/IChoYW5kbGVycyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbWV0aG9kXSA6IHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIHdvcmtlciBleHBvc2VzIG5vIG1ldGhvZCBuYW1lZCAnJHttZXRob2R9J2ApO1xuICB9XG4gIHJldHVybiBhd2FpdCAoaGFuZGxlciBhcyAodGhpczogV29ya2VyQ2FsbENvbnRleHQsIC4uLmhhbmRsZXJBcmd1bWVudHM6IHVua25vd25bXSkgPT4gdW5rbm93bikuYXBwbHkoY29udGV4dCwgWy4uLmNhbGxBcmd1bWVudHNdKTtcbn1cblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGEgdmFsdWUgaXMgYSB7QGxpbmsgVHJhbnNmZXJyZWRWYWx1ZX0uXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlLlxuICogQHJldHVybnMgV2hldGhlciBpdCBpcyBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RyYW5zZmVycmVkVmFsdWUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBUcmFuc2ZlcnJlZFZhbHVlPHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgKHZhbHVlIGFzIFBhcnRpYWw8VHJhbnNmZXJyZWRWYWx1ZTx1bmtub3duPj4pLl9fb2JzaWRpYW5MaWJUcmFuc2ZlcnJlZFZhbHVlID09PSB0cnVlO1xufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGEgcmVxdWVzdCBvZiB0aGlzIHByb3RvY29sLlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGl0IGlzIG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV29ya2VyUmVxdWVzdE1lc3NhZ2UobWVzc2FnZTogdW5rbm93bik6IG1lc3NhZ2UgaXMgV29ya2VyUmVxdWVzdE1lc3NhZ2Uge1xuICBpZiAoIWhhc1Byb3RvY29sKG1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IG1lc3NhZ2UgYXMgUGFydGlhbDxXb3JrZXJDYWxsTWVzc2FnZT4gfCBQYXJ0aWFsPFdvcmtlckNhbmNlbE1lc3NhZ2U+O1xuICBpZiAodHlwZW9mIGNhbmRpZGF0ZS5pZCAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09PSAnY2FuY2VsJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBjYW5kaWRhdGUua2luZCA9PT0gJ2NhbGwnICYmIHR5cGVvZiBjYW5kaWRhdGUubWV0aG9kID09PSAnc3RyaW5nJyAmJiBBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpO1xufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGEgcmVzcG9uc2Ugb2YgdGhpcyBwcm90b2NvbC5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlLlxuICogQHJldHVybnMgV2hldGhlciBpdCBpcyBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dvcmtlclJlc3BvbnNlTWVzc2FnZShtZXNzYWdlOiB1bmtub3duKTogbWVzc2FnZSBpcyBXb3JrZXJSZXNwb25zZU1lc3NhZ2Uge1xuICBpZiAoIWhhc1Byb3RvY29sKG1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGNhbmRpZGF0ZSA9IG1lc3NhZ2UgYXMgUGFydGlhbDxXb3JrZXJFcnJvck1lc3NhZ2U+IHwgUGFydGlhbDxXb3JrZXJSZXN1bHRNZXNzYWdlPjtcbiAgaWYgKHR5cGVvZiBjYW5kaWRhdGUuaWQgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PT0gJ3Jlc3VsdCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlLmtpbmQgPT09ICdlcnJvcicgJiYgdHlwZW9mIGNhbmRpZGF0ZS5lcnJvciA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogUmVkdWNlcyBhIHRocm93biB2YWx1ZSB0byBwbGFpbiBkYXRhLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSB0aHJvd24gdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgc2VyaWFsaXplZCBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZVdvcmtlckVycm9yKGVycm9yOiB1bmtub3duKTogU2VyaWFsaXplZFdvcmtlckVycm9yIHtcbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICByZXR1cm4geyBtZXNzYWdlOiBTdHJpbmcoZXJyb3IpLCBuYW1lOiAnRXJyb3InIH07XG4gIH1cbiAgcmV0dXJuIGVycm9yLnN0YWNrID09PSB1bmRlZmluZWRcbiAgICA/IHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwgbmFtZTogZXJyb3IubmFtZSB9XG4gICAgOiB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIG5hbWU6IGVycm9yLm5hbWUsIHN0YWNrOiBlcnJvci5zdGFjayB9O1xufVxuXG4vKipcbiAqIFNwbGl0cyBhIHJlc3VsdCBpbnRvIHRoZSB2YWx1ZSB0byBwb3N0IGFuZCB0aGUgb2JqZWN0cyB0byB0cmFuc2Zlci5cbiAqXG4gKiBAcGFyYW0gcmVzdWx0IC0gQSByZXN1bHQsIHBvc3NpYmx5IHdyYXBwZWQgYnkge0BsaW5rIHdpdGhUcmFuc2Zlcn0uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgYW5kIGl0cyB0cmFuc2ZlciBsaXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwVHJhbnNmZXJyZWRWYWx1ZShyZXN1bHQ6IHVua25vd24pOiBVbndyYXBwZWRUcmFuc2ZlcnJlZFZhbHVlIHtcbiAgcmV0dXJuIGlzVHJhbnNmZXJyZWRWYWx1ZShyZXN1bHQpXG4gICAgPyB7IHRyYW5zZmVyOiBbLi4ucmVzdWx0LnRyYW5zZmVyXSwgdmFsdWU6IHJlc3VsdC52YWx1ZSB9XG4gICAgOiB7IHRyYW5zZmVyOiBbXSwgdmFsdWU6IHJlc3VsdCB9O1xufVxuXG4vKipcbiAqIE1hcmtzIGEgcmVzdWx0IHRvIHRyYW5zZmVyIHNvbWUgb2YgaXRzIG9iamVjdHMgKGFuIGBBcnJheUJ1ZmZlcmAsIGEgYE1lc3NhZ2VQb3J0YCwgYW4gYE9mZnNjcmVlbkNhbnZhc2AuLi4pIGluc3RlYWRcbiAqIG9mIGNvcHlpbmcgdGhlbS4gQSB0cmFuc2ZlcnJlZCBvYmplY3QgaXMgdW51c2FibGUgb24gdGhlIHNlbmRpbmcgc2lkZSBhZnRlcndhcmRzLlxuICpcbiAqIEB0eXBlUGFyYW0gVFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUuXG4gKiBAcGFyYW0gdHJhbnNmZXIgLSBUaGUgb2JqZWN0cyBpbnNpZGUgaXQgdG8gdHJhbnNmZXIuXG4gKiBAcmV0dXJucyBUaGUgd3JhcHBlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUcmFuc2ZlcjxUVmFsdWU+KHZhbHVlOiBUVmFsdWUsIHRyYW5zZmVyOiByZWFkb25seSBUcmFuc2ZlcmFibGVbXSk6IFRyYW5zZmVycmVkVmFsdWU8VFZhbHVlPiB7XG4gIHJldHVybiB7IF9fb2JzaWRpYW5MaWJUcmFuc2ZlcnJlZFZhbHVlOiB0cnVlLCB0cmFuc2ZlciwgdmFsdWUgfTtcbn1cblxuZnVuY3Rpb24gZ2V0V29ya2VyR2xvYmFsU2NvcGUoKTogV29ya2VyTWVzc2FnZVBvcnQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1nbG9iYWwtdGhpcyAtLSBBIHdvcmtlciBoYXMgbm8gYHdpbmRvd2A6IGl0cyBnbG9iYWwgc2NvcGUgaXMgdGhlIHBvcnQuXG4gIGNvbnN0IHNjb3BlOiB1bmtub3duID0gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHNjb3BlIGFzIFdvcmtlck1lc3NhZ2VQb3J0O1xufVxuXG5mdW5jdGlvbiBoYXNQcm90b2NvbChtZXNzYWdlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZSA9PT0gJ29iamVjdCcgJiYgbWVzc2FnZSAhPT0gbnVsbCAmJiAobWVzc2FnZSBhcyBQcm90b2NvbFRhZ2dlZE1lc3NhZ2UpLnByb3RvY29sID09PSBXT1JLRVJfUFJPVE9DT0w7XG59XG5cbmZ1bmN0aW9uIHBvc3RSZXNwb25zZShwb3J0OiBXb3JrZXJNZXNzYWdlUG9ydCwgcmVzcG9uc2U6IFdvcmtlclJlc3BvbnNlTWVzc2FnZSk6IHZvaWQge1xuICBpZiAocmVzcG9uc2Uua2luZCA9PT0gJ2Vycm9yJykge1xuICAgIHBvcnQucG9zdE1lc3NhZ2UocmVzcG9uc2UsIFtdKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgeyB0cmFuc2ZlciwgdmFsdWUgfSA9IHVud3JhcFRyYW5zZmVycmVkVmFsdWUocmVzcG9uc2UudmFsdWUpO1xuICB0cnkge1xuICAgIHBvcnQucG9zdE1lc3NhZ2UoeyAuLi5yZXNwb25zZSwgdmFsdWUgfSwgdHJhbnNmZXIpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEEgcmVzdWx0IHRoYXQgY2Fubm90IGJlIGNsb25lZCAoYSBmdW5jdGlvbiwgYSBET00gbm9kZSkgc3RpbGwgYW5zd2Vycywgc28gdGhlIGNhbGxlciBpcyBuZXZlciBsZWZ0IHdhaXRpbmcuXG4gICAgcG9ydC5wb3N0TWVzc2FnZSh7IGVycm9yOiBzZXJpYWxpemVXb3JrZXJFcnJvcihlcnJvciksIGlkOiByZXNwb25zZS5pZCwga2luZDogJ2Vycm9yJywgcHJvdG9jb2w6IFdPUktFUl9QUk9UT0NPTCB9LCBbXSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFlTyxNQUFNLGtCQUFrQjtBQXNQeEIsU0FBUyxnQkFBOEMsVUFBbUMsTUFBZ0M7QUFDL0gsUUFBTSxjQUFjLFFBQVEscUJBQXFCO0FBQ2pELFFBQU0sbUJBQW1CLG9CQUFJLElBQTZCO0FBRTFELGNBQVksaUJBQWlCLFdBQVcsQ0FBQyxXQUFpQjtBQUN4RCxVQUFNLFVBQVUsT0FBTztBQUN2QixRQUFJLENBQUMsdUJBQXVCLE9BQU8sR0FBRztBQUNwQztBQUFBLElBQ0Y7QUFFQSxRQUFJLFFBQVEsU0FBUyxVQUFVO0FBQzdCLHVCQUFp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