obsidian-integration-testing 11.0.0 → 12.1.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 (234) hide show
  1. package/dist/lib/cjs/adb-device-list.cjs +54 -0
  2. package/dist/lib/cjs/adb-device-list.d.cts +72 -0
  3. package/dist/lib/cjs/android-sdk.cjs +52 -0
  4. package/dist/lib/cjs/android-sdk.d.cts +29 -0
  5. package/dist/lib/cjs/app-startup-progress.cjs +87 -0
  6. package/dist/lib/cjs/app-startup-progress.d.cts +128 -0
  7. package/dist/lib/cjs/appium-server-marker.cjs +112 -0
  8. package/dist/lib/cjs/appium-server-marker.d.cts +103 -0
  9. package/dist/lib/cjs/avd-probe-verdict.cjs +90 -0
  10. package/dist/lib/cjs/avd-probe-verdict.d.cts +175 -0
  11. package/dist/lib/cjs/cli.cjs +104 -19
  12. package/dist/lib/cjs/cli.d.cts +16 -8
  13. package/dist/lib/cjs/community-plugin-registry.cjs +52 -0
  14. package/dist/lib/cjs/community-plugin-registry.d.cts +116 -0
  15. package/dist/lib/cjs/config-directory-fallback-error.cjs +57 -0
  16. package/dist/lib/cjs/config-directory-fallback-error.d.cts +64 -0
  17. package/dist/lib/cjs/config-directory.cjs +46 -0
  18. package/dist/lib/cjs/config-directory.d.cts +45 -0
  19. package/dist/lib/cjs/connect-to-cdp.cjs +13 -7
  20. package/dist/lib/cjs/connect-to-cdp.d.cts +19 -0
  21. package/dist/lib/cjs/context-provider.cjs +12 -1
  22. package/dist/lib/cjs/context-provider.d.cts +26 -3
  23. package/dist/lib/cjs/demo-vault-bootstrap.cjs +148 -0
  24. package/dist/lib/cjs/demo-vault-bootstrap.d.cts +114 -0
  25. package/dist/lib/cjs/demo-vault-populate.cjs +38 -10
  26. package/dist/lib/cjs/demo-vault-populate.d.cts +70 -0
  27. package/dist/lib/cjs/device-readiness.cjs +38 -3
  28. package/dist/lib/cjs/device-readiness.d.cts +83 -9
  29. package/dist/lib/cjs/emulator-arguments.cjs +6 -2
  30. package/dist/lib/cjs/emulator-arguments.d.cts +26 -0
  31. package/dist/lib/cjs/emulator-backend.cjs +71 -0
  32. package/dist/lib/cjs/emulator-backend.d.cts +76 -0
  33. package/dist/lib/cjs/emulator-liveness.cjs +72 -0
  34. package/dist/lib/cjs/emulator-liveness.d.cts +158 -0
  35. package/dist/lib/cjs/emulator-snapshot.cjs +57 -0
  36. package/dist/lib/cjs/emulator-snapshot.d.cts +68 -0
  37. package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
  38. package/dist/lib/cjs/eval-in-obsidian.d.cts +42 -13
  39. package/dist/lib/cjs/global-setup-core.cjs +30 -30
  40. package/dist/lib/cjs/global-setup-core.d.cts +27 -2
  41. package/dist/lib/cjs/headless-vault-config.cjs +51 -0
  42. package/dist/lib/cjs/headless-vault-config.d.cts +67 -0
  43. package/dist/lib/cjs/index.cjs +24 -1
  44. package/dist/lib/cjs/index.d.cts +14 -5
  45. package/dist/lib/cjs/installer-asset.cjs +1 -1
  46. package/dist/lib/cjs/installer-asset.d.cts +1 -1
  47. package/dist/lib/cjs/integration-setup-failed-error.cjs +62 -0
  48. package/dist/lib/cjs/integration-setup-failed-error.d.cts +66 -0
  49. package/dist/lib/cjs/jest/global-setup.cjs +2 -2
  50. package/dist/lib/cjs/jest/global-setup.d.cts +5 -1
  51. package/dist/lib/cjs/kill-process-tree.cjs +18 -7
  52. package/dist/lib/cjs/kill-process-tree.d.cts +10 -2
  53. package/dist/lib/cjs/library.cjs +1 -1
  54. package/dist/lib/cjs/mobile-input.cjs +173 -0
  55. package/dist/lib/cjs/mobile-input.d.cts +156 -0
  56. package/dist/lib/cjs/namespace-bootstrap.cjs +92 -9
  57. package/dist/lib/cjs/obsidian-installer.cjs +1 -1
  58. package/dist/lib/cjs/obsidian-instance.cjs +52 -3
  59. package/dist/lib/cjs/obsidian-instance.d.cts +12 -0
  60. package/dist/lib/cjs/obsidian-metadata.cjs +123 -17
  61. package/dist/lib/cjs/obsidian-metadata.d.cts +17 -6
  62. package/dist/lib/cjs/obsidian-version-switch.cjs +3 -3
  63. package/dist/lib/cjs/open-obsidian-settings-tab.cjs +1 -1
  64. package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +3 -2
  65. package/dist/lib/cjs/owned-instance-exit-marker.cjs +99 -0
  66. package/dist/lib/cjs/owned-instance-exit-marker.d.cts +106 -0
  67. package/dist/lib/cjs/owned-instance-exited-error.cjs +106 -0
  68. package/dist/lib/cjs/owned-instance-exited-error.d.cts +98 -0
  69. package/dist/lib/cjs/owned-vault-seed.cjs +9 -5
  70. package/dist/lib/cjs/owned-vault-seed.d.cts +24 -3
  71. package/dist/lib/cjs/parent-liveness.cjs +42 -5
  72. package/dist/lib/cjs/parent-liveness.d.cts +37 -5
  73. package/dist/lib/cjs/port-owner.cjs +61 -0
  74. package/dist/lib/cjs/port-owner.d.cts +47 -0
  75. package/dist/lib/cjs/process-capture.cjs +62 -0
  76. package/dist/lib/cjs/process-capture.d.cts +83 -0
  77. package/dist/lib/cjs/process-exit-message.cjs +14 -8
  78. package/dist/lib/cjs/process-exit-message.d.cts +37 -3
  79. package/dist/lib/cjs/process-liveness.cjs +51 -0
  80. package/dist/lib/cjs/process-liveness.d.cts +18 -0
  81. package/dist/lib/cjs/release-catalog.cjs +73 -0
  82. package/dist/lib/cjs/release-catalog.d.cts +125 -0
  83. package/dist/lib/cjs/run-version-matrix.cjs +1 -1
  84. package/dist/lib/cjs/run-version-matrix.d.cts +1 -1
  85. package/dist/lib/cjs/teardown-verdict.cjs +53 -0
  86. package/dist/lib/cjs/teardown-verdict.d.cts +69 -0
  87. package/dist/lib/cjs/temporary-vault.cjs +43 -8
  88. package/dist/lib/cjs/temporary-vault.d.cts +47 -5
  89. package/dist/lib/cjs/transport-appium.cjs +223 -17
  90. package/dist/lib/cjs/transport-appium.d.cts +104 -3
  91. package/dist/lib/cjs/transport-desktop-cdp.cjs +201 -6
  92. package/dist/lib/cjs/transport-desktop-cdp.d.cts +100 -0
  93. package/dist/lib/cjs/transport-factory.cjs +1165 -142
  94. package/dist/lib/cjs/transport-factory.d.cts +10 -1
  95. package/dist/lib/cjs/transport-options.cjs +11 -3
  96. package/dist/lib/cjs/transport-options.d.cts +131 -12
  97. package/dist/lib/cjs/transport.cjs +1 -1
  98. package/dist/lib/cjs/transport.d.cts +7 -1
  99. package/dist/lib/cjs/vault-plugin-install.cjs +40 -0
  100. package/dist/lib/cjs/vault-plugin-install.d.cts +64 -0
  101. package/dist/lib/cjs/vault-teardown-verdict.cjs +42 -0
  102. package/dist/lib/cjs/vault-teardown-verdict.d.cts +57 -0
  103. package/dist/lib/cjs/version-matrix.cjs +1 -1
  104. package/dist/lib/cjs/version-matrix.d.cts +2 -2
  105. package/dist/lib/cjs/vitest/global-setup.cjs +13 -7
  106. package/dist/lib/cjs/vitest/global-setup.d.cts +5 -1
  107. package/dist/lib/cjs/vitest/setup.cjs +2 -1
  108. package/dist/lib/cjs/vitest/setup.d.cts +5 -0
  109. package/dist/lib/cjs/vitest/typings.d.cts +6 -4
  110. package/dist/lib/cjs/webview-cdp.cjs +263 -0
  111. package/dist/lib/cjs/webview-cdp.d.cts +156 -0
  112. package/dist/lib/cjs/wedged-appium-server.cjs +113 -0
  113. package/dist/lib/cjs/wedged-appium-server.d.cts +187 -0
  114. package/dist/lib/esm/adb-device-list.d.mts +72 -0
  115. package/dist/lib/esm/adb-device-list.mjs +28 -0
  116. package/dist/lib/esm/android-sdk.d.mts +29 -0
  117. package/dist/lib/esm/android-sdk.mjs +18 -0
  118. package/dist/lib/esm/app-startup-progress.d.mts +128 -0
  119. package/dist/lib/esm/app-startup-progress.mjs +59 -0
  120. package/dist/lib/esm/appium-server-marker.d.mts +103 -0
  121. package/dist/lib/esm/appium-server-marker.mjs +89 -0
  122. package/dist/lib/esm/avd-probe-verdict.d.mts +175 -0
  123. package/dist/lib/esm/avd-probe-verdict.mjs +62 -0
  124. package/dist/lib/esm/cli.d.mts +16 -8
  125. package/dist/lib/esm/cli.mjs +110 -19
  126. package/dist/lib/esm/community-plugin-registry.d.mts +116 -0
  127. package/dist/lib/esm/community-plugin-registry.mjs +23 -0
  128. package/dist/lib/esm/config-directory-fallback-error.d.mts +64 -0
  129. package/dist/lib/esm/config-directory-fallback-error.mjs +33 -0
  130. package/dist/lib/esm/config-directory.d.mts +45 -0
  131. package/dist/lib/esm/config-directory.mjs +21 -0
  132. package/dist/lib/esm/connect-to-cdp.d.mts +19 -0
  133. package/dist/lib/esm/connect-to-cdp.mjs +13 -7
  134. package/dist/lib/esm/context-provider.d.mts +26 -3
  135. package/dist/lib/esm/context-provider.mjs +10 -1
  136. package/dist/lib/esm/demo-vault-bootstrap.d.mts +114 -0
  137. package/dist/lib/esm/demo-vault-bootstrap.mjs +127 -0
  138. package/dist/lib/esm/demo-vault-populate.d.mts +70 -0
  139. package/dist/lib/esm/demo-vault-populate.mjs +35 -9
  140. package/dist/lib/esm/device-readiness.d.mts +83 -9
  141. package/dist/lib/esm/device-readiness.mjs +34 -2
  142. package/dist/lib/esm/emulator-arguments.d.mts +26 -0
  143. package/dist/lib/esm/emulator-arguments.mjs +6 -2
  144. package/dist/lib/esm/emulator-backend.d.mts +76 -0
  145. package/dist/lib/esm/emulator-backend.mjs +45 -0
  146. package/dist/lib/esm/emulator-liveness.d.mts +158 -0
  147. package/dist/lib/esm/emulator-liveness.mjs +47 -0
  148. package/dist/lib/esm/emulator-snapshot.d.mts +68 -0
  149. package/dist/lib/esm/emulator-snapshot.mjs +32 -0
  150. package/dist/lib/esm/eval-in-obsidian.d.mts +42 -13
  151. package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
  152. package/dist/lib/esm/global-setup-core.d.mts +27 -2
  153. package/dist/lib/esm/global-setup-core.mjs +34 -35
  154. package/dist/lib/esm/headless-vault-config.d.mts +67 -0
  155. package/dist/lib/esm/headless-vault-config.mjs +31 -0
  156. package/dist/lib/esm/index.d.mts +14 -5
  157. package/dist/lib/esm/index.mjs +26 -2
  158. package/dist/lib/esm/installer-asset.d.mts +1 -1
  159. package/dist/lib/esm/installer-asset.mjs +1 -1
  160. package/dist/lib/esm/integration-setup-failed-error.d.mts +66 -0
  161. package/dist/lib/esm/integration-setup-failed-error.mjs +38 -0
  162. package/dist/lib/esm/jest/global-setup.d.mts +5 -1
  163. package/dist/lib/esm/jest/global-setup.mjs +2 -2
  164. package/dist/lib/esm/kill-process-tree.d.mts +10 -2
  165. package/dist/lib/esm/kill-process-tree.mjs +16 -6
  166. package/dist/lib/esm/library.mjs +1 -1
  167. package/dist/lib/esm/mobile-input.d.mts +156 -0
  168. package/dist/lib/esm/mobile-input.mjs +144 -0
  169. package/dist/lib/esm/namespace-bootstrap.mjs +95 -9
  170. package/dist/lib/esm/obsidian-installer.mjs +1 -1
  171. package/dist/lib/esm/obsidian-instance.d.mts +12 -0
  172. package/dist/lib/esm/obsidian-instance.mjs +55 -3
  173. package/dist/lib/esm/obsidian-metadata.d.mts +17 -6
  174. package/dist/lib/esm/obsidian-metadata.mjs +123 -17
  175. package/dist/lib/esm/obsidian-version-switch.mjs +3 -3
  176. package/dist/lib/esm/open-obsidian-settings-tab.d.mts +3 -2
  177. package/dist/lib/esm/open-obsidian-settings-tab.mjs +1 -1
  178. package/dist/lib/esm/owned-instance-exit-marker.d.mts +106 -0
  179. package/dist/lib/esm/owned-instance-exit-marker.mjs +78 -0
  180. package/dist/lib/esm/owned-instance-exited-error.d.mts +98 -0
  181. package/dist/lib/esm/owned-instance-exited-error.mjs +81 -0
  182. package/dist/lib/esm/owned-vault-seed.d.mts +24 -3
  183. package/dist/lib/esm/owned-vault-seed.mjs +9 -5
  184. package/dist/lib/esm/parent-liveness.d.mts +37 -5
  185. package/dist/lib/esm/parent-liveness.mjs +42 -5
  186. package/dist/lib/esm/port-owner.d.mts +47 -0
  187. package/dist/lib/esm/port-owner.mjs +36 -0
  188. package/dist/lib/esm/process-capture.d.mts +83 -0
  189. package/dist/lib/esm/process-capture.mjs +38 -0
  190. package/dist/lib/esm/process-exit-message.d.mts +37 -3
  191. package/dist/lib/esm/process-exit-message.mjs +13 -8
  192. package/dist/lib/esm/process-liveness.d.mts +18 -0
  193. package/dist/lib/esm/process-liveness.mjs +17 -0
  194. package/dist/lib/esm/release-catalog.d.mts +125 -0
  195. package/dist/lib/esm/release-catalog.mjs +46 -0
  196. package/dist/lib/esm/run-version-matrix.d.mts +1 -1
  197. package/dist/lib/esm/run-version-matrix.mjs +1 -1
  198. package/dist/lib/esm/teardown-verdict.d.mts +69 -0
  199. package/dist/lib/esm/teardown-verdict.mjs +28 -0
  200. package/dist/lib/esm/temporary-vault.d.mts +47 -5
  201. package/dist/lib/esm/temporary-vault.mjs +43 -8
  202. package/dist/lib/esm/transport-appium.d.mts +104 -3
  203. package/dist/lib/esm/transport-appium.mjs +233 -17
  204. package/dist/lib/esm/transport-desktop-cdp.d.mts +100 -0
  205. package/dist/lib/esm/transport-desktop-cdp.mjs +208 -7
  206. package/dist/lib/esm/transport-factory.d.mts +10 -1
  207. package/dist/lib/esm/transport-factory.mjs +1220 -149
  208. package/dist/lib/esm/transport-options.d.mts +131 -12
  209. package/dist/lib/esm/transport-options.mjs +9 -2
  210. package/dist/lib/esm/transport.d.mts +7 -1
  211. package/dist/lib/esm/vault-plugin-install.d.mts +64 -0
  212. package/dist/lib/esm/vault-plugin-install.mjs +20 -0
  213. package/dist/lib/esm/vault-teardown-verdict.d.mts +57 -0
  214. package/dist/lib/esm/vault-teardown-verdict.mjs +18 -0
  215. package/dist/lib/esm/version-matrix.d.mts +2 -2
  216. package/dist/lib/esm/version-matrix.mjs +1 -1
  217. package/dist/lib/esm/vitest/global-setup.d.mts +5 -1
  218. package/dist/lib/esm/vitest/global-setup.mjs +14 -7
  219. package/dist/lib/esm/vitest/setup.d.mts +5 -0
  220. package/dist/lib/esm/vitest/setup.mjs +3 -1
  221. package/dist/lib/esm/vitest/typings.d.mts +6 -4
  222. package/dist/lib/esm/webview-cdp.d.mts +156 -0
  223. package/dist/lib/esm/webview-cdp.mjs +235 -0
  224. package/dist/lib/esm/wedged-appium-server.d.mts +187 -0
  225. package/dist/lib/esm/wedged-appium-server.mjs +86 -0
  226. package/package.json +25 -23
  227. package/dist/lib/cjs/native-dialog-monitor.cjs +0 -192
  228. package/dist/lib/cjs/native-dialog-monitor.d.cts +0 -66
  229. package/dist/lib/cjs/obsidian-namespace.cjs +0 -17
  230. package/dist/lib/cjs/obsidian-namespace.d.cts +0 -128
  231. package/dist/lib/esm/native-dialog-monitor.d.mts +0 -66
  232. package/dist/lib/esm/native-dialog-monitor.mjs +0 -158
  233. package/dist/lib/esm/obsidian-namespace.d.mts +0 -128
  234. package/dist/lib/esm/obsidian-namespace.mjs +0 -1
