@mnaoumov/obsidian-lib 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (776) hide show
  1. package/README.md +6 -0
  2. package/dist/lib/cjs/@types/i18next.d.cts +1 -1
  3. package/dist/lib/cjs/@types/obsidian-integration-testing.d.cts +3 -3
  4. package/dist/lib/cjs/@types/original-fs.d.cts +2 -1
  5. package/dist/lib/cjs/__merged.cjs +2 -21
  6. package/dist/lib/cjs/__merged.d.cts +1 -1
  7. package/dist/lib/cjs/active-file-provider.cjs +1 -47
  8. package/dist/lib/cjs/active-file-provider.d.cts +1 -1
  9. package/dist/lib/cjs/app.cjs +1 -47
  10. package/dist/lib/cjs/app.d.cts +1 -1
  11. package/dist/lib/cjs/async-with-notice.cjs +2 -21
  12. package/dist/lib/cjs/async-with-notice.d.cts +2 -1
  13. package/dist/lib/cjs/attachment-path.cjs +2 -21
  14. package/dist/lib/cjs/attachment-path.d.cts +1 -1
  15. package/dist/lib/cjs/attachment-unit-folder.cjs +2 -21
  16. package/dist/lib/cjs/attachment-unit-folder.d.cts +1 -1
  17. package/dist/lib/cjs/backlink-index.cjs +2 -21
  18. package/dist/lib/cjs/backlink-index.d.cts +1 -1
  19. package/dist/lib/cjs/backlink.cjs +2 -21
  20. package/dist/lib/cjs/backlink.d.cts +1 -1
  21. package/dist/lib/cjs/bases-view-registrar.cjs +2 -21
  22. package/dist/lib/cjs/bases-view-registrar.d.cts +1 -1
  23. package/dist/lib/cjs/callout.cjs +2 -21
  24. package/dist/lib/cjs/callout.d.cts +2 -1
  25. package/dist/lib/cjs/canvas.cjs +2 -21
  26. package/dist/lib/cjs/canvas.d.cts +1 -1
  27. package/dist/lib/cjs/case-insensitive-file-index.cjs +2 -21
  28. package/dist/lib/cjs/case-insensitive-file-index.d.cts +1 -1
  29. package/dist/lib/cjs/code-block-markdown-information.cjs +1 -47
  30. package/dist/lib/cjs/code-block-markdown-information.d.cts +1 -1
  31. package/dist/lib/cjs/code-block-reg-exp.cjs +1 -47
  32. package/dist/lib/cjs/code-block-reg-exp.d.cts +1 -1
  33. package/dist/lib/cjs/codemirror/index.cjs +2 -48
  34. package/dist/lib/cjs/codemirror/index.d.cts +1 -1
  35. package/dist/lib/cjs/codemirror/state-field-spec.cjs +1 -47
  36. package/dist/lib/cjs/codemirror/state-field-spec.d.cts +1 -1
  37. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.cjs +2 -21
  38. package/dist/lib/cjs/command-handlers/abstract-file-command-handler.d.cts +1 -1
  39. package/dist/lib/cjs/command-handlers/command-handler-component.cjs +2 -21
  40. package/dist/lib/cjs/command-handlers/command-handler-component.d.cts +1 -1
  41. package/dist/lib/cjs/command-handlers/command-handler.cjs +2 -21
  42. package/dist/lib/cjs/command-handlers/command-handler.d.cts +1 -1
  43. package/dist/lib/cjs/command-handlers/editor-command-handler.cjs +2 -21
  44. package/dist/lib/cjs/command-handlers/editor-command-handler.d.cts +1 -1
  45. package/dist/lib/cjs/command-handlers/file-command-handler.cjs +5 -24
  46. package/dist/lib/cjs/command-handlers/file-command-handler.d.cts +1 -1
  47. package/dist/lib/cjs/command-handlers/folder-command-handler.cjs +5 -24
  48. package/dist/lib/cjs/command-handlers/folder-command-handler.d.cts +1 -1
  49. package/dist/lib/cjs/command-handlers/global-command-handler.cjs +3 -22
  50. package/dist/lib/cjs/command-handlers/global-command-handler.d.cts +1 -1
  51. package/dist/lib/cjs/command-handlers/index.cjs +11 -57
  52. package/dist/lib/cjs/command-handlers/index.d.cts +1 -1
  53. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.cjs +2 -21
  54. package/dist/lib/cjs/command-handlers/open-demo-vault-command-handler.d.cts +1 -1
  55. package/dist/lib/cjs/command-handlers/open-settings-command-handler.cjs +1 -47
  56. package/dist/lib/cjs/command-handlers/open-settings-command-handler.d.cts +1 -1
  57. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.cjs +1 -47
  58. package/dist/lib/cjs/command-handlers/unlock-active-note-command-handler.d.cts +1 -1
  59. package/dist/lib/cjs/command-registrar.cjs +1 -47
  60. package/dist/lib/cjs/command-registrar.d.cts +1 -1
  61. package/dist/lib/cjs/community-plugins.cjs +2 -21
  62. package/dist/lib/cjs/community-plugins.d.cts +1 -1
  63. package/dist/lib/cjs/components/abort-signal-component.cjs +2 -21
  64. package/dist/lib/cjs/components/abort-signal-component.d.cts +2 -1
  65. package/dist/lib/cjs/components/all-windows-event-component.cjs +1 -47
  66. package/dist/lib/cjs/components/all-windows-event-component.d.cts +2 -1
  67. package/dist/lib/cjs/components/async-error-handler-component.cjs +2 -21
  68. package/dist/lib/cjs/components/async-error-handler-component.d.cts +1 -1
  69. package/dist/lib/cjs/components/async-events-component.cjs +2 -21
  70. package/dist/lib/cjs/components/async-events-component.d.cts +1 -1
  71. package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +1 -47
  72. package/dist/lib/cjs/components/case-insensitive-file-index-component.d.cts +1 -1
  73. package/dist/lib/cjs/components/component-ex.cjs +3 -16
  74. package/dist/lib/cjs/components/component-ex.d.cts +1 -1
  75. package/dist/lib/cjs/components/console-debug-component.cjs +2 -21
  76. package/dist/lib/cjs/components/console-debug-component.d.cts +2 -2
  77. package/dist/lib/cjs/components/core-plugin-toggle-component.cjs +2 -21
  78. package/dist/lib/cjs/components/core-plugin-toggle-component.d.cts +1 -1
  79. package/dist/lib/cjs/components/disposable-component.cjs +3 -16
  80. package/dist/lib/cjs/components/disposable-component.d.cts +1 -1
  81. package/dist/lib/cjs/components/embed-extensions-component.cjs +1 -47
  82. package/dist/lib/cjs/components/embed-extensions-component.d.cts +1 -1
  83. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.cjs +1 -47
  84. package/dist/lib/cjs/components/generate-markdown-link-default-params-component.d.cts +1 -1
  85. package/dist/lib/cjs/components/index.cjs +30 -76
  86. package/dist/lib/cjs/components/index.d.cts +1 -1
  87. package/dist/lib/cjs/components/layout-ready-component.cjs +2 -21
  88. package/dist/lib/cjs/components/layout-ready-component.d.cts +1 -1
  89. package/dist/lib/cjs/components/menu-event-registrar-component.cjs +1 -47
  90. package/dist/lib/cjs/components/menu-event-registrar-component.d.cts +1 -1
  91. package/dist/lib/cjs/components/monkey-around-component.cjs +2 -21
  92. package/dist/lib/cjs/components/monkey-around-component.d.cts +1 -1
  93. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.cjs +2 -21
  94. package/dist/lib/cjs/components/notebook-navigator-menu-event-registrar-component.d.cts +1 -1
  95. package/dist/lib/cjs/components/plugin-context-component.cjs +2 -21
  96. package/dist/lib/cjs/components/plugin-context-component.d.cts +1 -1
  97. package/dist/lib/cjs/components/plugin-gate-component.cjs +2 -21
  98. package/dist/lib/cjs/components/plugin-gate-component.d.cts +2 -1
  99. package/dist/lib/cjs/components/plugin-notice-component.cjs +3 -16
  100. package/dist/lib/cjs/components/plugin-notice-component.d.cts +2 -1
  101. package/dist/lib/cjs/components/plugin-settings-component.cjs +2 -21
  102. package/dist/lib/cjs/components/plugin-settings-component.d.cts +1 -1
  103. package/dist/lib/cjs/components/plugin-settings-tab-component.cjs +2 -21
  104. package/dist/lib/cjs/components/plugin-settings-tab-component.d.cts +1 -1
  105. package/dist/lib/cjs/components/plugin-suggestion-component.cjs +2 -21
  106. package/dist/lib/cjs/components/plugin-suggestion-component.d.cts +2 -1
  107. package/dist/lib/cjs/components/pointer-position-component.cjs +1 -47
  108. package/dist/lib/cjs/components/pointer-position-component.d.cts +1 -1
  109. package/dist/lib/cjs/components/registry-component.cjs +2 -21
  110. package/dist/lib/cjs/components/registry-component.d.cts +1 -1
  111. package/dist/lib/cjs/components/release-notes-component.cjs +2 -21
  112. package/dist/lib/cjs/components/release-notes-component.d.cts +2 -1
  113. package/dist/lib/cjs/components/rename-delete-handler-component.cjs +3 -16
  114. package/dist/lib/cjs/components/rename-delete-handler-component.d.cts +1 -1
  115. package/dist/lib/cjs/components/rmdir-guard-component.cjs +1 -47
  116. package/dist/lib/cjs/components/rmdir-guard-component.d.cts +1 -1
  117. package/dist/lib/cjs/components/settings-migration-component.cjs +2 -21
  118. package/dist/lib/cjs/components/settings-migration-component.d.cts +1 -1
  119. package/dist/lib/cjs/components/syntax-highlighting-component.cjs +2 -21
  120. package/dist/lib/cjs/components/syntax-highlighting-component.d.cts +1 -1
  121. package/dist/lib/cjs/components/templates-language-component.cjs +3 -49
  122. package/dist/lib/cjs/components/templates-language-component.d.cts +1 -1
  123. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.cjs +3 -16
  124. package/dist/lib/cjs/constructors/get-dom-events-handlers-constructor.d.cts +1 -1
  125. package/dist/lib/cjs/constructors/index.cjs +2 -48
  126. package/dist/lib/cjs/constructors/index.d.cts +1 -1
  127. package/dist/lib/cjs/css-class.cjs +1 -47
  128. package/dist/lib/cjs/css-class.d.cts +1 -1
  129. package/dist/lib/cjs/data-handler.cjs +1 -47
  130. package/dist/lib/cjs/data-handler.d.cts +1 -1
  131. package/dist/lib/cjs/dataview-link.cjs +2 -21
  132. package/dist/lib/cjs/dataview-link.d.cts +1 -1
  133. package/dist/lib/cjs/dataview.cjs +2 -21
  134. package/dist/lib/cjs/dataview.d.cts +2 -1
  135. package/dist/lib/cjs/debug.cjs +2 -21
  136. package/dist/lib/cjs/debug.d.cts +1 -1
  137. package/dist/lib/cjs/demo-vault-helper-settings.cjs +1 -47
  138. package/dist/lib/cjs/demo-vault-helper-settings.d.cts +1 -1
  139. package/dist/lib/cjs/demo-vault-helper.cjs +2 -21
  140. package/dist/lib/cjs/demo-vault-helper.d.cts +1 -1
  141. package/dist/lib/cjs/demo-vault-naming.cjs +1 -47
  142. package/dist/lib/cjs/demo-vault-naming.d.cts +1 -1
  143. package/dist/lib/cjs/desktop-demo-vault-opener.cjs +3 -16
  144. package/dist/lib/cjs/desktop-demo-vault-opener.d.cts +1 -1
  145. package/dist/lib/cjs/desktop-trusted-input.cjs +2 -21
  146. package/dist/lib/cjs/desktop-trusted-input.d.cts +2 -1
  147. package/dist/lib/cjs/editor-extension-registrar.cjs +2 -21
  148. package/dist/lib/cjs/editor-extension-registrar.d.cts +1 -1
  149. package/dist/lib/cjs/editor-suggest-registrar.cjs +2 -21
  150. package/dist/lib/cjs/editor-suggest-registrar.d.cts +1 -1
  151. package/dist/lib/cjs/editor.cjs +2 -21
  152. package/dist/lib/cjs/editor.d.cts +1 -1
  153. package/dist/lib/cjs/events.cjs +2 -21
  154. package/dist/lib/cjs/events.d.cts +1 -1
  155. package/dist/lib/cjs/extensions-registrar.cjs +2 -21
  156. package/dist/lib/cjs/extensions-registrar.d.cts +1 -1
  157. package/dist/lib/cjs/file-change.cjs +2 -21
  158. package/dist/lib/cjs/file-change.d.cts +2 -1
  159. package/dist/lib/cjs/file-explorer.cjs +2 -21
  160. package/dist/lib/cjs/file-explorer.d.cts +1 -1
  161. package/dist/lib/cjs/file-manager.cjs +2 -21
  162. package/dist/lib/cjs/file-manager.d.cts +2 -1
  163. package/dist/lib/cjs/file-system.cjs +2 -21
  164. package/dist/lib/cjs/file-system.d.cts +1 -1
  165. package/dist/lib/cjs/folder-note.cjs +2 -21
  166. package/dist/lib/cjs/folder-note.d.cts +1 -1
  167. package/dist/lib/cjs/frontmatter-formatting.cjs +2 -21
  168. package/dist/lib/cjs/frontmatter-formatting.d.cts +1 -1
  169. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.cjs +2 -21
  170. package/dist/lib/cjs/frontmatter-link-cache-with-offsets.d.cts +1 -1
  171. package/dist/lib/cjs/frontmatter.cjs +2 -21
  172. package/dist/lib/cjs/frontmatter.d.cts +1 -1
  173. package/dist/lib/cjs/generated-during-build.cjs +2 -48
  174. package/dist/lib/cjs/generated-during-build.d.cts +1 -1
  175. package/dist/lib/cjs/hover-link-source-registrar.cjs +2 -21
  176. package/dist/lib/cjs/hover-link-source-registrar.d.cts +1 -1
  177. package/dist/lib/cjs/html-element.cjs +1 -47
  178. package/dist/lib/cjs/html-element.d.cts +2 -1
  179. package/dist/lib/cjs/i18n/custom-type-options.cjs +1 -47
  180. package/dist/lib/cjs/i18n/custom-type-options.d.cts +1 -1
  181. package/dist/lib/cjs/i18n/default-translations.cjs +1 -47
  182. package/dist/lib/cjs/i18n/default-translations.d.cts +1 -1
  183. package/dist/lib/cjs/i18n/i18n.cjs +3 -22
  184. package/dist/lib/cjs/i18n/i18n.d.cts +2 -2
  185. package/dist/lib/cjs/i18n/index.cjs +5 -51
  186. package/dist/lib/cjs/i18n/index.d.cts +1 -1
  187. package/dist/lib/cjs/i18n/locales/en.cjs +1 -47
  188. package/dist/lib/cjs/i18n/locales/en.d.cts +1 -1
  189. package/dist/lib/cjs/i18n/locales/index.cjs +3 -49
  190. package/dist/lib/cjs/i18n/locales/index.d.cts +1 -1
  191. package/dist/lib/cjs/i18n/locales/translations-map.cjs +1 -47
  192. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +1 -1
  193. package/dist/lib/cjs/index.cjs +96 -142
  194. package/dist/lib/cjs/index.d.cts +1 -1
  195. package/dist/lib/cjs/is-in-obsidian.cjs +1 -47
  196. package/dist/lib/cjs/is-in-obsidian.d.cts +1 -1
  197. package/dist/lib/cjs/library-references.d.cts +2 -0
  198. package/dist/lib/cjs/library-styles.cjs +2 -21
  199. package/dist/lib/cjs/library-styles.d.cts +2 -1
  200. package/dist/lib/cjs/library.cjs +1 -47
  201. package/dist/lib/cjs/link-name.cjs +1 -47
  202. package/dist/lib/cjs/link-name.d.cts +1 -1
  203. package/dist/lib/cjs/link-update-progress.cjs +1 -47
  204. package/dist/lib/cjs/link-update-progress.d.cts +1 -1
  205. package/dist/lib/cjs/link.cjs +3 -16
  206. package/dist/lib/cjs/link.d.cts +2 -1
  207. package/dist/lib/cjs/logger.cjs +2 -21
  208. package/dist/lib/cjs/logger.d.cts +2 -1
  209. package/dist/lib/cjs/loop.cjs +3 -16
  210. package/dist/lib/cjs/loop.d.cts +2 -1
  211. package/dist/lib/cjs/markdown-code-block-processor-registrar.cjs +2 -21
  212. package/dist/lib/cjs/markdown-code-block-processor-registrar.d.cts +2 -1
  213. package/dist/lib/cjs/markdown-code-block-processor.cjs +2 -21
  214. package/dist/lib/cjs/markdown-code-block-processor.d.cts +2 -1
  215. package/dist/lib/cjs/markdown-post-processor-registrar.cjs +2 -21
  216. package/dist/lib/cjs/markdown-post-processor-registrar.d.cts +2 -1
  217. package/dist/lib/cjs/markdown-view.cjs +1 -47
  218. package/dist/lib/cjs/markdown-view.d.cts +1 -1
  219. package/dist/lib/cjs/markdown.cjs +3 -16
  220. package/dist/lib/cjs/markdown.d.cts +2 -1
  221. package/dist/lib/cjs/menu-event-registrar.cjs +1 -47
  222. package/dist/lib/cjs/menu-event-registrar.d.cts +1 -1
  223. package/dist/lib/cjs/metadata-cache.cjs +3 -16
  224. package/dist/lib/cjs/metadata-cache.d.cts +1 -1
  225. package/dist/lib/cjs/mobile-trusted-input.cjs +1 -47
  226. package/dist/lib/cjs/mobile-trusted-input.d.cts +1 -1
  227. package/dist/lib/cjs/modals/alert.cjs +2 -21
  228. package/dist/lib/cjs/modals/alert.d.cts +2 -1
  229. package/dist/lib/cjs/modals/confirm.cjs +2 -21
  230. package/dist/lib/cjs/modals/confirm.d.cts +2 -1
  231. package/dist/lib/cjs/modals/index.cjs +10 -56
  232. package/dist/lib/cjs/modals/index.d.cts +1 -1
  233. package/dist/lib/cjs/modals/minimizable-modal.cjs +2 -21
  234. package/dist/lib/cjs/modals/minimizable-modal.d.cts +1 -1
  235. package/dist/lib/cjs/modals/modal-command-builder.cjs +2 -21
  236. package/dist/lib/cjs/modals/modal-command-builder.d.cts +2 -1
  237. package/dist/lib/cjs/modals/modal.cjs +2 -21
  238. package/dist/lib/cjs/modals/modal.d.cts +1 -1
  239. package/dist/lib/cjs/modals/prompt.cjs +2 -21
  240. package/dist/lib/cjs/modals/prompt.d.cts +2 -1
  241. package/dist/lib/cjs/modals/select-item.cjs +2 -21
  242. package/dist/lib/cjs/modals/select-item.d.cts +1 -1
  243. package/dist/lib/cjs/modals/select-option.cjs +2 -21
  244. package/dist/lib/cjs/modals/select-option.d.cts +2 -1
  245. package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -47
  246. package/dist/lib/cjs/modals/suggest-modal-command-builder.d.cts +1 -1
  247. package/dist/lib/cjs/note-priority.cjs +2 -21
  248. package/dist/lib/cjs/note-priority.d.cts +1 -1
  249. package/dist/lib/cjs/notebook-navigator.cjs +1 -47
  250. package/dist/lib/cjs/notebook-navigator.d.cts +1 -1
  251. package/dist/lib/cjs/obsidian-dev-utils-state.cjs +2 -21
  252. package/dist/lib/cjs/obsidian-dev-utils-state.d.cts +1 -1
  253. package/dist/lib/cjs/obsidian-protocol-handler-registrar.cjs +2 -21
  254. package/dist/lib/cjs/obsidian-protocol-handler-registrar.d.cts +1 -1
  255. package/dist/lib/cjs/obsidian-settings.cjs +2 -21
  256. package/dist/lib/cjs/obsidian-settings.d.cts +1 -1
  257. package/dist/lib/cjs/parse-link.cjs +3 -22
  258. package/dist/lib/cjs/parse-link.d.cts +1 -1
  259. package/dist/lib/cjs/path-settings.cjs +2 -21
  260. package/dist/lib/cjs/path-settings.d.cts +1 -1
  261. package/dist/lib/cjs/pdf.cjs +2 -21
  262. package/dist/lib/cjs/pdf.d.cts +2 -1
  263. package/dist/lib/cjs/plugin/index.cjs +10 -56
  264. package/dist/lib/cjs/plugin/index.d.cts +1 -1
  265. package/dist/lib/cjs/plugin/plugin-api-schema.cjs +2 -21
  266. package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +1 -1
  267. package/dist/lib/cjs/plugin/plugin-api.cjs +2 -21
  268. package/dist/lib/cjs/plugin/plugin-api.d.cts +1 -1
  269. package/dist/lib/cjs/plugin/plugin-context.cjs +3 -22
  270. package/dist/lib/cjs/plugin/plugin-context.d.cts +2 -1
  271. package/dist/lib/cjs/plugin/plugin-event-source.cjs +1 -47
  272. package/dist/lib/cjs/plugin/plugin-event-source.d.cts +1 -1
  273. package/dist/lib/cjs/plugin/plugin-install-state.cjs +1 -47
  274. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +1 -1
  275. package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +1 -47
  276. package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +1 -1
  277. package/dist/lib/cjs/plugin/plugin-settings-tab.cjs +2 -21
  278. package/dist/lib/cjs/plugin/plugin-settings-tab.d.cts +2 -1
  279. package/dist/lib/cjs/plugin/plugin.cjs +2 -21
  280. package/dist/lib/cjs/plugin/plugin.d.cts +1 -1
  281. package/dist/lib/cjs/plugin/settings-migration-api.cjs +2 -21
  282. package/dist/lib/cjs/plugin/settings-migration-api.d.cts +1 -1
  283. package/dist/lib/cjs/plugin-cli-handler-registrar.cjs +2 -21
  284. package/dist/lib/cjs/plugin-cli-handler-registrar.d.cts +1 -1
  285. package/dist/lib/cjs/popovers/field-popover.cjs +2 -21
  286. package/dist/lib/cjs/popovers/field-popover.d.cts +1 -1
  287. package/dist/lib/cjs/popovers/index.cjs +4 -50
  288. package/dist/lib/cjs/popovers/index.d.cts +1 -1
  289. package/dist/lib/cjs/popovers/popover-anchor.cjs +2 -21
  290. package/dist/lib/cjs/popovers/popover-anchor.d.cts +2 -1
  291. package/dist/lib/cjs/popovers/popover.cjs +2 -21
  292. package/dist/lib/cjs/popovers/popover.d.cts +2 -1
  293. package/dist/lib/cjs/property-entry.cjs +1 -47
  294. package/dist/lib/cjs/property-entry.d.cts +1 -1
  295. package/dist/lib/cjs/queue.cjs +2 -21
  296. package/dist/lib/cjs/queue.d.cts +2 -1
  297. package/dist/lib/cjs/react/app-context.cjs +2 -21
  298. package/dist/lib/cjs/react/app-context.d.cts +1 -1
  299. package/dist/lib/cjs/react/index.cjs +2 -48
  300. package/dist/lib/cjs/react/index.d.cts +1 -1
  301. package/dist/lib/cjs/reference.cjs +2 -21
  302. package/dist/lib/cjs/reference.d.cts +1 -1
  303. package/dist/lib/cjs/resource-lock.cjs +2 -21
  304. package/dist/lib/cjs/resource-lock.d.cts +2 -1
  305. package/dist/lib/cjs/resource-url.cjs +2 -21
  306. package/dist/lib/cjs/resource-url.d.cts +1 -1
  307. package/dist/lib/cjs/ribbon-icon-registrar.cjs +2 -21
  308. package/dist/lib/cjs/ribbon-icon-registrar.d.cts +2 -1
  309. package/dist/lib/cjs/setting-components/checkbox-component.cjs +2 -21
  310. package/dist/lib/cjs/setting-components/checkbox-component.d.cts +2 -1
  311. package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +2 -21
  312. package/dist/lib/cjs/setting-components/code-highlighter-component.d.cts +2 -1
  313. package/dist/lib/cjs/setting-components/date-component.cjs +2 -21
  314. package/dist/lib/cjs/setting-components/date-component.d.cts +2 -1
  315. package/dist/lib/cjs/setting-components/date-time-component.cjs +2 -21
  316. package/dist/lib/cjs/setting-components/date-time-component.d.cts +2 -1
  317. package/dist/lib/cjs/setting-components/email-component.cjs +1 -47
  318. package/dist/lib/cjs/setting-components/email-component.d.cts +2 -1
  319. package/dist/lib/cjs/setting-components/file-component.cjs +1 -47
  320. package/dist/lib/cjs/setting-components/file-component.d.cts +2 -1
  321. package/dist/lib/cjs/setting-components/index.cjs +27 -73
  322. package/dist/lib/cjs/setting-components/index.d.cts +1 -1
  323. package/dist/lib/cjs/setting-components/month-component.cjs +2 -21
  324. package/dist/lib/cjs/setting-components/month-component.d.cts +2 -1
  325. package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +2 -21
  326. package/dist/lib/cjs/setting-components/multiple-dropdown-component.d.cts +3 -1
  327. package/dist/lib/cjs/setting-components/multiple-email-component.cjs +1 -47
  328. package/dist/lib/cjs/setting-components/multiple-email-component.d.cts +2 -1
  329. package/dist/lib/cjs/setting-components/multiple-file-component.cjs +2 -21
  330. package/dist/lib/cjs/setting-components/multiple-file-component.d.cts +2 -1
  331. package/dist/lib/cjs/setting-components/multiple-text-component.cjs +2 -21
  332. package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +2 -1
  333. package/dist/lib/cjs/setting-components/number-component.cjs +1 -47
  334. package/dist/lib/cjs/setting-components/number-component.d.cts +2 -1
  335. package/dist/lib/cjs/setting-components/password-component.cjs +1 -47
  336. package/dist/lib/cjs/setting-components/password-component.d.cts +2 -1
  337. package/dist/lib/cjs/setting-components/setting-component-wrapper.cjs +2 -21
  338. package/dist/lib/cjs/setting-components/setting-component-wrapper.d.cts +2 -1
  339. package/dist/lib/cjs/setting-components/telephone-component.cjs +1 -47
  340. package/dist/lib/cjs/setting-components/telephone-component.d.cts +2 -1
  341. package/dist/lib/cjs/setting-components/text-based-component.cjs +2 -21
  342. package/dist/lib/cjs/setting-components/text-based-component.d.cts +1 -1
  343. package/dist/lib/cjs/setting-components/time-component.cjs +2 -21
  344. package/dist/lib/cjs/setting-components/time-component.d.cts +2 -1
  345. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +2 -21
  346. package/dist/lib/cjs/setting-components/tri-state-checkbox-component.d.cts +2 -1
  347. package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +2 -21
  348. package/dist/lib/cjs/setting-components/typed-dropdown-component.d.cts +3 -1
  349. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +2 -21
  350. package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.d.cts +3 -1
  351. package/dist/lib/cjs/setting-components/typed-range-text-component.cjs +1 -47
  352. package/dist/lib/cjs/setting-components/typed-range-text-component.d.cts +1 -1
  353. package/dist/lib/cjs/setting-components/typed-text-component.cjs +2 -21
  354. package/dist/lib/cjs/setting-components/typed-text-component.d.cts +2 -1
  355. package/dist/lib/cjs/setting-components/url-component.cjs +1 -47
  356. package/dist/lib/cjs/setting-components/url-component.d.cts +2 -1
  357. package/dist/lib/cjs/setting-components/validator-component.cjs +2 -21
  358. package/dist/lib/cjs/setting-components/validator-component.d.cts +1 -1
  359. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.cjs +1 -47
  360. package/dist/lib/cjs/setting-components/value-component-with-change-tracking.d.cts +1 -1
  361. package/dist/lib/cjs/setting-components/week-component.cjs +2 -21
  362. package/dist/lib/cjs/setting-components/week-component.d.cts +2 -1
  363. package/dist/lib/cjs/setting-ex.cjs +2 -21
  364. package/dist/lib/cjs/setting-ex.d.cts +2 -1
  365. package/dist/lib/cjs/setting-group-ex.cjs +2 -21
  366. package/dist/lib/cjs/setting-group-ex.d.cts +2 -1
  367. package/dist/lib/cjs/status-bar-item-registrar.cjs +2 -21
  368. package/dist/lib/cjs/status-bar-item-registrar.d.cts +2 -1
  369. package/dist/lib/cjs/templater.cjs +1 -47
  370. package/dist/lib/cjs/templater.d.cts +1 -1
  371. package/dist/lib/cjs/transformers/duration-transformer.cjs +2 -21
  372. package/dist/lib/cjs/transformers/duration-transformer.d.cts +1 -1
  373. package/dist/lib/cjs/transformers/index.cjs +2 -48
  374. package/dist/lib/cjs/transformers/index.d.cts +1 -1
  375. package/dist/lib/cjs/trusted-input.cjs +2 -21
  376. package/dist/lib/cjs/trusted-input.d.cts +1 -1
  377. package/dist/lib/cjs/validation.cjs +2 -21
  378. package/dist/lib/cjs/validation.d.cts +1 -1
  379. package/dist/lib/cjs/vault-delete.cjs +2 -21
  380. package/dist/lib/cjs/vault-delete.d.cts +1 -1
  381. package/dist/lib/cjs/vault-transaction.cjs +3 -16
  382. package/dist/lib/cjs/vault-transaction.d.cts +1 -1
  383. package/dist/lib/cjs/vault.cjs +3 -16
  384. package/dist/lib/cjs/vault.d.cts +1 -1
  385. package/dist/lib/cjs/view-registrar.cjs +2 -21
  386. package/dist/lib/cjs/view-registrar.d.cts +1 -1
  387. package/dist/lib/cjs/workspace.cjs +2 -21
  388. package/dist/lib/cjs/workspace.d.cts +2 -1
  389. package/dist/lib/esm/@types/i18next.d.mts +1 -1
  390. package/dist/lib/esm/@types/obsidian-integration-testing.d.mts +3 -3
  391. package/dist/lib/esm/@types/original-fs.d.mts +2 -1
  392. package/dist/lib/esm/__merged.d.mts +1 -1
  393. package/dist/lib/esm/__merged.mjs +2 -11
  394. package/dist/lib/esm/active-file-provider.d.mts +1 -1
  395. package/dist/lib/esm/active-file-provider.mjs +1 -37
  396. package/dist/lib/esm/app.d.mts +1 -1
  397. package/dist/lib/esm/app.mjs +1 -37
  398. package/dist/lib/esm/async-with-notice.d.mts +2 -1
  399. package/dist/lib/esm/async-with-notice.mjs +2 -11
  400. package/dist/lib/esm/attachment-path.d.mts +1 -1
  401. package/dist/lib/esm/attachment-path.mjs +2 -11
  402. package/dist/lib/esm/attachment-unit-folder.d.mts +1 -1
  403. package/dist/lib/esm/attachment-unit-folder.mjs +2 -11
  404. package/dist/lib/esm/backlink-index.d.mts +1 -1
  405. package/dist/lib/esm/backlink-index.mjs +2 -11
  406. package/dist/lib/esm/backlink.d.mts +1 -1
  407. package/dist/lib/esm/backlink.mjs +2 -11
  408. package/dist/lib/esm/bases-view-registrar.d.mts +1 -1
  409. package/dist/lib/esm/bases-view-registrar.mjs +2 -11
  410. package/dist/lib/esm/callout.d.mts +2 -1
  411. package/dist/lib/esm/callout.mjs +2 -11
  412. package/dist/lib/esm/canvas.d.mts +1 -1
  413. package/dist/lib/esm/canvas.mjs +2 -11
  414. package/dist/lib/esm/case-insensitive-file-index.d.mts +1 -1
  415. package/dist/lib/esm/case-insensitive-file-index.mjs +2 -11
  416. package/dist/lib/esm/code-block-markdown-information.d.mts +1 -1
  417. package/dist/lib/esm/code-block-markdown-information.mjs +0 -36
  418. package/dist/lib/esm/code-block-reg-exp.d.mts +1 -1
  419. package/dist/lib/esm/code-block-reg-exp.mjs +1 -37
  420. package/dist/lib/esm/codemirror/index.d.mts +1 -1
  421. package/dist/lib/esm/codemirror/index.mjs +1 -37
  422. package/dist/lib/esm/codemirror/state-field-spec.d.mts +1 -1
  423. package/dist/lib/esm/codemirror/state-field-spec.mjs +0 -36
  424. package/dist/lib/esm/command-handlers/abstract-file-command-handler.d.mts +1 -1
  425. package/dist/lib/esm/command-handlers/abstract-file-command-handler.mjs +2 -11
  426. package/dist/lib/esm/command-handlers/command-handler-component.d.mts +1 -1
  427. package/dist/lib/esm/command-handlers/command-handler-component.mjs +2 -11
  428. package/dist/lib/esm/command-handlers/command-handler.d.mts +1 -1
  429. package/dist/lib/esm/command-handlers/command-handler.mjs +2 -11
  430. package/dist/lib/esm/command-handlers/editor-command-handler.d.mts +1 -1
  431. package/dist/lib/esm/command-handlers/editor-command-handler.mjs +2 -11
  432. package/dist/lib/esm/command-handlers/file-command-handler.d.mts +1 -1
  433. package/dist/lib/esm/command-handlers/file-command-handler.mjs +5 -14
  434. package/dist/lib/esm/command-handlers/folder-command-handler.d.mts +1 -1
  435. package/dist/lib/esm/command-handlers/folder-command-handler.mjs +5 -14
  436. package/dist/lib/esm/command-handlers/global-command-handler.d.mts +1 -1
  437. package/dist/lib/esm/command-handlers/global-command-handler.mjs +3 -12
  438. package/dist/lib/esm/command-handlers/index.d.mts +1 -1
  439. package/dist/lib/esm/command-handlers/index.mjs +1 -37
  440. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.d.mts +1 -1
  441. package/dist/lib/esm/command-handlers/open-demo-vault-command-handler.mjs +2 -11
  442. package/dist/lib/esm/command-handlers/open-settings-command-handler.d.mts +1 -1
  443. package/dist/lib/esm/command-handlers/open-settings-command-handler.mjs +1 -37
  444. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.d.mts +1 -1
  445. package/dist/lib/esm/command-handlers/unlock-active-note-command-handler.mjs +1 -37
  446. package/dist/lib/esm/command-registrar.d.mts +1 -1
  447. package/dist/lib/esm/command-registrar.mjs +1 -37
  448. package/dist/lib/esm/community-plugins.d.mts +1 -1
  449. package/dist/lib/esm/community-plugins.mjs +2 -11
  450. package/dist/lib/esm/components/abort-signal-component.d.mts +2 -1
  451. package/dist/lib/esm/components/abort-signal-component.mjs +2 -11
  452. package/dist/lib/esm/components/all-windows-event-component.d.mts +2 -1
  453. package/dist/lib/esm/components/all-windows-event-component.mjs +1 -37
  454. package/dist/lib/esm/components/async-error-handler-component.d.mts +1 -1
  455. package/dist/lib/esm/components/async-error-handler-component.mjs +2 -11
  456. package/dist/lib/esm/components/async-events-component.d.mts +1 -1
  457. package/dist/lib/esm/components/async-events-component.mjs +2 -11
  458. package/dist/lib/esm/components/case-insensitive-file-index-component.d.mts +1 -1
  459. package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +1 -37
  460. package/dist/lib/esm/components/component-ex.d.mts +1 -1
  461. package/dist/lib/esm/components/component-ex.mjs +3 -6
  462. package/dist/lib/esm/components/console-debug-component.d.mts +2 -2
  463. package/dist/lib/esm/components/console-debug-component.mjs +2 -11
  464. package/dist/lib/esm/components/core-plugin-toggle-component.d.mts +1 -1
  465. package/dist/lib/esm/components/core-plugin-toggle-component.mjs +2 -11
  466. package/dist/lib/esm/components/disposable-component.d.mts +1 -1
  467. package/dist/lib/esm/components/disposable-component.mjs +3 -6
  468. package/dist/lib/esm/components/embed-extensions-component.d.mts +1 -1
  469. package/dist/lib/esm/components/embed-extensions-component.mjs +1 -37
  470. package/dist/lib/esm/components/generate-markdown-link-default-params-component.d.mts +1 -1
  471. package/dist/lib/esm/components/generate-markdown-link-default-params-component.mjs +1 -37
  472. package/dist/lib/esm/components/index.d.mts +1 -1
  473. package/dist/lib/esm/components/index.mjs +1 -37
  474. package/dist/lib/esm/components/layout-ready-component.d.mts +1 -1
  475. package/dist/lib/esm/components/layout-ready-component.mjs +2 -11
  476. package/dist/lib/esm/components/menu-event-registrar-component.d.mts +1 -1
  477. package/dist/lib/esm/components/menu-event-registrar-component.mjs +1 -37
  478. package/dist/lib/esm/components/monkey-around-component.d.mts +1 -1
  479. package/dist/lib/esm/components/monkey-around-component.mjs +2 -11
  480. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.d.mts +1 -1
  481. package/dist/lib/esm/components/notebook-navigator-menu-event-registrar-component.mjs +2 -11
  482. package/dist/lib/esm/components/plugin-context-component.d.mts +1 -1
  483. package/dist/lib/esm/components/plugin-context-component.mjs +2 -11
  484. package/dist/lib/esm/components/plugin-gate-component.d.mts +2 -1
  485. package/dist/lib/esm/components/plugin-gate-component.mjs +2 -11
  486. package/dist/lib/esm/components/plugin-notice-component.d.mts +2 -1
  487. package/dist/lib/esm/components/plugin-notice-component.mjs +3 -6
  488. package/dist/lib/esm/components/plugin-settings-component.d.mts +1 -1
  489. package/dist/lib/esm/components/plugin-settings-component.mjs +2 -11
  490. package/dist/lib/esm/components/plugin-settings-tab-component.d.mts +1 -1
  491. package/dist/lib/esm/components/plugin-settings-tab-component.mjs +2 -11
  492. package/dist/lib/esm/components/plugin-suggestion-component.d.mts +2 -1
  493. package/dist/lib/esm/components/plugin-suggestion-component.mjs +2 -11
  494. package/dist/lib/esm/components/pointer-position-component.d.mts +1 -1
  495. package/dist/lib/esm/components/pointer-position-component.mjs +1 -37
  496. package/dist/lib/esm/components/registry-component.d.mts +1 -1
  497. package/dist/lib/esm/components/registry-component.mjs +2 -11
  498. package/dist/lib/esm/components/release-notes-component.d.mts +2 -1
  499. package/dist/lib/esm/components/release-notes-component.mjs +2 -11
  500. package/dist/lib/esm/components/rename-delete-handler-component.d.mts +1 -1
  501. package/dist/lib/esm/components/rename-delete-handler-component.mjs +3 -6
  502. package/dist/lib/esm/components/rmdir-guard-component.d.mts +1 -1
  503. package/dist/lib/esm/components/rmdir-guard-component.mjs +1 -37
  504. package/dist/lib/esm/components/settings-migration-component.d.mts +1 -1
  505. package/dist/lib/esm/components/settings-migration-component.mjs +2 -11
  506. package/dist/lib/esm/components/syntax-highlighting-component.d.mts +1 -1
  507. package/dist/lib/esm/components/syntax-highlighting-component.mjs +2 -11
  508. package/dist/lib/esm/components/templates-language-component.d.mts +1 -1
  509. package/dist/lib/esm/components/templates-language-component.mjs +3 -39
  510. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.d.mts +1 -1
  511. package/dist/lib/esm/constructors/get-dom-events-handlers-constructor.mjs +3 -6
  512. package/dist/lib/esm/constructors/index.d.mts +1 -1
  513. package/dist/lib/esm/constructors/index.mjs +1 -37
  514. package/dist/lib/esm/css-class.d.mts +1 -1
  515. package/dist/lib/esm/css-class.mjs +1 -37
  516. package/dist/lib/esm/data-handler.d.mts +1 -1
  517. package/dist/lib/esm/data-handler.mjs +1 -37
  518. package/dist/lib/esm/dataview-link.d.mts +1 -1
  519. package/dist/lib/esm/dataview-link.mjs +2 -11
  520. package/dist/lib/esm/dataview.d.mts +2 -1
  521. package/dist/lib/esm/dataview.mjs +2 -11
  522. package/dist/lib/esm/debug.d.mts +1 -1
  523. package/dist/lib/esm/debug.mjs +2 -11
  524. package/dist/lib/esm/demo-vault-helper-settings.d.mts +1 -1
  525. package/dist/lib/esm/demo-vault-helper-settings.mjs +0 -36
  526. package/dist/lib/esm/demo-vault-helper.d.mts +1 -1
  527. package/dist/lib/esm/demo-vault-helper.mjs +2 -11
  528. package/dist/lib/esm/demo-vault-naming.d.mts +1 -1
  529. package/dist/lib/esm/demo-vault-naming.mjs +1 -37
  530. package/dist/lib/esm/desktop-demo-vault-opener.d.mts +1 -1
  531. package/dist/lib/esm/desktop-demo-vault-opener.mjs +3 -6
  532. package/dist/lib/esm/desktop-trusted-input.d.mts +2 -1
  533. package/dist/lib/esm/desktop-trusted-input.mjs +2 -11
  534. package/dist/lib/esm/editor-extension-registrar.d.mts +1 -1
  535. package/dist/lib/esm/editor-extension-registrar.mjs +2 -11
  536. package/dist/lib/esm/editor-suggest-registrar.d.mts +1 -1
  537. package/dist/lib/esm/editor-suggest-registrar.mjs +2 -11
  538. package/dist/lib/esm/editor.d.mts +1 -1
  539. package/dist/lib/esm/editor.mjs +2 -11
  540. package/dist/lib/esm/events.d.mts +1 -1
  541. package/dist/lib/esm/events.mjs +2 -11
  542. package/dist/lib/esm/extensions-registrar.d.mts +1 -1
  543. package/dist/lib/esm/extensions-registrar.mjs +2 -11
  544. package/dist/lib/esm/file-change.d.mts +2 -1
  545. package/dist/lib/esm/file-change.mjs +2 -11
  546. package/dist/lib/esm/file-explorer.d.mts +1 -1
  547. package/dist/lib/esm/file-explorer.mjs +2 -11
  548. package/dist/lib/esm/file-manager.d.mts +2 -1
  549. package/dist/lib/esm/file-manager.mjs +2 -11
  550. package/dist/lib/esm/file-system.d.mts +1 -1
  551. package/dist/lib/esm/file-system.mjs +2 -11
  552. package/dist/lib/esm/folder-note.d.mts +1 -1
  553. package/dist/lib/esm/folder-note.mjs +2 -11
  554. package/dist/lib/esm/frontmatter-formatting.d.mts +1 -1
  555. package/dist/lib/esm/frontmatter-formatting.mjs +2 -11
  556. package/dist/lib/esm/frontmatter-link-cache-with-offsets.d.mts +1 -1
  557. package/dist/lib/esm/frontmatter-link-cache-with-offsets.mjs +2 -11
  558. package/dist/lib/esm/frontmatter.d.mts +1 -1
  559. package/dist/lib/esm/frontmatter.mjs +2 -11
  560. package/dist/lib/esm/generated-during-build.d.mts +1 -1
  561. package/dist/lib/esm/generated-during-build.mjs +2 -38
  562. package/dist/lib/esm/hover-link-source-registrar.d.mts +1 -1
  563. package/dist/lib/esm/hover-link-source-registrar.mjs +2 -11
  564. package/dist/lib/esm/html-element.d.mts +2 -1
  565. package/dist/lib/esm/html-element.mjs +1 -37
  566. package/dist/lib/esm/i18n/custom-type-options.d.mts +1 -1
  567. package/dist/lib/esm/i18n/custom-type-options.mjs +1 -37
  568. package/dist/lib/esm/i18n/default-translations.d.mts +1 -1
  569. package/dist/lib/esm/i18n/default-translations.mjs +1 -37
  570. package/dist/lib/esm/i18n/i18n.d.mts +2 -2
  571. package/dist/lib/esm/i18n/i18n.mjs +2 -11
  572. package/dist/lib/esm/i18n/index.d.mts +1 -1
  573. package/dist/lib/esm/i18n/index.mjs +1 -37
  574. package/dist/lib/esm/i18n/locales/en.d.mts +1 -1
  575. package/dist/lib/esm/i18n/locales/en.mjs +1 -37
  576. package/dist/lib/esm/i18n/locales/index.d.mts +1 -1
  577. package/dist/lib/esm/i18n/locales/index.mjs +1 -37
  578. package/dist/lib/esm/i18n/locales/translations-map.d.mts +1 -1
  579. package/dist/lib/esm/i18n/locales/translations-map.mjs +1 -37
  580. package/dist/lib/esm/index.d.mts +1 -1
  581. package/dist/lib/esm/index.mjs +1 -37
  582. package/dist/lib/esm/is-in-obsidian.d.mts +1 -1
  583. package/dist/lib/esm/is-in-obsidian.mjs +1 -37
  584. package/dist/lib/esm/library-references.d.mts +2 -0
  585. package/dist/lib/esm/library-styles.d.mts +2 -1
  586. package/dist/lib/esm/library-styles.mjs +2 -11
  587. package/dist/lib/esm/library.mjs +1 -37
  588. package/dist/lib/esm/link-name.d.mts +1 -1
  589. package/dist/lib/esm/link-name.mjs +1 -37
  590. package/dist/lib/esm/link-update-progress.d.mts +1 -1
  591. package/dist/lib/esm/link-update-progress.mjs +0 -36
  592. package/dist/lib/esm/link.d.mts +2 -1
  593. package/dist/lib/esm/link.mjs +3 -6
  594. package/dist/lib/esm/logger.d.mts +2 -1
  595. package/dist/lib/esm/logger.mjs +2 -11
  596. package/dist/lib/esm/loop.d.mts +2 -1
  597. package/dist/lib/esm/loop.mjs +3 -6
  598. package/dist/lib/esm/markdown-code-block-processor-registrar.d.mts +2 -1
  599. package/dist/lib/esm/markdown-code-block-processor-registrar.mjs +2 -11
  600. package/dist/lib/esm/markdown-code-block-processor.d.mts +2 -1
  601. package/dist/lib/esm/markdown-code-block-processor.mjs +2 -11
  602. package/dist/lib/esm/markdown-post-processor-registrar.d.mts +2 -1
  603. package/dist/lib/esm/markdown-post-processor-registrar.mjs +2 -11
  604. package/dist/lib/esm/markdown-view.d.mts +1 -1
  605. package/dist/lib/esm/markdown-view.mjs +1 -37
  606. package/dist/lib/esm/markdown.d.mts +2 -1
  607. package/dist/lib/esm/markdown.mjs +3 -6
  608. package/dist/lib/esm/menu-event-registrar.d.mts +1 -1
  609. package/dist/lib/esm/menu-event-registrar.mjs +0 -36
  610. package/dist/lib/esm/metadata-cache.d.mts +1 -1
  611. package/dist/lib/esm/metadata-cache.mjs +3 -6
  612. package/dist/lib/esm/mobile-trusted-input.d.mts +1 -1
  613. package/dist/lib/esm/mobile-trusted-input.mjs +1 -37
  614. package/dist/lib/esm/modals/alert.d.mts +2 -1
  615. package/dist/lib/esm/modals/alert.mjs +2 -11
  616. package/dist/lib/esm/modals/confirm.d.mts +2 -1
  617. package/dist/lib/esm/modals/confirm.mjs +2 -11
  618. package/dist/lib/esm/modals/index.d.mts +1 -1
  619. package/dist/lib/esm/modals/index.mjs +1 -37
  620. package/dist/lib/esm/modals/minimizable-modal.d.mts +1 -1
  621. package/dist/lib/esm/modals/minimizable-modal.mjs +2 -11
  622. package/dist/lib/esm/modals/modal-command-builder.d.mts +2 -1
  623. package/dist/lib/esm/modals/modal-command-builder.mjs +2 -11
  624. package/dist/lib/esm/modals/modal.d.mts +1 -1
  625. package/dist/lib/esm/modals/modal.mjs +2 -11
  626. package/dist/lib/esm/modals/prompt.d.mts +2 -1
  627. package/dist/lib/esm/modals/prompt.mjs +2 -11
  628. package/dist/lib/esm/modals/select-item.d.mts +1 -1
  629. package/dist/lib/esm/modals/select-item.mjs +2 -11
  630. package/dist/lib/esm/modals/select-option.d.mts +2 -1
  631. package/dist/lib/esm/modals/select-option.mjs +2 -11
  632. package/dist/lib/esm/modals/suggest-modal-command-builder.d.mts +1 -1
  633. package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +1 -37
  634. package/dist/lib/esm/note-priority.d.mts +1 -1
  635. package/dist/lib/esm/note-priority.mjs +2 -11
  636. package/dist/lib/esm/notebook-navigator.d.mts +1 -1
  637. package/dist/lib/esm/notebook-navigator.mjs +1 -37
  638. package/dist/lib/esm/obsidian-dev-utils-state.d.mts +1 -1
  639. package/dist/lib/esm/obsidian-dev-utils-state.mjs +2 -11
  640. package/dist/lib/esm/obsidian-protocol-handler-registrar.d.mts +1 -1
  641. package/dist/lib/esm/obsidian-protocol-handler-registrar.mjs +2 -11
  642. package/dist/lib/esm/obsidian-settings.d.mts +1 -1
  643. package/dist/lib/esm/obsidian-settings.mjs +2 -11
  644. package/dist/lib/esm/parse-link.d.mts +1 -1
  645. package/dist/lib/esm/parse-link.mjs +2 -11
  646. package/dist/lib/esm/path-settings.d.mts +1 -1
  647. package/dist/lib/esm/path-settings.mjs +2 -11
  648. package/dist/lib/esm/pdf.d.mts +2 -1
  649. package/dist/lib/esm/pdf.mjs +2 -11
  650. package/dist/lib/esm/plugin/index.d.mts +1 -1
  651. package/dist/lib/esm/plugin/index.mjs +1 -37
  652. package/dist/lib/esm/plugin/plugin-api-schema.d.mts +1 -1
  653. package/dist/lib/esm/plugin/plugin-api-schema.mjs +2 -11
  654. package/dist/lib/esm/plugin/plugin-api.d.mts +1 -1
  655. package/dist/lib/esm/plugin/plugin-api.mjs +2 -11
  656. package/dist/lib/esm/plugin/plugin-context.d.mts +2 -1
  657. package/dist/lib/esm/plugin/plugin-context.mjs +3 -12
  658. package/dist/lib/esm/plugin/plugin-event-source.d.mts +1 -1
  659. package/dist/lib/esm/plugin/plugin-event-source.mjs +1 -37
  660. package/dist/lib/esm/plugin/plugin-install-state.d.mts +1 -1
  661. package/dist/lib/esm/plugin/plugin-install-state.mjs +1 -37
  662. package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +1 -1
  663. package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +1 -37
  664. package/dist/lib/esm/plugin/plugin-settings-tab.d.mts +2 -1
  665. package/dist/lib/esm/plugin/plugin-settings-tab.mjs +2 -11
  666. package/dist/lib/esm/plugin/plugin.d.mts +1 -1
  667. package/dist/lib/esm/plugin/plugin.mjs +2 -11
  668. package/dist/lib/esm/plugin/settings-migration-api.d.mts +1 -1
  669. package/dist/lib/esm/plugin/settings-migration-api.mjs +2 -11
  670. package/dist/lib/esm/plugin-cli-handler-registrar.d.mts +1 -1
  671. package/dist/lib/esm/plugin-cli-handler-registrar.mjs +2 -11
  672. package/dist/lib/esm/popovers/field-popover.d.mts +1 -1
  673. package/dist/lib/esm/popovers/field-popover.mjs +2 -11
  674. package/dist/lib/esm/popovers/index.d.mts +1 -1
  675. package/dist/lib/esm/popovers/index.mjs +1 -37
  676. package/dist/lib/esm/popovers/popover-anchor.d.mts +2 -1
  677. package/dist/lib/esm/popovers/popover-anchor.mjs +2 -11
  678. package/dist/lib/esm/popovers/popover.d.mts +2 -1
  679. package/dist/lib/esm/popovers/popover.mjs +2 -11
  680. package/dist/lib/esm/property-entry.d.mts +1 -1
  681. package/dist/lib/esm/property-entry.mjs +1 -37
  682. package/dist/lib/esm/queue.d.mts +2 -1
  683. package/dist/lib/esm/queue.mjs +2 -11
  684. package/dist/lib/esm/react/app-context.d.mts +1 -1
  685. package/dist/lib/esm/react/app-context.mjs +2 -11
  686. package/dist/lib/esm/react/index.d.mts +1 -1
  687. package/dist/lib/esm/react/index.mjs +1 -37
  688. package/dist/lib/esm/reference.d.mts +1 -1
  689. package/dist/lib/esm/reference.mjs +2 -11
  690. package/dist/lib/esm/resource-lock.d.mts +2 -1
  691. package/dist/lib/esm/resource-lock.mjs +2 -11
  692. package/dist/lib/esm/resource-url.d.mts +1 -1
  693. package/dist/lib/esm/resource-url.mjs +2 -11
  694. package/dist/lib/esm/ribbon-icon-registrar.d.mts +2 -1
  695. package/dist/lib/esm/ribbon-icon-registrar.mjs +2 -11
  696. package/dist/lib/esm/setting-components/checkbox-component.d.mts +2 -1
  697. package/dist/lib/esm/setting-components/checkbox-component.mjs +2 -11
  698. package/dist/lib/esm/setting-components/code-highlighter-component.d.mts +2 -1
  699. package/dist/lib/esm/setting-components/code-highlighter-component.mjs +2 -11
  700. package/dist/lib/esm/setting-components/date-component.d.mts +2 -1
  701. package/dist/lib/esm/setting-components/date-component.mjs +2 -11
  702. package/dist/lib/esm/setting-components/date-time-component.d.mts +2 -1
  703. package/dist/lib/esm/setting-components/date-time-component.mjs +2 -11
  704. package/dist/lib/esm/setting-components/email-component.d.mts +2 -1
  705. package/dist/lib/esm/setting-components/email-component.mjs +1 -37
  706. package/dist/lib/esm/setting-components/file-component.d.mts +2 -1
  707. package/dist/lib/esm/setting-components/file-component.mjs +1 -37
  708. package/dist/lib/esm/setting-components/index.d.mts +1 -1
  709. package/dist/lib/esm/setting-components/index.mjs +1 -37
  710. package/dist/lib/esm/setting-components/month-component.d.mts +2 -1
  711. package/dist/lib/esm/setting-components/month-component.mjs +2 -11
  712. package/dist/lib/esm/setting-components/multiple-dropdown-component.d.mts +3 -1
  713. package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +2 -11
  714. package/dist/lib/esm/setting-components/multiple-email-component.d.mts +2 -1
  715. package/dist/lib/esm/setting-components/multiple-email-component.mjs +1 -37
  716. package/dist/lib/esm/setting-components/multiple-file-component.d.mts +2 -1
  717. package/dist/lib/esm/setting-components/multiple-file-component.mjs +2 -11
  718. package/dist/lib/esm/setting-components/multiple-text-component.d.mts +2 -1
  719. package/dist/lib/esm/setting-components/multiple-text-component.mjs +2 -11
  720. package/dist/lib/esm/setting-components/number-component.d.mts +2 -1
  721. package/dist/lib/esm/setting-components/number-component.mjs +1 -37
  722. package/dist/lib/esm/setting-components/password-component.d.mts +2 -1
  723. package/dist/lib/esm/setting-components/password-component.mjs +1 -37
  724. package/dist/lib/esm/setting-components/setting-component-wrapper.d.mts +2 -1
  725. package/dist/lib/esm/setting-components/setting-component-wrapper.mjs +2 -11
  726. package/dist/lib/esm/setting-components/telephone-component.d.mts +2 -1
  727. package/dist/lib/esm/setting-components/telephone-component.mjs +1 -37
  728. package/dist/lib/esm/setting-components/text-based-component.d.mts +1 -1
  729. package/dist/lib/esm/setting-components/text-based-component.mjs +2 -11
  730. package/dist/lib/esm/setting-components/time-component.d.mts +2 -1
  731. package/dist/lib/esm/setting-components/time-component.mjs +2 -11
  732. package/dist/lib/esm/setting-components/tri-state-checkbox-component.d.mts +2 -1
  733. package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +2 -11
  734. package/dist/lib/esm/setting-components/typed-dropdown-component.d.mts +3 -1
  735. package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +2 -11
  736. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.d.mts +3 -1
  737. package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +2 -11
  738. package/dist/lib/esm/setting-components/typed-range-text-component.d.mts +1 -1
  739. package/dist/lib/esm/setting-components/typed-range-text-component.mjs +1 -37
  740. package/dist/lib/esm/setting-components/typed-text-component.d.mts +2 -1
  741. package/dist/lib/esm/setting-components/typed-text-component.mjs +2 -11
  742. package/dist/lib/esm/setting-components/url-component.d.mts +2 -1
  743. package/dist/lib/esm/setting-components/url-component.mjs +1 -37
  744. package/dist/lib/esm/setting-components/validator-component.d.mts +1 -1
  745. package/dist/lib/esm/setting-components/validator-component.mjs +2 -11
  746. package/dist/lib/esm/setting-components/value-component-with-change-tracking.d.mts +1 -1
  747. package/dist/lib/esm/setting-components/value-component-with-change-tracking.mjs +0 -36
  748. package/dist/lib/esm/setting-components/week-component.d.mts +2 -1
  749. package/dist/lib/esm/setting-components/week-component.mjs +2 -11
  750. package/dist/lib/esm/setting-ex.d.mts +2 -1
  751. package/dist/lib/esm/setting-ex.mjs +2 -11
  752. package/dist/lib/esm/setting-group-ex.d.mts +2 -1
  753. package/dist/lib/esm/setting-group-ex.mjs +2 -11
  754. package/dist/lib/esm/status-bar-item-registrar.d.mts +2 -1
  755. package/dist/lib/esm/status-bar-item-registrar.mjs +2 -11
  756. package/dist/lib/esm/templater.d.mts +1 -1
  757. package/dist/lib/esm/templater.mjs +1 -37
  758. package/dist/lib/esm/transformers/duration-transformer.d.mts +1 -1
  759. package/dist/lib/esm/transformers/duration-transformer.mjs +2 -11
  760. package/dist/lib/esm/transformers/index.d.mts +1 -1
  761. package/dist/lib/esm/transformers/index.mjs +1 -37
  762. package/dist/lib/esm/trusted-input.d.mts +1 -1
  763. package/dist/lib/esm/trusted-input.mjs +2 -11
  764. package/dist/lib/esm/validation.d.mts +1 -1
  765. package/dist/lib/esm/validation.mjs +2 -11
  766. package/dist/lib/esm/vault-delete.d.mts +1 -1
  767. package/dist/lib/esm/vault-delete.mjs +2 -11
  768. package/dist/lib/esm/vault-transaction.d.mts +1 -1
  769. package/dist/lib/esm/vault-transaction.mjs +3 -6
  770. package/dist/lib/esm/vault.d.mts +1 -1
  771. package/dist/lib/esm/vault.mjs +3 -6
  772. package/dist/lib/esm/view-registrar.d.mts +1 -1
  773. package/dist/lib/esm/view-registrar.mjs +2 -11
  774. package/dist/lib/esm/workspace.d.mts +2 -1
  775. package/dist/lib/esm/workspace.mjs +2 -11
  776. package/package.json +24 -8
