@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
@@ -77,25 +77,7 @@ class DataStoreLocations {
77
77
  this.validateLocation(value.to);
78
78
  transitions.push(value);
79
79
  }
80
- const locations = [this.initial];
81
- let currentIdentity = identity(this.initial);
82
- while (transitions.length > 0) {
83
- const sourceIdentity = currentIdentity;
84
- const next = transitions.filter((transition) => identity(transition.from) === sourceIdentity);
85
- const targets = new Set(next.map((transition) => identity(transition.to)));
86
- if (targets.size !== 1) {
87
- throw new Error("Conflicting or incomplete data-store relocation chain");
88
- }
89
- const target = ensureNonNullable(next[0]);
90
- if (locations.some((location) => identity(location) === identity(target.to)) || locations.length >= MAX_LOCATIONS) {
91
- throw new Error("Data-store relocation loop or location limit");
92
- }
93
- locations.push(target.to);
94
- currentIdentity = identity(target.to);
95
- for (const transition of next) {
96
- transitions.splice(transitions.indexOf(transition), 1);
97
- }
98
- }
80
+ const locations = this.buildChain(await this.resolveMovedAnchor(transitions));
99
81
  for (const location of locations) {
100
82
  this.validateLocation(location, locations);
101
83
  }
@@ -128,13 +110,73 @@ class DataStoreLocations {
128
110
  if (this.locations.some((previous) => identity(previous) === identity(location)) || this.locations.length >= MAX_LOCATIONS) {
129
111
  throw new Error("Data-store relocation loop or location limit");
130
112
  }
131
- const value = { format: 1, from, to: location };
113
+ const value = { anchor: this.initial, format: 1, from, to: location };
132
114
  await this.anchor.write(`${this.anchor.root}/locations-v1/${window.crypto.randomUUID()}.json`, value);
133
115
  await this.refresh();
134
116
  }
117
+ buildChain(transitions) {
118
+ const remaining = [...transitions];
119
+ const locations = [this.initial];
120
+ let currentIdentity = identity(this.initial);
121
+ while (remaining.length > 0) {
122
+ const sourceIdentity = currentIdentity;
123
+ const next = remaining.filter((transition) => identity(transition.from) === sourceIdentity);
124
+ const targets = new Set(next.map((transition) => identity(transition.to)));
125
+ if (targets.size !== 1) {
126
+ throw new Error("Conflicting or incomplete data-store relocation chain");
127
+ }
128
+ const target = ensureNonNullable(next[0]);
129
+ if (locations.some((location) => identity(location) === identity(target.to)) || locations.length >= MAX_LOCATIONS) {
130
+ throw new Error("Data-store relocation loop or location limit");
131
+ }
132
+ locations.push(target.to);
133
+ currentIdentity = identity(target.to);
134
+ for (const transition of next) {
135
+ remaining.splice(remaining.indexOf(transition), 1);
136
+ }
137
+ }
138
+ return locations;
139
+ }
135
140
  createTransport(location) {
136
141
  return new DataStoreTransport({ ...this.params, folder: location.folder, format: location.format ?? "markdown" });
137
142
  }