@@ -222,4 +222,4 @@ function run(command, commandArguments) {
222
222
  ensureShellCached,
223
223
  getCachedShellDirectory
224
224
  });
225
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lLFxuICBzZWxlY3RJbnN0YWxsZXJEb3dubG9hZFVybFxufSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEuY2pzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgZm9yIGRvd25sb2FkaW5nIHJlbGVhc2UgYXNzZXRzIChDbG91ZGZsYXJlLWdhdGVkKS5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG5CYXNlIFVSTCBmb3IgYG9ic2lkaWFuLXJlbGVhc2VzYCByZWxlYXNlIGFzc2V0cyAoYC4uLi9kb3dubG9hZC92PHZlcj4vPGFzc2V0PmApLlxuICovXG5jb25zdCBSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG5HaXRIdWIgUkVTVCBlbmRwb2ludCBsaXN0aW5nIGEgcmVsZWFzZSdzIGFzc2V0cyBieSB0YWcgKGAuLi4vcmVsZWFzZXMvdGFncy92PHZlcj5gKS5cbiAqL1xuY29uc3QgUkVMRUFTRV9BUElfVEFHX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvdGFncyc7XG5cbi8qKlxuVGhlIHN1YnNldCBvZiB0aGUgR2l0SHViIHJlbGVhc2UgQVBJIHJlc3BvbnNlIHRoaXMgbW9kdWxlIHJlYWRzLlxuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKlxuICBUaGUgcmVsZWFzZSdzIGRvd25sb2FkYWJsZSBhc3NldHMuXG4gICAqL1xuICByZWFkb25seSBhc3NldHM6IHJlYWRvbmx5IEdpdEh1YlJlbGVhc2VBc3NldFtdO1xufVxuXG4vKipcblRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSdzIGFzc2V0IG9iamVjdCB0aGlzIG1vZHVsZSByZWFkcy5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2VBc3NldCB7XG4gIC8qKlxuICBUaGUgYXNzZXQgZmlsZSBuYW1lLCBlLmcuIGBPYnNpZGlhbi4wLjE0LjUuZXhlYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBTSEVMTF9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdzaGVsbC1jYWNoZScpO1xuY29uc3QgTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTiA9IC88a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPFxcL2tleT5cXHMqPHN0cmluZz4oPzx2ZXJzaW9uPltePF0rKTxcXC9zdHJpbmc+LztcblxuLyoqXG4gKiBBIHJlc29sdmVkIE9ic2lkaWFuIHNoZWxsIGV4ZWN1dGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTaGVsbCB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHNoZWxsJ3MgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGRldGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIHZlcnNpb24gb2YgYW4gaW5zdGFsbGVkIE9ic2lkaWFuIHNoZWxsIGZyb20gaXRzIGV4ZWN1dGFibGUuXG4gKlxuICogLSBXaW5kb3dzOiB0aGUgZXhlY3V0YWJsZSdzIFBFIGBGaWxlVmVyc2lvbmAuXG4gKiAtIG1hY09TOiBgQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmdgIGZyb20gdGhlIGFwcCBidW5kbGUncyBgSW5mby5wbGlzdGAuXG4gKiAtIExpbnV4OiBiZXN0LWVmZm9ydCBwYXJzZSBmcm9tIHRoZSBleGVjdXRhYmxlIHBhdGggKG9mdGVuIGB1bmRlZmluZWRgKS5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEluc3RhbGxlZFNoZWxsVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aCk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gZGV0ZWN0TWFjQnVuZGxlVmVyc2lvbihleGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBkZXRlY3RWZXJzaW9uRnJvbVBhdGgoZXhlUGF0aCk7XG59XG5cbi8qKlxuICogRW5zdXJlcyBhIHBvcnRhYmxlIE9ic2lkaWFuIHNoZWxsIGZvciB0aGUgZ2l2ZW4gdmVyc2lvbiBpcyBleHRyYWN0ZWQgaW50byB0aGVcbiAqIGNhY2hlLCBkb3dubG9hZGluZyBhbmQgZXh0cmFjdGluZyBpdHMgR2l0SHViIHJlbGVhc2UgYXNzZXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQgb3IgZXh0cmFjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlU2hlbGxDYWNoZWQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2hlbGxEaXJlY3RvcnkgPSBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uKTtcbiAgY29uc3QgZXhlUGF0aCA9IGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeSk7XG4gIGlmIChleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBVc2luZyBjYWNoZWQgc2hlbGwgZm9yICR7dmVyc2lvbn0uYCk7XG4gICAgcmV0dXJuIGV4ZVBhdGg7XG4gIH1cblxuICBta2RpclN5bmMoc2hlbGxEaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBhc3NldFVybHMgPSBhd2FpdCByZXNvbHZlSW5zdGFsbGVyQXNzZXRVcmxzKHZlcnNpb24pO1xuICBjb25zdCBhc3NldFBhdGggPSBhd2FpdCBkb3dubG9hZEluc3RhbGxlckFzc2V0KGFzc2V0VXJscywgc2hlbGxEaXJlY3RvcnksIHZlcnNpb24pO1xuICBleHRyYWN0U2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gIHJtU3luYyhhc3NldFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG5cbiAgaWYgKCFleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHRyYWN0ZWQgT2JzaWRpYW4gc2hlbGwgJHt2ZXJzaW9ufSBidXQgZXhlY3V0YWJsZSBub3QgZm91bmQgYXQgJHtleGVQYXRofS5gKTtcbiAgfVxuICBsb2coYFtpbnN0YWxsZXJdIEV4dHJhY3RlZCBzaGVsbCAke3ZlcnNpb259IC0+ICR7ZXhlUGF0aH1gKTtcbiAgcmV0dXJuIGV4ZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2FjaGUgZGlyZWN0b3J5IGEgdmVyc2lvbidzIGV4dHJhY3RlZCBzaGVsbCBsaXZlcyBpbiAodGhlXG4gKiBkaXJlY3RvcnkgbWF5IG5vdCB5ZXQgZXhpc3QpLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHNoZWxsIGNhY2hlIGRpcmVjdG9yeSBmb3IgdGhlIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihTSEVMTF9DQUNIRV9ESVIsIHZlcnNpb24pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIGlmIGEgcmVxdWlyZWQgY29tbWFuZCBpcyBub3Qgb24gYFBBVEhgLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgbmFtZS5cbiAqIEBwYXJhbSBoaW50IC0gQWN0aW9uYWJsZSBndWlkYW5jZSBhcHBlbmRlZCB0byB0aGUgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydENvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nLCBoaW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcHJvYmUgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZScgOiAnd2hpY2gnO1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMocHJvYmUsIFtjb21tYW5kXSwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XG4gIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBjb21tYW5kIFwiJHtjb21tYW5kfVwiIHdhcyBub3QgZm91bmQgb24gUEFUSC4gJHtoaW50fWApO1xuICB9XG59XG5cbi8qKlxuICogUmVhZHMgYENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nYCBmcm9tIGEgbWFjT1MgYXBwIGJ1bmRsZSdzIGBJbmZvLnBsaXN0YC5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIFBhdGggdG8gYC4uLi9PYnNpZGlhbi5hcHAvQ29udGVudHMvTWFjT1MvT2JzaWRpYW5gLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdE1hY0J1bmRsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50c0RpcmVjdG9yeSA9IGRpcm5hbWUoZGlybmFtZShleGVQYXRoKSk7XG4gICAgY29uc3QgcGxpc3QgPSByZWFkRmlsZVN5bmMoam9pbihjb250ZW50c0RpcmVjdG9yeSwgJ0luZm8ucGxpc3QnKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbWF0Y2ggPSBNQUNfUExJU1RfVkVSU0lPTl9QQVRURVJOLmV4ZWMocGxpc3QpO1xuICAgIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3ZlcnNpb24nXTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEJlc3QtZWZmb3J0IHBhcnNlIG9mIGFuIGB4LnkuemAgdmVyc2lvbiBlbWJlZGRlZCBpbiBhIHBhdGguXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHBhdGggb3Igc3RyaW5nIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgYHgueS56YCBtYXRjaCwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFZlcnNpb25Gcm9tUGF0aCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSAvKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspLy5leGVjKHZhbHVlKTtcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsndmVyc2lvbiddO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBQRSBgRmlsZVZlcnNpb25gIG9mIGEgV2luZG93cyBleGVjdXRhYmxlIHZpYSBQb3dlclNoZWxsLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXQgPSBleGVjRmlsZVN5bmMoXG4gICAgICAncG93ZXJzaGVsbCcsXG4gICAgICBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBgKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAke0pTT04uc3RyaW5naWZ5KGV4ZVBhdGgpfSkuVmVyc2lvbkluZm8uRmlsZVZlcnNpb25gXSxcbiAgICAgIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfVxuICAgICk7XG4gICAgY29uc3QgdmVyc2lvbiA9IG91dHB1dC50cmltKCk7XG4gICAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoID4gMCA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgYSBzaW5nbGUgcmVsZWFzZSBhc3NldCBmb3IgYSB2ZXJzaW9uIHRvIGEgZGVzdGluYXRpb24gZmlsZS5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGFzc2V0IGRvd25sb2FkIFVSTC5cbiAqIEBwYXJhbSBkZXN0aW5hdGlvbiAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nKGBbaW5zdGFsbGVyXSBEb3dubG9hZGluZyBpbnN0YWxsZXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICB3cml0ZUZpbGVTeW5jKGRlc3RpbmF0aW9uLCBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKSk7XG59XG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBmaXJzdCByZWFjaGFibGUgaW5zdGFsbGVyIGFzc2V0IGZyb20gYW4gb3JkZXJlZCBsaXN0IG9mXG4gKiBjYW5kaWRhdGUgVVJMcywgcmV0dXJuaW5nIHRoZSBwYXRoIGl0IHdhcyBzYXZlZCB0by5cbiAqXG4gKiBAcGFyYW0gdXJscyAtIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKGZvciBlcnJvciBtZXNzYWdlcykuXG4gKiBAcmV0dXJucyBUaGUgZG93bmxvYWRlZCBhc3NldCdzIHBhdGguXG4gKiBAdGhyb3dzIEVycm9yIGlmIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgY2FuIGJlIGRvd25sb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkSW5zdGFsbGVyQXNzZXQodXJsczogc3RyaW5nW10sIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgIGNvbnN0IGFzc2V0UGF0aCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksIGJhc2VuYW1lKHVybCkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkb3dubG9hZEFzc2V0KHVybCwgYXNzZXRQYXRoKTtcbiAgICAgIHJldHVybiBhc3NldFBhdGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKGAke3VybH06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgRmFpbGVkIHRvIGRvd25sb2FkIE9ic2lkaWFuIGluc3RhbGxlciAke3ZlcnNpb259LiBBdHRlbXB0czogJHtlcnJvcnMuam9pbignOyAnKX0uIGBcbiAgICAgICsgJ0NhdGFseXN0L2JldGEgdmVyc2lvbnMgaGF2ZSBubyBwdWJsaWMgaW5zdGFsbGVyIFx1MjAxNCBwaW4gYW4gYXNhciB2ZXJzaW9uIG9uIGEgcHVibGljL2luc3RhbGxlZCBzaGVsbCBpbnN0ZWFkLidcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIExpbnV4IGAudGFyLmd6YCBwb3J0YWJsZSBidWlsZC5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLnRhci5nemAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIHJ1bigndGFyJywgWyd4emYnLCBhc3NldFBhdGgsICctQycsIHNoZWxsRGlyZWN0b3J5LCAnLS1zdHJpcC1jb21wb25lbnRzPTEnXSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBtYWNPUyBgLmRtZ2AgYnkgbW91bnRpbmcgaXQgYW5kIGNvcHlpbmcgdGhlIGFwcCBidW5kbGUuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC5kbWdgLlxuICogQHBhcmFtIHNoZWxsRGlyZWN0b3J5IC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TWFjU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgbW91bnRQb2ludCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksICdfX21udCcpO1xuICBta2RpclN5bmMobW91bnRQb2ludCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHJ1bignaGRpdXRpbCcsIFsnYXR0YWNoJywgJy1ub2Jyb3dzZScsICctbW91bnRwb2ludCcsIG1vdW50UG9pbnQsIGFzc2V0UGF0aF0pO1xuICB0cnkge1xuICAgIHJ1bignY3AnLCBbJy1SJywgam9pbihtb3VudFBvaW50LCAnT2JzaWRpYW4uYXBwJyksIHNoZWxsRGlyZWN0b3J5XSk7XG4gIH0gZmluYWxseSB7XG4gICAgcnVuKCdoZGl1dGlsJywgWydkZXRhY2gnLCBtb3VudFBvaW50XSk7XG4gIH1cbiAgcm1TeW5jKG1vdW50UG9pbnQsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIGRvd25sb2FkZWQgaW5zdGFsbGVyIGFzc2V0IGludG8gYSBzaGVsbCBkaXJlY3RvcnksIHBlciBwbGF0Zm9ybS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gVGhlIGRvd25sb2FkZWQgYXNzZXQgcGF0aC5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgZXh0cmFjdE1hY1NoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgV2luZG93cyBOU0lTIGluc3RhbGxlcidzIGlubmVyIGFwcCBwYXlsb2FkIHZpYSA3LVppcC5cbiAqXG4gKiBUaGUgTlNJUyBpbnN0YWxsZXIgYC5leGVgIGNvbnRhaW5zIGAkUExVR0lOU0RJUi9hcHAtNjQuN3pgLCB3aGljaCBob2xkcyB0aGVcbiAqIHBvcnRhYmxlIGFwcCAobWlycm9ycyBob3cgdGhlIHNjb29wIG1hbmlmZXN0IGluc3RhbGxzIE9ic2lkaWFuKS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLmV4ZWAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgYXNzZXJ0Q29tbWFuZEF2YWlsYWJsZSgnN3onLCAnSW5zdGFsbCA3LVppcCAoZS5nLiBgc2Nvb3AgaW5zdGFsbCA3emlwYCkgdG8gZXh0cmFjdCBhIHBpbm5lZCBPYnNpZGlhbiBpbnN0YWxsZXIuJyk7XG4gIGNvbnN0IG5zaXNFeHRyYWN0RGlyZWN0b3J5ID0gam9pbihzaGVsbERpcmVjdG9yeSwgJ19fbnNpcycpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtuc2lzRXh0cmFjdERpcmVjdG9yeX1gLCBhc3NldFBhdGhdKTtcbiAgY29uc3QgaW5uZXJBcmNoaXZlID0gam9pbihuc2lzRXh0cmFjdERpcmVjdG9yeSwgJyRQTFVHSU5TRElSJywgJ2FwcC02NC43eicpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtzaGVsbERpcmVjdG9yeX1gLCBpbm5lckFyY2hpdmVdKTtcbiAgcm1TeW5jKG5zaXNFeHRyYWN0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhIHJlbGVhc2UncyBhc3NldCBuYW1lcyBmcm9tIHRoZSBHaXRIdWIgQVBJLlxuICpcbiAqIFJlYWRzIGEgYEdJVEhVQl9UT0tFTmAgKG9yIGBHSF9UT0tFTmApIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBzZW5kcyBpdCBhcyBhXG4gKiBiZWFyZXIgdG9rZW4gd2hlbiBwcmVzZW50LCB0byBsaWZ0IHRoZSBhbm9ueW1vdXMgcmF0ZSBsaW1pdCB0aGF0IG90aGVyd2lzZVxuICogcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKHRhZyBgdjx2ZXJzaW9uPmApLlxuICogQHJldHVybnMgVGhlIGFzc2V0IG5hbWVzLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgQVBJIGlzIHVuYXZhaWxhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogRE9XTkxPQURfVVNFUl9BR0VOVCB9KTtcbiAgICAvLyBTZW5kIGEgYmVhcmVyIHRva2VuIHdoZW4gb25lIGlzIGF2YWlsYWJsZSAoZS5nLiBHSVRIVUJfVE9LRU4gb24gQ0kpLlxuICAgIC8vIFdpdGhvdXQgaXQgdGhlIGFzc2V0LWxpc3QgQVBJIGlzIGxpbWl0ZWQgdG8gdGhlIGFub255bW91cyBxdW90YS5cbiAgICAvLyBUaGF0IHF1b3RhIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMgYW5kIGZvcmNlcyB0aGUgZmFsbGJhY2suXG4gICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnR0lUSFVCX1RPS0VOJ10gPz8gcHJvY2Vzcy5lbnZbJ0dIX1RPS0VOJ107XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtSRUxFQVNFX0FQSV9UQUdfVVJMfS92JHt2ZXJzaW9ufWAsIHsgaGVhZGVycyB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2coYFtpbnN0YWxsZXJdIFJlbGVhc2UgQVBJIGZvciAke3ZlcnNpb259IHJldHVybmVkIEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIEdpdEh1YlJlbGVhc2U7XG4gICAgcmV0dXJuIHJlbGVhc2UuYXNzZXRzLm1hcCgoYXNzZXQpID0+IGFzc2V0Lm5hbWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZyhgW2luc3RhbGxlcl0gUmVsZWFzZSBBUEkgZm9yICR7dmVyc2lvbn0gdW5hdmFpbGFibGUgKCR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfSk7IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cGVjdGVkIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlIHBhdGggZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBzaGVsbCBjYWNoZSBkaXJlY3RvcnkgZm9yIGEgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBleGVjdXRhYmxlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gam9pbihzaGVsbERpcmVjdG9yeSwgJ09ic2lkaWFuLmV4ZScpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGpvaW4oc2hlbGxEaXJlY3RvcnksICdPYnNpZGlhbi5hcHAnLCAnQ29udGVudHMnLCAnTWFjT1MnLCAnT2JzaWRpYW4nKTtcbiAgfVxuXG4gIHJldHVybiBqb2luKHNoZWxsRGlyZWN0b3J5LCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgb3JkZXJlZCBpbnN0YWxsZXIgYXNzZXQgZG93bmxvYWQgVVJMcyB0byB0cnkgZm9yIGEgdmVyc2lvbi5cbiAqXG4gKiBUaGUgdmVyc2lvbidzIGV4YWN0IGluc3RhbGxlciBVUkwgYmFrZWQgaW50byB0aGUgYG1ldGFkYXRhLmpzb25gIGNhdGFsb2dcbiAqIChmcm9tIHVwc3RyZWFtIGBvYnNpZGlhbi12ZXJzaW9ucy5qc29uYCkgaXMgdXNlZCBkaXJlY3RseSB3aGVuIHByZXNlbnQsXG4gKiBhdm9pZGluZyBhbnkgbmV0d29yayBsb29rdXAuIE90aGVyd2lzZSB0aGUgcmVsZWFzZSdzIHJlYWwgYXNzZXQgbGlzdCBpc1xuICogcXVlcmllZCBzbyB0aGUgcGxhdGZvcm0tY29ycmVjdCBhc3NldCBpcyBwaWNrZWQgcmVnYXJkbGVzcyBvZiB0aGUgaGlzdG9yaWNhbFxuICogZG90LXZzLWh5cGhlbiBuYW1pbmc7IGlmIHRoYXQgY2FsbCB0b28gaXMgdW5hdmFpbGFibGUgaXQgZmFsbHMgYmFjayB0byB0cnlpbmdcbiAqIGJvdGggdGVtcGxhdGVkIHNlcGFyYXRvciBmb3Jtcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBDYW5kaWRhdGUgYXNzZXQgVVJMcywgaW4gcHJpb3JpdHkgb3JkZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVJbnN0YWxsZXJBc3NldFVybHModmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBiYWtlZFVybCA9IHNlbGVjdEluc3RhbGxlckRvd25sb2FkVXJsKHsgZG93bmxvYWRzOiBnZXRWZXJzaW9uTWV0YWRhdGEodmVyc2lvbik/LmRvd25sb2FkcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0gfSk7XG4gIGlmIChiYWtlZFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFtiYWtlZFVybF07XG4gIH1cblxuICBjb25zdCBhc3NldE5hbWVzID0gYXdhaXQgZmV0Y2hSZWxlYXNlQXNzZXROYW1lcyh2ZXJzaW9uKTtcbiAgaWYgKGFzc2V0TmFtZXMpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdEluc3RhbGxlckFzc2V0TmFtZSh7IGFzc2V0TmFtZXMsIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLCB2ZXJzaW9uIH0pO1xuICAgIGlmIChzZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW2Ake1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7c2VsZWN0ZWR9YF07XG4gICAgfVxuICAgIGxvZyhgW2luc3RhbGxlcl0gTm8gaW5zdGFsbGVyIGFzc2V0IG1hdGNoZWQgZm9yICR7dmVyc2lvbn07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gIH1cblxuICByZXR1cm4gYnVpbGRJbnN0YWxsZXJBc3NldE5hbWVDYW5kaWRhdGVzKHsgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSlcbiAgICAubWFwKChuYW1lKSA9PiBgJHtSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMfS92JHt2ZXJzaW9ufS8ke25hbWV9YCk7XG59XG5cbi8qKlxuICogUnVucyBhIGNvbW1hbmQgc3luY2hyb25vdXNseSwgdGhyb3dpbmcgb24gYSBub24temVybyBleGl0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQuXG4gKiBAcGFyYW0gY29tbWFuZEFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIHJ1bihjb21tYW5kOiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kLCBjb21tYW5kQXJndW1lbnRzLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmR9ICR7Y29tbWFuZEFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50KSA9PiBiYXNlbmFtZShhcmd1bWVudCkpLmpvaW4oJyAnKX0gKGV4aXQgJHtTdHJpbmcocmVzdWx0LnN0YXR1cyl9KWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtQkEsZ0NBR087QUFDUCxxQkFNTztBQUNQLHFCQUF1QjtBQUN2Qix1QkFJTztBQUNQLDBCQUFvQjtBQUVwQiw2QkFJTztBQUNQLGlCQUFvQjtBQUNwQiwrQkFBbUM7QUFLbkMsTUFBTSxzQkFBc0I7QUFLNUIsTUFBTSw0QkFBNEI7QUFLbEMsTUFBTSxzQkFBc0I7QUFzQjVCLE1BQU0saUJBQWEsMkJBQUssdUJBQU8sR0FBRyw4QkFBOEI7QUFDaEUsTUFBTSxzQkFBa0IsdUJBQUssWUFBWSxhQUFhO0FBQ3RELE1BQU0sNEJBQTRCO0FBMkIz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LFVBQVUsT0FBTyxLQUFLLENBQUMsMkNBQTJDO0FBQzVKLFdBQU87QUFBQSxFQUNUO0FBQ0Y7QUFRQSxTQUFTLHNCQUFzQixnQkFBZ0M7QUFDN0QsTUFBSSxvQkFBQUEsUUFBUSxhQUFhLFNBQVM7QUFDaEMsZUFBTyx1QkFBSyxnQkFBZ0IsY0FBYztBQUFBLEVBQzVDO0FBRUEsTUFBSSxvQkFBQUEsUUFBUSxhQUFhLFVBQVU7QUFDakMsZUFBTyx1QkFBSyxnQkFBZ0IsZ0JBQWdCLFlBQVksU0FBUyxVQUFVO0FBQUEsRUFDN0U7QUFFQSxhQUFPLHVCQUFLLGdCQUFnQixVQUFVO0FBQ3hDO0FBZUEsZUFBZSwwQkFBMEIsU0FBb0M7QUFDM0UsUUFBTSxlQUFXLG1EQUEyQixFQUFFLGVBQVcsNkNBQW1CLE9BQU8sR0FBRyxXQUFXLFVBQVUsb0JBQUFBLFFBQVEsU0FBUyxDQUFDO0FBQzdILE1BQUksYUFBYSxRQUFXO0FBQzFCLFdBQU8sQ0FBQyxRQUFRO0FBQUEsRUFDbEI7QUFFQSxRQUFNLGFBQWEsTUFBTSx1QkFBdUIsT0FBTztBQUN2RCxNQUFJLFlBQVk7QUFDZCxVQUFNLGVBQVcsaURBQXlCLEVBQUUsWUFBWSxVQUFVLG9CQUFBQSxRQUFRLFVBQVUsUUFBUSxDQUFDO0FBQzdGLFFBQUksYUFBYSxRQUFXO0FBQzFCLGFBQU8sQ0FBQyxHQUFHLHlCQUF5QixLQUFLLE9BQU8sSUFBSSxRQUFRLEVBQUU7QUFBQSxJQUNoRTtBQUNBLHdCQUFJLDhDQUE4QyxPQUFPLDBDQUEwQztBQUFBLEVBQ3JHO0FBRUEsYUFBTywwREFBa0MsRUFBRSxVQUFVLG9CQUFBQSxRQUFRLFVBQVUsUUFBUSxDQUFDLEVBQzdFLElBQUksQ0FBQyxTQUFTLEdBQUcseUJBQXlCLEtBQUssT0FBTyxJQUFJLElBQUksRUFBRTtBQUNyRTtBQVFBLFNBQVMsSUFBSSxTQUFpQixrQkFBa0M7QUFDOUQsUUFBTSxhQUFTLHFDQUFVLFNBQVMsa0JBQWtCLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDdkUsTUFBSSxPQUFPLFdBQVcsR0FBRztBQUN2QixVQUFNLElBQUksTUFBTSxtQkFBbUIsT0FBTyxJQUFJLGlCQUFpQixJQUFJLENBQUMsaUJBQWEsMkJBQVMsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsVUFBVSxPQUFPLE9BQU8sTUFBTSxDQUFDLEdBQUc7QUFBQSxFQUNsSjtBQUNGOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
225
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lLFxuICBzZWxlY3RJbnN0YWxsZXJEb3dubG9hZFVybFxufSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEuY2pzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgZm9yIGRvd25sb2FkaW5nIHJlbGVhc2UgYXNzZXRzIChDbG91ZGZsYXJlLWdhdGVkKS5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG5CYXNlIFVSTCBmb3IgYG9ic2lkaWFuLXJlbGVhc2VzYCByZWxlYXNlIGFzc2V0cyAoYC4uLi9kb3dubG9hZC92PHZlcj4vPGFzc2V0PmApLlxuICovXG5jb25zdCBSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG5HaXRIdWIgUkVTVCBlbmRwb2ludCBsaXN0aW5nIGEgcmVsZWFzZSdzIGFzc2V0cyBieSB0YWcgKGAuLi4vcmVsZWFzZXMvdGFncy92PHZlcj5gKS5cbiAqL1xuY29uc3QgUkVMRUFTRV9BUElfVEFHX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvdGFncyc7XG5cbi8qKlxuVGhlIHN1YnNldCBvZiB0aGUgR2l0SHViIHJlbGVhc2UgQVBJIHJlc3BvbnNlIHRoaXMgbW9kdWxlIHJlYWRzLlxuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKlxuICBUaGUgcmVsZWFzZSdzIGRvd25sb2FkYWJsZSBhc3NldHMuXG4gICAqL1xuICByZWFkb25seSBhc3NldHM6IHJlYWRvbmx5IEdpdEh1YlJlbGVhc2VBc3NldFtdO1xufVxuXG4vKipcblRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSdzIGFzc2V0IG9iamVjdCB0aGlzIG1vZHVsZSByZWFkcy5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2VBc3NldCB7XG4gIC8qKlxuICBUaGUgYXNzZXQgZmlsZSBuYW1lLCBlLmcuIGBPYnNpZGlhbi4wLjE0LjUuZXhlYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBTSEVMTF9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdzaGVsbC1jYWNoZScpO1xuY29uc3QgTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTiA9IC88a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPFxcL2tleT5cXHMqPHN0cmluZz4oPzx2ZXJzaW9uPltePF0rKTxcXC9zdHJpbmc+LztcblxuLyoqXG4gKiBBIHJlc29sdmVkIE9ic2lkaWFuIHNoZWxsIGV4ZWN1dGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTaGVsbCB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHNoZWxsJ3MgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGRldGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIHZlcnNpb24gb2YgYW4gaW5zdGFsbGVkIE9ic2lkaWFuIHNoZWxsIGZyb20gaXRzIGV4ZWN1dGFibGUuXG4gKlxuICogLSBXaW5kb3dzOiB0aGUgZXhlY3V0YWJsZSdzIFBFIGBGaWxlVmVyc2lvbmAuXG4gKiAtIG1hY09TOiBgQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmdgIGZyb20gdGhlIGFwcCBidW5kbGUncyBgSW5mby5wbGlzdGAuXG4gKiAtIExpbnV4OiBiZXN0LWVmZm9ydCBwYXJzZSBmcm9tIHRoZSBleGVjdXRhYmxlIHBhdGggKG9mdGVuIGB1bmRlZmluZWRgKS5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEluc3RhbGxlZFNoZWxsVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aCk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gZGV0ZWN0TWFjQnVuZGxlVmVyc2lvbihleGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBkZXRlY3RWZXJzaW9uRnJvbVBhdGgoZXhlUGF0aCk7XG59XG5cbi8qKlxuICogRW5zdXJlcyBhIHBvcnRhYmxlIE9ic2lkaWFuIHNoZWxsIGZvciB0aGUgZ2l2ZW4gdmVyc2lvbiBpcyBleHRyYWN0ZWQgaW50byB0aGVcbiAqIGNhY2hlLCBkb3dubG9hZGluZyBhbmQgZXh0cmFjdGluZyBpdHMgR2l0SHViIHJlbGVhc2UgYXNzZXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQgb3IgZXh0cmFjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlU2hlbGxDYWNoZWQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2hlbGxEaXJlY3RvcnkgPSBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uKTtcbiAgY29uc3QgZXhlUGF0aCA9IGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeSk7XG4gIGlmIChleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBVc2luZyBjYWNoZWQgc2hlbGwgZm9yICR7dmVyc2lvbn0uYCk7XG4gICAgcmV0dXJuIGV4ZVBhdGg7XG4gIH1cblxuICBta2RpclN5bmMoc2hlbGxEaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBhc3NldFVybHMgPSBhd2FpdCByZXNvbHZlSW5zdGFsbGVyQXNzZXRVcmxzKHZlcnNpb24pO1xuICBjb25zdCBhc3NldFBhdGggPSBhd2FpdCBkb3dubG9hZEluc3RhbGxlckFzc2V0KGFzc2V0VXJscywgc2hlbGxEaXJlY3RvcnksIHZlcnNpb24pO1xuICBleHRyYWN0U2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gIHJtU3luYyhhc3NldFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG5cbiAgaWYgKCFleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHRyYWN0ZWQgT2JzaWRpYW4gc2hlbGwgJHt2ZXJzaW9ufSBidXQgZXhlY3V0YWJsZSBub3QgZm91bmQgYXQgJHtleGVQYXRofS5gKTtcbiAgfVxuICBsb2coYFtpbnN0YWxsZXJdIEV4dHJhY3RlZCBzaGVsbCAke3ZlcnNpb259IC0+ICR7ZXhlUGF0aH1gKTtcbiAgcmV0dXJuIGV4ZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2FjaGUgZGlyZWN0b3J5IGEgdmVyc2lvbidzIGV4dHJhY3RlZCBzaGVsbCBsaXZlcyBpbiAodGhlXG4gKiBkaXJlY3RvcnkgbWF5IG5vdCB5ZXQgZXhpc3QpLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHNoZWxsIGNhY2hlIGRpcmVjdG9yeSBmb3IgdGhlIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihTSEVMTF9DQUNIRV9ESVIsIHZlcnNpb24pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIGlmIGEgcmVxdWlyZWQgY29tbWFuZCBpcyBub3Qgb24gYFBBVEhgLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgbmFtZS5cbiAqIEBwYXJhbSBoaW50IC0gQWN0aW9uYWJsZSBndWlkYW5jZSBhcHBlbmRlZCB0byB0aGUgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydENvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nLCBoaW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcHJvYmUgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZScgOiAnd2hpY2gnO1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMocHJvYmUsIFtjb21tYW5kXSwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XG4gIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBjb21tYW5kIFwiJHtjb21tYW5kfVwiIHdhcyBub3QgZm91bmQgb24gUEFUSC4gJHtoaW50fWApO1xuICB9XG59XG5cbi8qKlxuICogUmVhZHMgYENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nYCBmcm9tIGEgbWFjT1MgYXBwIGJ1bmRsZSdzIGBJbmZvLnBsaXN0YC5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIFBhdGggdG8gYC4uLi9PYnNpZGlhbi5hcHAvQ29udGVudHMvTWFjT1MvT2JzaWRpYW5gLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdE1hY0J1bmRsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50c0RpcmVjdG9yeSA9IGRpcm5hbWUoZGlybmFtZShleGVQYXRoKSk7XG4gICAgY29uc3QgcGxpc3QgPSByZWFkRmlsZVN5bmMoam9pbihjb250ZW50c0RpcmVjdG9yeSwgJ0luZm8ucGxpc3QnKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbWF0Y2ggPSBNQUNfUExJU1RfVkVSU0lPTl9QQVRURVJOLmV4ZWMocGxpc3QpO1xuICAgIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3ZlcnNpb24nXTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEJlc3QtZWZmb3J0IHBhcnNlIG9mIGFuIGB4LnkuemAgdmVyc2lvbiBlbWJlZGRlZCBpbiBhIHBhdGguXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHBhdGggb3Igc3RyaW5nIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgYHgueS56YCBtYXRjaCwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFZlcnNpb25Gcm9tUGF0aCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSAvKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspLy5leGVjKHZhbHVlKTtcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsndmVyc2lvbiddO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBQRSBgRmlsZVZlcnNpb25gIG9mIGEgV2luZG93cyBleGVjdXRhYmxlIHZpYSBQb3dlclNoZWxsLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXQgPSBleGVjRmlsZVN5bmMoXG4gICAgICAncG93ZXJzaGVsbCcsXG4gICAgICBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBgKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAke0pTT04uc3RyaW5naWZ5KGV4ZVBhdGgpfSkuVmVyc2lvbkluZm8uRmlsZVZlcnNpb25gXSxcbiAgICAgIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfVxuICAgICk7XG4gICAgY29uc3QgdmVyc2lvbiA9IG91dHB1dC50cmltKCk7XG4gICAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoID4gMCA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgYSBzaW5nbGUgcmVsZWFzZSBhc3NldCBmb3IgYSB2ZXJzaW9uIHRvIGEgZGVzdGluYXRpb24gZmlsZS5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGFzc2V0IGRvd25sb2FkIFVSTC5cbiAqIEBwYXJhbSBkZXN0aW5hdGlvbiAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nKGBbaW5zdGFsbGVyXSBEb3dubG9hZGluZyBpbnN0YWxsZXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICB3cml0ZUZpbGVTeW5jKGRlc3RpbmF0aW9uLCBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKSk7XG59XG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBmaXJzdCByZWFjaGFibGUgaW5zdGFsbGVyIGFzc2V0IGZyb20gYW4gb3JkZXJlZCBsaXN0IG9mXG4gKiBjYW5kaWRhdGUgVVJMcywgcmV0dXJuaW5nIHRoZSBwYXRoIGl0IHdhcyBzYXZlZCB0by5cbiAqXG4gKiBAcGFyYW0gdXJscyAtIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKGZvciBlcnJvciBtZXNzYWdlcykuXG4gKiBAcmV0dXJucyBUaGUgZG93bmxvYWRlZCBhc3NldCdzIHBhdGguXG4gKiBAdGhyb3dzIEVycm9yIGlmIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgY2FuIGJlIGRvd25sb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkSW5zdGFsbGVyQXNzZXQodXJsczogc3RyaW5nW10sIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgIGNvbnN0IGFzc2V0UGF0aCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksIGJhc2VuYW1lKHVybCkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkb3dubG9hZEFzc2V0KHVybCwgYXNzZXRQYXRoKTtcbiAgICAgIHJldHVybiBhc3NldFBhdGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKGAke3VybH06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgRmFpbGVkIHRvIGRvd25sb2FkIE9ic2lkaWFuIGluc3RhbGxlciAke3ZlcnNpb259LiBBdHRlbXB0czogJHtlcnJvcnMuam9pbignOyAnKX0uIGBcbiAgICAgICsgJ0NhdGFseXN0L2JldGEgdmVyc2lvbnMgaGF2ZSBubyBwdWJsaWMgaW5zdGFsbGVyIFx1MjAxNCBwaW4gYW4gYXNhciB2ZXJzaW9uIG9uIGEgcHVibGljL2luc3RhbGxlZCBzaGVsbCBpbnN0ZWFkLidcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIExpbnV4IGAudGFyLmd6YCBwb3J0YWJsZSBidWlsZC5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLnRhci5nemAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIHJ1bigndGFyJywgWyd4emYnLCBhc3NldFBhdGgsICctQycsIHNoZWxsRGlyZWN0b3J5LCAnLS1zdHJpcC1jb21wb25lbnRzPTEnXSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBtYWNPUyBgLmRtZ2AgYnkgbW91bnRpbmcgaXQgYW5kIGNvcHlpbmcgdGhlIGFwcCBidW5kbGUuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC5kbWdgLlxuICogQHBhcmFtIHNoZWxsRGlyZWN0b3J5IC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TWFjU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgbW91bnRQb2ludCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksICdfX21udCcpO1xuICBta2RpclN5bmMobW91bnRQb2ludCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHJ1bignaGRpdXRpbCcsIFsnYXR0YWNoJywgJy1ub2Jyb3dzZScsICctbW91bnRwb2ludCcsIG1vdW50UG9pbnQsIGFzc2V0UGF0aF0pO1xuICB0cnkge1xuICAgIHJ1bignY3AnLCBbJy1SJywgam9pbihtb3VudFBvaW50LCAnT2JzaWRpYW4uYXBwJyksIHNoZWxsRGlyZWN0b3J5XSk7XG4gIH0gZmluYWxseSB7XG4gICAgcnVuKCdoZGl1dGlsJywgWydkZXRhY2gnLCBtb3VudFBvaW50XSk7XG4gIH1cbiAgcm1TeW5jKG1vdW50UG9pbnQsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIGRvd25sb2FkZWQgaW5zdGFsbGVyIGFzc2V0IGludG8gYSBzaGVsbCBkaXJlY3RvcnksIHBlciBwbGF0Zm9ybS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gVGhlIGRvd25sb2FkZWQgYXNzZXQgcGF0aC5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgZXh0cmFjdE1hY1NoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgV2luZG93cyBOU0lTIGluc3RhbGxlcidzIGlubmVyIGFwcCBwYXlsb2FkIHZpYSA3LVppcC5cbiAqXG4gKiBUaGUgTlNJUyBpbnN0YWxsZXIgYC5leGVgIGNvbnRhaW5zIGAkUExVR0lOU0RJUi9hcHAtNjQuN3pgLCB3aGljaCBob2xkcyB0aGVcbiAqIHBvcnRhYmxlIGFwcCAobWlycm9ycyBob3cgdGhlIHNjb29wIG1hbmlmZXN0IGluc3RhbGxzIE9ic2lkaWFuKS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLmV4ZWAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgYXNzZXJ0Q29tbWFuZEF2YWlsYWJsZSgnN3onLCAnSW5zdGFsbCA3LVppcCAoZS5nLiBgc2Nvb3AgaW5zdGFsbCA3emlwYCkgdG8gZXh0cmFjdCBhIHBpbm5lZCBPYnNpZGlhbiBpbnN0YWxsZXIuJyk7XG4gIGNvbnN0IG5zaXNFeHRyYWN0RGlyZWN0b3J5ID0gam9pbihzaGVsbERpcmVjdG9yeSwgJ19fbnNpcycpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtuc2lzRXh0cmFjdERpcmVjdG9yeX1gLCBhc3NldFBhdGhdKTtcbiAgY29uc3QgaW5uZXJBcmNoaXZlID0gam9pbihuc2lzRXh0cmFjdERpcmVjdG9yeSwgJyRQTFVHSU5TRElSJywgJ2FwcC02NC43eicpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtzaGVsbERpcmVjdG9yeX1gLCBpbm5lckFyY2hpdmVdKTtcbiAgcm1TeW5jKG5zaXNFeHRyYWN0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhIHJlbGVhc2UncyBhc3NldCBuYW1lcyBmcm9tIHRoZSBHaXRIdWIgQVBJLlxuICpcbiAqIFJlYWRzIGEgYEdJVEhVQl9UT0tFTmAgKG9yIGBHSF9UT0tFTmApIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBzZW5kcyBpdCBhcyBhXG4gKiBiZWFyZXIgdG9rZW4gd2hlbiBwcmVzZW50LCB0byBsaWZ0IHRoZSBhbm9ueW1vdXMgcmF0ZSBsaW1pdCB0aGF0IG90aGVyd2lzZVxuICogcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKHRhZyBgdjx2ZXJzaW9uPmApLlxuICogQHJldHVybnMgVGhlIGFzc2V0IG5hbWVzLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgQVBJIGlzIHVuYXZhaWxhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogRE9XTkxPQURfVVNFUl9BR0VOVCB9KTtcbiAgICAvLyBTZW5kIGEgYmVhcmVyIHRva2VuIHdoZW4gb25lIGlzIGF2YWlsYWJsZSAoZS5nLiBHSVRIVUJfVE9LRU4gb24gQ0kpLlxuICAgIC8vIFdpdGhvdXQgaXQgdGhlIGFzc2V0LWxpc3QgQVBJIGlzIGxpbWl0ZWQgdG8gdGhlIGFub255bW91cyBxdW90YS5cbiAgICAvLyBUaGF0IHF1b3RhIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMgYW5kIGZvcmNlcyB0aGUgZmFsbGJhY2suXG4gICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnR0lUSFVCX1RPS0VOJ10gPz8gcHJvY2Vzcy5lbnZbJ0dIX1RPS0VOJ107XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtSRUxFQVNFX0FQSV9UQUdfVVJMfS92JHt2ZXJzaW9ufWAsIHsgaGVhZGVycyB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2coYFtpbnN0YWxsZXJdIFJlbGVhc2UgQVBJIGZvciAke3ZlcnNpb259IHJldHVybmVkIEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIEdpdEh1YlJlbGVhc2U7XG4gICAgcmV0dXJuIHJlbGVhc2UuYXNzZXRzLm1hcCgoYXNzZXQpID0+IGFzc2V0Lm5hbWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZyhgW2luc3RhbGxlcl0gUmVsZWFzZSBBUEkgZm9yICR7dmVyc2lvbn0gdW5hdmFpbGFibGUgKCR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfSk7IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cGVjdGVkIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlIHBhdGggZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBzaGVsbCBjYWNoZSBkaXJlY3RvcnkgZm9yIGEgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBleGVjdXRhYmxlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gam9pbihzaGVsbERpcmVjdG9yeSwgJ09ic2lkaWFuLmV4ZScpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGpvaW4oc2hlbGxEaXJlY3RvcnksICdPYnNpZGlhbi5hcHAnLCAnQ29udGVudHMnLCAnTWFjT1MnLCAnT2JzaWRpYW4nKTtcbiAgfVxuXG4gIHJldHVybiBqb2luKHNoZWxsRGlyZWN0b3J5LCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgb3JkZXJlZCBpbnN0YWxsZXIgYXNzZXQgZG93bmxvYWQgVVJMcyB0byB0cnkgZm9yIGEgdmVyc2lvbi5cbiAqXG4gKiBUaGUgdmVyc2lvbidzIGV4YWN0IGluc3RhbGxlciBVUkwgYmFrZWQgaW50byB0aGUgYG1ldGFkYXRhLmpzb25gIGNhdGFsb2dcbiAqIChmcm9tIHRoZSBgb2JzaWRpYW5tZC9vYnNpZGlhbi1yZWxlYXNlc2AgYXNzZXRzKSBpcyB1c2VkIGRpcmVjdGx5IHdoZW4gcHJlc2VudCxcbiAqIGF2b2lkaW5nIGFueSBuZXR3b3JrIGxvb2t1cC4gT3RoZXJ3aXNlIHRoZSByZWxlYXNlJ3MgcmVhbCBhc3NldCBsaXN0IGlzXG4gKiBxdWVyaWVkIHNvIHRoZSBwbGF0Zm9ybS1jb3JyZWN0IGFzc2V0IGlzIHBpY2tlZCByZWdhcmRsZXNzIG9mIHRoZSBoaXN0b3JpY2FsXG4gKiBkb3QtdnMtaHlwaGVuIG5hbWluZzsgaWYgdGhhdCBjYWxsIHRvbyBpcyB1bmF2YWlsYWJsZSBpdCBmYWxscyBiYWNrIHRvIHRyeWluZ1xuICogYm90aCB0ZW1wbGF0ZWQgc2VwYXJhdG9yIGZvcm1zLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGJha2VkVXJsID0gc2VsZWN0SW5zdGFsbGVyRG93bmxvYWRVcmwoeyBkb3dubG9hZHM6IGdldFZlcnNpb25NZXRhZGF0YSh2ZXJzaW9uKT8uZG93bmxvYWRzLCBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSB9KTtcbiAgaWYgKGJha2VkVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gW2Jha2VkVXJsXTtcbiAgfVxuXG4gIGNvbnN0IGFzc2V0TmFtZXMgPSBhd2FpdCBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb24pO1xuICBpZiAoYXNzZXROYW1lcykge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lKHsgYXNzZXROYW1lcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSk7XG4gICAgaWYgKHNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbYCR7UkVMRUFTRV9ET1dOTE9BRF9CQVNFX1VSTH0vdiR7dmVyc2lvbn0vJHtzZWxlY3RlZH1gXTtcbiAgICB9XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBObyBpbnN0YWxsZXIgYXNzZXQgbWF0Y2hlZCBmb3IgJHt2ZXJzaW9ufTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEluc3RhbGxlckFzc2V0TmFtZUNhbmRpZGF0ZXMoeyBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSwgdmVyc2lvbiB9KVxuICAgIC5tYXAoKG5hbWUpID0+IGAke1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7bmFtZX1gKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCBzeW5jaHJvbm91c2x5LCB0aHJvd2luZyBvbiBhIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZC5cbiAqIEBwYXJhbSBjb21tYW5kQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gcnVuKGNvbW1hbmQ6IHN0cmluZywgY29tbWFuZEFyZ3VtZW50czogc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmQsIGNvbW1hbmRBcmd1bWVudHMsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHtjb21tYW5kQXJndW1lbnRzLm1hcCgoYXJndW1lbnQpID0+IGJhc2VuYW1lKGFyZ3VtZW50KSkuam9pbignICcpfSAoZXhpdCAke1N0cmluZyhyZXN1bHQuc3RhdHVzKX0pYCk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW1CQSxnQ0FHTztBQUNQLHFCQU1PO0FBQ1AscUJBQXVCO0FBQ3ZCLHVCQUlPO0FBQ1AsMEJBQW9CO0FBRXBCLDZCQUlPO0FBQ1AsaUJBQW9CO0FBQ3BCLCtCQUFtQztBQUtuQyxNQUFNLHNCQUFzQjtBQUs1QixNQUFNLDRCQUE0QjtBQUtsQyxNQUFNLHNCQUFzQjtBQXNCNUIsTUFBTSxpQkFBYSwyQkFBSyx1QkFBTyxHQUFHLDhCQUE4QjtBQUNoRSxNQUFNLHNCQUFrQix1QkFBSyxZQUFZLGFBQWE7QUFDdEQsTUFBTSw0QkFB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QUFRLE1BQU0sVUFBVSxPQUFPLEtBQUssQ0FBQywyQ0FBMkM7QUFDNUosV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQVFBLFNBQVMsc0JBQXNCLGdCQUFnQztBQUM3RCxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsU0FBUztBQUNoQyxlQUFPLHVCQUFLLGdCQUFnQixjQUFjO0FBQUEsRUFDNUM7QUFFQSxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsVUFBVTtBQUNqQyxlQUFPLHVCQUFLLGdCQUFnQixnQkFBZ0IsWUFBWSxTQUFTLFVBQVU7QUFBQSxFQUM3RTtBQUVBLGFBQU8sdUJBQUssZ0JBQWdCLFVBQVU7QUFDeEM7QUFlQSxlQUFlLDBCQUEwQixTQUFvQztBQUMzRSxRQUFNLGVBQVcsbURBQTJCLEVBQUUsZUFBVyw2Q0FBbUIsT0FBTyxHQUFHLFdBQVcsVUFBVSxvQkFBQUEsUUFBUSxTQUFTLENBQUM7QUFDN0gsTUFBSSxhQUFhLFFBQVc7QUFDMUIsV0FBTyxDQUFDLFFBQVE7QUFBQSxFQUNsQjtBQUVBLFFBQU0sYUFBYSxNQUFNLHVCQUF1QixPQUFPO0FBQ3ZELE1BQUksWUFBWTtBQUNkLFVBQU0sZUFBVyxpREFBeUIsRUFBRSxZQUFZLFVBQVUsb0JBQUFBLFFBQVEsVUFBVSxRQUFRLENBQUM7QUFDN0YsUUFBSSxhQUFhLFFBQVc7QUFDMUIsYUFBTyxDQUFDLEdBQUcseUJBQXlCLEtBQUssT0FBTyxJQUFJLFFBQVEsRUFBRTtBQUFBLElBQ2hFO0FBQ0Esd0JBQUksOENBQThDLE9BQU8sMENBQTBDO0FBQUEsRUFDckc7QUFFQSxhQUFPLDBEQUFrQyxFQUFFLFVBQVUsb0JBQUFBLFFBQVEsVUFBVSxRQUFRLENBQUMsRUFDN0UsSUFBSSxDQUFDLFNBQVMsR0FBRyx5QkFBeUIsS0FBSyxPQUFPLElBQUksSUFBSSxFQUFFO0FBQ3JFO0FBUUEsU0FBUyxJQUFJLFNBQWlCLGtCQUFrQztBQUM5RCxRQUFNLGFBQVMscUNBQVUsU0FBUyxrQkFBa0IsRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUN2RSxNQUFJLE9BQU8sV0FBVyxHQUFHO0FBQ3ZCLFVBQU0sSUFBSSxNQUFNLG1CQUFtQixPQUFPLElBQUksaUJBQWlCLElBQUksQ0FBQyxpQkFBYSwyQkFBUyxRQUFRLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxVQUFVLE9BQU8sT0FBTyxNQUFNLENBQUMsR0FBRztBQUFBLEVBQ2xKO0FBQ0Y7IiwKICAibmFtZXMiOiBbInByb2Nlc3MiXQp9Cg==
@@ -26,31 +26,80 @@ var import_node_child_process = require("node:child_process");
26
26
  var import_node_net = require("node:net");
