oxygen-cli 1.40.1 → 1.40.2-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. package/CHANGELOG.md +1742 -1742
  2. package/LICENSE +672 -672
  3. package/README.md +37 -37
  4. package/build/core/OxygenCore.js +1 -1
  5. package/build/core/OxygenEvents.js +1 -1
  6. package/build/core/OxygenModule.js +1 -1
  7. package/build/core/OxygenService.js +1 -1
  8. package/build/core/OxygenSubModule.js +1 -1
  9. package/build/core/WebDriverModule.js +1 -1
  10. package/build/core/utils.js +1 -1
  11. package/build/errors/HookError.js +1 -1
  12. package/build/errors/ModuleError.js +1 -1
  13. package/build/errors/ModuleUnavailableError.js +1 -1
  14. package/build/errors/OxygenError.js +1 -1
  15. package/build/errors/ScriptNotFound.js +1 -1
  16. package/build/errors/helper.js +2 -1
  17. package/build/index.js +1 -1
  18. package/build/lib/cli-util.js +5 -1
  19. package/build/lib/debugger.js +1 -1
  20. package/build/lib/img-merge.js +1 -1
  21. package/build/lib/launcher.js +1 -1
  22. package/build/lib/logger.js +43 -43
  23. package/build/lib/moduleRequire.js +1 -1
  24. package/build/lib/parallel-launcher.js +1 -1
  25. package/build/lib/param-manager.js +1 -1
  26. package/build/lib/param-reader-csv.js +1 -1
  27. package/build/lib/param-reader-excel.js +1 -1
  28. package/build/lib/param-reader-json.js +1 -1
  29. package/build/lib/text-to-image.js +1 -1
  30. package/build/lib/util.js +1 -1
  31. package/build/model/case-result.js +1 -1
  32. package/build/model/failure.js +1 -1
  33. package/build/model/status.js +1 -1
  34. package/build/model/step-result.js +1 -1
  35. package/build/model/suite-result.js +1 -1
  36. package/build/model/test-result.js +1 -1
  37. package/build/model/testcase.js +1 -1
  38. package/build/model/testsuite.js +1 -1
  39. package/build/ox_modules/index.js +9 -1
  40. package/build/ox_modules/module-assert.js +37 -37
  41. package/build/ox_modules/module-date.js +24 -24
  42. package/build/ox_modules/module-db.js +52 -52
  43. package/build/ox_modules/module-email.js +59 -59
  44. package/build/ox_modules/module-eyes.js +34 -34
  45. package/build/ox_modules/module-http/ntlm-util.js +10 -10
  46. package/build/ox_modules/module-http/ntlm.js +15 -15
  47. package/build/ox_modules/module-http.js +132 -132
  48. package/build/ox_modules/module-log.js +27 -27
  49. package/build/ox_modules/module-mailinator.js +87 -87
  50. package/build/ox_modules/module-mob/commands/alertAccept.js +17 -17
  51. package/build/ox_modules/module-mob/commands/alertDismiss.js +17 -17
  52. package/build/ox_modules/module-mob/commands/assertAlert.js +20 -20
  53. package/build/ox_modules/module-mob/commands/assertText.js +21 -21
  54. package/build/ox_modules/module-mob/commands/assertTitle.js +19 -19
  55. package/build/ox_modules/module-mob/commands/assertValue.js +18 -18
  56. package/build/ox_modules/module-mob/commands/back.js +16 -16
  57. package/build/ox_modules/module-mob/commands/clear.js +19 -19
  58. package/build/ox_modules/module-mob/commands/click.js +17 -17
  59. package/build/ox_modules/module-mob/commands/clickHidden.js +17 -17
  60. package/build/ox_modules/module-mob/commands/clickLong.js +18 -18
  61. package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +18 -18
  62. package/build/ox_modules/module-mob/commands/closeApp.js +16 -16
  63. package/build/ox_modules/module-mob/commands/debug.js +16 -16
  64. package/build/ox_modules/module-mob/commands/dragAndDrop.js +19 -19
  65. package/build/ox_modules/module-mob/commands/enableNetwork.js +27 -27
  66. package/build/ox_modules/module-mob/commands/execute.js +21 -21
  67. package/build/ox_modules/module-mob/commands/findElement.js +20 -20
  68. package/build/ox_modules/module-mob/commands/findElements.js +23 -23
  69. package/build/ox_modules/module-mob/commands/getAlertText.js +17 -17
  70. package/build/ox_modules/module-mob/commands/getAppiumLogs.js +16 -16
  71. package/build/ox_modules/module-mob/commands/getBrowserLogs.js +16 -16
  72. package/build/ox_modules/module-mob/commands/getCurrentActivity.js +15 -15
  73. package/build/ox_modules/module-mob/commands/getCurrentPackage.js +15 -15
  74. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +16 -16
  75. package/build/ox_modules/module-mob/commands/getDeviceTime.js +16 -16
  76. package/build/ox_modules/module-mob/commands/getLocation.js +20 -20
  77. package/build/ox_modules/module-mob/commands/getSource.js +16 -16
  78. package/build/ox_modules/module-mob/commands/getText.js +18 -18
  79. package/build/ox_modules/module-mob/commands/getTitle.js +13 -13
  80. package/build/ox_modules/module-mob/commands/getUrl.js +17 -17
  81. package/build/ox_modules/module-mob/commands/getValue.js +18 -18
  82. package/build/ox_modules/module-mob/commands/getWindowHandles.js +17 -17
  83. package/build/ox_modules/module-mob/commands/hideKeyboard.js +21 -21
  84. package/build/ox_modules/module-mob/commands/index.js +1 -1
  85. package/build/ox_modules/module-mob/commands/installApp.js +16 -16
  86. package/build/ox_modules/module-mob/commands/isAppInstalled.js +16 -16
  87. package/build/ox_modules/module-mob/commands/isCheckable.js +18 -18
  88. package/build/ox_modules/module-mob/commands/isChecked.js +18 -18
  89. package/build/ox_modules/module-mob/commands/isClickable.js +18 -18
  90. package/build/ox_modules/module-mob/commands/isExist.js +19 -19
  91. package/build/ox_modules/module-mob/commands/isSelected.js +23 -23
  92. package/build/ox_modules/module-mob/commands/isVisible.js +19 -19
  93. package/build/ox_modules/module-mob/commands/isWebViewContext.js +16 -16
  94. package/build/ox_modules/module-mob/commands/launchApp.js +15 -15
  95. package/build/ox_modules/module-mob/commands/longPressKeyCode.js +18 -18
  96. package/build/ox_modules/module-mob/commands/open.js +17 -17
  97. package/build/ox_modules/module-mob/commands/pause.js +16 -16
  98. package/build/ox_modules/module-mob/commands/removeApp.js +16 -16
  99. package/build/ox_modules/module-mob/commands/resetApp.js +15 -15
  100. package/build/ox_modules/module-mob/commands/scrollIntoElement.js +22 -22
  101. package/build/ox_modules/module-mob/commands/scrollIntoView.js +27 -27
  102. package/build/ox_modules/module-mob/commands/select.js +24 -24
  103. package/build/ox_modules/module-mob/commands/selectFrame.js +23 -23
  104. package/build/ox_modules/module-mob/commands/selectWindow.js +28 -28
  105. package/build/ox_modules/module-mob/commands/sendKeys.js +29 -29
  106. package/build/ox_modules/module-mob/commands/setContext.js +16 -16
  107. package/build/ox_modules/module-mob/commands/setNativeContext.js +15 -15
  108. package/build/ox_modules/module-mob/commands/setTimeout.js +21 -21
  109. package/build/ox_modules/module-mob/commands/setWebViewContext.js +16 -16
  110. package/build/ox_modules/module-mob/commands/shake.js +16 -16
  111. package/build/ox_modules/module-mob/commands/smsClickLink.js +19 -19
  112. package/build/ox_modules/module-mob/commands/smsGetText.js +20 -20
  113. package/build/ox_modules/module-mob/commands/swipe.js +20 -20
  114. package/build/ox_modules/module-mob/commands/swipeElement.js +20 -20
  115. package/build/ox_modules/module-mob/commands/swipeScreen.js +20 -20
  116. package/build/ox_modules/module-mob/commands/takeScreenshot.js +17 -17
  117. package/build/ox_modules/module-mob/commands/tap.js +17 -17
  118. package/build/ox_modules/module-mob/commands/type.js +20 -20
  119. package/build/ox_modules/module-mob/commands/unlockPattern.js +22 -22
  120. package/build/ox_modules/module-mob/commands/waitForExist.js +18 -18
  121. package/build/ox_modules/module-mob/commands/waitForInteractable.js +17 -17
  122. package/build/ox_modules/module-mob/commands/waitForVisible.js +17 -17
  123. package/build/ox_modules/module-mob.js +74 -74
  124. package/build/ox_modules/module-mongo.js +302 -0
  125. package/build/ox_modules/module-pdf.js +35 -35
  126. package/build/ox_modules/module-proxy.js +77 -77
  127. package/build/ox_modules/module-serial.js +55 -55
  128. package/build/ox_modules/module-shell.js +25 -25
  129. package/build/ox_modules/module-soap.js +72 -72
  130. package/build/ox_modules/module-twilio.js +41 -41
  131. package/build/ox_modules/module-utils.js +91 -91
  132. package/build/ox_modules/module-web/commands/alertAccept.js +17 -17
  133. package/build/ox_modules/module-web/commands/alertDismiss.js +17 -17
  134. package/build/ox_modules/module-web/commands/assertAlert.js +20 -20
  135. package/build/ox_modules/module-web/commands/assertExist.js +17 -17
  136. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +21 -21
  137. package/build/ox_modules/module-web/commands/assertSelectedValue.js +21 -21
  138. package/build/ox_modules/module-web/commands/assertText.js +21 -21
  139. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +18 -18
  140. package/build/ox_modules/module-web/commands/assertTextPresent.js +18 -18
  141. package/build/ox_modules/module-web/commands/assertTitle.js +19 -19
  142. package/build/ox_modules/module-web/commands/assertValue.js +20 -20
  143. package/build/ox_modules/module-web/commands/back.js +16 -16
  144. package/build/ox_modules/module-web/commands/clear.js +18 -18
  145. package/build/ox_modules/module-web/commands/click.js +25 -25
  146. package/build/ox_modules/module-web/commands/clickHidden.js +23 -23
  147. package/build/ox_modules/module-web/commands/closeWindow.js +15 -15
  148. package/build/ox_modules/module-web/commands/debug.js +15 -15
  149. package/build/ox_modules/module-web/commands/deleteCookies.js +12 -12
  150. package/build/ox_modules/module-web/commands/deselect.js +22 -22
  151. package/build/ox_modules/module-web/commands/doubleClick.js +17 -17
  152. package/build/ox_modules/module-web/commands/dragAndDrop.js +20 -20
  153. package/build/ox_modules/module-web/commands/execute.js +24 -24
  154. package/build/ox_modules/module-web/commands/fileBrowse.js +18 -18
  155. package/build/ox_modules/module-web/commands/findElement.js +19 -19
  156. package/build/ox_modules/module-web/commands/findElements.js +22 -22
  157. package/build/ox_modules/module-web/commands/fullscreenWindow.js +14 -14
  158. package/build/ox_modules/module-web/commands/getAlertText.js +16 -16
  159. package/build/ox_modules/module-web/commands/getAttribute.js +19 -19
  160. package/build/ox_modules/module-web/commands/getBrowserLogs.js +17 -17
  161. package/build/ox_modules/module-web/commands/getCookies.js +13 -13
  162. package/build/ox_modules/module-web/commands/getCssValue.js +19 -19
  163. package/build/ox_modules/module-web/commands/getElementCount.js +17 -17
  164. package/build/ox_modules/module-web/commands/getHTML.js +17 -17
  165. package/build/ox_modules/module-web/commands/getSource.js +16 -16
  166. package/build/ox_modules/module-web/commands/getText.js +18 -18
  167. package/build/ox_modules/module-web/commands/getTitle.js +12 -12
  168. package/build/ox_modules/module-web/commands/getUrl.js +16 -16
  169. package/build/ox_modules/module-web/commands/getValue.js +18 -18
  170. package/build/ox_modules/module-web/commands/getWindowHandles.js +16 -16
  171. package/build/ox_modules/module-web/commands/getWindowSize.js +16 -16
  172. package/build/ox_modules/module-web/commands/getXMLPageSource.js +16 -16
  173. package/build/ox_modules/module-web/commands/index.js +1 -1
  174. package/build/ox_modules/module-web/commands/isAlertPresent.js +16 -16
  175. package/build/ox_modules/module-web/commands/isChecked.js +18 -18
  176. package/build/ox_modules/module-web/commands/isExist.js +19 -19
  177. package/build/ox_modules/module-web/commands/isInteractable.js +22 -22
  178. package/build/ox_modules/module-web/commands/isSelected.js +23 -23
  179. package/build/ox_modules/module-web/commands/isVisible.js +19 -19
  180. package/build/ox_modules/module-web/commands/makeVisible.js +25 -25
  181. package/build/ox_modules/module-web/commands/maximizeWindow.js +14 -14
  182. package/build/ox_modules/module-web/commands/minimizeWindow.js +14 -14
  183. package/build/ox_modules/module-web/commands/mock.js +20 -20
  184. package/build/ox_modules/module-web/commands/mockClearAll.js +12 -12
  185. package/build/ox_modules/module-web/commands/mockRestoreAll.js +12 -12
  186. package/build/ox_modules/module-web/commands/newWindow.js +16 -16
  187. package/build/ox_modules/module-web/commands/open.js +16 -16
  188. package/build/ox_modules/module-web/commands/pause.js +15 -15
  189. package/build/ox_modules/module-web/commands/point.js +21 -21
  190. package/build/ox_modules/module-web/commands/pointJS.js +15 -15
  191. package/build/ox_modules/module-web/commands/refresh.js +15 -15
  192. package/build/ox_modules/module-web/commands/rightClick.js +17 -17
  193. package/build/ox_modules/module-web/commands/rightClickActions.js +19 -19
  194. package/build/ox_modules/module-web/commands/scrollToElement.js +21 -21
  195. package/build/ox_modules/module-web/commands/select.js +23 -23
  196. package/build/ox_modules/module-web/commands/selectFrame.js +24 -24
  197. package/build/ox_modules/module-web/commands/selectWindow.js +27 -27
  198. package/build/ox_modules/module-web/commands/sendKeys.js +22 -22
  199. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +20 -20
  200. package/build/ox_modules/module-web/commands/setTimeout.js +21 -21
  201. package/build/ox_modules/module-web/commands/setWindowSize.js +17 -17
  202. package/build/ox_modules/module-web/commands/takeScreenshot.js +17 -17
  203. package/build/ox_modules/module-web/commands/type.js +20 -20
  204. package/build/ox_modules/module-web/commands/verifyAlert.js +20 -20
  205. package/build/ox_modules/module-web/commands/verifyExist.js +17 -17
  206. package/build/ox_modules/module-web/commands/verifySelectedLabel.js +21 -21
  207. package/build/ox_modules/module-web/commands/verifySelectedValue.js +21 -21
  208. package/build/ox_modules/module-web/commands/verifyText.js +21 -21
  209. package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +18 -18
  210. package/build/ox_modules/module-web/commands/verifyTextPresent.js +18 -18
  211. package/build/ox_modules/module-web/commands/verifyTitle.js +19 -19
  212. package/build/ox_modules/module-web/commands/verifyValue.js +20 -20
  213. package/build/ox_modules/module-web/commands/waitForAngular.js +19 -19
  214. package/build/ox_modules/module-web/commands/waitForExist.js +17 -17
  215. package/build/ox_modules/module-web/commands/waitForInteractable.js +17 -17
  216. package/build/ox_modules/module-web/commands/waitForNotExist.js +17 -17
  217. package/build/ox_modules/module-web/commands/waitForNotText.js +20 -20
  218. package/build/ox_modules/module-web/commands/waitForNotValue.js +20 -20
  219. package/build/ox_modules/module-web/commands/waitForText.js +20 -20
  220. package/build/ox_modules/module-web/commands/waitForValue.js +20 -20
  221. package/build/ox_modules/module-web/commands/waitForVisible.js +17 -17
  222. package/build/ox_modules/module-web/commands/waitForWindow.js +22 -22
  223. package/build/ox_modules/module-web.js +94 -94
  224. package/build/ox_modules/module-win/commands/assertText.js +17 -17
  225. package/build/ox_modules/module-win/commands/assertTitle.js +15 -15
  226. package/build/ox_modules/module-win/commands/assertValue.js +14 -14
  227. package/build/ox_modules/module-win/commands/back.js +11 -11
  228. package/build/ox_modules/module-win/commands/clear.js +13 -13
  229. package/build/ox_modules/module-win/commands/click.js +13 -13
  230. package/build/ox_modules/module-win/commands/clickLong.js +14 -14
  231. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +14 -14
  232. package/build/ox_modules/module-win/commands/findElement.js +15 -15
  233. package/build/ox_modules/module-win/commands/findElements.js +15 -15
  234. package/build/ox_modules/module-win/commands/getAppiumLogs.js +12 -12
  235. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +15 -15
  236. package/build/ox_modules/module-win/commands/getLocation.js +14 -14
  237. package/build/ox_modules/module-win/commands/getSource.js +12 -12
  238. package/build/ox_modules/module-win/commands/getText.js +14 -14
  239. package/build/ox_modules/module-win/commands/getValue.js +14 -14
  240. package/build/ox_modules/module-win/commands/getWindowHandles.js +15 -15
  241. package/build/ox_modules/module-win/commands/index.js +1 -1
  242. package/build/ox_modules/module-win/commands/isCheckable.js +14 -14
  243. package/build/ox_modules/module-win/commands/isChecked.js +14 -14
  244. package/build/ox_modules/module-win/commands/isClickable.js +14 -14
  245. package/build/ox_modules/module-win/commands/isExist.js +15 -15
  246. package/build/ox_modules/module-win/commands/isSelected.js +14 -14
  247. package/build/ox_modules/module-win/commands/isVisible.js +15 -15
  248. package/build/ox_modules/module-win/commands/open.js +13 -13
  249. package/build/ox_modules/module-win/commands/pause.js +12 -12
  250. package/build/ox_modules/module-win/commands/rightClick.js +13 -13
  251. package/build/ox_modules/module-win/commands/selectWindow.js +23 -23
  252. package/build/ox_modules/module-win/commands/sendKeys.js +22 -22
  253. package/build/ox_modules/module-win/commands/setTimeout.js +17 -17
  254. package/build/ox_modules/module-win/commands/takeScreenshot.js +16 -16
  255. package/build/ox_modules/module-win/commands/tap.js +13 -13
  256. package/build/ox_modules/module-win/commands/type.js +16 -16
  257. package/build/ox_modules/module-win/commands/waitForExist.js +14 -14
  258. package/build/ox_modules/module-win/commands/waitForInteractable.js +16 -16
  259. package/build/ox_modules/module-win/commands/waitForVisible.js +13 -13
  260. package/build/ox_modules/module-win.js +47 -47
  261. package/build/ox_modules/utils.js +8 -8
  262. package/build/ox_reporters/excel/template.json +48 -48
  263. package/build/ox_reporters/html/index.ejs +163 -163
  264. package/build/ox_reporters/html/summary.ejs +77 -77
  265. package/build/ox_reporters/html/tests-details.ejs +134 -134
  266. package/build/ox_reporters/html/tests-devices-browsers.ejs +83 -83
  267. package/build/ox_reporters/reporter-excel.js +1 -1
  268. package/build/ox_reporters/reporter-html.js +1 -1
  269. package/build/ox_reporters/reporter-json.js +1 -1
  270. package/build/ox_reporters/reporter-junit.js +1 -1
  271. package/build/ox_reporters/reporter-pdf.js +1 -1
  272. package/build/ox_reporters/reporter-rp.js +1 -1
  273. package/build/ox_reporters/reporter-xml.js +1 -1
  274. package/build/ox_services/service-devtools/submodule-network.js +1 -1
  275. package/build/ox_services/service-devtools.js +1 -1
  276. package/build/reporter/FileReporterBase.js +1 -1
  277. package/build/reporter/ReportAggregator.js +13 -5
  278. package/build/reporter/ReporterBase.js +1 -1
  279. package/build/reporter/WebSocketReporter.js +1 -1
  280. package/build/runners/WorkerProcess.js +1 -1
  281. package/build/runners/cucumber/CucumberEventListener.js +1 -1
  282. package/build/runners/cucumber/CucumberReporter.js +1 -1
  283. package/build/runners/cucumber/CucumberWorker.js +1 -1
  284. package/build/runners/cucumber/index.js +1 -1
  285. package/build/runners/cucumber/worker.js +1 -1
  286. package/build/runners/index.js +1 -1
  287. package/build/runners/oxygen/OxygenWorker.js +1 -1
  288. package/build/runners/oxygen/index.js +1 -1
  289. package/build/runners/oxygen/worker.js +1 -1
  290. package/config/default.json +6 -6
  291. package/log.txt +1614 -0
  292. package/package.json +139 -137
  293. package/reports/2025-06-08_231627/report.html +440 -0
  294. package/reports/2025-06-09_223615/report.html +440 -0
  295. package/transpiled/mongodb/etc/prepare.js +18 -0
  296. package/transpiled/mongodb/lib/admin.js +182 -0
  297. package/transpiled/mongodb/lib/beta.js +26 -0
  298. package/transpiled/mongodb/lib/bson.js +220 -0
  299. package/transpiled/mongodb/lib/bulk/common.js +1041 -0
  300. package/transpiled/mongodb/lib/bulk/ordered.js +76 -0
  301. package/transpiled/mongodb/lib/bulk/unordered.js +102 -0
  302. package/transpiled/mongodb/lib/change_stream.js +517 -0
  303. package/transpiled/mongodb/lib/client-side-encryption/auto_encrypter.js +329 -0
  304. package/transpiled/mongodb/lib/client-side-encryption/client_encryption.js +779 -0
  305. package/transpiled/mongodb/lib/client-side-encryption/crypto_callbacks.js +95 -0
  306. package/transpiled/mongodb/lib/client-side-encryption/errors.js +171 -0
  307. package/transpiled/mongodb/lib/client-side-encryption/mongocryptd_manager.js +98 -0
  308. package/transpiled/mongodb/lib/client-side-encryption/providers/aws.js +34 -0
  309. package/transpiled/mongodb/lib/client-side-encryption/providers/azure.js +186 -0
  310. package/transpiled/mongodb/lib/client-side-encryption/providers/gcp.js +29 -0
  311. package/transpiled/mongodb/lib/client-side-encryption/providers/index.js +58 -0
  312. package/transpiled/mongodb/lib/client-side-encryption/state_machine.js +505 -0
  313. package/transpiled/mongodb/lib/cmap/auth/auth_provider.js +63 -0
  314. package/transpiled/mongodb/lib/cmap/auth/aws_temporary_credentials.js +167 -0
  315. package/transpiled/mongodb/lib/cmap/auth/gssapi.js +207 -0
  316. package/transpiled/mongodb/lib/cmap/auth/mongo_credentials.js +193 -0
  317. package/transpiled/mongodb/lib/cmap/auth/mongodb_aws.js +181 -0
  318. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/automated_callback_workflow.js +101 -0
  319. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/azure_machine_workflow.js +81 -0
  320. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/callback_workflow.js +174 -0
  321. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/command_builders.js +59 -0
  322. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/gcp_machine_workflow.js +58 -0
  323. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/human_callback_workflow.js +138 -0
  324. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/k8s_machine_workflow.js +42 -0
  325. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_cache.js +71 -0
  326. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc/token_machine_workflow.js +34 -0
  327. package/transpiled/mongodb/lib/cmap/auth/mongodb_oidc.js +111 -0
  328. package/transpiled/mongodb/lib/cmap/auth/plain.js +43 -0
  329. package/transpiled/mongodb/lib/cmap/auth/providers.js +22 -0
  330. package/transpiled/mongodb/lib/cmap/auth/scram.js +318 -0
  331. package/transpiled/mongodb/lib/cmap/auth/x509.js +61 -0
  332. package/transpiled/mongodb/lib/cmap/command_monitoring_events.js +266 -0
  333. package/transpiled/mongodb/lib/cmap/commands.js +605 -0
  334. package/transpiled/mongodb/lib/cmap/connect.js +418 -0
  335. package/transpiled/mongodb/lib/cmap/connection.js +673 -0
  336. package/transpiled/mongodb/lib/cmap/connection_pool.js +688 -0
  337. package/transpiled/mongodb/lib/cmap/connection_pool_events.js +254 -0
  338. package/transpiled/mongodb/lib/cmap/errors.js +128 -0
  339. package/transpiled/mongodb/lib/cmap/handshake/client_metadata.js +278 -0
  340. package/transpiled/mongodb/lib/cmap/metrics.js +67 -0
  341. package/transpiled/mongodb/lib/cmap/stream_description.js +74 -0
  342. package/transpiled/mongodb/lib/cmap/wire_protocol/compression.js +196 -0
  343. package/transpiled/mongodb/lib/cmap/wire_protocol/constants.js +19 -0
  344. package/transpiled/mongodb/lib/cmap/wire_protocol/on_data.js +144 -0
  345. package/transpiled/mongodb/lib/cmap/wire_protocol/on_demand/document.js +278 -0
  346. package/transpiled/mongodb/lib/cmap/wire_protocol/responses.js +376 -0
  347. package/transpiled/mongodb/lib/cmap/wire_protocol/shared.js +49 -0
  348. package/transpiled/mongodb/lib/collection.js +852 -0
  349. package/transpiled/mongodb/lib/connection_string.js +1452 -0
  350. package/transpiled/mongodb/lib/constants.js +162 -0
  351. package/transpiled/mongodb/lib/cursor/abstract_cursor.js +1082 -0
  352. package/transpiled/mongodb/lib/cursor/aggregation_cursor.js +227 -0
  353. package/transpiled/mongodb/lib/cursor/change_stream_cursor.js +136 -0
  354. package/transpiled/mongodb/lib/cursor/client_bulk_write_cursor.js +69 -0
  355. package/transpiled/mongodb/lib/cursor/find_cursor.js +476 -0
  356. package/transpiled/mongodb/lib/cursor/list_collections_cursor.js +48 -0
  357. package/transpiled/mongodb/lib/cursor/list_indexes_cursor.js +46 -0
  358. package/transpiled/mongodb/lib/cursor/list_search_indexes_cursor.js +30 -0
  359. package/transpiled/mongodb/lib/cursor/run_command_cursor.js +125 -0
  360. package/transpiled/mongodb/lib/db.js +467 -0
  361. package/transpiled/mongodb/lib/deps.js +174 -0
  362. package/transpiled/mongodb/lib/encrypter.js +129 -0
  363. package/transpiled/mongodb/lib/error.js +1550 -0
  364. package/transpiled/mongodb/lib/explain.js +122 -0
  365. package/transpiled/mongodb/lib/gridfs/download.js +369 -0
  366. package/transpiled/mongodb/lib/gridfs/index.js +240 -0
  367. package/transpiled/mongodb/lib/gridfs/upload.js +446 -0
  368. package/transpiled/mongodb/lib/index.js +975 -0
  369. package/transpiled/mongodb/lib/mongo_client.js +626 -0
  370. package/transpiled/mongodb/lib/mongo_client_auth_providers.js +98 -0
  371. package/transpiled/mongodb/lib/mongo_logger.js +812 -0
  372. package/transpiled/mongodb/lib/mongo_types.js +71 -0
  373. package/transpiled/mongodb/lib/operations/aggregate.js +129 -0
  374. package/transpiled/mongodb/lib/operations/bulk_write.js +48 -0
  375. package/transpiled/mongodb/lib/operations/client_bulk_write/client_bulk_write.js +96 -0
  376. package/transpiled/mongodb/lib/operations/client_bulk_write/command_builder.js +409 -0
  377. package/transpiled/mongodb/lib/operations/client_bulk_write/common.js +5 -0
  378. package/transpiled/mongodb/lib/operations/client_bulk_write/executor.js +144 -0
  379. package/transpiled/mongodb/lib/operations/client_bulk_write/results_merger.js +228 -0
  380. package/transpiled/mongodb/lib/operations/collections.js +49 -0
  381. package/transpiled/mongodb/lib/operations/command.js +102 -0
  382. package/transpiled/mongodb/lib/operations/count.js +60 -0
  383. package/transpiled/mongodb/lib/operations/create_collection.js +109 -0
  384. package/transpiled/mongodb/lib/operations/delete.js +134 -0
  385. package/transpiled/mongodb/lib/operations/distinct.js +77 -0
  386. package/transpiled/mongodb/lib/operations/drop.js +102 -0
  387. package/transpiled/mongodb/lib/operations/estimated_document_count.js +47 -0
  388. package/transpiled/mongodb/lib/operations/execute_operation.js +251 -0
  389. package/transpiled/mongodb/lib/operations/find.js +197 -0
  390. package/transpiled/mongodb/lib/operations/find_and_modify.js +191 -0
  391. package/transpiled/mongodb/lib/operations/get_more.js +84 -0
  392. package/transpiled/mongodb/lib/operations/indexes.js +197 -0
  393. package/transpiled/mongodb/lib/operations/insert.js +138 -0
  394. package/transpiled/mongodb/lib/operations/is_capped.js +44 -0
  395. package/transpiled/mongodb/lib/operations/kill_cursors.js +58 -0
  396. package/transpiled/mongodb/lib/operations/list_collections.js +66 -0
  397. package/transpiled/mongodb/lib/operations/list_databases.js +56 -0
  398. package/transpiled/mongodb/lib/operations/operation.js +88 -0
  399. package/transpiled/mongodb/lib/operations/options_operation.js +44 -0
  400. package/transpiled/mongodb/lib/operations/profiling_level.js +42 -0
  401. package/transpiled/mongodb/lib/operations/remove_user.js +35 -0
  402. package/transpiled/mongodb/lib/operations/rename.js +48 -0
  403. package/transpiled/mongodb/lib/operations/run_command.js +64 -0
  404. package/transpiled/mongodb/lib/operations/search_indexes/create.js +41 -0
  405. package/transpiled/mongodb/lib/operations/search_indexes/drop.js +51 -0
  406. package/transpiled/mongodb/lib/operations/search_indexes/update.js +40 -0
  407. package/transpiled/mongodb/lib/operations/set_profiling_level.js +70 -0
  408. package/transpiled/mongodb/lib/operations/stats.js +39 -0
  409. package/transpiled/mongodb/lib/operations/update.js +218 -0
  410. package/transpiled/mongodb/lib/operations/validate_collection.js +49 -0
  411. package/transpiled/mongodb/lib/read_concern.js +92 -0
  412. package/transpiled/mongodb/lib/read_preference.js +215 -0
  413. package/transpiled/mongodb/lib/resource_management.js +74 -0
  414. package/transpiled/mongodb/lib/sdam/common.js +53 -0
  415. package/transpiled/mongodb/lib/sdam/events.js +177 -0
  416. package/transpiled/mongodb/lib/sdam/monitor.js +656 -0
  417. package/transpiled/mongodb/lib/sdam/server.js +463 -0
  418. package/transpiled/mongodb/lib/sdam/server_description.js +196 -0
  419. package/transpiled/mongodb/lib/sdam/server_selection.js +283 -0
  420. package/transpiled/mongodb/lib/sdam/server_selection_events.js +112 -0
  421. package/transpiled/mongodb/lib/sdam/srv_polling.js +139 -0
  422. package/transpiled/mongodb/lib/sdam/topology.js +833 -0
  423. package/transpiled/mongodb/lib/sdam/topology_description.js +447 -0
  424. package/transpiled/mongodb/lib/sessions.js +988 -0
  425. package/transpiled/mongodb/lib/sort.js +123 -0
  426. package/transpiled/mongodb/lib/timeout.js +349 -0
  427. package/transpiled/mongodb/lib/transactions.js +149 -0
  428. package/transpiled/mongodb/lib/utils.js +1502 -0
  429. package/transpiled/mongodb/lib/write_concern.js +115 -0
  430. package/types/index.d.ts +70 -70
  431. package/types/module-eyes.d.ts +39 -39
  432. package/types/module-http.d.ts +163 -163
  433. package/types/module-log.d.ts +34 -34
  434. package/types/module-mob.d.ts +966 -966
  435. package/types/module-pdf.d.ts +40 -40
  436. package/types/module-proxy.d.ts +100 -100
  437. package/types/module-shell.d.ts +24 -24
  438. package/types/module-utils.d.ts +99 -99
  439. package/types/module-web.d.ts +1053 -1053
  440. package/types/module-win.d.ts +352 -352
  441. package/types/oxygen.d.ts +53 -53