@@ -2,13 +2,7 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
-
6
5
  (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
- symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
- }
11
-
12
6
  function ensureBrowserProcess() {
13
7
  const browserProcess = {
14
8
  browser: true,
@@ -33,20 +27,7 @@ function ensureBrowserProcess() {
33
27
  existingProcessRecord["browser"] = true;
34
28
  }
35
29
 
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
- })();
30
+ ensureBrowserProcess();
50
31
  })();
51
32
  (function patchObsidianRequire() {
52
33
  const originalRequire = require;
@@ -573,4 +554,4 @@ function getResolvedPath(path) {
573
554
  isTreatedAsAttachment,
574
555
  trimMarkdownExtension
575
556
  });
576
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ZpbGUtc3lzdGVtLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB7QGxpbmsgVEFic3RyYWN0RmlsZX0sIHtAbGluayBURmlsZX0sIGFuZCB7QGxpbmsgVEZvbGRlcn0gaW5zdGFuY2VzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7XG4gIGJhc2VuYW1lLFxuICBleHRuYW1lLFxuICByZXNvbHZlXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9wYXRoJztcbmltcG9ydCB7IHRyaW1FbmQgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVRGaWxlSW5zdGFuY2UsXG4gIGNyZWF0ZVRGb2xkZXJJbnN0YW5jZSxcbiAgZ2V0RGF0YUFkYXB0ZXJFeCxcbiAgcGFyZW50Rm9sZGVyUGF0aFxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQge1xuICBub3JtYWxpemVQYXRoLFxuICBUQWJzdHJhY3RGaWxlLFxuICBURmlsZSxcbiAgVEZvbGRlcixcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXggfSBmcm9tICcuL2Nhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleC50cyc7XG5pbXBvcnQge1xuICBjaGVja1Byb3BlcnR5RW50cnlNYXRjaGVzLFxuICBpc1Byb3BlcnR5RW50cnlcbn0gZnJvbSAnLi9wcm9wZXJ0eS1lbnRyeS50cyc7XG5cbi8qKlxuICogQSBmaWxlIGV4dGVuc2lvbiBmb3IgYGJhc2VgIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3QgQkFTRV9GSUxFX0VYVEVOU0lPTiA9ICdiYXNlJztcblxuLyoqXG4gKiBBIGZpbGUgZXh0ZW5zaW9uIGZvciBgY2FudmFzYCBmaWxlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IENBTlZBU19GSUxFX0VYVEVOU0lPTiA9ICdjYW52YXMnO1xuXG4vKipcbiAqIEEgZmlsZSBleHRlbnNpb24gZm9yIGBtYXJrZG93bmAgZmlsZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiA9ICdtZCc7XG5cbi8qKlxuICogQSB0eXBlIG9mIGZpbGUgc3lzdGVtIG9iamVjdC5cbiAqL1xuZXhwb3J0IGVudW0gRmlsZVN5c3RlbVR5cGUge1xuICAvKipcbiAgICogQSBmaWxlLlxuICAgKi9cbiAgRmlsZSA9ICdmaWxlJyxcbiAgLyoqXG4gICAqIEEgZm9sZGVyLlxuICAgKi9cbiAgRm9sZGVyID0gJ2ZvbGRlcidcbn1cbi8qKlxuICogSG93IHtAbGluayBnZXRCYXNlbmFtZX0gYW5kIHtAbGluayBnZXRFeHRlbnNpb259IHNob3VsZCBhbnN3ZXIgZm9yIGEgcGF0aCB0aGF0IHJlc29sdmVzIHRvIG5vdGhpbmcgaW4gdGhlIHZhdWx0LlxuICpcbiAqIE5vdGhpbmcgaW4gdGhlIHZhdWx0IHNheXMgd2hldGhlciBhbiB1bnJlc29sdmVkIGBhbHBoYS5icmF2b2AgbmFtZXMgYSBkb3R0ZWQgZm9sZGVyIG9yIGEgYC5icmF2b2AgZmlsZSwgc28gdGhlIGNhbGxlciBkZWNpZGVzLlxuICovXG5leHBvcnQgZW51bSBNaXNzaW5nUGF0aFRyZWF0bWVudCB7XG4gIC8qKlxuICAgKiBSZWFkIHRoZSBwYXRoIGFzIGEgZmlsZSBwYXRoOiBgYWxwaGEuYnJhdm9gIGlzIGJhc2VuYW1lIGBhbHBoYWAgcGx1cyBleHRlbnNpb24gYGJyYXZvYC5cbiAgICovXG4gIEZpbGUgPSAnZmlsZScsXG4gIC8qKlxuICAgKiBSZWFkIHRoZSBwYXRoIGFzIGEgZm9sZGVyIHBhdGg6IGBhbHBoYS5icmF2b2AgaXMgYmFzZW5hbWUgYGFscGhhLmJyYXZvYCB3aXRoIG5vIGV4dGVuc2lvbi5cbiAgICovXG4gIEZvbGRlciA9ICdmb2xkZXInLFxuICAvKipcbiAgICogVGhyb3cgaW5zdGVhZCBvZiBndWVzc2luZy4gVGhpcyBpcyB0aGUgZGVmYXVsdC5cbiAgICovXG4gIFRocm93ID0gJ3Rocm93J1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBkb2VzRXhpc3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvZXNFeGlzdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHBlcmZvcm0gYSBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4gV2hlbiBgdW5kZWZpbmVkYCBvciBub3Qgc3BlY2lmaWVkLCB0aGUgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYWN0dWFsIGZpbGUgc3lzdGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNDYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdCB0byBjaGVjay4gRGVmYXVsdCBpcyBgdW5kZWZpbmVkYC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBGaWxlU3lzdGVtVHlwZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QWJzdHJhY3RGaWxlT3JOdWxsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBYnN0cmFjdEZpbGVPck51bGxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIEFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBwZXJmb3JtIGEgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2guIFdoZW4gYHVuZGVmaW5lZGAgb3Igbm90IHNwZWNpZmllZCwgdGhlIGJlaGF2aW9yIGlzIGRldGVybWluZWQgYnkgdGhlIGFjdHVhbCBmaWxlIHN5c3RlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IGlzQ2FzZUluc2Vuc2l0aXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byByZXRyaWV2ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IG51bGwgfCBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEFic3RyYWN0RmlsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QWJzdHJhY3RGaWxlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBBcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcGVyZm9ybSBhIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoLiBXaGVuIGB1bmRlZmluZWRgIG9yIG5vdCBzcGVjaWZpZWQsIHRoZSBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhY3R1YWwgZmlsZSBzeXN0ZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBpc0Nhc2VJbnNlbnNpdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gcmV0cmlldmUgdGhlIGFic3RyYWN0IGZpbGUgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCYXNlbmFtZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFzZW5hbWVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIEFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIGdldCB0aGUgYmFzZSBuYW1lIG9mLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xuXG4gIC8qKlxuICAgKiBIb3cgdG8gYW5zd2VyIHdoZW4gdGhlIHBhdGggcmVzb2x2ZXMgdG8gbm90aGluZyBpbiB0aGUgdmF1bHQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvd2BcbiAgICovXG4gIHJlYWRvbmx5IHdoZW5NaXNzaW5nVHJlYXRBcz86IE1pc3NpbmdQYXRoVHJlYXRtZW50O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRFeHRlbnNpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEV4dGVuc2lvblBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gZ2V0IHRoZSBleHRlbnNpb24gb2YuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIEhvdyB0byBhbnN3ZXIgd2hlbiB0aGUgcGF0aCByZXNvbHZlcyB0byBub3RoaW5nIGluIHRoZSB2YXVsdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYE1pc3NpbmdQYXRoVHJlYXRtZW50LlRocm93YFxuICAgKi9cbiAgcmVhZG9ubHkgd2hlbk1pc3NpbmdUcmVhdEFzPzogTWlzc2luZ1BhdGhUcmVhdG1lbnQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEZpbGVPck51bGx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEZpbGVPck51bGxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIEFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBwZXJmb3JtIGEgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2guIFdoZW4gYHVuZGVmaW5lZGAgb3Igbm90IHNwZWNpZmllZCwgdGhlIGJlaGF2aW9yIGlzIGRldGVybWluZWQgYnkgdGhlIGFjdHVhbCBmaWxlIHN5c3RlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IGlzQ2FzZUluc2Vuc2l0aXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IG51bGwgfCBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRGaWxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRGaWxlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBBcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcGVyZm9ybSBhIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoLiBXaGVuIGB1bmRlZmluZWRgIG9yIG5vdCBzcGVjaWZpZWQsIHRoZSBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhY3R1YWwgZmlsZSBzeXN0ZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBpc0Nhc2VJbnNlbnNpdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gcmV0cmlldmUgdGhlIGZpbGUgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIGEgbm9uLWV4aXN0aW5nIGZpbGUuXG4gICAqICBJZiBgdHJ1ZWAsIGEgbmV3IGZpbGUgaXMgY3JlYXRlZCBmb3IgdGhlIHByb3ZpZGVkIHBhdGguXG4gICAqICBJZiBgZmFsc2VgLCBhbiBlcnJvciBpcyB0aHJvd24gaWYgdGhlIGZpbGUgaXMgbm90IGZvdW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRGb2xkZXJPck51bGx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEZvbGRlck9yTnVsbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHBlcmZvcm0gYSBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4gV2hlbiBgdW5kZWZpbmVkYCBvciBub3Qgc3BlY2lmaWVkLCB0aGUgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYWN0dWFsIGZpbGUgc3lzdGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNDYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmb2xkZXIgdG8gcmV0cmlldmUgdGhlIGZvbGRlciBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRm9sZGVyOiBudWxsIHwgUGF0aE9yRm9sZGVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRGb2xkZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEZvbGRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHBlcmZvcm0gYSBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4gV2hlbiBgdW5kZWZpbmVkYCBvciBub3Qgc3BlY2lmaWVkLCB0aGUgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYWN0dWFsIGZpbGUgc3lzdGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNDYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmb2xkZXIgaWRlbnRpZmllci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZvbGRlcjogUGF0aE9yRm9sZGVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IHRoZSBmb2xkZXIgdG8gbm90IGV4aXN0LlxuICAgKiAgSWYgYHRydWVgLCBhIG5ldyBmb2xkZXIgaXMgY3JlYXRlZCBmb3IgdGhlIHByb3ZpZGVkIHBhdGguXG4gICAqICBJZiBgZmFsc2VgLCBhbiBlcnJvciBpcyB0aHJvd24gaWYgdGhlIGZvbGRlciBpcyBub3QgZm91bmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVOb25FeGlzdGluZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldE1hcmtkb3duRmlsZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE1hcmtkb3duRmlsZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIEFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byByZWN1cnNpdmVseSBzZWFyY2ggZm9yIG1hcmtkb3duIGZpbGVzIHdpdGhpbiBzdWJmb2xkZXJzLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzUmVjdXJzaXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZm9sZGVyIHRvIHJldHJpZXZlIHRoZSBtYXJrZG93biBmaWxlcyBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGlzVHJlYXRlZEFzQXR0YWNobWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXNUcmVhdGVkQXNBdHRhY2htZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UsIHdoaWNoIGxldHMgYSBgcHJvcGVydHk6YCBlbnRyeSBvZiB7QGxpbmsgYXR0YWNobWVudEV4dGVuc2lvbnN9IHJlYWQgdGhlIGZpbGUncyBmcm9udG1hdHRlciBmcm9tIHRoZSBtZXRhZGF0YSBjYWNoZS5cbiAgICogV2l0aG91dCBpdCwgYHByb3BlcnR5OmAgZW50cmllcyBtYXRjaCBub3RoaW5nIGFuZCBvbmx5IHRoZSBleHRlbnNpb24gZW50cmllcyBhcmUgZXZhbHVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwPzogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZW50cmllcyB0aGF0IG1hcmsgYSBmaWxlIGFzIGFuIGF0dGFjaG1lbnQsIGUuZy4gYFsnLmV4Y2FsaWRyYXcubWQnLCAncHJvcGVydHk6ZXhjYWxpZHJhdy1wbHVnaW4nXWAuXG4gICAqXG4gICAqIEFuIGV4dGVuc2lvbiBlbnRyeSBpcyBub3JtYWxpemVkIGJlZm9yZSBtYXRjaGluZzogc3Vycm91bmRpbmcgd2hpdGVzcGFjZSBpcyB0cmltbWVkLCBhIHNpbmdsZSBsZWFkaW5nIGRvdCBpcyBlbmZvcmNlZCwgYW5kIHRoZSBjb21wYXJpc29uIGlzXG4gICAqIGNhc2UtaW5zZW5zaXRpdmUuIEVtcHR5IGVudHJpZXMgYXJlIGlnbm9yZWQuXG4gICAqXG4gICAqIEEgYHByb3BlcnR5Om5hbWVgIGVudHJ5IG1hdGNoZXMgYSBtYXJrZG93biBmaWxlIHdob3NlIGZyb250bWF0dGVyIGhhcyBgbmFtZWAsIGFuZCBgcHJvcGVydHk6bmFtZT12YWx1ZWAgb25lIHdob3NlIGBuYW1lYCByZW5kZXJzIGFzIGB2YWx1ZWAgXHUyMDE0IHRoZVxuICAgKiBzYW1lIHN5bnRheCBub3RlIHByaW9yaXRpZXMgdXNlLiBJdCBpcyBldmFsdWF0ZWQgb25seSB3aGVuIHtAbGluayBhcHB9IGlzIGdpdmVuLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEV4dGVuc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGNsYXNzaWZ5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogbnVsbCB8IFBhdGhPckFic3RyYWN0RmlsZTtcbn1cblxuLyoqXG4gKiBBIHBhdGggb3IgYW4gYWJzdHJhY3QgZmlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF0aE9yQWJzdHJhY3RGaWxlID0gc3RyaW5nIHwgVEFic3RyYWN0RmlsZTtcblxuLyoqXG4gKiBBIHBhdGggb3IgYSBmaWxlLlxuICovXG5leHBvcnQgdHlwZSBQYXRoT3JGaWxlID0gc3RyaW5nIHwgVEZpbGU7XG5cbi8qKlxuICogQSBwYXRoIG9yIGEgZm9sZGVyLlxuICovXG5leHBvcnQgdHlwZSBQYXRoT3JGb2xkZXIgPSBzdHJpbmcgfCBURm9sZGVyO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRDYWNoZWRGcm9udG1hdHRlcn0uXG4gKi9cbmludGVyZmFjZSBHZXRDYWNoZWRGcm9udG1hdHRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgd2hvc2UgZnJvbnRtYXR0ZXIgdG8gcmVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0RmlsZUludGVybmFsfS5cbiAqL1xuaW50ZXJmYWNlIEdldEZpbGVJbnRlcm5hbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHBlcmZvcm0gYSBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4gV2hlbiBgdW5kZWZpbmVkYCBvciBub3Qgc3BlY2lmaWVkLCB0aGUgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYWN0dWFsIGZpbGUgc3lzdGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNDYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byByZXRyaWV2ZSB0aGUgYWJzdHJhY3QgZmlsZSBmb3IuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXJyYXkgb2YgYWJzdHJhY3QgZmlsZXMgdG8gYW4gYXJyYXkgb2YgZmlsZXMuXG4gKlxuICogQHBhcmFtIGFic3RyYWN0RmlsZXMgLSBUaGUgYWJzdHJhY3QgZmlsZXMgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBmaWxlcy5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYW55IG9mIHRoZSBhYnN0cmFjdCBmaWxlcyBhcmUgbm90IGZpbGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheU9mRmlsZXMoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdKTogVEZpbGVbXSB7XG4gIHJldHVybiBhYnN0cmFjdEZpbGVzLm1hcCgoYWJzdHJhY3RGaWxlKSA9PiBhc0ZpbGUoYWJzdHJhY3RGaWxlKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXJyYXkgb2YgYWJzdHJhY3QgZmlsZXMgdG8gYW4gYXJyYXkgb2YgZm9sZGVycy5cbiAqXG4gKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBhYnN0cmFjdCBmaWxlcyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGFycmF5IG9mIGZvbGRlcnMuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGFueSBvZiB0aGUgYWJzdHJhY3QgZmlsZXMgYXJlIG5vdCBmb2xkZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheU9mRm9sZGVycyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBURm9sZGVyW10ge1xuICByZXR1cm4gYWJzdHJhY3RGaWxlcy5tYXAoKGFic3RyYWN0RmlsZSkgPT4gYXNGb2xkZXIoYWJzdHJhY3RGaWxlKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYWJzdHJhY3QgZmlsZSB0byBhIGZpbGUuXG4gKlxuICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBhYnN0cmFjdCBmaWxlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgZmlsZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGFic3RyYWN0IGZpbGUgaXMgbm90IGEgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRmlsZShhYnN0cmFjdEZpbGU6IG51bGwgfCBUQWJzdHJhY3RGaWxlKTogVEZpbGUge1xuICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUoYXNGaWxlT3JOdWxsKGFic3RyYWN0RmlsZSksICdBYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZpbGUnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhYnN0cmFjdCBmaWxlIHRvIGEgZmlsZSBvciBgbnVsbGAuXG4gKlxuICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBhYnN0cmFjdCBmaWxlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgZmlsZSBvciBgbnVsbGAuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0ZpbGVPck51bGwoYWJzdHJhY3RGaWxlOiBudWxsIHwgVEFic3RyYWN0RmlsZSk6IG51bGwgfCBURmlsZSB7XG4gIGlmIChhYnN0cmFjdEZpbGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoYWJzdHJhY3RGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignQWJzdHJhY3QgZmlsZSBpcyBub3QgYSBmaWxlJyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYWJzdHJhY3QgZmlsZSB0byBhIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGFic3RyYWN0IGZpbGUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRm9sZGVyKGFic3RyYWN0RmlsZTogbnVsbCB8IFRBYnN0cmFjdEZpbGUpOiBURm9sZGVyIHtcbiAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKGFzRm9sZGVyT3JOdWxsKGFic3RyYWN0RmlsZSksICdBYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZvbGRlcicpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFic3RyYWN0IGZpbGUgdG8gYSBmb2xkZXIgb3IgYG51bGxgLlxuICpcbiAqIEBwYXJhbSBhYnN0cmFjdEZpbGUgLSBUaGUgYWJzdHJhY3QgZmlsZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGZvbGRlciBvciBgbnVsbGAuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRm9sZGVyT3JOdWxsKGFic3RyYWN0RmlsZTogbnVsbCB8IFRBYnN0cmFjdEZpbGUpOiBudWxsIHwgVEZvbGRlciB7XG4gIGlmIChhYnN0cmFjdEZpbGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoYWJzdHJhY3RGaWxlIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgIHJldHVybiBhYnN0cmFjdEZpbGU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdBYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZvbGRlcicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gcGF0aCBvciBmaWxlIGhhcyB0aGUgc3BlY2lmaWVkIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gY2hlY2suXG4gKiBAcGFyYW0gZXh0ZW5zaW9uIC0gVGhlIGV4dGVuc2lvbiB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcmV0dXJucyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcGF0aCBvciBmaWxlIGhhcyB0aGUgc3BlY2lmaWVkIGV4dGVuc2lvbiwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0V4dGVuc2lvbihwYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yQWJzdHJhY3RGaWxlLCBleHRlbnNpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBGb3IgYSBzdHJpbmcgcGF0aCwgY29tcGFyZSB0aGUgcGF0aCdzIG93biBleHRlbnNpb24gaW5zdGVhZCBvZiByZXNvbHZpbmcgdGhlIGZpbGUuXG4gIC8vIFJlc29sdmluZyBhIHN0cmluZyBwYXRoIGlzIE8odmF1bHQpIG9uIGEgbWlzcyBvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbS5cbiAgLy8gVGhhdCBtaXNzIGlzIHRoZSBob3QgcGF0aCBkdXJpbmcgZGVsZXRpb24gY2FzY2FkZXMuXG4gIC8vIE9ic2lkaWFuIGxvd2VyY2FzZXMgYSBmaWxlJ3MgY2Fub25pY2FsIGV4dGVuc2lvbiwgc28gY29tcGFyZSBjYXNlLWluc2Vuc2l0aXZlbHkuXG4gIHJldHVybiBpc0ZpbGUocGF0aE9yRmlsZSkgPyBwYXRoT3JGaWxlLmV4dGVuc2lvbiA9PT0gZXh0ZW5zaW9uIDogdHlwZW9mIHBhdGhPckZpbGUgPT09ICdzdHJpbmcnICYmIGV4dG5hbWUocGF0aE9yRmlsZSkuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSA9PT0gZXh0ZW5zaW9uO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gcGF0aCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhdGggZXhpc3RzLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvZXNFeGlzdChwYXJhbXM6IERvZXNFeGlzdFBhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGlzQ2FzZUluc2Vuc2l0aXZlLFxuICAgIHBhdGgsXG4gICAgdHlwZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBhYnN0cmFjdEZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdldEFic3RyYWN0RmlsZU9yTnVsbFBhcmFtcz4oe1xuICAgIGFwcCxcbiAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICBwYXRoT3JGaWxlOiBwYXRoXG4gIH0pKTtcbiAgcmV0dXJuIGFic3RyYWN0RmlsZSAhPT0gbnVsbCAmJiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IGdldEZpbGVTeXN0ZW1UeXBlKGFic3RyYWN0RmlsZSkgPT09IHR5cGUpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgVEFic3RyYWN0RmlsZSBvYmplY3QgZm9yIHRoZSBnaXZlbiBwYXRoIG9yIGFic3RyYWN0IGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmV0cmlldmFsLlxuICogQHJldHVybnMgVGhlIGFic3RyYWN0IGZpbGUuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhYnN0cmFjdCBmaWxlIGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFic3RyYWN0RmlsZShwYXJhbXM6IEdldEFic3RyYWN0RmlsZVBhcmFtcyk6IFRBYnN0cmFjdEZpbGUge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGlzQ2FzZUluc2Vuc2l0aXZlLFxuICAgIHBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKFxuICAgIGdldEFic3RyYWN0RmlsZU9yTnVsbChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8R2V0QWJzdHJhY3RGaWxlT3JOdWxsUGFyYW1zPih7XG4gICAgICBhcHAsXG4gICAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICAgIHBhdGhPckZpbGVcbiAgICB9KSksXG4gICAgYEFic3RyYWN0IGZpbGUgbm90IGZvdW5kOiAke3BhdGhPckZpbGUgYXMgc3RyaW5nfWBcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYWJzdHJhY3QgZmlsZSBvciBgbnVsbGAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhdGggb3IgYWJzdHJhY3QgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZXRyaWV2YWwuXG4gKiBAcmV0dXJucyBUaGUgYWJzdHJhY3QgZmlsZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFic3RyYWN0RmlsZU9yTnVsbChwYXJhbXM6IEdldEFic3RyYWN0RmlsZU9yTnVsbFBhcmFtcyk6IG51bGwgfCBUQWJzdHJhY3RGaWxlIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICBwYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGlmIChwYXRoT3JGaWxlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaXNBYnN0cmFjdEZpbGUocGF0aE9yRmlsZSkpIHtcbiAgICBpZiAoaXNGaWxlKHBhdGhPckZpbGUpKSB7XG4gICAgICByZXR1cm4gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aE9yRmlsZS5wYXRoKSA/PyBwYXRoT3JGaWxlO1xuICAgIH1cbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVEFic3RyYWN0RmlsZSBpcyBhbHdheXMgVEZpbGUgb3IgVEZvbGRlciBpbiBPYnNpZGlhbjsgZGVmZW5zaXZlIGZhbGxiYWNrLiAqL1xuICAgIHJldHVybiBpc0ZvbGRlcihwYXRoT3JGaWxlKSA/IChhcHAudmF1bHQuZ2V0Rm9sZGVyQnlQYXRoKHBhdGhPckZpbGUucGF0aCkgPz8gcGF0aE9yRmlsZSkgOiAoYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChwYXRoT3JGaWxlLnBhdGgpID8/IHBhdGhPckZpbGUpO1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIH1cblxuICBjb25zdCBmaWxlID0gZ2V0RmlsZUludGVybmFsKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxHZXRGaWxlSW50ZXJuYWxQYXJhbXM+KHtcbiAgICBhcHAsXG4gICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgcGF0aDogcGF0aE9yRmlsZVxuICB9KSk7XG5cbiAgaWYgKGZpbGUpIHtcbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IGdldFJlc29sdmVkUGF0aChwYXRoT3JGaWxlKTtcblxuICByZXR1cm4gcmVzb2x2ZWRQYXRoID09PSBwYXRoT3JGaWxlXG4gICAgPyBudWxsXG4gICAgOiBnZXRGaWxlSW50ZXJuYWwobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdldEZpbGVJbnRlcm5hbFBhcmFtcz4oe1xuICAgICAgYXBwLFxuICAgICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgICBwYXRoOiByZXNvbHZlZFBhdGhcbiAgICB9KSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSBuYW1lIG9mIHRoZSBnaXZlbiBgcGF0aE9yRmlsZWA6IGEgZmlsZSdzIG5hbWUgd2l0aG91dCBpdHMgZXh0ZW5zaW9uLCBhIGZvbGRlcidzIGZ1bGwgbmFtZS5cbiAqXG4gKiBVbmxpa2UgYGJhc2VuYW1lYCBmcm9tIGBwYXRoLnRzYCwgd2hpY2ggaXMgYSBwdXJlIHN0cmluZyBmdW5jdGlvbiwgdGhpcyByZXNvbHZlcyB0aGUgYXJndW1lbnQgYWdhaW5zdCB0aGUgdmF1bHQgZmlyc3QuIFRoYXQgaXMgd2hhdCBsZXRzIGEgZm9sZGVyIHdob3NlIG5hbWVcbiAqIGNvbnRhaW5zIGEgZG90IGFuc3dlciB3aXRoIGl0cyB3aG9sZSBuYW1lIGluc3RlYWQgb2YgYSBib2d1cyBleHRlbnNpb24gc3BsaXQsIGFuZCBpdCBpcyB3aHkgYSBjYWxsZXIgaGFuZGxpbmcgYm90aCBraW5kcyBubyBsb25nZXIgaGFzIHRvIGJyYW5jaCBvblxuICoge0BsaW5rIGlzRmlsZX0gaXRzZWxmIFx1MjAxNCBhIGZvbGRlciBoYXMgbm8gYGJhc2VuYW1lYCBvZiBpdHMgb3duLlxuICpcbiAqIEEgcGF0aCB0aGF0IHJlc29sdmVzIHRvIG5vdGhpbmcgaGFzIG5vIGFuc3dlciB0byBsb29rIHVwLCBzbyB7QGxpbmsgR2V0QmFzZW5hbWVQYXJhbXMud2hlbk1pc3NpbmdUcmVhdEFzfSBkZWNpZGVzIHdoYXQgaGFwcGVucy4gSXQgZGVmYXVsdHMgdG9cbiAqIHtAbGluayBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvd30gcmF0aGVyIHRoYW4gdG8gYSBndWVzczogYGFscGhhLmJyYXZvYCBtYXkgbmFtZSBhIGRvdHRlZCBmb2xkZXIgb3IgYSBgLmJyYXZvYCBmaWxlLCBhbmQgbm90aGluZyBpbiB0aGUgdmF1bHQgc2F5c1xuICogd2hpY2gsIHNvIGEgc2lsZW50bHkgd3JvbmcgYW5zd2VyIGlzIHdvcnNlIHRoYW4gYW4gZXJyb3IuIFBhc3Mge0BsaW5rIE1pc3NpbmdQYXRoVHJlYXRtZW50LkZpbGV9IGZvciB0aGUgYGNoZWNrRXh0ZW5zaW9uYCByZWFkaW5nIG9mIGEgYmFyZSBzdHJpbmcsIG9yXG4gKiB7QGxpbmsgTWlzc2luZ1BhdGhUcmVhdG1lbnQuRm9sZGVyfSBmb3IgdGhlIG90aGVyIG9uZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZXRyaWV2YWwuXG4gKiBAcmV0dXJucyBUaGUgYmFzZSBuYW1lIG9mIHRoZSBgcGF0aE9yRmlsZWAuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBwYXRoIHJlc29sdmVzIHRvIG5vdGhpbmcgYW5kIGB3aGVuTWlzc2luZ1RyZWF0QXNgIGlzIHtAbGluayBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvd30gKHRoZSBkZWZhdWx0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2VuYW1lKHBhcmFtczogR2V0QmFzZW5hbWVQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIHBhdGhPckZpbGUsXG4gICAgd2hlbk1pc3NpbmdUcmVhdEFzXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgYWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHtcbiAgICBhcHAsXG4gICAgcGF0aE9yRmlsZVxuICB9KTtcblxuICBpZiAoaXNGaWxlKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlLmJhc2VuYW1lO1xuICB9XG5cbiAgaWYgKGlzRm9sZGVyKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlLm5hbWU7XG4gIH1cblxuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIGNvbnN0IHRyZWF0bWVudCA9IHdoZW5NaXNzaW5nVHJlYXRBcyA/PyBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvdztcblxuICBpZiAodHJlYXRtZW50ID09PSBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvdykge1xuICAgIHRocm93IG5ldyBFcnJvcihgQWJzdHJhY3QgZmlsZSBub3QgZm91bmQ6ICR7cGF0aH1gKTtcbiAgfVxuXG4gIHJldHVybiB0cmVhdG1lbnQgPT09IE1pc3NpbmdQYXRoVHJlYXRtZW50LkZvbGRlciA/IGJhc2VuYW1lKHBhdGgpIDogYmFzZW5hbWUocGF0aCwgZXh0bmFtZShwYXRoKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBnaXZlbiBgcGF0aE9yRmlsZWA6IGEgZmlsZSdzIGV4dGVuc2lvbiB3aXRob3V0IHRoZSBsZWFkaW5nIGRvdCwgYW5kIGFuIGVtcHR5IHN0cmluZyBmb3IgYSBmb2xkZXIuXG4gKlxuICogVW5saWtlIGBleHRuYW1lYCBmcm9tIGBwYXRoLnRzYCwgd2hpY2ggaXMgYSBwdXJlIHN0cmluZyBmdW5jdGlvbiwgdGhpcyByZXNvbHZlcyB0aGUgYXJndW1lbnQgYWdhaW5zdCB0aGUgdmF1bHQgZmlyc3QsIHNvIGEgZm9sZGVyIHdob3NlIG5hbWUgY29udGFpbnMgYSBkb3RcbiAqIGFuc3dlcnMgd2l0aCBhbiBlbXB0eSBzdHJpbmcgcmF0aGVyIHRoYW4gYSBib2d1cyBleHRlbnNpb24uIEEgZm9sZGVyIGhhcyBubyBgZXh0ZW5zaW9uYCBvZiBpdHMgb3duLCB3aGljaCBpcyB3aHkgYSBjYWxsZXIgaGFuZGxpbmcgYm90aCBraW5kcyB3b3VsZFxuICogb3RoZXJ3aXNlIGJyYW5jaCBvbiB7QGxpbmsgaXNGaWxlfSBpdHNlbGYuXG4gKlxuICogQSBwYXRoIHRoYXQgcmVzb2x2ZXMgdG8gbm90aGluZyBoYXMgbm8gYW5zd2VyIHRvIGxvb2sgdXAsIHNvIHtAbGluayBHZXRFeHRlbnNpb25QYXJhbXMud2hlbk1pc3NpbmdUcmVhdEFzfSBkZWNpZGVzIHdoYXQgaGFwcGVucy4gSXQgZGVmYXVsdHMgdG9cbiAqIHtAbGluayBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvd30gcmF0aGVyIHRoYW4gdG8gYSBndWVzczogYGFscGhhLmJyYXZvYCBtYXkgbmFtZSBhIGRvdHRlZCBmb2xkZXIgb3IgYSBgLmJyYXZvYCBmaWxlLCBhbmQgbm90aGluZyBpbiB0aGUgdmF1bHQgc2F5c1xuICogd2hpY2gsIHNvIGEgc2lsZW50bHkgd3JvbmcgYW5zd2VyIGlzIHdvcnNlIHRoYW4gYW4gZXJyb3IuIFBhc3Mge0BsaW5rIE1pc3NpbmdQYXRoVHJlYXRtZW50LkZpbGV9IGZvciB0aGUgYGNoZWNrRXh0ZW5zaW9uYCByZWFkaW5nIG9mIGEgYmFyZSBzdHJpbmcsIG9yXG4gKiB7QGxpbmsgTWlzc2luZ1BhdGhUcmVhdG1lbnQuRm9sZGVyfSBmb3IgdGhlIG90aGVyIG9uZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZXRyaWV2YWwuXG4gKiBAcmV0dXJucyBUaGUgZXh0ZW5zaW9uIG9mIHRoZSBgcGF0aE9yRmlsZWAsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBpdCBoYXMgbm9uZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHBhdGggcmVzb2x2ZXMgdG8gbm90aGluZyBhbmQgYHdoZW5NaXNzaW5nVHJlYXRBc2AgaXMge0BsaW5rIE1pc3NpbmdQYXRoVHJlYXRtZW50LlRocm93fSAodGhlIGRlZmF1bHQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKHBhcmFtczogR2V0RXh0ZW5zaW9uUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBwYXRoT3JGaWxlLFxuICAgIHdoZW5NaXNzaW5nVHJlYXRBc1xuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGFic3RyYWN0RmlsZSA9IGdldEFic3RyYWN0RmlsZU9yTnVsbCh7XG4gICAgYXBwLFxuICAgIHBhdGhPckZpbGVcbiAgfSk7XG5cbiAgaWYgKGlzRmlsZShhYnN0cmFjdEZpbGUpKSB7XG4gICAgcmV0dXJuIGFic3RyYWN0RmlsZS5leHRlbnNpb247XG4gIH1cblxuICBpZiAoaXNGb2xkZXIoYWJzdHJhY3RGaWxlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG5cbiAgY29uc3QgdHJlYXRtZW50ID0gd2hlbk1pc3NpbmdUcmVhdEFzID8/IE1pc3NpbmdQYXRoVHJlYXRtZW50LlRocm93O1xuXG4gIGlmICh0cmVhdG1lbnQgPT09IE1pc3NpbmdQYXRoVHJlYXRtZW50LlRocm93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBYnN0cmFjdCBmaWxlIG5vdCBmb3VuZDogJHtwYXRofWApO1xuICB9XG5cbiAgLy8gT2JzaWRpYW4gbG93ZXJjYXNlcyBhIGZpbGUncyBjYW5vbmljYWwgZXh0ZW5zaW9uLCBzbyBhIHBhdGggcmVhZCBhcyBhIGZpbGUgaGFzIHRvIGFuc3dlciBpbiB0aGUgc2FtZSBjYXNlLlxuICByZXR1cm4gdHJlYXRtZW50ID09PSBNaXNzaW5nUGF0aFRyZWF0bWVudC5Gb2xkZXIgPyAnJyA6IGV4dG5hbWUocGF0aCkuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBmaWxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXRoIG9yIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmV0cmlldmFsLlxuICogQHJldHVybnMgVGhlIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgcGF0aCBvciBmaWxlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgZmlsZSBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlKHBhcmFtczogR2V0RmlsZVBhcmFtcyk6IFRGaWxlIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICBwYXRoT3JGaWxlLFxuICAgIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZ1xuICB9ID0gcGFyYW1zO1xuICBsZXQgZmlsZSA9IGdldEZpbGVPck51bGwobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdldEZpbGVPck51bGxQYXJhbXM+KHtcbiAgICBhcHAsXG4gICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgcGF0aE9yRmlsZVxuICB9KSk7XG4gIGlmICghZmlsZSkge1xuICAgIGlmIChzaG91bGRJbmNsdWRlTm9uRXhpc3RpbmcpIHtcbiAgICAgIGZpbGUgPSBjcmVhdGVURmlsZUluc3RhbmNlKGFwcCwgcGF0aE9yRmlsZSBhcyBzdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgbm90IGZvdW5kOiAke3BhdGhPckZpbGUgYXMgc3RyaW5nfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaWxlO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGZpbGUgb3IgYG51bGxgIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXRoIG9yIGZpbGUuXG4gKiBJZiB0aGUgcHJvdmlkZWQgYXJndW1lbnQgaXMgYWxyZWFkeSBhIGZpbGUsIGl0IGlzIHJldHVybmVkIGFzIGlzLlxuICogT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYXBwJ3MgdmF1bHQgdG8gcmV0cmlldmUgdGhlIGZpbGUgYnkgaXRzIHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmV0cmlldmFsLlxuICogQHJldHVybnMgVGhlIGZpbGUgaWYgZm91bmQsIG90aGVyd2lzZSBgbnVsbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlT3JOdWxsKHBhcmFtczogR2V0RmlsZU9yTnVsbFBhcmFtcyk6IG51bGwgfCBURmlsZSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgcGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxHZXRBYnN0cmFjdEZpbGVPck51bGxQYXJhbXM+KHtcbiAgICBhcHAsXG4gICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgcGF0aE9yRmlsZVxuICB9KSk7XG4gIHJldHVybiBpc0ZpbGUoZmlsZSkgPyBmaWxlIDogbnVsbDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB0eXBlIG9mIGEgZmlsZSBzeXN0ZW0gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBhYnN0cmFjdEZpbGUgLSBUaGUgYWJzdHJhY3QgZmlsZSB0byBnZXQgdGhlIHR5cGUgb2YuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgYWJzdHJhY3QgZmlsZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGFic3RyYWN0IGZpbGUgaXMgbm90IGEgZmlsZSBvciBhIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVTeXN0ZW1UeXBlKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IEZpbGVTeXN0ZW1UeXBlIHtcbiAgaWYgKGlzRmlsZShhYnN0cmFjdEZpbGUpKSB7XG4gICAgcmV0dXJuIEZpbGVTeXN0ZW1UeXBlLkZpbGU7XG4gIH1cbiAgaWYgKGlzRm9sZGVyKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gRmlsZVN5c3RlbVR5cGUuRm9sZGVyO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignQWJzdHJhY3QgZmlsZSBpcyBub3QgYSBmaWxlIG9yIGEgZm9sZGVyJyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgZm9sZGVyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBhcHAgYW5kIHBhdGhPckZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZXRyaWV2YWwuXG4gKiBAcmV0dXJucyBUaGUgcmV0cmlldmVkIGZvbGRlci5cbiAqIEB0aHJvd3MgSWYgdGhlIGZvbGRlciBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXIocGFyYW1zOiBHZXRGb2xkZXJQYXJhbXMpOiBURm9sZGVyIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICBwYXRoT3JGb2xkZXIsXG4gICAgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdldEZvbGRlck9yTnVsbFBhcmFtcz4oe1xuICAgIGFwcCxcbiAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICBwYXRoT3JGb2xkZXJcbiAgfSkpO1xuICBpZiAoIWZvbGRlcikge1xuICAgIGlmIChzaG91bGRJbmNsdWRlTm9uRXhpc3RpbmcpIHtcbiAgICAgIGZvbGRlciA9IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHAsIHBhdGhPckZvbGRlciBhcyBzdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvbGRlciBub3QgZm91bmQ6ICR7cGF0aE9yRm9sZGVyIGFzIHN0cmluZ31gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm9sZGVyO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGZvbGRlciBvciBgbnVsbGAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhdGggb3IgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHJldHJpZXZhbC5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIgaWYgZm91bmQsIG90aGVyd2lzZSBgbnVsbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJPck51bGwocGFyYW1zOiBHZXRGb2xkZXJPck51bGxQYXJhbXMpOiBudWxsIHwgVEZvbGRlciB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgcGF0aE9yRm9sZGVyXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZvbGRlciA9IGdldEFic3RyYWN0RmlsZU9yTnVsbChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8R2V0QWJzdHJhY3RGaWxlT3JOdWxsUGFyYW1zPih7XG4gICAgYXBwLFxuICAgIGlzQ2FzZUluc2Vuc2l0aXZlLFxuICAgIHBhdGhPckZpbGU6IHBhdGhPckZvbGRlclxuICB9KSk7XG4gIHJldHVybiBpc0ZvbGRlcihmb2xkZXIpID8gZm9sZGVyIDogbnVsbDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgZmlsZXMgcmVwcmVzZW50aW5nIHRoZSBtYXJrZG93biBmaWxlcyB3aXRoaW4gYSBzcGVjaWZpZWQgZm9sZGVyIG9yIHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmV0cmlldmFsLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZmlsZXMgcmVwcmVzZW50aW5nIHRoZSBtYXJrZG93biBmaWxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duRmlsZXMocGFyYW1zOiBHZXRNYXJrZG93bkZpbGVzUGFyYW1zKTogVEZpbGVbXSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgaXNSZWN1cnNpdmUsXG4gICAgcGF0aE9yRm9sZGVyXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZvbGRlciA9IGdldEZvbGRlcih7XG4gICAgYXBwLFxuICAgIHBhdGhPckZvbGRlclxuICB9KTtcblxuICBsZXQgbWFya2Rvd25GaWxlczogVEZpbGVbXSA9IFtdO1xuXG4gIGlmIChpc1JlY3Vyc2l2ZSkge1xuICAgIFZhdWx0LnJlY3Vyc2VDaGlsZHJlbihmb2xkZXIsIChhYnN0cmFjdEZpbGUpID0+IHtcbiAgICAgIGlmIChpc01hcmtkb3duRmlsZShhYnN0cmFjdEZpbGUpICYmIGFic3RyYWN0RmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICAgIG1hcmtkb3duRmlsZXMucHVzaChhYnN0cmFjdEZpbGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG1hcmtkb3duRmlsZXMgPSBmb2xkZXIuY2hpbGRyZW4uZmlsdGVyKChmaWxlKSA9PiBpc01hcmtkb3duRmlsZShmaWxlKSkgYXMgVEZpbGVbXTtcbiAgfVxuXG4gIG1hcmtkb3duRmlsZXMgPSBtYXJrZG93bkZpbGVzLnNvcnQoKGEsIGIpID0+IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpO1xuICByZXR1cm4gbWFya2Rvd25GaWxlcztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZpbGUgZm9yIHRoZSBnaXZlbiBwYXRoIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byByZXRyaWV2ZSBvciBjcmVhdGUuXG4gKiBAcmV0dXJucyBUaGUgZmlsZSByZXByZXNlbnRpbmcgdGhlIGZpbGVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRmlsZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxURmlsZT4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7XG4gICAgYXBwLFxuICAgIHBhdGhPckZpbGU6IHBhdGhcbiAgfSk7XG4gIGlmIChmaWxlKSB7XG4gICAgcmV0dXJuIGZpbGU7XG4gIH1cblxuICBjb25zdCBmb2xkZXJQYXRoID0gcGFyZW50Rm9sZGVyUGF0aChwYXRoKTtcbiAgYXdhaXQgZ2V0T3JDcmVhdGVGb2xkZXIoYXBwLCBmb2xkZXJQYXRoKTtcblxuICByZXR1cm4gYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShwYXRoLCAnJyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmb2xkZXIgZm9yIHRoZSBnaXZlbiBwYXRoIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIHJldHJpZXZlIG9yIGNyZWF0ZS5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIgcmVwcmVzZW50aW5nIHRoZSBmb2xkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZUZvbGRlcihhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxURm9sZGVyPiB7XG4gIGNvbnN0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh7XG4gICAgYXBwLFxuICAgIHBhdGhPckZvbGRlcjogcGF0aFxuICB9KTtcbiAgcmV0dXJuIGZvbGRlciA/PyAoYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcihwYXRoKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgZ2l2ZW4gYHBhdGhPckZpbGVgLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBhYnN0cmFjdCBmaWxlLlxuICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGBwYXRoT3JGaWxlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSk6IHN0cmluZyB7XG4gIGlmIChpc0Fic3RyYWN0RmlsZShwYXRoT3JGaWxlKSkge1xuICAgIHJldHVybiBwYXRoT3JGaWxlLnBhdGg7XG4gIH1cblxuICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHtcbiAgICBhcHAsXG4gICAgcGF0aE9yRmlsZVxuICB9KTtcbiAgcmV0dXJuIGZpbGUgPyBmaWxlLnBhdGggOiBnZXRSZXNvbHZlZFBhdGgocGF0aE9yRmlsZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGlzIGFuIGluc3RhbmNlIG9mIGFic3RyYWN0IGZpbGUuXG4gKlxuICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgaXMgYW4gaW5zdGFuY2Ugb2YgYWJzdHJhY3QgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzdHJhY3RGaWxlKGZpbGU6IHVua25vd24pOiBmaWxlIGlzIFRBYnN0cmFjdEZpbGUge1xuICByZXR1cm4gZmlsZSBpbnN0YW5jZW9mIFRBYnN0cmFjdEZpbGU7XG59XG5cbi8qKlxuICogICBDaGVja3MgaWYgdGhlIGdpdmVuIGZpbGUgaXMgYSBiYXNlIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBpcyBhIGJhc2UgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmFzZUZpbGUocGF0aE9yRmlsZTogbnVsbCB8IFBhdGhPckFic3RyYWN0RmlsZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2hlY2tFeHRlbnNpb24ocGF0aE9yRmlsZSwgQkFTRV9GSUxFX0VYVEVOU0lPTik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGlzIGEgY2FudmFzIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBpcyBhIGNhbnZhcyBmaWxlIG9yIG5vdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzRmlsZShwYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yQWJzdHJhY3RGaWxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaGVja0V4dGVuc2lvbihwYXRoT3JGaWxlLCBDQU5WQVNfRklMRV9FWFRFTlNJT04pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBhbiBpbnN0YW5jZSBvZiBmaWxlLlxuICpcbiAqIEBwYXJhbSBmaWxlIC0gVGhlIGZpbGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGlzIGFuIGluc3RhbmNlIG9mIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbGUoZmlsZTogdW5rbm93bik6IGZpbGUgaXMgVEZpbGUge1xuICByZXR1cm4gZmlsZSBpbnN0YW5jZW9mIFRGaWxlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBhIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmaWxlIGlzIGEgZm9sZGVyLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRm9sZGVyKGZpbGU6IHVua25vd24pOiBmaWxlIGlzIFRGb2xkZXIge1xuICByZXR1cm4gZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGlzIGEgTWFya2Rvd24gZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGlzIGEgTWFya2Rvd24gZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFya2Rvd25GaWxlKHBhdGhPckZpbGU6IG51bGwgfCBQYXRoT3JBYnN0cmFjdEZpbGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNoZWNrRXh0ZW5zaW9uKHBhdGhPckZpbGUsIE1BUktET1dOX0ZJTEVfRVhURU5TSU9OKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGZpbGUgaXMgYSBub3RlLlxuICpcbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgaXMgYSBub3RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3RlKHBhdGhPckZpbGU6IG51bGwgfCBQYXRoT3JBYnN0cmFjdEZpbGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzTWFya2Rvd25GaWxlKHBhdGhPckZpbGUpIHx8IGlzQ2FudmFzRmlsZShwYXRoT3JGaWxlKSB8fCBpc0Jhc2VGaWxlKHBhdGhPckZpbGUpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBwYXRoIG9yIGEgZmlsZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoT3JGaWxlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUGF0aE9yRmlsZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IGlzRmlsZSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGF0dGFjaG1lbnQgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaW9uLlxuICpcbiAqIFNvbWUgcGx1Z2lucyBzdG9yZSB0aGVpciBkYXRhIGluIGZpbGVzIHRoYXQgYXJlIG1hcmtkb3duIG9uIGRpc2sgYnV0IGFyZSBub3QgcHJvc2UgXHUyMDE0IGBFeGNhbGlkcmF3YCwgZm9yIGV4YW1wbGUsIHNhdmVzIGVhY2ggZHJhd2luZyBhcyBgc2tldGNoLmV4Y2FsaWRyYXcubWRgLlxuICogT2JzaWRpYW4gcmVwb3J0cyBzdWNoIGEgZmlsZSdzIGV4dGVuc2lvbiBhcyBgbWRgLCBzbyBhIGNhbGxlciB0aGF0IHdhbnRzIHRvIHRlbGwgYSBkcmF3aW5nIGFwYXJ0IGZyb20gYSBub3RlIGhhcyB0byBtYXRjaCB0aGUgZnVsbCBtdWx0aS1wYXJ0IGV4dGVuc2lvblxuICogKGAuZXhjYWxpZHJhdy5tZGApIGFnYWluc3QgdGhlIGZpbGUgbmFtZS4gV2hpY2ggZXh0ZW5zaW9ucyBjb3VudCBpcyB0aGUgY2FsbGVyJ3MgY29uZmlndXJhdGlvbiwgbm90IHRoaXMgbGlicmFyeSdzIFx1MjAxNCBvbmx5IHRoZSBtYXRjaGluZyBydWxlIGlzIHNoYXJlZC5cbiAqXG4gKiBBIGRyYXdpbmcgY2FuIGFsc28gYmUgcmVjb2duaXplZCBieSBpdHMgZnJvbnRtYXR0ZXIsIHRoZSB3YXkgYEV4Y2FsaWRyYXdgIGl0c2VsZiByZWNvZ25pemVzIG9uZSAoYGV4Y2FsaWRyYXctcGx1Z2luOiBwYXJzZWRgKSwgdGhyb3VnaCBhXG4gKiBgcHJvcGVydHk6bmFtZVs9dmFsdWVdYCBlbnRyeS4gVGhhdCBhbnN3ZXIgY29tZXMgZnJvbSB0aGUgbWV0YWRhdGEgY2FjaGUsIHdoaWNoIGNhbiBiZSBjb2xkIGF0IHN0YXJ0dXAgb3IgcmlnaHQgYWZ0ZXIgdGhlIGZpbGUgaXMgY3JlYXRlZCwgc28gYW5cbiAqIHVuY2FjaGVkIGZpbGUgYW5zd2VycyBcIm5vIG1hdGNoXCIgYW5kIGlzIHRyZWF0ZWQgYXMgYSBub3RlLiBUaGF0IGlzIHRoZSBjb25zZXJ2YXRpdmUgc2lkZSBmb3IgZXZlcnkgY3VycmVudCBjYWxsZXI6IGEgbm90ZSBpcyBub3QgbW92ZWQgYXMgYW5cbiAqIGF0dGFjaG1lbnQsIGFuZCBpdCBzcGFyZXMgaXRzIGZvbGRlciBmcm9tIGEgZGVsZXRlIHN3ZWVwLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGF0aCBvciBmaWxlIHRvIGNsYXNzaWZ5IGFuZCB0aGUgY29uZmlndXJlZCBhdHRhY2htZW50IGV4dGVuc2lvbnMuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGF0dGFjaG1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RyZWF0ZWRBc0F0dGFjaG1lbnQocGFyYW1zOiBJc1RyZWF0ZWRBc0F0dGFjaG1lbnRQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhdHRhY2htZW50RXh0ZW5zaW9ucyxcbiAgICBwYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGlmIChwYXRoT3JGaWxlID09PSBudWxsIHx8IGlzRm9sZGVyKHBhdGhPckZpbGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9IGdldE5hbWUocGF0aE9yRmlsZSkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGF0dGFjaG1lbnRFeHRlbnNpb25zLnNvbWUoKGV4dGVuc2lvbikgPT4ge1xuICAgIGNvbnN0IHRyaW1tZWRFbnRyeSA9IGV4dGVuc2lvbi50cmltKCk7XG4gICAgaWYgKGlzUHJvcGVydHlFbnRyeSh0cmltbWVkRW50cnkpKSB7XG4gICAgICByZXR1cm4gISFhcHAgJiYgaXNNYXJrZG93bkZpbGUocGF0aE9yRmlsZSkgJiYgY2hlY2tQcm9wZXJ0eUVudHJ5TWF0Y2hlcyh7XG4gICAgICAgIGVudHJ5OiB0cmltbWVkRW50cnksXG4gICAgICAgIGZyb250bWF0dGVyOiBnZXRDYWNoZWRGcm9udG1hdHRlcih7IGFwcCwgcGF0aE9yRmlsZSB9KVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRW5mb3JjaW5nIGEgc2luZ2xlIGxlYWRpbmcgZG90IGlzIHdoYXQga2VlcHMgdGhlIG1hdGNoIG9uIGFuIGV4dGVuc2lvbiBib3VuZGFyeS5cbiAgICAvLyBBIGJhcmUgYHJhdy5tZGAgd291bGQgb3RoZXJ3aXNlIG1hdGNoIGBza2V0Y2guZXhjYWxpZHJhdy5tZGAsIHdoaWNoIGlzIG5ldmVyIHdoYXQgYSBjYWxsZXIgbWVhbnMuXG4gICAgY29uc3Qgbm9ybWFsaXplZEV4dGVuc2lvbiA9IGV4dGVuc2lvbi50cmltKCkucmVwbGFjZSgvXlxcLisvLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZEV4dGVuc2lvbiAhPT0gJycgJiYgbG93ZXJDYXNlTmFtZS5lbmRzV2l0aChgLiR7bm9ybWFsaXplZEV4dGVuc2lvbn1gKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJpbXMgdGhlIG1hcmtkb3duIGV4dGVuc2lvbiBmcm9tIHRoZSBmaWxlIHBhdGggaWYgdGhlIGZpbGUgaXMgYSBtYXJrZG93biBmaWxlLlxuICogSWYgdGhlIGZpbGUgaXMgbm90IGEgbWFya2Rvd24gZmlsZSwgdGhlIG9yaWdpbmFsIGZpbGUgcGF0aCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIHRyaW0gdGhlIG1hcmtkb3duIGV4dGVuc2lvbiBmcm9tLlxuICogQHJldHVybnMgVGhlIGZpbGUgcGF0aCB3aXRoIHRoZSBtYXJrZG93biBleHRlbnNpb24gdHJpbW1lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW1NYXJrZG93bkV4dGVuc2lvbihmaWxlOiBUQWJzdHJhY3RGaWxlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzTWFya2Rvd25GaWxlKGZpbGUpXG4gICAgPyB0cmltRW5kKHtcbiAgICAgICRzdHJpbmc6IGZpbGUucGF0aCxcbiAgICAgIHN1ZmZpeDogYC4ke01BUktET1dOX0ZJTEVfRVhURU5TSU9OfWBcbiAgICB9KVxuICAgIDogZmlsZS5wYXRoO1xufVxuXG5mdW5jdGlvbiBnZXRDYWNoZWRGcm9udG1hdHRlcihwYXJhbXM6IEdldENhY2hlZEZyb250bWF0dGVyUGFyYW1zKTogbnVsbCB8IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwocGFyYW1zKTtcbiAgcmV0dXJuIGlzRmlsZShmaWxlKSA/IHBhcmFtcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk/LmZyb250bWF0dGVyID8/IG51bGwgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRGaWxlSW50ZXJuYWwocGFyYW1zOiBHZXRGaWxlSW50ZXJuYWxQYXJhbXMpOiBudWxsIHwgVEFic3RyYWN0RmlsZSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgcGF0aFxuICB9ID0gcGFyYW1zO1xuICBsZXQgeyBpc0Nhc2VJbnNlbnNpdGl2ZSB9ID0gcGFyYW1zO1xuICBpc0Nhc2VJbnNlbnNpdGl2ZSA/Pz0gZ2V0RGF0YUFkYXB0ZXJFeChhcHApLmluc2Vuc2l0aXZlO1xuICBpZiAoaXNDYXNlSW5zZW5zaXRpdmUpIHtcbiAgICBjb25zdCBjYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXggPSBnZXRDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgoYXBwKTtcbiAgICByZXR1cm4gY2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4ID8gY2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4LmdldChwYXRoKSA6IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGhJbnNlbnNpdGl2ZShwYXRoKTtcbiAgfVxuXG4gIHJldHVybiBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBnZXROYW1lKHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSk6IHN0cmluZyB7XG4gIHJldHVybiBpc0Fic3RyYWN0RmlsZShwYXRoT3JGaWxlKSA/IHBhdGhPckZpbGUubmFtZSA6IGJhc2VuYW1lKHBhdGhPckZpbGUpO1xufVxuXG5mdW5jdGlvbiBnZXRSZXNvbHZlZFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgocmVzb2x2ZSgnLycsIHBhdGgpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsMEJBQTRDO0FBQzVDLGtCQUlPO0FBQ1Asb0JB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QUFlLE9BQU87QUFDM0Y7QUFFQSxTQUFTLGdCQUFnQixRQUFxRDtBQUM1RSxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixNQUFJLEVBQUUsa0JBQWtCLElBQUk7QUFDNUIsNEJBQXNCLHlDQUFpQixHQUFHLEVBQUU7QUFDNUMsTUFBSSxtQkFBbUI7QUFDckIsVUFBTSwrQkFBMkIsZ0VBQTRCLEdBQUc7QUFDaEUsV0FBTywyQkFBMkIseUJBQXlCLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxpQ0FBaUMsSUFBSTtBQUFBLEVBQ3hIO0FBRUEsU0FBTyxJQUFJLE1BQU0sc0JBQXNCLElBQUk7QUFDN0M7QUFFQSxTQUFTLFFBQVEsWUFBd0M7QUFDdkQsU0FBTyxlQUFlLFVBQVUsSUFBSSxXQUFXLFdBQU8sc0JBQVMsVUFBVTtBQUMzRTtBQUVBLFNBQVMsZ0JBQWdCLE1BQXNCO0FBQzdDLGFBQU8sbUNBQWMscUJBQVEsS0FBSyxJQUFJLENBQUM7QUFDekM7IiwKICAibmFtZXMiOiBbIkZpbGVTeXN0ZW1UeXBlIiwgIk1pc3NpbmdQYXRoVHJlYXRtZW50Il0KfQo=
557
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWxlLXN5c3RlbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB7QGxpbmsgVEFic3RyYWN0RmlsZX0sIHtAbGluayBURmlsZX0sIGFuZCB7QGxpbmsgVEZvbGRlcn0gaW5zdGFuY2VzIGluIE9ic2lkaWFuLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvb2JqZWN0LXV0aWxzJztcbmltcG9ydCB7XG4gIGJhc2VuYW1lLFxuICBleHRuYW1lLFxuICByZXNvbHZlXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9wYXRoJztcbmltcG9ydCB7IHRyaW1FbmQgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVRGaWxlSW5zdGFuY2UsXG4gIGNyZWF0ZVRGb2xkZXJJbnN0YW5jZSxcbiAgZ2V0RGF0YUFkYXB0ZXJFeCxcbiAgcGFyZW50Rm9sZGVyUGF0aFxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5pbXBvcnQge1xuICBub3JtYWxpemVQYXRoLFxuICBUQWJzdHJhY3RGaWxlLFxuICBURmlsZSxcbiAgVEZvbGRlcixcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXggfSBmcm9tICcuL2Nhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleC50cyc7XG5pbXBvcnQge1xuICBjaGVja1Byb3BlcnR5RW50cnlNYXRjaGVzLFxuICBpc1Byb3BlcnR5RW50cnlcbn0gZnJvbSAnLi9wcm9wZXJ0eS1lbnRyeS50cyc7XG5cbi8qKlxuICogQSBmaWxlIGV4dGVuc2lvbiBmb3IgYGJhc2VgIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3QgQkFTRV9GSUxFX0VYVEVOU0lPTiA9ICdiYXNlJztcblxuLyoqXG4gKiBBIGZpbGUgZXh0ZW5zaW9uIGZvciBgY2FudmFzYCBmaWxlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IENBTlZBU19GSUxFX0VYVEVOU0lPTiA9ICdjYW52YXMnO1xuXG4vKipcbiAqIEEgZmlsZSBleHRlbnNpb24gZm9yIGBtYXJrZG93bmAgZmlsZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiA9ICdtZCc7XG5cbi8qKlxuICogQSB0eXBlIG9mIGZpbGUgc3lzdGVtIG9iamVjdC5cbiAqL1xuZXhwb3J0IGVudW0gRmlsZVN5c3RlbVR5cGUge1xuICAvKipcbiAgICogQSBmaWxlLlxuICAgKi9cbiAgRmlsZSA9ICdmaWxlJyxcbiAgLyoqXG4gICAqIEEgZm9sZGVyLlxuICAgKi9cbiAgRm9sZGVyID0gJ2ZvbGRlcidcbn1cbi8qKlxuICogSG93IHtAbGluayBnZXRCYXNlbmFtZX0gYW5kIHtAbGluayBnZXRFeHRlbnNpb259IHNob3VsZCBhbnN3ZXIgZm9yIGEgcGF0aCB0aGF0IHJlc29sdmVzIHRvIG5vdGhpbmcgaW4gdGhlIHZhdWx0LlxuICpcbiAqIE5vdGhpbmcgaW4gdGhlIHZhdWx0IHNheXMgd2hldGhlciBhbiB1bnJlc29sdmVkIGBhbHBoYS5icmF2b2AgbmFtZXMgYSBkb3R0ZWQgZm9sZGVyIG9yIGEgYC5icmF2b2AgZmlsZSwgc28gdGhlIGNhbGxlciBkZWNpZGVzLlxuICovXG5leHBvcnQgZW51bSBNaXNzaW5nUGF0aFRyZWF0bWVudCB7XG4gIC8qKlxuICAgKiBSZWFkIHRoZSBwYXRoIGFzIGEgZmlsZSBwYXRoOiBgYWxwaGEuYnJhdm9gIGlzIGJhc2VuYW1lIGBhbHBoYWAgcGx1cyBleHRlbnNpb24gYGJyYXZvYC5cbiAgICovXG4gIEZpbGUgPSAnZmlsZScsXG4gIC8qKlxuICAgKiBSZWFkIHRoZSBwYXRoIGFzIGEgZm9sZGVyIHBhdGg6IGBhbHBoYS5icmF2b2AgaXMgYmFzZW5hbWUgYGFscGhhLmJyYXZvYCB3aXRoIG5vIGV4dGVuc2lvbi5cbiAgICovXG4gIEZvbGRlciA9ICdmb2xkZXInLFxuICAvKipcbiAgICogVGhyb3cgaW5zdGVhZCBvZiBndWVzc2luZy4gVGhpcyBpcyB0aGUgZGVmYXVsdC5cbiAgICovXG4gIFRocm93ID0gJ3Rocm93J1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBkb2VzRXhpc3R9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvZXNFeGlzdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHBlcmZvcm0gYSBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4gV2hlbiBgdW5kZWZpbmVkYCBvciBub3Qgc3BlY2lmaWVkLCB0aGUgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYWN0dWFsIGZpbGUgc3lzdGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNDYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdCB0byBjaGVjay4gRGVmYXVsdCBpcyBgdW5kZWZpbmVkYC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBGaWxlU3lzdGVtVHlwZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QWJzdHJhY3RGaWxlT3JOdWxsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBYnN0cmFjdEZpbGVPck51bGxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIEFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBwZXJmb3JtIGEgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2guIFdoZW4gYHVuZGVmaW5lZGAgb3Igbm90IHNwZWNpZmllZCwgdGhlIGJlaGF2aW9yIGlzIGRldGVybWluZWQgYnkgdGhlIGFjdHVhbCBmaWxlIHN5c3RlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IGlzQ2FzZUluc2Vuc2l0aXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgYWJzdHJhY3QgZmlsZSB0byByZXRyaWV2ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IG51bGwgfCBQYXRoT3JBYnN0cmFjdEZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEFic3RyYWN0RmlsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QWJzdHJhY3RGaWxlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBBcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcGVyZm9ybSBhIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoLiBXaGVuIGB1bmRlZmluZWRgIG9yIG5vdCBzcGVjaWZpZWQsIHRoZSBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhY3R1YWwgZmlsZSBzeXN0ZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBpc0Nhc2VJbnNlbnNpdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gcmV0cmlldmUgdGhlIGFic3RyYWN0IGZpbGUgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRCYXNlbmFtZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFzZW5hbWVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIEFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBhYnN0cmFjdCBmaWxlIHRvIGdldCB0aGUgYmFzZSBuYW1lIG9mLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlO1xuXG4gIC8qKlxuICAgKiBIb3cgdG8gYW5zd2VyIHdoZW4gdGhlIHBhdGggcmVzb2x2ZXMgdG8gbm90aGluZyBpbiB0aGUgdmF1bHQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvd2BcbiAgICovXG4gIHJlYWRvbmx5IHdoZW5NaXNzaW5nVHJlYXRBcz86IE1pc3NpbmdQYXRoVHJlYXRtZW50O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRFeHRlbnNpb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEV4dGVuc2lvblBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gZ2V0IHRoZSBleHRlbnNpb24gb2YuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGU7XG5cbiAgLyoqXG4gICAqIEhvdyB0byBhbnN3ZXIgd2hlbiB0aGUgcGF0aCByZXNvbHZlcyB0byBub3RoaW5nIGluIHRoZSB2YXVsdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYE1pc3NpbmdQYXRoVHJlYXRtZW50LlRocm93YFxuICAgKi9cbiAgcmVhZG9ubHkgd2hlbk1pc3NpbmdUcmVhdEFzPzogTWlzc2luZ1BhdGhUcmVhdG1lbnQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEZpbGVPck51bGx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEZpbGVPck51bGxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIEFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byBwZXJmb3JtIGEgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2guIFdoZW4gYHVuZGVmaW5lZGAgb3Igbm90IHNwZWNpZmllZCwgdGhlIGJlaGF2aW9yIGlzIGRldGVybWluZWQgYnkgdGhlIGFjdHVhbCBmaWxlIHN5c3RlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IGlzQ2FzZUluc2Vuc2l0aXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IG51bGwgfCBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRGaWxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRGaWxlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBBcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcGVyZm9ybSBhIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoLiBXaGVuIGB1bmRlZmluZWRgIG9yIG5vdCBzcGVjaWZpZWQsIHRoZSBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBhY3R1YWwgZmlsZSBzeXN0ZW0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBpc0Nhc2VJbnNlbnNpdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gcmV0cmlldmUgdGhlIGZpbGUgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIGEgbm9uLWV4aXN0aW5nIGZpbGUuXG4gICAqICBJZiBgdHJ1ZWAsIGEgbmV3IGZpbGUgaXMgY3JlYXRlZCBmb3IgdGhlIHByb3ZpZGVkIHBhdGguXG4gICAqICBJZiBgZmFsc2VgLCBhbiBlcnJvciBpcyB0aHJvd24gaWYgdGhlIGZpbGUgaXMgbm90IGZvdW5kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRGb2xkZXJPck51bGx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEZvbGRlck9yTnVsbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHBlcmZvcm0gYSBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4gV2hlbiBgdW5kZWZpbmVkYCBvciBub3Qgc3BlY2lmaWVkLCB0aGUgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYWN0dWFsIGZpbGUgc3lzdGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNDYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmb2xkZXIgdG8gcmV0cmlldmUgdGhlIGZvbGRlciBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRm9sZGVyOiBudWxsIHwgUGF0aE9yRm9sZGVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRGb2xkZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEZvbGRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHBlcmZvcm0gYSBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4gV2hlbiBgdW5kZWZpbmVkYCBvciBub3Qgc3BlY2lmaWVkLCB0aGUgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYWN0dWFsIGZpbGUgc3lzdGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNDYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmb2xkZXIgaWRlbnRpZmllci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZvbGRlcjogUGF0aE9yRm9sZGVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IHRoZSBmb2xkZXIgdG8gbm90IGV4aXN0LlxuICAgKiAgSWYgYHRydWVgLCBhIG5ldyBmb2xkZXIgaXMgY3JlYXRlZCBmb3IgdGhlIHByb3ZpZGVkIHBhdGguXG4gICAqICBJZiBgZmFsc2VgLCBhbiBlcnJvciBpcyB0aHJvd24gaWYgdGhlIGZvbGRlciBpcyBub3QgZm91bmQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVOb25FeGlzdGluZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldE1hcmtkb3duRmlsZXN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE1hcmtkb3duRmlsZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIEFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0byByZWN1cnNpdmVseSBzZWFyY2ggZm9yIG1hcmtkb3duIGZpbGVzIHdpdGhpbiBzdWJmb2xkZXJzLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzUmVjdXJzaXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZm9sZGVyIHRvIHJldHJpZXZlIHRoZSBtYXJrZG93biBmaWxlcyBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRm9sZGVyOiBQYXRoT3JGb2xkZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGlzVHJlYXRlZEFzQXR0YWNobWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXNUcmVhdGVkQXNBdHRhY2htZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UsIHdoaWNoIGxldHMgYSBgcHJvcGVydHk6YCBlbnRyeSBvZiB7QGxpbmsgYXR0YWNobWVudEV4dGVuc2lvbnN9IHJlYWQgdGhlIGZpbGUncyBmcm9udG1hdHRlciBmcm9tIHRoZSBtZXRhZGF0YSBjYWNoZS5cbiAgICogV2l0aG91dCBpdCwgYHByb3BlcnR5OmAgZW50cmllcyBtYXRjaCBub3RoaW5nIGFuZCBvbmx5IHRoZSBleHRlbnNpb24gZW50cmllcyBhcmUgZXZhbHVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwPzogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZW50cmllcyB0aGF0IG1hcmsgYSBmaWxlIGFzIGFuIGF0dGFjaG1lbnQsIGUuZy4gYFsnLmV4Y2FsaWRyYXcubWQnLCAncHJvcGVydHk6ZXhjYWxpZHJhdy1wbHVnaW4nXWAuXG4gICAqXG4gICAqIEFuIGV4dGVuc2lvbiBlbnRyeSBpcyBub3JtYWxpemVkIGJlZm9yZSBtYXRjaGluZzogc3Vycm91bmRpbmcgd2hpdGVzcGFjZSBpcyB0cmltbWVkLCBhIHNpbmdsZSBsZWFkaW5nIGRvdCBpcyBlbmZvcmNlZCwgYW5kIHRoZSBjb21wYXJpc29uIGlzXG4gICAqIGNhc2UtaW5zZW5zaXRpdmUuIEVtcHR5IGVudHJpZXMgYXJlIGlnbm9yZWQuXG4gICAqXG4gICAqIEEgYHByb3BlcnR5Om5hbWVgIGVudHJ5IG1hdGNoZXMgYSBtYXJrZG93biBmaWxlIHdob3NlIGZyb250bWF0dGVyIGhhcyBgbmFtZWAsIGFuZCBgcHJvcGVydHk6bmFtZT12YWx1ZWAgb25lIHdob3NlIGBuYW1lYCByZW5kZXJzIGFzIGB2YWx1ZWAg4oCUIHRoZVxuICAgKiBzYW1lIHN5bnRheCBub3RlIHByaW9yaXRpZXMgdXNlLiBJdCBpcyBldmFsdWF0ZWQgb25seSB3aGVuIHtAbGluayBhcHB9IGlzIGdpdmVuLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEV4dGVuc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIHRvIGNsYXNzaWZ5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogbnVsbCB8IFBhdGhPckFic3RyYWN0RmlsZTtcbn1cblxuLyoqXG4gKiBBIHBhdGggb3IgYW4gYWJzdHJhY3QgZmlsZS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF0aE9yQWJzdHJhY3RGaWxlID0gc3RyaW5nIHwgVEFic3RyYWN0RmlsZTtcblxuLyoqXG4gKiBBIHBhdGggb3IgYSBmaWxlLlxuICovXG5leHBvcnQgdHlwZSBQYXRoT3JGaWxlID0gc3RyaW5nIHwgVEZpbGU7XG5cbi8qKlxuICogQSBwYXRoIG9yIGEgZm9sZGVyLlxuICovXG5leHBvcnQgdHlwZSBQYXRoT3JGb2xkZXIgPSBzdHJpbmcgfCBURm9sZGVyO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRDYWNoZWRGcm9udG1hdHRlcn0uXG4gKi9cbmludGVyZmFjZSBHZXRDYWNoZWRGcm9udG1hdHRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgd2hvc2UgZnJvbnRtYXR0ZXIgdG8gcmVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0RmlsZUludGVybmFsfS5cbiAqL1xuaW50ZXJmYWNlIEdldEZpbGVJbnRlcm5hbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHBlcmZvcm0gYSBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaC4gV2hlbiBgdW5kZWZpbmVkYCBvciBub3Qgc3BlY2lmaWVkLCB0aGUgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYWN0dWFsIGZpbGUgc3lzdGVtLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgaXNDYXNlSW5zZW5zaXRpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byByZXRyaWV2ZSB0aGUgYWJzdHJhY3QgZmlsZSBmb3IuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXJyYXkgb2YgYWJzdHJhY3QgZmlsZXMgdG8gYW4gYXJyYXkgb2YgZmlsZXMuXG4gKlxuICogQHBhcmFtIGFic3RyYWN0RmlsZXMgLSBUaGUgYWJzdHJhY3QgZmlsZXMgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBmaWxlcy5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgYW55IG9mIHRoZSBhYnN0cmFjdCBmaWxlcyBhcmUgbm90IGZpbGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheU9mRmlsZXMoYWJzdHJhY3RGaWxlczogVEFic3RyYWN0RmlsZVtdKTogVEZpbGVbXSB7XG4gIHJldHVybiBhYnN0cmFjdEZpbGVzLm1hcCgoYWJzdHJhY3RGaWxlKSA9PiBhc0ZpbGUoYWJzdHJhY3RGaWxlKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXJyYXkgb2YgYWJzdHJhY3QgZmlsZXMgdG8gYW4gYXJyYXkgb2YgZm9sZGVycy5cbiAqXG4gKiBAcGFyYW0gYWJzdHJhY3RGaWxlcyAtIFRoZSBhYnN0cmFjdCBmaWxlcyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGFycmF5IG9mIGZvbGRlcnMuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGFueSBvZiB0aGUgYWJzdHJhY3QgZmlsZXMgYXJlIG5vdCBmb2xkZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheU9mRm9sZGVycyhhYnN0cmFjdEZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBURm9sZGVyW10ge1xuICByZXR1cm4gYWJzdHJhY3RGaWxlcy5tYXAoKGFic3RyYWN0RmlsZSkgPT4gYXNGb2xkZXIoYWJzdHJhY3RGaWxlKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYWJzdHJhY3QgZmlsZSB0byBhIGZpbGUuXG4gKlxuICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBhYnN0cmFjdCBmaWxlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgZmlsZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGFic3RyYWN0IGZpbGUgaXMgbm90IGEgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRmlsZShhYnN0cmFjdEZpbGU6IG51bGwgfCBUQWJzdHJhY3RGaWxlKTogVEZpbGUge1xuICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUoYXNGaWxlT3JOdWxsKGFic3RyYWN0RmlsZSksICdBYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZpbGUnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhYnN0cmFjdCBmaWxlIHRvIGEgZmlsZSBvciBgbnVsbGAuXG4gKlxuICogQHBhcmFtIGFic3RyYWN0RmlsZSAtIFRoZSBhYnN0cmFjdCBmaWxlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgZmlsZSBvciBgbnVsbGAuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc0ZpbGVPck51bGwoYWJzdHJhY3RGaWxlOiBudWxsIHwgVEFic3RyYWN0RmlsZSk6IG51bGwgfCBURmlsZSB7XG4gIGlmIChhYnN0cmFjdEZpbGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoYWJzdHJhY3RGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignQWJzdHJhY3QgZmlsZSBpcyBub3QgYSBmaWxlJyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYWJzdHJhY3QgZmlsZSB0byBhIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gYWJzdHJhY3RGaWxlIC0gVGhlIGFic3RyYWN0IGZpbGUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRm9sZGVyKGFic3RyYWN0RmlsZTogbnVsbCB8IFRBYnN0cmFjdEZpbGUpOiBURm9sZGVyIHtcbiAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKGFzRm9sZGVyT3JOdWxsKGFic3RyYWN0RmlsZSksICdBYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZvbGRlcicpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFic3RyYWN0IGZpbGUgdG8gYSBmb2xkZXIgb3IgYG51bGxgLlxuICpcbiAqIEBwYXJhbSBhYnN0cmFjdEZpbGUgLSBUaGUgYWJzdHJhY3QgZmlsZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMgVGhlIGZvbGRlciBvciBgbnVsbGAuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzRm9sZGVyT3JOdWxsKGFic3RyYWN0RmlsZTogbnVsbCB8IFRBYnN0cmFjdEZpbGUpOiBudWxsIHwgVEZvbGRlciB7XG4gIGlmIChhYnN0cmFjdEZpbGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoYWJzdHJhY3RGaWxlIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgIHJldHVybiBhYnN0cmFjdEZpbGU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdBYnN0cmFjdCBmaWxlIGlzIG5vdCBhIGZvbGRlcicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gcGF0aCBvciBmaWxlIGhhcyB0aGUgc3BlY2lmaWVkIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGFic3RyYWN0IGZpbGUgdG8gY2hlY2suXG4gKiBAcGFyYW0gZXh0ZW5zaW9uIC0gVGhlIGV4dGVuc2lvbiB0byBjb21wYXJlIGFnYWluc3QuXG4gKiBAcmV0dXJucyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcGF0aCBvciBmaWxlIGhhcyB0aGUgc3BlY2lmaWVkIGV4dGVuc2lvbiwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0V4dGVuc2lvbihwYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yQWJzdHJhY3RGaWxlLCBleHRlbnNpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBGb3IgYSBzdHJpbmcgcGF0aCwgY29tcGFyZSB0aGUgcGF0aCdzIG93biBleHRlbnNpb24gaW5zdGVhZCBvZiByZXNvbHZpbmcgdGhlIGZpbGUuXG4gIC8vIFJlc29sdmluZyBhIHN0cmluZyBwYXRoIGlzIE8odmF1bHQpIG9uIGEgbWlzcyBvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbS5cbiAgLy8gVGhhdCBtaXNzIGlzIHRoZSBob3QgcGF0aCBkdXJpbmcgZGVsZXRpb24gY2FzY2FkZXMuXG4gIC8vIE9ic2lkaWFuIGxvd2VyY2FzZXMgYSBmaWxlJ3MgY2Fub25pY2FsIGV4dGVuc2lvbiwgc28gY29tcGFyZSBjYXNlLWluc2Vuc2l0aXZlbHkuXG4gIHJldHVybiBpc0ZpbGUocGF0aE9yRmlsZSkgPyBwYXRoT3JGaWxlLmV4dGVuc2lvbiA9PT0gZXh0ZW5zaW9uIDogdHlwZW9mIHBhdGhPckZpbGUgPT09ICdzdHJpbmcnICYmIGV4dG5hbWUocGF0aE9yRmlsZSkuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSA9PT0gZXh0ZW5zaW9uO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gcGF0aCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBhdGggZXhpc3RzLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvZXNFeGlzdChwYXJhbXM6IERvZXNFeGlzdFBhcmFtcyk6IGJvb2xlYW4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGlzQ2FzZUluc2Vuc2l0aXZlLFxuICAgIHBhdGgsXG4gICAgdHlwZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBhYnN0cmFjdEZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdldEFic3RyYWN0RmlsZU9yTnVsbFBhcmFtcz4oe1xuICAgIGFwcCxcbiAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICBwYXRoT3JGaWxlOiBwYXRoXG4gIH0pKTtcbiAgcmV0dXJuIGFic3RyYWN0RmlsZSAhPT0gbnVsbCAmJiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IGdldEZpbGVTeXN0ZW1UeXBlKGFic3RyYWN0RmlsZSkgPT09IHR5cGUpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgVEFic3RyYWN0RmlsZSBvYmplY3QgZm9yIHRoZSBnaXZlbiBwYXRoIG9yIGFic3RyYWN0IGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmV0cmlldmFsLlxuICogQHJldHVybnMgVGhlIGFic3RyYWN0IGZpbGUuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhYnN0cmFjdCBmaWxlIGlzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFic3RyYWN0RmlsZShwYXJhbXM6IEdldEFic3RyYWN0RmlsZVBhcmFtcyk6IFRBYnN0cmFjdEZpbGUge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGlzQ2FzZUluc2Vuc2l0aXZlLFxuICAgIHBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgcmV0dXJuIGVuc3VyZU5vbk51bGxhYmxlKFxuICAgIGdldEFic3RyYWN0RmlsZU9yTnVsbChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8R2V0QWJzdHJhY3RGaWxlT3JOdWxsUGFyYW1zPih7XG4gICAgICBhcHAsXG4gICAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICAgIHBhdGhPckZpbGVcbiAgICB9KSksXG4gICAgYEFic3RyYWN0IGZpbGUgbm90IGZvdW5kOiAke3BhdGhPckZpbGUgYXMgc3RyaW5nfWBcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYWJzdHJhY3QgZmlsZSBvciBgbnVsbGAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhdGggb3IgYWJzdHJhY3QgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZXRyaWV2YWwuXG4gKiBAcmV0dXJucyBUaGUgYWJzdHJhY3QgZmlsZSBpZiBmb3VuZCwgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFic3RyYWN0RmlsZU9yTnVsbChwYXJhbXM6IEdldEFic3RyYWN0RmlsZU9yTnVsbFBhcmFtcyk6IG51bGwgfCBUQWJzdHJhY3RGaWxlIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICBwYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGlmIChwYXRoT3JGaWxlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaXNBYnN0cmFjdEZpbGUocGF0aE9yRmlsZSkpIHtcbiAgICBpZiAoaXNGaWxlKHBhdGhPckZpbGUpKSB7XG4gICAgICByZXR1cm4gYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aE9yRmlsZS5wYXRoKSA/PyBwYXRoT3JGaWxlO1xuICAgIH1cbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVEFic3RyYWN0RmlsZSBpcyBhbHdheXMgVEZpbGUgb3IgVEZvbGRlciBpbiBPYnNpZGlhbjsgZGVmZW5zaXZlIGZhbGxiYWNrLiAqL1xuICAgIHJldHVybiBpc0ZvbGRlcihwYXRoT3JGaWxlKSA/IChhcHAudmF1bHQuZ2V0Rm9sZGVyQnlQYXRoKHBhdGhPckZpbGUucGF0aCkgPz8gcGF0aE9yRmlsZSkgOiAoYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChwYXRoT3JGaWxlLnBhdGgpID8/IHBhdGhPckZpbGUpO1xuICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIH1cblxuICBjb25zdCBmaWxlID0gZ2V0RmlsZUludGVybmFsKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxHZXRGaWxlSW50ZXJuYWxQYXJhbXM+KHtcbiAgICBhcHAsXG4gICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgcGF0aDogcGF0aE9yRmlsZVxuICB9KSk7XG5cbiAgaWYgKGZpbGUpIHtcbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IGdldFJlc29sdmVkUGF0aChwYXRoT3JGaWxlKTtcblxuICByZXR1cm4gcmVzb2x2ZWRQYXRoID09PSBwYXRoT3JGaWxlXG4gICAgPyBudWxsXG4gICAgOiBnZXRGaWxlSW50ZXJuYWwobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdldEZpbGVJbnRlcm5hbFBhcmFtcz4oe1xuICAgICAgYXBwLFxuICAgICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgICBwYXRoOiByZXNvbHZlZFBhdGhcbiAgICB9KSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSBuYW1lIG9mIHRoZSBnaXZlbiBgcGF0aE9yRmlsZWA6IGEgZmlsZSdzIG5hbWUgd2l0aG91dCBpdHMgZXh0ZW5zaW9uLCBhIGZvbGRlcidzIGZ1bGwgbmFtZS5cbiAqXG4gKiBVbmxpa2UgYGJhc2VuYW1lYCBmcm9tIGBwYXRoLnRzYCwgd2hpY2ggaXMgYSBwdXJlIHN0cmluZyBmdW5jdGlvbiwgdGhpcyByZXNvbHZlcyB0aGUgYXJndW1lbnQgYWdhaW5zdCB0aGUgdmF1bHQgZmlyc3QuIFRoYXQgaXMgd2hhdCBsZXRzIGEgZm9sZGVyIHdob3NlIG5hbWVcbiAqIGNvbnRhaW5zIGEgZG90IGFuc3dlciB3aXRoIGl0cyB3aG9sZSBuYW1lIGluc3RlYWQgb2YgYSBib2d1cyBleHRlbnNpb24gc3BsaXQsIGFuZCBpdCBpcyB3aHkgYSBjYWxsZXIgaGFuZGxpbmcgYm90aCBraW5kcyBubyBsb25nZXIgaGFzIHRvIGJyYW5jaCBvblxuICoge0BsaW5rIGlzRmlsZX0gaXRzZWxmIOKAlCBhIGZvbGRlciBoYXMgbm8gYGJhc2VuYW1lYCBvZiBpdHMgb3duLlxuICpcbiAqIEEgcGF0aCB0aGF0IHJlc29sdmVzIHRvIG5vdGhpbmcgaGFzIG5vIGFuc3dlciB0byBsb29rIHVwLCBzbyB7QGxpbmsgR2V0QmFzZW5hbWVQYXJhbXMud2hlbk1pc3NpbmdUcmVhdEFzfSBkZWNpZGVzIHdoYXQgaGFwcGVucy4gSXQgZGVmYXVsdHMgdG9cbiAqIHtAbGluayBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvd30gcmF0aGVyIHRoYW4gdG8gYSBndWVzczogYGFscGhhLmJyYXZvYCBtYXkgbmFtZSBhIGRvdHRlZCBmb2xkZXIgb3IgYSBgLmJyYXZvYCBmaWxlLCBhbmQgbm90aGluZyBpbiB0aGUgdmF1bHQgc2F5c1xuICogd2hpY2gsIHNvIGEgc2lsZW50bHkgd3JvbmcgYW5zd2VyIGlzIHdvcnNlIHRoYW4gYW4gZXJyb3IuIFBhc3Mge0BsaW5rIE1pc3NpbmdQYXRoVHJlYXRtZW50LkZpbGV9IGZvciB0aGUgYGNoZWNrRXh0ZW5zaW9uYCByZWFkaW5nIG9mIGEgYmFyZSBzdHJpbmcsIG9yXG4gKiB7QGxpbmsgTWlzc2luZ1BhdGhUcmVhdG1lbnQuRm9sZGVyfSBmb3IgdGhlIG90aGVyIG9uZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZXRyaWV2YWwuXG4gKiBAcmV0dXJucyBUaGUgYmFzZSBuYW1lIG9mIHRoZSBgcGF0aE9yRmlsZWAuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBwYXRoIHJlc29sdmVzIHRvIG5vdGhpbmcgYW5kIGB3aGVuTWlzc2luZ1RyZWF0QXNgIGlzIHtAbGluayBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvd30gKHRoZSBkZWZhdWx0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2VuYW1lKHBhcmFtczogR2V0QmFzZW5hbWVQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIHBhdGhPckZpbGUsXG4gICAgd2hlbk1pc3NpbmdUcmVhdEFzXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgYWJzdHJhY3RGaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHtcbiAgICBhcHAsXG4gICAgcGF0aE9yRmlsZVxuICB9KTtcblxuICBpZiAoaXNGaWxlKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlLmJhc2VuYW1lO1xuICB9XG5cbiAgaWYgKGlzRm9sZGVyKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gYWJzdHJhY3RGaWxlLm5hbWU7XG4gIH1cblxuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuXG4gIGNvbnN0IHRyZWF0bWVudCA9IHdoZW5NaXNzaW5nVHJlYXRBcyA/PyBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvdztcblxuICBpZiAodHJlYXRtZW50ID09PSBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvdykge1xuICAgIHRocm93IG5ldyBFcnJvcihgQWJzdHJhY3QgZmlsZSBub3QgZm91bmQ6ICR7cGF0aH1gKTtcbiAgfVxuXG4gIHJldHVybiB0cmVhdG1lbnQgPT09IE1pc3NpbmdQYXRoVHJlYXRtZW50LkZvbGRlciA/IGJhc2VuYW1lKHBhdGgpIDogYmFzZW5hbWUocGF0aCwgZXh0bmFtZShwYXRoKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBnaXZlbiBgcGF0aE9yRmlsZWA6IGEgZmlsZSdzIGV4dGVuc2lvbiB3aXRob3V0IHRoZSBsZWFkaW5nIGRvdCwgYW5kIGFuIGVtcHR5IHN0cmluZyBmb3IgYSBmb2xkZXIuXG4gKlxuICogVW5saWtlIGBleHRuYW1lYCBmcm9tIGBwYXRoLnRzYCwgd2hpY2ggaXMgYSBwdXJlIHN0cmluZyBmdW5jdGlvbiwgdGhpcyByZXNvbHZlcyB0aGUgYXJndW1lbnQgYWdhaW5zdCB0aGUgdmF1bHQgZmlyc3QsIHNvIGEgZm9sZGVyIHdob3NlIG5hbWUgY29udGFpbnMgYSBkb3RcbiAqIGFuc3dlcnMgd2l0aCBhbiBlbXB0eSBzdHJpbmcgcmF0aGVyIHRoYW4gYSBib2d1cyBleHRlbnNpb24uIEEgZm9sZGVyIGhhcyBubyBgZXh0ZW5zaW9uYCBvZiBpdHMgb3duLCB3aGljaCBpcyB3aHkgYSBjYWxsZXIgaGFuZGxpbmcgYm90aCBraW5kcyB3b3VsZFxuICogb3RoZXJ3aXNlIGJyYW5jaCBvbiB7QGxpbmsgaXNGaWxlfSBpdHNlbGYuXG4gKlxuICogQSBwYXRoIHRoYXQgcmVzb2x2ZXMgdG8gbm90aGluZyBoYXMgbm8gYW5zd2VyIHRvIGxvb2sgdXAsIHNvIHtAbGluayBHZXRFeHRlbnNpb25QYXJhbXMud2hlbk1pc3NpbmdUcmVhdEFzfSBkZWNpZGVzIHdoYXQgaGFwcGVucy4gSXQgZGVmYXVsdHMgdG9cbiAqIHtAbGluayBNaXNzaW5nUGF0aFRyZWF0bWVudC5UaHJvd30gcmF0aGVyIHRoYW4gdG8gYSBndWVzczogYGFscGhhLmJyYXZvYCBtYXkgbmFtZSBhIGRvdHRlZCBmb2xkZXIgb3IgYSBgLmJyYXZvYCBmaWxlLCBhbmQgbm90aGluZyBpbiB0aGUgdmF1bHQgc2F5c1xuICogd2hpY2gsIHNvIGEgc2lsZW50bHkgd3JvbmcgYW5zd2VyIGlzIHdvcnNlIHRoYW4gYW4gZXJyb3IuIFBhc3Mge0BsaW5rIE1pc3NpbmdQYXRoVHJlYXRtZW50LkZpbGV9IGZvciB0aGUgYGNoZWNrRXh0ZW5zaW9uYCByZWFkaW5nIG9mIGEgYmFyZSBzdHJpbmcsIG9yXG4gKiB7QGxpbmsgTWlzc2luZ1BhdGhUcmVhdG1lbnQuRm9sZGVyfSBmb3IgdGhlIG90aGVyIG9uZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZXRyaWV2YWwuXG4gKiBAcmV0dXJucyBUaGUgZXh0ZW5zaW9uIG9mIHRoZSBgcGF0aE9yRmlsZWAsIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBpdCBoYXMgbm9uZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHBhdGggcmVzb2x2ZXMgdG8gbm90aGluZyBhbmQgYHdoZW5NaXNzaW5nVHJlYXRBc2AgaXMge0BsaW5rIE1pc3NpbmdQYXRoVHJlYXRtZW50LlRocm93fSAodGhlIGRlZmF1bHQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKHBhcmFtczogR2V0RXh0ZW5zaW9uUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBwYXRoT3JGaWxlLFxuICAgIHdoZW5NaXNzaW5nVHJlYXRBc1xuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGFic3RyYWN0RmlsZSA9IGdldEFic3RyYWN0RmlsZU9yTnVsbCh7XG4gICAgYXBwLFxuICAgIHBhdGhPckZpbGVcbiAgfSk7XG5cbiAgaWYgKGlzRmlsZShhYnN0cmFjdEZpbGUpKSB7XG4gICAgcmV0dXJuIGFic3RyYWN0RmlsZS5leHRlbnNpb247XG4gIH1cblxuICBpZiAoaXNGb2xkZXIoYWJzdHJhY3RGaWxlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IHBhdGggPSBnZXRQYXRoKGFwcCwgcGF0aE9yRmlsZSk7XG5cbiAgY29uc3QgdHJlYXRtZW50ID0gd2hlbk1pc3NpbmdUcmVhdEFzID8/IE1pc3NpbmdQYXRoVHJlYXRtZW50LlRocm93O1xuXG4gIGlmICh0cmVhdG1lbnQgPT09IE1pc3NpbmdQYXRoVHJlYXRtZW50LlRocm93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBYnN0cmFjdCBmaWxlIG5vdCBmb3VuZDogJHtwYXRofWApO1xuICB9XG5cbiAgLy8gT2JzaWRpYW4gbG93ZXJjYXNlcyBhIGZpbGUncyBjYW5vbmljYWwgZXh0ZW5zaW9uLCBzbyBhIHBhdGggcmVhZCBhcyBhIGZpbGUgaGFzIHRvIGFuc3dlciBpbiB0aGUgc2FtZSBjYXNlLlxuICByZXR1cm4gdHJlYXRtZW50ID09PSBNaXNzaW5nUGF0aFRyZWF0bWVudC5Gb2xkZXIgPyAnJyA6IGV4dG5hbWUocGF0aCkuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBmaWxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXRoIG9yIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmV0cmlldmFsLlxuICogQHJldHVybnMgVGhlIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgcGF0aCBvciBmaWxlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgZmlsZSBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlKHBhcmFtczogR2V0RmlsZVBhcmFtcyk6IFRGaWxlIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICBwYXRoT3JGaWxlLFxuICAgIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZ1xuICB9ID0gcGFyYW1zO1xuICBsZXQgZmlsZSA9IGdldEZpbGVPck51bGwobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdldEZpbGVPck51bGxQYXJhbXM+KHtcbiAgICBhcHAsXG4gICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgcGF0aE9yRmlsZVxuICB9KSk7XG4gIGlmICghZmlsZSkge1xuICAgIGlmIChzaG91bGRJbmNsdWRlTm9uRXhpc3RpbmcpIHtcbiAgICAgIGZpbGUgPSBjcmVhdGVURmlsZUluc3RhbmNlKGFwcCwgcGF0aE9yRmlsZSBhcyBzdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgbm90IGZvdW5kOiAke3BhdGhPckZpbGUgYXMgc3RyaW5nfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaWxlO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGZpbGUgb3IgYG51bGxgIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXRoIG9yIGZpbGUuXG4gKiBJZiB0aGUgcHJvdmlkZWQgYXJndW1lbnQgaXMgYWxyZWFkeSBhIGZpbGUsIGl0IGlzIHJldHVybmVkIGFzIGlzLlxuICogT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYXBwJ3MgdmF1bHQgdG8gcmV0cmlldmUgdGhlIGZpbGUgYnkgaXRzIHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmV0cmlldmFsLlxuICogQHJldHVybnMgVGhlIGZpbGUgaWYgZm91bmQsIG90aGVyd2lzZSBgbnVsbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlT3JOdWxsKHBhcmFtczogR2V0RmlsZU9yTnVsbFBhcmFtcyk6IG51bGwgfCBURmlsZSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgcGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxHZXRBYnN0cmFjdEZpbGVPck51bGxQYXJhbXM+KHtcbiAgICBhcHAsXG4gICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgcGF0aE9yRmlsZVxuICB9KSk7XG4gIHJldHVybiBpc0ZpbGUoZmlsZSkgPyBmaWxlIDogbnVsbDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB0eXBlIG9mIGEgZmlsZSBzeXN0ZW0gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBhYnN0cmFjdEZpbGUgLSBUaGUgYWJzdHJhY3QgZmlsZSB0byBnZXQgdGhlIHR5cGUgb2YuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgYWJzdHJhY3QgZmlsZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGFic3RyYWN0IGZpbGUgaXMgbm90IGEgZmlsZSBvciBhIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVTeXN0ZW1UeXBlKGFic3RyYWN0RmlsZTogVEFic3RyYWN0RmlsZSk6IEZpbGVTeXN0ZW1UeXBlIHtcbiAgaWYgKGlzRmlsZShhYnN0cmFjdEZpbGUpKSB7XG4gICAgcmV0dXJuIEZpbGVTeXN0ZW1UeXBlLkZpbGU7XG4gIH1cbiAgaWYgKGlzRm9sZGVyKGFic3RyYWN0RmlsZSkpIHtcbiAgICByZXR1cm4gRmlsZVN5c3RlbVR5cGUuRm9sZGVyO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignQWJzdHJhY3QgZmlsZSBpcyBub3QgYSBmaWxlIG9yIGEgZm9sZGVyJyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgZm9sZGVyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBhcHAgYW5kIHBhdGhPckZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSByZXRyaWV2YWwuXG4gKiBAcmV0dXJucyBUaGUgcmV0cmlldmVkIGZvbGRlci5cbiAqIEB0aHJvd3MgSWYgdGhlIGZvbGRlciBpcyBub3QgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXIocGFyYW1zOiBHZXRGb2xkZXJQYXJhbXMpOiBURm9sZGVyIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICBwYXRoT3JGb2xkZXIsXG4gICAgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBmb2xkZXIgPSBnZXRGb2xkZXJPck51bGwobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPEdldEZvbGRlck9yTnVsbFBhcmFtcz4oe1xuICAgIGFwcCxcbiAgICBpc0Nhc2VJbnNlbnNpdGl2ZSxcbiAgICBwYXRoT3JGb2xkZXJcbiAgfSkpO1xuICBpZiAoIWZvbGRlcikge1xuICAgIGlmIChzaG91bGRJbmNsdWRlTm9uRXhpc3RpbmcpIHtcbiAgICAgIGZvbGRlciA9IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHAsIHBhdGhPckZvbGRlciBhcyBzdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvbGRlciBub3QgZm91bmQ6ICR7cGF0aE9yRm9sZGVyIGFzIHN0cmluZ31gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm9sZGVyO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGZvbGRlciBvciBgbnVsbGAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhdGggb3IgZm9sZGVyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIHJldHJpZXZhbC5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIgaWYgZm91bmQsIG90aGVyd2lzZSBgbnVsbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJPck51bGwocGFyYW1zOiBHZXRGb2xkZXJPck51bGxQYXJhbXMpOiBudWxsIHwgVEZvbGRlciB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgaXNDYXNlSW5zZW5zaXRpdmUsXG4gICAgcGF0aE9yRm9sZGVyXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZvbGRlciA9IGdldEFic3RyYWN0RmlsZU9yTnVsbChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8R2V0QWJzdHJhY3RGaWxlT3JOdWxsUGFyYW1zPih7XG4gICAgYXBwLFxuICAgIGlzQ2FzZUluc2Vuc2l0aXZlLFxuICAgIHBhdGhPckZpbGU6IHBhdGhPckZvbGRlclxuICB9KSk7XG4gIHJldHVybiBpc0ZvbGRlcihmb2xkZXIpID8gZm9sZGVyIDogbnVsbDtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYXJyYXkgb2YgZmlsZXMgcmVwcmVzZW50aW5nIHRoZSBtYXJrZG93biBmaWxlcyB3aXRoaW4gYSBzcGVjaWZpZWQgZm9sZGVyIG9yIHBhdGguXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmV0cmlldmFsLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZmlsZXMgcmVwcmVzZW50aW5nIHRoZSBtYXJrZG93biBmaWxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duRmlsZXMocGFyYW1zOiBHZXRNYXJrZG93bkZpbGVzUGFyYW1zKTogVEZpbGVbXSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgaXNSZWN1cnNpdmUsXG4gICAgcGF0aE9yRm9sZGVyXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZvbGRlciA9IGdldEZvbGRlcih7XG4gICAgYXBwLFxuICAgIHBhdGhPckZvbGRlclxuICB9KTtcblxuICBsZXQgbWFya2Rvd25GaWxlczogVEZpbGVbXSA9IFtdO1xuXG4gIGlmIChpc1JlY3Vyc2l2ZSkge1xuICAgIFZhdWx0LnJlY3Vyc2VDaGlsZHJlbihmb2xkZXIsIChhYnN0cmFjdEZpbGUpID0+IHtcbiAgICAgIGlmIChpc01hcmtkb3duRmlsZShhYnN0cmFjdEZpbGUpICYmIGFic3RyYWN0RmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICAgIG1hcmtkb3duRmlsZXMucHVzaChhYnN0cmFjdEZpbGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG1hcmtkb3duRmlsZXMgPSBmb2xkZXIuY2hpbGRyZW4uZmlsdGVyKChmaWxlKSA9PiBpc01hcmtkb3duRmlsZShmaWxlKSkgYXMgVEZpbGVbXTtcbiAgfVxuXG4gIG1hcmtkb3duRmlsZXMgPSBtYXJrZG93bkZpbGVzLnNvcnQoKGEsIGIpID0+IGEucGF0aC5sb2NhbGVDb21wYXJlKGIucGF0aCkpO1xuICByZXR1cm4gbWFya2Rvd25GaWxlcztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZpbGUgZm9yIHRoZSBnaXZlbiBwYXRoIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSB0byByZXRyaWV2ZSBvciBjcmVhdGUuXG4gKiBAcmV0dXJucyBUaGUgZmlsZSByZXByZXNlbnRpbmcgdGhlIGZpbGVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRmlsZShhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxURmlsZT4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7XG4gICAgYXBwLFxuICAgIHBhdGhPckZpbGU6IHBhdGhcbiAgfSk7XG4gIGlmIChmaWxlKSB7XG4gICAgcmV0dXJuIGZpbGU7XG4gIH1cblxuICBjb25zdCBmb2xkZXJQYXRoID0gcGFyZW50Rm9sZGVyUGF0aChwYXRoKTtcbiAgYXdhaXQgZ2V0T3JDcmVhdGVGb2xkZXIoYXBwLCBmb2xkZXJQYXRoKTtcblxuICByZXR1cm4gYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShwYXRoLCAnJyk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBmb2xkZXIgZm9yIHRoZSBnaXZlbiBwYXRoIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZm9sZGVyIHRvIHJldHJpZXZlIG9yIGNyZWF0ZS5cbiAqIEByZXR1cm5zIFRoZSBmb2xkZXIgcmVwcmVzZW50aW5nIHRoZSBmb2xkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZUZvbGRlcihhcHA6IEFwcCwgcGF0aDogc3RyaW5nKTogUHJvbWlzZTxURm9sZGVyPiB7XG4gIGNvbnN0IGZvbGRlciA9IGdldEZvbGRlck9yTnVsbCh7XG4gICAgYXBwLFxuICAgIHBhdGhPckZvbGRlcjogcGF0aFxuICB9KTtcbiAgcmV0dXJuIGZvbGRlciA/PyAoYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcihwYXRoKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgZ2l2ZW4gYHBhdGhPckZpbGVgLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gQXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBhYnN0cmFjdCBmaWxlLlxuICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGBwYXRoT3JGaWxlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSk6IHN0cmluZyB7XG4gIGlmIChpc0Fic3RyYWN0RmlsZShwYXRoT3JGaWxlKSkge1xuICAgIHJldHVybiBwYXRoT3JGaWxlLnBhdGg7XG4gIH1cblxuICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHtcbiAgICBhcHAsXG4gICAgcGF0aE9yRmlsZVxuICB9KTtcbiAgcmV0dXJuIGZpbGUgPyBmaWxlLnBhdGggOiBnZXRSZXNvbHZlZFBhdGgocGF0aE9yRmlsZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGlzIGFuIGluc3RhbmNlIG9mIGFic3RyYWN0IGZpbGUuXG4gKlxuICogQHBhcmFtIGZpbGUgLSBUaGUgZmlsZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgaXMgYW4gaW5zdGFuY2Ugb2YgYWJzdHJhY3QgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzdHJhY3RGaWxlKGZpbGU6IHVua25vd24pOiBmaWxlIGlzIFRBYnN0cmFjdEZpbGUge1xuICByZXR1cm4gZmlsZSBpbnN0YW5jZW9mIFRBYnN0cmFjdEZpbGU7XG59XG5cbi8qKlxuICogICBDaGVja3MgaWYgdGhlIGdpdmVuIGZpbGUgaXMgYSBiYXNlIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBpcyBhIGJhc2UgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmFzZUZpbGUocGF0aE9yRmlsZTogbnVsbCB8IFBhdGhPckFic3RyYWN0RmlsZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2hlY2tFeHRlbnNpb24ocGF0aE9yRmlsZSwgQkFTRV9GSUxFX0VYVEVOU0lPTik7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGlzIGEgY2FudmFzIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBpcyBhIGNhbnZhcyBmaWxlIG9yIG5vdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzRmlsZShwYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yQWJzdHJhY3RGaWxlKTogYm9vbGVhbiB7XG4gIHJldHVybiBjaGVja0V4dGVuc2lvbihwYXRoT3JGaWxlLCBDQU5WQVNfRklMRV9FWFRFTlNJT04pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBhbiBpbnN0YW5jZSBvZiBmaWxlLlxuICpcbiAqIEBwYXJhbSBmaWxlIC0gVGhlIGZpbGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGlzIGFuIGluc3RhbmNlIG9mIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbGUoZmlsZTogdW5rbm93bik6IGZpbGUgaXMgVEZpbGUge1xuICByZXR1cm4gZmlsZSBpbnN0YW5jZW9mIFRGaWxlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBhIGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmaWxlIGlzIGEgZm9sZGVyLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRm9sZGVyKGZpbGU6IHVua25vd24pOiBmaWxlIGlzIFRGb2xkZXIge1xuICByZXR1cm4gZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIGlzIGEgTWFya2Rvd24gZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGlzIGEgTWFya2Rvd24gZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFya2Rvd25GaWxlKHBhdGhPckZpbGU6IG51bGwgfCBQYXRoT3JBYnN0cmFjdEZpbGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNoZWNrRXh0ZW5zaW9uKHBhdGhPckZpbGUsIE1BUktET1dOX0ZJTEVfRVhURU5TSU9OKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGZpbGUgaXMgYSBub3RlLlxuICpcbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgaXMgYSBub3RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3RlKHBhdGhPckZpbGU6IG51bGwgfCBQYXRoT3JBYnN0cmFjdEZpbGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzTWFya2Rvd25GaWxlKHBhdGhPckZpbGUpIHx8IGlzQ2FudmFzRmlsZShwYXRoT3JGaWxlKSB8fCBpc0Jhc2VGaWxlKHBhdGhPckZpbGUpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBwYXRoIG9yIGEgZmlsZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoT3JGaWxlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUGF0aE9yRmlsZSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IGlzRmlsZSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBmaWxlIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGF0dGFjaG1lbnQgYmVjYXVzZSBvZiBpdHMgZXh0ZW5zaW9uLlxuICpcbiAqIFNvbWUgcGx1Z2lucyBzdG9yZSB0aGVpciBkYXRhIGluIGZpbGVzIHRoYXQgYXJlIG1hcmtkb3duIG9uIGRpc2sgYnV0IGFyZSBub3QgcHJvc2Ug4oCUIGBFeGNhbGlkcmF3YCwgZm9yIGV4YW1wbGUsIHNhdmVzIGVhY2ggZHJhd2luZyBhcyBgc2tldGNoLmV4Y2FsaWRyYXcubWRgLlxuICogT2JzaWRpYW4gcmVwb3J0cyBzdWNoIGEgZmlsZSdzIGV4dGVuc2lvbiBhcyBgbWRgLCBzbyBhIGNhbGxlciB0aGF0IHdhbnRzIHRvIHRlbGwgYSBkcmF3aW5nIGFwYXJ0IGZyb20gYSBub3RlIGhhcyB0byBtYXRjaCB0aGUgZnVsbCBtdWx0aS1wYXJ0IGV4dGVuc2lvblxuICogKGAuZXhjYWxpZHJhdy5tZGApIGFnYWluc3QgdGhlIGZpbGUgbmFtZS4gV2hpY2ggZXh0ZW5zaW9ucyBjb3VudCBpcyB0aGUgY2FsbGVyJ3MgY29uZmlndXJhdGlvbiwgbm90IHRoaXMgbGlicmFyeSdzIOKAlCBvbmx5IHRoZSBtYXRjaGluZyBydWxlIGlzIHNoYXJlZC5cbiAqXG4gKiBBIGRyYXdpbmcgY2FuIGFsc28gYmUgcmVjb2duaXplZCBieSBpdHMgZnJvbnRtYXR0ZXIsIHRoZSB3YXkgYEV4Y2FsaWRyYXdgIGl0c2VsZiByZWNvZ25pemVzIG9uZSAoYGV4Y2FsaWRyYXctcGx1Z2luOiBwYXJzZWRgKSwgdGhyb3VnaCBhXG4gKiBgcHJvcGVydHk6bmFtZVs9dmFsdWVdYCBlbnRyeS4gVGhhdCBhbnN3ZXIgY29tZXMgZnJvbSB0aGUgbWV0YWRhdGEgY2FjaGUsIHdoaWNoIGNhbiBiZSBjb2xkIGF0IHN0YXJ0dXAgb3IgcmlnaHQgYWZ0ZXIgdGhlIGZpbGUgaXMgY3JlYXRlZCwgc28gYW5cbiAqIHVuY2FjaGVkIGZpbGUgYW5zd2VycyBcIm5vIG1hdGNoXCIgYW5kIGlzIHRyZWF0ZWQgYXMgYSBub3RlLiBUaGF0IGlzIHRoZSBjb25zZXJ2YXRpdmUgc2lkZSBmb3IgZXZlcnkgY3VycmVudCBjYWxsZXI6IGEgbm90ZSBpcyBub3QgbW92ZWQgYXMgYW5cbiAqIGF0dGFjaG1lbnQsIGFuZCBpdCBzcGFyZXMgaXRzIGZvbGRlciBmcm9tIGEgZGVsZXRlIHN3ZWVwLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGF0aCBvciBmaWxlIHRvIGNsYXNzaWZ5IGFuZCB0aGUgY29uZmlndXJlZCBhdHRhY2htZW50IGV4dGVuc2lvbnMuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGF0dGFjaG1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RyZWF0ZWRBc0F0dGFjaG1lbnQocGFyYW1zOiBJc1RyZWF0ZWRBc0F0dGFjaG1lbnRQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBhdHRhY2htZW50RXh0ZW5zaW9ucyxcbiAgICBwYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGlmIChwYXRoT3JGaWxlID09PSBudWxsIHx8IGlzRm9sZGVyKHBhdGhPckZpbGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgbG93ZXJDYXNlTmFtZSA9IGdldE5hbWUocGF0aE9yRmlsZSkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIGF0dGFjaG1lbnRFeHRlbnNpb25zLnNvbWUoKGV4dGVuc2lvbikgPT4ge1xuICAgIGNvbnN0IHRyaW1tZWRFbnRyeSA9IGV4dGVuc2lvbi50cmltKCk7XG4gICAgaWYgKGlzUHJvcGVydHlFbnRyeSh0cmltbWVkRW50cnkpKSB7XG4gICAgICByZXR1cm4gISFhcHAgJiYgaXNNYXJrZG93bkZpbGUocGF0aE9yRmlsZSkgJiYgY2hlY2tQcm9wZXJ0eUVudHJ5TWF0Y2hlcyh7XG4gICAgICAgIGVudHJ5OiB0cmltbWVkRW50cnksXG4gICAgICAgIGZyb250bWF0dGVyOiBnZXRDYWNoZWRGcm9udG1hdHRlcih7IGFwcCwgcGF0aE9yRmlsZSB9KVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gRW5mb3JjaW5nIGEgc2luZ2xlIGxlYWRpbmcgZG90IGlzIHdoYXQga2VlcHMgdGhlIG1hdGNoIG9uIGFuIGV4dGVuc2lvbiBib3VuZGFyeS5cbiAgICAvLyBBIGJhcmUgYHJhdy5tZGAgd291bGQgb3RoZXJ3aXNlIG1hdGNoIGBza2V0Y2guZXhjYWxpZHJhdy5tZGAsIHdoaWNoIGlzIG5ldmVyIHdoYXQgYSBjYWxsZXIgbWVhbnMuXG4gICAgY29uc3Qgbm9ybWFsaXplZEV4dGVuc2lvbiA9IGV4dGVuc2lvbi50cmltKCkucmVwbGFjZSgvXlxcLisvLCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZEV4dGVuc2lvbiAhPT0gJycgJiYgbG93ZXJDYXNlTmFtZS5lbmRzV2l0aChgLiR7bm9ybWFsaXplZEV4dGVuc2lvbn1gKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHJpbXMgdGhlIG1hcmtkb3duIGV4dGVuc2lvbiBmcm9tIHRoZSBmaWxlIHBhdGggaWYgdGhlIGZpbGUgaXMgYSBtYXJrZG93biBmaWxlLlxuICogSWYgdGhlIGZpbGUgaXMgbm90IGEgbWFya2Rvd24gZmlsZSwgdGhlIG9yaWdpbmFsIGZpbGUgcGF0aCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0gZmlsZSAtIFRoZSBmaWxlIHRvIHRyaW0gdGhlIG1hcmtkb3duIGV4dGVuc2lvbiBmcm9tLlxuICogQHJldHVybnMgVGhlIGZpbGUgcGF0aCB3aXRoIHRoZSBtYXJrZG93biBleHRlbnNpb24gdHJpbW1lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW1NYXJrZG93bkV4dGVuc2lvbihmaWxlOiBUQWJzdHJhY3RGaWxlKTogc3RyaW5nIHtcbiAgcmV0dXJuIGlzTWFya2Rvd25GaWxlKGZpbGUpXG4gICAgPyB0cmltRW5kKHtcbiAgICAgICRzdHJpbmc6IGZpbGUucGF0aCxcbiAgICAgIHN1ZmZpeDogYC4ke01BUktET1dOX0ZJTEVfRVhURU5TSU9OfWBcbiAgICB9KVxuICAgIDogZmlsZS5wYXRoO1xufVxuXG5mdW5jdGlvbiBnZXRDYWNoZWRGcm9udG1hdHRlcihwYXJhbXM6IEdldENhY2hlZEZyb250bWF0dGVyUGFyYW1zKTogbnVsbCB8IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwocGFyYW1zKTtcbiAgcmV0dXJuIGlzRmlsZShmaWxlKSA/IHBhcmFtcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk/LmZyb250bWF0dGVyID8/IG51bGwgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRGaWxlSW50ZXJuYWwocGFyYW1zOiBHZXRGaWxlSW50ZXJuYWxQYXJhbXMpOiBudWxsIHwgVEFic3RyYWN0RmlsZSB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgcGF0aFxuICB9ID0gcGFyYW1zO1xuICBsZXQgeyBpc0Nhc2VJbnNlbnNpdGl2ZSB9ID0gcGFyYW1zO1xuICBpc0Nhc2VJbnNlbnNpdGl2ZSA/Pz0gZ2V0RGF0YUFkYXB0ZXJFeChhcHApLmluc2Vuc2l0aXZlO1xuICBpZiAoaXNDYXNlSW5zZW5zaXRpdmUpIHtcbiAgICBjb25zdCBjYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXggPSBnZXRDYXNlSW5zZW5zaXRpdmVGaWxlSW5kZXgoYXBwKTtcbiAgICByZXR1cm4gY2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4ID8gY2FzZUluc2Vuc2l0aXZlRmlsZUluZGV4LmdldChwYXRoKSA6IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGhJbnNlbnNpdGl2ZShwYXRoKTtcbiAgfVxuXG4gIHJldHVybiBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBnZXROYW1lKHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSk6IHN0cmluZyB7XG4gIHJldHVybiBpc0Fic3RyYWN0RmlsZShwYXRoT3JGaWxlKSA/IHBhdGhPckZpbGUubmFtZSA6IGJhc2VuYW1lKHBhdGhPckZpbGUpO1xufVxuXG5mdW5jdGlvbiBnZXRSZXNvbHZlZFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgocmVzb2x2ZSgnLycsIHBhdGgpKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLDBCQUE0QztBQUM1QyxrQkFJTztBQUNQLG9CQUF3QjtBQUN4Qix5QkFBa0M7QUFDbEMsNkJBS087QUFDUCxzQkFNTztBQUVQLHlD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YSxVQUFVLEtBQUssV0FBVyxVQUFVO0FBQ3hGO0FBUU8sU0FBUyxhQUFhLE9BQXFDO0FBQ2hFLFNBQU8sT0FBTyxVQUFVLFlBQVksT0FBTyxLQUFLO0FBQ2xEO0FBaUJPLFNBQVMsc0JBQXNCLFFBQThDO0FBQ2xGLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixNQUFJLGVBQWUsUUFBUSxTQUFTLFVBQVUsR0FBRztBQUMvQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZ0JBQWdCLFFBQVEsVUFBVSxFQUFFLFlBQVk7QUFDdEQsU0FBTyxxQkFBcUIsS0FBSyxDQUFDLGNBQWM7QUFDOUMsVUFBTSxlQUFlLFVBQVUsS0FBSztBQUNwQyxZQUFJLHVDQUFnQixZQUFZLEdBQUc7QUFDakMsYUFBTyxDQUFDLENBQUMsT0FBTyxlQUFlLFVBQVUsU0FBSyxpREFBMEI7QUFBQSxRQUN0RSxPQUFPO0FBQUEsUUFDUCxhQUFhLHFCQUFxQixFQUFFLEtBQUssV0FBVyxDQUFDO0FBQUEsTUFDdkQsQ0FBQztBQUFBLElBQ0g7QUFJQSxVQUFNLHNCQUFzQixVQUFVLEtBQUssRUFBRSxRQUFRLFFBQVEsRUFBRSxFQUFFLFlBQVk7QUFDN0UsV0FBTyx3QkFBd0IsTUFBTSxjQUFjLFNBQVMsSUFBSSxtQkFBbUIsRUFBRTtBQUFBLEVBQ3ZGLENBQUM7QUFDSDtBQVNPLFNBQVMsc0JBQXNCLE1BQTZCO0FBQ2pFLFNBQU8sZUFBZSxJQUFJLFFBQ3RCLHVCQUFRO0FBQUEsSUFDUixTQUFTLEtBQUs7QUFBQSxJQUNkLFFBQVEsSUFBSSx1QkFBdUI7QUFBQSxFQUNyQyxDQUFDLElBQ0MsS0FBSztBQUNYO0FBRUEsU0FBUyxxQkFBcUIsUUFBOEU7QUFDMUcsUUFBTSxPQUFPLHNCQUFzQixNQUFNO0FBQ3pDLFNBQU8sT0FBTyxJQUFJLElBQUksT0FBTyxJQUFJLGNBQWMsYUFBYSxJQUFJLEdBQUcsZUFBZSxPQUFPO0FBQzNGO0FBRUEsU0FBUyxnQkFBZ0IsUUFBcUQ7QUFDNUUsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBQ0osTUFBSSxFQUFFLGtCQUFrQixJQUFJO0FBQzVCLDRCQUFzQix5Q0FBaUIsR0FBRyxFQUFFO0FBQzVDLE1BQUksbUJBQW1CO0FBQ3JCLFVBQU0sK0JBQTJCLGdFQUE0QixHQUFHO0FBQ2hFLFdBQU8sMkJBQTJCLHlCQUF5QixJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0saUNBQWlDLElBQUk7QUFBQSxFQUN4SDtBQUVBLFNBQU8sSUFBSSxNQUFNLHNCQUFzQixJQUFJO0FBQzdDO0FBRUEsU0FBUyxRQUFRLFlBQXdDO0FBQ3ZELFNBQU8sZUFBZSxVQUFVLElBQUksV0FBVyxXQUFPLHNCQUFTLFVBQVU7QUFDM0U7QUFFQSxTQUFTLGdCQUFnQixNQUFzQjtBQUM3QyxhQUFPLG1DQUFjLHFCQUFRLEtBQUssSUFBSSxDQUFDO0FBQ3pDOyIsIm5hbWVzIjpbIkZpbGVTeXN0ZW1UeXBlIiwiTWlzc2luZ1BhdGhUcmVhdG1lbnQiXX0=
@@ -1,4 +1,4 @@
1
- /// <reference path="./library.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *
@@ -2,13 +2,7 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
-
6
5
  (function () {
7
- function ensureDisposeSymbols(symbolConstructor = Symbol) {
8
- symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
9
- symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
10
- }
11
-
12
6
  function ensureBrowserProcess() {
13
7
  const browserProcess = {
14
8
  browser: true,
@@ -33,20 +27,7 @@ function ensureBrowserProcess() {
33
27
  existingProcessRecord["browser"] = true;
34
28
  }
35
29
 
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
- })();
30
+ ensureBrowserProcess();
50
31
  })();
51
32
  (function patchObsidianRequire() {
52
33
  const originalRequire = require;
@@ -258,4 +239,4 @@ function toFolderNoteLocation(storageLocation) {
258
239
  resolveFolderNote,
259
240
  resolveFolderNoteConfig
260
241
  });
261
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2ZvbGRlci1ub3RlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGZvbGRlci1ub3RlIGNvbmNlcHQ6IHdoaWNoIG5vdGUsIGlmIGFueSwgaXMgdGhlIG9uZSB3aG9zZSBwcm9wZXJ0aWVzIGRlc2NyaWJlIGEgRk9MREVSIGl0c2VsZi5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gc3VjaCBjb25jZXB0IFx1MjAxNCBpdCBpcyBhIGNvbnZlbnRpb24gdGhlIGNvbW11bml0eSBzZXR0bGVkIG9uLCBhbmQgdGhlIHBsdWdpbiB0aGF0IG93bnMgaXRcbiAqIGZvciBtb3N0IHZhdWx0cyBpcyBbYGZvbGRlci1ub3Rlc2BdKGh0dHBzOi8vY29tbXVuaXR5Lm9ic2lkaWFuLm1kL3BsdWdpbnMvZm9sZGVyLW5vdGVzKS4gU28gdGhlIGFuc3dlciB0b1xuICogXCJ3aGljaCBub3RlIGJlbG9uZ3MgdG8gdGhpcyBmb2xkZXJcIiBpcyB0aGF0IHBsdWdpbidzIHRvIGdpdmUgd2hlbmV2ZXIgaXQgaXMgaW5zdGFsbGVkLCBhbmQgdGhpcyBtb2R1bGVcbiAqIGFza3MgaXQgcmF0aGVyIHRoYW4gaW52ZW50aW5nIGEgc2Vjb25kIGFuc3dlcjoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSBcdTIwMTQgdGhlIGRlZmF1bHQgXHUyMDE0IHJlYWRzIGl0c1xuICogbGl2ZSBjb25maWd1cmF0aW9uIGF0IGV2ZXJ5IHVzZS5cbiAqXG4gKiBSZWFkaW5nIGl0IGxpdmUgcmF0aGVyIHRoYW4gY29weWluZyBpdHMgdmFsdWVzIGludG8gYSBjb25zdW1lcidzIG93biBzZXR0aW5ncyBpcyBkZWxpYmVyYXRlOiBhIGNvcHkgZ29lc1xuICogc3RhbGUgdGhlIG1vbWVudCB0aGF0IHBsdWdpbiBpcyByZWNvbmZpZ3VyZWQsIGFuZCBpdCB3b3VsZCBuZWVkIGEgc2V0dGluZ3MgbWlncmF0aW9uIHRvIHNlZWQuIEV2ZXJ5dGhpbmdcbiAqIGVsc2UgaXMgdGhlIGNhbGxlcidzIGV4cGxpY2l0IGNob2ljZSwgYW5kIHRoZW4gdGhlIG90aGVyIHBsdWdpbiBpcyBub3QgY29uc3VsdGVkIGF0IGFsbC5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgZXZlciBDUkVBVEVTIGEgbm90ZS4gQSBmb2xkZXIgd2l0aCBubyBmb2xkZXIgbm90ZSBhbnN3ZXJzIGBudWxsYCwgd2hpY2ggaXMgd2hhdCBsZXRzIGFcbiAqIGNhbGxlciBsYXllciBmb2xkZXItbm90ZSBiZWhhdmlvciBvbnRvIGEgY2xpY2sgd2l0aG91dCByaXNraW5nIGEgZmlsZSBhcHBlYXJpbmcgb24gdGhlIHVzZXIncyBkaXNrLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG4vKipcbiAqIFdoZXJlIGEgZm9sZGVyJ3MgZm9sZGVyIG5vdGUgbGl2ZXMuXG4gKlxuICogVGhlIHRocmVlIGNvbmNyZXRlIG1lbWJlcnMgYXJlIHRoZSBzaGFwZXMgdGhlIGZvbGRlci1ub3RlIGVjb3N5c3RlbSBhY3R1YWxseSB1c2VzOlxuICogYGNoYXJsaWUvY2hhcmxpZS5tZGAgYW5kIGBjaGFybGllL2luZGV4Lm1kYCBhcmUgYm90aCB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcn0gKHRoZXlcbiAqIGRpZmZlciBvbmx5IGluIHRoZSBOQU1FLCB3aGljaCBpcyB3aHkgbmFtaW5nIGlzIGEgY2FsbGJhY2sgYW5kIG5vdCBhIGZvdXJ0aCBtZW1iZXIpLCB3aGlsZVxuICogYGNoYXJsaWUubWRgIGJlc2lkZSB0aGUgZm9sZGVyIGlzIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyfSBcdTIwMTQgd2hvc2Ugd2hvbGUgcG9pbnQgaXMgdGhhdFxuICogYFtbYWxwaGEvYnJhdm8vY2hhcmxpZV1dYCBsaW5rcyB0byBhIGZvbGRlciB3aXRoIG5vIHNwZWNpYWwgc3ludGF4LlxuICovXG5leHBvcnQgZW51bSBGb2xkZXJOb3RlTG9jYXRpb24ge1xuICAvKipcbiAgICogVGFrZSB0aGUgYW5zd2VyIGZyb20gdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYCBwbHVnaW4sIGZhbGxpbmcgYmFjayB0byBhIG5vdGUgbmFtZWQgYWZ0ZXIgaXRzXG4gICAqIGZvbGRlciwgaW5zaWRlIGl0LiBUaGUgZGVmYXVsdCwgYW5kIHJlc29sdmVkIExJVkUgcmF0aGVyIHRoYW4gY29waWVkLlxuICAgKi9cbiAgQXV0byA9ICdBdXRvJyxcblxuICAvKipcbiAgICogYGFscGhhL2JyYXZvL2NoYXJsaWUvPG5hbWU+Lm1kYC5cbiAgICovXG4gIEluc2lkZUZvbGRlciA9ICdJbnNpZGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgaGFzIG5vIGZvbGRlciBub3RlcyBhdCBhbGwsIHNvIGV2ZXJ5IGZvbGRlciBhbnN3ZXJzIGBudWxsYC4gVGhpcyBpcyBhbHNvIGhvdyBhIGNhbGxlciBvcHRzXG4gICAqIG91dCBvZiBmb2xkZXItbm90ZSBiZWhhdmlvciBlbnRpcmVseS5cbiAgICovXG4gIE5vbmUgPSAnTm9uZScsXG5cbiAgLyoqXG4gICAqIGBhbHBoYS9icmF2by88bmFtZT4ubWRgLCBiZXNpZGUgdGhlIGZvbGRlci5cbiAgICovXG4gIFBhcmVudEZvbGRlciA9ICdQYXJlbnRGb2xkZXInXG59XG5cbi8qKlxuICogQSBmb2xkZXItbm90ZSBzZXR1cCB3aXRoIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gYWxyZWFkeSByZXNvbHZlZCB0byBhIGNvbmNyZXRlIGFuc3dlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb2xkZXJOb3RlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBleHRlbnNpb25zIGEgZm9sZGVyIG5vdGUgbWF5IGNhcnJ5LCBXSVRIT1VUIHRoZSBsZWFkaW5nIGRvdCwgaW4gcmVzb2x1dGlvbiBvcmRlciBcdTIwMTQgdGhlIGZpcnN0IG9uZVxuICAgKiB0aGF0IG5hbWVzIGFuIGV4aXN0aW5nIGZpbGUgd2lucy5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb2xkZXIgbm90ZSBpcyBoaWRkZW4gaW4gdGhlIGZpbGUgZXhwbG9yZXIuXG4gICAqXG4gICAqIFJlYWQgcmF0aGVyIHRoYW4gYWN0ZWQgdXBvbiBoZXJlOiBpdCBjaGFuZ2VzIG5vdGhpbmcgYWJvdXQgV0hJQ0ggZmlsZSBpcyB0aGUgZm9sZGVyIG5vdGUsIGJ1dCBhIGNhbGxlclxuICAgKiB0aGF0IHJldmVhbHMgdGhlIG5vdGUgaGFzIHRvIGtub3cgdGhlcmUgaXMgbm90aGluZyB0byByZXZlYWwgYW5kIGZhbGwgYmFjayB0byByZXZlYWxpbmcgdGhlIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGlzSGlkZGVuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgbm90ZSBzaXRzIHJlbGF0aXZlIHRvIGl0cyBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlciB8IEZvbGRlck5vdGVMb2NhdGlvbi5Ob25lIHwgRm9sZGVyTm90ZUxvY2F0aW9uLlBhcmVudEZvbGRlcjtcblxuICAvKipcbiAgICogTmFtZXMgdGhlIGZvbGRlciBub3RlIG9mIGEgZm9sZGVyLCBXSVRIT1VUIGl0cyBleHRlbnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZTsgYW4gZW1wdHkgKG9yIGJsYW5rKSBuYW1lIG1lYW5zIHRoZSBmb2xkZXIgaGFzIG5vIGZvbGRlciBub3RlLlxuICAgKi9cbiAgLy8gQSBmdW5jdGlvbiBwcm9wZXJ0eSByYXRoZXIgdGhhbiBhIG1ldGhvZCwgYmVjYXVzZSBpdCBpcyBhIHN0YW5kYWxvbmUgY2FsbGJhY2ssIG5ldmVyIGEgbWV0aG9kIG9mIHRoZVxuICAvLyBjb25maWcgXHUyMDE0IHdoaWNoIGlzIGFsc28gd2hhdCBsZXRzIGl0IGJlIGRlc3RydWN0dXJlZCBhbmQgaGFuZGVkIG9uIHdpdGhvdXQgdHJpcHBpbmcgYHVuYm91bmQtbWV0aG9kYC5cbiAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpID0+IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGVDb25maWd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVGb2xkZXJOb3RlQ29uZmlnUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnksIHdpdGggb3Igd2l0aG91dCB0aGUgbGVhZGluZyBkb3QsIGluIHJlc29sdXRpb24gb3JkZXIuIElnbm9yZWRcbiAgICogdW5kZXIge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSwgd2hpY2ggdGFrZXMgdGhlIGluc3RhbGxlZCBwbHVnaW4ncyBhbnN3ZXIgd2hvbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ21kJ11gXG4gICAqL1xuICByZWFkb25seSBleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci4gSWdub3JlZCB1bmRlciB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0hpZGRlbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBub3RlIHNpdHMgcmVsYXRpdmUgdG8gaXRzIGZvbGRlci5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBGb2xkZXJOb3RlTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBmb2xkZXIgbm90ZSBvZiBhIGZvbGRlciwgV0lUSE9VVCBpdHMgZXh0ZW5zaW9uLiBJZ25vcmVkIHVuZGVyXG4gICAqIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30sIHdoaWNoIG5hbWVzIHRoZSBub3RlIHRoZSB3YXkgdGhlIGluc3RhbGxlZCBwbHVnaW4gZG9lcy5cbiAgICpcbiAgICogQSBjYWxsYmFjayByYXRoZXIgdGhhbiBhIG5hbWUgdGVtcGxhdGUsIGJlY2F1c2UgYSB0ZW1wbGF0ZSBuZWVkcyBhIHRva2VuIHZvY2FidWxhcnkgYW5kIHRoaXMgbGlicmFyeVxuICAgKiBoYXMgbm9uZSB0byBpbXBvc2UgXHUyMDE0IGEgY2FsbGVyIHRoYXQgaGFzIG9uZSAoYHt7Zm9sZGVyTmFtZX19YCwgYHt7Zm9sZGVyUGF0aH19YCwgXHUyMDI2KSByZW5kZXJzIGl0IGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZS5cbiAgICogQGRlZmF1bHQgYChmb2xkZXIpID0+IGZvbGRlci5uYW1lYFxuICAgKi9cbiAgLy8gU2VlIHtAbGluayBGb2xkZXJOb3RlQ29uZmlnLnJlc29sdmVOYW1lfSBmb3Igd2h5IHRoaXMgaXMgYSBmdW5jdGlvbiBwcm9wZXJ0eS5cbiAgcmVhZG9ubHkgcmVzb2x2ZU5hbWU/OiAoZm9sZGVyOiBURm9sZGVyKSA9PiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVGb2xkZXJOb3RlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlRm9sZGVyTm90ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBhbHJlYWR5LXJlc29sdmVkIHNldHVwIHRvIHVzZS5cbiAgICpcbiAgICogT21pdHRlZCBtZWFucyB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IFx1MjAxNCB0aGUgc2V0dXAgaXMgcmVzb2x2ZWQgb24gdGhlIHNwb3QsIHdoaWNoIGlzIHdoYXQgbWFrZXNcbiAgICogYHJlc29sdmVGb2xkZXJOb3RlKHsgYXBwLCBmb2xkZXIgfSlgIHRoZSBvbmUtbGluZXIgZXZlcnkgY2FsbGVyIHdhbnRzLiBQYXNzIG9uZSB3aGVuIHRoZSBzYW1lIHNldHVwIGlzXG4gICAqIHVzZWQgbW9yZSB0aGFuIG9uY2UsIG9yIHdoZW4gaXRzIHtAbGluayBGb2xkZXJOb3RlQ29uZmlnLmlzSGlkZGVufSBpcyBuZWVkZWQgYWxvbmdzaWRlIHRoZSBub3RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSlgXG4gICAqL1xuICByZWFkb25seSBjb25maWc/OiBGb2xkZXJOb3RlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIGZvbGRlciBub3RlIGlzIHdhbnRlZC4gUmVhZCBBRlRFUiBhbnkgcmVuYW1lOiB0aGUgbm90ZSBpcyBuYW1lZCBmcm9tIHRoZSBmb2xkZXInc1xuICAgKiBDVVJSRU5UIG5hbWUsIGFuZCBhIGBmb2xkZXItbm90ZXNgIGluc3RhbGwgd2l0aCBgc3luY0ZvbGRlck5hbWVgIG9uIHdpbGwgaGF2ZSByZW5hbWVkIGl0IGFscmVhZHkuXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI6IFRGb2xkZXI7XG59XG5cbi8qKlxuICogVGhlIGBmb2xkZXItbm90ZXNgIHBsdWdpbidzIGlkLCBhcyBpdHMgbWFuaWZlc3QgZGVjbGFyZXMgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBGT0xERVJfTk9URVNfUExVR0lOX0lEID0gJ2ZvbGRlci1ub3Rlcyc7XG5cbi8qKlxuICogVGhlIG9uZSB0b2tlbiBgZm9sZGVyLW5vdGVzYCcgb3duIG5hbWUgdGVtcGxhdGUgdW5kZXJzdGFuZHMuIEV2ZXJ5IG90aGVyIGNoYXJhY3RlciBpbiB0aGF0IHRlbXBsYXRlIGlzXG4gKiBhIGxpdGVyYWwsIHNvIHRyYW5zbGF0aW5nIHRoaXMgdG9rZW4gaXMgdGhlIHdob2xlIG9mIHRoZSB0cmFuc2xhdGlvbi5cbiAqL1xuY29uc3QgRk9MREVSX05PVEVTX0ZPTERFUl9OQU1FX1RPS0VOX1JFR19FWFAgPSAvXFx7XFx7Zm9sZGVyX25hbWVcXH1cXH0vZ2k7XG5cbi8qKlxuICogYGZvbGRlci1ub3Rlc2Agb2ZmZXJzIGBFeGNhbGlkcmF3YCBmb2xkZXIgbm90ZXMsIHdoaWNoIGFyZSBNYXJrZG93biBmaWxlcyB3aXRoIGFuIGBFeGNhbGlkcmF3YCBwYXlsb2FkIFx1MjAxNCBpdHNcbiAqIG93biByZXNvbHZlciBub3JtYWxpemVzIHRoZSB0eXBlIHRoZSBzYW1lIHdheSBiZWZvcmUgbG9va2luZyB0aGUgZmlsZSB1cC5cbiAqL1xuY29uc3QgRVhDQUxJRFJBV19GSUxFX0VYVEVOU0lPTiA9ICdleGNhbGlkcmF3JztcblxuLyoqXG4gKiBXaGF0IHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gZmFsbHMgYmFjayB0bzogdGhlIGxheW91dCBldmVyeSBmb2xkZXItbm90ZSBwbHVnaW4gc3VwcG9ydHMsIGFuZFxuICogdGhlIG9uZSBgZm9sZGVyLW5vdGVzYCBpdHNlbGYgc2hpcHMgYXMgaXRzIGRlZmF1bHQuIE5vdGhpbmcgaGlkZXMgYSBub3RlIHdoZW4gbm8gcGx1Z2luIGlzIHRoZXJlIHRvIGhpZGVcbiAqIGl0LCBzbyB7QGxpbmsgRm9sZGVyTm90ZUNvbmZpZy5pc0hpZGRlbn0gaXMgYGZhbHNlYC5cbiAqL1xuY29uc3QgRkFMTEJBQ0tfRk9MREVSX05PVEVfQ09ORklHOiBGb2xkZXJOb3RlQ29uZmlnID0ge1xuICBleHRlbnNpb25zOiBbTUFSS0RPV05fRklMRV9FWFRFTlNJT05dLFxuICBpc0hpZGRlbjogZmFsc2UsXG4gIGxvY2F0aW9uOiBGb2xkZXJOb3RlTG9jYXRpb24uSW5zaWRlRm9sZGVyLFxuICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcik6IHN0cmluZyA9PiBmb2xkZXIubmFtZVxufTtcblxuLyoqXG4gKiBGaW5kcyBhIGZvbGRlcidzIGZvbGRlciBub3RlIFx1MjAxNCB0aGUgb25lIG5vdGUgd2hvc2UgcHJvcGVydGllcyBkZXNjcmliZSB0aGUgZm9sZGVyIGl0c2VsZi5cbiAqXG4gKiAqKk5ldmVyIGNyZWF0ZXMuKiogQSBmb2xkZXIgdGhhdCBoYXMgbm8gZm9sZGVyIG5vdGUgYW5zd2VycyBgbnVsbGAsIGFuZCBzbyBkb2VzIHRoZSB2YXVsdCByb290IHVuZGVyXG4gKiB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLlBhcmVudEZvbGRlcn0gKG5vdGhpbmcgY2FuIHNpdCBiZXNpZGUgaXQpLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZm9sZGVyLCBhbmQgb3B0aW9uYWxseSB0aGUgc2V0dXAgdG8gcmVzb2x2ZSBpdCB3aXRoLlxuICogQHJldHVybnMgVGhlIGZvbGRlciBub3RlLCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZvbGRlck5vdGUocGFyYW1zOiBSZXNvbHZlRm9sZGVyTm90ZVBhcmFtcyk6IG51bGwgfCBURmlsZSB7XG4gIGNvbnN0IHsgYXBwLCBmb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgY29uZmlnID0gcGFyYW1zLmNvbmZpZyA/PyByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZyh7IGFwcCB9KTtcbiAgaWYgKGNvbmZpZy5sb2NhdGlvbiA9PT0gRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudEZvbGRlclBhdGggPSBjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXIgPyBmb2xkZXIucGFyZW50Py5wYXRoIDogZm9sZGVyLnBhdGg7XG4gIGlmIChwYXJlbnRGb2xkZXJQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vdGVOYW1lID0gY29uZmlnLnJlc29sdmVOYW1lKGZvbGRlcikudHJpbSgpO1xuICBpZiAoIW5vdGVOYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBjb25maWcuZXh0ZW5zaW9ucykge1xuICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChub3JtYWxpemVQYXRoKGpvaW4ocGFyZW50Rm9sZGVyUGF0aCwgYCR7bm90ZU5hbWV9LiR7ZXh0ZW5zaW9ufWApKSk7XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gaW50byBhIGNvbmNyZXRlIGZvbGRlci1ub3RlIHNldHVwLlxuICpcbiAqIGBmb2xkZXItbm90ZXNgJyBgdmF1bHRGb2xkZXJgIHN0b3JhZ2UgKGV2ZXJ5IGZvbGRlciBub3RlIHBvb2xlZCBpbiBvbmUgY2VudHJhbCBmb2xkZXIpIGhhcyBub1xuICogY291bnRlcnBhcnQgaGVyZSBhbmQgZmFsbHMgYmFjayByYXRoZXIgdGhhbiBndWVzc2luZzogd2l0aCB0aGUgbm90ZXMgcG9vbGVkLCB0aGUgbm90ZSBiZWxvbmdpbmcgdG8gYVxuICogZm9sZGVyIGlzIG5vIGxvbmdlciBkZXJpdmFibGUgZnJvbSB0aGF0IGZvbGRlcidzIHBhdGggYWxvbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzZXR1cCwgYW5kIHRoZSBhcHAgdG8gcmVhZCB0aGUgaW5zdGFsbGVkIHBsdWdpbiBmcm9tLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHNldHVwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZvbGRlck5vdGVDb25maWcocGFyYW1zOiBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcyk6IEZvbGRlck5vdGVDb25maWcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGV4dGVuc2lvbnMsXG4gICAgaXNIaWRkZW4sXG4gICAgbG9jYXRpb24sXG4gICAgcmVzb2x2ZU5hbWVcbiAgfSA9IHBhcmFtcztcblxuICByZXR1cm4gbG9jYXRpb24gIT09IHVuZGVmaW5lZCAmJiBsb2NhdGlvbiAhPT0gRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG9cbiAgICA/IHtcbiAgICAgIGV4dGVuc2lvbnM6IG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9ucyA/PyBbTUFSS0RPV05fRklMRV9FWFRFTlNJT05dKSxcbiAgICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA/PyBmYWxzZSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVzb2x2ZU5hbWU6IHJlc29sdmVOYW1lID8/IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRy5yZXNvbHZlTmFtZVxuICAgIH1cbiAgICA6IHJlYWRGb2xkZXJOb3Rlc1BsdWdpbkNvbmZpZyhhcHApID8/IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGV4dGVuc2lvbnMgdGhlIHdheSBgZm9sZGVyLW5vdGVzYCBkb2VzIGJlZm9yZSBpdCBsb29rcyBhIGZpbGUgdXA6IG5vIGxlYWRpbmcgZG90LCBsb3dlci1jYXNlLFxuICogYEV4Y2FsaWRyYXdgIHRyZWF0ZWQgYXMgTWFya2Rvd24sIGJsYW5rcyBkcm9wcGVkLCBkdXBsaWNhdGVzIGNvbGxhcHNlZCB3aGlsZSBrZWVwaW5nIHRoZSBmaXJzdCBvY2N1cnJlbmNlJ3NcbiAqIHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb25zIC0gVGhlIGV4dGVuc2lvbnMgYXMgY29uZmlndXJlZC5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIGV4dGVuc2lvbnMsIGluIHJlc29sdXRpb24gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9uczogcmVhZG9ubHkgc3RyaW5nW10pOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFeHRlbnNpb25zID0gZXh0ZW5zaW9uc1xuICAgIC5tYXAoKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15cXC4vLCAnJykpXG4gICAgLm1hcCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24gPT09IEVYQ0FMSURSQVdfRklMRV9FWFRFTlNJT04gPyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiA6IGV4dGVuc2lvbilcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gWy4uLm5ldyBTZXQobm9ybWFsaXplZEV4dGVuc2lvbnMpXTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgaW5zdGFsbGVkIGBmb2xkZXItbm90ZXNgIHBsdWdpbidzIG93biBjb25maWd1cmF0aW9uLCBpZiBpdCBpcyBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQgdGhlIHdheVxuICogaXQgZG9jdW1lbnRzLlxuICpcbiAqIEV2ZXJ5IHZhbHVlIGlzIHJlYWQgYXMgYHVua25vd25gIGFuZCBjaGVja2VkLCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoaXMgaXMgYW5vdGhlclxuICogcGx1Z2luJ3MgcHJpdmF0ZSBzZXR0aW5ncyBvYmplY3QsIHNvIGEgdmVyc2lvbiB0aGF0IHJlbmFtZXMgb3IgZHJvcHMgYSBrZXkgbXVzdCBkZWdyYWRlIHRvIHRoZSBmYWxsYmFja1xuICogaW5zdGVhZCBvZiB0aHJvd2luZyBpbnNpZGUgYSBjbGljayBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiwgb3IgYG51bGxgIHdoZW4gdGhlIHBsdWdpbiBpcyBhYnNlbnQsIG5vdCBjb25maWd1cmVkLCBvciBzZXQgdG8gYSBzdG9yYWdlXG4gKiBsb2NhdGlvbiB3aXRoIG5vIGNvdW50ZXJwYXJ0IGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHJlYWRGb2xkZXJOb3Rlc1BsdWdpbkNvbmZpZyhhcHA6IEFwcCk6IEZvbGRlck5vdGVDb25maWcgfCBudWxsIHtcbiAgY29uc3QgZm9sZGVyTm90ZXNQbHVnaW4gPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4oRk9MREVSX05PVEVTX1BMVUdJTl9JRCk7XG4gIC8vIE5hcnJvd2VkIHdpdGggYGluYCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoYXQga2VlcHMgZXZlcnkgdmFsdWUgYmVsb3cgdHlwZWQgYHVua25vd25gLFxuICAvLyB3aGljaCBpcyBleGFjdGx5IHdoYXQgYSBmb3JlaWduIHBsdWdpbidzIHByaXZhdGUgc2V0dGluZ3MgYXJlLlxuICBpZiAoIWZvbGRlck5vdGVzUGx1Z2luIHx8ICEoJ3NldHRpbmdzJyBpbiBmb2xkZXJOb3Rlc1BsdWdpbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVzU2V0dGluZ3M6IHVua25vd24gPSBmb2xkZXJOb3Rlc1BsdWdpbi5zZXR0aW5ncztcbiAgaWYgKHR5cGVvZiBmb2xkZXJOb3Rlc1NldHRpbmdzICE9PSAnb2JqZWN0JyB8fCBmb2xkZXJOb3Rlc1NldHRpbmdzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsb2NhdGlvbiA9IHRvRm9sZGVyTm90ZUxvY2F0aW9uKCdzdG9yYWdlTG9jYXRpb24nIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN0b3JhZ2VMb2NhdGlvbiA6IG51bGwpO1xuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3RlTmFtZSA9ICdmb2xkZXJOb3RlTmFtZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuZm9sZGVyTm90ZU5hbWUgOiBudWxsO1xuICBpZiAodHlwZW9mIGZvbGRlck5vdGVOYW1lICE9PSAnc3RyaW5nJyB8fCAhZm9sZGVyTm90ZU5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVUeXBlID0gJ2ZvbGRlck5vdGVUeXBlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5mb2xkZXJOb3RlVHlwZSA6IG51bGw7XG4gIGNvbnN0IHN1cHBvcnRlZEZpbGVUeXBlcyA9ICdzdXBwb3J0ZWRGaWxlVHlwZXMnIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN1cHBvcnRlZEZpbGVUeXBlcyA6IG51bGw7XG4gIGNvbnN0IGlzSGlkZGVuID0gJ2hpZGVGb2xkZXJOb3RlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5oaWRlRm9sZGVyTm90ZSA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBJdHMgb3duIHJlc29sdmVyIHRyaWVzIHRoZSBwcmltYXJ5IHR5cGUgZmlyc3QgYW5kIGV2ZXJ5IG90aGVyIHN1cHBvcnRlZCB0eXBlIGFmdGVyIGl0LCB3aGljaCBpcyB0aGVcbiAgICAvLyBvcmRlciByZXByb2R1Y2VkIGhlcmUuIEFuIHVudXNhYmxlIHBhaXIgbGVhdmVzIE1hcmtkb3duLCB0aGUgZXh0ZW5zaW9uIGl0IGNhbm5vdCBiZSBjb25maWd1cmVkXG4gICAgLy8gd2l0aG91dC5cbiAgICBleHRlbnNpb25zOiBub3JtYWxpemVFeHRlbnNpb25zKFtcbiAgICAgIHR5cGVvZiBmb2xkZXJOb3RlVHlwZSA9PT0gJ3N0cmluZycgPyBmb2xkZXJOb3RlVHlwZSA6IE1BUktET1dOX0ZJTEVfRVhURU5TSU9OLFxuICAgICAgLi4uKEFycmF5LmlzQXJyYXkoc3VwcG9ydGVkRmlsZVR5cGVzKSA/IHN1cHBvcnRlZEZpbGVUeXBlcy5maWx0ZXIoKHR5cGU6IHVua25vd24pID0+IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykgOiBbXSksXG4gICAgICBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTlxuICAgIF0pLFxuICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA9PT0gdHJ1ZSxcbiAgICBsb2NhdGlvbixcbiAgICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcik6IHN0cmluZyA9PlxuICAgICAgcmVwbGFjZUFsbCh7XG4gICAgICAgICRzdHJpbmc6IGZvbGRlck5vdGVOYW1lLFxuICAgICAgICAvLyBBIGZ1bmN0aW9uIHJlcGxhY2VyLCBzbyBhIGZvbGRlciBuYW1lIGNvbnRhaW5pbmcgYCQmYCBpcyBpbnNlcnRlZCBsaXRlcmFsbHkuXG4gICAgICAgIHJlcGxhY2VyOiAoKSA9PiBmb2xkZXIubmFtZSxcbiAgICAgICAgc2VhcmNoVmFsdWU6IEZPTERFUl9OT1RFU19GT0xERVJfTkFNRV9UT0tFTl9SRUdfRVhQXG4gICAgICB9KVxuICB9O1xufVxuXG4vKipcbiAqIE1hcHMgYGZvbGRlci1ub3Rlc2AnIGBzdG9yYWdlTG9jYXRpb25gIG9udG8gdGhpcyBsaWJyYXJ5J3Mgb3duIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBzdG9yYWdlTG9jYXRpb24gLSBUaGUgdmFsdWUgcmVhZCBvdXQgb2YgdGhhdCBwbHVnaW4ncyBzZXR0aW5ncy5cbiAqIEByZXR1cm5zIFRoZSBsb2NhdGlvbiwgb3IgYG51bGxgIGZvciBgdmF1bHRGb2xkZXJgIGFuZCBmb3IgYW55dGhpbmcgdGhhdCBpcyBub3Qgb25lIG9mIGl0cyB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHRvRm9sZGVyTm90ZUxvY2F0aW9uKHN0b3JhZ2VMb2NhdGlvbjogdW5rbm93bik6IEZvbGRlck5vdGVDb25maWdbJ2xvY2F0aW9uJ10gfCBudWxsIHtcbiAgc3dpdGNoIChzdG9yYWdlTG9jYXRpb24pIHtcbiAgICBjYXNlICdpbnNpZGVGb2xkZXInOiB7XG4gICAgICByZXR1cm4gRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcjtcbiAgICB9XG4gICAgY2FzZSAncGFyZW50Rm9sZGVyJzoge1xuICAgICAgcmV0dXJuIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXI7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXlCQSxrQkFBcUI7QUFDckIsb0JBQTJCO0FBQzNCLHNCQUE4QjtBQUU5Qix5QkFBd0M7QUFXakMsSUFBSyxxQkFBTCxrQkFBS0Esd0JBQUw7QUFLTCxFQUFBQSxvQkFBQSxVQUFPO0FBS1AsRUFBQUEsb0JBQUEsa0JBQWU7QUFNZixFQUFBQSxvQkFBQSxV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
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb2xkZXItbm90ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGZvbGRlci1ub3RlIGNvbmNlcHQ6IHdoaWNoIG5vdGUsIGlmIGFueSwgaXMgdGhlIG9uZSB3aG9zZSBwcm9wZXJ0aWVzIGRlc2NyaWJlIGEgRk9MREVSIGl0c2VsZi5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gc3VjaCBjb25jZXB0IOKAlCBpdCBpcyBhIGNvbnZlbnRpb24gdGhlIGNvbW11bml0eSBzZXR0bGVkIG9uLCBhbmQgdGhlIHBsdWdpbiB0aGF0IG93bnMgaXRcbiAqIGZvciBtb3N0IHZhdWx0cyBpcyBbYGZvbGRlci1ub3Rlc2BdKGh0dHBzOi8vY29tbXVuaXR5Lm9ic2lkaWFuLm1kL3BsdWdpbnMvZm9sZGVyLW5vdGVzKS4gU28gdGhlIGFuc3dlciB0b1xuICogXCJ3aGljaCBub3RlIGJlbG9uZ3MgdG8gdGhpcyBmb2xkZXJcIiBpcyB0aGF0IHBsdWdpbidzIHRvIGdpdmUgd2hlbmV2ZXIgaXQgaXMgaW5zdGFsbGVkLCBhbmQgdGhpcyBtb2R1bGVcbiAqIGFza3MgaXQgcmF0aGVyIHRoYW4gaW52ZW50aW5nIGEgc2Vjb25kIGFuc3dlcjoge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSDigJQgdGhlIGRlZmF1bHQg4oCUIHJlYWRzIGl0c1xuICogbGl2ZSBjb25maWd1cmF0aW9uIGF0IGV2ZXJ5IHVzZS5cbiAqXG4gKiBSZWFkaW5nIGl0IGxpdmUgcmF0aGVyIHRoYW4gY29weWluZyBpdHMgdmFsdWVzIGludG8gYSBjb25zdW1lcidzIG93biBzZXR0aW5ncyBpcyBkZWxpYmVyYXRlOiBhIGNvcHkgZ29lc1xuICogc3RhbGUgdGhlIG1vbWVudCB0aGF0IHBsdWdpbiBpcyByZWNvbmZpZ3VyZWQsIGFuZCBpdCB3b3VsZCBuZWVkIGEgc2V0dGluZ3MgbWlncmF0aW9uIHRvIHNlZWQuIEV2ZXJ5dGhpbmdcbiAqIGVsc2UgaXMgdGhlIGNhbGxlcidzIGV4cGxpY2l0IGNob2ljZSwgYW5kIHRoZW4gdGhlIG90aGVyIHBsdWdpbiBpcyBub3QgY29uc3VsdGVkIGF0IGFsbC5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgZXZlciBDUkVBVEVTIGEgbm90ZS4gQSBmb2xkZXIgd2l0aCBubyBmb2xkZXIgbm90ZSBhbnN3ZXJzIGBudWxsYCwgd2hpY2ggaXMgd2hhdCBsZXRzIGFcbiAqIGNhbGxlciBsYXllciBmb2xkZXItbm90ZSBiZWhhdmlvciBvbnRvIGEgY2xpY2sgd2l0aG91dCByaXNraW5nIGEgZmlsZSBhcHBlYXJpbmcgb24gdGhlIHVzZXIncyBkaXNrLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBURmlsZSxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGpvaW4gfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlQWxsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQgeyBub3JtYWxpemVQYXRoIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG4vKipcbiAqIFdoZXJlIGEgZm9sZGVyJ3MgZm9sZGVyIG5vdGUgbGl2ZXMuXG4gKlxuICogVGhlIHRocmVlIGNvbmNyZXRlIG1lbWJlcnMgYXJlIHRoZSBzaGFwZXMgdGhlIGZvbGRlci1ub3RlIGVjb3N5c3RlbSBhY3R1YWxseSB1c2VzOlxuICogYGNoYXJsaWUvY2hhcmxpZS5tZGAgYW5kIGBjaGFybGllL2luZGV4Lm1kYCBhcmUgYm90aCB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcn0gKHRoZXlcbiAqIGRpZmZlciBvbmx5IGluIHRoZSBOQU1FLCB3aGljaCBpcyB3aHkgbmFtaW5nIGlzIGEgY2FsbGJhY2sgYW5kIG5vdCBhIGZvdXJ0aCBtZW1iZXIpLCB3aGlsZVxuICogYGNoYXJsaWUubWRgIGJlc2lkZSB0aGUgZm9sZGVyIGlzIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uUGFyZW50Rm9sZGVyfSDigJQgd2hvc2Ugd2hvbGUgcG9pbnQgaXMgdGhhdFxuICogYFtbYWxwaGEvYnJhdm8vY2hhcmxpZV1dYCBsaW5rcyB0byBhIGZvbGRlciB3aXRoIG5vIHNwZWNpYWwgc3ludGF4LlxuICovXG5leHBvcnQgZW51bSBGb2xkZXJOb3RlTG9jYXRpb24ge1xuICAvKipcbiAgICogVGFrZSB0aGUgYW5zd2VyIGZyb20gdGhlIGluc3RhbGxlZCBgZm9sZGVyLW5vdGVzYCBwbHVnaW4sIGZhbGxpbmcgYmFjayB0byBhIG5vdGUgbmFtZWQgYWZ0ZXIgaXRzXG4gICAqIGZvbGRlciwgaW5zaWRlIGl0LiBUaGUgZGVmYXVsdCwgYW5kIHJlc29sdmVkIExJVkUgcmF0aGVyIHRoYW4gY29waWVkLlxuICAgKi9cbiAgQXV0byA9ICdBdXRvJyxcblxuICAvKipcbiAgICogYGFscGhhL2JyYXZvL2NoYXJsaWUvPG5hbWU+Lm1kYC5cbiAgICovXG4gIEluc2lkZUZvbGRlciA9ICdJbnNpZGVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQgaGFzIG5vIGZvbGRlciBub3RlcyBhdCBhbGwsIHNvIGV2ZXJ5IGZvbGRlciBhbnN3ZXJzIGBudWxsYC4gVGhpcyBpcyBhbHNvIGhvdyBhIGNhbGxlciBvcHRzXG4gICAqIG91dCBvZiBmb2xkZXItbm90ZSBiZWhhdmlvciBlbnRpcmVseS5cbiAgICovXG4gIE5vbmUgPSAnTm9uZScsXG5cbiAgLyoqXG4gICAqIGBhbHBoYS9icmF2by88bmFtZT4ubWRgLCBiZXNpZGUgdGhlIGZvbGRlci5cbiAgICovXG4gIFBhcmVudEZvbGRlciA9ICdQYXJlbnRGb2xkZXInXG59XG5cbi8qKlxuICogQSBmb2xkZXItbm90ZSBzZXR1cCB3aXRoIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gYWxyZWFkeSByZXNvbHZlZCB0byBhIGNvbmNyZXRlIGFuc3dlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb2xkZXJOb3RlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBleHRlbnNpb25zIGEgZm9sZGVyIG5vdGUgbWF5IGNhcnJ5LCBXSVRIT1VUIHRoZSBsZWFkaW5nIGRvdCwgaW4gcmVzb2x1dGlvbiBvcmRlciDigJQgdGhlIGZpcnN0IG9uZVxuICAgKiB0aGF0IG5hbWVzIGFuIGV4aXN0aW5nIGZpbGUgd2lucy5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuc2lvbnM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBmb2xkZXIgbm90ZSBpcyBoaWRkZW4gaW4gdGhlIGZpbGUgZXhwbG9yZXIuXG4gICAqXG4gICAqIFJlYWQgcmF0aGVyIHRoYW4gYWN0ZWQgdXBvbiBoZXJlOiBpdCBjaGFuZ2VzIG5vdGhpbmcgYWJvdXQgV0hJQ0ggZmlsZSBpcyB0aGUgZm9sZGVyIG5vdGUsIGJ1dCBhIGNhbGxlclxuICAgKiB0aGF0IHJldmVhbHMgdGhlIG5vdGUgaGFzIHRvIGtub3cgdGhlcmUgaXMgbm90aGluZyB0byByZXZlYWwgYW5kIGZhbGwgYmFjayB0byByZXZlYWxpbmcgdGhlIGZvbGRlci5cbiAgICovXG4gIHJlYWRvbmx5IGlzSGlkZGVuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgbm90ZSBzaXRzIHJlbGF0aXZlIHRvIGl0cyBmb2xkZXIuXG4gICAqL1xuICByZWFkb25seSBsb2NhdGlvbjogRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlciB8IEZvbGRlck5vdGVMb2NhdGlvbi5Ob25lIHwgRm9sZGVyTm90ZUxvY2F0aW9uLlBhcmVudEZvbGRlcjtcblxuICAvKipcbiAgICogTmFtZXMgdGhlIGZvbGRlciBub3RlIG9mIGEgZm9sZGVyLCBXSVRIT1VUIGl0cyBleHRlbnNpb24uXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZTsgYW4gZW1wdHkgKG9yIGJsYW5rKSBuYW1lIG1lYW5zIHRoZSBmb2xkZXIgaGFzIG5vIGZvbGRlciBub3RlLlxuICAgKi9cbiAgLy8gQSBmdW5jdGlvbiBwcm9wZXJ0eSByYXRoZXIgdGhhbiBhIG1ldGhvZCwgYmVjYXVzZSBpdCBpcyBhIHN0YW5kYWxvbmUgY2FsbGJhY2ssIG5ldmVyIGEgbWV0aG9kIG9mIHRoZVxuICAvLyBjb25maWcg4oCUIHdoaWNoIGlzIGFsc28gd2hhdCBsZXRzIGl0IGJlIGRlc3RydWN0dXJlZCBhbmQgaGFuZGVkIG9uIHdpdGhvdXQgdHJpcHBpbmcgYHVuYm91bmQtbWV0aG9kYC5cbiAgcmVzb2x2ZU5hbWU6IChmb2xkZXI6IFRGb2xkZXIpID0+IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUZvbGRlck5vdGVDb25maWd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVGb2xkZXJOb3RlQ29uZmlnUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGV4dGVuc2lvbnMgYSBmb2xkZXIgbm90ZSBtYXkgY2FycnksIHdpdGggb3Igd2l0aG91dCB0aGUgbGVhZGluZyBkb3QsIGluIHJlc29sdXRpb24gb3JkZXIuIElnbm9yZWRcbiAgICogdW5kZXIge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfSwgd2hpY2ggdGFrZXMgdGhlIGluc3RhbGxlZCBwbHVnaW4ncyBhbnN3ZXIgd2hvbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbJ21kJ11gXG4gICAqL1xuICByZWFkb25seSBleHRlbnNpb25zPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvbGRlciBub3RlIGlzIGhpZGRlbiBpbiB0aGUgZmlsZSBleHBsb3Jlci4gSWdub3JlZCB1bmRlciB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBpc0hpZGRlbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBub3RlIHNpdHMgcmVsYXRpdmUgdG8gaXRzIGZvbGRlci5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIEZvbGRlck5vdGVMb2NhdGlvbi5BdXRvfVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYXRpb24/OiBGb2xkZXJOb3RlTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWVzIHRoZSBmb2xkZXIgbm90ZSBvZiBhIGZvbGRlciwgV0lUSE9VVCBpdHMgZXh0ZW5zaW9uLiBJZ25vcmVkIHVuZGVyXG4gICAqIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30sIHdoaWNoIG5hbWVzIHRoZSBub3RlIHRoZSB3YXkgdGhlIGluc3RhbGxlZCBwbHVnaW4gZG9lcy5cbiAgICpcbiAgICogQSBjYWxsYmFjayByYXRoZXIgdGhhbiBhIG5hbWUgdGVtcGxhdGUsIGJlY2F1c2UgYSB0ZW1wbGF0ZSBuZWVkcyBhIHRva2VuIHZvY2FidWxhcnkgYW5kIHRoaXMgbGlicmFyeVxuICAgKiBoYXMgbm9uZSB0byBpbXBvc2Ug4oCUIGEgY2FsbGVyIHRoYXQgaGFzIG9uZSAoYHt7Zm9sZGVyTmFtZX19YCwgYHt7Zm9sZGVyUGF0aH19YCwg4oCmKSByZW5kZXJzIGl0IGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSBmb2xkZXIgLSBUaGUgZm9sZGVyIHdob3NlIG5vdGUgaXMgYmVpbmcgbmFtZWQuXG4gICAqIEByZXR1cm5zIFRoZSBub3RlJ3MgbmFtZS5cbiAgICogQGRlZmF1bHQgYChmb2xkZXIpID0+IGZvbGRlci5uYW1lYFxuICAgKi9cbiAgLy8gU2VlIHtAbGluayBGb2xkZXJOb3RlQ29uZmlnLnJlc29sdmVOYW1lfSBmb3Igd2h5IHRoaXMgaXMgYSBmdW5jdGlvbiBwcm9wZXJ0eS5cbiAgcmVhZG9ubHkgcmVzb2x2ZU5hbWU/OiAoZm9sZGVyOiBURm9sZGVyKSA9PiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVGb2xkZXJOb3RlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlRm9sZGVyTm90ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBhbHJlYWR5LXJlc29sdmVkIHNldHVwIHRvIHVzZS5cbiAgICpcbiAgICogT21pdHRlZCBtZWFucyB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG99IOKAlCB0aGUgc2V0dXAgaXMgcmVzb2x2ZWQgb24gdGhlIHNwb3QsIHdoaWNoIGlzIHdoYXQgbWFrZXNcbiAgICogYHJlc29sdmVGb2xkZXJOb3RlKHsgYXBwLCBmb2xkZXIgfSlgIHRoZSBvbmUtbGluZXIgZXZlcnkgY2FsbGVyIHdhbnRzLiBQYXNzIG9uZSB3aGVuIHRoZSBzYW1lIHNldHVwIGlzXG4gICAqIHVzZWQgbW9yZSB0aGFuIG9uY2UsIG9yIHdoZW4gaXRzIHtAbGluayBGb2xkZXJOb3RlQ29uZmlnLmlzSGlkZGVufSBpcyBuZWVkZWQgYWxvbmdzaWRlIHRoZSBub3RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgcmVzb2x2ZUZvbGRlck5vdGVDb25maWcoeyBhcHAgfSlgXG4gICAqL1xuICByZWFkb25seSBjb25maWc/OiBGb2xkZXJOb3RlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyIHdob3NlIGZvbGRlciBub3RlIGlzIHdhbnRlZC4gUmVhZCBBRlRFUiBhbnkgcmVuYW1lOiB0aGUgbm90ZSBpcyBuYW1lZCBmcm9tIHRoZSBmb2xkZXInc1xuICAgKiBDVVJSRU5UIG5hbWUsIGFuZCBhIGBmb2xkZXItbm90ZXNgIGluc3RhbGwgd2l0aCBgc3luY0ZvbGRlck5hbWVgIG9uIHdpbGwgaGF2ZSByZW5hbWVkIGl0IGFscmVhZHkuXG4gICAqL1xuICByZWFkb25seSBmb2xkZXI6IFRGb2xkZXI7XG59XG5cbi8qKlxuICogVGhlIGBmb2xkZXItbm90ZXNgIHBsdWdpbidzIGlkLCBhcyBpdHMgbWFuaWZlc3QgZGVjbGFyZXMgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBGT0xERVJfTk9URVNfUExVR0lOX0lEID0gJ2ZvbGRlci1ub3Rlcyc7XG5cbi8qKlxuICogVGhlIG9uZSB0b2tlbiBgZm9sZGVyLW5vdGVzYCcgb3duIG5hbWUgdGVtcGxhdGUgdW5kZXJzdGFuZHMuIEV2ZXJ5IG90aGVyIGNoYXJhY3RlciBpbiB0aGF0IHRlbXBsYXRlIGlzXG4gKiBhIGxpdGVyYWwsIHNvIHRyYW5zbGF0aW5nIHRoaXMgdG9rZW4gaXMgdGhlIHdob2xlIG9mIHRoZSB0cmFuc2xhdGlvbi5cbiAqL1xuY29uc3QgRk9MREVSX05PVEVTX0ZPTERFUl9OQU1FX1RPS0VOX1JFR19FWFAgPSAvXFx7XFx7Zm9sZGVyX25hbWVcXH1cXH0vZ2k7XG5cbi8qKlxuICogYGZvbGRlci1ub3Rlc2Agb2ZmZXJzIGBFeGNhbGlkcmF3YCBmb2xkZXIgbm90ZXMsIHdoaWNoIGFyZSBNYXJrZG93biBmaWxlcyB3aXRoIGFuIGBFeGNhbGlkcmF3YCBwYXlsb2FkIOKAlCBpdHNcbiAqIG93biByZXNvbHZlciBub3JtYWxpemVzIHRoZSB0eXBlIHRoZSBzYW1lIHdheSBiZWZvcmUgbG9va2luZyB0aGUgZmlsZSB1cC5cbiAqL1xuY29uc3QgRVhDQUxJRFJBV19GSUxFX0VYVEVOU0lPTiA9ICdleGNhbGlkcmF3JztcblxuLyoqXG4gKiBXaGF0IHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gZmFsbHMgYmFjayB0bzogdGhlIGxheW91dCBldmVyeSBmb2xkZXItbm90ZSBwbHVnaW4gc3VwcG9ydHMsIGFuZFxuICogdGhlIG9uZSBgZm9sZGVyLW5vdGVzYCBpdHNlbGYgc2hpcHMgYXMgaXRzIGRlZmF1bHQuIE5vdGhpbmcgaGlkZXMgYSBub3RlIHdoZW4gbm8gcGx1Z2luIGlzIHRoZXJlIHRvIGhpZGVcbiAqIGl0LCBzbyB7QGxpbmsgRm9sZGVyTm90ZUNvbmZpZy5pc0hpZGRlbn0gaXMgYGZhbHNlYC5cbiAqL1xuY29uc3QgRkFMTEJBQ0tfRk9MREVSX05PVEVfQ09ORklHOiBGb2xkZXJOb3RlQ29uZmlnID0ge1xuICBleHRlbnNpb25zOiBbTUFSS0RPV05fRklMRV9FWFRFTlNJT05dLFxuICBpc0hpZGRlbjogZmFsc2UsXG4gIGxvY2F0aW9uOiBGb2xkZXJOb3RlTG9jYXRpb24uSW5zaWRlRm9sZGVyLFxuICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcik6IHN0cmluZyA9PiBmb2xkZXIubmFtZVxufTtcblxuLyoqXG4gKiBGaW5kcyBhIGZvbGRlcidzIGZvbGRlciBub3RlIOKAlCB0aGUgb25lIG5vdGUgd2hvc2UgcHJvcGVydGllcyBkZXNjcmliZSB0aGUgZm9sZGVyIGl0c2VsZi5cbiAqXG4gKiAqKk5ldmVyIGNyZWF0ZXMuKiogQSBmb2xkZXIgdGhhdCBoYXMgbm8gZm9sZGVyIG5vdGUgYW5zd2VycyBgbnVsbGAsIGFuZCBzbyBkb2VzIHRoZSB2YXVsdCByb290IHVuZGVyXG4gKiB7QGxpbmsgRm9sZGVyTm90ZUxvY2F0aW9uLlBhcmVudEZvbGRlcn0gKG5vdGhpbmcgY2FuIHNpdCBiZXNpZGUgaXQpLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZm9sZGVyLCBhbmQgb3B0aW9uYWxseSB0aGUgc2V0dXAgdG8gcmVzb2x2ZSBpdCB3aXRoLlxuICogQHJldHVybnMgVGhlIGZvbGRlciBub3RlLCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZvbGRlck5vdGUocGFyYW1zOiBSZXNvbHZlRm9sZGVyTm90ZVBhcmFtcyk6IG51bGwgfCBURmlsZSB7XG4gIGNvbnN0IHsgYXBwLCBmb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgY29uZmlnID0gcGFyYW1zLmNvbmZpZyA/PyByZXNvbHZlRm9sZGVyTm90ZUNvbmZpZyh7IGFwcCB9KTtcbiAgaWYgKGNvbmZpZy5sb2NhdGlvbiA9PT0gRm9sZGVyTm90ZUxvY2F0aW9uLk5vbmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhcmVudEZvbGRlclBhdGggPSBjb25maWcubG9jYXRpb24gPT09IEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXIgPyBmb2xkZXIucGFyZW50Py5wYXRoIDogZm9sZGVyLnBhdGg7XG4gIGlmIChwYXJlbnRGb2xkZXJQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG5vdGVOYW1lID0gY29uZmlnLnJlc29sdmVOYW1lKGZvbGRlcikudHJpbSgpO1xuICBpZiAoIW5vdGVOYW1lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKGNvbnN0IGV4dGVuc2lvbiBvZiBjb25maWcuZXh0ZW5zaW9ucykge1xuICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChub3JtYWxpemVQYXRoKGpvaW4ocGFyZW50Rm9sZGVyUGF0aCwgYCR7bm90ZU5hbWV9LiR7ZXh0ZW5zaW9ufWApKSk7XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHtAbGluayBGb2xkZXJOb3RlTG9jYXRpb24uQXV0b30gaW50byBhIGNvbmNyZXRlIGZvbGRlci1ub3RlIHNldHVwLlxuICpcbiAqIGBmb2xkZXItbm90ZXNgJyBgdmF1bHRGb2xkZXJgIHN0b3JhZ2UgKGV2ZXJ5IGZvbGRlciBub3RlIHBvb2xlZCBpbiBvbmUgY2VudHJhbCBmb2xkZXIpIGhhcyBub1xuICogY291bnRlcnBhcnQgaGVyZSBhbmQgZmFsbHMgYmFjayByYXRoZXIgdGhhbiBndWVzc2luZzogd2l0aCB0aGUgbm90ZXMgcG9vbGVkLCB0aGUgbm90ZSBiZWxvbmdpbmcgdG8gYVxuICogZm9sZGVyIGlzIG5vIGxvbmdlciBkZXJpdmFibGUgZnJvbSB0aGF0IGZvbGRlcidzIHBhdGggYWxvbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzZXR1cCwgYW5kIHRoZSBhcHAgdG8gcmVhZCB0aGUgaW5zdGFsbGVkIHBsdWdpbiBmcm9tLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIHNldHVwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZvbGRlck5vdGVDb25maWcocGFyYW1zOiBSZXNvbHZlRm9sZGVyTm90ZUNvbmZpZ1BhcmFtcyk6IEZvbGRlck5vdGVDb25maWcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGV4dGVuc2lvbnMsXG4gICAgaXNIaWRkZW4sXG4gICAgbG9jYXRpb24sXG4gICAgcmVzb2x2ZU5hbWVcbiAgfSA9IHBhcmFtcztcblxuICByZXR1cm4gbG9jYXRpb24gIT09IHVuZGVmaW5lZCAmJiBsb2NhdGlvbiAhPT0gRm9sZGVyTm90ZUxvY2F0aW9uLkF1dG9cbiAgICA/IHtcbiAgICAgIGV4dGVuc2lvbnM6IG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9ucyA/PyBbTUFSS0RPV05fRklMRV9FWFRFTlNJT05dKSxcbiAgICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA/PyBmYWxzZSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcmVzb2x2ZU5hbWU6IHJlc29sdmVOYW1lID8/IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRy5yZXNvbHZlTmFtZVxuICAgIH1cbiAgICA6IHJlYWRGb2xkZXJOb3Rlc1BsdWdpbkNvbmZpZyhhcHApID8/IEZBTExCQUNLX0ZPTERFUl9OT1RFX0NPTkZJRztcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGV4dGVuc2lvbnMgdGhlIHdheSBgZm9sZGVyLW5vdGVzYCBkb2VzIGJlZm9yZSBpdCBsb29rcyBhIGZpbGUgdXA6IG5vIGxlYWRpbmcgZG90LCBsb3dlci1jYXNlLFxuICogYEV4Y2FsaWRyYXdgIHRyZWF0ZWQgYXMgTWFya2Rvd24sIGJsYW5rcyBkcm9wcGVkLCBkdXBsaWNhdGVzIGNvbGxhcHNlZCB3aGlsZSBrZWVwaW5nIHRoZSBmaXJzdCBvY2N1cnJlbmNlJ3NcbiAqIHBvc2l0aW9uLlxuICpcbiAqIEBwYXJhbSBleHRlbnNpb25zIC0gVGhlIGV4dGVuc2lvbnMgYXMgY29uZmlndXJlZC5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIGV4dGVuc2lvbnMsIGluIHJlc29sdXRpb24gb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV4dGVuc2lvbnMoZXh0ZW5zaW9uczogcmVhZG9ubHkgc3RyaW5nW10pOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFeHRlbnNpb25zID0gZXh0ZW5zaW9uc1xuICAgIC5tYXAoKGV4dGVuc2lvbikgPT4gZXh0ZW5zaW9uLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15cXC4vLCAnJykpXG4gICAgLm1hcCgoZXh0ZW5zaW9uKSA9PiBleHRlbnNpb24gPT09IEVYQ0FMSURSQVdfRklMRV9FWFRFTlNJT04gPyBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTiA6IGV4dGVuc2lvbilcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gWy4uLm5ldyBTZXQobm9ybWFsaXplZEV4dGVuc2lvbnMpXTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgaW5zdGFsbGVkIGBmb2xkZXItbm90ZXNgIHBsdWdpbidzIG93biBjb25maWd1cmF0aW9uLCBpZiBpdCBpcyBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQgdGhlIHdheVxuICogaXQgZG9jdW1lbnRzLlxuICpcbiAqIEV2ZXJ5IHZhbHVlIGlzIHJlYWQgYXMgYHVua25vd25gIGFuZCBjaGVja2VkLCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoaXMgaXMgYW5vdGhlclxuICogcGx1Z2luJ3MgcHJpdmF0ZSBzZXR0aW5ncyBvYmplY3QsIHNvIGEgdmVyc2lvbiB0aGF0IHJlbmFtZXMgb3IgZHJvcHMgYSBrZXkgbXVzdCBkZWdyYWRlIHRvIHRoZSBmYWxsYmFja1xuICogaW5zdGVhZCBvZiB0aHJvd2luZyBpbnNpZGUgYSBjbGljayBoYW5kbGVyLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiwgb3IgYG51bGxgIHdoZW4gdGhlIHBsdWdpbiBpcyBhYnNlbnQsIG5vdCBjb25maWd1cmVkLCBvciBzZXQgdG8gYSBzdG9yYWdlXG4gKiBsb2NhdGlvbiB3aXRoIG5vIGNvdW50ZXJwYXJ0IGhlcmUuXG4gKi9cbmZ1bmN0aW9uIHJlYWRGb2xkZXJOb3Rlc1BsdWdpbkNvbmZpZyhhcHA6IEFwcCk6IEZvbGRlck5vdGVDb25maWcgfCBudWxsIHtcbiAgY29uc3QgZm9sZGVyTm90ZXNQbHVnaW4gPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4oRk9MREVSX05PVEVTX1BMVUdJTl9JRCk7XG4gIC8vIE5hcnJvd2VkIHdpdGggYGluYCByYXRoZXIgdGhhbiBhc3NlcnRlZCBpbnRvIGEgc2hhcGU6IHRoYXQga2VlcHMgZXZlcnkgdmFsdWUgYmVsb3cgdHlwZWQgYHVua25vd25gLFxuICAvLyB3aGljaCBpcyBleGFjdGx5IHdoYXQgYSBmb3JlaWduIHBsdWdpbidzIHByaXZhdGUgc2V0dGluZ3MgYXJlLlxuICBpZiAoIWZvbGRlck5vdGVzUGx1Z2luIHx8ICEoJ3NldHRpbmdzJyBpbiBmb2xkZXJOb3Rlc1BsdWdpbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVzU2V0dGluZ3M6IHVua25vd24gPSBmb2xkZXJOb3Rlc1BsdWdpbi5zZXR0aW5ncztcbiAgaWYgKHR5cGVvZiBmb2xkZXJOb3Rlc1NldHRpbmdzICE9PSAnb2JqZWN0JyB8fCBmb2xkZXJOb3Rlc1NldHRpbmdzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsb2NhdGlvbiA9IHRvRm9sZGVyTm90ZUxvY2F0aW9uKCdzdG9yYWdlTG9jYXRpb24nIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN0b3JhZ2VMb2NhdGlvbiA6IG51bGwpO1xuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmb2xkZXJOb3RlTmFtZSA9ICdmb2xkZXJOb3RlTmFtZScgaW4gZm9sZGVyTm90ZXNTZXR0aW5ncyA/IGZvbGRlck5vdGVzU2V0dGluZ3MuZm9sZGVyTm90ZU5hbWUgOiBudWxsO1xuICBpZiAodHlwZW9mIGZvbGRlck5vdGVOYW1lICE9PSAnc3RyaW5nJyB8fCAhZm9sZGVyTm90ZU5hbWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlck5vdGVUeXBlID0gJ2ZvbGRlck5vdGVUeXBlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5mb2xkZXJOb3RlVHlwZSA6IG51bGw7XG4gIGNvbnN0IHN1cHBvcnRlZEZpbGVUeXBlcyA9ICdzdXBwb3J0ZWRGaWxlVHlwZXMnIGluIGZvbGRlck5vdGVzU2V0dGluZ3MgPyBmb2xkZXJOb3Rlc1NldHRpbmdzLnN1cHBvcnRlZEZpbGVUeXBlcyA6IG51bGw7XG4gIGNvbnN0IGlzSGlkZGVuID0gJ2hpZGVGb2xkZXJOb3RlJyBpbiBmb2xkZXJOb3Rlc1NldHRpbmdzID8gZm9sZGVyTm90ZXNTZXR0aW5ncy5oaWRlRm9sZGVyTm90ZSA6IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBJdHMgb3duIHJlc29sdmVyIHRyaWVzIHRoZSBwcmltYXJ5IHR5cGUgZmlyc3QgYW5kIGV2ZXJ5IG90aGVyIHN1cHBvcnRlZCB0eXBlIGFmdGVyIGl0LCB3aGljaCBpcyB0aGVcbiAgICAvLyBvcmRlciByZXByb2R1Y2VkIGhlcmUuIEFuIHVudXNhYmxlIHBhaXIgbGVhdmVzIE1hcmtkb3duLCB0aGUgZXh0ZW5zaW9uIGl0IGNhbm5vdCBiZSBjb25maWd1cmVkXG4gICAgLy8gd2l0aG91dC5cbiAgICBleHRlbnNpb25zOiBub3JtYWxpemVFeHRlbnNpb25zKFtcbiAgICAgIHR5cGVvZiBmb2xkZXJOb3RlVHlwZSA9PT0gJ3N0cmluZycgPyBmb2xkZXJOb3RlVHlwZSA6IE1BUktET1dOX0ZJTEVfRVhURU5TSU9OLFxuICAgICAgLi4uKEFycmF5LmlzQXJyYXkoc3VwcG9ydGVkRmlsZVR5cGVzKSA/IHN1cHBvcnRlZEZpbGVUeXBlcy5maWx0ZXIoKHR5cGU6IHVua25vd24pID0+IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykgOiBbXSksXG4gICAgICBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTlxuICAgIF0pLFxuICAgIGlzSGlkZGVuOiBpc0hpZGRlbiA9PT0gdHJ1ZSxcbiAgICBsb2NhdGlvbixcbiAgICByZXNvbHZlTmFtZTogKGZvbGRlcjogVEZvbGRlcik6IHN0cmluZyA9PlxuICAgICAgcmVwbGFjZUFsbCh7XG4gICAgICAgICRzdHJpbmc6IGZvbGRlck5vdGVOYW1lLFxuICAgICAgICAvLyBBIGZ1bmN0aW9uIHJlcGxhY2VyLCBzbyBhIGZvbGRlciBuYW1lIGNvbnRhaW5pbmcgYCQmYCBpcyBpbnNlcnRlZCBsaXRlcmFsbHkuXG4gICAgICAgIHJlcGxhY2VyOiAoKSA9PiBmb2xkZXIubmFtZSxcbiAgICAgICAgc2VhcmNoVmFsdWU6IEZPTERFUl9OT1RFU19GT0xERVJfTkFNRV9UT0tFTl9SRUdfRVhQXG4gICAgICB9KVxuICB9O1xufVxuXG4vKipcbiAqIE1hcHMgYGZvbGRlci1ub3Rlc2AnIGBzdG9yYWdlTG9jYXRpb25gIG9udG8gdGhpcyBsaWJyYXJ5J3Mgb3duIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBzdG9yYWdlTG9jYXRpb24gLSBUaGUgdmFsdWUgcmVhZCBvdXQgb2YgdGhhdCBwbHVnaW4ncyBzZXR0aW5ncy5cbiAqIEByZXR1cm5zIFRoZSBsb2NhdGlvbiwgb3IgYG51bGxgIGZvciBgdmF1bHRGb2xkZXJgIGFuZCBmb3IgYW55dGhpbmcgdGhhdCBpcyBub3Qgb25lIG9mIGl0cyB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHRvRm9sZGVyTm90ZUxvY2F0aW9uKHN0b3JhZ2VMb2NhdGlvbjogdW5rbm93bik6IEZvbGRlck5vdGVDb25maWdbJ2xvY2F0aW9uJ10gfCBudWxsIHtcbiAgc3dpdGNoIChzdG9yYWdlTG9jYXRpb24pIHtcbiAgICBjYXNlICdpbnNpZGVGb2xkZXInOiB7XG4gICAgICByZXR1cm4gRm9sZGVyTm90ZUxvY2F0aW9uLkluc2lkZUZvbGRlcjtcbiAgICB9XG4gICAgY2FzZSAncGFyZW50Rm9sZGVyJzoge1xuICAgICAgcmV0dXJuIEZvbGRlck5vdGVMb2NhdGlvbi5QYXJlbnRGb2xkZXI7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5QkEsa0JBQXFCO0FBQ3JCLG9CQUEyQjtBQUMzQixzQkFBOEI7QUFFOUIseUJBQXdDO0FBV2pDLElBQUsscUJBQUwsa0JBQUtBLHdCQUFMO0FBS0wsRUFBQUEsb0JBQUEsVUFBTztBQUtQLEVBQUFBLG9CQUFBLGtCQUFlO0FBTWYsRUFBQUEsb0JBQUEsVUFBTztBQUtQLEVBQUFBLG9CQUFBLGtCQUFlO0FBckJMLFNBQUFBO0FBQUEsR0FBQTtBQXNJTCxNQUFNLHlCQUF5QjtB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
@@ -1,4 +1,4 @@
1
- /// <reference path="./library.d.cts" />
1
+ /// <reference path="./library-references.d.cts" />
2
2
  /**
3
3
  * @file
4
4
  *