27
27
  var import_kill_process_tree = require("./kill-process-tree.cjs");
28
28
  var import_log = require("./log.cjs");
29
+ var import_owned_instance_exit_marker = require("./owned-instance-exit-marker.cjs");
30
+ var import_owned_instance_exited_error = require("./owned-instance-exited-error.cjs");
29
31
  var import_parent_liveness = require("./parent-liveness.cjs");
32
+ var import_process_capture = require("./process-capture.cjs");
30
33
  const DEFAULT_CDP_HOST = "127.0.0.1";
31
34
  const CDP_READY_POLL_INTERVAL_IN_MILLISECONDS = 1e3;
32
35
  const CDP_READY_TIMEOUT_IN_MILLISECONDS = 6e4;
36
+ const OBSIDIAN_OUTPUT_TAIL_MAX_LENGTH = 8e3;
33
37
  async function launchOwnedObsidianInstance(params) {
34
38
  const cdpHost = params.cdpHost ?? DEFAULT_CDP_HOST;
35
39
  const port = await pickFreePort();
36
40
  const cdpUrl = `http://${cdpHost}:${String(port)}`;
37
41
  const livenessServer = await (0, import_parent_liveness.startParentLivenessServer)();
42
+ (0, import_owned_instance_exit_marker.clearOwnedInstanceExitMarker)(port);
38
43
  (0, import_log.log)(`[obsidian-instance] Launching owned Obsidian: userData=${params.userDataDirectory}, cdpPort=${String(port)}`);
39
44
  const child = (0, import_node_child_process.spawn)(
40
45
  params.exePath,
41
46
  [`--user-data-dir=${params.userDataDirectory}`, `--remote-debugging-port=${String(port)}`, ...params.extraArguments ?? []],
42
- { detached: true, stdio: "ignore" }
47
+ { detached: true, stdio: ["ignore", "pipe", "pipe"] }
43
48
  );
49
+ const capture = (0, import_process_capture.attachProcessCapture)(child, {
50
+ maxOutputLengthInCharacters: OBSIDIAN_OUTPUT_TAIL_MAX_LENGTH,
51
+ onChunk: (chunk) => {
52
+ const text = chunk.text.trimEnd();
53
+ if (text.length > 0) {
54
+ (0, import_log.log)(`[obsidian-instance:${chunk.stream}] ${text}`);
55
+ }
56
+ }
57
+ });
58
+ let isKillExpected = false;
59
+ child.once("exit", (code, signal) => {
60
+ if (isKillExpected) {
61
+ (0, import_log.log)(`[obsidian-instance] Owned Obsidian exited as asked: pid=${String(child.pid)} code=${String(code)} signal=${String(signal)}`);
62
+ return;
63
+ }
64
+ (0, import_log.log)(`[obsidian-instance] !!! OWNED OBSIDIAN EXITED: pid=${String(child.pid)} code=${String(code)} signal=${String(signal)}`);
65
+ (0, import_owned_instance_exit_marker.writeOwnedInstanceExitMarker)({
66
+ code,
67
+ outputTail: capture.readOutput(),
68
+ pid: child.pid,
69
+ port,
70
+ signal
71
+ });
72
+ });
44
73
  child.unref();
45
74
  try {
46
75
  await waitForCdpReady(cdpUrl);
47
76
  (0, import_log.log)(`[obsidian-instance] Owned Obsidian is serving CDP at ${cdpUrl}.`);
48
- return { cdpUrl, kill, parentLivenessPort: livenessServer.port, port };
77
+ return {
78
+ cdpUrl,
79
+ kill,
80
+ parentLivenessPort: livenessServer.port,
81
+ port,
82
+ readExitInfo: () => capture.readExitInfo(),
83
+ readOutput: () => capture.readOutput()
84
+ };
49
85
  } catch (error) {
86
+ const exitInfo = capture.readExitInfo();
50
87
  kill();
88
+ if (exitInfo) {
89
+ throw new import_owned_instance_exited_error.OwnedInstanceExitedError({
90
+ cdpUrl,
91
+ code: exitInfo.code,
92
+ outputTail: capture.readOutput(),
93
+ pid: child.pid,
94
+ signal: exitInfo.signal,
95
+ spawnError: exitInfo.spawnError
96
+ });
97
+ }
51
98
  throw error;
52
99
  }
53
100
  function kill() {
101
+ isKillExpected = true;
102
+ (0, import_owned_instance_exit_marker.clearOwnedInstanceExitMarker)(port);
54
103
  livenessServer.close();
55
104
  (0, import_kill_process_tree.killProcessTree)(child);
56
105
  }
@@ -100,4 +149,4 @@ async function waitForCdpReady(cdpUrl) {
100
149
  launchOwnedObsidianInstance,
101
150
  pickFreePort
102
151
  });
