oxygen-cli 1.25.0-beta.2 → 1.25.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 (265) hide show
  1. package/.husky/pre-commit +4 -0
  2. package/CHANGELOG.md +65 -0
  3. package/build/core/OxygenCore.js +36 -257
  4. package/build/core/OxygenEvents.js +1 -11
  5. package/build/core/OxygenModule.js +1 -14
  6. package/build/core/OxygenService.js +1 -12
  7. package/build/core/OxygenSubModule.js +1 -10
  8. package/build/core/WebDriverModule.js +1 -30
  9. package/build/core/utils.js +1 -17
  10. package/build/errors/HookError.js +1 -7
  11. package/build/errors/ModuleError.js +1 -7
  12. package/build/errors/ModuleUnavailableError.js +1 -3
  13. package/build/errors/OxygenError.js +1 -33
  14. package/build/errors/ScriptNotFound.js +1 -7
  15. package/build/errors/helper.js +46 -77
  16. package/build/index.js +6 -18
  17. package/build/lib/cli-util.js +28 -90
  18. package/build/lib/cli.js +1 -23
  19. package/build/lib/debugger.js +1 -144
  20. package/build/lib/img-merge.js +1 -15
  21. package/build/lib/launcher.js +1 -28
  22. package/build/lib/moduleRequire.js +1 -4
  23. package/build/lib/param-manager.js +1 -28
  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/util.js +3 -58
  28. package/build/model/case-result.js +1 -2
  29. package/build/model/failure.js +1 -2
  30. package/build/model/status.js +1 -2
  31. package/build/model/step-result.js +1 -2
  32. package/build/model/suite-result.js +1 -2
  33. package/build/model/test-result.js +1 -2
  34. package/build/model/testcase.js +1 -2
  35. package/build/model/testsuite.js +1 -2
  36. package/build/ox_modules/index.js +13 -33
  37. package/build/ox_modules/module-assert.js +8 -24
  38. package/build/ox_modules/module-date.js +3 -8
  39. package/build/ox_modules/module-db.js +7 -28
  40. package/build/ox_modules/module-email.js +10 -36
  41. package/build/ox_modules/module-eyes.js +5 -46
  42. package/build/ox_modules/module-http.js +42 -104
  43. package/build/ox_modules/module-log.js +5 -22
  44. package/build/ox_modules/module-mailinator.js +10 -32
  45. package/build/ox_modules/module-mob/commands/alertAccept.js +1 -2
  46. package/build/ox_modules/module-mob/commands/alertDismiss.js +1 -2
  47. package/build/ox_modules/module-mob/commands/assertAlert.js +1 -6
  48. package/build/ox_modules/module-mob/commands/assertText.js +1 -3
  49. package/build/ox_modules/module-mob/commands/assertTitle.js +1 -4
  50. package/build/ox_modules/module-mob/commands/assertValue.js +9 -15
  51. package/build/ox_modules/module-mob/commands/back.js +1 -2
  52. package/build/ox_modules/module-mob/commands/clear.js +1 -4
  53. package/build/ox_modules/module-mob/commands/click.js +3 -4
  54. package/build/ox_modules/module-mob/commands/clickHidden.js +3 -9
  55. package/build/ox_modules/module-mob/commands/clickLong.js +1 -2
  56. package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +1 -4
  57. package/build/ox_modules/module-mob/commands/closeApp.js +1 -2
  58. package/build/ox_modules/module-mob/commands/debug.js +2 -2
  59. package/build/ox_modules/module-mob/commands/dragAndDrop.js +1 -2
  60. package/build/ox_modules/module-mob/commands/enableNetwork.js +4 -12
  61. package/build/ox_modules/module-mob/commands/execute.js +1 -2
  62. package/build/ox_modules/module-mob/commands/findElement.js +1 -3
  63. package/build/ox_modules/module-mob/commands/findElements.js +1 -4
  64. package/build/ox_modules/module-mob/commands/getAlertText.js +1 -2
  65. package/build/ox_modules/module-mob/commands/getAppiumLogs.js +1 -2
  66. package/build/ox_modules/module-mob/commands/getBrowserLogs.js +1 -10
  67. package/build/ox_modules/module-mob/commands/getCurrentActivity.js +1 -2
  68. package/build/ox_modules/module-mob/commands/getCurrentPackage.js +1 -2
  69. package/build/ox_modules/module-mob/commands/getDeviceLogs.js +1 -9
  70. package/build/ox_modules/module-mob/commands/getDeviceTime.js +1 -2
  71. package/build/ox_modules/module-mob/commands/getLocation.js +1 -2
  72. package/build/ox_modules/module-mob/commands/getSource.js +1 -2
  73. package/build/ox_modules/module-mob/commands/getText.js +1 -4
  74. package/build/ox_modules/module-mob/commands/getTitle.js +1 -2
  75. package/build/ox_modules/module-mob/commands/getUrl.js +1 -2
  76. package/build/ox_modules/module-mob/commands/getValue.js +5 -9
  77. package/build/ox_modules/module-mob/commands/getWindowHandles.js +1 -2
  78. package/build/ox_modules/module-mob/commands/hideKeyboard.js +1 -2
  79. package/build/ox_modules/module-mob/commands/index.js +19 -94
  80. package/build/ox_modules/module-mob/commands/installApp.js +1 -2
  81. package/build/ox_modules/module-mob/commands/isAppInstalled.js +1 -2
  82. package/build/ox_modules/module-mob/commands/isCheckable.js +1 -2
  83. package/build/ox_modules/module-mob/commands/isChecked.js +1 -2
  84. package/build/ox_modules/module-mob/commands/isClickable.js +1 -2
  85. package/build/ox_modules/module-mob/commands/isExist.js +1 -3
  86. package/build/ox_modules/module-mob/commands/isSelected.js +1 -2
  87. package/build/ox_modules/module-mob/commands/isVisible.js +1 -3
  88. package/build/ox_modules/module-mob/commands/isWebViewContext.js +1 -2
  89. package/build/ox_modules/module-mob/commands/launchApp.js +1 -2
  90. package/build/ox_modules/module-mob/commands/longPressKeyCode.js +1 -2
  91. package/build/ox_modules/module-mob/commands/open.js +1 -3
  92. package/build/ox_modules/module-mob/commands/pause.js +1 -2
  93. package/build/ox_modules/module-mob/commands/removeApp.js +1 -2
  94. package/build/ox_modules/module-mob/commands/resetApp.js +1 -2
  95. package/build/ox_modules/module-mob/commands/scrollIntoElement.js +1 -6
  96. package/build/ox_modules/module-mob/commands/scrollIntoView.js +1 -2
  97. package/build/ox_modules/module-mob/commands/select.js +1 -4
  98. package/build/ox_modules/module-mob/commands/selectFrame.js +1 -4
  99. package/build/ox_modules/module-mob/commands/selectWindow.js +5 -26
  100. package/build/ox_modules/module-mob/commands/sendKeys.js +6 -9
  101. package/build/ox_modules/module-mob/commands/setContext.js +1 -2
  102. package/build/ox_modules/module-mob/commands/setNativeContext.js +1 -2
  103. package/build/ox_modules/module-mob/commands/setTimeout.js +1 -2
  104. package/build/ox_modules/module-mob/commands/setWebViewContext.js +3 -6
  105. package/build/ox_modules/module-mob/commands/shake.js +1 -2
  106. package/build/ox_modules/module-mob/commands/smsClickLink.js +1 -2
  107. package/build/ox_modules/module-mob/commands/smsGetText.js +3 -6
  108. package/build/ox_modules/module-mob/commands/swipe.js +1 -2
  109. package/build/ox_modules/module-mob/commands/swipeElement.js +1 -2
  110. package/build/ox_modules/module-mob/commands/swipeScreen.js +1 -2
  111. package/build/ox_modules/module-mob/commands/takeScreenshot.js +1 -2
  112. package/build/ox_modules/module-mob/commands/tap.js +1 -2
  113. package/build/ox_modules/module-mob/commands/type.js +3 -7
  114. package/build/ox_modules/module-mob/commands/unlockPattern.js +9 -10
  115. package/build/ox_modules/module-mob/commands/waitForExist.js +1 -2
  116. package/build/ox_modules/module-mob/commands/waitForInteractable.js +1 -3
  117. package/build/ox_modules/module-mob/commands/waitForVisible.js +1 -2
  118. package/build/ox_modules/module-mob.js +72 -142
  119. package/build/ox_modules/module-pdf.js +23 -62
  120. package/build/ox_modules/module-proxy.js +8 -68
  121. package/build/ox_modules/module-serial.js +7 -32
  122. package/build/ox_modules/module-shell.js +8 -27
  123. package/build/ox_modules/module-soap.js +14 -47
  124. package/build/ox_modules/module-twilio.js +10 -53
  125. package/build/ox_modules/module-utils.js +16 -51
  126. package/build/ox_modules/module-web/commands/alertAccept.js +1 -2
  127. package/build/ox_modules/module-web/commands/alertDismiss.js +1 -2
  128. package/build/ox_modules/module-web/commands/assertAlert.js +1 -6
  129. package/build/ox_modules/module-web/commands/assertExist.js +1 -2
  130. package/build/ox_modules/module-web/commands/assertSelectedLabel.js +1 -4
  131. package/build/ox_modules/module-web/commands/assertSelectedValue.js +1 -3
  132. package/build/ox_modules/module-web/commands/assertText.js +1 -3
  133. package/build/ox_modules/module-web/commands/assertTextNotPresent.js +1 -6
  134. package/build/ox_modules/module-web/commands/assertTextPresent.js +1 -6
  135. package/build/ox_modules/module-web/commands/assertTitle.js +1 -3
  136. package/build/ox_modules/module-web/commands/assertValue.js +1 -3
  137. package/build/ox_modules/module-web/commands/back.js +1 -2
  138. package/build/ox_modules/module-web/commands/clear.js +1 -5
  139. package/build/ox_modules/module-web/commands/click.js +4 -13
  140. package/build/ox_modules/module-web/commands/clickHidden.js +2 -7
  141. package/build/ox_modules/module-web/commands/closeWindow.js +1 -2
  142. package/build/ox_modules/module-web/commands/debug.js +2 -2
  143. package/build/ox_modules/module-web/commands/deleteCookies.js +1 -2
  144. package/build/ox_modules/module-web/commands/deselect.js +1 -2
  145. package/build/ox_modules/module-web/commands/doubleClick.js +3 -9
  146. package/build/ox_modules/module-web/commands/dragAndDrop.js +1 -2
  147. package/build/ox_modules/module-web/commands/execute.js +1 -2
  148. package/build/ox_modules/module-web/commands/fileBrowse.js +4 -10
  149. package/build/ox_modules/module-web/commands/findElement.js +1 -3
  150. package/build/ox_modules/module-web/commands/findElements.js +1 -4
  151. package/build/ox_modules/module-web/commands/fullscreenWindow.js +1 -2
  152. package/build/ox_modules/module-web/commands/getAlertText.js +1 -2
  153. package/build/ox_modules/module-web/commands/getAttribute.js +1 -4
  154. package/build/ox_modules/module-web/commands/getBrowserLogs.js +1 -3
  155. package/build/ox_modules/module-web/commands/getCookies.js +1 -2
  156. package/build/ox_modules/module-web/commands/getCssValue.js +1 -4
  157. package/build/ox_modules/module-web/commands/getElementCount.js +1 -2
  158. package/build/ox_modules/module-web/commands/getHTML.js +1 -2
  159. package/build/ox_modules/module-web/commands/getSource.js +1 -2
  160. package/build/ox_modules/module-web/commands/getText.js +1 -4
  161. package/build/ox_modules/module-web/commands/getTitle.js +1 -2
  162. package/build/ox_modules/module-web/commands/getUrl.js +1 -2
  163. package/build/ox_modules/module-web/commands/getValue.js +1 -5
  164. package/build/ox_modules/module-web/commands/getWindowHandles.js +1 -2
  165. package/build/ox_modules/module-web/commands/getWindowSize.js +1 -2
  166. package/build/ox_modules/module-web/commands/getXMLPageSource.js +1 -5
  167. package/build/ox_modules/module-web/commands/index.js +26 -99
  168. package/build/ox_modules/module-web/commands/isAlertPresent.js +1 -2
  169. package/build/ox_modules/module-web/commands/isChecked.js +1 -2
  170. package/build/ox_modules/module-web/commands/isExist.js +1 -3
  171. package/build/ox_modules/module-web/commands/isInteractable.js +33 -0
  172. package/build/ox_modules/module-web/commands/isSelected.js +1 -2
  173. package/build/ox_modules/module-web/commands/isVisible.js +1 -3
  174. package/build/ox_modules/module-web/commands/makeVisible.js +2 -10
  175. package/build/ox_modules/module-web/commands/maximizeWindow.js +1 -2
  176. package/build/ox_modules/module-web/commands/minimizeWindow.js +1 -2
  177. package/build/ox_modules/module-web/commands/newWindow.js +1 -2
  178. package/build/ox_modules/module-web/commands/open.js +1 -4
  179. package/build/ox_modules/module-web/commands/pause.js +1 -2
  180. package/build/ox_modules/module-web/commands/point.js +1 -2
  181. package/build/ox_modules/module-web/commands/pointJS.js +2 -8
  182. package/build/ox_modules/module-web/commands/refresh.js +1 -2
  183. package/build/ox_modules/module-web/commands/rightClick.js +3 -8
  184. package/build/ox_modules/module-web/commands/rightClickActions.js +1 -2
  185. package/build/ox_modules/module-web/commands/scrollToElement.js +1 -2
  186. package/build/ox_modules/module-web/commands/select.js +1 -5
  187. package/build/ox_modules/module-web/commands/selectFrame.js +1 -3
  188. package/build/ox_modules/module-web/commands/selectWindow.js +5 -26
  189. package/build/ox_modules/module-web/commands/sendKeys.js +3 -6
  190. package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -2
  191. package/build/ox_modules/module-web/commands/setTimeout.js +1 -2
  192. package/build/ox_modules/module-web/commands/setWindowSize.js +1 -2
  193. package/build/ox_modules/module-web/commands/takeScreenshot.js +3 -5
  194. package/build/ox_modules/module-web/commands/type.js +1 -5
  195. package/build/ox_modules/module-web/commands/waitForAngular.js +6 -11
  196. package/build/ox_modules/module-web/commands/waitForExist.js +1 -2
  197. package/build/ox_modules/module-web/commands/waitForInteractable.js +1 -2
  198. package/build/ox_modules/module-web/commands/waitForNotExist.js +1 -8
  199. package/build/ox_modules/module-web/commands/waitForNotText.js +3 -5
  200. package/build/ox_modules/module-web/commands/waitForNotValue.js +3 -5
  201. package/build/ox_modules/module-web/commands/waitForText.js +3 -5
  202. package/build/ox_modules/module-web/commands/waitForValue.js +3 -5
  203. package/build/ox_modules/module-web/commands/waitForVisible.js +1 -2
  204. package/build/ox_modules/module-web/commands/waitForWindow.js +4 -21
  205. package/build/ox_modules/module-web.js +86 -192
  206. package/build/ox_modules/module-win/commands/assertText.js +1 -3
  207. package/build/ox_modules/module-win/commands/assertTitle.js +1 -4
  208. package/build/ox_modules/module-win/commands/assertValue.js +9 -15
  209. package/build/ox_modules/module-win/commands/back.js +1 -2
  210. package/build/ox_modules/module-win/commands/clear.js +1 -4
  211. package/build/ox_modules/module-win/commands/click.js +1 -2
  212. package/build/ox_modules/module-win/commands/clickLong.js +1 -2
  213. package/build/ox_modules/module-win/commands/clickMultipleTimes.js +1 -4
  214. package/build/ox_modules/module-win/commands/findElement.js +1 -3
  215. package/build/ox_modules/module-win/commands/findElements.js +1 -4
  216. package/build/ox_modules/module-win/commands/getAppiumLogs.js +1 -2
  217. package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +1 -2
  218. package/build/ox_modules/module-win/commands/getLocation.js +1 -2
  219. package/build/ox_modules/module-win/commands/getSource.js +1 -2
  220. package/build/ox_modules/module-win/commands/getText.js +1 -4
  221. package/build/ox_modules/module-win/commands/getValue.js +5 -9
  222. package/build/ox_modules/module-win/commands/getWindowHandles.js +1 -2
  223. package/build/ox_modules/module-win/commands/index.js +5 -43
  224. package/build/ox_modules/module-win/commands/isCheckable.js +1 -2
  225. package/build/ox_modules/module-win/commands/isChecked.js +1 -2
  226. package/build/ox_modules/module-win/commands/isClickable.js +1 -2
  227. package/build/ox_modules/module-win/commands/isExist.js +1 -3
  228. package/build/ox_modules/module-win/commands/isSelected.js +1 -2
  229. package/build/ox_modules/module-win/commands/isVisible.js +1 -3
  230. package/build/ox_modules/module-win/commands/open.js +1 -2
  231. package/build/ox_modules/module-win/commands/pause.js +1 -2
  232. package/build/ox_modules/module-win/commands/rightClick.js +1 -2
  233. package/build/ox_modules/module-win/commands/selectWindow.js +1 -15
  234. package/build/ox_modules/module-win/commands/sendKeys.js +1 -4
  235. package/build/ox_modules/module-win/commands/setTimeout.js +1 -2
  236. package/build/ox_modules/module-win/commands/takeScreenshot.js +1 -2
  237. package/build/ox_modules/module-win/commands/tap.js +1 -2
  238. package/build/ox_modules/module-win/commands/type.js +1 -4
  239. package/build/ox_modules/module-win/commands/waitForExist.js +1 -2
  240. package/build/ox_modules/module-win/commands/waitForInteractable.js +1 -4
  241. package/build/ox_modules/module-win/commands/waitForVisible.js +1 -2
  242. package/build/ox_modules/module-win.js +48 -87
  243. package/build/ox_modules/utils.js +22 -76
  244. package/build/ox_reporters/reporter-excel.js +1 -58
  245. package/build/ox_reporters/reporter-html.js +1 -28
  246. package/build/ox_reporters/reporter-json.js +1 -14
  247. package/build/ox_reporters/reporter-junit.js +1 -24
  248. package/build/ox_reporters/reporter-pdf.js +1 -19
  249. package/build/ox_reporters/reporter-xml.js +1 -17
  250. package/build/ox_services/service-devtools/submodule-network.js +3 -84
  251. package/build/ox_services/service-devtools.js +1 -23
  252. package/build/reporter/FileReporterBase.js +5 -44
  253. package/build/reporter/ReportAggregator.js +1 -65
  254. package/build/reporter/ReporterBase.js +1 -6
  255. package/build/runners/WorkerProcess.js +1 -99
  256. package/build/runners/cucumber/CucumberEventListener.js +4 -29
  257. package/build/runners/cucumber/CucumberReporter.js +1 -56
  258. package/build/runners/cucumber/CucumberWorker.js +1 -66
  259. package/build/runners/cucumber/index.js +1 -30
  260. package/build/runners/cucumber/worker.js +1 -18
  261. package/build/runners/index.js +1 -6
  262. package/build/runners/oxygen/OxygenWorker.js +20 -54
  263. package/build/runners/oxygen/index.js +17 -177
  264. package/build/runners/oxygen/worker.js +2 -25
  265. package/package.json +28 -29
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  /*
6
5
  * Copyright (C) 2015-present CloudBeat Limited
7
6
  *
@@ -21,11 +20,9 @@ require("source-map-support/register");
21
20
  * win.waitForInteractable("id=UserName");//Waits for an element is clickable in DOM.
22
21
  */
