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
package/build/lib/util.js CHANGED
@@ -1,37 +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
5
  var _helper = _interopRequireDefault(require("../errors/helper"));
8
-
9
6
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
-
11
7
  const path = require('path');
12
-
13
8
  const fs = require('fs');
14
-
15
9
  const moment = require('moment');
16
-
17
10
  const crypto = require('crypto');
18
-
19
11
  const util = require('util');
20
-
21
12
  const password = require('../../package.json').encryptionKey;
22
-
23
13
  const key = crypto.scryptSync(password, 'GfG', 24);
24
14
  const iv = Buffer.alloc(16, 0);
25
15
  const algorithm = 'aes-192-cbc';
26
-
27
16
  function DecryptResult(result) {
28
17
  const decryptResult = result;
29
-
30
18
  this.getDecryptResult = () => {
31
19
  return decryptResult;
32
20
  };
33
21
  }
34
-
35
22
  const DUMMY_HOOKS = {
36
23
  beforeTest: () => {},
37
24
  beforeSuite: () => {},
@@ -57,11 +44,9 @@ var self = module.exports = {
57
44
  suite.iterationCount = suiteDef.iterations || testConfig.iterations || iterationCount;
58
45
  const suiteFilePath = suiteDef.path || path.join(testConfig.target.cwd, 'suites', `${suiteDef.name}.json`);
59
46
  suite.paramManager = await self.getParameterManager(suiteFilePath, testConfig.parameters, testConfig.target.cwd);
60
-
61
47
  if (suite.paramManager && suite.paramManager.getMode() == 'all') {
62
48
  suite.iterationCount = suite.paramManager.rows;
63
49
  }
64
-
65
50
  suite.capabilities = suiteDef.capabilities || testConfig.capabilities || {};
66
51
  suite.environment = testConfig.environment || null;
67
52
  suite.options = testConfig.options || null;
@@ -88,44 +73,37 @@ var self = module.exports = {
88
73
  suite.id = testcase.id;
89
74
  suite.iterationCount = iterationCount;
90
75
  suite.cases.push(testcase);
91
-
92
76
  if (testcase.reopenSession) {
93
77
  suite.reopenSession = testcase.reopenSession;
94
78
  }
95
-
96
79
  const cwd = path.dirname(filePath);
97
80
  suite.paramManager = await self.getParameterManager(filePath, {
98
81
  file: paramFile,
99
82
  mode: paramMode
100
83
  }, cwd);
101
-
102
84
  if (suite.paramManager && paramMode == 'all') {
103
85
  suite.iterationCount = suite.paramManager.rows;
104
86
  }
105
-
106
87
  return suite;
107
88
  },
108
89
  getParameterManager: async function (mainFilePath, paramOpts = null, cwd = null, autoSearch = false) {
109
90
  let paramFilePath = paramOpts && paramOpts.file ? paramOpts.file : null;
110
91
  let paramMode = paramOpts && paramOpts.mode ? paramOpts.mode : 'seq';
111
-
112
92
  if (paramFilePath && cwd && !path.isAbsolute(paramFilePath)) {
113
93
  paramFilePath = path.join(cwd, paramFilePath);
114
94
  }
115
-
116
95
  return await self.loadParameterManager(mainFilePath, paramFilePath, paramMode, autoSearch);
117
96
  },
118
97
  generateTestSuiteFromJsonFile: async function (filePath, paramFile, paramMode = null, options = {}) {
119
- const testConfig = { ...(options || {})
98
+ const testConfig = {
99
+ ...(options || {})
120
100
  };
121
-
122
101
  if (paramFile) {
123
102
  testConfig.parameters = {
124
103
  file: paramFile,
125
104
  mode: paramMode
126
105
  };
127
106
  }
128
-
129
107
  return await self.generateTestSuiteFromJson(require(filePath), testConfig);
130
108
  },
131
109
  getFileNameWithoutExt: function (filePath) {
@@ -136,14 +114,12 @@ var self = module.exports = {
136
114
  },
137
115
  loadParameterManager: async function (mainFile, paramFile, paramMode, autoSearch = false) {
138
116
  var paramManager = null;
139
-
140
117
  if (!paramFile && autoSearch) {
141
118
  var fileNameNoExt = self.getFileNameWithoutExt(mainFile);
142
119
  var csvParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.csv');
143
120
  var txtParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.txt');
144
121
  var xlsParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.xls');
145
122
  var xlsxParamFile = path.join(path.dirname(mainFile), fileNameNoExt + '.xlsx');
146
-
147
123
  if (fs.existsSync(csvParamFile)) {
148
124
  paramFile = csvParamFile;
149
125
  } else if (fs.existsSync(txtParamFile)) {
@@ -154,13 +130,11 @@ var self = module.exports = {
154
130
  paramFile = xlsxParamFile;
155
131
  }
156
132
  }
157
-
158
133
  if (paramFile) {
159
134
  paramManager = new require('./param-manager')(paramFile, paramMode || 'sequential');
160
135
  await paramManager.init();
161
136
  return paramManager;
162
137
  }
163
-
164
138
  return null;
165
139
  },
166
140
  resolvePath: function (pathToResolve, baseFolder) {
@@ -171,9 +145,7 @@ var self = module.exports = {
171
145
  if (typeof err === 'object') {
172
146
  return destroyCircular(err, []);
173
147
  }
174
-
175
148
  return err;
176
-
177
149
  function destroyCircular(from, seen) {
178
150
  var to = Array.isArray(from) ? [] : {};
179
151
  seen.push(from);
@@ -192,7 +164,6 @@ var self = module.exports = {
192
164
  },
193
165
  stringify: function (args, indentation = 0) {
194
166
  let str;
195
-
196
167
  try {
197
168
  str = JSON.stringify(args, (key, value) => {
198
169
  if (typeof value === 'bigint') {
@@ -206,19 +177,15 @@ var self = module.exports = {
206
177
  } else if (value instanceof RegExp) {
207
178
  return '/' + value.source + '/' + value.flags;
208
179
  }
209
-
210
180
  return value;
211
181
  }, indentation);
212
182
  str = str.replace(/^\[{1}\s*|\s*\]{1}$/g, '');
213
-
214
183
  if (str.endsWith(' }')) {
215
184
  str = str.substring(0, str.length - 3) + '}';
216
185
  }
217
-
218
186
  if (str.endsWith(' ]')) {
219
187
  str = str.substring(0, str.length - 3) + ']';
220
188
  }
221
-
222
189
  str = str.replace(/"__UNDEFINED"/g, 'undefined');
223
190
  } catch (e) {
224
191
  console.warn('Failed to serialize command arguments: ', e);
@@ -226,7 +193,6 @@ var self = module.exports = {
226
193
  depth: 3
227
194
  });
228
195
  }
229
-
230
196
  return str;
231
197
  },
232
198
  isInDebugMode: function () {
@@ -234,7 +200,6 @@ var self = module.exports = {
234
200
  },
235
201
  loadTestHooks: function (options) {
236
202
  let hooks = DUMMY_HOOKS;
237
-
238
203
  if (options && options.target && options.target.name === 'oxygen.conf') {
239
204
  try {
240
205
  hooks = require(options.target.path).hooks || DUMMY_HOOKS;
@@ -242,20 +207,16 @@ var self = module.exports = {
242
207
  console.warn('Error loading user hooks:', e);
243
208
  }
244
209
  }
245
-
246
210
  return hooks;
247
211
  },
248
212
  executeTestHook: async function (hooks, method, args) {
249
213
  if (!hooks || !method || !hooks[method] || typeof hooks[method] !== 'function') {
250
214
  return null;
251
215
  }
252
-
253
216
  try {
254
217
  if (global.chaiAndMockeryLoaded) {} else {
255
218
  const chai = require('chai');
256
-
257
219
  const mockery = require('mockery');
258
-
259
220
  mockery.enable({
260
221
  useCleanCache: true,
261
222
  warnOnReplace: false,
@@ -264,7 +225,6 @@ var self = module.exports = {
264
225
  mockery.registerMock('chai', chai);
265
226
  global.chaiAndMockeryLoaded = true;
266
227
  }
267
-
268
228
  await hooks[method].apply(undefined, args);
269
229
  } catch (e) {
270
230
  console.error(`Hook "${method}" has thrown an error: ${e.toString()}`);
@@ -274,17 +234,14 @@ var self = module.exports = {
274
234
  getOxModulesDir: function () {
275
235
  return path.join(__dirname, '..', 'ox_modules');
276
236
  },
277
-
278
237
  hookLogs(logger) {
279
238
  const origlog = console.log;
280
239
  const origDebug = console.debug;
281
240
  const origInfo = console.info;
282
241
  const origWarn = console.warn;
283
242
  const origError = console.error;
284
-
285
243
  const processArgs = argumentArray => {
286
244
  let result = [];
287
-
288
245
  if (argumentArray && argumentArray.map) {
289
246
  argumentArray.map(item => {
290
247
  if (typeof item === 'string') {
@@ -294,36 +251,29 @@ var self = module.exports = {
294
251
  }
295
252
  });
296
253
  }
297
-
298
254
  return result.join(' ');
299
255
  };
300
-
301
256
  console.log = function (...argumentArray) {
302
257
  origlog.apply(this, argumentArray);
303
258
  logger.info(processArgs(argumentArray));
304
259
  };
305
-
306
260
  console.debug = function (...argumentArray) {
307
261
  origDebug.apply(this, argumentArray);
308
262
  logger.debug(processArgs(argumentArray));
309
263
  };
310
-
311
264
  console.info = function (...argumentArray) {
312
265
  origInfo.apply(this, argumentArray);
313
266
  logger.info(processArgs(argumentArray));
314
267
  };
315
-
316
268
  console.warn = function (...argumentArray) {
317
269
  origWarn.apply(this, argumentArray);
318
270
  logger.warn(processArgs(argumentArray));
319
271
  };
320
-
321
272
  console.error = function (...argumentArray) {
322
273
  origError.apply(this, argumentArray);
323
274
  logger.error(processArgs(argumentArray));
324
275
  };
325
276
  },
326
-
327
277
  makeTransactionFailedIfStepFailed(steps) {
328
278
  if (steps && steps.length && steps.length > 0) {
329
279
  let lastFindedTransactionIndex = false;
@@ -332,17 +282,14 @@ var self = module.exports = {
332
282
  if (item.name && item.name.includes && item.name.includes('.transaction(')) {
333
283
  lastFindedTransactionIndex = idx;
334
284
  }
335
-
336
285
  if (typeof lastFindedTransactionIndex === 'number' && item.status && item.status === 'failed') {
337
286
  newSteps[lastFindedTransactionIndex]['status'] = 'failed';
338
287
  }
339
288
  });
340
289
  return newSteps;
341
290
  }
342
-
343
291
  return steps;
344
292
  },
345
-
346
293
  decrypt(text) {
347
294
  try {
348
295
  let encryptedText = Buffer.from(text, 'hex');
@@ -355,16 +302,14 @@ var self = module.exports = {
355
302
  throw new _OxygenError.default(_helper.default.errorCode.CRYPTO_ERROR, "The provided argument doesn't seem to be a valid cipher produced by 'utils.encrypt'");
356
303
  }
357
304
  },
358
-
359
305
  encrypt(text) {
360
306
  let cipher = crypto.createCipheriv(algorithm, key, iv);
361
307
  let encrypted = cipher.update(text);
362
308
  encrypted = Buffer.concat([encrypted, cipher.final()]);
363
309
  return encrypted.toString('hex');
364
310
  },
365
-
366
311
  sleep: function (timeout) {
367
312
  return new Promise(resolve => setTimeout(resolve, timeout));
368
313
  }
369
314
  };
370
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJzZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImdlbmVyYXRlVW5pcXVlSWQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZ2V0VGltZVN0YW1wIiwidXRjIiwidmFsdWVPZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzdWl0ZURlZiIsInRlc3RDb25maWciLCJpdGVyYXRpb25Db3VudCIsInN1aXRlIiwiaWQiLCJuYW1lIiwiaXRlcmF0aW9ucyIsInN1aXRlRmlsZVBhdGgiLCJqb2luIiwidGFyZ2V0IiwiY3dkIiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50Iiwib3B0aW9ucyIsInBhcmFsbGVsIiwiY29uY3VycmVuY3kiLCJjYXNlcyIsImZvckVhY2giLCJjYXNlRGVmIiwidGMiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJyZXNvbHZlUGF0aCIsImZvcm1hdCIsInB1c2giLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUiLCJmaWxlUGF0aCIsInBhcmFtRmlsZSIsInBhcmFtTW9kZSIsIm5vUGFyYW1BdXRvU2VhcmNoIiwiZmlsZU5hbWVOb0V4dCIsInRlc3RjYXNlIiwicmVvcGVuU2Vzc2lvbiIsImRpcm5hbWUiLCJmaWxlIiwibW9kZSIsIm1haW5GaWxlUGF0aCIsInBhcmFtT3B0cyIsImF1dG9TZWFyY2giLCJwYXJhbUZpbGVQYXRoIiwiaXNBYnNvbHV0ZSIsImxvYWRQYXJhbWV0ZXJNYW5hZ2VyIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJmaWxlTmFtZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJleGlzdHNTeW5jIiwiaW5pdCIsInBhdGhUb1Jlc29sdmUiLCJiYXNlRm9sZGVyIiwicmVzb2x2ZSIsIm1ha2VTZXJpYWxpemFibGUiLCJlcnIiLCJkZXN0cm95Q2lyY3VsYXIiLCJmcm9tIiwic2VlbiIsInRvIiwiQXJyYXkiLCJpc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsImluZGV4T2YiLCJzbGljZSIsImdldE1ldGhvZFNpZ25hdHVyZSIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwibWV0aG9kQXJncyIsInN0cmluZ2lmeSIsImFyZ3MiLCJpbmRlbnRhdGlvbiIsInN0ciIsIkpTT04iLCJ2YWx1ZSIsIkVycm9yIiwiUmVnRXhwIiwic291cmNlIiwiZmxhZ3MiLCJyZXBsYWNlIiwiZW5kc1dpdGgiLCJsZW5ndGgiLCJlIiwiY29uc29sZSIsIndhcm4iLCJpbnNwZWN0IiwiZGVwdGgiLCJpc0luRGVidWdNb2RlIiwibG9hZFRlc3RIb29rcyIsImhvb2tzIiwiZXhlY3V0ZVRlc3RIb29rIiwibWV0aG9kIiwiZ2xvYmFsIiwiY2hhaUFuZE1vY2tlcnlMb2FkZWQiLCJjaGFpIiwibW9ja2VyeSIsImVuYWJsZSIsInVzZUNsZWFuQ2FjaGUiLCJ3YXJuT25SZXBsYWNlIiwid2Fybk9uVW5yZWdpc3RlcmVkIiwicmVnaXN0ZXJNb2NrIiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJlcnJvciIsImdldE94TW9kdWxlc0RpciIsIl9fZGlybmFtZSIsImhvb2tMb2dzIiwibG9nZ2VyIiwib3JpZ2xvZyIsImxvZyIsIm9yaWdEZWJ1ZyIsImRlYnVnIiwib3JpZ0luZm8iLCJpbmZvIiwib3JpZ1dhcm4iLCJvcmlnRXJyb3IiLCJwcm9jZXNzQXJncyIsImFyZ3VtZW50QXJyYXkiLCJtYXAiLCJpdGVtIiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwic3RlcHMiLCJsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCIsIm5ld1N0ZXBzIiwiaWR4IiwiaW5jbHVkZXMiLCJzdGF0dXMiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHRlZFRleHQiLCJkZWNpcGhlciIsImNyZWF0ZURlY2lwaGVyaXYiLCJkZWNyeXB0ZWQiLCJ1cGRhdGUiLCJjb25jYXQiLCJmaW5hbCIsInJldFZhbCIsIk94eWdlbkVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJDUllQVE9fRVJST1IiLCJlbmNyeXB0IiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJlbmNyeXB0ZWQiLCJzbGVlcCIsInRpbWVvdXQiLCJQcm9taXNlIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6Ijs7OztBQXNCQTs7QUFDQTs7OztBQVhBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBQ0EsTUFBTUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsSUFBRCxDQUFsQjs7QUFDQSxNQUFNRSxNQUFNLEdBQUdGLE9BQU8sQ0FBQyxRQUFELENBQXRCOztBQUNBLE1BQU1HLE1BQU0sR0FBR0gsT0FBTyxDQUFDLFFBQUQsQ0FBdEI7O0FBQ0EsTUFBTUksSUFBSSxHQUFHSixPQUFPLENBQUMsTUFBRCxDQUFwQjs7QUFDQSxNQUFNSyxRQUFRLEdBQUdMLE9BQU8sQ0FBQyxvQkFBRCxDQUFQLENB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cHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgbW9kdWxlIGZvciBpbnRlcm5hbCBPeHlnZW4gdXNlXHJcbiAqL1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xyXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuY29uc3QgcGFzc3dvcmQgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS5lbmNyeXB0aW9uS2V5O1xyXG5jb25zdCBrZXkgPSBjcnlwdG8uc2NyeXB0U3luYyhwYXNzd29yZCwgJ0dmRycsIDI0KTtcclxuY29uc3QgaXYgPSBCdWZmZXIuYWxsb2MoMTYsIDApO1xyXG5jb25zdCBhbGdvcml0aG0gPSAnYWVzLTE5Mi1jYmMnO1xyXG5cclxuaW1wb3J0IE94eWdlbkVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmZ1bmN0aW9uIERlY3J5cHRSZXN1bHQocmVzdWx0KSB7XHJcbiAgICBjb25zdCBkZWNyeXB0UmVzdWx0ID0gcmVzdWx0O1xyXG5cclxuICAgIHRoaXMuZ2V0RGVjcnlwdFJlc3VsdCA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdFJlc3VsdDtcclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IERVTU1ZX0hPT0tTID0ge1xyXG4gICAgYmVmb3JlVGVzdDogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVTdWl0ZTogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVDYXNlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDb21tYW5kOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyVGVzdDogKCkgPT4ge30sXHJcbiAgICBhZnRlclN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyQ2FzZTogKCkgPT4ge30sXHJcbn07XHJcblxyXG52YXIgc2VsZiA9IG1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIGdlbmVyYXRlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRUaW1lU3RhbXA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQudXRjKCkudmFsdWVPZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uOiBhc3luYyBmdW5jdGlvbihzdWl0ZURlZiwgdGVzdENvbmZpZywgaXRlcmF0aW9uQ291bnQgPSAxKSB7XHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBudWxsO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gc3VpdGVEZWYuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZURlZi5pdGVyYXRpb25zIHx8IHRlc3RDb25maWcuaXRlcmF0aW9ucyB8fCBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBjb25zdCBzdWl0ZUZpbGVQYXRoID0gc3VpdGVEZWYucGF0aCB8fCBwYXRoLmpvaW4odGVzdENvbmZpZy50YXJnZXQuY3dkLCAnc3VpdGVzJywgYCR7c3VpdGVEZWYubmFtZX0uanNvbmApO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihzdWl0ZUZpbGVQYXRoLCB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBzdWl0ZS5wYXJhbU1hbmFnZXIuZ2V0TW9kZSgpID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1aXRlLmNhcGFiaWxpdGllcyA9IHN1aXRlRGVmLmNhcGFiaWxpdGllcyB8fCB0ZXN0Q29uZmlnLmNhcGFiaWxpdGllcyB8fCB7fTtcclxuICAgICAgICBzdWl0ZS5lbnZpcm9ubWVudCA9IHRlc3RDb25maWcuZW52aXJvbm1lbnQgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5vcHRpb25zID0gdGVzdENvbmZpZy5vcHRpb25zIHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUucGFyYWxsZWwgPSBzdWl0ZURlZi5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLnBhcmFsbGVsIHx8IHRlc3RDb25maWcuY29uY3VycmVuY3kgfHwgMTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGVhY2ggdGVzdCBjYXNlXHJcbiAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0ZXN0Y2FzZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdGMgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FzZURlZi5uYW1lKVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IGNhc2VEZWYubmFtZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhc2VEZWYucGF0aCk7XHJcbiAgICAgICAgICAgIHRjLnBhdGggPSBzZWxmLnJlc29sdmVQYXRoKGNhc2VEZWYucGF0aCwgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICAgICAgdGMuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICAgICAgdGMuaXRlcmF0aW9uQ291bnQgPSBjYXNlRGVmLml0ZXJhdGlvbnMgfHwgMTtcclxuICAgICAgICAgICAgc3VpdGUuY2FzZXMucHVzaCh0Yyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlID0gbnVsbCwgcGFyYW1Nb2RlID0gbnVsbCwgbm9QYXJhbUF1dG9TZWFyY2ggPSB0cnVlLCBpdGVyYXRpb25Db3VudCA9IDEpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgdmFyIHRlc3RjYXNlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICB0ZXN0Y2FzZS5uYW1lID0gZmlsZU5hbWVOb0V4dDtcclxuICAgICAgICB0ZXN0Y2FzZS5wYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgdGVzdGNhc2UuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICB0ZXN0Y2FzZS5pdGVyYXRpb25Db3VudCA9IDE7XHJcblxyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSB0ZXN0Y2FzZS5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gdGVzdGNhc2UuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRlc3RjYXNlKTtcclxuICAgICAgICBpZiAodGVzdGNhc2UucmVvcGVuU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBzdWl0ZS5yZW9wZW5TZXNzaW9uID0gdGVzdGNhc2UucmVvcGVuU2Vzc2lvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3dkID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoZmlsZVBhdGgsIHsgZmlsZTogcGFyYW1GaWxlLCBtb2RlOiBwYXJhbU1vZGUgfSwgY3dkKTtcclxuICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgcmVhZGluZyBtb2RlIGlzICdhbGwnIHRoZW4gY2hhbmdlIGl0ZXJhdGlvbkNvdW50IHRvIHRoZSBhbW91bnQgb2Ygcm93cyBpbiB0aGUgcGFyYW0gZmlsZVxyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgcGFyYW1Nb2RlID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGVQYXRoLCBwYXJhbU9wdHMgPSBudWxsLCBjd2QgPSBudWxsLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcGFyYW1GaWxlUGF0aCA9IHBhcmFtT3B0cyAmJiBwYXJhbU9wdHMuZmlsZSA/IHBhcmFtT3B0cy5maWxlIDogbnVsbDtcclxuICAgICAgICBsZXQgcGFyYW1Nb2RlID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5tb2RlID8gcGFyYW1PcHRzLm1vZGUgOiAnc2VxJztcclxuXHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZVBhdGggJiYgY3dkICYmICFwYXRoLmlzQWJzb2x1dGUocGFyYW1GaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgcGFyYW1GaWxlUGF0aCA9IHBhdGguam9pbihjd2QsIHBhcmFtRmlsZVBhdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYubG9hZFBhcmFtZXRlck1hbmFnZXIobWFpbkZpbGVQYXRoLCBwYXJhbUZpbGVQYXRoLCBwYXJhbU1vZGUsIGF1dG9TZWFyY2gpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSA9IG51bGwsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocGFyYW1GaWxlKSB7XHJcbiAgICAgICAgICAgIHRlc3RDb25maWcucGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIGZpbGU6IHBhcmFtRmlsZSxcclxuICAgICAgICAgICAgICAgIG1vZGU6IHBhcmFtTW9kZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbihyZXF1aXJlKGZpbGVQYXRoKSwgdGVzdENvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEZpbGVOYW1lV2l0aG91dEV4dDogZnVuY3Rpb24gKGZpbGVQYXRoKSB7XHJcbiAgICAgICAgdmFyIGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVFeHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHZhciBmaWxlUGF0aE5vRXh0ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKGZpbGVFeHQpKTtcclxuICAgICAgICByZXR1cm4gZmlsZVBhdGhOb0V4dDtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZFBhcmFtZXRlck1hbmFnZXI6IGFzeW5jIGZ1bmN0aW9uKG1haW5GaWxlLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgLy8gaWYgcGFyYW0gZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNoZWNrIGlmIEpTIGZpbGUgaXMgY29taW5nIGluIHBhaXIgd2l0aCBhIHBhcmFtZXRlciBmaWxlIFxyXG4gICAgICAgIC8vIChjdXJyZW50bHkgc3VwcG9ydGluZyBDU1Ygb3IgVFhUKVxyXG4gICAgICAgIGlmICghcGFyYW1GaWxlICYmIGF1dG9TZWFyY2gpIHtcclxuICAgICAgICAgICAgdmFyIGZpbGVOYW1lTm9FeHQgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChtYWluRmlsZSk7XHJcbiAgICAgICAgICAgIHZhciBjc3ZQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcuY3N2Jyk7XHJcbiAgICAgICAgICAgIHZhciB0eHRQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcudHh0Jyk7XHJcbiAgICAgICAgICAgIHZhciB4bHNQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzJyk7XHJcbiAgICAgICAgICAgIHZhciB4bHN4UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnhsc3gnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNzdlBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IGNzdlBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHR4dFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHR4dFBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc1BhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc1BhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc3hQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB4bHN4UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgcGFyYW1NYW5hZ2VyID0gbmV3IHJlcXVpcmUoJy4vcGFyYW0tbWFuYWdlcicpKHBhcmFtRmlsZSwgcGFyYW1Nb2RlIHx8ICdzZXF1ZW50aWFsJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHBhcmFtTWFuYWdlci5pbml0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbU1hbmFnZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNvbHZlUGF0aDogZnVuY3Rpb24ocGF0aFRvUmVzb2x2ZSwgYmFzZUZvbGRlcikge1xyXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocGF0aFRvUmVzb2x2ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoVG9SZXNvbHZlO1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aFRvUmVzb2x2ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VTZXJpYWxpemFibGU6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdHJveUNpcmN1bGFyKGVyciwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXJyO1xyXG5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam9ucGFja2VyL2Rlc3Ryb3ktY2lyY3VsYXJcclxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95Q2lyY3VsYXIoZnJvbSwgc2Vlbikge1xyXG4gICAgICAgICAgICB2YXIgdG8gPSBBcnJheS5pc0FycmF5KGZyb20pID8gW10gOiB7fTtcclxuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tW2tleV0gfHwgKHR5cGVvZiBmcm9tW2tleV0gIT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZnJvbVtrZXldKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWVuLmluZGV4T2YoZnJvbVtrZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBkZXN0cm95Q2lyY3VsYXIoZnJvbVtrZXldLCBzZWVuLnNsaWNlKDApKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB0b1trZXldID0gJ1tDaXJjdWxhcl0nO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWV0aG9kU2lnbmF0dXJlOiBmdW5jdGlvbihtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBtZXRob2RBcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZU5hbWUgKyAnLicgKyBtZXRob2ROYW1lICsgJygnICsgc2VsZi5zdHJpbmdpZnkobWV0aG9kQXJncywgMCkgKyAnKSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBVc2VkIHRvIHNlcmlhbGl6ZSBveHlnZW4gY29tbWFuZCBwYXJhbWV0ZXJzLiBQcm9kdWNlcyBhIG5vbi1jb21wbGlhbnQgSlNPTiBzZXJpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChhcmdzLCBpbmRlbnRhdGlvbiA9IDApIHtcclxuICAgICAgICBsZXQgc3RyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KGFyZ3MsIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgeyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lTGFicy9qc2JpL2lzc3Vlcy8zMFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHVuZGVmaW5lZCBpcyBpbnNpZGUgYW4gYXJyYXkgdGhlbiBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgbnVsbC5cclxuICAgICAgICAgICAgICAgICAgICAvLyBob3dldmVyIGlmIHdlIGp1c3QgcmV0dXJuICd1bmRlZmluZWQnIGhlcmUgYXMgc3RyaW5nLCBpdCB3aWxsIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzbyByZXR1cm4gbWFnaWMgc3RyaW5nIGluc3RlYWQgYW5kIHRyaW0gdGhlIHF1b3RlcyBsYXRlciBvblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnX19VTkRFRklORUQnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcvJyArIHZhbHVlLnNvdXJjZSArICcvJyArIHZhbHVlLmZsYWdzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9LCBpbmRlbnRhdGlvbik7XHJcbiAgICAgICAgICAgIC8vIHRyaW0gdGhlIGVuY2xvc2luZyBhcnJheSBhbmQgYW55IHdoaXRlc3BhY2VcclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXFt7MX1cXHMqfFxccypcXF17MX0kL2csICcnKTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHNwYWNlIGJlZm9yZSBsYXN0IH0gYW5kIF0sIHRvIG1ha2UgaW5kZW50YXRpb24gbXRjaCB0aGUgb3BlbmluZyBicmFja2V0XHJcbiAgICAgICAgICAgIGlmIChzdHIuZW5kc1dpdGgoJyAgfScpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAzKSArICd9JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIF0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnXSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29udmVydCBtYWdpYyAndW5kZWZpbmVkJyBzdHJpbmcgdG8gcHJvcGVyIHJlcHJlc2VudGF0aW9uXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cIl9fVU5ERUZJTkVEXCIvZywgJ3VuZGVmaW5lZCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2VyaWFsaXplIGNvbW1hbmQgYXJndW1lbnRzOiAnLCBlKTtcclxuICAgICAgICAgICAgLy8gaWYgSlNPTi5zdHJpbmdpZnkgZmFpbHMsIHRoZW4gZmFsbGJhY2sgdG8gdXRpbC5pbnNwZWN0LlxyXG4gICAgICAgICAgICAvLyAod2UgZG9uJ3QgdXNlIHV0aWwuaW5zcGVjdCBpbml0aWFseSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdXRwdXQgaW5kZW50YXRpb24pXHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmluc3BlY3QoYXJnc1swXSwgeyBkZXB0aDogMyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH0sXHJcblxyXG4gICAgaXNJbkRlYnVnTW9kZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gdGhpcyBhbHdheXMgdHJ1ZTtcclxuICAgICAgICAvLyBjb25zdCBhcmd2ID0gcHJvY2Vzcy5leGVjQXJndi5qb2luKCk7XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwcm9jZXNzLmRlYnVnUG9ydCcsIHByb2Nlc3MuZGVidWdQb3J0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2RlYnVnJylcIiwgYXJndi5pbmNsdWRlcygnZGVidWcnKSk7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBwcm9jZXNzLmRlYnVnUG9ydCB8fCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSB8fCBhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRUZXN0SG9va3M6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgaG9va3MgPSBEVU1NWV9IT09LUztcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRhcmdldCAmJiBvcHRpb25zLnRhcmdldC5uYW1lID09PSAnb3h5Z2VuLmNvbmYnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBob29rcyA9IHJlcXVpcmUob3B0aW9ucy50YXJnZXQucGF0aCkuaG9va3MgfHwgRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgbG9hZGluZyB1c2VyIGhvb2tzOicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBob29rcztcclxuICAgIH0sXHJcblxyXG4gICAgZXhlY3V0ZVRlc3RIb29rOiBhc3luYyBmdW5jdGlvbihob29rcywgbWV0aG9kLCBhcmdzKSB7XHJcbiAgICAgICAgLy8gaWYgaG9vayBpcyBub3QgZGVmaW5lZCwganVzdCBxdWlldGx5IGlnbm9yZSBpdFxyXG4gICAgICAgIGlmICghaG9va3MgfHwgIW1ldGhvZCB8fCAhaG9va3NbbWV0aG9kXSB8fCB0eXBlb2YgaG9va3NbbWV0aG9kXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpID0gcmVxdWlyZSgnY2hhaScpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VyeSA9IHJlcXVpcmUoJ21vY2tlcnknKTtcclxuICAgICAgICAgICAgICAgIG1vY2tlcnkuZW5hYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VDbGVhbkNhY2hlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblJlcGxhY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblVucmVnaXN0ZXJlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5yZWdpc3Rlck1vY2soJ2NoYWknLCBjaGFpKTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IGhvb2tzW21ldGhvZF0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSG9vayBcIiR7bWV0aG9kfVwiIGhhcyB0aHJvd24gYW4gZXJyb3I6ICR7ZS50b1N0cmluZygpfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0T3hNb2R1bGVzRGlyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ294X21vZHVsZXMnKTtcclxuICAgIH0sXHJcblxyXG4gICAgaG9va0xvZ3MobG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2xvZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgICAgIGNvbnN0IG9yaWdEZWJ1ZyA9IGNvbnNvbGUuZGVidWc7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0luZm8gPSBjb25zb2xlLmluZm87XHJcbiAgICAgICAgY29uc3Qgb3JpZ1dhcm4gPSBjb25zb2xlLndhcm47XHJcbiAgICAgICAgY29uc3Qgb3JpZ0Vycm9yID0gY29uc29sZS5lcnJvcjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc0FyZ3MgPSAoYXJndW1lbnRBcnJheSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRBcnJheSAmJiBhcmd1bWVudEFycmF5Lm1hcCkge1xyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRBcnJheS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2l0ZW19YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7dXRpbC5pbnNwZWN0KGl0ZW0pfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdsb2cuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRGVidWcuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmluZm8gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnSW5mby5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS53YXJuID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ1dhcm4uYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkKHN0ZXBzKSB7XHJcbiAgICAgICAgaWYgKHN0ZXBzICYmIHN0ZXBzLmxlbmd0aCAmJiBzdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTdGVwcyA9IFsuLi5zdGVwc107XHJcbiAgICAgICAgICAgIHN0ZXBzLm1hcCgoaXRlbSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lICYmIGl0ZW0ubmFtZS5pbmNsdWRlcyAmJiBpdGVtLm5hbWUuaW5jbHVkZXMoJy50cmFuc2FjdGlvbignKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gaWR4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPT09ICdudW1iZXInICYmIGl0ZW0uc3RhdHVzICYmIGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ZXBzW2xhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4XVsnc3RhdHVzJ10gPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3U3RlcHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRUZXh0ID0gQnVmZmVyLmZyb20odGV4dCwgJ2hleCcpO1xyXG4gICAgICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihhbGdvcml0aG0sIGtleSwgaXYpO1xyXG4gICAgICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZFRleHQpO1xyXG4gICAgICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmFsID0gZGVjcnlwdGVkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjcnlwdFJlc3VsdChyZXRWYWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DUllQVE9fRVJST1IsIFwiVGhlIHByb3ZpZGVkIGFyZ3VtZW50IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHZhbGlkIGNpcGhlciBwcm9kdWNlZCBieSAndXRpbHMuZW5jcnlwdCdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlbmNyeXB0KHRleHQpIHtcclxuICAgICAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUodGV4dCk7XHJcbiAgICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzbGVlcDogZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XHJcbiAgICB9XHJcbn07XHJcbiJdfQ==
315
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwibW9tZW50IiwiY3J5cHRvIiwidXRpbCIsInBhc3N3b3JkIiwiZW5jcnlwdGlvbktleSIsImtleSIsInNjcnlwdFN5bmMiLCJpdiIsIkJ1ZmZlciIsImFsbG9jIiwiYWxnb3JpdGhtIiwiRGVjcnlwdFJlc3VsdCIsInJlc3VsdCIsImRlY3J5cHRSZXN1bHQiLCJnZXREZWNyeXB0UmVzdWx0IiwiRFVNTVlfSE9PS1MiLCJiZWZvcmVUZXN0IiwiYmVmb3JlU3VpdGUiLCJiZWZvcmVDYXNlIiwiYmVmb3JlQ29tbWFuZCIsImFmdGVyQ29tbWFuZCIsImFmdGVyVGVzdCIsImFmdGVyU3VpdGUiLCJhZnRlckNhc2UiLCJzZWxmIiwibW9kdWxlIiwiZXhwb3J0cyIsImdlbmVyYXRlVW5pcXVlSWQiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiZ2V0VGltZVN0YW1wIiwidXRjIiwidmFsdWVPZiIsImdlbmVyYXRlVGVzdFN1aXRlRnJvbUpzb24iLCJzdWl0ZURlZiIsInRlc3RDb25maWciLCJpdGVyYXRpb25Db3VudCIsInN1aXRlIiwiaWQiLCJuYW1lIiwiaXRlcmF0aW9ucyIsInN1aXRlRmlsZVBhdGgiLCJqb2luIiwidGFyZ2V0IiwiY3dkIiwicGFyYW1NYW5hZ2VyIiwiZ2V0UGFyYW1ldGVyTWFuYWdlciIsInBhcmFtZXRlcnMiLCJnZXRNb2RlIiwicm93cyIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50Iiwib3B0aW9ucyIsInBhcmFsbGVsIiwiY29uY3VycmVuY3kiLCJjYXNlcyIsImZvckVhY2giLCJjYXNlRGVmIiwidGMiLCJnZXRGaWxlTmFtZVdpdGhvdXRFeHQiLCJyZXNvbHZlUGF0aCIsImZvcm1hdCIsInB1c2giLCJnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGUiLCJmaWxlUGF0aCIsInBhcmFtRmlsZSIsInBhcmFtTW9kZSIsIm5vUGFyYW1BdXRvU2VhcmNoIiwiZmlsZU5hbWVOb0V4dCIsInRlc3RjYXNlIiwicmVvcGVuU2Vzc2lvbiIsImRpcm5hbWUiLCJmaWxlIiwibW9kZSIsIm1haW5GaWxlUGF0aCIsInBhcmFtT3B0cyIsImF1dG9TZWFyY2giLCJwYXJhbUZpbGVQYXRoIiwiaXNBYnNvbHV0ZSIsImxvYWRQYXJhbWV0ZXJNYW5hZ2VyIiwiZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbkZpbGUiLCJmaWxlTmFtZSIsImJhc2VuYW1lIiwiZmlsZUV4dCIsImV4dG5hbWUiLCJmaWxlUGF0aE5vRXh0Iiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJtYWluRmlsZSIsImNzdlBhcmFtRmlsZSIsInR4dFBhcmFtRmlsZSIsInhsc1BhcmFtRmlsZSIsInhsc3hQYXJhbUZpbGUiLCJleGlzdHNTeW5jIiwiaW5pdCIsInBhdGhUb1Jlc29sdmUiLCJiYXNlRm9sZGVyIiwicmVzb2x2ZSIsIm1ha2VTZXJpYWxpemFibGUiLCJlcnIiLCJkZXN0cm95Q2lyY3VsYXIiLCJmcm9tIiwic2VlbiIsInRvIiwiQXJyYXkiLCJpc0FycmF5IiwiT2JqZWN0Iiwia2V5cyIsImluZGV4T2YiLCJzbGljZSIsImdldE1ldGhvZFNpZ25hdHVyZSIsIm1vZHVsZU5hbWUiLCJtZXRob2ROYW1lIiwibWV0aG9kQXJncyIsInN0cmluZ2lmeSIsImFyZ3MiLCJpbmRlbnRhdGlvbiIsInN0ciIsIkpTT04iLCJ2YWx1ZSIsIkVycm9yIiwiUmVnRXhwIiwic291cmNlIiwiZmxhZ3MiLCJyZXBsYWNlIiwiZW5kc1dpdGgiLCJsZW5ndGgiLCJlIiwiY29uc29sZSIsIndhcm4iLCJpbnNwZWN0IiwiZGVwdGgiLCJpc0luRGVidWdNb2RlIiwibG9hZFRlc3RIb29rcyIsImhvb2tzIiwiZXhlY3V0ZVRlc3RIb29rIiwibWV0aG9kIiwiZ2xvYmFsIiwiY2hhaUFuZE1vY2tlcnlMb2FkZWQiLCJjaGFpIiwibW9ja2VyeSIsImVuYWJsZSIsInVzZUNsZWFuQ2FjaGUiLCJ3YXJuT25SZXBsYWNlIiwid2Fybk9uVW5yZWdpc3RlcmVkIiwicmVnaXN0ZXJNb2NrIiwiYXBwbHkiLCJ1bmRlZmluZWQiLCJlcnJvciIsImdldE94TW9kdWxlc0RpciIsIl9fZGlybmFtZSIsImhvb2tMb2dzIiwibG9nZ2VyIiwib3JpZ2xvZyIsImxvZyIsIm9yaWdEZWJ1ZyIsImRlYnVnIiwib3JpZ0luZm8iLCJpbmZvIiwib3JpZ1dhcm4iLCJvcmlnRXJyb3IiLCJwcm9jZXNzQXJncyIsImFyZ3VtZW50QXJyYXkiLCJtYXAiLCJpdGVtIiwibWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkIiwic3RlcHMiLCJsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCIsIm5ld1N0ZXBzIiwiaWR4IiwiaW5jbHVkZXMiLCJzdGF0dXMiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHRlZFRleHQiLCJkZWNpcGhlciIsImNyZWF0ZURlY2lwaGVyaXYiLCJkZWNyeXB0ZWQiLCJ1cGRhdGUiLCJjb25jYXQiLCJmaW5hbCIsInJldFZhbCIsIk94eWdlbkVycm9yIiwiZXJyb3JIZWxwZXIiLCJlcnJvckNvZGUiLCJDUllQVE9fRVJST1IiLCJlbmNyeXB0IiwiY2lwaGVyIiwiY3JlYXRlQ2lwaGVyaXYiLCJlbmNyeXB0ZWQiLCJzbGVlcCIsInRpbWVvdXQiLCJQcm9taXNlIiwic2V0VGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgbW9kdWxlIGZvciBpbnRlcm5hbCBPeHlnZW4gdXNlXHJcbiAqL1xyXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpO1xyXG5jb25zdCBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKTtcclxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcclxuY29uc3QgcGFzc3dvcmQgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS5lbmNyeXB0aW9uS2V5O1xyXG5jb25zdCBrZXkgPSBjcnlwdG8uc2NyeXB0U3luYyhwYXNzd29yZCwgJ0dmRycsIDI0KTtcclxuY29uc3QgaXYgPSBCdWZmZXIuYWxsb2MoMTYsIDApO1xyXG5jb25zdCBhbGdvcml0aG0gPSAnYWVzLTE5Mi1jYmMnO1xyXG5cclxuaW1wb3J0IE94eWdlbkVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmZ1bmN0aW9uIERlY3J5cHRSZXN1bHQocmVzdWx0KSB7XHJcbiAgICBjb25zdCBkZWNyeXB0UmVzdWx0ID0gcmVzdWx0O1xyXG5cclxuICAgIHRoaXMuZ2V0RGVjcnlwdFJlc3VsdCA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdFJlc3VsdDtcclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IERVTU1ZX0hPT0tTID0ge1xyXG4gICAgYmVmb3JlVGVzdDogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVTdWl0ZTogKCkgPT4ge30sXHJcbiAgICBiZWZvcmVDYXNlOiAoKSA9PiB7fSxcclxuICAgIGJlZm9yZUNvbW1hbmQ6ICgpID0+IHt9LFxyXG4gICAgYWZ0ZXJDb21tYW5kOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyVGVzdDogKCkgPT4ge30sXHJcbiAgICBhZnRlclN1aXRlOiAoKSA9PiB7fSxcclxuICAgIGFmdGVyQ2FzZTogKCkgPT4ge30sXHJcbn07XHJcblxyXG52YXIgc2VsZiA9IG1vZHVsZS5leHBvcnRzID0ge1xyXG5cclxuICAgIGdlbmVyYXRlVW5pcXVlSWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZXRUaW1lU3RhbXA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtb21lbnQudXRjKCkudmFsdWVPZigpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uOiBhc3luYyBmdW5jdGlvbihzdWl0ZURlZiwgdGVzdENvbmZpZywgaXRlcmF0aW9uQ291bnQgPSAxKSB7XHJcbiAgICAgICAgdmFyIHN1aXRlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RzdWl0ZS5qcycpKCk7XHJcbiAgICAgICAgc3VpdGUuaWQgPSBudWxsO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSBzdWl0ZURlZi5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gc3VpdGVEZWYuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBzdWl0ZURlZi5pdGVyYXRpb25zIHx8IHRlc3RDb25maWcuaXRlcmF0aW9ucyB8fCBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBjb25zdCBzdWl0ZUZpbGVQYXRoID0gc3VpdGVEZWYucGF0aCB8fCBwYXRoLmpvaW4odGVzdENvbmZpZy50YXJnZXQuY3dkLCAnc3VpdGVzJywgYCR7c3VpdGVEZWYubmFtZX0uanNvbmApO1xyXG4gICAgICAgIHN1aXRlLnBhcmFtTWFuYWdlciA9IGF3YWl0IHNlbGYuZ2V0UGFyYW1ldGVyTWFuYWdlcihzdWl0ZUZpbGVQYXRoLCB0ZXN0Q29uZmlnLnBhcmFtZXRlcnMsIHRlc3RDb25maWcudGFyZ2V0LmN3ZCk7XHJcbiAgICAgICAgaWYgKHN1aXRlLnBhcmFtTWFuYWdlciAmJiBzdWl0ZS5wYXJhbU1hbmFnZXIuZ2V0TW9kZSgpID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1aXRlLmNhcGFiaWxpdGllcyA9IHN1aXRlRGVmLmNhcGFiaWxpdGllcyB8fCB0ZXN0Q29uZmlnLmNhcGFiaWxpdGllcyB8fCB7fTtcclxuICAgICAgICBzdWl0ZS5lbnZpcm9ubWVudCA9IHRlc3RDb25maWcuZW52aXJvbm1lbnQgfHwgbnVsbDtcclxuICAgICAgICBzdWl0ZS5vcHRpb25zID0gdGVzdENvbmZpZy5vcHRpb25zIHx8IG51bGw7XHJcbiAgICAgICAgc3VpdGUucGFyYWxsZWwgPSBzdWl0ZURlZi5wYXJhbGxlbCB8fCB0ZXN0Q29uZmlnLnBhcmFsbGVsIHx8IHRlc3RDb25maWcuY29uY3VycmVuY3kgfHwgMTtcclxuICAgICAgICAvLyBpbml0aWFsaXplIGVhY2ggdGVzdCBjYXNlXHJcbiAgICAgICAgc3VpdGVEZWYuY2FzZXMuZm9yRWFjaChjYXNlRGVmID0+IHtcclxuICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0ZXN0Y2FzZSBvYmplY3RcclxuICAgICAgICAgICAgY29uc3QgdGMgPSBuZXcgcmVxdWlyZSgnLi4vbW9kZWwvdGVzdGNhc2UuanMnKSgpO1xyXG4gICAgICAgICAgICBpZiAoY2FzZURlZi5uYW1lKVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IGNhc2VEZWYubmFtZTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGMubmFtZSA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGNhc2VEZWYucGF0aCk7XHJcbiAgICAgICAgICAgIHRjLnBhdGggPSBzZWxmLnJlc29sdmVQYXRoKGNhc2VEZWYucGF0aCwgdGVzdENvbmZpZy50YXJnZXQuY3dkKTtcclxuICAgICAgICAgICAgdGMuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICAgICAgdGMuaXRlcmF0aW9uQ291bnQgPSBjYXNlRGVmLml0ZXJhdGlvbnMgfHwgMTtcclxuICAgICAgICAgICAgc3VpdGUuY2FzZXMucHVzaCh0Yyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHN1aXRlO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21KU0ZpbGU6IGFzeW5jIGZ1bmN0aW9uIChmaWxlUGF0aCwgcGFyYW1GaWxlID0gbnVsbCwgcGFyYW1Nb2RlID0gbnVsbCwgbm9QYXJhbUF1dG9TZWFyY2ggPSB0cnVlLCBpdGVyYXRpb25Db3VudCA9IDEpIHtcclxuICAgICAgICB2YXIgZmlsZU5hbWVOb0V4dCA9IHNlbGYuZ2V0RmlsZU5hbWVXaXRob3V0RXh0KGZpbGVQYXRoKTtcclxuXHJcbiAgICAgICAgdmFyIHRlc3RjYXNlID0gbmV3IHJlcXVpcmUoJy4uL21vZGVsL3Rlc3RjYXNlLmpzJykoKTtcclxuICAgICAgICB0ZXN0Y2FzZS5uYW1lID0gZmlsZU5hbWVOb0V4dDtcclxuICAgICAgICB0ZXN0Y2FzZS5wYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgdGVzdGNhc2UuZm9ybWF0ID0gJ2pzJztcclxuICAgICAgICB0ZXN0Y2FzZS5pdGVyYXRpb25Db3VudCA9IDE7XHJcblxyXG4gICAgICAgIHZhciBzdWl0ZSA9IG5ldyByZXF1aXJlKCcuLi9tb2RlbC90ZXN0c3VpdGUuanMnKSgpO1xyXG4gICAgICAgIHN1aXRlLm5hbWUgPSB0ZXN0Y2FzZS5uYW1lO1xyXG4gICAgICAgIHN1aXRlLmlkID0gdGVzdGNhc2UuaWQ7XHJcbiAgICAgICAgc3VpdGUuaXRlcmF0aW9uQ291bnQgPSBpdGVyYXRpb25Db3VudDtcclxuICAgICAgICBzdWl0ZS5jYXNlcy5wdXNoKHRlc3RjYXNlKTtcclxuICAgICAgICBpZiAodGVzdGNhc2UucmVvcGVuU2Vzc2lvbikge1xyXG4gICAgICAgICAgICBzdWl0ZS5yZW9wZW5TZXNzaW9uID0gdGVzdGNhc2UucmVvcGVuU2Vzc2lvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3dkID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBzdWl0ZS5wYXJhbU1hbmFnZXIgPSBhd2FpdCBzZWxmLmdldFBhcmFtZXRlck1hbmFnZXIoZmlsZVBhdGgsIHsgZmlsZTogcGFyYW1GaWxlLCBtb2RlOiBwYXJhbU1vZGUgfSwgY3dkKTtcclxuICAgICAgICAvLyBpZiBwYXJhbWV0ZXIgcmVhZGluZyBtb2RlIGlzICdhbGwnIHRoZW4gY2hhbmdlIGl0ZXJhdGlvbkNvdW50IHRvIHRoZSBhbW91bnQgb2Ygcm93cyBpbiB0aGUgcGFyYW0gZmlsZVxyXG4gICAgICAgIGlmIChzdWl0ZS5wYXJhbU1hbmFnZXIgJiYgcGFyYW1Nb2RlID09ICdhbGwnKSB7XHJcbiAgICAgICAgICAgIHN1aXRlLml0ZXJhdGlvbkNvdW50ID0gc3VpdGUucGFyYW1NYW5hZ2VyLnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWl0ZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0UGFyYW1ldGVyTWFuYWdlcjogYXN5bmMgZnVuY3Rpb24obWFpbkZpbGVQYXRoLCBwYXJhbU9wdHMgPSBudWxsLCBjd2QgPSBudWxsLCBhdXRvU2VhcmNoID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcGFyYW1GaWxlUGF0aCA9IHBhcmFtT3B0cyAmJiBwYXJhbU9wdHMuZmlsZSA/IHBhcmFtT3B0cy5maWxlIDogbnVsbDtcclxuICAgICAgICBsZXQgcGFyYW1Nb2RlID0gcGFyYW1PcHRzICYmIHBhcmFtT3B0cy5tb2RlID8gcGFyYW1PcHRzLm1vZGUgOiAnc2VxJztcclxuXHJcbiAgICAgICAgaWYgKHBhcmFtRmlsZVBhdGggJiYgY3dkICYmICFwYXRoLmlzQWJzb2x1dGUocGFyYW1GaWxlUGF0aCkpIHtcclxuICAgICAgICAgICAgcGFyYW1GaWxlUGF0aCA9IHBhdGguam9pbihjd2QsIHBhcmFtRmlsZVBhdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYubG9hZFBhcmFtZXRlck1hbmFnZXIobWFpbkZpbGVQYXRoLCBwYXJhbUZpbGVQYXRoLCBwYXJhbU1vZGUsIGF1dG9TZWFyY2gpO1xyXG4gICAgfSxcclxuXHJcbiAgICBnZW5lcmF0ZVRlc3RTdWl0ZUZyb21Kc29uRmlsZTogYXN5bmMgZnVuY3Rpb24gKGZpbGVQYXRoLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSA9IG51bGwsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IHRlc3RDb25maWcgPSB7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMgfHwge30sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocGFyYW1GaWxlKSB7XHJcbiAgICAgICAgICAgIHRlc3RDb25maWcucGFyYW1ldGVycyA9IHtcclxuICAgICAgICAgICAgICAgIGZpbGU6IHBhcmFtRmlsZSxcclxuICAgICAgICAgICAgICAgIG1vZGU6IHBhcmFtTW9kZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHNlbGYuZ2VuZXJhdGVUZXN0U3VpdGVGcm9tSnNvbihyZXF1aXJlKGZpbGVQYXRoKSwgdGVzdENvbmZpZyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGdldEZpbGVOYW1lV2l0aG91dEV4dDogZnVuY3Rpb24gKGZpbGVQYXRoKSB7XHJcbiAgICAgICAgdmFyIGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlUGF0aCk7XHJcbiAgICAgICAgdmFyIGZpbGVFeHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIHZhciBmaWxlUGF0aE5vRXh0ID0gZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxhc3RJbmRleE9mKGZpbGVFeHQpKTtcclxuICAgICAgICByZXR1cm4gZmlsZVBhdGhOb0V4dDtcclxuICAgIH0sXHJcblxyXG4gICAgbG9hZFBhcmFtZXRlck1hbmFnZXI6IGFzeW5jIGZ1bmN0aW9uKG1haW5GaWxlLCBwYXJhbUZpbGUsIHBhcmFtTW9kZSwgYXV0b1NlYXJjaCA9IGZhbHNlKSB7XHJcbiAgICAgICAgdmFyIHBhcmFtTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgLy8gaWYgcGFyYW0gZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGNoZWNrIGlmIEpTIGZpbGUgaXMgY29taW5nIGluIHBhaXIgd2l0aCBhIHBhcmFtZXRlciBmaWxlIFxyXG4gICAgICAgIC8vIChjdXJyZW50bHkgc3VwcG9ydGluZyBDU1Ygb3IgVFhUKVxyXG4gICAgICAgIGlmICghcGFyYW1GaWxlICYmIGF1dG9TZWFyY2gpIHtcclxuICAgICAgICAgICAgdmFyIGZpbGVOYW1lTm9FeHQgPSBzZWxmLmdldEZpbGVOYW1lV2l0aG91dEV4dChtYWluRmlsZSk7XHJcbiAgICAgICAgICAgIHZhciBjc3ZQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcuY3N2Jyk7XHJcbiAgICAgICAgICAgIHZhciB0eHRQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcudHh0Jyk7XHJcbiAgICAgICAgICAgIHZhciB4bHNQYXJhbUZpbGUgPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKG1haW5GaWxlKSwgZmlsZU5hbWVOb0V4dCArICcueGxzJyk7XHJcbiAgICAgICAgICAgIHZhciB4bHN4UGFyYW1GaWxlID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShtYWluRmlsZSksIGZpbGVOYW1lTm9FeHQgKyAnLnhsc3gnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGNzdlBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IGNzdlBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHR4dFBhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHR4dFBhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc1BhcmFtRmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtRmlsZSA9IHhsc1BhcmFtRmlsZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmcy5leGlzdHNTeW5jKHhsc3hQYXJhbUZpbGUpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbUZpbGUgPSB4bHN4UGFyYW1GaWxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJhbUZpbGUpIHtcclxuICAgICAgICAgICAgcGFyYW1NYW5hZ2VyID0gbmV3IHJlcXVpcmUoJy4vcGFyYW0tbWFuYWdlcicpKHBhcmFtRmlsZSwgcGFyYW1Nb2RlIHx8ICdzZXF1ZW50aWFsJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHBhcmFtTWFuYWdlci5pbml0KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJhbU1hbmFnZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuXHJcbiAgICByZXNvbHZlUGF0aDogZnVuY3Rpb24ocGF0aFRvUmVzb2x2ZSwgYmFzZUZvbGRlcikge1xyXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocGF0aFRvUmVzb2x2ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXRoVG9SZXNvbHZlO1xyXG4gICAgICAgIHJldHVybiBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aFRvUmVzb2x2ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIG1ha2VTZXJpYWxpemFibGU6IGZ1bmN0aW9uKGVycikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gZGVzdHJveUNpcmN1bGFyKGVyciwgW10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXJyO1xyXG5cclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam9ucGFja2VyL2Rlc3Ryb3ktY2lyY3VsYXJcclxuICAgICAgICBmdW5jdGlvbiBkZXN0cm95Q2lyY3VsYXIoZnJvbSwgc2Vlbikge1xyXG4gICAgICAgICAgICB2YXIgdG8gPSBBcnJheS5pc0FycmF5KGZyb20pID8gW10gOiB7fTtcclxuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tW2tleV0gfHwgKHR5cGVvZiBmcm9tW2tleV0gIT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZnJvbVtrZXldKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b1trZXldID0gZnJvbVtrZXldO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWVuLmluZGV4T2YoZnJvbVtrZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvW2tleV0gPSBkZXN0cm95Q2lyY3VsYXIoZnJvbVtrZXldLCBzZWVuLnNsaWNlKDApKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB0b1trZXldID0gJ1tDaXJjdWxhcl0nO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRvO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0TWV0aG9kU2lnbmF0dXJlOiBmdW5jdGlvbihtb2R1bGVOYW1lLCBtZXRob2ROYW1lLCBtZXRob2RBcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZU5hbWUgKyAnLicgKyBtZXRob2ROYW1lICsgJygnICsgc2VsZi5zdHJpbmdpZnkobWV0aG9kQXJncywgMCkgKyAnKSc7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBVc2VkIHRvIHNlcmlhbGl6ZSBveHlnZW4gY29tbWFuZCBwYXJhbWV0ZXJzLiBQcm9kdWNlcyBhIG5vbi1jb21wbGlhbnQgSlNPTiBzZXJpYWxpemF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIChhcmdzLCBpbmRlbnRhdGlvbiA9IDApIHtcclxuICAgICAgICBsZXQgc3RyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KGFyZ3MsIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgeyAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lTGFicy9qc2JpL2lzc3Vlcy8zMFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHVuZGVmaW5lZCBpcyBpbnNpZGUgYW4gYXJyYXkgdGhlbiBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgbnVsbC5cclxuICAgICAgICAgICAgICAgICAgICAvLyBob3dldmVyIGlmIHdlIGp1c3QgcmV0dXJuICd1bmRlZmluZWQnIGhlcmUgYXMgc3RyaW5nLCBpdCB3aWxsIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzbyByZXR1cm4gbWFnaWMgc3RyaW5nIGluc3RlYWQgYW5kIHRyaW0gdGhlIHF1b3RlcyBsYXRlciBvblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnX19VTkRFRklORUQnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcvJyArIHZhbHVlLnNvdXJjZSArICcvJyArIHZhbHVlLmZsYWdzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9LCBpbmRlbnRhdGlvbik7XHJcbiAgICAgICAgICAgIC8vIHRyaW0gdGhlIGVuY2xvc2luZyBhcnJheSBhbmQgYW55IHdoaXRlc3BhY2VcclxuICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXFt7MX1cXHMqfFxccypcXF17MX0kL2csICcnKTtcclxuICAgICAgICAgICAgLy8gcmVtb3ZlIHNwYWNlIGJlZm9yZSBsYXN0IH0gYW5kIF0sIHRvIG1ha2UgaW5kZW50YXRpb24gbXRjaCB0aGUgb3BlbmluZyBicmFja2V0XHJcbiAgICAgICAgICAgIGlmIChzdHIuZW5kc1dpdGgoJyAgfScpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIHN0ci5sZW5ndGggLSAzKSArICd9JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RyLmVuZHNXaXRoKCcgIF0nKSkge1xyXG4gICAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoIC0gMykgKyAnXSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29udmVydCBtYWdpYyAndW5kZWZpbmVkJyBzdHJpbmcgdG8gcHJvcGVyIHJlcHJlc2VudGF0aW9uXHJcbiAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cIl9fVU5ERUZJTkVEXCIvZywgJ3VuZGVmaW5lZCcpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc2VyaWFsaXplIGNvbW1hbmQgYXJndW1lbnRzOiAnLCBlKTtcclxuICAgICAgICAgICAgLy8gaWYgSlNPTi5zdHJpbmdpZnkgZmFpbHMsIHRoZW4gZmFsbGJhY2sgdG8gdXRpbC5pbnNwZWN0LlxyXG4gICAgICAgICAgICAvLyAod2UgZG9uJ3QgdXNlIHV0aWwuaW5zcGVjdCBpbml0aWFseSBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdXRwdXQgaW5kZW50YXRpb24pXHJcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmluc3BlY3QoYXJnc1swXSwgeyBkZXB0aDogMyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH0sXHJcblxyXG4gICAgaXNJbkRlYnVnTW9kZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gdGhpcyBhbHdheXMgdHJ1ZTtcclxuICAgICAgICAvLyBjb25zdCBhcmd2ID0gcHJvY2Vzcy5leGVjQXJndi5qb2luKCk7XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwcm9jZXNzLmRlYnVnUG9ydCcsIHByb2Nlc3MuZGVidWdQb3J0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2luc3BlY3QnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKVwiLCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0LWJyaycpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFyZ3YuaW5jbHVkZXMoJ2RlYnVnJylcIiwgYXJndi5pbmNsdWRlcygnZGVidWcnKSk7XHJcblxyXG4gICAgICAgIC8vIHJldHVybiBwcm9jZXNzLmRlYnVnUG9ydCB8fCBhcmd2LmluY2x1ZGVzKCdpbnNwZWN0JykgfHwgYXJndi5pbmNsdWRlcygnaW5zcGVjdC1icmsnKSB8fCBhcmd2LmluY2x1ZGVzKCdkZWJ1ZycpO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9LFxyXG5cclxuICAgIGxvYWRUZXN0SG9va3M6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgaG9va3MgPSBEVU1NWV9IT09LUztcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnRhcmdldCAmJiBvcHRpb25zLnRhcmdldC5uYW1lID09PSAnb3h5Z2VuLmNvbmYnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBob29rcyA9IHJlcXVpcmUob3B0aW9ucy50YXJnZXQucGF0aCkuaG9va3MgfHwgRFVNTVlfSE9PS1M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgbG9hZGluZyB1c2VyIGhvb2tzOicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBob29rcztcclxuICAgIH0sXHJcblxyXG4gICAgZXhlY3V0ZVRlc3RIb29rOiBhc3luYyBmdW5jdGlvbihob29rcywgbWV0aG9kLCBhcmdzKSB7XHJcbiAgICAgICAgLy8gaWYgaG9vayBpcyBub3QgZGVmaW5lZCwganVzdCBxdWlldGx5IGlnbm9yZSBpdFxyXG4gICAgICAgIGlmICghaG9va3MgfHwgIW1ldGhvZCB8fCAhaG9va3NbbWV0aG9kXSB8fCB0eXBlb2YgaG9va3NbbWV0aG9kXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpID0gcmVxdWlyZSgnY2hhaScpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9ja2VyeSA9IHJlcXVpcmUoJ21vY2tlcnknKTtcclxuICAgICAgICAgICAgICAgIG1vY2tlcnkuZW5hYmxlKHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VDbGVhbkNhY2hlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblJlcGxhY2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdhcm5PblVucmVnaXN0ZXJlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgbW9ja2VyeS5yZWdpc3Rlck1vY2soJ2NoYWknLCBjaGFpKTtcclxuICAgICAgICAgICAgICAgIGdsb2JhbC5jaGFpQW5kTW9ja2VyeUxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF3YWl0IGhvb2tzW21ldGhvZF0uYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSG9vayBcIiR7bWV0aG9kfVwiIGhhcyB0aHJvd24gYW4gZXJyb3I6ICR7ZS50b1N0cmluZygpfWApO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0T3hNb2R1bGVzRGlyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ294X21vZHVsZXMnKTtcclxuICAgIH0sXHJcblxyXG4gICAgaG9va0xvZ3MobG9nZ2VyKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2xvZyA9IGNvbnNvbGUubG9nO1xyXG4gICAgICAgIGNvbnN0IG9yaWdEZWJ1ZyA9IGNvbnNvbGUuZGVidWc7XHJcbiAgICAgICAgY29uc3Qgb3JpZ0luZm8gPSBjb25zb2xlLmluZm87XHJcbiAgICAgICAgY29uc3Qgb3JpZ1dhcm4gPSBjb25zb2xlLndhcm47XHJcbiAgICAgICAgY29uc3Qgb3JpZ0Vycm9yID0gY29uc29sZS5lcnJvcjtcclxuXHJcbiAgICAgICAgY29uc3QgcHJvY2Vzc0FyZ3MgPSAoYXJndW1lbnRBcnJheSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gW107XHJcblxyXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRBcnJheSAmJiBhcmd1bWVudEFycmF5Lm1hcCkge1xyXG4gICAgICAgICAgICAgICAgYXJndW1lbnRBcnJheS5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGAke2l0ZW19YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYCR7dXRpbC5pbnNwZWN0KGl0ZW0pfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyAnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyA9IGZ1bmN0aW9uICguLi5hcmd1bWVudEFycmF5KSB7XHJcbiAgICAgICAgICAgIG9yaWdsb2cuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRGVidWcuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zyhwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zb2xlLmluZm8gPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnSW5mby5hcHBseSh0aGlzLCBhcmd1bWVudEFycmF5KTtcclxuICAgICAgICAgICAgbG9nZ2VyLmluZm8ocHJvY2Vzc0FyZ3MoYXJndW1lbnRBcnJheSkpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc29sZS53YXJuID0gZnVuY3Rpb24gKC4uLmFyZ3VtZW50QXJyYXkpIHtcclxuICAgICAgICAgICAgb3JpZ1dhcm4uYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci53YXJuKHByb2Nlc3NBcmdzKGFyZ3VtZW50QXJyYXkpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IgPSBmdW5jdGlvbiAoLi4uYXJndW1lbnRBcnJheSkge1xyXG4gICAgICAgICAgICBvcmlnRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRBcnJheSk7XHJcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihwcm9jZXNzQXJncyhhcmd1bWVudEFycmF5KSk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZVRyYW5zYWN0aW9uRmFpbGVkSWZTdGVwRmFpbGVkKHN0ZXBzKSB7XHJcbiAgICAgICAgaWYgKHN0ZXBzICYmIHN0ZXBzLmxlbmd0aCAmJiBzdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0RmluZGVkVHJhbnNhY3Rpb25JbmRleCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdTdGVwcyA9IFsuLi5zdGVwc107XHJcbiAgICAgICAgICAgIHN0ZXBzLm1hcCgoaXRlbSwgaWR4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lICYmIGl0ZW0ubmFtZS5pbmNsdWRlcyAmJiBpdGVtLm5hbWUuaW5jbHVkZXMoJy50cmFuc2FjdGlvbignKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4ID0gaWR4O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFzdEZpbmRlZFRyYW5zYWN0aW9uSW5kZXggPT09ICdudW1iZXInICYmIGl0ZW0uc3RhdHVzICYmIGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ZXBzW2xhc3RGaW5kZWRUcmFuc2FjdGlvbkluZGV4XVsnc3RhdHVzJ10gPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3U3RlcHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3RlcHM7XHJcbiAgICB9LFxyXG5cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCBlbmNyeXB0ZWRUZXh0ID0gQnVmZmVyLmZyb20odGV4dCwgJ2hleCcpO1xyXG4gICAgICAgICAgICBsZXQgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihhbGdvcml0aG0sIGtleSwgaXYpO1xyXG4gICAgICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZFRleHQpO1xyXG4gICAgICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICAgICAgY29uc3QgcmV0VmFsID0gZGVjcnlwdGVkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVjcnlwdFJlc3VsdChyZXRWYWwpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94eWdlbkVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DUllQVE9fRVJST1IsIFwiVGhlIHByb3ZpZGVkIGFyZ3VtZW50IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHZhbGlkIGNpcGhlciBwcm9kdWNlZCBieSAndXRpbHMuZW5jcnlwdCdcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBlbmNyeXB0KHRleHQpIHtcclxuICAgICAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGFsZ29yaXRobSwga2V5LCBpdik7XHJcbiAgICAgICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUodGV4dCk7XHJcbiAgICAgICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoJ2hleCcpO1xyXG4gICAgfSxcclxuXHJcbiAgICBzbGVlcDogZnVuY3Rpb24odGltZW91dCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KSk7XHJcbiAgICB9XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBc0JBO0FBQ0E7QUFBMkM7QUFYM0MsTUFBTUEsSUFBSSxHQUFHQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU1DLEVBQUUsR0FBR0QsT0FBTyxD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
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  module.exports = function () {
6
5
  return {
7
6
  name: null,
@@ -18,4 +17,4 @@ module.exports = function () {
18
17
  context: null
19
18
  };
20
19
  };
21
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9jYXNlLXJlc3VsdC5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsIml0ZXJhdGlvbk51bSIsImxvY2F0aW9uIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsImR1cmF0aW9uIiwic3RhdHVzIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiZmFpbHVyZSIsImNvbnRleHQiXSwibWFwcGluZ3MiOiI7Ozs7QUFZQUEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLFlBQVk7QUFDekIsU0FBTztBQUNIQyxJQUFBQSxJQUFJLEVBQUUsSUFESDtBQUVIQyxJQUFBQSxZQUFZLEVBQUUsQ0FGWDtBQUdIQyxJQUFBQSxRQUFRLEVBQUUsSUFIUDtBQUlIQyxJQUFBQSxTQUFTLEVBQUUsSUFKUjtBQUtIQyxJQUFBQSxPQUFPLEVBQUUsSUFMTjtBQU1IQyxJQUFBQSxRQUFRLEVBQUUsSUFOUDtBQU9IQyxJQUFBQSxNQUFNLEVBQUUsSUFQTDtBQVFIQyxJQUFBQSxLQUFLLEVBQUUsRUFSSjtBQVNIQyxJQUFBQSxJQUFJLEVBQUUsRUFUSDtBQVVIQyxJQUFBQSxHQUFHLEVBQUUsSUFWRjtBQVdIQyxJQUFBQSxPQUFPLEVBQUUsSUFYTjtBQVlIQyxJQUFBQSxPQUFPLEVBQUU7QUFaTixHQUFQO0FBY0gsQ0FmRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogVGVzdCBDYXNlIFJlc3VsdHNcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBudWxsLFxyXG4gICAgICAgIGl0ZXJhdGlvbk51bTogMSxcclxuICAgICAgICBsb2NhdGlvbjogbnVsbCxcclxuICAgICAgICBzdGFydFRpbWU6IG51bGwsXHJcbiAgICAgICAgZW5kVGltZTogbnVsbCxcclxuICAgICAgICBkdXJhdGlvbjogbnVsbCxcclxuICAgICAgICBzdGF0dXM6IG51bGwsXHJcbiAgICAgICAgc3RlcHM6IFtdLCAgICAvLyBhcnJheSBvZiBzdGVwLXJlc3VsdC5qc1xyXG4gICAgICAgIGxvZ3M6IFtdLFxyXG4gICAgICAgIGhhcjogbnVsbCxcclxuICAgICAgICBmYWlsdXJlOiBudWxsLFxyXG4gICAgICAgIGNvbnRleHQ6IG51bGxcclxuICAgIH07XHJcbn07XHJcbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsIml0ZXJhdGlvbk51bSIsImxvY2F0aW9uIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsImR1cmF0aW9uIiwic3RhdHVzIiwic3RlcHMiLCJsb2dzIiwiaGFyIiwiZmFpbHVyZSIsImNvbnRleHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvY2FzZS1yZXN1bHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBUZXN0IENhc2UgUmVzdWx0c1xyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IG51bGwsXHJcbiAgICAgICAgaXRlcmF0aW9uTnVtOiAxLFxyXG4gICAgICAgIGxvY2F0aW9uOiBudWxsLFxyXG4gICAgICAgIHN0YXJ0VGltZTogbnVsbCxcclxuICAgICAgICBlbmRUaW1lOiBudWxsLFxyXG4gICAgICAgIGR1cmF0aW9uOiBudWxsLFxyXG4gICAgICAgIHN0YXR1czogbnVsbCxcclxuICAgICAgICBzdGVwczogW10sICAgIC8vIGFycmF5IG9mIHN0ZXAtcmVzdWx0LmpzXHJcbiAgICAgICAgbG9nczogW10sXHJcbiAgICAgICAgaGFyOiBudWxsLFxyXG4gICAgICAgIGZhaWx1cmU6IG51bGwsXHJcbiAgICAgICAgY29udGV4dDogbnVsbFxyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLFlBQVksRUFBRSxDQUFDO0lBQ2ZDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFNBQVMsRUFBRSxJQUFJO0lBQ2ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLEtBQUssRUFBRSxFQUFFO0lBQ1RDLElBQUksRUFBRSxFQUFFO0lBQ1JDLEdBQUcsRUFBRSxJQUFJO0lBQ1RDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE9BQU8sRUFBRTtFQUNiLENBQUM7QUFDTCxDQUFDIn0=
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  module.exports = function () {
6
5
  return {
7
6
  type: null,
@@ -12,4 +11,4 @@ module.exports = function () {
12
11
  fatal: false
13
12
  };
14
13
  };
15
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9mYWlsdXJlLmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJ0eXBlIiwibWVzc2FnZSIsImRldGFpbHMiLCJsb2NhdGlvbiIsImRhdGEiLCJmYXRhbCJdLCJtYXBwaW5ncyI6Ijs7OztBQVlBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsWUFBWTtBQUN6QixTQUFPO0FBQ0hDLElBQUFBLElBQUksRUFBRSxJQURIO0FBRUhDLElBQUFBLE9BQU8sRUFBRSxJQUZOO0FBR0hDLElBQUFBLE9BQU8sRUFBRSxJQUhOO0FBSUhDLElBQUFBLFFBQVEsRUFBRSxJQUpQO0FBS0hDLElBQUFBLElBQUksRUFBRSxJQUxIO0FBTUhDLElBQUFBLEtBQUssRUFBRTtBQU5KLEdBQVA7QUFRSCxDQVREIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBUZXN0LCBDYXNlLCBTdWl0ZSBhbmQgU3RlcCBmYWlsdXJlIGRldGFpbHNcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBudWxsLFxyXG4gICAgICAgIG1lc3NhZ2U6IG51bGwsXHJcbiAgICAgICAgZGV0YWlsczogbnVsbCxcclxuICAgICAgICBsb2NhdGlvbjogbnVsbCxcclxuICAgICAgICBkYXRhOiBudWxsLFxyXG4gICAgICAgIGZhdGFsOiBmYWxzZSxcclxuICAgIH07XHJcbn07XHJcbiJdfQ==
14
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwidHlwZSIsIm1lc3NhZ2UiLCJkZXRhaWxzIiwibG9jYXRpb24iLCJkYXRhIiwiZmF0YWwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvZmFpbHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFRlc3QsIENhc2UsIFN1aXRlIGFuZCBTdGVwIGZhaWx1cmUgZGV0YWlsc1xyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IG51bGwsXHJcbiAgICAgICAgbWVzc2FnZTogbnVsbCxcclxuICAgICAgICBkZXRhaWxzOiBudWxsLFxyXG4gICAgICAgIGxvY2F0aW9uOiBudWxsLFxyXG4gICAgICAgIGRhdGE6IG51bGwsXHJcbiAgICAgICAgZmF0YWw6IGZhbHNlLFxyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLEtBQUssRUFBRTtFQUNYLENBQUM7QUFDTCxDQUFDIn0=
@@ -1,11 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  module.exports = {
6
5
  FAILED: 'failed',
7
6
  PASSED: 'passed',
8
7
  WARNING: 'warning',
9
8
  SKIPPED: 'skipped'
10
9
  };
11
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9zdGF0dXMuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIkZBSUxFRCIsIlBBU1NFRCIsIldBUk5JTkciLCJTS0lQUEVEIl0sIm1hcHBpbmdzIjoiOzs7O0FBU0FBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUNiQyxFQUFBQSxNQUFNLEVBQUUsUUFESztBQUViQyxFQUFBQSxNQUFNLEVBQUUsUUFGSztBQUdiQyxFQUFBQSxPQUFPLEVBQUUsU0FISTtBQUliQyxFQUFBQSxPQUFPLEVBQUU7QUFKSSxDQUFqQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBGQUlMRUQ6ICdmYWlsZWQnLFxyXG4gICAgUEFTU0VEOiAncGFzc2VkJyxcclxuICAgIFdBUk5JTkc6ICd3YXJuaW5nJyxcclxuICAgIFNLSVBQRUQ6ICdza2lwcGVkJ1xyXG59O1xyXG4iXX0=
10
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiRkFJTEVEIiwiUEFTU0VEIiwiV0FSTklORyIsIlNLSVBQRUQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvc3RhdHVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBGQUlMRUQ6ICdmYWlsZWQnLFxyXG4gICAgUEFTU0VEOiAncGFzc2VkJyxcclxuICAgIFdBUk5JTkc6ICd3YXJuaW5nJyxcclxuICAgIFNLSVBQRUQ6ICdza2lwcGVkJ1xyXG59O1xyXG4iXSwibWFwcGluZ3MiOiI7OztBQVNBQSxNQUFNLENBQUNDLE9BQU8sR0FBRztFQUNiQyxNQUFNLEVBQUUsUUFBUTtFQUNoQkMsTUFBTSxFQUFFLFFBQVE7RUFDaEJDLE9BQU8sRUFBRSxTQUFTO0VBQ2xCQyxPQUFPLEVBQUU7QUFDYixDQUFDIn0=
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  module.exports = function () {
6
5
  return {
7
6
  name: null,
@@ -19,4 +18,4 @@ module.exports = function () {
19
18
  steps: []
20
19
  };
21
20
  };
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9zdGVwLXJlc3VsdC5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsImxvY2F0aW9uIiwic3RhdHVzIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsImR1cmF0aW9uIiwidHJhbnNhY3Rpb24iLCJhY3Rpb24iLCJzY3JlZW5zaG90RmlsZSIsImZhaWx1cmUiLCJzY3JlZW5zaG90Iiwic3RhdHMiLCJzdGVwcyJdLCJtYXBwaW5ncyI6Ijs7OztBQVlBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsWUFBWTtBQUN6QixTQUFPO0FBQ0hDLElBQUFBLElBQUksRUFBRSxJQURIO0FBRUhDLElBQUFBLFFBQVEsRUFBRSxJQUZQO0FBR0hDLElBQUFBLE1BQU0sRUFBRSxJQUhMO0FBSUhDLElBQUFBLFNBQVMsRUFBRSxJQUpSO0FBS0hDLElBQUFBLE9BQU8sRUFBRSxJQUxOO0FBTUhDLElBQUFBLFFBQVEsRUFBRSxJQU5QO0FBT0hDLElBQUFBLFdBQVcsRUFBRSxJQVBWO0FBUUhDLElBQUFBLE1BQU0sRUFBRSxJQVJMO0FBU0hDLElBQUFBLGNBQWMsRUFBRSxJQVRiO0FBVUhDLElBQUFBLE9BQU8sRUFBRSxJQVZOO0FBV0hDLElBQUFBLFVBQVUsRUFBRSxJQVhUO0FBWUhDLElBQUFBLEtBQUssRUFBRSxJQVpKO0FBYUhDLElBQUFBLEtBQUssRUFBRTtBQWJKLEdBQVA7QUFlSCxDQWhCRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogVGVzdCBTdGVwIFJlc3VsdHNcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBudWxsLFxyXG4gICAgICAgIGxvY2F0aW9uOiBudWxsLFxyXG4gICAgICAgIHN0YXR1czogbnVsbCxcclxuICAgICAgICBzdGFydFRpbWU6IG51bGwsXHJcbiAgICAgICAgZW5kVGltZTogbnVsbCxcclxuICAgICAgICBkdXJhdGlvbjogbnVsbCxcclxuICAgICAgICB0cmFuc2FjdGlvbjogbnVsbCxcclxuICAgICAgICBhY3Rpb246IG51bGwsICAvLyB0cnVlIC8gZmFsc2VcclxuICAgICAgICBzY3JlZW5zaG90RmlsZTogbnVsbCxcclxuICAgICAgICBmYWlsdXJlOiBudWxsLCAgLy8gdHlwZSBvZiBzdGVwZmFpbHVyZS5qc1xyXG4gICAgICAgIHNjcmVlbnNob3Q6IG51bGwsIC8veyBfOiBudWxsIH1cclxuICAgICAgICBzdGF0czogbnVsbCwgICAgIC8vIG5hdmlnYXRpb24gdGltaW5ncyBvciBvdGhlciBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzXHJcbiAgICAgICAgc3RlcHM6IFtdLCAgICAgIC8vIHN1YiBzdGVwc1xyXG4gICAgfTtcclxufTtcclxuIl19
21
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsImxvY2F0aW9uIiwic3RhdHVzIiwic3RhcnRUaW1lIiwiZW5kVGltZSIsImR1cmF0aW9uIiwidHJhbnNhY3Rpb24iLCJhY3Rpb24iLCJzY3JlZW5zaG90RmlsZSIsImZhaWx1cmUiLCJzY3JlZW5zaG90Iiwic3RhdHMiLCJzdGVwcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9zdGVwLXJlc3VsdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFRlc3QgU3RlcCBSZXN1bHRzXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZTogbnVsbCxcclxuICAgICAgICBsb2NhdGlvbjogbnVsbCxcclxuICAgICAgICBzdGF0dXM6IG51bGwsXHJcbiAgICAgICAgc3RhcnRUaW1lOiBudWxsLFxyXG4gICAgICAgIGVuZFRpbWU6IG51bGwsXHJcbiAgICAgICAgZHVyYXRpb246IG51bGwsXHJcbiAgICAgICAgdHJhbnNhY3Rpb246IG51bGwsXHJcbiAgICAgICAgYWN0aW9uOiBudWxsLCAgLy8gdHJ1ZSAvIGZhbHNlXHJcbiAgICAgICAgc2NyZWVuc2hvdEZpbGU6IG51bGwsXHJcbiAgICAgICAgZmFpbHVyZTogbnVsbCwgIC8vIHR5cGUgb2Ygc3RlcGZhaWx1cmUuanNcclxuICAgICAgICBzY3JlZW5zaG90OiBudWxsLCAvL3sgXzogbnVsbCB9XHJcbiAgICAgICAgc3RhdHM6IG51bGwsICAgICAvLyBuYXZpZ2F0aW9uIHRpbWluZ3Mgb3Igb3RoZXIgcGVyZm9ybWFuY2Ugc3RhdGlzdGljc1xyXG4gICAgICAgIHN0ZXBzOiBbXSwgICAgICAvLyBzdWIgc3RlcHNcclxuICAgIH07XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBWUFBLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHLFlBQVk7RUFDekIsT0FBTztJQUNIQyxJQUFJLEVBQUUsSUFBSTtJQUNWQyxRQUFRLEVBQUUsSUFBSTtJQUNkQyxNQUFNLEVBQUUsSUFBSTtJQUNaQyxTQUFTLEVBQUUsSUFBSTtJQUNmQyxPQUFPLEVBQUUsSUFBSTtJQUNiQyxRQUFRLEVBQUUsSUFBSTtJQUNkQyxXQUFXLEVBQUUsSUFBSTtJQUNqQkMsTUFBTSxFQUFFLElBQUk7SUFDWkMsY0FBYyxFQUFFLElBQUk7SUFDcEJDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCQyxLQUFLLEVBQUUsSUFBSTtJQUNYQyxLQUFLLEVBQUU7RUFDWCxDQUFDO0FBQ0wsQ0FBQyJ9
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  module.exports = function () {
6
5
  return {
7
6
  name: null,
@@ -13,4 +12,4 @@ module.exports = function () {
13
12
  cases: []
14
13
  };
15
14
  };
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9zdWl0ZS1yZXN1bHQuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm5hbWUiLCJpdGVyYXRpb25OdW0iLCJzdGFydFRpbWUiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJzdGF0dXMiLCJjYXNlcyJdLCJtYXBwaW5ncyI6Ijs7OztBQVlBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUIsWUFBWTtBQUN6QixTQUFPO0FBQ0hDLElBQUFBLElBQUksRUFBRSxJQURIO0FBRUhDLElBQUFBLFlBQVksRUFBRSxDQUZYO0FBR0hDLElBQUFBLFNBQVMsRUFBRSxJQUhSO0FBSUhDLElBQUFBLE9BQU8sRUFBRSxJQUpOO0FBS0hDLElBQUFBLFFBQVEsRUFBRSxJQUxQO0FBTUhDLElBQUFBLE1BQU0sRUFBRSxJQU5MO0FBT0hDLElBQUFBLEtBQUssRUFBRTtBQVBKLEdBQVA7QUFTSCxDQVZEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBUZXN0IFN1aXRlIFJlc3VsdFxyXG4gKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IG51bGwsXHJcbiAgICAgICAgaXRlcmF0aW9uTnVtOiAxLFxyXG4gICAgICAgIHN0YXJ0VGltZTogbnVsbCxcclxuICAgICAgICBlbmRUaW1lOiBudWxsLFxyXG4gICAgICAgIGR1cmF0aW9uOiBudWxsLFxyXG4gICAgICAgIHN0YXR1czogbnVsbCxcclxuICAgICAgICBjYXNlczogW10gICAgLy8gYXJyYXkgb2YgY2FzZS1yZXN1bHQuanNcclxuICAgIH07XHJcbn07XHJcbiJdfQ==
15
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsIml0ZXJhdGlvbk51bSIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsInN0YXR1cyIsImNhc2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL3N1aXRlLXJlc3VsdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFRlc3QgU3VpdGUgUmVzdWx0XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZTogbnVsbCxcclxuICAgICAgICBpdGVyYXRpb25OdW06IDEsXHJcbiAgICAgICAgc3RhcnRUaW1lOiBudWxsLFxyXG4gICAgICAgIGVuZFRpbWU6IG51bGwsXHJcbiAgICAgICAgZHVyYXRpb246IG51bGwsXHJcbiAgICAgICAgc3RhdHVzOiBudWxsLFxyXG4gICAgICAgIGNhc2VzOiBbXSAgICAvLyBhcnJheSBvZiBjYXNlLXJlc3VsdC5qc1xyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLFlBQVksRUFBRSxDQUFDO0lBQ2ZDLFNBQVMsRUFBRSxJQUFJO0lBQ2ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLEtBQUssRUFBRTtFQUNYLENBQUM7QUFDTCxDQUFDIn0=
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  module.exports = function () {
6
5
  return {
7
6
  name: null,
@@ -17,4 +16,4 @@ module.exports = function () {
17
16
  suites: []
18
17
  };
19
18
  };
20
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC90ZXN0LXJlc3VsdC5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsInN0YXR1cyIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsInRvdGFsQ2FzZXMiLCJmYWlsdXJlIiwiZW52aXJvbm1lbnQiLCJjYXBhYmlsaXRpZXMiLCJvcHRpb25zIiwic3VpdGVzIl0sIm1hcHBpbmdzIjoiOzs7O0FBWUFBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixZQUFZO0FBQ3pCLFNBQU87QUFDSEMsSUFBQUEsSUFBSSxFQUFFLElBREg7QUFFSEMsSUFBQUEsTUFBTSxFQUFFLElBRkw7QUFHSEMsSUFBQUEsU0FBUyxFQUFFLElBSFI7QUFJSEMsSUFBQUEsT0FBTyxFQUFFLElBSk47QUFLSEMsSUFBQUEsUUFBUSxFQUFFLElBTFA7QUFNSEMsSUFBQUEsVUFBVSxFQUFFLElBTlQ7QUFPSEMsSUFBQUEsT0FBTyxFQUFFLElBUE47QUFRSEMsSUFBQUEsV0FBVyxFQUFFLElBUlY7QUFTSEMsSUFBQUEsWUFBWSxFQUFFLElBVFg7QUFVSEMsSUFBQUEsT0FBTyxFQUFFLElBVk47QUFXSEMsSUFBQUEsTUFBTSxFQUFFO0FBWEwsR0FBUDtBQWFILENBZEQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIFRlc3QgUmVzdWx0XHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmFtZTogbnVsbCxcclxuICAgICAgICBzdGF0dXM6IG51bGwsXHJcbiAgICAgICAgc3RhcnRUaW1lOiBudWxsLFxyXG4gICAgICAgIGVuZFRpbWU6IG51bGwsXHJcbiAgICAgICAgZHVyYXRpb246IG51bGwsXHJcbiAgICAgICAgdG90YWxDYXNlczogbnVsbCxcclxuICAgICAgICBmYWlsdXJlOiBudWxsLFxyXG4gICAgICAgIGVudmlyb25tZW50OiBudWxsLFxyXG4gICAgICAgIGNhcGFiaWxpdGllczogbnVsbCxcclxuICAgICAgICBvcHRpb25zOiBudWxsLFxyXG4gICAgICAgIHN1aXRlczogW10gICAgLy8gdHlwZSBvZiBzdWl0ZS1yZXN1bHQuanNcclxuICAgIH07XHJcbn07XHJcbiJdfQ==
19
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsInN0YXR1cyIsInN0YXJ0VGltZSIsImVuZFRpbWUiLCJkdXJhdGlvbiIsInRvdGFsQ2FzZXMiLCJmYWlsdXJlIiwiZW52aXJvbm1lbnQiLCJjYXBhYmlsaXRpZXMiLCJvcHRpb25zIiwic3VpdGVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL3Rlc3QtcmVzdWx0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLypcclxuICogVGVzdCBSZXN1bHRcclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBudWxsLFxyXG4gICAgICAgIHN0YXR1czogbnVsbCxcclxuICAgICAgICBzdGFydFRpbWU6IG51bGwsXHJcbiAgICAgICAgZW5kVGltZTogbnVsbCxcclxuICAgICAgICBkdXJhdGlvbjogbnVsbCxcclxuICAgICAgICB0b3RhbENhc2VzOiBudWxsLFxyXG4gICAgICAgIGZhaWx1cmU6IG51bGwsXHJcbiAgICAgICAgZW52aXJvbm1lbnQ6IG51bGwsXHJcbiAgICAgICAgY2FwYWJpbGl0aWVzOiBudWxsLFxyXG4gICAgICAgIG9wdGlvbnM6IG51bGwsXHJcbiAgICAgICAgc3VpdGVzOiBbXSAgICAvLyB0eXBlIG9mIHN1aXRlLXJlc3VsdC5qc1xyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFZQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLFNBQVMsRUFBRSxJQUFJO0lBQ2ZDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLFFBQVEsRUFBRSxJQUFJO0lBQ2RDLFVBQVUsRUFBRSxJQUFJO0lBQ2hCQyxPQUFPLEVBQUUsSUFBSTtJQUNiQyxXQUFXLEVBQUUsSUFBSTtJQUNqQkMsWUFBWSxFQUFFLElBQUk7SUFDbEJDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLE1BQU0sRUFBRTtFQUNaLENBQUM7QUFDTCxDQUFDIn0=
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  require("source-map-support/register");
4
-
5
4
  module.exports = function () {
6
5
  return {
7
6
  name: null,
@@ -13,4 +12,4 @@ module.exports = function () {
13
12
  poManager: null
14
13
  };
15
14
  };
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC90ZXN0Y2FzZS5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsImlkIiwiZm9ybWF0IiwiY29udGVudCIsIml0ZXJhdGlvbkNvdW50IiwicGFyYW1NYW5hZ2VyIiwicG9NYW5hZ2VyIl0sIm1hcHBpbmdzIjoiOzs7O0FBU0FBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixZQUFZO0FBQ3pCLFNBQU87QUFDSEMsSUFBQUEsSUFBSSxFQUFFLElBREg7QUFFSEMsSUFBQUEsRUFBRSxFQUFFLElBRkQ7QUFHSEMsSUFBQUEsTUFBTSxFQUFFLElBSEw7QUFJSEMsSUFBQUEsT0FBTyxFQUFFLElBSk47QUFLSEMsSUFBQUEsY0FBYyxFQUFFLENBTGI7QUFNSEMsSUFBQUEsWUFBWSxFQUFFLElBTlg7QUFPSEMsSUFBQUEsU0FBUyxFQUFFO0FBUFIsR0FBUDtBQVNILENBVkQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuYW1lOiBudWxsLFxyXG4gICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgIGZvcm1hdDogbnVsbCxcclxuICAgICAgICBjb250ZW50OiBudWxsLFxyXG4gICAgICAgIGl0ZXJhdGlvbkNvdW50OiAxLFxyXG4gICAgICAgIHBhcmFtTWFuYWdlcjogbnVsbCxcclxuICAgICAgICBwb01hbmFnZXI6IG51bGxcclxuICAgIH07XHJcbn07XHJcbiJdfQ==
15
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmFtZSIsImlkIiwiZm9ybWF0IiwiY29udGVudCIsIml0ZXJhdGlvbkNvdW50IiwicGFyYW1NYW5hZ2VyIiwicG9NYW5hZ2VyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL3Rlc3RjYXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5hbWU6IG51bGwsXHJcbiAgICAgICAgaWQ6IG51bGwsXHJcbiAgICAgICAgZm9ybWF0OiBudWxsLFxyXG4gICAgICAgIGNvbnRlbnQ6IG51bGwsXHJcbiAgICAgICAgaXRlcmF0aW9uQ291bnQ6IDEsXHJcbiAgICAgICAgcGFyYW1NYW5hZ2VyOiBudWxsLFxyXG4gICAgICAgIHBvTWFuYWdlcjogbnVsbFxyXG4gICAgfTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7QUFTQUEsTUFBTSxDQUFDQyxPQUFPLEdBQUcsWUFBWTtFQUN6QixPQUFPO0lBQ0hDLElBQUksRUFBRSxJQUFJO0lBQ1ZDLEVBQUUsRUFBRSxJQUFJO0lBQ1JDLE1BQU0sRUFBRSxJQUFJO0lBQ1pDLE9BQU8sRUFBRSxJQUFJO0lBQ2JDLGNBQWMsRUFBRSxDQUFDO0lBQ2pCQyxZQUFZLEVBQUUsSUFBSTtJQUNsQkMsU0FBUyxFQUFFO0VBQ2YsQ0FBQztBQUNMLENBQUMifQ==