103
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbmNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGF1bmNoZXMgYW5kIG1hbmFnZXMgYSBoYXJuZXNzLW93bmVkLCBpc29sYXRlZCBPYnNpZGlhbiBkZXNrdG9wIGluc3RhbmNlLlxuICpcbiAqIFRoZSBpbnN0YW5jZSBydW5zIGFnYWluc3QgYSBkZWRpY2F0ZWQgYC0tdXNlci1kYXRhLWRpcmAgKHNvIGl0IG5ldmVyIHRvdWNoZXNcbiAqIHRoZSB1c2VyJ3MgT2JzaWRpYW4gY29uZmlnLCByZWdpc3RyeSwgb3IgcnVubmluZyB3aW5kb3cpIGFuZCBleHBvc2VzIENEUCBvbiBhXG4gKiBkZWRpY2F0ZWQgYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YC4gQmVjYXVzZSBFbGVjdHJvbidzIHNpbmdsZS1pbnN0YW5jZSBsb2NrXG4gKiBpcyBrZXllZCB0byB0aGUgdXNlci1kYXRhIGRpciwgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMgaW4gcGFyYWxsZWwgd2l0aCB0aGVcbiAqIHVzZXIncyBvd24gT2JzaWRpYW4uIENvbmZpcm1lZCBieSB0aGUgUGhhc2UgMCBzcGlrZSAoc2VlIHRoZSBwcm9qZWN0IHBsYW4pLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHByb2Nlc3MgbWFuYWdlbWVudCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSAnbm9kZTpuZXQnO1xuXG5pbXBvcnQgeyBraWxsUHJvY2Vzc1RyZWUgfSBmcm9tICcuL2tpbGwtcHJvY2Vzcy10cmVlLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuaW1wb3J0IHsgc3RhcnRQYXJlbnRMaXZlbmVzc1NlcnZlciB9IGZyb20gJy4vcGFyZW50LWxpdmVuZXNzLmNqcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxhdW5jaE93bmVkT2JzaWRpYW5JbnN0YW5jZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIENEUCBob3N0IHRvIGJpbmQvcG9sbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcxMjcuMC4wLjEnYFxuICAgKi9cbiAgcmVhZG9ubHkgY2RwSG9zdD86IHN0cmluZztcblxuICAvKipcbiAgQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZSAoc2hlbGwpIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogRXh0cmEgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcHBlbmRlZCBhZnRlciBgLS11c2VyLWRhdGEtZGlyYCBhbmRcbiAgICogYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YCBcdTIwMTQgdXNlZCB0byBwYXNzIHRoZSBrZWVwLWFsaXZlIENocm9taXVtIGZsYWdzIHdoZW5cbiAgICogdGhlIGluc3RhbmNlIGlzIGxhdW5jaGVkIGhpZGRlbiAob2ZmLXNjcmVlbikuIEVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBleHRyYUFyZ3VtZW50cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBpc29sYXRlZCB1c2VyLWRhdGEgZGlyIHRvIHBhc3MgdmlhIGAtLXVzZXItZGF0YS1kaXJgLlxuICAgKi9cblxuICByZWFkb25seSB1c2VyRGF0YURpcmVjdG9yeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcnVubmluZywgaGFybmVzcy1vd25lZCBPYnNpZGlhbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPd25lZE9ic2lkaWFuSW5zdGFuY2Uge1xuICAvKipcbiAgQmFzZSBDRFAgVVJMLCBlLmcuIGBodHRwOi8vMTI3LjAuMC4xOjUxODg4YC5cbiAgICovXG4gIHJlYWRvbmx5IGNkcFVybDogc3RyaW5nO1xuXG4gIC8qKlxuICBLaWxscyB0aGUgaW5zdGFuY2UgYW5kIGl0cyBlbnRpcmUgcHJvY2VzcyB0cmVlLlxuICAgKi9cbiAga2lsbCgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBMb29wYmFjayBwb3J0IHRoZSBpbnN0YW5jZSdzIHJlbmRlcmVyIGNvbm5lY3RzIGJhY2sgdG8gc28gaXQgZGVzdHJveXNcbiAgICogaXRzZWxmIGlmIHRoaXMgaGFybmVzcyBwcm9jZXNzIGRpZXMgd2l0aG91dCBjbGVhbmluZyB1cC4gU2VlXG4gICAqIGBwYXJlbnQtbGl2ZW5lc3MudHNgIGZvciB3aHkgdGhlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXAgYWxvbmUgaXMgbm90XG4gICAqIGVub3VnaC5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudExpdmVuZXNzUG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgQ0RQIHJlbW90ZS1kZWJ1Z2dpbmcgcG9ydCB0aGUgaW5zdGFuY2Ugd2FzIGxhdW5jaGVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG59XG5cbmNvbnN0IERFRkFVTFRfQ0RQX0hPU1QgPSAnMTI3LjAuMC4xJztcbmNvbnN0IENEUF9SRUFEWV9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG5jb25zdCBDRFBfUkVBRFlfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MF8wMDA7XG5cbmludGVyZmFjZSBDZHBUYXJnZXQge1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTGF1bmNoZXMgYW4gaXNvbGF0ZWQsIGhhcm5lc3Mtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgYW5kIHdhaXRzIHVudGlsIGl0cyBDRFBcbiAqIGVuZHBvaW50IGlzIHNlcnZpbmcgcGFnZSB0YXJnZXRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBMYXVuY2ggcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBydW5uaW5nIG93bmVkIGluc3RhbmNlLlxuICogQHRocm93cyBFcnJvciBpZiBDRFAgZG9lcyBub3QgYmVjb21lIHJlYWNoYWJsZSB3aXRoaW4gdGhlIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXVuY2hPd25lZE9ic2lkaWFuSW5zdGFuY2UoXG4gIHBhcmFtczogTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zXG4pOiBQcm9taXNlPE93bmVkT2JzaWRpYW5JbnN0YW5jZT4ge1xuICBjb25zdCBjZHBIb3N0ID0gcGFyYW1zLmNkcEhvc3QgPz8gREVGQVVMVF9DRFBfSE9TVDtcbiAgY29uc3QgcG9ydCA9IGF3YWl0IHBpY2tGcmVlUG9ydCgpO1xuICBjb25zdCBjZHBVcmwgPSBgaHR0cDovLyR7Y2RwSG9zdH06JHtTdHJpbmcocG9ydCl9YDtcblxuICAvLyBMaXN0ZW4gQkVGT1JFIHNwYXduaW5nLCBzbyB0aGUgcmVuZGVyZXIgd2F0Y2hkb2cgY2FuIG5ldmVyIHJhY2UgdGhlIHNlcnZlclxuICAvLyBJbnRvIGEgZmFpbGVkIGNvbm5lY3QgKHdoaWNoIGl0IHRyZWF0cyBhcyBcIm5vIHdhdGNoZG9nXCIsIGxlYXZpbmcgdGhlIGluc3RhbmNlIGFsaXZlKS5cbiAgY29uc3QgbGl2ZW5lc3NTZXJ2ZXIgPSBhd2FpdCBzdGFydFBhcmVudExpdmVuZXNzU2VydmVyKCk7XG5cbiAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIExhdW5jaGluZyBvd25lZCBPYnNpZGlhbjogdXNlckRhdGE9JHtwYXJhbXMudXNlckRhdGFEaXJlY3Rvcnl9LCBjZHBQb3J0PSR7U3RyaW5nKHBvcnQpfWApO1xuICBjb25zdCBjaGlsZCA9IHNwYXduKFxuICAgIHBhcmFtcy5leGVQYXRoLFxuICAgIFtgLS11c2VyLWRhdGEtZGlyPSR7cGFyYW1zLnVzZXJEYXRhRGlyZWN0b3J5fWAsIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydD0ke1N0cmluZyhwb3J0KX1gLCAuLi4ocGFyYW1zLmV4dHJhQXJndW1lbnRzID8/IFtdKV0sXG4gICAgeyBkZXRhY2hlZDogdHJ1ZSwgc3RkaW86ICdpZ25vcmUnIH1cbiAgKTtcbiAgY2hpbGQudW5yZWYoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDZHBSZWFkeShjZHBVcmwpO1xuICAgIGxvZyhgW29ic2lkaWFuLWluc3RhbmNlXSBPd25lZCBPYnNpZGlhbiBpcyBzZXJ2aW5nIENEUCBhdCAke2NkcFVybH0uYCk7XG4gICAgcmV0dXJuIHsgY2RwVXJsLCBraWxsLCBwYXJlbnRMaXZlbmVzc1BvcnQ6IGxpdmVuZXNzU2VydmVyLnBvcnQsIHBvcnQgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBraWxsKCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBmdW5jdGlvbiBraWxsKCk6IHZvaWQge1xuICAgIGxpdmVuZXNzU2VydmVyLmNsb3NlKCk7XG4gICAga2lsbFByb2Nlc3NUcmVlKGNoaWxkKTtcbiAgfVxufVxuXG4vKipcbiAqIFBpY2tzIGEgZnJlZSBUQ1AgcG9ydCBieSBiaW5kaW5nIHRvIHBvcnQgYDBgIGFuZCByZWFkaW5nIHRoZSBhc3NpZ25lZCBwb3J0LlxuICpcbiAqIFRoZXJlIGlzIGEgc21hbGwgdGltZS1vZi1jaGVjay90aW1lLW9mLXVzZSB3aW5kb3cgYmV0d2VlbiByZWxlYXNpbmcgdGhlIHBvcnRcbiAqIGhlcmUgYW5kIE9ic2lkaWFuIGJpbmRpbmcgaXQ7IGluIHByYWN0aWNlIGl0IGlzIG5lZ2xpZ2libGUgZm9yIHRlc3QgcnVucy5cbiAqXG4gKiBAcmV0dXJucyBBIGZyZWUgVENQIHBvcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrRnJlZVBvcnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKTtcbiAgICBzZXJ2ZXIub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgIHNlcnZlci5saXN0ZW4oMCwgREVGQVVMVF9DRFBfSE9TVCwgKCkgPT4ge1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHNlcnZlci5hZGRyZXNzKCk7XG4gICAgICBpZiAoYWRkcmVzcyA9PT0gbnVsbCB8fCB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZXRlcm1pbmUgYSBmcmVlIHBvcnQuJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IHBvcnQgfSA9IGFkZHJlc3M7XG4gICAgICBzZXJ2ZXIuY2xvc2UoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKHBvcnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFBvbGxzIHRoZSBDRFAgYC9qc29uYCBlbmRwb2ludCB1bnRpbCBhdCBsZWFzdCBvbmUgcGFnZSB0YXJnZXQgYXBwZWFycy5cbiAqXG4gKiBAcGFyYW0gY2RwVXJsIC0gVGhlIGJhc2UgQ0RQIFVSTC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckNkcFJlYWR5KGNkcFVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIENEUF9SRUFEWV9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2NkcFVybH0vanNvbmApO1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDZHBUYXJnZXRbXTtcbiAgICAgIGlmICh0YXJnZXRzLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LnR5cGUgPT09ICdwYWdlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRW5kcG9pbnQgbm90IHVwIHlldCBcdTIwMTQga2VlcCBwb2xsaW5nLlxuICAgIH1cbiAgICBhd2FpdCBkZWxheShDRFBfUkVBRFlfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgT3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgZGlkIG5vdCBleHBvc2UgQ0RQIGF0ICR7Y2RwVXJsfSB3aXRoaW4gJHtTdHJpbmcoQ0RQX1JFQURZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSxnQ0FBc0I7QUFDdEIsc0JBQTZCO0FBRTdCLCtCQUFnQztBQUNoQyxpQkFBb0I7QUFDcEIsNkJBQTBDO0FBNEQxQyxNQUFNLG1CQUFtQjtBQUN6QixNQUFNLDBDQUEwQztBQUNoRCxNQUFNLG9DQUFvQztBQWMxQyxlQUFzQiw0QkFDcEIsUUFDZ0M7QUFDaEMsUUFBTSxVQUFVLE9BQU8sV0FBVztBQUNsQyxRQUFNLE9BQU8sTUFBTSxhQUFhO0FBQ2hDLFFBQU0sU0FBUyxVQUFVLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQztBQUloRCxRQUFNLGlCQUFpQixVQUFNLGtEQUEwQjtBQUV2RCxzQkFBSSwwREFBMEQsT0FBTyxpQkFBaUIsYUFBYSxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQ2pILFFBQU0sWUFBUTtBQUFBLElBQ1osT0FBTztBQUFBLElBQ1AsQ0FBQyxtQkFBbUIsT0FBTyxpQkFBaUIsSUFBSSwyQkFBMkIsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFJLE9BQU8sa0JBQWtCLENBQUMsQ0FBRTtBQUFBLElBQzNILEVBQUUsVUFBVSxNQUFNLE9BQU8sU0FBUztBQUFBLEVBQ3BDO0FBQ0EsUUFBTSxNQUFNO0FBRVosTUFBSTtBQUNGLFVBQU0sZ0JBQWdCLE1BQU07QUFDNUIsd0JBQUksd0RBQXdELE1BQU0sR0FBRztBQUNyRSxXQUFPLEVBQUUsUUFBUSxNQUFNLG9CQUFvQixlQUFlLE1BQU0sS0FBSztBQUFBLEVBQ3ZFLFNBQVMsT0FBZ0I7QUFDdkIsU0FBSztBQUNMLFVBQU07QUFBQSxFQUNSO0FBRUEsV0FBUyxPQUFhO0FBQ3BCLG1CQUFlLE1BQU07QUFDckIsa0RBQWdCLEtBQUs7QUFBQSxFQUN2QjtBQUNGO0FBVU8sU0FBUyxlQUFnQztBQUM5QyxTQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN0QyxVQUFNLGFBQVMsOEJBQWE7QUFDNUIsV0FBTyxLQUFLLFNBQVMsTUFBTTtBQUMzQixXQUFPLE9BQU8sR0FBRyxrQkFBa0IsTUFBTTtBQUN2QyxZQUFNLFVBQVUsT0FBTyxRQUFRO0FBQy9CLFVBQUksWUFBWSxRQUFRLE9BQU8sWUFBWSxVQUFVO0FBQ25ELGVBQU8sTUFBTTtBQUNiLGVBQU8sSUFBSSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BEO0FBQUEsTUFDRjtBQUNBLFlBQU0sRUFBRSxLQUFLLElBQUk7QUFDakIsYUFBTyxNQUFNLE1BQU07QUFDakIsZ0JBQVEsSUFBSTtBQUFBLE1BQ2QsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBUUEsU0FBUyxNQUFNLElBQTJCO0FBQ3hDLFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixlQUFXLFNBQVMsRUFBRTtBQUFBLEVBQ3hCLENBQUM7QUFDSDtBQU9BLGVBQWUsZ0JBQWdCLFFBQStCO0FBQzVELFFBQU0sV0FBVyxLQUFLLElBQUksSUFBSTtBQUM5QixTQUFPLEtBQUssSUFBSSxJQUFJLFVBQVU7QUFDNUIsUUFBSTtBQUNGLFlBQU0sV0FBVyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU87QUFDN0MsWUFBTSxVQUFVLE1BQU0sU0FBUyxLQUFLO0FBQ3BDLFVBQUksUUFBUSxLQUFLLENBQUMsV0FBVyxPQUFPLFNBQVMsTUFBTSxHQUFHO0FBQ3BEO0FBQUEsTUFDRjtBQUFBLElBQ0YsUUFBUTtBQUFBLElBRVI7QUFDQSxVQUFNLE1BQU0sdUNBQXVDO0FBQUEsRUFDckQ7QUFDQSxRQUFNLElBQUk7QUFBQSxJQUNSLGlEQUFpRCxNQUFNLFdBQVcsT0FBTyxpQ0FBaUMsQ0FBQztBQUFBLEVBQzdHO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
152
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbmNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGF1bmNoZXMgYW5kIG1hbmFnZXMgYSBoYXJuZXNzLW93bmVkLCBpc29sYXRlZCBPYnNpZGlhbiBkZXNrdG9wIGluc3RhbmNlLlxuICpcbiAqIFRoZSBpbnN0YW5jZSBydW5zIGFnYWluc3QgYSBkZWRpY2F0ZWQgYC0tdXNlci1kYXRhLWRpcmAgKHNvIGl0IG5ldmVyIHRvdWNoZXNcbiAqIHRoZSB1c2VyJ3MgT2JzaWRpYW4gY29uZmlnLCByZWdpc3RyeSwgb3IgcnVubmluZyB3aW5kb3cpIGFuZCBleHBvc2VzIENEUCBvbiBhXG4gKiBkZWRpY2F0ZWQgYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YC4gQmVjYXVzZSBFbGVjdHJvbidzIHNpbmdsZS1pbnN0YW5jZSBsb2NrXG4gKiBpcyBrZXllZCB0byB0aGUgdXNlci1kYXRhIGRpciwgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMgaW4gcGFyYWxsZWwgd2l0aCB0aGVcbiAqIHVzZXIncyBvd24gT2JzaWRpYW4uIENvbmZpcm1lZCBieSB0aGUgUGhhc2UgMCBzcGlrZSAoc2VlIHRoZSBwcm9qZWN0IHBsYW4pLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHByb2Nlc3MgbWFuYWdlbWVudCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSAnbm9kZTpuZXQnO1xuXG5pbXBvcnQgdHlwZSB7IFByb2Nlc3NFeGl0SW5mbyB9IGZyb20gJy4vcHJvY2Vzcy1leGl0LW1lc3NhZ2UuY2pzJztcblxuaW1wb3J0IHsga2lsbFByb2Nlc3NUcmVlIH0gZnJvbSAnLi9raWxsLXByb2Nlc3MtdHJlZS5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7XG4gIGNsZWFyT3duZWRJbnN0YW5jZUV4aXRNYXJrZXIsXG4gIHdyaXRlT3duZWRJbnN0YW5jZUV4aXRNYXJrZXJcbn0gZnJvbSAnLi9vd25lZC1pbnN0YW5jZS1leGl0LW1hcmtlci5janMnO1xuaW1wb3J0IHsgT3duZWRJbnN0YW5jZUV4aXRlZEVycm9yIH0gZnJvbSAnLi9vd25lZC1pbnN0YW5jZS1leGl0ZWQtZXJyb3IuY2pzJztcbmltcG9ydCB7IHN0YXJ0UGFyZW50TGl2ZW5lc3NTZXJ2ZXIgfSBmcm9tICcuL3BhcmVudC1saXZlbmVzcy5janMnO1xuaW1wb3J0IHsgYXR0YWNoUHJvY2Vzc0NhcHR1cmUgfSBmcm9tICcuL3Byb2Nlc3MtY2FwdHVyZS5janMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBsYXVuY2hPd25lZE9ic2lkaWFuSW5zdGFuY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaE93bmVkT2JzaWRpYW5JbnN0YW5jZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBDRFAgaG9zdCB0byBiaW5kL3BvbGwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnMTI3LjAuMC4xJ2BcbiAgICovXG4gIHJlYWRvbmx5IGNkcEhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUgKHNoZWxsKSB0byBsYXVuY2guXG4gICAqL1xuICByZWFkb25seSBleGVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dHJhIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYXBwZW5kZWQgYWZ0ZXIgYC0tdXNlci1kYXRhLWRpcmAgYW5kXG4gICAqIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydGAgXHUyMDE0IHVzZWQgdG8gcGFzcyB0aGUga2VlcC1hbGl2ZSBDaHJvbWl1bSBmbGFncyB3aGVuXG4gICAqIHRoZSBpbnN0YW5jZSBpcyBsYXVuY2hlZCBoaWRkZW4gKG9mZi1zY3JlZW4pLiBFbXB0eSBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFBcmd1bWVudHM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgQWJzb2x1dGUgcGF0aCB0byB0aGUgaXNvbGF0ZWQgdXNlci1kYXRhIGRpciB0byBwYXNzIHZpYSBgLS11c2VyLWRhdGEtZGlyYC5cbiAgICovXG5cbiAgcmVhZG9ubHkgdXNlckRhdGFEaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJ1bm5pbmcsIGhhcm5lc3Mtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3duZWRPYnNpZGlhbkluc3RhbmNlIHtcbiAgLyoqXG4gIEJhc2UgQ0RQIFVSTCwgZS5nLiBgaHR0cDovLzEyNy4wLjAuMTo1MTg4OGAuXG4gICAqL1xuICByZWFkb25seSBjZHBVcmw6IHN0cmluZztcblxuICAvKipcbiAgS2lsbHMgdGhlIGluc3RhbmNlIGFuZCBpdHMgZW50aXJlIHByb2Nlc3MgdHJlZS5cbiAgICovXG4gIGtpbGwoKTogdm9pZDtcblxuICAvKipcbiAgICogTG9vcGJhY2sgcG9ydCB0aGUgaW5zdGFuY2UncyByZW5kZXJlciBjb25uZWN0cyBiYWNrIHRvIHNvIGl0IGRlc3Ryb3lzXG4gICAqIGl0c2VsZiBpZiB0aGlzIGhhcm5lc3MgcHJvY2VzcyBkaWVzIHdpdGhvdXQgY2xlYW5pbmcgdXAuIFNlZVxuICAgKiBgcGFyZW50LWxpdmVuZXNzLnRzYCBmb3Igd2h5IHRoZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwIGFsb25lIGlzIG5vdFxuICAgKiBlbm91Z2guXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRMaXZlbmVzc1BvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgVGhlIENEUCByZW1vdGUtZGVidWdnaW5nIHBvcnQgdGhlIGluc3RhbmNlIHdhcyBsYXVuY2hlZCB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGhvdyB0aGUgaW5zdGFuY2UgZGllZCBvbmNlIGl0IGlzIG5vIGxvbmdlciBydW5uaW5nLCBvdGhlcndpc2VcbiAgICogYHVuZGVmaW5lZGAuIFRoaXMgaXMgdGhlIGluLXByb2Nlc3MgaGFsZiBvZiB0aGUgYW5zd2VyOyBhIHRlc3Qgd29ya2VyIGluXG4gICAqIGFub3RoZXIgcHJvY2VzcyByZWFkcyB0aGUgc2FtZSBmYWN0cyBmcm9tIHRoZSBleGl0IG1hcmtlclxuICAgKiAoYG93bmVkLWluc3RhbmNlLWV4aXQtbWFya2VyLnRzYCkuXG4gICAqL1xuICByZWFkRXhpdEluZm8oKTogUHJvY2Vzc0V4aXRJbmZvIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICBSZXR1cm5zIHRoZSB0YWlsIG9mIGV2ZXJ5dGhpbmcgdGhlIGluc3RhbmNlIHdyb3RlIHRvIHN0ZG91dC9zdGRlcnIuXG4gICAqL1xuICByZWFkT3V0cHV0KCk6IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVF9DRFBfSE9TVCA9ICcxMjcuMC4wLjEnO1xuY29uc3QgQ0RQX1JFQURZX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gMTAwMDtcbmNvbnN0IENEUF9SRUFEWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDYwXzAwMDtcbmNvbnN0IE9CU0lESUFOX09VVFBVVF9UQUlMX01BWF9MRU5HVEggPSA4MDAwO1xuXG5pbnRlcmZhY2UgQ2RwVGFyZ2V0IHtcbiAgdHlwZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIExhdW5jaGVzIGFuIGlzb2xhdGVkLCBoYXJuZXNzLW93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGFuZCB3YWl0cyB1bnRpbCBpdHMgQ0RQXG4gKiBlbmRwb2ludCBpcyBzZXJ2aW5nIHBhZ2UgdGFyZ2V0cy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gTGF1bmNoIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgcnVubmluZyBvd25lZCBpbnN0YW5jZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgQ0RQIGRvZXMgbm90IGJlY29tZSByZWFjaGFibGUgd2l0aGluIHRoZSB0aW1lb3V0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlKFxuICBwYXJhbXM6IExhdW5jaE93bmVkT2JzaWRpYW5JbnN0YW5jZVBhcmFtc1xuKTogUHJvbWlzZTxPd25lZE9ic2lkaWFuSW5zdGFuY2U+IHtcbiAgY29uc3QgY2RwSG9zdCA9IHBhcmFtcy5jZHBIb3N0ID8/IERFRkFVTFRfQ0RQX0hPU1Q7XG4gIGNvbnN0IHBvcnQgPSBhd2FpdCBwaWNrRnJlZVBvcnQoKTtcbiAgY29uc3QgY2RwVXJsID0gYGh0dHA6Ly8ke2NkcEhvc3R9OiR7U3RyaW5nKHBvcnQpfWA7XG5cbiAgLy8gTGlzdGVuIEJFRk9SRSBzcGF3bmluZywgc28gdGhlIHJlbmRlcmVyIHdhdGNoZG9nIGNhbiBuZXZlciByYWNlIHRoZSBzZXJ2ZXJcbiAgLy8gSW50byBhIGZhaWxlZCBjb25uZWN0ICh3aGljaCBpdCB0cmVhdHMgYXMgXCJubyB3YXRjaGRvZ1wiLCBsZWF2aW5nIHRoZSBpbnN0YW5jZSBhbGl2ZSkuXG4gIGNvbnN0IGxpdmVuZXNzU2VydmVyID0gYXdhaXQgc3RhcnRQYXJlbnRMaXZlbmVzc1NlcnZlcigpO1xuXG4gIC8vIFBvcnRzIGFyZSByZWN5Y2xlZCBieSB0aGUgT1MsIHNvIGFuIG9sZGVyIGluc3RhbmNlJ3MgZGVhdGggcmVjb3JkZWQgb24gdGhpc1xuICAvLyBQb3J0IHdvdWxkIG90aGVyd2lzZSBiZSByZWFkIGFzIHRoaXMgb25lJ3MuXG4gIGNsZWFyT3duZWRJbnN0YW5jZUV4aXRNYXJrZXIocG9ydCk7XG5cbiAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIExhdW5jaGluZyBvd25lZCBPYnNpZGlhbjogdXNlckRhdGE9JHtwYXJhbXMudXNlckRhdGFEaXJlY3Rvcnl9LCBjZHBQb3J0PSR7U3RyaW5nKHBvcnQpfWApO1xuICAvKlxuICAgKiBQaXBlZCByYXRoZXIgdGhhbiBgJ2lnbm9yZSdgOiBhbiBFbGVjdHJvbi9DaHJvbWl1bSBmYXRhbCBpcyB3cml0dGVuIHRvXG4gICAqIHN0ZGVyciBhbmQgbm93aGVyZSBlbHNlLCBhbmQgZGlzY2FyZGluZyBpdCBpcyB3aHkgYSBkeWluZyBpbnN0YW5jZSB1c2VkIHRvXG4gICAqIGJlIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSBoZWFsdGh5IG9uZS4gVGhlIGNhcHR1cmUgZHJhaW5zIGJvdGggcGlwZXMgZm9yXG4gICAqIHRoZSBwcm9jZXNzJ3Mgd2hvbGUgbGlmZSAoYSBmdWxsIHBpcGUgYnVmZmVyIHdvdWxkIGJsb2NrIHRoZSBhcHAgaXRzZWxmKSBhbmRcbiAgICoga2VlcHMgb25seSBhIGJvdW5kZWQgdGFpbC5cbiAgICovXG4gIGNvbnN0IGNoaWxkID0gc3Bhd24oXG4gICAgcGFyYW1zLmV4ZVBhdGgsXG4gICAgW2AtLXVzZXItZGF0YS1kaXI9JHtwYXJhbXMudXNlckRhdGFEaXJlY3Rvcnl9YCwgYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0PSR7U3RyaW5nKHBvcnQpfWAsIC4uLihwYXJhbXMuZXh0cmFBcmd1bWVudHMgPz8gW10pXSxcbiAgICB7IGRldGFjaGVkOiB0cnVlLCBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10gfVxuICApO1xuICBjb25zdCBjYXB0dXJlID0gYXR0YWNoUHJvY2Vzc0NhcHR1cmUoY2hpbGQsIHtcbiAgICBtYXhPdXRwdXRMZW5ndGhJbkNoYXJhY3RlcnM6IE9CU0lESUFOX09VVFBVVF9UQUlMX01BWF9MRU5HVEgsXG4gICAgb25DaHVuazogKGNodW5rKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gY2h1bmsudGV4dC50cmltRW5kKCk7XG4gICAgICBpZiAodGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxvZyhgW29ic2lkaWFuLWluc3RhbmNlOiR7Y2h1bmsuc3RyZWFtfV0gJHt0ZXh0fWApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gU2V0IGJ5IGBraWxsKClgLCBzbyBhIGRlYXRoIHRoZSBoYXJuZXNzIG9yZGVyZWQgaXMgbmV2ZXIgcmVwb3J0ZWQgYXMgb25lIGl0XG4gIC8vIFN1ZmZlcmVkIFx1MjAxNCBhIG1hcmtlciBsZWZ0IGJ5IGEgY2xlYW4gdGVhcmRvd24gd291bGQgY29udmljdCB0aGUgbmV4dCBydW4nc1xuICAvLyBIZWFsdGh5IGluc3RhbmNlIG9mIGFuIGV4aXQgdGhhdCBuZXZlciBoYXBwZW5lZC5cbiAgbGV0IGlzS2lsbEV4cGVjdGVkID0gZmFsc2U7XG5cbiAgY2hpbGQub25jZSgnZXhpdCcsIChjb2RlOiBudWxsIHwgbnVtYmVyLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzIHwgbnVsbCkgPT4ge1xuICAgIGlmIChpc0tpbGxFeHBlY3RlZCkge1xuICAgICAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIE93bmVkIE9ic2lkaWFuIGV4aXRlZCBhcyBhc2tlZDogcGlkPSR7U3RyaW5nKGNoaWxkLnBpZCl9IGNvZGU9JHtTdHJpbmcoY29kZSl9IHNpZ25hbD0ke1N0cmluZyhzaWduYWwpfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIExvdWQgb24gcHVycG9zZS4gVGhpcyBvbmUgbGluZSBpcyB3aGF0IHNlcGFyYXRlcyBhIGNsZWFuIHF1aXQgZnJvbSBhXG4gICAgLy8gQ3Jhc2gsIGFuZCBpdHMgYWJzZW5jZSBvbmNlIGNvc3QgYSBkYXkgb2YgZ3Vlc3NpbmcuXG4gICAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdICEhISBPV05FRCBPQlNJRElBTiBFWElURUQ6IHBpZD0ke1N0cmluZyhjaGlsZC5waWQpfSBjb2RlPSR7U3RyaW5nKGNvZGUpfSBzaWduYWw9JHtTdHJpbmcoc2lnbmFsKX1gKTtcbiAgICB3cml0ZU93bmVkSW5zdGFuY2VFeGl0TWFya2VyKHtcbiAgICAgIGNvZGUsXG4gICAgICBvdXRwdXRUYWlsOiBjYXB0dXJlLnJlYWRPdXRwdXQoKSxcbiAgICAgIHBpZDogY2hpbGQucGlkLFxuICAgICAgcG9ydCxcbiAgICAgIHNpZ25hbFxuICAgIH0pO1xuICB9KTtcblxuICBjaGlsZC51bnJlZigpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgd2FpdEZvckNkcFJlYWR5KGNkcFVybCk7XG4gICAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIE93bmVkIE9ic2lkaWFuIGlzIHNlcnZpbmcgQ0RQIGF0ICR7Y2RwVXJsfS5gKTtcbiAgICByZXR1cm4ge1xuICAgICAgY2RwVXJsLFxuICAgICAga2lsbCxcbiAgICAgIHBhcmVudExpdmVuZXNzUG9ydDogbGl2ZW5lc3NTZXJ2ZXIucG9ydCxcbiAgICAgIHBvcnQsXG4gICAgICByZWFkRXhpdEluZm86ICgpID0+IGNhcHR1cmUucmVhZEV4aXRJbmZvKCksXG4gICAgICByZWFkT3V0cHV0OiAoKSA9PiBjYXB0dXJlLnJlYWRPdXRwdXQoKVxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgLypcbiAgICAgKiBSZWFkIGJlZm9yZSBraWxsaW5nLCBzbyB0aGUgdmVyZGljdCBpcyB0aGUgaW5zdGFuY2UncyBvd24uIEEgQ0RQIHRpbWVvdXRcbiAgICAgKiB3aG9zZSBwcm9jZXNzIGlzIGFscmVhZHkgZ29uZSBpcyBub3QgYSBzbG93IGJvb3QgXHUyMDE0IGl0IGlzIGEgYm9vdCB0aGF0XG4gICAgICogZW5kZWQgXHUyMDE0IGFuZCBzYXlpbmcgc28gYmVhdHMgcmVwb3J0aW5nIG9ubHkgdGhlIGJ1ZGdldCBpdCBibGV3LlxuICAgICAqXG4gICAgICogRGVsaWJlcmF0ZWx5IE5PVCBhIGZhc3QtZmFpbCBpbnNpZGUgdGhlIHBvbGw6IG9uIHNvbWUgaW5zdGFsbHMgdGhlXG4gICAgICogbGF1bmNoZWQgZXhlY3V0YWJsZSBpcyBhIHNoaW0gdGhhdCBleGl0cyBvbmNlIGl0IGhhcyBoYW5kZWQgb2ZmIHRvIHRoZVxuICAgICAqIHJlYWwgYXBwLCBzbyBhIGRlYWQgY2hpbGQgbWlkLXBvbGwgZG9lcyBub3QgaW1wbHkgYSBkZWFkIGluc3RhbmNlLiBPbmx5IGFcbiAgICAgKiBkZWFkIGNoaWxkIHRoYXQgYWxzbyBuZXZlciBzZXJ2ZWQgQ0RQIGRvZXMuXG4gICAgICovXG4gICAgY29uc3QgZXhpdEluZm8gPSBjYXB0dXJlLnJlYWRFeGl0SW5mbygpO1xuICAgIGtpbGwoKTtcbiAgICBpZiAoZXhpdEluZm8pIHtcbiAgICAgIHRocm93IG5ldyBPd25lZEluc3RhbmNlRXhpdGVkRXJyb3Ioe1xuICAgICAgICBjZHBVcmwsXG4gICAgICAgIGNvZGU6IGV4aXRJbmZvLmNvZGUsXG4gICAgICAgIG91dHB1dFRhaWw6IGNhcHR1cmUucmVhZE91dHB1dCgpLFxuICAgICAgICBwaWQ6IGNoaWxkLnBpZCxcbiAgICAgICAgc2lnbmFsOiBleGl0SW5mby5zaWduYWwsXG4gICAgICAgIHNwYXduRXJyb3I6IGV4aXRJbmZvLnNwYXduRXJyb3JcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGtpbGwoKTogdm9pZCB7XG4gICAgaXNLaWxsRXhwZWN0ZWQgPSB0cnVlO1xuICAgIGNsZWFyT3duZWRJbnN0YW5jZUV4aXRNYXJrZXIocG9ydCk7XG4gICAgbGl2ZW5lc3NTZXJ2ZXIuY2xvc2UoKTtcbiAgICBraWxsUHJvY2Vzc1RyZWUoY2hpbGQpO1xuICB9XG59XG5cbi8qKlxuICogUGlja3MgYSBmcmVlIFRDUCBwb3J0IGJ5IGJpbmRpbmcgdG8gcG9ydCBgMGAgYW5kIHJlYWRpbmcgdGhlIGFzc2lnbmVkIHBvcnQuXG4gKlxuICogVGhlcmUgaXMgYSBzbWFsbCB0aW1lLW9mLWNoZWNrL3RpbWUtb2YtdXNlIHdpbmRvdyBiZXR3ZWVuIHJlbGVhc2luZyB0aGUgcG9ydFxuICogaGVyZSBhbmQgT2JzaWRpYW4gYmluZGluZyBpdDsgaW4gcHJhY3RpY2UgaXQgaXMgbmVnbGlnaWJsZSBmb3IgdGVzdCBydW5zLlxuICpcbiAqIEByZXR1cm5zIEEgZnJlZSBUQ1AgcG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tGcmVlUG9ydCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgc2VydmVyLmxpc3RlbigwLCBERUZBVUxUX0NEUF9IT1NULCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gc2VydmVyLmFkZHJlc3MoKTtcbiAgICAgIGlmIChhZGRyZXNzID09PSBudWxsIHx8IHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJykge1xuICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGRldGVybWluZSBhIGZyZWUgcG9ydC4nKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgcG9ydCB9ID0gYWRkcmVzcztcbiAgICAgIHNlcnZlci5jbG9zZSgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUocG9ydCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZ2l2ZW4gZGVsYXkuXG4gKlxuICogQHBhcmFtIG1zIC0gVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBkZWxheS5cbiAqL1xuZnVuY3Rpb24gZGVsYXkobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUG9sbHMgdGhlIENEUCBgL2pzb25gIGVuZHBvaW50IHVudGlsIGF0IGxlYXN0IG9uZSBwYWdlIHRhcmdldCBhcHBlYXJzLlxuICpcbiAqIEBwYXJhbSBjZHBVcmwgLSBUaGUgYmFzZSBDRFAgVVJMLlxuICovXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ2RwUmVhZHkoY2RwVXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZGVhZGxpbmUgPSBEYXRlLm5vdygpICsgQ0RQX1JFQURZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuICB3aGlsZSAoRGF0ZS5ub3coKSA8IGRlYWRsaW5lKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7Y2RwVXJsfS9qc29uYCk7XG4gICAgICBjb25zdCB0YXJnZXRzID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENkcFRhcmdldFtdO1xuICAgICAgaWYgKHRhcmdldHMuc29tZSgodGFyZ2V0KSA9PiB0YXJnZXQudHlwZSA9PT0gJ3BhZ2UnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBFbmRwb2ludCBub3QgdXAgeWV0IFx1MjAxNCBrZWVwIHBvbGxpbmcuXG4gICAgfVxuICAgIGF3YWl0IGRlbGF5KENEUF9SRUFEWV9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBPd25lZCBPYnNpZGlhbiBpbnN0YW5jZSBkaWQgbm90IGV4cG9zZSBDRFAgYXQgJHtjZHBVcmx9IHdpdGhpbiAke1N0cmluZyhDRFBfUkVBRFlfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMpfW1zLmBcbiAgKTtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNBLGdDQUFzQjtBQUN0QixzQkFBNkI7QUFJN0IsK0JBQWdDO0FBQ2hDLGlCQUFvQjtB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
@@ -9,6 +9,7 @@
9
9
  * is keyed to the user-data dir, the owned instance runs in parallel with the
10
10
  * user's own Obsidian. Confirmed by the Phase 0 spike (see the project plan).
11
11
  */
12
+ import type { ProcessExitInfo } from './process-exit-message.cjs';
12
13
  /**
13
14
  * Parameters for {@link launchOwnedObsidianInstance}.
14
15
  */
@@ -57,6 +58,17 @@ export interface OwnedObsidianInstance {
57
58
  The CDP remote-debugging port the instance was launched with.
58
59
  */
59
60
  readonly port: number;
61
+ /**
62
+ * Returns how the instance died once it is no longer running, otherwise
63
+ * `undefined`. This is the in-process half of the answer; a test worker in
64
+ * another process reads the same facts from the exit marker
65
+ * (`owned-instance-exit-marker.ts`).
66
+ */
67
+ readExitInfo(): ProcessExitInfo | undefined;
68
+ /**
69
+ Returns the tail of everything the instance wrote to stdout/stderr.
70
+ */
71
+ readOutput(): string;
60
72
  }
61
73
  /**
62
74
  * Launches an isolated, harness-owned Obsidian instance and waits until its CDP