@@ -347,7 +347,11 @@ function processTargetPath(targetPath, userCwd) {
347
347
  return null;
348
348
  }
349
349
  }
350
+ } else if (targetPath.endsWith(OXYGEN_CONFIG_FILE_NAME + '.js') || targetPath.endsWith(OXYGEN_CONFIG_FILE_NAME + '.json')) {
351
+ configFilePath = targetPath;
352
+ cwd = targetPath = _path.default.dirname(targetPath);
350
353
  } else {
354
+ cwd = userCwd || _path.default.dirname(targetPath);
351
355
  configFilePath = _path.default.join(cwd, OXYGEN_CONFIG_FILE_NAME + '.js');
352
356
 
353
357
  if (!_fs.default.existsSync(configFilePath)) {
@@ -373,4 +377,4 @@ function processTargetPath(targetPath, userCwd) {
373
377
  extension: _path.default.extname(targetPath)
374
378
  };
375
379
  }
376
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwibmFtZXMiOlsiT1hZR0VOX0NPTkZJR19GSUxFX05BTUUiLCJPWFlHRU5fRU5WX0ZJTEVfTkFNRSIsIk9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUiLCJERUZBVUxUX1JFUE9SVEVSIiwiZ2VuZXJhdGVUZXN0T3B0aW9ucyIsImNvbmZpZyIsImFyZ3YiLCJvcHRpb25zIiwiZW52IiwibG9hZEVudmlyb25tZW50VmFyaWFibGVzIiwicG8iLCJnZXRQYWdlT2JqZWN0RmlsZVBhdGgiLCJzdWl0ZXMiLCJsb2FkU3VpdGVzIiwiZnJhbWV3b3JrIiwidG9Mb3dlckNhc2UiLCJ0YXJnZXQiLCJpc0NvbmZpZ0ZpbGUiLCJuYW1lIiwiaW5kZXhPZiIsImV4dGVuc2lvbiIsImNvbmZpZ1BhdGgiLCJwdXNoIiwib3h1dGlsIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlIiwicGF0aCIsInBhcmFtZXRlcnMiLCJmaWxlIiwibW9kZSIsIml0ZXJhdGlvbnMiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSIsInN1aXRlRGVmcyIsIkFycmF5IiwiaXNBcnJheSIsInN1aXRlc0ZvbGRlciIsImpvaW4iLCJjd2QiLCJmcyIsImV4aXN0c1N5bmMiLCJsb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwic3VpdGVEZWYiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uIiwic2VsZWN0ZWRTdWl0ZU5hbWVzIiwic3BsaXQiLCJmaWx0ZXIiLCJ4IiwiaW5jbHVkZXMiLCJmb2xkZXJQYXRoIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImV4dG5hbWUiLCJmdWxsUGF0aCIsInBvRmlsZU5hbWUiLCJwcm9jZXNzIiwicG9GaWxlUGF0aCIsInJlc29sdmUiLCJlIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJlbnZOYW1lIiwiZW52aXJvbm1lbnQiLCJkZWZhdWx0RW52RmlsZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlZGljYXRlZEVudkZpbGVKcyIsImRlZGljYXRlZEVudkZpbGVKc29uIiwiZ2V0RW52aXJvbm1lbnRzIiwidGFyZ2V0Q3dkIiwiZ2V0Q29uZmlndXJhdGlvbnMiLCJERUZBVUxUX09QVFMiLCJicm93c2VyTmFtZSIsInNlbGVuaXVtVXJsIiwiYXBwaXVtVXJsIiwicmVvcGVuU2Vzc2lvbiIsInJlUnVuT25GYWlsZWQiLCJkZWJ1Z1BvcnQiLCJkZWxheSIsImNvbGxlY3REZXZpY2VMb2dzIiwiY29sbGVjdEFwcGl1bUxvZ3MiLCJjb2xsZWN0QnJvd3NlckxvZ3MiLCJyZXBvcnRpbmciLCJyZXBvcnRlcnMiLCJjbWRPcHRzIiwiZ2V0Q29tbWFuZExpbmVPcHRpb25zIiwicHJvakNvbmZpZ09wdHMiLCJlbnZzIiwiaXNDbWRPcHRzUmVwb3J0Rm9ybWF0IiwiaXNDb25maWdSZXBvcnRGb3JtYXQiLCJiYXNlTmFtZSIsIm9wdHMiLCJiIiwiYnJvd3NlciIsInMiLCJzZXJ2ZXIiLCJyZW9wZW4iLCJpIiwicGFyc2VJbnQiLCJpdGVyIiwiZGJncG9ydCIsIndzUG9ydCIsIndzcG9ydCIsImQiLCJyZiIsImxlbmd0aCIsInJlcG9ydEZvcm1hdHMiLCJybyIsIm91dHB1dERpciIsInAiLCJwYXJhbSIsInBtIiwic3BlY3MiLCJtb2R1bGVzIiwiZGVsZXRlTnVsbFByb3BlcnRpZXMiLCJvYmoiLCJjbG9uZSIsImtleXMiLCJrZXkiLCJ1bmRlZmluZWQiLCJwcm9jZXNzVGFyZ2V0UGF0aCIsInRhcmdldFBhdGgiLCJ1c2VyQ3dkIiwicmVzb2x2ZVBhdGgiLCJzdGF0cyIsImxzdGF0U3luYyIsImlzRGlyZWN0b3IiLCJpc0RpcmVjdG9yeSIsImNvbmZpZ0ZpbGVQYXRoIiwiZGlybmFtZSIsImdldEZpbGVOYW1lV2l0aG91dEV4dCIsImZ1bGxOYW1lIiwiYmFzZW5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7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LENBQUNxQyxZQUFHQyxVQUFILENBQWMrRixjQUFkLENBQUwsRUFBb0M7QUFDaENBLE1BQUFBLGNBQWMsR0FBRzVHLGNBQUtVLElBQUwsQ0FBVUMsR0FBVixFQUFlcEMsdUJBQXVCLEdBQUcsT0FBekMsQ0FBakI7O0FBQ0EsVUFBSSxDQUFDcUMsWUFBR0MsVUFBSCxDQUFjK0YsY0FBZCxDQUFMLEVBQW9DO0FBQ2hDQSxRQUFBQSxjQUFjLEdBQUdULFNBQWpCO0FBQ0g7QUFDSjtBQUNKOztBQUNELE1BQUksQ0FBQ0UsVUFBTCxFQUFpQjtBQUNiLFdBQU8sSUFBUDtBQUNIOztBQUNELFNBQU87QUFFSHJHLElBQUFBLElBQUksRUFBRXFHLFVBRkg7QUFHSHpHLElBQUFBLFVBQVUsRUFBRWdILGNBSFQ7QUFLSGpHLElBQUFBLEdBQUcsRUFBRUEsR0FBRyxJQUFJWCxjQUFLNkcsT0FBTCxDQUFhUixVQUFiLENBTFQ7QUFPSDVHLElBQUFBLElBQUksRUFBRUssY0FBT2dILHFCQUFQLENBQTZCVCxVQUE3QixDQVBIO0FBU0hVLElBQUFBLFFBQVEsRUFBRS9HLGNBQUtnSCxRQUFMLENBQWNYLFVBQWQsQ0FUUDtBQVdIL0IsSUFBQUEsUUFBUSxFQUFFdEUsY0FBS2dILFFBQUwsQ0FBY2hILGNBQUs2RyxPQUFMLENBQWFSLFVBQWIsQ0FBZCxDQVhQO0FBYUgxRyxJQUFBQSxTQUFTLEVBQUVLLGNBQUs0QixPQUFMLENBQWF5RSxVQUFiO0FBYlIsR0FBUDtBQWVIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBmcyBmcm9tICdmcyc7XHJcbmltcG9ydCBveHV0aWwgZnJvbSAnLi91dGlsJztcclxuaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ2FzeW5jJztcclxuaW1wb3J0IG1vZHVsZVJlcXVpcmUgZnJvbSAnLi9tb2R1bGVSZXF1aXJlJztcclxuXHJcbmV4cG9ydCBjb25zdCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSA9ICdveHlnZW4uY29uZic7XHJcbmV4cG9ydCBjb25zdCBPWFlHRU5fRU5WX0ZJTEVfTkFNRSA9ICdveHlnZW4uZW52JztcclxuZXhwb3J0IGNvbnN0IE9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUgPSAnb3h5Z2VuLnBvJztcclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVQT1JURVIgPSAnaHRtbCc7XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVUZXN0T3B0aW9ucyhjb25maWcsIGFyZ3YpIHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLmNvbmZpZyB9O1xyXG4gICAgb3B0aW9ucy5lbnYgPSBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMoY29uZmlnLCBhcmd2KTtcclxuICAgIG9wdGlvbnMucG8gPSBnZXRQYWdlT2JqZWN0RmlsZVBhdGgoY29uZmlnLCBhcmd2KTtcclxuICAgIG9wdGlvbnMuc3VpdGVzID0gYXdhaXQgbG9hZFN1aXRlcyhjb25maWcsIGFyZ3YpO1xyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkU3VpdGVzKGNvbmZpZywgYXJndikge1xyXG4gICAgaWYgKGNvbmZpZy5mcmFtZXdvcmsgJiYgdHlwZW9mIGNvbmZpZy5mcmFtZXdvcmsgPT09ICdzdHJpbmcnICYmIGNvbmZpZy5mcmFtZXdvcmsudG9Mb3dlckNhc2UoKSAhPT0gJ294eWdlbicpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gY29uZmlnO1xyXG4gICAgY29uc3QgaXNDb25maWdGaWxlID0gdGFyZ2V0ICYmIChcclxuICAgICAgICAodGFyZ2V0Lm5hbWUgJiYgdGFyZ2V0Lm5hbWUuaW5kZXhPZihPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSkgPT09IDApXHJcbiAgICAgICAgfHwgKHRhcmdldC5leHRlbnNpb24gPT09ICcnICYmIHRhcmdldC5jb25maWdQYXRoICYmIHRhcmdldC5jb25maWdQYXRoLmluZGV4T2YoT1hZR0VOX0NPTkZJR19GSUxFX05BTUUpID4gLTEpXHJcbiAgICApO1xyXG4gICAgbGV0IHN1aXRlcyA9IFtdO1xyXG4gICAgLy8gaWYgYW4gaW5kaXZpZHVhbCBzY3JpcHQgb3Igc3VpdGUgZmlsZSB3YXMgcGFzc2VkXHJcbiAgICBpZiAoIWlzQ29uZmlnRmlsZSkge1xyXG4gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qcycpIHtcclxuICAgICAgICAgICAgc3VpdGVzLnB1c2goYXdhaXQgb3h1dGlsLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpTRmlsZSh0YXJnZXQucGF0aCwgY29uZmlnLnBhcmFtZXRlcnMuZmlsZSwgY29uZmlnLnBhcmFtZXRlcnMubW9kZSwgZmFsc2UsIGNvbmZpZy5pdGVyYXRpb25zIHx8IDEpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldC5leHRlbnNpb24gPT09ICcuanNvbicpIHtcclxuICAgICAgICAgICAgc3VpdGVzLnB1c2goYXdhaXQgb3h1dGlsLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb25GaWxlKHRhcmdldC5wYXRoLCBjb25maWcucGFyYW1ldGVycy5maWxlLCBjb25maWcucGFyYW1ldGVycy5tb2RlLCBjb25maWcpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBpZiBhIGZvbGRlciBvciBhIGNvbmZpZ3VyYXRpb24gZmlsZSB3YXMgcGFzc2VkXHJcbiAgICBlbHNlIHtcclxuICAgICAgICBsZXQgc3VpdGVEZWZzID0gW107XHJcbiAgICAgICAgaWYgKGNvbmZpZy5zdWl0ZXMgJiYgQXJyYXkuaXNBcnJheShjb25maWcuc3VpdGVzKSkge1xyXG4gICAgICAgICAgICBzdWl0ZURlZnMgPSBjb25maWcuc3VpdGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjaGVjayBpZiBtb3JlIHN1aXRlcyBhcmUgZGVmaW5lZCBpbiB0aGUgJ3N1aXRlcycgZm9sZGVyXHJcbiAgICAgICAgY29uc3Qgc3VpdGVzRm9sZGVyID0gcGF0aC5qb2luKHRhcmdldC5jd2QsICdzdWl0ZXMnKTtcclxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhzdWl0ZXNGb2xkZXIpKSB7XHJcbiAgICAgICAgICAgIHN1aXRlRGVmcyA9IFtcclxuICAgICAgICAgICAgICAgIC4uLnN1aXRlRGVmcyxcclxuICAgICAgICAgICAgICAgIC4uLmxvYWRTdWl0ZURlZmluaXRpb25zRnJvbUZvbGRlcihzdWl0ZXNGb2xkZXIpXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1lcmdlIHN1aXRlcyBjb25maWd1cmVkIGluIHRoZSBwcm9qZWN0IGNvbmZpZyBmaWxlIGFuZCB0aG9zZSBmb3VuZCBpbiAnc3VpdGVzJyBmb2xkZXJcclxuICAgICAgICBzdWl0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChzdWl0ZURlZnMubWFwKGFzeW5jIChzdWl0ZURlZikgPT4gYXdhaXQgb3h1dGlsLmdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24oc3VpdGVEZWYsIGNvbmZpZykpKTtcclxuICAgIH1cclxuICAgIC8vIGZpbHRlciBvdXQgc3VpdGVzIGlmICctLXN1aXRlcycgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWRcclxuICAgIGlmIChhcmd2LnN1aXRlcyAmJiB0eXBlb2YgYXJndi5zdWl0ZXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdWl0ZU5hbWVzID0gYXJndi5zdWl0ZXMuc3BsaXQoJywnKTtcclxuICAgICAgICBzdWl0ZXMgPSBzdWl0ZXMuZmlsdGVyKHggPT4gc2VsZWN0ZWRTdWl0ZU5hbWVzLmluY2x1ZGVzKHgubmFtZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN1aXRlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRTdWl0ZURlZmluaXRpb25zRnJvbUZvbGRlcihmb2xkZXJQYXRoKSB7XHJcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGZvbGRlclBhdGgpO1xyXG4gICAgbGV0IHN1aXRlRGVmcyA9IFtdO1xyXG4gICAgZm9yRWFjaChmaWxlcywgZmlsZSA9PiB7XHJcbiAgICAgICAgaWYgKHBhdGguZXh0bmFtZShmaWxlKSA9PT0gJy5qc29uJykge1xyXG4gICAgICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihmb2xkZXJQYXRoLCBmaWxlKTtcclxuICAgICAgICAgICAgc3VpdGVEZWZzLnB1c2gobW9kdWxlUmVxdWlyZShmdWxsUGF0aCkpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHN1aXRlRGVmcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhZ2VPYmplY3RGaWxlUGF0aChjb25maWcsIGFyZ3YgPSB7fSkge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gY29uZmlnLnRhcmdldCB8fCB7fTtcclxuICAgIGNvbnN0IHBvRmlsZU5hbWUgPSBhcmd2LnBvIHx8IGAke09YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUV9LmpzYDtcclxuICAgIGNvbnN0IGN3ZCA9IHRhcmdldC5jd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIGxldCBwb0ZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZCwgcG9GaWxlTmFtZSk7XHJcbiAgICBwb0ZpbGVQYXRoID0gZnMuZXhpc3RzU3luYyhwb0ZpbGVQYXRoKSA/IHBvRmlsZVBhdGggOiBudWxsO1xyXG5cclxuICAgIGlmIChwb0ZpbGVQYXRoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbW9kdWxlUmVxdWlyZShwb0ZpbGVQYXRoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBvRmlsZVBhdGg7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGZpbGU6ICR7cG9GaWxlUGF0aH0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMoY29uZmlnLCBhcmd2KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBjb25maWcudGFyZ2V0IHx8IHt9O1xyXG4gICAgY29uc3QgZW52TmFtZSA9IGFyZ3YuZW52IHx8IGNvbmZpZy5lbnZpcm9ubWVudCB8fCAnZGVmYXVsdCc7XHJcbiAgICBjb25zdCBjd2QgPSB0YXJnZXQuY3dkIHx8IHByb2Nlc3MuY3dkKCk7XHJcbiAgICBjb25zdCBkZWZhdWx0RW52RmlsZSA9IHBhdGguam9pbihjd2QsIGAke09YWUdFTl9FTlZfRklMRV9OQU1FfS5qc2ApO1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudkZpbGUpKSB7XHJcbiAgICAgICAgY29uc3QgZW52ID0gbW9kdWxlUmVxdWlyZShkZWZhdWx0RW52RmlsZSk7XHJcbiAgICAgICAgaWYgKGVudiAmJiB0eXBlb2YgZW52ID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZW52LCBlbnZOYW1lKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZW52W2Vudk5hbWVdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRyeSB0byByZXNvbHZlIGEgZGVkaWNhdGVkIGVudmlyb25tZW50IGZpbGUgaW4gJ2Vudicgc3ViIGZvbGRlclxyXG4gICAgY29uc3QgZGVkaWNhdGVkRW52RmlsZUpzID0gcGF0aC5qb2luKGN3ZCwgJ2VudicsIGAke2Vudk5hbWV9LmpzYCk7XHJcbiAgICBjb25zdCBkZWRpY2F0ZWRFbnZGaWxlSnNvbiA9IHBhdGguam9pbihjd2QsICdlbnYnLCBgJHtlbnZOYW1lfS5qc29uYCk7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWRpY2F0ZWRFbnZGaWxlSnMpKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZVJlcXVpcmUoZGVkaWNhdGVkRW52RmlsZUpzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoZGVkaWNhdGVkRW52RmlsZUpzb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZVJlcXVpcmUoZGVkaWNhdGVkRW52RmlsZUpzb24pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52aXJvbm1lbnRzKHRhcmdldCkge1xyXG4gICAgbGV0IHRhcmdldEN3ZCA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuY3dkKSB7XHJcbiAgICAgICAgdGFyZ2V0Q3dkID0gdGFyZ2V0LmN3ZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjd2QgPSB0YXJnZXRDd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIGNvbnN0IGRlZmF1bHRFbnZGaWxlID0gcGF0aC5qb2luKGN3ZCwgYCR7T1hZR0VOX0VOVl9GSUxFX05BTUV9LmpzYCk7XHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWZhdWx0RW52RmlsZSkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gbW9kdWxlUmVxdWlyZShkZWZhdWx0RW52RmlsZSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGZpbGU6ICR7ZGVmYXVsdEVudkZpbGV9LiBSZWFzb246ICR7ZS5tZXNzYWdlfSAke2Uuc3RhY2t9YCk7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge307XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWd1cmF0aW9ucyh0YXJnZXQsIGFyZ3YpIHtcclxuICAgIC8vIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xyXG4gICAgbGV0IHRhcmdldEN3ZCA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuY3dkKSB7XHJcbiAgICAgICAgdGFyZ2V0Q3dkID0gdGFyZ2V0LmN3ZDtcclxuICAgIH1cclxuICAgIGNvbnN0IERFRkFVTFRfT1BUUyA9IHtcclxuICAgICAgICBjd2Q6IHRhcmdldCA/ICh0YXJnZXRDd2QgfHwgcHJvY2Vzcy5jd2QoKSkgOiBwcm9jZXNzLmN3ZCgpLFxyXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxyXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnY2hyb21lJyxcclxuICAgICAgICBzZWxlbml1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViJyxcclxuICAgICAgICBhcHBpdW1VcmwgOiAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YicsXHJcbiAgICAgICAgcmVvcGVuU2Vzc2lvbjogZmFsc2UsXHJcbiAgICAgICAgcmVSdW5PbkZhaWxlZDogZmFsc2UsXHJcbiAgICAgICAgaXRlcmF0aW9ucyA6IDEsXHJcbiAgICAgICAgZGVidWdQb3J0OiBudWxsLFxyXG4gICAgICAgIGRlbGF5OiBudWxsLFxyXG4gICAgICAgIGNvbGxlY3REZXZpY2VMb2dzOiBmYWxzZSxcclxuICAgICAgICBjb2xsZWN0QXBwaXVtTG9nczogZmFsc2UsXHJcbiAgICAgICAgY29sbGVjdEJyb3dzZXJMb2dzOiBmYWxzZSxcclxuICAgICAgICByZXBvcnRpbmc6IHtcclxuICAgICAgICAgICAgcmVwb3J0ZXJzOiBbREVGQVVMVF9SRVBPUlRFUl1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcmFtZXRlcnMgOiB7XHJcbiAgICAgICAgICAgIGZpbGU6IG51bGwsXHJcbiAgICAgICAgICAgIG1vZGU6ICdzZXEnXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcbiAgICAvLyByZXRyaWV2ZSBvcHRpb25zIHByb3ZpZGVkIHZpYSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXHJcbiAgICBjb25zdCBjbWRPcHRzID0gZ2V0Q29tbWFuZExpbmVPcHRpb25zKGFyZ3YpO1xyXG4gICAgLy8gaWYgdGhlIHRhcmdldCBpcyBveHlnZW4gY29uZmlnIGZpbGUsIG1lcmdlIGl0cyBjb250ZW50IHdpdGggdGhlIGRlZmF1bHQgb3B0aW9uc1xyXG4gICAgbGV0IHByb2pDb25maWdPcHRzID0ge307XHJcbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5uYW1lID09PSBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSAmJiAodGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qcycgfHwgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qc29uJykpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IG1vZHVsZVJlcXVpcmUodGFyZ2V0LnBhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke3RhcmdldC5wYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldC5jb25maWdQYXRoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMgPSBtb2R1bGVSZXF1aXJlKHRhcmdldC5jb25maWdQYXRoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHt0YXJnZXQuY29uZmlnUGF0aH0uIFJlYXNvbjogJHtlLm1lc3NhZ2V9ICR7ZS5zdGFja31gKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGVudnMgPSBnZXRFbnZpcm9ubWVudHModGFyZ2V0KTtcclxuXHJcbiAgICBpZiAocHJvakNvbmZpZ09wdHMuZW52cykge1xyXG4gICAgICAgIC8vIG1lcmdlIGV4dGVybmFsIGVudmlyb25tZW50cyBkZWZpbml0aW9uIHdpdGggdGhlIG9uZSBpbiB0aGUgY29uZmlnIGZpbGVcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cy5lbnZzID0geyAuLi5wcm9qQ29uZmlnT3B0cy5lbnZzLCAuLi5lbnZzIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBwcm9qQ29uZmlnT3B0cyA9IHsgLi4ucHJvakNvbmZpZ09wdHMsIGVudnM6IGVudnMgfTtcclxuICAgIH1cclxuICAgIC8vIG1ha2Ugc3VyZSB0byBzZXQgZGVmYXVsdCBIVE1MIHJlcG9ydGVyIGlmIHJlcG9ydGluZyBvcHRpb25zIGFyZSBub3QgcHJvdmlkZWQgaW4gb3h5Z2VuLmNvbmYgZmlsZSBhbmQgdmlhIGNvbW1hbmQgbGluZVxyXG4gICAgY29uc3QgaXNDbWRPcHRzUmVwb3J0Rm9ybWF0ID0gY21kT3B0cy5yZXBvcnRpbmcgJiYgY21kT3B0cy5yZXBvcnRpbmcucmVwb3J0ZXJzO1xyXG4gICAgY29uc3QgaXNDb25maWdSZXBvcnRGb3JtYXQgPSBwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcgJiYgcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nLnJlcG9ydGVycztcclxuICAgIGlmICghaXNDbWRPcHRzUmVwb3J0Rm9ybWF0ICYmICFpc0NvbmZpZ1JlcG9ydEZvcm1hdCkge1xyXG4gICAgICAgIGlmICghcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIHByb2pDb25maWdPcHRzLnJlcG9ydGluZyA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcucmVwb3J0ZXJzID0gW0RFRkFVTFRfUkVQT1JURVJdO1xyXG4gICAgfVxyXG4gICAgLy8gZGV0ZXJtaW5lIHRlc3QgbmFtZVxyXG4gICAgbGV0IG5hbWUgPSBjbWRPcHRzLm5hbWUgfHwgcHJvakNvbmZpZ09wdHMubmFtZSB8fCBudWxsO1xyXG4gICAgaWYgKCFuYW1lICYmIHRhcmdldCkge1xyXG4gICAgICAgIG5hbWUgPSB0YXJnZXQubmFtZSAhPT0gT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgPyB0YXJnZXQubmFtZSA6IHRhcmdldC5iYXNlTmFtZTtcclxuICAgIH1cclxuICAgIC8vIG1lcmdlIG9wdGlvbnMgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgb3JkZXIgKHRoZSBsYXN0IG9uZSBvdmVycmlkZXMgdGhlIHByZXZpb3VzIG9uZSk6XHJcbiAgICAvLyBkZWZhdWx0IG9wdGlvbnMsIHByb2plY3QgY29uZmlnIGZpbGUsIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcclxuICAgIHJldHVybiB7IC4uLkRFRkFVTFRfT1BUUywgLi4ucHJvakNvbmZpZ09wdHMsIC4uLmNtZE9wdHMsIG5hbWU6IG5hbWUgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1hbmRMaW5lT3B0aW9ucyhhcmd2KSB7XHJcbiAgICBjb25zdCBvcHRzID0ge1xyXG4gICAgICAgIC8vIHN3aXRjaDogLS1uYW1lIFxyXG4gICAgICAgIG5hbWU6IGFyZ3YubmFtZSB8fCBudWxsLFxyXG4gICAgICAgIC8vIHN3aXRjaDogLWIgb3IgLS1icm93c2VyXHJcbiAgICAgICAgYnJvd3Nlck5hbWUgOiBhcmd2LmIgfHwgYXJndi5icm93c2VyIHx8IG51bGwsXHJcbiAgICAgICAgc2VsZW5pdW1VcmwgOiBhcmd2LnMgfHwgYXJndi5zZXJ2ZXIgfHwgbnVsbCxcclxuICAgICAgICBhcHBpdW1VcmwgOiBhcmd2LnMgfHwgYXJndi5zZXJ2ZXIgfHwgbnVsbCxcclxuICAgICAgICByZW9wZW5TZXNzaW9uOiBhcmd2LnJlb3BlbiA/IGFyZ3YucmVvcGVuID09PSAndHJ1ZScgOiBudWxsLFxyXG4gICAgICAgIGl0ZXJhdGlvbnMgOiBhcmd2LmkgPyBwYXJzZUludChhcmd2LmkpIDogKGFyZ3YuaXRlciA/IHBhcnNlSW50KGFyZ3YuaXRlcikgOiBudWxsKSxcclxuICAgICAgICBkZWJ1Z1BvcnQ6IGFyZ3YuZGJncG9ydCB8fCBudWxsLFxyXG4gICAgICAgIHdzUG9ydDogYXJndi53c3BvcnQgfHwgbnVsbCxcclxuICAgICAgICBkZWxheTogYXJndi5kIHx8IGFyZ3YuZGVsYXkgfHwgbnVsbCxcclxuICAgIH07XHJcbiAgICAvLyBzd2l0Y2g6IC0tcmYgZmxhZ1xyXG4gICAgaWYgKGFyZ3YucmYgJiYgdHlwZW9mIGFyZ3YucmYgPT09ICdzdHJpbmcnICYmIGFyZ3YucmYubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydEZvcm1hdHMgPSBhcmd2LnJmLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5yZXBvcnRpbmcgPSB7XHJcbiAgICAgICAgICAgIHJlcG9ydGVyczogcmVwb3J0Rm9ybWF0c1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gc3dpdGNoOiAtLXJvIC0gc2V0IHJlcG9ydGVyIG91dHB1dCBkaXJlY3RvcnkgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgICAgICAvLyBOT1RFOiAtLXJvIHN3aXRjaCBtdXN0IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIC0tcmZcclxuICAgICAgICBpZiAoYXJndi5ybyAmJiB0eXBlb2YgYXJndi5ybyA9PT0gJ3N0cmluZycgJiYgYXJndi5yby5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIG9wdHMucmVwb3J0aW5nLm91dHB1dERpciA9IGFyZ3Yucm87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gb3B0aW9uOiAtcCBvciAtLXBhcmFtIGFuZCAtLXBtXHJcbiAgICBpZiAoYXJndi5wIHx8IGFyZ3YucGFyYW0pIHtcclxuICAgICAgICBvcHRzLnBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgIGZpbGU6IGFyZ3YucCB8fCBhcmd2LnBhcmFtIHx8IG51bGwsXHJcbiAgICAgICAgICAgIG1vZGU6IGFyZ3YucG0gfHwgJ3NlcSdcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHN3aXRjaDogLS1zcGVjcyAtIHNldCBzcGVjcyBpZiBzZXQgYnkgdXNlciB0aHJvdWdoIGNvbW5hbmQgbGluZVxyXG4gICAgaWYgKGFyZ3Yuc3BlY3MgJiYgdHlwZW9mIGFyZ3Yuc3BlY3MgPT09ICdzdHJpbmcnICYmIGFyZ3Yuc3BlY3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IHNwZWNzID0gYXJndi5zcGVjcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIG9wdHMuc3BlY3MgPSBzcGVjcztcclxuICAgIH1cclxuICAgIC8vIHN3aXRjaDogLS1tb2R1bGVzIC0gc2V0IGEgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGxvYWRlZCwgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcclxuICAgIGlmIChhcmd2Lm1vZHVsZXMgJiYgdHlwZW9mIGFyZ3YubW9kdWxlcyA9PT0gJ3N0cmluZycgJiYgYXJndi5tb2R1bGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBtb2R1bGVzID0gYXJndi5tb2R1bGVzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgb3B0cy5tb2R1bGVzID0gbW9kdWxlcztcclxuICAgIH1cclxuICAgIC8vIHJlbW92ZSBhbnkgcHJvcGVydHkgd2l0aCBudWxsIHZhbHVlIChzbyBpdCB3b24ndCBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBpZiBpdCdzIG51bGwpXHJcbiAgICByZXR1cm4gZGVsZXRlTnVsbFByb3BlcnRpZXMob3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlbGV0ZU51bGxQcm9wZXJ0aWVzKG9iaikge1xyXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuICAgIGNvbnN0IGNsb25lID0geyAuLi5vYmogfTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xyXG4gICAgZm9yRWFjaCAoa2V5cywga2V5ID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSAmJiAob2JqW2tleV0gPT0gbnVsbCB8fCBvYmpba2V5XSA9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBjbG9uZVtrZXldO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1RhcmdldFBhdGgodGFyZ2V0UGF0aCwgdXNlckN3ZCkge1xyXG4gICAgbGV0IGN3ZCA9IHVzZXJDd2QgfHwgcHJvY2Vzcy5jd2QoKTtcclxuICAgIC8vIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlmIHVzZXIgaGFzIG5vdCBwcm92aWRlZCBwYXRoXHJcbiAgICBpZiAodHlwZW9mKHRhcmdldFBhdGgpID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRhcmdldFBhdGggPSBjd2Q7XHJcbiAgICB9XHJcbiAgICAvLyB1c2VyJ3MgcGF0aCBtaWdodCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAtIG1ha2Ugc3VyZSB0aGUgcmVsYXRpdmUgcGF0aCB3aWxsIHdvcmtcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRhcmdldFBhdGggPSBveHV0aWwucmVzb2x2ZVBhdGgodGFyZ2V0UGF0aCwgY3dkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0UGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGF0cyA9IGZzLmxzdGF0U3luYyh0YXJnZXRQYXRoKTtcclxuICAgIGNvbnN0IGlzRGlyZWN0b3IgPSBzdGF0cy5pc0RpcmVjdG9yeSgpO1xyXG4gICAgbGV0IGNvbmZpZ0ZpbGVQYXRoO1xyXG4gICAgaWYgKGlzRGlyZWN0b3IpIHtcclxuICAgICAgICAvLyBpZiBcInRhcmdldFwiIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGlzIGEgZGlyZWN0b3J5LFxyXG4gICAgICAgIC8vIHRoZW4gdW5sZXNzIFwiY3dkXCIgaXMgcHJvdmlkZWQgZXhwbGljaXRseSBieSB0aGUgdXNlclxyXG4gICAgICAgIC8vIHVzZSB0YXJnZXQgZGlyZWN0b3J5IGFzIGN3ZFxyXG4gICAgICAgIGN3ZCA9IHVzZXJDd2QgfHwgdGFyZ2V0UGF0aDtcclxuICAgICAgICAvLyBhcHBlbmQgb3h5Z2VuIGNvbmZpZyBmaWxlIG5hbWUgdG8gdGhlIGRpcmVjdG9yeSwgaWYgbm8gdGVzdCBjYXNlIGZpbGUgd2FzIHByb3ZpZGVkXHJcbiAgICAgICAgY29uZmlnRmlsZVBhdGggPSBwYXRoLmpvaW4odGFyZ2V0UGF0aCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzJyk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbih0YXJnZXRQYXRoLCBPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSArICcuanNvbicpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKGN3ZCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzJyk7XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKSkge1xyXG4gICAgICAgICAgICBjb25maWdGaWxlUGF0aCA9IHBhdGguam9pbihjd2QsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJyk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF0YXJnZXRQYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8vIHBhdGggdG8gdGhlIGNvbmZpZyBvciAuanMgZmlsZVxyXG4gICAgICAgIHBhdGg6IHRhcmdldFBhdGgsXHJcbiAgICAgICAgY29uZmlnUGF0aDogY29uZmlnRmlsZVBhdGgsXHJcbiAgICAgICAgLy8gd29ya2luZyBkaXJlY3RvcnlcclxuICAgICAgICBjd2Q6IGN3ZCB8fCBwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCksXHJcbiAgICAgICAgLy8gbmFtZSBvZiB0aGUgdGFyZ2V0IGZpbGUgd2l0aG91dCBleHRlbnNpb25cclxuICAgICAgICBuYW1lOiBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIG5hbWUgaW5jbHVkaW5nIGV4dGVuc2lvblxyXG4gICAgICAgIGZ1bGxOYW1lOiBwYXRoLmJhc2VuYW1lKHRhcmdldFBhdGgpLFxyXG4gICAgICAgIC8vIHBhcmVudCBmb2xkZXIncyBuYW1lXHJcbiAgICAgICAgYmFzZU5hbWU6IHBhdGguYmFzZW5hbWUocGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpKSxcclxuICAgICAgICAvLyB0YXJnZXQgZmlsZSBleHRlbnNpb25cclxuICAgICAgICBleHRlbnNpb246IHBhdGguZXh0bmFtZSh0YXJnZXRQYXRoKVxyXG4gICAgfTtcclxufSJdfQ==
380
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpLXV0aWwuanMiXSwibmFtZXMiOlsiT1hZR0VOX0NPTkZJR19GSUxFX05BTUUiLCJPWFlHRU5fRU5WX0ZJTEVfTkFNRSIsIk9YWUdFTl9QQUdFX09CSkVDVF9GSUxFX05BTUUiLCJERUZBVUxUX1JFUE9SVEVSIiwiZ2VuZXJhdGVUZXN0T3B0aW9ucyIsImNvbmZpZyIsImFyZ3YiLCJvcHRpb25zIiwiZW52IiwibG9hZEVudmlyb25tZW50VmFyaWFibGVzIiwicG8iLCJnZXRQYWdlT2JqZWN0RmlsZVBhdGgiLCJzdWl0ZXMiLCJsb2FkU3VpdGVzIiwiZnJhbWV3b3JrIiwidG9Mb3dlckNhc2UiLCJ0YXJnZXQiLCJpc0NvbmZpZ0ZpbGUiLCJuYW1lIiwiaW5kZXhPZiIsImV4dGVuc2lvbiIsImNvbmZpZ1BhdGgiLCJwdXNoIiwib3h1dGlsIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSlNGaWxlIiwicGF0aCIsInBhcmFtZXRlcnMiLCJmaWxlIiwibW9kZSIsIml0ZXJhdGlvbnMiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSIsInN1aXRlRGVmcyIsIkFycmF5IiwiaXNBcnJheSIsInN1aXRlc0ZvbGRlciIsImpvaW4iLCJjd2QiLCJmcyIsImV4aXN0c1N5bmMiLCJsb2FkU3VpdGVEZWZpbml0aW9uc0Zyb21Gb2xkZXIiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwic3VpdGVEZWYiLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uIiwic2VsZWN0ZWRTdWl0ZU5hbWVzIiwic3BsaXQiLCJmaWx0ZXIiLCJ4IiwiaW5jbHVkZXMiLCJmb2xkZXJQYXRoIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImV4dG5hbWUiLCJmdWxsUGF0aCIsInBvRmlsZU5hbWUiLCJwcm9jZXNzIiwicG9GaWxlUGF0aCIsInJlc29sdmUiLCJlIiwiZXJyIiwiRXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJlbnZOYW1lIiwiZW52aXJvbm1lbnQiLCJkZWZhdWx0RW52RmlsZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlZGljYXRlZEVudkZpbGVKcyIsImRlZGljYXRlZEVudkZpbGVKc29uIiwiZ2V0RW52aXJvbm1lbnRzIiwidGFyZ2V0Q3dkIiwiZ2V0Q29uZmlndXJhdGlvbnMiLCJERUZBVUxUX09QVFMiLCJicm93c2VyTmFtZSIsInNlbGVuaXVtVXJsIiwiYXBwaXVtVXJsIiwicmVvcGVuU2Vzc2lvbiIsInJlUnVuT25GYWlsZWQiLCJkZWJ1Z1BvcnQiLCJkZWxheSIsImNvbGxlY3REZXZpY2VMb2dzIiwiY29sbGVjdEFwcGl1bUxvZ3MiLCJjb2xsZWN0QnJvd3NlckxvZ3MiLCJyZXBvcnRpbmciLCJyZXBvcnRlcnMiLCJjbWRPcHRzIiwiZ2V0Q29tbWFuZExpbmVPcHRpb25zIiwicHJvakNvbmZpZ09wdHMiLCJlbnZzIiwiaXNDbWRPcHRzUmVwb3J0Rm9ybWF0IiwiaXNDb25maWdSZXBvcnRGb3JtYXQiLCJiYXNlTmFtZSIsIm9wdHMiLCJiIiwiYnJvd3NlciIsInMiLCJzZXJ2ZXIiLCJyZW9wZW4iLCJpIiwicGFyc2VJbnQiLCJpdGVyIiwiZGJncG9ydCIsIndzUG9ydCIsIndzcG9ydCIsImQiLCJyZiIsImxlbmd0aCIsInJlcG9ydEZvcm1hdHMiLCJybyIsIm91dHB1dERpciIsInAiLCJwYXJhbSIsInBtIiwic3BlY3MiLCJtb2R1bGVzIiwiZGVsZXRlTnVsbFByb3BlcnRpZXMiLCJvYmoiLCJjbG9uZSIsImtleXMiLCJrZXkiLCJ1bmRlZmluZWQiLCJwcm9jZXNzVGFyZ2V0UGF0aCIsInRhcmdldFBhdGgiLCJ1c2VyQ3dkIiwicmVzb2x2ZVBhdGgiLCJzdGF0cyIsImxzdGF0U3luYyIsImlzRGlyZWN0b3IiLCJpc0RpcmVjdG9yeSIsImNvbmZpZ0ZpbGVQYXRoIiwiZW5kc1dpdGgiLCJkaXJuYW1lIiwiZ2V0RmlsZU5hbWVXaXRob3V0RXh0IiwiZnVsbE5hbWUiLCJiYXNlbmFtZSJdLCJtYXBwaW5ncyI6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RUFBRUssY0FBSzRCLE9BQUwsQ0FBYXlFLFVBQWI7QUFiUixHQUFQO0FBZUgiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgb3h1dGlsIGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnYXN5bmMnO1xuaW1wb3J0IG1vZHVsZVJlcXVpcmUgZnJvbSAnLi9tb2R1bGVSZXF1aXJlJztcblxuZXhwb3J0IGNvbnN0IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FID0gJ294eWdlbi5jb25mJztcbmV4cG9ydCBjb25zdCBPWFlHRU5fRU5WX0ZJTEVfTkFNRSA9ICdveHlnZW4uZW52JztcbmV4cG9ydCBjb25zdCBPWFlHRU5fUEFHRV9PQkpFQ1RfRklMRV9OQU1FID0gJ294eWdlbi5wbyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9SRVBPUlRFUiA9ICdodG1sJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlVGVzdE9wdGlvbnMoY29uZmlnLCBhcmd2KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgLi4uY29uZmlnIH07XG4gICAgb3B0aW9ucy5lbnYgPSBsb2FkRW52aXJvbm1lbnRWYXJpYWJsZXMoY29uZmlnLCBhcmd2KTtcbiAgICBvcHRpb25zLnBvID0gZ2V0UGFnZU9iamVjdEZpbGVQYXRoKGNvbmZpZywgYXJndik7XG4gICAgb3B0aW9ucy5zdWl0ZXMgPSBhd2FpdCBsb2FkU3VpdGVzKGNvbmZpZywgYXJndik7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkU3VpdGVzKGNvbmZpZywgYXJndikge1xuICAgIGlmIChjb25maWcuZnJhbWV3b3JrICYmIHR5cGVvZiBjb25maWcuZnJhbWV3b3JrID09PSAnc3RyaW5nJyAmJiBjb25maWcuZnJhbWV3b3JrLnRvTG93ZXJDYXNlKCkgIT09ICdveHlnZW4nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGNvbmZpZztcbiAgICBjb25zdCBpc0NvbmZpZ0ZpbGUgPSB0YXJnZXQgJiYgKFxuICAgICAgICAodGFyZ2V0Lm5hbWUgJiYgdGFyZ2V0Lm5hbWUuaW5kZXhPZihPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSkgPT09IDApXG4gICAgICAgIHx8ICh0YXJnZXQuZXh0ZW5zaW9uID09PSAnJyAmJiB0YXJnZXQuY29uZmlnUGF0aCAmJiB0YXJnZXQuY29uZmlnUGF0aC5pbmRleE9mKE9YWUdFTl9DT05GSUdfRklMRV9OQU1FKSA+IC0xKVxuICAgICk7XG4gICAgbGV0IHN1aXRlcyA9IFtdO1xuICAgIC8vIGlmIGFuIGluZGl2aWR1YWwgc2NyaXB0IG9yIHN1aXRlIGZpbGUgd2FzIHBhc3NlZFxuICAgIGlmICghaXNDb25maWdGaWxlKSB7XG4gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmV4dGVuc2lvbiA9PT0gJy5qcycpIHtcbiAgICAgICAgICAgIHN1aXRlcy5wdXNoKGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUodGFyZ2V0LnBhdGgsIGNvbmZpZy5wYXJhbWV0ZXJzLmZpbGUsIGNvbmZpZy5wYXJhbWV0ZXJzLm1vZGUsIGZhbHNlLCBjb25maWcuaXRlcmF0aW9ucyB8fCAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldC5leHRlbnNpb24gPT09ICcuanNvbicpIHtcbiAgICAgICAgICAgIHN1aXRlcy5wdXNoKGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZSh0YXJnZXQucGF0aCwgY29uZmlnLnBhcmFtZXRlcnMuZmlsZSwgY29uZmlnLnBhcmFtZXRlcnMubW9kZSwgY29uZmlnKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gaWYgYSBmb2xkZXIgb3IgYSBjb25maWd1cmF0aW9uIGZpbGUgd2FzIHBhc3NlZFxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgc3VpdGVEZWZzID0gW107XG4gICAgICAgIGlmIChjb25maWcuc3VpdGVzICYmIEFycmF5LmlzQXJyYXkoY29uZmlnLnN1aXRlcykpIHtcbiAgICAgICAgICAgIHN1aXRlRGVmcyA9IGNvbmZpZy5zdWl0ZXM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgaWYgbW9yZSBzdWl0ZXMgYXJlIGRlZmluZWQgaW4gdGhlICdzdWl0ZXMnIGZvbGRlclxuICAgICAgICBjb25zdCBzdWl0ZXNGb2xkZXIgPSBwYXRoLmpvaW4odGFyZ2V0LmN3ZCwgJ3N1aXRlcycpO1xuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhzdWl0ZXNGb2xkZXIpKSB7XG4gICAgICAgICAgICBzdWl0ZURlZnMgPSBbXG4gICAgICAgICAgICAgICAgLi4uc3VpdGVEZWZzLFxuICAgICAgICAgICAgICAgIC4uLmxvYWRTdWl0ZURlZmluaXRpb25zRnJvbUZvbGRlcihzdWl0ZXNGb2xkZXIpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIG1lcmdlIHN1aXRlcyBjb25maWd1cmVkIGluIHRoZSBwcm9qZWN0IGNvbmZpZyBmaWxlIGFuZCB0aG9zZSBmb3VuZCBpbiAnc3VpdGVzJyBmb2xkZXJcbiAgICAgICAgc3VpdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoc3VpdGVEZWZzLm1hcChhc3luYyAoc3VpdGVEZWYpID0+IGF3YWl0IG94dXRpbC5nZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uKHN1aXRlRGVmLCBjb25maWcpKSk7XG4gICAgfVxuICAgIC8vIGZpbHRlciBvdXQgc3VpdGVzIGlmICctLXN1aXRlcycgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWRcbiAgICBpZiAoYXJndi5zdWl0ZXMgJiYgdHlwZW9mIGFyZ3Yuc3VpdGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFN1aXRlTmFtZXMgPSBhcmd2LnN1aXRlcy5zcGxpdCgnLCcpO1xuICAgICAgICBzdWl0ZXMgPSBzdWl0ZXMuZmlsdGVyKHggPT4gc2VsZWN0ZWRTdWl0ZU5hbWVzLmluY2x1ZGVzKHgubmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gc3VpdGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFN1aXRlRGVmaW5pdGlvbnNGcm9tRm9sZGVyKGZvbGRlclBhdGgpIHtcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGZvbGRlclBhdGgpO1xuICAgIGxldCBzdWl0ZURlZnMgPSBbXTtcbiAgICBmb3JFYWNoKGZpbGVzLCBmaWxlID0+IHtcbiAgICAgICAgaWYgKHBhdGguZXh0bmFtZShmaWxlKSA9PT0gJy5qc29uJykge1xuICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oZm9sZGVyUGF0aCwgZmlsZSk7XG4gICAgICAgICAgICBzdWl0ZURlZnMucHVzaChtb2R1bGVSZXF1aXJlKGZ1bGxQYXRoKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3VpdGVEZWZzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFnZU9iamVjdEZpbGVQYXRoKGNvbmZpZywgYXJndiA9IHt9KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gY29uZmlnLnRhcmdldCB8fCB7fTtcbiAgICBjb25zdCBwb0ZpbGVOYW1lID0gYXJndi5wbyB8fCBgJHtPWFlHRU5fUEFHRV9PQkpFQ1RfRklMRV9OQU1FfS5qc2A7XG4gICAgY29uc3QgY3dkID0gdGFyZ2V0LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIGxldCBwb0ZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGN3ZCwgcG9GaWxlTmFtZSk7XG4gICAgcG9GaWxlUGF0aCA9IGZzLmV4aXN0c1N5bmMocG9GaWxlUGF0aCkgPyBwb0ZpbGVQYXRoIDogbnVsbDtcblxuICAgIGlmIChwb0ZpbGVQYXRoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtb2R1bGVSZXF1aXJlKHBvRmlsZVBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHBvRmlsZVBhdGg7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgZmlsZTogJHtwb0ZpbGVQYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVudmlyb25tZW50VmFyaWFibGVzKGNvbmZpZywgYXJndikge1xuICAgIGNvbnN0IHRhcmdldCA9IGNvbmZpZy50YXJnZXQgfHwge307XG4gICAgY29uc3QgZW52TmFtZSA9IGFyZ3YuZW52IHx8IGNvbmZpZy5lbnZpcm9ubWVudCB8fCAnZGVmYXVsdCc7XG4gICAgY29uc3QgY3dkID0gdGFyZ2V0LmN3ZCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGRlZmF1bHRFbnZGaWxlID0gcGF0aC5qb2luKGN3ZCwgYCR7T1hZR0VOX0VOVl9GSUxFX05BTUV9LmpzYCk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudkZpbGUpKSB7XG4gICAgICAgIGNvbnN0IGVudiA9IG1vZHVsZVJlcXVpcmUoZGVmYXVsdEVudkZpbGUpO1xuICAgICAgICBpZiAoZW52ICYmIHR5cGVvZiBlbnYgPT09ICdvYmplY3QnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbnYsIGVudk5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZW52W2Vudk5hbWVdO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHRyeSB0byByZXNvbHZlIGEgZGVkaWNhdGVkIGVudmlyb25tZW50IGZpbGUgaW4gJ2Vudicgc3ViIGZvbGRlclxuICAgIGNvbnN0IGRlZGljYXRlZEVudkZpbGVKcyA9IHBhdGguam9pbihjd2QsICdlbnYnLCBgJHtlbnZOYW1lfS5qc2ApO1xuICAgIGNvbnN0IGRlZGljYXRlZEVudkZpbGVKc29uID0gcGF0aC5qb2luKGN3ZCwgJ2VudicsIGAke2Vudk5hbWV9Lmpzb25gKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWRpY2F0ZWRFbnZGaWxlSnMpKSB7XG4gICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZGljYXRlZEVudkZpbGVKcyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGZzLmV4aXN0c1N5bmMoZGVkaWNhdGVkRW52RmlsZUpzb24pKSB7XG4gICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZGljYXRlZEVudkZpbGVKc29uKTtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52aXJvbm1lbnRzKHRhcmdldCkge1xuICAgIGxldCB0YXJnZXRDd2QgPSBudWxsO1xuXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuY3dkKSB7XG4gICAgICAgIHRhcmdldEN3ZCA9IHRhcmdldC5jd2Q7XG4gICAgfVxuXG4gICAgY29uc3QgY3dkID0gdGFyZ2V0Q3dkIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgZGVmYXVsdEVudkZpbGUgPSBwYXRoLmpvaW4oY3dkLCBgJHtPWFlHRU5fRU5WX0ZJTEVfTkFNRX0uanNgKTtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhkZWZhdWx0RW52RmlsZSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGVSZXF1aXJlKGRlZmF1bHRFbnZGaWxlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke2RlZmF1bHRFbnZGaWxlfS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ3VyYXRpb25zKHRhcmdldCwgYXJndikge1xuICAgIC8vIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xuICAgIGxldCB0YXJnZXRDd2QgPSBudWxsO1xuXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuY3dkKSB7XG4gICAgICAgIHRhcmdldEN3ZCA9IHRhcmdldC5jd2Q7XG4gICAgfVxuICAgIGNvbnN0IERFRkFVTFRfT1BUUyA9IHtcbiAgICAgICAgY3dkOiB0YXJnZXQgPyAodGFyZ2V0Q3dkIHx8IHByb2Nlc3MuY3dkKCkpIDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgIGJyb3dzZXJOYW1lOiAnY2hyb21lJyxcbiAgICAgICAgc2VsZW5pdW1VcmwgOiAnaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1YicsXG4gICAgICAgIGFwcGl1bVVybCA6ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJyxcbiAgICAgICAgcmVvcGVuU2Vzc2lvbjogZmFsc2UsXG4gICAgICAgIHJlUnVuT25GYWlsZWQ6IGZhbHNlLFxuICAgICAgICBpdGVyYXRpb25zIDogMSxcbiAgICAgICAgZGVidWdQb3J0OiBudWxsLFxuICAgICAgICBkZWxheTogbnVsbCxcbiAgICAgICAgY29sbGVjdERldmljZUxvZ3M6IGZhbHNlLFxuICAgICAgICBjb2xsZWN0QXBwaXVtTG9nczogZmFsc2UsXG4gICAgICAgIGNvbGxlY3RCcm93c2VyTG9nczogZmFsc2UsXG4gICAgICAgIHJlcG9ydGluZzoge1xuICAgICAgICAgICAgcmVwb3J0ZXJzOiBbREVGQVVMVF9SRVBPUlRFUl1cbiAgICAgICAgfSxcbiAgICAgICAgcGFyYW1ldGVycyA6IHtcbiAgICAgICAgICAgIGZpbGU6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnc2VxJ1xuICAgICAgICB9LFxuICAgIH07XG4gICAgLy8gcmV0cmlldmUgb3B0aW9ucyBwcm92aWRlZCB2aWEgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xuICAgIGNvbnN0IGNtZE9wdHMgPSBnZXRDb21tYW5kTGluZU9wdGlvbnMoYXJndik7XG4gICAgLy8gaWYgdGhlIHRhcmdldCBpcyBveHlnZW4gY29uZmlnIGZpbGUsIG1lcmdlIGl0cyBjb250ZW50IHdpdGggdGhlIGRlZmF1bHQgb3B0aW9uc1xuICAgIGxldCBwcm9qQ29uZmlnT3B0cyA9IHt9O1xuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0Lm5hbWUgPT09IE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICYmICh0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzJyB8fCB0YXJnZXQuZXh0ZW5zaW9uID09PSAnLmpzb24nKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMgPSBtb2R1bGVSZXF1aXJlKHRhcmdldC5wYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke3RhcmdldC5wYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRhcmdldCAmJiB0YXJnZXQuY29uZmlnUGF0aCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMgPSBtb2R1bGVSZXF1aXJlKHRhcmdldC5jb25maWdQYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBVbmFibGUgdG8gbG9hZCBmaWxlOiAke3RhcmdldC5jb25maWdQYXRofS4gUmVhc29uOiAke2UubWVzc2FnZX0gJHtlLnN0YWNrfWApO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGVudnMgPSBnZXRFbnZpcm9ubWVudHModGFyZ2V0KTtcblxuICAgIGlmIChwcm9qQ29uZmlnT3B0cy5lbnZzKSB7XG4gICAgICAgIC8vIG1lcmdlIGV4dGVybmFsIGVudmlyb25tZW50cyBkZWZpbml0aW9uIHdpdGggdGhlIG9uZSBpbiB0aGUgY29uZmlnIGZpbGVcbiAgICAgICAgcHJvakNvbmZpZ09wdHMuZW52cyA9IHsgLi4ucHJvakNvbmZpZ09wdHMuZW52cywgLi4uZW52cyB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcHJvakNvbmZpZ09wdHMgPSB7IC4uLnByb2pDb25maWdPcHRzLCBlbnZzOiBlbnZzIH07XG4gICAgfVxuICAgIC8vIG1ha2Ugc3VyZSB0byBzZXQgZGVmYXVsdCBIVE1MIHJlcG9ydGVyIGlmIHJlcG9ydGluZyBvcHRpb25zIGFyZSBub3QgcHJvdmlkZWQgaW4gb3h5Z2VuLmNvbmYgZmlsZSBhbmQgdmlhIGNvbW1hbmQgbGluZVxuICAgIGNvbnN0IGlzQ21kT3B0c1JlcG9ydEZvcm1hdCA9IGNtZE9wdHMucmVwb3J0aW5nICYmIGNtZE9wdHMucmVwb3J0aW5nLnJlcG9ydGVycztcbiAgICBjb25zdCBpc0NvbmZpZ1JlcG9ydEZvcm1hdCA9IHByb2pDb25maWdPcHRzLnJlcG9ydGluZyAmJiBwcm9qQ29uZmlnT3B0cy5yZXBvcnRpbmcucmVwb3J0ZXJzO1xuICAgIGlmICghaXNDbWRPcHRzUmVwb3J0Rm9ybWF0ICYmICFpc0NvbmZpZ1JlcG9ydEZvcm1hdCkge1xuICAgICAgICBpZiAoIXByb2pDb25maWdPcHRzLnJlcG9ydGluZykge1xuICAgICAgICAgICAgcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nID0ge307XG4gICAgICAgIH1cbiAgICAgICAgcHJvakNvbmZpZ09wdHMucmVwb3J0aW5nLnJlcG9ydGVycyA9IFtERUZBVUxUX1JFUE9SVEVSXTtcbiAgICB9XG4gICAgLy8gZGV0ZXJtaW5lIHRlc3QgbmFtZVxuICAgIGxldCBuYW1lID0gY21kT3B0cy5uYW1lIHx8IHByb2pDb25maWdPcHRzLm5hbWUgfHwgbnVsbDtcbiAgICBpZiAoIW5hbWUgJiYgdGFyZ2V0KSB7XG4gICAgICAgIG5hbWUgPSB0YXJnZXQubmFtZSAhPT0gT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgPyB0YXJnZXQubmFtZSA6IHRhcmdldC5iYXNlTmFtZTtcbiAgICB9XG4gICAgLy8gbWVyZ2Ugb3B0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBvcmRlciAodGhlIGxhc3Qgb25lIG92ZXJyaWRlcyB0aGUgcHJldmlvdXMgb25lKTpcbiAgICAvLyBkZWZhdWx0IG9wdGlvbnMsIHByb2plY3QgY29uZmlnIGZpbGUsIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcbiAgICByZXR1cm4geyAuLi5ERUZBVUxUX09QVFMsIC4uLnByb2pDb25maWdPcHRzLCAuLi5jbWRPcHRzLCBuYW1lOiBuYW1lIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21tYW5kTGluZU9wdGlvbnMoYXJndikge1xuICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgIC8vIHN3aXRjaDogLS1uYW1lIFxuICAgICAgICBuYW1lOiBhcmd2Lm5hbWUgfHwgbnVsbCxcbiAgICAgICAgLy8gc3dpdGNoOiAtYiBvciAtLWJyb3dzZXJcbiAgICAgICAgYnJvd3Nlck5hbWUgOiBhcmd2LmIgfHwgYXJndi5icm93c2VyIHx8IG51bGwsXG4gICAgICAgIHNlbGVuaXVtVXJsIDogYXJndi5zIHx8IGFyZ3Yuc2VydmVyIHx8IG51bGwsXG4gICAgICAgIGFwcGl1bVVybCA6IGFyZ3YucyB8fCBhcmd2LnNlcnZlciB8fCBudWxsLFxuICAgICAgICByZW9wZW5TZXNzaW9uOiBhcmd2LnJlb3BlbiA/IGFyZ3YucmVvcGVuID09PSAndHJ1ZScgOiBudWxsLFxuICAgICAgICBpdGVyYXRpb25zIDogYXJndi5pID8gcGFyc2VJbnQoYXJndi5pKSA6IChhcmd2Lml0ZXIgPyBwYXJzZUludChhcmd2Lml0ZXIpIDogbnVsbCksXG4gICAgICAgIGRlYnVnUG9ydDogYXJndi5kYmdwb3J0IHx8IG51bGwsXG4gICAgICAgIHdzUG9ydDogYXJndi53c3BvcnQgfHwgbnVsbCxcbiAgICAgICAgZGVsYXk6IGFyZ3YuZCB8fCBhcmd2LmRlbGF5IHx8IG51bGwsXG4gICAgfTtcbiAgICAvLyBzd2l0Y2g6IC0tcmYgZmxhZ1xuICAgIGlmIChhcmd2LnJmICYmIHR5cGVvZiBhcmd2LnJmID09PSAnc3RyaW5nJyAmJiBhcmd2LnJmLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcmVwb3J0Rm9ybWF0cyA9IGFyZ3YucmYuc3BsaXQoJywnKTtcbiAgICAgICAgb3B0cy5yZXBvcnRpbmcgPSB7XG4gICAgICAgICAgICByZXBvcnRlcnM6IHJlcG9ydEZvcm1hdHNcbiAgICAgICAgfTtcbiAgICAgICAgLy8gc3dpdGNoOiAtLXJvIC0gc2V0IHJlcG9ydGVyIG91dHB1dCBkaXJlY3RvcnkgaWYgc2V0IGJ5IHVzZXIgdGhyb3VnaCBjb21uYW5kIGxpbmVcbiAgICAgICAgLy8gTk9URTogLS1ybyBzd2l0Y2ggbXVzdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCAtLXJmXG4gICAgICAgIGlmIChhcmd2LnJvICYmIHR5cGVvZiBhcmd2LnJvID09PSAnc3RyaW5nJyAmJiBhcmd2LnJvLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG9wdHMucmVwb3J0aW5nLm91dHB1dERpciA9IGFyZ3Yucm87XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gb3B0aW9uOiAtcCBvciAtLXBhcmFtIGFuZCAtLXBtXG4gICAgaWYgKGFyZ3YucCB8fCBhcmd2LnBhcmFtKSB7XG4gICAgICAgIG9wdHMucGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIGZpbGU6IGFyZ3YucCB8fCBhcmd2LnBhcmFtIHx8IG51bGwsXG4gICAgICAgICAgICBtb2RlOiBhcmd2LnBtIHx8ICdzZXEnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gc3dpdGNoOiAtLXNwZWNzIC0gc2V0IHNwZWNzIGlmIHNldCBieSB1c2VyIHRocm91Z2ggY29tbmFuZCBsaW5lXG4gICAgaWYgKGFyZ3Yuc3BlY3MgJiYgdHlwZW9mIGFyZ3Yuc3BlY3MgPT09ICdzdHJpbmcnICYmIGFyZ3Yuc3BlY3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBzcGVjcyA9IGFyZ3Yuc3BlY3Muc3BsaXQoJywnKTtcbiAgICAgICAgb3B0cy5zcGVjcyA9IHNwZWNzO1xuICAgIH1cbiAgICAvLyBzd2l0Y2g6IC0tbW9kdWxlcyAtIHNldCBhIGxpc3Qgb2YgbW9kdWxlcyB0byBiZSBsb2FkZWQsIGlmIHNldCBieSB1c2VyIHRocm91Z2ggY29tbmFuZCBsaW5lXG4gICAgaWYgKGFyZ3YubW9kdWxlcyAmJiB0eXBlb2YgYXJndi5tb2R1bGVzID09PSAnc3RyaW5nJyAmJiBhcmd2Lm1vZHVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBtb2R1bGVzID0gYXJndi5tb2R1bGVzLnNwbGl0KCcsJyk7XG4gICAgICAgIG9wdHMubW9kdWxlcyA9IG1vZHVsZXM7XG4gICAgfVxuICAgIC8vIHJlbW92ZSBhbnkgcHJvcGVydHkgd2l0aCBudWxsIHZhbHVlIChzbyBpdCB3b24ndCBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBpZiBpdCdzIG51bGwpXG4gICAgcmV0dXJuIGRlbGV0ZU51bGxQcm9wZXJ0aWVzKG9wdHMpO1xufVxuXG5mdW5jdGlvbiBkZWxldGVOdWxsUHJvcGVydGllcyhvYmopIHtcbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgY29uc3QgY2xvbmUgPSB7IC4uLm9iaiB9O1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIGZvckVhY2ggKGtleXMsIGtleSA9PiB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpICYmIChvYmpba2V5XSA9PSBudWxsIHx8IG9ialtrZXldID09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjbG9uZVtrZXldO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1RhcmdldFBhdGgodGFyZ2V0UGF0aCwgdXNlckN3ZCkge1xuICAgIGxldCBjd2QgPSB1c2VyQ3dkIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgLy8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaWYgdXNlciBoYXMgbm90IHByb3ZpZGVkIHBhdGhcbiAgICBpZiAodHlwZW9mKHRhcmdldFBhdGgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0YXJnZXRQYXRoID0gY3dkO1xuICAgIH1cbiAgICAvLyB1c2VyJ3MgcGF0aCBtaWdodCBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSAtIG1ha2Ugc3VyZSB0aGUgcmVsYXRpdmUgcGF0aCB3aWxsIHdvcmtcbiAgICBlbHNlIHtcbiAgICAgICAgdGFyZ2V0UGF0aCA9IG94dXRpbC5yZXNvbHZlUGF0aCh0YXJnZXRQYXRoLCBjd2QpO1xuICAgIH1cblxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXRQYXRoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0cyA9IGZzLmxzdGF0U3luYyh0YXJnZXRQYXRoKTtcbiAgICBjb25zdCBpc0RpcmVjdG9yID0gc3RhdHMuaXNEaXJlY3RvcnkoKTtcbiAgICBsZXQgY29uZmlnRmlsZVBhdGg7XG4gICAgaWYgKGlzRGlyZWN0b3IpIHtcbiAgICAgICAgLy8gaWYgXCJ0YXJnZXRcIiBwcm92aWRlZCBieSB0aGUgdXNlciBpcyBhIGRpcmVjdG9yeSxcbiAgICAgICAgLy8gdGhlbiB1bmxlc3MgXCJjd2RcIiBpcyBwcm92aWRlZCBleHBsaWNpdGx5IGJ5IHRoZSB1c2VyXG4gICAgICAgIC8vIHVzZSB0YXJnZXQgZGlyZWN0b3J5IGFzIGN3ZFxuICAgICAgICBjd2QgPSB1c2VyQ3dkIHx8IHRhcmdldFBhdGg7XG4gICAgICAgIC8vIGFwcGVuZCBveHlnZW4gY29uZmlnIGZpbGUgbmFtZSB0byB0aGUgZGlyZWN0b3J5LCBpZiBubyB0ZXN0IGNhc2UgZmlsZSB3YXMgcHJvdmlkZWRcbiAgICAgICAgY29uZmlnRmlsZVBhdGggPSBwYXRoLmpvaW4odGFyZ2V0UGF0aCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzJyk7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKHRhcmdldFBhdGgsIE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJyk7XG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGFyZ2V0UGF0aC5lbmRzV2l0aChPWFlHRU5fQ09ORklHX0ZJTEVfTkFNRSArICcuanMnKSB8fCB0YXJnZXRQYXRoLmVuZHNXaXRoKE9YWUdFTl9DT05GSUdfRklMRV9OQU1FICsgJy5qc29uJykpIHtcbiAgICAgICAgY29uZmlnRmlsZVBhdGggPSB0YXJnZXRQYXRoO1xuICAgICAgICBjd2QgPSB0YXJnZXRQYXRoID0gcGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY3dkID0gdXNlckN3ZCB8fCBwYXRoLmRpcm5hbWUodGFyZ2V0UGF0aCk7XG4gICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKGN3ZCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzJyk7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0ZpbGVQYXRoID0gcGF0aC5qb2luKGN3ZCwgT1hZR0VOX0NPTkZJR19GSUxFX05BTUUgKyAnLmpzb24nKTtcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhjb25maWdGaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICBjb25maWdGaWxlUGF0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRhcmdldFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIC8vIHBhdGggdG8gdGhlIGNvbmZpZyBvciAuanMgZmlsZVxuICAgICAgICBwYXRoOiB0YXJnZXRQYXRoLFxuICAgICAgICBjb25maWdQYXRoOiBjb25maWdGaWxlUGF0aCxcbiAgICAgICAgLy8gd29ya2luZyBkaXJlY3RvcnlcbiAgICAgICAgY3dkOiBjd2QgfHwgcGF0aC5kaXJuYW1lKHRhcmdldFBhdGgpLFxuICAgICAgICAvLyBuYW1lIG9mIHRoZSB0YXJnZXQgZmlsZSB3aXRob3V0IGV4dGVuc2lvblxuICAgICAgICBuYW1lOiBveHV0aWwuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KHRhcmdldFBhdGgpLFxuICAgICAgICAvLyBuYW1lIGluY2x1ZGluZyBleHRlbnNpb25cbiAgICAgICAgZnVsbE5hbWU6IHBhdGguYmFzZW5hbWUodGFyZ2V0UGF0aCksXG4gICAgICAgIC8vIHBhcmVudCBmb2xkZXIncyBuYW1lXG4gICAgICAgIGJhc2VOYW1lOiBwYXRoLmJhc2VuYW1lKHBhdGguZGlybmFtZSh0YXJnZXRQYXRoKSksXG4gICAgICAgIC8vIHRhcmdldCBmaWxlIGV4dGVuc2lvblxuICAgICAgICBleHRlbnNpb246IHBhdGguZXh0bmFtZSh0YXJnZXRQYXRoKVxuICAgIH07XG59Il19