oxygen-cli 1.41.0 → 1.43.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 (285) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/build/core/OxygenCore.js +93 -283
  3. package/build/core/OxygenEvents.js +2 -12
  4. package/build/core/OxygenModule.js +1 -16
  5. package/build/core/OxygenService.js +1 -12
  6. package/build/core/OxygenSubModule.js +1 -10
  7. package/build/core/WebDriverModule.js +2 -32
  8. package/build/core/utils.js +22 -21
  9. package/build/errors/HookError.js +2 -8
  10. package/build/errors/ModuleError.js +2 -8
  11. package/build/errors/ModuleUnavailableError.js +1 -3
  12. package/build/errors/OxygenError.js +3 -36
  13. package/build/errors/ScriptNotFound.js +2 -8
  14. package/build/errors/helper.js +50 -82
  15. package/build/index.js +8 -22
  16. package/build/lib/cli-util.js +36 -105
  17. package/build/lib/cli.js +3 -30
  18. package/build/lib/debugger.js +2 -145
  19. package/build/lib/img-merge.js +2 -16
  20. package/build/lib/launcher.js +3 -31
  21. package/build/lib/moduleRequire.js +1 -4
  22. package/build/lib/parallel-launcher.js +44 -84
  23. package/build/lib/param-manager.js +2 -29
  24. package/build/lib/param-reader-csv.js +1 -15
  25. package/build/lib/param-reader-excel.js +1 -14
  26. package/build/lib/param-reader-json.js +1 -10
  27. package/build/lib/text-to-image.js +5 -26
  28. package/build/lib/util.js +13 -84
  29. package/build/model/case-result.js +1 -2
  30. package/build/model/failure.js +1 -2
  31. package/build/model/status.js +1 -2
  32. package/build/model/step-result.js +1 -2
  33. package/build/model/suite-result.js +1 -2
  34. package/build/model/test-result.js +1 -2
  35. package/build/model/testcase.js +1 -2
  36. package/build/model/testsuite.js +1 -2
  37. package/build/ox_modules/index.js +20 -41
  38. package/build/ox_modules/module-assert.js +9 -28
  39. package/build/ox_modules/module-date.js +3 -8
  40. package/build/ox_modules/module-db.js +8 -29
  41. package/build/ox_modules/module-email.js +14 -45
  42. package/build/ox_modules/module-eyes.js +6 -47
  43. package/build/ox_modules/module-http/ntlm-util.js +3 -7
  44. package/build/ox_modules/module-http/ntlm.js +9 -78
  45. package/build/ox_modules/module-http.js +69 -172
  46. package/build/ox_modules/module-log.js +10 -23
  47. package/build/ox_modules/module-mailinator.js +11 -33
  48. package/build/ox_modules/module-mob/commands/alertAccept.js +1 -3
  49. package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -3
  50. package/build/ox_modules/module-mob/commands/assertAlert.js +1 -7
  51. package/build/ox_modules/module-mob/commands/assertText.js +1 -4
  52. package/build/ox_modules/module-mob/commands/assertTitle.js +1 -5
  53. package/build/ox_modules/module-mob/commands/assertValue.js +9 -17
  54. package/build/ox_modules/module-mob/commands/back.js +1 -3
  55. package/build/ox_modules/module-mob/commands/clear.js +1 -5
  56. package/build/ox_modules/module-mob/commands/click.js +3 -5
  57. package/build/ox_modules/module-mob/commands/clickHidden.js +3 -10
  58. package/build/ox_modules/module-mob/commands/clickLong.js +1 -3
  59. package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -5
  60. package/build/ox_modules/module-mob/commands/closeApp.js +1 -3
  61. package/build/ox_modules/module-mob/commands/debug.js +2 -3
  62. package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -3
  63. package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -13
  64. package/build/ox_modules/module-mob/commands/execute.js +1 -3
  65. package/build/ox_modules/module-mob/commands/findElement.js +1 -4
  66. package/build/ox_modules/module-mob/commands/findElements.js +1 -5
  67. package/build/ox_modules/module-mob/commands/getAlertText.js +1 -3
  68. package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -3
  69. package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -11
  70. package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -3
  71. package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -3
  72. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -10
  73. package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -3
  74. package/build/ox_modules/module-mob/commands/getLocation.js +1 -3
  75. package/build/ox_modules/module-mob/commands/getSource.js +1 -3
  76. package/build/ox_modules/module-mob/commands/getText.js +1 -5
  77. package/build/ox_modules/module-mob/commands/getTitle.js +1 -3
  78. package/build/ox_modules/module-mob/commands/getUrl.js +1 -3
  79. package/build/ox_modules/module-mob/commands/getValue.js +5 -10
  80. package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -3
  81. package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -3
  82. package/build/ox_modules/module-mob/commands/index.js +1 -148
  83. package/build/ox_modules/module-mob/commands/installApp.js +1 -3
  84. package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -3
  85. package/build/ox_modules/module-mob/commands/isCheckable.js +1 -3
  86. package/build/ox_modules/module-mob/commands/isChecked.js +1 -3
  87. package/build/ox_modules/module-mob/commands/isClickable.js +1 -3
  88. package/build/ox_modules/module-mob/commands/isExist.js +1 -4
  89. package/build/ox_modules/module-mob/commands/isSelected.js +1 -3
  90. package/build/ox_modules/module-mob/commands/isVisible.js +1 -4
  91. package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -3
  92. package/build/ox_modules/module-mob/commands/launchApp.js +1 -3
  93. package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -3
  94. package/build/ox_modules/module-mob/commands/open.js +1 -4
  95. package/build/ox_modules/module-mob/commands/pause.js +1 -3
  96. package/build/ox_modules/module-mob/commands/removeApp.js +1 -3
  97. package/build/ox_modules/module-mob/commands/resetApp.js +1 -3
  98. package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -7
  99. package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -3
  100. package/build/ox_modules/module-mob/commands/select.js +1 -5
  101. package/build/ox_modules/module-mob/commands/selectFrame.js +1 -5
  102. package/build/ox_modules/module-mob/commands/selectWindow.js +5 -27
  103. package/build/ox_modules/module-mob/commands/sendKeys.js +6 -10
  104. package/build/ox_modules/module-mob/commands/setContext.js +1 -3
  105. package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -3
  106. package/build/ox_modules/module-mob/commands/setTimeout.js +1 -3
  107. package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -7
  108. package/build/ox_modules/module-mob/commands/shake.js +1 -3
  109. package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -3
  110. package/build/ox_modules/module-mob/commands/smsGetText.js +3 -7
  111. package/build/ox_modules/module-mob/commands/swipe.js +1 -3
  112. package/build/ox_modules/module-mob/commands/swipeElement.js +1 -3
  113. package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -3
  114. package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -3
  115. package/build/ox_modules/module-mob/commands/tap.js +1 -3
  116. package/build/ox_modules/module-mob/commands/type.js +3 -8
  117. package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -11
  118. package/build/ox_modules/module-mob/commands/waitForExist.js +1 -3
  119. package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -4
  120. package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -3
  121. package/build/ox_modules/module-mob.js +107 -217
  122. package/build/ox_modules/module-mongo.js +14 -51
  123. package/build/ox_modules/module-pdf.js +24 -65
  124. package/build/ox_modules/module-proxy.js +9 -69
  125. package/build/ox_modules/module-serial.js +8 -33
  126. package/build/ox_modules/module-shell.js +10 -30
  127. package/build/ox_modules/module-soap.js +17 -52
  128. package/build/ox_modules/module-twilio.js +11 -54
  129. package/build/ox_modules/module-utils.js +22 -58
  130. package/build/ox_modules/module-web/commands/alertAccept.js +1 -3
  131. package/build/ox_modules/module-web/commands/alertDismiss.js +1 -3
  132. package/build/ox_modules/module-web/commands/assertAlert.js +1 -7
  133. package/build/ox_modules/module-web/commands/assertExist.js +1 -3
  134. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -5
  135. package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -4
  136. package/build/ox_modules/module-web/commands/assertText.js +1 -4
  137. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -7
  138. package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -7
  139. package/build/ox_modules/module-web/commands/assertTitle.js +1 -4
  140. package/build/ox_modules/module-web/commands/assertValue.js +1 -4
  141. package/build/ox_modules/module-web/commands/back.js +1 -3
  142. package/build/ox_modules/module-web/commands/clear.js +1 -6
  143. package/build/ox_modules/module-web/commands/click.js +4 -15
  144. package/build/ox_modules/module-web/commands/clickHidden.js +2 -8
  145. package/build/ox_modules/module-web/commands/closeWindow.js +1 -3
  146. package/build/ox_modules/module-web/commands/debug.js +2 -3
  147. package/build/ox_modules/module-web/commands/deleteCookies.js +1 -3
  148. package/build/ox_modules/module-web/commands/deselect.js +1 -3
  149. package/build/ox_modules/module-web/commands/doubleClick.js +3 -10
  150. package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -3
  151. package/build/ox_modules/module-web/commands/execute.js +1 -3
  152. package/build/ox_modules/module-web/commands/fileBrowse.js +4 -11
  153. package/build/ox_modules/module-web/commands/findElement.js +1 -4
  154. package/build/ox_modules/module-web/commands/findElements.js +1 -5
  155. package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -3
  156. package/build/ox_modules/module-web/commands/getAlertText.js +1 -3
  157. package/build/ox_modules/module-web/commands/getAttribute.js +1 -5
  158. package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -4
  159. package/build/ox_modules/module-web/commands/getCookies.js +1 -3
  160. package/build/ox_modules/module-web/commands/getCssValue.js +1 -5
  161. package/build/ox_modules/module-web/commands/getElementCount.js +1 -3
  162. package/build/ox_modules/module-web/commands/getHTML.js +1 -3
  163. package/build/ox_modules/module-web/commands/getSource.js +1 -3
  164. package/build/ox_modules/module-web/commands/getText.js +1 -5
  165. package/build/ox_modules/module-web/commands/getTitle.js +1 -3
  166. package/build/ox_modules/module-web/commands/getUrl.js +1 -3
  167. package/build/ox_modules/module-web/commands/getValue.js +1 -6
  168. package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -3
  169. package/build/ox_modules/module-web/commands/getWindowSize.js +1 -3
  170. package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -6
  171. package/build/ox_modules/module-web/commands/index.js +1 -184
  172. package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -3
  173. package/build/ox_modules/module-web/commands/isChecked.js +1 -3
  174. package/build/ox_modules/module-web/commands/isExist.js +1 -4
  175. package/build/ox_modules/module-web/commands/isInteractable.js +1 -3
  176. package/build/ox_modules/module-web/commands/isSelected.js +1 -3
  177. package/build/ox_modules/module-web/commands/isVisible.js +1 -4
  178. package/build/ox_modules/module-web/commands/makeVisible.js +2 -11
  179. package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -3
  180. package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -3
  181. package/build/ox_modules/module-web/commands/mock.js +1 -3
  182. package/build/ox_modules/module-web/commands/mockClearAll.js +1 -3
  183. package/build/ox_modules/module-web/commands/mockRestoreAll.js +1 -3
  184. package/build/ox_modules/module-web/commands/newWindow.js +1 -3
  185. package/build/ox_modules/module-web/commands/open.js +1 -5
  186. package/build/ox_modules/module-web/commands/pause.js +1 -3
  187. package/build/ox_modules/module-web/commands/point.js +1 -3
  188. package/build/ox_modules/module-web/commands/pointJS.js +2 -9
  189. package/build/ox_modules/module-web/commands/refresh.js +1 -3
  190. package/build/ox_modules/module-web/commands/rightClick.js +3 -9
  191. package/build/ox_modules/module-web/commands/rightClickActions.js +1 -3
  192. package/build/ox_modules/module-web/commands/scrollToElement.js +1 -3
  193. package/build/ox_modules/module-web/commands/select.js +1 -6
  194. package/build/ox_modules/module-web/commands/selectFrame.js +1 -4
  195. package/build/ox_modules/module-web/commands/selectWindow.js +5 -27
  196. package/build/ox_modules/module-web/commands/sendKeys.js +3 -7
  197. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -3
  198. package/build/ox_modules/module-web/commands/setTimeout.js +1 -3
  199. package/build/ox_modules/module-web/commands/setWindowSize.js +1 -3
  200. package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -6
  201. package/build/ox_modules/module-web/commands/type.js +1 -6
  202. package/build/ox_modules/module-web/commands/verifyAlert.js +1 -7
  203. package/build/ox_modules/module-web/commands/verifyExist.js +2 -7
  204. package/build/ox_modules/module-web/commands/verifySelectedLabel.js +1 -5
  205. package/build/ox_modules/module-web/commands/verifySelectedValue.js +1 -4
  206. package/build/ox_modules/module-web/commands/verifyText.js +1 -4
  207. package/build/ox_modules/module-web/commands/verifyTextNotPresent.js +1 -7
  208. package/build/ox_modules/module-web/commands/verifyTextPresent.js +1 -7
  209. package/build/ox_modules/module-web/commands/verifyTitle.js +1 -4
  210. package/build/ox_modules/module-web/commands/verifyValue.js +1 -4
  211. package/build/ox_modules/module-web/commands/waitForAngular.js +11 -14
  212. package/build/ox_modules/module-web/commands/waitForExist.js +1 -3
  213. package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -3
  214. package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -9
  215. package/build/ox_modules/module-web/commands/waitForNotText.js +1 -4
  216. package/build/ox_modules/module-web/commands/waitForNotValue.js +1 -4
  217. package/build/ox_modules/module-web/commands/waitForText.js +1 -4
  218. package/build/ox_modules/module-web/commands/waitForValue.js +1 -4
  219. package/build/ox_modules/module-web/commands/waitForVisible.js +1 -3
  220. package/build/ox_modules/module-web/commands/waitForWindow.js +4 -22
  221. package/build/ox_modules/module-web/webdriver/ChromeWDM.js +287 -0
  222. package/build/ox_modules/module-web/webdriver/auto-start.js +25 -0
  223. package/build/ox_modules/module-web.js +169 -233
  224. package/build/ox_modules/module-win/commands/assertText.js +1 -4
  225. package/build/ox_modules/module-win/commands/assertTitle.js +1 -5
  226. package/build/ox_modules/module-win/commands/assertValue.js +9 -17
  227. package/build/ox_modules/module-win/commands/back.js +1 -3
  228. package/build/ox_modules/module-win/commands/clear.js +1 -5
  229. package/build/ox_modules/module-win/commands/click.js +1 -3
  230. package/build/ox_modules/module-win/commands/clickLong.js +1 -3
  231. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -5
  232. package/build/ox_modules/module-win/commands/findElement.js +1 -4
  233. package/build/ox_modules/module-win/commands/findElements.js +1 -5
  234. package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -3
  235. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -3
  236. package/build/ox_modules/module-win/commands/getLocation.js +1 -3
  237. package/build/ox_modules/module-win/commands/getSource.js +1 -3
  238. package/build/ox_modules/module-win/commands/getText.js +1 -5
  239. package/build/ox_modules/module-win/commands/getValue.js +5 -10
  240. package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -3
  241. package/build/ox_modules/module-win/commands/index.js +1 -74
  242. package/build/ox_modules/module-win/commands/isCheckable.js +1 -3
  243. package/build/ox_modules/module-win/commands/isChecked.js +1 -3
  244. package/build/ox_modules/module-win/commands/isClickable.js +1 -3
  245. package/build/ox_modules/module-win/commands/isExist.js +1 -4
  246. package/build/ox_modules/module-win/commands/isSelected.js +1 -3
  247. package/build/ox_modules/module-win/commands/isVisible.js +1 -4
  248. package/build/ox_modules/module-win/commands/open.js +1 -3
  249. package/build/ox_modules/module-win/commands/pause.js +1 -3
  250. package/build/ox_modules/module-win/commands/rightClick.js +1 -3
  251. package/build/ox_modules/module-win/commands/selectWindow.js +1 -16
  252. package/build/ox_modules/module-win/commands/sendKeys.js +1 -5
  253. package/build/ox_modules/module-win/commands/setTimeout.js +1 -3
  254. package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -3
  255. package/build/ox_modules/module-win/commands/tap.js +1 -3
  256. package/build/ox_modules/module-win/commands/type.js +1 -5
  257. package/build/ox_modules/module-win/commands/waitForExist.js +1 -3
  258. package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -5
  259. package/build/ox_modules/module-win/commands/waitForVisible.js +1 -3
  260. package/build/ox_modules/module-win.js +54 -95
  261. package/build/ox_modules/utils.js +97 -79
  262. package/build/ox_reporters/reporter-excel.js +2 -59
  263. package/build/ox_reporters/reporter-html.js +2 -29
  264. package/build/ox_reporters/reporter-json.js +2 -15
  265. package/build/ox_reporters/reporter-junit.js +2 -25
  266. package/build/ox_reporters/reporter-pdf.js +2 -20
  267. package/build/ox_reporters/reporter-rp.js +4 -92
  268. package/build/ox_reporters/reporter-xml.js +2 -18
  269. package/build/ox_services/service-devtools/submodule-network.js +4 -86
  270. package/build/ox_services/service-devtools.js +2 -24
  271. package/build/reporter/FileReporterBase.js +6 -45
  272. package/build/reporter/ReportAggregator.js +7 -121
  273. package/build/reporter/ReporterBase.js +1 -6
  274. package/build/reporter/WebSocketReporter.js +1 -39
  275. package/build/runners/WorkerProcess.js +2 -107
  276. package/build/runners/cucumber/CucumberEventListener.js +4 -29
  277. package/build/runners/cucumber/CucumberReporter.js +2 -57
  278. package/build/runners/cucumber/CucumberWorker.js +3 -69
  279. package/build/runners/cucumber/index.js +2 -31
  280. package/build/runners/cucumber/worker.js +2 -19
  281. package/build/runners/index.js +4 -11
  282. package/build/runners/oxygen/OxygenWorker.js +3 -61
  283. package/build/runners/oxygen/index.js +18 -179
  284. package/build/runners/oxygen/worker.js +3 -27
  285. package/package.json +4 -1
