appium-android-driver 4.53.0 → 5.0.2

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 (60) hide show
  1. package/README.md +0 -2
  2. package/build/index.js +6 -4
  3. package/build/lib/android-helpers.js +12 -9
  4. package/build/lib/bootstrap.js +7 -7
  5. package/build/lib/commands/actions.js +13 -13
  6. package/build/lib/commands/alert.js +7 -7
  7. package/build/lib/commands/app-management.js +6 -6
  8. package/build/lib/commands/context.js +10 -8
  9. package/build/lib/commands/element.js +5 -5
  10. package/build/lib/commands/execute.js +7 -6
  11. package/build/lib/commands/file-actions.js +12 -12
  12. package/build/lib/commands/find.js +6 -6
  13. package/build/lib/commands/general.js +7 -69
  14. package/build/lib/commands/ime.js +4 -4
  15. package/build/lib/commands/index.js +4 -2
  16. package/build/lib/commands/intent.js +7 -7
  17. package/build/lib/commands/log.js +6 -6
  18. package/build/lib/commands/network.js +11 -4
  19. package/build/lib/commands/performance.js +1 -1
  20. package/build/lib/commands/recordscreen.js +15 -15
  21. package/build/lib/commands/shell.js +3 -3
  22. package/build/lib/commands/streamscreen.js +7 -7
  23. package/build/lib/commands/system-bars.js +144 -0
  24. package/build/lib/commands/touch.js +8 -8
  25. package/build/lib/desired-caps.js +1 -1
  26. package/build/lib/driver.js +12 -12
  27. package/build/lib/logger.js +3 -3
  28. package/build/lib/server.js +4 -4
  29. package/build/lib/uiautomator.js +3 -3
  30. package/build/lib/unlock-helpers.js +8 -8
  31. package/build/lib/webview-helpers.js +7 -7
  32. package/lib/android-helpers.js +1 -1
  33. package/lib/bootstrap.js +2 -2
  34. package/lib/commands/actions.js +1 -1
  35. package/lib/commands/alert.js +1 -1
  36. package/lib/commands/app-management.js +4 -2
  37. package/lib/commands/context.js +2 -2
  38. package/lib/commands/element.js +1 -1
  39. package/lib/commands/execute.js +3 -1
  40. package/lib/commands/file-actions.js +1 -1
  41. package/lib/commands/find.js +2 -2
  42. package/lib/commands/general.js +1 -83
  43. package/lib/commands/ime.js +1 -1
  44. package/lib/commands/index.js +2 -0
  45. package/lib/commands/intent.js +1 -1
  46. package/lib/commands/log.js +1 -1
  47. package/lib/commands/network.js +22 -1
  48. package/lib/commands/recordscreen.js +1 -1
  49. package/lib/commands/shell.js +1 -1
  50. package/lib/commands/streamscreen.js +1 -1
  51. package/lib/commands/system-bars.js +131 -0
  52. package/lib/commands/touch.js +2 -2
  53. package/lib/driver.js +2 -2
  54. package/lib/logger.js +1 -1
  55. package/lib/server.js +1 -1
  56. package/lib/uiautomator.js +1 -1
  57. package/lib/unlock-helpers.js +1 -1
  58. package/lib/webview-helpers.js +1 -1
  59. package/package.json +17 -15
  60. package/lib/.DS_Store +0 -0
@@ -11,7 +11,7 @@ require("source-map-support/register");
11
11
 
12
12
  var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
- var _appiumSupport = require("appium-support");
14
+ var _support = require("@appium/support");
15
15
 
16
16
  var _logger = _interopRequireDefault(require("../logger"));
17
17
 
@@ -73,17 +73,17 @@ commands.pullFile = async function pullFile(remotePath) {
73
73
  }
74
74
  }
75
75
 
