@mnaoumov/obsidian-lib 0.0.0 → 1.0.1

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 (1044) hide show
  1. package/@types/dataview/api/data-array/package.json +4 -0
  2. package/@types/dataview/api/extensions/package.json +4 -0
  3. package/@types/dataview/api/inline-api/package.json +4 -0
  4. package/@types/dataview/api/plugin-api/package.json +4 -0
  5. package/@types/dataview/api/result/package.json +4 -0
  6. package/@types/dataview/data-import/common/package.json +4 -0
  7. package/@types/dataview/data-import/csv/package.json +4 -0
  8. package/@types/dataview/data-import/inline-field/package.json +4 -0
  9. package/@types/dataview/data-import/markdown-file/package.json +4 -0
  10. package/@types/dataview/data-import/persister/package.json +4 -0
  11. package/@types/dataview/data-import/web-worker/import-entry/package.json +4 -0
  12. package/@types/dataview/data-import/web-worker/import-impl/package.json +4 -0
  13. package/@types/dataview/data-import/web-worker/import-manager/package.json +4 -0
  14. package/@types/dataview/data-index/index/package.json +4 -0
  15. package/@types/dataview/data-index/package.json +4 -0
  16. package/@types/dataview/data-index/resolver/package.json +4 -0
  17. package/@types/dataview/data-index/source/package.json +4 -0
  18. package/@types/dataview/data-model/markdown/package.json +4 -0
  19. package/@types/dataview/data-model/serialized/markdown/package.json +4 -0
  20. package/@types/dataview/data-model/transferable/package.json +4 -0
  21. package/@types/dataview/data-model/value/package.json +4 -0
  22. package/@types/dataview/expression/binaryop/package.json +4 -0
  23. package/@types/dataview/expression/context/package.json +4 -0
  24. package/@types/dataview/expression/field/package.json +4 -0
  25. package/@types/dataview/expression/functions/package.json +4 -0
  26. package/@types/dataview/expression/parse/package.json +4 -0
  27. package/@types/dataview/index/package.json +4 -0
  28. package/@types/dataview/main/package.json +4 -0
  29. package/@types/dataview/package.json +4 -0
  30. package/@types/dataview/query/engine/package.json +4 -0
  31. package/@types/dataview/query/parse/package.json +4 -0
  32. package/@types/dataview/query/query/package.json +4 -0
  33. package/@types/dataview/settings/package.json +4 -0
  34. package/@types/dataview/typings/obsidian-ex/package.json +4 -0
  35. package/@types/dataview/typings/workers/package.json +4 -0
  36. package/@types/dataview/ui/export/markdown/package.json +4 -0
  37. package/@types/dataview/ui/lp-render/package.json +4 -0
  38. package/@types/dataview/ui/markdown/package.json +4 -0
  39. package/@types/dataview/ui/refreshable-view/package.json +4 -0
  40. package/@types/dataview/ui/render/package.json +4 -0
  41. package/@types/dataview/ui/views/calendar-view/package.json +4 -0
  42. package/@types/dataview/ui/views/inline-field-live-preview/package.json +4 -0
  43. package/@types/dataview/ui/views/inline-view/package.json +4 -0
  44. package/@types/dataview/ui/views/js-view/package.json +4 -0
  45. package/@types/dataview/ui/views/list-view/package.json +4 -0
  46. package/@types/dataview/ui/views/table-view/package.json +4 -0
  47. package/@types/dataview/ui/views/task-view/package.json +4 -0
  48. package/@types/dataview/util/hash/package.json +4 -0
  49. package/@types/dataview/util/locale/package.json +4 -0
  50. package/@types/dataview/util/media/package.json +4 -0
  51. package/@types/dataview/util/normalize/package.json +4 -0
  52. package/@types/i18next/package.json +4 -0
  53. package/@types/obsidian-integration-testing/package.json +4 -0
  54. package/@types/original-fs/package.json +4 -0
  55. package/LICENSE +21 -0
  56. package/README.md +15 -1
  57. package/codemirror/index/package.json +6 -0
  58. package/codemirror/package.json +6 -0
  59. package/codemirror/state-field-spec/package.json +6 -0
  60. package/command-handlers/abstract-file-command-handler/package.json +6 -0
  61. package/command-handlers/command-handler/package.json +6 -0
  62. package/command-handlers/command-handler-component/package.json +6 -0
  63. package/command-handlers/editor-command-handler/package.json +6 -0
  64. package/command-handlers/file-command-handler/package.json +6 -0
  65. package/command-handlers/folder-command-handler/package.json +6 -0
  66. package/command-handlers/global-command-handler/package.json +6 -0
  67. package/command-handlers/index/package.json +6 -0
  68. package/command-handlers/open-demo-vault-command-handler/package.json +6 -0
  69. package/command-handlers/open-settings-command-handler/package.json +6 -0
  70. package/command-handlers/package.json +6 -0
  71. package/command-handlers/unlock-active-note-command-handler/package.json +6 -0
  72. package/components/abort-signal-component/package.json +6 -0
  73. package/components/all-windows-event-component/package.json +6 -0
  74. package/components/async-error-handler-component/package.json +6 -0
  75. package/components/async-events-component/package.json +6 -0
  76. package/components/case-insensitive-file-index-component/package.json +6 -0
  77. package/components/component-ex/package.json +6 -0
  78. package/components/console-debug-component/package.json +6 -0
  79. package/components/core-plugin-toggle-component/package.json +6 -0
  80. package/components/disposable-component/package.json +6 -0
  81. package/components/embed-extensions-component/package.json +6 -0
  82. package/components/generate-markdown-link-default-params-component/package.json +6 -0
  83. package/components/index/package.json +6 -0
  84. package/components/layout-ready-component/package.json +6 -0
  85. package/components/menu-event-registrar-component/package.json +6 -0
  86. package/components/monkey-around-component/package.json +6 -0
  87. package/components/notebook-navigator-menu-event-registrar-component/package.json +6 -0
  88. package/components/package.json +6 -0
  89. package/components/plugin-context-component/package.json +6 -0
  90. package/components/plugin-gate-component/package.json +6 -0
  91. package/components/plugin-notice-component/package.json +6 -0
  92. package/components/plugin-settings-component/package.json +6 -0
  93. package/components/plugin-settings-tab-component/package.json +6 -0
  94. package/components/plugin-suggestion-component/package.json +6 -0
  95. package/components/pointer-position-component/package.json +6 -0
  96. package/components/registry-component/package.json +6 -0
  97. package/components/release-notes-component/package.json +6 -0
  98. package/components/rename-delete-handler-component/package.json +6 -0
  99. package/components/rmdir-guard-component/package.json +6 -0
  100. package/components/settings-migration-component/package.json +6 -0
  101. package/components/syntax-highlighting-component/package.json +6 -0
  102. package/components/templates-language-component/package.json +6 -0
  103. package/constructors/get-dom-events-handlers-constructor/package.json +6 -0
  104. package/constructors/index/package.json +6 -0
  105. package/constructors/package.json +6 -0
  106. package/dist/lib/cjs/@types/dataview/api/data-array.d.cts +137 -0
  107. package/dist/lib/cjs/@types/dataview/api/extensions.d.cts +16 -0
  108. package/dist/lib/cjs/@types/dataview/api/inline-api.d.cts +187 -0
  109. package/dist/lib/cjs/@types/dataview/api/plugin-api.d.cts +210 -0
  110. package/dist/lib/cjs/@types/dataview/api/result.d.cts +39 -0
  111. package/dist/lib/cjs/@types/dataview/data-import/common.d.cts +4 -0
  112. package/dist/lib/cjs/@types/dataview/data-import/csv.d.cts +4 -0
  113. package/dist/lib/cjs/@types/dataview/data-import/inline-field.d.cts +43 -0
  114. package/dist/lib/cjs/@types/dataview/data-import/markdown-file.d.cts +53 -0
  115. package/dist/lib/cjs/@types/dataview/data-import/persister.d.cts +33 -0
  116. package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-entry.d.cts +2 -0
  117. package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-impl.d.cts +7 -0
  118. package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-manager.d.cts +38 -0
  119. package/dist/lib/cjs/@types/dataview/data-index/index.d.cts +187 -0
  120. package/dist/lib/cjs/@types/dataview/data-index/resolver.d.cts +24 -0
  121. package/dist/lib/cjs/@types/dataview/data-index/source.d.cts +72 -0
  122. package/dist/lib/cjs/@types/dataview/data-model/markdown.d.cts +116 -0
  123. package/dist/lib/cjs/@types/dataview/data-model/serialized/markdown.d.cts +107 -0
  124. package/dist/lib/cjs/@types/dataview/data-model/transferable.d.cts +8 -0
  125. package/dist/lib/cjs/@types/dataview/data-model/value.d.cts +176 -0
  126. package/dist/lib/cjs/@types/dataview/expression/binaryop.d.cts +44 -0
  127. package/dist/lib/cjs/@types/dataview/expression/context.d.cts +50 -0
  128. package/dist/lib/cjs/@types/dataview/expression/field.d.cts +83 -0
  129. package/dist/lib/cjs/@types/dataview/expression/functions.d.cts +150 -0
  130. package/dist/lib/cjs/@types/dataview/expression/parse.d.cts +164 -0
  131. package/dist/lib/cjs/@types/dataview/index.d.cts +56 -0
  132. package/dist/lib/cjs/@types/dataview/main.d.cts +53 -0
  133. package/dist/lib/cjs/@types/dataview/query/engine.d.cts +104 -0
  134. package/dist/lib/cjs/@types/dataview/query/parse.d.cts +45 -0
  135. package/dist/lib/cjs/@types/dataview/query/query.d.cts +96 -0
  136. package/dist/lib/cjs/@types/dataview/settings.d.cts +61 -0
  137. package/dist/lib/cjs/@types/dataview/typings/obsidian-ex.d.cts +29 -0
  138. package/dist/lib/cjs/@types/dataview/typings/workers.d.cts +5 -0
  139. package/dist/lib/cjs/@types/dataview/ui/export/markdown.d.cts +16 -0
  140. package/dist/lib/cjs/@types/dataview/ui/lp-render.d.cts +38 -0
  141. package/dist/lib/cjs/@types/dataview/ui/markdown.d.cts +87 -0
  142. package/dist/lib/cjs/@types/dataview/ui/refreshable-view.d.cts +19 -0
  143. package/dist/lib/cjs/@types/dataview/ui/render.d.cts +34 -0
  144. package/dist/lib/cjs/@types/dataview/ui/views/calendar-view.d.cts +18 -0
  145. package/dist/lib/cjs/@types/dataview/ui/views/inline-field-live-preview.d.cts +43 -0
  146. package/dist/lib/cjs/@types/dataview/ui/views/inline-view.d.cts +29 -0
  147. package/dist/lib/cjs/@types/dataview/ui/views/js-view.d.cts +24 -0
  148. package/dist/lib/cjs/@types/dataview/ui/views/list-view.d.cts +26 -0
  149. package/dist/lib/cjs/@types/dataview/ui/views/table-view.d.cts +29 -0
  150. package/dist/lib/cjs/@types/dataview/ui/views/task-view.d.cts +52 -0
  151. package/dist/lib/cjs/@types/dataview/util/hash.d.cts +2 -0
  152. package/dist/lib/cjs/@types/dataview/util/locale.d.cts +3 -0
  153. package/dist/lib/cjs/@types/dataview/util/media.d.cts +7 -0
  154. package/dist/lib/cjs/@types/dataview/util/normalize.d.cts +45 -0
  155. package/dist/lib/cjs/@types/i18next.d.cts +14 -0
  156. package/dist/lib/cjs/@types/obsidian-integration-testing.d.cts +29 -0
  157. package/dist/lib/cjs/@types/original-fs.d.cts +15 -0
  158. package/dist/lib/cjs/__merged.cjs +1656 -0
  159. package/dist/lib/cjs/__merged.d.cts +205 -0
  160. package/dist/lib/cjs/active-file-provider.cjs +161 -0
  161. package/dist/lib/cjs/active-file-provider.d.cts +36 -0
  162. package/dist/lib/cjs/app.cjs +153 -0
  163. package/dist/lib/cjs/app.d.cts +17 -0
  164. package/dist/lib/cjs/async-with-notice.cjs +235 -0
  165. package/dist/lib/cjs/async-with-notice.d.cts +113 -0
  166. package/dist/lib/cjs/attachment-path.cjs +379 -0
  167. package/dist/lib/cjs/attachment-path.d.cts +341 -0
  168. package/dist/lib/cjs/attachment-unit-folder.cjs +168 -0
  169. package/dist/lib/cjs/attachment-unit-folder.d.cts +103 -0
  170. package/dist/lib/cjs/backlink-index.cjs +249 -0
  171. package/dist/lib/cjs/backlink-index.d.cts +51 -0
  172. package/dist/lib/cjs/backlink.cjs +217 -0
  173. package/dist/lib/cjs/backlink.d.cts +66 -0
  174. package/dist/lib/cjs/bases-view-registrar.cjs +162 -0
  175. package/dist/lib/cjs/bases-view-registrar.d.cts +52 -0
  176. package/dist/lib/cjs/callout.cjs +220 -0
  177. package/dist/lib/cjs/callout.d.cts +76 -0
  178. package/dist/lib/cjs/canvas.cjs +215 -0
  179. package/dist/lib/cjs/canvas.d.cts +28 -0
  180. package/dist/lib/cjs/case-insensitive-file-index.cjs +244 -0
  181. package/dist/lib/cjs/case-insensitive-file-index.d.cts +92 -0
  182. package/dist/lib/cjs/code-block-markdown-information.cjs +131 -0
  183. package/dist/lib/cjs/code-block-markdown-information.d.cts +48 -0
  184. package/dist/lib/cjs/code-block-reg-exp.cjs +145 -0
  185. package/dist/lib/cjs/code-block-reg-exp.d.cts +39 -0
  186. package/dist/lib/cjs/codemirror/index.cjs +153 -0
  187. package/dist/lib/cjs/codemirror/index.d.cts +2 -0
  188. package/dist/lib/cjs/codemirror/state-field-spec.cjs +131 -0
  189. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +72 -0
  190. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +416 -0
  191. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +274 -0
  192. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +278 -0
  193. package/dist/lib/cjs/command-handlers/command-handler-component.d.cts +146 -0
  194. package/dist/lib/cjs/command-handlers/command-handler.cjs +200 -0
  195. package/dist/lib/cjs/command-handlers/command-handler.d.cts +107 -0
  196. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +348 -0
  197. package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +208 -0
  198. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +285 -0
  199. package/dist/lib/cjs/command-handlers/file-command-handler.d.cts +143 -0
  200. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +293 -0
  201. package/dist/lib/cjs/command-handlers/folder-command-handler.d.cts +149 -0
  202. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +185 -0
  203. package/dist/lib/cjs/command-handlers/global-command-handler.d.cts +40 -0
  204. package/dist/lib/cjs/command-handlers/index.cjs +180 -0
  205. package/dist/lib/cjs/command-handlers/index.d.cts +11 -0
  206. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +209 -0
  207. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.d.cts +73 -0
  208. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +174 -0
  209. package/dist/lib/cjs/command-handlers/open-settings-command-handler.d.cts +44 -0
  210. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +187 -0
  211. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.d.cts +54 -0
  212. package/dist/lib/cjs/command-registrar.cjs +169 -0
  213. package/dist/lib/cjs/command-registrar.d.cts +48 -0
  214. package/dist/lib/cjs/community-plugins.cjs +322 -0
  215. package/dist/lib/cjs/community-plugins.d.cts +270 -0
  216. package/dist/lib/cjs/components/abort-signal-component.cjs +172 -0
  217. package/dist/lib/cjs/components/abort-signal-component.d.cts +30 -0
  218. package/dist/lib/cjs/components/all-windows-event-component.cjs +214 -0
  219. package/dist/lib/cjs/components/all-windows-event-component.d.cts +84 -0
  220. package/dist/lib/cjs/components/async-error-handler-component.cjs +176 -0
  221. package/dist/lib/cjs/components/async-error-handler-component.d.cts +30 -0
  222. package/dist/lib/cjs/components/async-events-component.cjs +148 -0
  223. package/dist/lib/cjs/components/async-events-component.d.cts +15 -0
  224. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +186 -0
  225. package/dist/lib/cjs/components/case-insensitive-file-index-component.d.cts +36 -0
  226. package/dist/lib/cjs/components/component-ex.cjs +504 -0
  227. package/dist/lib/cjs/components/component-ex.d.cts +229 -0
  228. package/dist/lib/cjs/components/console-debug-component.cjs +170 -0
  229. package/dist/lib/cjs/components/console-debug-component.d.cts +30 -0
  230. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +202 -0
  231. package/dist/lib/cjs/components/core-plugin-toggle-component.d.cts +102 -0
  232. package/dist/lib/cjs/components/disposable-component.cjs +154 -0
  233. package/dist/lib/cjs/components/disposable-component.d.cts +24 -0
  234. package/dist/lib/cjs/components/embed-extensions-component.cjs +174 -0
  235. package/dist/lib/cjs/components/embed-extensions-component.d.cts +38 -0
  236. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +170 -0
  237. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.d.cts +42 -0
  238. package/dist/lib/cjs/components/index.cjs +237 -0
  239. package/dist/lib/cjs/components/index.d.cts +30 -0
  240. package/dist/lib/cjs/components/layout-ready-component.cjs +211 -0
  241. package/dist/lib/cjs/components/layout-ready-component.d.cts +48 -0
  242. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +196 -0
  243. package/dist/lib/cjs/components/menu-event-registrar-component.d.cts +52 -0
  244. package/dist/lib/cjs/components/monkey-around-component.cjs +245 -0
  245. package/dist/lib/cjs/components/monkey-around-component.d.cts +241 -0
  246. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +321 -0
  247. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.d.cts +150 -0
  248. package/dist/lib/cjs/components/plugin-context-component.cjs +180 -0
  249. package/dist/lib/cjs/components/plugin-context-component.d.cts +36 -0
  250. package/dist/lib/cjs/components/plugin-gate-component.cjs +548 -0
  251. package/dist/lib/cjs/components/plugin-gate-component.d.cts +332 -0
  252. package/dist/lib/cjs/components/plugin-notice-component.cjs +629 -0
  253. package/dist/lib/cjs/components/plugin-notice-component.d.cts +362 -0
  254. package/dist/lib/cjs/components/plugin-settings-component.cjs +644 -0
  255. package/dist/lib/cjs/components/plugin-settings-component.d.cts +362 -0
  256. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +170 -0
  257. package/dist/lib/cjs/components/plugin-settings-tab-component.d.cts +39 -0
  258. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +278 -0
  259. package/dist/lib/cjs/components/plugin-suggestion-component.d.cts +162 -0
  260. package/dist/lib/cjs/components/pointer-position-component.cjs +166 -0
  261. package/dist/lib/cjs/components/pointer-position-component.d.cts +29 -0
  262. package/dist/lib/cjs/components/registry-component.cjs +187 -0
  263. package/dist/lib/cjs/components/registry-component.d.cts +37 -0
  264. package/dist/lib/cjs/components/release-notes-component.cjs +225 -0
  265. package/dist/lib/cjs/components/release-notes-component.d.cts +129 -0
  266. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +1275 -0
  267. package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +165 -0
  268. package/dist/lib/cjs/components/rmdir-guard-component.cjs +190 -0
  269. package/dist/lib/cjs/components/rmdir-guard-component.d.cts +76 -0
  270. package/dist/lib/cjs/components/settings-migration-component.cjs +222 -0
  271. package/dist/lib/cjs/components/settings-migration-component.d.cts +120 -0
  272. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +248 -0
  273. package/dist/lib/cjs/components/syntax-highlighting-component.d.cts +149 -0
  274. package/dist/lib/cjs/components/templates-language-component.cjs +276 -0
  275. package/dist/lib/cjs/components/templates-language-component.d.cts +124 -0
  276. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +246 -0
  277. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.d.cts +22 -0
  278. package/dist/lib/cjs/constructors/index.cjs +153 -0
  279. package/dist/lib/cjs/constructors/index.d.cts +2 -0
  280. package/dist/lib/cjs/css-class.cjs +208 -0
  281. package/dist/lib/cjs/css-class.d.cts +278 -0
  282. package/dist/lib/cjs/data-handler.cjs +170 -0
  283. package/dist/lib/cjs/data-handler.d.cts +49 -0
  284. package/dist/lib/cjs/dataview-link.cjs +160 -0
  285. package/dist/lib/cjs/dataview-link.d.cts +42 -0
  286. package/dist/lib/cjs/dataview.cjs +379 -0
  287. package/dist/lib/cjs/dataview.d.cts +249 -0
  288. package/dist/lib/cjs/debug.cjs +148 -0
  289. package/dist/lib/cjs/debug.d.cts +19 -0
  290. package/dist/lib/cjs/demo-vault-helper-settings.cjs +131 -0
  291. package/dist/lib/cjs/demo-vault-helper-settings.d.cts +29 -0
  292. package/dist/lib/cjs/demo-vault-helper.cjs +232 -0
  293. package/dist/lib/cjs/demo-vault-helper.d.cts +61 -0
  294. package/dist/lib/cjs/demo-vault-naming.cjs +157 -0
  295. package/dist/lib/cjs/demo-vault-naming.d.cts +54 -0
  296. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +348 -0
  297. package/dist/lib/cjs/desktop-demo-vault-opener.d.cts +76 -0
  298. package/dist/lib/cjs/desktop-trusted-input.cjs +301 -0
  299. package/dist/lib/cjs/desktop-trusted-input.d.cts +288 -0
  300. package/dist/lib/cjs/editor-extension-registrar.cjs +162 -0
  301. package/dist/lib/cjs/editor-extension-registrar.d.cts +37 -0
  302. package/dist/lib/cjs/editor-suggest-registrar.cjs +162 -0
  303. package/dist/lib/cjs/editor-suggest-registrar.d.cts +36 -0
  304. package/dist/lib/cjs/editor.cjs +200 -0
  305. package/dist/lib/cjs/editor.d.cts +45 -0
  306. package/dist/lib/cjs/events.cjs +172 -0
  307. package/dist/lib/cjs/events.d.cts +98 -0
  308. package/dist/lib/cjs/extensions-registrar.cjs +162 -0
  309. package/dist/lib/cjs/extensions-registrar.d.cts +51 -0
  310. package/dist/lib/cjs/file-change.cjs +558 -0
  311. package/dist/lib/cjs/file-change.d.cts +156 -0
  312. package/dist/lib/cjs/file-explorer.cjs +157 -0
  313. package/dist/lib/cjs/file-explorer.d.cts +34 -0
  314. package/dist/lib/cjs/file-manager.cjs +251 -0
  315. package/dist/lib/cjs/file-manager.d.cts +123 -0
  316. package/dist/lib/cjs/file-system.cjs +571 -0
  317. package/dist/lib/cjs/file-system.d.cts +554 -0
  318. package/dist/lib/cjs/folder-note.cjs +261 -0
  319. package/dist/lib/cjs/folder-note.d.cts +166 -0
  320. package/dist/lib/cjs/frontmatter-formatting.cjs +448 -0
  321. package/dist/lib/cjs/frontmatter-formatting.d.cts +44 -0
  322. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +159 -0
  323. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +34 -0
  324. package/dist/lib/cjs/frontmatter.cjs +271 -0
  325. package/dist/lib/cjs/frontmatter.d.cts +145 -0
  326. package/dist/lib/cjs/generated-during-build.cjs +146 -0
  327. package/dist/lib/cjs/generated-during-build.d.cts +25 -0
  328. package/dist/lib/cjs/hover-link-source-registrar.cjs +162 -0
  329. package/dist/lib/cjs/hover-link-source-registrar.d.cts +52 -0
  330. package/dist/lib/cjs/html-element.cjs +183 -0
  331. package/dist/lib/cjs/html-element.d.cts +98 -0
  332. package/dist/lib/cjs/i18n/custom-type-options.cjs +132 -0
  333. package/dist/lib/cjs/i18n/custom-type-options.d.cts +38 -0
  334. package/dist/lib/cjs/i18n/default-translations.cjs +132 -0
  335. package/dist/lib/cjs/i18n/default-translations.d.cts +15 -0
  336. package/dist/lib/cjs/i18n/i18n.cjs +192 -0
  337. package/dist/lib/cjs/i18n/i18n.d.cts +38 -0
  338. package/dist/lib/cjs/i18n/index.cjs +162 -0
  339. package/dist/lib/cjs/i18n/index.d.cts +5 -0
  340. package/dist/lib/cjs/i18n/locales/en.cjs +224 -0
  341. package/dist/lib/cjs/i18n/locales/en.d.cts +91 -0
  342. package/dist/lib/cjs/i18n/locales/index.cjs +156 -0
  343. package/dist/lib/cjs/i18n/locales/index.d.cts +3 -0
  344. package/dist/lib/cjs/i18n/locales/translations-map.cjs +150 -0
  345. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +100 -0
  346. package/dist/lib/cjs/index.cjs +435 -0
  347. package/dist/lib/cjs/index.d.cts +96 -0
  348. package/dist/lib/cjs/is-in-obsidian.cjs +154 -0
  349. package/dist/lib/cjs/is-in-obsidian.d.cts +12 -0
  350. package/dist/lib/cjs/library-styles.cjs +173 -0
  351. package/dist/lib/cjs/library-styles.d.cts +56 -0
  352. package/dist/lib/cjs/library.cjs +181 -0
  353. package/dist/lib/cjs/library.d.cts +57 -0
  354. package/dist/lib/cjs/link-name.cjs +145 -0
  355. package/dist/lib/cjs/link-name.d.cts +23 -0
  356. package/dist/lib/cjs/link-update-progress.cjs +131 -0
  357. package/dist/lib/cjs/link-update-progress.d.cts +32 -0
  358. package/dist/lib/cjs/link.cjs +1053 -0
  359. package/dist/lib/cjs/link.d.cts +1369 -0
  360. package/dist/lib/cjs/logger.cjs +212 -0
  361. package/dist/lib/cjs/logger.d.cts +37 -0
  362. package/dist/lib/cjs/loop.cjs +243 -0
  363. package/dist/lib/cjs/loop.d.cts +104 -0
  364. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +166 -0
  365. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +62 -0
  366. package/dist/lib/cjs/markdown-code-block-processor.cjs +444 -0
  367. package/dist/lib/cjs/markdown-code-block-processor.d.cts +137 -0
  368. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +163 -0
  369. package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +59 -0
  370. package/dist/lib/cjs/markdown-view.cjs +151 -0
  371. package/dist/lib/cjs/markdown-view.d.cts +14 -0
  372. package/dist/lib/cjs/markdown.cjs +470 -0
  373. package/dist/lib/cjs/markdown.d.cts +226 -0
  374. package/dist/lib/cjs/menu-event-registrar.cjs +131 -0
  375. package/dist/lib/cjs/menu-event-registrar.d.cts +84 -0
  376. package/dist/lib/cjs/metadata-cache.cjs +544 -0
  377. package/dist/lib/cjs/metadata-cache.d.cts +359 -0
  378. package/dist/lib/cjs/mobile-trusted-input.cjs +185 -0
  379. package/dist/lib/cjs/mobile-trusted-input.d.cts +98 -0
  380. package/dist/lib/cjs/modals/alert.cjs +178 -0
  381. package/dist/lib/cjs/modals/alert.d.cts +35 -0
  382. package/dist/lib/cjs/modals/confirm.cjs +188 -0
  383. package/dist/lib/cjs/modals/confirm.d.cts +39 -0
  384. package/dist/lib/cjs/modals/index.cjs +177 -0
  385. package/dist/lib/cjs/modals/index.d.cts +10 -0
  386. package/dist/lib/cjs/modals/minimizable-modal.cjs +441 -0
  387. package/dist/lib/cjs/modals/minimizable-modal.d.cts +129 -0
  388. package/dist/lib/cjs/modals/modal-command-builder.cjs +458 -0
  389. package/dist/lib/cjs/modals/modal-command-builder.d.cts +285 -0
  390. package/dist/lib/cjs/modals/modal.cjs +176 -0
  391. package/dist/lib/cjs/modals/modal.d.cts +64 -0
  392. package/dist/lib/cjs/modals/prompt.cjs +256 -0
  393. package/dist/lib/cjs/modals/prompt.d.cts +83 -0
  394. package/dist/lib/cjs/modals/select-item.cjs +201 -0
  395. package/dist/lib/cjs/modals/select-item.d.cts +55 -0
  396. package/dist/lib/cjs/modals/select-option.cjs +189 -0
  397. package/dist/lib/cjs/modals/select-option.d.cts +65 -0
  398. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +144 -0
  399. package/dist/lib/cjs/modals/suggest-modal-command-builder.d.cts +35 -0
  400. package/dist/lib/cjs/note-priority.cjs +234 -0
  401. package/dist/lib/cjs/note-priority.d.cts +154 -0
  402. package/dist/lib/cjs/notebook-navigator.cjs +163 -0
  403. package/dist/lib/cjs/notebook-navigator.d.cts +132 -0
  404. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +175 -0
  405. package/dist/lib/cjs/obsidian-dev-utils-state.d.cts +42 -0
  406. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +165 -0
  407. package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +55 -0
  408. package/dist/lib/cjs/obsidian-settings.cjs +182 -0
  409. package/dist/lib/cjs/obsidian-settings.d.cts +62 -0
  410. package/dist/lib/cjs/parse-link.cjs +538 -0
  411. package/dist/lib/cjs/parse-link.d.cts +288 -0
  412. package/dist/lib/cjs/path-settings.cjs +269 -0
  413. package/dist/lib/cjs/path-settings.d.cts +56 -0
  414. package/dist/lib/cjs/pdf.cjs +173 -0
  415. package/dist/lib/cjs/pdf.d.cts +26 -0
  416. package/dist/lib/cjs/plugin/index.cjs +174 -0
  417. package/dist/lib/cjs/plugin/index.d.cts +9 -0
  418. package/dist/lib/cjs/plugin/plugin-api.cjs +519 -0
  419. package/dist/lib/cjs/plugin/plugin-api.d.cts +413 -0
  420. package/dist/lib/cjs/plugin/plugin-context.cjs +191 -0
  421. package/dist/lib/cjs/plugin/plugin-context.d.cts +27 -0
  422. package/dist/lib/cjs/plugin/plugin-event-source.cjs +226 -0
  423. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +97 -0
  424. package/dist/lib/cjs/plugin/plugin-install-state.cjs +195 -0
  425. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +113 -0
  426. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +151 -0
  427. package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +127 -0
  428. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +611 -0
  429. package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +368 -0
  430. package/dist/lib/cjs/plugin/plugin.cjs +706 -0
  431. package/dist/lib/cjs/plugin/plugin.d.cts +363 -0
  432. package/dist/lib/cjs/plugin/settings-migration-api.cjs +131 -0
  433. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +91 -0
  434. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +163 -0
  435. package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +64 -0
  436. package/dist/lib/cjs/popovers/field-popover.cjs +182 -0
  437. package/dist/lib/cjs/popovers/field-popover.d.cts +75 -0
  438. package/dist/lib/cjs/popovers/index.cjs +159 -0
  439. package/dist/lib/cjs/popovers/index.d.cts +4 -0
  440. package/dist/lib/cjs/popovers/popover-anchor.cjs +182 -0
  441. package/dist/lib/cjs/popovers/popover-anchor.d.cts +67 -0
  442. package/dist/lib/cjs/popovers/popover.cjs +229 -0
  443. package/dist/lib/cjs/popovers/popover.d.cts +78 -0
  444. package/dist/lib/cjs/property-entry.cjs +172 -0
  445. package/dist/lib/cjs/property-entry.d.cts +43 -0
  446. package/dist/lib/cjs/queue.cjs +212 -0
  447. package/dist/lib/cjs/queue.d.cts +93 -0
  448. package/dist/lib/cjs/react/app-context.cjs +151 -0
  449. package/dist/lib/cjs/react/app-context.d.cts +24 -0
  450. package/dist/lib/cjs/react/index.cjs +153 -0
  451. package/dist/lib/cjs/react/index.d.cts +2 -0
  452. package/dist/lib/cjs/reference.cjs +186 -0
  453. package/dist/lib/cjs/reference.d.cts +116 -0
  454. package/dist/lib/cjs/resource-lock.cjs +1096 -0
  455. package/dist/lib/cjs/resource-lock.d.cts +318 -0
  456. package/dist/lib/cjs/resource-url.cjs +156 -0
  457. package/dist/lib/cjs/resource-url.d.cts +31 -0
  458. package/dist/lib/cjs/ribbon-icon-registrar.cjs +163 -0
  459. package/dist/lib/cjs/ribbon-icon-registrar.d.cts +60 -0
  460. package/dist/lib/cjs/setting-components/checkbox-component.cjs +216 -0
  461. package/dist/lib/cjs/setting-components/checkbox-component.d.cts +69 -0
  462. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +378 -0
  463. package/dist/lib/cjs/setting-components/code-highlighter-component.d.cts +132 -0
  464. package/dist/lib/cjs/setting-components/date-component.cjs +180 -0
  465. package/dist/lib/cjs/setting-components/date-component.d.cts +38 -0
  466. package/dist/lib/cjs/setting-components/date-time-component.cjs +180 -0
  467. package/dist/lib/cjs/setting-components/date-time-component.d.cts +38 -0
  468. package/dist/lib/cjs/setting-components/email-component.cjs +191 -0
  469. package/dist/lib/cjs/setting-components/email-component.d.cts +49 -0
  470. package/dist/lib/cjs/setting-components/file-component.cjs +183 -0
  471. package/dist/lib/cjs/setting-components/file-component.d.cts +43 -0
  472. package/dist/lib/cjs/setting-components/index.cjs +228 -0
  473. package/dist/lib/cjs/setting-components/index.d.cts +27 -0
  474. package/dist/lib/cjs/setting-components/month-component.cjs +188 -0
  475. package/dist/lib/cjs/setting-components/month-component.d.cts +51 -0
  476. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +253 -0
  477. package/dist/lib/cjs/setting-components/multiple-dropdown-component.d.cts +92 -0
  478. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +177 -0
  479. package/dist/lib/cjs/setting-components/multiple-email-component.d.cts +38 -0
  480. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +185 -0
  481. package/dist/lib/cjs/setting-components/multiple-file-component.d.cts +43 -0
  482. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +272 -0
  483. package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +109 -0
  484. package/dist/lib/cjs/setting-components/number-component.cjs +201 -0
  485. package/dist/lib/cjs/setting-components/number-component.d.cts +56 -0
  486. package/dist/lib/cjs/setting-components/password-component.cjs +177 -0
  487. package/dist/lib/cjs/setting-components/password-component.d.cts +38 -0
  488. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +160 -0
  489. package/dist/lib/cjs/setting-components/setting-component-wrapper.d.cts +13 -0
  490. package/dist/lib/cjs/setting-components/telephone-component.cjs +191 -0
  491. package/dist/lib/cjs/setting-components/telephone-component.d.cts +51 -0
  492. package/dist/lib/cjs/setting-components/text-based-component.cjs +170 -0
  493. package/dist/lib/cjs/setting-components/text-based-component.d.cts +38 -0
  494. package/dist/lib/cjs/setting-components/time-component.cjs +185 -0
  495. package/dist/lib/cjs/setting-components/time-component.d.cts +38 -0
  496. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +217 -0
  497. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.d.cts +69 -0
  498. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +262 -0
  499. package/dist/lib/cjs/setting-components/typed-dropdown-component.d.cts +97 -0
  500. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +264 -0
  501. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.d.cts +99 -0
  502. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +175 -0
  503. package/dist/lib/cjs/setting-components/typed-range-text-component.d.cts +35 -0
  504. package/dist/lib/cjs/setting-components/typed-text-component.cjs +232 -0
  505. package/dist/lib/cjs/setting-components/typed-text-component.d.cts +100 -0
  506. package/dist/lib/cjs/setting-components/url-component.cjs +191 -0
  507. package/dist/lib/cjs/setting-components/url-component.d.cts +49 -0
  508. package/dist/lib/cjs/setting-components/validator-component.cjs +230 -0
  509. package/dist/lib/cjs/setting-components/validator-component.d.cts +23 -0
  510. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +131 -0
  511. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.d.cts +20 -0
  512. package/dist/lib/cjs/setting-components/week-component.cjs +188 -0
  513. package/dist/lib/cjs/setting-components/week-component.d.cts +51 -0
  514. package/dist/lib/cjs/setting-ex.cjs +372 -0
  515. package/dist/lib/cjs/setting-ex.d.cts +198 -0
  516. package/dist/lib/cjs/setting-group-ex.cjs +165 -0
  517. package/dist/lib/cjs/setting-group-ex.d.cts +26 -0
  518. package/dist/lib/cjs/status-bar-item-registrar.cjs +162 -0
  519. package/dist/lib/cjs/status-bar-item-registrar.d.cts +36 -0
  520. package/dist/lib/cjs/templater.cjs +279 -0
  521. package/dist/lib/cjs/templater.d.cts +284 -0
  522. package/dist/lib/cjs/transformers/duration-transformer.cjs +182 -0
  523. package/dist/lib/cjs/transformers/duration-transformer.d.cts +39 -0
  524. package/dist/lib/cjs/transformers/index.cjs +153 -0
  525. package/dist/lib/cjs/transformers/index.d.cts +2 -0
  526. package/dist/lib/cjs/trusted-input.cjs +196 -0
  527. package/dist/lib/cjs/trusted-input.d.cts +131 -0
  528. package/dist/lib/cjs/validation.cjs +189 -0
  529. package/dist/lib/cjs/validation.d.cts +87 -0
  530. package/dist/lib/cjs/vault-delete.cjs +222 -0
  531. package/dist/lib/cjs/vault-delete.d.cts +82 -0
  532. package/dist/lib/cjs/vault-transaction.cjs +412 -0
  533. package/dist/lib/cjs/vault-transaction.d.cts +163 -0
  534. package/dist/lib/cjs/vault.cjs +701 -0
  535. package/dist/lib/cjs/vault.d.cts +506 -0
  536. package/dist/lib/cjs/view-registrar.cjs +162 -0
  537. package/dist/lib/cjs/view-registrar.d.cts +52 -0
  538. package/dist/lib/cjs/workspace.cjs +186 -0
  539. package/dist/lib/cjs/workspace.d.cts +81 -0
  540. package/dist/lib/esm/@types/dataview/api/data-array.d.mts +137 -0
  541. package/dist/lib/esm/@types/dataview/api/extensions.d.mts +16 -0
  542. package/dist/lib/esm/@types/dataview/api/inline-api.d.mts +187 -0
  543. package/dist/lib/esm/@types/dataview/api/plugin-api.d.mts +210 -0
  544. package/dist/lib/esm/@types/dataview/api/result.d.mts +39 -0
  545. package/dist/lib/esm/@types/dataview/data-import/common.d.mts +4 -0
  546. package/dist/lib/esm/@types/dataview/data-import/csv.d.mts +4 -0
  547. package/dist/lib/esm/@types/dataview/data-import/inline-field.d.mts +43 -0
  548. package/dist/lib/esm/@types/dataview/data-import/markdown-file.d.mts +53 -0
  549. package/dist/lib/esm/@types/dataview/data-import/persister.d.mts +33 -0
  550. package/dist/lib/esm/@types/dataview/data-import/web-worker/import-entry.d.mts +2 -0
  551. package/dist/lib/esm/@types/dataview/data-import/web-worker/import-impl.d.mts +7 -0
  552. package/dist/lib/esm/@types/dataview/data-import/web-worker/import-manager.d.mts +38 -0
  553. package/dist/lib/esm/@types/dataview/data-index/index.d.mts +187 -0
  554. package/dist/lib/esm/@types/dataview/data-index/resolver.d.mts +24 -0
  555. package/dist/lib/esm/@types/dataview/data-index/source.d.mts +72 -0
  556. package/dist/lib/esm/@types/dataview/data-model/markdown.d.mts +116 -0
  557. package/dist/lib/esm/@types/dataview/data-model/serialized/markdown.d.mts +107 -0
  558. package/dist/lib/esm/@types/dataview/data-model/transferable.d.mts +8 -0
  559. package/dist/lib/esm/@types/dataview/data-model/value.d.mts +176 -0
  560. package/dist/lib/esm/@types/dataview/expression/binaryop.d.mts +44 -0
  561. package/dist/lib/esm/@types/dataview/expression/context.d.mts +50 -0
  562. package/dist/lib/esm/@types/dataview/expression/field.d.mts +83 -0
  563. package/dist/lib/esm/@types/dataview/expression/functions.d.mts +150 -0
  564. package/dist/lib/esm/@types/dataview/expression/parse.d.mts +164 -0
  565. package/dist/lib/esm/@types/dataview/index.d.mts +56 -0
  566. package/dist/lib/esm/@types/dataview/main.d.mts +53 -0
  567. package/dist/lib/esm/@types/dataview/query/engine.d.mts +104 -0
  568. package/dist/lib/esm/@types/dataview/query/parse.d.mts +45 -0
  569. package/dist/lib/esm/@types/dataview/query/query.d.mts +96 -0
  570. package/dist/lib/esm/@types/dataview/settings.d.mts +61 -0
  571. package/dist/lib/esm/@types/dataview/typings/obsidian-ex.d.mts +29 -0
  572. package/dist/lib/esm/@types/dataview/typings/workers.d.mts +5 -0
  573. package/dist/lib/esm/@types/dataview/ui/export/markdown.d.mts +16 -0
  574. package/dist/lib/esm/@types/dataview/ui/lp-render.d.mts +38 -0
  575. package/dist/lib/esm/@types/dataview/ui/markdown.d.mts +87 -0
  576. package/dist/lib/esm/@types/dataview/ui/refreshable-view.d.mts +19 -0
  577. package/dist/lib/esm/@types/dataview/ui/render.d.mts +34 -0
  578. package/dist/lib/esm/@types/dataview/ui/views/calendar-view.d.mts +18 -0
  579. package/dist/lib/esm/@types/dataview/ui/views/inline-field-live-preview.d.mts +43 -0
  580. package/dist/lib/esm/@types/dataview/ui/views/inline-view.d.mts +29 -0
  581. package/dist/lib/esm/@types/dataview/ui/views/js-view.d.mts +24 -0
  582. package/dist/lib/esm/@types/dataview/ui/views/list-view.d.mts +26 -0
  583. package/dist/lib/esm/@types/dataview/ui/views/table-view.d.mts +29 -0
  584. package/dist/lib/esm/@types/dataview/ui/views/task-view.d.mts +52 -0
  585. package/dist/lib/esm/@types/dataview/util/hash.d.mts +2 -0
  586. package/dist/lib/esm/@types/dataview/util/locale.d.mts +3 -0
  587. package/dist/lib/esm/@types/dataview/util/media.d.mts +7 -0
  588. package/dist/lib/esm/@types/dataview/util/normalize.d.mts +45 -0
  589. package/dist/lib/esm/@types/i18next.d.mts +14 -0
  590. package/dist/lib/esm/@types/obsidian-integration-testing.d.mts +29 -0
  591. package/dist/lib/esm/@types/original-fs.d.mts +15 -0
  592. package/dist/lib/esm/__merged.d.mts +205 -0
  593. package/dist/lib/esm/__merged.mjs +1524 -0
  594. package/dist/lib/esm/active-file-provider.d.mts +36 -0
  595. package/dist/lib/esm/active-file-provider.mjs +64 -0
  596. package/dist/lib/esm/app.d.mts +17 -0
  597. package/dist/lib/esm/app.mjs +56 -0
  598. package/dist/lib/esm/async-with-notice.d.mts +113 -0
  599. package/dist/lib/esm/async-with-notice.mjs +141 -0
  600. package/dist/lib/esm/attachment-path.d.mts +341 -0
  601. package/dist/lib/esm/attachment-path.mjs +294 -0
  602. package/dist/lib/esm/attachment-unit-folder.d.mts +103 -0
  603. package/dist/lib/esm/attachment-unit-folder.mjs +70 -0
  604. package/dist/lib/esm/backlink-index.d.mts +51 -0
  605. package/dist/lib/esm/backlink-index.mjs +152 -0
  606. package/dist/lib/esm/backlink.d.mts +66 -0
  607. package/dist/lib/esm/backlink.mjs +123 -0
  608. package/dist/lib/esm/bases-view-registrar.d.mts +52 -0
  609. package/dist/lib/esm/bases-view-registrar.mjs +65 -0
  610. package/dist/lib/esm/callout.d.mts +76 -0
  611. package/dist/lib/esm/callout.mjs +124 -0
  612. package/dist/lib/esm/canvas.d.mts +28 -0
  613. package/dist/lib/esm/canvas.mjs +121 -0
  614. package/dist/lib/esm/case-insensitive-file-index.d.mts +92 -0
  615. package/dist/lib/esm/case-insensitive-file-index.mjs +144 -0
  616. package/dist/lib/esm/code-block-markdown-information.d.mts +48 -0
  617. package/dist/lib/esm/code-block-markdown-information.mjs +42 -0
  618. package/dist/lib/esm/code-block-reg-exp.d.mts +39 -0
  619. package/dist/lib/esm/code-block-reg-exp.mjs +48 -0
  620. package/dist/lib/esm/codemirror/index.d.mts +2 -0
  621. package/dist/lib/esm/codemirror/index.mjs +46 -0
  622. package/dist/lib/esm/codemirror/state-field-spec.d.mts +72 -0
  623. package/dist/lib/esm/codemirror/state-field-spec.mjs +42 -0
  624. package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +274 -0
  625. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +322 -0
  626. package/dist/lib/esm/command-handlers/command-handler-component.d.mts +146 -0
  627. package/dist/lib/esm/command-handlers/command-handler-component.mjs +185 -0
  628. package/dist/lib/esm/command-handlers/command-handler.d.mts +107 -0
  629. package/dist/lib/esm/command-handlers/command-handler.mjs +103 -0
  630. package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +208 -0
  631. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +254 -0
  632. package/dist/lib/esm/command-handlers/file-command-handler.d.mts +143 -0
  633. package/dist/lib/esm/command-handlers/file-command-handler.mjs +192 -0
  634. package/dist/lib/esm/command-handlers/folder-command-handler.d.mts +149 -0
  635. package/dist/lib/esm/command-handlers/folder-command-handler.mjs +200 -0
  636. package/dist/lib/esm/command-handlers/global-command-handler.d.mts +40 -0
  637. package/dist/lib/esm/command-handlers/global-command-handler.mjs +88 -0
  638. package/dist/lib/esm/command-handlers/index.d.mts +11 -0
  639. package/dist/lib/esm/command-handlers/index.mjs +64 -0
  640. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.d.mts +73 -0
  641. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +102 -0
  642. package/dist/lib/esm/command-handlers/open-settings-command-handler.d.mts +44 -0
  643. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +77 -0
  644. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.d.mts +54 -0
  645. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +90 -0
  646. package/dist/lib/esm/command-registrar.d.mts +48 -0
  647. package/dist/lib/esm/command-registrar.mjs +72 -0
  648. package/dist/lib/esm/community-plugins.d.mts +270 -0
  649. package/dist/lib/esm/community-plugins.mjs +214 -0
  650. package/dist/lib/esm/components/abort-signal-component.d.mts +30 -0
  651. package/dist/lib/esm/components/abort-signal-component.mjs +75 -0
  652. package/dist/lib/esm/components/all-windows-event-component.d.mts +84 -0
  653. package/dist/lib/esm/components/all-windows-event-component.mjs +117 -0
  654. package/dist/lib/esm/components/async-error-handler-component.d.mts +30 -0
  655. package/dist/lib/esm/components/async-error-handler-component.mjs +79 -0
  656. package/dist/lib/esm/components/async-events-component.d.mts +15 -0
  657. package/dist/lib/esm/components/async-events-component.mjs +51 -0
  658. package/dist/lib/esm/components/case-insensitive-file-index-component.d.mts +36 -0
  659. package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +93 -0
  660. package/dist/lib/esm/components/component-ex.d.mts +229 -0
  661. package/dist/lib/esm/components/component-ex.mjs +413 -0
  662. package/dist/lib/esm/components/console-debug-component.d.mts +30 -0
  663. package/dist/lib/esm/components/console-debug-component.mjs +73 -0
  664. package/dist/lib/esm/components/core-plugin-toggle-component.d.mts +102 -0
  665. package/dist/lib/esm/components/core-plugin-toggle-component.mjs +105 -0
  666. package/dist/lib/esm/components/disposable-component.d.mts +24 -0
  667. package/dist/lib/esm/components/disposable-component.mjs +57 -0
  668. package/dist/lib/esm/components/embed-extensions-component.d.mts +38 -0
  669. package/dist/lib/esm/components/embed-extensions-component.mjs +77 -0
  670. package/dist/lib/esm/components/generate-markdown-link-default-params-component.d.mts +42 -0
  671. package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +73 -0
  672. package/dist/lib/esm/components/index.d.mts +30 -0
  673. package/dist/lib/esm/components/index.mjs +102 -0
  674. package/dist/lib/esm/components/layout-ready-component.d.mts +48 -0
  675. package/dist/lib/esm/components/layout-ready-component.mjs +113 -0
  676. package/dist/lib/esm/components/menu-event-registrar-component.d.mts +52 -0
  677. package/dist/lib/esm/components/menu-event-registrar-component.mjs +99 -0
  678. package/dist/lib/esm/components/monkey-around-component.d.mts +241 -0
  679. package/dist/lib/esm/components/monkey-around-component.mjs +146 -0
  680. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.d.mts +150 -0
  681. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +227 -0
  682. package/dist/lib/esm/components/plugin-context-component.d.mts +36 -0
  683. package/dist/lib/esm/components/plugin-context-component.mjs +86 -0
  684. package/dist/lib/esm/components/plugin-gate-component.d.mts +332 -0
  685. package/dist/lib/esm/components/plugin-gate-component.mjs +464 -0
  686. package/dist/lib/esm/components/plugin-notice-component.d.mts +362 -0
  687. package/dist/lib/esm/components/plugin-notice-component.mjs +535 -0
  688. package/dist/lib/esm/components/plugin-settings-component.d.mts +362 -0
  689. package/dist/lib/esm/components/plugin-settings-component.mjs +554 -0
  690. package/dist/lib/esm/components/plugin-settings-tab-component.d.mts +39 -0
  691. package/dist/lib/esm/components/plugin-settings-tab-component.mjs +73 -0
  692. package/dist/lib/esm/components/plugin-suggestion-component.d.mts +162 -0
  693. package/dist/lib/esm/components/plugin-suggestion-component.mjs +184 -0
  694. package/dist/lib/esm/components/pointer-position-component.d.mts +29 -0
  695. package/dist/lib/esm/components/pointer-position-component.mjs +69 -0
  696. package/dist/lib/esm/components/registry-component.d.mts +37 -0
  697. package/dist/lib/esm/components/registry-component.mjs +90 -0
  698. package/dist/lib/esm/components/release-notes-component.d.mts +129 -0
  699. package/dist/lib/esm/components/release-notes-component.mjs +128 -0
  700. package/dist/lib/esm/components/rename-delete-handler-component.d.mts +165 -0
  701. package/dist/lib/esm/components/rename-delete-handler-component.mjs +1230 -0
  702. package/dist/lib/esm/components/rmdir-guard-component.d.mts +76 -0
  703. package/dist/lib/esm/components/rmdir-guard-component.mjs +92 -0
  704. package/dist/lib/esm/components/settings-migration-component.d.mts +120 -0
  705. package/dist/lib/esm/components/settings-migration-component.mjs +125 -0
  706. package/dist/lib/esm/components/syntax-highlighting-component.d.mts +149 -0
  707. package/dist/lib/esm/components/syntax-highlighting-component.mjs +151 -0
  708. package/dist/lib/esm/components/templates-language-component.d.mts +124 -0
  709. package/dist/lib/esm/components/templates-language-component.mjs +179 -0
  710. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.d.mts +22 -0
  711. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +149 -0
  712. package/dist/lib/esm/constructors/index.d.mts +2 -0
  713. package/dist/lib/esm/constructors/index.mjs +46 -0
  714. package/dist/lib/esm/css-class.d.mts +278 -0
  715. package/dist/lib/esm/css-class.mjs +111 -0
  716. package/dist/lib/esm/data-handler.d.mts +49 -0
  717. package/dist/lib/esm/data-handler.mjs +73 -0
  718. package/dist/lib/esm/dataview-link.d.mts +42 -0
  719. package/dist/lib/esm/dataview-link.mjs +66 -0
  720. package/dist/lib/esm/dataview.d.mts +249 -0
  721. package/dist/lib/esm/dataview.mjs +280 -0
  722. package/dist/lib/esm/debug.d.mts +19 -0
  723. package/dist/lib/esm/debug.mjs +51 -0
  724. package/dist/lib/esm/demo-vault-helper-settings.d.mts +29 -0
  725. package/dist/lib/esm/demo-vault-helper-settings.mjs +42 -0
  726. package/dist/lib/esm/demo-vault-helper.d.mts +61 -0
  727. package/dist/lib/esm/demo-vault-helper.mjs +142 -0
  728. package/dist/lib/esm/demo-vault-naming.d.mts +54 -0
  729. package/dist/lib/esm/demo-vault-naming.mjs +59 -0
  730. package/dist/lib/esm/desktop-demo-vault-opener.d.mts +76 -0
  731. package/dist/lib/esm/desktop-demo-vault-opener.mjs +266 -0
  732. package/dist/lib/esm/desktop-trusted-input.d.mts +288 -0
  733. package/dist/lib/esm/desktop-trusted-input.mjs +198 -0
  734. package/dist/lib/esm/editor-extension-registrar.d.mts +37 -0
  735. package/dist/lib/esm/editor-extension-registrar.mjs +65 -0
  736. package/dist/lib/esm/editor-suggest-registrar.d.mts +36 -0
  737. package/dist/lib/esm/editor-suggest-registrar.mjs +68 -0
  738. package/dist/lib/esm/editor.d.mts +45 -0
  739. package/dist/lib/esm/editor.mjs +107 -0
  740. package/dist/lib/esm/events.d.mts +98 -0
  741. package/dist/lib/esm/events.mjs +73 -0
  742. package/dist/lib/esm/extensions-registrar.d.mts +51 -0
  743. package/dist/lib/esm/extensions-registrar.mjs +65 -0
  744. package/dist/lib/esm/file-change.d.mts +156 -0
  745. package/dist/lib/esm/file-change.mjs +473 -0
  746. package/dist/lib/esm/file-explorer.d.mts +34 -0
  747. package/dist/lib/esm/file-explorer.mjs +60 -0
  748. package/dist/lib/esm/file-manager.d.mts +123 -0
  749. package/dist/lib/esm/file-manager.mjs +161 -0
  750. package/dist/lib/esm/file-system.d.mts +554 -0
  751. package/dist/lib/esm/file-system.mjs +458 -0
  752. package/dist/lib/esm/folder-note.d.mts +166 -0
  753. package/dist/lib/esm/folder-note.mjs +161 -0
  754. package/dist/lib/esm/frontmatter-formatting.d.mts +44 -0
  755. package/dist/lib/esm/frontmatter-formatting.mjs +368 -0
  756. package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +34 -0
  757. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +61 -0
  758. package/dist/lib/esm/frontmatter.d.mts +145 -0
  759. package/dist/lib/esm/frontmatter.mjs +174 -0
  760. package/dist/lib/esm/generated-during-build.d.mts +25 -0
  761. package/dist/lib/esm/generated-during-build.mjs +48 -0
  762. package/dist/lib/esm/hover-link-source-registrar.d.mts +52 -0
  763. package/dist/lib/esm/hover-link-source-registrar.mjs +65 -0
  764. package/dist/lib/esm/html-element.d.mts +98 -0
  765. package/dist/lib/esm/html-element.mjs +86 -0
  766. package/dist/lib/esm/i18n/custom-type-options.d.mts +38 -0
  767. package/dist/lib/esm/i18n/custom-type-options.mjs +43 -0
  768. package/dist/lib/esm/i18n/default-translations.d.mts +15 -0
  769. package/dist/lib/esm/i18n/default-translations.mjs +43 -0
  770. package/dist/lib/esm/i18n/i18n.d.mts +38 -0
  771. package/dist/lib/esm/i18n/i18n.mjs +89 -0
  772. package/dist/lib/esm/i18n/index.d.mts +5 -0
  773. package/dist/lib/esm/i18n/index.mjs +52 -0
  774. package/dist/lib/esm/i18n/locales/en.d.mts +91 -0
  775. package/dist/lib/esm/i18n/locales/en.mjs +127 -0
  776. package/dist/lib/esm/i18n/locales/index.d.mts +3 -0
  777. package/dist/lib/esm/i18n/locales/index.mjs +48 -0
  778. package/dist/lib/esm/i18n/locales/translations-map.d.mts +100 -0
  779. package/dist/lib/esm/i18n/locales/translations-map.mjs +52 -0
  780. package/dist/lib/esm/index.d.mts +96 -0
  781. package/dist/lib/esm/index.mjs +234 -0
  782. package/dist/lib/esm/is-in-obsidian.d.mts +12 -0
  783. package/dist/lib/esm/is-in-obsidian.mjs +59 -0
  784. package/dist/lib/esm/library-styles.d.mts +56 -0
  785. package/dist/lib/esm/library-styles.mjs +72 -0
  786. package/dist/lib/esm/library.d.mts +57 -0
  787. package/dist/lib/esm/library.mjs +83 -0
  788. package/dist/lib/esm/link-name.d.mts +23 -0
  789. package/dist/lib/esm/link-name.mjs +48 -0
  790. package/dist/lib/esm/link-update-progress.d.mts +32 -0
  791. package/dist/lib/esm/link-update-progress.mjs +42 -0
  792. package/dist/lib/esm/link.d.mts +1369 -0
  793. package/dist/lib/esm/link.mjs +988 -0
  794. package/dist/lib/esm/logger.d.mts +37 -0
  795. package/dist/lib/esm/logger.mjs +115 -0
  796. package/dist/lib/esm/loop.d.mts +104 -0
  797. package/dist/lib/esm/loop.mjs +151 -0
  798. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +62 -0
  799. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +69 -0
  800. package/dist/lib/esm/markdown-code-block-processor.d.mts +137 -0
  801. package/dist/lib/esm/markdown-code-block-processor.mjs +356 -0
  802. package/dist/lib/esm/markdown-post-processor-registrar.d.mts +59 -0
  803. package/dist/lib/esm/markdown-post-processor-registrar.mjs +66 -0
  804. package/dist/lib/esm/markdown-view.d.mts +14 -0
  805. package/dist/lib/esm/markdown-view.mjs +54 -0
  806. package/dist/lib/esm/markdown.d.mts +226 -0
  807. package/dist/lib/esm/markdown.mjs +391 -0
  808. package/dist/lib/esm/menu-event-registrar.d.mts +84 -0
  809. package/dist/lib/esm/menu-event-registrar.mjs +42 -0
  810. package/dist/lib/esm/metadata-cache.d.mts +359 -0
  811. package/dist/lib/esm/metadata-cache.mjs +454 -0
  812. package/dist/lib/esm/mobile-trusted-input.d.mts +98 -0
  813. package/dist/lib/esm/mobile-trusted-input.mjs +82 -0
  814. package/dist/lib/esm/modals/alert.d.mts +35 -0
  815. package/dist/lib/esm/modals/alert.mjs +84 -0
  816. package/dist/lib/esm/modals/confirm.d.mts +39 -0
  817. package/dist/lib/esm/modals/confirm.mjs +94 -0
  818. package/dist/lib/esm/modals/index.d.mts +10 -0
  819. package/dist/lib/esm/modals/index.mjs +62 -0
  820. package/dist/lib/esm/modals/minimizable-modal.d.mts +129 -0
  821. package/dist/lib/esm/modals/minimizable-modal.mjs +348 -0
  822. package/dist/lib/esm/modals/modal-command-builder.d.mts +285 -0
  823. package/dist/lib/esm/modals/modal-command-builder.mjs +363 -0
  824. package/dist/lib/esm/modals/modal.d.mts +64 -0
  825. package/dist/lib/esm/modals/modal.mjs +78 -0
  826. package/dist/lib/esm/modals/prompt.d.mts +83 -0
  827. package/dist/lib/esm/modals/prompt.mjs +168 -0
  828. package/dist/lib/esm/modals/select-item.d.mts +55 -0
  829. package/dist/lib/esm/modals/select-item.mjs +104 -0
  830. package/dist/lib/esm/modals/select-option.d.mts +65 -0
  831. package/dist/lib/esm/modals/select-option.mjs +95 -0
  832. package/dist/lib/esm/modals/suggest-modal-command-builder.d.mts +35 -0
  833. package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +47 -0
  834. package/dist/lib/esm/note-priority.d.mts +154 -0
  835. package/dist/lib/esm/note-priority.mjs +135 -0
  836. package/dist/lib/esm/notebook-navigator.d.mts +132 -0
  837. package/dist/lib/esm/notebook-navigator.mjs +64 -0
  838. package/dist/lib/esm/obsidian-dev-utils-state.d.mts +42 -0
  839. package/dist/lib/esm/obsidian-dev-utils-state.mjs +76 -0
  840. package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +55 -0
  841. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +68 -0
  842. package/dist/lib/esm/obsidian-settings.d.mts +62 -0
  843. package/dist/lib/esm/obsidian-settings.mjs +81 -0
  844. package/dist/lib/esm/parse-link.d.mts +288 -0
  845. package/dist/lib/esm/parse-link.mjs +428 -0
  846. package/dist/lib/esm/path-settings.d.mts +56 -0
  847. package/dist/lib/esm/path-settings.mjs +176 -0
  848. package/dist/lib/esm/pdf.d.mts +26 -0
  849. package/dist/lib/esm/pdf.mjs +76 -0
  850. package/dist/lib/esm/plugin/index.d.mts +9 -0
  851. package/dist/lib/esm/plugin/index.mjs +60 -0
  852. package/dist/lib/esm/plugin/plugin-api.d.mts +413 -0
  853. package/dist/lib/esm/plugin/plugin-api.mjs +422 -0
  854. package/dist/lib/esm/plugin/plugin-context.d.mts +27 -0
  855. package/dist/lib/esm/plugin/plugin-context.mjs +101 -0
  856. package/dist/lib/esm/plugin/plugin-event-source.d.mts +97 -0
  857. package/dist/lib/esm/plugin/plugin-event-source.mjs +129 -0
  858. package/dist/lib/esm/plugin/plugin-install-state.d.mts +113 -0
  859. package/dist/lib/esm/plugin/plugin-install-state.mjs +101 -0
  860. package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +127 -0
  861. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +52 -0
  862. package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +368 -0
  863. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +527 -0
  864. package/dist/lib/esm/plugin/plugin.d.mts +363 -0
  865. package/dist/lib/esm/plugin/plugin.mjs +611 -0
  866. package/dist/lib/esm/plugin/settings-migration-api.d.mts +91 -0
  867. package/dist/lib/esm/plugin/settings-migration-api.mjs +42 -0
  868. package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +64 -0
  869. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +66 -0
  870. package/dist/lib/esm/popovers/field-popover.d.mts +75 -0
  871. package/dist/lib/esm/popovers/field-popover.mjs +88 -0
  872. package/dist/lib/esm/popovers/index.d.mts +4 -0
  873. package/dist/lib/esm/popovers/index.mjs +50 -0
  874. package/dist/lib/esm/popovers/popover-anchor.d.mts +67 -0
  875. package/dist/lib/esm/popovers/popover-anchor.mjs +82 -0
  876. package/dist/lib/esm/popovers/popover.d.mts +78 -0
  877. package/dist/lib/esm/popovers/popover.mjs +132 -0
  878. package/dist/lib/esm/property-entry.d.mts +43 -0
  879. package/dist/lib/esm/property-entry.mjs +73 -0
  880. package/dist/lib/esm/queue.d.mts +93 -0
  881. package/dist/lib/esm/queue.mjs +122 -0
  882. package/dist/lib/esm/react/app-context.d.mts +24 -0
  883. package/dist/lib/esm/react/app-context.mjs +56 -0
  884. package/dist/lib/esm/react/index.d.mts +2 -0
  885. package/dist/lib/esm/react/index.mjs +46 -0
  886. package/dist/lib/esm/reference.d.mts +116 -0
  887. package/dist/lib/esm/reference.mjs +87 -0
  888. package/dist/lib/esm/resource-lock.d.mts +318 -0
  889. package/dist/lib/esm/resource-lock.mjs +1006 -0
  890. package/dist/lib/esm/resource-url.d.mts +31 -0
  891. package/dist/lib/esm/resource-url.mjs +59 -0
  892. package/dist/lib/esm/ribbon-icon-registrar.d.mts +60 -0
  893. package/dist/lib/esm/ribbon-icon-registrar.mjs +66 -0
  894. package/dist/lib/esm/setting-components/checkbox-component.d.mts +69 -0
  895. package/dist/lib/esm/setting-components/checkbox-component.mjs +119 -0
  896. package/dist/lib/esm/setting-components/code-highlighter-component.d.mts +132 -0
  897. package/dist/lib/esm/setting-components/code-highlighter-component.mjs +287 -0
  898. package/dist/lib/esm/setting-components/date-component.d.mts +38 -0
  899. package/dist/lib/esm/setting-components/date-component.mjs +83 -0
  900. package/dist/lib/esm/setting-components/date-time-component.d.mts +38 -0
  901. package/dist/lib/esm/setting-components/date-time-component.mjs +83 -0
  902. package/dist/lib/esm/setting-components/email-component.d.mts +49 -0
  903. package/dist/lib/esm/setting-components/email-component.mjs +94 -0
  904. package/dist/lib/esm/setting-components/file-component.d.mts +43 -0
  905. package/dist/lib/esm/setting-components/file-component.mjs +86 -0
  906. package/dist/lib/esm/setting-components/index.d.mts +27 -0
  907. package/dist/lib/esm/setting-components/index.mjs +96 -0
  908. package/dist/lib/esm/setting-components/month-component.d.mts +51 -0
  909. package/dist/lib/esm/setting-components/month-component.mjs +91 -0
  910. package/dist/lib/esm/setting-components/multiple-dropdown-component.d.mts +92 -0
  911. package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +159 -0
  912. package/dist/lib/esm/setting-components/multiple-email-component.d.mts +38 -0
  913. package/dist/lib/esm/setting-components/multiple-email-component.mjs +80 -0
  914. package/dist/lib/esm/setting-components/multiple-file-component.d.mts +43 -0
  915. package/dist/lib/esm/setting-components/multiple-file-component.mjs +88 -0
  916. package/dist/lib/esm/setting-components/multiple-text-component.d.mts +109 -0
  917. package/dist/lib/esm/setting-components/multiple-text-component.mjs +178 -0
  918. package/dist/lib/esm/setting-components/number-component.d.mts +56 -0
  919. package/dist/lib/esm/setting-components/number-component.mjs +104 -0
  920. package/dist/lib/esm/setting-components/password-component.d.mts +38 -0
  921. package/dist/lib/esm/setting-components/password-component.mjs +80 -0
  922. package/dist/lib/esm/setting-components/setting-component-wrapper.d.mts +13 -0
  923. package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +63 -0
  924. package/dist/lib/esm/setting-components/telephone-component.d.mts +51 -0
  925. package/dist/lib/esm/setting-components/telephone-component.mjs +94 -0
  926. package/dist/lib/esm/setting-components/text-based-component.d.mts +38 -0
  927. package/dist/lib/esm/setting-components/text-based-component.mjs +73 -0
  928. package/dist/lib/esm/setting-components/time-component.d.mts +38 -0
  929. package/dist/lib/esm/setting-components/time-component.mjs +88 -0
  930. package/dist/lib/esm/setting-components/tri-state-checkbox-component.d.mts +69 -0
  931. package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +120 -0
  932. package/dist/lib/esm/setting-components/typed-dropdown-component.d.mts +97 -0
  933. package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +168 -0
  934. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.d.mts +99 -0
  935. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +167 -0
  936. package/dist/lib/esm/setting-components/typed-range-text-component.d.mts +35 -0
  937. package/dist/lib/esm/setting-components/typed-range-text-component.mjs +78 -0
  938. package/dist/lib/esm/setting-components/typed-text-component.d.mts +100 -0
  939. package/dist/lib/esm/setting-components/typed-text-component.mjs +138 -0
  940. package/dist/lib/esm/setting-components/url-component.d.mts +49 -0
  941. package/dist/lib/esm/setting-components/url-component.mjs +94 -0
  942. package/dist/lib/esm/setting-components/validator-component.d.mts +23 -0
  943. package/dist/lib/esm/setting-components/validator-component.mjs +142 -0
  944. package/dist/lib/esm/setting-components/value-component-with-change-tracking.d.mts +20 -0
  945. package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +42 -0
  946. package/dist/lib/esm/setting-components/week-component.d.mts +51 -0
  947. package/dist/lib/esm/setting-components/week-component.mjs +91 -0
  948. package/dist/lib/esm/setting-ex.d.mts +198 -0
  949. package/dist/lib/esm/setting-ex.mjs +274 -0
  950. package/dist/lib/esm/setting-group-ex.d.mts +26 -0
  951. package/dist/lib/esm/setting-group-ex.mjs +68 -0
  952. package/dist/lib/esm/status-bar-item-registrar.d.mts +36 -0
  953. package/dist/lib/esm/status-bar-item-registrar.mjs +65 -0
  954. package/dist/lib/esm/templater.d.mts +284 -0
  955. package/dist/lib/esm/templater.mjs +173 -0
  956. package/dist/lib/esm/transformers/duration-transformer.d.mts +39 -0
  957. package/dist/lib/esm/transformers/duration-transformer.mjs +85 -0
  958. package/dist/lib/esm/transformers/index.d.mts +2 -0
  959. package/dist/lib/esm/transformers/index.mjs +46 -0
  960. package/dist/lib/esm/trusted-input.d.mts +131 -0
  961. package/dist/lib/esm/trusted-input.mjs +83 -0
  962. package/dist/lib/esm/validation.d.mts +87 -0
  963. package/dist/lib/esm/validation.mjs +87 -0
  964. package/dist/lib/esm/vault-delete.d.mts +82 -0
  965. package/dist/lib/esm/vault-delete.mjs +132 -0
  966. package/dist/lib/esm/vault-transaction.d.mts +163 -0
  967. package/dist/lib/esm/vault-transaction.mjs +325 -0
  968. package/dist/lib/esm/vault.d.mts +506 -0
  969. package/dist/lib/esm/vault.mjs +604 -0
  970. package/dist/lib/esm/view-registrar.d.mts +52 -0
  971. package/dist/lib/esm/view-registrar.mjs +65 -0
  972. package/dist/lib/esm/workspace.d.mts +81 -0
  973. package/dist/lib/esm/workspace.mjs +84 -0
  974. package/dist/styles.css +497 -0
  975. package/i18n/custom-type-options/package.json +6 -0
  976. package/i18n/default-translations/package.json +6 -0
  977. package/i18n/i18n/package.json +6 -0
  978. package/i18n/index/package.json +6 -0
  979. package/i18n/locales/en/package.json +6 -0
  980. package/i18n/locales/index/package.json +6 -0
  981. package/i18n/locales/package.json +6 -0
  982. package/i18n/locales/translations-map/package.json +6 -0
  983. package/i18n/package.json +6 -0
  984. package/modals/alert/package.json +6 -0
  985. package/modals/confirm/package.json +6 -0
  986. package/modals/index/package.json +6 -0
  987. package/modals/minimizable-modal/package.json +6 -0
  988. package/modals/modal/package.json +6 -0
  989. package/modals/modal-command-builder/package.json +6 -0
  990. package/modals/package.json +6 -0
  991. package/modals/prompt/package.json +6 -0
  992. package/modals/select-item/package.json +6 -0
  993. package/modals/select-option/package.json +6 -0
  994. package/modals/suggest-modal-command-builder/package.json +6 -0
  995. package/package.json +533 -13
  996. package/plugin/index/package.json +6 -0
  997. package/plugin/package.json +6 -0
  998. package/plugin/plugin/package.json +6 -0
  999. package/plugin/plugin-api/package.json +6 -0
  1000. package/plugin/plugin-context/package.json +6 -0
  1001. package/plugin/plugin-event-source/package.json +6 -0
  1002. package/plugin/plugin-install-state/package.json +6 -0
  1003. package/plugin/plugin-lifecycle-events/package.json +6 -0
  1004. package/plugin/plugin-settings-tab/package.json +6 -0
  1005. package/plugin/settings-migration-api/package.json +6 -0
  1006. package/popovers/field-popover/package.json +6 -0
  1007. package/popovers/index/package.json +6 -0
  1008. package/popovers/package.json +6 -0
  1009. package/popovers/popover/package.json +6 -0
  1010. package/popovers/popover-anchor/package.json +6 -0
  1011. package/react/app-context/package.json +6 -0
  1012. package/react/index/package.json +6 -0
  1013. package/react/package.json +6 -0
  1014. package/setting-components/checkbox-component/package.json +6 -0
  1015. package/setting-components/code-highlighter-component/package.json +6 -0
  1016. package/setting-components/date-component/package.json +6 -0
  1017. package/setting-components/date-time-component/package.json +6 -0
  1018. package/setting-components/email-component/package.json +6 -0
  1019. package/setting-components/file-component/package.json +6 -0
  1020. package/setting-components/index/package.json +6 -0
  1021. package/setting-components/month-component/package.json +6 -0
  1022. package/setting-components/multiple-dropdown-component/package.json +6 -0
  1023. package/setting-components/multiple-email-component/package.json +6 -0
  1024. package/setting-components/multiple-file-component/package.json +6 -0
  1025. package/setting-components/multiple-text-component/package.json +6 -0
  1026. package/setting-components/number-component/package.json +6 -0
  1027. package/setting-components/package.json +6 -0
  1028. package/setting-components/password-component/package.json +6 -0
  1029. package/setting-components/setting-component-wrapper/package.json +6 -0
  1030. package/setting-components/telephone-component/package.json +6 -0
  1031. package/setting-components/text-based-component/package.json +6 -0
  1032. package/setting-components/time-component/package.json +6 -0
  1033. package/setting-components/tri-state-checkbox-component/package.json +6 -0
  1034. package/setting-components/typed-dropdown-component/package.json +6 -0
  1035. package/setting-components/typed-multiple-dropdown-component/package.json +6 -0
  1036. package/setting-components/typed-range-text-component/package.json +6 -0
  1037. package/setting-components/typed-text-component/package.json +6 -0
  1038. package/setting-components/url-component/package.json +6 -0
  1039. package/setting-components/validator-component/package.json +6 -0
  1040. package/setting-components/value-component-with-change-tracking/package.json +6 -0
  1041. package/setting-components/week-component/package.json +6 -0
  1042. package/transformers/duration-transformer/package.json +6 -0
  1043. package/transformers/index/package.json +6 -0
  1044. package/transformers/package.json +6 -0