@@ -4,27 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  require("source-map-support/register");
9
-
10
8
  var Runners = _interopRequireWildcard(require("../runners"));
11
-
12
9
  var _parallelLimit = _interopRequireDefault(require("async/parallelLimit"));
13
-
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
-
18
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
-
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
20
12
  const Duration = require('duration');
21
-
22
13
  const hash = require('object-hash');
23
-
24
14
  const {
25
15
  v1
26
16
  } = require('uuid');
27
-
28
17
  class ParallelLauncher {
29
18
  constructor(config, reporter) {
30
19
  this._config = config;
@@ -33,27 +22,21 @@ class ParallelLauncher {
33
22
  this.runners = [];
34
23
  this.createdRunnersStat = [];
35
24
  }
36
-
37
25
  async run(capsSet) {
38
26
  const collection = [];
39
-
40
27
  if (!this._config.parallel) {
41
28
  throw new Error('Cannot start the parallel testing - "parallel" settings are missing.');
42
29
  }
43
-
44
30
  if (!this._config.parallel.mode) {
45
31
  this._config.parallel.mode = 'case';
46
32
  }
47
-
48
33
  const workersCount = !isNaN(this._config.parallel.workers) ? this._config.parallel.workers : 1;
49
34
  const mode = this._config.parallel.mode === 'iteration' ? 'iteration' : this._config.parallel.mode === 'suite' ? 'suite' : 'case';
50
35
  const suites = this._config.suites;
51
36
  const resultName = this._config.name || '';
52
-
53
37
  if (!suites || !Array.isArray(suites)) {
54
38
  throw new Error('Cannot start the parallel testing - no suites are defined.');
55
39
  }
56
-
57
40
  const testCaps = capsSet ? Array.isArray(capsSet) ? capsSet[0] : capsSet : null;
58
41
  const resultHash = testCaps ? hash(testCaps) : '';
59
42
  const resultKey = `${resultName}-${resultHash}`;
@@ -61,23 +44,22 @@ class ParallelLauncher {
61
44
  suites.forEach(suiteDef => {
62
45
  const suiteKey = suiteDef.key || suiteDef.id || suiteDef.name;
63
46
  const suiteRefId = suiteDef.key || suiteDef.id || v1();
64
-
65
47
  if (mode === 'iteration') {
66
48
  for (let i = 1; i <= suiteDef.iterationCount; i++) {
67
49
  let mockedParamManager = undefined;
68
-
69
50
  if (suiteDef.paramManager) {
70
51
  mockedParamManager = new ParamManagerMock(suiteDef.paramManager.getValues());
71
52
  suiteDef.paramManager.readNext();
72
53
  }
73
-
74
54
  const workerId = `${suiteKey}-${suiteIndex}/${i}`;
75
- const suiteCopy = { ...suiteDef,
55
+ const suiteCopy = {
56
+ ...suiteDef,
76
57
  refId: suiteRefId,
77
58
  iterationCount: 1,
78
59
  paramManager: mockedParamManager
79
60
  };
80
- const testConfig = { ...this._config,
61
+ const testConfig = {
62
+ ...this._config,
81
63
  suites: [suiteCopy],
82
64
  _groupResult: {
83
65
  resultKey
@@ -92,39 +74,21 @@ class ParallelLauncher {
92
74
  collection.push(callback => this._launchWorkerFunc(workerConfig, callback));
93
75
  }
94
76
  } else if (mode === 'case' && Array.isArray(suiteDef.cases)) {
95
- let caseIndex = 0;
96
- suiteDef.cases.forEach(caseDef => {
97
- const caseKey = caseDef.key || caseDef.id || caseDef.name;
98
- const workerId = `${caseKey}-${suiteIndex}/${caseIndex}`;
99
- const suiteCopy = { ...suiteDef,
100
- refId: suiteRefId,
101
- cases: [caseDef]
102
- };
103
- const testConfig = { ...this._config,
104
- suites: [suiteCopy],
105
- _groupResult: {
106
- resultKey,
107
- suiteKey
108
- }
109
- };
110
- const workerConfig = {
111
- workerId,
112
- testConfig,
113
- testCaps,
114
- startupDelay: 0
115
- };
116
- collection.push(callback => this._launchWorkerFunc(workerConfig, callback));
117
- caseIndex++;
118
- });
119
- } else {
120
- const suiteKey = suiteDef.key || suiteDef.id || suiteDef.name;
121
- const workerId = `${suiteKey}-${suiteIndex}`;
122
- const testConfig = { ...this._config,
123
- suites: [{ ...suiteDef,
124
- refId: suiteRefId
125
- }],
77
+ let caseIndex = 0;
78
+ suiteDef.cases.forEach(caseDef => {
79
+ const caseKey = caseDef.key || caseDef.id || caseDef.name;
80
+ const workerId = `${caseKey}-${suiteIndex}/${caseIndex}`;
81
+ const suiteCopy = {
82
+ ...suiteDef,
83
+ refId: suiteRefId,
84
+ cases: [caseDef]
85
+ };
86
+ const testConfig = {
87
+ ...this._config,
88
+ suites: [suiteCopy],
126
89
  _groupResult: {
127
- resultKey
90
+ resultKey,
91
+ suiteKey
128
92
  }
129
93
  };
130
94
  const workerConfig = {
@@ -134,8 +98,29 @@ class ParallelLauncher {
134
98
  startupDelay: 0
135
99
  };
136
100
  collection.push(callback => this._launchWorkerFunc(workerConfig, callback));
137
- }
138
-
101
+ caseIndex++;
102
+ });
103
+ } else {
104
+ const suiteKey = suiteDef.key || suiteDef.id || suiteDef.name;
105
+ const workerId = `${suiteKey}-${suiteIndex}`;
106
+ const testConfig = {
107
+ ...this._config,
108
+ suites: [{
109
+ ...suiteDef,
110
+ refId: suiteRefId
111
+ }],
112
+ _groupResult: {
113
+ resultKey
114
+ }
115
+ };
116
+ const workerConfig = {
117
+ workerId,
118
+ testConfig,
119
+ testCaps,
120
+ startupDelay: 0
121
+ };
122
+ collection.push(callback => this._launchWorkerFunc(workerConfig, callback));
123
+ }
139
124
  suiteIndex++;
140
125
  });
141
126
  const start = new Date();
@@ -155,33 +140,27 @@ class ParallelLauncher {
155
140
  const duration = new Duration(start, end);
156
141
  console.log('Duration: ', duration.toString(1));
157
142
  }
158
-
159
143
  _launchWorkerFunc(workerConfig, callback) {
160
144
  const cb = error => {
161
145
  if (error) {
162
146
  callback(error, null);
163
147
  }
164
148
  };
165
-
166
149
  this._launchTest(workerConfig, cb).then(result => {
167
150
  callback(null, result);
168
151
  }).catch(error => {
169
152
  callback(error, null);
170
153
  });
171
154
  }
172
-
173
155
  _instantiateRunner() {
174
156
  if (this._config.framework && typeof this._config.framework === 'string') {
175
157
  if (Object.prototype.hasOwnProperty.call(Runners, this._config.framework)) {
176
158
  return new Runners[this._config.framework]();
177
159
  }
178
-
179
160
  return null;
180
161
  }
181
-
182
162
  return new Runners.oxygen();
183
163
  }
184
-
185
164
  async _launchTest({
186
165
  workerId,
187
166
  testConfig,
@@ -191,19 +170,14 @@ class ParallelLauncher {
191
170
  if (!callback) {
192
171
  return;
193
172
  }
194
-
195
173
  await this._sleep(startupDelay);
196
-
197
174
  let runner = this._instantiateRunner();
198
-
199
175
  this.createdRunnersStat[runner._id] = [workerId];
200
-
201
176
  if (!runner) {
202
177
  const framework = this._config.framework;
203
178
  callback(new Error(`Cannot find runner for the specified framework: ${framework}.`));
204
179
  return;
205
180
  }
206
-
207
181
  try {
208
182
  await runner.init(testConfig, testCaps, this.reporter);
209
183
  const result = await runner.run();
@@ -211,11 +185,9 @@ class ParallelLauncher {
211
185
  callback();
212
186
  } catch (e) {
213
187
  console.error('Failed to launch the test:', e);
214
-
215
188
  if (this._queue) {
216
189
  this._queue.kill();
217
190
  }
218
-
219
191
  if (e.error) {
220
192
  var errMsg = '';
221
193
  var err = e.error;
@@ -226,38 +198,26 @@ class ParallelLauncher {
226
198
  callback(e);
227
199
  }
228
200
  }
229
-
230
201
  this.runners.push(runner);
231
202
  }
232
-
233
203
  _sleep(duration) {
234
204
  return new Promise(resolve => setTimeout(resolve, duration));
235
205
  }
236
-
237
206
  }
238
-
239
207
  exports.default = ParallelLauncher;
240
-
241
208
  class ParamManagerMock {
242
209
  constructor(values) {
243
210
  this.values = values;
244
211
  }
245
-
246
212
  init() {}
247
-
248
213
  getMode() {}
249
-
250
214
  readNext() {}
251
-
252
215
  readPrev() {}
253
-
254
216
  getValues() {
255
217
  return this.values;
256
218
  }
257
-
258
219
  get rows() {
259
220
  return 1;
260
221
  }
261
-
262
222
  }
263
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGFyYWxsZWwtbGF1bmNoZXIuanMiXSwibmFtZXMiOlsiRHVyYXRpb24iLCJyZXF1aXJlIiwiaGFzaCIsInYxIiwiUGFyYWxsZWxMYXVuY2hlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwicmVwb3J0ZXIiLCJfY29uZmlnIiwiX3F1ZXVlIiwicnVubmVycyIsImNyZWF0ZWRSdW5uZXJzU3RhdCIsInJ1biIsImNhcHNTZXQiLCJjb2xsZWN0aW9uIiwicGFyYWxsZWwiLCJFcnJvciIsIm1vZGUiLCJ3b3JrZXJzQ291bnQiLCJpc05hTiIsIndvcmtlcnMiLCJzdWl0ZXMiLCJyZXN1bHROYW1lIiwibmFtZSIsIkFycmF5IiwiaXNBcnJheSIsInRlc3RDYXBzIiwicmVzdWx0SGFzaCIsInJlc3VsdEtleSIsInN1aXRlSW5kZXgiLCJmb3JFYWNoIiwic3VpdGVEZWYiLCJzdWl0ZUtleSIsImtleSIsImlkIiwic3VpdGVSZWZJZCIsImkiLCJpdGVyYXRpb25Db3VudCIsIm1vY2tlZFBhcmFtTWFuYWdlciIsInVuZGVmaW5lZCIsInBhcmFtTWFuYWdlciIsIlBhcmFtTWFuYWdlck1vY2siLCJnZXRWYWx1ZXMiLCJyZWFkTmV4dCIsIndvcmtlcklkIiwic3VpdGVDb3B5IiwicmVmSWQiLCJ0ZXN0Q29uZmlnIiwiX2dyb3VwUmVzdWx0Iiwid29ya2VyQ29uZmlnIiwic3RhcnR1cERlbGF5IiwicHVzaCIsImNhbGxiYWNrIiwiX2xhdW5jaFdvcmtlckZ1bmMiLCJjYXNlcyIsImNhc2VJbmRleCIsImNhc2VEZWYiLCJjYXNlS2V5Iiwic3RhcnQiLCJEYXRlIiwidG90YWwiLCJjb25zb2xlIiwibG9nIiwicnVubmVyc0lkcyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJtYXAiLCJpdGVtIiwiY2F6ZXMiLCJlbmQiLCJkdXJhdGlvbiIsInRvU3RyaW5nIiwiY2IiLCJlcnJvciIsIl9sYXVuY2hUZXN0IiwidGhlbiIsInJlc3VsdCIsImNhdGNoIiwiX2luc3RhbnRpYXRlUnVubmVyIiwiZnJhbWV3b3JrIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiUnVubmVycyIsIm94eWdlbiIsIl9zbGVlcCIsInJ1bm5lciIsIl9pZCIsImluaXQiLCJkaXNwb3NlIiwic3RhdHVzIiwiZSIsImtpbGwiLCJlcnJNc2ciLCJlcnIiLCJ0eXBlIiwibWVzc2FnZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsInZhbHVlcyIsImdldE1vZGUiLCJyZWFkUHJldiIsInJvd3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVVBOztBQUNBOzs7Ozs7OztBQUNBLE1BQU1BLFFBQVEsR0FBR0MsT0FBTyxDQUFDLFVBQUQsQ0FBeEI7O0FBQ0EsTUFBTUMsSUFBSSxHQUFHRCxPQUFPLENBQUMsYUFBRCxDQUFwQjs7QUFDQSxNQUFNO0FBQUVFLEVBQUFBO0FBQUYsSUFBU0YsT0FBTyxDQUFDLE1BQUQsQ0FBdEI7O0FBRWUsTUFBTUcsZ0JBQU4sQ0FBdUI7QUFDbENDLEVBQUFBLFdBQVcsQ0FBQ0MsTUFBRCxFQUFTQyxRQUFULEVBQW1CO0FBQzFCLFNBQUtDLE9BQUwsR0FBZUYsTUFBZjtBQUNBLFNBQUtDLFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0EsU0FBS0UsTUFBTCxHQUFjLElBQWQ7QUFDQSxTQUFLQyxPQUFMLEdBQWUsRUFBZjtBQUNBLFNBQUtDLGtCQUFMLEdBQTBCLEVBQTFCO0FBQ0g7O0FBRVEsUUFBSEMsR0FBRyxDQUFDQyxPQUFELEVBQVU7QUFDZixVQUFNQyxVQUFVLEdBQUcsRUFBbkI7O0FBRUEsUUFBSSxDQUFDLEtBQUtOLE9BQUwsQ0FBYU8sUUFBbEIsRUFBNEI7QUFDeEIsWUFBTSxJQUFJQyxLQUFKLENBQVUsc0VBQVYsQ0FBTjtBQUNIOztBQUVELFFBQUksQ0FBQyxLQUFLUixPQUFMLENBQWFPLFFBQWIsQ0FBc0JFLElBQTNCLEVBQWlDO0FBQzdCLFdBQUtULE9BQUwsQ0FBYU8sUUFBYixDQUFzQkUsSUFBdEIsR0FBNkIs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SDs7QUFFRFosRUFBQUEsSUFBSSxHQUFHLENBRU47O0FBRURhLEVBQUFBLE9BQU8sR0FBRyxDQUVUOztBQUVEM0QsRUFBQUEsUUFBUSxHQUFHLENBRVY7O0FBRUQ0RCxFQUFBQSxRQUFRLEdBQUcsQ0FFVjs7QUFFRDdELEVBQUFBLFNBQVMsR0FBRztBQUNSLFdBQU8sS0FBSzJELE1BQVo7QUFDSDs7QUFFTyxNQUFKRyxJQUFJLEdBQUc7QUFDUCxXQUFPLENBQVA7QUFDSDs7QUEzQmtCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vLyBpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgKiBhcyBSdW5uZXJzIGZyb20gJy4uL3J1bm5lcnMnO1xyXG5pbXBvcnQgcGFyYWxsZWxMaW1pdCBmcm9tICdhc3luYy9wYXJhbGxlbExpbWl0JztcclxuY29uc3QgRHVyYXRpb24gPSByZXF1aXJlKCdkdXJhdGlvbicpO1xyXG5jb25zdCBoYXNoID0gcmVxdWlyZSgnb2JqZWN0LWhhc2gnKTtcclxuY29uc3QgeyB2MSB9ID0gcmVxdWlyZSgndXVpZCcpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYWxsZWxMYXVuY2hlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcsIHJlcG9ydGVyKSB7XHJcbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xyXG4gICAgICAgIHRoaXMucmVwb3J0ZXIgPSByZXBvcnRlcjtcclxuICAgICAgICB0aGlzLl9xdWV1ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5ydW5uZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkUnVubmVyc1N0YXQgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBydW4oY2Fwc1NldCkge1xyXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9jb25maWcucGFyYWxsZWwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdGhlIHBhcmFsbGVsIHRlc3RpbmcgLSBcInBhcmFsbGVsXCIgc2V0dGluZ3MgYXJlIG1pc3NpbmcuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJhbGxlbC5tb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5wYXJhbGxlbC5tb2RlID0gJ2Nhc2UnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgd29ya2Vyc0NvdW50ID0gIWlzTmFOKHRoaXMuX2NvbmZpZy5wYXJhbGxlbC53b3JrZXJzKSA/IHRoaXMuX2NvbmZpZy5wYXJhbGxlbC53b3JrZXJzIDogMTtcclxuICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5fY29uZmlnLnBhcmFsbGVsLm1vZGUgPT09ICdpdGVyYXRpb24nXHJcbiAgICAgICAgICAgID8gJ2l0ZXJhdGlvbicgOiB0aGlzLl9jb25maWcucGFyYWxsZWwubW9kZSA9PT0gJ3N1aXRlJ1xyXG4gICAgICAgICAgICAgICAgPyAnc3VpdGUnIDogJ2Nhc2UnO1xyXG4gICAgICAgIC8vIGZsYXR0ZW4gYWxsIHN1aXRlcyBhbmQgY3JlYXRlIG9uZSB1bmlmaWVkIGFycmF5IG9mIGFsbCB0aGUgdGVzdCBjYXNlc1xyXG4gICAgICAgIGNvbnN0IHN1aXRlcyA9IHRoaXMuX2NvbmZpZy5zdWl0ZXM7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0TmFtZSA9IHRoaXMuX2NvbmZpZy5uYW1lIHx8ICcnO1xyXG4gICAgICAgIGlmICghc3VpdGVzIHx8ICFBcnJheS5pc0FycmF5KHN1aXRlcykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3RhcnQgdGhlIHBhcmFsbGVsIHRlc3RpbmcgLSBubyBzdWl0ZXMgYXJlIGRlZmluZWQuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIG5vIGNhcGFiaWxpdGllcyBhcmUgc3BlY2lmaWVkLCBydW4gc2luZ2xlIGluc3RhbmNlIHdpdGggZGVmYXVsdCBhcmd1bWVudHNcclxuICAgICAgICAvLyBhbHRlcm5hdGl2ZWx5LCBwaWNrIHRoZSBmaXJzdCBjYXBhYmlsaXRpZXMgc2V0IChsb2FkIHRlc3QgaXMgbGltaXRlZCB0byBhIHNpbmdsZSBicm93c2VyIHR5cGUpXHJcbiAgICAgICAgY29uc3QgdGVzdENhcHMgPSBjYXBzU2V0ID8gKEFycmF5LmlzQXJyYXkoY2Fwc1NldCkgPyBjYXBzU2V0WzBdIDogY2Fwc1NldCkgOiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdEhhc2ggPSB0ZXN0Q2FwcyA/IGhhc2godGVzdENhcHMpIDogJyc7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0S2V5ID0gYCR7cmVzdWx0TmFtZX0tJHtyZXN1bHRIYXNofWA7XHJcbiAgICAgICAgLy8gaWYgJ3dvcmtlcnMnIHNldCB0byBtYXggYW5kIHBhcmFtZXRlciBmaWxlIGlzIGRlZmluZWQsIFxyXG4gICAgICAgIC8vIHRoZW4gcnVuIGFzIG1hbnkgcGFyYWxsZWwgdGVzdHMgYXMgcm93cyBpbiB0aGUgZmlsZVxyXG4gICAgICAgIGxldCBzdWl0ZUluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgc3VpdGVzLmZvckVhY2goc3VpdGVEZWYgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzdWl0ZUtleSA9IHN1aXRlRGVmLmtleSB8fCBzdWl0ZURlZi5pZCB8fCBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgICAgICBjb25zdCBzdWl0ZVJlZklkID0gc3VpdGVEZWYua2V5IHx8IHN1aXRlRGVmLmlkIHx8IHYxKCk7XHJcbiAgICAgICAgICAgIGlmIChtb2RlID09PSAnaXRlcmF0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGk8PSBzdWl0ZURlZi5pdGVyYXRpb25Db3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1vY2tlZFBhcmFtTWFuYWdlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3VpdGVEZWYucGFyYW1NYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vY2tlZFBhcmFtTWFuYWdlciA9IG5ldyBQYXJhbU1hbmFnZXJNb2NrKHN1aXRlRGVmLnBhcmFtTWFuYWdlci5nZXRWYWx1ZXMoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlRGVmLnBhcmFtTWFuYWdlci5yZWFkTmV4dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JrZXJJZCA9IGAke3N1aXRlS2V5fS0ke3N1aXRlSW5kZXh9LyR7aX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1aXRlQ29weSA9IHsgLi4uc3VpdGVEZWYsIHJlZklkOiBzdWl0ZVJlZklkLCBpdGVyYXRpb25Db3VudDogMSwgcGFyYW1NYW5hZ2VyOiBtb2NrZWRQYXJhbU1hbmFnZXIgfTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXN0Q29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jb25maWcsIHN1aXRlczogWyBzdWl0ZUNvcHkgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2dyb3VwUmVzdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmtlckNvbmZpZyA9IHsgd29ya2VySWQsIHRlc3RDb25maWcsIHRlc3RDYXBzLCBzdGFydHVwRGVsYXk6IDIwMCB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaCgoY2FsbGJhY2spID0+IHRoaXMuX2xhdW5jaFdvcmtlckZ1bmMod29ya2VyQ29uZmlnLCBjYWxsYmFjaykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFueSBvZiBjYXNlcyBoYXZlIHBhcmFtIGZpbGUgYXR0YWNoZWRcclxuICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PT0gJ2Nhc2UnICYmIEFycmF5LmlzQXJyYXkoc3VpdGVEZWYuY2FzZXMpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2FzZUluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIHN1aXRlRGVmLmNhc2VzLmZvckVhY2goY2FzZURlZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FzZUtleSA9IGNhc2VEZWYua2V5IHx8IGNhc2VEZWYuaWQgfHwgY2FzZURlZi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmtlcklkID0gYCR7Y2FzZUtleX0tJHtzdWl0ZUluZGV4fS8ke2Nhc2VJbmRleH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1aXRlQ29weSA9IHsgLi4uc3VpdGVEZWYsIHJlZklkOiBzdWl0ZVJlZklkLCBjYXNlczogWyBjYXNlRGVmIF19O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVzOiBbIHN1aXRlQ29weSBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ3JvdXBSZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlS2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JrZXJDb25maWcgPSB7IHdvcmtlcklkLCB0ZXN0Q29uZmlnLCB0ZXN0Q2Fwcywgc3RhcnR1cERlbGF5OiAwIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKChjYWxsYmFjaykgPT4gdGhpcy5fbGF1bmNoV29ya2VyRnVuYyh3b3JrZXJDb25maWcsIGNhbGxiYWNrKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZUluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1aXRlS2V5ID0gc3VpdGVEZWYua2V5IHx8IHN1aXRlRGVmLmlkIHx8IHN1aXRlRGVmLm5hbWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JrZXJJZCA9IGAke3N1aXRlS2V5fS0ke3N1aXRlSW5kZXh9YDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1aXRlczogWyB7IC4uLnN1aXRlRGVmLCByZWZJZDogc3VpdGVSZWZJZCB9IF0sXHJcbiAgICAgICAgICAgICAgICAgICAgX2dyb3VwUmVzdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEtleSxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd29ya2VyQ29uZmlnID0geyB3b3JrZXJJZCwgdGVzdENvbmZpZywgdGVzdENhcHMsIHN0YXJ0dXBEZWxheTogMCB9O1xyXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKChjYWxsYmFjaykgPT4gdGhpcy5fbGF1bmNoV29ya2VyRnVuYyh3b3JrZXJDb25maWcsIGNhbGxiYWNrKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3VpdGVJbmRleCsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBhd2FpdCBwYXJhbGxlbExpbWl0KGNvbGxlY3Rpb24sIHdvcmtlcnNDb3VudCk7XHJcblxyXG4gICAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NyZWF0ZWQgUnVubmVycyBTdGF0JywgdGhpcy5jcmVhdGVkUnVubmVyc1N0YXQpO1xyXG4gICAgICAgIGNvbnN0IHJ1bm5lcnNJZHMgPSBPYmplY3Qua2V5cyh0aGlzLmNyZWF0ZWRSdW5uZXJzU3RhdCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NyZWF0ZWQgUnVubmVycyBjb3VudCcsIHJ1bm5lcnNJZHMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgcnVubmVyc0lkcy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2F6ZXMgPSB0aGlzLmNyZWF0ZWRSdW5uZXJzU3RhdFtpdGVtXS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRvdGFsICs9IGNhemVzO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUnVubmVyJywgaXRlbSwgJyBydW4gJywgY2F6ZXMsICcgY2FzZXMnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ1BhcmFsbGVsIGNvdW50Jywgd29ya2Vyc0NvdW50KTtcclxuICAgICAgICBjb25zb2xlLmxvZygnVG90YWw6ICcsIHRvdGFsKTtcclxuICAgICAgICBjb25zdCBlbmQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gbmV3IER1cmF0aW9uKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdEdXJhdGlvbjogJywgZHVyYXRpb24udG9TdHJpbmcoMSkpO1xyXG4gICAgICAgIC8vdGhpcy5yZXBvcnRlci5vbkFmdGVyRW5kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICogUHJpdmF0ZSBtZXRob2RzXHJcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAgIF9sYXVuY2hXb3JrZXJGdW5jKHdvcmtlckNvbmZpZywgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBjYiA9IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yLCBudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fbGF1bmNoVGVzdCh3b3JrZXJDb25maWcsIGNiKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcclxuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yLCBudWxsKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfaW5zdGFudGlhdGVSdW5uZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5mcmFtZXdvcmsgJiYgdHlwZW9mIHRoaXMuX2NvbmZpZy5mcmFtZXdvcmsgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUnVubmVycywgdGhpcy5fY29uZmlnLmZyYW1ld29yaykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnVubmVyc1t0aGlzLl9jb25maWcuZnJhbWV3b3JrXSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3IFJ1bm5lcnMub3h5Z2VuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2xhdW5jaFRlc3QoeyB3b3JrZXJJZCwgdGVzdENvbmZpZywgdGVzdENhcHMsIHN0YXJ0dXBEZWxheSB9LCBjYWxsYmFjaykge1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl9zbGVlcChzdGFydHVwRGVsYXkpO1xyXG5cclxuICAgICAgICBsZXQgcnVubmVyID0gdGhpcy5faW5zdGFudGlhdGVSdW5uZXIoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZWRSdW5uZXJzU3RhdFtydW5uZXIuX2lkXSA9IFt3b3JrZXJJZF07XHJcblxyXG4gICAgICAgIGlmICghcnVubmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyYW1ld29yayA9IHRoaXMuX2NvbmZpZy5mcmFtZXdvcms7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcnVubmVyIGZvciB0aGUgc3BlY2lmaWVkIGZyYW1ld29yazogJHtmcmFtZXdvcmt9LmApKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBnZW5lcmF0ZSBmaXJlZm94IFwicHJvZmlsZVwiIHZhbHVlIGlmIHByb2ZpbGUgb3B0aW9ucyBhcmUgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgIC8vIGF3YWl0IG94dXRpbC5nZW5lcmF0ZUZpcmVmb3hPcHRpb25zUHJvZmlsZSh0ZXN0Q2Fwcyk7XHJcblxyXG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIG94eWdlblxyXG4gICAgICAgICAgICBhd2FpdCBydW5uZXIuaW5pdCh0ZXN0Q29uZmlnLCB0ZXN0Q2FwcywgdGhpcy5yZXBvcnRlcik7XHJcblxyXG4gICAgICAgICAgICAvLyBydW4gT3h5Z2VuIHRlc3QgXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1bm5lci5ydW4oKTtcclxuICAgICAgICAgICAgYXdhaXQgcnVubmVyLmRpc3Bvc2UocmVzdWx0LnN0YXR1cyB8fCBudWxsKTtcclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxhdW5jaCB0aGUgdGVzdDonLCBlKTtcclxuICAgICAgICAgICAgLy8gc3RvcCBwcm9jZXNzaW5nIHRoZSBxdWV1ZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fcXVldWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlLmtpbGwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGN1c3RvbSBlcnJvciBtZXNzYWdlXHJcbiAgICAgICAgICAgIGlmIChlLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyTXNnID0gJyc7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyID0gZS5lcnJvcjtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIudHlwZSlcclxuICAgICAgICAgICAgICAgICAgICBlcnJNc2cgKz0gZXJyLnR5cGUgKyAnIC0gJztcclxuICAgICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgICAgICBlcnJNc2cgKz0gZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyTXNnID0gZXJyLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoZXJyTXNnKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlKTsgICAgLy8gY2FsbCBiYWNrIHdpdGggdGhlIG9yaWdpbmFsIGV4Y2VwdGlvblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJ1bm5lcnMucHVzaChydW5uZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIF9zbGVlcChkdXJhdGlvbikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkdXJhdGlvbikpO1xyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBQYXJhbU1hbmFnZXJNb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlcykge1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gdmFsdWVzO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldE1vZGUoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlYWROZXh0KCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZWFkUHJldigpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm93cygpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgIH1cclxufVxyXG4iXX0=
223
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSdW5uZXJzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX3BhcmFsbGVsTGltaXQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwidCIsIldlYWtNYXAiLCJyIiwibiIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiRHVyYXRpb24iLCJoYXNoIiwidjEiLCJQYXJhbGxlbExhdW5jaGVyIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJyZXBvcnRlciIsIl9jb25maWciLCJfcXVldWUiLCJydW5uZXJzIiwiY3JlYXRlZFJ1bm5lcnNTdGF0IiwicnVuIiwiY2Fwc1NldCIsImNvbGxlY3Rpb24iLCJwYXJhbGxlbCIsIkVycm9yIiwibW9kZSIsIndvcmtlcnNDb3VudCIsImlzTmFOIiwid29ya2VycyIsInN1aXRlcyIsInJlc3VsdE5hbWUiLCJuYW1lIiwiQXJyYXkiLCJpc0FycmF5IiwidGVzdENhcHMiLCJyZXN1bHRIYXNoIiwicmVzdWx0S2V5Iiwic3VpdGVJbmRleCIsImZvckVhY2giLCJzdWl0ZURlZiIsInN1aXRlS2V5Iiwia2V5IiwiaWQiLCJzdWl0ZVJlZklkIiwiaXRlcmF0aW9uQ291bnQiLCJtb2NrZWRQYXJhbU1hbmFnZXIiLCJ1bmRlZmluZWQiLCJwYXJhbU1hbmFnZXIiLCJQYXJhbU1hbmFnZXJNb2NrIiwiZ2V0VmFsdWVzIiwicmVhZE5leHQiLCJ3b3JrZXJJZCIsInN1aXRlQ29weSIsInJlZklkIiwidGVzdENvbmZpZyIsIl9ncm91cFJlc3VsdCIsIndvcmtlckNvbmZpZyIsInN0YXJ0dXBEZWxheSIsInB1c2giLCJjYWxsYmFjayIsIl9sYXVuY2hXb3JrZXJGdW5jIiwiY2FzZXMiLCJjYXNlSW5kZXgiLCJjYXNlRGVmIiwiY2FzZUtleSIsInN0YXJ0IiwiRGF0ZSIsInBhcmFsbGVsTGltaXQiLCJ0b3RhbCIsImNvbnNvbGUiLCJsb2ciLCJydW5uZXJzSWRzIiwia2V5cyIsImxlbmd0aCIsIm1hcCIsIml0ZW0iLCJjYXplcyIsImVuZCIsImR1cmF0aW9uIiwidG9TdHJpbmciLCJjYiIsImVycm9yIiwiX2xhdW5jaFRlc3QiLCJ0aGVuIiwicmVzdWx0IiwiY2F0Y2giLCJfaW5zdGFudGlhdGVSdW5uZXIiLCJmcmFtZXdvcmsiLCJwcm90b3R5cGUiLCJveHlnZW4iLCJfc2xlZXAiLCJydW5uZXIiLCJfaWQiLCJpbml0IiwiZGlzcG9zZSIsInN0YXR1cyIsImtpbGwiLCJlcnJNc2ciLCJlcnIiLCJ0eXBlIiwibWVzc2FnZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImV4cG9ydHMiLCJ2YWx1ZXMiLCJnZXRNb2RlIiwicmVhZFByZXYiLCJyb3dzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9wYXJhbGxlbC1sYXVuY2hlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8vIGltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCAqIGFzIFJ1bm5lcnMgZnJvbSAnLi4vcnVubmVycyc7XHJcbmltcG9ydCBwYXJhbGxlbExpbWl0IGZyb20gJ2FzeW5jL3BhcmFsbGVsTGltaXQnO1xyXG5jb25zdCBEdXJhdGlvbiA9IHJlcXVpcmUoJ2R1cmF0aW9uJyk7XHJcbmNvbnN0IGhhc2ggPSByZXF1aXJlKCdvYmplY3QtaGFzaCcpO1xyXG5jb25zdCB7IHYxIH0gPSByZXF1aXJlKCd1dWlkJyk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJhbGxlbExhdW5jaGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZywgcmVwb3J0ZXIpIHtcclxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRlciA9IHJlcG9ydGVyO1xyXG4gICAgICAgIHRoaXMuX3F1ZXVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnJ1bm5lcnMgPSBbXTtcclxuICAgICAgICB0aGlzLmNyZWF0ZWRSdW5uZXJzU3RhdCA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJ1bihjYXBzU2V0KSB7XHJcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJhbGxlbCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzdGFydCB0aGUgcGFyYWxsZWwgdGVzdGluZyAtIFwicGFyYWxsZWxcIiBzZXR0aW5ncyBhcmUgbWlzc2luZy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmFsbGVsLm1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29uZmlnLnBhcmFsbGVsLm1vZGUgPSAnY2FzZSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB3b3JrZXJzQ291bnQgPSAhaXNOYU4odGhpcy5fY29uZmlnLnBhcmFsbGVsLndvcmtlcnMpID8gdGhpcy5fY29uZmlnLnBhcmFsbGVsLndvcmtlcnMgOiAxO1xyXG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLl9jb25maWcucGFyYWxsZWwubW9kZSA9PT0gJ2l0ZXJhdGlvbidcclxuICAgICAgICAgICAgPyAnaXRlcmF0aW9uJyA6IHRoaXMuX2NvbmZpZy5wYXJhbGxlbC5tb2RlID09PSAnc3VpdGUnXHJcbiAgICAgICAgICAgICAgICA/ICdzdWl0ZScgOiAnY2FzZSc7XHJcbiAgICAgICAgLy8gZmxhdHRlbiBhbGwgc3VpdGVzIGFuZCBjcmVhdGUgb25lIHVuaWZpZWQgYXJyYXkgb2YgYWxsIHRoZSB0ZXN0IGNhc2VzXHJcbiAgICAgICAgY29uc3Qgc3VpdGVzID0gdGhpcy5fY29uZmlnLnN1aXRlcztcclxuICAgICAgICBjb25zdCByZXN1bHROYW1lID0gdGhpcy5fY29uZmlnLm5hbWUgfHwgJyc7XHJcbiAgICAgICAgaWYgKCFzdWl0ZXMgfHwgIUFycmF5LmlzQXJyYXkoc3VpdGVzKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzdGFydCB0aGUgcGFyYWxsZWwgdGVzdGluZyAtIG5vIHN1aXRlcyBhcmUgZGVmaW5lZC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgbm8gY2FwYWJpbGl0aWVzIGFyZSBzcGVjaWZpZWQsIHJ1biBzaW5nbGUgaW5zdGFuY2Ugd2l0aCBkZWZhdWx0IGFyZ3VtZW50c1xyXG4gICAgICAgIC8vIGFsdGVybmF0aXZlbHksIHBpY2sgdGhlIGZpcnN0IGNhcGFiaWxpdGllcyBzZXQgKGxvYWQgdGVzdCBpcyBsaW1pdGVkIHRvIGEgc2luZ2xlIGJyb3dzZXIgdHlwZSlcclxuICAgICAgICBjb25zdCB0ZXN0Q2FwcyA9IGNhcHNTZXQgPyAoQXJyYXkuaXNBcnJheShjYXBzU2V0KSA/IGNhcHNTZXRbMF0gOiBjYXBzU2V0KSA6IG51bGw7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0SGFzaCA9IHRlc3RDYXBzID8gaGFzaCh0ZXN0Q2FwcykgOiAnJztcclxuICAgICAgICBjb25zdCByZXN1bHRLZXkgPSBgJHtyZXN1bHROYW1lfS0ke3Jlc3VsdEhhc2h9YDtcclxuICAgICAgICAvLyBpZiAnd29ya2Vycycgc2V0IHRvIG1heCBhbmQgcGFyYW1ldGVyIGZpbGUgaXMgZGVmaW5lZCwgXHJcbiAgICAgICAgLy8gdGhlbiBydW4gYXMgbWFueSBwYXJhbGxlbCB0ZXN0cyBhcyByb3dzIGluIHRoZSBmaWxlXHJcbiAgICAgICAgbGV0IHN1aXRlSW5kZXggPSAwO1xyXG5cclxuICAgICAgICBzdWl0ZXMuZm9yRWFjaChzdWl0ZURlZiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1aXRlS2V5ID0gc3VpdGVEZWYua2V5IHx8IHN1aXRlRGVmLmlkIHx8IHN1aXRlRGVmLm5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1aXRlUmVmSWQgPSBzdWl0ZURlZi5rZXkgfHwgc3VpdGVEZWYuaWQgfHwgdjEoKTtcclxuICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdpdGVyYXRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaTw9IHN1aXRlRGVmLml0ZXJhdGlvbkNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbW9ja2VkUGFyYW1NYW5hZ2VyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWl0ZURlZi5wYXJhbU1hbmFnZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9ja2VkUGFyYW1NYW5hZ2VyID0gbmV3IFBhcmFtTWFuYWdlck1vY2soc3VpdGVEZWYucGFyYW1NYW5hZ2VyLmdldFZhbHVlcygpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVEZWYucGFyYW1NYW5hZ2VyLnJlYWROZXh0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmtlcklkID0gYCR7c3VpdGVLZXl9LSR7c3VpdGVJbmRleH0vJHtpfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVDb3B5ID0geyAuLi5zdWl0ZURlZiwgcmVmSWQ6IHN1aXRlUmVmSWQsIGl0ZXJhdGlvbkNvdW50OiAxLCBwYXJhbU1hbmFnZXI6IG1vY2tlZFBhcmFtTWFuYWdlciB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2NvbmZpZywgc3VpdGVzOiBbIHN1aXRlQ29weSBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ3JvdXBSZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29ya2VyQ29uZmlnID0geyB3b3JrZXJJZCwgdGVzdENvbmZpZywgdGVzdENhcHMsIHN0YXJ0dXBEZWxheTogMjAwIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKChjYWxsYmFjaykgPT4gdGhpcy5fbGF1bmNoV29ya2VyRnVuYyh3b3JrZXJDb25maWcsIGNhbGxiYWNrKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgYW55IG9mIGNhc2VzIGhhdmUgcGFyYW0gZmlsZSBhdHRhY2hlZFxyXG4gICAgICAgICAgICBlbHNlIGlmIChtb2RlID09PSAnY2FzZScgJiYgQXJyYXkuaXNBcnJheShzdWl0ZURlZi5jYXNlcykpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjYXNlSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXNlS2V5ID0gY2FzZURlZi5rZXkgfHwgY2FzZURlZi5pZCB8fCBjYXNlRGVmLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29ya2VySWQgPSBgJHtjYXNlS2V5fS0ke3N1aXRlSW5kZXh9LyR7Y2FzZUluZGV4fWA7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVDb3B5ID0geyAuLi5zdWl0ZURlZiwgcmVmSWQ6IHN1aXRlUmVmSWQsIGNhc2VzOiBbIGNhc2VEZWYgXX07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVzdENvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWl0ZXM6IFsgc3VpdGVDb3B5IF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9ncm91cFJlc3VsdDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0S2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmtlckNvbmZpZyA9IHsgd29ya2VySWQsIHRlc3RDb25maWcsIHRlc3RDYXBzLCBzdGFydHVwRGVsYXk6IDAgfTtcclxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2goKGNhbGxiYWNrKSA9PiB0aGlzLl9sYXVuY2hXb3JrZXJGdW5jKHdvcmtlckNvbmZpZywgY2FsbGJhY2spKTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlSW5kZXgrKztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VpdGVLZXkgPSBzdWl0ZURlZi5rZXkgfHwgc3VpdGVEZWYuaWQgfHwgc3VpdGVEZWYubmFtZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdvcmtlcklkID0gYCR7c3VpdGVLZXl9LSR7c3VpdGVJbmRleH1gO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdENvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9jb25maWcsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VpdGVzOiBbIHsgLi4uc3VpdGVEZWYsIHJlZklkOiBzdWl0ZVJlZklkIH0gXSxcclxuICAgICAgICAgICAgICAgICAgICBfZ3JvdXBSZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0S2V5LFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JrZXJDb25maWcgPSB7IHdvcmtlcklkLCB0ZXN0Q29uZmlnLCB0ZXN0Q2Fwcywgc3RhcnR1cERlbGF5OiAwIH07XHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2goKGNhbGxiYWNrKSA9PiB0aGlzLl9sYXVuY2hXb3JrZXJGdW5jKHdvcmtlckNvbmZpZywgY2FsbGJhY2spKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzdWl0ZUluZGV4Kys7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGF3YWl0IHBhcmFsbGVsTGltaXQoY29sbGVjdGlvbiwgd29ya2Vyc0NvdW50KTtcclxuXHJcbiAgICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ3JlYXRlZCBSdW5uZXJzIFN0YXQnLCB0aGlzLmNyZWF0ZWRSdW5uZXJzU3RhdCk7XHJcbiAgICAgICAgY29uc3QgcnVubmVyc0lkcyA9IE9iamVjdC5rZXlzKHRoaXMuY3JlYXRlZFJ1bm5lcnNTdGF0KTtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ3JlYXRlZCBSdW5uZXJzIGNvdW50JywgcnVubmVyc0lkcy5sZW5ndGgpO1xyXG5cclxuICAgICAgICBydW5uZXJzSWRzLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjYXplcyA9IHRoaXMuY3JlYXRlZFJ1bm5lcnNTdGF0W2l0ZW1dLmxlbmd0aDtcclxuICAgICAgICAgICAgdG90YWwgKz0gY2F6ZXM7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSdW5uZXInLCBpdGVtLCAnIHJ1biAnLCBjYXplcywgJyBjYXNlcycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnUGFyYWxsZWwgY291bnQnLCB3b3JrZXJzQ291bnQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdUb3RhbDogJywgdG90YWwpO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBuZXcgRHVyYXRpb24oc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0R1cmF0aW9uOiAnLCBkdXJhdGlvbi50b1N0cmluZygxKSk7XHJcbiAgICAgICAgLy90aGlzLnJlcG9ydGVyLm9uQWZ0ZXJFbmQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgKiBQcml2YXRlIG1ldGhvZHNcclxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4gICAgX2xhdW5jaFdvcmtlckZ1bmMod29ya2VyQ29uZmlnLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGNiID0gKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IsIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9sYXVuY2hUZXN0KHdvcmtlckNvbmZpZywgY2IpLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xyXG4gICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IsIG51bGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF9pbnN0YW50aWF0ZVJ1bm5lcigpIHtcclxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmZyYW1ld29yayAmJiB0eXBlb2YgdGhpcy5fY29uZmlnLmZyYW1ld29yayA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSdW5uZXJzLCB0aGlzLl9jb25maWcuZnJhbWV3b3JrKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW5uZXJzW3RoaXMuX2NvbmZpZy5mcmFtZXdvcmtdKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXcgUnVubmVycy5veHlnZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfbGF1bmNoVGVzdCh7IHdvcmtlcklkLCB0ZXN0Q29uZmlnLCB0ZXN0Q2Fwcywgc3RhcnR1cERlbGF5IH0sIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuX3NsZWVwKHN0YXJ0dXBEZWxheSk7XHJcblxyXG4gICAgICAgIGxldCBydW5uZXIgPSB0aGlzLl9pbnN0YW50aWF0ZVJ1bm5lcigpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlZFJ1bm5lcnNTdGF0W3J1bm5lci5faWRdID0gW3dvcmtlcklkXTtcclxuXHJcbiAgICAgICAgaWYgKCFydW5uZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgZnJhbWV3b3JrID0gdGhpcy5fY29uZmlnLmZyYW1ld29yaztcclxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBDYW5ub3QgZmluZCBydW5uZXIgZm9yIHRoZSBzcGVjaWZpZWQgZnJhbWV3b3JrOiAke2ZyYW1ld29ya30uYCkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGdlbmVyYXRlIGZpcmVmb3ggXCJwcm9maWxlXCIgdmFsdWUgaWYgcHJvZmlsZSBvcHRpb25zIGFyZSBzcGVjaWZpZWRcclxuICAgICAgICAgICAgLy8gYXdhaXQgb3h1dGlsLmdlbmVyYXRlRmlyZWZveE9wdGlvbnNQcm9maWxlKHRlc3RDYXBzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgb3h5Z2VuXHJcbiAgICAgICAgICAgIGF3YWl0IHJ1bm5lci5pbml0KHRlc3RDb25maWcsIHRlc3RDYXBzLCB0aGlzLnJlcG9ydGVyKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHJ1biBPeHlnZW4gdGVzdCBcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVubmVyLnJ1bigpO1xyXG4gICAgICAgICAgICBhd2FpdCBydW5uZXIuZGlzcG9zZShyZXN1bHQuc3RhdHVzIHx8IG51bGwpO1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbGF1bmNoIHRoZSB0ZXN0OicsIGUpO1xyXG4gICAgICAgICAgICAvLyBzdG9wIHByb2Nlc3NpbmcgdGhlIHF1ZXVlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9xdWV1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcXVldWUua2lsbCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgY3VzdG9tIGVycm9yIG1lc3NhZ2VcclxuICAgICAgICAgICAgaWYgKGUuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJNc2cgPSAnJztcclxuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBlLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci50eXBlKVxyXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZyArPSBlcnIudHlwZSArICcgLSAnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgIGVyck1zZyArPSBlcnIubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBlcnJNc2cgPSBlcnIudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihlcnJNc2cpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGUpOyAgICAvLyBjYWxsIGJhY2sgd2l0aCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucnVubmVycy5wdXNoKHJ1bm5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgX3NsZWVwKGR1cmF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGR1cmF0aW9uKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFBhcmFtTWFuYWdlck1vY2sge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kZSgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVhZE5leHQoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJlYWRQcmV2KCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXRWYWx1ZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByb3dzKCkge1xyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVVBLElBQUFBLE9BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUFnRCxTQUFBRSx1QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFKLHdCQUFBSSxDQUFBLEVBQUFHLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBUix1QkFBQSxZQUFBQSxDQUFBSSxDQUFBLEVBQUFHLENBQUEsU0FBQUEsQ0FBQSxJQUFBSCxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxTQUFBRCxDQUFBLE1BQUFPLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQVIsT0FBQSxFQUFBRixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFTLENBQUEsTUFBQUYsQ0FBQSxHQUFBSixDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRSxDQUFBLENBQUFJLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTyxDQUFBLENBQUFLLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTyxDQUFBLENBQUFNLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUyxDQUFBLGdCQUFBTixDQUFBLElBQUFILENBQUEsZ0JBQUFHLENBQUEsT0FBQVcsY0FBQSxDQUFBQyxJQUFBLENBQUFmLENB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
@@ -1,38 +1,24 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
6
-
7
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
-
5
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
6
  module.exports = function (filePath, mode, fileType) {
10
7
  var defer = require('when').defer;
11
-
12
8
  var path = require('path');
13
-
14
9
  var ExcelReader = require('./param-reader-excel');
15
-
16
10
  var CsvReader = require('./param-reader-csv');
17
-
18
11
  var JsonReader = require('./param-reader-json');
19
-
20
12
  var errHelper = require('../errors/helper');
21
-
22
13
  var module = {};
23
-
24
14
  var _whenInitialized = defer();
25
-
26
15
  module.init = function () {
27
16
  var ext = path.extname(filePath);
28
-
29
17
  if (fileType) {
30
18
  ext = fileType;
31
19
  }
32
-
33
20
  var reader = null;
34
21
  var self = this;
35
-
36
22
  if (ext === '.xlsx' || ext === '.xls') {
37
23
  reader = new ExcelReader();
38
24
  } else if (ext === '.csv' || ext === '.txt') {
@@ -41,15 +27,12 @@ module.exports = function (filePath, mode, fileType) {
41
27
  reader = new JsonReader();
42
28
  } else {
43
29
  _whenInitialized.reject(new _OxygenError.default(errHelper.errorCode.PARAMETERS_ERROR, 'Unsupported parameters file type: ' + ext));
44
-
45
30
  return _whenInitialized.promise;
46
31
  }
47
-
48
32
  this.mode = mode;
49
33
  reader.read(filePath, fileType || null).then(function (result) {
50
34
  self.table = result;
51
35
  self.currentRow = self.mode === 'random' ? random(0, self.table.length) : 0;
52
-
53
36
  _whenInitialized.resolve(null);
54
37
  }).catch(function (err) {
55
38
  _whenInitialized.reject(new _OxygenError.default(errHelper.errorCode.PARAMETERS_ERROR, `${errHelper.errorCode.PARAMETERS_ERROR}: Unable to load parameters file.
@@ -57,47 +40,37 @@ ${err.message}`));
57
40
  });
58
41
  return _whenInitialized.promise;
59
42
  };
60
-
61
43
  module.getMode = function () {
62
44
  return this.mode;
63
45
  };
64
-
65
46
  module.readNext = function () {
66
47
  this.prevRow = this.currentRow;
67
-
68
48
  if (this.mode === 'random') {
69
49
  this.currentRow = random(0, this.table.length);
70
50
  } else {
71
51
  this.currentRow++;
72
52
  }
73
-
74
53
  if (this.currentRow > this.table.length - 1) {
75
54
  this.currentRow = 0;
76
55
  }
77
56
  };
78
-
79
57
  module.readPrev = function () {
80
58
  if (typeof this.prevRow !== 'undefined') {
81
59
  this.currentRow = this.prevRow;
82
60
  }
83
61
  };
84
-
85
62
  module.getValues = function () {
86
63
  if (!this.table || this.table.length === 0) {
87
64
  throw new _OxygenError.default(errHelper.errorCode.PARAMETERS_ERROR, 'Parameters table is empty');
88
65
  }
89
-
90
66
  return this.table[this.currentRow];
91
67
  };
92
-
93
68
  module.__defineGetter__('rows', function () {
94
69
  return this.table.length;
95
70
  });
96
-
97
71
  function random(min, max) {
98
72
  return Math.floor(Math.random() * (max - min)) + min;
99
73
  }
100
-
101
74
  return module;
102
75
  };
103
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGFyYW0tbWFuYWdlci5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiZmlsZVBhdGgiLCJtb2RlIiwiZmlsZVR5cGUiLCJkZWZlciIsInJlcXVpcmUiLCJwYXRoIiwiRXhjZWxSZWFkZXIiLCJDc3ZSZWFkZXIiLCJKc29uUmVhZGVyIiwiZXJySGVscGVyIiwiX3doZW5Jbml0aWFsaXplZCIsImluaXQiLCJleHQiLCJleHRuYW1lIiwicmVhZGVyIiwic2VsZiIsInJlamVjdCIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJQQVJBTUVURVJTX0VSUk9SIiwicHJvbWlzZSIsInJlYWQiLCJ0aGVuIiwicmVzdWx0IiwidGFibGUiLCJjdXJyZW50Um93IiwicmFuZG9tIiwibGVuZ3RoIiwicmVzb2x2ZSIsImNhdGNoIiwiZXJyIiwibWVzc2FnZSIsImdldE1vZGUiLCJyZWFkTmV4dCIsInByZXZSb3ciLCJyZWFkUHJldiIsImdldFZhbHVlcyIsIl9fZGVmaW5lR2V0dGVyX18iLCJtaW4iLCJtYXgiLCJNYXRoIiwiZmxvb3IiXSwibWFwcGluZ3MiOiI7Ozs7QUFRQTs7OztBQUNBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsVUFBVUMsUUFBVixFQUFvQkMsSUFBcEIsRUFBMEJDLFFBQTFCLEVBQWlEO0FBQzlELE1BQUlDLEtBQUssR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBUCxDQUFnQkQsS0FBNUI7O0FBQ0EsTUFBSUUsSUFBSSxHQUFHRCxPQUFPLENBQUMsTUFBRCxDQUFsQjs7QUFDQSxNQUFJRSxXQUFXLEdBQUdGLE9BQU8sQ0FBQyxzQkFBRCxDQUF6Qjs7QUFDQSxNQUFJRyxTQUFTLEdBQUdILE9BQU8sQ0FBQyxvQkFBRCxDQUF2Qjs7QUFDQSxNQUFJSSxVQUFVLEdBQUdKLE9BQU8sQ0FBQyxxQkFBRCxDQUF4Qjs7QUFDQSxNQUFJSyxTQUFTLEdBQUdMLE9BQU8sQ0FBQyxrQkFBRCxDQUF2Qjs7QUFDQSxNQUFJTixNQUFNLEdB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QUF3QixXQUE1QixFQUF5QztBQUNyQyxXQUFLVCxVQUFMLEdBQWtCLEtBQUtTLE9BQXZCO0FBQ0g7QUFDSixHQUpEOztBQU1BcEMsRUFBQUEsTUFBTSxDQUFDc0MsU0FBUCxHQUFtQixZQUFXO0FBQzFCLFFBQUksQ0FBQyxLQUFLWixLQUFOLElBQWUsS0FBS0EsS0FBTCxDQUFXRyxNQUFYLEtBQXNCLENBQXpDLEVBQTRDO0FBQ3hDLFlBQU0sSUFBSVYsb0JBQUosQ0FBWVIsU0FBUyxDQUFDUyxTQUFWLENBQW9CQyxnQkFBaEMsRUFBa0QsMkJBQWxELENBQU47QUFDSDs7QUFDRCxXQUFPLEtBQUtLLEtBQUwsQ0FBVyxLQUFLQyxVQUFoQixDQUFQO0FBQ0gsR0FMRDs7QUFPQTNCLEVBQUFBLE1BQU0sQ0FBQ3VDLGdCQUFQLENBQXdCLE1BQXhCLEVBQWdDLFlBQVc7QUFDdkMsV0FBTyxLQUFLYixLQUFMLENBQVdHLE1BQWxCO0FBQ0gsR0FGRDs7QUFJQSxXQUFTRCxNQUFULENBQWdCWSxHQUFoQixFQUFxQkMsR0FBckIsRUFBMEI7QUFDdEIsV0FBT0MsSUFBSSxDQUFDQyxLQUFMLENBQVdELElBQUksQ0FBQ2QsTUFBTCxNQUFpQmEsR0FBRyxHQUFHRCxHQUF2QixDQUFYLElBQTBDQSxHQUFqRDtBQUNIOztBQUVELFNBQU94QyxNQUFQO0FBQ0gsQ0E5RkQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZmlsZVBhdGgsIG1vZGUsIGZpbGVUeXBlIC8qb3B0aW9uYWwqLykge1xyXG4gICAgdmFyIGRlZmVyID0gcmVxdWlyZSgnd2hlbicpLmRlZmVyO1xyXG4gICAgdmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbiAgICB2YXIgRXhjZWxSZWFkZXIgPSByZXF1aXJlKCcuL3BhcmFtLXJlYWRlci1leGNlbCcpO1xyXG4gICAgdmFyIENzdlJlYWRlciA9IHJlcXVpcmUoJy4vcGFyYW0tcmVhZGVyLWNzdicpO1xyXG4gICAgdmFyIEpzb25SZWFkZXIgPSByZXF1aXJlKCcuL3BhcmFtLXJlYWRlci1qc29uJyk7XHJcbiAgICB2YXIgZXJySGVscGVyID0gcmVxdWlyZSgnLi4vZXJyb3JzL2hlbHBlcicpO1xyXG4gICAgdmFyIG1vZHVsZSA9IHt9O1xyXG4gICAgdmFyIF93aGVuSW5pdGlhbGl6ZWQgPSBkZWZlcigpO1xyXG5cclxuICAgIG1vZHVsZS5pbml0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XHJcblxyXG4gICAgICAgIGlmIChmaWxlVHlwZSkge1xyXG4gICAgICAgICAgICBleHQgPSBmaWxlVHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlYWRlciA9IG51bGw7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIGNob29zZSB0aGUgcmlnaHQgY29udmVydGVyIGJhc2VkIG9uIGVpdGhlciB4bHMgb3IgeGxzeCBmaWxlIGV4dGVuc2lvblxyXG4gICAgICAgIGlmIChleHQgPT09ICcueGxzeCcgfHwgZXh0ID09PSAnLnhscycpIHtcclxuICAgICAgICAgICAgcmVhZGVyID0gbmV3IEV4Y2VsUmVhZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV4dCA9PT0gJy5jc3YnIHx8IGV4dCA9PT0gJy50eHQnKSB7XHJcbiAgICAgICAgICAgIHJlYWRlciA9IG5ldyBDc3ZSZWFkZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXh0ID09PSAnLmpzb24nIHx8IGV4dCA9PT0gJy5qcycpIHtcclxuICAgICAgICAgICAgcmVhZGVyID0gbmV3IEpzb25SZWFkZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIF93aGVuSW5pdGlhbGl6ZWQucmVqZWN0KG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuUEFSQU1FVEVSU19FUlJPUiwgJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlcnMgZmlsZSB0eXBlOiAnICsgZXh0KSk7XHJcbiAgICAgICAgICAgIHJldHVybiBfd2hlbkluaXRpYWxpemVkLnByb21pc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xyXG5cclxuICAgICAgICByZWFkZXIucmVhZChmaWxlUGF0aCwgZmlsZVR5cGUgfHwgbnVsbClcclxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnRhYmxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBjdXJyZW50Um93IGFjY29yZGluZyB3aXRoIHBhcmFtZXRlciByZWFkaW5nIG1vZGUgKHJhbmRvbSBvciBzZXF1ZW50aWFsKVxyXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50Um93ID0gc2VsZi5tb2RlID09PSAncmFuZG9tJyA/IHJhbmRvbSgwLCBzZWxmLnRhYmxlLmxlbmd0aCkgOiAwO1xyXG4gICAgICAgICAgICAgICAgX3doZW5Jbml0aWFsaXplZC5yZXNvbHZlKG51bGwpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBfd2hlbkluaXRpYWxpemVkLnJlamVjdChcclxuICAgICAgICAgICAgICAgICAgICBuZXcgT3hFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJySGVscGVyLmVycm9yQ29kZS5QQVJBTUVURVJTX0VSUk9SLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtlcnJIZWxwZXIuZXJyb3JDb2RlLlBBUkFNRVRFUlNfRVJST1J9OiBVbmFibGUgdG8gbG9hZCBwYXJhbWV0ZXJzIGZpbGUuIFxyXG4ke2Vyci5tZXNzYWdlfWBcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIF93aGVuSW5pdGlhbGl6ZWQucHJvbWlzZTtcclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLmdldE1vZGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlO1xyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUucmVhZE5leHQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5wcmV2Um93ID0gdGhpcy5jdXJyZW50Um93O1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdyYW5kb20nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdyA9IHJhbmRvbSgwLCB0aGlzLnRhYmxlLmxlbmd0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Um93Kys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50Um93ID4gdGhpcy50YWJsZS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdyA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUucmVhZFByZXYgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnByZXZSb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdyA9IHRoaXMucHJldlJvdztcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5nZXRWYWx1ZXMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRoaXMudGFibGUgfHwgdGhpcy50YWJsZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5QQVJBTUVURVJTX0VSUk9SLCAnUGFyYW1ldGVycyB0YWJsZSBpcyBlbXB0eScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50YWJsZVt0aGlzLmN1cnJlbnRSb3ddO1xyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUuX19kZWZpbmVHZXR0ZXJfXygncm93cycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlLmxlbmd0aDtcclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCkge1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1vZHVsZTtcclxufTtcclxuIl19
76
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfT3h5Z2VuRXJyb3IiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJmaWxlUGF0aCIsIm1vZGUiLCJmaWxlVHlwZSIsImRlZmVyIiwicGF0aCIsIkV4Y2VsUmVhZGVyIiwiQ3N2UmVhZGVyIiwiSnNvblJlYWRlciIsImVyckhlbHBlciIsIl93aGVuSW5pdGlhbGl6ZWQiLCJpbml0IiwiZXh0IiwiZXh0bmFtZSIsInJlYWRlciIsInNlbGYiLCJyZWplY3QiLCJPeEVycm9yIiwiZXJyb3JDb2RlIiwiUEFSQU1FVEVSU19FUlJPUiIsInByb21pc2UiLCJyZWFkIiwidGhlbiIsInJlc3VsdCIsInRhYmxlIiwiY3VycmVudFJvdyIsInJhbmRvbSIsImxlbmd0aCIsInJlc29sdmUiLCJjYXRjaCIsImVyciIsIm1lc3NhZ2UiLCJnZXRNb2RlIiwicmVhZE5leHQiLCJwcmV2Um93IiwicmVhZFByZXYiLCJnZXRWYWx1ZXMiLCJfX2RlZmluZUdldHRlcl9fIiwibWluIiwibWF4IiwiTWF0aCIsImZsb29yIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9wYXJhbS1tYW5hZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmaWxlUGF0aCwgbW9kZSwgZmlsZVR5cGUgLypvcHRpb25hbCovKSB7XHJcbiAgICB2YXIgZGVmZXIgPSByZXF1aXJlKCd3aGVuJykuZGVmZXI7XHJcbiAgICB2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxuICAgIHZhciBFeGNlbFJlYWRlciA9IHJlcXVpcmUoJy4vcGFyYW0tcmVhZGVyLWV4Y2VsJyk7XHJcbiAgICB2YXIgQ3N2UmVhZGVyID0gcmVxdWlyZSgnLi9wYXJhbS1yZWFkZXItY3N2Jyk7XHJcbiAgICB2YXIgSnNvblJlYWRlciA9IHJlcXVpcmUoJy4vcGFyYW0tcmVhZGVyLWpzb24nKTtcclxuICAgIHZhciBlcnJIZWxwZXIgPSByZXF1aXJlKCcuLi9lcnJvcnMvaGVscGVyJyk7XHJcbiAgICB2YXIgbW9kdWxlID0ge307XHJcbiAgICB2YXIgX3doZW5Jbml0aWFsaXplZCA9IGRlZmVyKCk7XHJcblxyXG4gICAgbW9kdWxlLmluaXQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGVUeXBlKSB7XHJcbiAgICAgICAgICAgIGV4dCA9IGZpbGVUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVhZGVyID0gbnVsbDtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gY2hvb3NlIHRoZSByaWdodCBjb252ZXJ0ZXIgYmFzZWQgb24gZWl0aGVyIHhscyBvciB4bHN4IGZpbGUgZXh0ZW5zaW9uXHJcbiAgICAgICAgaWYgKGV4dCA9PT0gJy54bHN4JyB8fCBleHQgPT09ICcueGxzJykge1xyXG4gICAgICAgICAgICByZWFkZXIgPSBuZXcgRXhjZWxSZWFkZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXh0ID09PSAnLmNzdicgfHwgZXh0ID09PSAnLnR4dCcpIHtcclxuICAgICAgICAgICAgcmVhZGVyID0gbmV3IENzdlJlYWRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChleHQgPT09ICcuanNvbicgfHwgZXh0ID09PSAnLmpzJykge1xyXG4gICAgICAgICAgICByZWFkZXIgPSBuZXcgSnNvblJlYWRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgX3doZW5Jbml0aWFsaXplZC5yZWplY3QobmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5QQVJBTUVURVJTX0VSUk9SLCAnVW5zdXBwb3J0ZWQgcGFyYW1ldGVycyBmaWxlIHR5cGU6ICcgKyBleHQpKTtcclxuICAgICAgICAgICAgcmV0dXJuIF93aGVuSW5pdGlhbGl6ZWQucHJvbWlzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubW9kZSA9IG1vZGU7XHJcblxyXG4gICAgICAgIHJlYWRlci5yZWFkKGZpbGVQYXRoLCBmaWxlVHlwZSB8fCBudWxsKVxyXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudGFibGUgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIGN1cnJlbnRSb3cgYWNjb3JkaW5nIHdpdGggcGFyYW1ldGVyIHJlYWRpbmcgbW9kZSAocmFuZG9tIG9yIHNlcXVlbnRpYWwpXHJcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRSb3cgPSBzZWxmLm1vZGUgPT09ICdyYW5kb20nID8gcmFuZG9tKDAsIHNlbGYudGFibGUubGVuZ3RoKSA6IDA7XHJcbiAgICAgICAgICAgICAgICBfd2hlbkluaXRpYWxpemVkLnJlc29sdmUobnVsbCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnIpIHtcclxuICAgICAgICAgICAgICAgIF93aGVuSW5pdGlhbGl6ZWQucmVqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBPeEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJIZWxwZXIuZXJyb3JDb2RlLlBBUkFNRVRFUlNfRVJST1IsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2VyckhlbHBlci5lcnJvckNvZGUuUEFSQU1FVEVSU19FUlJPUn06IFVuYWJsZSB0byBsb2FkIHBhcmFtZXRlcnMgZmlsZS4gXHJcbiR7ZXJyLm1lc3NhZ2V9YFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gX3doZW5Jbml0aWFsaXplZC5wcm9taXNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBtb2R1bGUuZ2V0TW9kZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGU7XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5yZWFkTmV4dCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLnByZXZSb3cgPSB0aGlzLmN1cnJlbnRSb3c7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3JhbmRvbScpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Um93ID0gcmFuZG9tKDAsIHRoaXMudGFibGUubGVuZ3RoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3crKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRSb3cgPiB0aGlzLnRhYmxlLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Um93ID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5yZWFkUHJldiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJldlJvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Um93ID0gdGhpcy5wcmV2Um93O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgbW9kdWxlLmdldFZhbHVlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICghdGhpcy50YWJsZSB8fCB0aGlzLnRhYmxlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlBBUkFNRVRFUlNfRVJST1IsICdQYXJhbWV0ZXJzIHRhYmxlIGlzIGVtcHR5Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlW3RoaXMuY3VycmVudFJvd107XHJcbiAgICB9O1xyXG5cclxuICAgIG1vZHVsZS5fX2RlZmluZUdldHRlcl9fKCdyb3dzJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUubGVuZ3RoO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZnVuY3Rpb24gcmFuZG9tKG1pbiwgbWF4KSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7OztBQVFBLElBQUFBLFlBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUE0QyxTQUFBRCx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUM1Q0csTUFBTSxDQUFDQyxPQUFPLEdBQUcsVUFBVUMsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBZTtFQUM5RCxJQUFJQyxLQUFLLEdBQUdULE9BQU8sQ0FB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
@@ -1,43 +1,31 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  module.exports = function () {
6
5
  var module = {};
7
-
8
6
  const parse = require('csv-parse/lib/sync');
9
-
10
7
  var fs = require('fs');
11
-
12
8
  var path = require('path');
13
-
14
9
  module.read = function (filePath, extOverride) {
15
10
  return new Promise((resolve, reject) => {
16
11
  var ext = path.extname(filePath);
17
-
18
12
  if (extOverride) {
19
13
  ext = extOverride;
20
14
  }
21
-
22
15
  if (ext !== '.csv' && ext !== '.txt') {
23
16
  reject(new Error('Unsupported file extension: ' + ext));
24
17
  }
25
-
26
18
  var data;
27
-
28
19
  try {
29
20
  data = fs.readFileSync(filePath, 'utf8');
30
21
  } catch (e) {
31
22
  reject(new Error('Unable to read parameters file: ' + e));
32
23
  }
33
-
34
24
  data = data.replace(/\r\r/g, '\r');
35
25
  var bom = false;
36
-
37
26
  if (data.charCodeAt(0) === 0xFEFF) {
38
27
  bom = true;
39
28
  }
40
-
41
29
  try {
42
30
  var table = parse(data, {
43
31
  bom: bom,
@@ -47,11 +35,9 @@ module.exports = function () {
47
35
  } catch (e) {
48
36
  reject(e);
49
37
  }
50
-
51
38
  resolve(table);
52
39
  });
53
40
  };
54
-
55
41
  return module;
56
42
  };
57
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGFyYW0tcmVhZGVyLWNzdi5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicGFyc2UiLCJyZXF1aXJlIiwiZnMiLCJwYXRoIiwicmVhZCIsImZpbGVQYXRoIiwiZXh0T3ZlcnJpZGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImV4dCIsImV4dG5hbWUiLCJFcnJvciIsImRhdGEiLCJyZWFkRmlsZVN5bmMiLCJlIiwicmVwbGFjZSIsImJvbSIsImNoYXJDb2RlQXQiLCJ0YWJsZSIsImNvbHVtbnMiLCJ0cmltIl0sIm1hcHBpbmdzIjoiOzs7O0FBU0FBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixZQUFZO0FBQ3pCLE1BQUlELE1BQU0sR0FBRyxFQUFiOztBQUNBLFFBQU1FLEtBQUssR0FBR0MsT0FBTyxDQUFDLG9CQUFELENBQXJCOztBQUNBLE1BQUlDLEVBQUUsR0FBR0QsT0FBTyxDQUFDLElBQUQsQ0FBaEI7O0FBQ0EsTUFBSUUsSUFBSSxHQUFHRixPQUFPLENBQUMsTUFBRCxDQUFsQjs7QUFFQUgsRUFBQUEsTUFBTSxDQUFDTSxJQUFQLEdBQWMsVUFBU0MsUUFBVCxFQUFtQkMsV0FBbkIsRUFBZ0M7QUFDMUMsV0FBTyxJQUFJQyxPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3BDLFVBQUlDLEdBQUcsR0FBR1AsSUFBSSxDQUFDUSxPQUFMLENBQWFOLFFBQWIsQ0FBVjs7QUFDQSxVQUFJQyxXQUFKLEVBQWlCO0FBQ2JJLFFBQUFBLEdBQUcsR0FBR0osV0FBTjtBQUNIOztBQUNELFVBQUlJLEdBQUcsS0FBSyxNQUFSLElBQWtCQSxHQUFHLEtBQUssTUFBOUIsRUFBc0M7QUFDbENELFFBQUFBLE1BQU0sQ0FBQyxJQUFJRyxLQUFKLENBQVUsaUNBQWlDRixHQUEzQyxDQUFELENBQU47QUFDSDs7QUFFRCxVQUFJRyxJQUFKOztBQUNBLFVBQUk7QUFDQUEsUUFBQUEsSUFBSSxHQUFHWCxFQUFFLENBQUNZLFlBQUgsQ0FBZ0JULFFBQWhCLEVBQTBCLE1BQTFCLENBQVA7QUFDSCxPQUZELENBRUUsT0FBT1UsQ0FBUCxFQUFVO0FBQ1JOLFFBQUFBLE1BQU0sQ0FBQyxJQUFJRyxLQUFKLENBQVUscUNBQXFDRyxDQUEvQyxDQUFELENBQU47QUFDSDs7QUFHREYsTUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUNHLE9BQUwsQ0FBYSxPQUFiLEVBQXNCLElBQXRCLENBQVA7QUFHQSxVQUFJQyxHQUFHLEdBQUcsS0FBVjs7QUFHQSxVQUFJSixJQUFJLENBQUNLLFVBQUwsQ0FBZ0IsQ0FBaEIsTUFBdUIsTUFBM0IsRUFBbUM7QUFDL0JELFFBQUFBLEdBQUcsR0FBRyxJQUFOO0FBQ0g7O0FBRUQsVUFBSTtBQUNBLFlBQUlFLEtBQUssR0FBR25CLEtBQUssQ0FBQ2EsSUFBRCxFQUFPO0FBQUVJLFVBQUFBLEdBQUcsRUFBRUEsR0FBUDtBQUFZRyxVQUFBQSxPQUFPLEVBQUUsSUFBckI7QUFBMkJDLFVBQUFBLElBQUksRUFBRTtBQUFqQyxTQUFQLENBQWpCO0FBQ0gsT0FGRCxDQUVFLE9BQU9OLENBQVAsRUFBVTtBQUNSTixRQUFBQSxNQUFNLENBQUNNLENBQUQsQ0FBTjtBQUNIOztBQUVEUCxNQUFBQSxPQUFPLENBQUNXLEtBQUQsQ0FBUDtBQUNILEtBbENNLENBQVA7QUFtQ0gsR0FwQ0Q7O0FBc0NBLFNBQU9yQixNQUFQO0FBQ0gsQ0E3Q0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG1vZHVsZSA9IHt9O1xyXG4gICAgY29uc3QgcGFyc2UgPSByZXF1aXJlKCdjc3YtcGFyc2UvbGliL3N5bmMnKTtcclxuICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICB2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxuXHJcbiAgICBtb2R1bGUucmVhZCA9IGZ1bmN0aW9uKGZpbGVQYXRoLCBleHRPdmVycmlkZSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHZhciBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICBpZiAoZXh0T3ZlcnJpZGUpIHtcclxuICAgICAgICAgICAgICAgIGV4dCA9IGV4dE92ZXJyaWRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChleHQgIT09ICcuY3N2JyAmJiBleHQgIT09ICcudHh0Jykge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZmlsZSBleHRlbnNpb246ICcgKyBleHQpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGRhdGE7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmOCcpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdVbmFibGUgdG8gcmVhZCBwYXJhbWV0ZXJzIGZpbGU6ICcgKyBlKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIENTVnMgcHJvZHVjZWQgYnkgT1MgWCBFeGNlbCBoYXZlIGhlYWRlciB0ZXJtaW5hdGVkIHdpdGggMGQwZDBhXHJcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1xcclxcci9nLCAnXFxyJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBzdHJpcCBCT00gZm9yIFVURi04XHJcbiAgICAgICAgICAgIHZhciBib20gPSBmYWxzZTtcclxuICAgICAgICAgICAgLy8gY2F0Y2hlcyAweEVGQkJCRiAoVVRGLTggQk9NKSBiZWNhdXNlIHRoZSBidWZmZXItdG8tc3RyaW5nXHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnNpb24gdHJhbnNsYXRlcyBpdCB0byAweEZFRkYgKFVURi0xNiBCT00pXHJcbiAgICAgICAgICAgIGlmIChkYXRhLmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xyXG4gICAgICAgICAgICAgICAgYm9tID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciB0YWJsZSA9IHBhcnNlKGRhdGEsIHsgYm9tOiBib20sIGNvbHVtbnM6IHRydWUsIHRyaW06IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZSh0YWJsZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdfQ==
43
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwicGFyc2UiLCJyZXF1aXJlIiwiZnMiLCJwYXRoIiwicmVhZCIsImZpbGVQYXRoIiwiZXh0T3ZlcnJpZGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImV4dCIsImV4dG5hbWUiLCJFcnJvciIsImRhdGEiLCJyZWFkRmlsZVN5bmMiLCJlIiwicmVwbGFjZSIsImJvbSIsImNoYXJDb2RlQXQiLCJ0YWJsZSIsImNvbHVtbnMiLCJ0cmltIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9wYXJhbS1yZWFkZXItY3N2LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbW9kdWxlID0ge307XHJcbiAgICBjb25zdCBwYXJzZSA9IHJlcXVpcmUoJ2Nzdi1wYXJzZS9saWIvc3luYycpO1xyXG4gICAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcclxuICAgIHZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5cclxuICAgIG1vZHVsZS5yZWFkID0gZnVuY3Rpb24oZmlsZVBhdGgsIGV4dE92ZXJyaWRlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdmFyIGV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgICAgIGlmIChleHRPdmVycmlkZSkge1xyXG4gICAgICAgICAgICAgICAgZXh0ID0gZXh0T3ZlcnJpZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV4dCAhPT0gJy5jc3YnICYmIGV4dCAhPT0gJy50eHQnKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdVbnN1cHBvcnRlZCBmaWxlIGV4dGVuc2lvbjogJyArIGV4dCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgZGF0YTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1VuYWJsZSB0byByZWFkIHBhcmFtZXRlcnMgZmlsZTogJyArIGUpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQ1NWcyBwcm9kdWNlZCBieSBPUyBYIEV4Y2VsIGhhdmUgaGVhZGVyIHRlcm1pbmF0ZWQgd2l0aCAwZDBkMGFcclxuICAgICAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvXFxyXFxyL2csICdcXHInKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHN0cmlwIEJPTSBmb3IgVVRGLThcclxuICAgICAgICAgICAgdmFyIGJvbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBjYXRjaGVzIDB4RUZCQkJGIChVVEYtOCBCT00pIGJlY2F1c2UgdGhlIGJ1ZmZlci10by1zdHJpbmdcclxuICAgICAgICAgICAgLy8gY29udmVyc2lvbiB0cmFuc2xhdGVzIGl0IHRvIDB4RkVGRiAoVVRGLTE2IEJPTSlcclxuICAgICAgICAgICAgaWYgKGRhdGEuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XHJcbiAgICAgICAgICAgICAgICBib20gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gcGFyc2UoZGF0YSwgeyBib206IGJvbSwgY29sdW1uczogdHJ1ZSwgdHJpbTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXNvbHZlKHRhYmxlKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG1vZHVsZTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFTQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixJQUFJRCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0VBQ2YsTUFBTUUsS0FBSyxHQUFHQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7RUFDM0MsSUFBSUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsSUFBSSxDQUFDO0VBQ3RCLElBQUlFLElBQUksR0FBR0YsT0FBTyxDQUFDLE1BQU0sQ0FBQztFQUUxQkgsTUFBTSxDQUFDTSxJQUFJLEdBQUcsVUFBU0MsUUFBUSxFQUFFQyxXQUFXLEVBQUU7SUFDMUMsT0FBTyxJQUFJQyxPQUFPLENBQUMsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDcEMsSUFBSUMsR0FBRyxHQUFHUCxJQUFJLENBQUNRLE9BQU8sQ0FBQ04sUUFBUSxDQUFDO01BQ2hDLElBQUlDLFdBQVcsRUFBRTtRQUNiSSxHQUFHLEdBQUdKLFdBQVc7TUFDckI7TUFDQSxJQUFJSSxHQUFHLEtBQUssTUFBTSxJQUFJQSxHQUFHLEtBQUssTUFBTSxFQUFFO1FBQ2xDRCxNQUFNLENBQUMsSUFBSUcsS0FBSyxDQUFDLDhCQUE4QixHQUFHRixHQUFHLENBQUMsQ0FBQztNQUMzRDtNQUVBLElBQUlHLElBQUk7TUFDUixJQUFJO1FBQ0FBLElBQUksR0FBR1gsRUFBRSxDQUFDWSxZQUFZLENBQUNULFFBQVEsRUFBRSxNQUFNLENBQUM7TUFDNUMsQ0FBQyxDQUFDLE9BQU9VLENBQUMsRUFBRTtRQUNSTixNQUFNLENBQUMsSUFBSUcsS0FBSyxDQUFDLGtDQUFrQyxHQUFHRyxDQUFDLENBQUMsQ0FBQztNQUM3RDtNQUdBRixJQUFJLEdBQUdBLElBQUksQ0FBQ0csT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7TUFHbEMsSUFBSUMsR0FBRyxHQUFHLEtBQUs7TUFHZixJQUFJSixJQUFJLENBQUNLLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUU7UUFDL0JELEdBQUcsR0FBRyxJQUFJO01BQ2Q7TUFFQSxJQUFJO1FBQ0EsSUFBSUUsS0FBSyxHQUFHbkIsS0FBSyxDQUFDYSxJQUFJLEVBQUU7VUFBRUksR0FBRyxFQUFFQSxHQUFHO1VBQUVHLE9BQU8sRUFBRSxJQUFJO1VBQUVDLElBQUksRUFBRTtRQUFLLENBQUMsQ0FBQztNQUNwRSxDQUFDLENBQUMsT0FBT04sQ0FBQyxFQUFFO1FBQ1JOLE1BQU0sQ0FBQ00sQ0FBQyxDQUFDO01BQ2I7TUFFQVAsT0FBTyxDQUFDVyxLQUFLLENBQUM7SUFDbEIsQ0FBQyxDQUFDO0VBQ04sQ0FBQztFQUVELE9BQU9yQixNQUFNO0FBQ2pCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=