76
- const localFile = await _appiumSupport.tempDir.path({
76
+ const localFile = await _support.tempDir.path({
77
77
  prefix: 'appium',
78
78
  suffix: '.tmp'
79
79
  });
80
80
 
81
81
  try {
82
82
  await this.adb.pull(tmpDestination || remotePath, localFile);
83
- return (await _appiumSupport.util.toInMemoryBase64(localFile)).toString();
83
+ return (await _support.util.toInMemoryBase64(localFile)).toString();
84
84
  } finally {
85
- if (await _appiumSupport.fs.exists(localFile)) {
86
- await _appiumSupport.fs.unlink(localFile);
85
+ if (await _support.fs.exists(localFile)) {
86
+ await _support.fs.unlink(localFile);
87
87
  }
88
88
 
89
89
  if (tmpDestination) {
@@ -97,7 +97,7 @@ commands.pushFile = async function pushFile(remotePath, base64Data) {
97
97
  _logger.default.errorAndThrow(`It is expected that remote path points to a file and not to a folder. ` + `'${remotePath}' is given instead`);
98
98
  }
99
99
 
100
- const localFile = await _appiumSupport.tempDir.path({
100
+ const localFile = await _support.tempDir.path({
101
101
  prefix: 'appium',
102
102
  suffix: '.tmp'
103
103
  });
@@ -110,7 +110,7 @@ commands.pushFile = async function pushFile(remotePath, base64Data) {
110
110
  let tmpDestination = null;
111
111
 
112
112
  try {
113
- await _appiumSupport.fs.writeFile(localFile, content.toString('binary'), 'binary');
113
+ await _support.fs.writeFile(localFile, content.toString('binary'), 'binary');
114
114
 
115
115
  if (remotePath.startsWith(CONTAINER_PATH_MARKER)) {
116
116
  const [packageId, pathInContainer] = parseContainerPath(remotePath);
@@ -133,8 +133,8 @@ commands.pushFile = async function pushFile(remotePath, base64Data) {
133
133
  await scanMedia(this.adb, remotePath);
134
134
  }
135
135
  } finally {
136
- if (await _appiumSupport.fs.exists(localFile)) {
137
- await _appiumSupport.fs.unlink(localFile);
136
+ if (await _support.fs.exists(localFile)) {
137
+ await _support.fs.unlink(localFile);
138
138
  }
139
139
 
140
140
  if (tmpDestination) {
@@ -144,11 +144,11 @@ commands.pushFile = async function pushFile(remotePath, base64Data) {
144
144
  };
145
145
 
146
146
  commands.pullFolder = async function pullFolder(remotePath) {
147
- let localFolder = await _appiumSupport.tempDir.path({
147
+ let localFolder = await _support.tempDir.path({
148
148
  prefix: 'appium'
149
149
  });
150
150
  await this.adb.pull(remotePath, localFolder);
151
- return (await _appiumSupport.zip.toInMemoryZip(localFolder, {
151
+ return (await _support.zip.toInMemoryZip(localFolder, {
152
152
  encodeToBase64: true
153
153
  })).toString();
154
154
  };
@@ -239,4 +239,4 @@ var _default = commands;
239
239
  exports.default = _default;require('source-map-support').install();
240
240
 
241
241
 
242
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maWxlLWFjdGlvbnMuanMiXSwibmFtZXMiOlsiQ09OVEFJTkVSX1BBVEhfTUFSS0VSIiwiQ09OVEFJTkVSX1BBVEhfUEFUVEVSTiIsIlJlZ0V4cCIsIkFORFJPSURfTUVESUFfUkVTQ0FOX0lOVEVOVCIsImNvbW1hbmRzIiwicGFyc2VDb250YWluZXJQYXRoIiwicmVtb3RlUGF0aCIsIm1hdGNoIiwiZXhlYyIsImxvZyIsImVycm9yQW5kVGhyb3ciLCJwYXRoIiwicG9zaXgiLCJyZXNvbHZlIiwic2Nhbk1lZGlhIiwiYWRiIiwiZGVidWciLCJnZXRBcGlMZXZlbCIsInNoZWxsIiwiZSIsIndhcm4iLCJzdGRlcnIiLCJtZXNzYWdlIiwiZXNjYXBlUGF0aCIsInAiLCJyZXBsYWNlIiwicHVsbEZpbGUiLCJlbmRzV2l0aCIsInRtcERlc3RpbmF0aW9uIiwic3RhcnRzV2l0aCIsInBhY2thZ2VJZCIsInBhdGhJbkNvbnRhaW5lciIsImJhc2VuYW1lIiwibG9jYWxGaWxlIiwidGVtcERpciIsInByZWZpeCIsInN1ZmZpeCIsInB1bGwiLCJ1dGlsIiwidG9Jbk1lbW9yeUJhc2U2NCIsInRvU3RyaW5nIiwiZnMiLCJleGlzdHMiLCJ1bmxpbmsiLCJwdXNoRmlsZSIsImJhc2U2NERhdGEiLCJfIiwiaXNBcnJheSIsIkJ1ZmZlciIsImZyb20iLCJjb250ZW50Iiwid3JpdGVGaWxlIiwiZGlybmFtZSIsInB1c2giLCJwdWxsRm9sZGVyIiwibG9jYWxGb2xkZXIiLCJ6aXAiLCJ0b0luTWVtb3J5WmlwIiwiZW5jb2RlVG9CYXNlNjQiLCJkZWxldGVGaWxlT3JGb2xkZXIiLCJwZXJmb3JtUmVtb3RlRnNDaGVjayIsIm9wIiwicnVuQXMiLCJwYXNzRmxhZyIsImNoZWNrQ21kIiwiZnVsbENtZCIsImluY2x1ZGVzIiwiaWduIiwiaXNGaWxlIiwiaXNEaXIiLCJpc1ByZXNlbnQiLCJkc3RQYXRoIiwicGtnSWQiLCJpbmZvIiwiZXhwZWN0c0ZpbGUiLCJt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LEVBQWlCO0FBQ2ZHLG9CQUFJQyxhQUFKLENBQW1CLHdDQUFuQjtBQUNEOztBQUNELE1BQUlKLFVBQVUsQ0FBQ3FCLFFBQVgsQ0FBb0IsR0FBcEIsQ0FBSixFQUE4QjtBQUM1QmxCLG9CQUFJQyxhQUFKLENBQW1CLHdFQUFELEdBQ0MsSUFBR0osVUFBVyxvQkFEakM7QUFFRDs7QUFDRCxTQUFPLE1BQU1xRCxrQkFBa0IsQ0FBQyxLQUFLNUMsR0FBTixFQUFXVCxVQUFYLENBQS9CO0FBQ0QsQ0FWRDs7ZUFhZUYsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcywgdXRpbCwgemlwLCB0ZW1wRGlyfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuXG5jb25zdCBDT05UQUlORVJfUEFUSF9NQVJLRVIgPSAnQCc7XG4vLyBodHRwczovL3JlZ2V4MTAxLmNvbS9yL1BMZEIwRy8yXG5jb25zdCBDT05UQUlORVJfUEFUSF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXiR7Q09OVEFJTkVSX1BBVEhfTUFSS0VSfShbXi9dKykvKC4rKWApO1xuY29uc3QgQU5EUk9JRF9NRURJQV9SRVNDQU5fSU5URU5UID0gJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NRURJQV9TQ0FOTkVSX1NDQU5fRklMRSc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBQYXJzZXMgdGhlIGFjdHVhbCBkZXN0aW5hdGlvbiBwYXRoIGZyb20gdGhlIGdpdmVuIHZhbHVlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIHByZWZvcm1hdHRlZCByZW1vdGUgcGF0aCwgd2hpY2ggbG9va3MgbGlrZVxuICogYEBteS5hcHAuaWQvbXkvcGF0aGBcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBBbiBhcnJheSwgd2hlcmUgdGhlIGZpcnN0IGl0ZW0gaXMgdGhlIHBhcnNlZCBwYWNrYWdlXG4gKiBpZGVudGlmaWVyIGFuZCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIHBhdGggaW5zaWRlIHRoZSBwYWNrYWdlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBzdHJpbmcgY2Fubm90IGJlIHBhcnNlZFxuICovXG5mdW5jdGlvbiBwYXJzZUNvbnRhaW5lclBhdGggKHJlbW90ZVBhdGgpIHtcbiAgY29uc3QgbWF0Y2ggPSBDT05UQUlORVJfUEFUSF9QQVRURVJOLmV4ZWMocmVtb3RlUGF0aCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgSXQgaXMgZXhwZWN0ZWQgdGhhdCBwYWNrYWdlIGlkZW50aWZpZXIgaXMgc2VwYXJhdGVkIGZyb20gdGhlIHJlbGF0aXZlIHBhdGggd2l0aCBhIHNpbmdsZSBzbGFzaC4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIFttYXRjaFsxXSwgcGF0aC5wb3NpeC5yZXNvbHZlKGAvZGF0YS9kYXRhLyR7bWF0Y2hbMV19YCwgbWF0Y2hbMl0pXTtcbn1cblxuLyoqXG4gKiBTY2FucyB0aGUgZ2l2ZW4gZmlsZS9mb2xkZXIgb24gdGhlIHJlbW90ZSBkZXZpY2VcbiAqIGFuZCBhZGRzIG1hdGNoaW5nIGl0ZW1zIHRvIHRoZSBkZXZpY2UncyBtZWRpYSBsaWJyYXJ5LlxuICogRXhjZXB0aW9ucyBhcmUgaWdub3JlZCBhbmQgd3JpdHRlbiBpbnRvIHRoZSBsb2cuXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiBBREIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdGVQYXRoIFRoZSBmaWxlL2ZvbGRlciBwYXRoIG9uIHRoZSByZW1vdGUgZGV2aWNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5NZWRpYSAoYWRiLCByZW1vdGVQYXRoKSB7XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBtZWRpYSBzY2FuIG9mICcke3JlbW90ZVBhdGh9J2ApO1xuICB0cnkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNjE4NFxuICAgIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOSkge1xuICAgICAgYXdhaXQgYWRiLnNjYW5NZWRpYShyZW1vdGVQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAgICctYScsIEFORFJPSURfTUVESUFfUkVTQ0FOX0lOVEVOVCxcbiAgICAgICAgJy1kJywgYGZpbGU6Ly8ke3JlbW90ZVBhdGh9YFxuICAgICAgXSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLndhcm4oYElnbm9yaW5nIGFuIHVuZXhwZWN0ZWQgZXJyb3IgdXBvbiBtZWRpYSBzY2FubmluZyBvZiAnJHtyZW1vdGVQYXRofSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogQSBzbWFsbCBoZWxwZXIsIHdoaWNoIGVzY2FwZXMgc2luZ2xlIHF1b3RlcyBpbiBwYXRocyxcbiAqIHNvIHRoZXkgYXJlIHNhZmUgdG8gYmUgcGFzc2VkIGFzIGFyZ3VtZW50cyBvZiBzaGVsbCBjb21tYW5kc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwIFRoZSBpbml0aWFsIHJlbW90ZSBwYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZXNjYXBlZCBwYXRoIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVBhdGggKHApIHtcbiAgcmV0dXJuIHAucmVwbGFjZSgvJy9nLCBgXFxcXCdgKTtcbn1cblxuLyoqXG4gKiBQdWxscyBhIHJlbW90ZSBmaWxlIGZyb20gdGhlIGRldmljZS5cbiAqIEl0IGlzIHJlcXVpcmVkLCB0aGF0IGEgcGFja2FnZSBoYXMgZGVidWdnaW5nIGZsYWcgZW5hYmxlZFxuICogaW4gb3JkZXIgdG8gYWNjZXNzIGl0cyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZW1vdGUgZmlsZVxuICogb3IgYSBzcGVjaWFsbHkgZm9ybWF0dGVkIHBhdGgsIHdoaWNoIHBvaW50cyB0byBhbiBpdGVtIGluc2lkZSBhcHAgYnVuZGxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgZW5jb2RlZCBjb250ZW50IG9mIHRoZSBwdWxsZWQgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwdWxsIG9wZXJhdGlvbiBmYWlsZWRcbiAqL1xuY29tbWFuZHMucHVsbEZpbGUgPSBhc3luYyBmdW5jdGlvbiBwdWxsRmlsZSAocmVtb3RlUGF0aCkge1xuICBpZiAocmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYEl0IGlzIGV4cGVjdGVkIHRoYXQgcmVtb3RlIHBhdGggcG9pbnRzIHRvIGEgZmlsZSBhbmQgbm90IHRvIGEgZm9sZGVyLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgJyR7cmVtb3RlUGF0aH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgfVxuICBsZXQgdG1wRGVzdGluYXRpb24gPSBudWxsO1xuICBpZiAocmVtb3RlUGF0aC5zdGFydHNXaXRoKENPTlRBSU5FUl9QQVRIX01BUktFUikpIHtcbiAgICBjb25zdCBbcGFja2FnZUlkLCBwYXRoSW5Db250YWluZXJdID0gcGFyc2VDb250YWluZXJQYXRoKHJlbW90ZVBhdGgpO1xuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgaWRlbnRpZmllciAnJHtwYWNrYWdlSWR9JyBmcm9tICcke3JlbW90ZVBhdGh9Jy4gV2lsbCBnZXQgdGhlIGRhdGEgZnJvbSAnJHtwYXRoSW5Db250YWluZXJ9J2ApO1xuICAgIHRtcERlc3RpbmF0aW9uID0gYC9kYXRhL2xvY2FsL3RtcC8ke3BhdGgucG9zaXguYmFzZW5hbWUocGF0aEluQ29udGFpbmVyKX1gO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3J1bi1hcycsIHBhY2thZ2VJZCwgYGNobW9kIDc3NyAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9J2BdKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtcbiAgICAgICAgJ3J1bi1hcycsIHBhY2thZ2VJZCxcbiAgICAgICAgYGNwIC1mICcke2VzY2FwZVBhdGgocGF0aEluQ29udGFpbmVyKX0nICcke2VzY2FwZVBhdGgodG1wRGVzdGluYXRpb24pfSdgXG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjY2VzcyB0aGUgY29udGFpbmVyIG9mICcke3BhY2thZ2VJZH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBJcyB0aGUgYXBwbGljYXRpb24gaW5zdGFsbGVkIGFuZCBoYXMgJ2RlYnVnZ2FibGUnIGJ1aWxkIG9wdGlvbiBzZXQgdG8gdHJ1ZT8gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICBjb25zdCBsb2NhbEZpbGUgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe3ByZWZpeDogJ2FwcGl1bScsIHN1ZmZpeDogJy50bXAnfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5hZGIucHVsbCh0bXBEZXN0aW5hdGlvbiB8fCByZW1vdGVQYXRoLCBsb2NhbEZpbGUpO1xuICAgIHJldHVybiAoYXdhaXQgdXRpbC50b0luTWVtb3J5QmFzZTY0KGxvY2FsRmlsZSkpLnRvU3RyaW5nKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbEZpbGUpKSB7XG4gICAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxGaWxlKTtcbiAgICB9XG4gICAgaWYgKHRtcERlc3RpbmF0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3JtJywgJy1mJywgdG1wRGVzdGluYXRpb25dKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogUHVzaGVkIHRoZSBnaXZlbiBkYXRhIHRvIGEgZmlsZSBvbiB0aGUgcmVtb3RlIGRldmljZVxuICogSXQgaXMgcmVxdWlyZWQsIHRoYXQgYSBwYWNrYWdlIGhhcyBkZWJ1Z2dpbmcgZmxhZyBlbmFibGVkXG4gKiBpbiBvcmRlciB0byBhY2Nlc3MgaXRzIGZpbGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlbW90ZSBmaWxlIG9yXG4gKiBhIGZpbGUgaW5zaWRlIGEgcGFja2FnZSBidW5kbGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjREYXRhIEJhc2U2NCBlbmNvZGVkIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGVcbiAqIHJlbW90ZSBmaWxlLiBUaGUgcmVtb3RlIGZpbGUgd2lsbCBiZSBzaWxlbnRseSBvdmVycmlkZGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBwdXNoaW5nIHRoZSBkYXRhXG4gKi9cbmNvbW1hbmRzLnB1c2hGaWxlID0gYXN5bmMgZnVuY3Rpb24gcHVzaEZpbGUgKHJlbW90ZVBhdGgsIGJhc2U2NERhdGEpIHtcbiAgaWYgKHJlbW90ZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBJdCBpcyBleHBlY3RlZCB0aGF0IHJlbW90ZSBwYXRoIHBvaW50cyB0byBhIGZpbGUgYW5kIG5vdCB0byBhIGZvbGRlci4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgY29uc3QgbG9jYWxGaWxlID0gYXdhaXQgdGVtcERpci5wYXRoKHtwcmVmaXg6ICdhcHBpdW0nLCBzdWZmaXg6ICcudG1wJ30pO1xuICBpZiAoXy5pc0FycmF5KGJhc2U2NERhdGEpKSB7XG4gICAgLy8gc29tZSBjbGllbnRzIChhaGVtKSBqYXZhLCBzZW5kIGEgYnl0ZSBhcnJheSBlbmNvZGluZyB1dGY4IGNoYXJhY3RlcnNcbiAgICAvLyBpbnN0ZWFkIG9mIGEgc3RyaW5nLCB3aGljaCB3b3VsZCBiZSBpbmZpbml0ZWx5IGJldHRlciFcbiAgICBiYXNlNjREYXRhID0gQnVmZmVyLmZyb20oYmFzZTY0RGF0YSkudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgfVxuICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oYmFzZTY0RGF0YSwgJ2Jhc2U2NCcpO1xuICBsZXQgdG1wRGVzdGluYXRpb24gPSBudWxsO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShsb2NhbEZpbGUsIGNvbnRlbnQudG9TdHJpbmcoJ2JpbmFyeScpLCAnYmluYXJ5Jyk7XG4gICAgaWYgKHJlbW90ZVBhdGguc3RhcnRzV2l0aChDT05UQUlORVJfUEFUSF9NQVJLRVIpKSB7XG4gICAgICBjb25zdCBbcGFja2FnZUlkLCBwYXRoSW5Db250YWluZXJdID0gcGFyc2VDb250YWluZXJQYXRoKHJlbW90ZVBhdGgpO1xuICAgICAgbG9nLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBpZGVudGlmaWVyICcke3BhY2thZ2VJZH0nIGZyb20gJyR7cmVtb3RlUGF0aH0nLiBXaWxsIHB1dCB0aGUgZGF0YSBpbnRvICcke3BhdGhJbkNvbnRhaW5lcn0nYCk7XG4gICAgICB0bXBEZXN0aW5hdGlvbiA9IGAvZGF0YS9sb2NhbC90bXAvJHtwYXRoLnBvc2l4LmJhc2VuYW1lKHBhdGhJbkNvbnRhaW5lcil9YDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFxuICAgICAgICAgIFsncnVuLWFzJywgcGFja2FnZUlkLCBgbWtkaXIgLXAgJyR7ZXNjYXBlUGF0aChwYXRoLnBvc2l4LmRpcm5hbWUocGF0aEluQ29udGFpbmVyKSl9J2BdXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncnVuLWFzJywgcGFja2FnZUlkLCBgdG91Y2ggJyR7ZXNjYXBlUGF0aChwYXRoSW5Db250YWluZXIpfSdgXSk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncnVuLWFzJywgcGFja2FnZUlkLCBgY2htb2QgNzc3ICcke2VzY2FwZVBhdGgocGF0aEluQ29udGFpbmVyKX0nYF0pO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsRmlsZSwgdG1wRGVzdGluYXRpb24pO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgICAgICAgJ3J1bi1hcycsIHBhY2thZ2VJZCxcbiAgICAgICAgICBgY3AgLWYgJyR7ZXNjYXBlUGF0aCh0bXBEZXN0aW5hdGlvbil9JyAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9J2BcbiAgICAgICAgXSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWNjZXNzIHRoZSBjb250YWluZXIgb2YgJyR7cGFja2FnZUlkfScgYXBwbGljYXRpb24uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgSXMgdGhlIGFwcGxpY2F0aW9uIGluc3RhbGxlZCBhbmQgaGFzICdkZWJ1Z2dhYmxlJyBidWlsZCBvcHRpb24gc2V0IHRvIHRydWU/IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhZGIgcHVzaCBjcmVhdGVzIGZvbGRlcnMgYW5kIG92ZXJ3cml0ZXMgZXhpc3RpbmcgZmlsZXMuXG4gICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCk7XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgcHVzaGVkIGEgZmlsZSwgaXQgbWlnaHQgYmUgYSBtZWRpYSBmaWxlLCBzbyBlbnN1cmUgdGhhdFxuICAgICAgLy8gYXBwcyBrbm93IGFib3V0IGl0XG4gICAgICBhd2FpdCBzY2FuTWVkaWEodGhpcy5hZGIsIHJlbW90ZVBhdGgpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICAgIH1cbiAgICBpZiAodG1wRGVzdGluYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncm0nLCAnLWYnLCB0bXBEZXN0aW5hdGlvbl0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBQdWxscyB0aGUgd2hvbGUgZm9sZGVyIGZyb20gdGhlIHJlbW90ZSBkZXZpY2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIGEgZm9sZGVyIG9uIHRoZVxuICogcmVtb3RlIGRldmljZSBvciBhIGZvbGRlciBpbnNpZGUgYW4gYXBwbGljYXRpb24gYnVuZGxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQtZW5jb2RlZCBhbmQgemlwcGVkIGNvbnRlbnQgb2YgdGhlIGZvbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgZ2V0dGluZyB0aGUgZm9sZGVyIGNvbnRlbnRcbiAqL1xuY29tbWFuZHMucHVsbEZvbGRlciA9IGFzeW5jIGZ1bmN0aW9uIHB1bGxGb2xkZXIgKHJlbW90ZVBhdGgpIHtcbiAgbGV0IGxvY2FsRm9sZGVyID0gYXdhaXQgdGVtcERpci5wYXRoKHtwcmVmaXg6ICdhcHBpdW0nfSk7XG4gIGF3YWl0IHRoaXMuYWRiLnB1bGwocmVtb3RlUGF0aCwgbG9jYWxGb2xkZXIpO1xuICByZXR1cm4gKGF3YWl0IHppcC50b0luTWVtb3J5WmlwKGxvY2FsRm9sZGVyLCB7XG4gICAgZW5jb2RlVG9CYXNlNjQ6IHRydWUsXG4gIH0pKS50b1N0cmluZygpO1xufTtcblxuLyoqXG4gKiBEZWxldGVzIHRoZSBnaXZlbiBmb2xkZXIgb3IgZmlsZSBmcm9tIHRoZSByZW1vdGUgZGV2aWNlXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVtb3RlIGZvbGRlclxuICogb3IgZmlsZSAoZm9sZGVyIG5hbWVzIG11c3QgZW5kIHdpdGggYSBzaW5nbGUgc2xhc2gpXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHByb3ZpZGVkIHJlbW90ZSBwYXRoIGlzIGludmFsaWQgb3JcbiAqIHRoZSBwYWNrYWdlIGNvbnRlbnQgY2Fubm90IGJlIGFjY2Vzc2VkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByZW1vdGUgaXRlbSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5cbiAqIElmIHRoZSByZW1vdGUgcGF0aCBpcyB2YWxpZCwgYnV0IHRoZSByZW1vdGUgcGF0aCBkb2VzIG5vdCBleGlzdFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm4gYGZhbHNlYC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlRmlsZU9yRm9sZGVyIChhZGIsIHJlbW90ZVBhdGgpIHtcbiAgY29uc3QgcGVyZm9ybVJlbW90ZUZzQ2hlY2sgPSBhc3luYyAocCwgb3AsIHJ1bkFzID0gbnVsbCkgPT4ge1xuICAgIGNvbnN0IHBhc3NGbGFnID0gJ19fUEFTU19fJztcbiAgICBjb25zdCBjaGVja0NtZCA9IGBbIC0ke29wfSAnJHtlc2NhcGVQYXRoKHApfScgXSAmJiBlY2hvICR7cGFzc0ZsYWd9YDtcbiAgICBjb25zdCBmdWxsQ21kID0gcnVuQXMgPyBgcnVuLWFzICR7cnVuQXN9ICR7Y2hlY2tDbWR9YCA6IGNoZWNrQ21kO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gXy5pbmNsdWRlcyhhd2FpdCBhZGIuc2hlbGwoW2Z1bGxDbWRdKSwgcGFzc0ZsYWcpO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaXNGaWxlID0gYXN5bmMgKHAsIHJ1bkFzID0gbnVsbCkgPT4gYXdhaXQgcGVyZm9ybVJlbW90ZUZzQ2hlY2socCwgJ2YnLCBydW5Bcyk7XG4gIGNvbnN0IGlzRGlyID0gYXN5bmMgKHAsIHJ1bkFzID0gbnVsbCkgPT4gYXdhaXQgcGVyZm9ybVJlbW90ZUZzQ2hlY2socCwgJ2QnLCBydW5Bcyk7XG4gIGNvbnN0IGlzUHJlc2VudCA9IGFzeW5jIChwLCBydW5BcyA9IG51bGwpID0+IGF3YWl0IHBlcmZvcm1SZW1vdGVGc0NoZWNrKHAsICdlJywgcnVuQXMpO1xuXG4gIGxldCBkc3RQYXRoID0gcmVtb3RlUGF0aDtcbiAgbGV0IHBrZ0lkID0gbnVsbDtcbiAgaWYgKHJlbW90ZVBhdGguc3RhcnRzV2l0aChDT05UQUlORVJfUEFUSF9NQVJLRVIpKSB7XG4gICAgY29uc3QgW3BhY2thZ2VJZCwgcGF0aEluQ29udGFpbmVyXSA9IHBhcnNlQ29udGFpbmVyUGF0aChyZW1vdGVQYXRoKTtcbiAgICBsb2cuZGVidWcoYFBhcnNlZCBwYWNrYWdlIGlkZW50aWZpZXIgJyR7cGFja2FnZUlkfScgZnJvbSAnJHtyZW1vdGVQYXRofSdgKTtcbiAgICBkc3RQYXRoID0gcGF0aEluQ29udGFpbmVyO1xuICAgIHBrZ0lkID0gcGFja2FnZUlkO1xuICB9XG5cbiAgaWYgKHBrZ0lkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3J1bi1hcycsIHBrZ0lkLCAnbHMnXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY2Nlc3MgdGhlIGNvbnRhaW5lciBvZiAnJHtwa2dJZH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgICAgYElzIHRoZSBhcHBsaWNhdGlvbiBpbnN0YWxsZWQgYW5kIGhhcyAnZGVidWdnYWJsZScgYnVpbGQgb3B0aW9uIHNldCB0byB0cnVlPyBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWF3YWl0IGlzUHJlc2VudChkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICBsb2cuaW5mbyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIGRvZXMgbm90IGV4aXN0LiBQZXJoYXBzLCBhbHJlYWR5IGRlbGV0ZWQ/YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZXhwZWN0c0ZpbGUgPSAhcmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpO1xuICBpZiAoZXhwZWN0c0ZpbGUgJiYgIWF3YWl0IGlzRmlsZShkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIGlzIG5vdCBhIGZpbGVgKTtcbiAgfSBlbHNlIGlmICghZXhwZWN0c0ZpbGUgJiYgIWF3YWl0IGlzRGlyKGRzdFBhdGgsIHBrZ0lkKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgaXRlbSBhdCAnJHtkc3RQYXRofScgaXMgbm90IGEgZm9sZGVyYCk7XG4gIH1cblxuICBpZiAocGtnSWQpIHtcbiAgICBhd2FpdCBhZGIuc2hlbGwoXG4gICAgICBbJ3J1bi1hcycsIHBrZ0lkLCBgcm0gLWYke2V4cGVjdHNGaWxlID8gJycgOiAncid9ICcke2VzY2FwZVBhdGgoZHN0UGF0aCl9J2BdKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBhZGIuc2hlbGwoWydybScsIGAtZiR7ZXhwZWN0c0ZpbGUgPyAnJyA6ICdyJ31gLCBkc3RQYXRoXSk7XG4gIH1cbiAgaWYgKGF3YWl0IGlzUHJlc2VudChkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIHN0aWxsIGV4aXN0cyBhZnRlciBiZWluZyBkZWxldGVkLiBgICtcbiAgICAgIGBJcyBpdCB3cml0YWJsZT9gKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZWxldGVGaWxlT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSByZW1vdGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlbW90ZSBmaWxlXG4gKiBvciBhIGZpbGUgaW5zaWRlIGFuIGFwcGxpY2F0aW9uIGJ1bmRsZSAoZm9yIGV4YW1wbGUgYEBteS5hcHAuaWQvcGF0aC9pbi9idW5kbGVgKVxuICovXG5cbi8qKlxuICogRGVsZXRlcyBhIGZpbGUgb24gdGhlIHJlbW90ZSBkZXZpY2VcbiAqXG4gKiBAcGFyYW0ge0RlbGV0ZUZpbGVPcHRzfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByZW1vdGUgZmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5cbiAqIElmIHRoZSBwYXRoIHRvIGEgcmVtb3RlIGZpbGUgaXMgdmFsaWQsIGJ1dCB0aGUgZmlsZSBpdHNlbGYgZG9lcyBub3QgZXhpc3RcbiAqIHRoZW4gYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYXJndW1lbnQgaXMgaW52YWxpZCBvciB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGVcbiAqIGRlbGV0aW5nIHRoZSBmaWxlXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlbGV0ZUZpbGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEZWxldGVGaWxlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3JlbW90ZVBhdGh9ID0gb3B0cztcbiAgaWYgKCFyZW1vdGVQYXRoKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSAncmVtb3RlUGF0aCcgYXJndW1lbnQgaXMgbWFuZGF0b3J5YCk7XG4gIH1cbiAgaWYgKHJlbW90ZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBJdCBpcyBleHBlY3RlZCB0aGF0IHJlbW90ZSBwYXRoIHBvaW50cyB0byBhIGZvbGRlciBhbmQgbm90IHRvIGEgZmlsZS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGRlbGV0ZUZpbGVPckZvbGRlcih0aGlzLmFkYiwgcmVtb3RlUGF0aCk7XG59O1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9maWxlLWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
242
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maWxlLWFjdGlvbnMuanMiXSwibmFtZXMiOlsiQ09OVEFJTkVSX1BBVEhfTUFSS0VSIiwiQ09OVEFJTkVSX1BBVEhfUEFUVEVSTiIsIlJlZ0V4cCIsIkFORFJPSURfTUVESUFfUkVTQ0FOX0lOVEVOVCIsImNvbW1hbmRzIiwicGFyc2VDb250YWluZXJQYXRoIiwicmVtb3RlUGF0aCIsIm1hdGNoIiwiZXhlYyIsImxvZyIsImVycm9yQW5kVGhyb3ciLCJwYXRoIiwicG9zaXgiLCJyZXNvbHZlIiwic2Nhbk1lZGlhIiwiYWRiIiwiZGVidWciLCJnZXRBcGlMZXZlbCIsInNoZWxsIiwiZSIsIndhcm4iLCJzdGRlcnIiLCJtZXNzYWdlIiwiZXNjYXBlUGF0aCIsInAiLCJyZXBsYWNlIiwicHVsbEZpbGUiLCJlbmRzV2l0aCIsInRtcERlc3RpbmF0aW9uIiwic3RhcnRzV2l0aCIsInBhY2thZ2VJZCIsInBhdGhJbkNvbnRhaW5lciIsImJhc2VuYW1lIiwibG9jYWxGaWxlIiwidGVtcERpciIsInByZWZpeCIsInN1ZmZpeCIsInB1bGwiLCJ1dGlsIiwidG9Jbk1lbW9yeUJhc2U2NCIsInRvU3RyaW5nIiwiZnMiLCJleGlzdHMiLCJ1bmxpbmsiLCJwdXNoRmlsZSIsImJhc2U2NERhdGEiLCJfIiwiaXNBcnJheSIsIkJ1ZmZlciIsImZyb20iLCJjb250ZW50Iiwid3JpdGVGaWxlIiwiZGlybmFtZSIsInB1c2giLCJwdWxsRm9sZGVyIiwibG9jYWxGb2xkZXIiLCJ6aXAiLCJ0b0luTWVtb3J5WmlwIiwiZW5jb2RlVG9CYXNlNjQiLCJkZWxldGVGaWxlT3JGb2xkZXIiLCJwZXJmb3JtUmVtb3RlRnNDaGVjayIsIm9wIiwicnVuQXMiLCJwYXNzRmxhZyIsImNoZWNrQ21kIiwiZnVsbENtZCIsImluY2x1ZGVzIiwiaWduIiwiaXNGaWxlIiwiaXNEaXIiLCJpc1ByZXNlbnQiLCJkc3RQYXRoIiwicGtnSWQiLCJpbmZvIiwiZXhwZWN0c0ZpbGUiLCJt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QUFDZkcsb0JBQUlDLGFBQUosQ0FBbUIsd0NBQW5CO0FBQ0Q7O0FBQ0QsTUFBSUosVUFBVSxDQUFDcUIsUUFBWCxDQUFvQixHQUFwQixDQUFKLEVBQThCO0FBQzVCbEIsb0JBQUlDLGFBQUosQ0FBbUIsd0VBQUQsR0FDQyxJQUFHSixVQUFXLG9CQURqQztBQUVEOztBQUNELFNBQU8sTUFBTXFELGtCQUFrQixDQUFDLEtBQUs1QyxHQUFOLEVBQVdULFVBQVgsQ0FBL0I7QUFDRCxDQVZEOztlQWFlRixRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZzLCB1dGlsLCB6aXAsIHRlbXBEaXJ9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuXG5jb25zdCBDT05UQUlORVJfUEFUSF9NQVJLRVIgPSAnQCc7XG4vLyBodHRwczovL3JlZ2V4MTAxLmNvbS9yL1BMZEIwRy8yXG5jb25zdCBDT05UQUlORVJfUEFUSF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXiR7Q09OVEFJTkVSX1BBVEhfTUFSS0VSfShbXi9dKykvKC4rKWApO1xuY29uc3QgQU5EUk9JRF9NRURJQV9SRVNDQU5fSU5URU5UID0gJ2FuZHJvaWQuaW50ZW50LmFjdGlvbi5NRURJQV9TQ0FOTkVSX1NDQU5fRklMRSc7XG5cblxuY29uc3QgY29tbWFuZHMgPSB7fTtcblxuLyoqXG4gKiBQYXJzZXMgdGhlIGFjdHVhbCBkZXN0aW5hdGlvbiBwYXRoIGZyb20gdGhlIGdpdmVuIHZhbHVlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIHByZWZvcm1hdHRlZCByZW1vdGUgcGF0aCwgd2hpY2ggbG9va3MgbGlrZVxuICogYEBteS5hcHAuaWQvbXkvcGF0aGBcbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBBbiBhcnJheSwgd2hlcmUgdGhlIGZpcnN0IGl0ZW0gaXMgdGhlIHBhcnNlZCBwYWNrYWdlXG4gKiBpZGVudGlmaWVyIGFuZCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUgYWN0dWFsIGRlc3RpbmF0aW9uIHBhdGggaW5zaWRlIHRoZSBwYWNrYWdlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBzdHJpbmcgY2Fubm90IGJlIHBhcnNlZFxuICovXG5mdW5jdGlvbiBwYXJzZUNvbnRhaW5lclBhdGggKHJlbW90ZVBhdGgpIHtcbiAgY29uc3QgbWF0Y2ggPSBDT05UQUlORVJfUEFUSF9QQVRURVJOLmV4ZWMocmVtb3RlUGF0aCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgSXQgaXMgZXhwZWN0ZWQgdGhhdCBwYWNrYWdlIGlkZW50aWZpZXIgaXMgc2VwYXJhdGVkIGZyb20gdGhlIHJlbGF0aXZlIHBhdGggd2l0aCBhIHNpbmdsZSBzbGFzaC4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIFttYXRjaFsxXSwgcGF0aC5wb3NpeC5yZXNvbHZlKGAvZGF0YS9kYXRhLyR7bWF0Y2hbMV19YCwgbWF0Y2hbMl0pXTtcbn1cblxuLyoqXG4gKiBTY2FucyB0aGUgZ2l2ZW4gZmlsZS9mb2xkZXIgb24gdGhlIHJlbW90ZSBkZXZpY2VcbiAqIGFuZCBhZGRzIG1hdGNoaW5nIGl0ZW1zIHRvIHRoZSBkZXZpY2UncyBtZWRpYSBsaWJyYXJ5LlxuICogRXhjZXB0aW9ucyBhcmUgaWdub3JlZCBhbmQgd3JpdHRlbiBpbnRvIHRoZSBsb2cuXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYiBBREIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdGVQYXRoIFRoZSBmaWxlL2ZvbGRlciBwYXRoIG9uIHRoZSByZW1vdGUgZGV2aWNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNjYW5NZWRpYSAoYWRiLCByZW1vdGVQYXRoKSB7XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBtZWRpYSBzY2FuIG9mICcke3JlbW90ZVBhdGh9J2ApO1xuICB0cnkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNjE4NFxuICAgIGlmIChhd2FpdCBhZGIuZ2V0QXBpTGV2ZWwoKSA+PSAyOSkge1xuICAgICAgYXdhaXQgYWRiLnNjYW5NZWRpYShyZW1vdGVQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgYWRiLnNoZWxsKFtcbiAgICAgICAgJ2FtJywgJ2Jyb2FkY2FzdCcsXG4gICAgICAgICctYScsIEFORFJPSURfTUVESUFfUkVTQ0FOX0lOVEVOVCxcbiAgICAgICAgJy1kJywgYGZpbGU6Ly8ke3JlbW90ZVBhdGh9YFxuICAgICAgXSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLndhcm4oYElnbm9yaW5nIGFuIHVuZXhwZWN0ZWQgZXJyb3IgdXBvbiBtZWRpYSBzY2FubmluZyBvZiAnJHtyZW1vdGVQYXRofSc6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogQSBzbWFsbCBoZWxwZXIsIHdoaWNoIGVzY2FwZXMgc2luZ2xlIHF1b3RlcyBpbiBwYXRocyxcbiAqIHNvIHRoZXkgYXJlIHNhZmUgdG8gYmUgcGFzc2VkIGFzIGFyZ3VtZW50cyBvZiBzaGVsbCBjb21tYW5kc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwIFRoZSBpbml0aWFsIHJlbW90ZSBwYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZXNjYXBlZCBwYXRoIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVBhdGggKHApIHtcbiAgcmV0dXJuIHAucmVwbGFjZSgvJy9nLCBgXFxcXCdgKTtcbn1cblxuLyoqXG4gKiBQdWxscyBhIHJlbW90ZSBmaWxlIGZyb20gdGhlIGRldmljZS5cbiAqIEl0IGlzIHJlcXVpcmVkLCB0aGF0IGEgcGFja2FnZSBoYXMgZGVidWdnaW5nIGZsYWcgZW5hYmxlZFxuICogaW4gb3JkZXIgdG8gYWNjZXNzIGl0cyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSByZW1vdGUgZmlsZVxuICogb3IgYSBzcGVjaWFsbHkgZm9ybWF0dGVkIHBhdGgsIHdoaWNoIHBvaW50cyB0byBhbiBpdGVtIGluc2lkZSBhcHAgYnVuZGxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgZW5jb2RlZCBjb250ZW50IG9mIHRoZSBwdWxsZWQgZmlsZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwdWxsIG9wZXJhdGlvbiBmYWlsZWRcbiAqL1xuY29tbWFuZHMucHVsbEZpbGUgPSBhc3luYyBmdW5jdGlvbiBwdWxsRmlsZSAocmVtb3RlUGF0aCkge1xuICBpZiAocmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYEl0IGlzIGV4cGVjdGVkIHRoYXQgcmVtb3RlIHBhdGggcG9pbnRzIHRvIGEgZmlsZSBhbmQgbm90IHRvIGEgZm9sZGVyLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICBgJyR7cmVtb3RlUGF0aH0nIGlzIGdpdmVuIGluc3RlYWRgKTtcbiAgfVxuICBsZXQgdG1wRGVzdGluYXRpb24gPSBudWxsO1xuICBpZiAocmVtb3RlUGF0aC5zdGFydHNXaXRoKENPTlRBSU5FUl9QQVRIX01BUktFUikpIHtcbiAgICBjb25zdCBbcGFja2FnZUlkLCBwYXRoSW5Db250YWluZXJdID0gcGFyc2VDb250YWluZXJQYXRoKHJlbW90ZVBhdGgpO1xuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkIHBhY2thZ2UgaWRlbnRpZmllciAnJHtwYWNrYWdlSWR9JyBmcm9tICcke3JlbW90ZVBhdGh9Jy4gV2lsbCBnZXQgdGhlIGRhdGEgZnJvbSAnJHtwYXRoSW5Db250YWluZXJ9J2ApO1xuICAgIHRtcERlc3RpbmF0aW9uID0gYC9kYXRhL2xvY2FsL3RtcC8ke3BhdGgucG9zaXguYmFzZW5hbWUocGF0aEluQ29udGFpbmVyKX1gO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3J1bi1hcycsIHBhY2thZ2VJZCwgYGNobW9kIDc3NyAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9J2BdKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFtcbiAgICAgICAgJ3J1bi1hcycsIHBhY2thZ2VJZCxcbiAgICAgICAgYGNwIC1mICcke2VzY2FwZVBhdGgocGF0aEluQ29udGFpbmVyKX0nICcke2VzY2FwZVBhdGgodG1wRGVzdGluYXRpb24pfSdgXG4gICAgICBdKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgQ2Fubm90IGFjY2VzcyB0aGUgY29udGFpbmVyIG9mICcke3BhY2thZ2VJZH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGBJcyB0aGUgYXBwbGljYXRpb24gaW5zdGFsbGVkIGFuZCBoYXMgJ2RlYnVnZ2FibGUnIGJ1aWxkIG9wdGlvbiBzZXQgdG8gdHJ1ZT8gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuICBjb25zdCBsb2NhbEZpbGUgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe3ByZWZpeDogJ2FwcGl1bScsIHN1ZmZpeDogJy50bXAnfSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5hZGIucHVsbCh0bXBEZXN0aW5hdGlvbiB8fCByZW1vdGVQYXRoLCBsb2NhbEZpbGUpO1xuICAgIHJldHVybiAoYXdhaXQgdXRpbC50b0luTWVtb3J5QmFzZTY0KGxvY2FsRmlsZSkpLnRvU3RyaW5nKCk7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhsb2NhbEZpbGUpKSB7XG4gICAgICBhd2FpdCBmcy51bmxpbmsobG9jYWxGaWxlKTtcbiAgICB9XG4gICAgaWYgKHRtcERlc3RpbmF0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ3JtJywgJy1mJywgdG1wRGVzdGluYXRpb25dKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogUHVzaGVkIHRoZSBnaXZlbiBkYXRhIHRvIGEgZmlsZSBvbiB0aGUgcmVtb3RlIGRldmljZVxuICogSXQgaXMgcmVxdWlyZWQsIHRoYXQgYSBwYWNrYWdlIGhhcyBkZWJ1Z2dpbmcgZmxhZyBlbmFibGVkXG4gKiBpbiBvcmRlciB0byBhY2Nlc3MgaXRzIGZpbGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlbW90ZSBmaWxlIG9yXG4gKiBhIGZpbGUgaW5zaWRlIGEgcGFja2FnZSBidW5kbGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlNjREYXRhIEJhc2U2NCBlbmNvZGVkIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGVcbiAqIHJlbW90ZSBmaWxlLiBUaGUgcmVtb3RlIGZpbGUgd2lsbCBiZSBzaWxlbnRseSBvdmVycmlkZGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBwdXNoaW5nIHRoZSBkYXRhXG4gKi9cbmNvbW1hbmRzLnB1c2hGaWxlID0gYXN5bmMgZnVuY3Rpb24gcHVzaEZpbGUgKHJlbW90ZVBhdGgsIGJhc2U2NERhdGEpIHtcbiAgaWYgKHJlbW90ZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBJdCBpcyBleHBlY3RlZCB0aGF0IHJlbW90ZSBwYXRoIHBvaW50cyB0byBhIGZpbGUgYW5kIG5vdCB0byBhIGZvbGRlci4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgY29uc3QgbG9jYWxGaWxlID0gYXdhaXQgdGVtcERpci5wYXRoKHtwcmVmaXg6ICdhcHBpdW0nLCBzdWZmaXg6ICcudG1wJ30pO1xuICBpZiAoXy5pc0FycmF5KGJhc2U2NERhdGEpKSB7XG4gICAgLy8gc29tZSBjbGllbnRzIChhaGVtKSBqYXZhLCBzZW5kIGEgYnl0ZSBhcnJheSBlbmNvZGluZyB1dGY4IGNoYXJhY3RlcnNcbiAgICAvLyBpbnN0ZWFkIG9mIGEgc3RyaW5nLCB3aGljaCB3b3VsZCBiZSBpbmZpbml0ZWx5IGJldHRlciFcbiAgICBiYXNlNjREYXRhID0gQnVmZmVyLmZyb20oYmFzZTY0RGF0YSkudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgfVxuICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oYmFzZTY0RGF0YSwgJ2Jhc2U2NCcpO1xuICBsZXQgdG1wRGVzdGluYXRpb24gPSBudWxsO1xuICB0cnkge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShsb2NhbEZpbGUsIGNvbnRlbnQudG9TdHJpbmcoJ2JpbmFyeScpLCAnYmluYXJ5Jyk7XG4gICAgaWYgKHJlbW90ZVBhdGguc3RhcnRzV2l0aChDT05UQUlORVJfUEFUSF9NQVJLRVIpKSB7XG4gICAgICBjb25zdCBbcGFja2FnZUlkLCBwYXRoSW5Db250YWluZXJdID0gcGFyc2VDb250YWluZXJQYXRoKHJlbW90ZVBhdGgpO1xuICAgICAgbG9nLmRlYnVnKGBQYXJzZWQgcGFja2FnZSBpZGVudGlmaWVyICcke3BhY2thZ2VJZH0nIGZyb20gJyR7cmVtb3RlUGF0aH0nLiBXaWxsIHB1dCB0aGUgZGF0YSBpbnRvICcke3BhdGhJbkNvbnRhaW5lcn0nYCk7XG4gICAgICB0bXBEZXN0aW5hdGlvbiA9IGAvZGF0YS9sb2NhbC90bXAvJHtwYXRoLnBvc2l4LmJhc2VuYW1lKHBhdGhJbkNvbnRhaW5lcil9YDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFxuICAgICAgICAgIFsncnVuLWFzJywgcGFja2FnZUlkLCBgbWtkaXIgLXAgJyR7ZXNjYXBlUGF0aChwYXRoLnBvc2l4LmRpcm5hbWUocGF0aEluQ29udGFpbmVyKSl9J2BdXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncnVuLWFzJywgcGFja2FnZUlkLCBgdG91Y2ggJyR7ZXNjYXBlUGF0aChwYXRoSW5Db250YWluZXIpfSdgXSk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncnVuLWFzJywgcGFja2FnZUlkLCBgY2htb2QgNzc3ICcke2VzY2FwZVBhdGgocGF0aEluQ29udGFpbmVyKX0nYF0pO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsRmlsZSwgdG1wRGVzdGluYXRpb24pO1xuICAgICAgICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbXG4gICAgICAgICAgJ3J1bi1hcycsIHBhY2thZ2VJZCxcbiAgICAgICAgICBgY3AgLWYgJyR7ZXNjYXBlUGF0aCh0bXBEZXN0aW5hdGlvbil9JyAnJHtlc2NhcGVQYXRoKHBhdGhJbkNvbnRhaW5lcil9J2BcbiAgICAgICAgXSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5lcnJvckFuZFRocm93KGBDYW5ub3QgYWNjZXNzIHRoZSBjb250YWluZXIgb2YgJyR7cGFja2FnZUlkfScgYXBwbGljYXRpb24uIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgSXMgdGhlIGFwcGxpY2F0aW9uIGluc3RhbGxlZCBhbmQgaGFzICdkZWJ1Z2dhYmxlJyBidWlsZCBvcHRpb24gc2V0IHRvIHRydWU/IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhZGIgcHVzaCBjcmVhdGVzIGZvbGRlcnMgYW5kIG92ZXJ3cml0ZXMgZXhpc3RpbmcgZmlsZXMuXG4gICAgICBhd2FpdCB0aGlzLmFkYi5wdXNoKGxvY2FsRmlsZSwgcmVtb3RlUGF0aCk7XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgcHVzaGVkIGEgZmlsZSwgaXQgbWlnaHQgYmUgYSBtZWRpYSBmaWxlLCBzbyBlbnN1cmUgdGhhdFxuICAgICAgLy8gYXBwcyBrbm93IGFib3V0IGl0XG4gICAgICBhd2FpdCBzY2FuTWVkaWEodGhpcy5hZGIsIHJlbW90ZVBhdGgpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKGxvY2FsRmlsZSkpIHtcbiAgICAgIGF3YWl0IGZzLnVubGluayhsb2NhbEZpbGUpO1xuICAgIH1cbiAgICBpZiAodG1wRGVzdGluYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsncm0nLCAnLWYnLCB0bXBEZXN0aW5hdGlvbl0pO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBQdWxscyB0aGUgd2hvbGUgZm9sZGVyIGZyb20gdGhlIHJlbW90ZSBkZXZpY2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVtb3RlUGF0aCBUaGUgZnVsbCBwYXRoIHRvIGEgZm9sZGVyIG9uIHRoZVxuICogcmVtb3RlIGRldmljZSBvciBhIGZvbGRlciBpbnNpZGUgYW4gYXBwbGljYXRpb24gYnVuZGxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQtZW5jb2RlZCBhbmQgemlwcGVkIGNvbnRlbnQgb2YgdGhlIGZvbGRlclxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgZ2V0dGluZyB0aGUgZm9sZGVyIGNvbnRlbnRcbiAqL1xuY29tbWFuZHMucHVsbEZvbGRlciA9IGFzeW5jIGZ1bmN0aW9uIHB1bGxGb2xkZXIgKHJlbW90ZVBhdGgpIHtcbiAgbGV0IGxvY2FsRm9sZGVyID0gYXdhaXQgdGVtcERpci5wYXRoKHtwcmVmaXg6ICdhcHBpdW0nfSk7XG4gIGF3YWl0IHRoaXMuYWRiLnB1bGwocmVtb3RlUGF0aCwgbG9jYWxGb2xkZXIpO1xuICByZXR1cm4gKGF3YWl0IHppcC50b0luTWVtb3J5WmlwKGxvY2FsRm9sZGVyLCB7XG4gICAgZW5jb2RlVG9CYXNlNjQ6IHRydWUsXG4gIH0pKS50b1N0cmluZygpO1xufTtcblxuLyoqXG4gKiBEZWxldGVzIHRoZSBnaXZlbiBmb2xkZXIgb3IgZmlsZSBmcm9tIHRoZSByZW1vdGUgZGV2aWNlXG4gKlxuICogQHBhcmFtIHtBREJ9IGFkYlxuICogQHBhcmFtIHtzdHJpbmd9IHJlbW90ZVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgcmVtb3RlIGZvbGRlclxuICogb3IgZmlsZSAoZm9sZGVyIG5hbWVzIG11c3QgZW5kIHdpdGggYSBzaW5nbGUgc2xhc2gpXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHByb3ZpZGVkIHJlbW90ZSBwYXRoIGlzIGludmFsaWQgb3JcbiAqIHRoZSBwYWNrYWdlIGNvbnRlbnQgY2Fubm90IGJlIGFjY2Vzc2VkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByZW1vdGUgaXRlbSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5cbiAqIElmIHRoZSByZW1vdGUgcGF0aCBpcyB2YWxpZCwgYnV0IHRoZSByZW1vdGUgcGF0aCBkb2VzIG5vdCBleGlzdFxuICogdGhpcyBmdW5jdGlvbiByZXR1cm4gYGZhbHNlYC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVsZXRlRmlsZU9yRm9sZGVyIChhZGIsIHJlbW90ZVBhdGgpIHtcbiAgY29uc3QgcGVyZm9ybVJlbW90ZUZzQ2hlY2sgPSBhc3luYyAocCwgb3AsIHJ1bkFzID0gbnVsbCkgPT4ge1xuICAgIGNvbnN0IHBhc3NGbGFnID0gJ19fUEFTU19fJztcbiAgICBjb25zdCBjaGVja0NtZCA9IGBbIC0ke29wfSAnJHtlc2NhcGVQYXRoKHApfScgXSAmJiBlY2hvICR7cGFzc0ZsYWd9YDtcbiAgICBjb25zdCBmdWxsQ21kID0gcnVuQXMgPyBgcnVuLWFzICR7cnVuQXN9ICR7Y2hlY2tDbWR9YCA6IGNoZWNrQ21kO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gXy5pbmNsdWRlcyhhd2FpdCBhZGIuc2hlbGwoW2Z1bGxDbWRdKSwgcGFzc0ZsYWcpO1xuICAgIH0gY2F0Y2ggKGlnbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaXNGaWxlID0gYXN5bmMgKHAsIHJ1bkFzID0gbnVsbCkgPT4gYXdhaXQgcGVyZm9ybVJlbW90ZUZzQ2hlY2socCwgJ2YnLCBydW5Bcyk7XG4gIGNvbnN0IGlzRGlyID0gYXN5bmMgKHAsIHJ1bkFzID0gbnVsbCkgPT4gYXdhaXQgcGVyZm9ybVJlbW90ZUZzQ2hlY2socCwgJ2QnLCBydW5Bcyk7XG4gIGNvbnN0IGlzUHJlc2VudCA9IGFzeW5jIChwLCBydW5BcyA9IG51bGwpID0+IGF3YWl0IHBlcmZvcm1SZW1vdGVGc0NoZWNrKHAsICdlJywgcnVuQXMpO1xuXG4gIGxldCBkc3RQYXRoID0gcmVtb3RlUGF0aDtcbiAgbGV0IHBrZ0lkID0gbnVsbDtcbiAgaWYgKHJlbW90ZVBhdGguc3RhcnRzV2l0aChDT05UQUlORVJfUEFUSF9NQVJLRVIpKSB7XG4gICAgY29uc3QgW3BhY2thZ2VJZCwgcGF0aEluQ29udGFpbmVyXSA9IHBhcnNlQ29udGFpbmVyUGF0aChyZW1vdGVQYXRoKTtcbiAgICBsb2cuZGVidWcoYFBhcnNlZCBwYWNrYWdlIGlkZW50aWZpZXIgJyR7cGFja2FnZUlkfScgZnJvbSAnJHtyZW1vdGVQYXRofSdgKTtcbiAgICBkc3RQYXRoID0gcGF0aEluQ29udGFpbmVyO1xuICAgIHBrZ0lkID0gcGFja2FnZUlkO1xuICB9XG5cbiAgaWYgKHBrZ0lkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFkYi5zaGVsbChbJ3J1bi1hcycsIHBrZ0lkLCAnbHMnXSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYENhbm5vdCBhY2Nlc3MgdGhlIGNvbnRhaW5lciBvZiAnJHtwa2dJZH0nIGFwcGxpY2F0aW9uLiBgICtcbiAgICAgICAgYElzIHRoZSBhcHBsaWNhdGlvbiBpbnN0YWxsZWQgYW5kIGhhcyAnZGVidWdnYWJsZScgYnVpbGQgb3B0aW9uIHNldCB0byB0cnVlPyBgICtcbiAgICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWF3YWl0IGlzUHJlc2VudChkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICBsb2cuaW5mbyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIGRvZXMgbm90IGV4aXN0LiBQZXJoYXBzLCBhbHJlYWR5IGRlbGV0ZWQ/YCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZXhwZWN0c0ZpbGUgPSAhcmVtb3RlUGF0aC5lbmRzV2l0aCgnLycpO1xuICBpZiAoZXhwZWN0c0ZpbGUgJiYgIWF3YWl0IGlzRmlsZShkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIGlzIG5vdCBhIGZpbGVgKTtcbiAgfSBlbHNlIGlmICghZXhwZWN0c0ZpbGUgJiYgIWF3YWl0IGlzRGlyKGRzdFBhdGgsIHBrZ0lkKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBUaGUgaXRlbSBhdCAnJHtkc3RQYXRofScgaXMgbm90IGEgZm9sZGVyYCk7XG4gIH1cblxuICBpZiAocGtnSWQpIHtcbiAgICBhd2FpdCBhZGIuc2hlbGwoXG4gICAgICBbJ3J1bi1hcycsIHBrZ0lkLCBgcm0gLWYke2V4cGVjdHNGaWxlID8gJycgOiAncid9ICcke2VzY2FwZVBhdGgoZHN0UGF0aCl9J2BdKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBhZGIuc2hlbGwoWydybScsIGAtZiR7ZXhwZWN0c0ZpbGUgPyAnJyA6ICdyJ31gLCBkc3RQYXRoXSk7XG4gIH1cbiAgaWYgKGF3YWl0IGlzUHJlc2VudChkc3RQYXRoLCBwa2dJZCkpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVGhlIGl0ZW0gYXQgJyR7ZHN0UGF0aH0nIHN0aWxsIGV4aXN0cyBhZnRlciBiZWluZyBkZWxldGVkLiBgICtcbiAgICAgIGBJcyBpdCB3cml0YWJsZT9gKTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZWxldGVGaWxlT3B0c1xuICogQHByb3BlcnR5IHshc3RyaW5nfSByZW1vdGVQYXRoIFRoZSBmdWxsIHBhdGggdG8gdGhlIHJlbW90ZSBmaWxlXG4gKiBvciBhIGZpbGUgaW5zaWRlIGFuIGFwcGxpY2F0aW9uIGJ1bmRsZSAoZm9yIGV4YW1wbGUgYEBteS5hcHAuaWQvcGF0aC9pbi9idW5kbGVgKVxuICovXG5cbi8qKlxuICogRGVsZXRlcyBhIGZpbGUgb24gdGhlIHJlbW90ZSBkZXZpY2VcbiAqXG4gKiBAcGFyYW0ge0RlbGV0ZUZpbGVPcHRzfSBvcHRzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByZW1vdGUgZmlsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5cbiAqIElmIHRoZSBwYXRoIHRvIGEgcmVtb3RlIGZpbGUgaXMgdmFsaWQsIGJ1dCB0aGUgZmlsZSBpdHNlbGYgZG9lcyBub3QgZXhpc3RcbiAqIHRoZW4gYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYXJndW1lbnQgaXMgaW52YWxpZCBvciB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGVcbiAqIGRlbGV0aW5nIHRoZSBmaWxlXG4gKi9cbmNvbW1hbmRzLm1vYmlsZURlbGV0ZUZpbGUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVEZWxldGVGaWxlIChvcHRzID0ge30pIHtcbiAgY29uc3Qge3JlbW90ZVBhdGh9ID0gb3B0cztcbiAgaWYgKCFyZW1vdGVQYXRoKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYFRoZSAncmVtb3RlUGF0aCcgYXJndW1lbnQgaXMgbWFuZGF0b3J5YCk7XG4gIH1cbiAgaWYgKHJlbW90ZVBhdGguZW5kc1dpdGgoJy8nKSkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KGBJdCBpcyBleHBlY3RlZCB0aGF0IHJlbW90ZSBwYXRoIHBvaW50cyB0byBhIGZvbGRlciBhbmQgbm90IHRvIGEgZmlsZS4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYCcke3JlbW90ZVBhdGh9JyBpcyBnaXZlbiBpbnN0ZWFkYCk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGRlbGV0ZUZpbGVPckZvbGRlcih0aGlzLmFkYiwgcmVtb3RlUGF0aCk7XG59O1xuXG5leHBvcnQgeyBjb21tYW5kcyB9O1xuZXhwb3J0IGRlZmF1bHQgY29tbWFuZHM7XG4iXSwiZmlsZSI6ImxpYi9jb21tYW5kcy9maWxlLWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -5,13 +5,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.helpers = void 0;
8
+ exports.helpers = exports.default = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
12
  var _lodash = _interopRequireDefault(require("lodash"));
13
13
 
14
- var _appiumBaseDriver = require("appium-base-driver");
14
+ var _baseDriver = require("@appium/base-driver");
15
15
 
16
16
  let helpers = {},
17
17
  extensions = {};
@@ -38,11 +38,11 @@ helpers.findElOrEls = async function findElOrEls(strategy, selector, mult, conte
38
38
  try {
39
39
  element = await this.doFindElementOrEls(params);
40
40
  } catch (err) {
41
- if ((0, _appiumBaseDriver.isErrorType)(err, _appiumBaseDriver.errors.ProxyRequestError)) {
41
+ if ((0, _baseDriver.isErrorType)(err, _baseDriver.errors.ProxyRequestError)) {
42
42
  err = err.getActualError();
43
43
  }
44
44
 
45
- if ((0, _appiumBaseDriver.isErrorType)(err, _appiumBaseDriver.errors.NoSuchElementError)) {
45
+ if ((0, _baseDriver.isErrorType)(err, _baseDriver.errors.NoSuchElementError)) {
46
46
  return false;
47
47
  }
48
48
 
@@ -67,7 +67,7 @@ helpers.findElOrEls = async function findElOrEls(strategy, selector, mult, conte
67
67
  }
68
68
 
69
69
  if (_lodash.default.isEmpty(element)) {
70
- throw new _appiumBaseDriver.errors.NoSuchElementError();
70
+ throw new _baseDriver.errors.NoSuchElementError();
71
71
  }
72
72
 
73
73
  return element;
@@ -78,4 +78,4 @@ var _default = extensions;
78
78
  exports.default = _default;require('source-map-support').install();
79
79
 
80
80
 
81
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maW5kLmpzIl0sIm5hbWVzIjpbImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZG9GaW5kRWxlbWVudE9yRWxzIiwicGFyYW1zIiwiYm9vdHN0cmFwIiwic2VuZEFjdGlvbiIsImZpbmRFbE9yRWxzIiwic3RyYXRlZ3kiLCJzZWxlY3RvciIsIm11bHQiLCJjb250ZXh0IiwiRXJyb3IiLCJtdWx0aXBsZSIsImVsZW1lbnQiLCJkb0ZpbmQiLCJlcnIiLCJlcnJvcnMiLCJQcm94eVJlcXVlc3RFcnJvciIsImdldEFjdHVhbEVycm9yIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiXyIsImlzRW1wdHkiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwibWF0Y2giLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0EsSUFBSUEsT0FBTyxHQUFHLEVBQWQ7QUFBQSxJQUFrQkMsVUFBVSxHQUFHLEVBQS9COzs7QUFRQUQsT0FBTyxDQUFDRSxrQkFBUixHQUE2QixlQUFlQSxrQkFBZixDQUFtQ0MsTUFBbkMsRUFBMkM7QUFDdEUsU0FBTyxNQUFNLEtBQUtDLFNBQUwsQ0FBZUMsVUFBZixDQUEwQixNQUExQixFQUFrQ0YsTUFBbEMsQ0FBYjtBQUNELENBRkQ7O0FBUUFILE9BQU8sQ0FBQ00sV0FBUixHQUFzQixlQUFlQSxXQUFmLENBQTRCQyxRQUE1QixFQUFzQ0MsUUFBdEMsRUFBZ0RDLElBQWhELEVBQXNEQyxPQUFPLEdBQUcsRUFBaEUsRUFBb0U7QUFDeEYsTUFBSSxDQUFDRixRQUFMLEVBQWU7QUFDYixVQUFNLElBQUlHLEtBQUosQ0FBVSwrQ0FBVixDQUFOO0FBQ0Q7O0FBRUQsTUFBSVIsTUFBTSxHQUFHO0FBQ1hJLElBQUFBLFFBRFc7QUFFWEMsSUFBQUEsUUFGVztBQUdYRSxJQUFBQSxPQUhXO0FBSVhFLElBQUFBLFFBQVEsRUFBRUg7QUFKQyxHQUFiO0FBT0EsTUFBSUksT0FBSjs7QUFDQSxNQUFJQyxNQUFNLEdBQUcsWUFBWTtBQUN2QixRQUFJO0FBQ0ZELE1BQUFBLE9BQU8sR0FBRyxNQUFNLEtBQUtYLGtCQUFMLENBQXdCQyxNQUF4QixDQUFoQjtBQUNELEtBRkQsQ0FFRSxPQUFPWSxHQUFQLEVBQVk7QUFJWixVQUFJLG1DQUFZQSxHQUFaLEVBQWlCQyx5QkFBT0MsaUJBQXhCLENBQUosRUFBZ0Q7QUFDOUNGLFFBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDRyxjQUFKLEVBQU47QUFDRDs7QUFLRCxVQUFJLG1DQUFZSCxHQUFaLEVBQWlCQyx5QkFBT0csa0JBQXhCLENBQUosRUFBaUQ7QUFFL0MsZUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsWUFBTUosR0FBTjtBQUNEOztBQUdELFdBQU8sQ0FBQ0ssZ0JBQUVDLE9BQUYsQ0FBVVIsT0FBVixDQUFSO0FBQ0QsR0F2QkQ7O0FBeUJBLE1BQUk7QUFDRixVQUFNLEtBQUtTLHdCQUFMLENBQThCUixNQUE5QixDQUFOO0FBQ0QsR0FGRCxDQUVFLE9BQU9DLEdBQVAsRUFBWTtBQUNaLFFBQUlBLEdBQUcsQ0FBQ1EsT0FBSixJQUFlUixHQUFHLENBQUNRLE9BQUosQ0FBWUMsS0FBWixDQUFrQixpQkFBbEIsQ0FBbkIsRUFBeUQ7QUFHdkRYLE1BQUFBLE9BQU8sR0FBRyxFQUFWO0FBQ0QsS0FKRCxNQUlPO0FBQ0wsWUFBTUUsR0FBTjtBQUNEO0FBQ0Y7O0FBRUQsTUFBSU4sSUFBSixFQUFVO0FBQ1IsV0FBT0ksT0FBUDtBQUNEOztBQUNELE1BQUlPLGdCQUFFQyxPQUFGLENBQVVSLE9BQVYsQ0FBSixFQUF3QjtBQUN0QixVQUFNLElBQUlHLHlCQUFPRyxrQkFBWCxFQUFOO0FBQ0Q7O0FBQ0QsU0FBT04sT0FBUDtBQUNELENBekREOztBQTJEQVksTUFBTSxDQUFDQyxNQUFQLENBQWN6QixVQUFkLEVBQTBCRCxPQUExQjtlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGVycm9ycywgaXNFcnJvclR5cGUgfSBmcm9tICdhcHBpdW0tYmFzZS1kcml2ZXInO1xuXG5cbmxldCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuLyoqXG4gKiBSZWFzb24gZm9yIGlzb2xhdGluZyBkb0ZpbmRFbGVtZW50T3JFbHMgZnJvbSBmaW5kRWxPckVscyBpcyBmb3IgcmV1c2luZyBmaW5kRWxPckVsc1xuICogYWNyb3NzIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbi5cbiAqIE90aGVyIGFuZHJvaWQtZHJpdmVycyAobGlrZSBhcHBpdW0tdWlhdXRvbWF0b3IyLWRyaXZlcikgbmVlZCB0byBvdmVycmlkZSBkb0ZpbmRFbGVtZW50T3JFbHNcbiAqIHRvIGZhY2lsaXRhdGUgZmluZEVsT3JFbHMuXG4gKi9cbmhlbHBlcnMuZG9GaW5kRWxlbWVudE9yRWxzID0gYXN5bmMgZnVuY3Rpb24gZG9GaW5kRWxlbWVudE9yRWxzIChwYXJhbXMpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2ZpbmQnLCBwYXJhbXMpO1xufTtcblxuLy8gc3RhdGVneTogbG9jYXRvciBzdHJhdGVneVxuLy8gc2VsZWN0b3I6IHRoZSBhY3R1YWwgc2VsZWN0b3IgZm9yIGZpbmRpbmcgYW4gZWxlbWVudFxuLy8gbXVsdDogbXVsdGlwbGUgZWxlbWVudHMgb3IganVzdCBvbmU/XG4vLyBjb250ZXh0OiBmaW5kaW5nIGFuIGVsZW1lbnQgZnJvbSB0aGUgcm9vdCBjb250ZXh0PyBvciBzdGFydGluZyBmcm9tIGFub3RoZXIgZWxlbWVudFxuaGVscGVycy5maW5kRWxPckVscyA9IGFzeW5jIGZ1bmN0aW9uIGZpbmRFbE9yRWxzIChzdHJhdGVneSwgc2VsZWN0b3IsIG11bHQsIGNvbnRleHQgPSAnJykge1xuICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYSBzZWxlY3RvciB3aGVuIGZpbmRpbmcgZWxlbWVudHMnKTtcbiAgfVxuXG4gIGxldCBwYXJhbXMgPSB7XG4gICAgc3RyYXRlZ3ksXG4gICAgc2VsZWN0b3IsXG4gICAgY29udGV4dCxcbiAgICBtdWx0aXBsZTogbXVsdFxuICB9O1xuXG4gIGxldCBlbGVtZW50O1xuICBsZXQgZG9GaW5kID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBlbGVtZW50ID0gYXdhaXQgdGhpcy5kb0ZpbmRFbGVtZW50T3JFbHMocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcblxuICAgICAgLy8gaWYgdGhlIGVycm9yIHRoYXQgY29tZXMgYmFjayBpcyBmcm9tIGEgcHJveGllZCByZXF1ZXN0LCB3ZSBuZWVkIHRvXG4gICAgICAvLyB1bndyYXAgaXQgdG8gaXRzIGFjdHVhbCBwcm90b2NvbCBlcnJvciBmaXJzdFxuICAgICAgaWYgKGlzRXJyb3JUeXBlKGVyciwgZXJyb3JzLlByb3h5UmVxdWVzdEVycm9yKSkge1xuICAgICAgICBlcnIgPSBlcnIuZ2V0QWN0dWFsRXJyb3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1leC1hc3NpZ25cbiAgICAgIH1cblxuICAgICAgLy8gbm93IHdlIGhhdmUgdG8gaW5zcGVjdCB0aGUgZXJyb3IgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgbm8gc3VjaFxuICAgICAgLy8gZWxlbWVudCBlcnJvciwgYmFzZWQgb24gdGhlIHNoYXBlIG9mIHRoZSBlcnJvciBvYmplY3QgZnJvbVxuICAgICAgLy8gYXBwaXVtLWJhc2UtZHJpdmVyXG4gICAgICBpZiAoaXNFcnJvclR5cGUoZXJyLCBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKSkge1xuICAgICAgICAvLyB3ZSBhcmUgZmluZSB3aXRoIHRoaXMsIGp1c3QgaW5kaWNhdGUgYSByZXRyeVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgLy8gd2Ugd2FudCB0byByZXR1cm4gZmFsc2UgaWYgd2Ugd2FudCB0byBwb3RlbnRpYWxseSB0cnkgYWdhaW5cbiAgICByZXR1cm4gIV8uaXNFbXB0eShlbGVtZW50KTtcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuaW1wbGljaXRXYWl0Rm9yQ29uZGl0aW9uKGRvRmluZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIubWVzc2FnZSAmJiBlcnIubWVzc2FnZS5tYXRjaCgvQ29uZGl0aW9uIHVubWV0LykpIHtcbiAgICAgIC8vIG9ubHkgZ2V0IGhlcmUgaWYgd2UgYXJlIGxvb2tpbmcgZm9yIG11bHRpcGxlIGVsZW1lbnRzXG4gICAgICAvLyBjb25kaXRpb24gd2FzIG5vdCBtZXQgc2V0dGluZyByZXMgdG8gZW1wdHkgYXJyYXlcbiAgICAgIGVsZW1lbnQgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdWx0KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbiAgaWYgKF8uaXNFbXB0eShlbGVtZW50KSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuTm9TdWNoRWxlbWVudEVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGhlbHBlcnMpO1xuZXhwb3J0IHsgaGVscGVycyB9O1xuZXhwb3J0IGRlZmF1bHQgZXh0ZW5zaW9ucztcbiJdLCJmaWxlIjoibGliL2NvbW1hbmRzL2ZpbmQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
81
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9maW5kLmpzIl0sIm5hbWVzIjpbImhlbHBlcnMiLCJleHRlbnNpb25zIiwiZG9GaW5kRWxlbWVudE9yRWxzIiwicGFyYW1zIiwiYm9vdHN0cmFwIiwic2VuZEFjdGlvbiIsImZpbmRFbE9yRWxzIiwic3RyYXRlZ3kiLCJzZWxlY3RvciIsIm11bHQiLCJjb250ZXh0IiwiRXJyb3IiLCJtdWx0aXBsZSIsImVsZW1lbnQiLCJkb0ZpbmQiLCJlcnIiLCJlcnJvcnMiLCJQcm94eVJlcXVlc3RFcnJvciIsImdldEFjdHVhbEVycm9yIiwiTm9TdWNoRWxlbWVudEVycm9yIiwiXyIsImlzRW1wdHkiLCJpbXBsaWNpdFdhaXRGb3JDb25kaXRpb24iLCJtZXNzYWdlIiwibWF0Y2giLCJPYmplY3QiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBR0EsSUFBSUEsT0FBTyxHQUFHLEVBQWQ7QUFBQSxJQUFrQkMsVUFBVSxHQUFHLEVBQS9COzs7QUFRQUQsT0FBTyxDQUFDRSxrQkFBUixHQUE2QixlQUFlQSxrQkFBZixDQUFtQ0MsTUFBbkMsRUFBMkM7QUFDdEUsU0FBTyxNQUFNLEtBQUtDLFNBQUwsQ0FBZUMsVUFBZixDQUEwQixNQUExQixFQUFrQ0YsTUFBbEMsQ0FBYjtBQUNELENBRkQ7O0FBUUFILE9BQU8sQ0FBQ00sV0FBUixHQUFzQixlQUFlQSxXQUFmLENBQTRCQyxRQUE1QixFQUFzQ0MsUUFBdEMsRUFBZ0RDLElBQWhELEVBQXNEQyxPQUFPLEdBQUcsRUFBaEUsRUFBb0U7QUFDeEYsTUFBSSxDQUFDRixRQUFMLEVBQWU7QUFDYixVQUFNLElBQUlHLEtBQUosQ0FBVSwrQ0FBVixDQUFOO0FBQ0Q7O0FBRUQsTUFBSVIsTUFBTSxHQUFHO0FBQ1hJLElBQUFBLFFBRFc7QUFFWEMsSUFBQUEsUUFGVztBQUdYRSxJQUFBQSxPQUhXO0FBSVhFLElBQUFBLFFBQVEsRUFBRUg7QUFKQyxHQUFiO0FBT0EsTUFBSUksT0FBSjs7QUFDQSxNQUFJQyxNQUFNLEdBQUcsWUFBWTtBQUN2QixRQUFJO0FBQ0ZELE1BQUFBLE9BQU8sR0FBRyxNQUFNLEtBQUtYLGtCQUFMLENBQXdCQyxNQUF4QixDQUFoQjtBQUNELEtBRkQsQ0FFRSxPQUFPWSxHQUFQLEVBQVk7QUFJWixVQUFJLDZCQUFZQSxHQUFaLEVBQWlCQyxtQkFBT0MsaUJBQXhCLENBQUosRUFBZ0Q7QUFDOUNGLFFBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDRyxjQUFKLEVBQU47QUFDRDs7QUFLRCxVQUFJLDZCQUFZSCxHQUFaLEVBQWlCQyxtQkFBT0csa0JBQXhCLENBQUosRUFBaUQ7QUFFL0MsZUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsWUFBTUosR0FBTjtBQUNEOztBQUdELFdBQU8sQ0FBQ0ssZ0JBQUVDLE9BQUYsQ0FBVVIsT0FBVixDQUFSO0FBQ0QsR0F2QkQ7O0FBeUJBLE1BQUk7QUFDRixVQUFNLEtBQUtTLHdCQUFMLENBQThCUixNQUE5QixDQUFOO0FBQ0QsR0FGRCxDQUVFLE9BQU9DLEdBQVAsRUFBWTtBQUNaLFFBQUlBLEdBQUcsQ0FBQ1EsT0FBSixJQUFlUixHQUFHLENBQUNRLE9BQUosQ0FBWUMsS0FBWixDQUFrQixpQkFBbEIsQ0FBbkIsRUFBeUQ7QUFHdkRYLE1BQUFBLE9BQU8sR0FBRyxFQUFWO0FBQ0QsS0FKRCxNQUlPO0FBQ0wsWUFBTUUsR0FBTjtBQUNEO0FBQ0Y7O0FBRUQsTUFBSU4sSUFBSixFQUFVO0FBQ1IsV0FBT0ksT0FBUDtBQUNEOztBQUNELE1BQUlPLGdCQUFFQyxPQUFGLENBQVVSLE9BQVYsQ0FBSixFQUF3QjtBQUN0QixVQUFNLElBQUlHLG1CQUFPRyxrQkFBWCxFQUFOO0FBQ0Q7O0FBQ0QsU0FBT04sT0FBUDtBQUNELENBekREOztBQTJEQVksTUFBTSxDQUFDQyxNQUFQLENBQWN6QixVQUFkLEVBQTBCRCxPQUExQjtlQUVlQyxVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGVycm9ycywgaXNFcnJvclR5cGUgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcblxuXG5sZXQgaGVscGVycyA9IHt9LCBleHRlbnNpb25zID0ge307XG5cbi8qKlxuICogUmVhc29uIGZvciBpc29sYXRpbmcgZG9GaW5kRWxlbWVudE9yRWxzIGZyb20gZmluZEVsT3JFbHMgaXMgZm9yIHJldXNpbmcgZmluZEVsT3JFbHNcbiAqIGFjcm9zcyBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uXG4gKiBPdGhlciBhbmRyb2lkLWRyaXZlcnMgKGxpa2UgYXBwaXVtLXVpYXV0b21hdG9yMi1kcml2ZXIpIG5lZWQgdG8gb3ZlcnJpZGUgZG9GaW5kRWxlbWVudE9yRWxzXG4gKiB0byBmYWNpbGl0YXRlIGZpbmRFbE9yRWxzLlxuICovXG5oZWxwZXJzLmRvRmluZEVsZW1lbnRPckVscyA9IGFzeW5jIGZ1bmN0aW9uIGRvRmluZEVsZW1lbnRPckVscyAocGFyYW1zKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdmaW5kJywgcGFyYW1zKTtcbn07XG5cbi8vIHN0YXRlZ3k6IGxvY2F0b3Igc3RyYXRlZ3lcbi8vIHNlbGVjdG9yOiB0aGUgYWN0dWFsIHNlbGVjdG9yIGZvciBmaW5kaW5nIGFuIGVsZW1lbnRcbi8vIG11bHQ6IG11bHRpcGxlIGVsZW1lbnRzIG9yIGp1c3Qgb25lP1xuLy8gY29udGV4dDogZmluZGluZyBhbiBlbGVtZW50IGZyb20gdGhlIHJvb3QgY29udGV4dD8gb3Igc3RhcnRpbmcgZnJvbSBhbm90aGVyIGVsZW1lbnRcbmhlbHBlcnMuZmluZEVsT3JFbHMgPSBhc3luYyBmdW5jdGlvbiBmaW5kRWxPckVscyAoc3RyYXRlZ3ksIHNlbGVjdG9yLCBtdWx0LCBjb250ZXh0ID0gJycpIHtcbiAgaWYgKCFzZWxlY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGEgc2VsZWN0b3Igd2hlbiBmaW5kaW5nIGVsZW1lbnRzJyk7XG4gIH1cblxuICBsZXQgcGFyYW1zID0ge1xuICAgIHN0cmF0ZWd5LFxuICAgIHNlbGVjdG9yLFxuICAgIGNvbnRleHQsXG4gICAgbXVsdGlwbGU6IG11bHRcbiAgfTtcblxuICBsZXQgZWxlbWVudDtcbiAgbGV0IGRvRmluZCA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgZWxlbWVudCA9IGF3YWl0IHRoaXMuZG9GaW5kRWxlbWVudE9yRWxzKHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG5cbiAgICAgIC8vIGlmIHRoZSBlcnJvciB0aGF0IGNvbWVzIGJhY2sgaXMgZnJvbSBhIHByb3hpZWQgcmVxdWVzdCwgd2UgbmVlZCB0b1xuICAgICAgLy8gdW53cmFwIGl0IHRvIGl0cyBhY3R1YWwgcHJvdG9jb2wgZXJyb3IgZmlyc3RcbiAgICAgIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Qcm94eVJlcXVlc3RFcnJvcikpIHtcbiAgICAgICAgZXJyID0gZXJyLmdldEFjdHVhbEVycm9yKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXgtYXNzaWduXG4gICAgICB9XG5cbiAgICAgIC8vIG5vdyB3ZSBoYXZlIHRvIGluc3BlY3QgdGhlIGVycm9yIHRvIGRldGVybWluZSBpZiBpdCBpcyBhIG5vIHN1Y2hcbiAgICAgIC8vIGVsZW1lbnQgZXJyb3IsIGJhc2VkIG9uIHRoZSBzaGFwZSBvZiB0aGUgZXJyb3Igb2JqZWN0IGZyb21cbiAgICAgIC8vIEBhcHBpdW0vYmFzZS1kcml2ZXJcbiAgICAgIGlmIChpc0Vycm9yVHlwZShlcnIsIGVycm9ycy5Ob1N1Y2hFbGVtZW50RXJyb3IpKSB7XG4gICAgICAgIC8vIHdlIGFyZSBmaW5lIHdpdGggdGhpcywganVzdCBpbmRpY2F0ZSBhIHJldHJ5XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG5cbiAgICAvLyB3ZSB3YW50IHRvIHJldHVybiBmYWxzZSBpZiB3ZSB3YW50IHRvIHBvdGVudGlhbGx5IHRyeSBhZ2FpblxuICAgIHJldHVybiAhXy5pc0VtcHR5KGVsZW1lbnQpO1xuICB9O1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgdGhpcy5pbXBsaWNpdFdhaXRGb3JDb25kaXRpb24oZG9GaW5kKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLm1hdGNoKC9Db25kaXRpb24gdW5tZXQvKSkge1xuICAgICAgLy8gb25seSBnZXQgaGVyZSBpZiB3ZSBhcmUgbG9va2luZyBmb3IgbXVsdGlwbGUgZWxlbWVudHNcbiAgICAgIC8vIGNvbmRpdGlvbiB3YXMgbm90IG1ldCBzZXR0aW5nIHJlcyB0byBlbXB0eSBhcnJheVxuICAgICAgZWxlbWVudCA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgaWYgKG11bHQpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICBpZiAoXy5pc0VtcHR5KGVsZW1lbnQpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5Ob1N1Y2hFbGVtZW50RXJyb3IoKTtcbiAgfVxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbk9iamVjdC5hc3NpZ24oZXh0ZW5zaW9ucywgaGVscGVycyk7XG5leHBvcnQgeyBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZmluZC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -5,9 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.parseWindows = parseWindows;
9
- exports.parseSurfaceLine = parseSurfaceLine;
10
- exports.default = exports.helpers = exports.commands = void 0;
8
+ exports.helpers = exports.default = exports.commands = void 0;
11
9
 
12
10
  require("source-map-support/register");
13
11
 
@@ -15,7 +13,7 @@ var _lodash = _interopRequireDefault(require("lodash"));
15
13
 
16
14
  var _androidHelpers = _interopRequireDefault(require("../android-helpers"));
17
15
 
18
- var _appiumSupport = require("appium-support");
16
+ var _support = require("@appium/support");
19
17
 
20
18
  var _logger = _interopRequireDefault(require("../logger"));
21
19
 
@@ -188,7 +186,7 @@ commands.background = async function background(seconds) {
188
186
  };
189
187
  }
190
188
 
191
- args = await _appiumSupport.util.filterObject(args);
189
+ args = await _support.util.filterObject(args);
192
190
 
193
191
  _logger.default.debug(`Bringing application back to foreground with arguments: ${JSON.stringify(args)}`);
194
192
 
@@ -233,7 +231,7 @@ commands.launchApp = async function launchApp() {
233
231
  commands.startActivity = async function startActivity(appPackage, appActivity, appWaitPackage, appWaitActivity, intentAction, intentCategory, intentFlags, optionalIntentArguments, dontStopAppOnReset) {
234
232
  _logger.default.debug(`Starting package '${appPackage}' and activity '${appActivity}'`);
235
233
 
236
- if (!_appiumSupport.util.hasValue(dontStopAppOnReset)) {
234
+ if (!_support.util.hasValue(dontStopAppOnReset)) {
237
235
  dontStopAppOnReset = !!this.opts.dontStopAppOnReset;
238
236
  }
239
237
 
@@ -315,72 +313,12 @@ commands.getDisplayDensity = async function getDisplayDensity() {
315
313
  _logger.default.errorAndThrow('Failed to get display density property.');
316
314
  };
317
315
 
318
- function parseSurfaceLine(line) {
319
- let bounds = line.split('rect=')[1].replace(/[(), x]+/g, ' ').trim().split(' ');
320
- return {
321
- visible: line.indexOf('shown=true') !== -1,
322
- x: parseFloat(bounds[0]),
323
- y: parseFloat(bounds[1]),
324
- width: parseFloat(bounds[2]),
325
- height: parseFloat(bounds[3])
326
- };
327
- }
328
-
329
- function parseWindows(lines) {
330
- let atStatusBar = false;
331
- let atNavBar = false;
332
- let statusBar;
333
- let navigationBar;
334
- lines.split('\n').forEach(line => {
335
- if (line.indexOf(' Window #') !== -1) {
336
- atStatusBar = line.indexOf('StatusBar') !== -1;
337
- atNavBar = line.indexOf('NavigationBar') !== -1;
338
- return;
339
- }
340
-
341
- if (line.indexOf(' Surface:') === -1) {
342
- return;
343
- }
344
-
345
- if (atStatusBar) {
346
- statusBar = parseSurfaceLine(line);
347
- atStatusBar = false;
348
- } else if (atNavBar) {
349
- navigationBar = parseSurfaceLine(line);
350
- atNavBar = false;
351
- }
352
- });
353
-
354
- if (!statusBar) {
355
- _logger.default.errorAndThrow('Failed to parse status bar information.');
356
- }
357
-
358
- if (!navigationBar) {
359
- _logger.default.errorAndThrow('Failed to parse navigation bar information.');
360
- }
361
-
362
- return {
363
- statusBar,
364
- navigationBar
365
- };
366
- }
367
-
368
- commands.getSystemBars = async function getSystemBars() {
369
- let out = await this.adb.shell(['dumpsys', 'window', 'windows']);
370
-
371
- if (!out) {
372
- _logger.default.errorAndThrow('Did not get window manager output.');
373
- }
374
-
375
- return parseWindows(out);
376
- };
377
-
378
316
  commands.mobilePerformEditorAction = async function mobilePerformEditorAction(opts = {}) {
379
317
  const {
380
318
  action
381
319
  } = opts;
382
320
 
383
- if (!_appiumSupport.util.hasValue(action)) {
321
+ if (!_support.util.hasValue(action)) {
384
322
  _logger.default.errorAndThrow(`'action' argument is required`);
385
323
  }
386
324
 
@@ -399,7 +337,7 @@ commands.mobileChangePermissions = async function mobileChangePermissions(opts =
399
337
  action = PERMISSION_ACTION.GRANT
400
338
  } = opts;
401
339
 
402
- if (!_appiumSupport.util.hasValue(permissions)) {
340
+ if (!_support.util.hasValue(permissions)) {
403
341
  _logger.default.errorAndThrow(`'permissions' argument is required`);
404
342
  }
405
343
 
@@ -493,4 +431,4 @@ var _default = extensions;
493
431
  exports.default = _default;require('source-map-support').install();
494
432
 
495
433
 
496
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sIm5hbWVzIjpbIk1PTUVOVF9GT1JNQVRfSVNPODYwMSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJrZXlzIiwiXyIsImlzQXJyYXkiLCJqb2luIiwicGFyYW1zIiwidGV4dCIsInJlcGxhY2UiLCJvcHRzIiwidW5pY29kZUtleWJvYXJkIiwiZG9TZW5kS2V5cyIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJnZXREZXZpY2VUaW1lIiwiZm9ybWF0IiwibG9nIiwiZGVidWciLCJkZXZpY2VUaW1lc3RhbXAiLCJhZGIiLCJzaGVsbCIsInRyaW0iLCJwYXJzZWRUaW1lc3RhbXAiLCJtb21lbnQiLCJ1dGMiLCJpc1ZhbGlkIiwid2FybiIsInV0Y09mZnNldCIsIl90em0iLCJtb2JpbGVHZXREZXZpY2VUaW1lIiwiZ2V0UGFnZVNvdXJjZSIsImJhY2siLCJpc0tleWJvYXJkU2hvd24iLCJpc1NvZnRLZXlib2FyZFByZXNlbnQiLCJoaWRlS2V5Ym9hcmQiLCJvcGVuU2V0dGluZ3NBY3Rpdml0eSIsInNldHRpbmciLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJnZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5Iiwid2FpdEZvck5vdEFjdGl2aXR5IiwiZ2V0V2luZG93U2l6ZSIsImdldFdpbmRvd1JlY3QiLCJ3aWR0aCIsImhlaWdodCIsIngiLCJ5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZ2V0Q3VycmVudFBhY2thZ2UiLCJiYWNrZ3JvdW5kIiwic2Vjb25kcyIsImdvVG9Ib21lIiwic2xlZXBNcyIsInRocmVzaG9sZE1zIiwiaW50ZXJ2YWxNcyIsIm1pbiIsInBhcnNlSW50IiwicHJvZ3Jlc3NDYiIsImVsYXBzZWRNcyIsInByb2dyZXNzIiwid2FpdFNlY3MiLCJ0b0ZpeGVkIiwicHJvZ3Jlc3NQY3QiLCJhcmdzIiwiX2NhY2hlZEFjdGl2aXR5QXJncyIsImFjdGl2YXRlQXBwIiwiaWduIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJzcGxpdCIsImluY2x1ZGVzIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJpbnRlbnRBY3Rpb24iLCJjYXRlZ29yeSIsImludGVudENhdGVnb3J5IiwiZmxhZ3MiLCJpbnRlbnRGbGFncyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJ3YWl0Rm9yTGF1bmNoIiwiYXBwV2FpdEZvckxhdW5jaCIsIndhaXREdXJhdGlvbiIsImFwcFdhaXREdXJhdGlvbiIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwic3RvcEFwcCIsInVzZXIiLCJ1c2VyUHJvZmlsZSIsInV0aWwiLCJmaWx0ZXJPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRBcHAiLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJpc1N0cmluZyIsImFwa1N0cmluZ3MiLCJhbmRyb2lkSGVscGVycyIsInB1c2hTdHJpbmdzIiwibGF1bmNoQXBwIiwiaW5pdEFVVCIsInN0YXJ0QVVUIiwic3RhcnRBY3Rpdml0eSIsImRvbnRTdG9wQXBwT25SZXNldCIsImhhc1ZhbHVlIiwicmVzZXQiLCJyZXNldEFwcCIsIk9iamVjdCIsImFzc2lnbiIsImZhc3RSZXNldCIsInNldENvbnRleHQiLCJpc0Nocm9tZVNlc3Npb24iLCJzdGFydENocm9tZVNlc3Npb24iLCJzZXRVcmwiLCJ1cmkiLCJzdGFydFVyaSIsImNsb3NlQXBwIiwiZm9yY2VTdG9wIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJvdXQiLCJ2YWwiLCJpc05hTiIsImVycm9yQW5kVGhyb3ciLCJwYXJzZVN1cmZhY2VMaW5lIiwibGluZSIsImJvdW5kcyIsInZpc2libGUiLCJpbmRleE9mIiwicGFyc2VGbG9hdCIsInBhcnNlV2luZG93cyIsImxpbmVzIiwiYXRTdGF0dXNCYXIiLCJhdE5hdkJhciIsInN0YXR1c0JhciIsIm5hdmlnYXRpb25CYXIiLCJmb3JFYWNoIiwiZ2V0U3lzdGVtQmFycyIsIm1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24iLCJwZXJmb3JtRWRpdG9yQWN0aW9uIiwiUEVSTUlTU0lPTl9BQ1RJT04iLCJHUkFOVCIsIlJFVk9LRSIsIm1vYmlsZUNoYW5nZVBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhY3Rpb25GdW5jIiwidG9Mb3dlciIsInBlcm1pc3Npb24iLCJncmFudFBlcm1pc3Npb24iLCJyZXZva2VQZXJtaXNzaW9uIiwidmFsdWVzIiwiUEVSTUlTU0lPTlNfVFlQRSIsIkRFTklFRCIsIkdSQU5URUQiLCJSRVFVRVNURUQiLCJtb2JpbGVHZXRQZXJtaXNzaW9ucyIsInR5cGUiLCJnZXRSZXFQZXJtaXNzaW9ucyIsImdldEdyYW50ZWRQZXJtaXNzaW9ucyIsImdldERlbmllZFBlcm1pc3Npb25zIiwibW9iaWxlR2V0Tm90aWZpY2F0aW9ucyIsImdldE5vdGlmaWNhdGlvbnMiLCJtb2JpbGVMaXN0U21zIiwiZ2V0U21zTGlzdCIsIm1vYmlsZVVubG9jayIsInN0cmF0ZWd5IiwidGltZW91dE1zIiwidW5sb2NrIiwidW5sb2NrS2V5IiwidW5sb2NrVHlwZSIsInVubG9ja1N0cmF0ZWd5IiwidW5sb2NrU3VjY2Vzc1RpbWVvdXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxxQkFBcUIsR0FBRyxzQkFBOUI7QUFFQSxJQUFJQyxRQUFRLEdBQUcsRUFBZjtBQUFBLElBQW1CQyxPQUFPLEdBQUcsRUFBN0I7QUFBQSxJQUFpQ0MsVUFBVSxHQUFHLEVBQTlDOzs7O0FBRUFGLFFBQVEsQ0FBQ0csSUFBVCxHQUFnQixlQUFlQSxJQUFmLENBQXFCQSxJQUFyQixFQUEyQjtBQUV6Q0EsRUFBQUEsSUFBSSxHQUFHQyxnQkFBRUMsT0FBRixDQUFVRixJQUFW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LENBQVNzSixnQkFBVCxFQUFiO0FBQ0QsQ0FGRDs7QUFpQkExSyxRQUFRLENBQUMySyxhQUFULEdBQXlCLGVBQWVBLGFBQWYsQ0FBOEJqSyxJQUFJLEdBQUcsRUFBckMsRUFBeUM7QUFDaEUsU0FBTyxNQUFNLEtBQUtVLEdBQUwsQ0FBU3dKLFVBQVQsQ0FBb0JsSyxJQUFwQixDQUFiO0FBQ0QsQ0FGRDs7QUF5QkFWLFFBQVEsQ0FBQzZLLFlBQVQsR0FBd0IsZUFBZUEsWUFBZixDQUE2Qm5LLElBQUksR0FBRyxFQUFwQyxFQUF3QztBQUM5RCxRQUFNO0FBQUU0RixJQUFBQSxHQUFGO0FBQU8rRCxJQUFBQSxJQUFQO0FBQWFTLElBQUFBLFFBQWI7QUFBdUJDLElBQUFBO0FBQXZCLE1BQXFDckssSUFBM0M7QUFDQSxRQUFNaUcsd0JBQWVxRSxNQUFmLENBQXNCLElBQXRCLEVBQTRCLEtBQUs1SixHQUFqQyxFQUFzQztBQUMxQzZKLElBQUFBLFNBQVMsRUFBRTNFLEdBRCtCO0FBRTFDNEUsSUFBQUEsVUFBVSxFQUFFYixJQUY4QjtBQUcxQ2MsSUFBQUEsY0FBYyxFQUFFTCxRQUgwQjtBQUkxQ00sSUFBQUEsb0JBQW9CLEVBQUVMO0FBSm9CLEdBQXRDLENBQU47QUFNRCxDQVJEOztBQVVBMUQsTUFBTSxDQUFDQyxNQUFQLENBQWNwSCxVQUFkLEVBQTBCRixRQUExQixFQUFvQ0MsT0FBcEM7ZUFFZUMsVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgYW5kcm9pZEhlbHBlcnMgZnJvbSAnLi4vYW5kcm9pZC1oZWxwZXJzJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdhcHBpdW0tc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBsb25nU2xlZXAgfSBmcm9tICdhc3luY2JveCc7XG5cbmNvbnN0IE1PTUVOVF9GT1JNQVRfSVNPODYwMSA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG5cbmxldCBjb21tYW5kcyA9IHt9LCBoZWxwZXJzID0ge30sIGV4dGVuc2lvbnMgPSB7fTtcblxuY29tbWFuZHMua2V5cyA9IGFzeW5jIGZ1bmN0aW9uIGtleXMgKGtleXMpIHtcbiAgLy8gUHJvdG9jb2wgc2VuZHMgYW4gYXJyYXk7IHJldGhpbmsgYXBwcm9hY2hcbiAga2V5cyA9IF8uaXNBcnJheShrZXlzKSA/IGtleXMuam9pbignJykgOiBrZXlzO1xuICBsZXQgcGFyYW1zID0ge1xuICAgIHRleHQ6IGtleXMsXG4gICAgcmVwbGFjZTogZmFsc2VcbiAgfTtcbiAgaWYgKHRoaXMub3B0cy51bmljb2RlS2V5Ym9hcmQpIHtcbiAgICBwYXJhbXMudW5pY29kZUtleWJvYXJkID0gdHJ1ZTtcbiAgfVxuICBhd2FpdCB0aGlzLmRvU2VuZEtleXMocGFyYW1zKTtcbn07XG5cbmNvbW1hbmRzLmRvU2VuZEtleXMgPSBhc3luYyBmdW5jdGlvbiBkb1NlbmRLZXlzIChwYXJhbXMpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3NldFRleHQnLCBwYXJhbXMpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZGV2aWNlJ3MgdGltZXN0YW1wLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBUaGUgc2V0IG9mIGZvcm1hdCBzcGVjaWZpZXJzLiBSZWFkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly9tb21lbnRqcy5jb20vZG9jcy8gdG8gZ2V0IHRoZSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUgZm9ybWF0IHNwZWNpZmllcnMuIFRoZSBkZWZhdWx0IGZvcm1hdCBpc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIGBZWVlZLU1NLUREVEhIOm1tOnNzWmAsIHdoaWNoIGNvbXBsaWVzIHRvIElTTy04NjAxXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZvcm1hdHRlZCBkYXRldGltZSBzdHJpbmcgb3IgdGhlIHJhdyBjb21tYW5kIG91dHB1dCBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gKi9cbmNvbW1hbmRzLmdldERldmljZVRpbWUgPSBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VUaW1lIChmb3JtYXQgPSBNT01FTlRfRk9STUFUX0lTTzg2MDEpIHtcbiAgbG9nLmRlYnVnKCdBdHRlbXB0aW5nIHRvIGNhcHR1cmUgYW5kcm9pZCBkZXZpY2UgZGF0ZSBhbmQgdGltZS4gJyArXG4gICAgYFRoZSBmb3JtYXQgc3BlY2lmaWVyIGlzICcke2Zvcm1hdH0nYCk7XG4gIGNvbnN0IGRldmljZVRpbWVzdGFtcCA9IChhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2RhdGUnLCAnKyVZLSVtLSVkVCVUJXonXSkpLnRyaW0oKTtcbiAgbG9nLmRlYnVnKGBHb3QgZGV2aWNlIHRpbWVzdGFtcDogJHtkZXZpY2VUaW1lc3RhbXB9YCk7XG4gIGNvbnN0IHBhcnNlZFRpbWVzdGFtcCA9IG1vbWVudC51dGMoZGV2aWNlVGltZXN0YW1wLCAnWVlZWS1NTS1ERFRISDptbTpzc1paJyk7XG4gIGlmICghcGFyc2VkVGltZXN0YW1wLmlzVmFsaWQoKSkge1xuICAgIGxvZy53YXJuKCdDYW5ub3QgcGFyc2UgdGhlIHJldHVybmVkIHRpbWVzdGFtcC4gUmV0dXJuaW5nIGFzIGlzJyk7XG4gICAgcmV0dXJuIGRldmljZVRpbWVzdGFtcDtcbiAgfVxuICByZXR1cm4gcGFyc2VkVGltZXN0YW1wLnV0Y09mZnNldChwYXJzZWRUaW1lc3RhbXAuX3R6bSB8fCAwKS5mb3JtYXQoZm9ybWF0KTtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRGV2aWNlVGltZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmb3JtYXQgW1lZWVktTU0tRERUSEg6bW06c3NaXSAtIFNlZSBnZXREZXZpY2VUaW1lI2Zvcm1hdFxuICovXG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGRldmljZSB0aW1lXG4gKlxuICogQHBhcmFtIHtEZXZpY2VUaW1lT3B0aW9uc30gb3B0c1xuICogQHJldHVybiB7c3RyaW5nfSBGb3JtYXR0ZWQgZGF0ZXRpbWUgc3RyaW5nIG9yIHRoZSByYXcgY29tbWFuZCBvdXRwdXQgaWYgZm9ybWF0dGluZyBmYWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXREZXZpY2VUaW1lID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0RGV2aWNlVGltZSAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmdldERldmljZVRpbWUob3B0cy5mb3JtYXQpO1xufTtcblxuY29tbWFuZHMuZ2V0UGFnZVNvdXJjZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VTb3VyY2UgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignc291cmNlJyk7XG59O1xuXG5jb21tYW5kcy5iYWNrID0gYXN5bmMgZnVuY3Rpb24gYmFjayAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdwcmVzc0JhY2snKTtcbn07XG5cbmNvbW1hbmRzLmlzS2V5Ym9hcmRTaG93biA9IGFzeW5jIGZ1bmN0aW9uIGlzS2V5Ym9hcmRTaG93biAoKSB7XG4gIGNvbnN0IHtpc0tleWJvYXJkU2hvd259ID0gYXdhaXQgdGhpcy5hZGIuaXNTb2Z0S2V5Ym9hcmRQcmVzZW50KCk7XG4gIHJldHVybiBpc0tleWJvYXJkU2hvd247XG59O1xuXG5jb21tYW5kcy5oaWRlS2V5Ym9hcmQgPSBhc3luYyBmdW5jdGlvbiBoaWRlS2V5Ym9hcmQgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5hZGIuaGlkZUtleWJvYXJkKCk7XG59O1xuXG5jb21tYW5kcy5vcGVuU2V0dGluZ3NBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIG9wZW5TZXR0aW5nc0FjdGl2aXR5IChzZXR0aW5nKSB7XG4gIGxldCB7YXBwUGFja2FnZSwgYXBwQWN0aXZpdHl9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpO1xuICBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2FtJywgJ3N0YXJ0JywgJy1hJywgYGFuZHJvaWQuc2V0dGluZ3MuJHtzZXR0aW5nfWBdKTtcbiAgYXdhaXQgdGhpcy5hZGIud2FpdEZvck5vdEFjdGl2aXR5KGFwcFBhY2thZ2UsIGFwcEFjdGl2aXR5LCA1MDAwKTtcbn07XG5cbmNvbW1hbmRzLmdldFdpbmRvd1NpemUgPSBhc3luYyBmdW5jdGlvbiBnZXRXaW5kb3dTaXplICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ2dldERldmljZVNpemUnKTtcbn07XG5cbi8vIEZvciBXM0NcbmNvbW1hbmRzLmdldFdpbmRvd1JlY3QgPSBhc3luYyBmdW5jdGlvbiBnZXRXaW5kb3dSZWN0ICgpIHtcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBhd2FpdCB0aGlzLmdldFdpbmRvd1NpemUoKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG59O1xuXG5jb21tYW5kcy5nZXRDdXJyZW50QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXRDdXJyZW50QWN0aXZpdHkgKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKSkuYXBwQWN0aXZpdHk7XG59O1xuXG5jb21tYW5kcy5nZXRDdXJyZW50UGFja2FnZSA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRQYWNrYWdlICgpIHtcbiAgcmV0dXJuIChhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCkpLmFwcFBhY2thZ2U7XG59O1xuXG5jb21tYW5kcy5iYWNrZ3JvdW5kID0gYXN5bmMgZnVuY3Rpb24gYmFja2dyb3VuZCAoc2Vjb25kcykge1xuICBpZiAoc2Vjb25kcyA8IDApIHtcbiAgICAvLyBpZiB1c2VyIHBhc3NlcyBpbiBhIG5lZ2F0aXZlIHNlY29uZHMgdmFsdWUsIGludGVycHJldCB0aGF0IGFzIHRoZSBpbnN0cnVjdGlvblxuICAgIC8vIHRvIG5vdCBicmluZyB0aGUgYXBwIGJhY2sgYXQgYWxsXG4gICAgYXdhaXQgdGhpcy5hZGIuZ29Ub0hvbWUoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQge2FwcFBhY2thZ2UsIGFwcEFjdGl2aXR5fSA9IGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKTtcbiAgYXdhaXQgdGhpcy5hZGIuZ29Ub0hvbWUoKTtcblxuICAvLyBwZW9wbGUgY2FuIHdhaXQgZm9yIGEgbG9uZyB0aW1lLCBzbyB0byBiZSBzYWZlIGxldCdzIHVzZSB0aGUgbG9uZ1NsZWVwIGZ1bmN0aW9uIGFuZCBsb2dcbiAgLy8gcHJvZ3Jlc3MgcGVyaW9kaWNhbGx5LlxuICBjb25zdCBzbGVlcE1zID0gc2Vjb25kcyAqIDEwMDA7XG4gIGNvbnN0IHRocmVzaG9sZE1zID0gMzAgKiAxMDAwOyAvLyB1c2UgdGhlIHNwaW4td2FpdCBmb3IgYW55dGhpbmcgb3ZlciB0aGlzIHRocmVzaG9sZFxuICAvLyBmb3Igb3VyIHNwaW4gaW50ZXJ2YWwsIHVzZSAxJSBvZiB0aGUgdG90YWwgd2FpdCB0aW1lLCBidXQgbm90aGluZyBiaWdnZXIgdGhhbiAzMHNcbiAgY29uc3QgaW50ZXJ2YWxNcyA9IF8ubWluKFszMCAqIDEwMDAsIHBhcnNlSW50KHNsZWVwTXMgLyAxMDAsIDEwKV0pO1xuICBjb25zdCBwcm9ncmVzc0NiID0gKHtlbGFwc2VkTXMsIHByb2dyZXNzfSkgPT4ge1xuICAgIGNvbnN0IHdhaXRTZWNzID0gKGVsYXBzZWRNcyAvIDEwMDApLnRvRml4ZWQoMCk7XG4gICAgY29uc3QgcHJvZ3Jlc3NQY3QgPSAocHJvZ3Jlc3MgKiAxMDApLnRvRml4ZWQoMik7XG4gICAgbG9nLmRlYnVnKGBXYWl0ZWQgJHt3YWl0U2Vjc31zIHNvIGZhciAoJHtwcm9ncmVzc1BjdH0lKWApO1xuICB9O1xuICBhd2FpdCBsb25nU2xlZXAoc2xlZXBNcywge3RocmVzaG9sZE1zLCBpbnRlcnZhbE1zLCBwcm9ncmVzc0NifSk7XG5cbiAgbGV0IGFyZ3M7XG4gIGlmICh0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3MgJiYgdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzW2Ake2FwcFBhY2thZ2V9LyR7YXBwQWN0aXZpdHl9YF0pIHtcbiAgICAvLyB0aGUgYWN0aXZpdHkgd2FzIHN0YXJ0ZWQgd2l0aCBgc3RhcnRBY3Rpdml0eWAsIHNvIHVzZSB0aG9zZSBhcmdzIHRvIHJlc3RhcnRcbiAgICBhcmdzID0gdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzW2Ake2FwcFBhY2thZ2V9LyR7YXBwQWN0aXZpdHl9YF07XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGxvZy5kZWJ1ZyhgQWN0aXZhdGluZyBhcHAgJyR7YXBwUGFja2FnZX0nIGluIG9yZGVyIHRvIHJlc3RvcmUgaXRgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aXZhdGVBcHAoYXBwUGFja2FnZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgYXJncyA9ICgoYXBwUGFja2FnZSA9PT0gdGhpcy5vcHRzLmFwcFBhY2thZ2UgJiYgYXBwQWN0aXZpdHkgPT09IHRoaXMub3B0cy5hcHBBY3Rpdml0eSkgfHxcbiAgICAgICAgICAgIChhcHBQYWNrYWdlID09PSB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UgJiYgKHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHkgfHwgJycpLnNwbGl0KCcsJykuaW5jbHVkZXMoYXBwQWN0aXZpdHkpKSlcbiAgICAgID8gey8vIHRoZSBhY3Rpdml0eSBpcyB0aGUgb3JpZ2luYWwgc2Vzc2lvbiBhY3Rpdml0eSwgc28gdXNlIHRoZSBvcmlnaW5hbCBhcmdzXG4gICAgICAgIHBrZzogdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgICAgIGFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgICAgIGFjdGlvbjogdGhpcy5vcHRzLmludGVudEFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IHRoaXMub3B0cy5pbnRlbnRDYXRlZ29yeSxcbiAgICAgICAgZmxhZ3M6IHRoaXMub3B0cy5pbnRlbnRGbGFncyxcbiAgICAgICAgd2FpdFBrZzogdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlLFxuICAgICAgICB3YWl0QWN0aXZpdHk6IHRoaXMub3B0cy5hcHBXYWl0QWN0aXZpdHksXG4gICAgICAgIHdhaXRGb3JMYXVuY2g6IHRoaXMub3B0cy5hcHBXYWl0Rm9yTGF1bmNoLFxuICAgICAgICB3YWl0RHVyYXRpb246IHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24sXG4gICAgICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzOiB0aGlzLm9wdHMub3B0aW9uYWxJbnRlbnRBcmd1bWVudHMsXG4gICAgICAgIHN0b3BBcHA6IGZhbHNlLFxuICAgICAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGV9XG4gICAgICA6IHsvLyB0aGUgYWN0aXZpdHkgd2FzIHN0YXJ0ZWQgc29tZSBvdGhlciB3YXksIHNvIHVzZSBkZWZhdWx0c1xuICAgICAgICBwa2c6IGFwcFBhY2thZ2UsXG4gICAgICAgIGFjdGl2aXR5OiBhcHBBY3Rpdml0eSxcbiAgICAgICAgd2FpdFBrZzogYXBwUGFja2FnZSxcbiAgICAgICAgd2FpdEFjdGl2aXR5OiBhcHBBY3Rpdml0eSxcbiAgICAgICAgc3RvcEFwcDogZmFsc2V9O1xuICB9XG4gIGFyZ3MgPSBhd2FpdCB1dGlsLmZpbHRlck9iamVjdChhcmdzKTtcbiAgbG9nLmRlYnVnKGBCcmluZ2luZyBhcHBsaWNhdGlvbiBiYWNrIHRvIGZvcmVncm91bmQgd2l0aCBhcmd1bWVudHM6ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9YCk7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcChhcmdzKTtcbn07XG5cbmNvbW1hbmRzLmdldFN0cmluZ3MgPSBhc3luYyBmdW5jdGlvbiBnZXRTdHJpbmdzIChsYW5ndWFnZSkge1xuICBpZiAoIWxhbmd1YWdlKSB7XG4gICAgbGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLmFkYi5nZXREZXZpY2VMYW5ndWFnZSgpO1xuICAgIGxvZy5pbmZvKGBObyBsYW5ndWFnZSBzcGVjaWZpZWQsIHJldHVybmluZyBzdHJpbmdzIGZvcjogJHtsYW5ndWFnZX1gKTtcbiAgfVxuXG4gIC8vIENsaWVudHMgcmVxdWlyZSB0aGUgcmVzdWx0aW5nIG1hcHBpbmcgdG8gaGF2ZSBib3RoIGtleXNcbiAgLy8gYW5kIHZhbHVlcyBvZiB0eXBlIHN0cmluZ1xuICBjb25zdCBwcmVwcm9jZXNzU3RyaW5nc01hcCA9IChtYXBwaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgXy50b1BhaXJzKG1hcHBpbmcpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IF8uaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgaWYgKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pIHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIHN0cmluZ3NcbiAgICByZXR1cm4gcHJlcHJvY2Vzc1N0cmluZ3NNYXAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSk7XG4gIH1cblxuICB0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdID0gYXdhaXQgYW5kcm9pZEhlbHBlcnMucHVzaFN0cmluZ3MobGFuZ3VhZ2UsIHRoaXMuYWRiLCB0aGlzLm9wdHMpO1xuICBpZiAodGhpcy5ib290c3RyYXApIHtcbiAgICAvLyBUT0RPOiBUaGlzIGlzIG11dGF0aW5nIHRoZSBjdXJyZW50IGxhbmd1YWdlLCBidXQgaXQncyBob3cgYXBwaXVtIGN1cnJlbnRseSB3b3Jrc1xuICAgIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3VwZGF0ZVN0cmluZ3MnKTtcbiAgfVxuXG4gIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbn07XG5cbmNvbW1hbmRzLmxhdW5jaEFwcCA9IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaEFwcCAoKSB7XG4gIGF3YWl0IHRoaXMuaW5pdEFVVCgpO1xuICBhd2FpdCB0aGlzLnN0YXJ0QVVUKCk7XG59O1xuXG5jb21tYW5kcy5zdGFydEFjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBY3Rpdml0eSAoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksXG4gIGFwcFdhaXRQYWNrYWdlLCBhcHBXYWl0QWN0aXZpdHksIGludGVudEFjdGlvbiwgaW50ZW50Q2F0ZWdvcnksIGludGVudEZsYWdzLFxuICBvcHRpb25hbEludGVudEFyZ3VtZW50cywgZG9udFN0b3BBcHBPblJlc2V0KSB7XG4gIGxvZy5kZWJ1ZyhgU3RhcnRpbmcgcGFja2FnZSAnJHthcHBQYWNrYWdlfScgYW5kIGFjdGl2aXR5ICcke2FwcEFjdGl2aXR5fSdgKTtcblxuICAvLyBkb250U3RvcEFwcE9uUmVzZXQgaXMgYm90aCBhbiBhcmd1bWVudCBoZXJlLCBhbmQgYSBkZXNpcmVkIGNhcGFiaWxpdHlcbiAgLy8gaWYgdGhlIGFyZ3VtZW50IGlzIHNldCwgdXNlIGl0LCBvdGhlcndpc2UgdXNlIHRoZSBjYXBcbiAgaWYgKCF1dGlsLmhhc1ZhbHVlKGRvbnRTdG9wQXBwT25SZXNldCkpIHtcbiAgICBkb250U3RvcEFwcE9uUmVzZXQgPSAhIXRoaXMub3B0cy5kb250U3RvcEFwcE9uUmVzZXQ7XG4gIH1cblxuICBsZXQgYXJncyA9IHtcbiAgICBwa2c6IGFwcFBhY2thZ2UsXG4gICAgYWN0aXZpdHk6IGFwcEFjdGl2aXR5LFxuICAgIHdhaXRQa2c6IGFwcFdhaXRQYWNrYWdlIHx8IGFwcFBhY2thZ2UsXG4gICAgd2FpdEFjdGl2aXR5OiBhcHBXYWl0QWN0aXZpdHkgfHwgYXBwQWN0aXZpdHksXG4gICAgYWN0aW9uOiBpbnRlbnRBY3Rpb24sXG4gICAgY2F0ZWdvcnk6IGludGVudENhdGVnb3J5LFxuICAgIGZsYWdzOiBpbnRlbnRGbGFncyxcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBzdG9wQXBwOiAhZG9udFN0b3BBcHBPblJlc2V0XG4gIH07XG4gIHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyA9IHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyB8fCB7fTtcbiAgdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzW2Ake2FyZ3Mud2FpdFBrZ30vJHthcmdzLndhaXRBY3Rpdml0eX1gXSA9IGFyZ3M7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKGFyZ3MpO1xufTtcblxuY29tbWFuZHMucmVzZXQgPSBhc3luYyBmdW5jdGlvbiByZXNldCAoKSB7XG4gIGF3YWl0IGFuZHJvaWRIZWxwZXJzLnJlc2V0QXBwKHRoaXMuYWRiLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm9wdHMsIHtmYXN0UmVzZXQ6IHRydWV9KSk7XG4gIC8vIHJlc2V0IGNvbnRleHQgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb24gY29udGV4dCB3ZSB3aWxsIGVuZCB1cCBhZnRlciBhcHAgbGF1bmNoLlxuICBhd2FpdCB0aGlzLnNldENvbnRleHQoKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuaXNDaHJvbWVTZXNzaW9uID8gdGhpcy5zdGFydENocm9tZVNlc3Npb24oKSA6IHRoaXMuc3RhcnRBVVQoKTtcbn07XG5cbmNvbW1hbmRzLnN0YXJ0QVVUID0gYXN5bmMgZnVuY3Rpb24gc3RhcnRBVVQgKCkge1xuICBhd2FpdCB0aGlzLmFkYi5zdGFydEFwcCh7XG4gICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICBhY3Rpdml0eTogdGhpcy5vcHRzLmFwcEFjdGl2aXR5LFxuICAgIGFjdGlvbjogdGhpcy5vcHRzLmludGVudEFjdGlvbixcbiAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5LFxuICAgIGZsYWdzOiB0aGlzLm9wdHMuaW50ZW50RmxhZ3MsXG4gICAgd2FpdFBrZzogdGhpcy5vcHRzLmFwcFdhaXRQYWNrYWdlLFxuICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICB3YWl0Rm9yTGF1bmNoOiB0aGlzLm9wdHMuYXBwV2FpdEZvckxhdW5jaCxcbiAgICB3YWl0RHVyYXRpb246IHRoaXMub3B0cy5hcHBXYWl0RHVyYXRpb24sXG4gICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICBzdG9wQXBwOiAhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldCxcbiAgICB1c2VyOiB0aGlzLm9wdHMudXNlclByb2ZpbGUsXG4gIH0pO1xufTtcblxuLy8gd2Ugb3ZlcnJpZGUgc2V0VXJsIHRvIHRha2UgYW4gYW5kcm9pZCBVUkkgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGRlZXAtbGlua2luZ1xuLy8gaW5zaWRlIGFuIGFwcCwgc2ltaWxhciB0byBzdGFydGluZyBhbiBpbnRlbnRcbmNvbW1hbmRzLnNldFVybCA9IGFzeW5jIGZ1bmN0aW9uIHNldFVybCAodXJpKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0VXJpKHVyaSwgdGhpcy5vcHRzLmFwcFBhY2thZ2UpO1xufTtcblxuLy8gY2xvc2luZyBhcHAgdXNpbmcgZm9yY2Ugc3RvcFxuY29tbWFuZHMuY2xvc2VBcHAgPSBhc3luYyBmdW5jdGlvbiBjbG9zZUFwcCAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLmZvcmNlU3RvcCh0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG4gIC8vIHJlc2V0IGNvbnRleHQgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IGtpbmQgb24gY29udGV4dCB3ZSB3aWxsIGVuZCB1cCBhZnRlciBhcHAgbGF1bmNoLlxuICBhd2FpdCB0aGlzLnNldENvbnRleHQoKTtcbn07XG5cbmNvbW1hbmRzLmdldERpc3BsYXlEZW5zaXR5ID0gYXN5bmMgZnVuY3Rpb24gZ2V0RGlzcGxheURlbnNpdHkgKCkge1xuICAvLyBmaXJzdCB0cnkgdGhlIHByb3BlcnR5IGZvciBkZXZpY2VzXG4gIGxldCBvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2dldHByb3AnLCAncm8uc2YubGNkX2RlbnNpdHknXSk7XG4gIGlmIChvdXQpIHtcbiAgICBsZXQgdmFsID0gcGFyc2VJbnQob3V0LCAxMCk7XG4gICAgLy8gaWYgdGhlIHZhbHVlIGlzIE5hTiwgdHJ5IGdldHRpbmcgdGhlIGVtdWxhdG9yIHByb3BlcnR5XG4gICAgaWYgKCFpc05hTih2YWwpKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYFBhcnNlZCBkZW5zaXR5IHZhbHVlIHdhcyBOYU46IFwiJHtvdXR9XCJgKTtcbiAgfVxuICAvLyBmYWxsYmFjayB0byB0cnlpbmcgcHJvcGVydHkgZm9yIGVtdWxhdG9yc1xuICBvdXQgPSBhd2FpdCB0aGlzLmFkYi5zaGVsbChbJ2dldHByb3AnLCAncWVtdS5zZi5sY2RfZGVuc2l0eSddKTtcbiAgaWYgKG91dCkge1xuICAgIGxldCB2YWwgPSBwYXJzZUludChvdXQsIDEwKTtcbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkIGRlbnNpdHkgdmFsdWUgd2FzIE5hTjogXCIke291dH1cImApO1xuICB9XG4gIC8vIGNvdWxkbid0IGdldCBhbnl0aGluZywgc28gZXJyb3Igb3V0XG4gIGxvZy5lcnJvckFuZFRocm93KCdGYWlsZWQgdG8gZ2V0IGRpc3BsYXkgZGVuc2l0eSBwcm9wZXJ0eS4nKTtcbn07XG5cbi8qKlxuICogUGFyc2VzIHRoZSBnaXZlbiB3aW5kb3cgbWFuYWdlciBTdXJmYWNlIHN0cmluZyB0byBnZXQgaW5mby5cbiAqIEBwYXJhbSBsaW5lOiBUbyBwYXJzZS4gVGhpcyBpcyBhc3N1bWVkIHRvIGJlIHZhbGlkLlxuICogQHJldHVybjogVmlzaWJpbGl0eSBhbmQgYm91bmRzIG9mIHRoZSBTdXJmYWNlLlxuICovXG5mdW5jdGlvbiBwYXJzZVN1cmZhY2VMaW5lIChsaW5lKSB7XG4gIC8vIHRoZSBzdXJmYWNlIGJvdW5kcyBhcmUgaW4gdGhlIGZvcm1hdDpcbiAgLy8gXCJyZWN0PSgwLjAsMTE4NC4wKSA3NjguMCB4IDk2LjBcIlxuICAvLyAgICAgICBeIGxvY2F0aW9uICAgXiBzaXplXG4gIC8vIGN1dCBvdXQgdGhlIHN0dWZmIGJlZm9yZSB0aGUgJ3JlY3QnIGFuZCB0aGVuIHNwbGl0IHRoZSBudW1iZXJzIGFwYXJ0XG4gIGxldCBib3VuZHMgPSBsaW5lLnNwbGl0KCdyZWN0PScpWzFdXG4gIC5yZXBsYWNlKC9bKCksIHhdKy9nLCAnICcpXG4gIC50cmltKClcbiAgLnNwbGl0KCcgJyk7XG5cbiAgcmV0dXJuIHtcbiAgICB2aXNpYmxlOiAobGluZS5pbmRleE9mKCdzaG93bj10cnVlJykgIT09IC0xKSxcbiAgICB4OiBwYXJzZUZsb2F0KGJvdW5kc1swXSksXG4gICAgeTogcGFyc2VGbG9hdChib3VuZHNbMV0pLFxuICAgIHdpZHRoOiBwYXJzZUZsb2F0KGJvdW5kc1syXSksXG4gICAgaGVpZ2h0OiBwYXJzZUZsb2F0KGJvdW5kc1szXSlcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBzdGF0dXMgYW5kIG5hdmlnYXRpb24gYmFyIGluZm9ybWF0aW9uIGZyb20gdGhlIHdpbmRvdyBtYW5hZ2VyIG91dHB1dC5cbiAqIEBwYXJhbSBsaW5lczogT3V0cHV0IGZyb20gZHVtcHN5cyBjb21tYW5kXG4gKiBAcmV0dXJuOiBWaXNpYmlsaXR5IGFuZCBib3VuZHMgaW5mbyBvZiBzdGF0dXMgYW5kIG5hdmlnYXRpb24gYmFyXG4gKi9cbmZ1bmN0aW9uIHBhcnNlV2luZG93cyAobGluZXMpIHtcbiAgbGV0IGF0U3RhdHVzQmFyID0gZmFsc2U7XG4gIGxldCBhdE5hdkJhciA9IGZhbHNlO1xuICBsZXQgc3RhdHVzQmFyO1xuICBsZXQgbmF2aWdhdGlvbkJhcjtcbiAgLy8gdGhlIHdpbmRvdyBtYW5hZ2VyIG91dHB1dCBsb29rcyBsaWtlOlxuICAvLyBXaW5kb3cgIzEgLi4uIFdpbmRvd0lEXG4gIC8vICAgQSBidW5jaCBvZiBwcm9wZXJ0aWVzXG4gIC8vIFdpbmRvdyAjMiAuLi4gV2luZG93SURcbiAgLy8gICBBIGJ1bmNoIG9mIHByb3BlcnRpZXNcbiAgbGluZXMuc3BsaXQoJ1xcbicpLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAvLyB0aGUgc3RhcnQgb2YgYSBuZXcgd2luZG93IHNlY3Rpb25cbiAgICBpZiAobGluZS5pbmRleE9mKCcgIFdpbmRvdyAjJykgIT09IC0xKSB7XG4gICAgICAvLyBkZXRlcm1pbmUgd2hpY2ggc2VjdGlvbiB3ZSdyZSBpblxuICAgICAgLy8gb25seSBvbmUgd2lsbCBiZSB0cnVlXG4gICAgICBhdFN0YXR1c0JhciA9IChsaW5lLmluZGV4T2YoJ1N0YXR1c0JhcicpICE9PSAtMSk7XG4gICAgICBhdE5hdkJhciA9IChsaW5lLmluZGV4T2YoJ05hdmlnYXRpb25CYXInKSAhPT0gLTEpO1xuICAgICAgLy8gZG9uJ3QgbmVlZCBhbnl0aGluZyBlbHNlLiBtb3ZlIHRvIG5leHQgbGluZVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBvbmNlIHdlJ3JlIGluIGEgd2luZG93IHNlY3Rpb24sIGxvb2sgZm9yIHRoZSBzdXJmYWNlIGRhdGEgbGluZVxuICAgIGlmIChsaW5lLmluZGV4T2YoJyAgICAgIFN1cmZhY2U6JykgPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChhdFN0YXR1c0Jhcikge1xuICAgICAgc3RhdHVzQmFyID0gcGFyc2VTdXJmYWNlTGluZShsaW5lKTtcbiAgICAgIGF0U3RhdHVzQmFyID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChhdE5hdkJhcikge1xuICAgICAgbmF2aWdhdGlvbkJhciA9IHBhcnNlU3VyZmFjZUxpbmUobGluZSk7XG4gICAgICBhdE5hdkJhciA9IGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFzdGF0dXNCYXIpIHtcbiAgICBsb2cuZXJyb3JBbmRUaHJvdygnRmFpbGVkIHRvIHBhcnNlIHN0YXR1cyBiYXIgaW5mb3JtYXRpb24uJyk7XG4gIH1cbiAgaWYgKCFuYXZpZ2F0aW9uQmFyKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coJ0ZhaWxlZCB0byBwYXJzZSBuYXZpZ2F0aW9uIGJhciBpbmZvcm1hdGlvbi4nKTtcbiAgfVxuXG4gIHJldHVybiB7c3RhdHVzQmFyLCBuYXZpZ2F0aW9uQmFyfTtcbn1cblxuY29tbWFuZHMuZ2V0U3lzdGVtQmFycyA9IGFzeW5jIGZ1bmN0aW9uIGdldFN5c3RlbUJhcnMgKCkge1xuICBsZXQgb3V0ID0gYXdhaXQgdGhpcy5hZGIuc2hlbGwoWydkdW1wc3lzJywgJ3dpbmRvdycsICd3aW5kb3dzJ10pO1xuICBpZiAoIW91dCkge1xuICAgIGxvZy5lcnJvckFuZFRocm93KCdEaWQgbm90IGdldCB3aW5kb3cgbWFuYWdlciBvdXRwdXQuJyk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlV2luZG93cyhvdXQpO1xufTtcblxuY29tbWFuZHMubW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YWN0aW9ufSA9IG9wdHM7XG4gIGlmICghdXRpbC5oYXNWYWx1ZShhY3Rpb24pKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYCdhY3Rpb24nIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLmFkYi5wZXJmb3JtRWRpdG9yQWN0aW9uKGFjdGlvbik7XG59O1xuXG5jb25zdCBQRVJNSVNTSU9OX0FDVElPTiA9IHtcbiAgR1JBTlQ6ICdncmFudCcsXG4gIFJFVk9LRTogJ3Jldm9rZScsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENoYW5nZVBlcm1pc3Npb25zT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfEFycmF5PHN0cmluZz59IHBlcm1pc3Npb25zIC0gVGhlIGZ1bGwgbmFtZSBvZiB0aGUgcGVybWlzc2lvbiB0byBiZSBjaGFuZ2VkXG4gKiBvciBhIGxpc3Qgb2YgcGVybWlzc2lvbnMuIE1hbmRhdG9yeSBhcmd1bWVudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYWNrYWdlIFt0aGlzLm9wdHMuYXBwUGFja2FnZV0gLSBUaGUgYXBwbGljYXRpb24gcGFja2FnZSB0byBzZXQgY2hhbmdlXG4gKiBwZXJtaXNzaW9ucyBvbi4gRGVmYXVsdHMgdG8gdGhlIHBhY2thZ2UgbmFtZSB1bmRlciB0ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGlvbiBbZ3JhbnRdIC0gT25lIG9mIGBQRVJNSVNTSU9OX0FDVElPTmAgdmFsdWVzXG4gKi9cblxuLyoqXG4gKiBDaGFuZ2VzIHBhY2thZ2UgcGVybWlzc2lvbnMgaW4gcnVudGltZS5cbiAqXG4gKiBAcGFyYW0gez9DaGFuZ2VQZXJtaXNzaW9uc09wdGlvbnN9IG9wdHMgLSBBdmFpbGFibGUgb3B0aW9ucyBtYXBwaW5nLlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgY2hhbmdpbmcgcGVybWlzc2lvbnNcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDaGFuZ2VQZXJtaXNzaW9ucyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBwZXJtaXNzaW9ucyxcbiAgICBhcHBQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgYWN0aW9uID0gUEVSTUlTU0lPTl9BQ1RJT04uR1JBTlQsXG4gIH0gPSBvcHRzO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUocGVybWlzc2lvbnMpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYCdwZXJtaXNzaW9ucycgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuXG4gIGxldCBhY3Rpb25GdW5jO1xuICBzd2l0Y2ggKF8udG9Mb3dlcihhY3Rpb24pKSB7XG4gICAgY2FzZSBQRVJNSVNTSU9OX0FDVElPTi5HUkFOVDpcbiAgICAgIGFjdGlvbkZ1bmMgPSAoYXBwUGFja2FnZSwgcGVybWlzc2lvbikgPT4gdGhpcy5hZGIuZ3JhbnRQZXJtaXNzaW9uKGFwcFBhY2thZ2UsIHBlcm1pc3Npb24pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBQRVJNSVNTSU9OX0FDVElPTi5SRVZPS0U6XG4gICAgICBhY3Rpb25GdW5jID0gKGFwcFBhY2thZ2UsIHBlcm1pc3Npb24pID0+IHRoaXMuYWRiLnJldm9rZVBlcm1pc3Npb24oYXBwUGFja2FnZSwgcGVybWlzc2lvbik7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYFVua25vd24gYWN0aW9uICcke2FjdGlvbn0nLiBgICtcbiAgICAgICAgYE9ubHkgJHtKU09OLnN0cmluZ2lmeShfLnZhbHVlcyhQRVJNSVNTSU9OX0FDVElPTikpfSBhY3Rpb25zIGFyZSBzdXBwb3J0ZWRgKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGZvciAoY29uc3QgcGVybWlzc2lvbiBvZiAoXy5pc0FycmF5KHBlcm1pc3Npb25zKSA/IHBlcm1pc3Npb25zIDogW3Blcm1pc3Npb25zXSkpIHtcbiAgICBhd2FpdCBhY3Rpb25GdW5jKGFwcFBhY2thZ2UsIHBlcm1pc3Npb24pO1xuICB9XG59O1xuXG5jb25zdCBQRVJNSVNTSU9OU19UWVBFID0ge1xuICBERU5JRUQ6ICdkZW5pZWQnLFxuICBHUkFOVEVEOiAnZ3JhbnRlZCcsXG4gIFJFUVVFU1RFRDogJ3JlcXVlc3RlZCcsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEdldFBlcm1pc3Npb25zT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgW3JlcXVlc3RlZF0gLSBPbmUgb2YgcG9zc2libGUgcGVybWlzc2lvbiB0eXBlcyB0byBnZXQuXG4gKiBDYW4gYmUgYW55IG9mIGBQRVJNSVNTSU9OU19UWVBFYCB2YWx1ZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUGFja2FnZSBbdGhpcy5vcHRzLmFwcFBhY2thZ2VdIC0gVGhlIGFwcGxpY2F0aW9uIHBhY2thZ2UgdG8gc2V0IGNoYW5nZVxuICogcGVybWlzc2lvbnMgb24uIERlZmF1bHRzIHRvIHRoZSBwYWNrYWdlIG5hbWUgdW5kZXIgdGVzdC5cbiAqL1xuXG4vKipcbiAqIEdldHMgcnVudGltZSBwZXJtaXNzaW9ucyBsaXN0IGZvciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gcGFja2FnZS5cbiAqXG4gKiBAcGFyYW0ge0dldFBlcm1pc3Npb25zT3B0aW9uc30gb3B0cyAtIEF2YWlsYWJsZSBvcHRpb25zIG1hcHBpbmcuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGxpc3Qgb2YgcmV0cmlldmVkIHBlcm1pc3Npb25zIGZvciB0aGUgZ2l2ZW4gdHlwZVxuICogKGNhbiBhbHNvIGJlIGVtcHR5KS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyBwZXJtaXNzaW9ucy5cbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0UGVybWlzc2lvbnMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRQZXJtaXNzaW9ucyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlID0gUEVSTUlTU0lPTlNfVFlQRS5SRVFVRVNURUQsXG4gICAgYXBwUGFja2FnZSA9IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICB9ID0gb3B0cztcblxuICBsZXQgYWN0aW9uRnVuYztcbiAgc3dpdGNoIChfLnRvTG93ZXIodHlwZSkpIHtcbiAgICBjYXNlIFBFUk1JU1NJT05TX1RZUEUuUkVRVUVTVEVEOlxuICAgICAgYWN0aW9uRnVuYyA9IChhcHBQYWNrYWdlKSA9PiB0aGlzLmFkYi5nZXRSZXFQZXJtaXNzaW9ucyhhcHBQYWNrYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUEVSTUlTU0lPTlNfVFlQRS5HUkFOVEVEOlxuICAgICAgYWN0aW9uRnVuYyA9IChhcHBQYWNrYWdlKSA9PiB0aGlzLmFkYi5nZXRHcmFudGVkUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFBFUk1JU1NJT05TX1RZUEUuREVOSUVEOlxuICAgICAgYWN0aW9uRnVuYyA9IChhcHBQYWNrYWdlKSA9PiB0aGlzLmFkYi5nZXREZW5pZWRQZXJtaXNzaW9ucyhhcHBQYWNrYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVW5rbm93biBwZXJtaXNzaW9ucyB0eXBlICcke3R5cGV9Jy4gYCArXG4gICAgICAgIGBPbmx5ICR7SlNPTi5zdHJpbmdpZnkoXy52YWx1ZXMoUEVSTUlTU0lPTlNfVFlQRSkpfSB0eXBlcyBhcmUgc3VwcG9ydGVkYCk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gYXdhaXQgYWN0aW9uRnVuYyhhcHBQYWNrYWdlKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHJlY2VudCBzeXN0ZW0gbm90aWZpY2F0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTZWUgdGhlIGRvY3VtZW50YXRpb24gb24gYGFkYi5nZXROb3RpZmljYXRpb25zYCBmb3JcbiAqIG1vcmUgZGV0YWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXROb3RpZmljYXRpb25zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0Tm90aWZpY2F0aW9ucyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5nZXROb3RpZmljYXRpb25zKCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNtc0xpc3RPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4IFsxMDBdIC0gVGhlIG1heGltdW0gY291bnQgb2YgcmVjZW50IFNNUyBtZXNzYWdlc1xuICogdG8gcmV0cmlldmVcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiByZWNlbnQgU01TIG1lc3NhZ2VzIHdpdGggdGhlaXIgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge1Ntc0xpc3RPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTZWUgdGhlIGRvY3VtZW50YXRpb24gb24gYGFkYi5nZXRTbXNMaXN0YCBmb3JcbiAqIG1vcmUgZGV0YWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVMaXN0U21zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdFNtcyAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5nZXRTbXNMaXN0KG9wdHMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBVbmxvY2tPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5IFRoZSB1bmxvY2sga2V5LiBUaGUgdmFsdWUgb2YgdGhpcyBrZXkgZGVwZW5kc1xuICogb24gdGhlIGFjdHVhbCB1bmxvY2sgdHlwZSBhbmQgY291bGQgYmUgYSBwaW4vcGFzc3dvcmQvcGF0dGVybiB2YWx1ZSBvclxuICogYSBiaW9tZXRyaWMgZmluZ2VyIGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgVGhlIHVubG9jayB0eXBlLiBUaGUgZm9sbG93aW5nIHVubG9jayB0eXBlc1xuICogYXJlIHN1cHBvcnRlZDogYHBpbmAsIGBwaW5XaXRoS2V5RXZlbnRgLCBgcGFzc3dvcmRgLCBgcGF0dGVybmAgYW5kIGBmaW5nZXJwcmludGAuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHN0cmF0ZWd5IEVpdGhlciAnbG9ja3NldHRpbmdzJyAoZGVmYXVsdCkgb3IgJ3VpYXV0b21hdG9yJy5cbiAqIFNldHRpbmcgaXQgdG8gJ3VpYXV0b21hdG9yJyB3aWxsIGVuZm9yY2UgdGhlIGRyaXZlciB0byBhdm9pZCB1c2luZyBzcGVjaWFsXG4gKiBBREIgc2hvcnRjdXRzIGluIG9yZGVyIHRvIHNwZWVkIHVwIHRoZSB1bmxvY2sgcHJvY2VkdXJlLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0aW1lb3V0TXMgWzIwMDBdIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gKiB0byB3YWl0IHVudGlsIHRoZSBzY3JlZW4gZ2V0cyB1bmxvY2tlZFxuICovXG5cbi8qKlxuICogVW5sb2NrcyB0aGUgZGV2aWNlIGlmIGl0IGlzIGxvY2tlZC4gTm9vcCBpZiB0aGUgZGV2aWNlJ3Mgc2NyZWVuIGlzIG5vdCBsb2NrZWQuXG4gKlxuICogQHBhcmFtIHs/VW5sb2NrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHVubG9jayBvcGVyYXRpb24gZmFpbHMgb3IgdGhlIHByb3ZpZGVkXG4gKiBhcmd1bWVudHMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVVbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVVbmxvY2sgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGtleSwgdHlwZSwgc3RyYXRlZ3ksIHRpbWVvdXRNcyB9ID0gb3B0cztcbiAgYXdhaXQgYW5kcm9pZEhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB7XG4gICAgdW5sb2NrS2V5OiBrZXksXG4gICAgdW5sb2NrVHlwZTogdHlwZSxcbiAgICB1bmxvY2tTdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQ6IHRpbWVvdXRNcyxcbiAgfSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuLy8gZm9yIHVuaXQgdGVzdHNcbmV4cG9ydCB7IHBhcnNlV2luZG93cywgcGFyc2VTdXJmYWNlTGluZSB9O1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZ2VuZXJhbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
434
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jb21tYW5kcy9nZW5lcmFsLmpzIl0sIm5hbWVzIjpbIk1PTUVOVF9GT1JNQVRfSVNPODYwMSIsImNvbW1hbmRzIiwiaGVscGVycyIsImV4dGVuc2lvbnMiLCJrZXlzIiwiXyIsImlzQXJyYXkiLCJqb2luIiwicGFyYW1zIiwidGV4dCIsInJlcGxhY2UiLCJvcHRzIiwidW5pY29kZUtleWJvYXJkIiwiZG9TZW5kS2V5cyIsImJvb3RzdHJhcCIsInNlbmRBY3Rpb24iLCJnZXREZXZpY2VUaW1lIiwiZm9ybWF0IiwibG9nIiwiZGVidWciLCJkZXZpY2VUaW1lc3RhbXAiLCJhZGIiLCJzaGVsbCIsInRyaW0iLCJwYXJzZWRUaW1lc3RhbXAiLCJtb21lbnQiLCJ1dGMiLCJpc1ZhbGlkIiwid2FybiIsInV0Y09mZnNldCIsIl90em0iLCJtb2JpbGVHZXREZXZpY2VUaW1lIiwiZ2V0UGFnZVNvdXJjZSIsImJhY2siLCJpc0tleWJvYXJkU2hvd24iLCJpc1NvZnRLZXlib2FyZFByZXNlbnQiLCJoaWRlS2V5Ym9hcmQiLCJvcGVuU2V0dGluZ3NBY3Rpdml0eSIsInNldHRpbmciLCJhcHBQYWNrYWdlIiwiYXBwQWN0aXZpdHkiLCJnZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5Iiwid2FpdEZvck5vdEFjdGl2aXR5IiwiZ2V0V2luZG93U2l6ZSIsImdldFdpbmRvd1JlY3QiLCJ3aWR0aCIsImhlaWdodCIsIngiLCJ5IiwiZ2V0Q3VycmVudEFjdGl2aXR5IiwiZ2V0Q3VycmVudFBhY2thZ2UiLCJiYWNrZ3JvdW5kIiwic2Vjb25kcyIsImdvVG9Ib21lIiwic2xlZXBNcyIsInRocmVzaG9sZE1zIiwiaW50ZXJ2YWxNcyIsIm1pbiIsInBhcnNlSW50IiwicHJvZ3Jlc3NDYiIsImVsYXBzZWRNcyIsInByb2dyZXNzIiwid2FpdFNlY3MiLCJ0b0ZpeGVkIiwicHJvZ3Jlc3NQY3QiLCJhcmdzIiwiX2NhY2hlZEFjdGl2aXR5QXJncyIsImFjdGl2YXRlQXBwIiwiaWduIiwiYXBwV2FpdFBhY2thZ2UiLCJhcHBXYWl0QWN0aXZpdHkiLCJzcGxpdCIsImluY2x1ZGVzIiwicGtnIiwiYWN0aXZpdHkiLCJhY3Rpb24iLCJpbnRlbnRBY3Rpb24iLCJjYXRlZ29yeSIsImludGVudENhdGVnb3J5IiwiZmxhZ3MiLCJpbnRlbnRGbGFncyIsIndhaXRQa2ciLCJ3YWl0QWN0aXZpdHkiLCJ3YWl0Rm9yTGF1bmNoIiwiYXBwV2FpdEZvckxhdW5jaCIsIndhaXREdXJhdGlvbiIsImFwcFdhaXREdXJhdGlvbiIsIm9wdGlvbmFsSW50ZW50QXJndW1lbnRzIiwic3RvcEFwcCIsInVzZXIiLCJ1c2VyUHJvZmlsZSIsInV0aWwiLCJmaWx0ZXJPYmplY3QiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRBcHAiLCJnZXRTdHJpbmdzIiwibGFuZ3VhZ2UiLCJnZXREZXZpY2VMYW5ndWFnZSIsImluZm8iLCJwcmVwcm9jZXNzU3RyaW5nc01hcCIsIm1hcHBpbmciLCJyZXN1bHQiLCJrZXkiLCJ2YWx1ZSIsInRvUGFpcnMiLCJpc1N0cmluZyIsImFwa1N0cmluZ3MiLCJhbmRyb2lkSGVscGVycyIsInB1c2hTdHJpbmdzIiwibGF1bmNoQXBwIiwiaW5pdEFVVCIsInN0YXJ0QVVUIiwic3RhcnRBY3Rpdml0eSIsImRvbnRTdG9wQXBwT25SZXNldCIsImhhc1ZhbHVlIiwicmVzZXQiLCJyZXNldEFwcCIsIk9iamVjdCIsImFzc2lnbiIsImZhc3RSZXNldCIsInNldENvbnRleHQiLCJpc0Nocm9tZVNlc3Npb24iLCJzdGFydENocm9tZVNlc3Npb24iLCJzZXRVcmwiLCJ1cmkiLCJzdGFydFVyaSIsImNsb3NlQXBwIiwiZm9yY2VTdG9wIiwiZ2V0RGlzcGxheURlbnNpdHkiLCJvdXQiLCJ2YWwiLCJpc05hTiIsImVycm9yQW5kVGhyb3ciLCJtb2JpbGVQZXJmb3JtRWRpdG9yQWN0aW9uIiwicGVyZm9ybUVkaXRvckFjdGlvbiIsIlBFUk1JU1NJT05fQUNUSU9OIiwiR1JBTlQiLCJSRVZPS0UiLCJtb2JpbGVDaGFuZ2VQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWN0aW9uRnVuYyIsInRvTG93ZXIiLCJwZXJtaXNzaW9uIiwiZ3JhbnRQZXJtaXNzaW9uIiwicmV2b2tlUGVybWlzc2lvbiIsInZhbHVlcyIsIlBFUk1JU1NJT05TX1RZUEUiLCJERU5JRUQiLCJHUkFOVEVEIiwiUkVRVUVTVEVEIiwibW9iaWxlR2V0UGVybWlzc2lvbnMiLCJ0eXBlIiwiZ2V0UmVxUGVybWlzc2lvbnMiLCJnZXRHcmFudGVkUGVybWlzc2lvbnMiLCJnZXREZW5pZWRQZXJtaXNzaW9ucyIsIm1vYmlsZUdldE5vdGlmaWNhdGlvbnMiLCJnZXROb3RpZmljYXRpb25zIiwibW9iaWxlTGlzdFNtcyIsImdldFNtc0xpc3QiLCJtb2JpbGVVbmxvY2siLCJzdHJhdGVneSIsInRpbWVvdXRNcyIsInVubG9jayIsInVubG9ja0tleSIsInVubG9ja1R5cGUiLCJ1bmxvY2tTdHJhdGVneSIsInVubG9ja1N1Y2Nlc3NUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLHFCQUFxQixHQUFHLHNCQUE5QjtBQUVBLElBQUlDLFFBQVEsR0FBRyxFQUFmO0FBQUEsSUFBbUJDLE9BQU8sR0FBRyxFQUE3QjtBQUFBLElBQWlDQyxVQUFVLEdBQUcsRUFBOUM7Ozs7QUFFQUYsUUFBUSxDQUFDRyxJQUFULEdBQWdCLGVBQWVBLElBQWYsQ0FBcUJBLElBQXJCLEVBQTJCO0FBRXpDQSxFQUFBQSxJQUFJLEdBQUdDLGdCQUFFQyxPQUFGLENBQVVGLElBQVYsSUFBa0JBLElBQUksQ0FBQ0csSUFBTCxDQUFVLEVBQVYsQ0FBbEIsR0FBa0NILElBQXpDO0FBQ0EsTUFBSUksTUFBTSxHQUFHO0FBQ1hDLElBQUFBLElBQUksRUFBRUwsSUFESztBQUVYTSxJQUFBQSxPQUFPLEVBQUU7QUFGRSxHQUFiOztBQUlBLE1BQUksS0FBS0MsSUFBTCxDQUFVQyxlQUFkLEVBQStC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QVQsRUFBYjtBQUNELENBRkQ7O0FBaUJBNUosUUFBUSxDQUFDNkosYUFBVCxHQUF5QixlQUFlQSxhQUFmLENBQThCbkosSUFBSSxHQUFHLEVBQXJDLEVBQXlDO0FBQ2hFLFNBQU8sTUFBTSxLQUFLVSxHQUFMLENBQVMwSSxVQUFULENBQW9CcEosSUFBcEIsQ0FBYjtBQUNELENBRkQ7O0FBeUJBVixRQUFRLENBQUMrSixZQUFULEdBQXdCLGVBQWVBLFlBQWYsQ0FBNkJySixJQUFJLEdBQUcsRUFBcEMsRUFBd0M7QUFDOUQsUUFBTTtBQUFFNEYsSUFBQUEsR0FBRjtBQUFPaUQsSUFBQUEsSUFBUDtBQUFhUyxJQUFBQSxRQUFiO0FBQXVCQyxJQUFBQTtBQUF2QixNQUFxQ3ZKLElBQTNDO0FBQ0EsUUFBTWlHLHdCQUFldUQsTUFBZixDQUFzQixJQUF0QixFQUE0QixLQUFLOUksR0FBakMsRUFBc0M7QUFDMUMrSSxJQUFBQSxTQUFTLEVBQUU3RCxHQUQrQjtBQUUxQzhELElBQUFBLFVBQVUsRUFBRWIsSUFGOEI7QUFHMUNjLElBQUFBLGNBQWMsRUFBRUwsUUFIMEI7QUFJMUNNLElBQUFBLG9CQUFvQixFQUFFTDtBQUpvQixHQUF0QyxDQUFOO0FBTUQsQ0FSRDs7QUFVQTVDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjcEgsVUFBZCxFQUEwQkYsUUFBMUIsRUFBb0NDLE9BQXBDO2VBRWVDLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IGFuZHJvaWRIZWxwZXJzIGZyb20gJy4uL2FuZHJvaWQtaGVscGVycyc7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGxvbmdTbGVlcCB9IGZyb20gJ2FzeW5jYm94JztcblxuY29uc3QgTU9NRU5UX0ZPUk1BVF9JU084NjAxID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcblxubGV0IGNvbW1hbmRzID0ge30sIGhlbHBlcnMgPSB7fSwgZXh0ZW5zaW9ucyA9IHt9O1xuXG5jb21tYW5kcy5rZXlzID0gYXN5bmMgZnVuY3Rpb24ga2V5cyAoa2V5cykge1xuICAvLyBQcm90b2NvbCBzZW5kcyBhbiBhcnJheTsgcmV0aGluayBhcHByb2FjaFxuICBrZXlzID0gXy5pc0FycmF5KGtleXMpID8ga2V5cy5qb2luKCcnKSA6IGtleXM7XG4gIGxldCBwYXJhbXMgPSB7XG4gICAgdGV4dDoga2V5cyxcbiAgICByZXBsYWNlOiBmYWxzZVxuICB9O1xuICBpZiAodGhpcy5vcHRzLnVuaWNvZGVLZXlib2FyZCkge1xuICAgIHBhcmFtcy51bmljb2RlS2V5Ym9hcmQgPSB0cnVlO1xuICB9XG4gIGF3YWl0IHRoaXMuZG9TZW5kS2V5cyhwYXJhbXMpO1xufTtcblxuY29tbWFuZHMuZG9TZW5kS2V5cyA9IGFzeW5jIGZ1bmN0aW9uIGRvU2VuZEtleXMgKHBhcmFtcykge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignc2V0VGV4dCcsIHBhcmFtcyk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY3VycmVudCBkZXZpY2UncyB0aW1lc3RhbXAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIFRoZSBzZXQgb2YgZm9ybWF0IHNwZWNpZmllcnMuIFJlYWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL21vbWVudGpzLmNvbS9kb2NzLyB0byBnZXQgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZSBmb3JtYXQgc3BlY2lmaWVycy4gVGhlIGRlZmF1bHQgZm9ybWF0IGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgYFlZWVktTU0tRERUSEg6bW06c3NaYCwgd2hpY2ggY29tcGxpZXMgdG8gSVNPLTg2MDFcbiAqIEByZXR1cm4ge3N0cmluZ30gRm9ybWF0dGVkIGRhdGV0aW1lIHN0cmluZyBvciB0aGUgcmF3IGNvbW1hbmQgb3V0cHV0IGlmIGZvcm1hdHRpbmcgZmFpbHNcbiAqL1xuY29tbWFuZHMuZ2V0RGV2aWNlVGltZSA9IGFzeW5jIGZ1bmN0aW9uIGdldERldmljZVRpbWUgKGZvcm1hdCA9IE1PTUVOVF9GT1JNQVRfSVNPODYwMSkge1xuICBsb2cuZGVidWcoJ0F0dGVtcHRpbmcgdG8gY2FwdHVyZSBhbmRyb2lkIGRldmljZSBkYXRlIGFuZCB0aW1lLiAnICtcbiAgICBgVGhlIGZvcm1hdCBzcGVjaWZpZXIgaXMgJyR7Zm9ybWF0fSdgKTtcbiAgY29uc3QgZGV2aWNlVGltZXN0YW1wID0gKGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZGF0ZScsICcrJVktJW0tJWRUJVQleiddKSkudHJpbSgpO1xuICBsb2cuZGVidWcoYEdvdCBkZXZpY2UgdGltZXN0YW1wOiAke2RldmljZVRpbWVzdGFtcH1gKTtcbiAgY29uc3QgcGFyc2VkVGltZXN0YW1wID0gbW9tZW50LnV0YyhkZXZpY2VUaW1lc3RhbXAsICdZWVlZLU1NLUREVEhIOm1tOnNzWlonKTtcbiAgaWYgKCFwYXJzZWRUaW1lc3RhbXAuaXNWYWxpZCgpKSB7XG4gICAgbG9nLndhcm4oJ0Nhbm5vdCBwYXJzZSB0aGUgcmV0dXJuZWQgdGltZXN0YW1wLiBSZXR1cm5pbmcgYXMgaXMnKTtcbiAgICByZXR1cm4gZGV2aWNlVGltZXN0YW1wO1xuICB9XG4gIHJldHVybiBwYXJzZWRUaW1lc3RhbXAudXRjT2Zmc2V0KHBhcnNlZFRpbWVzdGFtcC5fdHptIHx8IDApLmZvcm1hdChmb3JtYXQpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBEZXZpY2VUaW1lT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGZvcm1hdCBbWVlZWS1NTS1ERFRISDptbTpzc1pdIC0gU2VlIGdldERldmljZVRpbWUjZm9ybWF0XG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZGV2aWNlIHRpbWVcbiAqXG4gKiBAcGFyYW0ge0RldmljZVRpbWVPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZvcm1hdHRlZCBkYXRldGltZSBzdHJpbmcgb3IgdGhlIHJhdyBjb21tYW5kIG91dHB1dCBpZiBmb3JtYXR0aW5nIGZhaWxzXG4gKi9cbmNvbW1hbmRzLm1vYmlsZUdldERldmljZVRpbWUgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXREZXZpY2VUaW1lIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RGV2aWNlVGltZShvcHRzLmZvcm1hdCk7XG59O1xuXG5jb21tYW5kcy5nZXRQYWdlU291cmNlID0gYXN5bmMgZnVuY3Rpb24gZ2V0UGFnZVNvdXJjZSAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmJvb3RzdHJhcC5zZW5kQWN0aW9uKCdzb3VyY2UnKTtcbn07XG5cbmNvbW1hbmRzLmJhY2sgPSBhc3luYyBmdW5jdGlvbiBiYWNrICgpIHtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYm9vdHN0cmFwLnNlbmRBY3Rpb24oJ3ByZXNzQmFjaycpO1xufTtcblxuY29tbWFuZHMuaXNLZXlib2FyZFNob3duID0gYXN5bmMgZnVuY3Rpb24gaXNLZXlib2FyZFNob3duICgpIHtcbiAgY29uc3Qge2lzS2V5Ym9hcmRTaG93bn0gPSBhd2FpdCB0aGlzLmFkYi5pc1NvZnRLZXlib2FyZFByZXNlbnQoKTtcbiAgcmV0dXJuIGlzS2V5Ym9hcmRTaG93bjtcbn07XG5cbmNvbW1hbmRzLmhpZGVLZXlib2FyZCA9IGFzeW5jIGZ1bmN0aW9uIGhpZGVLZXlib2FyZCAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5oaWRlS2V5Ym9hcmQoKTtcbn07XG5cbmNvbW1hbmRzLm9wZW5TZXR0aW5nc0FjdGl2aXR5ID0gYXN5bmMgZnVuY3Rpb24gb3BlblNldHRpbmdzQWN0aXZpdHkgKHNldHRpbmcpIHtcbiAgbGV0IHthcHBQYWNrYWdlLCBhcHBBY3Rpdml0eX0gPSBhd2FpdCB0aGlzLmFkYi5nZXRGb2N1c2VkUGFja2FnZUFuZEFjdGl2aXR5KCk7XG4gIGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnYW0nLCAnc3RhcnQnLCAnLWEnLCBgYW5kcm9pZC5zZXR0aW5ncy4ke3NldHRpbmd9YF0pO1xuICBhd2FpdCB0aGlzLmFkYi53YWl0Rm9yTm90QWN0aXZpdHkoYXBwUGFja2FnZSwgYXBwQWN0aXZpdHksIDUwMDApO1xufTtcblxuY29tbWFuZHMuZ2V0V2luZG93U2l6ZSA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1NpemUgKCkge1xuICByZXR1cm4gYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbignZ2V0RGV2aWNlU2l6ZScpO1xufTtcblxuLy8gRm9yIFczQ1xuY29tbWFuZHMuZ2V0V2luZG93UmVjdCA9IGFzeW5jIGZ1bmN0aW9uIGdldFdpbmRvd1JlY3QgKCkge1xuICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGF3YWl0IHRoaXMuZ2V0V2luZG93U2l6ZSgpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcbn07XG5cbmNvbW1hbmRzLmdldEN1cnJlbnRBY3Rpdml0eSA9IGFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRBY3Rpdml0eSAoKSB7XG4gIHJldHVybiAoYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpKS5hcHBBY3Rpdml0eTtcbn07XG5cbmNvbW1hbmRzLmdldEN1cnJlbnRQYWNrYWdlID0gYXN5bmMgZnVuY3Rpb24gZ2V0Q3VycmVudFBhY2thZ2UgKCkge1xuICByZXR1cm4gKGF3YWl0IHRoaXMuYWRiLmdldEZvY3VzZWRQYWNrYWdlQW5kQWN0aXZpdHkoKSkuYXBwUGFja2FnZTtcbn07XG5cbmNvbW1hbmRzLmJhY2tncm91bmQgPSBhc3luYyBmdW5jdGlvbiBiYWNrZ3JvdW5kIChzZWNvbmRzKSB7XG4gIGlmIChzZWNvbmRzIDwgMCkge1xuICAgIC8vIGlmIHVzZXIgcGFzc2VzIGluIGEgbmVnYXRpdmUgc2Vjb25kcyB2YWx1ZSwgaW50ZXJwcmV0IHRoYXQgYXMgdGhlIGluc3RydWN0aW9uXG4gICAgLy8gdG8gbm90IGJyaW5nIHRoZSBhcHAgYmFjayBhdCBhbGxcbiAgICBhd2FpdCB0aGlzLmFkYi5nb1RvSG9tZSgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCB7YXBwUGFja2FnZSwgYXBwQWN0aXZpdHl9ID0gYXdhaXQgdGhpcy5hZGIuZ2V0Rm9jdXNlZFBhY2thZ2VBbmRBY3Rpdml0eSgpO1xuICBhd2FpdCB0aGlzLmFkYi5nb1RvSG9tZSgpO1xuXG4gIC8vIHBlb3BsZSBjYW4gd2FpdCBmb3IgYSBsb25nIHRpbWUsIHNvIHRvIGJlIHNhZmUgbGV0J3MgdXNlIHRoZSBsb25nU2xlZXAgZnVuY3Rpb24gYW5kIGxvZ1xuICAvLyBwcm9ncmVzcyBwZXJpb2RpY2FsbHkuXG4gIGNvbnN0IHNsZWVwTXMgPSBzZWNvbmRzICogMTAwMDtcbiAgY29uc3QgdGhyZXNob2xkTXMgPSAzMCAqIDEwMDA7IC8vIHVzZSB0aGUgc3Bpbi13YWl0IGZvciBhbnl0aGluZyBvdmVyIHRoaXMgdGhyZXNob2xkXG4gIC8vIGZvciBvdXIgc3BpbiBpbnRlcnZhbCwgdXNlIDElIG9mIHRoZSB0b3RhbCB3YWl0IHRpbWUsIGJ1dCBub3RoaW5nIGJpZ2dlciB0aGFuIDMwc1xuICBjb25zdCBpbnRlcnZhbE1zID0gXy5taW4oWzMwICogMTAwMCwgcGFyc2VJbnQoc2xlZXBNcyAvIDEwMCwgMTApXSk7XG4gIGNvbnN0IHByb2dyZXNzQ2IgPSAoe2VsYXBzZWRNcywgcHJvZ3Jlc3N9KSA9PiB7XG4gICAgY29uc3Qgd2FpdFNlY3MgPSAoZWxhcHNlZE1zIC8gMTAwMCkudG9GaXhlZCgwKTtcbiAgICBjb25zdCBwcm9ncmVzc1BjdCA9IChwcm9ncmVzcyAqIDEwMCkudG9GaXhlZCgyKTtcbiAgICBsb2cuZGVidWcoYFdhaXRlZCAke3dhaXRTZWNzfXMgc28gZmFyICgke3Byb2dyZXNzUGN0fSUpYCk7XG4gIH07XG4gIGF3YWl0IGxvbmdTbGVlcChzbGVlcE1zLCB7dGhyZXNob2xkTXMsIGludGVydmFsTXMsIHByb2dyZXNzQ2J9KTtcblxuICBsZXQgYXJncztcbiAgaWYgKHRoaXMuX2NhY2hlZEFjdGl2aXR5QXJncyAmJiB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXBwUGFja2FnZX0vJHthcHBBY3Rpdml0eX1gXSkge1xuICAgIC8vIHRoZSBhY3Rpdml0eSB3YXMgc3RhcnRlZCB3aXRoIGBzdGFydEFjdGl2aXR5YCwgc28gdXNlIHRob3NlIGFyZ3MgdG8gcmVzdGFydFxuICAgIGFyZ3MgPSB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXBwUGFja2FnZX0vJHthcHBBY3Rpdml0eX1gXTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgbG9nLmRlYnVnKGBBY3RpdmF0aW5nIGFwcCAnJHthcHBQYWNrYWdlfScgaW4gb3JkZXIgdG8gcmVzdG9yZSBpdGApO1xuICAgICAgYXdhaXQgdGhpcy5hY3RpdmF0ZUFwcChhcHBQYWNrYWdlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGlnbikge31cbiAgICBhcmdzID0gKChhcHBQYWNrYWdlID09PSB0aGlzLm9wdHMuYXBwUGFja2FnZSAmJiBhcHBBY3Rpdml0eSA9PT0gdGhpcy5vcHRzLmFwcEFjdGl2aXR5KSB8fFxuICAgICAgICAgICAgKGFwcFBhY2thZ2UgPT09IHRoaXMub3B0cy5hcHBXYWl0UGFja2FnZSAmJiAodGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSB8fCAnJykuc3BsaXQoJywnKS5pbmNsdWRlcyhhcHBBY3Rpdml0eSkpKVxuICAgICAgPyB7Ly8gdGhlIGFjdGl2aXR5IGlzIHRoZSBvcmlnaW5hbCBzZXNzaW9uIGFjdGl2aXR5LCBzbyB1c2UgdGhlIG9yaWdpbmFsIGFyZ3NcbiAgICAgICAgcGtnOiB0aGlzLm9wdHMuYXBwUGFja2FnZSxcbiAgICAgICAgYWN0aXZpdHk6IHRoaXMub3B0cy5hcHBBY3Rpdml0eSxcbiAgICAgICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogdGhpcy5vcHRzLmludGVudENhdGVnb3J5LFxuICAgICAgICBmbGFnczogdGhpcy5vcHRzLmludGVudEZsYWdzLFxuICAgICAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgICAgIHdhaXRBY3Rpdml0eTogdGhpcy5vcHRzLmFwcFdhaXRBY3Rpdml0eSxcbiAgICAgICAgd2FpdEZvckxhdW5jaDogdGhpcy5vcHRzLmFwcFdhaXRGb3JMYXVuY2gsXG4gICAgICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICAgICAgb3B0aW9uYWxJbnRlbnRBcmd1bWVudHM6IHRoaXMub3B0cy5vcHRpb25hbEludGVudEFyZ3VtZW50cyxcbiAgICAgICAgc3RvcEFwcDogZmFsc2UsXG4gICAgICAgIHVzZXI6IHRoaXMub3B0cy51c2VyUHJvZmlsZX1cbiAgICAgIDogey8vIHRoZSBhY3Rpdml0eSB3YXMgc3RhcnRlZCBzb21lIG90aGVyIHdheSwgc28gdXNlIGRlZmF1bHRzXG4gICAgICAgIHBrZzogYXBwUGFja2FnZSxcbiAgICAgICAgYWN0aXZpdHk6IGFwcEFjdGl2aXR5LFxuICAgICAgICB3YWl0UGtnOiBhcHBQYWNrYWdlLFxuICAgICAgICB3YWl0QWN0aXZpdHk6IGFwcEFjdGl2aXR5LFxuICAgICAgICBzdG9wQXBwOiBmYWxzZX07XG4gIH1cbiAgYXJncyA9IGF3YWl0IHV0aWwuZmlsdGVyT2JqZWN0KGFyZ3MpO1xuICBsb2cuZGVidWcoYEJyaW5naW5nIGFwcGxpY2F0aW9uIGJhY2sgdG8gZm9yZWdyb3VuZCB3aXRoIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbiAgcmV0dXJuIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKGFyZ3MpO1xufTtcblxuY29tbWFuZHMuZ2V0U3RyaW5ncyA9IGFzeW5jIGZ1bmN0aW9uIGdldFN0cmluZ3MgKGxhbmd1YWdlKSB7XG4gIGlmICghbGFuZ3VhZ2UpIHtcbiAgICBsYW5ndWFnZSA9IGF3YWl0IHRoaXMuYWRiLmdldERldmljZUxhbmd1YWdlKCk7XG4gICAgbG9nLmluZm8oYE5vIGxhbmd1YWdlIHNwZWNpZmllZCwgcmV0dXJuaW5nIHN0cmluZ3MgZm9yOiAke2xhbmd1YWdlfWApO1xuICB9XG5cbiAgLy8gQ2xpZW50cyByZXF1aXJlIHRoZSByZXN1bHRpbmcgbWFwcGluZyB0byBoYXZlIGJvdGgga2V5c1xuICAvLyBhbmQgdmFsdWVzIG9mIHR5cGUgc3RyaW5nXG4gIGNvbnN0IHByZXByb2Nlc3NTdHJpbmdzTWFwID0gKG1hcHBpbmcpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBfLnRvUGFpcnMobWFwcGluZykpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gXy5pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBpZiAodGhpcy5hcGtTdHJpbmdzW2xhbmd1YWdlXSkge1xuICAgIC8vIFJldHVybiBjYWNoZWQgc3RyaW5nc1xuICAgIHJldHVybiBwcmVwcm9jZXNzU3RyaW5nc01hcCh0aGlzLmFwa1N0cmluZ3NbbGFuZ3VhZ2VdKTtcbiAgfVxuXG4gIHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0gPSBhd2FpdCBhbmRyb2lkSGVscGVycy5wdXNoU3RyaW5ncyhsYW5ndWFnZSwgdGhpcy5hZGIsIHRoaXMub3B0cyk7XG4gIGlmICh0aGlzLmJvb3RzdHJhcCkge1xuICAgIC8vIFRPRE86IFRoaXMgaXMgbXV0YXRpbmcgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UsIGJ1dCBpdCdzIGhvdyBhcHBpdW0gY3VycmVudGx5IHdvcmtzXG4gICAgYXdhaXQgdGhpcy5ib290c3RyYXAuc2VuZEFjdGlvbigndXBkYXRlU3RyaW5ncycpO1xuICB9XG5cbiAgcmV0dXJuIHByZXByb2Nlc3NTdHJpbmdzTWFwKHRoaXMuYXBrU3RyaW5nc1tsYW5ndWFnZV0pO1xufTtcblxuY29tbWFuZHMubGF1bmNoQXBwID0gYXN5bmMgZnVuY3Rpb24gbGF1bmNoQXBwICgpIHtcbiAgYXdhaXQgdGhpcy5pbml0QVVUKCk7XG4gIGF3YWl0IHRoaXMuc3RhcnRBVVQoKTtcbn07XG5cbmNvbW1hbmRzLnN0YXJ0QWN0aXZpdHkgPSBhc3luYyBmdW5jdGlvbiBzdGFydEFjdGl2aXR5IChhcHBQYWNrYWdlLCBhcHBBY3Rpdml0eSxcbiAgYXBwV2FpdFBhY2thZ2UsIGFwcFdhaXRBY3Rpdml0eSwgaW50ZW50QWN0aW9uLCBpbnRlbnRDYXRlZ29yeSwgaW50ZW50RmxhZ3MsXG4gIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLCBkb250U3RvcEFwcE9uUmVzZXQpIHtcbiAgbG9nLmRlYnVnKGBTdGFydGluZyBwYWNrYWdlICcke2FwcFBhY2thZ2V9JyBhbmQgYWN0aXZpdHkgJyR7YXBwQWN0aXZpdHl9J2ApO1xuXG4gIC8vIGRvbnRTdG9wQXBwT25SZXNldCBpcyBib3RoIGFuIGFyZ3VtZW50IGhlcmUsIGFuZCBhIGRlc2lyZWQgY2FwYWJpbGl0eVxuICAvLyBpZiB0aGUgYXJndW1lbnQgaXMgc2V0LCB1c2UgaXQsIG90aGVyd2lzZSB1c2UgdGhlIGNhcFxuICBpZiAoIXV0aWwuaGFzVmFsdWUoZG9udFN0b3BBcHBPblJlc2V0KSkge1xuICAgIGRvbnRTdG9wQXBwT25SZXNldCA9ICEhdGhpcy5vcHRzLmRvbnRTdG9wQXBwT25SZXNldDtcbiAgfVxuXG4gIGxldCBhcmdzID0ge1xuICAgIHBrZzogYXBwUGFja2FnZSxcbiAgICBhY3Rpdml0eTogYXBwQWN0aXZpdHksXG4gICAgd2FpdFBrZzogYXBwV2FpdFBhY2thZ2UgfHwgYXBwUGFja2FnZSxcbiAgICB3YWl0QWN0aXZpdHk6IGFwcFdhaXRBY3Rpdml0eSB8fCBhcHBBY3Rpdml0eSxcbiAgICBhY3Rpb246IGludGVudEFjdGlvbixcbiAgICBjYXRlZ29yeTogaW50ZW50Q2F0ZWdvcnksXG4gICAgZmxhZ3M6IGludGVudEZsYWdzLFxuICAgIG9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIHN0b3BBcHA6ICFkb250U3RvcEFwcE9uUmVzZXRcbiAgfTtcbiAgdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzID0gdGhpcy5fY2FjaGVkQWN0aXZpdHlBcmdzIHx8IHt9O1xuICB0aGlzLl9jYWNoZWRBY3Rpdml0eUFyZ3NbYCR7YXJncy53YWl0UGtnfS8ke2FyZ3Mud2FpdEFjdGl2aXR5fWBdID0gYXJncztcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRBcHAoYXJncyk7XG59O1xuXG5jb21tYW5kcy5yZXNldCA9IGFzeW5jIGZ1bmN0aW9uIHJlc2V0ICgpIHtcbiAgYXdhaXQgYW5kcm9pZEhlbHBlcnMucmVzZXRBcHAodGhpcy5hZGIsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0cywge2Zhc3RSZXNldDogdHJ1ZX0pKTtcbiAgLy8gcmVzZXQgY29udGV4dCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQga2luZCBvbiBjb250ZXh0IHdlIHdpbGwgZW5kIHVwIGFmdGVyIGFwcCBsYXVuY2guXG4gIGF3YWl0IHRoaXMuc2V0Q29udGV4dCgpO1xuICByZXR1cm4gYXdhaXQgdGhpcy5pc0Nocm9tZVNlc3Npb24gPyB0aGlzLnN0YXJ0Q2hyb21lU2Vzc2lvbigpIDogdGhpcy5zdGFydEFVVCgpO1xufTtcblxuY29tbWFuZHMuc3RhcnRBVVQgPSBhc3luYyBmdW5jdGlvbiBzdGFydEFVVCAoKSB7XG4gIGF3YWl0IHRoaXMuYWRiLnN0YXJ0QXBwKHtcbiAgICBwa2c6IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICAgIGFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwQWN0aXZpdHksXG4gICAgYWN0aW9uOiB0aGlzLm9wdHMuaW50ZW50QWN0aW9uLFxuICAgIGNhdGVnb3J5OiB0aGlzLm9wdHMuaW50ZW50Q2F0ZWdvcnksXG4gICAgZmxhZ3M6IHRoaXMub3B0cy5pbnRlbnRGbGFncyxcbiAgICB3YWl0UGtnOiB0aGlzLm9wdHMuYXBwV2FpdFBhY2thZ2UsXG4gICAgd2FpdEFjdGl2aXR5OiB0aGlzLm9wdHMuYXBwV2FpdEFjdGl2aXR5LFxuICAgIHdhaXRGb3JMYXVuY2g6IHRoaXMub3B0cy5hcHBXYWl0Rm9yTGF1bmNoLFxuICAgIHdhaXREdXJhdGlvbjogdGhpcy5vcHRzLmFwcFdhaXREdXJhdGlvbixcbiAgICBvcHRpb25hbEludGVudEFyZ3VtZW50czogdGhpcy5vcHRzLm9wdGlvbmFsSW50ZW50QXJndW1lbnRzLFxuICAgIHN0b3BBcHA6ICF0aGlzLm9wdHMuZG9udFN0b3BBcHBPblJlc2V0LFxuICAgIHVzZXI6IHRoaXMub3B0cy51c2VyUHJvZmlsZSxcbiAgfSk7XG59O1xuXG4vLyB3ZSBvdmVycmlkZSBzZXRVcmwgdG8gdGFrZSBhbiBhbmRyb2lkIFVSSSB3aGljaCBjYW4gYmUgdXNlZCBmb3IgZGVlcC1saW5raW5nXG4vLyBpbnNpZGUgYW4gYXBwLCBzaW1pbGFyIHRvIHN0YXJ0aW5nIGFuIGludGVudFxuY29tbWFuZHMuc2V0VXJsID0gYXN5bmMgZnVuY3Rpb24gc2V0VXJsICh1cmkpIHtcbiAgYXdhaXQgdGhpcy5hZGIuc3RhcnRVcmkodXJpLCB0aGlzLm9wdHMuYXBwUGFja2FnZSk7XG59O1xuXG4vLyBjbG9zaW5nIGFwcCB1c2luZyBmb3JjZSBzdG9wXG5jb21tYW5kcy5jbG9zZUFwcCA9IGFzeW5jIGZ1bmN0aW9uIGNsb3NlQXBwICgpIHtcbiAgYXdhaXQgdGhpcy5hZGIuZm9yY2VTdG9wKHRoaXMub3B0cy5hcHBQYWNrYWdlKTtcbiAgLy8gcmVzZXQgY29udGV4dCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQga2luZCBvbiBjb250ZXh0IHdlIHdpbGwgZW5kIHVwIGFmdGVyIGFwcCBsYXVuY2guXG4gIGF3YWl0IHRoaXMuc2V0Q29udGV4dCgpO1xufTtcblxuY29tbWFuZHMuZ2V0RGlzcGxheURlbnNpdHkgPSBhc3luYyBmdW5jdGlvbiBnZXREaXNwbGF5RGVuc2l0eSAoKSB7XG4gIC8vIGZpcnN0IHRyeSB0aGUgcHJvcGVydHkgZm9yIGRldmljZXNcbiAgbGV0IG91dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZ2V0cHJvcCcsICdyby5zZi5sY2RfZGVuc2l0eSddKTtcbiAgaWYgKG91dCkge1xuICAgIGxldCB2YWwgPSBwYXJzZUludChvdXQsIDEwKTtcbiAgICAvLyBpZiB0aGUgdmFsdWUgaXMgTmFOLCB0cnkgZ2V0dGluZyB0aGUgZW11bGF0b3IgcHJvcGVydHlcbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIGxvZy5kZWJ1ZyhgUGFyc2VkIGRlbnNpdHkgdmFsdWUgd2FzIE5hTjogXCIke291dH1cImApO1xuICB9XG4gIC8vIGZhbGxiYWNrIHRvIHRyeWluZyBwcm9wZXJ0eSBmb3IgZW11bGF0b3JzXG4gIG91dCA9IGF3YWl0IHRoaXMuYWRiLnNoZWxsKFsnZ2V0cHJvcCcsICdxZW11LnNmLmxjZF9kZW5zaXR5J10pO1xuICBpZiAob3V0KSB7XG4gICAgbGV0IHZhbCA9IHBhcnNlSW50KG91dCwgMTApO1xuICAgIGlmICghaXNOYU4odmFsKSkge1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBQYXJzZWQgZGVuc2l0eSB2YWx1ZSB3YXMgTmFOOiBcIiR7b3V0fVwiYCk7XG4gIH1cbiAgLy8gY291bGRuJ3QgZ2V0IGFueXRoaW5nLCBzbyBlcnJvciBvdXRcbiAgbG9nLmVycm9yQW5kVGhyb3coJ0ZhaWxlZCB0byBnZXQgZGlzcGxheSBkZW5zaXR5IHByb3BlcnR5LicpO1xufTtcblxuY29tbWFuZHMubW9iaWxlUGVyZm9ybUVkaXRvckFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIG1vYmlsZVBlcmZvcm1FZGl0b3JBY3Rpb24gKG9wdHMgPSB7fSkge1xuICBjb25zdCB7YWN0aW9ufSA9IG9wdHM7XG4gIGlmICghdXRpbC5oYXNWYWx1ZShhY3Rpb24pKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYCdhY3Rpb24nIGFyZ3VtZW50IGlzIHJlcXVpcmVkYCk7XG4gIH1cblxuICBhd2FpdCB0aGlzLmFkYi5wZXJmb3JtRWRpdG9yQWN0aW9uKGFjdGlvbik7XG59O1xuXG5jb25zdCBQRVJNSVNTSU9OX0FDVElPTiA9IHtcbiAgR1JBTlQ6ICdncmFudCcsXG4gIFJFVk9LRTogJ3Jldm9rZScsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENoYW5nZVBlcm1pc3Npb25zT3B0aW9uc1xuICogQHByb3BlcnR5IHshc3RyaW5nfEFycmF5PHN0cmluZz59IHBlcm1pc3Npb25zIC0gVGhlIGZ1bGwgbmFtZSBvZiB0aGUgcGVybWlzc2lvbiB0byBiZSBjaGFuZ2VkXG4gKiBvciBhIGxpc3Qgb2YgcGVybWlzc2lvbnMuIE1hbmRhdG9yeSBhcmd1bWVudC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcHBQYWNrYWdlIFt0aGlzLm9wdHMuYXBwUGFja2FnZV0gLSBUaGUgYXBwbGljYXRpb24gcGFja2FnZSB0byBzZXQgY2hhbmdlXG4gKiBwZXJtaXNzaW9ucyBvbi4gRGVmYXVsdHMgdG8gdGhlIHBhY2thZ2UgbmFtZSB1bmRlciB0ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGlvbiBbZ3JhbnRdIC0gT25lIG9mIGBQRVJNSVNTSU9OX0FDVElPTmAgdmFsdWVzXG4gKi9cblxuLyoqXG4gKiBDaGFuZ2VzIHBhY2thZ2UgcGVybWlzc2lvbnMgaW4gcnVudGltZS5cbiAqXG4gKiBAcGFyYW0gez9DaGFuZ2VQZXJtaXNzaW9uc09wdGlvbnN9IG9wdHMgLSBBdmFpbGFibGUgb3B0aW9ucyBtYXBwaW5nLlxuICogQHRocm93cyB7RXJyb3J9IGlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgd2hpbGUgY2hhbmdpbmcgcGVybWlzc2lvbnNcbiAqL1xuY29tbWFuZHMubW9iaWxlQ2hhbmdlUGVybWlzc2lvbnMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVDaGFuZ2VQZXJtaXNzaW9ucyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBwZXJtaXNzaW9ucyxcbiAgICBhcHBQYWNrYWdlID0gdGhpcy5vcHRzLmFwcFBhY2thZ2UsXG4gICAgYWN0aW9uID0gUEVSTUlTU0lPTl9BQ1RJT04uR1JBTlQsXG4gIH0gPSBvcHRzO1xuICBpZiAoIXV0aWwuaGFzVmFsdWUocGVybWlzc2lvbnMpKSB7XG4gICAgbG9nLmVycm9yQW5kVGhyb3coYCdwZXJtaXNzaW9ucycgYXJndW1lbnQgaXMgcmVxdWlyZWRgKTtcbiAgfVxuXG4gIGxldCBhY3Rpb25GdW5jO1xuICBzd2l0Y2ggKF8udG9Mb3dlcihhY3Rpb24pKSB7XG4gICAgY2FzZSBQRVJNSVNTSU9OX0FDVElPTi5HUkFOVDpcbiAgICAgIGFjdGlvbkZ1bmMgPSAoYXBwUGFja2FnZSwgcGVybWlzc2lvbikgPT4gdGhpcy5hZGIuZ3JhbnRQZXJtaXNzaW9uKGFwcFBhY2thZ2UsIHBlcm1pc3Npb24pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBQRVJNSVNTSU9OX0FDVElPTi5SRVZPS0U6XG4gICAgICBhY3Rpb25GdW5jID0gKGFwcFBhY2thZ2UsIHBlcm1pc3Npb24pID0+IHRoaXMuYWRiLnJldm9rZVBlcm1pc3Npb24oYXBwUGFja2FnZSwgcGVybWlzc2lvbik7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbG9nLmVycm9yQW5kVGhyb3coYFVua25vd24gYWN0aW9uICcke2FjdGlvbn0nLiBgICtcbiAgICAgICAgYE9ubHkgJHtKU09OLnN0cmluZ2lmeShfLnZhbHVlcyhQRVJNSVNTSU9OX0FDVElPTikpfSBhY3Rpb25zIGFyZSBzdXBwb3J0ZWRgKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGZvciAoY29uc3QgcGVybWlzc2lvbiBvZiAoXy5pc0FycmF5KHBlcm1pc3Npb25zKSA/IHBlcm1pc3Npb25zIDogW3Blcm1pc3Npb25zXSkpIHtcbiAgICBhd2FpdCBhY3Rpb25GdW5jKGFwcFBhY2thZ2UsIHBlcm1pc3Npb24pO1xuICB9XG59O1xuXG5jb25zdCBQRVJNSVNTSU9OU19UWVBFID0ge1xuICBERU5JRUQ6ICdkZW5pZWQnLFxuICBHUkFOVEVEOiAnZ3JhbnRlZCcsXG4gIFJFUVVFU1RFRDogJ3JlcXVlc3RlZCcsXG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEdldFBlcm1pc3Npb25zT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgW3JlcXVlc3RlZF0gLSBPbmUgb2YgcG9zc2libGUgcGVybWlzc2lvbiB0eXBlcyB0byBnZXQuXG4gKiBDYW4gYmUgYW55IG9mIGBQRVJNSVNTSU9OU19UWVBFYCB2YWx1ZXMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXBwUGFja2FnZSBbdGhpcy5vcHRzLmFwcFBhY2thZ2VdIC0gVGhlIGFwcGxpY2F0aW9uIHBhY2thZ2UgdG8gc2V0IGNoYW5nZVxuICogcGVybWlzc2lvbnMgb24uIERlZmF1bHRzIHRvIHRoZSBwYWNrYWdlIG5hbWUgdW5kZXIgdGVzdC5cbiAqL1xuXG4vKipcbiAqIEdldHMgcnVudGltZSBwZXJtaXNzaW9ucyBsaXN0IGZvciB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gcGFja2FnZS5cbiAqXG4gKiBAcGFyYW0ge0dldFBlcm1pc3Npb25zT3B0aW9uc30gb3B0cyAtIEF2YWlsYWJsZSBvcHRpb25zIG1hcHBpbmcuXG4gKiBAcmV0dXJucyB7QXJyYXk8c3RyaW5nPn0gVGhlIGxpc3Qgb2YgcmV0cmlldmVkIHBlcm1pc3Npb25zIGZvciB0aGUgZ2l2ZW4gdHlwZVxuICogKGNhbiBhbHNvIGJlIGVtcHR5KS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgZ2V0dGluZyBwZXJtaXNzaW9ucy5cbiAqL1xuY29tbWFuZHMubW9iaWxlR2V0UGVybWlzc2lvbnMgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVHZXRQZXJtaXNzaW9ucyAob3B0cyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlID0gUEVSTUlTU0lPTlNfVFlQRS5SRVFVRVNURUQsXG4gICAgYXBwUGFja2FnZSA9IHRoaXMub3B0cy5hcHBQYWNrYWdlLFxuICB9ID0gb3B0cztcblxuICBsZXQgYWN0aW9uRnVuYztcbiAgc3dpdGNoIChfLnRvTG93ZXIodHlwZSkpIHtcbiAgICBjYXNlIFBFUk1JU1NJT05TX1RZUEUuUkVRVUVTVEVEOlxuICAgICAgYWN0aW9uRnVuYyA9IChhcHBQYWNrYWdlKSA9PiB0aGlzLmFkYi5nZXRSZXFQZXJtaXNzaW9ucyhhcHBQYWNrYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUEVSTUlTU0lPTlNfVFlQRS5HUkFOVEVEOlxuICAgICAgYWN0aW9uRnVuYyA9IChhcHBQYWNrYWdlKSA9PiB0aGlzLmFkYi5nZXRHcmFudGVkUGVybWlzc2lvbnMoYXBwUGFja2FnZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFBFUk1JU1NJT05TX1RZUEUuREVOSUVEOlxuICAgICAgYWN0aW9uRnVuYyA9IChhcHBQYWNrYWdlKSA9PiB0aGlzLmFkYi5nZXREZW5pZWRQZXJtaXNzaW9ucyhhcHBQYWNrYWdlKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsb2cuZXJyb3JBbmRUaHJvdyhgVW5rbm93biBwZXJtaXNzaW9ucyB0eXBlICcke3R5cGV9Jy4gYCArXG4gICAgICAgIGBPbmx5ICR7SlNPTi5zdHJpbmdpZnkoXy52YWx1ZXMoUEVSTUlTU0lPTlNfVFlQRSkpfSB0eXBlcyBhcmUgc3VwcG9ydGVkYCk7XG4gICAgICBicmVhaztcbiAgfVxuICByZXR1cm4gYXdhaXQgYWN0aW9uRnVuYyhhcHBQYWNrYWdlKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIHJlY2VudCBzeXN0ZW0gbm90aWZpY2F0aW9ucy5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTZWUgdGhlIGRvY3VtZW50YXRpb24gb24gYGFkYi5nZXROb3RpZmljYXRpb25zYCBmb3JcbiAqIG1vcmUgZGV0YWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVHZXROb3RpZmljYXRpb25zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlR2V0Tm90aWZpY2F0aW9ucyAoKSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5nZXROb3RpZmljYXRpb25zKCk7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFNtc0xpc3RPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4IFsxMDBdIC0gVGhlIG1heGltdW0gY291bnQgb2YgcmVjZW50IFNNUyBtZXNzYWdlc1xuICogdG8gcmV0cmlldmVcbiAqL1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiByZWNlbnQgU01TIG1lc3NhZ2VzIHdpdGggdGhlaXIgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge1Ntc0xpc3RPcHRpb25zfSBvcHRzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBTZWUgdGhlIGRvY3VtZW50YXRpb24gb24gYGFkYi5nZXRTbXNMaXN0YCBmb3JcbiAqIG1vcmUgZGV0YWlsc1xuICovXG5jb21tYW5kcy5tb2JpbGVMaXN0U21zID0gYXN5bmMgZnVuY3Rpb24gbW9iaWxlTGlzdFNtcyAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBhd2FpdCB0aGlzLmFkYi5nZXRTbXNMaXN0KG9wdHMpO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBVbmxvY2tPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5IFRoZSB1bmxvY2sga2V5LiBUaGUgdmFsdWUgb2YgdGhpcyBrZXkgZGVwZW5kc1xuICogb24gdGhlIGFjdHVhbCB1bmxvY2sgdHlwZSBhbmQgY291bGQgYmUgYSBwaW4vcGFzc3dvcmQvcGF0dGVybiB2YWx1ZSBvclxuICogYSBiaW9tZXRyaWMgZmluZ2VyIGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgVGhlIHVubG9jayB0eXBlLiBUaGUgZm9sbG93aW5nIHVubG9jayB0eXBlc1xuICogYXJlIHN1cHBvcnRlZDogYHBpbmAsIGBwaW5XaXRoS2V5RXZlbnRgLCBgcGFzc3dvcmRgLCBgcGF0dGVybmAgYW5kIGBmaW5nZXJwcmludGAuXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHN0cmF0ZWd5IEVpdGhlciAnbG9ja3NldHRpbmdzJyAoZGVmYXVsdCkgb3IgJ3VpYXV0b21hdG9yJy5cbiAqIFNldHRpbmcgaXQgdG8gJ3VpYXV0b21hdG9yJyB3aWxsIGVuZm9yY2UgdGhlIGRyaXZlciB0byBhdm9pZCB1c2luZyBzcGVjaWFsXG4gKiBBREIgc2hvcnRjdXRzIGluIG9yZGVyIHRvIHNwZWVkIHVwIHRoZSB1bmxvY2sgcHJvY2VkdXJlLlxuICogQHByb3BlcnR5IHs/bnVtYmVyfSB0aW1lb3V0TXMgWzIwMDBdIFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG4gKiB0byB3YWl0IHVudGlsIHRoZSBzY3JlZW4gZ2V0cyB1bmxvY2tlZFxuICovXG5cbi8qKlxuICogVW5sb2NrcyB0aGUgZGV2aWNlIGlmIGl0IGlzIGxvY2tlZC4gTm9vcCBpZiB0aGUgZGV2aWNlJ3Mgc2NyZWVuIGlzIG5vdCBsb2NrZWQuXG4gKlxuICogQHBhcmFtIHs/VW5sb2NrT3B0aW9uc30gb3B0c1xuICogQHRocm93cyB7RXJyb3J9IGlmIHVubG9jayBvcGVyYXRpb24gZmFpbHMgb3IgdGhlIHByb3ZpZGVkXG4gKiBhcmd1bWVudHMgYXJlIG5vdCB2YWxpZFxuICovXG5jb21tYW5kcy5tb2JpbGVVbmxvY2sgPSBhc3luYyBmdW5jdGlvbiBtb2JpbGVVbmxvY2sgKG9wdHMgPSB7fSkge1xuICBjb25zdCB7IGtleSwgdHlwZSwgc3RyYXRlZ3ksIHRpbWVvdXRNcyB9ID0gb3B0cztcbiAgYXdhaXQgYW5kcm9pZEhlbHBlcnMudW5sb2NrKHRoaXMsIHRoaXMuYWRiLCB7XG4gICAgdW5sb2NrS2V5OiBrZXksXG4gICAgdW5sb2NrVHlwZTogdHlwZSxcbiAgICB1bmxvY2tTdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgdW5sb2NrU3VjY2Vzc1RpbWVvdXQ6IHRpbWVvdXRNcyxcbiAgfSk7XG59O1xuXG5PYmplY3QuYXNzaWduKGV4dGVuc2lvbnMsIGNvbW1hbmRzLCBoZWxwZXJzKTtcbmV4cG9ydCB7IGNvbW1hbmRzLCBoZWxwZXJzIH07XG5leHBvcnQgZGVmYXVsdCBleHRlbnNpb25zO1xuIl0sImZpbGUiOiJsaWIvY29tbWFuZHMvZ2VuZXJhbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9