@@ -0,0 +1,629 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
+ }
11
+
12
+ function ensureBrowserProcess() {
13
+ const browserProcess = {
14
+ browser: true,
15
+ cwd() {
16
+ return "/";
17
+ },
18
+ env: {},
19
+ platform: "android"
20
+ };
21
+ const existingProcess = globalThis.process;
22
+ if (!existingProcess) {
23
+ globalThis.process = browserProcess;
24
+ return;
25
+ }
26
+ if (existingProcess.versions?.node) {
27
+ return;
28
+ }
29
+ const existingProcessRecord = existingProcess;
30
+ for (const [key, value] of Object.entries(browserProcess)) {
31
+ existingProcessRecord[key] ??= value;
32
+ }
33
+ existingProcessRecord["browser"] = true;
34
+ }
35
+
36
+ function keepName($unknown) {
37
+ return $unknown;
38
+ }
39
+
40
+ (function initCjs() {
41
+ const globalThisRecord = globalThis;
42
+ ensureDisposeSymbols();
43
+ globalThisRecord["__name"] ??= keepName;
44
+ globalThisRecord["__extractDefault"] ??= extractDefault;
45
+ ensureBrowserProcess();
46
+ function extractDefault(module) {
47
+ return module && module.__esModule && "default" in module ? module.default : module;
48
+ }
49
+ })();
50
+ })();
51
+ (function patchObsidianRequire() {
52
+ const originalRequire = require;
53
+ if (!originalRequire || originalRequire.__isPatched) {
54
+ return;
55
+ }
56
+ require = Object.assign(
57
+ (id) => requirePatched(id),
58
+ originalRequire,
59
+ {
60
+ __isPatched: true
61
+ }
62
+ );
63
+ function extractDefault(module) {
64
+ return module && module.__esModule && "default" in module ? module.default : module;
65
+ }
66
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
67
+ "@codemirror/autocomplete",
68
+ "@codemirror/collab",
69
+ "@codemirror/commands",
70
+ "@codemirror/language",
71
+ "@codemirror/lint",
72
+ "@codemirror/search",
73
+ "@codemirror/state",
74
+ "@codemirror/text",
75
+ "@codemirror/view",
76
+ "@lezer/common",
77
+ "@lezer/highlight",
78
+ "@lezer/lr",
79
+ "obsidian"
80
+ ]);
81
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
82
+ "@codemirror/closebrackets",
83
+ "@codemirror/comment",
84
+ "@codemirror/fold",
85
+ "@codemirror/gutter",
86
+ "@codemirror/highlight",
87
+ "@codemirror/history",
88
+ "@codemirror/matchbrackets",
89
+ "@codemirror/panel",
90
+ "@codemirror/rangeset",
91
+ "@codemirror/rectangular-selection",
92
+ "@codemirror/stream-parser",
93
+ "@codemirror/tooltip"
94
+ ]);
95
+ function requirePatched(id) {
96
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
97
+ return originalRequire?.(id);
98
+ }
99
+ if (globalThis.app.isMobile) {
100
+ if (id === "process" || id === "node:process") {
101
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
102
+ return process;
103
+ }
104
+ } else {
105
+ const module = originalRequire?.(id);
106
+ if (module) {
107
+ return extractDefault(module);
108
+ }
109
+ }
110
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
111
+ return {};
112
+ }
113
+ })();
114
+
115
+ "use strict";
116
+ var __defProp = Object.defineProperty;
117
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
118
+ var __getOwnPropNames = Object.getOwnPropertyNames;
119
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
120
+ var __export = (target, all) => {
121
+ for (var name in all)
122
+ __defProp(target, name, { get: all[name], enumerable: true });
123
+ };
124
+ var __copyProps = (to, from, except, desc) => {
125
+ if (from && typeof from === "object" || typeof from === "function") {
126
+ for (let key of __getOwnPropNames(from))
127
+ if (!__hasOwnProp.call(to, key) && key !== except)
128
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
129
+ }
130
+ return to;
131
+ };
132
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
133
+ var plugin_notice_component_exports = {};
134
+ __export(plugin_notice_component_exports, {
135
+ PluginNoticeComponent: () => PluginNoticeComponent,
136
+ PluginNoticeMode: () => PluginNoticeMode
137
+ });
138
+ module.exports = __toCommonJS(plugin_notice_component_exports);
139
+ var import_array = require('@mnaoumov/typescript-lib/array');
140
+ var import_async = require('@mnaoumov/typescript-lib/async');
141
+ var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
142
+ var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
143
+ var import_value_provider = require('@mnaoumov/typescript-lib/value-provider');
144
+ var import_obsidian = require('obsidian');
145
+ var import_css_class = require('../css-class.cjs');
146
+ var import_i18n = require('../i18n/i18n.cjs');
147
+ var import_obsidian_dev_utils_state = require('../obsidian-dev-utils-state.cjs');
148
+ var import_plugin_context = require('../plugin/plugin-context.cjs');
149
+ var import_component_ex = require('./component-ex.cjs');
150
+ var import_monkey_around_component = require('./monkey-around-component.cjs');
151
+ const PERMANENT_NOTICES_STATE_KEY = "plugin-notice-component:permanent-notices";
152
+ const PERMANENT_NOTICE_DURATION_IN_MILLISECONDS = 0;
153
+ const DEFAULT_DELAY_BEFORE_SHOW_IN_MILLISECONDS = 500;
154
+ const OBSIDIAN_DEFAULT_NOTICE_DURATION_IN_MILLISECONDS = 4e3;
155
+ const INTERACTIVE_ELEMENT_SELECTOR = 'a, button, input, select, textarea, label, [contenteditable="true"], [role="button"], [role="link"], [role="checkbox"], [role="tab"], [role="menuitem"]';
156
+ var PluginNoticeMode = /* @__PURE__ */ ((PluginNoticeMode2) => {
157
+ PluginNoticeMode2["Append"] = "append";
158
+ PluginNoticeMode2["Replace"] = "replace";
159
+ PluginNoticeMode2["Separate"] = "separate";
160
+ return PluginNoticeMode2;
161
+ })(PluginNoticeMode || {});
162
+ class PluginNoticeComponent extends import_component_ex.ComponentEx {
163
+ /**
164
+ * The Obsidian app instance.
165
+ */
166
+ app;
167
+ /**
168
+ * The plugin name (shown as prefix in notices).
169
+ */
170
+ pluginName;
171
+ closeButtonClickedNotices = /* @__PURE__ */ new WeakSet();
172
+ notice = null;
173
+ pendingTimerCancellations = /* @__PURE__ */ new Set();
174
+ standaloneNotices = /* @__PURE__ */ new Set();
175
+ userClickedNotices = /* @__PURE__ */ new WeakSet();
176
+ /**
177
+ * Creates a new plugin notice component.
178
+ *
179
+ * @param params - The constructor parameters.
180
+ */
181
+ constructor(params) {
182
+ super();
183
+ this.app = params.app;
184
+ this.pluginName = params.pluginName;
185
+ }
186
+ /**
187
+ * Dismisses the permanent notice left over from a previous load (e.g. a previous plugin session) on load.
188
+ */
189
+ onload() {
190
+ super.onload();
191
+ const permanentNotice = this.getPermanentNotice();
192
+ permanentNotice?.hide();
193
+ this.setPermanentNotice(null);
194
+ }
195
+ /**
196
+ * Hides the current notice on unload, unless it is the permanent notice (which is meant to outlive the plugin).
197
+ */
198
+ onunload() {
199
+ for (const cancelPendingTimer of (0, import_array.snapshot)(this.pendingTimerCancellations)) {
200
+ cancelPendingTimer();
201
+ }
202
+ if (this.getPermanentNotice() !== this.notice) {
203
+ this.notice?.hide();
204
+ }
205
+ for (const standaloneNotice of this.standaloneNotices) {
206
+ standaloneNotice.hide();
207
+ }
208
+ this.standaloneNotices.clear();
209
+ }
210
+ /**
211
+ * Displays a notice message to the user.
212
+ *
213
+ * @param message - The message to display.
214
+ * @param options - The options for displaying the notice.
215
+ * @returns The notice object.
216
+ */
217
+ showNotice(message, options) {
218
+ const isPermanent = options?.isPermanent ?? false;
219
+ const shouldHideOnClick = options?.shouldHideOnClick ?? true;
220
+ const requiresExplicitClose = !shouldHideOnClick;
221
+ const mode = options?.mode ?? (requiresExplicitClose ? "separate" /* Separate */ : "replace" /* Replace */);
222
+ if (options?.mode !== void 0 && options.mode !== "separate" /* Separate */ && requiresExplicitClose) {
223
+ throw new Error("A notice that does not hide on click must be shown in the separate mode.");
224
+ }
225
+ if (mode === "separate" /* Separate */ && isPermanent) {
226
+ throw new Error("A permanent notice cannot be shown in the separate mode.");
227
+ }
228
+ const durationInMilliseconds = isPermanent || requiresExplicitClose ? PERMANENT_NOTICE_DURATION_IN_MILLISECONDS : null;
229
+ return this.showNoticeWithDuration({
230
+ durationInMilliseconds,
231
+ message,
232
+ mode,
233
+ onCloseClick: options?.onCloseClick,
234
+ onHide: options?.onHide,
235
+ requiresExplicitClose,
236
+ shouldRegisterAsPermanent: isPermanent,
237
+ shouldShowCloseButton: options?.shouldShowCloseButton ?? true
238
+ }).notice;
239
+ }
240
+ /**
241
+ * Shows a notice describing a long-running operation, but only once the operation has run for longer
242
+ * than {@link PluginNoticeComponentShowNoticeAfterDelayParams.delayInMilliseconds} — so operations
243
+ * that finish sooner never flash a notice. The notice stays until the returned {@link Disposable} is
244
+ * disposed (which also cancels the pending timer if it has not fired yet), so it can be used with
245
+ * `using`. When an {@link PluginNoticeComponentShowNoticeAfterDelayParams.abortController} is given, a
246
+ * Cancel button that aborts it is appended (and, being interactive, does not dismiss the notice).
247
+ *
248
+ * @example
249
+ * ```ts
250
+ * using _notice = pluginNoticeComponent.showNoticeAfterDelay({
251
+ * abortController,
252
+ * content: () => buildProgressFragment()
253
+ * });
254
+ * await runOperation(abortController.signal);
255
+ * ```
256
+ *
257
+ * @param params - The parameters.
258
+ * @returns A {@link PluginNoticeComponentDelayedNotice} that hides the notice (or cancels the pending
259
+ * timer) when disposed and lets the content be updated while it is shown.
260
+ */
261
+ showNoticeAfterDelay(params) {
262
+ const mode = params.mode ?? "replace" /* Replace */;
263
+ let shown = null;
264
+ let isDisposed = false;
265
+ let timerId = 0;
266
+ let currentContent = params.content;
267
+ const cancelPendingTimer = () => {
268
+ window.clearTimeout(timerId);
269
+ this.pendingTimerCancellations.delete(cancelPendingTimer);
270
+ };
271
+ const buildDelayedMessage = (content) => this.buildDelayedNoticeMessage((0, import_object_utils.normalizeOptionalProperties)({
272
+ abortController: params.abortController,
273
+ cancelButtonText: params.cancelButtonText,
274
+ content
275
+ }));
276
+ timerId = window.setTimeout(() => {
277
+ cancelPendingTimer();
278
+ (0, import_async.invokeAsyncSafely)(async () => {
279
+ let requestedContent;
280
+ let resolvedContent;
281
+ do {
282
+ requestedContent = currentContent;
283
+ resolvedContent = await (0, import_value_provider.resolveValue)(requestedContent, {});
284
+ if (isDisposed) {
285
+ return;
286
+ }
287
+ } while (requestedContent !== currentContent);
288
+ shown = this.showNoticeWithDuration({
289
+ durationInMilliseconds: PERMANENT_NOTICE_DURATION_IN_MILLISECONDS,
290
+ message: buildDelayedMessage(resolvedContent),
291
+ mode,
292
+ onCloseClick: void 0,
293
+ onHide: void 0,
294
+ requiresExplicitClose: false,
295
+ shouldRegisterAsPermanent: false,
296
+ shouldShowCloseButton: true
297
+ });
298
+ });
299
+ }, params.delayInMilliseconds ?? DEFAULT_DELAY_BEFORE_SHOW_IN_MILLISECONDS);
300
+ this.pendingTimerCancellations.add(cancelPendingTimer);
301
+ return {
302
+ setContent: (content) => {
303
+ currentContent = content;
304
+ if (!shown) {
305
+ return;
306
+ }
307
+ const rebuilt = this.buildNoticeContent({
308
+ message: buildDelayedMessage(content),
309
+ shouldPrefixWithPluginName: shown.isNoticeOwned
310
+ });
311
+ shown.contentEl.replaceWith(rebuilt.fragment);
312
+ shown = { ...shown, contentEl: rebuilt.contentEl };
313
+ },
314
+ [Symbol.dispose]: () => {
315
+ isDisposed = true;
316
+ cancelPendingTimer();
317
+ if (!shown) {
318
+ return;
319
+ }
320
+ if (shown.isNoticeOwned) {
321
+ shown.notice.hide();
322
+ this.standaloneNotices.delete(shown.notice);
323
+ if (this.notice === shown.notice) {
324
+ this.notice = null;
325
+ }
326
+ } else {
327
+ shown.contentEl.remove();
328
+ }
329
+ }
330
+ };
331
+ }
332
+ /**
333
+ * Appends a close (X) button to the notice content. Clicking it fires
334
+ * {@link PluginNoticeComponentAppendCloseButtonParams.onCloseClick} (which may cancel the close); if
335
+ * not cancelled, it hides the notice and drops it from the standalone-notice tracking set. The hide is
336
+ * marked as a close-button click so {@link PluginNoticeComponentShowNoticeOptions.onHide} can
337
+ * distinguish it.
338
+ *
339
+ * @param params - The parameters.
340
+ */
341
+ appendCloseButton(params) {
342
+ const { contentEl, getNotice, onCloseClick } = params;
343
+ const closeButtonEl = contentEl.createEl("button", {
344
+ attr: { "aria-label": (0, import_i18n.t)(($) => $.obsidianDevUtils.notices.closeAriaLabel) }
345
+ });
346
+ (0, import_plugin_context.addPluginCssClasses)(closeButtonEl, import_css_class.CssClass.PluginNoticeCloseButton);
347
+ closeButtonEl.addClasses([import_css_class.CssClass.ClickableIcon, import_css_class.CssClass.ModalHeaderButton]);
348
+ (0, import_obsidian.setIcon)(closeButtonEl, "x");
349
+ closeButtonEl.addEventListener("click", ($event) => {
350
+ $event.stopPropagation();
351
+ (0, import_async.invokeAsyncSafely)(async () => {
352
+ let isCancelled = false;
353
+ await onCloseClick?.({
354
+ cancel: () => {
355
+ isCancelled = true;
356
+ }
357
+ });
358
+ if (isCancelled) {
359
+ return;
360
+ }
361
+ const notice = (0, import_type_guards.ensureNonNullable)(getNotice());
362
+ this.closeButtonClickedNotices.add(notice);
363
+ notice.hide();
364
+ this.standaloneNotices.delete(notice);
365
+ });
366
+ });
367
+ }
368
+ /**
369
+ * Adds a message to the notice currently in the per-plugin slot, so both messages stay on screen in a
370
+ * single notice.
371
+ *
372
+ * The appended message carries no plugin-name prefix — the notice already opens with one, and
373
+ * repeating it on every line reads as noise. It is wrapped like any other notice content, so a link or
374
+ * button inside it still keeps the notice open when clicked.
375
+ *
376
+ * Appending restarts the notice's countdown ({@link Notice.setAutoHide}), so the new message gets a
377
+ * full duration instead of inheriting what was left of the current one — a line appended a moment
378
+ * before the notice expires would otherwise flash and vanish.
379
+ *
380
+ * @param params - The parameters.
381
+ * @returns The {@link PluginNoticeComponentShownNotice} describing the joined notice, or `null` when
382
+ * there is nothing on screen to append to — the slot is empty, or its notice has since been dismissed
383
+ * — and the caller should show a new notice instead.
384
+ */
385
+ appendToCurrentNotice(params) {
386
+ const { durationInMilliseconds, message, onHide, shouldRegisterAsPermanent } = params;
387
+ const currentNotice = this.notice;
388
+ if (!currentNotice?.containerEl.isShown()) {
389
+ return null;
390
+ }
391
+ const { contentEl, fragment } = this.buildNoticeContent({ message, shouldPrefixWithPluginName: false });
392
+ currentNotice.messageEl.append(fragment);
393
+ currentNotice.setAutoHide(durationInMilliseconds ?? OBSIDIAN_DEFAULT_NOTICE_DURATION_IN_MILLISECONDS);
394
+ this.wireOnHide(currentNotice, onHide);
395
+ if (shouldRegisterAsPermanent) {
396
+ this.setPermanentNotice(currentNotice);
397
+ }
398
+ return { contentEl, isNoticeOwned: false, notice: currentNotice };
399
+ }
400
+ /**
401
+ * Builds the message for a delayed notice: the resolved content, optionally followed by a Cancel
402
+ * button that aborts the provided controller when clicked.
403
+ *
404
+ * @param params - The parameters.
405
+ * @returns A {@link DocumentFragment} holding the content and, if requested, a Cancel button.
406
+ */
407
+ buildDelayedNoticeMessage(params) {
408
+ const { abortController, cancelButtonText, content } = params;
409
+ const fragment = createFragment();
410
+ if (typeof content === "string") {
411
+ fragment.appendText(content);
412
+ } else {
413
+ fragment.append(content);
414
+ }
415
+ if (abortController) {
416
+ const cancelButton = new import_obsidian.ButtonComponent(createDiv());
417
+ cancelButton.setButtonText(cancelButtonText ?? (0, import_i18n.t)(($) => $.obsidianDevUtils.buttons.cancel));
418
+ (0, import_plugin_context.addPluginCssClasses)(cancelButton.buttonEl, import_css_class.CssClass.CancelButton);
419
+ cancelButton.buttonEl.addEventListener("click", () => {
420
+ abortController.abort();
421
+ });
422
+ fragment.append(cancelButton.buttonEl);
423
+ }
424
+ return fragment;
425
+ }
426
+ /**
427
+ * Builds the notice content wrapped in a container that keeps the notice open when an interactive
428
+ * element inside it is clicked. Obsidian dismisses a notice on any click that bubbles up to its
429
+ * element; the container intercepts clicks originating on an interactive element (a link, button,
430
+ * input, etc.) and stops them there, so the element's own handler still runs but the notice stays.
431
+ *
432
+ * @param params - The parameters.
433
+ * @returns The {@link PluginNoticeComponentNoticeContent} holding the wrapped notice content.
434
+ */
435
+ buildNoticeContent(params) {
436
+ const { getNotice, message, onCloseClick, requiresExplicitClose = false, shouldPrefixWithPluginName = true, shouldShowCloseButton = true } = params;
437
+ const fragment = createFragment();
438
+ const contentEl = fragment.createDiv();
439
+ (0, import_plugin_context.addPluginCssClasses)(contentEl, import_css_class.CssClass.PluginNoticeContent);
440
+ if (shouldPrefixWithPluginName) {
441
+ contentEl.append(this.buildPrefixedMessage(message));
442
+ } else if (typeof message === "string") {
443
+ contentEl.appendText(message);
444
+ } else {
445
+ contentEl.append(message);
446
+ }
447
+ contentEl.addEventListener("click", ($event) => {
448
+ if (requiresExplicitClose) {
449
+ $event.stopPropagation();
450
+ return;
451
+ }
452
+ if ($event.target instanceof Element && $event.target.closest(INTERACTIVE_ELEMENT_SELECTOR)) {
453
+ $event.stopPropagation();
454
+ }
455
+ });
456
+ if (requiresExplicitClose && shouldShowCloseButton) {
457
+ this.appendCloseButton((0, import_object_utils.normalizeOptionalProperties)({
458
+ contentEl,
459
+ getNotice: (0, import_type_guards.ensureNonNullable)(getNotice),
460
+ onCloseClick
461
+ }));
462
+ }
463
+ return { contentEl, fragment };
464
+ }
465
+ /**
466
+ * Builds the notice content, prefixing the message with the plugin name in a styled element so it is
467
+ * visually distinguished from the message body.
468
+ *
469
+ * @param message - The message to display after the plugin name prefix.
470
+ * @returns A {@link DocumentFragment} with the styled plugin name prefix followed by the message.
471
+ */
472
+ buildPrefixedMessage(message) {
473
+ const fragment = createFragment();
474
+ const nameEl = createSpan({ text: this.pluginName });
475
+ (0, import_plugin_context.addPluginCssClasses)(nameEl, import_css_class.CssClass.PluginNoticeName);
476
+ fragment.append(nameEl);
477
+ if (!this._loaded) {
478
+ fragment.appendText(" (unloaded)");
479
+ }
480
+ fragment.appendText("\n");
481
+ if (typeof message === "string") {
482
+ fragment.appendText(message);
483
+ } else {
484
+ fragment.append(message);
485
+ }
486
+ return fragment;
487
+ }
488
+ getPermanentNotice() {
489
+ return this.getPermanentNotices().get(this.pluginName) ?? null;
490
+ }
491
+ getPermanentNotices() {
492
+ return (0, import_obsidian_dev_utils_state.getObsidianDevUtilsState)(PERMANENT_NOTICES_STATE_KEY, /* @__PURE__ */ new Map()).value;
493
+ }
494
+ /**
495
+ * Makes a notice hard to close: marks its outer element (so the CSS neutralizes its padding) and
496
+ * installs a capture-phase click guard that stops every click except on an interactive element (a
497
+ * button, link, the close button, etc.) from reaching Obsidian's own dismiss handler — so an
498
+ * interactive child's own handler still runs while a stray click cannot dismiss the notice.
499
+ *
500
+ * @param notice - The notice to guard.
501
+ * @param requiresExplicitClose - Whether the notice requires explicit close; when `false`, nothing is
502
+ * installed.
503
+ */
504
+ installExplicitCloseGuards(notice, requiresExplicitClose) {
505
+ if (!requiresExplicitClose) {
506
+ return;
507
+ }
508
+ (0, import_plugin_context.addPluginCssClasses)(notice.containerEl, import_css_class.CssClass.PluginNoticeRequiresExplicitClose);
509
+ notice.containerEl.addEventListener("click", ($event) => {
510
+ if ($event.target instanceof Element && $event.target.closest(INTERACTIVE_ELEMENT_SELECTOR)) {
511
+ return;
512
+ }
513
+ $event.stopPropagation();
514
+ }, { capture: true });
515
+ }
516
+ /**
517
+ * Tracks a click on the notice so {@link PluginNoticeComponentShowNoticeOptions.onHide} can report a
518
+ * user dismissal. Obsidian hides a dismissible notice synchronously during the click, so a
519
+ * capture-phase listener marks the notice before that hide runs; the mark is cleared after the event
520
+ * so a later programmatic hide is not misattributed. A close-button click is tracked separately (see
521
+ * {@link PluginNoticeComponent.appendCloseButton}).
522
+ *
523
+ * @param notice - The notice to track.
524
+ */
525
+ installUserClickTracking(notice) {
526
+ notice.containerEl.addEventListener("click", () => {
527
+ this.userClickedNotices.add(notice);
528
+ queueMicrotask(() => {
529
+ this.userClickedNotices.delete(notice);
530
+ });
531
+ }, { capture: true });
532
+ }
533
+ setPermanentNotice(notice) {
534
+ const map = this.getPermanentNotices();
535
+ if (notice) {
536
+ map.set(this.pluginName, notice);
537
+ } else {
538
+ map.delete(this.pluginName);
539
+ }
540
+ }
541
+ /**
542
+ * Shows a notice with the given duration, placing it according to its {@link PluginNoticeMode}: a
543
+ * {@link PluginNoticeMode.Replace} notice takes the per-plugin slot (hiding whatever was in it, and
544
+ * optionally registering as this plugin's permanent notice), an {@link PluginNoticeMode.Append} one
545
+ * joins the notice already in the slot, and a {@link PluginNoticeMode.Separate} one is tracked on its
546
+ * own, leaving the slot untouched.
547
+ *
548
+ * @param params - The parameters.
549
+ * @returns The {@link PluginNoticeComponentShownNotice} describing where the message ended up.
550
+ */
551
+ showNoticeWithDuration(params) {
552
+ const { durationInMilliseconds, message, mode, onCloseClick, onHide, requiresExplicitClose, shouldRegisterAsPermanent, shouldShowCloseButton } = params;
553
+ const noticeDurationInMilliseconds = durationInMilliseconds ?? void 0;
554
+ if (mode === "append" /* Append */) {
555
+ const appendedNotice = this.appendToCurrentNotice((0, import_object_utils.normalizeOptionalProperties)({
556
+ durationInMilliseconds,
557
+ message,
558
+ onHide,
559
+ shouldRegisterAsPermanent
560
+ }));
561
+ if (appendedNotice) {
562
+ return appendedNotice;
563
+ }
564
+ }
565
+ const hasCloseButton = requiresExplicitClose && shouldShowCloseButton;
566
+ let builtNotice = null;
567
+ const { contentEl, fragment } = this.buildNoticeContent((0, import_object_utils.normalizeOptionalProperties)({
568
+ getNotice: hasCloseButton ? () => builtNotice : void 0,
569
+ message,
570
+ onCloseClick,
571
+ requiresExplicitClose,
572
+ shouldShowCloseButton
573
+ }));
574
+ if (mode === "separate" /* Separate */) {
575
+ builtNotice = new import_obsidian.Notice(fragment, noticeDurationInMilliseconds);
576
+ this.installExplicitCloseGuards(builtNotice, requiresExplicitClose);
577
+ this.installUserClickTracking(builtNotice);
578
+ this.wireOnHide(builtNotice, onHide);
579
+ this.standaloneNotices.add(builtNotice);
580
+ return { contentEl, isNoticeOwned: true, notice: builtNotice };
581
+ }
582
+ this.notice?.hide();
583
+ builtNotice = new import_obsidian.Notice(fragment, noticeDurationInMilliseconds);
584
+ this.notice = builtNotice;
585
+ this.installExplicitCloseGuards(builtNotice, requiresExplicitClose);
586
+ this.installUserClickTracking(builtNotice);
587
+ this.wireOnHide(builtNotice, onHide);
588
+ if (shouldRegisterAsPermanent) {
589
+ this.setPermanentNotice(builtNotice);
590
+ } else {
591
+ this.setPermanentNotice(null);
592
+ }
593
+ return { contentEl, isNoticeOwned: true, notice: builtNotice };
594
+ }
595
+ /**
596
+ * Wraps a notice's `hide` so the given callback runs the first time the notice is hidden — by the
597
+ * user, by a replacing notice, by its duration elapsing, or on unload. Does nothing when no callback
598
+ * is given.
599
+ *
600
+ * @param notice - The notice whose `hide` to wrap.
601
+ * @param onHide - The callback to invoke on the first hide, or `undefined` to skip wrapping.
602
+ */
603
+ wireOnHide(notice, onHide) {
604
+ if (!onHide) {
605
+ return;
606
+ }
607
+ const patchComponent = new import_monkey_around_component.MonkeyAroundComponent();
608
+ patchComponent.load();
609
+ patchComponent.registerMethodPatch({
610
+ $object: notice,
611
+ methodName: "hide",
612
+ once: true,
613
+ patchHandler: ({ fallback }) => {
614
+ fallback();
615
+ const isCloseButtonClicked = this.closeButtonClickedNotices.has(notice);
616
+ const isUserAction = isCloseButtonClicked || this.userClickedNotices.has(notice);
617
+ (0, import_async.invokeAsyncSafely)(async () => {
618
+ await onHide({ isCloseButtonClicked, isUserAction });
619
+ });
620
+ }
621
+ });
622
+ }
623
+ }
624
+ // Annotate the CommonJS export names for ESM import in node:
625
+ 0 && (module.exports = {
626
+ PluginNoticeComponent,
627
+ PluginNoticeMode
628
+ });
629
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDb21wb25lbnQgdGhhdCBtYW5hZ2VzIGRpc3BsYXlpbmcgbm90aWNlcyB0byB0aGUgdXNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdmFsdWUtcHJvdmlkZXInO1xuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBzbmFwc2hvdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcnJheSc7XG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi92YWx1ZS1wcm92aWRlcic7XG5pbXBvcnQge1xuICBCdXR0b25Db21wb25lbnQsXG4gIE5vdGljZSxcbiAgc2V0SWNvblxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7IGFkZFBsdWdpbkNzc0NsYXNzZXMgfSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWNvbnRleHQudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXggfSBmcm9tICcuL2NvbXBvbmVudC1leC50cyc7XG5pbXBvcnQgeyBNb25rZXlBcm91bmRDb21wb25lbnQgfSBmcm9tICcuL21vbmtleS1hcm91bmQtY29tcG9uZW50LnRzJztcblxuY29uc3QgUEVSTUFORU5UX05PVElDRVNfU1RBVEVfS0VZID0gJ3BsdWdpbi1ub3RpY2UtY29tcG9uZW50OnBlcm1hbmVudC1ub3RpY2VzJztcbmNvbnN0IFBFUk1BTkVOVF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTID0gMDtcbmNvbnN0IERFRkFVTFRfREVMQVlfQkVGT1JFX1NIT1dfSU5fTUlMTElTRUNPTkRTID0gNTAwO1xuLy8gT2JzaWRpYW4ncyBvd24gZGVmYXVsdCBub3RpY2UgZHVyYXRpb24sIGFwcGxpZWQgYnkgdGhlIGBOb3RpY2VgIGNvbnN0cnVjdG9yIHdoZW4gbm9uZSBpcyBnaXZlbi4gSXQgaXNcbi8vIHJlcGVhdGVkIGhlcmUgYmVjYXVzZSByZXN0YXJ0aW5nIHRoZSBjb3VudGRvd24gb24gYW4gYXBwZW5kIGdvZXMgdGhyb3VnaCBgc2V0QXV0b0hpZGVgLCB3aGljaCB0YWtlcyBhblxuLy8gZXhwbGljaXQgZHVyYXRpb24gYW5kIHNvIGNhbm5vdCBmYWxsIGJhY2sgdG8gdGhhdCBkZWZhdWx0IGl0c2VsZi5cbmNvbnN0IE9CU0lESUFOX0RFRkFVTFRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA9IDQwMDA7XG5cbi8vIEVsZW1lbnRzIGEgdXNlciBjbGlja3MgdG8gYWN0IG9uIHRoZW0gcmF0aGVyIHRoYW4gdG8gZGlzbWlzcyB0aGUgbm90aWNlLiBBIGNsaWNrIGxhbmRpbmcgb24gKG9yXG4vLyBpbnNpZGUpIG9uZSBvZiB0aGVzZSBpcyBrZXB0IGZyb20gYnViYmxpbmcgdG8gdGhlIG5vdGljZSwgc28gdGhlIG5vdGljZSBzdGF5cyBvcGVuLlxuY29uc3QgSU5URVJBQ1RJVkVfRUxFTUVOVF9TRUxFQ1RPUiA9ICdhLCBidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBsYWJlbCwgW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0sIFtyb2xlPVwiYnV0dG9uXCJdLCBbcm9sZT1cImxpbmtcIl0sIFtyb2xlPVwiY2hlY2tib3hcIl0sIFtyb2xlPVwidGFiXCJdLCBbcm9sZT1cIm1lbnVpdGVtXCJdJztcblxuLyoqXG4gKiBIb3cgYSBuZXcgbm90aWNlIHJlbGF0ZXMgdG8gdGhlIHBsdWdpbidzIGN1cnJlbnQgbm90aWNlIFx1MjAxNCB0aGUgb25lIG9jY3VweWluZyB0aGUgc2luZ2xlIHBlci1wbHVnaW5cbiAqIHNsb3QgdGhpcyBjb21wb25lbnQga2VlcHMuXG4gKlxuICogUmF3IGBuZXcgTm90aWNlKC4uLilgIGNhbGxzIGFsd2F5cyBwaWxlIHVwLCB3aGljaCBpcyByYXJlbHkgd2hhdCBhIHBsdWdpbiB3YW50czogdXN1YWxseSBvbmx5IHRoZVxuICogbGF0ZXN0IG1lc3NhZ2UgbWF0dGVycy4gU28gdGhlIHNsb3QgZXhpc3RzLCBhbmQgdGhpcyBjaG9vc2VzIHdoYXQgYSBuZXcgbWVzc2FnZSBkb2VzIHdpdGggaXQuXG4gKi9cbmV4cG9ydCBlbnVtIFBsdWdpbk5vdGljZU1vZGUge1xuICAvKipcbiAgICogQWRkcyB0aGUgbWVzc2FnZSB0byB0aGUgY3VycmVudCBub3RpY2UsIHNvIGJvdGggbWVzc2FnZXMgc3RheSB2aXNpYmxlIGluIGEgc2luZ2xlIG5vdGljZSBcdTIwMTQgZm9yIGFcbiAgICogcnVubmluZyBhY2NvdW50IG9mIGFuIG9wZXJhdGlvbi4gVGhlIGNvdW50ZG93biByZXN0YXJ0cywgc28gYW4gYXBwZW5kZWQgbWVzc2FnZSBpcyByZWFkYWJsZSBmb3IgYVxuICAgKiBmdWxsIGR1cmF0aW9uIHJhdGhlciB0aGFuIGluaGVyaXRpbmcgdGhlIHJlbWFpbnMgb2YgdGhlIGN1cnJlbnQgb25lLlxuICAgKlxuICAgKiBGYWxscyBiYWNrIHRvIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLlJlcGxhY2V9IHdoZW4gdGhlcmUgaXMgbm8gY3VycmVudCBub3RpY2Ugb24gc2NyZWVuIChpdCB3YXNcbiAgICogbmV2ZXIgc2hvd24sIG9yIGl0IGhhcyBzaW5jZSBiZWVuIGRpc21pc3NlZCkuXG4gICAqL1xuICBBcHBlbmQgPSAnYXBwZW5kJyxcblxuICAvKipcbiAgICogSGlkZXMgdGhlIGN1cnJlbnQgbm90aWNlIGFuZCBzaG93cyB0aGlzIG9uZSBpbiBpdHMgcGxhY2UsIHNvIG9ubHkgdGhlIGxhdGVzdCBtZXNzYWdlIGlzIG9uIHNjcmVlbi5cbiAgICogVGhpcyBpcyB0aGUgZGVmYXVsdCwgYW5kIHRoZSByZWFzb24gdGhlIHNsb3QgZXhpc3RzLlxuICAgKi9cbiAgUmVwbGFjZSA9ICdyZXBsYWNlJyxcblxuICAvKipcbiAgICogU2hvd3MgdGhlIG1lc3NhZ2UgYXMgaXRzIG93biBub3RpY2UsIGxlYXZpbmcgdGhlIGN1cnJlbnQgb25lIGFsb25lOiBib3RoIGFyZSBvbiBzY3JlZW4sIHBpbGVkIHVwXG4gICAqIGxpa2UgcGxhaW4gYG5ldyBOb3RpY2UoLi4uKWAgY2FsbHMuIEEgc2VwYXJhdGUgbm90aWNlIG5ldmVyIHJlcGxhY2VzLCBhbmQgaXMgbmV2ZXIgcmVwbGFjZWQgYnksIGFcbiAgICogc2xvdCBub3RpY2U7IGFueSBudW1iZXIgb2YgdGhlbSBjb2V4aXN0LiBUaGV5IGFyZSBzdGlsbCBoaWRkZW4gdG9nZXRoZXIgb24gdW5sb2FkLlxuICAgKi9cbiAgU2VwYXJhdGUgPSAnc2VwYXJhdGUnXG59XG5cbi8qKlxuICogVGhlIGV2ZW50IHBhc3NlZCB0byB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25DbG9zZUNsaWNrfSB3aGVuIHRoZSBub3RpY2Unc1xuICogY2xvc2UgKFgpIGJ1dHRvbiBpcyBjbGlja2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNsb3NlQ2xpY2tFdmVudCB7XG4gIC8qKlxuICAgKiBDYW5jZWxzIHRoZSBjbG9zZSwgbGVhdmluZyB0aGUgbm90aWNlIG9wZW4uXG4gICAqL1xuICBjYW5jZWw6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBoYW5kbGUgdG8gYSBkZWxheWVkIG5vdGljZSBjcmVhdGVkIGJ5IHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZUFmdGVyRGVsYXl9LiBJdCBpcyBhXG4gKiB7QGxpbmsgRGlzcG9zYWJsZX0gKHNvIGl0IGNhbiBiZSB1c2VkIHdpdGggYHVzaW5nYCkgdGhhdCBhbHNvIGxldHMgdGhlIGNvbnRlbnQgYmUgdXBkYXRlZCB3aGlsZSB0aGVcbiAqIG5vdGljZSBpcyBzaG93bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnREZWxheWVkTm90aWNlIGV4dGVuZHMgRGlzcG9zYWJsZSB7XG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGlzIGhhbmRsZSdzIG1lc3NhZ2UsIHJlLWFwcGx5aW5nIHRoZSBwbHVnaW4tbmFtZSBwcmVmaXgsIHRoZSBpbnRlcmFjdGl2ZS1jbGljayBndWFyZCwgYW5kXG4gICAqIHRoZSBDYW5jZWwgYnV0dG9uLiBVc2VmdWwgZm9yIHJlcG9ydGluZyBwcm9ncmVzcy4gSWYgdGhlIGRlbGF5IGhhcyBub3QgZWxhcHNlZCB5ZXQsIHRoZSBuZXcgY29udGVudFxuICAgKiBiZWNvbWVzIHdoYXQgaXMgc2hvd24gb25jZSBpdCBkb2VzLlxuICAgKlxuICAgKiBPbmx5IHRoaXMgaGFuZGxlJ3Mgb3duIG1lc3NhZ2UgaXMgcmV3cml0dGVuOiB3aGVuIHRoZSBub3RpY2Ugd2FzIGpvaW5lZCByYXRoZXIgdGhhbiBvcGVuZWQgKHNlZVxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMubW9kZX0pLCB0aGUgbWVzc2FnZXMgYWxyZWFkeSBpbiBpdCBhcmUgbGVmdFxuICAgKiBhbG9uZS5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgbmV3IG5vdGljZSBjb250ZW50LlxuICAgKi9cbiAgc2V0Q29udGVudDogKGNvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlQWZ0ZXJEZWxheX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMge1xuICAvKipcbiAgICogV2hlbiBwcm92aWRlZCwgYSBDYW5jZWwgYnV0dG9uIGlzIGFwcGVuZGVkIHRvIHRoZSBub3RpY2U7IGNsaWNraW5nIGl0IGFib3J0cyB0aGlzIGNvbnRyb2xsZXIuIFdoZW5cbiAgICogb21pdHRlZCwgbm8gQ2FuY2VsIGJ1dHRvbiBpcyBzaG93bi5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0Q29udHJvbGxlcj86IEFib3J0Q29udHJvbGxlcjtcblxuICAvKipcbiAgICogVGhlIHRleHQgb2YgdGhlIENhbmNlbCBidXR0b24gc2hvd24gd2hlbiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMuYWJvcnRDb250cm9sbGVyfVxuICAgKiBpcyBwcm92aWRlZC4gV2hlbiBvbWl0dGVkLCB0aGUgbG9jYWxpemVkIGBDYW5jZWxgIGxhYmVsIGlzIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90aWNlIGNvbnRlbnQsIHJlc29sdmVkIGxhemlseSBvbmx5IGlmIHRoZSBkZWxheSBlbGFwc2VzIFx1MjAxNCBzbyBhbiBvcGVyYXRpb24gdGhhdCBmaW5pc2hlc1xuICAgKiBzb29uZXIgbmV2ZXIgYnVpbGRzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogVmFsdWVQcm92aWRlcjxEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nPjtcblxuICAvKipcbiAgICogSG93IGxvbmcgdGhlIG9wZXJhdGlvbiBtdXN0IHJ1biBiZWZvcmUgdGhlIG5vdGljZSBpcyBzaG93bi4gT3BlcmF0aW9ucyB0aGF0IGZpbmlzaCBzb29uZXIgbmV2ZXJcbiAgICogc2hvdyBhIG5vdGljZSwgYXZvaWRpbmcgYSBkaXN0cmFjdGluZyBmbGFzaC5cbiAgICpcbiAgICogQGRlZmF1bHQgYDUwMGBcbiAgICovXG4gIHJlYWRvbmx5IGRlbGF5SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGlzIG5vdGljZSByZWxhdGVzIHRvIHRoZSBwbHVnaW4ncyBjdXJyZW50IG5vdGljZSBcdTIwMTQgc2VlIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlfS5cbiAgICpcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuU2VwYXJhdGV9IGlzIHdvcnRoIGNvbnNpZGVyaW5nIGZvciBhIGxvbmcgb3BlcmF0aW9uOiBvbiB0aGUgZGVmYXVsdFxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5SZXBsYWNlfSB0aGUgcHJvZ3Jlc3Mgbm90aWNlIHRha2VzIHRoZSBzaGFyZWQgc2xvdCwgc28gYW55IG9yZGluYXJ5IG5vdGljZVxuICAgKiByYWlzZWQgd2hpbGUgdGhlIG9wZXJhdGlvbiBydW5zIGhpZGVzIGl0LCBhbmQgdGhlIHByb2dyZXNzIHRoZSB1c2VyIHdhcyB3YXRjaGluZyBkb2VzIG5vdCBjb21lIGJhY2suXG4gICAqXG4gICAqIFdoaWNoZXZlciBtb2RlIGlzIHVzZWQsIHRoZSByZXR1cm5lZCBoYW5kbGUgb3ducyBvbmx5IElUUyBtZXNzYWdlOiB1cGRhdGluZyB0aGUgY29udGVudCByZXdyaXRlc1xuICAgKiB0aGF0IG1lc3NhZ2UgYWxvbmUsIGFuZCBkaXNwb3NpbmcgdGFrZXMgYXdheSBvbmx5IHRoYXQgbWVzc2FnZSB3aGVuIHRoZSBub3RpY2Ugd2FzIGFscmVhZHkgb25cbiAgICogc2NyZWVuIChhIG5vdGljZSB0aGlzIGhhbmRsZSBvcGVuZWQgaXMgaGlkZGVuIGFzIGEgd2hvbGUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5SZXBsYWNlfVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IFBsdWdpbk5vdGljZU1vZGU7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2Ugc2hvdWxkIHN0YXkgdW50aWwgaXQgaXMgcmVwbGFjZWQsIHRoZSBwbHVnaW4gaXMgcmVsb2FkZWQsIG9yIHRoZSB1c2VyIGRpc21pc3NlcyBpdC5cbiAgICpcbiAgICogQSBwZXJtYW5lbnQgbm90aWNlIGlzIHNob3duIHdpdGggYW4gaW5maW5pdGUgZHVyYXRpb24gYW5kIGlzIG5vdCBoaWRkZW4gd2hlbiB0aGUgY29tcG9uZW50IHVubG9hZHMsIHNvIGl0IGNhblxuICAgKiBjb21tdW5pY2F0ZSBzdGF0ZSB0aGF0IG91dGxpdmVzIHRoZSBwbHVnaW4gKGUuZy4gYSBjbGVhbnVwIHRoYXQgcmVxdWlyZXMgYSByZWxvYWQpLiBUaGVyZSBpcyBhdCBtb3N0IG9uZSBwZXJtYW5lbnRcbiAgICogbm90aWNlIHBlciBwbHVnaW46IGl0IGlzIGhpZGRlbiBieSB0aGUgbmV4dCB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2V9IGNhbGwgYW5kIGRpc21pc3NlZFxuICAgKiBhdXRvbWF0aWNhbGx5IHRoZSBuZXh0IHRpbWUgdGhlIGNvbXBvbmVudCBsb2FkcyAoaS5lLiB3aGVuIHRoZSBwbHVnaW4gaXMgcmUtZW5hYmxlZCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzUGVybWFuZW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSG93IHRoaXMgbm90aWNlIHJlbGF0ZXMgdG8gdGhlIHBsdWdpbidzIGN1cnJlbnQgbm90aWNlIFx1MjAxNCBzZWUge0BsaW5rIFBsdWdpbk5vdGljZU1vZGV9LlxuICAgKlxuICAgKiBBIHBlcm1hbmVudCBub3RpY2UgY2Fubm90IGJlIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLlNlcGFyYXRlfSAoaXQgbmVlZHMgdGhlIHNoYXJlZCBzbG90IGl0IGlzXG4gICAqIHRyYWNrZWQgaW4pLCBhbmQgYSBub3RpY2UgdGhhdCBkb2VzIG5vdCBoaWRlIG9uIGNsaWNrIG11c3QgYmVcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuU2VwYXJhdGV9IChzbyBhIGxhdGVyIG5vdGljZSBuZXZlciBzaWxlbnRseSByZXBsYWNlcyBpdCk7IGVpdGhlclxuICAgKiBjb250cmFkaWN0aW9uIHRocm93cy5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuUmVwbGFjZX0sIG9yIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLlNlcGFyYXRlfSB3aGVuXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5zaG91bGRIaWRlT25DbGlja30gaXMgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IFBsdWdpbk5vdGljZU1vZGU7XG5cbiAgLyoqXG4gICAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgY2xvc2UgKFgpIGJ1dHRvbiwgYmVmb3JlIHRoZSBub3RpY2UgaXMgaGlkZGVuLiBDYWxsXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDbG9zZUNsaWNrRXZlbnQuY2FuY2VsfSBvbiB0aGUgZXZlbnQgdG8gY2FuY2VsIHRoZSBjbG9zZSBhbmQga2VlcCB0aGUgbm90aWNlXG4gICAqIG9wZW4gXHUyMDE0IGZvciBleGFtcGxlIGFmdGVyIHlvdXIgb3duIGNvbmZpcm1hdGlvbiBkZWNsaW5lcy4gQW4gYXN5bmMgY2FsbGJhY2sgaXMgYXdhaXRlZCBiZWZvcmUgdGhlXG4gICAqIG5vdGljZSBpcyBoaWRkZW4uIFJ1bnMgb25seSB3aGVuIGEgY2xvc2UgYnV0dG9uIGlzIHNob3duIChib3RoXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5zaG91bGRIaWRlT25DbGlja30gYD0gZmFsc2VgIGFuZFxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuc2hvdWxkU2hvd0Nsb3NlQnV0dG9ufSBhcmUgc2V0KS5cbiAgICovXG4gIHJlYWRvbmx5IG9uQ2xvc2VDbGljaz86IChldmVudDogUGx1Z2luTm90aWNlQ2xvc2VDbGlja0V2ZW50KSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBBIGNhbGxiYWNrIGludm9rZWQgd2hlbiB0aGUgbm90aWNlIGlzIGhpZGRlbiBcdTIwMTQgd2hldGhlciBieSB0aGUgdXNlciBjbG9zaW5nIGl0LCBieSBhIGxhdGVyIHJldXNhYmxlXG4gICAqIG5vdGljZSByZXBsYWNpbmcgaXQsIGJ5IGl0cyBkdXJhdGlvbiBlbGFwc2luZywgb3Igb24gY29tcG9uZW50IHVubG9hZC4gSXQgcnVucyBhdCBtb3N0IG9uY2UgcGVyXG4gICAqIG5vdGljZS4gVGhlIHtAbGluayBQbHVnaW5Ob3RpY2VIaWRlSW5mb30gYXJndW1lbnQgZGlzdGluZ3Vpc2hlcyBhIHVzZXIgY2xvc2UgKHRoZSBjbG9zZSBidXR0b24pIGZyb21cbiAgICogYSBwcm9ncmFtbWF0aWMgaGlkZS4gQW4gYXN5bmMgY2FsbGJhY2sgaXMgcnVuIGZpcmUtYW5kLWZvcmdldCAoaXRzIHJlamVjdGlvbiBzdXJmYWNlcyB0aHJvdWdoIHRoZVxuICAgKiBhc3luYy1lcnJvciBwaXBlbGluZSkuXG4gICAqL1xuICByZWFkb25seSBvbkhpZGU/OiAoaW5mbzogUGx1Z2luTm90aWNlSGlkZUluZm8pID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY2xpY2tpbmcgdGhlIG5vdGljZSBoaWRlcyBpdC4gV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSwgdGhlIG5vdGljZSBkaXNtaXNzZXMgb24gY2xpY2sgbGlrZVxuICAgKiBhIG5vcm1hbCBPYnNpZGlhbiBub3RpY2UuIFdoZW4gYGZhbHNlYCwgdGhlIG5vdGljZSBpcyBoYXJkIHRvIGNsb3NlOiBpdCBkb2VzIG5vdCBkaXNtaXNzIG9uIGFueSBzdHJheVxuICAgKiBjbGljaywgYW5kIGluc3RlYWQgc2hvd3MgYSBjbG9zZSAoWCkgYnV0dG9uIHRoYXQgaGlkZXMgaXQgZGlyZWN0bHkgKHNlZVxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuc2hvdWxkU2hvd0Nsb3NlQnV0dG9ufSBhbmRcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLm9uQ2xvc2VDbGlja30pLlxuICAgKlxuICAgKiBBIGBzaG91bGRIaWRlT25DbGljazogZmFsc2VgIG5vdGljZSBpcyBzaG93biB3aXRoIGFuIGluZmluaXRlIGR1cmF0aW9uIGFuZCBzdGFuZHMgb24gaXRzIG93blxuICAgKiAoaW1wbGllcyB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZX0pLCBzbyBhIGxhdGVyIG5vdGljZSBuZXZlciBzaWxlbnRseSByZXBsYWNlcyBpdDsgcGFzc2luZ1xuICAgKiBhbnkgb3RoZXIge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLm1vZGV9IHRvZ2V0aGVyIHdpdGggYHNob3VsZEhpZGVPbkNsaWNrOiBmYWxzZWBcbiAgICogdGhyb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEhpZGVPbkNsaWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY2xvc2UgKFgpIGJ1dHRvbiBpcyBzaG93biBvbiBhIGhhcmQtdG8tY2xvc2Ugbm90aWNlXG4gICAqICh7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMuc2hvdWxkSGlkZU9uQ2xpY2t9IGA9IGZhbHNlYCkuIFdoZW4gYGZhbHNlYCwgbm8gY2xvc2VcbiAgICogYnV0dG9uIGlzIHJlbmRlcmVkIGFuZCB0aGUgbm90aWNlIGNhbiBvbmx5IGJlIGhpZGRlbiBwcm9ncmFtbWF0aWNhbGx5LiBJZ25vcmVkIHVubGVzc1xuICAgKiBgc2hvdWxkSGlkZU9uQ2xpY2tgIGlzIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgd2h5IGEgbm90aWNlIHdhcyBoaWRkZW4sIHBhc3NlZCB0byB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25IaWRlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5Ob3RpY2VIaWRlSW5mbyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2Ugd2FzIGhpZGRlbiBieSB0aGUgdXNlciBjbGlja2luZyBpdHMgY2xvc2UgKFgpIGJ1dHRvbiBzcGVjaWZpY2FsbHkuIEFsd2F5cyBpbXBsaWVzXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VIaWRlSW5mby5pc1VzZXJBY3Rpb259LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNDbG9zZUJ1dHRvbkNsaWNrZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG5vdGljZSB3YXMgaGlkZGVuIGJ5IGEgdXNlciBhY3Rpb24gXHUyMDE0IGNsaWNraW5nIHRoZSBjbG9zZSAoWCkgYnV0dG9uLCBvciBjbGlja2luZyBhXG4gICAqIGRpc21pc3NpYmxlIG5vdGljZSB0byBkaXNtaXNzIGl0IFx1MjAxNCBhcyBvcHBvc2VkIHRvIHByb2dyYW1tYXRpY2FsbHkgKGEgbGF0ZXIgcmV1c2FibGUgbm90aWNlIHJlcGxhY2luZ1xuICAgKiBpdCwgYW4gZXhwbGljaXQgYGhpZGUoKWAsIHRoZSBkdXJhdGlvbiBlbGFwc2luZywgb3IgY29tcG9uZW50IHVubG9hZCkuXG4gICAqL1xuICByZWFkb25seSBpc1VzZXJBY3Rpb246IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRDbG9zZUJ1dHRvblBhcmFtcyB7XG4gIHJlYWRvbmx5IGNvbnRlbnRFbDogSFRNTEVsZW1lbnQ7XG4gIHJlYWRvbmx5IGdldE5vdGljZTogKCkgPT4gTm90aWNlIHwgbnVsbDtcbiAgcmVhZG9ubHkgb25DbG9zZUNsaWNrPzogKGV2ZW50OiBQbHVnaW5Ob3RpY2VDbG9zZUNsaWNrRXZlbnQpID0+IFByb21pc2FibGU8dm9pZD47XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRUb0N1cnJlbnROb3RpY2VQYXJhbXMge1xuICByZWFkb25seSBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBudWxsIHwgbnVtYmVyO1xuICByZWFkb25seSBtZXNzYWdlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICByZWFkb25seSBvbkhpZGU/OiAoaW5mbzogUGx1Z2luTm90aWNlSGlkZUluZm8pID0+IFByb21pc2FibGU8dm9pZD47XG4gIHJlYWRvbmx5IHNob3VsZFJlZ2lzdGVyQXNQZXJtYW5lbnQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlUGFyYW1zIHtcbiAgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuICByZWFkb25seSBjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nO1xuICByZWFkb25seSBjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBub3RpY2UgdGhpcyBjb250ZW50IGJlbG9uZ3MgdG8sIHVzZWQgYnkgdGhlIGNsb3NlIGJ1dHRvbidzIGhhbmRsZXIuIFRoZSBub3RpY2UgZG9lc1xuICAgKiBub3QgZXhpc3QgeWV0IHdoZW4gdGhlIGNvbnRlbnQgaXMgYnVpbHQsIHNvIGl0IGlzIHJlc29sdmVkIGxhemlseSBhdCBjbGljayB0aW1lLiBSZXF1aXJlZCB3aGVuIGFcbiAgICogY2xvc2UgYnV0dG9uIGlzIHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2V0Tm90aWNlPzogKCkgPT4gTm90aWNlIHwgbnVsbDtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBhZnRlciB0aGUgcGx1Z2luIG5hbWUgcHJlZml4LlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcblxuICAvKipcbiAgICogSW52b2tlZCB3aGVuIHRoZSBjbG9zZSBidXR0b24gaXMgY2xpY2tlZDsgbWF5IGNhbmNlbCB0aGUgY2xvc2UuIFNlZVxuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25DbG9zZUNsaWNrfS5cbiAgICovXG4gIHJlYWRvbmx5IG9uQ2xvc2VDbGljaz86IChldmVudDogUGx1Z2luTm90aWNlQ2xvc2VDbGlja0V2ZW50KSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBub3RpY2UgaXMgaGFyZCB0byBjbG9zZTogc3RvcHMgZXZlcnkgY2xpY2sgZnJvbSBkaXNtaXNzaW5nIGl0IGFuZCwgdW5sZXNzIHN1cHByZXNzZWQgYnlcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkTm90aWNlQ29udGVudFBhcmFtcy5zaG91bGRTaG93Q2xvc2VCdXR0b259LCBhZGRzIGEgY2xvc2UgYnV0dG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlc0V4cGxpY2l0Q2xvc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBtZXNzYWdlIGlzIHByZWZpeGVkIHdpdGggdGhlIHBsdWdpbiBuYW1lLiBPbmx5IGEgbWVzc2FnZSB0aGF0IG9wZW5zIGEgbm90aWNlIGlzXG4gICAqIHByZWZpeGVkOyBhIG1lc3NhZ2UgYXBwZW5kZWQgdG8gb25lIGFscmVhZHkgc2hvd2luZyBpdCBpcyBub3QsIHNvIHRoZSBuYW1lIGlzIG5vdCByZXBlYXRlZCBvbiBldmVyeVxuICAgKiBsaW5lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFByZWZpeFdpdGhQbHVnaW5OYW1lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW5kZXIgdGhlIGNsb3NlIGJ1dHRvbiB3aGVuIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXMucmVxdWlyZXNFeHBsaWNpdENsb3NlfS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTaG93Q2xvc2VCdXR0b24/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luTm90aWNlQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgYnVpbHQgbWVzc2FnZTogdGhlIHdyYXBwZXIgZWxlbWVudCBob2xkaW5nIGl0LCBhbmQgdGhlIGZyYWdtZW50IHRoYXQgZWxlbWVudCBzaXRzIGluLlxuICpcbiAqIFRoZSBlbGVtZW50IGlzIGhhbmRlZCBiYWNrIGJlY2F1c2UgYSBub3RpY2UgY2FuIGhvbGQgc2V2ZXJhbCBvZiB0aGVtIChzZWUge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuQXBwZW5kfSksXG4gKiBzbyB3aG9ldmVyIG93bnMgb25lIG1lc3NhZ2UgaGFzIHRvIGJlIGFibGUgdG8gdXBkYXRlIG9yIHJlbW92ZSBleGFjdGx5IHRoYXQgbWVzc2FnZS4gVGhlIHJlZmVyZW5jZVxuICogc3RheXMgdmFsaWQgb25jZSB0aGUgZnJhZ21lbnQgaXMgaGFuZGVkIHRvIGBOb3RpY2VgOiBhcHBlbmRpbmcgYSBmcmFnbWVudCBtb3ZlcyBpdHMgY2hpbGRyZW4gcmF0aGVyXG4gKiB0aGFuIGNvcHlpbmcgdGhlbS5cbiAqL1xuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudE5vdGljZUNvbnRlbnQge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgd3JhcHBpbmcgdGhpcyBtZXNzYWdlIGFsb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudEVsOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogVGhlIGZyYWdtZW50IGhvbGRpbmcge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudE5vdGljZUNvbnRlbnQuY29udGVudEVsfSwgcmVhZHkgdG8gaGFuZCB0byBgTm90aWNlYFxuICAgKiBvciB0byBhcHBlbmQgaW50byBvbmUuXG4gICAqL1xuICByZWFkb25seSBmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudDtcbn1cblxuLyoqXG4gKiBBIG1lc3NhZ2UgdGhhdCBoYXMgYmVlbiBwdXQgb24gc2NyZWVuLCBhbmQgd2hlcmUgaXQgZW5kZWQgdXAuXG4gKi9cbmludGVyZmFjZSBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93bk5vdGljZSB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCBob2xkaW5nIHRoaXMgbWVzc2FnZSBhbG9uZSwgaW5zaWRlIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93bk5vdGljZS5ub3RpY2V9LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudEVsOiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIG1lc3NhZ2UgY3JlYXRlZCB0aGUgbm90aWNlLCBhcyBvcHBvc2VkIHRvIGpvaW5pbmcgb25lIHRoYXQgd2FzIGFscmVhZHkgb24gc2NyZWVuLlxuICAgKiBPbmx5IHRoZSBjcmVhdG9yIG1heSBoaWRlIGl0OyBhIGpvaW5lZCBtZXNzYWdlIGNhbiBtZXJlbHkgcmVtb3ZlIGl0c2VsZi5cbiAgICovXG4gIHJlYWRvbmx5IGlzTm90aWNlT3duZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgdGhlIG1lc3NhZ2UgaXMgaW4uXG4gICAqL1xuICByZWFkb25seSBub3RpY2U6IE5vdGljZTtcbn1cblxuaW50ZXJmYWNlIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VXaXRoRHVyYXRpb25QYXJhbXMge1xuICByZWFkb25seSBkdXJhdGlvbkluTWlsbGlzZWNvbmRzOiBudWxsIHwgbnVtYmVyO1xuICByZWFkb25seSBtZXNzYWdlOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICByZWFkb25seSBtb2RlOiBQbHVnaW5Ob3RpY2VNb2RlO1xuICByZWFkb25seSBvbkNsb3NlQ2xpY2s6ICgoZXZlbnQ6IFBsdWdpbk5vdGljZUNsb3NlQ2xpY2tFdmVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPikgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG9uSGlkZTogKChpbmZvOiBQbHVnaW5Ob3RpY2VIaWRlSW5mbykgPT4gUHJvbWlzYWJsZTx2b2lkPikgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHJlcXVpcmVzRXhwbGljaXRDbG9zZTogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1hbmFnZXMgc2hvd2luZyBwbHVnaW4gbm90aWNlcy4gQnkgZGVmYXVsdCBhIG5ldyBub3RpY2UgaGlkZXMgdGhlIHByZXZpb3VzIG9uZSwgc28gb25seSB0aGUgbGF0ZXN0XG4gKiBtZXNzYWdlIGlzIG9uIHNjcmVlbjsge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zLm1vZGV9IGNob29zZXMgb3RoZXJ3aXNlIFx1MjAxNCBzZWVcbiAqIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlfS5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbk5vdGljZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4gbmFtZSAoc2hvd24gYXMgcHJlZml4IGluIG5vdGljZXMpLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNsb3NlQnV0dG9uQ2xpY2tlZE5vdGljZXMgPSBuZXcgV2Vha1NldDxOb3RpY2U+KCk7XG4gIHByaXZhdGUgbm90aWNlOiBOb3RpY2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nVGltZXJDYW5jZWxsYXRpb25zID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YW5kYWxvbmVOb3RpY2VzID0gbmV3IFNldDxOb3RpY2U+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlckNsaWNrZWROb3RpY2VzID0gbmV3IFdlYWtTZXQ8Tm90aWNlPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBsdWdpbiBub3RpY2UgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcHAgPSBwYXJhbXMuYXBwO1xuICAgIHRoaXMucGx1Z2luTmFtZSA9IHBhcmFtcy5wbHVnaW5OYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3NlcyB0aGUgcGVybWFuZW50IG5vdGljZSBsZWZ0IG92ZXIgZnJvbSBhIHByZXZpb3VzIGxvYWQgKGUuZy4gYSBwcmV2aW91cyBwbHVnaW4gc2Vzc2lvbikgb24gbG9hZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBvbmxvYWQoKTogdm9pZCB7XG4gICAgc3VwZXIub25sb2FkKCk7XG4gICAgY29uc3QgcGVybWFuZW50Tm90aWNlID0gdGhpcy5nZXRQZXJtYW5lbnROb3RpY2UoKTtcbiAgICBwZXJtYW5lbnROb3RpY2U/LmhpZGUoKTtcbiAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgY3VycmVudCBub3RpY2Ugb24gdW5sb2FkLCB1bmxlc3MgaXQgaXMgdGhlIHBlcm1hbmVudCBub3RpY2UgKHdoaWNoIGlzIG1lYW50IHRvIG91dGxpdmUgdGhlIHBsdWdpbikuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb251bmxvYWQoKTogdm9pZCB7XG4gICAgLy8gQ2FuY2VsIGFueSBkZWxheWVkIG5vdGljZSB3aG9zZSB0aW1lciBoYXMgbm90IGZpcmVkIHlldCwgc28gaXQgbmV2ZXIgYXBwZWFycyBhZnRlciB1bmxvYWQuXG4gICAgZm9yIChjb25zdCBjYW5jZWxQZW5kaW5nVGltZXIgb2Ygc25hcHNob3QodGhpcy5wZW5kaW5nVGltZXJDYW5jZWxsYXRpb25zKSkge1xuICAgICAgY2FuY2VsUGVuZGluZ1RpbWVyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldFBlcm1hbmVudE5vdGljZSgpICE9PSB0aGlzLm5vdGljZSkge1xuICAgICAgdGhpcy5ub3RpY2U/LmhpZGUoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzdGFuZGFsb25lTm90aWNlIG9mIHRoaXMuc3RhbmRhbG9uZU5vdGljZXMpIHtcbiAgICAgIHN0YW5kYWxvbmVOb3RpY2UuaGlkZSgpO1xuICAgIH1cbiAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgYSBub3RpY2UgbWVzc2FnZSB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBkaXNwbGF5aW5nIHRoZSBub3RpY2UuXG4gICAqIEByZXR1cm5zIFRoZSBub3RpY2Ugb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIHNob3dOb3RpY2UobWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZywgb3B0aW9ucz86IFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VPcHRpb25zKTogTm90aWNlIHtcbiAgICBjb25zdCBpc1Blcm1hbmVudCA9IG9wdGlvbnM/LmlzUGVybWFuZW50ID8/IGZhbHNlO1xuICAgIGNvbnN0IHNob3VsZEhpZGVPbkNsaWNrID0gb3B0aW9ucz8uc2hvdWxkSGlkZU9uQ2xpY2sgPz8gdHJ1ZTtcbiAgICBjb25zdCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgPSAhc2hvdWxkSGlkZU9uQ2xpY2s7XG4gICAgY29uc3QgbW9kZSA9IG9wdGlvbnM/Lm1vZGUgPz8gKHJlcXVpcmVzRXhwbGljaXRDbG9zZSA/IFBsdWdpbk5vdGljZU1vZGUuU2VwYXJhdGUgOiBQbHVnaW5Ob3RpY2VNb2RlLlJlcGxhY2UpO1xuXG4gICAgaWYgKG9wdGlvbnM/Lm1vZGUgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLm1vZGUgIT09IFBsdWdpbk5vdGljZU1vZGUuU2VwYXJhdGUgJiYgcmVxdWlyZXNFeHBsaWNpdENsb3NlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Egbm90aWNlIHRoYXQgZG9lcyBub3QgaGlkZSBvbiBjbGljayBtdXN0IGJlIHNob3duIGluIHRoZSBzZXBhcmF0ZSBtb2RlLicpO1xuICAgIH1cbiAgICBpZiAobW9kZSA9PT0gUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZSAmJiBpc1Blcm1hbmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHBlcm1hbmVudCBub3RpY2UgY2Fubm90IGJlIHNob3duIGluIHRoZSBzZXBhcmF0ZSBtb2RlLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGR1cmF0aW9uSW5NaWxsaXNlY29uZHMgPSBpc1Blcm1hbmVudCB8fCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UgPyBQRVJNQU5FTlRfTk9USUNFX0RVUkFUSU9OX0lOX01JTExJU0VDT05EUyA6IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc2hvd05vdGljZVdpdGhEdXJhdGlvbih7XG4gICAgICBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIG1vZGUsXG4gICAgICBvbkNsb3NlQ2xpY2s6IG9wdGlvbnM/Lm9uQ2xvc2VDbGljayxcbiAgICAgIG9uSGlkZTogb3B0aW9ucz8ub25IaWRlLFxuICAgICAgcmVxdWlyZXNFeHBsaWNpdENsb3NlLFxuICAgICAgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogaXNQZXJtYW5lbnQsXG4gICAgICBzaG91bGRTaG93Q2xvc2VCdXR0b246IG9wdGlvbnM/LnNob3VsZFNob3dDbG9zZUJ1dHRvbiA/PyB0cnVlXG4gICAgfSkubm90aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbm90aWNlIGRlc2NyaWJpbmcgYSBsb25nLXJ1bm5pbmcgb3BlcmF0aW9uLCBidXQgb25seSBvbmNlIHRoZSBvcGVyYXRpb24gaGFzIHJ1biBmb3IgbG9uZ2VyXG4gICAqIHRoYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmRlbGF5SW5NaWxsaXNlY29uZHN9IFx1MjAxNCBzbyBvcGVyYXRpb25zXG4gICAqIHRoYXQgZmluaXNoIHNvb25lciBuZXZlciBmbGFzaCBhIG5vdGljZS4gVGhlIG5vdGljZSBzdGF5cyB1bnRpbCB0aGUgcmV0dXJuZWQge0BsaW5rIERpc3Bvc2FibGV9IGlzXG4gICAqIGRpc3Bvc2VkICh3aGljaCBhbHNvIGNhbmNlbHMgdGhlIHBlbmRpbmcgdGltZXIgaWYgaXQgaGFzIG5vdCBmaXJlZCB5ZXQpLCBzbyBpdCBjYW4gYmUgdXNlZCB3aXRoXG4gICAqIGB1c2luZ2AuIFdoZW4gYW4ge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3dOb3RpY2VBZnRlckRlbGF5UGFyYW1zLmFib3J0Q29udHJvbGxlcn0gaXMgZ2l2ZW4sIGFcbiAgICogQ2FuY2VsIGJ1dHRvbiB0aGF0IGFib3J0cyBpdCBpcyBhcHBlbmRlZCAoYW5kLCBiZWluZyBpbnRlcmFjdGl2ZSwgZG9lcyBub3QgZGlzbWlzcyB0aGUgbm90aWNlKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHNcbiAgICogdXNpbmcgX25vdGljZSA9IHBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlQWZ0ZXJEZWxheSh7XG4gICAqICAgYWJvcnRDb250cm9sbGVyLFxuICAgKiAgIGNvbnRlbnQ6ICgpID0+IGJ1aWxkUHJvZ3Jlc3NGcmFnbWVudCgpXG4gICAqIH0pO1xuICAgKiBhd2FpdCBydW5PcGVyYXRpb24oYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudERlbGF5ZWROb3RpY2V9IHRoYXQgaGlkZXMgdGhlIG5vdGljZSAob3IgY2FuY2VscyB0aGUgcGVuZGluZ1xuICAgKiB0aW1lcikgd2hlbiBkaXNwb3NlZCBhbmQgbGV0cyB0aGUgY29udGVudCBiZSB1cGRhdGVkIHdoaWxlIGl0IGlzIHNob3duLlxuICAgKi9cbiAgcHVibGljIHNob3dOb3RpY2VBZnRlckRlbGF5KHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZUFmdGVyRGVsYXlQYXJhbXMpOiBQbHVnaW5Ob3RpY2VDb21wb25lbnREZWxheWVkTm90aWNlIHtcbiAgICBjb25zdCBtb2RlID0gcGFyYW1zLm1vZGUgPz8gUGx1Z2luTm90aWNlTW9kZS5SZXBsYWNlO1xuICAgIC8vIFdoZXJlIHRoaXMgbWVzc2FnZSBlbmRlZCB1cDogYSBub3RpY2Ugb2YgaXRzIG93biwgb3IgYSBjaHVuayBpbnNpZGUgb25lIHRoYXQgd2FzIGFscmVhZHkgdXAuIEl0XG4gICAgLy8gZGVjaWRlcyB3aGF0IGBzZXRDb250ZW50YCByZXdyaXRlcyBhbmQgd2hhdCBkaXNwb3NpbmcgdGFrZXMgYXdheS5cbiAgICBsZXQgc2hvd246IG51bGwgfCBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93bk5vdGljZSA9IG51bGw7XG4gICAgbGV0IGlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICBsZXQgdGltZXJJZCA9IDA7XG4gICAgbGV0IGN1cnJlbnRDb250ZW50OiBWYWx1ZVByb3ZpZGVyPERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc+ID0gcGFyYW1zLmNvbnRlbnQ7XG5cbiAgICBjb25zdCBjYW5jZWxQZW5kaW5nVGltZXIgPSAoKTogdm9pZCA9PiB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgdGhpcy5wZW5kaW5nVGltZXJDYW5jZWxsYXRpb25zLmRlbGV0ZShjYW5jZWxQZW5kaW5nVGltZXIpO1xuICAgIH07XG5cbiAgICBjb25zdCBidWlsZERlbGF5ZWRNZXNzYWdlID0gKGNvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmcpOiBEb2N1bWVudEZyYWdtZW50ID0+XG4gICAgICB0aGlzLmJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2Uobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBsdWdpbk5vdGljZUNvbXBvbmVudEJ1aWxkRGVsYXllZE5vdGljZU1lc3NhZ2VQYXJhbXM+KHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyOiBwYXJhbXMuYWJvcnRDb250cm9sbGVyLFxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBwYXJhbXMuY2FuY2VsQnV0dG9uVGV4dCxcbiAgICAgICAgY29udGVudFxuICAgICAgfSkpO1xuXG4gICAgdGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBSZXNvbHZpbmcgdGhlIGNvbnRlbnQgaXMgYXN5bmNocm9ub3VzLCBhbmQgdGhlIG9wZXJhdGlvbiB0aGUgbm90aWNlIGRlc2NyaWJlcyBrZWVwcyBydW5uaW5nXG4gICAgICAgIC8vIHdoaWxlIGl0IGhhcHBlbnMgXHUyMDE0IHNvIGBzZXRDb250ZW50YCBjYW4gbGFuZCBpbiBiZXR3ZWVuLiBJdCBjYW5ub3QgcmV3cml0ZSBhIG5vdGljZSB0aGF0IGRvZXNcbiAgICAgICAgLy8gbm90IGV4aXN0IHlldCwgc28gcmVzb2x2ZSBhZ2FpbiB3aGVuZXZlciB0aGF0IGhhcHBlbnM6IHRoZSBub3RpY2UgbXVzdCBvcGVuIHdpdGggdGhlIG1lc3NhZ2VcbiAgICAgICAgLy8gdGhlIGNhbGxlciBsYXN0IGFza2VkIGZvciwgbm90IHRoZSBvbmUgdGhhdCB3YXMgY3VycmVudCB3aGVuIHJlc29sdXRpb24gc3RhcnRlZC5cbiAgICAgICAgbGV0IHJlcXVlc3RlZENvbnRlbnQ6IFZhbHVlUHJvdmlkZXI8RG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZz47XG4gICAgICAgIGxldCByZXNvbHZlZENvbnRlbnQ6IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICByZXF1ZXN0ZWRDb250ZW50ID0gY3VycmVudENvbnRlbnQ7XG4gICAgICAgICAgcmVzb2x2ZWRDb250ZW50ID0gYXdhaXQgcmVzb2x2ZVZhbHVlKHJlcXVlc3RlZENvbnRlbnQsIHt9KTtcbiAgICAgICAgICAvLyBUaGUgaGFuZGxlIG1heSBoYXZlIGJlZW4gZGlzcG9zZWQgd2hpbGUgdGhlIGNvbnRlbnQgd2FzIGJlaW5nIHJlc29sdmVkOyBkb24ndCBzaG93IGEgc3RhbGUgbm90aWNlLlxuICAgICAgICAgIGlmIChpc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChyZXF1ZXN0ZWRDb250ZW50ICE9PSBjdXJyZW50Q29udGVudCk7XG5cbiAgICAgICAgc2hvd24gPSB0aGlzLnNob3dOb3RpY2VXaXRoRHVyYXRpb24oe1xuICAgICAgICAgIGR1cmF0aW9uSW5NaWxsaXNlY29uZHM6IFBFUk1BTkVOVF9OT1RJQ0VfRFVSQVRJT05fSU5fTUlMTElTRUNPTkRTLFxuICAgICAgICAgIG1lc3NhZ2U6IGJ1aWxkRGVsYXllZE1lc3NhZ2UocmVzb2x2ZWRDb250ZW50KSxcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIG9uQ2xvc2VDbGljazogdW5kZWZpbmVkLFxuICAgICAgICAgIG9uSGlkZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlcXVpcmVzRXhwbGljaXRDbG9zZTogZmFsc2UsXG4gICAgICAgICAgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudDogZmFsc2UsXG4gICAgICAgICAgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgcGFyYW1zLmRlbGF5SW5NaWxsaXNlY29uZHMgPz8gREVGQVVMVF9ERUxBWV9CRUZPUkVfU0hPV19JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgdGhpcy5wZW5kaW5nVGltZXJDYW5jZWxsYXRpb25zLmFkZChjYW5jZWxQZW5kaW5nVGltZXIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNldENvbnRlbnQ6IChjb250ZW50OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgIGN1cnJlbnRDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgaWYgKCFzaG93bikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTd2FwcyBUSElTIG1lc3NhZ2UncyBlbGVtZW50IGZvciBhIGZyZXNobHkgYnVpbHQgb25lLCByYXRoZXIgdGhhbiByZXdyaXRpbmcgdGhlIHdob2xlIG5vdGljZTpcbiAgICAgICAgLy8gV2hlbiB0aGUgaGFuZGxlIGpvaW5lZCBhIG5vdGljZSB0aGF0IHdhcyBhbHJlYWR5IHVwLCB0aGUgb3RoZXIgbWVzc2FnZXMgaW4gaXQgYXJlIG5vdCBpdHMgdG9cbiAgICAgICAgLy8gb3ZlcndyaXRlLiBSZWJ1aWxkaW5nIGFsc28gcmUtYXBwbGllcyB0aGUgcHJlZml4LCB0aGUgaW50ZXJhY3RpdmUgZ3VhcmQsIGFuZCB0aGUgQ2FuY2VsIGJ1dHRvbi5cbiAgICAgICAgY29uc3QgcmVidWlsdCA9IHRoaXMuYnVpbGROb3RpY2VDb250ZW50KHtcbiAgICAgICAgICBtZXNzYWdlOiBidWlsZERlbGF5ZWRNZXNzYWdlKGNvbnRlbnQpLFxuICAgICAgICAgIHNob3VsZFByZWZpeFdpdGhQbHVnaW5OYW1lOiBzaG93bi5pc05vdGljZU93bmVkXG4gICAgICAgIH0pO1xuICAgICAgICBzaG93bi5jb250ZW50RWwucmVwbGFjZVdpdGgocmVidWlsdC5mcmFnbWVudCk7XG4gICAgICAgIHNob3duID0geyAuLi5zaG93biwgY29udGVudEVsOiByZWJ1aWx0LmNvbnRlbnRFbCB9O1xuICAgICAgfSxcbiAgICAgIFtTeW1ib2wuZGlzcG9zZV06ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgICAgIGNhbmNlbFBlbmRpbmdUaW1lcigpO1xuICAgICAgICBpZiAoIXNob3duKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEEgbm90aWNlIHRoaXMgaGFuZGxlIG9wZW5lZCBnb2VzIGF3YXkgd2l0aCBpdDsgYSBub3RpY2UgaXQgbWVyZWx5IGpvaW5lZCBiZWxvbmdzIHRvIHdob2V2ZXJcbiAgICAgICAgLy8gb3BlbmVkIGl0LCBzbyBvbmx5IHRoaXMgbWVzc2FnZSBpcyB0YWtlbiBvdXQgb2YgaXQuXG4gICAgICAgIGlmIChzaG93bi5pc05vdGljZU93bmVkKSB7XG4gICAgICAgICAgc2hvd24ubm90aWNlLmhpZGUoKTtcbiAgICAgICAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmRlbGV0ZShzaG93bi5ub3RpY2UpO1xuICAgICAgICAgIGlmICh0aGlzLm5vdGljZSA9PT0gc2hvd24ubm90aWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGljZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNob3duLmNvbnRlbnRFbC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyBhIGNsb3NlIChYKSBidXR0b24gdG8gdGhlIG5vdGljZSBjb250ZW50LiBDbGlja2luZyBpdCBmaXJlc1xuICAgKiB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50QXBwZW5kQ2xvc2VCdXR0b25QYXJhbXMub25DbG9zZUNsaWNrfSAod2hpY2ggbWF5IGNhbmNlbCB0aGUgY2xvc2UpOyBpZlxuICAgKiBub3QgY2FuY2VsbGVkLCBpdCBoaWRlcyB0aGUgbm90aWNlIGFuZCBkcm9wcyBpdCBmcm9tIHRoZSBzdGFuZGFsb25lLW5vdGljZSB0cmFja2luZyBzZXQuIFRoZSBoaWRlIGlzXG4gICAqIG1hcmtlZCBhcyBhIGNsb3NlLWJ1dHRvbiBjbGljayBzbyB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd05vdGljZU9wdGlvbnMub25IaWRlfSBjYW5cbiAgICogZGlzdGluZ3Vpc2ggaXQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kQ2xvc2VCdXR0b24ocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRDbG9zZUJ1dHRvblBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29udGVudEVsLCBnZXROb3RpY2UsIG9uQ2xvc2VDbGljayB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGNsb3NlQnV0dG9uRWwgPSBjb250ZW50RWwuY3JlYXRlRWwoJ2J1dHRvbicsIHtcbiAgICAgIGF0dHI6IHsgJ2FyaWEtbGFiZWwnOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubm90aWNlcy5jbG9zZUFyaWFMYWJlbCkgfVxuICAgIH0pO1xuICAgIC8vIFJldXNlIE9ic2lkaWFuJ3MgbW9kYWwgY2xvc2UtYnV0dG9uIGNsYXNzZXMgc28gdGhpcyBidXR0b24gbWF0Y2hlcyB0aGUgbmF0aXZlIG1vZGFsIGNsb3NlIGJ1dHRvblxuICAgIC8vIChsb29rIGFuZCBob3Zlcik7IHRoZSBzdHlsZXNoZWV0IG9ubHkgcG9zaXRpb25zIGl0IGluIHRoZSBub3RpY2UgY29ybmVyLlxuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMoY2xvc2VCdXR0b25FbCwgQ3NzQ2xhc3MuUGx1Z2luTm90aWNlQ2xvc2VCdXR0b24pO1xuICAgIGNsb3NlQnV0dG9uRWwuYWRkQ2xhc3NlcyhbQ3NzQ2xhc3MuQ2xpY2thYmxlSWNvbiwgQ3NzQ2xhc3MuTW9kYWxIZWFkZXJCdXR0b25dKTtcbiAgICBzZXRJY29uKGNsb3NlQnV0dG9uRWwsICd4Jyk7XG4gICAgY2xvc2VCdXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IGlzQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IG9uQ2xvc2VDbGljaz8uKHtcbiAgICAgICAgICBjYW5jZWw6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBDYW4gYmUgY2FuY2VsbGVkIGJ5IHRoZSB1c2VyLlxuICAgICAgICBpZiAoaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm90aWNlID0gZW5zdXJlTm9uTnVsbGFibGUoZ2V0Tm90aWNlKCkpO1xuICAgICAgICB0aGlzLmNsb3NlQnV0dG9uQ2xpY2tlZE5vdGljZXMuYWRkKG5vdGljZSk7XG4gICAgICAgIG5vdGljZS5oaWRlKCk7XG4gICAgICAgIHRoaXMuc3RhbmRhbG9uZU5vdGljZXMuZGVsZXRlKG5vdGljZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbWVzc2FnZSB0byB0aGUgbm90aWNlIGN1cnJlbnRseSBpbiB0aGUgcGVyLXBsdWdpbiBzbG90LCBzbyBib3RoIG1lc3NhZ2VzIHN0YXkgb24gc2NyZWVuIGluIGFcbiAgICogc2luZ2xlIG5vdGljZS5cbiAgICpcbiAgICogVGhlIGFwcGVuZGVkIG1lc3NhZ2UgY2FycmllcyBubyBwbHVnaW4tbmFtZSBwcmVmaXggXHUyMDE0IHRoZSBub3RpY2UgYWxyZWFkeSBvcGVucyB3aXRoIG9uZSwgYW5kXG4gICAqIHJlcGVhdGluZyBpdCBvbiBldmVyeSBsaW5lIHJlYWRzIGFzIG5vaXNlLiBJdCBpcyB3cmFwcGVkIGxpa2UgYW55IG90aGVyIG5vdGljZSBjb250ZW50LCBzbyBhIGxpbmsgb3JcbiAgICogYnV0dG9uIGluc2lkZSBpdCBzdGlsbCBrZWVwcyB0aGUgbm90aWNlIG9wZW4gd2hlbiBjbGlja2VkLlxuICAgKlxuICAgKiBBcHBlbmRpbmcgcmVzdGFydHMgdGhlIG5vdGljZSdzIGNvdW50ZG93biAoe0BsaW5rIE5vdGljZS5zZXRBdXRvSGlkZX0pLCBzbyB0aGUgbmV3IG1lc3NhZ2UgZ2V0cyBhXG4gICAqIGZ1bGwgZHVyYXRpb24gaW5zdGVhZCBvZiBpbmhlcml0aW5nIHdoYXQgd2FzIGxlZnQgb2YgdGhlIGN1cnJlbnQgb25lIFx1MjAxNCBhIGxpbmUgYXBwZW5kZWQgYSBtb21lbnRcbiAgICogYmVmb3JlIHRoZSBub3RpY2UgZXhwaXJlcyB3b3VsZCBvdGhlcndpc2UgZmxhc2ggYW5kIHZhbmlzaC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKiBAcmV0dXJucyBUaGUge0BsaW5rIFBsdWdpbk5vdGljZUNvbXBvbmVudFNob3duTm90aWNlfSBkZXNjcmliaW5nIHRoZSBqb2luZWQgbm90aWNlLCBvciBgbnVsbGAgd2hlblxuICAgKiB0aGVyZSBpcyBub3RoaW5nIG9uIHNjcmVlbiB0byBhcHBlbmQgdG8gXHUyMDE0IHRoZSBzbG90IGlzIGVtcHR5LCBvciBpdHMgbm90aWNlIGhhcyBzaW5jZSBiZWVuIGRpc21pc3NlZFxuICAgKiBcdTIwMTQgYW5kIHRoZSBjYWxsZXIgc2hvdWxkIHNob3cgYSBuZXcgbm90aWNlIGluc3RlYWQuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZFRvQ3VycmVudE5vdGljZShwYXJhbXM6IFBsdWdpbk5vdGljZUNvbXBvbmVudEFwcGVuZFRvQ3VycmVudE5vdGljZVBhcmFtcyk6IG51bGwgfCBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93bk5vdGljZSB7XG4gICAgY29uc3QgeyBkdXJhdGlvbkluTWlsbGlzZWNvbmRzLCBtZXNzYWdlLCBvbkhpZGUsIHNob3VsZFJlZ2lzdGVyQXNQZXJtYW5lbnQgfSA9IHBhcmFtcztcbiAgICBjb25zdCBjdXJyZW50Tm90aWNlID0gdGhpcy5ub3RpY2U7XG4gICAgLy8gYGlzU2hvd25gIGlzIHRoZSBzYW1lIGNoZWNrIE9ic2lkaWFuJ3Mgb3duIGBOb3RpY2UuaGlkZWAgbWFrZXMgYmVmb3JlIGFuaW1hdGluZyBhIG5vdGljZSBhd2F5LCBzb1xuICAgIC8vIGl0IGlzIGV4YWN0bHkgXCJzdGlsbCBvbiBzY3JlZW5cIjogYSBub3RpY2UgdGhhdCBleHBpcmVkIG9yIHdhcyBkaXNtaXNzZWQgaGFzIGJlZW4gZGV0YWNoZWQuXG4gICAgaWYgKCFjdXJyZW50Tm90aWNlPy5jb250YWluZXJFbC5pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY29udGVudEVsLCBmcmFnbWVudCB9ID0gdGhpcy5idWlsZE5vdGljZUNvbnRlbnQoeyBtZXNzYWdlLCBzaG91bGRQcmVmaXhXaXRoUGx1Z2luTmFtZTogZmFsc2UgfSk7XG4gICAgY3VycmVudE5vdGljZS5tZXNzYWdlRWwuYXBwZW5kKGZyYWdtZW50KTtcbiAgICAvLyBBIGBudWxsYCBkdXJhdGlvbiBtZWFucyBcIk9ic2lkaWFuJ3Mgb3duIGRlZmF1bHRcIiwgd2hpY2ggb25seSB0aGUgY29uc3RydWN0b3IgYXBwbGllcyBcdTIwMTQgc28gcmVzdGFydFxuICAgIC8vIHRoZSBjb3VudGRvd24gd2l0aCB0aGF0IHNhbWUgZGVmYXVsdCByYXRoZXIgdGhhbiBsZWF2aW5nIHRoZSBjdXJyZW50IG9uZSBydW5uaW5nLlxuICAgIGN1cnJlbnROb3RpY2Uuc2V0QXV0b0hpZGUoZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA/PyBPQlNJRElBTl9ERUZBVUxUX05PVElDRV9EVVJBVElPTl9JTl9NSUxMSVNFQ09ORFMpO1xuICAgIHRoaXMud2lyZU9uSGlkZShjdXJyZW50Tm90aWNlLCBvbkhpZGUpO1xuICAgIC8vIE9ubHkgZXZlciByZWdpc3RlcnMsIG5ldmVyIGNsZWFyczogdGhlIG5vdGljZSBiZWluZyBhcHBlbmRlZCB0byBtYXkgYWxyZWFkeSBiZSB0aGlzIHBsdWdpbidzXG4gICAgLy8gcGVybWFuZW50IG5vdGljZSwgYW5kIGEgbGF0ZXIgYXBwZW5kZWQgbWVzc2FnZSBpcyBubyByZWFzb24gdG8gZm9yZ2V0IHRoYXQuXG4gICAgaWYgKHNob3VsZFJlZ2lzdGVyQXNQZXJtYW5lbnQpIHtcbiAgICAgIHRoaXMuc2V0UGVybWFuZW50Tm90aWNlKGN1cnJlbnROb3RpY2UpO1xuICAgIH1cbiAgICByZXR1cm4geyBjb250ZW50RWwsIGlzTm90aWNlT3duZWQ6IGZhbHNlLCBub3RpY2U6IGN1cnJlbnROb3RpY2UgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIG1lc3NhZ2UgZm9yIGEgZGVsYXllZCBub3RpY2U6IHRoZSByZXNvbHZlZCBjb250ZW50LCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgQ2FuY2VsXG4gICAqIGJ1dHRvbiB0aGF0IGFib3J0cyB0aGUgcHJvdmlkZWQgY29udHJvbGxlciB3aGVuIGNsaWNrZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gaG9sZGluZyB0aGUgY29udGVudCBhbmQsIGlmIHJlcXVlc3RlZCwgYSBDYW5jZWwgYnV0dG9uLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZERlbGF5ZWROb3RpY2VNZXNzYWdlKHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGREZWxheWVkTm90aWNlTWVzc2FnZVBhcmFtcyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IHsgYWJvcnRDb250cm9sbGVyLCBjYW5jZWxCdXR0b25UZXh0LCBjb250ZW50IH0gPSBwYXJhbXM7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudCgpO1xuICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZFRleHQoY29udGVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZChjb250ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAvLyBgQnV0dG9uQ29tcG9uZW50YCByZXF1aXJlcyBhbiBgSFRNTEVsZW1lbnRgIHBhcmVudCwgc28gYnVpbGQgaXQgb24gYSB0aHJvd2F3YXlcbiAgICAgIC8vIGRldGFjaGVkIGVsZW1lbnQgYW5kIG1vdmUgaXRzIGBidXR0b25FbGAgaW50byB0aGUgZnJhZ21lbnQuXG4gICAgICBjb25zdCBjYW5jZWxCdXR0b24gPSBuZXcgQnV0dG9uQ29tcG9uZW50KGNyZWF0ZURpdigpKTtcbiAgICAgIGNhbmNlbEJ1dHRvbi5zZXRCdXR0b25UZXh0KGNhbmNlbEJ1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLmJ1dHRvbnMuY2FuY2VsKSk7XG4gICAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGNhbmNlbEJ1dHRvbi5idXR0b25FbCwgQ3NzQ2xhc3MuQ2FuY2VsQnV0dG9uKTtcbiAgICAgIC8vIFRoZSBjbGljayBpcyB3aXJlZCB2aWEgYGFkZEV2ZW50TGlzdGVuZXJgIHJhdGhlciB0aGFuIGBCdXR0b25Db21wb25lbnQub25DbGlja2Agc28gaXRcbiAgICAgIC8vIGJ1YmJsZXMgdGhyb3VnaCB0aGUgaW50ZXJhY3RpdmUtZWxlbWVudCBndWFyZCAoa2VlcGluZyB0aGUgbm90aWNlIG9wZW4pIGFuZCBzdGF5c1xuICAgICAgLy8gZGlyZWN0bHkgZXhlcmNpc2FibGUgdmlhIGEgZGlzcGF0Y2hlZCBET00gZXZlbnQgaW4gdW5pdCB0ZXN0cy5cbiAgICAgIGNhbmNlbEJ1dHRvbi5idXR0b25FbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICB9KTtcbiAgICAgIGZyYWdtZW50LmFwcGVuZChjYW5jZWxCdXR0b24uYnV0dG9uRWwpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBub3RpY2UgY29udGVudCB3cmFwcGVkIGluIGEgY29udGFpbmVyIHRoYXQga2VlcHMgdGhlIG5vdGljZSBvcGVuIHdoZW4gYW4gaW50ZXJhY3RpdmVcbiAgICogZWxlbWVudCBpbnNpZGUgaXQgaXMgY2xpY2tlZC4gT2JzaWRpYW4gZGlzbWlzc2VzIGEgbm90aWNlIG9uIGFueSBjbGljayB0aGF0IGJ1YmJsZXMgdXAgdG8gaXRzXG4gICAqIGVsZW1lbnQ7IHRoZSBjb250YWluZXIgaW50ZXJjZXB0cyBjbGlja3Mgb3JpZ2luYXRpbmcgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCAoYSBsaW5rLCBidXR0b24sXG4gICAqIGlucHV0LCBldGMuKSBhbmQgc3RvcHMgdGhlbSB0aGVyZSwgc28gdGhlIGVsZW1lbnQncyBvd24gaGFuZGxlciBzdGlsbCBydW5zIGJ1dCB0aGUgbm90aWNlIHN0YXlzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50Tm90aWNlQ29udGVudH0gaG9sZGluZyB0aGUgd3JhcHBlZCBub3RpY2UgY29udGVudC5cbiAgICovXG4gIHByaXZhdGUgYnVpbGROb3RpY2VDb250ZW50KHBhcmFtczogUGx1Z2luTm90aWNlQ29tcG9uZW50QnVpbGROb3RpY2VDb250ZW50UGFyYW1zKTogUGx1Z2luTm90aWNlQ29tcG9uZW50Tm90aWNlQ29udGVudCB7XG4gICAgY29uc3QgeyBnZXROb3RpY2UsIG1lc3NhZ2UsIG9uQ2xvc2VDbGljaywgcmVxdWlyZXNFeHBsaWNpdENsb3NlID0gZmFsc2UsIHNob3VsZFByZWZpeFdpdGhQbHVnaW5OYW1lID0gdHJ1ZSwgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uID0gdHJ1ZSB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBjb25zdCBjb250ZW50RWwgPSBmcmFnbWVudC5jcmVhdGVEaXYoKTtcbiAgICBhZGRQbHVnaW5Dc3NDbGFzc2VzKGNvbnRlbnRFbCwgQ3NzQ2xhc3MuUGx1Z2luTm90aWNlQ29udGVudCk7XG4gICAgaWYgKHNob3VsZFByZWZpeFdpdGhQbHVnaW5OYW1lKSB7XG4gICAgICBjb250ZW50RWwuYXBwZW5kKHRoaXMuYnVpbGRQcmVmaXhlZE1lc3NhZ2UobWVzc2FnZSkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb250ZW50RWwuYXBwZW5kVGV4dChtZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudEVsLmFwcGVuZChtZXNzYWdlKTtcbiAgICB9XG4gICAgY29udGVudEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCRldmVudCkgPT4ge1xuICAgICAgLy8gQSBoYXJkLXRvLWNsb3NlIG5vdGljZSBtdXN0IG5vdCBkaXNtaXNzIG9uIGFueSBzdHJheSBjbGljazsgb25seSBpdHMgY2xvc2UgYnV0dG9uIG1heSBoaWRlIGl0LlxuICAgICAgaWYgKHJlcXVpcmVzRXhwbGljaXRDbG9zZSkge1xuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICgkZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJiAkZXZlbnQudGFyZ2V0LmNsb3Nlc3QoSU5URVJBQ1RJVkVfRUxFTUVOVF9TRUxFQ1RPUikpIHtcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcXVpcmVzRXhwbGljaXRDbG9zZSAmJiBzaG91bGRTaG93Q2xvc2VCdXR0b24pIHtcbiAgICAgIHRoaXMuYXBwZW5kQ2xvc2VCdXR0b24obm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFBsdWdpbk5vdGljZUNvbXBvbmVudEFwcGVuZENsb3NlQnV0dG9uUGFyYW1zPih7XG4gICAgICAgIGNvbnRlbnRFbCxcbiAgICAgICAgZ2V0Tm90aWNlOiBlbnN1cmVOb25OdWxsYWJsZShnZXROb3RpY2UpLFxuICAgICAgICBvbkNsb3NlQ2xpY2tcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY29udGVudEVsLCBmcmFnbWVudCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgbm90aWNlIGNvbnRlbnQsIHByZWZpeGluZyB0aGUgbWVzc2FnZSB3aXRoIHRoZSBwbHVnaW4gbmFtZSBpbiBhIHN0eWxlZCBlbGVtZW50IHNvIGl0IGlzXG4gICAqIHZpc3VhbGx5IGRpc3Rpbmd1aXNoZWQgZnJvbSB0aGUgbWVzc2FnZSBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgYWZ0ZXIgdGhlIHBsdWdpbiBuYW1lIHByZWZpeC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRG9jdW1lbnRGcmFnbWVudH0gd2l0aCB0aGUgc3R5bGVkIHBsdWdpbiBuYW1lIHByZWZpeCBmb2xsb3dlZCBieSB0aGUgbWVzc2FnZS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRQcmVmaXhlZE1lc3NhZ2UobWVzc2FnZTogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIGNvbnN0IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnQoKTtcbiAgICBjb25zdCBuYW1lRWwgPSBjcmVhdGVTcGFuKHsgdGV4dDogdGhpcy5wbHVnaW5OYW1lIH0pO1xuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobmFtZUVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VOYW1lKTtcbiAgICBmcmFnbWVudC5hcHBlbmQobmFtZUVsKTtcbiAgICBpZiAoIXRoaXMuX2xvYWRlZCkge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnICh1bmxvYWRlZCknKTtcbiAgICB9XG4gICAgZnJhZ21lbnQuYXBwZW5kVGV4dCgnXFxuJyk7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kVGV4dChtZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kKG1lc3NhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnQ7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcm1hbmVudE5vdGljZSgpOiBOb3RpY2UgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQZXJtYW5lbnROb3RpY2VzKCkuZ2V0KHRoaXMucGx1Z2luTmFtZSkgPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVybWFuZW50Tm90aWNlcygpOiBNYXA8c3RyaW5nLCBOb3RpY2U+IHtcbiAgICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlPE1hcDxzdHJpbmcsIE5vdGljZT4+KFBFUk1BTkVOVF9OT1RJQ0VTX1NUQVRFX0tFWSwgbmV3IE1hcDxzdHJpbmcsIE5vdGljZT4oKSkudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgYSBub3RpY2UgaGFyZCB0byBjbG9zZTogbWFya3MgaXRzIG91dGVyIGVsZW1lbnQgKHNvIHRoZSBDU1MgbmV1dHJhbGl6ZXMgaXRzIHBhZGRpbmcpIGFuZFxuICAgKiBpbnN0YWxscyBhIGNhcHR1cmUtcGhhc2UgY2xpY2sgZ3VhcmQgdGhhdCBzdG9wcyBldmVyeSBjbGljayBleGNlcHQgb24gYW4gaW50ZXJhY3RpdmUgZWxlbWVudCAoYVxuICAgKiBidXR0b24sIGxpbmssIHRoZSBjbG9zZSBidXR0b24sIGV0Yy4pIGZyb20gcmVhY2hpbmcgT2JzaWRpYW4ncyBvd24gZGlzbWlzcyBoYW5kbGVyIFx1MjAxNCBzbyBhblxuICAgKiBpbnRlcmFjdGl2ZSBjaGlsZCdzIG93biBoYW5kbGVyIHN0aWxsIHJ1bnMgd2hpbGUgYSBzdHJheSBjbGljayBjYW5ub3QgZGlzbWlzcyB0aGUgbm90aWNlLlxuICAgKlxuICAgKiBAcGFyYW0gbm90aWNlIC0gVGhlIG5vdGljZSB0byBndWFyZC5cbiAgICogQHBhcmFtIHJlcXVpcmVzRXhwbGljaXRDbG9zZSAtIFdoZXRoZXIgdGhlIG5vdGljZSByZXF1aXJlcyBleHBsaWNpdCBjbG9zZTsgd2hlbiBgZmFsc2VgLCBub3RoaW5nIGlzXG4gICAqIGluc3RhbGxlZC5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbEV4cGxpY2l0Q2xvc2VHdWFyZHMobm90aWNlOiBOb3RpY2UsIHJlcXVpcmVzRXhwbGljaXRDbG9zZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghcmVxdWlyZXNFeHBsaWNpdENsb3NlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFRoZSBvdXRlciBgLm5vdGljZWAgZWxlbWVudCAoYGNvbnRhaW5lckVsYCkgY2FycmllcyBPYnNpZGlhbidzIGRpc21pc3Mtb24tY2xpY2sgaGFuZGxlciBhbmQgdGhlXG4gICAgLy8gcGFkZGluZyBhIHN0cmF5IGNsaWNrIGNvdWxkIGxhbmQgb247IG1hcmsgaXQgc28gdGhlIHN0eWxlc2hlZXQgZHJvcHMgdGhhdCBwYWRkaW5nLlxuICAgIGFkZFBsdWdpbkNzc0NsYXNzZXMobm90aWNlLmNvbnRhaW5lckVsLCBDc3NDbGFzcy5QbHVnaW5Ob3RpY2VSZXF1aXJlc0V4cGxpY2l0Q2xvc2UpO1xuICAgIC8vIFN0b3AgZXZlcnkgY2xpY2sgb24gdGhlIG5vdGljZSBcdTIwMTQgZXhjZXB0IG9uIGFuIGludGVyYWN0aXZlIGVsZW1lbnQgXHUyMDE0IGZyb20gcmVhY2hpbmcgT2JzaWRpYW4nc1xuICAgIC8vIGRpc21pc3MgaGFuZGxlci4gUmVnaXN0ZXJlZCBpbiB0aGUgY2FwdHVyZSBwaGFzZSBvbiB0aGUgb3V0ZXJtb3N0IGVsZW1lbnQgc28gaXQgYWx3YXlzIHJ1bnMgZmlyc3QuXG4gICAgLy8gTGV0dGluZyBhIGNsaWNrIHJlYWNoIGFuIGludGVyYWN0aXZlIGNoaWxkIChhIGJ1dHRvbiwgbGluaywgdGhlIGNsb3NlIGJ1dHRvbiwgZXRjLikgaXMgd2hhdCBrZWVwc1xuICAgIC8vIGl0cyBvd24gaGFuZGxlciB3b3JraW5nOyB0aGUgYnViYmxlLXBoYXNlIGd1YXJkIG9uIHRoZSBjb250ZW50IHdyYXBwZXIgdGhlbiBzdG9wcyB0aGF0IGNsaWNrIGZyb21cbiAgICAvLyBidWJibGluZyB1cCB0byBPYnNpZGlhbidzIGRpc21pc3MgaGFuZGxlciwgc28gdGhlIG5vdGljZSBzdGlsbCBzdGF5cyBvcGVuLlxuICAgIG5vdGljZS5jb250YWluZXJFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgkZXZlbnQpID0+IHtcbiAgICAgIGlmICgkZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJiAkZXZlbnQudGFyZ2V0LmNsb3Nlc3QoSU5URVJBQ1RJVkVfRUxFTUVOVF9TRUxFQ1RPUikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFja3MgYSBjbGljayBvbiB0aGUgbm90aWNlIHNvIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlT3B0aW9ucy5vbkhpZGV9IGNhbiByZXBvcnQgYVxuICAgKiB1c2VyIGRpc21pc3NhbC4gT2JzaWRpYW4gaGlkZXMgYSBkaXNtaXNzaWJsZSBub3RpY2Ugc3luY2hyb25vdXNseSBkdXJpbmcgdGhlIGNsaWNrLCBzbyBhXG4gICAqIGNhcHR1cmUtcGhhc2UgbGlzdGVuZXIgbWFya3MgdGhlIG5vdGljZSBiZWZvcmUgdGhhdCBoaWRlIHJ1bnM7IHRoZSBtYXJrIGlzIGNsZWFyZWQgYWZ0ZXIgdGhlIGV2ZW50XG4gICAqIHNvIGEgbGF0ZXIgcHJvZ3JhbW1hdGljIGhpZGUgaXMgbm90IG1pc2F0dHJpYnV0ZWQuIEEgY2xvc2UtYnV0dG9uIGNsaWNrIGlzIHRyYWNrZWQgc2VwYXJhdGVseSAoc2VlXG4gICAqIHtAbGluayBQbHVnaW5Ob3RpY2VDb21wb25lbnQuYXBwZW5kQ2xvc2VCdXR0b259KS5cbiAgICpcbiAgICogQHBhcmFtIG5vdGljZSAtIFRoZSBub3RpY2UgdG8gdHJhY2suXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxVc2VyQ2xpY2tUcmFja2luZyhub3RpY2U6IE5vdGljZSk6IHZvaWQge1xuICAgIG5vdGljZS5jb250YWluZXJFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIC8vIE9ic2lkaWFuIGRpc21pc3NlcyBhIGRpc21pc3NpYmxlIG5vdGljZSBzeW5jaHJvbm91c2x5IGR1cmluZyB0aGlzIGNsaWNrLCBzbyBtYXJrIGl0IG5vdyAoYmVmb3JlXG4gICAgICAvLyB0aGF0IGhpZGUgcnVucykgYW5kIGNsZWFyIGl0IG9uIHRoZSBuZXh0IG1pY3JvdGFzayBcdTIwMTQgYWZ0ZXIgYW55IHN5bmNocm9ub3VzIGRpc21pc3MsIGJ1dCBiZWZvcmUgYVxuICAgICAgLy8gbGF0ZXIgcHJvZ3JhbW1hdGljIGhpZGUsIHNvIHRoYXQgaGlkZSBpcyBub3QgbWlzYXR0cmlidXRlZCBhcyBhIHVzZXIgYWN0aW9uLlxuICAgICAgdGhpcy51c2VyQ2xpY2tlZE5vdGljZXMuYWRkKG5vdGljZSk7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMudXNlckNsaWNrZWROb3RpY2VzLmRlbGV0ZShub3RpY2UpO1xuICAgICAgfSk7XG4gICAgfSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQZXJtYW5lbnROb3RpY2Uobm90aWNlOiBOb3RpY2UgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5nZXRQZXJtYW5lbnROb3RpY2VzKCk7XG4gICAgaWYgKG5vdGljZSkge1xuICAgICAgbWFwLnNldCh0aGlzLnBsdWdpbk5hbWUsIG5vdGljZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcC5kZWxldGUodGhpcy5wbHVnaW5OYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYSBub3RpY2Ugd2l0aCB0aGUgZ2l2ZW4gZHVyYXRpb24sIHBsYWNpbmcgaXQgYWNjb3JkaW5nIHRvIGl0cyB7QGxpbmsgUGx1Z2luTm90aWNlTW9kZX06IGFcbiAgICoge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuUmVwbGFjZX0gbm90aWNlIHRha2VzIHRoZSBwZXItcGx1Z2luIHNsb3QgKGhpZGluZyB3aGF0ZXZlciB3YXMgaW4gaXQsIGFuZFxuICAgKiBvcHRpb25hbGx5IHJlZ2lzdGVyaW5nIGFzIHRoaXMgcGx1Z2luJ3MgcGVybWFuZW50IG5vdGljZSksIGFuIHtAbGluayBQbHVnaW5Ob3RpY2VNb2RlLkFwcGVuZH0gb25lXG4gICAqIGpvaW5zIHRoZSBub3RpY2UgYWxyZWFkeSBpbiB0aGUgc2xvdCwgYW5kIGEge0BsaW5rIFBsdWdpbk5vdGljZU1vZGUuU2VwYXJhdGV9IG9uZSBpcyB0cmFja2VkIG9uIGl0c1xuICAgKiBvd24sIGxlYXZpbmcgdGhlIHNsb3QgdW50b3VjaGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd25Ob3RpY2V9IGRlc2NyaWJpbmcgd2hlcmUgdGhlIG1lc3NhZ2UgZW5kZWQgdXAuXG4gICAqL1xuICBwcml2YXRlIHNob3dOb3RpY2VXaXRoRHVyYXRpb24ocGFyYW1zOiBQbHVnaW5Ob3RpY2VDb21wb25lbnRTaG93Tm90aWNlV2l0aER1cmF0aW9uUGFyYW1zKTogUGx1Z2luTm90aWNlQ29tcG9uZW50U2hvd25Ob3RpY2Uge1xuICAgIGNvbnN0IHsgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcywgbWVzc2FnZSwgbW9kZSwgb25DbG9zZUNsaWNrLCBvbkhpZGUsIHJlcXVpcmVzRXhwbGljaXRDbG9zZSwgc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudCwgc2hvdWxkU2hvd0Nsb3NlQnV0dG9uIH0gPSBwYXJhbXM7XG4gICAgLy8gT2JzaWRpYW4ncyBgTm90aWNlYCB0cmVhdHMgYW4gb21pdHRlZCBkdXJhdGlvbiBhcyBpdHMgZGVmYXVsdCwgc28gbWFwIHRoZSBgbnVsbGAgXCJubyBleHBsaWNpdFxuICAgIC8vIGR1cmF0aW9uXCIgdmFsdWUgdG8gYHVuZGVmaW5lZGAuXG4gICAgY29uc3Qgbm90aWNlRHVyYXRpb25Jbk1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uSW5NaWxsaXNlY29uZHMgPz8gdW5kZWZpbmVkO1xuXG4gICAgaWYgKG1vZGUgPT09IFBsdWdpbk5vdGljZU1vZGUuQXBwZW5kKSB7XG4gICAgICBjb25zdCBhcHBlbmRlZE5vdGljZSA9IHRoaXMuYXBwZW5kVG9DdXJyZW50Tm90aWNlKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRBcHBlbmRUb0N1cnJlbnROb3RpY2VQYXJhbXM+KHtcbiAgICAgICAgZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgb25IaWRlLFxuICAgICAgICBzaG91bGRSZWdpc3RlckFzUGVybWFuZW50XG4gICAgICB9KSk7XG4gICAgICBpZiAoYXBwZW5kZWROb3RpY2UpIHtcbiAgICAgICAgcmV0dXJuIGFwcGVuZGVkTm90aWNlO1xuICAgICAgfVxuICAgICAgLy8gTm90aGluZyBvbiBzY3JlZW4gdG8gYXBwZW5kIHRvLCBzbyB0aGlzIG1lc3NhZ2UgYmVjb21lcyB0aGUgc2xvdCdzIG5vdGljZSBpbnN0ZWFkLlxuICAgIH1cblxuICAgIGNvbnN0IGhhc0Nsb3NlQnV0dG9uID0gcmVxdWlyZXNFeHBsaWNpdENsb3NlICYmIHNob3VsZFNob3dDbG9zZUJ1dHRvbjtcbiAgICAvLyBUaGUgY2xvc2UgYnV0dG9uJ3MgY2xpY2sgaGFuZGxlciBuZWVkcyB0aGUgYE5vdGljZWAsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHVudGlsIGl0IGlzIGJ1aWx0IGZyb21cbiAgICAvLyB0aGlzIGNvbnRlbnQ7IGNhcHR1cmUgaXQgbGF6aWx5IHZpYSBhIGhvbGRlciByZXNvbHZlZCBhdCBjbGljayB0aW1lLiBUaGUgZ2V0dGVyIGlzIGNyZWF0ZWQgb25seVxuICAgIC8vIHdoZW4gYSBjbG9zZSBidXR0b24gaXMgc2hvd24uXG4gICAgbGV0IGJ1aWx0Tm90aWNlOiBOb3RpY2UgfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCB7IGNvbnRlbnRFbCwgZnJhZ21lbnQgfSA9IHRoaXMuYnVpbGROb3RpY2VDb250ZW50KG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxQbHVnaW5Ob3RpY2VDb21wb25lbnRCdWlsZE5vdGljZUNvbnRlbnRQYXJhbXM+KHtcbiAgICAgIGdldE5vdGljZTogaGFzQ2xvc2VCdXR0b24gPyAoKTogTm90aWNlIHwgbnVsbCA9PiBidWlsdE5vdGljZSA6IHVuZGVmaW5lZCxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBvbkNsb3NlQ2xpY2ssXG4gICAgICByZXF1aXJlc0V4cGxpY2l0Q2xvc2UsXG4gICAgICBzaG91bGRTaG93Q2xvc2VCdXR0b25cbiAgICB9KSk7XG5cbiAgICBpZiAobW9kZSA9PT0gUGx1Z2luTm90aWNlTW9kZS5TZXBhcmF0ZSkge1xuICAgICAgYnVpbHROb3RpY2UgPSBuZXcgTm90aWNlKGZyYWdtZW50LCBub3RpY2VEdXJhdGlvbkluTWlsbGlzZWNvbmRzKTtcbiAgICAgIHRoaXMuaW5zdGFsbEV4cGxpY2l0Q2xvc2VHdWFyZHMoYnVpbHROb3RpY2UsIHJlcXVpcmVzRXhwbGljaXRDbG9zZSk7XG4gICAgICB0aGlzLmluc3RhbGxVc2VyQ2xpY2tUcmFja2luZyhidWlsdE5vdGljZSk7XG4gICAgICB0aGlzLndpcmVPbkhpZGUoYnVpbHROb3RpY2UsIG9uSGlkZSk7XG4gICAgICB0aGlzLnN0YW5kYWxvbmVOb3RpY2VzLmFkZChidWlsdE5vdGljZSk7XG4gICAgICByZXR1cm4geyBjb250ZW50RWwsIGlzTm90aWNlT3duZWQ6IHRydWUsIG5vdGljZTogYnVpbHROb3RpY2UgfTtcbiAgICB9XG5cbiAgICB0aGlzLm5vdGljZT8uaGlkZSgpO1xuICAgIGJ1aWx0Tm90aWNlID0gbmV3IE5vdGljZShmcmFnbWVudCwgbm90aWNlRHVyYXRpb25Jbk1pbGxpc2Vjb25kcyk7XG4gICAgdGhpcy5ub3RpY2UgPSBidWlsdE5vdGljZTtcbiAgICB0aGlzLmluc3RhbGxFeHBsaWNpdENsb3NlR3VhcmRzKGJ1aWx0Tm90aWNlLCByZXF1aXJlc0V4cGxpY2l0Q2xvc2UpO1xuICAgIHRoaXMuaW5zdGFsbFVzZXJDbGlja1RyYWNraW5nKGJ1aWx0Tm90aWNlKTtcbiAgICB0aGlzLndpcmVPbkhpZGUoYnVpbHROb3RpY2UsIG9uSGlkZSk7XG5cbiAgICBpZiAoc2hvdWxkUmVnaXN0ZXJBc1Blcm1hbmVudCkge1xuICAgICAgdGhpcy5zZXRQZXJtYW5lbnROb3RpY2UoYnVpbHROb3RpY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFBlcm1hbmVudE5vdGljZShudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgY29udGVudEVsLCBpc05vdGljZU93bmVkOiB0cnVlLCBub3RpY2U6IGJ1aWx0Tm90aWNlIH07XG4gIH1cblxuICAvKipcbiAgICogV3JhcHMgYSBub3RpY2UncyBgaGlkZWAgc28gdGhlIGdpdmVuIGNhbGxiYWNrIHJ1bnMgdGhlIGZpcnN0IHRpbWUgdGhlIG5vdGljZSBpcyBoaWRkZW4gXHUyMDE0IGJ5IHRoZVxuICAgKiB1c2VyLCBieSBhIHJlcGxhY2luZyBub3RpY2UsIGJ5IGl0cyBkdXJhdGlvbiBlbGFwc2luZywgb3Igb24gdW5sb2FkLiBEb2VzIG5vdGhpbmcgd2hlbiBubyBjYWxsYmFja1xuICAgKiBpcyBnaXZlbi5cbiAgICpcbiAgICogQHBhcmFtIG5vdGljZSAtIFRoZSBub3RpY2Ugd2hvc2UgYGhpZGVgIHRvIHdyYXAuXG4gICAqIEBwYXJhbSBvbkhpZGUgLSBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIG9uIHRoZSBmaXJzdCBoaWRlLCBvciBgdW5kZWZpbmVkYCB0byBza2lwIHdyYXBwaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlT25IaWRlKG5vdGljZTogTm90aWNlLCBvbkhpZGU6ICgoaW5mbzogUGx1Z2luTm90aWNlSGlkZUluZm8pID0+IFByb21pc2FibGU8dm9pZD4pIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKCFvbkhpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gUnVuIGBvbkhpZGVgIHRoZSBmaXJzdCB0aW1lIHRoZSBub3RpY2UgaXMgaGlkZGVuLiBBIGBvbmNlYCBwYXRjaCBvbiBgaGlkZWAgaW50ZXJjZXB0cyBleGFjdGx5IG9uZVxuICAgIC8vIGNhbGwgdGhlbiB1bmluc3RhbGxzIGl0c2VsZiAodW5sb2FkaW5nIHRoaXMgZGVkaWNhdGVkIGNvbXBvbmVudCksIHNvIHRoZXJlIGlzIG5vIG1hbnVhbFxuICAgIC8vIHNpbmdsZS1maXJlIGJvb2trZWVwaW5nIGFuZCBubyBsaW5nZXJpbmcgcGF0Y2ggb24gdGhlIHRyYW5zaWVudCBub3RpY2UuIFRoZSB1c2VyLWNsb3NlIGZsYWdzIHdlcmVcbiAgICAvLyBzZXQgYmVmb3JlIGBoaWRlKClgIHdhcyBpbnZva2VkIChzZWUgYGFwcGVuZENsb3NlQnV0dG9uYCAvIGBpbnN0YWxsVXNlckNsaWNrVHJhY2tpbmdgKSwgc28gdGhleVxuICAgIC8vIHN0aWxsIGhvbGQgd2hlbiByZWFkIGhlcmUgYWZ0ZXIgYGZhbGxiYWNrKClgLlxuICAgIGNvbnN0IHBhdGNoQ29tcG9uZW50ID0gbmV3IE1vbmtleUFyb3VuZENvbXBvbmVudCgpO1xuICAgIHBhdGNoQ29tcG9uZW50LmxvYWQoKTtcbiAgICBwYXRjaENvbXBvbmVudC5yZWdpc3Rlck1ldGhvZFBhdGNoKHtcbiAgICAgICRvYmplY3Q6IG5vdGljZSxcbiAgICAgIG1ldGhvZE5hbWU6ICdoaWRlJyxcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBwYXRjaEhhbmRsZXI6ICh7IGZhbGxiYWNrIH0pID0+IHtcbiAgICAgICAgZmFsbGJhY2soKTtcbiAgICAgICAgY29uc3QgaXNDbG9zZUJ1dHRvbkNsaWNrZWQgPSB0aGlzLmNsb3NlQnV0dG9uQ2xpY2tlZE5vdGljZXMuaGFzKG5vdGljZSk7XG4gICAgICAgIGNvbnN0IGlzVXNlckFjdGlvbiA9IGlzQ2xvc2VCdXR0b25DbGlja2VkIHx8IHRoaXMudXNlckNsaWNrZWROb3RpY2VzLmhhcyhub3RpY2UpO1xuICAgICAgICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgb25IaWRlKHsgaXNDbG9zZUJ1dHRvbkNsaWNrZWQsIGlzVXNlckFjdGlvbiB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVVBLG1CQUF5QjtBQUN6QixtQkFBa0M7QUFDbEMsMEJBQTRDO0FBQzVDLHlCQUFrQztBQUNsQyw0QkFBNkI7QUFDN0Isc0JBSU87QUFFUCx1QkFBeUI7QUFDekIsa0JBQWtCO0FBQ2xCLHNDQUF5QztBQUN6Qyw0QkFBb0M7QUFDcEMsMEJBQTRCO0FBQzVCLHFDQUFzQztBQUV0QyxNQUFNLDhCQUE4QjtBQUNwQyxNQUFNLDRDQUE0QztBQUNsRCxNQUFNLDRDQUE0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