obsidian-dev-utils 96.6.0 → 98.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/LICENSE +1 -1
  3. package/dist/integration-test-plugin/main.js +1762 -4197
  4. package/dist/lib/cjs/__merged.cjs +17 -9
  5. package/dist/lib/cjs/__merged.d.cts +3 -1
  6. package/dist/lib/cjs/desktop-zip-extractor.cjs +276 -0
  7. package/dist/lib/cjs/desktop-zip-extractor.d.cts +94 -0
  8. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  9. package/dist/lib/cjs/index.cjs +4 -1
  10. package/dist/lib/cjs/index.d.cts +1 -0
  11. package/dist/lib/cjs/obsidian/components/rename-delete-handler-component.cjs +38 -38
  12. package/dist/lib/cjs/obsidian/demo-vault-naming.cjs +167 -0
  13. package/dist/lib/cjs/obsidian/demo-vault-naming.d.cts +54 -0
  14. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +20 -21
  15. package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.d.cts +21 -16
  16. package/dist/lib/cjs/obsidian/desktop-trusted-input.cjs +9 -9
  17. package/dist/lib/cjs/obsidian/desktop-trusted-input.d.cts +23 -4
  18. package/dist/lib/cjs/obsidian/index.cjs +10 -1
  19. package/dist/lib/cjs/obsidian/index.d.cts +3 -0
  20. package/dist/lib/cjs/obsidian/mobile-trusted-input.cjs +195 -0
  21. package/dist/lib/cjs/obsidian/mobile-trusted-input.d.cts +93 -0
  22. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +2 -1
  23. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +4 -0
  24. package/dist/lib/cjs/obsidian/resource-lock.cjs +122 -122
  25. package/dist/lib/cjs/obsidian/trusted-input.cjs +206 -0
  26. package/dist/lib/cjs/obsidian/trusted-input.d.cts +126 -0
  27. package/dist/lib/cjs/script-utils/build.cjs +30 -6
  28. package/dist/lib/cjs/script-utils/build.d.cts +5 -0
  29. package/dist/lib/cjs/script-utils/demo-vault.cjs +26 -6
  30. package/dist/lib/cjs/script-utils/demo-vault.d.cts +12 -8
  31. package/dist/lib/cjs/script-utils/exec.cjs +1 -1
  32. package/dist/lib/cjs/script-utils/formatters/dprint.cjs +3 -2
  33. package/dist/lib/cjs/script-utils/index.cjs +4 -1
  34. package/dist/lib/cjs/script-utils/index.d.cts +1 -0
  35. package/dist/lib/cjs/script-utils/linters/cspell.cjs +3 -3
  36. package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +39 -1
  37. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.cjs +16 -1
  38. package/dist/lib/cjs/script-utils/linters/eslint-rules/index.d.cts +5 -0
  39. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.cjs +254 -0
  40. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-description.d.cts +54 -0
  41. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.cjs +217 -0
  42. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-helpers.d.cts +141 -0
  43. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.cjs +214 -0
  44. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-id.d.cts +32 -0
  45. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.cjs +215 -0
  46. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-name.d.cts +30 -0
  47. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.cjs +318 -0
  48. package/dist/lib/cjs/script-utils/linters/eslint-rules/manifest-schema.d.cts +45 -0
  49. package/dist/lib/cjs/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.cjs +9 -1
  50. package/dist/lib/cjs/script-utils/linters/eslint.cjs +3 -2
  51. package/dist/lib/cjs/script-utils/linters/markdownlint.cjs +4 -4
  52. package/dist/lib/cjs/script-utils/npm-run.cjs +4 -3
  53. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.cjs +10 -1
  54. package/dist/lib/cjs/script-utils/obsidian-dev-utils-repo-paths.d.cts +37 -1
  55. package/dist/lib/cjs/script-utils/package-manager.cjs +287 -0
  56. package/dist/lib/cjs/script-utils/package-manager.d.cts +77 -0
  57. package/dist/lib/cjs/script-utils/version.cjs +21 -9
  58. package/dist/lib/esm/__merged.d.mts +3 -1
  59. package/dist/lib/esm/__merged.mjs +18 -10
  60. package/dist/lib/esm/desktop-zip-extractor.d.mts +94 -0
  61. package/dist/lib/esm/desktop-zip-extractor.mjs +174 -0
  62. package/dist/lib/esm/generated-during-build.mjs +1 -1
  63. package/dist/lib/esm/index.d.mts +1 -0
  64. package/dist/lib/esm/index.mjs +3 -1
  65. package/dist/lib/esm/obsidian/components/rename-delete-handler-component.mjs +38 -38
  66. package/dist/lib/esm/obsidian/demo-vault-naming.d.mts +54 -0
  67. package/dist/lib/esm/obsidian/demo-vault-naming.mjs +61 -0
  68. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.d.mts +21 -16
  69. package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +23 -11
  70. package/dist/lib/esm/obsidian/desktop-trusted-input.d.mts +23 -4
  71. package/dist/lib/esm/obsidian/desktop-trusted-input.mjs +9 -9
  72. package/dist/lib/esm/obsidian/index.d.mts +3 -0
  73. package/dist/lib/esm/obsidian/index.mjs +7 -1
  74. package/dist/lib/esm/obsidian/mobile-trusted-input.d.mts +93 -0
  75. package/dist/lib/esm/obsidian/mobile-trusted-input.mjs +84 -0
  76. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +4 -0
  77. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -1
  78. package/dist/lib/esm/obsidian/resource-lock.mjs +122 -122
  79. package/dist/lib/esm/obsidian/trusted-input.d.mts +126 -0
  80. package/dist/lib/esm/obsidian/trusted-input.mjs +85 -0
  81. package/dist/lib/esm/script-utils/build.d.mts +5 -0
  82. package/dist/lib/esm/script-utils/build.mjs +30 -6
  83. package/dist/lib/esm/script-utils/demo-vault.d.mts +12 -8
  84. package/dist/lib/esm/script-utils/demo-vault.mjs +29 -6
  85. package/dist/lib/esm/script-utils/exec.mjs +1 -1
  86. package/dist/lib/esm/script-utils/formatters/dprint.mjs +3 -2
  87. package/dist/lib/esm/script-utils/index.d.mts +1 -0
  88. package/dist/lib/esm/script-utils/index.mjs +3 -1
  89. package/dist/lib/esm/script-utils/linters/cspell.mjs +3 -3
  90. package/dist/lib/esm/script-utils/linters/eslint-config.mjs +39 -1
  91. package/dist/lib/esm/script-utils/linters/eslint-rules/index.d.mts +5 -0
  92. package/dist/lib/esm/script-utils/linters/eslint-rules/index.mjs +11 -1
  93. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.d.mts +54 -0
  94. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-description.mjs +148 -0
  95. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.d.mts +141 -0
  96. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-helpers.mjs +92 -0
  97. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.d.mts +32 -0
  98. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-id.mjs +111 -0
  99. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.d.mts +30 -0
  100. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-name.mjs +112 -0
  101. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.d.mts +45 -0
  102. package/dist/lib/esm/script-utils/linters/eslint-rules/manifest-schema.mjs +217 -0
  103. package/dist/lib/esm/script-utils/linters/eslint-rules/obsidian-dev-utils-plugin.mjs +9 -1
  104. package/dist/lib/esm/script-utils/linters/eslint.mjs +3 -2
  105. package/dist/lib/esm/script-utils/linters/markdownlint.mjs +4 -4
  106. package/dist/lib/esm/script-utils/npm-run.mjs +4 -3
  107. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.d.mts +37 -1
  108. package/dist/lib/esm/script-utils/obsidian-dev-utils-repo-paths.mjs +10 -1
  109. package/dist/lib/esm/script-utils/package-manager.d.mts +77 -0
  110. package/dist/lib/esm/script-utils/package-manager.mjs +173 -0
  111. package/dist/lib/esm/script-utils/version.mjs +21 -9
  112. package/obsidian/demo-vault-naming/package.json +6 -0
  113. package/obsidian/mobile-trusted-input/package.json +6 -0
  114. package/obsidian/trusted-input/package.json +6 -0
  115. package/package.json +19 -17
  116. package/script-utils/linters/eslint-rules/manifest-description/package.json +6 -0
  117. package/script-utils/linters/eslint-rules/manifest-helpers/package.json +6 -0
  118. package/script-utils/linters/eslint-rules/manifest-id/package.json +6 -0
  119. package/script-utils/linters/eslint-rules/manifest-name/package.json +6 -0
  120. package/script-utils/linters/eslint-rules/manifest-schema/package.json +6 -0
  121. package/script-utils/package-manager/package.json +6 -0
@@ -157,17 +157,17 @@ const INPUT_POLL_INTERVAL_IN_MILLISECONDS = 50;
157
157
  const INPUT_TIMEOUT_IN_MILLISECONDS = 5e3;
158
158
  const CENTER_DIVISOR = 2;
159
159
  const SINGLE_CLICK_COUNT = 1;