23
22
  const interactableClassNames = ['Edit', 'Button'];
24
-
25
23
  module.exports = async function (locator, timeout) {
26
24
  this.helpers.assertArgumentTimeout(timeout, 'timeout');
27
25
  const el = await this.helpers.getElement(locator, false, timeout);
28
-
29
26
  try {
30
27
  await this.driver.waitUntil(async () => {
31
28
  const isControlElement = await el.getAttribute('IsControlElement');
@@ -40,4 +37,4 @@ module.exports = async function (locator, timeout) {
40
37
  throw new this.OxError(this.errHelper.errorCode.ELEMENT_NOT_INTERACTABLE, `Element ${locator} is not interactable`);
41
38
  }
42
39
  };
43
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4vY29tbWFuZHMvd2FpdEZvckludGVyYWN0YWJsZS5qcyJdLCJuYW1lcyI6WyJpbnRlcmFjdGFibGVDbGFzc05hbWVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImxvY2F0b3IiLCJ0aW1lb3V0IiwiaGVscGVycyIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImVsIiwiZ2V0RWxlbWVudCIsImRyaXZlciIsIndhaXRVbnRpbCIsImlzQ29udHJvbEVsZW1lbnQiLCJnZXRBdHRyaWJ1dGUiLCJpc0VuYWJsZWQiLCJpc0tleWJvYXJkRm9jdXNhYmxlIiwiY2xhc3NOYW1lIiwiaW5jbHVkZXMiLCJ3YWl0Rm9yVGltZW91dCIsImUiLCJPeEVycm9yIiwiZXJySGVscGVyIiwiZXJyb3JDb2RlIiwiRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNQSxzQkFBc0IsR0FBRyxDQUFDLE1BQUQsRUFBUyxRQUFULENBQS9COztBQUNBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUIsZ0JBQWVDLE9BQWYsRUFBd0JDLE9BQXhCLEVBQWlDO0FBQzlDLE9BQUtDLE9BQUwsQ0FBYUMscUJBQWIsQ0FBbUNGLE9BQW5DLEVBQTRDLFNBQTVDO0FBQ0EsUUFBTUcsRUFBRSxHQUFHLE1BQU0sS0FBS0YsT0FBTCxDQUFhRyxVQUFiLENBQXdCTCxPQUF4QixFQUFpQyxLQUFqQyxFQUF3Q0MsT0FBeEMsQ0FBakI7O0FBQ0EsTUFBSTtBQUNBLFVBQU0sS0FBS0ssTUFBTCxDQUFZQyxTQUFaLENBQXNCLFlBQVc7QUFDbkMsWUFBTUMsZ0JBQWdCLEdBQUcsTUFBTUosRUFBRSxDQUFDSyxZQUFILENBQWdCLGtCQUFoQixDQUEvQjtBQUNBLFlBQU1DLFNBQVMsR0FBRyxNQUFNTixFQUFFLENBQUNLLFlBQUgsQ0FBZ0IsV0FBaEIsQ0FBeEI7QUFDQSxZQUFNRSxtQkFBbUIsR0FBRyxNQUFNUCxFQUFFLENBQUNLLFlBQUgsQ0FBZ0IscUJBQWhCLENBQWxDO0FBQ0EsWUFBTUcsU0FBUyxHQUFHLE1BQU1SLEVBQUUsQ0FBQ0ssWUFBSCxDQUFnQixXQUFoQixDQUF4QjtBQUVBLGFBQVFELGdCQUFnQixJQUFJRSxTQUFwQixJQUFpQ0MsbUJBQWpDLElBQXdEZCxzQkFBc0IsQ0FBQ2dCLFFBQXZCLENBQWdDRCxTQUFoQyxDQUFoRTtBQUNILEtBUEssRUFRTjtBQUFFWCxNQUFBQSxPQUFPLEVBQUdBLE9BQU8sR0FBR0EsT0FBSCxHQUFhLEtBQUthO0FBQXJDLEtBUk0sQ0FBTjtBQVNILEdBVkQsQ0FVRSxPQUFPQyxDQUFQLEVBQVU7QUFDUixVQUFNLElBQUksS0FBS0MsT0FBVCxDQUFpQixLQUFLQyxTQUFMLENBQWVDLFNBQWYsQ0FBeUJDLHdCQUExQyxFQUFxRSxXQUFVbkIsT0FBUSxzQkFBdkYsQ0FBTjtBQUNIO0FBQ0osQ0FoQkQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAc3VtbWFyeSBXYWl0cyBmb3IgZWxlbWVudCB0byBiZWNvbWUgaW50ZXJhY3RhYmxlLlxyXG4gKiBAZnVuY3Rpb24gd2FpdEZvckludGVyYWN0YWJsZVxyXG4gKiBAcGFyYW0ge1N0cmluZ3xFbGVtZW50fSBsb2NhdG9yIC0gQW4gZWxlbWVudCBsb2NhdG9yLlxyXG4gKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICogd2luLmluaXQoKTsvL09wZW5zIGJyb3dzZXIgc2Vzc2lvbi5cclxuICogd2luLndhaXRGb3JJbnRlcmFjdGFibGUoXCJpZD1Vc2VyTmFtZVwiKTsvL1dhaXRzIGZvciBhbiBlbGVtZW50IGlzIGNsaWNrYWJsZSBpbiBET00uXHJcbiAqL1xyXG5jb25zdCBpbnRlcmFjdGFibGVDbGFzc05hbWVzID0gWydFZGl0JywgJ0J1dHRvbiddO1xyXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jIGZ1bmN0aW9uKGxvY2F0b3IsIHRpbWVvdXQpIHtcclxuICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgIGNvbnN0IGVsID0gYXdhaXQgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQobG9jYXRvciwgZmFsc2UsIHRpbWVvdXQpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzQ29udHJvbEVsZW1lbnQgPSBhd2FpdCBlbC5nZXRBdHRyaWJ1dGUoJ0lzQ29udHJvbEVsZW1lbnQnKTtcclxuICAgICAgICAgICAgY29uc3QgaXNFbmFibGVkID0gYXdhaXQgZWwuZ2V0QXR0cmlidXRlKCdJc0VuYWJsZWQnKTtcclxuICAgICAgICAgICAgY29uc3QgaXNLZXlib2FyZEZvY3VzYWJsZSA9IGF3YWl0IGVsLmdldEF0dHJpYnV0ZSgnSXNLZXlib2FyZEZvY3VzYWJsZScpO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBhd2FpdCBlbC5nZXRBdHRyaWJ1dGUoJ0NsYXNzTmFtZScpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIChpc0NvbnRyb2xFbGVtZW50IHx8IGlzRW5hYmxlZCB8fCBpc0tleWJvYXJkRm9jdXNhYmxlIHx8IGludGVyYWN0YWJsZUNsYXNzTmFtZXMuaW5jbHVkZXMoY2xhc3NOYW1lKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IHRpbWVvdXQ6ICh0aW1lb3V0ID8gdGltZW91dCA6IHRoaXMud2FpdEZvclRpbWVvdXQpIH0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRocm93IG5ldyB0aGlzLk94RXJyb3IodGhpcy5lcnJIZWxwZXIuZXJyb3JDb2RlLkVMRU1FTlRfTk9UX0lOVEVSQUNUQUJMRSwgYEVsZW1lbnQgJHtsb2NhdG9yfSBpcyBub3QgaW50ZXJhY3RhYmxlYCk7XHJcbiAgICB9XHJcbn07XHJcbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnRlcmFjdGFibGVDbGFzc05hbWVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImxvY2F0b3IiLCJ0aW1lb3V0IiwiaGVscGVycyIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImVsIiwiZ2V0RWxlbWVudCIsImRyaXZlciIsIndhaXRVbnRpbCIsImlzQ29udHJvbEVsZW1lbnQiLCJnZXRBdHRyaWJ1dGUiLCJpc0VuYWJsZWQiLCJpc0tleWJvYXJkRm9jdXNhYmxlIiwiY2xhc3NOYW1lIiwiaW5jbHVkZXMiLCJ3YWl0Rm9yVGltZW91dCIsImUiLCJPeEVycm9yIiwiZXJySGVscGVyIiwiZXJyb3JDb2RlIiwiRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL294X21vZHVsZXMvbW9kdWxlLXdpbi9jb21tYW5kcy93YWl0Rm9ySW50ZXJhY3RhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBzdW1tYXJ5IFdhaXRzIGZvciBlbGVtZW50IHRvIGJlY29tZSBpbnRlcmFjdGFibGUuXHJcbiAqIEBmdW5jdGlvbiB3YWl0Rm9ySW50ZXJhY3RhYmxlXHJcbiAqIEBwYXJhbSB7U3RyaW5nfEVsZW1lbnR9IGxvY2F0b3IgLSBBbiBlbGVtZW50IGxvY2F0b3IuXHJcbiAqIEBwYXJhbSB7TnVtYmVyPX0gdGltZW91dCAtIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0IGlzIDYwIHNlY29uZHMuXHJcbiAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gKiB3aW4uaW5pdCgpOy8vT3BlbnMgYnJvd3NlciBzZXNzaW9uLlxyXG4gKiB3aW4ud2FpdEZvckludGVyYWN0YWJsZShcImlkPVVzZXJOYW1lXCIpOy8vV2FpdHMgZm9yIGFuIGVsZW1lbnQgaXMgY2xpY2thYmxlIGluIERPTS5cclxuICovXHJcbmNvbnN0IGludGVyYWN0YWJsZUNsYXNzTmFtZXMgPSBbJ0VkaXQnLCAnQnV0dG9uJ107XHJcbm1vZHVsZS5leHBvcnRzID0gYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgdGltZW91dCkge1xyXG4gICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgY29uc3QgZWwgPSBhd2FpdCB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudChsb2NhdG9yLCBmYWxzZSwgdGltZW91dCk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXNDb250cm9sRWxlbWVudCA9IGF3YWl0IGVsLmdldEF0dHJpYnV0ZSgnSXNDb250cm9sRWxlbWVudCcpO1xyXG4gICAgICAgICAgICBjb25zdCBpc0VuYWJsZWQgPSBhd2FpdCBlbC5nZXRBdHRyaWJ1dGUoJ0lzRW5hYmxlZCcpO1xyXG4gICAgICAgICAgICBjb25zdCBpc0tleWJvYXJkRm9jdXNhYmxlID0gYXdhaXQgZWwuZ2V0QXR0cmlidXRlKCdJc0tleWJvYXJkRm9jdXNhYmxlJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGF3YWl0IGVsLmdldEF0dHJpYnV0ZSgnQ2xhc3NOYW1lJyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gKGlzQ29udHJvbEVsZW1lbnQgfHwgaXNFbmFibGVkIHx8IGlzS2V5Ym9hcmRGb2N1c2FibGUgfHwgaW50ZXJhY3RhYmxlQ2xhc3NOYW1lcy5pbmNsdWRlcyhjbGFzc05hbWUpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgdGltZW91dDogKHRpbWVvdXQgPyB0aW1lb3V0IDogdGhpcy53YWl0Rm9yVGltZW91dCkgfSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IHRoaXMuT3hFcnJvcih0aGlzLmVyckhlbHBlci5lcnJvckNvZGUuRUxFTUVOVF9OT1RfSU5URVJBQ1RBQkxFLCBgRWxlbWVudCAke2xvY2F0b3J9IGlzIG5vdCBpbnRlcmFjdGFibGVgKTtcclxuICAgIH1cclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1BLHNCQUFzQixHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztBQUNqREMsTUFBTSxDQUFDQyxPQUFPLEdBQUcsZ0JBQWVDLE9BQU8sRUFBRUMsT0FBTyxFQUFFO0VBQzlDLElBQUksQ0FBQ0MsT0FBTyxDQUFDQyxxQkFBcUIsQ0FBQ0YsT0FBTyxFQUFFLFNBQVMsQ0FBQztFQUN0RCxNQUFNRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUNGLE9BQU8sQ0FBQ0csVUFBVSxDQUFDTCxPQUFPLEVBQUUsS0FBSyxFQUFFQyxPQUFPLENBQUM7RUFDakUsSUFBSTtJQUNBLE1BQU0sSUFBSSxDQUFDSyxNQUFNLENBQUNDLFNBQVMsQ0FBQyxZQUFXO01BQ25DLE1BQU1DLGdCQUFnQixHQUFHLE1BQU1KLEVBQUUsQ0FBQ0ssWUFBWSxDQUFDLGtCQUFrQixDQUFDO01BQ2xFLE1BQU1DLFNBQVMsR0FBRyxNQUFNTixFQUFFLENBQUNLLFlBQVksQ0FBQyxXQUFXLENBQUM7TUFDcEQsTUFBTUUsbUJBQW1CLEdBQUcsTUFBTVAsRUFBRSxDQUFDSyxZQUFZLENBQUMscUJBQXFCLENBQUM7TUFDeEUsTUFBTUcsU0FBUyxHQUFHLE1BQU1SLEVBQUUsQ0FBQ0ssWUFBWSxDQUFDLFdBQVcsQ0FBQztNQUVwRCxPQUFRRCxnQkFBZ0IsSUFBSUUsU0FBUyxJQUFJQyxtQkFBbUIsSUFBSWQsc0JBQXNCLENBQUNnQixRQUFRLENBQUNELFNBQVMsQ0FBQztJQUM5RyxDQUFDLEVBQ0Q7TUFBRVgsT0FBTyxFQUFHQSxPQUFPLEdBQUdBLE9BQU8sR0FBRyxJQUFJLENBQUNhO0lBQWdCLENBQUMsQ0FBQztFQUMzRCxDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFO0lBQ1IsTUFBTSxJQUFJLElBQUksQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxTQUFTLENBQUNDLHdCQUF3QixFQUFHLFdBQVVuQixPQUFRLHNCQUFxQixDQUFDO0VBQ3ZIO0FBQ0osQ0FBQyJ9
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  /*
6
5
  * Copyright (C) 2015-present CloudBeat Limited
7
6
  *
@@ -21,4 +20,4 @@ module.exports = async function (locator, timeout) {
21
20
  this.helpers.assertArgumentTimeout(timeout, 'timeout');
22
21
  await this.helpers.getElement(locator, true, timeout);
23
22
  };
24
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4vY29tbWFuZHMvd2FpdEZvclZpc2libGUuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsImxvY2F0b3IiLCJ0aW1lb3V0IiwiaGVscGVycyIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImdldEVsZW1lbnQiXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsZ0JBQWVDLE9BQWYsRUFBd0JDLE9BQXhCLEVBQWlDO0FBQzlDLE9BQUtDLE9BQUwsQ0FBYUMscUJBQWIsQ0FBbUNGLE9BQW5DLEVBQTRDLFNBQTVDO0FBQ0EsUUFBTSxLQUFLQyxPQUFMLENBQWFFLFVBQWIsQ0FBd0JKLE9BQXhCLEVBQWlDLElBQWpDLEVBQXVDQyxPQUF2QyxDQUFOO0FBQ0gsQ0FIRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBzdW1tYXJ5IFdhaXRzIGZvciBlbGVtZW50IHRvIGJlY29tZSB2aXNpYmxlLlxyXG4gKiBAZnVuY3Rpb24gd2FpdEZvclZpc2libGVcclxuICogQHBhcmFtIHtTdHJpbmd8RWxlbWVudH0gbG9jYXRvciAtIEVsZW1lbnQgbG9jYXRvci5cclxuICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgdGhlIGVsZW1lbnQuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gYXN5bmMgZnVuY3Rpb24obG9jYXRvciwgdGltZW91dCkge1xyXG4gICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCh0aW1lb3V0LCAndGltZW91dCcpO1xyXG4gICAgYXdhaXQgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQobG9jYXRvciwgdHJ1ZSwgdGltZW91dCk7XHJcbn07XHJcbiJdfQ==
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibG9jYXRvciIsInRpbWVvdXQiLCJoZWxwZXJzIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0IiwiZ2V0RWxlbWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4vY29tbWFuZHMvd2FpdEZvclZpc2libGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQHN1bW1hcnkgV2FpdHMgZm9yIGVsZW1lbnQgdG8gYmVjb21lIHZpc2libGUuXHJcbiAqIEBmdW5jdGlvbiB3YWl0Rm9yVmlzaWJsZVxyXG4gKiBAcGFyYW0ge1N0cmluZ3xFbGVtZW50fSBsb2NhdG9yIC0gRWxlbWVudCBsb2NhdG9yLlxyXG4gKiBAcGFyYW0ge051bWJlcj19IHRpbWVvdXQgLSBUaW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgZWxlbWVudC4gRGVmYXVsdCBpcyA2MCBzZWNvbmRzLlxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBhc3luYyBmdW5jdGlvbihsb2NhdG9yLCB0aW1lb3V0KSB7XHJcbiAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0KHRpbWVvdXQsICd0aW1lb3V0Jyk7XHJcbiAgICBhd2FpdCB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudChsb2NhdG9yLCB0cnVlLCB0aW1lb3V0KTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBQSxNQUFNLENBQUNDLE9BQU8sR0FBRyxnQkFBZUMsT0FBTyxFQUFFQyxPQUFPLEVBQUU7RUFDOUMsSUFBSSxDQUFDQyxPQUFPLENBQUNDLHFCQUFxQixDQUFDRixPQUFPLEVBQUUsU0FBUyxDQUFDO0VBQ3RELE1BQU0sSUFBSSxDQUFDQyxPQUFPLENBQUNFLFVBQVUsQ0FBQ0osT0FBTyxFQUFFLElBQUksRUFBRUMsT0FBTyxDQUFDO0FBQ3pELENBQUMifQ==
@@ -6,7 +6,9 @@
6
6
  * the Free Software Foundation, either version 3 of the License, or
7
7
  * (at your option) any later version.
8
8
  */
9
+
9
10
  'use strict';
11
+
10
12
  /**
11
13
  * @name win
12
14
  * @description Provides methods for Windows native applications automation.
@@ -24,39 +26,26 @@
24
26
  * * `regex:PATTERN` - Match using regular expression.
25
27
  * * `PATTERN` - Verbatim matching.
26
28
  */
27
-
28
29
  Object.defineProperty(exports, "__esModule", {
29
30
  value: true
30
31
  });
31
32
  exports.default = void 0;
32
-
33
33
  require("source-map-support/register");
34
-
35
34
  var _url = _interopRequireDefault(require("url"));
36
-
37
35
  var wdio = _interopRequireWildcard(require("webdriverio"));
38
-
39
36
  var _WebDriverModule = _interopRequireDefault(require("../core/WebDriverModule"));
40
-
41
37
  var _utils = _interopRequireDefault(require("./utils"));
42
-
43
38
  var _helper = _interopRequireDefault(require("../errors/helper"));
44
-
45
39
  var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
46
-
47
40
  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); }
48
-
49
41
  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; }