143
+ /**
144
+ * Maps the records of an anchor folder that was moved (or sits under a moved folder) onto the folder the store is open
145
+ * at, because records name absolute folders.
146
+ *
147
+ * A transition that names its `anchor` is remapped from that folder exactly, so several successive moves resolve too.
148
+ * A transition written before that field existed names no anchor, and a moved anchor then looks the same as a chain whose
149
+ * first record has not arrived yet. So the former folder is inferred only when nothing starts at the initial identity,
150
+ * exactly one candidate folder (one the legacy records start from, in the initial format) yields a complete chain, and
151
+ * that folder no longer holds this store. Anything else is left for `buildChain` to reject.
152
+ *
153
+ * @param transitions - The transitions recorded at the anchor.
154
+ * @returns The transitions to build the chain from.
155
+ */
156
+ async resolveMovedAnchor(transitions) {
157
+ const anchored = transitions.map((transition) => transition.anchor ? remapTransition(transition, transition.anchor.folder, this.initial.folder) : transition);
158
+ const initialIdentity = identity(this.initial);
159
+ if (anchored.some((transition) => identity(transition.from) === initialIdentity)) {
160
+ return anchored;
161
+ }
162
+ const candidates = new Set(anchored.filter((transition) => !transition.anchor).map((transition) => transition.from.folder));
163
+ const resolved = [];
164
+ for (const formerFolder of candidates) {
165
+ const remapped = anchored.map((transition) => transition.anchor ? transition : remapTransition(transition, formerFolder, this.initial.folder));
166
+ try {
167
+ this.buildChain(remapped);
168
+ } catch {
169
+ continue;
170
+ }
171
+ resolved.push({ formerFolder, transitions: remapped });
172
+ }
173
+ const match = resolved.length === 1 ? ensureNonNullable(resolved[0]) : null;
174
+ if (!match) {
175
+ return anchored;
176
+ }
177
+ const formerFiles = await this.createTransport({ ...this.initial, folder: match.formerFolder }).list();
178
+ return formerFiles.length > 0 ? anchored : match.transitions;
179
+ }
138
180
  validateLocation(location, locations = this.locations) {
139
181
  const transport = this.createTransport(location);
140
182
  for (const previous of locations) {
@@ -152,9 +194,25 @@ function isLocation(value) {
152
194
  return typeof value === "object" && value !== null && "folder" in value && typeof value.folder === "string" && (!("format" in value) || value.format === "json" || value.format === "markdown");
153
195
  }
154
196
  function isTransition(value) {
155
- return typeof value === "object" && value !== null && "format" in value && value.format === 1 && "from" in value && isLocation(value.from) && "to" in value && isLocation(value.to);
197
+ return typeof value === "object" && value !== null && "format" in value && value.format === 1 && "from" in value && isLocation(value.from) && "to" in value && isLocation(value.to) && (!("anchor" in value) || isLocation(value.anchor));
198
+ }
199
+ function remapLocation(location, formerFolder, folder) {
200
+ if (location.folder === formerFolder) {
201
+ return { ...location, folder };
202
+ }
203
+ if (location.folder.startsWith(`${formerFolder}/`)) {
204
+ return { ...location, folder: `${folder}${location.folder.slice(formerFolder.length)}` };
205
+ }
206
+ return location;
207
+ }
208
+ function remapTransition(transition, formerFolder, folder) {
209
+ return {
210
+ ...transition,
211
+ from: remapLocation(transition.from, formerFolder, folder),
212
+ to: remapLocation(transition.to, formerFolder, folder)
213
+ };
156
214
  }
157
215
  export {
158
216
  DataStoreLocations
159
217
  };
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLWxvY2F0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbi8qKlxuICogQGZpbGVcbiAqIEFwcGVuZC1vbmx5LCBhbmNob3JlZCBkaXNjb3Zlcnkgb2YgaGlzdG9yeS1wcmVzZXJ2aW5nIHRyYW5zcG9ydCB0cmFuc2l0aW9ucy5cbiAqL1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHsgRGF0YVN0b3JlVHJhbnNwb3J0Q29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2RhdGEtc3RvcmUtdHJhbnNwb3J0LnRzJztcblxuaW1wb3J0IHsgRGF0YVN0b3JlVHJhbnNwb3J0IH0gZnJvbSAnLi9kYXRhLXN0b3JlLXRyYW5zcG9ydC50cyc7XG5cbmNvbnN0IE1BWF9MT0NBVElPTlMgPSAzMjtcblxuLyoqXG5BIHRyYW5zcG9ydCBkZXN0aW5hdGlvbi4gS2VlcCB0aGUgb3JpZ2luYWwgb3BlbiBwYXJhbWV0ZXJzIGFzIHRoZSBkaXNjb3ZlcnkgYW5jaG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTdG9yZUxvY2F0aW9uIHtcbiAgLyoqXG4gIFZhdWx0LXJlbGF0aXZlIHBhcmVudCBvZiB0aGUgcGx1Z2luL3N0b3JlIHN1YnRyZWUuXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI6IHN0cmluZztcbiAgLyoqXG4gICAqIE5ldyBkb2N1bWVudCBlbmNvZGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdtYXJrZG93bidgXG4gICAqL1xuICByZWFkb25seSBmb3JtYXQ/OiAnanNvbicgfCAnbWFya2Rvd24nO1xufVxuXG5pbnRlcmZhY2UgVHJhbnNpdGlvbiB7XG4gIHJlYWRvbmx5IGZvcm1hdDogMTtcbiAgcmVhZG9ubHkgZnJvbTogRGF0YVN0b3JlTG9jYXRpb247XG4gIHJlYWRvbmx5IHRvOiBEYXRhU3RvcmVMb2NhdGlvbjtcbn1cblxuLyoqXG5BbmNob3JlZCByZWxvY2F0aW9uIGNvb3JkaW5hdG9yOyBzb3VyY2UgaGlzdG9yaWVzIGFyZSBuZXZlciByZW1vdmVkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVN0b3JlTG9jYXRpb25zIHtcbiAgLyoqXG4gIEFsbCByZWFkZXJzLCBvbGRlc3QgZmlyc3Q7IHRoZSBsYXN0IHRyYW5zcG9ydCBpcyB0aGUgYWN0aXZlIHdyaXRlci5cbiAgICpcbiAgICogQHJldHVybnMgQWxsIHJldGFpbmVkIHJlYWRlciB0cmFuc3BvcnRzIGluIHRyYW5zaXRpb24gb3JkZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRyYW5zcG9ydHMoKTogRGF0YVN0b3JlVHJhbnNwb3J0W10ge1xuICAgIHJldHVybiB0aGlzLmxvY2F0aW9ucy5tYXAoKGxvY2F0aW9uKSA9PiB0aGlzLmNyZWF0ZVRyYW5zcG9ydChsb2NhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbmNob3I6IERhdGFTdG9yZVRyYW5zcG9ydDtcbiAgcHJpdmF0ZSByZWFkb25seSBpbml0aWFsOiBEYXRhU3RvcmVMb2NhdGlvbjtcblxuICBwcml2YXRlIGxvY2F0aW9uczogRGF0YVN0b3JlTG9jYXRpb25bXTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNvb3JkaW5hdG9yIHdpdGhvdXQgYWRhcHRlciBjYWxscy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFBlcm1hbmVudCBkaXNjb3ZlcnkgYW5jaG9yIGFuZCBzdG9yZSBpZGVudGl0eS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHBhcmFtczogRGF0YVN0b3JlVHJhbnNwb3J0Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLmFuY2hvciA9IG5ldyBEYXRhU3RvcmVUcmFuc3BvcnQocGFyYW1zKTtcbiAgICB0aGlzLmluaXRpYWwgPSB7IGZvbGRlcjogcGFyYW1zLmZvbGRlciA/PyAnUGx1Z2luIGRhdGEnLCBmb3JtYXQ6IHBhcmFtcy5mb3JtYXQgPz8gJ21hcmtkb3duJyB9O1xuICAgIHRoaXMubG9jYXRpb25zID0gW3RoaXMuaW5pdGlhbF07XG4gIH1cblxuICAvKipcbiAgICogRGlzY292ZXJzIGFuZCBmaW5pc2hlcyBwZW5kaW5nIGNvcGllcyBiZWZvcmUgYWxsb3dpbmcgYSB3cml0ZXIgdG8gc3dpdGNoIGRlc3RpbmF0aW9ucy5cbiAgICogQ29uZmxpY3RpbmcgYnJhbmNoZXMgYW5kIHJlb3JkZXJlZCBpbmNvbXBsZXRlIGNoYWlucyBmYWlsIGNsb3NlZCB1bnRpbCBkZWxpdmVyeSBpcyBjb21wbGV0ZS5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgZGlzY292ZXJ5IGFuZCB2ZXJpZmljYXRpb24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0cmFuc2l0aW9uczogVHJhbnNpdGlvbltdID0gW107XG4gICAgZm9yIChjb25zdCBwYXRoIG9mIGF3YWl0IHRoaXMuYW5jaG9yLmxpc3QoKSkge1xuICAgICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoYCR7dGhpcy5hbmNob3Iucm9vdH0vbG9jYXRpb25zLXYxL2ApIHx8ICFwYXRoLmVuZHNXaXRoKCcuanNvbicpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmFuY2hvci5yZWFkKHBhdGgpO1xuICAgICAgaWYgKCFpc1RyYW5zaXRpb24odmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb21wbGV0ZSBvciBpbnZhbGlkIGRhdGEtc3RvcmUgdHJhbnNpdGlvbicpO1xuICAgICAgfVxuICAgICAgdGhpcy52YWxpZGF0ZUxvY2F0aW9uKHZhbHVlLmZyb20pO1xuICAgICAgdGhpcy52YWxpZGF0ZUxvY2F0aW9uKHZhbHVlLnRvKTtcbiAgICAgIHRyYW5zaXRpb25zLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBsb2NhdGlvbnMgPSBbdGhpcy5pbml0aWFsXTtcbiAgICBsZXQgY3VycmVudElkZW50aXR5ID0gaWRlbnRpdHkodGhpcy5pbml0aWFsKTtcbiAgICB3aGlsZSAodHJhbnNpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc291cmNlSWRlbnRpdHkgPSBjdXJyZW50SWRlbnRpdHk7XG4gICAgICBjb25zdCBuZXh0ID0gdHJhbnNpdGlvbnMuZmlsdGVyKCh0cmFuc2l0aW9uKSA9PiBpZGVudGl0eSh0cmFuc2l0aW9uLmZyb20pID09PSBzb3VyY2VJZGVudGl0eSk7XG4gICAgICBjb25zdCB0YXJnZXRzID0gbmV3IFNldChuZXh0Lm1hcCgodHJhbnNpdGlvbikgPT4gaWRlbnRpdHkodHJhbnNpdGlvbi50bykpKTtcbiAgICAgIGlmICh0YXJnZXRzLnNpemUgIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25mbGljdGluZyBvciBpbmNvbXBsZXRlIGRhdGEtc3RvcmUgcmVsb2NhdGlvbiBjaGFpbicpO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0ID0gZW5zdXJlTm9uTnVsbGFibGUobmV4dFswXSk7XG4gICAgICBpZiAobG9jYXRpb25zLnNvbWUoKGxvY2F0aW9uKSA9PiBpZGVudGl0eShsb2NhdGlvbikgPT09IGlkZW50aXR5KHRhcmdldC50bykpIHx8IGxvY2F0aW9ucy5sZW5ndGggPj0gTUFYX0xPQ0FUSU9OUykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEtc3RvcmUgcmVsb2NhdGlvbiBsb29wIG9yIGxvY2F0aW9uIGxpbWl0Jyk7XG4gICAgICB9XG4gICAgICBsb2NhdGlvbnMucHVzaCh0YXJnZXQudG8pO1xuICAgICAgY3VycmVudElkZW50aXR5ID0gaWRlbnRpdHkodGFyZ2V0LnRvKTtcbiAgICAgIGZvciAoY29uc3QgdHJhbnNpdGlvbiBvZiBuZXh0KSB7XG4gICAgICAgIHRyYW5zaXRpb25zLnNwbGljZSh0cmFuc2l0aW9ucy5pbmRleE9mKHRyYW5zaXRpb24pLCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVmFsaWRhdGUgdGhlIGVudGlyZSBjaGFpbiBiZWZvcmUgbWFraW5nIGFueSBjb3BpZXMgb3IgYWN0aXZhdGluZyBhIHdyaXRlci5cbiAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgdGhpcy52YWxpZGF0ZUxvY2F0aW9uKGxvY2F0aW9uLCBsb2NhdGlvbnMpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucy5zbGljZSgxKSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5jcmVhdGVUcmFuc3BvcnQobG9jYXRpb24pO1xuICAgICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgbG9jYXRpb25zLnNsaWNlKDAsIGxvY2F0aW9ucy5pbmRleE9mKGxvY2F0aW9uKSkpIHtcbiAgICAgICAgY29uc3QgdHJhbnNwb3J0ID0gdGhpcy5jcmVhdGVUcmFuc3BvcnQoc291cmNlKTtcbiAgICAgICAgaWYgKHRyYW5zcG9ydC5yb290ICE9PSB0YXJnZXQucm9vdCkge1xuICAgICAgICAgIGF3YWl0IHRyYW5zcG9ydC5jb3B5SGlzdG9yeVRvKHRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sb2NhdGlvbnMgPSBsb2NhdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQW5ub3VuY2VzIGEgdHJhbnNpdGlvbiBkdXJhYmx5IGF0IHRoZSBhbmNob3IsIHRoZW4gY29waWVzIGFuZCB2ZXJpZmllcyBiZWZvcmUgYWN0aXZhdGlvbi5cbiAgICogUmV0cnlpbmcgdGhlIHNhbWUgZGVzdGluYXRpb24gZmluaXNoZXMgYW4gaW50ZXJydXB0ZWQgY29weS5cbiAgICpcbiAgICogQHBhcmFtIGxvY2F0aW9uIC0gUmVxdWVzdGVkIGRlc3RpbmF0aW9uLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBuZXcgd3JpdGVyIGlzIHJlYWR5LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbG9jYXRlKGxvY2F0aW9uOiBEYXRhU3RvcmVMb2NhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudmFsaWRhdGVMb2NhdGlvbihsb2NhdGlvbik7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgdGhpcy52YWxpZGF0ZUxvY2F0aW9uKGxvY2F0aW9uKTtcbiAgICBjb25zdCBmcm9tID0gZW5zdXJlTm9uTnVsbGFibGUodGhpcy5sb2NhdGlvbnMuYXQoLTEpKTtcbiAgICBpZiAoaWRlbnRpdHkoZnJvbSkgPT09IGlkZW50aXR5KGxvY2F0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2NhdGlvbnMuc29tZSgocHJldmlvdXMpID0+IGlkZW50aXR5KHByZXZpb3VzKSA9PT0gaWRlbnRpdHkobG9jYXRpb24pKSB8fCB0aGlzLmxvY2F0aW9ucy5sZW5ndGggPj0gTUFYX0xPQ0FUSU9OUykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEYXRhLXN0b3JlIHJlbG9jYXRpb24gbG9vcCBvciBsb2NhdGlvbiBsaW1pdCcpO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZTogVHJhbnNpdGlvbiA9IHsgZm9ybWF0OiAxLCBmcm9tLCB0bzogbG9jYXRpb24gfTtcbiAgICBhd2FpdCB0aGlzLmFuY2hvci53cml0ZShgJHt0aGlzLmFuY2hvci5yb290fS9sb2NhdGlvbnMtdjEvJHt3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKX0uanNvbmAsIHZhbHVlKTtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVHJhbnNwb3J0KGxvY2F0aW9uOiBEYXRhU3RvcmVMb2NhdGlvbik6IERhdGFTdG9yZVRyYW5zcG9ydCB7XG4gICAgcmV0dXJuIG5ldyBEYXRhU3RvcmVUcmFuc3BvcnQoeyAuLi50aGlzLnBhcmFtcywgZm9sZGVyOiBsb2NhdGlvbi5mb2xkZXIsIGZvcm1hdDogbG9jYXRpb24uZm9ybWF0ID8/ICdtYXJrZG93bicgfSk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlTG9jYXRpb24obG9jYXRpb246IERhdGFTdG9yZUxvY2F0aW9uLCBsb2NhdGlvbnM6IHJlYWRvbmx5IERhdGFTdG9yZUxvY2F0aW9uW10gPSB0aGlzLmxvY2F0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHRyYW5zcG9ydCA9IHRoaXMuY3JlYXRlVHJhbnNwb3J0KGxvY2F0aW9uKTtcbiAgICBmb3IgKGNvbnN0IHByZXZpb3VzIG9mIGxvY2F0aW9ucykge1xuICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuY3JlYXRlVHJhbnNwb3J0KHByZXZpb3VzKS5yb290O1xuICAgICAgaWYgKHRyYW5zcG9ydC5yb290ICE9PSByb290ICYmICh0cmFuc3BvcnQucm9vdC5zdGFydHNXaXRoKGAke3Jvb3R9L2ApIHx8IHJvb3Quc3RhcnRzV2l0aChgJHt0cmFuc3BvcnQucm9vdH0vYCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT3ZlcmxhcHBpbmcgZGF0YS1zdG9yZSByZWxvY2F0aW9uIHJvb3RzJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qIGVzbGludC1lbmFibGUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zIC0tIFRoZXNlIGFyZSBPYnNpZGlhbiByZW5kZXJlciBXZWIgQVBJcywgbm90IE5vZGUgYnVpbHRpbnMuICovXG5cbmZ1bmN0aW9uIGlkZW50aXR5KGxvY2F0aW9uOiBEYXRhU3RvcmVMb2NhdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtsb2NhdGlvbi5mb2xkZXJ9OiR7bG9jYXRpb24uZm9ybWF0ID8/ICdtYXJrZG93bid9YDtcbn1cblxuZnVuY3Rpb24gaXNMb2NhdGlvbih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIERhdGFTdG9yZUxvY2F0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgJ2ZvbGRlcicgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLmZvbGRlciA9PT0gJ3N0cmluZydcbiAgICAmJiAoISgnZm9ybWF0JyBpbiB2YWx1ZSkgfHwgdmFsdWUuZm9ybWF0ID09PSAnanNvbicgfHwgdmFsdWUuZm9ybWF0ID09PSAnbWFya2Rvd24nKTtcbn1cblxuZnVuY3Rpb24gaXNUcmFuc2l0aW9uKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVHJhbnNpdGlvbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICdmb3JtYXQnIGluIHZhbHVlICYmIHZhbHVlLmZvcm1hdCA9PT0gMVxuICAgICYmICdmcm9tJyBpbiB2YWx1ZSAmJiBpc0xvY2F0aW9uKHZhbHVlLmZyb20pICYmICd0bycgaW4gdmFsdWUgJiYgaXNMb2NhdGlvbih2YWx1ZS50byk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsU0FBUyx5QkFBeUI7QUFJbEMsU0FBUywwQkFBMEI7QUFFbkMsTUFBTSxnQkFBZ0I7QUEyQmYsTUFBTSxtQkFBbUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFvQnZCLFlBQTZCLFFBQTZDO0FBQTdDO0FBQ2xDLFNBQUssU0FBUyxJQUFJLG1CQUFtQixNQUFNO0FBQzNDLFNBQUssVUFBVSxFQUFFLFFBQVEsT0FBTyxVQUFVLGVBQWUsUUFBUSxPQUFPLFVBQVUsV0FBVztBQUM3RixTQUFLLFlBQVksQ0FBQyxLQUFLLE9BQU87QUFBQSxFQUNoQztBQUFBLEVBSm9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBZHBDLElBQVcsYUFBbUM7QUFDNUMsV0FBTyxLQUFLLFVBQVUsSUFBSSxDQUFDLGFBQWEsS0FBSyxnQkFBZ0IsUUFBUSxDQUFDO0FBQUEsRUFDeEU7QUFBQSxFQUVpQjtBQUFBLEVBQ0E7QUFBQSxFQUVUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFtQlIsTUFBYSxVQUF5QjtBQUNwQyxVQUFNLGNBQTRCLENBQUM7QUFDbkMsZUFBVyxRQUFRLE1BQU0sS0FBSyxPQUFPLEtBQUssR0FBRztBQUMzQyxVQUFJLENBQUMsS0FBSyxXQUFXLEdBQUcsS0FBSyxPQUFPLElBQUksZ0JBQWdCLEtBQUssQ0FBQyxLQUFLLFNBQVMsT0FBTyxHQUFHO0FBQ3BGO0FBQUEsTUFDRjtBQUNBLFlBQU0sUUFBUSxNQUFNLEtBQUssT0FBTyxLQUFLLElBQUk7QUFDekMsVUFBSSxDQUFDLGFBQWEsS0FBSyxHQUFHO0FBQ3hCLGNBQU0sSUFBSSxNQUFNLDZDQUE2QztBQUFBLE1BQy9EO0FBQ0EsV0FBSyxpQkFBaUIsTUFBTSxJQUFJO0FBQ2hDLFdBQUssaUJBQWlCLE1BQU0sRUFBRTtBQUM5QixrQkFBWSxLQUFLLEtBQUs7QUFBQSxJQUN4QjtBQUNBLFVBQU0sWUFBWSxDQUFDLEtBQUssT0FBTztBQUMvQixRQUFJLGtCQUFrQixTQUFTLEtBQUssT0FBTztBQUMzQyxXQUFPLFlBQVksU0FBUyxHQUFHO0FBQzdCLFlBQU0saUJBQWlCO0FBQ3ZCLFlBQU0sT0FBTyxZQUFZLE9BQU8sQ0FBQyxlQUFlLFNBQVMsV0FBVyxJQUFJLE1BQU0sY0FBYztBQUM1RixZQUFNLFVBQVUsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLGVBQWUsU0FBUyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLFVBQUksUUFBUSxTQUFTLEdBQUc7QUFDdEIsY0FBTSxJQUFJLE1BQU0sdURBQXVEO0FBQUEsTUFDekU7QUFDQSxZQUFNLFNBQVMsa0JBQWtCLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLFVBQUksVUFBVSxLQUFLLENBQUMsYUFBYSxTQUFTLFFBQVEsTUFBTSxTQUFTLE9BQU8sRUFBRSxDQUFDLEtBQUssVUFBVSxVQUFVLGVBQWU7QUFDakgsY0FBTSxJQUFJLE1BQU0sOENBQThDO0FBQUEsTUFDaEU7QUFDQSxnQkFBVSxLQUFLLE9BQU8sRUFBRTtBQUN4Qix3QkFBa0IsU0FBUyxPQUFPLEVBQUU7QUFDcEMsaUJBQVcsY0FBYyxNQUFNO0FBQzdCLG9CQUFZLE9BQU8sWUFBWSxRQUFRLFVBQVUsR0FBRyxDQUFDO0FBQUEsTUFDdkQ7QUFBQSxJQUNGO0FBRUEsZUFBVyxZQUFZLFdBQVc7QUFDaEMsV0FBSyxpQkFBaUIsVUFBVSxTQUFTO0FBQUEsSUFDM0M7QUFDQSxlQUFXLFlBQVksVUFBVSxNQUFNLENBQUMsR0FBRztBQUN6QyxZQUFNLFNBQVMsS0FBSyxnQkFBZ0IsUUFBUTtBQUM1QyxpQkFBVyxVQUFVLFVBQVUsTUFBTSxHQUFHLFVBQVUsUUFBUSxRQUFRLENBQUMsR0FBRztBQUNwRSxjQUFNLFlBQVksS0FBSyxnQkFBZ0IsTUFBTTtBQUM3QyxZQUFJLFVBQVUsU0FBUyxPQUFPLE1BQU07QUFDbEMsZ0JBQU0sVUFBVSxjQUFjLE1BQU07QUFBQSxRQUN0QztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsU0FBSyxZQUFZO0FBQUEsRUFDbkI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU0EsTUFBYSxTQUFTLFVBQTRDO0FBQ2hFLFNBQUssaUJBQWlCLFFBQVE7QUFDOUIsVUFBTSxLQUFLLFFBQVE7QUFDbkIsU0FBSyxpQkFBaUIsUUFBUTtBQUM5QixVQUFNLE9BQU8sa0JBQWtCLEtBQUssVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUNwRCxRQUFJLFNBQVMsSUFBSSxNQUFNLFNBQVMsUUFBUSxHQUFHO0FBQ3pDO0FBQUEsSUFDRjtBQUNBLFFBQUksS0FBSyxVQUFVLEtBQUssQ0FBQyxhQUFhLFNBQVMsUUFBUSxNQUFNLFNBQVMsUUFBUSxDQUFDLEtBQUssS0FBSyxVQUFVLFVBQVUsZUFBZTtBQUMxSCxZQUFNLElBQUksTUFBTSw4Q0FBOEM7QUFBQSxJQUNoRTtBQUNBLFVBQU0sUUFBb0IsRUFBRSxRQUFRLEdBQUcsTUFBTSxJQUFJLFNBQVM7QUFDMUQsVUFBTSxLQUFLLE9BQU8sTUFBTSxHQUFHLEtBQUssT0FBTyxJQUFJLGlCQUFpQixPQUFPLE9BQU8sV0FBVyxDQUFDLFNBQVMsS0FBSztBQUNwRyxVQUFNLEtBQUssUUFBUTtBQUFBLEVBQ3JCO0FBQUEsRUFFUSxnQkFBZ0IsVUFBaUQ7QUFDdkUsV0FBTyxJQUFJLG1CQUFtQixFQUFFLEdBQUcsS0FBSyxRQUFRLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxVQUFVLFdBQVcsQ0FBQztBQUFBLEVBQ2xIO0FBQUEsRUFFUSxpQkFBaUIsVUFBNkIsWUFBMEMsS0FBSyxXQUFpQjtBQUNwSCxVQUFNLFlBQVksS0FBSyxnQkFBZ0IsUUFBUTtBQUMvQyxlQUFXLFlBQVksV0FBVztBQUNoQyxZQUFNLE9BQU8sS0FBSyxnQkFBZ0IsUUFBUSxFQUFFO0FBQzVDLFVBQUksVUFBVSxTQUFTLFNBQVMsVUFBVSxLQUFLLFdBQVcsR0FBRyxJQUFJLEdBQUcsS0FBSyxLQUFLLFdBQVcsR0FBRyxVQUFVLElBQUksR0FBRyxJQUFJO0FBQy9HLGNBQU0sSUFBSSxNQUFNLHlDQUF5QztBQUFBLE1BQzNEO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjtBQUlBLFNBQVMsU0FBUyxVQUFxQztBQUNyRCxTQUFPLEdBQUcsU0FBUyxNQUFNLElBQUksU0FBUyxVQUFVLFVBQVU7QUFDNUQ7QUFFQSxTQUFTLFdBQVcsT0FBNEM7QUFDOUQsU0FBTyxPQUFPLFVBQVUsWUFBWSxVQUFVLFFBQVEsWUFBWSxTQUFTLE9BQU8sTUFBTSxXQUFXLGFBQzdGLEVBQUUsWUFBWSxVQUFVLE1BQU0sV0FBVyxVQUFVLE1BQU0sV0FBVztBQUM1RTtBQUVBLFNBQVMsYUFBYSxPQUFxQztBQUN6RCxTQUFPLE9BQU8sVUFBVSxZQUFZLFVBQVUsUUFBUSxZQUFZLFNBQVMsTUFBTSxXQUFXLEtBQ3ZGLFVBQVUsU0FBUyxXQUFXLE1BQU0sSUFBSSxLQUFLLFFBQVEsU0FBUyxXQUFXLE1BQU0sRUFBRTtBQUN4RjsiLCJuYW1lcyI6W119
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLWxvY2F0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKiBBcHBlbmQtb25seSwgYW5jaG9yZWQgZGlzY292ZXJ5IG9mIGhpc3RvcnktcHJlc2VydmluZyB0cmFuc3BvcnQgdHJhbnNpdGlvbnMuXG4gKi9cblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuXG5pbXBvcnQgdHlwZSB7IERhdGFTdG9yZVRyYW5zcG9ydENvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9kYXRhLXN0b3JlLXRyYW5zcG9ydC50cyc7XG5cbmltcG9ydCB7IERhdGFTdG9yZVRyYW5zcG9ydCB9IGZyb20gJy4vZGF0YS1zdG9yZS10cmFuc3BvcnQudHMnO1xuXG5jb25zdCBNQVhfTE9DQVRJT05TID0gMzI7XG5cbi8qKlxuQSB0cmFuc3BvcnQgZGVzdGluYXRpb24uIEtlZXAgdGhlIG9yaWdpbmFsIG9wZW4gcGFyYW1ldGVycyBhcyB0aGUgZGlzY292ZXJ5IGFuY2hvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVMb2NhdGlvbiB7XG4gIC8qKlxuICBWYXVsdC1yZWxhdGl2ZSBwYXJlbnQgb2YgdGhlIHBsdWdpbi9zdG9yZSBzdWJ0cmVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9sZGVyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOZXcgZG9jdW1lbnQgZW5jb2RpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnbWFya2Rvd24nYFxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0PzogJ2pzb24nIHwgJ21hcmtkb3duJztcbn1cblxuaW50ZXJmYWNlIEluZmVycmVkQ2hhaW4ge1xuICByZWFkb25seSBmb3JtZXJGb2xkZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgdHJhbnNpdGlvbnM6IHJlYWRvbmx5IFRyYW5zaXRpb25bXTtcbn1cblxuaW50ZXJmYWNlIFRyYW5zaXRpb24ge1xuICAvKipcbiAgICogVGhlIGFuY2hvciB0aGUgdHJhbnNpdGlvbiB3YXMgd3JpdHRlbiBhdC4gQWJzZW50IGZyb20gdHJhbnNpdGlvbnMgd3JpdHRlbiBiZWZvcmUgaXQgd2FzIGFkZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYW5jaG9yPzogRGF0YVN0b3JlTG9jYXRpb247XG4gIHJlYWRvbmx5IGZvcm1hdDogMTtcbiAgcmVhZG9ubHkgZnJvbTogRGF0YVN0b3JlTG9jYXRpb247XG4gIHJlYWRvbmx5IHRvOiBEYXRhU3RvcmVMb2NhdGlvbjtcbn1cblxuLyoqXG5BbmNob3JlZCByZWxvY2F0aW9uIGNvb3JkaW5hdG9yOyBzb3VyY2UgaGlzdG9yaWVzIGFyZSBuZXZlciByZW1vdmVkLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVN0b3JlTG9jYXRpb25zIHtcbiAgLyoqXG4gIEFsbCByZWFkZXJzLCBvbGRlc3QgZmlyc3Q7IHRoZSBsYXN0IHRyYW5zcG9ydCBpcyB0aGUgYWN0aXZlIHdyaXRlci5cbiAgICpcbiAgICogQHJldHVybnMgQWxsIHJldGFpbmVkIHJlYWRlciB0cmFuc3BvcnRzIGluIHRyYW5zaXRpb24gb3JkZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRyYW5zcG9ydHMoKTogRGF0YVN0b3JlVHJhbnNwb3J0W10ge1xuICAgIHJldHVybiB0aGlzLmxvY2F0aW9ucy5tYXAoKGxvY2F0aW9uKSA9PiB0aGlzLmNyZWF0ZVRyYW5zcG9ydChsb2NhdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbmNob3I6IERhdGFTdG9yZVRyYW5zcG9ydDtcbiAgcHJpdmF0ZSByZWFkb25seSBpbml0aWFsOiBEYXRhU3RvcmVMb2NhdGlvbjtcblxuICBwcml2YXRlIGxvY2F0aW9uczogRGF0YVN0b3JlTG9jYXRpb25bXTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNvb3JkaW5hdG9yIHdpdGhvdXQgYWRhcHRlciBjYWxscy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFBlcm1hbmVudCBkaXNjb3ZlcnkgYW5jaG9yIGFuZCBzdG9yZSBpZGVudGl0eS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHBhcmFtczogRGF0YVN0b3JlVHJhbnNwb3J0Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLmFuY2hvciA9IG5ldyBEYXRhU3RvcmVUcmFuc3BvcnQocGFyYW1zKTtcbiAgICB0aGlzLmluaXRpYWwgPSB7IGZvbGRlcjogcGFyYW1zLmZvbGRlciA/PyAnUGx1Z2luIGRhdGEnLCBmb3JtYXQ6IHBhcmFtcy5mb3JtYXQgPz8gJ21hcmtkb3duJyB9O1xuICAgIHRoaXMubG9jYXRpb25zID0gW3RoaXMuaW5pdGlhbF07XG4gIH1cblxuICAvKipcbiAgICogRGlzY292ZXJzIGFuZCBmaW5pc2hlcyBwZW5kaW5nIGNvcGllcyBiZWZvcmUgYWxsb3dpbmcgYSB3cml0ZXIgdG8gc3dpdGNoIGRlc3RpbmF0aW9ucy5cbiAgICogQ29uZmxpY3RpbmcgYnJhbmNoZXMgYW5kIHJlb3JkZXJlZCBpbmNvbXBsZXRlIGNoYWlucyBmYWlsIGNsb3NlZCB1bnRpbCBkZWxpdmVyeSBpcyBjb21wbGV0ZS5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgZGlzY292ZXJ5IGFuZCB2ZXJpZmljYXRpb24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0cmFuc2l0aW9uczogVHJhbnNpdGlvbltdID0gW107XG4gICAgZm9yIChjb25zdCBwYXRoIG9mIGF3YWl0IHRoaXMuYW5jaG9yLmxpc3QoKSkge1xuICAgICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoYCR7dGhpcy5hbmNob3Iucm9vdH0vbG9jYXRpb25zLXYxL2ApIHx8ICFwYXRoLmVuZHNXaXRoKCcuanNvbicpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLmFuY2hvci5yZWFkKHBhdGgpO1xuICAgICAgaWYgKCFpc1RyYW5zaXRpb24odmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb21wbGV0ZSBvciBpbnZhbGlkIGRhdGEtc3RvcmUgdHJhbnNpdGlvbicpO1xuICAgICAgfVxuICAgICAgdGhpcy52YWxpZGF0ZUxvY2F0aW9uKHZhbHVlLmZyb20pO1xuICAgICAgdGhpcy52YWxpZGF0ZUxvY2F0aW9uKHZhbHVlLnRvKTtcbiAgICAgIHRyYW5zaXRpb25zLnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBsb2NhdGlvbnMgPSB0aGlzLmJ1aWxkQ2hhaW4oYXdhaXQgdGhpcy5yZXNvbHZlTW92ZWRBbmNob3IodHJhbnNpdGlvbnMpKTtcbiAgICAvLyBWYWxpZGF0ZSB0aGUgZW50aXJlIGNoYWluIGJlZm9yZSBtYWtpbmcgYW55IGNvcGllcyBvciBhY3RpdmF0aW5nIGEgd3JpdGVyLlxuICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTG9jYXRpb24obG9jYXRpb24sIGxvY2F0aW9ucyk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgbG9jYXRpb24gb2YgbG9jYXRpb25zLnNsaWNlKDEpKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmNyZWF0ZVRyYW5zcG9ydChsb2NhdGlvbik7XG4gICAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBsb2NhdGlvbnMuc2xpY2UoMCwgbG9jYXRpb25zLmluZGV4T2YobG9jYXRpb24pKSkge1xuICAgICAgICBjb25zdCB0cmFuc3BvcnQgPSB0aGlzLmNyZWF0ZVRyYW5zcG9ydChzb3VyY2UpO1xuICAgICAgICBpZiAodHJhbnNwb3J0LnJvb3QgIT09IHRhcmdldC5yb290KSB7XG4gICAgICAgICAgYXdhaXQgdHJhbnNwb3J0LmNvcHlIaXN0b3J5VG8odGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxvY2F0aW9ucyA9IGxvY2F0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbm5vdW5jZXMgYSB0cmFuc2l0aW9uIGR1cmFibHkgYXQgdGhlIGFuY2hvciwgdGhlbiBjb3BpZXMgYW5kIHZlcmlmaWVzIGJlZm9yZSBhY3RpdmF0aW9uLlxuICAgKiBSZXRyeWluZyB0aGUgc2FtZSBkZXN0aW5hdGlvbiBmaW5pc2hlcyBhbiBpbnRlcnJ1cHRlZCBjb3B5LlxuICAgKlxuICAgKiBAcGFyYW0gbG9jYXRpb24gLSBSZXF1ZXN0ZWQgZGVzdGluYXRpb24uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5ldyB3cml0ZXIgaXMgcmVhZHkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVsb2NhdGUobG9jYXRpb246IERhdGFTdG9yZUxvY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy52YWxpZGF0ZUxvY2F0aW9uKGxvY2F0aW9uKTtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICB0aGlzLnZhbGlkYXRlTG9jYXRpb24obG9jYXRpb24pO1xuICAgIGNvbnN0IGZyb20gPSBlbnN1cmVOb25OdWxsYWJsZSh0aGlzLmxvY2F0aW9ucy5hdCgtMSkpO1xuICAgIGlmIChpZGVudGl0eShmcm9tKSA9PT0gaWRlbnRpdHkobG9jYXRpb24pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxvY2F0aW9ucy5zb21lKChwcmV2aW91cykgPT4gaWRlbnRpdHkocHJldmlvdXMpID09PSBpZGVudGl0eShsb2NhdGlvbikpIHx8IHRoaXMubG9jYXRpb25zLmxlbmd0aCA+PSBNQVhfTE9DQVRJT05TKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGEtc3RvcmUgcmVsb2NhdGlvbiBsb29wIG9yIGxvY2F0aW9uIGxpbWl0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlOiBUcmFuc2l0aW9uID0geyBhbmNob3I6IHRoaXMuaW5pdGlhbCwgZm9ybWF0OiAxLCBmcm9tLCB0bzogbG9jYXRpb24gfTtcbiAgICBhd2FpdCB0aGlzLmFuY2hvci53cml0ZShgJHt0aGlzLmFuY2hvci5yb290fS9sb2NhdGlvbnMtdjEvJHt3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKX0uanNvbmAsIHZhbHVlKTtcbiAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDaGFpbih0cmFuc2l0aW9uczogcmVhZG9ubHkgVHJhbnNpdGlvbltdKTogRGF0YVN0b3JlTG9jYXRpb25bXSB7XG4gICAgY29uc3QgcmVtYWluaW5nID0gWy4uLnRyYW5zaXRpb25zXTtcbiAgICBjb25zdCBsb2NhdGlvbnMgPSBbdGhpcy5pbml0aWFsXTtcbiAgICBsZXQgY3VycmVudElkZW50aXR5ID0gaWRlbnRpdHkodGhpcy5pbml0aWFsKTtcbiAgICB3aGlsZSAocmVtYWluaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNvdXJjZUlkZW50aXR5ID0gY3VycmVudElkZW50aXR5O1xuICAgICAgY29uc3QgbmV4dCA9IHJlbWFpbmluZy5maWx0ZXIoKHRyYW5zaXRpb24pID0+IGlkZW50aXR5KHRyYW5zaXRpb24uZnJvbSkgPT09IHNvdXJjZUlkZW50aXR5KTtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBuZXcgU2V0KG5leHQubWFwKCh0cmFuc2l0aW9uKSA9PiBpZGVudGl0eSh0cmFuc2l0aW9uLnRvKSkpO1xuICAgICAgaWYgKHRhcmdldHMuc2l6ZSAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZsaWN0aW5nIG9yIGluY29tcGxldGUgZGF0YS1zdG9yZSByZWxvY2F0aW9uIGNoYWluJyk7XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXQgPSBlbnN1cmVOb25OdWxsYWJsZShuZXh0WzBdKTtcbiAgICAgIGlmIChsb2NhdGlvbnMuc29tZSgobG9jYXRpb24pID0+IGlkZW50aXR5KGxvY2F0aW9uKSA9PT0gaWRlbnRpdHkodGFyZ2V0LnRvKSkgfHwgbG9jYXRpb25zLmxlbmd0aCA+PSBNQVhfTE9DQVRJT05TKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGF0YS1zdG9yZSByZWxvY2F0aW9uIGxvb3Agb3IgbG9jYXRpb24gbGltaXQnKTtcbiAgICAgIH1cbiAgICAgIGxvY2F0aW9ucy5wdXNoKHRhcmdldC50byk7XG4gICAgICBjdXJyZW50SWRlbnRpdHkgPSBpZGVudGl0eSh0YXJnZXQudG8pO1xuICAgICAgZm9yIChjb25zdCB0cmFuc2l0aW9uIG9mIG5leHQpIHtcbiAgICAgICAgcmVtYWluaW5nLnNwbGljZShyZW1haW5pbmcuaW5kZXhPZih0cmFuc2l0aW9uKSwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsb2NhdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRyYW5zcG9ydChsb2NhdGlvbjogRGF0YVN0b3JlTG9jYXRpb24pOiBEYXRhU3RvcmVUcmFuc3BvcnQge1xuICAgIHJldHVybiBuZXcgRGF0YVN0b3JlVHJhbnNwb3J0KHsgLi4udGhpcy5wYXJhbXMsIGZvbGRlcjogbG9jYXRpb24uZm9sZGVyLCBmb3JtYXQ6IGxvY2F0aW9uLmZvcm1hdCA/PyAnbWFya2Rvd24nIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgdGhlIHJlY29yZHMgb2YgYW4gYW5jaG9yIGZvbGRlciB0aGF0IHdhcyBtb3ZlZCAob3Igc2l0cyB1bmRlciBhIG1vdmVkIGZvbGRlcikgb250byB0aGUgZm9sZGVyIHRoZSBzdG9yZSBpcyBvcGVuXG4gICAqIGF0LCBiZWNhdXNlIHJlY29yZHMgbmFtZSBhYnNvbHV0ZSBmb2xkZXJzLlxuICAgKlxuICAgKiBBIHRyYW5zaXRpb24gdGhhdCBuYW1lcyBpdHMgYGFuY2hvcmAgaXMgcmVtYXBwZWQgZnJvbSB0aGF0IGZvbGRlciBleGFjdGx5LCBzbyBzZXZlcmFsIHN1Y2Nlc3NpdmUgbW92ZXMgcmVzb2x2ZSB0b28uXG4gICAqIEEgdHJhbnNpdGlvbiB3cml0dGVuIGJlZm9yZSB0aGF0IGZpZWxkIGV4aXN0ZWQgbmFtZXMgbm8gYW5jaG9yLCBhbmQgYSBtb3ZlZCBhbmNob3IgdGhlbiBsb29rcyB0aGUgc2FtZSBhcyBhIGNoYWluIHdob3NlXG4gICAqIGZpcnN0IHJlY29yZCBoYXMgbm90IGFycml2ZWQgeWV0LiBTbyB0aGUgZm9ybWVyIGZvbGRlciBpcyBpbmZlcnJlZCBvbmx5IHdoZW4gbm90aGluZyBzdGFydHMgYXQgdGhlIGluaXRpYWwgaWRlbnRpdHksXG4gICAqIGV4YWN0bHkgb25lIGNhbmRpZGF0ZSBmb2xkZXIgKG9uZSB0aGUgbGVnYWN5IHJlY29yZHMgc3RhcnQgZnJvbSwgaW4gdGhlIGluaXRpYWwgZm9ybWF0KSB5aWVsZHMgYSBjb21wbGV0ZSBjaGFpbiwgYW5kXG4gICAqIHRoYXQgZm9sZGVyIG5vIGxvbmdlciBob2xkcyB0aGlzIHN0b3JlLiBBbnl0aGluZyBlbHNlIGlzIGxlZnQgZm9yIGBidWlsZENoYWluYCB0byByZWplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB0cmFuc2l0aW9ucyAtIFRoZSB0cmFuc2l0aW9ucyByZWNvcmRlZCBhdCB0aGUgYW5jaG9yLlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNpdGlvbnMgdG8gYnVpbGQgdGhlIGNoYWluIGZyb20uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc29sdmVNb3ZlZEFuY2hvcih0cmFuc2l0aW9uczogcmVhZG9ubHkgVHJhbnNpdGlvbltdKTogUHJvbWlzZTxyZWFkb25seSBUcmFuc2l0aW9uW10+IHtcbiAgICBjb25zdCBhbmNob3JlZCA9IHRyYW5zaXRpb25zLm1hcCgodHJhbnNpdGlvbikgPT4gdHJhbnNpdGlvbi5hbmNob3IgPyByZW1hcFRyYW5zaXRpb24odHJhbnNpdGlvbiwgdHJhbnNpdGlvbi5hbmNob3IuZm9sZGVyLCB0aGlzLmluaXRpYWwuZm9sZGVyKSA6IHRyYW5zaXRpb24pO1xuICAgIGNvbnN0IGluaXRpYWxJZGVudGl0eSA9IGlkZW50aXR5KHRoaXMuaW5pdGlhbCk7XG4gICAgaWYgKGFuY2hvcmVkLnNvbWUoKHRyYW5zaXRpb24pID0+IGlkZW50aXR5KHRyYW5zaXRpb24uZnJvbSkgPT09IGluaXRpYWxJZGVudGl0eSkpIHtcbiAgICAgIHJldHVybiBhbmNob3JlZDtcbiAgICB9XG4gICAgLy8gQSBjYW5kaWRhdGUgdGhhdCBjYW5ub3QgcHJvZHVjZSBhIHRyYW5zaXRpb24gZnJvbSB0aGUgaW5pdGlhbCBpZGVudGl0eSBmYWlscyBgYnVpbGRDaGFpbmAgYmVsb3cuXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IG5ldyBTZXQoYW5jaG9yZWQuZmlsdGVyKCh0cmFuc2l0aW9uKSA9PiAhdHJhbnNpdGlvbi5hbmNob3IpLm1hcCgodHJhbnNpdGlvbikgPT4gdHJhbnNpdGlvbi5mcm9tLmZvbGRlcikpO1xuICAgIGNvbnN0IHJlc29sdmVkOiBJbmZlcnJlZENoYWluW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGZvcm1lckZvbGRlciBvZiBjYW5kaWRhdGVzKSB7XG4gICAgICBjb25zdCByZW1hcHBlZCA9IGFuY2hvcmVkLm1hcCgodHJhbnNpdGlvbikgPT4gdHJhbnNpdGlvbi5hbmNob3IgPyB0cmFuc2l0aW9uIDogcmVtYXBUcmFuc2l0aW9uKHRyYW5zaXRpb24sIGZvcm1lckZvbGRlciwgdGhpcy5pbml0aWFsLmZvbGRlcikpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5idWlsZENoYWluKHJlbWFwcGVkKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmVkLnB1c2goeyBmb3JtZXJGb2xkZXIsIHRyYW5zaXRpb25zOiByZW1hcHBlZCB9KTtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2ggPSByZXNvbHZlZC5sZW5ndGggPT09IDEgPyBlbnN1cmVOb25OdWxsYWJsZShyZXNvbHZlZFswXSkgOiBudWxsO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHJldHVybiBhbmNob3JlZDtcbiAgICB9XG4gICAgY29uc3QgZm9ybWVyRmlsZXMgPSBhd2FpdCB0aGlzLmNyZWF0ZVRyYW5zcG9ydCh7IC4uLnRoaXMuaW5pdGlhbCwgZm9sZGVyOiBtYXRjaC5mb3JtZXJGb2xkZXIgfSkubGlzdCgpO1xuICAgIHJldHVybiBmb3JtZXJGaWxlcy5sZW5ndGggPiAwID8gYW5jaG9yZWQgOiBtYXRjaC50cmFuc2l0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVMb2NhdGlvbihsb2NhdGlvbjogRGF0YVN0b3JlTG9jYXRpb24sIGxvY2F0aW9uczogcmVhZG9ubHkgRGF0YVN0b3JlTG9jYXRpb25bXSA9IHRoaXMubG9jYXRpb25zKTogdm9pZCB7XG4gICAgY29uc3QgdHJhbnNwb3J0ID0gdGhpcy5jcmVhdGVUcmFuc3BvcnQobG9jYXRpb24pO1xuICAgIGZvciAoY29uc3QgcHJldmlvdXMgb2YgbG9jYXRpb25zKSB7XG4gICAgICBjb25zdCByb290ID0gdGhpcy5jcmVhdGVUcmFuc3BvcnQocHJldmlvdXMpLnJvb3Q7XG4gICAgICBpZiAodHJhbnNwb3J0LnJvb3QgIT09IHJvb3QgJiYgKHRyYW5zcG9ydC5yb290LnN0YXJ0c1dpdGgoYCR7cm9vdH0vYCkgfHwgcm9vdC5zdGFydHNXaXRoKGAke3RyYW5zcG9ydC5yb290fS9gKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPdmVybGFwcGluZyBkYXRhLXN0b3JlIHJlbG9jYXRpb24gcm9vdHMnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaWRlbnRpdHkobG9jYXRpb246IERhdGFTdG9yZUxvY2F0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2xvY2F0aW9uLmZvbGRlcn06JHtsb2NhdGlvbi5mb3JtYXQgPz8gJ21hcmtkb3duJ31gO1xufVxuXG5mdW5jdGlvbiBpc0xvY2F0aW9uKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRGF0YVN0b3JlTG9jYXRpb24ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAnZm9sZGVyJyBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuZm9sZGVyID09PSAnc3RyaW5nJ1xuICAgICYmICghKCdmb3JtYXQnIGluIHZhbHVlKSB8fCB2YWx1ZS5mb3JtYXQgPT09ICdqc29uJyB8fCB2YWx1ZS5mb3JtYXQgPT09ICdtYXJrZG93bicpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaXRpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBUcmFuc2l0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgJ2Zvcm1hdCcgaW4gdmFsdWUgJiYgdmFsdWUuZm9ybWF0ID09PSAxXG4gICAgJiYgJ2Zyb20nIGluIHZhbHVlICYmIGlzTG9jYXRpb24odmFsdWUuZnJvbSkgJiYgJ3RvJyBpbiB2YWx1ZSAmJiBpc0xvY2F0aW9uKHZhbHVlLnRvKVxuICAgICYmICghKCdhbmNob3InIGluIHZhbHVlKSB8fCBpc0xvY2F0aW9uKHZhbHVlLmFuY2hvcikpO1xufVxuXG5mdW5jdGlvbiByZW1hcExvY2F0aW9uKGxvY2F0aW9uOiBEYXRhU3RvcmVMb2NhdGlvbiwgZm9ybWVyRm9sZGVyOiBzdHJpbmcsIGZvbGRlcjogc3RyaW5nKTogRGF0YVN0b3JlTG9jYXRpb24ge1xuICBpZiAobG9jYXRpb24uZm9sZGVyID09PSBmb3JtZXJGb2xkZXIpIHtcbiAgICByZXR1cm4geyAuLi5sb2NhdGlvbiwgZm9sZGVyIH07XG4gIH1cbiAgaWYgKGxvY2F0aW9uLmZvbGRlci5zdGFydHNXaXRoKGAke2Zvcm1lckZvbGRlcn0vYCkpIHtcbiAgICByZXR1cm4geyAuLi5sb2NhdGlvbiwgZm9sZGVyOiBgJHtmb2xkZXJ9JHtsb2NhdGlvbi5mb2xkZXIuc2xpY2UoZm9ybWVyRm9sZGVyLmxlbmd0aCl9YCB9O1xuICB9XG4gIHJldHVybiBsb2NhdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtYXBUcmFuc2l0aW9uKHRyYW5zaXRpb246IFRyYW5zaXRpb24sIGZvcm1lckZvbGRlcjogc3RyaW5nLCBmb2xkZXI6IHN0cmluZyk6IFRyYW5zaXRpb24ge1xuICByZXR1cm4ge1xuICAgIC4uLnRyYW5zaXRpb24sXG4gICAgZnJvbTogcmVtYXBMb2NhdGlvbih0cmFuc2l0aW9uLmZyb20sIGZvcm1lckZvbGRlciwgZm9sZGVyKSxcbiAgICB0bzogcmVtYXBMb2NhdGlvbih0cmFuc2l0aW9uLnRvLCBmb3JtZXJGb2xkZXIsIGZvbGRlcilcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLQSxTQUFTLHlCQUF5QjtBQUlsQyxTQUFTLDBCQUEwQjtBQUVuQyxNQUFNLGdCQUFnQjtBQW9DZixNQUFNLG1CQUFtQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQW9CdkIsWUFBNkIsUUFBNkM7QUFBN0M7QUFDbEMsU0FBSyxTQUFTLElBQUksbUJBQW1CLE1BQU07QUFDM0MsU0FBSyxVQUFVLEVBQUUsUUFBUSxPQUFPLFVBQVUsZUFBZSxRQUFRLE9BQU8sVUFBVSxXQUFXO0FBQzdGLFNBQUssWUFBWSxDQUFDLEtBQUssT0FBTztBQUFBLEVBQ2hDO0FBQUEsRUFKb0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFkcEMsSUFBVyxhQUFtQztBQUM1QyxXQUFPLEtBQUssVUFBVSxJQUFJLENBQUMsYUFBYSxLQUFLLGdCQUFnQixRQUFRLENBQUM7QUFBQSxFQUN4RTtBQUFBLEVBRWlCO0FBQUEsRUFDQTtBQUFBLEVBRVQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQW1CUixNQUFhLFVBQXlCO0FBQ3BDLFVBQU0sY0FBNEIsQ0FBQztBQUNuQyxlQUFXLFFBQVEsTUFBTSxLQUFLLE9BQU8sS0FBSyxHQUFHO0FBQzNDLFVBQUksQ0FBQyxLQUFLLFdBQVcsR0FB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
@@ -2,7 +2,35 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
5
32
 
33
+ import { ensureNonNullable } from "@mnaoumov/typescript-lib/type-guards";
6
34
  class DataStoreReplica {
7
35
  /**
8
36
  * Creates an empty replica.
@@ -31,7 +59,7 @@ class DataStoreReplica {
31
59
  return;
32
60
  }
33
61
  const previous = this.registers.get(operation.key);
34
- if (this.kind !== "last-write-wins" && (operation.deleted || rankOf(operation.value) === void 0)) {
62
+ if (this.kind !== "last-write-wins" && (operation.deleted || rankOf(operation.value) === null)) {
35
63
  throw new Error("Min/max stores accept finite numbers or ranked JSON values and do not support deletion");
36
64
  }
37
65
  if (!previous || this.wins(operation, previous)) {
@@ -107,9 +135,9 @@ class DataStoreReplica {
107
135
  const nextRank = rankOf(next.value);
108
136
  const previousRank = rankOf(previous.value);
109
137
  if (this.kind === "minimum" && nextRank !== previousRank) {
110
- return Number(nextRank) < Number(previousRank);
138
+ return ensureNonNullable(nextRank) < ensureNonNullable(previousRank);
111
139
  }
112
- return this.kind === "maximum" && nextRank !== previousRank ? Number(nextRank) > Number(previousRank) : next.time > previous.time || next.time === previous.time && (next.counter > previous.counter || next.counter === previous.counter && next.device > previous.device);
140
+ return this.kind === "maximum" && nextRank !== previousRank ? ensureNonNullable(nextRank) > ensureNonNullable(previousRank) : next.time > previous.time || next.time === previous.time && (next.counter > previous.counter || next.counter === previous.counter && next.device > previous.device);
113
141
  }
114
142
  }
115
143
  function isDataStoreJsonValue(value) {
@@ -147,7 +175,7 @@ function rankOf(value) {
147
175
  if (typeof value === "number" && Number.isFinite(value)) {
148
176
  return value;
149
177
  }
150
- return typeof value === "object" && value !== null && "rank" in value && "value" in value && typeof value.rank === "number" && Number.isFinite(value.rank) ? value.rank : void 0;
178
+ return typeof value === "object" && value !== null && "rank" in value && "value" in value && typeof value.rank === "number" && Number.isFinite(value.rank) ? value.rank : null;
151
179
  }
152
180
  function tag(operation) {
153
181
  return `${operation.device}:${String(operation.sequence)}`;
@@ -170,4 +198,4 @@ export {
170
198
  isDataStoreJsonValue,
171
199
  isDataStoreOperation
172
200
  };
173
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RvcmVzL2RhdGEtc3RvcmUtcmVwbGljYS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogZXNsaW50LWRpc2FibGUgbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9ub2RlLWJ1aWx0aW5zIC0tIFRoZXNlIGFyZSBPYnNpZGlhbiByZW5kZXJlciBXZWIgQVBJcywgbm90IE5vZGUgYnVpbHRpbnMuICovXG4vKipcbiAqIEBmaWxlXG4gKlxuICogTWVyZ2Utc2FmZSByZWdpc3RlcnMgYW5kIG9ic2VydmVkLXJlbW92ZSBzZXRzIHVzZWQgYnkgc2hhcmVkIGRhdGEgc3RvcmVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSnNvblZhbHVlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuLyoqXG4gKiBBIHN0b3JlIGZpeGVzIGl0cyBtZXJnZSBydWxlIGZvciBpdHMgZW50aXJlIGxpZmV0aW1lIGFuZCBzY2hlbWEgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVN0b3JlTWVyZ2VLaW5kID0gJ2xhc3Qtd3JpdGUtd2lucycgfCAnbWF4aW11bScgfCAnbWluaW11bScgfCAnb2JzZXJ2ZWQtcmVtb3ZlLXNldCc7XG5cbi8qKlxuICogQSB2ZXJzaW9uLW9uZSBqb3VybmFsIG9wZXJhdGlvbi4gVGhlc2UgZmllbGRzIGZvcm0gYSBwdWJsaXNoZWQgd2lyZSBmb3JtYXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlT3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIExvZ2ljYWwgY291bnRlciB3aXRoaW4gdGhlIHdhbGwtY2xvY2sgbWlsbGlzZWNvbmQuXG4gICAqL1xuICByZWFkb25seSBjb3VudGVyOiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSByZW1vdmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFVuaXF1ZSB3cml0ZXIgaW5jYXJuYXRpb24sIHN0b3JlZCBsb2NhbGx5IHJhdGhlciB0aGFuIGluIHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZTogc3RyaW5nO1xuICAvKipcbiAgICogUmVjb3JkIGtleSwgb3Igc2V0IG1lbWJlci5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAvKipcbiAgICogU3RyaWN0bHkgaW5jcmVhc2luZyB3cml0ZXIgc2VxdWVuY2UsIHN0YXJ0aW5nIGF0IG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlcXVlbmNlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBPYnNlcnZlZCBhZGRpdGlvbiB0YWdzIHJlbW92ZWQgYnkgYSBzZXQgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogSHlicmlkIGxvZ2ljYWwgY2xvY2sgd2FsbCB0aW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogSlNPTi1jb21wYXRpYmxlIHZhbHVlOyBzZXQgbWVtYmVycyB1c2UgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHVua25vd247XG59XG5cbi8qKlxuICogSW4tbWVtb3J5IENSRFQgc3RhdGUuIEV4cG9ydGVkIG9wZXJhdGlvbnMgY2FuIGJlIGpvaW5lZCBpbiBhbnkgb3JkZXIsIHJlcGVhdGVkbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU3RvcmVSZXBsaWNhIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhZGRpdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRGF0YVN0b3JlT3BlcmF0aW9uPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdGVycyA9IG5ldyBNYXA8c3RyaW5nLCBEYXRhU3RvcmVPcGVyYXRpb24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3ZhbHMgPSBuZXcgTWFwPHN0cmluZywgRGF0YVN0b3JlT3BlcmF0aW9uPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtcHR5IHJlcGxpY2EuXG4gICAqXG4gICAqIEBwYXJhbSBraW5kIC0gSW1tdXRhYmxlIG1lcmdlIHJ1bGUgZm9yIHRoZSBzdG9yZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkga2luZDogRGF0YVN0b3JlTWVyZ2VLaW5kKSB7fVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW5kIGpvaW5zIG9uZSBqb3VybmFsIG9yIHNuYXBzaG90IG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVW50cnVzdGVkIHBhcnNlZCBvcGVyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgYXBwbHkodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoIWlzRGF0YVN0b3JlT3BlcmF0aW9uKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEtc3RvcmUgb3BlcmF0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHdpbmRvdy5zdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpO1xuICAgIGlmICh0aGlzLmtpbmQgPT09ICdvYnNlcnZlZC1yZW1vdmUtc2V0Jykge1xuICAgICAgdGhpcy5hcHBseVNldChvcGVyYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMucmVnaXN0ZXJzLmdldChvcGVyYXRpb24ua2V5KTtcbiAgICBpZiAodGhpcy5raW5kICE9PSAnbGFzdC13cml0ZS13aW5zJyAmJiAob3BlcmF0aW9uLmRlbGV0ZWQgfHwgcmFua09mKG9wZXJhdGlvbi52YWx1ZSkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWluL21heCBzdG9yZXMgYWNjZXB0IGZpbml0ZSBudW1iZXJzIG9yIHJhbmtlZCBKU09OIHZhbHVlcyBhbmQgZG8gbm90IHN1cHBvcnQgZGVsZXRpb24nKTtcbiAgICB9XG4gICAgaWYgKCFwcmV2aW91cyB8fCB0aGlzLndpbnMob3BlcmF0aW9uLCBwcmV2aW91cykpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJzLnNldChvcGVyYXRpb24ua2V5LCBvcGVyYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB2aXNpYmxlIHJlY29yZHMsIGRldGFjaGVkIGZyb20gaW50ZXJuYWwgc3RhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIFBhaXJzIGluIGRldGVybWluaXN0aWMga2V5IG9yZGVyLlxuICAgKi9cbiAgcHVibGljIGVudHJpZXMoKTogW3N0cmluZywgdW5rbm93bl1bXSB7XG4gICAgaWYgKHRoaXMua2luZCA9PT0gJ29ic2VydmVkLXJlbW92ZS1zZXQnKSB7XG4gICAgICBjb25zdCBrZXlzID0gbmV3IFNldCh0aGlzLmFjdGl2ZUFkZGl0aW9ucygpLm1hcCgob3BlcmF0aW9uKSA9PiBvcGVyYXRpb24ua2V5KSk7XG4gICAgICByZXR1cm4gWy4uLmtleXNdLnNvcnQoKS5tYXAoKGtleSkgPT4gW2tleSwgdHJ1ZV0pO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLnRoaXMucmVnaXN0ZXJzLnZhbHVlcygpXS5maWx0ZXIoKG9wZXJhdGlvbikgPT4gIW9wZXJhdGlvbi5kZWxldGVkKVxuICAgICAgLnNvcnQoKGZpcnN0LCBzZWNvbmQpID0+IGZpcnN0LmtleS5sb2NhbGVDb21wYXJlKHNlY29uZC5rZXkpKVxuICAgICAgLm1hcCgob3BlcmF0aW9uKSA9PiBbb3BlcmF0aW9uLmtleSwgd2luZG93LnN0cnVjdHVyZWRDbG9uZShvcGVyYXRpb24udmFsdWUpXSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0cyBtZXJnZWFibGUgc3RhdGUsIHJldGFpbmluZyB0b21ic3RvbmVzIGZvciBsYXRlIG9yIHJldGlyZWQgcmVwbGljYXMuXG4gICAqXG4gICAqIEByZXR1cm5zIERldGVybWluaXN0aWNhbGx5IG9yZGVyZWQgb3BlcmF0aW9ucyBzdWZmaWNpZW50IHRvIHJlY29uc3RydWN0IHRoaXMgc3RhdGUuXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0KCk6IERhdGFTdG9yZU9wZXJhdGlvbltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucmVnaXN0ZXJzLnZhbHVlcygpLCAuLi50aGlzLmFjdGl2ZUFkZGl0aW9ucygpLCAuLi50aGlzLnJlbW92YWxzLnZhbHVlcygpXVxuICAgICAgLnNvcnQoKGZpcnN0LCBzZWNvbmQpID0+IHRhZyhmaXJzdCkubG9jYWxlQ29tcGFyZSh0YWcoc2Vjb25kKSkpLm1hcCgob3BlcmF0aW9uKSA9PiB3aW5kb3cuc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIGEgcmVnaXN0ZXIgb3Igc2V0IG1lbWJlcnNoaXAgd2l0aG91dCBlbnVtZXJhdGluZyByZWdpc3RlciBrZXlzLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gUmVjb3JkIGtleSBvciBzZXQgbWVtYmVyLlxuICAgKiBAcmV0dXJucyBBIGRldGFjaGVkIHZhbHVlLCBvciBgdW5kZWZpbmVkYCB3aGVuIGFic2VudCBvciBkZWxldGVkLlxuICAgKi9cbiAgcHVibGljIGdldChrZXk6IHN0cmluZyk6IHVua25vd24ge1xuICAgIGlmICh0aGlzLmtpbmQgPT09ICdvYnNlcnZlZC1yZW1vdmUtc2V0Jykge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlQWRkaXRpb25zKCkuc29tZSgob3BlcmF0aW9uKSA9PiBvcGVyYXRpb24ua2V5ID09PSBrZXkpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy5yZWdpc3RlcnMuZ2V0KGtleSk7XG4gICAgcmV0dXJuIG9wZXJhdGlvbiAmJiAhb3BlcmF0aW9uLmRlbGV0ZWQgPyB3aW5kb3cuc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbi52YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYWRkaXRpb25zIG9ic2VydmVkIGZvciBhIHNldCBtZW1iZXIsIGZvciBhbiBvYnNlcnZlZCByZW1vdmFsLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gU2V0IG1lbWJlci5cbiAgICogQHJldHVybnMgQWRkaXRpb24gaWRlbnRpdGllcy4gQ29uY3VycmVudCB1bnNlZW4gYWRkaXRpb25zIHN1cnZpdmUgcmVtb3ZhbC5cbiAgICovXG4gIHB1YmxpYyBvYnNlcnZlZFRhZ3Moa2V5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmFkZGl0aW9ucy52YWx1ZXMoKV0uZmlsdGVyKChvcGVyYXRpb24pID0+IG9wZXJhdGlvbi5rZXkgPT09IGtleSkubWFwKChvcGVyYXRpb24pID0+IHRhZyhvcGVyYXRpb24pKS5zb3J0KCk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2ZUFkZGl0aW9ucygpOiBEYXRhU3RvcmVPcGVyYXRpb25bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmFkZGl0aW9ucy52YWx1ZXMoKV0uZmlsdGVyKChvcGVyYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlbW92ZWQgPSB0YWdWZWN0b3IodGhpcy5yZW1vdmFscy5nZXQob3BlcmF0aW9uLmtleSk/LnRhZ3MgPz8gW10pO1xuICAgICAgcmV0dXJuIG9wZXJhdGlvbi5zZXF1ZW5jZSA+IChyZW1vdmVkLmdldChvcGVyYXRpb24uZGV2aWNlKSA/PyAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZXQob3BlcmF0aW9uOiBEYXRhU3RvcmVPcGVyYXRpb24pOiB2b2lkIHtcbiAgICBpZiAob3BlcmF0aW9uLmRlbGV0ZWQpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5yZW1vdmFscy5nZXQob3BlcmF0aW9uLmtleSk7XG4gICAgICBjb25zdCB2ZWN0b3IgPSB0YWdWZWN0b3IoWy4uLihwcmV2aW91cz8udGFncyA/PyBbXSksIC4uLihvcGVyYXRpb24udGFncyA/PyBbXSldKTtcbiAgICAgIGNvbnN0IHdpbm5lciA9IHByZXZpb3VzICYmIHRoaXMud2lucyhwcmV2aW91cywgb3BlcmF0aW9uKSA/IHByZXZpb3VzIDogb3BlcmF0aW9uO1xuICAgICAgdGhpcy5yZW1vdmFscy5zZXQob3BlcmF0aW9uLmtleSwgeyAuLi53aW5uZXIsIHRhZ3M6IFsuLi52ZWN0b3JdLnNvcnQoKFtmaXJzdF0sIFtzZWNvbmRdKSA9PiBmaXJzdC5sb2NhbGVDb21wYXJlKHNlY29uZCkpLm1hcCgoW2RldmljZSwgc2VxdWVuY2VdKSA9PiBgJHtkZXZpY2V9OiR7U3RyaW5nKHNlcXVlbmNlKX1gKSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wZXJhdGlvbi52YWx1ZSAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldCBhZGRpdGlvbnMgdXNlIHRydWUgYXMgdGhlaXIgdmFsdWUnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGAke29wZXJhdGlvbi5rZXl9OiR7b3BlcmF0aW9uLmRldmljZX1gO1xuICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmFkZGl0aW9ucy5nZXQoa2V5KTtcbiAgICAgIGlmICghcHJldmlvdXMgfHwgb3BlcmF0aW9uLnNlcXVlbmNlID4gcHJldmlvdXMuc2VxdWVuY2UpIHtcbiAgICAgICAgdGhpcy5hZGRpdGlvbnMuc2V0KGtleSwgb3BlcmF0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHdpbnMobmV4dDogRGF0YVN0b3JlT3BlcmF0aW9uLCBwcmV2aW91czogRGF0YVN0b3JlT3BlcmF0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dFJhbmsgPSByYW5rT2YobmV4dC52YWx1ZSk7XG4gICAgY29uc3QgcHJldmlvdXNSYW5rID0gcmFua09mKHByZXZpb3VzLnZhbHVlKTtcbiAgICBpZiAodGhpcy5raW5kID09PSAnbWluaW11bScgJiYgbmV4dFJhbmsgIT09IHByZXZpb3VzUmFuaykge1xuICAgICAgcmV0dXJuIE51bWJlcihuZXh0UmFuaykgPCBOdW1iZXIocHJldmlvdXNSYW5rKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMua2luZCA9PT0gJ21heGltdW0nICYmIG5leHRSYW5rICE9PSBwcmV2aW91c1JhbmsgPyBOdW1iZXIobmV4dFJhbmspID4gTnVtYmVyKHByZXZpb3VzUmFuaykgOiBuZXh0LnRpbWUgPiBwcmV2aW91cy50aW1lIHx8IChuZXh0LnRpbWUgPT09IHByZXZpb3VzLnRpbWUgJiYgKG5leHQuY291bnRlciA+IHByZXZpb3VzLmNvdW50ZXJcbiAgICAgIHx8IChuZXh0LmNvdW50ZXIgPT09IHByZXZpb3VzLmNvdW50ZXIgJiYgbmV4dC5kZXZpY2UgPiBwcmV2aW91cy5kZXZpY2UpKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgdGhhdCBhIHZhbHVlIHN1cnZpdmVzIEpTT04gdHJhbnNwb3J0IHdpdGhvdXQgY2hhbmdpbmcgaXRzIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gQ2FuZGlkYXRlIGRhdGEtc3RvcmUgdmFsdWUuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGl0IGlzIGZpbml0ZSwgYWN5Y2xpYyBKU09OIGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFTdG9yZUpzb25WYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEpzb25WYWx1ZSB7XG4gIHJldHVybiBpc0pzb25WYWx1ZSh2YWx1ZSwgbmV3IFNldCgpKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIHZlcnNpb24tb25lIG9wZXJhdGlvbiB3aXJlIHNoYXBlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFBhcnNlZCBKU09OLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgb3BlcmF0aW9uIGhhcyB2YWxpZCBpZGVudGl0eSBhbmQgY2xvY2sgZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhU3RvcmVPcGVyYXRpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBEYXRhU3RvcmVPcGVyYXRpb24ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAna2V5JyBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUua2V5ID09PSAnc3RyaW5nJ1xuICAgICYmICdkZXZpY2UnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5kZXZpY2UgPT09ICdzdHJpbmcnICYmIC9eW1xcdy1dKyQvLnRlc3QodmFsdWUuZGV2aWNlKVxuICAgICYmICdzZXF1ZW5jZScgaW4gdmFsdWUgJiYgaXNQb3NpdGl2ZUludGVnZXIodmFsdWUuc2VxdWVuY2UpXG4gICAgJiYgJ3RpbWUnIGluIHZhbHVlICYmIGlzTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlLnRpbWUpXG4gICAgJiYgJ2NvdW50ZXInIGluIHZhbHVlICYmIGlzTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlLmNvdW50ZXIpXG4gICAgJiYgJ2RlbGV0ZWQnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5kZWxldGVkID09PSAnYm9vbGVhbicgJiYgJ3ZhbHVlJyBpbiB2YWx1ZSAmJiBpc0RhdGFTdG9yZUpzb25WYWx1ZSh2YWx1ZS52YWx1ZSlcbiAgICAmJiAoISgndGFncycgaW4gdmFsdWUpIHx8IChBcnJheS5pc0FycmF5KHZhbHVlLnRhZ3MpICYmIHZhbHVlLnRhZ3MuZXZlcnkoKGl0ZW06IHVua25vd24pID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykpKTtcbn1cblxuZnVuY3Rpb24gaXNKc29uVmFsdWUodmFsdWU6IHVua25vd24sIGFuY2VzdG9yczogU2V0PG9iamVjdD4pOiBib29sZWFuIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IGFuY2VzdG9ycy5oYXModmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYW5jZXN0b3JzLmFkZCh2YWx1ZSk7XG4gIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogT2JqZWN0LnZhbHVlcyh2YWx1ZSk7XG4gIGNvbnN0IGlzVmFsaWQgPSB2YWx1ZXMuZXZlcnkoKGNoaWxkKSA9PiBpc0pzb25WYWx1ZShjaGlsZCwgYW5jZXN0b3JzKSk7XG4gIGFuY2VzdG9ycy5kZWxldGUodmFsdWUpO1xuICByZXR1cm4gaXNWYWxpZDtcbn1cblxuZnVuY3Rpb24gaXNOb25OZWdhdGl2ZUludGVnZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSAmJiBOdW1iZXIodmFsdWUpID49IDA7XG59XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkgJiYgTnVtYmVyKHZhbHVlKSA+IDA7XG59XG5cbmZ1bmN0aW9uIHJhbmtPZih2YWx1ZTogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgJ3JhbmsnIGluIHZhbHVlICYmICd2YWx1ZScgaW4gdmFsdWVcbiAgICAgICYmIHR5cGVvZiB2YWx1ZS5yYW5rID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUucmFuaylcbiAgICA/IHZhbHVlLnJhbmtcbiAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdGFnKG9wZXJhdGlvbjogRGF0YVN0b3JlT3BlcmF0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke29wZXJhdGlvbi5kZXZpY2V9OiR7U3RyaW5nKG9wZXJhdGlvbi5zZXF1ZW5jZSl9YDtcbn1cblxuZnVuY3Rpb24gdGFnVmVjdG9yKHRhZ3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogTWFwPHN0cmluZywgbnVtYmVyPiB7XG4gIGNvbnN0IHZlY3RvciA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdGFncykge1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHZhbHVlLmxhc3RJbmRleE9mKCc6Jyk7XG4gICAgY29uc3QgZGV2aWNlID0gdmFsdWUuc2xpY2UoMCwgc2VwYXJhdG9yKTtcbiAgICBjb25zdCBzZXF1ZW5jZSA9IE51bWJlcih2YWx1ZS5zbGljZShzZXBhcmF0b3IgKyAxKSk7XG4gICAgaWYgKCFkZXZpY2UgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHNlcXVlbmNlKSB8fCBzZXF1ZW5jZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgb2JzZXJ2ZWQtcmVtb3ZlIHRhZycpO1xuICAgIH1cbiAgICB2ZWN0b3Iuc2V0KGRldmljZSwgTWF0aC5tYXgoc2VxdWVuY2UsIHZlY3Rvci5nZXQoZGV2aWNlKSA/PyAwKSk7XG4gIH1cbiAgcmV0dXJuIHZlY3Rvcjtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbiJdLAog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O0FBQ0EsTUFBSSxPQUFPLFVBQVUsVUFBVTtBQUM3QixXQUFPLE9BQU8sU0FBUyxLQUFLO0FBQUEsRUFDOUI7QUFDQSxNQUFJLE9BQU8sVUFBVSxZQUFZLFVBQVUsSUFBSSxLQUFLLEdBQUc7QUFDckQsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLENBQUMsTUFBTSxRQUFRLEtBQUssS0FBSyxPQUFPLFVBQVUsU0FBUyxLQUFLLEtBQUssTUFBTSxtQkFBbUI7QUFDeEYsV0FBTztBQUFBLEVBQ1Q7QUFDQSxZQUFVLElBQUksS0FBSztBQUNuQixRQUFNLFNBQW9CLE1BQU0sUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxPQUFPLE9BQU8sS0FBSztBQUNqRixRQUFNLFVBQVUsT0FBTyxNQUFNLENBQUMsVUFBVSxZQUFZLE9BQU8sU0FBUyxDQUFDO0FBQ3JFLFlBQVUsT0FBTyxLQUFLO0FBQ3RCLFNBQU87QUFDVDtBQUVBLFNBQVMscUJBQXFCLE9BQXlCO0FBQ3JELFNBQU8sT0FBTyxjQUFjLEtBQUssS0FBSyxPQUFPLEtBQUssS0FBSztBQUN6RDtBQUVBLFNBQVMsa0JBQWtCLE9BQXlCO0FBQ2xELFNBQU8sT0FBTyxjQUFjLEtBQUssS0FBSyxPQUFPLEtBQUssSUFBSTtBQUN4RDtBQUVBLFNBQVMsT0FBTyxPQUFvQztBQUNsRCxNQUFJLE9BQU8sVUFBVSxZQUFZLE9BQU8sU0FBUyxLQUFLLEdBQUc7QUFDdkQsV0FBTztBQUFBLEVBQ1Q7QUFDQSxTQUFPLE9BQU8sVUFBVSxZQUFZLFVBQVUsUUFBUSxVQUFVLFNBQVMsV0FBVyxTQUM3RSxPQUFPLE1BQU0sU0FBUyxZQUFZLE9BQU8sU0FBUyxNQUFNLElBQUksSUFDL0QsTUFBTSxPQUNOO0FBQ047QUFFQSxTQUFTLElBQUksV0FBdUM7QUFDbEQsU0FBTyxHQUFHLFVBQVUsTUFBTSxJQUFJLE9BQU8sVUFBVSxRQUFRLENBQUM7QUFDMUQ7QUFFQSxTQUFTLFVBQVUsTUFBOEM7QUFDL0QsUUFBTSxTQUFTLG9CQUFJLElBQW9CO0FBQ3ZDLGFBQVcsU0FBUyxNQUFNO0FBQ3hCLFVBQU0sWUFBWSxNQUFNLFlBQVksR0FBRztBQUN2QyxVQUFNLFNBQVMsTUFBTSxNQUFNLEdBQUcsU0FBUztBQUN2QyxVQUFNLFdBQVcsT0FBTyxNQUFNLE1BQU0sWUFBWSxDQUFDLENBQUM7QUFDbEQsUUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLGNBQWMsUUFBUSxLQUFLLFlBQVksR0FBRztBQUMvRCxZQUFNLElBQUksTUFBTSw2QkFBNkI7QUFBQSxJQUMvQztBQUNBLFdBQU8sSUFBSSxRQUFRLEtBQUssSUFBSSxVQUFVLE9BQU8sSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQUEsRUFDaEU7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbIm9wZXJhdGlvbiJdCn0K
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhLXN0b3Jlcy9kYXRhLXN0b3JlLXJlcGxpY2EudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1lcmdlLXNhZmUgcmVnaXN0ZXJzIGFuZCBvYnNlcnZlZC1yZW1vdmUgc2V0cyB1c2VkIGJ5IHNoYXJlZCBkYXRhIHN0b3Jlcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpzb25WYWx1ZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcblxuLyoqXG4gKiBBIHN0b3JlIGZpeGVzIGl0cyBtZXJnZSBydWxlIGZvciBpdHMgZW50aXJlIGxpZmV0aW1lIGFuZCBzY2hlbWEgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVN0b3JlTWVyZ2VLaW5kID0gJ2xhc3Qtd3JpdGUtd2lucycgfCAnbWF4aW11bScgfCAnbWluaW11bScgfCAnb2JzZXJ2ZWQtcmVtb3ZlLXNldCc7XG5cbi8qKlxuICogQSB2ZXJzaW9uLW9uZSBqb3VybmFsIG9wZXJhdGlvbi4gVGhlc2UgZmllbGRzIGZvcm0gYSBwdWJsaXNoZWQgd2lyZSBmb3JtYXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlT3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIExvZ2ljYWwgY291bnRlciB3aXRoaW4gdGhlIHdhbGwtY2xvY2sgbWlsbGlzZWNvbmQuXG4gICAqL1xuICByZWFkb25seSBjb3VudGVyOiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYSByZW1vdmFsLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFVuaXF1ZSB3cml0ZXIgaW5jYXJuYXRpb24sIHN0b3JlZCBsb2NhbGx5IHJhdGhlciB0aGFuIGluIHBsdWdpbiBzZXR0aW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IGRldmljZTogc3RyaW5nO1xuICAvKipcbiAgICogUmVjb3JkIGtleSwgb3Igc2V0IG1lbWJlci5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICAvKipcbiAgICogU3RyaWN0bHkgaW5jcmVhc2luZyB3cml0ZXIgc2VxdWVuY2UsIHN0YXJ0aW5nIGF0IG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlcXVlbmNlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBPYnNlcnZlZCBhZGRpdGlvbiB0YWdzIHJlbW92ZWQgYnkgYSBzZXQgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogSHlicmlkIGxvZ2ljYWwgY2xvY2sgd2FsbCB0aW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogSlNPTi1jb21wYXRpYmxlIHZhbHVlOyBzZXQgbWVtYmVycyB1c2UgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHVua25vd247XG59XG5cbi8qKlxuICogSW4tbWVtb3J5IENSRFQgc3RhdGUuIEV4cG9ydGVkIG9wZXJhdGlvbnMgY2FuIGJlIGpvaW5lZCBpbiBhbnkgb3JkZXIsIHJlcGVhdGVkbHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU3RvcmVSZXBsaWNhIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhZGRpdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRGF0YVN0b3JlT3BlcmF0aW9uPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdGVycyA9IG5ldyBNYXA8c3RyaW5nLCBEYXRhU3RvcmVPcGVyYXRpb24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3ZhbHMgPSBuZXcgTWFwPHN0cmluZywgRGF0YVN0b3JlT3BlcmF0aW9uPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtcHR5IHJlcGxpY2EuXG4gICAqXG4gICAqIEBwYXJhbSBraW5kIC0gSW1tdXRhYmxlIG1lcmdlIHJ1bGUgZm9yIHRoZSBzdG9yZS5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkga2luZDogRGF0YVN0b3JlTWVyZ2VLaW5kKSB7fVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW5kIGpvaW5zIG9uZSBqb3VybmFsIG9yIHNuYXBzaG90IG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVW50cnVzdGVkIHBhcnNlZCBvcGVyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgYXBwbHkodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoIWlzRGF0YVN0b3JlT3BlcmF0aW9uKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGEtc3RvcmUgb3BlcmF0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHdpbmRvdy5zdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpO1xuICAgIGlmICh0aGlzLmtpbmQgPT09ICdvYnNlcnZlZC1yZW1vdmUtc2V0Jykge1xuICAgICAgdGhpcy5hcHBseVNldChvcGVyYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMucmVnaXN0ZXJzLmdldChvcGVyYXRpb24ua2V5KTtcbiAgICBpZiAodGhpcy5raW5kICE9PSAnbGFzdC13cml0ZS13aW5zJyAmJiAob3BlcmF0aW9uLmRlbGV0ZWQgfHwgcmFua09mKG9wZXJhdGlvbi52YWx1ZSkgPT09IG51bGwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pbi9tYXggc3RvcmVzIGFjY2VwdCBmaW5pdGUgbnVtYmVycyBvciByYW5rZWQgSlNPTiB2YWx1ZXMgYW5kIGRvIG5vdCBzdXBwb3J0IGRlbGV0aW9uJyk7XG4gICAgfVxuICAgIGlmICghcHJldmlvdXMgfHwgdGhpcy53aW5zKG9wZXJhdGlvbiwgcHJldmlvdXMpKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVycy5zZXQob3BlcmF0aW9uLmtleSwgb3BlcmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVhZHMgdmlzaWJsZSByZWNvcmRzLCBkZXRhY2hlZCBmcm9tIGludGVybmFsIHN0YXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyBQYWlycyBpbiBkZXRlcm1pbmlzdGljIGtleSBvcmRlci5cbiAgICovXG4gIHB1YmxpYyBlbnRyaWVzKCk6IFtzdHJpbmcsIHVua25vd25dW10ge1xuICAgIGlmICh0aGlzLmtpbmQgPT09ICdvYnNlcnZlZC1yZW1vdmUtc2V0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IG5ldyBTZXQodGhpcy5hY3RpdmVBZGRpdGlvbnMoKS5tYXAoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uLmtleSkpO1xuICAgICAgcmV0dXJuIFsuLi5rZXlzXS5zb3J0KCkubWFwKChrZXkpID0+IFtrZXksIHRydWVdKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi50aGlzLnJlZ2lzdGVycy52YWx1ZXMoKV0uZmlsdGVyKChvcGVyYXRpb24pID0+ICFvcGVyYXRpb24uZGVsZXRlZClcbiAgICAgIC5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiBmaXJzdC5rZXkubG9jYWxlQ29tcGFyZShzZWNvbmQua2V5KSlcbiAgICAgIC5tYXAoKG9wZXJhdGlvbikgPT4gW29wZXJhdGlvbi5rZXksIHdpbmRvdy5zdHJ1Y3R1cmVkQ2xvbmUob3BlcmF0aW9uLnZhbHVlKV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgbWVyZ2VhYmxlIHN0YXRlLCByZXRhaW5pbmcgdG9tYnN0b25lcyBmb3IgbGF0ZSBvciByZXRpcmVkIHJlcGxpY2FzLlxuICAgKlxuICAgKiBAcmV0dXJucyBEZXRlcm1pbmlzdGljYWxseSBvcmRlcmVkIG9wZXJhdGlvbnMgc3VmZmljaWVudCB0byByZWNvbnN0cnVjdCB0aGlzIHN0YXRlLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydCgpOiBEYXRhU3RvcmVPcGVyYXRpb25bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnJlZ2lzdGVycy52YWx1ZXMoKSwgLi4udGhpcy5hY3RpdmVBZGRpdGlvbnMoKSwgLi4udGhpcy5yZW1vdmFscy52YWx1ZXMoKV1cbiAgICAgIC5zb3J0KChmaXJzdCwgc2Vjb25kKSA9PiB0YWcoZmlyc3QpLmxvY2FsZUNvbXBhcmUodGFnKHNlY29uZCkpKS5tYXAoKG9wZXJhdGlvbikgPT4gd2luZG93LnN0cnVjdHVyZWRDbG9uZShvcGVyYXRpb24pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyBhIHJlZ2lzdGVyIG9yIHNldCBtZW1iZXJzaGlwIHdpdGhvdXQgZW51bWVyYXRpbmcgcmVnaXN0ZXIga2V5cy5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFJlY29yZCBrZXkgb3Igc2V0IG1lbWJlci5cbiAgICogQHJldHVybnMgQSBkZXRhY2hlZCB2YWx1ZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBhYnNlbnQgb3IgZGVsZXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBpZiAodGhpcy5raW5kID09PSAnb2JzZXJ2ZWQtcmVtb3ZlLXNldCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUFkZGl0aW9ucygpLnNvbWUoKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uLmtleSA9PT0ga2V5KSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHRoaXMucmVnaXN0ZXJzLmdldChrZXkpO1xuICAgIHJldHVybiBvcGVyYXRpb24gJiYgIW9wZXJhdGlvbi5kZWxldGVkID8gd2luZG93LnN0cnVjdHVyZWRDbG9uZShvcGVyYXRpb24udmFsdWUpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGFkZGl0aW9ucyBvYnNlcnZlZCBmb3IgYSBzZXQgbWVtYmVyLCBmb3IgYW4gb2JzZXJ2ZWQgcmVtb3ZhbC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFNldCBtZW1iZXIuXG4gICAqIEByZXR1cm5zIEFkZGl0aW9uIGlkZW50aXRpZXMuIENvbmN1cnJlbnQgdW5zZWVuIGFkZGl0aW9ucyBzdXJ2aXZlIHJlbW92YWwuXG4gICAqL1xuICBwdWJsaWMgb2JzZXJ2ZWRUYWdzKGtleTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5hZGRpdGlvbnMudmFsdWVzKCldLmZpbHRlcigob3BlcmF0aW9uKSA9PiBvcGVyYXRpb24ua2V5ID09PSBrZXkpLm1hcCgob3BlcmF0aW9uKSA9PiB0YWcob3BlcmF0aW9uKSkuc29ydCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmVBZGRpdGlvbnMoKTogRGF0YVN0b3JlT3BlcmF0aW9uW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5hZGRpdGlvbnMudmFsdWVzKCldLmZpbHRlcigob3BlcmF0aW9uKSA9PiB7XG4gICAgICBjb25zdCByZW1vdmVkID0gdGFnVmVjdG9yKHRoaXMucmVtb3ZhbHMuZ2V0KG9wZXJhdGlvbi5rZXkpPy50YWdzID8/IFtdKTtcbiAgICAgIHJldHVybiBvcGVyYXRpb24uc2VxdWVuY2UgPiAocmVtb3ZlZC5nZXQob3BlcmF0aW9uLmRldmljZSkgPz8gMCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2V0KG9wZXJhdGlvbjogRGF0YVN0b3JlT3BlcmF0aW9uKTogdm9pZCB7XG4gICAgaWYgKG9wZXJhdGlvbi5kZWxldGVkKSB7XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMucmVtb3ZhbHMuZ2V0KG9wZXJhdGlvbi5rZXkpO1xuICAgICAgY29uc3QgdmVjdG9yID0gdGFnVmVjdG9yKFsuLi4ocHJldmlvdXM/LnRhZ3MgPz8gW10pLCAuLi4ob3BlcmF0aW9uLnRhZ3MgPz8gW10pXSk7XG4gICAgICBjb25zdCB3aW5uZXIgPSBwcmV2aW91cyAmJiB0aGlzLndpbnMocHJldmlvdXMsIG9wZXJhdGlvbikgPyBwcmV2aW91cyA6IG9wZXJhdGlvbjtcbiAgICAgIHRoaXMucmVtb3ZhbHMuc2V0KG9wZXJhdGlvbi5rZXksIHsgLi4ud2lubmVyLCB0YWdzOiBbLi4udmVjdG9yXS5zb3J0KChbZmlyc3RdLCBbc2Vjb25kXSkgPT4gZmlyc3QubG9jYWxlQ29tcGFyZShzZWNvbmQpKS5tYXAoKFtkZXZpY2UsIHNlcXVlbmNlXSkgPT4gYCR7ZGV2aWNlfToke1N0cmluZyhzZXF1ZW5jZSl9YCkgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChvcGVyYXRpb24udmFsdWUgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXQgYWRkaXRpb25zIHVzZSB0cnVlIGFzIHRoZWlyIHZhbHVlJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSBgJHtvcGVyYXRpb24ua2V5fToke29wZXJhdGlvbi5kZXZpY2V9YDtcbiAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5hZGRpdGlvbnMuZ2V0KGtleSk7XG4gICAgICBpZiAoIXByZXZpb3VzIHx8IG9wZXJhdGlvbi5zZXF1ZW5jZSA+IHByZXZpb3VzLnNlcXVlbmNlKSB7XG4gICAgICAgIHRoaXMuYWRkaXRpb25zLnNldChrZXksIG9wZXJhdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3aW5zKG5leHQ6IERhdGFTdG9yZU9wZXJhdGlvbiwgcHJldmlvdXM6IERhdGFTdG9yZU9wZXJhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5leHRSYW5rID0gcmFua09mKG5leHQudmFsdWUpO1xuICAgIGNvbnN0IHByZXZpb3VzUmFuayA9IHJhbmtPZihwcmV2aW91cy52YWx1ZSk7XG4gICAgLy8gYGFwcGx5YCBhZG1pdHMgb25seSByYW5rZWQgdmFsdWVzIGludG8gYSBtaW5pbXVtIG9yIG1heGltdW0gc3RvcmUsIHNvIGJvdGggcmFua3MgZXhpc3QgdGhlcmUuXG4gICAgaWYgKHRoaXMua2luZCA9PT0gJ21pbmltdW0nICYmIG5leHRSYW5rICE9PSBwcmV2aW91c1JhbmspIHtcbiAgICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShuZXh0UmFuaykgPCBlbnN1cmVOb25OdWxsYWJsZShwcmV2aW91c1JhbmspO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5raW5kID09PSAnbWF4aW11bScgJiYgbmV4dFJhbmsgIT09IHByZXZpb3VzUmFuayA/IGVuc3VyZU5vbk51bGxhYmxlKG5leHRSYW5rKSA+IGVuc3VyZU5vbk51bGxhYmxlKHByZXZpb3VzUmFuaykgOiBuZXh0LnRpbWUgPiBwcmV2aW91cy50aW1lIHx8IChuZXh0LnRpbWUgPT09IHByZXZpb3VzLnRpbWUgJiYgKG5leHQuY291bnRlciA+IHByZXZpb3VzLmNvdW50ZXJcbiAgICAgIHx8IChuZXh0LmNvdW50ZXIgPT09IHByZXZpb3VzLmNvdW50ZXIgJiYgbmV4dC5kZXZpY2UgPiBwcmV2aW91cy5kZXZpY2UpKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgdGhhdCBhIHZhbHVlIHN1cnZpdmVzIEpTT04gdHJhbnNwb3J0IHdpdGhvdXQgY2hhbmdpbmcgaXRzIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gQ2FuZGlkYXRlIGRhdGEtc3RvcmUgdmFsdWUuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGl0IGlzIGZpbml0ZSwgYWN5Y2xpYyBKU09OIGRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFTdG9yZUpzb25WYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEpzb25WYWx1ZSB7XG4gIHJldHVybiBpc0pzb25WYWx1ZSh2YWx1ZSwgbmV3IFNldCgpKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIHZlcnNpb24tb25lIG9wZXJhdGlvbiB3aXJlIHNoYXBlLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFBhcnNlZCBKU09OLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgb3BlcmF0aW9uIGhhcyB2YWxpZCBpZGVudGl0eSBhbmQgY2xvY2sgZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhU3RvcmVPcGVyYXRpb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBEYXRhU3RvcmVPcGVyYXRpb24ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAna2V5JyBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUua2V5ID09PSAnc3RyaW5nJ1xuICAgICYmICdkZXZpY2UnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5kZXZpY2UgPT09ICdzdHJpbmcnICYmIC9eW1xcdy1dKyQvLnRlc3QodmFsdWUuZGV2aWNlKVxuICAgICYmICdzZXF1ZW5jZScgaW4gdmFsdWUgJiYgaXNQb3NpdGl2ZUludGVnZXIodmFsdWUuc2VxdWVuY2UpXG4gICAgJiYgJ3RpbWUnIGluIHZhbHVlICYmIGlzTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlLnRpbWUpXG4gICAgJiYgJ2NvdW50ZXInIGluIHZhbHVlICYmIGlzTm9uTmVnYXRpdmVJbnRlZ2VyKHZhbHVlLmNvdW50ZXIpXG4gICAgJiYgJ2RlbGV0ZWQnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5kZWxldGVkID09PSAnYm9vbGVhbicgJiYgJ3ZhbHVlJyBpbiB2YWx1ZSAmJiBpc0RhdGFTdG9yZUpzb25WYWx1ZSh2YWx1ZS52YWx1ZSlcbiAgICAmJiAoISgndGFncycgaW4gdmFsdWUpIHx8IChBcnJheS5pc0FycmF5KHZhbHVlLnRhZ3MpICYmIHZhbHVlLnRhZ3MuZXZlcnkoKGl0ZW06IHVua25vd24pID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykpKTtcbn1cblxuZnVuY3Rpb24gaXNKc29uVmFsdWUodmFsdWU6IHVua25vd24sIGFuY2VzdG9yczogU2V0PG9iamVjdD4pOiBib29sZWFuIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IGFuY2VzdG9ycy5oYXModmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYW5jZXN0b3JzLmFkZCh2YWx1ZSk7XG4gIGNvbnN0IHZhbHVlczogdW5rbm93bltdID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogT2JqZWN0LnZhbHVlcyh2YWx1ZSk7XG4gIGNvbnN0IGlzVmFsaWQgPSB2YWx1ZXMuZXZlcnkoKGNoaWxkKSA9PiBpc0pzb25WYWx1ZShjaGlsZCwgYW5jZXN0b3JzKSk7XG4gIGFuY2VzdG9ycy5kZWxldGUodmFsdWUpO1xuICByZXR1cm4gaXNWYWxpZDtcbn1cblxuZnVuY3Rpb24gaXNOb25OZWdhdGl2ZUludGVnZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKHZhbHVlKSAmJiBOdW1iZXIodmFsdWUpID49IDA7XG59XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSkgJiYgTnVtYmVyKHZhbHVlKSA+IDA7XG59XG5cbmZ1bmN0aW9uIHJhbmtPZih2YWx1ZTogdW5rbm93bik6IG51bGwgfCBudW1iZXIge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICdyYW5rJyBpbiB2YWx1ZSAmJiAndmFsdWUnIGluIHZhbHVlXG4gICAgICAmJiB0eXBlb2YgdmFsdWUucmFuayA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlLnJhbmspXG4gICAgPyB2YWx1ZS5yYW5rXG4gICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiB0YWcob3BlcmF0aW9uOiBEYXRhU3RvcmVPcGVyYXRpb24pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7b3BlcmF0aW9uLmRldmljZX06JHtTdHJpbmcob3BlcmF0aW9uLnNlcXVlbmNlKX1gO1xufVxuXG5mdW5jdGlvbiB0YWdWZWN0b3IodGFnczogcmVhZG9ubHkgc3RyaW5nW10pOiBNYXA8c3RyaW5nLCBudW1iZXI+IHtcbiAgY29uc3QgdmVjdG9yID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiB0YWdzKSB7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdmFsdWUubGFzdEluZGV4T2YoJzonKTtcbiAgICBjb25zdCBkZXZpY2UgPSB2YWx1ZS5zbGljZSgwLCBzZXBhcmF0b3IpO1xuICAgIGNvbnN0IHNlcXVlbmNlID0gTnVtYmVyKHZhbHVlLnNsaWNlKHNlcGFyYXRvciArIDEpKTtcbiAgICBpZiAoIWRldmljZSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIoc2VxdWVuY2UpIHx8IHNlcXVlbmNlIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvYnNlcnZlZC1yZW1vdmUgdGFnJyk7XG4gICAgfVxuICAgIHZlY3Rvci5zZXQoZGV2aWNlLCBNYXRoLm1heChzZXF1ZW5jZSwgdmVjdG9yLmdldChkZXZpY2UpID8/IDApKTtcbiAgfVxuICByZXR1cm4gdmVjdG9yO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLFNB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
@@ -119,9 +119,9 @@ export declare class DataStoreSeeds {
119
119
  /**
120
120
  * Reads the newest complete seed for this transport's schema.
121
121
  *
122
- * @returns Seed records, or `undefined` if sharing is disabled or no complete seed is available yet.
122
+ * @returns Seed records, or `null` if sharing is disabled or no complete seed is available yet.
123
123
  */
124
- readLatest(): Promise<DataStoreSeedEntry[] | undefined>;
124
+ readLatest(): Promise<DataStoreSeedEntry[] | null>;
125
125
  }
126
126
  /**
127
127
  * Validates a seed using free file statistics first, hashing only size-equal mtime mismatches.
@@ -58,15 +58,15 @@ class DataStoreSeeds {
58
58
  /**
59
59
  * Reads the newest complete seed for this transport's schema.
60
60
  *
61
- * @returns Seed records, or `undefined` if sharing is disabled or no complete seed is available yet.
61
+ * @returns Seed records, or `null` if sharing is disabled or no complete seed is available yet.
62
62
  */
63
63
  async readLatest() {
64
64
  if (!this.share) {
65
- return void 0;
65
+ return null;
66
66
  }
67
67
  const files = await this.transport.list();
68
68
  let newest = -Infinity;
69
- let entries;
69
+ let entries = null;
70
70
  for (const path of files) {
71
71
  if (!/\/seed-[\w-]+-manifest\.(?:md|json)$/.test(path)) {
72
72
  continue;
@@ -112,4 +112,4 @@ export {
112
112
  DataStoreSeeds,
113
113
  validateDataStoreSeed
114
114
  };
115
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RvcmVzL2RhdGEtc3RvcmUtc2VlZHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIGVzbGludC1kaXNhYmxlIG4vbm8tdW5zdXBwb3J0ZWQtZmVhdHVyZXMvbm9kZS1idWlsdGlucyAtLSBUaGVzZSBhcmUgT2JzaWRpYW4gcmVuZGVyZXIgV2ViIEFQSXMsIG5vdCBOb2RlIGJ1aWx0aW5zLiAqL1xuLyoqXG4gKiBAZmlsZVxuICpcbiAqIE9wdGlvbmFsIGNodW5rZWQgc2VlZHMgZm9yIGV4cGVuc2l2ZSBkZXJpdmVkIGNhY2hlcywgd2l0aCBwZXItZmlsZSB2YWxpZGF0aW9uIGJlZm9yZSByZXVzZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpzb25WYWx1ZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgTG9jYWxEYXRhU3RvcmUgfSBmcm9tICcuL2xvY2FsLWRhdGEtc3RvcmUudHMnO1xuXG5pbXBvcnQgeyBpc0RhdGFTdG9yZUpzb25WYWx1ZSB9IGZyb20gJy4vZGF0YS1zdG9yZS1yZXBsaWNhLnRzJztcbmltcG9ydCB7IERhdGFTdG9yZVRyYW5zcG9ydCB9IGZyb20gJy4vZGF0YS1zdG9yZS10cmFuc3BvcnQudHMnO1xuXG4vKipcbiAqIEEgZGVyaXZlZCByZWNvcmQgdGFnZ2VkIHdpdGggYm90aCBjaGVhcCBzdGF0aXN0aWNzIGFuZCBhIGNvbnRlbnQgaGFzaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVTZWVkRW50cnkgZXh0ZW5kcyBEYXRhU3RvcmVTZWVkRmlsZSB7XG4gIC8qKlxuICAgKiBDb250ZW50IGhhc2gsIHVzaW5nIHRoZSBzYW1lIGFsZ29yaXRobSBvbiBldmVyeSBkZXZpY2UuXG4gICAqL1xuICByZWFkb25seSBoYXNoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb25zdW1lci1kZWZpbmVkIEpTT04gY2FjaGUgcmVjb3JkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IEpzb25WYWx1ZTtcbn1cblxuLyoqXG4gKiBDaGVhcCBmaWxlIGlkZW50aXR5IGFscmVhZHkgYXZhaWxhYmxlIGZyb20gdGhlIHZhdWx0J3MgZmlsZSB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTdG9yZVNlZWRGaWxlIHtcbiAgLyoqXG4gICAqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUuXG4gICAqL1xuICByZWFkb25seSBtdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogVmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIEZpbGUgc2l6ZSBpbiBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBvcHRpb25hbCBjYWNoZS1zZWVkIHNoYXJpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlU2VlZHNDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBEZWRpY2F0ZWQgZGV2aWNlLWxvY2FsIHN0b3JlIHRoYXQgb3ducyB0aGUgc2VlZCBwdWJsaXNoZXIgaWRlbnRpdHkuXG4gICAqL1xuICByZWFkb25seSBsb2NhbDogTG9jYWxEYXRhU3RvcmU7XG4gIC8qKlxuICAgKiBQZXItc3RvcmUgdXNlciBzZXR0aW5nLiBEaXNhYmxlZCBtZWFucyBuZWl0aGVyIHB1Ymxpc2hpbmcgbm9yIGFkb3B0aW5nIHNlZWRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hhcmU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTdG9yZS1zY29wZWQsIGJvdW5kZWQgdHJhbnNwb3J0LiBJbmNsdWRlIHRoZSBjb25zdW1lciBzY2hlbWEgdmVyc2lvbiBpbiBpdHMgc3RvcmUgaWQuXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BvcnQ6IERhdGFTdG9yZVRyYW5zcG9ydDtcbn1cblxuLyoqXG4gKiBSZXN1bHRzIG9mIHZhbGlkYXRpbmcgYSBzaGFyZWQgY2FjaGUgc2VlZCBhZ2FpbnN0IHRoZSBsb2NhbCB2YXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVTZWVkVmFsaWRhdGlvbiB7XG4gIC8qKlxuICAgKiBGaWxlcyBhYnNlbnQgZnJvbSB0aGUgc2VlZCwgb3Igd2l0aCBkaWZmZXJlbnQgY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHJlYnVpbGQ6IHN0cmluZ1tdO1xuICAvKipcbiAgICogVmFsaWRhdGVkIHNlZWQgcmVjb3Jkcywgd2l0aCBsb2NhbCBmaWxlIHN0YXRpc3RpY3MuXG4gICAqL1xuICByZWFkb25seSByZXVzYWJsZTogRGF0YVN0b3JlU2VlZEVudHJ5W107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgcGVyLWZpbGUgc2VlZCB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlRGF0YVN0b3JlU2VlZFBhcmFtcyB7XG4gIC8qKlxuICAgKiBTZWVkIGVudHJpZXMgZnJvbSBhIHJlY29nbml6ZWQgY29uc3VtZXIgc2NoZW1hLlxuICAgKi9cbiAgcmVhZG9ubHkgZW50cmllczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEVudHJ5W107XG4gIC8qKlxuICAgKiBDdXJyZW50IGZpbGUgdHJlZSwgYXZhaWxhYmxlIHdpdGhvdXQgcmVhZGluZyBub3RlIHRleHQuXG4gICAqL1xuICByZWFkb25seSBmaWxlczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEZpbGVbXTtcbiAgLyoqXG4gICAqIEhhc2hlcyB0ZXh0IG9ubHkgd2hlbiBzaXplIG1hdGNoZXMgYnV0IG10aW1lIGRpZmZlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gRmlsZSByZXF1aXJpbmcgdmFsaWRhdGlvbi5cbiAgICogQHJldHVybnMgSXRzIGNvbnRlbnQgaGFzaC5cbiAgICovXG4gIHJlYWRvbmx5IGhhc2hGaWxlOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59XG5cbmludGVyZmFjZSBTZWVkIHtcbiAgcmVhZG9ubHkgZW50cmllczogRGF0YVN0b3JlU2VlZEVudHJ5W107XG4gIHJlYWRvbmx5IGZvcm1hdDogMTtcbiAgcmVhZG9ubHkgdGltZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbmFsIHBlcmZvcm1hbmNlIGhpbnRzLiBTZWVkcyBhcmUgbmV2ZXIgYXV0aG9yaXRhdGl2ZSBzdGF0ZSBhbmQgbXVzdCBiZSB2YWxpZGF0ZWQgYmVmb3JlIHJldXNlLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YVN0b3JlU2VlZHMge1xuICAvKipcbiAgICogRGV2aWNlLWxvY2FsIGlkZW50aXR5IGFuZCBzZXJpYWxpemF0aW9uIGJvdW5kYXJ5LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvY2FsOiBMb2NhbERhdGFTdG9yZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBzdG9yZSBzaGFyZXMgY2FjaGUgc2VlZHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hhcmU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTdG9yZS1zY29wZWQgc25hcHNob3QgdHJhbnNwb3J0LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zcG9ydDogRGF0YVN0b3JlVHJhbnNwb3J0O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGNhY2hlLXNlZWQgcHVibGlzaGVyIGFuZCByZWFkZXIuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBMb2NhbCBpZGVudGl0eSwgdHJhbnNwb3J0IGFuZCB0aGUgcGVyLXN0b3JlIHNoYXJpbmcgc2V0dGluZy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IERhdGFTdG9yZVNlZWRzQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLmxvY2FsID0gcGFyYW1zLmxvY2FsO1xuICAgIHRoaXMuc2hhcmUgPSBwYXJhbXMuc2hhcmU7XG4gICAgdGhpcy50cmFuc3BvcnQgPSBwYXJhbXMudHJhbnNwb3J0O1xuICB9XG5cbiAgLyoqXG4gICAqIFB1Ymxpc2hlcyBhIGJvdW5kZWQgc2VlZCwgcmVwbGFjaW5nIG9ubHkgdGhpcyBkZXZpY2UncyBlYXJsaWVyIHB1YmxpY2F0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGVudHJpZXMgLSBEZXJpdmVkIHJlY29yZHMgd2l0aCBmaWxlIHN0YXRpc3RpY3MgYW5kIGhhc2hlcy5cbiAgICogQHJldHVybnMgV2hldGhlciBzaGFyaW5nIHdhcyBlbmFibGVkIGFuZCB0aGUgc2VlZCB3YXMgcHVibGlzaGVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHB1Ymxpc2goZW50cmllczogcmVhZG9ubHkgRGF0YVN0b3JlU2VlZEVudHJ5W10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuc2hhcmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubG9jYWwuZXhjbHVzaXZlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMubG9jYWwuZ2V0T3JDcmVhdGUoJ3NlZWQtZGV2aWNlLXYxJywgd2luZG93LmNyeXB0by5yYW5kb21VVUlEKCkpO1xuICAgICAgaWYgKHR5cGVvZiBkZXZpY2UgIT09ICdzdHJpbmcnIHx8ICEvXltcXHctXSskLy50ZXN0KGRldmljZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvY2FsIHNlZWQgaWRlbnRpdHknKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvb3QgPSBgJHt0aGlzLnRyYW5zcG9ydC5yb290fS9zZWVkcy8ke2RldmljZX1gO1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5saXN0KCk7XG4gICAgICBjb25zdCBiYXNlID0gYCR7cm9vdH0vc2VlZC0ke3dpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpfS1tYW5pZmVzdGA7XG4gICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC53cml0ZVNuYXBzaG90KHsgYmFzZSwgcGF5bG9hZDogeyBlbnRyaWVzLCBmb3JtYXQ6IDEsIHRpbWU6IERhdGUubm93KCkgfSB9KTtcbiAgICAgIGZvciAoY29uc3QgcGF0aCBvZiBmaWxlcykge1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKGAke3Jvb3R9L3NlZWQtYCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zcG9ydC5yZW1vdmUocGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIHRoZSBuZXdlc3QgY29tcGxldGUgc2VlZCBmb3IgdGhpcyB0cmFuc3BvcnQncyBzY2hlbWEuXG4gICAqXG4gICAqIEByZXR1cm5zIFNlZWQgcmVjb3Jkcywgb3IgYHVuZGVmaW5lZGAgaWYgc2hhcmluZyBpcyBkaXNhYmxlZCBvciBubyBjb21wbGV0ZSBzZWVkIGlzIGF2YWlsYWJsZSB5ZXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVhZExhdGVzdCgpOiBQcm9taXNlPERhdGFTdG9yZVNlZWRFbnRyeVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLnNoYXJlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHRoaXMudHJhbnNwb3J0Lmxpc3QoKTtcbiAgICBsZXQgbmV3ZXN0ID0gLUluZmluaXR5O1xuICAgIGxldCBlbnRyaWVzOiBEYXRhU3RvcmVTZWVkRW50cnlbXSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgZmlsZXMpIHtcbiAgICAgIGlmICghL1xcL3NlZWQtW1xcdy1dKy1tYW5pZmVzdFxcLig/Om1kfGpzb24pJC8udGVzdChwYXRoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzZWVkOiB1bmtub3duO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VlZCA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWRTbmFwc2hvdChwYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBpZiAoIShpc1NlZWQoc2VlZCkgJiYgc2VlZC50aW1lID4gbmV3ZXN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbmV3ZXN0ID0gc2VlZC50aW1lO1xuICAgICAgZW50cmllcyA9IHNlZWQuZW50cmllcztcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzZWVkIHVzaW5nIGZyZWUgZmlsZSBzdGF0aXN0aWNzIGZpcnN0LCBoYXNoaW5nIG9ubHkgc2l6ZS1lcXVhbCBtdGltZSBtaXNtYXRjaGVzLlxuICogRmlsZXMgYWJzZW50IGxvY2FsbHkgYXJlIGRpc2NhcmRlZC4gQ29uc3VtZXJzIGluZGV4IG9ubHkgdGhlIHJldHVybmVkIHJlYnVpbGQgcGF0aHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFNlZWQsIGN1cnJlbnQgZmlsZSB0cmVlIGFuZCBjb250ZW50LWhhc2ggcmVhZGVyLlxuICogQHJldHVybnMgUmV1c2FibGUgcmVjb3JkcyBhbmQgdGhlIHBhdGhzIHRoYXQgc3RpbGwgbmVlZCBpbmRleGluZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlRGF0YVN0b3JlU2VlZChwYXJhbXM6IFZhbGlkYXRlRGF0YVN0b3JlU2VlZFBhcmFtcyk6IFByb21pc2U8RGF0YVN0b3JlU2VlZFZhbGlkYXRpb24+IHtcbiAgY29uc3Qgc2VlZCA9IG5ldyBNYXAocGFyYW1zLmVudHJpZXMubWFwKChlbnRyeSkgPT4gW2VudHJ5LnBhdGgsIGVudHJ5XSkpO1xuICBjb25zdCByZXVzYWJsZTogRGF0YVN0b3JlU2VlZEVudHJ5W10gPSBbXTtcbiAgY29uc3QgcmVidWlsZDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIHBhcmFtcy5maWxlcykge1xuICAgIGNvbnN0IGVudHJ5ID0gc2VlZC5nZXQoZmlsZS5wYXRoKTtcbiAgICBpZiAoZW50cnk/LnNpemUgPT09IGZpbGUuc2l6ZSAmJiAoZW50cnkubXRpbWUgPT09IGZpbGUubXRpbWUgfHwgZW50cnkuaGFzaCA9PT0gYXdhaXQgcGFyYW1zLmhhc2hGaWxlKGZpbGUucGF0aCkpKSB7XG4gICAgICByZXVzYWJsZS5wdXNoKHsgLi4uZW50cnksIC4uLmZpbGUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYnVpbGQucHVzaChmaWxlLnBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyByZWJ1aWxkLCByZXVzYWJsZSB9O1xufVxuXG5mdW5jdGlvbiBpc1NlZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZWVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgJ2Zvcm1hdCcgaW4gdmFsdWUgJiYgdmFsdWUuZm9ybWF0ID09PSAxXG4gICAgJiYgJ3RpbWUnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aW1lID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUudGltZSlcbiAgICAmJiAnZW50cmllcycgaW4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZS5lbnRyaWVzKSAmJiB2YWx1ZS5lbnRyaWVzLmV2ZXJ5KChlbnRyeTogdW5rbm93bikgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3BhdGgnIGluIGVudHJ5ICYmIHR5cGVvZiBlbnRyeS5wYXRoID09PSAnc3RyaW5nJ1xuICAgICAgJiYgJ210aW1lJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkubXRpbWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShlbnRyeS5tdGltZSlcbiAgICAgICYmICdzaXplJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkuc2l6ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKGVudHJ5LnNpemUpXG4gICAgICAmJiAnaGFzaCcgaW4gZW50cnkgJiYgdHlwZW9mIGVudHJ5Lmhhc2ggPT09ICdzdHJpbmcnICYmICd2YWx1ZScgaW4gZW50cnkgJiYgaXNEYXRhU3RvcmVKc29uVmFsdWUoZW50cnkudmFsdWUpXG4gICAgKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMgLS0gVGhlc2UgYXJlIE9ic2lkaWFuIHJlbmRlcmVyIFdlYiBBUElzLCBub3QgTm9kZSBidWlsdGlucy4gKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBV0EsU0FBUyw0QkFBNEI7QUFDckMsU0FBUywwQkFBMEI7QUFnRzVCLE1BQU0sZUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVA7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1aLFlBQVksUUFBeUM7QUFDMUQsU0FBSyxRQUFRLE9BQU87QUFDcEIsU0FBSyxRQUFRLE9BQU87QUFDcEIsU0FBSyxZQUFZLE9BQU87QUFBQSxFQUMxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxRQUFRLFNBQTBEO0FBQzdFLFFBQUksQ0FBQyxLQUFLLE9BQU87QUFDZixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sTUFBTSxLQUFLLE1BQU0sVUFBVSxZQUFZO0FBQzVDLFlBQU0sU0FBUyxNQUFNLEtBQUssTUFBTSxZQUFZLGtCQUFrQixPQUFPLE9BQU8sV0FBVyxDQUFDO0FBQ3hGLFVBQUksT0FBTyxXQUFXLFlBQVksQ0FBQyxXQUFXLEtBQUssTUFBTSxHQUFHO0FBQzFELGNBQU0s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
115
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RhdGEtc3RvcmVzL2RhdGEtc3RvcmUtc2VlZHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBPcHRpb25hbCBjaHVua2VkIHNlZWRzIGZvciBleHBlbnNpdmUgZGVyaXZlZCBjYWNoZXMsIHdpdGggcGVyLWZpbGUgdmFsaWRhdGlvbiBiZWZvcmUgcmV1c2UuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKc29uVmFsdWUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgdHlwZSB7IExvY2FsRGF0YVN0b3JlIH0gZnJvbSAnLi9sb2NhbC1kYXRhLXN0b3JlLnRzJztcblxuaW1wb3J0IHsgaXNEYXRhU3RvcmVKc29uVmFsdWUgfSBmcm9tICcuL2RhdGEtc3RvcmUtcmVwbGljYS50cyc7XG5pbXBvcnQgeyBEYXRhU3RvcmVUcmFuc3BvcnQgfSBmcm9tICcuL2RhdGEtc3RvcmUtdHJhbnNwb3J0LnRzJztcblxuLyoqXG4gKiBBIGRlcml2ZWQgcmVjb3JkIHRhZ2dlZCB3aXRoIGJvdGggY2hlYXAgc3RhdGlzdGljcyBhbmQgYSBjb250ZW50IGhhc2guXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlU2VlZEVudHJ5IGV4dGVuZHMgRGF0YVN0b3JlU2VlZEZpbGUge1xuICAvKipcbiAgICogQ29udGVudCBoYXNoLCB1c2luZyB0aGUgc2FtZSBhbGdvcml0aG0gb24gZXZlcnkgZGV2aWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFzaDogc3RyaW5nO1xuICAvKipcbiAgICogQ29uc3VtZXItZGVmaW5lZCBKU09OIGNhY2hlIHJlY29yZC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBKc29uVmFsdWU7XG59XG5cbi8qKlxuICogQ2hlYXAgZmlsZSBpZGVudGl0eSBhbHJlYWR5IGF2YWlsYWJsZSBmcm9tIHRoZSB2YXVsdCdzIGZpbGUgdHJlZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhU3RvcmVTZWVkRmlsZSB7XG4gIC8qKlxuICAgKiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgbXRpbWU6IG51bWJlcjtcbiAgLyoqXG4gICAqIFZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGaWxlIHNpemUgaW4gYnl0ZXMuXG4gICAqL1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Igb3B0aW9uYWwgY2FjaGUtc2VlZCBzaGFyaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTdG9yZVNlZWRzQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogRGVkaWNhdGVkIGRldmljZS1sb2NhbCBzdG9yZSB0aGF0IG93bnMgdGhlIHNlZWQgcHVibGlzaGVyIGlkZW50aXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWw6IExvY2FsRGF0YVN0b3JlO1xuICAvKipcbiAgICogUGVyLXN0b3JlIHVzZXIgc2V0dGluZy4gRGlzYWJsZWQgbWVhbnMgbmVpdGhlciBwdWJsaXNoaW5nIG5vciBhZG9wdGluZyBzZWVkcy5cbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlOiBib29sZWFuO1xuICAvKipcbiAgICogU3RvcmUtc2NvcGVkLCBib3VuZGVkIHRyYW5zcG9ydC4gSW5jbHVkZSB0aGUgY29uc3VtZXIgc2NoZW1hIHZlcnNpb24gaW4gaXRzIHN0b3JlIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNwb3J0OiBEYXRhU3RvcmVUcmFuc3BvcnQ7XG59XG5cbi8qKlxuICogUmVzdWx0cyBvZiB2YWxpZGF0aW5nIGEgc2hhcmVkIGNhY2hlIHNlZWQgYWdhaW5zdCB0aGUgbG9jYWwgdmF1bHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVN0b3JlU2VlZFZhbGlkYXRpb24ge1xuICAvKipcbiAgICogRmlsZXMgYWJzZW50IGZyb20gdGhlIHNlZWQsIG9yIHdpdGggZGlmZmVyZW50IGNvbnRlbnQuXG4gICAqL1xuICByZWFkb25seSByZWJ1aWxkOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFZhbGlkYXRlZCBzZWVkIHJlY29yZHMsIHdpdGggbG9jYWwgZmlsZSBzdGF0aXN0aWNzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmV1c2FibGU6IERhdGFTdG9yZVNlZWRFbnRyeVtdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHBlci1maWxlIHNlZWQgdmFsaWRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0ZURhdGFTdG9yZVNlZWRQYXJhbXMge1xuICAvKipcbiAgICogU2VlZCBlbnRyaWVzIGZyb20gYSByZWNvZ25pemVkIGNvbnN1bWVyIHNjaGVtYS5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJpZXM6IHJlYWRvbmx5IERhdGFTdG9yZVNlZWRFbnRyeVtdO1xuICAvKipcbiAgICogQ3VycmVudCBmaWxlIHRyZWUsIGF2YWlsYWJsZSB3aXRob3V0IHJlYWRpbmcgbm90ZSB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM6IHJlYWRvbmx5IERhdGFTdG9yZVNlZWRGaWxlW107XG4gIC8qKlxuICAgKiBIYXNoZXMgdGV4dCBvbmx5IHdoZW4gc2l6ZSBtYXRjaGVzIGJ1dCBtdGltZSBkaWZmZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIEZpbGUgcmVxdWlyaW5nIHZhbGlkYXRpb24uXG4gICAqIEByZXR1cm5zIEl0cyBjb250ZW50IGhhc2guXG4gICAqL1xuICByZWFkb25seSBoYXNoRmlsZTogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xufVxuXG5pbnRlcmZhY2UgU2VlZCB7XG4gIHJlYWRvbmx5IGVudHJpZXM6IERhdGFTdG9yZVNlZWRFbnRyeVtdO1xuICByZWFkb25seSBmb3JtYXQ6IDE7XG4gIHJlYWRvbmx5IHRpbWU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25hbCBwZXJmb3JtYW5jZSBoaW50cy4gU2VlZHMgYXJlIG5ldmVyIGF1dGhvcml0YXRpdmUgc3RhdGUgYW5kIG11c3QgYmUgdmFsaWRhdGVkIGJlZm9yZSByZXVzZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTdG9yZVNlZWRzIHtcbiAgLyoqXG4gICAqIERldmljZS1sb2NhbCBpZGVudGl0eSBhbmQgc2VyaWFsaXphdGlvbiBib3VuZGFyeS5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBsb2NhbDogTG9jYWxEYXRhU3RvcmU7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgc3RvcmUgc2hhcmVzIGNhY2hlIHNlZWRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNoYXJlOiBib29sZWFuO1xuICAvKipcbiAgICogU3RvcmUtc2NvcGVkIHNuYXBzaG90IHRyYW5zcG9ydC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc3BvcnQ6IERhdGFTdG9yZVRyYW5zcG9ydDtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjYWNoZS1zZWVkIHB1Ymxpc2hlciBhbmQgcmVhZGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gTG9jYWwgaWRlbnRpdHksIHRyYW5zcG9ydCBhbmQgdGhlIHBlci1zdG9yZSBzaGFyaW5nIHNldHRpbmcuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBEYXRhU3RvcmVTZWVkc0NvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgdGhpcy5sb2NhbCA9IHBhcmFtcy5sb2NhbDtcbiAgICB0aGlzLnNoYXJlID0gcGFyYW1zLnNoYXJlO1xuICAgIHRoaXMudHJhbnNwb3J0ID0gcGFyYW1zLnRyYW5zcG9ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXMgYSBib3VuZGVkIHNlZWQsIHJlcGxhY2luZyBvbmx5IHRoaXMgZGV2aWNlJ3MgZWFybGllciBwdWJsaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBlbnRyaWVzIC0gRGVyaXZlZCByZWNvcmRzIHdpdGggZmlsZSBzdGF0aXN0aWNzIGFuZCBoYXNoZXMuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgc2hhcmluZyB3YXMgZW5hYmxlZCBhbmQgdGhlIHNlZWQgd2FzIHB1Ymxpc2hlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwdWJsaXNoKGVudHJpZXM6IHJlYWRvbmx5IERhdGFTdG9yZVNlZWRFbnRyeVtdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLnNoYXJlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmxvY2FsLmV4Y2x1c2l2ZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBkZXZpY2UgPSBhd2FpdCB0aGlzLmxvY2FsLmdldE9yQ3JlYXRlKCdzZWVkLWRldmljZS12MScsIHdpbmRvdy5jcnlwdG8ucmFuZG9tVVVJRCgpKTtcbiAgICAgIGlmICh0eXBlb2YgZGV2aWNlICE9PSAnc3RyaW5nJyB8fCAhL15bXFx3LV0rJC8udGVzdChkZXZpY2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBsb2NhbCBzZWVkIGlkZW50aXR5Jyk7XG4gICAgICB9XG4gICAgICBjb25zdCByb290ID0gYCR7dGhpcy50cmFuc3BvcnQucm9vdH0vc2VlZHMvJHtkZXZpY2V9YDtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgdGhpcy50cmFuc3BvcnQubGlzdCgpO1xuICAgICAgY29uc3QgYmFzZSA9IGAke3Jvb3R9L3NlZWQtJHt3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKX0tbWFuaWZlc3RgO1xuICAgICAgYXdhaXQgdGhpcy50cmFuc3BvcnQud3JpdGVTbmFwc2hvdCh7IGJhc2UsIHBheWxvYWQ6IHsgZW50cmllcywgZm9ybWF0OiAxLCB0aW1lOiBEYXRlLm5vdygpIH0gfSk7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgZmlsZXMpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChgJHtyb290fS9zZWVkLWApKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy50cmFuc3BvcnQucmVtb3ZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgbmV3ZXN0IGNvbXBsZXRlIHNlZWQgZm9yIHRoaXMgdHJhbnNwb3J0J3Mgc2NoZW1hLlxuICAgKlxuICAgKiBAcmV0dXJucyBTZWVkIHJlY29yZHMsIG9yIGBudWxsYCBpZiBzaGFyaW5nIGlzIGRpc2FibGVkIG9yIG5vIGNvbXBsZXRlIHNlZWQgaXMgYXZhaWxhYmxlIHlldC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWFkTGF0ZXN0KCk6IFByb21pc2U8RGF0YVN0b3JlU2VlZEVudHJ5W10gfCBudWxsPiB7XG4gICAgaWYgKCF0aGlzLnNoYXJlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCB0aGlzLnRyYW5zcG9ydC5saXN0KCk7XG4gICAgbGV0IG5ld2VzdCA9IC1JbmZpbml0eTtcbiAgICBsZXQgZW50cmllczogRGF0YVN0b3JlU2VlZEVudHJ5W10gfCBudWxsID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgZmlsZXMpIHtcbiAgICAgIGlmICghL1xcL3NlZWQtW1xcdy1dKy1tYW5pZmVzdFxcLig/Om1kfGpzb24pJC8udGVzdChwYXRoKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzZWVkOiB1bmtub3duO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VlZCA9IGF3YWl0IHRoaXMudHJhbnNwb3J0LnJlYWRTbmFwc2hvdChwYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBpZiAoIShpc1NlZWQoc2VlZCkgJiYgc2VlZC50aW1lID4gbmV3ZXN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbmV3ZXN0ID0gc2VlZC50aW1lO1xuICAgICAgZW50cmllcyA9IHNlZWQuZW50cmllcztcbiAgICB9XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzZWVkIHVzaW5nIGZyZWUgZmlsZSBzdGF0aXN0aWNzIGZpcnN0LCBoYXNoaW5nIG9ubHkgc2l6ZS1lcXVhbCBtdGltZSBtaXNtYXRjaGVzLlxuICogRmlsZXMgYWJzZW50IGxvY2FsbHkgYXJlIGRpc2NhcmRlZC4gQ29uc3VtZXJzIGluZGV4IG9ubHkgdGhlIHJldHVybmVkIHJlYnVpbGQgcGF0aHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFNlZWQsIGN1cnJlbnQgZmlsZSB0cmVlIGFuZCBjb250ZW50LWhhc2ggcmVhZGVyLlxuICogQHJldHVybnMgUmV1c2FibGUgcmVjb3JkcyBhbmQgdGhlIHBhdGhzIHRoYXQgc3RpbGwgbmVlZCBpbmRleGluZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlRGF0YVN0b3JlU2VlZChwYXJhbXM6IFZhbGlkYXRlRGF0YVN0b3JlU2VlZFBhcmFtcyk6IFByb21pc2U8RGF0YVN0b3JlU2VlZFZhbGlkYXRpb24+IHtcbiAgY29uc3Qgc2VlZCA9IG5ldyBNYXAocGFyYW1zLmVudHJpZXMubWFwKChlbnRyeSkgPT4gW2VudHJ5LnBhdGgsIGVudHJ5XSkpO1xuICBjb25zdCByZXVzYWJsZTogRGF0YVN0b3JlU2VlZEVudHJ5W10gPSBbXTtcbiAgY29uc3QgcmVidWlsZDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIHBhcmFtcy5maWxlcykge1xuICAgIGNvbnN0IGVudHJ5ID0gc2VlZC5nZXQoZmlsZS5wYXRoKTtcbiAgICBpZiAoZW50cnk/LnNpemUgPT09IGZpbGUuc2l6ZSAmJiAoZW50cnkubXRpbWUgPT09IGZpbGUubXRpbWUgfHwgZW50cnkuaGFzaCA9PT0gYXdhaXQgcGFyYW1zLmhhc2hGaWxlKGZpbGUucGF0aCkpKSB7XG4gICAgICByZXVzYWJsZS5wdXNoKHsgLi4uZW50cnksIC4uLmZpbGUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlYnVpbGQucHVzaChmaWxlLnBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyByZWJ1aWxkLCByZXVzYWJsZSB9O1xufVxuXG5mdW5jdGlvbiBpc1NlZWQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZWVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgJ2Zvcm1hdCcgaW4gdmFsdWUgJiYgdmFsdWUuZm9ybWF0ID09PSAxXG4gICAgJiYgJ3RpbWUnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aW1lID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUudGltZSlcbiAgICAmJiAnZW50cmllcycgaW4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZS5lbnRyaWVzKSAmJiB2YWx1ZS5lbnRyaWVzLmV2ZXJ5KChlbnRyeTogdW5rbm93bikgPT5cbiAgICAgIHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3BhdGgnIGluIGVudHJ5ICYmIHR5cGVvZiBlbnRyeS5wYXRoID09PSAnc3RyaW5nJ1xuICAgICAgJiYgJ210aW1lJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkubXRpbWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0Zpbml0ZShlbnRyeS5tdGltZSlcbiAgICAgICYmICdzaXplJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkuc2l6ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKGVudHJ5LnNpemUpXG4gICAgICAmJiAnaGFzaCcgaW4gZW50cnkgJiYgdHlwZW9mIGVudHJ5Lmhhc2ggPT09ICdzdHJpbmcnICYmICd2YWx1ZScgaW4gZW50cnkgJiYgaXNEYXRhU3RvcmVKc29uVmFsdWUoZW50cnkudmFsdWUpXG4gICAgKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBVUEsU0FBUyw0QkFBNEI7QUFDckMsU0FBUywwQkFBMEI7QUFnRzVCLE1BQU0sZUFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSVA7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1aLFlBQVksUUFBeUM7QUFDMUQsU0FBSyxRQUFRLE9BQU87QUFDcEIsU0FBSyxRQUFRLE9BQU87QUFDcEIsU0FBSyxZQUFZLE9BQU87QUFBQSxFQUMxQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsTUFBYSxRQUFRLFNBQTBEO0FBQzdFLFFBQUksQ0FBQyxLQUFLLE9BQU87QUFDZixhQUFPO0FBQUEsSUFDVDtBQUNBLFdBQU8sTUFBTSxLQUFLLE1BQU0sVUFBVSxZQUFZO0FBQzVDLFlBQU0sU0FBUyxNQUFNLEtBQUssTUFBTSxZQUFZLGtCQUFrQixPQUFPLE9BQU8sV0FBVyxDQUFDO0FBQ3hGLFVBQUksT0FBTyxXQUFXLFlBQVksQ0FBQyxXQUFXLEtBQUssTUFBTSxHQUFHO0FBQzFELGNBQU0sSUFBSSxNQUFNLDZCQUE2QjtBQUFBLE1BQy9DO0FBQ0EsWUFBTSxPQUFPLEdBQUcsS0FBSyxVQUFVLElBQUksVUFBVSxNQUFNO0FBQ25ELFlBQU0sUUFBUSxNQUFNLEtBQUssVUFBVSxLQUFLO0FBQ3hDLFlBQU0sT0FBTyxHQUFHLElBQUksU0FBUyxPQUFPLE9BQU8sV0FBVyxDQUFDO0FBQ3ZELFlBQU0sS0FBSyxVQUFVLGNBQWMsRUFBRSxNQUFNLFNBQVMsRUFBRSxTQUFTLFFBQVEsR0FBRyxNQUFNLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUM5Rixp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
@@ -60,7 +60,8 @@ export interface DataStoreTransportWriteSnapshotParams {
60
60
  readonly payload: unknown;
61
61
  }
62
62
  /**
63
- * A store-scoped transport. Every published document is immutable except device acknowledgements.
63
+ * A store-scoped transport. Every published document is immutable except device acknowledgements and append-only
64
+ * journal segments, which only their own device rewrites and only by extending them.
64
65
  */
65
66
  export declare class DataStoreTransport {
66
67
  protected readonly params: DataStoreTransportConstructorParams;
@@ -108,6 +109,13 @@ export declare class DataStoreTransport {
108
109
  * @returns Vault-relative paths.
109
110
  */
110
111
  list(): Promise<string[]>;
112
+ /**
113
+ * Measures the complete encoded size of a new document without writing.
114
+ *
115
+ * @param value - JSON payload.
116
+ * @returns UTF-8 bytes, encoding wrapper included.
117
+ */
118
+ measure(value: unknown): number;
111
119
  /**
112
120
  * Reads complete fenced Markdown JSON or a version-one JSON envelope. Partial documents remain pending.
113
121
  *
@@ -137,6 +145,15 @@ export declare class DataStoreTransport {
137
145
  * @returns A promise that resolves once the adapter finishes writing.
138
146
  */
139
147
  write(path: string, value: unknown): Promise<void>;
148
+ /**
149
+ * Publishes an append-only document: an occupied path is rewritten only when the new list strictly extends the stored one.
150
+ * A reader that sees an older copy sees a prefix, so it applies fewer entries and never a different one.
151
+ *
152
+ * @param path - Vault-relative destination within this store.
153
+ * @param values - JSON-compatible entries; the stored entries must be their prefix.
154
+ * @returns A promise that resolves after publication, or at once when the stored list is already identical.
155
+ */
156
+ writeAppendOnly(path: string, values: readonly unknown[]): Promise<void>;
140
157
  /**
141
158
  * Publishes an immutable document, accepting only byte-identical retries at an occupied path.
142
159
  *
@@ -154,6 +171,18 @@ export declare class DataStoreTransport {
154
171
  writeSnapshot(params: DataStoreTransportWriteSnapshotParams): Promise<void>;
155
172
  private checkPath;
156
173
  private checkSize;
174
+ /**
175
+ * Reconciles a destination whose bytes differ from the source. Only a journal segment may differ, because it grows
176
+ * while its device writes it, so either copy may be the older prefix of the other; anything else is a conflict.
177
+ *
178
+ * @param target - Destination transport.
179
+ * @param path - Source path.
180
+ * @param destination - Destination path.
181
+ * @param text - Source bytes.
182
+ * @returns Whether the source was written over the destination, which must then be verified.
183
+ */
184
+ private copyOverDifferentHistory;
157
185
  private encode;
158
186
  private ensureParent;
187
+ private readStoredList;
159
188
  }