160
- function clickElement(params) {
160
+ async function clickElement(params) {
161
161
  const { button = "left", element, modifiers = [] } = params;
162
162
  const rect = element.getBoundingClientRect();
163
- clickMouse({
163
+ await clickMouse({
164
164
  button,
165
165
  modifiers,
166
166
  x: rect.left + rect.width / CENTER_DIVISOR,
167
167
  y: rect.top + rect.height / CENTER_DIVISOR
168
168
  });
169
169
  }
170
- function clickMouse(params) {
170
+ async function clickMouse(params) {
171
171
  const { button = "left", modifiers = [], x, y } = params;
172
172
  const electronModifiers = toElectronModifiers(modifiers);
173
173
  const roundedX = Math.round(x);
@@ -194,16 +194,16 @@ function clickMouse(params) {
194
194
  async function hoverElement(params) {
195
195
  const { element } = params;
196
196
  const rect = element.getBoundingClientRect();
197
- moveMouse({ x: rect.left + rect.width / CENTER_DIVISOR, y: rect.top + rect.height / CENTER_DIVISOR });
197
+ await moveMouse({ x: rect.left + rect.width / CENTER_DIVISOR, y: rect.top + rect.height / CENTER_DIVISOR });
198
198
  const startTime = Date.now();
199
199
  while (!element.matches(":hover") && Date.now() - startTime < INPUT_TIMEOUT_IN_MILLISECONDS) {
200
200
  await sleep(INPUT_POLL_INTERVAL_IN_MILLISECONDS);
201
201
  }
202
202
  }
203
- function moveMouse(params) {
203
+ async function moveMouse(params) {
204
204
  getWebContents().sendInputEvent({ type: "mouseMove", x: Math.round(params.x), y: Math.round(params.y) });
205
205
  }
206
- function pressKey(params) {
206
+ async function pressKey(params) {
207
207
  const { key, modifiers = [] } = params;
208
208
  const electronModifiers = toElectronModifiers(modifiers);
209
209
  const webContents = getWebContents();
@@ -220,7 +220,7 @@ async function typeIntoEditor(params) {
220
220
  editor.setCursor(lastLine, editor.getLine(lastLine).length);
221
221
  await sleep(FOCUS_SETTLE_DELAY_IN_MILLISECONDS);
222
222
  for (const char of text) {
223
- pressKey({ key: char });
223
+ await pressKey({ key: char });
224
224
  }
225
225
  const startTime = Date.now();
226
226
  while (editor.getValue() === valueBeforeTyping && Date.now() - startTime < INPUT_TIMEOUT_IN_MILLISECONDS) {
@@ -233,7 +233,7 @@ async function unhoverElement(params) {
233
233
  const rect = element.getBoundingClientRect();
234
234
  const x = rect.left >= OUTSIDE_OFFSET_IN_PIXELS ? rect.left - OUTSIDE_OFFSET_IN_PIXELS : rect.right + OUTSIDE_OFFSET_IN_PIXELS;
235
235
  const y = rect.top + rect.height / CENTER_DIVISOR;
236
- moveMouse({ x, y });
236
+ await moveMouse({ x, y });
237
237
  const startTime = Date.now();
238
238
  while (element.matches(":hover") && Date.now() - startTime < INPUT_TIMEOUT_IN_MILLISECONDS) {
239
239
  await sleep(INPUT_POLL_INTERVAL_IN_MILLISECONDS);
@@ -277,4 +277,4 @@ function toElectronModifiers(modifiers) {
277
277
  typeIntoEditor,
278
278
  unhoverElement
279
279
  });
280
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2Rlc2t0b3AtdHJ1c3RlZC1pbnB1dC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3Atb25seSB0cnVzdGVkIGlucHV0IGhlbHBlcnMgdGhhdCBkcml2ZSB0aGUgcmVhbCBFbGVjdHJvbiByZW5kZXJlciB2aWFcbiAqIGB3ZWJDb250ZW50cy5zZW5kSW5wdXRFdmVudGAsIHNvIGtleXN0cm9rZXMsIHBvaW50ZXIgbW92ZXMgYW5kIGNsaWNrcyBmbG93IHRocm91Z2ggdGhlIHNhbWUgdHJ1c3RlZFxuICogaW5wdXQgcGlwZWxpbmUgYSByZWFsIHVzZXIgcHJvZHVjZXMgKHVubGlrZSB1bnRydXN0ZWQgYGRpc3BhdGNoRXZlbnRgLCB3aGljaCBDb2RlTWlycm9yLCB0aGUgQ1NTXG4gKiBgOmhvdmVyYCBlbmdpbmUgYW5kIGV2ZXJ5IGBlLmlzVHJ1c3RlZGAgZ3VhcmQgaW4gT2JzaWRpYW4gaWdub3JlKS5cbiAqXG4gKiBUaGVzZSBhcmUgdGhlIGltcG9ydGFibGUtbW9kdWxlIHR3aW5zIG9mIHRoZSBiYXNlIGhlbHBlcnMgdGhlIGBvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nYCBoYXJuZXNzXG4gKiBzZWVkcyBpbnRvIHRoZSBgbGliYCBiYWc7IHRoZSB0d28gY29waWVzIGFyZSBrZXB0IGJlaGF2aW9yYWxseSBpbiBzeW5jIGJ5IGhhbmQgKHNlZSB0aGUgcHJvamVjdFxuICogYENMQVVERS5tZGApLiBEZXNrdG9wLW9ubHk6IHRoZXkgZGVwZW5kIG9uIGB3aW5kb3cuZWxlY3Ryb25gLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRWRpdG9yLFxuICBNb2RpZmllclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY2xpY2tFbGVtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlja0VsZW1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1vdXNlIGJ1dHRvbiB0byBjbGljayB3aXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xlZnQnYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uPzogTW91c2VCdXR0b247XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGNsaWNrLiBUaGUgcG9pbnRlciBpcyBtb3ZlZCB0byBpdHMgY2VudGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllciBrZXlzIHRvIGhvbGQsIHVzaW5nIE9ic2lkaWFuJ3Mge0BsaW5rIE1vZGlmaWVyfSBuYW1lcy4gYCdNb2QnYCByZXNvbHZlcyBwZXItcGxhdGZvcm1cbiAgICogKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgW11gXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM/OiByZWFkb25seSBNb2RpZmllcltdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjbGlja01vdXNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlja01vdXNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBtb3VzZSBidXR0b24gdG8gY2xpY2sgd2l0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdsZWZ0J2BcbiAgICovXG4gIHJlYWRvbmx5IGJ1dHRvbj86IE1vdXNlQnV0dG9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXIga2V5cyB0byBob2xkLCB1c2luZyBPYnNpZGlhbidzIHtAbGluayBNb2RpZmllcn0gbmFtZXMuIGAnTW9kJ2AgcmVzb2x2ZXMgcGVyLXBsYXRmb3JtXG4gICAqIChDbWQgb24gbWFjT1MsIEN0cmwgZWxzZXdoZXJlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFtdYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kaWZpZXJzPzogcmVhZG9ubHkgTW9kaWZpZXJbXTtcblxuICAvKipcbiAgICogVGhlIHggY29vcmRpbmF0ZSAod2ViLWNvbnRlbnRzIERJUCkgdG8gY2xpY2sgYXQuXG4gICAqL1xuICByZWFkb25seSB4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB5IGNvb3JkaW5hdGUgKHdlYi1jb250ZW50cyBESVApIHRvIGNsaWNrIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBob3ZlckVsZW1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdmVyRWxlbWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBob3Zlci4gVGhlIHBvaW50ZXIgaXMgbW92ZWQgdG8gaXRzIGNlbnRlci5cbiAgICovXG4gIHJlYWRvbmx5IGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xufVxuXG4vKipcbiAqIFRoZSBtb3VzZSBidXR0b24gYSB0cnVzdGVkIGNsaWNrIHByZXNzZXMsIGluIEVsZWN0cm9uJ3MgYHNlbmRJbnB1dEV2ZW50YCBzcGVsbGluZy5cbiAqL1xuZXhwb3J0IHR5cGUgTW91c2VCdXR0b24gPSBOb25OdWxsYWJsZTxFbGVjdHJvbk1vdXNlSW5wdXRFdmVudFsnYnV0dG9uJ10+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBtb3ZlTW91c2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vdmVNb3VzZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgeSBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBwcmVzc0tleX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlc3NLZXlQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGtleSB0byBwcmVzcywgZ2l2ZW4gYXMgYW4gRWxlY3Ryb24gQWNjZWxlcmF0b3Iga2V5IG5hbWUgXHUyMDE0IGUuZy4gYCdFbnRlcidgLCBgJ0VzY2FwZSdgLCBgJ1RhYidgLFxuICAgKiBhbiBhcnJvdyBrZXksIG9yIGEgcHJpbnRhYmxlIGNoYXJhY3RlciAoYCdhJ2AsIGAnMSdgKS5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXIga2V5cyB0byBob2xkLCB1c2luZyBPYnNpZGlhbidzIHtAbGluayBNb2RpZmllcn0gbmFtZXMuIGAnTW9kJ2AgcmVzb2x2ZXMgcGVyLXBsYXRmb3JtXG4gICAqIChDbWQgb24gbWFjT1MsIEN0cmwgZWxzZXdoZXJlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFtdYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kaWZpZXJzPzogcmVhZG9ubHkgTW9kaWZpZXJbXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdHlwZUludG9FZGl0b3J9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVJbnRvRWRpdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBlZGl0b3IgdG8gdHlwZSBpbnRvLiBJdCBpcyBmb2N1c2VkIChjYXJldCBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudCkgYmVmb3JlIHRoZSBrZXlzdHJva2VzXG4gICAqIGFyZSBpbmplY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvcjogRWRpdG9yO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0byB0eXBlLiBFYWNoIGNvZGUgcG9pbnQgaXMgcHJlc3NlZCB2aWEge0BsaW5rIHByZXNzS2V5fSwgZXhhY3RseSBhcyBhIHJlYWwgdXNlciB0eXBpbmcuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHVuaG92ZXJFbGVtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmhvdmVyRWxlbWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBtb3ZlIHRoZSBwb2ludGVyIGF3YXkgZnJvbS4gVGhlIHBvaW50ZXIgaXMgbW92ZWQgdG8gYSBwb2ludCBqdXN0IG91dHNpZGUgaXRzIGJvdW5kaW5nXG4gICAqIGJveC5cbiAgICovXG4gIHJlYWRvbmx5IGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xufVxuXG50eXBlIEN1cnJlbnRXZWJDb250ZW50cyA9IFJldHVyblR5cGU8V2luZG93WydlbGVjdHJvbiddWydyZW1vdGUnXVsnZ2V0Q3VycmVudFdlYkNvbnRlbnRzJ10+O1xuXG4vLyBUaGUgRWxlY3Ryb24gbW9kaWZpZXIta2V5IG5hbWVzIGBzZW5kSW5wdXRFdmVudGAgYWNjZXB0cyAoZS5nLiAnbWV0YScsICdjb250cm9sJywgJ3NoaWZ0JywgJ2FsdCcpLlxuLy8gVGhlIHR5cGUgaXMgZGVyaXZlZCBmcm9tIHRoZSB3ZWItY29udGVudHMgdHlwZSBzbyBpdCBzdGF5cyBpbiBzeW5jIHdpdGggdGhlIEVsZWN0cm9uIHR5cGluZ3MuXG50eXBlIEVsZWN0cm9uTW9kaWZpZXIgPSBOb25OdWxsYWJsZTxQYXJhbWV0ZXJzPEN1cnJlbnRXZWJDb250ZW50c1snc2VuZElucHV0RXZlbnQnXT5bMF1bJ21vZGlmaWVycyddPltudW1iZXJdO1xuXG4vLyBUaGUgcG9pbnRlciB2YXJpYW50IG9mIHRoZSBgc2VuZElucHV0RXZlbnRgIHVuaW9uLCBwaWNrZWQgb3V0IGJ5IHRoZSBjb29yZGluYXRlcyBvbmx5IGl0IGNhcnJpZXMuXG4vLyBEZXJpdmVkIGZyb20gdGhlIHdlYi1jb250ZW50cyB0eXBlIHNvIGl0IHN0YXlzIGluIHN5bmMgd2l0aCB0aGUgRWxlY3Ryb24gdHlwaW5ncy5cbnR5cGUgRWxlY3Ryb25Nb3VzZUlucHV0RXZlbnQgPSBFeHRyYWN0PFBhcmFtZXRlcnM8Q3VycmVudFdlYkNvbnRlbnRzWydzZW5kSW5wdXRFdmVudCddPlswXSwgUG9pbnRlckNvb3JkaW5hdGVzPjtcblxuLy8gVGhlIHNoYXBlIHRoYXQgZGlzY3JpbWluYXRlcyBhIHBvaW50ZXIgYHNlbmRJbnB1dEV2ZW50YCBwYXlsb2FkIGZyb20gYSBrZXlib2FyZCBvbmUuXG5pbnRlcmZhY2UgUG9pbnRlckNvb3JkaW5hdGVzIHtcbiAgeDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEludGVydmFsIChpbiBtcykgYmV0d2VlbiBwb2xscyB3aGlsZSB3YWl0aW5nIGZvciBhIHRydXN0ZWQgaW5wdXQgZXZlbnQgdG8gdGFrZSBlZmZlY3QgKHRoZSBlZGl0b3JcbiAqIGRvY3VtZW50IHVwZGF0ZXMsIG9yIGFuIGVsZW1lbnQncyBgOmhvdmVyYCBzdGF0ZSBmbGlwcykuXG4gKi9cbmNvbnN0IElOUFVUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTA7XG5cbi8qKlxuICogTWF4aW11bSB0aW1lIChpbiBtcykgdG8gd2FpdCBmb3IgYSB0cnVzdGVkIGlucHV0IGV2ZW50IHRvIHRha2UgZWZmZWN0IGJlZm9yZSBnaXZpbmcgdXAgKHRoZSBleHBlY3RlZFxuICogb3V0Y29tZSB3aGVuIHRoZSBpbnB1dCBpcyByZWplY3RlZCBcdTIwMTQgZS5nLiBhIHJlYWQtb25seSBlZGl0b3IpLlxuICovXG5jb25zdCBJTlBVVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogRGl2aXNvciB1c2VkIHRvIGZpbmQgdGhlIGNlbnRlciBvZiBhbiBlbGVtZW50J3MgYm91bmRpbmcgYm94LlxuICovXG5jb25zdCBDRU5URVJfRElWSVNPUiA9IDI7XG5cbi8qKlxuICogVGhlIGBjbGlja0NvdW50YCBhIHNpbmdsZSAobm9uLWRvdWJsZSkgdHJ1c3RlZCBjbGljayBjYXJyaWVzLlxuICovXG5jb25zdCBTSU5HTEVfQ0xJQ0tfQ09VTlQgPSAxO1xuXG4vKipcbiAqIENsaWNrcyB0aGUgY2VudGVyIG9mIGFuIGVsZW1lbnQgdXNpbmcgKip0cnVzdGVkKiogRWxlY3Ryb24gcG9pbnRlciBpbnB1dC5cbiAqXG4gKiBUaGUgZWxlbWVudC1yZWxhdGl2ZSBjb3VudGVycGFydCBvZiB7QGxpbmsgY2xpY2tNb3VzZX0sIG1pcnJvcmluZyB0aGUge0BsaW5rIG1vdmVNb3VzZX0gL1xuICoge0BsaW5rIGhvdmVyRWxlbWVudH0gc3BsaXQuIFVzZSB7QGxpbmsgY2xpY2tNb3VzZX0gZGlyZWN0bHkgd2hlbiB0aGUgcG9pbnQgdG8gY2xpY2sgaXMgKipub3QqKiB0aGVcbiAqIGVsZW1lbnQncyBjZW50ZXIgXHUyMDE0IHRoZSBtYXJrZG93biBlZGl0b3IncyBtYXJnaW4sIGZvciBpbnN0YW5jZSwgbGllcyBpbnNpZGUgYGNtLnNjcm9sbERPTWAgYnV0IG91dHNpZGVcbiAqIGAuY20tc2l6ZXJgLCBzbyBubyBlbGVtZW50J3MgY2VudGVyIGxhbmRzIG9uIGl0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBjbGljaywgdGhlIGJ1dHRvbiB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xpY2tFbGVtZW50KHBhcmFtczogQ2xpY2tFbGVtZW50UGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgYnV0dG9uID0gJ2xlZnQnLCBlbGVtZW50LCBtb2RpZmllcnMgPSBbXSB9ID0gcGFyYW1zO1xuXG4gIC8vIFZpZXdwb3J0IGNvb3JkcyBlcXVhbCB3ZWItY29udGVudHMgRElQIGNvb3JkcyBmb3IgdGhlIGZ1bGwtd2luZG93IGBCcm93c2VyV2luZG93YC5cbiAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNsaWNrTW91c2Uoe1xuICAgIGJ1dHRvbixcbiAgICBtb2RpZmllcnMsXG4gICAgeDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIENFTlRFUl9ESVZJU09SLFxuICAgIHk6IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyBDRU5URVJfRElWSVNPUlxuICB9KTtcbn1cblxuLyoqXG4gKiBDbGlja3MgYXQgdGhlIGdpdmVuIHdlYi1jb250ZW50cyBjb29yZGluYXRlcyB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvbiBwb2ludGVyIGlucHV0LCBzbyBDaHJvbWl1bVxuICogc3ludGhlc2l6ZXMgYSByZWFsIGBjbGlja2AgKG9yIGBjb250ZXh0bWVudWAsIGZvciB0aGUgcmlnaHQgYnV0dG9uKSB3aXRoIGBpc1RydXN0ZWQgPT09IHRydWVgLlxuICpcbiAqIFRoaXMgaXMgd2hhdCBgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycpKWAgY2Fubm90IGRvOiBPYnNpZGlhbiBhbmQgQ29kZU1pcnJvciBnYXRlXG4gKiBvbiBgaXNUcnVzdGVkYCwgc28gYSBkaXNwYXRjaGVkIGV2ZW50IHNpbGVudGx5IGV4ZXJjaXNlcyBub3RoaW5nIHdoaWxlIHRoZSB0ZXN0IHN0aWxsIHBhc3Nlcy4gT2JzaWRpYW5cbiAqIDEuMTMuNydzIG1hcmtkb3duIHZpZXdwb3J0IChtYXJnaW4pIG1lbnUsIGZvciBleGFtcGxlLCBvcGVucyBmcm9tXG4gKiBgY20uc2Nyb2xsRE9NLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKGUpID0+IHsgaWYgKCFlLmRlZmF1bHRQcmV2ZW50ZWQgJiYgZS5pc1RydXN0ZWQgJiYgXHUyMDI2KSB9KWBcbiAqIFx1MjAxNCBhIGRpc3BhdGNoZWQgYGNvbnRleHRtZW51YCBuZXZlciBnZXRzIHBhc3QgdGhhdCBjaGVjay5cbiAqXG4gKiBJdCBpcyB0aGUgbG93LWxldmVsIHByaW1pdGl2ZTogYSBzaW5nbGUgdHJ1c3RlZCBgbW91c2VNb3ZlYCBcdTIxOTIgYG1vdXNlRG93bmAgXHUyMTkyIGBtb3VzZVVwYCBhdCBvbmUgcG9pbnQsXG4gKiB3aXRoIG5vIHdhaXRpbmcgZm9yIGFueSBlZmZlY3QgKGNhbGxlcnMgcG9sbCB0aGVpciBvd24gcmVhZGluZXNzIHNpZ25hbCkuIFRoZSBsZWFkaW5nIG1vdmUgaXMgd2hhdCBwdXRzXG4gKiB0aGUgcG9pbnRlciBvdmVyIHRoZSBoaXQtdGVzdCB0YXJnZXQgYmVmb3JlIHRoZSBidXR0b24gZ29lcyBkb3duLiBQcmVmZXIge0BsaW5rIGNsaWNrRWxlbWVudH0gZm9yXG4gKiBlbGVtZW50LXJlbGF0aXZlIGNsaWNrcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHdlYi1jb250ZW50cyBESVAgY29vcmRpbmF0ZXMgdG8gY2xpY2sgYXQsIHRoZSBidXR0b24gdG8gcHJlc3MgYW5kIGFueSBtb2RpZmllcnMgdG9cbiAqIGhvbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGlja01vdXNlKHBhcmFtczogQ2xpY2tNb3VzZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGJ1dHRvbiA9ICdsZWZ0JywgbW9kaWZpZXJzID0gW10sIHgsIHkgfSA9IHBhcmFtcztcblxuICBjb25zdCBlbGVjdHJvbk1vZGlmaWVycyA9IHRvRWxlY3Ryb25Nb2RpZmllcnMobW9kaWZpZXJzKTtcbiAgY29uc3Qgcm91bmRlZFggPSBNYXRoLnJvdW5kKHgpO1xuICBjb25zdCByb3VuZGVkWSA9IE1hdGgucm91bmQoeSk7XG4gIGNvbnN0IHdlYkNvbnRlbnRzID0gZ2V0V2ViQ29udGVudHMoKTtcblxuICB3ZWJDb250ZW50cy5zZW5kSW5wdXRFdmVudCh7IG1vZGlmaWVyczogZWxlY3Ryb25Nb2RpZmllcnMsIHR5cGU6ICdtb3VzZU1vdmUnLCB4OiByb3VuZGVkWCwgeTogcm91bmRlZFkgfSk7XG4gIHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50KHtcbiAgICBidXR0b24sXG4gICAgY2xpY2tDb3VudDogU0lOR0xFX0NMSUNLX0NPVU5ULFxuICAgIG1vZGlmaWVyczogZWxlY3Ryb25Nb2RpZmllcnMsXG4gICAgdHlwZTogJ21vdXNlRG93bicsXG4gICAgeDogcm91bmRlZFgsXG4gICAgeTogcm91bmRlZFlcbiAgfSk7XG4gIHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50KHtcbiAgICBidXR0b24sXG4gICAgY2xpY2tDb3VudDogU0lOR0xFX0NMSUNLX0NPVU5ULFxuICAgIG1vZGlmaWVyczogZWxlY3Ryb25Nb2RpZmllcnMsXG4gICAgdHlwZTogJ21vdXNlVXAnLFxuICAgIHg6IHJvdW5kZWRYLFxuICAgIHk6IHJvdW5kZWRZXG4gIH0pO1xufVxuXG4vKipcbiAqIE1vdmVzIHRoZSBtb3VzZSBwb2ludGVyIHRvIHRoZSBjZW50ZXIgb2YgYW4gZWxlbWVudCB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvbiBwb2ludGVyIGlucHV0LCB0aGVuIHBvbGxzXG4gKiB1bnRpbCB0aGUgZWxlbWVudCBhY3R1YWxseSBtYXRjaGVzIGA6aG92ZXJgLlxuICpcbiAqIEJlY2F1c2UgdGhlIG1vdmUgaXMgdHJ1c3RlZCwgdGhlIHJlYWwgYDpob3ZlcmAgc3RhdGUgdGFrZXMgZWZmZWN0IGluIHRoZSBDU1MgZW5naW5lIFx1MjAxNCB1bmxpa2VcbiAqIGBkaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZW92ZXInKSlgLCB3aGljaCBpcyB1bnRydXN0ZWQgYW5kIG5ldmVyIHNldHMgYDpob3ZlcmAuIEl0IHRhcmdldHMgdGhlXG4gKiBzaW5nbGUgd2luZG93J3MgKipnbG9iYWwqKiBwb2ludGVyLCBzbyBvbmx5IG9uZSBlbGVtZW50IGlzIGhvdmVyZWQgYXQgYSB0aW1lLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBob3Zlci5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZWxlbWVudCBtYXRjaGVzIGA6aG92ZXJgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaG92ZXJFbGVtZW50KHBhcmFtczogSG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZWxlbWVudCB9ID0gcGFyYW1zO1xuXG4gIC8vIFZpZXdwb3J0IGNvb3JkcyBlcXVhbCB3ZWItY29udGVudHMgRElQIGNvb3JkcyBmb3IgdGhlIGZ1bGwtd2luZG93IGBCcm93c2VyV2luZG93YC5cbiAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIG1vdmVNb3VzZSh7IHg6IHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyBDRU5URVJfRElWSVNPUiwgeTogcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIENFTlRFUl9ESVZJU09SIH0pO1xuXG4gIC8vIFBvbGwgdW50aWwgdGhlIHJlYWwgYDpob3ZlcmAgc3RhdGUgaGFzIGFjdHVhbGx5IHRha2VuLCBpbnN0ZWFkIG9mIGEgZml4ZWQgc2V0dGxlLlxuICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICB3aGlsZSAoIWVsZW1lbnQubWF0Y2hlcygnOmhvdmVyJykgJiYgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IElOUFVUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKSB7XG4gICAgYXdhaXQgc2xlZXAoSU5QVVRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICB9XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIG1vdXNlIHBvaW50ZXIgdG8gdGhlIGdpdmVuIHdlYi1jb250ZW50cyBjb29yZGluYXRlcyB1c2luZyBhICoqdHJ1c3RlZCoqIEVsZWN0cm9uIHBvaW50ZXIgbW92ZS5cbiAqXG4gKiBBIHRydXN0ZWQgbW92ZSB1cGRhdGVzIHRoZSByZWFsIHBvaW50ZXIgc3RhdGUgaW4gdGhlIENTUyBlbmdpbmUsIHNvIGA6aG92ZXJgIHJ1bGVzIGdlbnVpbmVseSBhcHBseS4gVGhpc1xuICogaXMgdGhlIGxvdy1sZXZlbCBwcmltaXRpdmU6IGl0IHBlcmZvcm1zIGEgc2luZ2xlIG1vdmUgYW5kIGRvZXMgKipub3QqKiB3YWl0IGZvciBhbnkgc3RhdGUgdG8gc2V0dGxlXG4gKiAoY2FsbGVycyBwb2xsIHRoZWlyIG93biByZWFkaW5lc3Mgc2lnbmFsKS4gUHJlZmVyIHtAbGluayBob3ZlckVsZW1lbnR9IC8ge0BsaW5rIHVuaG92ZXJFbGVtZW50fSBmb3JcbiAqIGVsZW1lbnQtcmVsYXRpdmUgbW92ZXMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB3ZWItY29udGVudHMgRElQIGNvb3JkaW5hdGVzIHRvIG1vdmUgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlTW91c2UocGFyYW1zOiBNb3ZlTW91c2VQYXJhbXMpOiB2b2lkIHtcbiAgZ2V0V2ViQ29udGVudHMoKS5zZW5kSW5wdXRFdmVudCh7IHR5cGU6ICdtb3VzZU1vdmUnLCB4OiBNYXRoLnJvdW5kKHBhcmFtcy54KSwgeTogTWF0aC5yb3VuZChwYXJhbXMueSkgfSk7XG59XG5cbi8qKlxuICogUHJlc3NlcyBhIHNpbmdsZSBrZXkgKG9wdGlvbmFsbHkgd2l0aCBtb2RpZmllcnMpIHVzaW5nICoqdHJ1c3RlZCoqIEVsZWN0cm9uIGtleWJvYXJkIGlucHV0LCBmaXJpbmcgdGhlXG4gKiBmdWxsIHJlYWwga2V5IHBpcGVsaW5lIFx1MjAxNCBga2V5ZG93bmAgXHUyMTkyIGBrZXlwcmVzc2AgXHUyMTkyIGBiZWZvcmVpbnB1dGAgXHUyMTkyIGBpbnB1dGAgXHUyMTkyIGBrZXl1cGAuXG4gKlxuICogSXQgaW5qZWN0cyBhIHRydXN0ZWQgYGtleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGAgc2VxdWVuY2UsIGRlbGl2ZXJlZCB0byB0aGUgd2luZG93J3MgRE9NLWZvY3VzZWRcbiAqIGVsZW1lbnQgXHUyMDE0IHVubGlrZSBgZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCguLi4pKWAsIHdoaWNoIGlzIHVudHJ1c3RlZCBhbmQgaWdub3JlZCBieSBDb2RlTWlycm9yLlxuICogVXNlIGl0IGZvciBzcGVjaWFsIGtleXMgKGAnRW50ZXInYCwgYCdFc2NhcGUnYCwgYCdUYWInYCwgYXJyb3cga2V5cykgYW5kIG1vZGlmaWVyIGNvbWJpbmF0aW9ucy4gSXQgZG9lc1xuICogKipub3QqKiBwb2xsIGZvciBhbnkgZWZmZWN0OyB0aGUgY2FsbGVyIGZvY3VzZXMgdGhlIHRhcmdldCBmaXJzdCwgdGhlbiBhd2FpdHMgdGhlIGV4cGVjdGVkIGVmZmVjdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGtleSB0byBwcmVzcyBhbmQgYW55IG1vZGlmaWVycyB0byBob2xkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlc3NLZXkocGFyYW1zOiBQcmVzc0tleVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGtleSwgbW9kaWZpZXJzID0gW10gfSA9IHBhcmFtcztcblxuICBjb25zdCBlbGVjdHJvbk1vZGlmaWVycyA9IHRvRWxlY3Ryb25Nb2RpZmllcnMobW9kaWZpZXJzKTtcbiAgY29uc3Qgd2ViQ29udGVudHMgPSBnZXRXZWJDb250ZW50cygpO1xuXG4gIC8vIEEgdHJ1c3RlZCBrZXkgcHJlc3MgaXMga2V5RG93biAtPiBjaGFyIC0+IGtleVVwOiB0aGUgZnVsbCByZWFsIGtleSBwaXBlbGluZS5cbiAgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnQoeyBrZXlDb2RlOiBrZXksIG1vZGlmaWVyczogZWxlY3Ryb25Nb2RpZmllcnMsIHR5cGU6ICdrZXlEb3duJyB9KTtcbiAgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnQoeyBrZXlDb2RlOiBrZXksIG1vZGlmaWVyczogZWxlY3Ryb25Nb2RpZmllcnMsIHR5cGU6ICdjaGFyJyB9KTtcbiAgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnQoeyBrZXlDb2RlOiBrZXksIG1vZGlmaWVyczogZWxlY3Ryb25Nb2RpZmllcnMsIHR5cGU6ICdrZXlVcCcgfSk7XG59XG5cbi8qKlxuICogVHlwZXMgdGV4dCBpbnRvIGEgQ29kZU1pcnJvciB7QGxpbmsgRWRpdG9yfSB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvbiBrZXlib2FyZCBpbnB1dC5cbiAqXG4gKiBUaGlzIGZvY3VzZXMgdGhlIGVkaXRvciAoY2FyZXQgdG8gZW5kKSBhbmQgcHJlc3NlcyBldmVyeSBjb2RlIHBvaW50IG9mIGB0ZXh0YCB2aWEge0BsaW5rIHByZXNzS2V5fSBcdTIwMTQgdGhlXG4gKiBzYW1lIHRydXN0ZWQgc2VxdWVuY2UgYSByZWFsIHVzZXIgcHJvZHVjZXMgXHUyMDE0IHNvIHRoZSB0ZXh0IHJlYWNoZXMgdGhlIGRvY3VtZW50ICoqb25seSBpZiB0aGUgZWRpdG9yXG4gKiBnZW51aW5lbHkgaG9sZHMgZm9jdXMqKi4gQWZ0ZXIgaW5qZWN0aW5nIHRoZSBrZXlzdHJva2VzIGl0IHBvbGxzIHVudGlsIHRoZSBkb2N1bWVudCByZWZsZWN0cyB0aGUgaW5wdXQsXG4gKiBvciBhIGJvdW5kZWQgdGltZW91dCBlbGFwc2VzICh0aGUgZXhwZWN0ZWQgb3V0Y29tZSB3aGVuIHRoZSBlZGl0b3IgaXMgcmVhZC1vbmx5IG9yIGZvY3VzIHdhcyBzdG9sZW4pLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUga2V5c3Ryb2tlcyBoYXZlIHNldHRsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0eXBlSW50b0VkaXRvcihwYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IEZPQ1VTX1NFVFRMRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMgPSAzMDA7XG5cbiAgY29uc3QgeyBlZGl0b3IsIHRleHQgfSA9IHBhcmFtcztcbiAgY29uc3QgdmFsdWVCZWZvcmVUeXBpbmcgPSBlZGl0b3IuZ2V0VmFsdWUoKTtcblxuICAvLyBGb2N1cyB0aGUgZWRpdG9yIGFuZCBwbGFjZSB0aGUgY2FyZXQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuXG4gIGVkaXRvci5mb2N1cygpO1xuICBjb25zdCBsYXN0TGluZSA9IGVkaXRvci5sYXN0TGluZSgpO1xuICBlZGl0b3Iuc2V0Q3Vyc29yKGxhc3RMaW5lLCBlZGl0b3IuZ2V0TGluZShsYXN0TGluZSkubGVuZ3RoKTtcblxuICAvLyBMZXQgYW55IGZvY3VzIHRyYXAgKGEgYHNldFRpbWVvdXQoMClgIHJlLWZvY3VzKSBmaXJlIGJlZm9yZSB0eXBpbmcsIHNvIHN0b2xlbiBmb2N1cyBpcyBkZXRlY3RlZC5cbiAgYXdhaXQgc2xlZXAoRk9DVVNfU0VUVExFX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG5cbiAgLy8gVHlwaW5nIGlzIHByZXNzaW5nIGVhY2ggY2hhcmFjdGVyIGtleSBpbiB0dXJuLlxuICBmb3IgKGNvbnN0IGNoYXIgb2YgdGV4dCkge1xuICAgIHByZXNzS2V5KHsga2V5OiBjaGFyIH0pO1xuICB9XG5cbiAgLy8gUG9sbCB1bnRpbCB0aGUgZG9jdW1lbnQgcmVmbGVjdHMgdGhlIGlucHV0IG9yIHRoZSB0aW1lb3V0IGVsYXBzZXMsIGluc3RlYWQgb2YgYSBmaXhlZCBzZXR0bGUuXG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gIHdoaWxlIChlZGl0b3IuZ2V0VmFsdWUoKSA9PT0gdmFsdWVCZWZvcmVUeXBpbmcgJiYgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IElOUFVUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKSB7XG4gICAgYXdhaXQgc2xlZXAoSU5QVVRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICB9XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIG1vdXNlIHBvaW50ZXIgdG8gYSBwb2ludCBqdXN0IG91dHNpZGUgYW4gZWxlbWVudCdzIGJvdW5kaW5nIGJveCB1c2luZyBhICoqdHJ1c3RlZCoqIEVsZWN0cm9uXG4gKiBwb2ludGVyIG1vdmUsIHRoZW4gcG9sbHMgdW50aWwgdGhlIGVsZW1lbnQgbm8gbG9uZ2VyIG1hdGNoZXMgYDpob3ZlcmAuXG4gKlxuICogVGhlIGludmVyc2Ugb2Yge0BsaW5rIGhvdmVyRWxlbWVudH0uIFdoZW4gYW4gZWxlbWVudCBzcGFucyB0aGUgZnVsbCB2aWV3cG9ydCAobm8gcG9pbnQgb3V0c2lkZSBpdHMgYm94IGlzXG4gKiByZWFjaGFibGUpLCB1c2Uge0BsaW5rIG1vdmVNb3VzZX0gZGlyZWN0bHkgdG8gbW92ZSB0aGUgcG9pbnRlciB0byBhIGtub3duIGVtcHR5IGNvb3JkaW5hdGUgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgcG9pbnRlciBhd2F5IGZyb20uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGVsZW1lbnQgbm8gbG9uZ2VyIG1hdGNoZXMgYDpob3ZlcmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bmhvdmVyRWxlbWVudChwYXJhbXM6IFVuaG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IE9VVFNJREVfT0ZGU0VUX0lOX1BJWEVMUyA9IDE7XG5cbiAgY29uc3QgeyBlbGVtZW50IH0gPSBwYXJhbXM7XG5cbiAgLy8gTW92ZSB0byBhIHBvaW50IGp1c3Qgb3V0c2lkZSB0aGUgZWxlbWVudCdzIGJveC4gV2hlbiBmbHVzaCBhZ2FpbnN0IHRoZSB2aWV3cG9ydCdzIGxlZnQgZWRnZSwgdXNlIGp1c3RcbiAgLy8gUGFzdCB0aGUgcmlnaHQgZWRnZS4gQSBmdWxsLXZpZXdwb3J0LXdpZHRoIGVsZW1lbnQgc2hvdWxkIHVzZSBgbW92ZU1vdXNlYCBkaXJlY3RseSBpbnN0ZWFkLlxuICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCA+PSBPVVRTSURFX09GRlNFVF9JTl9QSVhFTFMgPyByZWN0LmxlZnQgLSBPVVRTSURFX09GRlNFVF9JTl9QSVhFTFMgOiByZWN0LnJpZ2h0ICsgT1VUU0lERV9PRkZTRVRfSU5fUElYRUxTO1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIENFTlRFUl9ESVZJU09SO1xuICBtb3ZlTW91c2UoeyB4LCB5IH0pO1xuXG4gIC8vIFBvbGwgdW50aWwgdGhlIHJlYWwgYDpob3ZlcmAgc3RhdGUgaGFzIGFjdHVhbGx5IGNsZWFyZWQsIGluc3RlYWQgb2YgYSBmaXhlZCBzZXR0bGUuXG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gIHdoaWxlIChlbGVtZW50Lm1hdGNoZXMoJzpob3ZlcicpICYmIERhdGUubm93KCkgLSBzdGFydFRpbWUgPCBJTlBVVF9USU1FT1VUX0lOX01JTExJU0VDT05EUykge1xuICAgIGF3YWl0IHNsZWVwKElOUFVUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXZWJDb250ZW50cygpOiBDdXJyZW50V2ViQ29udGVudHMge1xuICByZXR1cm4gd2luZG93LmVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKTtcbn1cblxuLy8gTWFwcyBPYnNpZGlhbidzIGBNb2RpZmllcmAgbmFtZXMgdG8gRWxlY3Ryb24ncyBsb3dlcmNhc2UgYHNlbmRJbnB1dEV2ZW50YCBtb2RpZmllciBuYW1lcy5cbi8vIFNoYXJlZCBieSBldmVyeSB0cnVzdGVkLWlucHV0IGhlbHBlciwgc28gYSBrZXkgcHJlc3MgYW5kIGEgY2xpY2sgY2Fubm90IGRpc2FncmVlIG9uIGAnTW9kJ2AuXG5mdW5jdGlvbiB0b0VsZWN0cm9uTW9kaWZpZXJzKG1vZGlmaWVyczogcmVhZG9ubHkgTW9kaWZpZXJbXSk6IEVsZWN0cm9uTW9kaWZpZXJbXSB7XG4gIC8vICdNb2QnIGlzIE9ic2lkaWFuJ3MgcGxhdGZvcm0tYWdub3N0aWMgbW9kaWZpZXI6IENtZCAobWV0YSkgb24gbWFjT1MsIEN0cmwgZWxzZXdoZXJlLlxuICBjb25zdCBpc01hY09TID0gUGxhdGZvcm0uaXNNYWNPUztcblxuICByZXR1cm4gbW9kaWZpZXJzLm1hcCgobW9kaWZpZXIpOiBFbGVjdHJvbk1vZGlmaWVyID0+IHtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICBjYXNlICdBbHQnOiB7XG4gICAgICAgIHJldHVybiAnYWx0JztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0N0cmwnOiB7XG4gICAgICAgIHJldHVybiAnY29udHJvbCc7XG4gICAgICB9XG4gICAgICBjYXNlICdNZXRhJzoge1xuICAgICAgICByZXR1cm4gJ21ldGEnO1xuICAgICAgfVxuICAgICAgY2FzZSAnTW9kJzoge1xuICAgICAgICByZXR1cm4gaXNNYWNPUyA/ICdtZXRhJyA6ICdjb250cm9sJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1NoaWZ0Jzoge1xuICAgICAgICByZXR1cm4gJ3NoaWZ0JztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydE5ldmVyKG1vZGlmaWVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEsc0JBQXlCO0FBRXpCLHlCQUE0QjtBQXdKNUIsTUFBTSxzQ0FBc0M7QUFNNUMsTUFBTSxnQ0FBZ0M7QUFLdEMsTUFBTSxpQkFBaUI7QUFLdkIsTUFBTSxxQkFBcUI7QUFZcEIsU0FBUyxhQUFhLFFBQWtDO0FBQzdELFFBQU0sRUFBRSxTQUFTLFFBQVEsU0FBUyxZQUFZ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
280
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2Rlc2t0b3AtdHJ1c3RlZC1pbnB1dC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlc2t0b3Atb25seSB0cnVzdGVkIGlucHV0IGhlbHBlcnMgdGhhdCBkcml2ZSB0aGUgcmVhbCBFbGVjdHJvbiByZW5kZXJlciB2aWFcbiAqIGB3ZWJDb250ZW50cy5zZW5kSW5wdXRFdmVudGAsIHNvIGtleXN0cm9rZXMsIHBvaW50ZXIgbW92ZXMgYW5kIGNsaWNrcyBmbG93IHRocm91Z2ggdGhlIHNhbWUgdHJ1c3RlZFxuICogaW5wdXQgcGlwZWxpbmUgYSByZWFsIHVzZXIgcHJvZHVjZXMgKHVubGlrZSB1bnRydXN0ZWQgYGRpc3BhdGNoRXZlbnRgLCB3aGljaCBDb2RlTWlycm9yLCB0aGUgQ1NTXG4gKiBgOmhvdmVyYCBlbmdpbmUgYW5kIGV2ZXJ5IGBlLmlzVHJ1c3RlZGAgZ3VhcmQgaW4gT2JzaWRpYW4gaWdub3JlKS5cbiAqXG4gKiBUaGVzZSBhcmUgdGhlIGltcG9ydGFibGUtbW9kdWxlIHR3aW5zIG9mIHRoZSBiYXNlIGhlbHBlcnMgdGhlIGBvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nYCBoYXJuZXNzXG4gKiBzZWVkcyBpbnRvIHRoZSBgbGliYCBiYWc7IHRoZSB0d28gY29waWVzIGFyZSBrZXB0IGJlaGF2aW9yYWxseSBpbiBzeW5jIGJ5IGhhbmQgKHNlZSB0aGUgcHJvamVjdFxuICogYENMQVVERS5tZGApLiBEZXNrdG9wLW9ubHk6IHRoZXkgZGVwZW5kIG9uIGB3aW5kb3cuZWxlY3Ryb25gLlxuICpcbiAqIFRoaXMgaXMgdGhlICoqZGVza3RvcCBhcm0qKi4gSW1wb3J0IGl0IGRpcmVjdGx5IG9ubHkgYXMgYSBkZWxpYmVyYXRlIHBsYXRmb3JtIGNvbW1pdG1lbnQ7IHRoZVxuICogY3Jvc3MtcGxhdGZvcm0gZW50cnkgcG9pbnQgaXMgdGhlIHtAbGluayAuL3RydXN0ZWQtaW5wdXQudHMgfCB0cnVzdGVkLWlucHV0fSBmYWNhZGUsIHdoaWNoIGRpc3BhdGNoZXNcbiAqIHRvIHRoaXMgbW9kdWxlIG9yIHRvIHtAbGluayAuL21vYmlsZS10cnVzdGVkLWlucHV0LnRzIHwgbW9iaWxlLXRydXN0ZWQtaW5wdXR9IHBlciBjYWxsLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRWRpdG9yLFxuICBNb2RpZmllclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBhc3NlcnROZXZlciB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY2xpY2tFbGVtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlja0VsZW1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1vdXNlIGJ1dHRvbiB0byBjbGljayB3aXRoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xlZnQnYFxuICAgKi9cbiAgcmVhZG9ubHkgYnV0dG9uPzogTW91c2VCdXR0b247XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGNsaWNrLiBUaGUgcG9pbnRlciBpcyBtb3ZlZCB0byBpdHMgY2VudGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllciBrZXlzIHRvIGhvbGQsIHVzaW5nIE9ic2lkaWFuJ3Mge0BsaW5rIE1vZGlmaWVyfSBuYW1lcy4gYCdNb2QnYCByZXNvbHZlcyBwZXItcGxhdGZvcm1cbiAgICogKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgW11gXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM/OiByZWFkb25seSBNb2RpZmllcltdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBjbGlja01vdXNlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlja01vdXNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBtb3VzZSBidXR0b24gdG8gY2xpY2sgd2l0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdsZWZ0J2BcbiAgICovXG4gIHJlYWRvbmx5IGJ1dHRvbj86IE1vdXNlQnV0dG9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXIga2V5cyB0byBob2xkLCB1c2luZyBPYnNpZGlhbidzIHtAbGluayBNb2RpZmllcn0gbmFtZXMuIGAnTW9kJ2AgcmVzb2x2ZXMgcGVyLXBsYXRmb3JtXG4gICAqIChDbWQgb24gbWFjT1MsIEN0cmwgZWxzZXdoZXJlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFtdYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kaWZpZXJzPzogcmVhZG9ubHkgTW9kaWZpZXJbXTtcblxuICAvKipcbiAgICogVGhlIHggY29vcmRpbmF0ZSAod2ViLWNvbnRlbnRzIERJUCkgdG8gY2xpY2sgYXQuXG4gICAqL1xuICByZWFkb25seSB4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB5IGNvb3JkaW5hdGUgKHdlYi1jb250ZW50cyBESVApIHRvIGNsaWNrIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBob3ZlckVsZW1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdmVyRWxlbWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBob3Zlci4gVGhlIHBvaW50ZXIgaXMgbW92ZWQgdG8gaXRzIGNlbnRlci5cbiAgICovXG4gIHJlYWRvbmx5IGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xufVxuXG4vKipcbiAqIFRoZSBtb3VzZSBidXR0b24gYSB0cnVzdGVkIGNsaWNrIHByZXNzZXMsIGluIEVsZWN0cm9uJ3MgYHNlbmRJbnB1dEV2ZW50YCBzcGVsbGluZy5cbiAqL1xuZXhwb3J0IHR5cGUgTW91c2VCdXR0b24gPSBOb25OdWxsYWJsZTxFbGVjdHJvbk1vdXNlSW5wdXRFdmVudFsnYnV0dG9uJ10+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBtb3ZlTW91c2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vdmVNb3VzZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgeSBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBwcmVzc0tleX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlc3NLZXlQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGtleSB0byBwcmVzcywgZ2l2ZW4gYXMgYW4gRWxlY3Ryb24gQWNjZWxlcmF0b3Iga2V5IG5hbWUgXHUyMDE0IGUuZy4gYCdFbnRlcidgLCBgJ0VzY2FwZSdgLCBgJ1RhYidgLFxuICAgKiBhbiBhcnJvdyBrZXksIG9yIGEgcHJpbnRhYmxlIGNoYXJhY3RlciAoYCdhJ2AsIGAnMSdgKS5cbiAgICovXG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZpZXIga2V5cyB0byBob2xkLCB1c2luZyBPYnNpZGlhbidzIHtAbGluayBNb2RpZmllcn0gbmFtZXMuIGAnTW9kJ2AgcmVzb2x2ZXMgcGVyLXBsYXRmb3JtXG4gICAqIChDbWQgb24gbWFjT1MsIEN0cmwgZWxzZXdoZXJlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYFtdYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kaWZpZXJzPzogcmVhZG9ubHkgTW9kaWZpZXJbXTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdHlwZUludG9FZGl0b3J9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVJbnRvRWRpdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBlZGl0b3IgdG8gdHlwZSBpbnRvLiBJdCBpcyBmb2N1c2VkIChjYXJldCBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudCkgYmVmb3JlIHRoZSBrZXlzdHJva2VzXG4gICAqIGFyZSBpbmplY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvcjogRWRpdG9yO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0byB0eXBlLiBFYWNoIGNvZGUgcG9pbnQgaXMgcHJlc3NlZCB2aWEge0BsaW5rIHByZXNzS2V5fSwgZXhhY3RseSBhcyBhIHJlYWwgdXNlciB0eXBpbmcuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHVuaG92ZXJFbGVtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmhvdmVyRWxlbWVudFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB0byBtb3ZlIHRoZSBwb2ludGVyIGF3YXkgZnJvbS4gVGhlIHBvaW50ZXIgaXMgbW92ZWQgdG8gYSBwb2ludCBqdXN0IG91dHNpZGUgaXRzIGJvdW5kaW5nXG4gICAqIGJveC5cbiAgICovXG4gIHJlYWRvbmx5IGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xufVxuXG50eXBlIEN1cnJlbnRXZWJDb250ZW50cyA9IFJldHVyblR5cGU8V2luZG93WydlbGVjdHJvbiddWydyZW1vdGUnXVsnZ2V0Q3VycmVudFdlYkNvbnRlbnRzJ10+O1xuXG4vLyBUaGUgRWxlY3Ryb24gbW9kaWZpZXIta2V5IG5hbWVzIGBzZW5kSW5wdXRFdmVudGAgYWNjZXB0cyAoZS5nLiAnbWV0YScsICdjb250cm9sJywgJ3NoaWZ0JywgJ2FsdCcpLlxuLy8gVGhlIHR5cGUgaXMgZGVyaXZlZCBmcm9tIHRoZSB3ZWItY29udGVudHMgdHlwZSBzbyBpdCBzdGF5cyBpbiBzeW5jIHdpdGggdGhlIEVsZWN0cm9uIHR5cGluZ3MuXG50eXBlIEVsZWN0cm9uTW9kaWZpZXIgPSBOb25OdWxsYWJsZTxQYXJhbWV0ZXJzPEN1cnJlbnRXZWJDb250ZW50c1snc2VuZElucHV0RXZlbnQnXT5bMF1bJ21vZGlmaWVycyddPltudW1iZXJdO1xuXG4vLyBUaGUgcG9pbnRlciB2YXJpYW50IG9mIHRoZSBgc2VuZElucHV0RXZlbnRgIHVuaW9uLCBwaWNrZWQgb3V0IGJ5IHRoZSBjb29yZGluYXRlcyBvbmx5IGl0IGNhcnJpZXMuXG4vLyBEZXJpdmVkIGZyb20gdGhlIHdlYi1jb250ZW50cyB0eXBlIHNvIGl0IHN0YXlzIGluIHN5bmMgd2l0aCB0aGUgRWxlY3Ryb24gdHlwaW5ncy5cbnR5cGUgRWxlY3Ryb25Nb3VzZUlucHV0RXZlbnQgPSBFeHRyYWN0PFBhcmFtZXRlcnM8Q3VycmVudFdlYkNvbnRlbnRzWydzZW5kSW5wdXRFdmVudCddPlswXSwgUG9pbnRlckNvb3JkaW5hdGVzPjtcblxuLy8gVGhlIHNoYXBlIHRoYXQgZGlzY3JpbWluYXRlcyBhIHBvaW50ZXIgYHNlbmRJbnB1dEV2ZW50YCBwYXlsb2FkIGZyb20gYSBrZXlib2FyZCBvbmUuXG5pbnRlcmZhY2UgUG9pbnRlckNvb3JkaW5hdGVzIHtcbiAgeDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEludGVydmFsIChpbiBtcykgYmV0d2VlbiBwb2xscyB3aGlsZSB3YWl0aW5nIGZvciBhIHRydXN0ZWQgaW5wdXQgZXZlbnQgdG8gdGFrZSBlZmZlY3QgKHRoZSBlZGl0b3JcbiAqIGRvY3VtZW50IHVwZGF0ZXMsIG9yIGFuIGVsZW1lbnQncyBgOmhvdmVyYCBzdGF0ZSBmbGlwcykuXG4gKi9cbmNvbnN0IElOUFVUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTA7XG5cbi8qKlxuICogTWF4aW11bSB0aW1lIChpbiBtcykgdG8gd2FpdCBmb3IgYSB0cnVzdGVkIGlucHV0IGV2ZW50IHRvIHRha2UgZWZmZWN0IGJlZm9yZSBnaXZpbmcgdXAgKHRoZSBleHBlY3RlZFxuICogb3V0Y29tZSB3aGVuIHRoZSBpbnB1dCBpcyByZWplY3RlZCBcdTIwMTQgZS5nLiBhIHJlYWQtb25seSBlZGl0b3IpLlxuICovXG5jb25zdCBJTlBVVF9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogRGl2aXNvciB1c2VkIHRvIGZpbmQgdGhlIGNlbnRlciBvZiBhbiBlbGVtZW50J3MgYm91bmRpbmcgYm94LlxuICovXG5jb25zdCBDRU5URVJfRElWSVNPUiA9IDI7XG5cbi8qKlxuICogVGhlIGBjbGlja0NvdW50YCBhIHNpbmdsZSAobm9uLWRvdWJsZSkgdHJ1c3RlZCBjbGljayBjYXJyaWVzLlxuICovXG5jb25zdCBTSU5HTEVfQ0xJQ0tfQ09VTlQgPSAxO1xuXG4vKipcbiAqIENsaWNrcyB0aGUgY2VudGVyIG9mIGFuIGVsZW1lbnQgdXNpbmcgKip0cnVzdGVkKiogRWxlY3Ryb24gcG9pbnRlciBpbnB1dC5cbiAqXG4gKiBUaGUgZWxlbWVudC1yZWxhdGl2ZSBjb3VudGVycGFydCBvZiB7QGxpbmsgY2xpY2tNb3VzZX0sIG1pcnJvcmluZyB0aGUge0BsaW5rIG1vdmVNb3VzZX0gL1xuICoge0BsaW5rIGhvdmVyRWxlbWVudH0gc3BsaXQuIFVzZSB7QGxpbmsgY2xpY2tNb3VzZX0gZGlyZWN0bHkgd2hlbiB0aGUgcG9pbnQgdG8gY2xpY2sgaXMgKipub3QqKiB0aGVcbiAqIGVsZW1lbnQncyBjZW50ZXIgXHUyMDE0IHRoZSBtYXJrZG93biBlZGl0b3IncyBtYXJnaW4sIGZvciBpbnN0YW5jZSwgbGllcyBpbnNpZGUgYGNtLnNjcm9sbERPTWAgYnV0IG91dHNpZGVcbiAqIGAuY20tc2l6ZXJgLCBzbyBubyBlbGVtZW50J3MgY2VudGVyIGxhbmRzIG9uIGl0LlxuICpcbiAqICoqTXVzdCBiZSBhd2FpdGVkLioqIE5vdGhpbmcgaGVyZSBuZWVkcyB0byB3YWl0LCBidXQgdGhlIGNyb3NzLXBsYXRmb3JtIHR3aW5zIGRvIFx1MjAxNCBvbiBtb2JpbGUgdGhlXG4gKiBpbmplY3Rpb24gaXMgYSByb3VuZC10cmlwIHRvIHRoZSBob3N0LCBiZWNhdXNlIHRoZSByZW5kZXJlciBjYW5ub3QgcHJvZHVjZSBhIHRydXN0ZWQgZXZlbnQgaXRzZWxmIFx1MjAxNCBzb1xuICogdGhlIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSBvbiBib3RoIHBsYXRmb3JtcyBhbmQgYSBjYWxsZXIgbmV2ZXIgcmV3cml0ZXMgaXRzIGBhd2FpdGBzIHdoZW4gaXQgZ3Jvd3MgYVxuICogbW9iaWxlIGxhbmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIGNsaWNrLCB0aGUgYnV0dG9uIHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNsaWNrIGhhcyBiZWVuIGluamVjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xpY2tFbGVtZW50KHBhcmFtczogQ2xpY2tFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYnV0dG9uID0gJ2xlZnQnLCBlbGVtZW50LCBtb2RpZmllcnMgPSBbXSB9ID0gcGFyYW1zO1xuXG4gIC8vIFZpZXdwb3J0IGNvb3JkcyBlcXVhbCB3ZWItY29udGVudHMgRElQIGNvb3JkcyBmb3IgdGhlIGZ1bGwtd2luZG93IGBCcm93c2VyV2luZG93YC5cbiAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGF3YWl0IGNsaWNrTW91c2Uoe1xuICAgIGJ1dHRvbixcbiAgICBtb2RpZmllcnMsXG4gICAgeDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIENFTlRFUl9ESVZJU09SLFxuICAgIHk6IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyBDRU5URVJfRElWSVNPUlxuICB9KTtcbn1cblxuLyoqXG4gKiBDbGlja3MgYXQgdGhlIGdpdmVuIHdlYi1jb250ZW50cyBjb29yZGluYXRlcyB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvbiBwb2ludGVyIGlucHV0LCBzbyBDaHJvbWl1bVxuICogc3ludGhlc2l6ZXMgYSByZWFsIGBjbGlja2AgKG9yIGBjb250ZXh0bWVudWAsIGZvciB0aGUgcmlnaHQgYnV0dG9uKSB3aXRoIGBpc1RydXN0ZWQgPT09IHRydWVgLlxuICpcbiAqIFRoaXMgaXMgd2hhdCBgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycpKWAgY2Fubm90IGRvOiBPYnNpZGlhbiBhbmQgQ29kZU1pcnJvciBnYXRlXG4gKiBvbiBgaXNUcnVzdGVkYCwgc28gYSBkaXNwYXRjaGVkIGV2ZW50IHNpbGVudGx5IGV4ZXJjaXNlcyBub3RoaW5nIHdoaWxlIHRoZSB0ZXN0IHN0aWxsIHBhc3Nlcy4gT2JzaWRpYW5cbiAqIDEuMTMuNydzIG1hcmtkb3duIHZpZXdwb3J0IChtYXJnaW4pIG1lbnUsIGZvciBleGFtcGxlLCBvcGVucyBmcm9tXG4gKiBgY20uc2Nyb2xsRE9NLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKGUpID0+IHsgaWYgKCFlLmRlZmF1bHRQcmV2ZW50ZWQgJiYgZS5pc1RydXN0ZWQgJiYgXHUyMDI2KSB9KWBcbiAqIFx1MjAxNCBhIGRpc3BhdGNoZWQgYGNvbnRleHRtZW51YCBuZXZlciBnZXRzIHBhc3QgdGhhdCBjaGVjay5cbiAqXG4gKiBJdCBpcyB0aGUgbG93LWxldmVsIHByaW1pdGl2ZTogYSBzaW5nbGUgdHJ1c3RlZCBgbW91c2VNb3ZlYCBcdTIxOTIgYG1vdXNlRG93bmAgXHUyMTkyIGBtb3VzZVVwYCBhdCBvbmUgcG9pbnQsXG4gKiB3aXRoIG5vIHdhaXRpbmcgZm9yIGFueSBlZmZlY3QgKGNhbGxlcnMgcG9sbCB0aGVpciBvd24gcmVhZGluZXNzIHNpZ25hbCkuIFRoZSBsZWFkaW5nIG1vdmUgaXMgd2hhdCBwdXRzXG4gKiB0aGUgcG9pbnRlciBvdmVyIHRoZSBoaXQtdGVzdCB0YXJnZXQgYmVmb3JlIHRoZSBidXR0b24gZ29lcyBkb3duLiBQcmVmZXIge0BsaW5rIGNsaWNrRWxlbWVudH0gZm9yXG4gKiBlbGVtZW50LXJlbGF0aXZlIGNsaWNrcy5cbiAqXG4gKiAqKk11c3QgYmUgYXdhaXRlZCoqIFx1MjAxNCBzZWUge0BsaW5rIGNsaWNrRWxlbWVudH0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB3ZWItY29udGVudHMgRElQIGNvb3JkaW5hdGVzIHRvIGNsaWNrIGF0LCB0aGUgYnV0dG9uIHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvXG4gKiBob2xkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBjbGljayBoYXMgYmVlbiBpbmplY3RlZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXF1aXJlLWF3YWl0IC0tIFRoZSBgYXN5bmNgIGlzIHRoZSBjcm9zcy1wbGF0Zm9ybSBjb250cmFjdCwgbm90IGFuIGltcGxlbWVudGF0aW9uIG5lZWQ6IHRoZSBtb2JpbGUgdHdpbiBhd2FpdHMgYSBob3N0IHJvdW5kLXRyaXAsIHRoaXMgb25lIGhhcyBub3RoaW5nIHRvIGF3YWl0LlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsaWNrTW91c2UocGFyYW1zOiBDbGlja01vdXNlUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYnV0dG9uID0gJ2xlZnQnLCBtb2RpZmllcnMgPSBbXSwgeCwgeSB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGVsZWN0cm9uTW9kaWZpZXJzID0gdG9FbGVjdHJvbk1vZGlmaWVycyhtb2RpZmllcnMpO1xuICBjb25zdCByb3VuZGVkWCA9IE1hdGgucm91bmQoeCk7XG4gIGNvbnN0IHJvdW5kZWRZID0gTWF0aC5yb3VuZCh5KTtcbiAgY29uc3Qgd2ViQ29udGVudHMgPSBnZXRXZWJDb250ZW50cygpO1xuXG4gIHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50KHsgbW9kaWZpZXJzOiBlbGVjdHJvbk1vZGlmaWVycywgdHlwZTogJ21vdXNlTW92ZScsIHg6IHJvdW5kZWRYLCB5OiByb3VuZGVkWSB9KTtcbiAgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnQoe1xuICAgIGJ1dHRvbixcbiAgICBjbGlja0NvdW50OiBTSU5HTEVfQ0xJQ0tfQ09VTlQsXG4gICAgbW9kaWZpZXJzOiBlbGVjdHJvbk1vZGlmaWVycyxcbiAgICB0eXBlOiAnbW91c2VEb3duJyxcbiAgICB4OiByb3VuZGVkWCxcbiAgICB5OiByb3VuZGVkWVxuICB9KTtcbiAgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnQoe1xuICAgIGJ1dHRvbixcbiAgICBjbGlja0NvdW50OiBTSU5HTEVfQ0xJQ0tfQ09VTlQsXG4gICAgbW9kaWZpZXJzOiBlbGVjdHJvbk1vZGlmaWVycyxcbiAgICB0eXBlOiAnbW91c2VVcCcsXG4gICAgeDogcm91bmRlZFgsXG4gICAgeTogcm91bmRlZFlcbiAgfSk7XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIG1vdXNlIHBvaW50ZXIgdG8gdGhlIGNlbnRlciBvZiBhbiBlbGVtZW50IHVzaW5nICoqdHJ1c3RlZCoqIEVsZWN0cm9uIHBvaW50ZXIgaW5wdXQsIHRoZW4gcG9sbHNcbiAqIHVudGlsIHRoZSBlbGVtZW50IGFjdHVhbGx5IG1hdGNoZXMgYDpob3ZlcmAuXG4gKlxuICogQmVjYXVzZSB0aGUgbW92ZSBpcyB0cnVzdGVkLCB0aGUgcmVhbCBgOmhvdmVyYCBzdGF0ZSB0YWtlcyBlZmZlY3QgaW4gdGhlIENTUyBlbmdpbmUgXHUyMDE0IHVubGlrZVxuICogYGRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlb3ZlcicpKWAsIHdoaWNoIGlzIHVudHJ1c3RlZCBhbmQgbmV2ZXIgc2V0cyBgOmhvdmVyYC4gSXQgdGFyZ2V0cyB0aGVcbiAqIHNpbmdsZSB3aW5kb3cncyAqKmdsb2JhbCoqIHBvaW50ZXIsIHNvIG9ubHkgb25lIGVsZW1lbnQgaXMgaG92ZXJlZCBhdCBhIHRpbWUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIGhvdmVyLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBlbGVtZW50IG1hdGNoZXMgYDpob3ZlcmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBob3ZlckVsZW1lbnQocGFyYW1zOiBIb3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBlbGVtZW50IH0gPSBwYXJhbXM7XG5cbiAgLy8gVmlld3BvcnQgY29vcmRzIGVxdWFsIHdlYi1jb250ZW50cyBESVAgY29vcmRzIGZvciB0aGUgZnVsbC13aW5kb3cgYEJyb3dzZXJXaW5kb3dgLlxuICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgYXdhaXQgbW92ZU1vdXNlKHsgeDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIENFTlRFUl9ESVZJU09SLCB5OiByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gQ0VOVEVSX0RJVklTT1IgfSk7XG5cbiAgLy8gUG9sbCB1bnRpbCB0aGUgcmVhbCBgOmhvdmVyYCBzdGF0ZSBoYXMgYWN0dWFsbHkgdGFrZW4sIGluc3RlYWQgb2YgYSBmaXhlZCBzZXR0bGUuXG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gIHdoaWxlICghZWxlbWVudC5tYXRjaGVzKCc6aG92ZXInKSAmJiBEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgSU5QVVRfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpIHtcbiAgICBhd2FpdCBzbGVlcChJTlBVVF9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gIH1cbn1cblxuLyoqXG4gKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byB0aGUgZ2l2ZW4gd2ViLWNvbnRlbnRzIGNvb3JkaW5hdGVzIHVzaW5nIGEgKip0cnVzdGVkKiogRWxlY3Ryb24gcG9pbnRlciBtb3ZlLlxuICpcbiAqIEEgdHJ1c3RlZCBtb3ZlIHVwZGF0ZXMgdGhlIHJlYWwgcG9pbnRlciBzdGF0ZSBpbiB0aGUgQ1NTIGVuZ2luZSwgc28gYDpob3ZlcmAgcnVsZXMgZ2VudWluZWx5IGFwcGx5LiBUaGlzXG4gKiBpcyB0aGUgbG93LWxldmVsIHByaW1pdGl2ZTogaXQgcGVyZm9ybXMgYSBzaW5nbGUgbW92ZSBhbmQgZG9lcyAqKm5vdCoqIHdhaXQgZm9yIGFueSBzdGF0ZSB0byBzZXR0bGVcbiAqIChjYWxsZXJzIHBvbGwgdGhlaXIgb3duIHJlYWRpbmVzcyBzaWduYWwpLiBQcmVmZXIge0BsaW5rIGhvdmVyRWxlbWVudH0gLyB7QGxpbmsgdW5ob3ZlckVsZW1lbnR9IGZvclxuICogZWxlbWVudC1yZWxhdGl2ZSBtb3Zlcy5cbiAqXG4gKiAqKk11c3QgYmUgYXdhaXRlZCoqIFx1MjAxNCBzZWUge0BsaW5rIGNsaWNrRWxlbWVudH0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB3ZWItY29udGVudHMgRElQIGNvb3JkaW5hdGVzIHRvIG1vdmUgdG8uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIG1vdmUgaGFzIGJlZW4gaW5qZWN0ZWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVxdWlyZS1hd2FpdCAtLSBUaGUgYGFzeW5jYCBpcyB0aGUgY3Jvc3MtcGxhdGZvcm0gY29udHJhY3QsIG5vdCBhbiBpbXBsZW1lbnRhdGlvbiBuZWVkOiB0aGUgbW9iaWxlIHR3aW4gYXdhaXRzIGEgaG9zdCByb3VuZC10cmlwLCB0aGlzIG9uZSBoYXMgbm90aGluZyB0byBhd2FpdC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtb3ZlTW91c2UocGFyYW1zOiBNb3ZlTW91c2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgZ2V0V2ViQ29udGVudHMoKS5zZW5kSW5wdXRFdmVudCh7IHR5cGU6ICdtb3VzZU1vdmUnLCB4OiBNYXRoLnJvdW5kKHBhcmFtcy54KSwgeTogTWF0aC5yb3VuZChwYXJhbXMueSkgfSk7XG59XG5cbi8qKlxuICogUHJlc3NlcyBhIHNpbmdsZSBrZXkgKG9wdGlvbmFsbHkgd2l0aCBtb2RpZmllcnMpIHVzaW5nICoqdHJ1c3RlZCoqIEVsZWN0cm9uIGtleWJvYXJkIGlucHV0LCBmaXJpbmcgdGhlXG4gKiBmdWxsIHJlYWwga2V5IHBpcGVsaW5lIFx1MjAxNCBga2V5ZG93bmAgXHUyMTkyIGBrZXlwcmVzc2AgXHUyMTkyIGBiZWZvcmVpbnB1dGAgXHUyMTkyIGBpbnB1dGAgXHUyMTkyIGBrZXl1cGAuXG4gKlxuICogSXQgaW5qZWN0cyBhIHRydXN0ZWQgYGtleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGAgc2VxdWVuY2UsIGRlbGl2ZXJlZCB0byB0aGUgd2luZG93J3MgRE9NLWZvY3VzZWRcbiAqIGVsZW1lbnQgXHUyMDE0IHVubGlrZSBgZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCguLi4pKWAsIHdoaWNoIGlzIHVudHJ1c3RlZCBhbmQgaWdub3JlZCBieSBDb2RlTWlycm9yLlxuICogVXNlIGl0IGZvciBzcGVjaWFsIGtleXMgKGAnRW50ZXInYCwgYCdFc2NhcGUnYCwgYCdUYWInYCwgYXJyb3cga2V5cykgYW5kIG1vZGlmaWVyIGNvbWJpbmF0aW9ucy4gSXQgZG9lc1xuICogKipub3QqKiBwb2xsIGZvciBhbnkgZWZmZWN0OyB0aGUgY2FsbGVyIGZvY3VzZXMgdGhlIHRhcmdldCBmaXJzdCwgdGhlbiBhd2FpdHMgdGhlIGV4cGVjdGVkIGVmZmVjdC5cbiAqXG4gKiAqKk11c3QgYmUgYXdhaXRlZCoqIFx1MjAxNCBzZWUge0BsaW5rIGNsaWNrRWxlbWVudH0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBrZXkgdG8gcHJlc3MgYW5kIGFueSBtb2RpZmllcnMgdG8gaG9sZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUga2V5IHByZXNzIGhhcyBiZWVuIGluamVjdGVkLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3JlcXVpcmUtYXdhaXQgLS0gVGhlIGBhc3luY2AgaXMgdGhlIGNyb3NzLXBsYXRmb3JtIGNvbnRyYWN0LCBub3QgYW4gaW1wbGVtZW50YXRpb24gbmVlZDogdGhlIG1vYmlsZSB0d2luIGF3YWl0cyBhIGhvc3Qgcm91bmQtdHJpcCwgdGhpcyBvbmUgaGFzIG5vdGhpbmcgdG8gYXdhaXQuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJlc3NLZXkocGFyYW1zOiBQcmVzc0tleVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGtleSwgbW9kaWZpZXJzID0gW10gfSA9IHBhcmFtcztcblxuICBjb25zdCBlbGVjdHJvbk1vZGlmaWVycyA9IHRvRWxlY3Ryb25Nb2RpZmllcnMobW9kaWZpZXJzKTtcbiAgY29uc3Qgd2ViQ29udGVudHMgPSBnZXRXZWJDb250ZW50cygpO1xuXG4gIC8vIEEgdHJ1c3RlZCBrZXkgcHJlc3MgaXMga2V5RG93biAtPiBjaGFyIC0+IGtleVVwOiB0aGUgZnVsbCByZWFsIGtleSBwaXBlbGluZS5cbiAgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnQoeyBrZXlDb2RlOiBrZXksIG1vZGlmaWVyczogZWxlY3Ryb25Nb2RpZmllcnMsIHR5cGU6ICdrZXlEb3duJyB9KTtcbiAgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnQoeyBrZXlDb2RlOiBrZXksIG1vZGlmaWVyczogZWxlY3Ryb25Nb2RpZmllcnMsIHR5cGU6ICdjaGFyJyB9KTtcbiAgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnQoeyBrZXlDb2RlOiBrZXksIG1vZGlmaWVyczogZWxlY3Ryb25Nb2RpZmllcnMsIHR5cGU6ICdrZXlVcCcgfSk7XG59XG5cbi8qKlxuICogVHlwZXMgdGV4dCBpbnRvIGEgQ29kZU1pcnJvciB7QGxpbmsgRWRpdG9yfSB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvbiBrZXlib2FyZCBpbnB1dC5cbiAqXG4gKiBUaGlzIGZvY3VzZXMgdGhlIGVkaXRvciAoY2FyZXQgdG8gZW5kKSBhbmQgcHJlc3NlcyBldmVyeSBjb2RlIHBvaW50IG9mIGB0ZXh0YCB2aWEge0BsaW5rIHByZXNzS2V5fSBcdTIwMTQgdGhlXG4gKiBzYW1lIHRydXN0ZWQgc2VxdWVuY2UgYSByZWFsIHVzZXIgcHJvZHVjZXMgXHUyMDE0IHNvIHRoZSB0ZXh0IHJlYWNoZXMgdGhlIGRvY3VtZW50ICoqb25seSBpZiB0aGUgZWRpdG9yXG4gKiBnZW51aW5lbHkgaG9sZHMgZm9jdXMqKi4gQWZ0ZXIgaW5qZWN0aW5nIHRoZSBrZXlzdHJva2VzIGl0IHBvbGxzIHVudGlsIHRoZSBkb2N1bWVudCByZWZsZWN0cyB0aGUgaW5wdXQsXG4gKiBvciBhIGJvdW5kZWQgdGltZW91dCBlbGFwc2VzICh0aGUgZXhwZWN0ZWQgb3V0Y29tZSB3aGVuIHRoZSBlZGl0b3IgaXMgcmVhZC1vbmx5IG9yIGZvY3VzIHdhcyBzdG9sZW4pLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUga2V5c3Ryb2tlcyBoYXZlIHNldHRsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0eXBlSW50b0VkaXRvcihwYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IEZPQ1VTX1NFVFRMRV9ERUxBWV9JTl9NSUxMSVNFQ09ORFMgPSAzMDA7XG5cbiAgY29uc3QgeyBlZGl0b3IsIHRleHQgfSA9IHBhcmFtcztcbiAgY29uc3QgdmFsdWVCZWZvcmVUeXBpbmcgPSBlZGl0b3IuZ2V0VmFsdWUoKTtcblxuICAvLyBGb2N1cyB0aGUgZWRpdG9yIGFuZCBwbGFjZSB0aGUgY2FyZXQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuXG4gIGVkaXRvci5mb2N1cygpO1xuICBjb25zdCBsYXN0TGluZSA9IGVkaXRvci5sYXN0TGluZSgpO1xuICBlZGl0b3Iuc2V0Q3Vyc29yKGxhc3RMaW5lLCBlZGl0b3IuZ2V0TGluZShsYXN0TGluZSkubGVuZ3RoKTtcblxuICAvLyBMZXQgYW55IGZvY3VzIHRyYXAgKGEgYHNldFRpbWVvdXQoMClgIHJlLWZvY3VzKSBmaXJlIGJlZm9yZSB0eXBpbmcsIHNvIHN0b2xlbiBmb2N1cyBpcyBkZXRlY3RlZC5cbiAgYXdhaXQgc2xlZXAoRk9DVVNfU0VUVExFX0RFTEFZX0lOX01JTExJU0VDT05EUyk7XG5cbiAgLy8gVHlwaW5nIGlzIHByZXNzaW5nIGVhY2ggY2hhcmFjdGVyIGtleSBpbiB0dXJuLlxuICBmb3IgKGNvbnN0IGNoYXIgb2YgdGV4dCkge1xuICAgIGF3YWl0IHByZXNzS2V5KHsga2V5OiBjaGFyIH0pO1xuICB9XG5cbiAgLy8gUG9sbCB1bnRpbCB0aGUgZG9jdW1lbnQgcmVmbGVjdHMgdGhlIGlucHV0IG9yIHRoZSB0aW1lb3V0IGVsYXBzZXMsIGluc3RlYWQgb2YgYSBmaXhlZCBzZXR0bGUuXG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gIHdoaWxlIChlZGl0b3IuZ2V0VmFsdWUoKSA9PT0gdmFsdWVCZWZvcmVUeXBpbmcgJiYgRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IElOUFVUX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKSB7XG4gICAgYXdhaXQgc2xlZXAoSU5QVVRfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICB9XG59XG5cbi8qKlxuICogTW92ZXMgdGhlIG1vdXNlIHBvaW50ZXIgdG8gYSBwb2ludCBqdXN0IG91dHNpZGUgYW4gZWxlbWVudCdzIGJvdW5kaW5nIGJveCB1c2luZyBhICoqdHJ1c3RlZCoqIEVsZWN0cm9uXG4gKiBwb2ludGVyIG1vdmUsIHRoZW4gcG9sbHMgdW50aWwgdGhlIGVsZW1lbnQgbm8gbG9uZ2VyIG1hdGNoZXMgYDpob3ZlcmAuXG4gKlxuICogVGhlIGludmVyc2Ugb2Yge0BsaW5rIGhvdmVyRWxlbWVudH0uIFdoZW4gYW4gZWxlbWVudCBzcGFucyB0aGUgZnVsbCB2aWV3cG9ydCAobm8gcG9pbnQgb3V0c2lkZSBpdHMgYm94IGlzXG4gKiByZWFjaGFibGUpLCB1c2Uge0BsaW5rIG1vdmVNb3VzZX0gZGlyZWN0bHkgdG8gbW92ZSB0aGUgcG9pbnRlciB0byBhIGtub3duIGVtcHR5IGNvb3JkaW5hdGUgaW5zdGVhZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgcG9pbnRlciBhd2F5IGZyb20uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGVsZW1lbnQgbm8gbG9uZ2VyIG1hdGNoZXMgYDpob3ZlcmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bmhvdmVyRWxlbWVudChwYXJhbXM6IFVuaG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IE9VVFNJREVfT0ZGU0VUX0lOX1BJWEVMUyA9IDE7XG5cbiAgY29uc3QgeyBlbGVtZW50IH0gPSBwYXJhbXM7XG5cbiAgLy8gTW92ZSB0byBhIHBvaW50IGp1c3Qgb3V0c2lkZSB0aGUgZWxlbWVudCdzIGJveC4gV2hlbiBmbHVzaCBhZ2FpbnN0IHRoZSB2aWV3cG9ydCdzIGxlZnQgZWRnZSwgdXNlIGp1c3RcbiAgLy8gUGFzdCB0aGUgcmlnaHQgZWRnZS4gQSBmdWxsLXZpZXdwb3J0LXdpZHRoIGVsZW1lbnQgc2hvdWxkIHVzZSBgbW92ZU1vdXNlYCBkaXJlY3RseSBpbnN0ZWFkLlxuICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCA+PSBPVVRTSURFX09GRlNFVF9JTl9QSVhFTFMgPyByZWN0LmxlZnQgLSBPVVRTSURFX09GRlNFVF9JTl9QSVhFTFMgOiByZWN0LnJpZ2h0ICsgT1VUU0lERV9PRkZTRVRfSU5fUElYRUxTO1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIENFTlRFUl9ESVZJU09SO1xuICBhd2FpdCBtb3ZlTW91c2UoeyB4LCB5IH0pO1xuXG4gIC8vIFBvbGwgdW50aWwgdGhlIHJlYWwgYDpob3ZlcmAgc3RhdGUgaGFzIGFjdHVhbGx5IGNsZWFyZWQsIGluc3RlYWQgb2YgYSBmaXhlZCBzZXR0bGUuXG4gIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gIHdoaWxlIChlbGVtZW50Lm1hdGNoZXMoJzpob3ZlcicpICYmIERhdGUubm93KCkgLSBzdGFydFRpbWUgPCBJTlBVVF9USU1FT1VUX0lOX01JTExJU0VDT05EUykge1xuICAgIGF3YWl0IHNsZWVwKElOUFVUX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXZWJDb250ZW50cygpOiBDdXJyZW50V2ViQ29udGVudHMge1xuICByZXR1cm4gd2luZG93LmVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKTtcbn1cblxuLy8gTWFwcyBPYnNpZGlhbidzIGBNb2RpZmllcmAgbmFtZXMgdG8gRWxlY3Ryb24ncyBsb3dlcmNhc2UgYHNlbmRJbnB1dEV2ZW50YCBtb2RpZmllciBuYW1lcy5cbi8vIFNoYXJlZCBieSBldmVyeSB0cnVzdGVkLWlucHV0IGhlbHBlciwgc28gYSBrZXkgcHJlc3MgYW5kIGEgY2xpY2sgY2Fubm90IGRpc2FncmVlIG9uIGAnTW9kJ2AuXG5mdW5jdGlvbiB0b0VsZWN0cm9uTW9kaWZpZXJzKG1vZGlmaWVyczogcmVhZG9ubHkgTW9kaWZpZXJbXSk6IEVsZWN0cm9uTW9kaWZpZXJbXSB7XG4gIC8vICdNb2QnIGlzIE9ic2lkaWFuJ3MgcGxhdGZvcm0tYWdub3N0aWMgbW9kaWZpZXI6IENtZCAobWV0YSkgb24gbWFjT1MsIEN0cmwgZWxzZXdoZXJlLlxuICBjb25zdCBpc01hY09TID0gUGxhdGZvcm0uaXNNYWNPUztcblxuICByZXR1cm4gbW9kaWZpZXJzLm1hcCgobW9kaWZpZXIpOiBFbGVjdHJvbk1vZGlmaWVyID0+IHtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICBjYXNlICdBbHQnOiB7XG4gICAgICAgIHJldHVybiAnYWx0JztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0N0cmwnOiB7XG4gICAgICAgIHJldHVybiAnY29udHJvbCc7XG4gICAgICB9XG4gICAgICBjYXNlICdNZXRhJzoge1xuICAgICAgICByZXR1cm4gJ21ldGEnO1xuICAgICAgfVxuICAgICAgY2FzZSAnTW9kJzoge1xuICAgICAgICByZXR1cm4gaXNNYWNPUyA/ICdtZXRhJyA6ICdjb250cm9sJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1NoaWZ0Jzoge1xuICAgICAgICByZXR1cm4gJ3NoaWZ0JztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIGFzc2VydE5ldmVyKG1vZGlmaWVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzQkEsc0JBQXlCO0FBRXpCLHlCQUE0QjtBQXdKNUIsTUFBTSxzQ0FBc0M7QUFNNUMsTUFBTSxnQ0FBZ0M7QUFLdEMsTUFBTSxpQkFBaUI7QUFLdkIsTUFBTSxxQkFB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
@@ -10,6 +10,10 @@
10
10
  * These are the importable-module twins of the base helpers the `obsidian-integration-testing` harness
11
11
  * seeds into the `lib` bag; the two copies are kept behaviorally in sync by hand (see the project
12
12
  * `CLAUDE.md`). Desktop-only: they depend on `window.electron`.
13
+ *
14
+ * This is the **desktop arm**. Import it directly only as a deliberate platform commitment; the
15
+ * cross-platform entry point is the {@link ./trusted-input.ts | trusted-input} facade, which dispatches
16
+ * to this module or to {@link ./mobile-trusted-input.ts | mobile-trusted-input} per call.
13
17
  */
14
18
  import type { Editor, Modifier } from 'obsidian' with { 'resolution-mode': 'import' };
15
19
  /**
@@ -140,9 +144,15 @@ interface PointerCoordinates {
140
144
  * element's center — the markdown editor's margin, for instance, lies inside `cm.scrollDOM` but outside
141
145
  * `.cm-sizer`, so no element's center lands on it.
142
146
  *
147
+ * **Must be awaited.** Nothing here needs to wait, but the cross-platform twins do — on mobile the
148
+ * injection is a round-trip to the host, because the renderer cannot produce a trusted event itself — so
149
+ * the signature is the same on both platforms and a caller never rewrites its `await`s when it grows a
150
+ * mobile lane.
151
+ *
143
152
  * @param params - The element to click, the button to press and any modifiers to hold.
153
+ * @returns A {@link Promise} that resolves once the click has been injected.
144
154
  */
145
- export declare function clickElement(params: ClickElementParams): void;
155
+ export declare function clickElement(params: ClickElementParams): Promise<void>;
146
156
  /**
147
157
  * Clicks at the given web-contents coordinates using **trusted** Electron pointer input, so Chromium
148
158
  * synthesizes a real `click` (or `contextmenu`, for the right button) with `isTrusted === true`.
@@ -158,10 +168,13 @@ export declare function clickElement(params: ClickElementParams): void;
158
168
  * the pointer over the hit-test target before the button goes down. Prefer {@link clickElement} for
159
169
  * element-relative clicks.
160
170
  *
171
+ * **Must be awaited** — see {@link clickElement}.
172
+ *
161
173
  * @param params - The web-contents DIP coordinates to click at, the button to press and any modifiers to
162
174
  * hold.
175
+ * @returns A {@link Promise} that resolves once the click has been injected.
163
176
  */
164
- export declare function clickMouse(params: ClickMouseParams): void;
177
+ export declare function clickMouse(params: ClickMouseParams): Promise<void>;
165
178
  /**
166
179
  * Moves the mouse pointer to the center of an element using **trusted** Electron pointer input, then polls
167
180
  * until the element actually matches `:hover`.
@@ -182,9 +195,12 @@ export declare function hoverElement(params: HoverElementParams): Promise<void>;
182
195
  * (callers poll their own readiness signal). Prefer {@link hoverElement} / {@link unhoverElement} for
183
196
  * element-relative moves.
184
197
  *
198
+ * **Must be awaited** — see {@link clickElement}.
199
+ *
185
200
  * @param params - The web-contents DIP coordinates to move to.
201
+ * @returns A {@link Promise} that resolves once the move has been injected.
186
202
  */
187
- export declare function moveMouse(params: MoveMouseParams): void;
203
+ export declare function moveMouse(params: MoveMouseParams): Promise<void>;
188
204
  /**
189
205
  * Presses a single key (optionally with modifiers) using **trusted** Electron keyboard input, firing the
190
206
  * full real key pipeline — `keydown` → `keypress` → `beforeinput` → `input` → `keyup`.
@@ -194,9 +210,12 @@ export declare function moveMouse(params: MoveMouseParams): void;
194
210
  * Use it for special keys (`'Enter'`, `'Escape'`, `'Tab'`, arrow keys) and modifier combinations. It does
195
211
  * **not** poll for any effect; the caller focuses the target first, then awaits the expected effect.
196
212
  *
213
+ * **Must be awaited** — see {@link clickElement}.
214
+ *
197
215
  * @param params - The key to press and any modifiers to hold.
216
+ * @returns A {@link Promise} that resolves once the key press has been injected.
198
217
  */
199
- export declare function pressKey(params: PressKeyParams): void;
218
+ export declare function pressKey(params: PressKeyParams): Promise<void>;
200
219
  /**
201
220
  * Types text into a CodeMirror {@link Editor} using **trusted** Electron keyboard input.
202
221
  *
@@ -175,6 +175,7 @@ __export(obsidian_exports, {
175
175
  "dataview-link": () => dataview_link,
176
176
  "demo-vault-helper": () => demo_vault_helper,
177
177
  "demo-vault-helper-settings": () => demo_vault_helper_settings,
178
+ "demo-vault-naming": () => demo_vault_naming,
178
179
  "desktop-demo-vault-opener": () => desktop_demo_vault_opener,
179
180
  "desktop-trusted-input": () => desktop_trusted_input,
180
181
  editor: () => editor,
@@ -203,6 +204,7 @@ __export(obsidian_exports, {
203
204
  "markdown-view": () => markdown_view,
204
205
  "menu-event-registrar": () => menu_event_registrar,
205
206
  "metadata-cache": () => metadata_cache,
207
+ "mobile-trusted-input": () => mobile_trusted_input,
206
208
  modals: () => modals,
207
209
  "note-priority": () => note_priority,
208
210
  "notebook-navigator": () => notebook_navigator,
@@ -225,6 +227,7 @@ __export(obsidian_exports, {
225
227
  "setting-group-ex": () => setting_group_ex,
226
228
  "status-bar-item-registrar": () => status_bar_item_registrar,
227
229
  templater: () => templater,
230
+ "trusted-input": () => trusted_input,
228
231
  validation: () => validation,
229
232
  vault: () => vault,
230
233
  "vault-delete": () => vault_delete,
@@ -256,6 +259,7 @@ var dataview_link = __toESM(__extractDefault(require('./dataview-link.cjs')), 1)
256
259
  var dataview = __toESM(__extractDefault(require('./dataview.cjs')), 1);
257
260
  var demo_vault_helper_settings = __toESM(__extractDefault(require('./demo-vault-helper-settings.cjs')), 1);
258
261
  var demo_vault_helper = __toESM(__extractDefault(require('./demo-vault-helper.cjs')), 1);
262
+ var demo_vault_naming = __toESM(__extractDefault(require('./demo-vault-naming.cjs')), 1);
259
263
  var desktop_demo_vault_opener = __toESM(__extractDefault(require('./desktop-demo-vault-opener.cjs')), 1);
260
264
  var desktop_trusted_input = __toESM(__extractDefault(require('./desktop-trusted-input.cjs')), 1);
261
265
  var editor_extension_registrar = __toESM(__extractDefault(require('./editor-extension-registrar.cjs')), 1);
@@ -284,6 +288,7 @@ var markdown_view = __toESM(__extractDefault(require('./markdown-view.cjs')), 1)
284
288
  var markdown = __toESM(__extractDefault(require('./markdown.cjs')), 1);
285
289
  var menu_event_registrar = __toESM(__extractDefault(require('./menu-event-registrar.cjs')), 1);
286
290
  var metadata_cache = __toESM(__extractDefault(require('./metadata-cache.cjs')), 1);
291
+ var mobile_trusted_input = __toESM(__extractDefault(require('./mobile-trusted-input.cjs')), 1);
287
292
  var modals = __toESM(__extractDefault(require('./modals/index.cjs')), 1);
288
293
  var note_priority = __toESM(__extractDefault(require('./note-priority.cjs')), 1);
289
294
  var notebook_navigator = __toESM(__extractDefault(require('./notebook-navigator.cjs')), 1);
@@ -306,6 +311,7 @@ var setting_ex = __toESM(__extractDefault(require('./setting-ex.cjs')), 1);
306
311
  var setting_group_ex = __toESM(__extractDefault(require('./setting-group-ex.cjs')), 1);
307
312
  var status_bar_item_registrar = __toESM(__extractDefault(require('./status-bar-item-registrar.cjs')), 1);
308
313
  var templater = __toESM(__extractDefault(require('./templater.cjs')), 1);
314
+ var trusted_input = __toESM(__extractDefault(require('./trusted-input.cjs')), 1);
309
315
  var validation = __toESM(__extractDefault(require('./validation.cjs')), 1);
310
316
  var vault_delete = __toESM(__extractDefault(require('./vault-delete.cjs')), 1);
311
317
  var vault_transaction = __toESM(__extractDefault(require('./vault-transaction.cjs')), 1);
@@ -337,6 +343,7 @@ var workspace = __toESM(__extractDefault(require('./workspace.cjs')), 1);
337
343
  "dataview-link": null,
338
344
  "demo-vault-helper": null,
339
345
  "demo-vault-helper-settings": null,
346
+ "demo-vault-naming": null,
340
347
  "desktop-demo-vault-opener": null,
341
348
  "desktop-trusted-input": null,
342
349
  editor,
@@ -365,6 +372,7 @@ var workspace = __toESM(__extractDefault(require('./workspace.cjs')), 1);
365
372
  "markdown-view": null,
366
373
  "menu-event-registrar": null,
367
374
  "metadata-cache": null,
375
+ "mobile-trusted-input": null,
368
376
  modals,
369
377
  "note-priority": null,
370
378
  "notebook-navigator": null,
@@ -387,6 +395,7 @@ var workspace = __toESM(__extractDefault(require('./workspace.cjs')), 1);
387
395
  "setting-group-ex": null,
388
396
  "status-bar-item-registrar": null,
389
397
  templater,
398
+ "trusted-input": null,
390
399
  validation,
391
400
  vault,
392
401
  "vault-delete": null,
@@ -394,4 +403,4 @@ var workspace = __toESM(__extractDefault(require('./workspace.cjs')), 1);
394
403
  "view-registrar": null,
395
404
  workspace
396
405
  });
397
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2FjdGl2ZS1maWxlLXByb3ZpZGVyJyBmcm9tICcuL2FjdGl2ZS1maWxlLXByb3ZpZGVyLnRzJztcbmV4cG9ydCAqIGFzICdhcHAnIGZyb20gJy4vYXBwLnRzJztcbmV4cG9ydCAqIGFzICdhc3luYy13aXRoLW5vdGljZScgZnJvbSAnLi9hc3luYy13aXRoLW5vdGljZS50cyc7XG5leHBvcnQgKiBhcyAnYXR0YWNobWVudC1wYXRoJyBmcm9tICcuL2F0dGFjaG1lbnQtcGF0aC50cyc7XG5leHBvcnQgKiBhcyAnYXR0YWNobWVudC11bml0LWZvbGRlcicgZnJvbSAnLi9hdHRhY2htZW50LXVuaXQtZm9sZGVyLnRzJztcbmV4cG9ydCAqIGFzICdiYWNrbGluaycgZnJvbSAnLi9iYWNrbGluay50cyc7XG5leHBvcnQgKiBhcyAnYmFzZXMtdmlldy1yZWdpc3RyYXInIGZyb20gJy4vYmFzZXMtdmlldy1yZWdpc3RyYXIudHMnO1xuZXhwb3J0ICogYXMgJ2NhbGxvdXQnIGZyb20gJy4vY2FsbG91dC50cyc7XG5leHBvcnQgKiBhcyAnY2FudmFzJyBmcm9tICcuL2NhbnZhcy50cyc7XG5leHBvcnQgKiBhcyAnY2FzZS1pbnNlbnNpdGl2ZS1maWxlLWluZGV4JyBmcm9tICcuL2Nhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1ibG9jay1tYXJrZG93bi1pbmZvcm1hdGlvbicgZnJvbSAnLi9jb2RlLWJsb2NrLW1hcmtkb3duLWluZm9ybWF0aW9uLnRzJztcbmV4cG9ydCAqIGFzICdjb2RlLWJsb2NrLXJlZy1leHAnIGZyb20gJy4vY29kZS1ibG9jay1yZWctZXhwLnRzJztcbmV4cG9ydCAqIGFzICdjb21tYW5kLWhhbmRsZXJzJyBmcm9tICcuL2NvbW1hbmQtaGFuZGxlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1hbmQtcmVnaXN0cmFyJyBmcm9tICcuL2NvbW1hbmQtcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdjb21tdW5pdHktcGx1Z2lucycgZnJvbSAnLi9jb21tdW5pdHktcGx1Z2lucy50cyc7XG5leHBvcnQgKiBhcyAnY29tcG9uZW50cycgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdjb25zdHJ1Y3RvcnMnIGZyb20gJy4vY29uc3RydWN0b3JzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdjc3MtY2xhc3MnIGZyb20gJy4vY3NzLWNsYXNzLnRzJztcbmV4cG9ydCAqIGFzICdkYXRhLWhhbmRsZXInIGZyb20gJy4vZGF0YS1oYW5kbGVyLnRzJztcbmV4cG9ydCAqIGFzICdkYXRhdmlldy1saW5rJyBmcm9tICcuL2RhdGF2aWV3LWxpbmsudHMnO1xuZXhwb3J0ICogYXMgJ2RhdGF2aWV3JyBmcm9tICcuL2RhdGF2aWV3LnRzJztcbmV4cG9ydCAqIGFzICdkZW1vLXZhdWx0LWhlbHBlci1zZXR0aW5ncycgZnJvbSAnLi9kZW1vLXZhdWx0LWhlbHBlci1zZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyAnZGVtby12YXVsdC1oZWxwZXInIGZyb20gJy4vZGVtby12YXVsdC1oZWxwZXIudHMnO1xuZXhwb3J0ICogYXMgJ2Rlc2t0b3AtZGVtby12YXVsdC1vcGVuZXInIGZyb20gJy4vZGVza3RvcC1kZW1vLXZhdWx0LW9wZW5lci50cyc7XG5leHBvcnQgKiBhcyAnZGVza3RvcC10cnVzdGVkLWlucHV0JyBmcm9tICcuL2Rlc2t0b3AtdHJ1c3RlZC1pbnB1dC50cyc7XG5leHBvcnQgKiBhcyAnZWRpdG9yLWV4dGVuc2lvbi1yZWdpc3RyYXInIGZyb20gJy4vZWRpdG9yLWV4dGVuc2lvbi1yZWdpc3RyYXIudHMnO1xuZXhwb3J0ICogYXMgJ2VkaXRvci1zdWdnZXN0LXJlZ2lzdHJhcicgZnJvbSAnLi9lZGl0b3Itc3VnZ2VzdC1yZWdpc3RyYXIudHMnO1xuZXhwb3J0ICogYXMgJ2VkaXRvcicgZnJvbSAnLi9lZGl0b3IudHMnO1xuZXhwb3J0ICogYXMgJ2V2ZW50cycgZnJvbSAnLi9ldmVudHMudHMnO1xuZXhwb3J0ICogYXMgJ2V4dGVuc2lvbnMtcmVnaXN0cmFyJyBmcm9tICcuL2V4dGVuc2lvbnMtcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdmaWxlLWNoYW5nZScgZnJvbSAnLi9maWxlLWNoYW5nZS50cyc7XG5leHBvcnQgKiBhcyAnZmlsZS1tYW5hZ2VyJyBmcm9tICcuL2ZpbGUtbWFuYWdlci50cyc7XG5leHBvcnQgKiBhcyAnZmlsZS1zeXN0ZW0nIGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuZXhwb3J0ICogYXMgJ2ZvbGRlci1ub3RlJyBmcm9tICcuL2ZvbGRlci1ub3RlLnRzJztcbmV4cG9ydCAqIGFzICdmcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cycgZnJvbSAnLi9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyc7XG5leHBvcnQgKiBhcyAnZnJvbnRtYXR0ZXInIGZyb20gJy4vZnJvbnRtYXR0ZXIudHMnO1xuZXhwb3J0ICogYXMgJ2hvdmVyLWxpbmstc291cmNlLXJlZ2lzdHJhcicgZnJvbSAnLi9ob3Zlci1saW5rLXNvdXJjZS1yZWdpc3RyYXIudHMnO1xuZXhwb3J0ICogYXMgJ2h0bWwtZWxlbWVudCcgZnJvbSAnLi9odG1sLWVsZW1lbnQudHMnO1xuZXhwb3J0ICogYXMgJ2kxOG4nIGZyb20gJy4vaTE4bi9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnaXMtaW4tb2JzaWRpYW4nIGZyb20gJy4vaXMtaW4tb2JzaWRpYW4udHMnO1xuZXhwb3J0ICogYXMgJ2xpbmstdXBkYXRlLXByb2dyZXNzJyBmcm9tICcuL2xpbmstdXBkYXRlLXByb2dyZXNzLnRzJztcbmV4cG9ydCAqIGFzICdsaW5rJyBmcm9tICcuL2xpbmsudHMnO1xuZXhwb3J0ICogYXMgJ2xvZ2dlcicgZnJvbSAnLi9sb2dnZXIudHMnO1xuZXhwb3J0ICogYXMgJ2xvb3AnIGZyb20gJy4vbG9vcC50cyc7XG5leHBvcnQgKiBhcyAnbWFya2Rvd24tY29kZS1ibG9jay1wcm9jZXNzb3ItcmVnaXN0cmFyJyBmcm9tICcuL21hcmtkb3duLWNvZGUtYmxvY2stcHJvY2Vzc29yLXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAnbWFya2Rvd24tY29kZS1ibG9jay1wcm9jZXNzb3InIGZyb20gJy4vbWFya2Rvd24tY29kZS1ibG9jay1wcm9jZXNzb3IudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3duLXBvc3QtcHJvY2Vzc29yLXJlZ2lzdHJhcicgZnJvbSAnLi9tYXJrZG93bi1wb3N0LXByb2Nlc3Nvci1yZWdpc3RyYXIudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3duLXZpZXcnIGZyb20gJy4vbWFya2Rvd24tdmlldy50cyc7XG5leHBvcnQgKiBhcyAnbWFya2Rvd24nIGZyb20gJy4vbWFya2Rvd24udHMnO1xuZXhwb3J0ICogYXMgJ21lbnUtZXZlbnQtcmVnaXN0cmFyJyBmcm9tICcuL21lbnUtZXZlbnQtcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdtZXRhZGF0YS1jYWNoZScgZnJvbSAnLi9tZXRhZGF0YS1jYWNoZS50cyc7XG5leHBvcnQgKiBhcyAnbW9kYWxzJyBmcm9tICcuL21vZGFscy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnbm90ZS1wcmlvcml0eScgZnJvbSAnLi9ub3RlLXByaW9yaXR5LnRzJztcbmV4cG9ydCAqIGFzICdub3RlYm9vay1uYXZpZ2F0b3InIGZyb20gJy4vbm90ZWJvb2stbmF2aWdhdG9yLnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1wcm90b2NvbC1oYW5kbGVyLXJlZ2lzdHJhcicgZnJvbSAnLi9vYnNpZGlhbi1wcm90b2NvbC1oYW5kbGVyLXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAnb2JzaWRpYW4tc2V0dGluZ3MnIGZyb20gJy4vb2JzaWRpYW4tc2V0dGluZ3MudHMnO1xuZXhwb3J0ICogYXMgJ3BhcnNlLWxpbmsnIGZyb20gJy4vcGFyc2UtbGluay50cyc7XG5leHBvcnQgKiBhcyAncGF0aC1zZXR0aW5ncycgZnJvbSAnLi9wYXRoLXNldHRpbmdzLnRzJztcbmV4cG9ydCAqIGFzICdwZGYnIGZyb20gJy4vcGRmLnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4nIGZyb20gJy4vcGx1Z2luL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdwbHVnaW4tY2xpLWhhbmRsZXItcmVnaXN0cmFyJyBmcm9tICcuL3BsdWdpbi1jbGktaGFuZGxlci1yZWdpc3RyYXIudHMnO1xuZXhwb3J0ICogYXMgJ3BvcG92ZXJzJyBmcm9tICcuL3BvcG92ZXJzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdxdWV1ZScgZnJvbSAnLi9xdWV1ZS50cyc7XG5leHBvcnQgKiBhcyAncmVhY3QnIGZyb20gJy4vcmVhY3QvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3JlZmVyZW5jZScgZnJvbSAnLi9yZWZlcmVuY2UudHMnO1xuZXhwb3J0ICogYXMgJ3Jlc291cmNlLWxvY2snIGZyb20gJy4vcmVzb3VyY2UtbG9jay50cyc7XG5leHBvcnQgKiBhcyAncmVzb3VyY2UtdXJsJyBmcm9tICcuL3Jlc291cmNlLXVybC50cyc7XG5leHBvcnQgKiBhcyAncmliYm9uLWljb24tcmVnaXN0cmFyJyBmcm9tICcuL3JpYmJvbi1pY29uLXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAnc2V0dGluZy1jb21wb25lbnRzJyBmcm9tICcuL3NldHRpbmctY29tcG9uZW50cy9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnc2V0dGluZy1leCcgZnJvbSAnLi9zZXR0aW5nLWV4LnRzJztcbmV4cG9ydCAqIGFzICdzZXR0aW5nLWdyb3VwLWV4JyBmcm9tICcuL3NldHRpbmctZ3JvdXAtZXgudHMnO1xuZXhwb3J0ICogYXMgJ3N0YXR1cy1iYXItaXRlbS1yZWdpc3RyYXInIGZyb20gJy4vc3RhdHVzLWJhci1pdGVtLXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAndGVtcGxhdGVyJyBmcm9tICcuL3RlbXBsYXRlci50cyc7XG5leHBvcnQgKiBhcyAndmFsaWRhdGlvbicgZnJvbSAnLi92YWxpZGF0aW9uLnRzJztcbmV4cG9ydCAqIGFzICd2YXVsdC1kZWxldGUnIGZyb20gJy4vdmF1bHQtZGVsZXRlLnRzJztcbmV4cG9ydCAqIGFzICd2YXVsdC10cmFuc2FjdGlvbicgZnJvbSAnLi92YXVsdC10cmFuc2FjdGlvbi50cyc7XG5leHBvcnQgKiBhcyAndmF1bHQnIGZyb20gJy4vdmF1bHQudHMnO1xuZXhwb3J0ICogYXMgJ3ZpZXctcmVnaXN0cmFyJyBmcm9tICcuL3ZpZXctcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICd3b3Jrc3BhY2UnIGZyb20gJy4vd29ya3NwYWNlLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBLGdDQUFBQTtBQUFBLEVBQUE7QUFBQSw2QkFBQUM7QUFBQSxFQUFBLHlCQUFBQztBQUFBLEVBQUEsZ0NBQUFDO0FBQUEsRUFBQTtBQUFBLGdDQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBLHVDQUFBQztBQUFBLEVBQUEseUNBQUFDO0FBQUEsRUFBQSw0QkFBQUM7QUFBQSxFQUFBLDBCQUFBQztBQUFBLEVBQUEsMkJBQUFDO0FBQUEsRUFBQSwyQkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQSxxQkFBQUM7QUFBQSxFQUFBLHNCQUFBQztBQUFBLEVBQUE7QUFBQSx5QkFBQUM7QUFBQSxFQUFB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QTRCO0FBQzVCLFlBQXlCO0FBQ3pCLFlBQXlCO0FBQ3pCLGdCQUE2QjtBQUM3QixJQUFBQyxnQkFBaUM7QUFDakMsSUFBQUMsZUFBZ0M7QUFDaEMsSUFBQUMsd0JBQXlDO0FBQ3pDLElBQUFDLHFCQUFzQztBQUN0QyxJQUFBQyxhQUE4QjtBQUM5QixJQUFBQyxtQkFBb0M7QUFDcEMsSUFBQUMsNEJBQTZDO0FBQzdDLGdCQUE2QjtBQUM3QixpQkFBOEI7QUFDOUIsSUFBQUMsZUFBZ0M7QUFDaEMsSUFBQUMsb0JBQXFDO0FBQ3JDLFlBQXlCO0FBQ3pCLElBQUFDLGlCQUFrQztBQUNsQyxnQkFBNkI7IiwKICAibmFtZXMiOiBbImFjdGl2ZS1maWxlLXByb3ZpZGVyIiwgImFzeW5jLXdpdGgtbm90aWNlIiwgImF0dGFjaG1lbnQtcGF0aCIsICJhdHRhY2htZW50LXVuaXQtZm9sZGVyIiwgImJhc2VzLXZpZXctcmVnaXN0cmFyIiwgImNhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleCIsICJjb2RlLWJsb2NrLW1hcmtkb3duLWluZm9ybWF0aW9uIiwgImNvZGUtYmxvY2stcmVnLWV4cCIsICJjb21tYW5kLWhhbmRsZXJzIiwgImNvbW1hbmQtcmVnaXN0cmFyIiwgImNvbW11bml0eS1wbHVnaW5zIiwgImNzcy1jbGFzcyIsICJkYXRhLWhhbmRsZXIiLCAiZGF0YXZpZXctbGluayIsICJkZW1vLXZhdWx0LWhlbHBlciIsICJkZW1vLXZhdWx0LWhlbHBlci1zZXR0aW5ncyIsICJkZXNrdG9wLWRlbW8tdmF1bHQtb3BlbmVyIiwgImRlc2t0b3AtdHJ1c3RlZC1pbnB1dCIsICJlZGl0b3ItZXh0ZW5zaW9uLXJlZ2lzdHJhciIsICJlZGl0b3Itc3VnZ2VzdC1yZWdpc3RyYXIiLCAiZXh0ZW5zaW9ucy1yZWdpc3RyYXIiLCAiZmlsZS1jaGFuZ2UiLCAiZmlsZS1tYW5hZ2VyIiwgImZpbGUtc3lzdGVtIiwgImZvbGRlci1ub3RlIiwgImZyb250bWF0dGVyLWxpbmstY2FjaGUtd2l0aC1vZmZzZXRzIiwgImhvdmVyLWxpbmstc291cmNlLXJlZ2lzdHJhciIsICJodG1sLWVsZW1lbnQiLCAiaXMtaW4tb2JzaWRpYW4iLCAibGluay11cGRhdGUtcHJvZ3Jlc3MiLCAibWFya2Rvd24tY29kZS1ibG9jay1wcm9jZXNzb3IiLCAibWFya2Rvd24tY29kZS1ibG9jay1wcm9jZXNzb3ItcmVnaXN0cmFyIiwgIm1hcmtkb3duLXBvc3QtcHJvY2Vzc29yLXJlZ2lzdHJhciIsICJtYXJrZG93bi12aWV3IiwgIm1lbnUtZXZlbnQtcmVnaXN0cmFyIiwgIm1ldGFkYXRhLWNhY2hlIiwgIm5vdGUtcHJpb3JpdHkiLCAibm90ZWJvb2stbmF2aWdhdG9yIiwgIm9ic2lkaWFuLXByb3RvY29sLWhhbmRsZXItcmVnaXN0cmFyIiwgIm9ic2lkaWFuLXNldHRpbmdzIiwgInBhcnNlLWxpbmsiLCAicGF0aC1zZXR0aW5ncyIsICJwbHVnaW4tY2xpLWhhbmRsZXItcmVnaXN0cmFyIiwgInJlc291cmNlLWxvY2siLCAicmVzb3VyY2UtdXJsIiwgInJpYmJvbi1pY29uLXJlZ2lzdHJhciIsICJzZXR0aW5nLWNvbXBvbmVudHMiLCAic2V0dGluZy1leCIsICJzZXR0aW5nLWdyb3VwLWV4IiwgInN0YXR1cy1iYXItaXRlbS1yZWdpc3RyYXIiLCAidmF1bHQtZGVsZXRlIiwgInZhdWx0LXRyYW5zYWN0aW9uIiwgInZpZXctcmVnaXN0cmFyIl0KfQo=
406
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2FjdGl2ZS1maWxlLXByb3ZpZGVyJyBmcm9tICcuL2FjdGl2ZS1maWxlLXByb3ZpZGVyLnRzJztcbmV4cG9ydCAqIGFzICdhcHAnIGZyb20gJy4vYXBwLnRzJztcbmV4cG9ydCAqIGFzICdhc3luYy13aXRoLW5vdGljZScgZnJvbSAnLi9hc3luYy13aXRoLW5vdGljZS50cyc7XG5leHBvcnQgKiBhcyAnYXR0YWNobWVudC1wYXRoJyBmcm9tICcuL2F0dGFjaG1lbnQtcGF0aC50cyc7XG5leHBvcnQgKiBhcyAnYXR0YWNobWVudC11bml0LWZvbGRlcicgZnJvbSAnLi9hdHRhY2htZW50LXVuaXQtZm9sZGVyLnRzJztcbmV4cG9ydCAqIGFzICdiYWNrbGluaycgZnJvbSAnLi9iYWNrbGluay50cyc7XG5leHBvcnQgKiBhcyAnYmFzZXMtdmlldy1yZWdpc3RyYXInIGZyb20gJy4vYmFzZXMtdmlldy1yZWdpc3RyYXIudHMnO1xuZXhwb3J0ICogYXMgJ2NhbGxvdXQnIGZyb20gJy4vY2FsbG91dC50cyc7XG5leHBvcnQgKiBhcyAnY2FudmFzJyBmcm9tICcuL2NhbnZhcy50cyc7XG5leHBvcnQgKiBhcyAnY2FzZS1pbnNlbnNpdGl2ZS1maWxlLWluZGV4JyBmcm9tICcuL2Nhc2UtaW5zZW5zaXRpdmUtZmlsZS1pbmRleC50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1ibG9jay1tYXJrZG93bi1pbmZvcm1hdGlvbicgZnJvbSAnLi9jb2RlLWJsb2NrLW1hcmtkb3duLWluZm9ybWF0aW9uLnRzJztcbmV4cG9ydCAqIGFzICdjb2RlLWJsb2NrLXJlZy1leHAnIGZyb20gJy4vY29kZS1ibG9jay1yZWctZXhwLnRzJztcbmV4cG9ydCAqIGFzICdjb21tYW5kLWhhbmRsZXJzJyBmcm9tICcuL2NvbW1hbmQtaGFuZGxlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2NvbW1hbmQtcmVnaXN0cmFyJyBmcm9tICcuL2NvbW1hbmQtcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdjb21tdW5pdHktcGx1Z2lucycgZnJvbSAnLi9jb21tdW5pdHktcGx1Z2lucy50cyc7XG5leHBvcnQgKiBhcyAnY29tcG9uZW50cycgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdjb25zdHJ1Y3RvcnMnIGZyb20gJy4vY29uc3RydWN0b3JzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdjc3MtY2xhc3MnIGZyb20gJy4vY3NzLWNsYXNzLnRzJztcbmV4cG9ydCAqIGFzICdkYXRhLWhhbmRsZXInIGZyb20gJy4vZGF0YS1oYW5kbGVyLnRzJztcbmV4cG9ydCAqIGFzICdkYXRhdmlldy1saW5rJyBmcm9tICcuL2RhdGF2aWV3LWxpbmsudHMnO1xuZXhwb3J0ICogYXMgJ2RhdGF2aWV3JyBmcm9tICcuL2RhdGF2aWV3LnRzJztcbmV4cG9ydCAqIGFzICdkZW1vLXZhdWx0LWhlbHBlci1zZXR0aW5ncycgZnJvbSAnLi9kZW1vLXZhdWx0LWhlbHBlci1zZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyAnZGVtby12YXVsdC1oZWxwZXInIGZyb20gJy4vZGVtby12YXVsdC1oZWxwZXIudHMnO1xuZXhwb3J0ICogYXMgJ2RlbW8tdmF1bHQtbmFtaW5nJyBmcm9tICcuL2RlbW8tdmF1bHQtbmFtaW5nLnRzJztcbmV4cG9ydCAqIGFzICdkZXNrdG9wLWRlbW8tdmF1bHQtb3BlbmVyJyBmcm9tICcuL2Rlc2t0b3AtZGVtby12YXVsdC1vcGVuZXIudHMnO1xuZXhwb3J0ICogYXMgJ2Rlc2t0b3AtdHJ1c3RlZC1pbnB1dCcgZnJvbSAnLi9kZXNrdG9wLXRydXN0ZWQtaW5wdXQudHMnO1xuZXhwb3J0ICogYXMgJ2VkaXRvci1leHRlbnNpb24tcmVnaXN0cmFyJyBmcm9tICcuL2VkaXRvci1leHRlbnNpb24tcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdlZGl0b3Itc3VnZ2VzdC1yZWdpc3RyYXInIGZyb20gJy4vZWRpdG9yLXN1Z2dlc3QtcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdlZGl0b3InIGZyb20gJy4vZWRpdG9yLnRzJztcbmV4cG9ydCAqIGFzICdldmVudHMnIGZyb20gJy4vZXZlbnRzLnRzJztcbmV4cG9ydCAqIGFzICdleHRlbnNpb25zLXJlZ2lzdHJhcicgZnJvbSAnLi9leHRlbnNpb25zLXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAnZmlsZS1jaGFuZ2UnIGZyb20gJy4vZmlsZS1jaGFuZ2UudHMnO1xuZXhwb3J0ICogYXMgJ2ZpbGUtbWFuYWdlcicgZnJvbSAnLi9maWxlLW1hbmFnZXIudHMnO1xuZXhwb3J0ICogYXMgJ2ZpbGUtc3lzdGVtJyBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmV4cG9ydCAqIGFzICdmb2xkZXItbm90ZScgZnJvbSAnLi9mb2xkZXItbm90ZS50cyc7XG5leHBvcnQgKiBhcyAnZnJvbnRtYXR0ZXItbGluay1jYWNoZS13aXRoLW9mZnNldHMnIGZyb20gJy4vZnJvbnRtYXR0ZXItbGluay1jYWNoZS13aXRoLW9mZnNldHMudHMnO1xuZXhwb3J0ICogYXMgJ2Zyb250bWF0dGVyJyBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmV4cG9ydCAqIGFzICdob3Zlci1saW5rLXNvdXJjZS1yZWdpc3RyYXInIGZyb20gJy4vaG92ZXItbGluay1zb3VyY2UtcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdodG1sLWVsZW1lbnQnIGZyb20gJy4vaHRtbC1lbGVtZW50LnRzJztcbmV4cG9ydCAqIGFzICdpMThuJyBmcm9tICcuL2kxOG4vaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ2lzLWluLW9ic2lkaWFuJyBmcm9tICcuL2lzLWluLW9ic2lkaWFuLnRzJztcbmV4cG9ydCAqIGFzICdsaW5rLXVwZGF0ZS1wcm9ncmVzcycgZnJvbSAnLi9saW5rLXVwZGF0ZS1wcm9ncmVzcy50cyc7XG5leHBvcnQgKiBhcyAnbGluaycgZnJvbSAnLi9saW5rLnRzJztcbmV4cG9ydCAqIGFzICdsb2dnZXInIGZyb20gJy4vbG9nZ2VyLnRzJztcbmV4cG9ydCAqIGFzICdsb29wJyBmcm9tICcuL2xvb3AudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3duLWNvZGUtYmxvY2stcHJvY2Vzc29yLXJlZ2lzdHJhcicgZnJvbSAnLi9tYXJrZG93bi1jb2RlLWJsb2NrLXByb2Nlc3Nvci1yZWdpc3RyYXIudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3duLWNvZGUtYmxvY2stcHJvY2Vzc29yJyBmcm9tICcuL21hcmtkb3duLWNvZGUtYmxvY2stcHJvY2Vzc29yLnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bi1wb3N0LXByb2Nlc3Nvci1yZWdpc3RyYXInIGZyb20gJy4vbWFya2Rvd24tcG9zdC1wcm9jZXNzb3ItcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdtYXJrZG93bi12aWV3JyBmcm9tICcuL21hcmtkb3duLXZpZXcudHMnO1xuZXhwb3J0ICogYXMgJ21hcmtkb3duJyBmcm9tICcuL21hcmtkb3duLnRzJztcbmV4cG9ydCAqIGFzICdtZW51LWV2ZW50LXJlZ2lzdHJhcicgZnJvbSAnLi9tZW51LWV2ZW50LXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAnbWV0YWRhdGEtY2FjaGUnIGZyb20gJy4vbWV0YWRhdGEtY2FjaGUudHMnO1xuZXhwb3J0ICogYXMgJ21vYmlsZS10cnVzdGVkLWlucHV0JyBmcm9tICcuL21vYmlsZS10cnVzdGVkLWlucHV0LnRzJztcbmV4cG9ydCAqIGFzICdtb2RhbHMnIGZyb20gJy4vbW9kYWxzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdub3RlLXByaW9yaXR5JyBmcm9tICcuL25vdGUtcHJpb3JpdHkudHMnO1xuZXhwb3J0ICogYXMgJ25vdGVib29rLW5hdmlnYXRvcicgZnJvbSAnLi9ub3RlYm9vay1uYXZpZ2F0b3IudHMnO1xuZXhwb3J0ICogYXMgJ29ic2lkaWFuLXByb3RvY29sLWhhbmRsZXItcmVnaXN0cmFyJyBmcm9tICcuL29ic2lkaWFuLXByb3RvY29sLWhhbmRsZXItcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdvYnNpZGlhbi1zZXR0aW5ncycgZnJvbSAnLi9vYnNpZGlhbi1zZXR0aW5ncy50cyc7XG5leHBvcnQgKiBhcyAncGFyc2UtbGluaycgZnJvbSAnLi9wYXJzZS1saW5rLnRzJztcbmV4cG9ydCAqIGFzICdwYXRoLXNldHRpbmdzJyBmcm9tICcuL3BhdGgtc2V0dGluZ3MudHMnO1xuZXhwb3J0ICogYXMgJ3BkZicgZnJvbSAnLi9wZGYudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbicgZnJvbSAnLi9wbHVnaW4vaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3BsdWdpbi1jbGktaGFuZGxlci1yZWdpc3RyYXInIGZyb20gJy4vcGx1Z2luLWNsaS1oYW5kbGVyLXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAncG9wb3ZlcnMnIGZyb20gJy4vcG9wb3ZlcnMvaW5kZXgudHMnO1xuZXhwb3J0ICogYXMgJ3F1ZXVlJyBmcm9tICcuL3F1ZXVlLnRzJztcbmV4cG9ydCAqIGFzICdyZWFjdCcgZnJvbSAnLi9yZWFjdC9pbmRleC50cyc7XG5leHBvcnQgKiBhcyAncmVmZXJlbmNlJyBmcm9tICcuL3JlZmVyZW5jZS50cyc7XG5leHBvcnQgKiBhcyAncmVzb3VyY2UtbG9jaycgZnJvbSAnLi9yZXNvdXJjZS1sb2NrLnRzJztcbmV4cG9ydCAqIGFzICdyZXNvdXJjZS11cmwnIGZyb20gJy4vcmVzb3VyY2UtdXJsLnRzJztcbmV4cG9ydCAqIGFzICdyaWJib24taWNvbi1yZWdpc3RyYXInIGZyb20gJy4vcmliYm9uLWljb24tcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICdzZXR0aW5nLWNvbXBvbmVudHMnIGZyb20gJy4vc2V0dGluZy1jb21wb25lbnRzL2luZGV4LnRzJztcbmV4cG9ydCAqIGFzICdzZXR0aW5nLWV4JyBmcm9tICcuL3NldHRpbmctZXgudHMnO1xuZXhwb3J0ICogYXMgJ3NldHRpbmctZ3JvdXAtZXgnIGZyb20gJy4vc2V0dGluZy1ncm91cC1leC50cyc7XG5leHBvcnQgKiBhcyAnc3RhdHVzLWJhci1pdGVtLXJlZ2lzdHJhcicgZnJvbSAnLi9zdGF0dXMtYmFyLWl0ZW0tcmVnaXN0cmFyLnRzJztcbmV4cG9ydCAqIGFzICd0ZW1wbGF0ZXInIGZyb20gJy4vdGVtcGxhdGVyLnRzJztcbmV4cG9ydCAqIGFzICd0cnVzdGVkLWlucHV0JyBmcm9tICcuL3RydXN0ZWQtaW5wdXQudHMnO1xuZXhwb3J0ICogYXMgJ3ZhbGlkYXRpb24nIGZyb20gJy4vdmFsaWRhdGlvbi50cyc7XG5leHBvcnQgKiBhcyAndmF1bHQtZGVsZXRlJyBmcm9tICcuL3ZhdWx0LWRlbGV0ZS50cyc7XG5leHBvcnQgKiBhcyAndmF1bHQtdHJhbnNhY3Rpb24nIGZyb20gJy4vdmF1bHQtdHJhbnNhY3Rpb24udHMnO1xuZXhwb3J0ICogYXMgJ3ZhdWx0JyBmcm9tICcuL3ZhdWx0LnRzJztcbmV4cG9ydCAqIGFzICd2aWV3LXJlZ2lzdHJhcicgZnJvbSAnLi92aWV3LXJlZ2lzdHJhci50cyc7XG5leHBvcnQgKiBhcyAnd29ya3NwYWNlJyBmcm9tICcuL3dvcmtzcGFjZS50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQSxnQ0FBQUE7QUFBQSxFQUFBO0FBQUEsNkJBQUFDO0FBQUEsRUFBQSx5QkFBQUM7QUFBQSxFQUFBLGdDQUFBQztBQUFBLEVBQUE7QUFBQSxnQ0FB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RCxJQUFBRSxvQ0FBcUQ7QUFDckQsSUFBQUMsZ0JBQWlDO0FBQ2pDLGVBQTRCO0FBQzVCLElBQUFDLHVCQUF3QztBQUN4QyxJQUFBQyxpQkFBa0M7QUFDbEMsSUFBQUMsdUJBQXdDO0FBQ3hDLGFBQTBCO0FBQzFCLElBQUFDLGdCQUFpQztBQUNqQyxJQUFBQyxxQkFBc0M7QUFDdEMsSUFBQUMsc0NBQXVEO0FBQ3ZELElBQUFDLG9CQUFxQztBQUNyQyxJQUFBQyxhQUE4QjtBQUM5QixJQUFBQyxnQkFBaUM7QUFDakMsVUFBdUI7QUFDdkIsYUFBMEI7QUFDMUIsSUFBQUMsK0JBQWdEO0FBQ2hELGVBQTRCO0FBQzVCLFlBQXlCO0FBQ3pCLFlBQXlCO0FBQ3pCLGdCQUE2QjtBQUM3QixJQUFBQyxnQkFBaUM7QUFDakMsSUFBQUMsZUFBZ0M7QUFDaEMsSUFBQUMsd0JBQXlDO0FBQ3pDLElBQUFDLHFCQUFzQztBQUN0QyxJQUFBQyxhQUE4QjtBQUM5QixJQUFBQyxtQkFBb0M7QUFDcEMsSUFBQUMsNEJBQTZDO0FBQzdDLGdCQUE2QjtBQUM3QixJQUFBQyxnQkFBaUM7QUFDakMsaUJBQThCO0FBQzlCLElBQUFDLGVBQWdDO0FBQ2hDLElBQUFDLG9CQUFxQztBQUNyQyxZQUF5QjtBQUN6QixJQUFBQyxpQkFBa0M7QUFDbEMsZ0JBQTZCOyIsCiAgIm5hbWVzIjogWyJhY3RpdmUtZmlsZS1wcm92aWRlciIsICJhc3luYy13aXRoLW5vdGljZSIsICJhdHRhY2htZW50LXBhdGgiLCAiYXR0YWNobWVudC11bml0LWZvbGRlciIsICJiYXNlcy12aWV3LXJlZ2lzdHJhciIsICJjYXNlLWluc2Vuc2l0aXZlLWZpbGUtaW5kZXgiLCAiY29kZS1ibG9jay1tYXJrZG93bi1pbmZvcm1hdGlvbiIsICJjb2RlLWJsb2NrLXJlZy1leHAiLCAiY29tbWFuZC1oYW5kbGVycyIsICJjb21tYW5kLXJlZ2lzdHJhciIsICJjb21tdW5pdHktcGx1Z2lucyIsICJjc3MtY2xhc3MiLCAiZGF0YS1oYW5kbGVyIiwgImRhdGF2aWV3LWxpbmsiLCAiZGVtby12YXVsdC1oZWxwZXIiLCAiZGVtby12YXVsdC1oZWxwZXItc2V0dGluZ3MiLCAiZGVtby12YXVsdC1uYW1pbmciLCAiZGVza3RvcC1kZW1vLXZhdWx0LW9wZW5lciIsICJkZXNrdG9wLXRydXN0ZWQtaW5wdXQiLCAiZWRpdG9yLWV4dGVuc2lvbi1yZWdpc3RyYXIiLCAiZWRpdG9yLXN1Z2dlc3QtcmVnaXN0cmFyIiwgImV4dGVuc2lvbnMtcmVnaXN0cmFyIiwgImZpbGUtY2hhbmdlIiwgImZpbGUtbWFuYWdlciIsICJmaWxlLXN5c3RlbSIsICJmb2xkZXItbm90ZSIsICJmcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cyIsICJob3Zlci1saW5rLXNvdXJjZS1yZWdpc3RyYXIiLCAiaHRtbC1lbGVtZW50IiwgImlzLWluLW9ic2lkaWFuIiwgImxpbmstdXBkYXRlLXByb2dyZXNzIiwgIm1hcmtkb3duLWNvZGUtYmxvY2stcHJvY2Vzc29yIiwgIm1hcmtkb3duLWNvZGUtYmxvY2stcHJvY2Vzc29yLXJlZ2lzdHJhciIsICJtYXJrZG93bi1wb3N0LXByb2Nlc3Nvci1yZWdpc3RyYXIiLCAibWFya2Rvd24tdmlldyIsICJtZW51LWV2ZW50LXJlZ2lzdHJhciIsICJtZXRhZGF0YS1jYWNoZSIsICJtb2JpbGUtdHJ1c3RlZC1pbnB1dCIsICJub3RlLXByaW9yaXR5IiwgIm5vdGVib29rLW5hdmlnYXRvciIsICJvYnNpZGlhbi1wcm90b2NvbC1oYW5kbGVyLXJlZ2lzdHJhciIsICJvYnNpZGlhbi1zZXR0aW5ncyIsICJwYXJzZS1saW5rIiwgInBhdGgtc2V0dGluZ3MiLCAicGx1Z2luLWNsaS1oYW5kbGVyLXJlZ2lzdHJhciIsICJyZXNvdXJjZS1sb2NrIiwgInJlc291cmNlLXVybCIsICJyaWJib24taWNvbi1yZWdpc3RyYXIiLCAic2V0dGluZy1jb21wb25lbnRzIiwgInNldHRpbmctZXgiLCAic2V0dGluZy1ncm91cC1leCIsICJzdGF0dXMtYmFyLWl0ZW0tcmVnaXN0cmFyIiwgInRydXN0ZWQtaW5wdXQiLCAidmF1bHQtZGVsZXRlIiwgInZhdWx0LXRyYW5zYWN0aW9uIiwgInZpZXctcmVnaXN0cmFyIl0KfQo=
@@ -22,6 +22,7 @@ export * as 'dataview-link' from './dataview-link.cjs';
22
22
  export * as 'dataview' from './dataview.cjs';
23
23
  export * as 'demo-vault-helper-settings' from './demo-vault-helper-settings.cjs';
24
24
  export * as 'demo-vault-helper' from './demo-vault-helper.cjs';
25
+ export * as 'demo-vault-naming' from './demo-vault-naming.cjs';
25
26
  export * as 'desktop-demo-vault-opener' from './desktop-demo-vault-opener.cjs';
26
27
  export * as 'desktop-trusted-input' from './desktop-trusted-input.cjs';
27
28
  export * as 'editor-extension-registrar' from './editor-extension-registrar.cjs';
@@ -50,6 +51,7 @@ export * as 'markdown-view' from './markdown-view.cjs';
50
51
  export * as 'markdown' from './markdown.cjs';
51
52
  export * as 'menu-event-registrar' from './menu-event-registrar.cjs';
52
53
  export * as 'metadata-cache' from './metadata-cache.cjs';
54
+ export * as 'mobile-trusted-input' from './mobile-trusted-input.cjs';
53
55
  export * as 'modals' from './modals/index.cjs';
54
56
  export * as 'note-priority' from './note-priority.cjs';
55
57
  export * as 'notebook-navigator' from './notebook-navigator.cjs';
@@ -72,6 +74,7 @@ export * as 'setting-ex' from './setting-ex.cjs';
72
74
  export * as 'setting-group-ex' from './setting-group-ex.cjs';
73
75
  export * as 'status-bar-item-registrar' from './status-bar-item-registrar.cjs';
74
76
  export * as 'templater' from './templater.cjs';
77
+ export * as 'trusted-input' from './trusted-input.cjs';
75
78
  export * as 'validation' from './validation.cjs';
76
79
  export * as 'vault-delete' from './vault-delete.cjs';
77
80
  export * as 'vault-transaction' from './vault-transaction.cjs';
@@ -0,0 +1,195 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function () {
7
+ function ensureBrowserProcess() {
8
+ const browserProcess = {
9
+ browser: true,
10
+ cwd() {
11
+ return '/';
12
+ },
13
+ env: {},
14
+ platform: 'android'
15
+ };
16
+
17
+ // eslint-disable-next-line obsidianmd/no-global-this, unicorn/no-unnecessary-global-this -- Must stay `globalThis`-qualified: in the emitted banner a bare `process` is a free identifier, so reading it where the host has none throws a ReferenceError instead of yielding `undefined`. That is the very case this function exists to handle.
18
+ const existingProcess = globalThis.process;
19
+
20
+ if (!existingProcess) {
21
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
22
+ globalThis.process = browserProcess;
23
+ return;
24
+ }
25
+
26
+ if (existingProcess.versions?.node) {
27
+ return;
28
+ }
29
+
30
+ const existingProcessRecord = existingProcess;
31
+
32
+ for (const [key, value] of Object.entries(browserProcess)) {
33
+ existingProcessRecord[key] ??= value;
34
+ }
35
+
36
+ existingProcessRecord['browser'] = true;
37
+ }
38
+
39
+ function keepName($unknown) {
40
+ return $unknown;
41
+ }
42
+
43
+ (function initCjs() {
44
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
45
+ const globalThisRecord = globalThis;
46
+ globalThisRecord['__name'] ??= keepName;
47
+ const originalRequire = require;
48
+ if (originalRequire && !originalRequire.__isPatched) {
49
+ // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
50
+ require = Object.assign(
51
+ (id) => requirePatched(id),
52
+ originalRequire,
53
+ {
54
+ __isPatched: true
55
+ }
56
+ );
57
+ }
58
+
59
+ globalThisRecord['__extractDefault'] ??= extractDefault;
60
+
61
+ ensureBrowserProcess();
62
+
63
+ function extractDefault(module) {
64
+ return module && module.__esModule && 'default' in module ? module.default : module;
65
+ }
66
+
67
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
68
+ '@codemirror/autocomplete',
69
+ '@codemirror/collab',
70
+ '@codemirror/commands',
71
+ '@codemirror/language',
72
+ '@codemirror/lint',
73
+ '@codemirror/search',
74
+ '@codemirror/state',
75
+ '@codemirror/text',
76
+ '@codemirror/view',
77
+ '@lezer/common',
78
+ '@lezer/highlight',
79
+ '@lezer/lr',
80
+ 'obsidian']
81
+ );
82
+
83
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = new Set([
84
+ '@codemirror/closebrackets',
85
+ '@codemirror/comment',
86
+ '@codemirror/fold',
87
+ '@codemirror/gutter',
88
+ '@codemirror/highlight',
89
+ '@codemirror/history',
90
+ '@codemirror/matchbrackets',
91
+ '@codemirror/panel',
92
+ '@codemirror/rangeset',
93
+ '@codemirror/rectangular-selection',
94
+ '@codemirror/stream-parser',
95
+ '@codemirror/tooltip']
96
+ );
97
+
98
+ function requirePatched(id) {
99
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
100
+ return originalRequire?.(id);
101
+ }
102
+
103
+ // eslint-disable-next-line @typescript-eslint/no-deprecated, obsidianmd/no-global-this -- Need access to app. Actively use globalThis.
104
+ if (globalThis.app.isMobile) {
105
+ if (id === 'process' || id === 'node:process') {
106
+ // eslint-disable-next-line no-console -- Valid usage.
107
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
108
+
109
+ return process;
110
+ }
111
+ } else {
112
+ const module = originalRequire?.(id);
113
+ if (module) {
114
+ return extractDefault(module);
115
+ }
116
+ }
117
+
118
+ // eslint-disable-next-line no-console -- Valid usage.
119
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
120
+ return {};
121
+ }
122
+ })();
123
+ })();
124
+
125
+ "use strict";
126
+ var __defProp = Object.defineProperty;
127
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
128
+ var __getOwnPropNames = Object.getOwnPropertyNames;
129
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
130
+ var __export = (target, all) => {
131
+ for (var name in all)
132
+ __defProp(target, name, { get: all[name], enumerable: true });
133
+ };
134
+ var __copyProps = (to, from, except, desc) => {
135
+ if (from && typeof from === "object" || typeof from === "function") {
136
+ for (let key of __getOwnPropNames(from))
137
+ if (!__hasOwnProp.call(to, key) && key !== except)
138
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
139
+ }
140
+ return to;
141
+ };
142
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
143
+ var mobile_trusted_input_exports = {};
144
+ __export(mobile_trusted_input_exports, {
145
+ clickElement: () => clickElement,
146
+ clickMouse: () => clickMouse,
147
+ hoverElement: () => hoverElement,
148
+ moveMouse: () => moveMouse,
149
+ pressKey: () => pressKey,
150
+ typeIntoEditor: () => typeIntoEditor,
151
+ unhoverElement: () => unhoverElement
152
+ });
153
+ module.exports = __toCommonJS(mobile_trusted_input_exports);
154
+ async function clickElement(params) {
155
+ await getSeamFunction("clickElement")(params);
156
+ }
157
+ async function clickMouse(params) {
158
+ await getSeamFunction("clickMouse")(params);
159
+ }
160
+ async function hoverElement(params) {
161
+ await getSeamFunction("hoverElement")(params);
162
+ }
163
+ async function moveMouse(params) {
164
+ await getSeamFunction("moveMouse")(params);
165
+ }
166
+ async function pressKey(params) {
167
+ await getSeamFunction("pressKey")(params);
168
+ }
169
+ async function typeIntoEditor(params) {
170
+ await getSeamFunction("typeIntoEditor")(params);
171
+ }
172
+ async function unhoverElement(params) {
173
+ await getSeamFunction("unhoverElement")(params);
174
+ }
175
+ function getSeamFunction(name) {
176
+ const holder = globalThis;
177
+ const seamFunction = holder.__obsidianIntegrationTesting?.trustedInput?.[name];
178
+ if (!seamFunction) {
179
+ throw new Error(
180
+ `Trusted input is unavailable on mobile: \`window.__obsidianIntegrationTesting.trustedInput.${name}\` is not installed. A phone has no in-renderer route to a trusted event, so the injection is a round-trip to the host over the \`obsidian-integration-testing\` Appium transport's channel \u2014 which means these helpers only work inside an app that harness bootstrapped.`
181
+ );
182
+ }
183
+ return seamFunction;
184
+ }
185
+ // Annotate the CommonJS export names for ESM import in node:
186
+ 0 && (module.exports = {
187
+ clickElement,
188
+ clickMouse,
189
+ hoverElement,
190
+ moveMouse,
191
+ pressKey,
192
+ typeIntoEditor,
193
+ unhoverElement
194
+ });
195
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL21vYmlsZS10cnVzdGVkLWlucHV0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTW9iaWxlLW9ubHkgdHJ1c3RlZCBpbnB1dCBoZWxwZXJzLiBUaGVyZSBpcyBubyBpbi1yZW5kZXJlciByb3V0ZSB0byBhIHRydXN0ZWQgZXZlbnQgb24gYSBwaG9uZSBcdTIwMTRcbiAqIGB3ZWJDb250ZW50cy5zZW5kSW5wdXRFdmVudGAgaXMgRWxlY3Ryb24tb25seSBhbmQgYSBkaXNwYXRjaGVkIGV2ZW50IGlzIHVudHJ1c3RlZCBcdTIwMTQgc28gdGhlIGluamVjdGlvblxuICogaGFzIHRvIGJlIGEgcm91bmQtdHJpcDogdGhlIHJlcXVlc3QgZ29lcyB0byB0aGUgaG9zdCBvdmVyIHRoZSBgb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZ2AgaGFybmVzcydzXG4gKiBiaW5kaW5nIGNoYW5uZWwsIGFuZCB0aGUgaG9zdCBpbmplY3RzIGl0IGludG8gdGhlIFdlYlZpZXcgb3ZlciBDRFAuXG4gKlxuICogVGhhdCBjaGFubmVsIGlzIGluc3RhbGxlZCBieSB0aGUgaGFybmVzcydzIEFwcGl1bSB0cmFuc3BvcnQsIHNvIHRoZXNlIGhlbHBlcnMgKipkZWxlZ2F0ZSoqIHRvIHRoZVxuICogaGFybmVzcyByYXRoZXIgdGhhbiByZWltcGxlbWVudGluZyB0aGUgd2lyZSBmb3JtYXQ6IHRoZXkgY2FsbFxuICogYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnRydXN0ZWRJbnB1dC4qYCwgd2hpY2ggaG9sZHMgdGhlIHZlcnkgZnVuY3Rpb24gb2JqZWN0cyB0aGUgaGFybmVzc1xuICogc2VlZHMgaW50byBhbiBgZXZhbEluT2JzaWRpYW5gIGNsb3N1cmUncyBgbGliYCBiYWcuIERlbGVnYXRpbmcgaXMgd2hhdCBrZWVwcyB0aGUgbW9iaWxlIHNlbWFudGljcyBcdTIwMTRcbiAqIHRhcCwgbG9uZy1wcmVzcyBmb3IgYGJ1dHRvbjogJ3JpZ2h0J2AsIGEgdGhyb3cgZm9yIGAnbWlkZGxlJ2AsIHRoZSBgcHJlc3NLZXlgIGtleSBzZXQsIGFuZCB0aGUgdGhyb3dzXG4gKiBmb3IgdGhlIGA6aG92ZXJgIGhlbHBlcnMgXHUyMDE0IGlkZW50aWNhbCB0byB0aGUgaGFybmVzcydzIG93biBjb3B5IGZvciBmcmVlLCBpbnN0ZWFkIG9mIGEgc2Vjb25kXG4gKiBpbXBsZW1lbnRhdGlvbiB0byBoYW5kLXN5bmMgKHNlZSB0aGUgcHJvamVjdCBgQUdFTlRTLm1kYCAqKkw0KiopLlxuICpcbiAqIFRoZSBuYW1lc3BhY2Ugc2hhcGUgaXMgZGVjbGFyZWQgKipsb2NhbGx5Kio6IHRoZSBoYXJuZXNzIG11c3QgbmV2ZXIgYmUgYSBkZXBlbmRlbmN5IG9mIHRoaXMgbGlicmFyeSwgaW5cbiAqIGVpdGhlciBkaXJlY3Rpb24sIGF0IHJ1bnRpbWUgb3IgaW4gdHlwZXMuXG4gKlxuICogKipDb25zZXF1ZW5jZSwgYW5kIGl0IGlzIGRlbGliZXJhdGU6KiogdGhlc2UgaGVscGVycyBvbmx5IHdvcmsgaW5zaWRlIGFuIGFwcCB0aGUgaGFybmVzcyBib290c3RyYXBwZWQuXG4gKiBPdXRzaWRlIG9uZSB0aGV5IHRocm93IGEgbWVzc2FnZSBzYXlpbmcgc28sIHJhdGhlciB0aGFuIHNpbGVudGx5IGRvaW5nIG5vdGhpbmcgXHUyMDE0IGEgbm8tb3Agd291bGQgcmVjcmVhdGVcbiAqIGV4YWN0bHkgdGhlIGZhbHNlLWNvbmZpZGVuY2UgZmFpbHVyZSB0cnVzdGVkIGlucHV0IGV4aXN0cyB0byBlbmQuIENvbnN1bWVycyB3YW50aW5nIHRoZSBwbGF0Zm9ybS1jb3JyZWN0XG4gKiBoZWxwZXIgc2hvdWxkIGltcG9ydCB0aGUge0BsaW5rIC4uL3RydXN0ZWQtaW5wdXQudHMgfCB0cnVzdGVkLWlucHV0fSBmYWNhZGUgaW5zdGVhZCBvZiB0aGlzIG1vZHVsZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIENsaWNrRWxlbWVudFBhcmFtcyxcbiAgQ2xpY2tNb3VzZVBhcmFtcyxcbiAgSG92ZXJFbGVtZW50UGFyYW1zLFxuICBNb3ZlTW91c2VQYXJhbXMsXG4gIFByZXNzS2V5UGFyYW1zLFxuICBUeXBlSW50b0VkaXRvclBhcmFtcyxcbiAgVW5ob3ZlckVsZW1lbnRQYXJhbXNcbiAgLy8gVGhlIHBhcmFtZXRlciBjb250cmFjdHMgbGl2ZSB3aXRoIHRoZSBkZXNrdG9wIHR3aW4gYW5kIGFyZSBzaGFyZWQgdmVyYmF0aW0sIHNvIHRoZSB0d28gcGxhdGZvcm1zXG4gIC8vIENhbm5vdCBkcmlmdCBhcGFydCBvbiB3aGF0IGEgY2FsbGVyIHBhc3Nlcy4gQSB0eXBlLW9ubHkgaW1wb3J0IGxvYWRzIG5vdGhpbmcgKEw1KS5cbn0gZnJvbSAnLi9kZXNrdG9wLXRydXN0ZWQtaW5wdXQudHMnO1xuXG4vKipcbiAqIFRoZSBnbG9iYWwgdGhlIGhhcm5lc3MgYm9vdHN0cmFwcyBpdHMgbmFtZXNwYWNlIG9udG8uXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0hvbGRlciB7XG4gIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IE9ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nTmFtZXNwYWNlO1xufVxuXG4vKipcbiAqIFRoZSBwYXJ0IG9mIHRoZSBoYXJuZXNzIG5hbWVzcGFjZSB0aGlzIG1vZHVsZSByZWFkcy4gRXZlcnl0aGluZyBlbHNlIG9uIGl0IGlzIG5vbmUgb2YgdGhpcyBtb2R1bGUnc1xuICogYnVzaW5lc3MuXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ05hbWVzcGFjZSB7XG4gIHRydXN0ZWRJbnB1dD86IFBhcnRpYWw8VHJ1c3RlZElucHV0U2VhbT47XG59XG5cbi8qKlxuICogVGhlIHRydXN0ZWQtaW5wdXQgc2VhbSB0aGUgYG9ic2lkaWFuLWludGVncmF0aW9uLXRlc3RpbmdgIGhhcm5lc3MgcHVibGlzaGVzIG9uIGl0cyBuYW1lc3BhY2UuXG4gKlxuICogRGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZDogdGhlIGhhcm5lc3MgaXMgbm90IGEgZGVwZW5kZW5jeSBvZiB0aGlzIGxpYnJhcnkuIEl0IG1pcnJvcnNcbiAqIGBuYW1lc3BhY2UtYm9vdHN0cmFwLnRzYCdzIGB0cnVzdGVkSW5wdXRgIG9iamVjdCwgYW5kIHRoZSBtaXJyb3JpbmcgaXMgYnkgaGFuZCBcdTIwMTQgdGhlIHNhbWVcbiAqIGJlaGF2aW9yYWwtc3luYyBvYmxpZ2F0aW9uIHRoZSBkZXNrdG9wIHR3aW4gY2Fycmllcy5cbiAqL1xuaW50ZXJmYWNlIFRydXN0ZWRJbnB1dFNlYW0ge1xuICBjbGlja0VsZW1lbnQocGFyYW1zOiBDbGlja0VsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICBjbGlja01vdXNlKHBhcmFtczogQ2xpY2tNb3VzZVBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIGhvdmVyRWxlbWVudChwYXJhbXM6IEhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIG1vdmVNb3VzZShwYXJhbXM6IE1vdmVNb3VzZVBhcmFtcyk6IFByb21pc2U8dm9pZD47XG4gIHByZXNzS2V5KHBhcmFtczogUHJlc3NLZXlQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuICB0eXBlSW50b0VkaXRvcihwYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcbiAgdW5ob3ZlckVsZW1lbnQocGFyYW1zOiBVbmhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQ2xpY2tzIHRoZSBjZW50ZXIgb2YgYW4gZWxlbWVudCB1c2luZyAqKnRydXN0ZWQqKiB0b3VjaCBpbnB1dCBcdTIwMTQgYSBDRFAgdGFwIGluIHRoZSBXZWJWaWV3LCBpbmplY3RlZCBieVxuICogdGhlIGhvc3QuXG4gKlxuICogVGhlIGVsZW1lbnQtcmVsYXRpdmUgY291bnRlcnBhcnQgb2Yge0BsaW5rIGNsaWNrTW91c2V9LiBgYnV0dG9uOiAncmlnaHQnYCBpcyB0aGUgbG9uZy1wcmVzcyB0aGF0IG9wZW5zXG4gKiBPYnNpZGlhbiBNb2JpbGUncyBjb250ZXh0IG1lbnU7IGAnbWlkZGxlJ2AgdGhyb3dzLCBiZWNhdXNlIHRvdWNoIGhhcyBubyBnZXN0dXJlIGZvciBpdCBhbmQgaW52ZW50aW5nXG4gKiBvbmUgd291bGQgYmUgd29yc2UgdGhhbiBzYXlpbmcgc28uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIGNsaWNrLCB0aGUgYnV0dG9uIHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNsaWNrIGhhcyBiZWVuIGluamVjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xpY2tFbGVtZW50KHBhcmFtczogQ2xpY2tFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbignY2xpY2tFbGVtZW50JykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBDbGlja3MgYXQgdGhlIGdpdmVuIHZpZXdwb3J0IGNvb3JkaW5hdGVzIHVzaW5nICoqdHJ1c3RlZCoqIHRvdWNoIGlucHV0LCBpbmplY3RlZCBieSB0aGUgaG9zdCBvdmVyIENEUC5cbiAqXG4gKiBUaGUgY29vcmRpbmF0ZXMgYXJlIENTUyBwaXhlbHMgaW4gdGhlIFdlYlZpZXcncyBvd24gdmlld3BvcnQgXHUyMDE0IHdoaWNoIGlzIHdoYXQgQ0RQIHRha2VzIFx1MjAxNCBzb1xuICogYGRldmljZVBpeGVsUmF0aW9gIG5ldmVyIGVudGVycyB0aGUgcGljdHVyZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHZpZXdwb3J0IGNvb3JkaW5hdGVzIHRvIGNsaWNrIGF0LCB0aGUgYnV0dG9uIHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNsaWNrIGhhcyBiZWVuIGluamVjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xpY2tNb3VzZShwYXJhbXM6IENsaWNrTW91c2VQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2V0U2VhbUZ1bmN0aW9uKCdjbGlja01vdXNlJykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBBbHdheXMgdGhyb3dzOiBgOmhvdmVyYCBoYXMgbm8gdG91Y2ggZXF1aXZhbGVudC5cbiAqXG4gKiBBIHNpbGVudCBuby1vcCBoZXJlIHdvdWxkIGxldCBhIGhvdmVyIHRlc3QgcGFzcyBvbiBhIHBob25lIHdpdGhvdXQgaG92ZXJpbmcgYW55dGhpbmcsIHNvIHRoZSBtb2JpbGUgYXJtXG4gKiByZWZ1c2VzIGluc3RlYWQuIEdhdGUgdGhlIGFzc2VydGlvbiBvbiBgUGxhdGZvcm0uaXNEZXNrdG9wQXBwYCwgb3IgZHJpdmUgdGhlIGVsZW1lbnQgd2l0aFxuICoge0BsaW5rIGNsaWNrRWxlbWVudH0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIGhvdmVyLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBuZXZlciByZXNvbHZlcyBcdTIwMTQgdGhlIGNhbGwgdGhyb3dzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaG92ZXJFbGVtZW50KHBhcmFtczogSG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbignaG92ZXJFbGVtZW50JykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBBbHdheXMgdGhyb3dzOiBhIHRvdWNoIHNjcmVlbiBoYXMgbm8gcGVyc2lzdGVudCBwb2ludGVyIHRvIG1vdmUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB2aWV3cG9ydCBjb29yZGluYXRlcyB0byBtb3ZlIHRvLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBuZXZlciByZXNvbHZlcyBcdTIwMTQgdGhlIGNhbGwgdGhyb3dzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbW92ZU1vdXNlKHBhcmFtczogTW92ZU1vdXNlUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbignbW92ZU1vdXNlJykocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBQcmVzc2VzIGEgc2luZ2xlIGtleSB1c2luZyAqKnRydXN0ZWQqKiBrZXlib2FyZCBpbnB1dCwgaW5qZWN0ZWQgYnkgdGhlIGhvc3Qgb3ZlciBDRFAuXG4gKlxuICogTmFtZWQga2V5cyAoYCdFbnRlcidgLCBgJ0VzY2FwZSdgLCBgJ1RhYidgLCBgJ0JhY2tzcGFjZSdgLCBgJ0RlbGV0ZSdgLCB0aGUgYXJyb3dzKSBhbmQgc2luZ2xlIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBhcmUgc3VwcG9ydGVkOyBhbnl0aGluZyBlbHNlIHRocm93cyByYXRoZXIgdGhhbiBwcmVzc2luZyBub3RoaW5nLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUga2V5IHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGtleSBwcmVzcyBoYXMgYmVlbiBpbmplY3RlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZXNzS2V5KHBhcmFtczogUHJlc3NLZXlQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2V0U2VhbUZ1bmN0aW9uKCdwcmVzc0tleScpKHBhcmFtcyk7XG59XG5cbi8qKlxuICogVHlwZXMgdGV4dCBpbnRvIGEgQ29kZU1pcnJvciBlZGl0b3IgdXNpbmcgKip0cnVzdGVkKioga2V5Ym9hcmQgaW5wdXQsIGluamVjdGVkIGJ5IHRoZSBob3N0IG92ZXIgQ0RQLlxuICpcbiAqIEZvY3VzZXMgdGhlIGVkaXRvciAoY2FyZXQgdG8gdGhlIGVuZCksIHByZXNzZXMgZXZlcnkgY29kZSBwb2ludCBvZiB0aGUgdGV4dCwgdGhlbiBwb2xscyB1bnRpbCB0aGVcbiAqIGRvY3VtZW50IHJlZmxlY3RzIHRoZSBpbnB1dCBvciBhIGJvdW5kZWQgdGltZW91dCBlbGFwc2VzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUga2V5c3Ryb2tlcyBoYXZlIHNldHRsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0eXBlSW50b0VkaXRvcihwYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGdldFNlYW1GdW5jdGlvbigndHlwZUludG9FZGl0b3InKShwYXJhbXMpO1xufVxuXG4vKipcbiAqIEFsd2F5cyB0aHJvd3MsIGZvciB0aGUgc2FtZSByZWFzb24gYXMge0BsaW5rIGhvdmVyRWxlbWVudH06IHRoZXJlIGlzIG5vIGA6aG92ZXJgIHN0YXRlIHRvIGNsZWFyLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWxlbWVudCB0byBtb3ZlIHRoZSBwb2ludGVyIGF3YXkgZnJvbS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgbmV2ZXIgcmVzb2x2ZXMgXHUyMDE0IHRoZSBjYWxsIHRocm93cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVuaG92ZXJFbGVtZW50KHBhcmFtczogVW5ob3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZ2V0U2VhbUZ1bmN0aW9uKCd1bmhvdmVyRWxlbWVudCcpKHBhcmFtcyk7XG59XG5cbmZ1bmN0aW9uIGdldFNlYW1GdW5jdGlvbjxLZXkgZXh0ZW5kcyBrZXlvZiBUcnVzdGVkSW5wdXRTZWFtPihuYW1lOiBLZXkpOiBUcnVzdGVkSW5wdXRTZWFtW0tleV0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9uby1nbG9iYWwtdGhpcyAtLSBUaGUgaGFybmVzcyBpbnN0YWxscyBpdHMgbmFtZXNwYWNlIG9uIHRoZSByZWFsbSBnbG9iYWw7IHRoZXJlIGlzIG5vd2hlcmUgZWxzZSB0byByZWFkIGl0IGZyb20uXG4gIGNvbnN0IGhvbGRlciA9IGdsb2JhbFRoaXMgYXMgUGFydGlhbDxPYnNpZGlhbkludGVncmF0aW9uVGVzdGluZ0hvbGRlcj47XG4gIGNvbnN0IHNlYW1GdW5jdGlvbiA9IGhvbGRlci5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy50cnVzdGVkSW5wdXQ/LltuYW1lXTtcbiAgaWYgKCFzZWFtRnVuY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgVHJ1c3RlZCBpbnB1dCBpcyB1bmF2YWlsYWJsZSBvbiBtb2JpbGU6IFxcYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nLnRydXN0ZWRJbnB1dC4ke25hbWV9XFxgIGlzIG5vdCBpbnN0YWxsZWQuIGBcbiAgICAgICAgKyAnQSBwaG9uZSBoYXMgbm8gaW4tcmVuZGVyZXIgcm91dGUgdG8gYSB0cnVzdGVkIGV2ZW50LCBzbyB0aGUgaW5qZWN0aW9uIGlzIGEgcm91bmQtdHJpcCB0byB0aGUgaG9zdCBvdmVyIHRoZSAnXG4gICAgICAgICsgJ2BvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nYCBBcHBpdW0gdHJhbnNwb3J0XFwncyBjaGFubmVsIFx1MjAxNCB3aGljaCBtZWFucyB0aGVzZSBoZWxwZXJzIG9ubHkgd29yayBpbnNpZGUgYW4gYXBwIHRoYXQgJ1xuICAgICAgICArICdoYXJuZXNzIGJvb3RzdHJhcHBlZC4nXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBzZWFtRnVuY3Rpb247XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdGQSxlQUFzQixhQUFhLFFBQTJDO0FBQzVFLFFBQU0sZ0JBQWdCLGNBQWMsRUFBRSxNQUFNO0FBQzlDO0FBV0EsZUFBc0IsV0FBVyxRQUF5QztBQUN4RSxRQUFNLGdCQUFnQixZQUFZLEVBQUUsTUFBTTtBQUM1QztBQVlBLGVBQXNCLGFBQWEsUUFBMkM7QUFDNUUsUUFBTSxnQkFBZ0IsY0FBYyxFQUFFLE1BQU07QUFDOUM7QUFRQSxlQUFzQixVQUFVLFFBQXdDO0FBQ3RFLFFBQU0sZ0JBQWdCLFdBQVcsRUFBRSxNQUFNO0FBQzNDO0FBV0EsZUFBc0IsU0FBUyxRQUF1QztBQUNwRSxRQUFNLGdCQUFnQixVQUFVLEVBQUUsTUFBTTtBQUMxQztBQVdBLGVBQXNCLGVBQWUsUUFBNkM7QUFDaEYsUUFBTSxnQkFBZ0IsZ0JBQWdCLEVBQUUsTUFBTTtBQUNoRDtBQVFBLGVBQXNCLGVBQWUsUUFBNkM7QUFDaEYsUUFBTSxnQkFBZ0IsZ0JBQWdCLEVBQUUsTUFBTTtBQUNoRDtBQUVBLFNBQVMsZ0JBQW9ELE1BQWtDO0FBRTdGLFFBQU0sU0FBUztBQUNmLFFBQU0sZUFBZSxPQUFPLDhCQUE4QixlQUFlLElBQUk7QUFDN0UsTUFBSSxDQUFDLGNBQWM7QUFDakIsVUFBTSxJQUFJO0FBQUEsTUFDUiw4RkFBOEYsSUFBSTtBQUFBLElBSXBHO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K