50
-
51
42
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
52
-
53
43
  const MODULE_NAME = 'win';
54
44
  const DEFAULT_APPIUM_URL = 'http://localhost:4723/wd/hub';
55
45
  const DEFAULT_APP = 'Root';
56
46
  const NO_SCREENSHOT_COMMANDS = ['init', 'assertAlert'];
57
47
  const ACTION_COMMANDS = ['open', 'tap', 'click', 'swipe', 'submit', 'setValue'];
58
48
  const DEFAULT_WAIT_TIMEOUT = 60 * 1000; // default 60s wait timeout
59
-
60
49
  const WINDOWS_STANDARD_APP_IDS = {
61
50
  Calculator: 'Microsoft.WindowsCalculator_8wekyb3d8bbwe!App',
62
51
  AlarmClock: 'Microsoft.WindowsAlarms_8wekyb3d8bbwe!App',
@@ -65,7 +54,6 @@ const WINDOWS_STANDARD_APP_IDS = {
65
54
  Paint3D: 'Microsoft.MSPaint_8wekyb3d8bbwe!Microsoft.MSPaint',
66
55
  StickyNotes: 'Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe!App'
67
56
  };
68
-
69
57
  class WindowsModule extends _WebDriverModule.default {
70
58
  constructor(options, context, rs, logger, modules, services) {
71
59
  super(options, context, rs, logger, modules, services);
@@ -73,47 +61,41 @@ class WindowsModule extends _WebDriverModule.default {
73
61
  this.lastNavigationStartTime = null;
74
62
  this.networkRequests = null;
75
63
  this.helpers = {};
76
-
77
- this._loadHelperFunctions(); // support backward compatibility (some module commands might refer to this.OxError and this.errHelper)
78
-
79
-
64
+ this._loadHelperFunctions();
65
+ // support backward compatibility (some module commands might refer to this.OxError and this.errHelper)
80
66
  this.OxError = _OxygenError.default;
81
- this.errHelper = _helper.default; // holds element operation timeout value
82
-
67
+ this.errHelper = _helper.default;
68
+ // holds element operation timeout value
83
69
  this.waitForTimeout = DEFAULT_WAIT_TIMEOUT;
84
70
  }
85
-
86
71
  get name() {
87
72
  return MODULE_NAME;
88
73
  }
74
+
89
75
  /**
90
76
  * @function getDriver
91
77
  * @summary Returns the underlying WDIO driver.
92
78
  * @return {Object} WDIO driver.
93
79
  */
94
-
95
-
96
80
  getDriver() {
97
81
  return super.getDriver();
98
82
  }
83
+
99
84
  /**
100
85
  * @function getCapabilities
101
86
  * @summary Returns currently defined capabilities.
102
87
  * @return {Object} Current capabilities object.
103
88
  */
104
-
105
-
106
89
  getCapabilities() {
107
90
  return this.caps || super.getCapabilities();
108
91
  }
92
+
109
93
  /**
110
94
  * @function init
111
95
  * @summary Initializes a new Appium session.
112
96
  * @param {String=} caps - Desired capabilities. If not specified capabilities will be taken from suite definition.
113
97
  * @param {String=} appiumUrl - Remote Appium server URL (default: http://localhost:4723/wd/hub).
114
98
  */
115
-
116
-
117
99
  async init(caps, appiumUrl) {
118
100
  // if reopenSession is true - reinitilize the module
119
101
  if (this.isInitialized) {
@@ -125,64 +107,57 @@ class WindowsModule extends _WebDriverModule.default {
125
107
  } else {
126
108
  this.logger.debug('mob.init was called for already initialized module. reopenSession is false so the call is ignored.');
127
109
  }
128
-
129
110
  return;
130
111
  }
131
-
132
112
  if (!appiumUrl) {
133
113
  appiumUrl = this.options.appiumUrl || DEFAULT_APPIUM_URL;
134
- } // merge capabilities from context and from init function argument, give preference to context-passed capabilities
135
-
114
+ }
136
115
 
116
+ // merge capabilities from context and from init function argument, give preference to context-passed capabilities
137
117
  this.caps = {};
138
-
139
118
  if (this.ctx.caps) {
140
- this.caps = { ...this.ctx.caps
119
+ this.caps = {
120
+ ...this.ctx.caps
141
121
  };
142
122
  }
143
-
144
123
  if (caps) {
145
- this.caps = { ...this.caps,
124
+ this.caps = {
125
+ ...this.caps,
146
126
  ...caps
147
127
  };
148
- } // make sure 'app' capability is provided (mandatory for WinAppDriver)
149
-
128
+ }
150
129
 
130
+ // make sure 'app' capability is provided (mandatory for WinAppDriver)
151
131
  if (!this.caps.app) {
152
132
  this.caps.app = DEFAULT_APP;
153
133
  } else {
154
- const appCapVal = this.caps.app; // try to resolve 'app' value in the Windows standard app list
155
-
134
+ const appCapVal = this.caps.app;
135
+ // try to resolve 'app' value in the Windows standard app list
156
136
  const appNames = Object.keys(WINDOWS_STANDARD_APP_IDS);
157
-
158
137
  if (appNames.includes(appCapVal)) {
159
138
  this.caps.app = WINDOWS_STANDARD_APP_IDS[appCapVal];
160
139
  }
161
- } // set default platformName for WinAppDriver
162
-
163
-
140
+ }
141
+ // set default platformName for WinAppDriver
164
142
  if (!this.caps.platformName) {
165
143
  this.caps.platformName = 'Windows';
166
- } // set default deviceName for WinAppDriver
167
-
168
-
144
+ }
145
+ // set default deviceName for WinAppDriver
169
146
  if (!this.caps.deviceName) {
170
147
  this.caps.deviceName = 'WindowsPC';
171
- } // set default platformVersion for WinAppDriver
172
-
173
-
148
+ }
149
+ // set default platformVersion for WinAppDriver
174
150
  if (!this.caps.platformVersion) {
175
151
  this.caps.platformVersion = '1.0';
176
- } // populate WDIO options
177
-
178
-
152
+ }
153
+ // populate WDIO options
179
154
  const url = _url.default.parse(appiumUrl);
180
-
181
155
  const protocol = url.protocol.replace(/:$/, '');
182
156
  const host = url.hostname;
183
157
  const port = parseInt(url.port || (protocol === 'https' ? 443 : 80));
184
- const path = url.pathname; // auth is needed mostly for cloud providers such as LambdaTest
158
+ const path = url.pathname;
185
159
 
160
+ // auth is needed mostly for cloud providers such as LambdaTest
186
161
  if (url.auth) {
187
162
  const auth = url.auth.split(':');
188
163
  this.options.wdioOpts = {
@@ -190,8 +165,8 @@ class WindowsModule extends _WebDriverModule.default {
190
165
  key: auth[1]
191
166
  };
192
167
  }
193
-
194
- var wdioOpts = { ...(this.options.wdioOpts || {}),
168
+ var wdioOpts = {
169
+ ...(this.options.wdioOpts || {}),
195
170
  protocol: protocol,
196
171
  hostname: host,
197
172
  port: port,
@@ -204,39 +179,34 @@ class WindowsModule extends _WebDriverModule.default {
204
179
  connectionRetryTimeout: 310 * 1000,
205
180
  connectionRetryCount: 1
206
181
  };
207
-
208
182
  try {
209
183
  this.driver = await wdio.remote(wdioOpts);
210
-
211
184
  if (this.options.seleniumBrowserTimeout) {
212
185
  this.driver.seleniumBrowserTimeout = this.options.seleniumBrowserTimeout;
213
186
  }
214
-
215
187
  if (this.options.seleniumTimeout) {
216
188
  this.driver.seleniumTimeout = this.options.seleniumTimeout;
217
189
  }
218
190
  } catch (e) {
219
191
  throw _helper.default.getAppiumInitError(e);
220
192
  }
221
-
222
193
  await this.driver.setTimeout({
223
194
  'implicit': this.waitForTimeout
224
195
  });
225
196
  super.init(this.driver);
226
197
  }
198
+
227
199
  /**
228
200
  * @function dispose
229
201
  * @summary Ends the current session.
230
202
  */
231
-
232
-
233
203
  async dispose(status) {
234
204
  status = status.toUpperCase();
235
-
236
205
  if (this.driver && this.isInitialized) {
237
206
  try {
238
207
  if (!['CANCELED', 'FAILED'].includes(status)) {
239
- if (this.seleniumSessionTimeout) {// ignore
208
+ if (this.seleniumSessionTimeout) {
209
+ // ignore
240
210
  // deleteSession will take 5 min to call
241
211
  } else {
242
212
  await this.driver.deleteSession();
@@ -251,6 +221,7 @@ class WindowsModule extends _WebDriverModule.default {
251
221
  super.dispose();
252
222
  }
253
223
  }
224
+
254
225
  /**
255
226
  * @summary Opens new transaction.
256
227
  * @description The transaction will persist till a new one is opened. Transaction names must be
@@ -258,20 +229,17 @@ class WindowsModule extends _WebDriverModule.default {
258
229
  * @function transaction
259
230
  * @param {String} name - The transaction name.
260
231
  */
261
-
262
-
263
232
  transaction(name) {
264
233
  global._lastTransactionName = name;
265
234
  }
235
+
266
236
  /*
267
237
  * Private
268
238
  */
269
239
 
270
-
271
240
  _isAction(name) {
272
241
  return ACTION_COMMANDS.includes(name);
273
242
  }
274
-
275
243
  _takeScreenshotSilent(name) {
276
244
  if (!NO_SCREENSHOT_COMMANDS.includes(name)) {
277
245
  try {
@@ -279,22 +247,23 @@ class WindowsModule extends _WebDriverModule.default {
279
247
  return this.driver.takeScreenshot();
280
248
  }
281
249
  } catch (e) {
282
- this.logger.error('Cannot get screenshot', e); // ignore
250
+ this.logger.error('Cannot get screenshot', e);
251
+ // ignore
283
252
  }
284
253
  }
285
- } // _getLogs(name) {
254
+ }
255
+
256
+ // _getLogs(name) {
286
257
  // if (!NO_LOGS_COMMANDS.includes(name)) {
287
258
  // return this.getLogs();
288
259
  // }
289
260
  // }
290
261
 
291
-
292
262
  _adjustAppiumLog(log, src) {
293
263
  if (!log || typeof log !== 'object') {
294
264
  return null;
295
- } // TODO: convert log.timestamp from the device time zone to the local one (so we can later correlate between steps and logs)
296
-
297
-
265
+ }
266
+ // TODO: convert log.timestamp from the device time zone to the local one (so we can later correlate between steps and logs)
298
267
  return {
299
268
  time: log.timestamp,
300
269
  msg: log.message,
@@ -302,30 +271,26 @@ class WindowsModule extends _WebDriverModule.default {
302
271
  src: src
303
272
  };
304
273
  }
305
-
306
274
  _iterationStart() {
307
275
  // clear transaction name saved in previous iteration if any
308
276
  global._lastTransactionName = null;
309
277
  }
310
-
311
278
  _iterationEnd(error) {
312
279
  if (error && error.type === _helper.default.errorCode.SELENIUM_SESSION_TIMEOUT) {
313
280
  this.seleniumSessionTimeout = true;
314
281
  return;
315
282
  } else {
316
283
  this.seleniumSessionTimeout = false;
317
- } // ignore the rest if mob module is not initialized
318
-
284
+ }
319
285
 
286
+ // ignore the rest if mob module is not initialized
320
287
  if (!this.isInitialized) {
321
288
  return;
322
- } // collect all Appium logs for this session
323
-
324
-
289
+ }
290
+ // collect all Appium logs for this session
325
291
  if (this.options.collectAppiumLogs) {
326
292
  try {
327
293
  const logs = this.getAppiumLogs();
328
-
329
294
  if (logs && Array.isArray(logs)) {
330
295
  for (var logEntry of logs) {
331
296
  this.rs.logs.push(this._adjustAppiumLog(logEntry, 'appium'));
@@ -337,12 +302,10 @@ class WindowsModule extends _WebDriverModule.default {
337
302
  }
338
303
  }
339
304
  }
340
-
341
305
  _getWdioLocator(locator) {
342
306
  if (!locator) throw new _OxygenError.default(_helper.default.errorCode.SCRIPT_ERROR, 'Invalid argument - locator not specified');else if (typeof locator === 'object') return locator;else if (locator.indexOf('/') === 0) return locator;else if (locator.indexOf('id=') === 0) return `//*[@id="${locator.substr('id='.length)}"]`;else if (locator.indexOf('name=') === 0) return '[name="' + locator.substr('name='.length) + '"]';
343
307
  return locator;
344
308
  }
345
-
346
309
  _loadHelperFunctions() {
347
310
  this.helpers.getWdioLocator = this._getWdioLocator;
348
311
  this.helpers.matchPattern = _utils.default.matchPattern;
@@ -360,8 +323,6 @@ class WindowsModule extends _WebDriverModule.default {
360
323
  this.helpers.assertArgumentBoolOptional = _utils.default.assertArgumentBoolOptional;
361
324
  this.helpers.assertArgumentTimeout = _utils.default.assertArgumentTimeout;
362
325
  }
363
-
364
326
  }
365
-
366
327
  exports.default = WindowsModule;
367
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13aW4uanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0FQUCIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIldJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyIsIkNhbGN1bGF0b3IiLCJBbGFybUNsb2NrIiwiTm90ZXBhZCIsIlBhaW50IiwiUGFpbnQzRCIsIlN0aWNreU5vdGVzIiwiV2luZG93c01vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0IiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0IiwiYXBwaXVtVXJsIiwiaXNJbml0aWFsaXplZCIsInJlb3BlblNlc3Npb24iLCJkZWJ1ZyIsImRyaXZlciIsInJlbG9hZFNlc3Npb24iLCJfaXNJbml0aWFsaXplZCIsImN0eCIsImFwcCIsImFwcENhcFZhbCIsImFwcE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwicGxhdGZvcm1OYW1lIiwiZGV2aWNlTmFtZSIsInBsYXRmb3JtVmVyc2lvbiIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsIndkaW8iLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiZSIsImdldEFwcGl1bUluaXRFcnJvciIsInNldFRpbWVvdXQiLCJkaXNwb3NlIiwic3RhdHVzIiwidG9VcHBlckNhc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0IiwiZGVsZXRlU2Vzc2lvbiIsIndhcm4iLCJ0cmFuc2FjdGlvbiIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiX2lzQWN0aW9uIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwidGFrZVNjcmVlbnNob3QiLCJlcnJvciIsIl9hZGp1c3RBcHBpdW1Mb2ciLCJsb2ciLCJzcmMiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibWVzc2FnZSIsImxldmVsIiwiX2l0ZXJhdGlvblN0YXJ0IiwiX2l0ZXJhdGlvbkVuZCIsInR5cGUiLCJlcnJvckhlbHBlciIsImVycm9yQ29kZSIsIlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCIsImNvbGxlY3RBcHBpdW1Mb2dzIiwibG9ncyIsImdldEFwcGl1bUxvZ3MiLCJBcnJheSIsImlzQXJyYXkiLCJsb2dFbnRyeSIsInB1c2giLCJfZ2V0V2Rpb0xvY2F0b3IiLCJsb2NhdG9yIiwiU0NSSVBUX0VSUk9SIiwiaW5kZXhPZiIsInN1YnN0ciIsImxlbmd0aCIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwibW9kVXRpbHMiLCJnZXRFbGVtZW50IiwiZ2V0RWxlbWVudHMiLCJnZXRDaGlsZEVsZW1lbnQiLCJnZXRDaGlsZEVsZW1lbnRzIiwic2V0VGltZW91dEltcGxpY2l0IiwicmVzdG9yZVRpbWVvdXRJbXBsaWNpdCIsImFzc2VydEFyZ3VtZW50IiwiYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyIsImFzc2VydEFyZ3VtZW50TnVtYmVyIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFHQSxNQUFNQSxXQUFXLEdBQUcsS0FBcEI7QUFDQSxNQUFNQyxrQkFBa0IsR0FBRyw4QkFBM0I7QUFDQSxNQUFNQyxXQUFXLEdBQUcsTUFBcEI7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUFDLE1BQUQsRUFBUyxhQUFULENBQS9CO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLENBQUMsTUFBRCxFQUFRLEtBQVIsRUFBYyxPQUFkLEVBQXNCLE9BQXRCLEVBQThCLFFBQTlCLEVBQXVDLFVBQXZDLENBQXhCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsS0FBSyxJQUFsQyxDLENBQW1EOztBQUNuRCxNQUFNQyx3QkFBd0IsR0FBRztBQUM3QkMsRUFBQUEsVUFBVSxFQUFFLCtDQURpQjtBQUU3QkMsRUFBQUEsVUFBVSxFQUFFLDJDQUZpQjtBQUc3QkMsRUFBQUEsT0FBTyxFQUFFLG9DQUhvQjtBQUk3QkMsRUFBQUEsS0FBSyxFQUFFLG9DQUpzQjtBQUs3QkMsRUFBQUEsT0FBTyxFQUFFLG1EQUxvQjtBQU03QkMsRUFBQUEsV0FBVyxFQUFFO0FBTmdCLENBQWpDOztBQVNlLE1BQU1DLGFBQU4sU0FBNEJDLHdCQUE1QixDQUE0QztBQUN2REMsRUFBQUEsV0FBVyxDQUFDQyxPQUFELEVBQVVDLE9BQVYsRUFBbUJDLEVBQW5CLEVB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ZUFBeEM7QUFDQSxTQUFLckcsT0FBTCxDQUFhc0csZ0JBQWIsR0FBZ0NKLGVBQVNJLGdCQUF6QztBQUNBLFNBQUt0RyxPQUFMLENBQWF1RyxrQkFBYixHQUFrQ0wsZUFBU0ssa0JBQTNDO0FBQ0EsU0FBS3ZHLE9BQUwsQ0FBYXdHLHNCQUFiLEdBQXNDTixlQUFTTSxzQkFBL0M7QUFDQSxTQUFLeEcsT0FBTCxDQUFheUcsY0FBYixHQUE4QlAsZUFBU08sY0FBdkM7QUFDQSxTQUFLekcsT0FBTCxDQUFhMEcsNEJBQWIsR0FBNENSLGVBQVNRLDRCQUFyRDtBQUNBLFNBQUsxRyxPQUFMLENBQWEyRyxvQkFBYixHQUFvQ1QsZUFBU1Msb0JBQTdDO0FBQ0EsU0FBSzNHLE9BQUwsQ0FBYTRHLCtCQUFiLEdBQStDVixlQUFTVSwrQkFBeEQ7QUFDQSxTQUFLNUcsT0FBTCxDQUFhNkcsa0JBQWIsR0FBa0NYLGVBQVNXLGtCQUEzQztBQUNBLFNBQUs3RyxPQUFMLENBQWE4RywwQkFBYixHQUEwQ1osZUFBU1ksMEJBQW5EO0FBQ0EsU0FBSzlHLE9BQUwsQ0FBYStHLHFCQUFiLEdBQXFDYixlQUFTYSxxQkFBOUM7QUFDSDs7QUEvUnNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSB3aW5cclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIFdpbmRvd3MgbmF0aXZlIGFwcGxpY2F0aW9ucyBhdXRvbWF0aW9uLlxyXG4gKiBAc2FtcGxlICoqTG9jYXRvcnM6KiogIFxyXG4gKiAgIFxyXG4gKiAgKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogICogYH5BY2Nlc3NpYmlsaXR5SWRgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBBY2Nlc3NpYmlsaXR5IElELiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIEF1dG9tYXRpb25JZC5cclxuICogICogYG5hbWU9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIG5hbWUuIEF0dHJpYnV0ZSBuYW1lIGluIGluc3BlY3QuZXhlIC0gTmFtZS5cclxuICogICogYGlkPUlEYCAtICBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIElELiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIFJ1bnRpbWVJRC4gIFxyXG4gKiAgXHJcbiAqICoqUGF0dGVybiBhcmd1bWVudHM6KipcclxuICogIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGEgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm4gaW4gdGhlaXIgYXJndW1lbnRzLCBzdXBwb3J0IGZvbGxvd2luZyBwYXR0ZXJucyB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZTpcclxuICogIFxyXG4gKiAgKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGBQQVRURVJOYCAtIFZlcmJhdGltIG1hdGNoaW5nLlxyXG4gKi9cclxuXHJcbmltcG9ydCBVUkwgZnJvbSAndXJsJztcclxuaW1wb3J0ICogYXMgd2RpbyBmcm9tICd3ZWJkcml2ZXJpbyc7XHJcbmltcG9ydCBXZWJEcml2ZXJNb2R1bGUgZnJvbSAnLi4vY29yZS9XZWJEcml2ZXJNb2R1bGUnO1xyXG5pbXBvcnQgbW9kVXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBlcnJIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3dpbic7XHJcbmNvbnN0IERFRkFVTFRfQVBQSVVNX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJztcclxuY29uc3QgREVGQVVMVF9BUFAgPSAnUm9vdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywndGFwJywnY2xpY2snLCdzd2lwZScsJ3N1Ym1pdCcsJ3NldFZhbHVlJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5jb25zdCBXSU5ET1dTX1NUQU5EQVJEX0FQUF9JRFMgPSB7XHJcbiAgICBDYWxjdWxhdG9yOiAnTWljcm9zb2Z0LldpbmRvd3NDYWxjdWxhdG9yXzh3ZWt5YjNkOGJid2UhQXBwJyxcclxuICAgIEFsYXJtQ2xvY2s6ICdNaWNyb3NvZnQuV2luZG93c0FsYXJtc184d2VreWIzZDhiYndlIUFwcCcsXHJcbiAgICBOb3RlcGFkOiAnQzpcXFxcV2luZG93c1xcXFxTeXN0ZW0zMlxcXFxub3RlcGFkLmV4ZScsXHJcbiAgICBQYWludDogJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcbXNwYWludC5leGUnLFxyXG4gICAgUGFpbnQzRDogJ01pY3Jvc29mdC5NU1BhaW50Xzh3ZWt5YjNkOGJid2UhTWljcm9zb2Z0Lk1TUGFpbnQnLFxyXG4gICAgU3RpY2t5Tm90ZXM6ICdNaWNyb3NvZnQuTWljcm9zb2Z0U3RpY2t5Tm90ZXNfOHdla3liM2Q4YmJ3ZSFBcHAnXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaW5kb3dzTW9kdWxlIGV4dGVuZHMgV2ViRHJpdmVyTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0ge307XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5uZXR3b3JrUmVxdWVzdHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xvYWRIZWxwZXJGdW5jdGlvbnMoKTtcclxuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXHJcbiAgICAgICAgdGhpcy5PeEVycm9yID0gT3hFcnJvcjtcclxuICAgICAgICB0aGlzLmVyckhlbHBlciA9IGVyckhlbHBlcjtcclxuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yVGltZW91dCA9IERFRkFVTFRfV0FJVF9USU1FT1VUO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgYSBuZXcgQXBwaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGFwcGl1bVVybCAtIFJlbW90ZSBBcHBpdW0gc2VydmVyIFVSTCAoZGVmYXVsdDogaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1YikuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluaXQoY2FwcywgYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgLy8gaWYgcmVvcGVuU2Vzc2lvbiBpcyB0cnVlIC0gcmVpbml0aWxpemUgdGhlIG1vZHVsZVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZW9wZW5TZXNzaW9uICE9PSBmYWxzZSkgeyAvLyB0cnVlIG9yIGZhbHNlIGlmIGV4cGxpc2l0bHkgc2V0LiB0cnVlIG9uIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3Jlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlbG9hZGluZyB0aGUgc2Vzc2lvbi4uLicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIucmVsb2FkU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnbW9iLmluaXQgd2FzIGNhbGxlZCBmb3IgYWxyZWFkeSBpbml0aWFsaXplZCBtb2R1bGUuIHJlb3BlblNlc3Npb24gaXMgZmFsc2Ugc28gdGhlIGNhbGwgaXMgaWdub3JlZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWFwcGl1bVVybCkge1xyXG4gICAgICAgICAgICBhcHBpdW1VcmwgPSB0aGlzLm9wdGlvbnMuYXBwaXVtVXJsIHx8IERFRkFVTFRfQVBQSVVNX1VSTDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1lcmdlIGNhcGFiaWxpdGllcyBmcm9tIGNvbnRleHQgYW5kIGZyb20gaW5pdCBmdW5jdGlvbiBhcmd1bWVudCwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGNvbnRleHQtcGFzc2VkIGNhcGFiaWxpdGllc1xyXG4gICAgICAgIHRoaXMuY2FwcyA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jdHguY2FwcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY2FwcywgLi4uY2FwcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbWFrZSBzdXJlICdhcHAnIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgKG1hbmRhdG9yeSBmb3IgV2luQXBwRHJpdmVyKVxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmFwcCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYXBwID0gREVGQVVMVF9BUFA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBhcHBDYXBWYWwgPSB0aGlzLmNhcHMuYXBwO1xyXG4gICAgICAgICAgICAvLyB0cnkgdG8gcmVzb2x2ZSAnYXBwJyB2YWx1ZSBpbiB0aGUgV2luZG93cyBzdGFuZGFyZCBhcHAgbGlzdFxyXG4gICAgICAgICAgICBjb25zdCBhcHBOYW1lcyA9IE9iamVjdC5rZXlzKFdJTkRPV1NfU1RBTkRBUkRfQVBQX0lEUyk7XHJcbiAgICAgICAgICAgIGlmIChhcHBOYW1lcy5pbmNsdWRlcyhhcHBDYXBWYWwpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcHMuYXBwID0gV0lORE9XU19TVEFOREFSRF9BUFBfSURTW2FwcENhcFZhbF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgcGxhdGZvcm1OYW1lIGZvciBXaW5BcHBEcml2ZXJcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLnBsYXRmb3JtTmFtZSA9ICdXaW5kb3dzJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgZGV2aWNlTmFtZSBmb3IgV2luQXBwRHJpdmVyXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuZGV2aWNlTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuZGV2aWNlTmFtZSA9ICdXaW5kb3dzUEMnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBwbGF0Zm9ybVZlcnNpb24gZm9yIFdpbkFwcERyaXZlclxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMucGxhdGZvcm1WZXJzaW9uID0gJzEuMCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHBvcHVsYXRlIFdESU8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFVSTC5wYXJzZShhcHBpdW1VcmwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gYXdhaXQgd2Rpby5yZW1vdGUod2Rpb09wdHMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bUJyb3dzZXJUaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5zZWxlbml1bVRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1UaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyckhlbHBlci5nZXRBcHBpdW1Jbml0RXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zZXRUaW1lb3V0KHsgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCB9KTtcclxuXHJcbiAgICAgICAgc3VwZXIuaW5pdCh0aGlzLmRyaXZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHN1bW1hcnkgRW5kcyB0aGUgY3VycmVudCBzZXNzaW9uLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xyXG4gICAgICAgIHN0YXR1cyA9IHN0YXR1cy50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICghWydDQU5DRUxFRCcsICdGQUlMRUQnXS5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlU2Vzc2lvbiB3aWxsIHRha2UgNSBtaW4gdG8gY2FsbFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Vycm9yIGRpc3Bvc2luZyBkcml2ZXI6ICcgKyBlKTsgICAgLy8gaWdub3JlIGFueSBlcnJvcnMgYXQgZGlzcG9zYWwgc3RhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlXHJcbiAgICAgKiAgICAgICAgICAgICAgdW5pcXVlLlxyXG4gICAgICogQGZ1bmN0aW9uIHRyYW5zYWN0aW9uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAtIFRoZSB0cmFuc2FjdGlvbiBuYW1lLlxyXG4gICAgICovXHJcbiAgICB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZVxyXG4gICAgICovXHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QnLCBlKTtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIF9nZXRMb2dzKG5hbWUpIHtcclxuICAgIC8vICAgICBpZiAoIU5PX0xPR1NfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9ncygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBfYWRqdXN0QXBwaXVtTG9nKGxvZywgc3JjKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBkZXZpY2UgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncykgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWdub3JlIHRoZSByZXN0IGlmIG1vYiBtb2R1bGUgaXMgbm90IGluaXRpYWxpemVkXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QXBwaXVtTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZ0VudHJ5IG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikge1xyXG4gICAgICAgIGlmICghbG9jYXRvcilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TQ1JJUFRfRVJST1IsICdJbnZhbGlkIGFyZ3VtZW50IC0gbG9jYXRvciBub3Qgc3BlY2lmaWVkJyk7XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGxvY2F0b3IgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJy8nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuIGAvLypbQGlkPVwiJHtsb2NhdG9yLnN1YnN0cignaWQ9Jy5sZW5ndGgpfVwiXWA7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxyXG4gICAgICAgICAgICByZXR1cm4gJ1tuYW1lPVwiJyArIGxvY2F0b3Iuc3Vic3RyKCduYW1lPScubGVuZ3RoKSArICdcIl0nO1xyXG5cclxuICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSB0aGlzLl9nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgIH1cclxufVxyXG5cclxuIl19
328
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIkRFRkFVTFRfQVBQSVVNX1VSTCIsIkRFRkFVTFRfQVBQIiwiTk9fU0NSRUVOU0hPVF9DT01NQU5EUyIsIkFDVElPTl9DT01NQU5EUyIsIkRFRkFVTFRfV0FJVF9USU1FT1VUIiwiV0lORE9XU19TVEFOREFSRF9BUFBfSURTIiwiQ2FsY3VsYXRvciIsIkFsYXJtQ2xvY2siLCJOb3RlcGFkIiwiUGFpbnQiLCJQYWludDNEIiwiU3RpY2t5Tm90ZXMiLCJXaW5kb3dzTW9kdWxlIiwiV2ViRHJpdmVyTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwidHJhbnNhY3Rpb25zIiwibGFzdE5hdmlnYXRpb25TdGFydFRpbWUiLCJuZXR3b3JrUmVxdWVzdHMiLCJoZWxwZXJzIiwiX2xvYWRIZWxwZXJGdW5jdGlvbnMiLCJPeEVycm9yIiwiZXJySGVscGVyIiwid2FpdEZvclRpbWVvdXQiLCJuYW1lIiwiZ2V0RHJpdmVyIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiY2FwcyIsImluaXQiLCJhcHBpdW1VcmwiLCJpc0luaXRpYWxpemVkIiwicmVvcGVuU2Vzc2lvbiIsImRlYnVnIiwiZHJpdmVyIiwicmVsb2FkU2Vzc2lvbiIsIl9pc0luaXRpYWxpemVkIiwiY3R4IiwiYXBwIiwiYXBwQ2FwVmFsIiwiYXBwTmFtZXMiLCJPYmplY3QiLCJrZXlzIiwiaW5jbHVkZXMiLCJwbGF0Zm9ybU5hbWUiLCJkZXZpY2VOYW1lIiwicGxhdGZvcm1WZXJzaW9uIiwidXJsIiwiVVJMIiwicGFyc2UiLCJwcm90b2NvbCIsInJlcGxhY2UiLCJob3N0IiwiaG9zdG5hbWUiLCJwb3J0IiwicGFyc2VJbnQiLCJwYXRoIiwicGF0aG5hbWUiLCJhdXRoIiwic3BsaXQiLCJ3ZGlvT3B0cyIsInVzZXIiLCJrZXkiLCJjYXBhYmlsaXRpZXMiLCJsb2dMZXZlbCIsInJ1bm5lciIsIndhaXRmb3JUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5VGltZW91dCIsImNvbm5lY3Rpb25SZXRyeUNvdW50Iiwid2RpbyIsInJlbW90ZSIsInNlbGVuaXVtQnJvd3NlclRpbWVvdXQiLCJzZWxlbml1bVRpbWVvdXQiLCJlIiwiZ2V0QXBwaXVtSW5pdEVycm9yIiwic2V0VGltZW91dCIsImRpc3Bvc2UiLCJzdGF0dXMiLCJ0b1VwcGVyQ2FzZSIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJkZWxldGVTZXNzaW9uIiwid2FybiIsInRyYW5zYWN0aW9uIiwiZ2xvYmFsIiwiX2xhc3RUcmFuc2FjdGlvbk5hbWUiLCJfaXNBY3Rpb24iLCJfdGFrZVNjcmVlbnNob3RTaWxlbnQiLCJ0YWtlU2NyZWVuc2hvdCIsImVycm9yIiwiX2FkanVzdEFwcGl1bUxvZyIsImxvZyIsInNyYyIsInRpbWUiLCJ0aW1lc3RhbXAiLCJtc2ciLCJtZXNzYWdlIiwibGV2ZWwiLCJfaXRlcmF0aW9uU3RhcnQiLCJfaXRlcmF0aW9uRW5kIiwidHlwZSIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIiwiY29sbGVjdEFwcGl1bUxvZ3MiLCJsb2dzIiwiZ2V0QXBwaXVtTG9ncyIsIkFycmF5IiwiaXNBcnJheSIsImxvZ0VudHJ5IiwicHVzaCIsIl9nZXRXZGlvTG9jYXRvciIsImxvY2F0b3IiLCJTQ1JJUFRfRVJST1IiLCJpbmRleE9mIiwic3Vic3RyIiwibGVuZ3RoIiwiZ2V0V2Rpb0xvY2F0b3IiLCJtYXRjaFBhdHRlcm4iLCJtb2RVdGlscyIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtd2luLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2luXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBXaW5kb3dzIG5hdGl2ZSBhcHBsaWNhdGlvbnMgYXV0b21hdGlvbi5cclxuICogQHNhbXBsZSAqKkxvY2F0b3JzOioqICBcclxuICogICBcclxuICogICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICAqIGB+QWNjZXNzaWJpbGl0eUlkYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBBdXRvbWF0aW9uSWQuXHJcbiAqICAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBuYW1lLiBBdHRyaWJ1dGUgbmFtZSBpbiBpbnNwZWN0LmV4ZSAtIE5hbWUuXHJcbiAqICAqIGBpZD1JRGAgLSAgTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRC4gQXR0cmlidXRlIG5hbWUgaW4gaW5zcGVjdC5leGUgLSBSdW50aW1lSUQuICBcclxuICogIFxyXG4gKiAqKlBhdHRlcm4gYXJndW1lbnRzOioqXHJcbiAqICBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqICBcclxuICogICogYHJlZ2V4OlBBVFRFUk5gIC0gTWF0Y2ggdXNpbmcgcmVndWxhciBleHByZXNzaW9uLlxyXG4gKiAgKiBgUEFUVEVSTmAgLSBWZXJiYXRpbSBtYXRjaGluZy5cclxuICovXHJcblxyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd3aW4nO1xyXG5jb25zdCBERUZBVUxUX0FQUElVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NzIzL3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQVBQID0gJ1Jvb3QnO1xyXG5jb25zdCBOT19TQ1JFRU5TSE9UX0NPTU1BTkRTID0gWydpbml0JywgJ2Fzc2VydEFsZXJ0J107XHJcbmNvbnN0IEFDVElPTl9DT01NQU5EUyA9IFsnb3BlbicsJ3RhcCcsJ2NsaWNrJywnc3dpcGUnLCdzdWJtaXQnLCdzZXRWYWx1ZSddO1xyXG5jb25zdCBERUZBVUxUX1dBSVRfVElNRU9VVCA9IDYwICogMTAwMDsgICAgICAgICAgICAvLyBkZWZhdWx0IDYwcyB3YWl0IHRpbWVvdXRcclxuY29uc3QgV0lORE9XU19TVEFOREFSRF9BUFBfSURTID0ge1xyXG4gICAgQ2FsY3VsYXRvcjogJ01pY3Jvc29mdC5XaW5kb3dzQ2FsY3VsYXRvcl84d2VreWIzZDhiYndlIUFwcCcsXHJcbiAgICBBbGFybUNsb2NrOiAnTWljcm9zb2Z0LldpbmRvd3NBbGFybXNfOHdla3liM2Q4YmJ3ZSFBcHAnLFxyXG4gICAgTm90ZXBhZDogJ0M6XFxcXFdpbmRvd3NcXFxcU3lzdGVtMzJcXFxcbm90ZXBhZC5leGUnLFxyXG4gICAgUGFpbnQ6ICdDOlxcXFxXaW5kb3dzXFxcXFN5c3RlbTMyXFxcXG1zcGFpbnQuZXhlJyxcclxuICAgIFBhaW50M0Q6ICdNaWNyb3NvZnQuTVNQYWludF84d2VreWIzZDhiYndlIU1pY3Jvc29mdC5NU1BhaW50JyxcclxuICAgIFN0aWNreU5vdGVzOiAnTWljcm9zb2Z0Lk1pY3Jvc29mdFN0aWNreU5vdGVzXzh3ZWt5YjNkOGJid2UhQXBwJ1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2luZG93c01vZHVsZSBleHRlbmRzIFdlYkRyaXZlck1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmV0d29ya1JlcXVlc3RzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMgPSB7fTtcclxuICAgICAgICB0aGlzLl9sb2FkSGVscGVyRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgLy8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IChzb21lIG1vZHVsZSBjb21tYW5kcyBtaWdodCByZWZlciB0byB0aGlzLk94RXJyb3IgYW5kIHRoaXMuZXJySGVscGVyKVxyXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJIZWxwZXIgPSBlcnJIZWxwZXI7XHJcbiAgICAgICAgLy8gaG9sZHMgZWxlbWVudCBvcGVyYXRpb24gdGltZW91dCB2YWx1ZVxyXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0RHJpdmVyXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBXRElPIGRyaXZlci5cclxuICAgICAqL1xyXG4gICAgZ2V0RHJpdmVyKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXREcml2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXRDYXBhYmlsaXRpZXNcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENhcGFiaWxpdGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBzIHx8IHN1cGVyLmdldENhcGFiaWxpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IEFwcGl1bSBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMuIElmIG5vdCBzcGVjaWZpZWQgY2FwYWJpbGl0aWVzIHdpbGwgYmUgdGFrZW4gZnJvbSBzdWl0ZSBkZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBhcHBpdW1VcmwgLSBSZW1vdGUgQXBwaXVtIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIGFwcGl1bVVybCkge1xyXG4gICAgICAgIC8vIGlmIHJlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlaW5pdGlsaXplIHRoZSBtb2R1bGVcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVvcGVuU2Vzc2lvbiAhPT0gZmFsc2UpIHsgLy8gdHJ1ZSBvciBmYWxzZSBpZiBleHBsaXNpdGx5IHNldC4gdHJ1ZSBvbiBudWxsIG9yIHVuZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdyZW9wZW5TZXNzaW9uIGlzIHRydWUgLSByZWxvYWRpbmcgdGhlIHNlc3Npb24uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnJlbG9hZFNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ21vYi5pbml0IHdhcyBjYWxsZWQgZm9yIGFscmVhZHkgaW5pdGlhbGl6ZWQgbW9kdWxlLiByZW9wZW5TZXNzaW9uIGlzIGZhbHNlIHNvIHRoZSBjYWxsIGlzIGlnbm9yZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFhcHBpdW1VcmwpIHtcclxuICAgICAgICAgICAgYXBwaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybCB8fCBERUZBVUxUX0FQUElVTV9VUkw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtZXJnZSBjYXBhYmlsaXRpZXMgZnJvbSBjb250ZXh0IGFuZCBmcm9tIGluaXQgZnVuY3Rpb24gYXJndW1lbnQsIGdpdmUgcHJlZmVyZW5jZSB0byBjb250ZXh0LXBhc3NlZCBjYXBhYmlsaXRpZXNcclxuICAgICAgICB0aGlzLmNhcHMgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5jdHguY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY3R4LmNhcHMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmNhcHMsIC4uLmNhcHMgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSAnYXBwJyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIChtYW5kYXRvcnkgZm9yIFdpbkFwcERyaXZlcilcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5hcHApIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IERFRkFVTFRfQVBQO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYXBwQ2FwVmFsID0gdGhpcy5jYXBzLmFwcDtcclxuICAgICAgICAgICAgLy8gdHJ5IHRvIHJlc29sdmUgJ2FwcCcgdmFsdWUgaW4gdGhlIFdpbmRvd3Mgc3RhbmRhcmQgYXBwIGxpc3RcclxuICAgICAgICAgICAgY29uc3QgYXBwTmFtZXMgPSBPYmplY3Qua2V5cyhXSU5ET1dTX1NUQU5EQVJEX0FQUF9JRFMpO1xyXG4gICAgICAgICAgICBpZiAoYXBwTmFtZXMuaW5jbHVkZXMoYXBwQ2FwVmFsKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzLmFwcCA9IFdJTkRPV1NfU1RBTkRBUkRfQVBQX0lEU1thcHBDYXBWYWxdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IHBsYXRmb3JtTmFtZSBmb3IgV2luQXBwRHJpdmVyXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMucGxhdGZvcm1OYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUgPSAnV2luZG93cyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IGRldmljZU5hbWUgZm9yIFdpbkFwcERyaXZlclxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmRldmljZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmRldmljZU5hbWUgPSAnV2luZG93c1BDJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgcGxhdGZvcm1WZXJzaW9uIGZvciBXaW5BcHBEcml2ZXJcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5wbGF0Zm9ybVZlcnNpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLnBsYXRmb3JtVmVyc2lvbiA9ICcxLjAnO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2UoYXBwaXVtVXJsKTtcclxuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKTtcclxuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3RuYW1lO1xyXG4gICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh1cmwucG9ydCB8fCAocHJvdG9jb2wgPT09ICdodHRwcycgPyA0NDMgOiA4MCkpO1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB1cmwucGF0aG5hbWU7XHJcblxyXG4gICAgICAgIC8vIGF1dGggaXMgbmVlZGVkIG1vc3RseSBmb3IgY2xvdWQgcHJvdmlkZXJzIHN1Y2ggYXMgTGFtYmRhVGVzdFxyXG4gICAgICAgIGlmICh1cmwuYXV0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLndkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogYXV0aFswXSxcclxuICAgICAgICAgICAgICAgIGtleTogYXV0aFsxXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHdkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMud2Rpb09wdHMgfHwge30sXHJcbiAgICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcclxuICAgICAgICAgICAgaG9zdG5hbWU6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogdGhpcy5jYXBzLFxyXG4gICAgICAgICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXHJcbiAgICAgICAgICAgIHJ1bm5lcjogJ3JlcGwnLFxyXG4gICAgICAgICAgICB3YWl0Zm9yVGltZW91dDogNTAwMCwgLy8gaW5jcmVhc2UgdGhlIGRlZmF1bHQgMzAwMFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiAzMTAqMTAwMCxcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IDFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XHJcblxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICBzdGF0dXMgPSBzdGF0dXMudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIVsnQ0FOQ0VMRUQnLCAnRkFJTEVEJ10uaW5jbHVkZXMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlbGV0ZVNlc3Npb24gd2lsbCB0YWtlIDUgbWluIHRvIGNhbGxcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdFcnJvciBkaXNwb3NpbmcgZHJpdmVyOiAnICsgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZVxyXG4gICAgICogICAgICAgICAgICAgIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqL1xyXG4gICAgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIFByaXZhdGVcclxuICAgICAqL1xyXG5cclxuICAgIF9pc0FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIEFDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNjcmVlbnNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU0NSRUVOU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3RcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90JywgZSk7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBfZ2V0TG9ncyhuYW1lKSB7XHJcbiAgICAvLyAgICAgaWYgKCFOT19MT0dTX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB0aGlzLmdldExvZ3MoKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgX2FkanVzdEFwcGl1bUxvZyhsb2csIHNyYykge1xyXG4gICAgICAgIGlmICghbG9nIHx8IHR5cGVvZiBsb2cgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IGxvZy50aW1lc3RhbXAgZnJvbSB0aGUgZGV2aWNlIHRpbWUgem9uZSB0byB0aGUgbG9jYWwgb25lIChzbyB3ZSBjYW4gbGF0ZXIgY29ycmVsYXRlIGJldHdlZW4gc3RlcHMgYW5kIGxvZ3MpICAgICAgICBcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0aW1lOiBsb2cudGltZXN0YW1wLFxyXG4gICAgICAgICAgICBtc2c6IGxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICBsZXZlbDogbG9nLmxldmVsLFxyXG4gICAgICAgICAgICBzcmM6IHNyY1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgX2l0ZXJhdGlvblN0YXJ0KCkge1xyXG4gICAgICAgIC8vIGNsZWFyIHRyYW5zYWN0aW9uIG5hbWUgc2F2ZWQgaW4gcHJldmlvdXMgaXRlcmF0aW9uIGlmIGFueVxyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgX2l0ZXJhdGlvbkVuZChlcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlnbm9yZSB0aGUgcmVzdCBpZiBtb2IgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZFxyXG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29sbGVjdCBhbGwgQXBwaXVtIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEFwcGl1bUxvZ3MpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSB0aGlzLmdldEFwcGl1bUxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsb2dFbnRyeSBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2dFbnRyeSwgJ2FwcGl1bScpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgQXBwaXVtIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2dldFdkaW9Mb2NhdG9yKGxvY2F0b3IpIHtcclxuICAgICAgICBpZiAoIWxvY2F0b3IpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCAnSW52YWxpZCBhcmd1bWVudCAtIGxvY2F0b3Igbm90IHNwZWNpZmllZCcpO1xyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBsb2NhdG9yID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCcvJykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignaWQ9JykgPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBgLy8qW0BpZD1cIiR7bG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKX1cIl1gO1xyXG4gICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignbmFtZT0nKSA9PT0gMClcclxuICAgICAgICAgICAgcmV0dXJuICdbbmFtZT1cIicgKyBsb2NhdG9yLnN1YnN0cignbmFtZT0nLmxlbmd0aCkgKyAnXCJdJztcclxuXHJcbiAgICAgICAgcmV0dXJuIGxvY2F0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRIZWxwZXJGdW5jdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yID0gdGhpcy5fZ2V0V2Rpb0xvY2F0b3I7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLm1hdGNoUGF0dGVybiA9IG1vZFV0aWxzLm1hdGNoUGF0dGVybjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudCA9IG1vZFV0aWxzLmdldEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0RWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudCA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50cyA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnNldFRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnNldFRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZTtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudFRpbWVvdXQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZOztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7RUFBQTtBQUFB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