@appium/base-driver 8.5.7 → 8.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/build/lib/basedriver/capabilities.js +2 -2
  2. package/build/lib/basedriver/commands/execute.d.ts +11 -0
  3. package/build/lib/basedriver/commands/execute.d.ts.map +1 -0
  4. package/build/lib/basedriver/commands/execute.js +62 -0
  5. package/build/lib/basedriver/commands/index.d.ts +1 -1
  6. package/build/lib/basedriver/commands/index.d.ts.map +1 -1
  7. package/build/lib/basedriver/commands/index.js +5 -2
  8. package/build/lib/basedriver/commands/log.js +2 -4
  9. package/build/lib/basedriver/core.d.ts +11 -0
  10. package/build/lib/basedriver/core.d.ts.map +1 -1
  11. package/build/lib/basedriver/core.js +6 -1
  12. package/build/lib/basedriver/helpers.js +2 -2
  13. package/build/lib/express/server.d.ts +70 -7
  14. package/build/lib/express/server.d.ts.map +1 -1
  15. package/build/lib/express/server.js +19 -16
  16. package/build/lib/express/websocket.d.ts +12 -30
  17. package/build/lib/express/websocket.d.ts.map +1 -1
  18. package/build/lib/express/websocket.js +6 -4
  19. package/build/lib/index.d.ts +12 -180
  20. package/build/lib/index.d.ts.map +1 -1
  21. package/build/lib/index.js +107 -80
  22. package/build/lib/jsonwp-proxy/protocol-converter.js +2 -4
  23. package/build/lib/jsonwp-proxy/proxy.js +3 -7
  24. package/build/lib/protocol/index.d.ts +3 -1
  25. package/build/lib/protocol/index.js +13 -1
  26. package/build/lib/protocol/protocol.d.ts +8 -4
  27. package/build/lib/protocol/protocol.d.ts.map +1 -1
  28. package/build/lib/protocol/protocol.js +7 -7
  29. package/build/lib/protocol/routes.js +2 -6
  30. package/build/tsconfig.tsbuildinfo +1 -1
  31. package/lib/basedriver/commands/execute.js +65 -0
  32. package/lib/basedriver/commands/index.js +3 -1
  33. package/lib/basedriver/core.js +15 -0
  34. package/lib/express/server.js +126 -36
  35. package/lib/express/websocket.js +13 -11
  36. package/lib/index.js +19 -61
  37. package/lib/protocol/index.js +4 -0
  38. package/lib/protocol/protocol.js +10 -3
  39. package/package.json +17 -15
  40. package/build/test/basedriver/README.md +0 -5
  41. package/build/test/basedriver/driver-e2e-tests.js +0 -413
  42. package/build/test/basedriver/driver-tests.js +0 -572
  43. package/build/test/basedriver/index.js +0 -26
  44. package/build/test/e2e/basedriver/driver.e2e.spec.js +0 -15
  45. package/build/test/e2e/basedriver/helpers.e2e.spec.js +0 -192
  46. package/build/test/e2e/basedriver/websockets.e2e.spec.js +0 -87
  47. package/build/test/e2e/express/server.e2e.spec.js +0 -159
  48. package/build/test/e2e/jsonwp-proxy/proxy.e2e.spec.js +0 -59
  49. package/build/test/e2e/protocol/fake-driver.js +0 -163
  50. package/build/test/e2e/protocol/helpers.js +0 -25
  51. package/build/test/e2e/protocol/protocol.e2e.spec.js +0 -1186
  52. package/build/test/helpers.js +0 -55
  53. package/build/test/unit/basedriver/capabilities.spec.js +0 -672
  54. package/build/test/unit/basedriver/capability.spec.js +0 -353
  55. package/build/test/unit/basedriver/commands/event.spec.js +0 -110
  56. package/build/test/unit/basedriver/commands/log.spec.js +0 -92
  57. package/build/test/unit/basedriver/device-settings.spec.js +0 -97
  58. package/build/test/unit/basedriver/driver.spec.js +0 -15
  59. package/build/test/unit/basedriver/helpers.spec.js +0 -151
  60. package/build/test/unit/basedriver/timeout.spec.js +0 -135
  61. package/build/test/unit/express/server.spec.js +0 -155
  62. package/build/test/unit/express/static.spec.js +0 -26
  63. package/build/test/unit/jsonwp-proxy/mock-request.js +0 -91
  64. package/build/test/unit/jsonwp-proxy/protocol-converter.spec.js +0 -171
  65. package/build/test/unit/jsonwp-proxy/proxy.spec.js +0 -292
  66. package/build/test/unit/jsonwp-proxy/url.spec.js +0 -165
  67. package/build/test/unit/jsonwp-status/status.spec.js +0 -34
  68. package/build/test/unit/protocol/errors.spec.js +0 -390
  69. package/build/test/unit/protocol/routes.spec.js +0 -80
  70. package/build/test/unit/protocol/validator.spec.js +0 -149
  71. package/test/basedriver/README.md +0 -5
  72. package/test/basedriver/driver-e2e-tests.js +0 -386
  73. package/test/basedriver/driver-tests.js +0 -624
  74. package/test/basedriver/index.js +0 -6
@@ -225,7 +225,7 @@ function processCapabilities(w3cCaps, constraints = {}, shouldValidateCaps = tru
225
225
  }
226
226
  }
227
227
 
228
- return matchedCaps !== null && matchedCaps !== void 0 ? matchedCaps : {};
228
+ return matchedCaps ?? {};
229
229
  }
230
230
 
231
231
  function promoteAppiumOptions(originalCaps) {
@@ -255,4 +255,4 @@ function promoteAppiumOptions(originalCaps) {
255
255
  delete caps[APPIUM_OPTS_CAP];
256
256
  return caps;
257
257
  }
258
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBJVU1fVkVORE9SX1BSRUZJWCIsIkFQUElVTV9PUFRTX0NBUCIsIlBSRUZJWEVEX0FQUElVTV9PUFRTX0NBUCIsIm1lcmdlQ2FwcyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJyZXN1bHQiLCJPYmplY3QiLCJhc3NpZ24iLCJuYW1lIiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzVW5kZWZpbmVkIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidmFsaWRhdGVDYXBzIiwiY2FwcyIsImNvbnN0cmFpbnRzIiwib3B0cyIsInNraXBQcmVzZW5jZUNvbnN0cmFpbnQiLCJpc1BsYWluT2JqZWN0IiwiY2xvbmVEZWVwIiwia2V5Iiwia2V5cyIsInByZXNlbmNlIiwidmFsaWRhdGlvbkVycm9ycyIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwicGlja0J5IiwidXRpbCIsImhhc1ZhbHVlIiwiZnVsbE1lc3NhZ2VzIiwibWVzc2FnZSIsImF0dHJpYnV0ZSIsInJlYXNvbnMiLCJyZWFzb24iLCJwdXNoIiwiam9pbiIsIlNUQU5EQVJEX0NBUFMiLCJpc1N0YW5kYXJkQ2FwIiwiY2FwIiwiZmluZCIsInN0YW5kYXJkQ2FwIiwidG9Mb3dlckNhc2UiLCJzdHJpcEFwcGl1bVByZWZpeGVzIiwicHJlZml4IiwicHJlZml4ZWRDYXBzIiwiZmlsdGVyIiwic3RhcnRzV2l0aCIsImJhZFByZWZpeGVkQ2FwcyIsInByZWZpeGVkQ2FwIiwic3RyaXBwZWRDYXBOYW1lIiwic3Vic3RyIiwibGVuZ3RoIiwiaXNOaWwiLCJsb2ciLCJ3YXJuIiwiZmluZE5vblByZWZpeGVkQ2FwcyIsImFsd2F5c01hdGNoIiwiZmlyc3RNYXRjaCIsImNoYWluIiwicmVkdWNlIiwidW5wcmVmaXhlZENhcHMiLCJpbmNsdWRlcyIsInVuaXEiLCJwYXJzZUNhcHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJyZXF1aXJlZENhcHMiLCJhbGxGaXJzdE1hdGNoQ2FwcyIsImlzQXJyYXkiLCJub25QcmVmaXhlZENhcHMiLCJpc0VtcHR5IiwiZmlyc3RNYXRjaENhcHMiLCJmaWx0ZXJlZENvbnN0cmFpbnRzIiwicmVxdWlyZWRDYXBzS2V5cyIsInZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzIiwiY29tcGFjdCIsIm1hcCIsImUiLCJtYXRjaGVkQ2FwcyIsImVyciIsInByb2Nlc3NDYXBhYmlsaXRpZXMiLCJ3M2NDYXBzIiwicHJvbW90ZUFwcGl1bU9wdGlvbnMiLCJvcmlnaW5hbENhcHMiLCJhcHBpdW1PcHRpb25zIiwiU2Vzc2lvbk5vdENyZWF0ZWRFcnJvciIsIm92ZXJ3cml0dGVuS2V5cyIsImludGVyc2VjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NhcGFiaWxpdGllcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7dmFsaWRhdG9yfSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQge3V0aWx9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7ZXJyb3JzfSBmcm9tICcuLi9wcm90b2NvbC9lcnJvcnMnO1xuXG5jb25zdCBBUFBJVU1fVkVORE9SX1BSRUZJWCA9ICdhcHBpdW06JztcbmNvbnN0IEFQUElVTV9PUFRTX0NBUCA9ICdvcHRpb25zJztcbmNvbnN0IFBSRUZJWEVEX0FQUElVTV9PUFRTX0NBUCA9IGAke0FQUElVTV9WRU5ET1JfUFJFRklYfSR7QVBQSVVNX09QVFNfQ0FQfWA7XG5cbi8vIFRha2VzIHByaW1hcnkgY2FwcyBvYmplY3QgYW5kIG1lcmdlcyBpdCBpbnRvIGEgc2Vjb25kYXJ5IGNhcHMgb2JqZWN0LlxuLy8gKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tbWVyZ2luZy1jYXBhYmlsaXRpZXMpXG4vKipcbiAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBbcHJpbWFyeV1cbiAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBbc2Vjb25kYXJ5XVxuICogQHJldHVybnMge0NhcGFiaWxpdGllc31cbiAqL1xuZnVuY3Rpb24gbWVyZ2VDYXBzKHByaW1hcnkgPSB7fSwgc2Vjb25kYXJ5ID0ge30pIHtcbiAgbGV0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIHByaW1hcnkpO1xuXG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKHNlY29uZGFyeSkpIHtcbiAgICAvLyBPdmVyd3JpdGluZyBpcyBub3QgYWxsb3dlZC4gUHJpbWFyeSBhbmQgc2Vjb25kYXJ5IG11c3QgaGF2ZSBkaWZmZXJlbnQgcHJvcGVydGllcyAodzNjIHJ1bGUgNC40KVxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwcmltYXJ5W25hbWVdKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgYHByb3BlcnR5ICcke25hbWV9JyBzaG91bGQgbm90IGV4aXN0IG9uIGJvdGggcHJpbWFyeSAoJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICl9KSBhbmQgc2Vjb25kYXJ5ICgke0pTT04uc3RyaW5naWZ5KHNlY29uZGFyeSl9KSBvYmplY3RgXG4gICAgICApO1xuICAgIH1cbiAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFZhbGlkYXRlcyBjYXBzIGFnYWluc3QgYSBzZXQgb2YgY29uc3RyYWludHNcbi8qKlxuICpcbiAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBjYXBzXG4gKiBAcGFyYW0ge0NvbnN0cmFpbnRzfSBbY29uc3RyYWludHNdXG4gKiBAcGFyYW0ge1ZhbGlkYXRlQ2Fwc09wdHN9IFtvcHRzXVxuICogQHJldHVybnMge0NhcGFiaWxpdGllc31cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDYXBzKGNhcHMsIGNvbnN0cmFpbnRzID0ge30sIG9wdHMgPSB7fSkge1xuICBsZXQge3NraXBQcmVzZW5jZUNvbnN0cmFpbnR9ID0gb3B0cztcblxuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYG11c3QgYmUgYSBKU09OIG9iamVjdGApO1xuICB9XG5cbiAgY29uc3RyYWludHMgPSBfLmNsb25lRGVlcChjb25zdHJhaW50cyk7IC8vIERlZmVuc2l2ZSBjb3B5XG5cbiAgaWYgKHNraXBQcmVzZW5jZUNvbnN0cmFpbnQpIHtcbiAgICAvLyBSZW1vdmUgdGhlICdwcmVzZW5jZScgY29uc3RyYWludCBpZiB3ZSdyZSBub3QgY2hlY2tpbmcgZm9yIGl0XG4gICAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhjb25zdHJhaW50cykpIHtcbiAgICAgIGRlbGV0ZSBjb25zdHJhaW50c1trZXldLnByZXNlbmNlO1xuICAgIH1cbiAgfVxuXG4gIGxldCB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdG9yLnZhbGlkYXRlKF8ucGlja0J5KGNhcHMsIHV0aWwuaGFzVmFsdWUpLCBjb25zdHJhaW50cywge1xuICAgIGZ1bGxNZXNzYWdlczogZmFsc2UsXG4gIH0pO1xuXG4gIGlmICh2YWxpZGF0aW9uRXJyb3JzKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSBbXTtcbiAgICBmb3IgKGxldCBbYXR0cmlidXRlLCByZWFzb25zXSBvZiBfLnRvUGFpcnModmFsaWRhdGlvbkVycm9ycykpIHtcbiAgICAgIGZvciAobGV0IHJlYXNvbiBvZiByZWFzb25zKSB7XG4gICAgICAgIG1lc3NhZ2UucHVzaChgJyR7YXR0cmlidXRlfScgJHtyZWFzb259YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IobWVzc2FnZS5qb2luKCc7ICcpKTtcbiAgfVxuXG4gIC8vIFJldHVybiBjYXBzXG4gIHJldHVybiBjYXBzO1xufVxuXG4vLyBTdGFuZGFyZCwgbm9uLXByZWZpeGVkIGNhcGFiaWxpdGllcyAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi10YWJsZS1vZi1zdGFuZGFyZC1jYXBhYmlsaXRpZXMpXG5jb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAnYnJvd3Nlck5hbWUnLFxuICAnYnJvd3NlclZlcnNpb24nLFxuICAncGxhdGZvcm1OYW1lJyxcbiAgJ2FjY2VwdEluc2VjdXJlQ2VydHMnLFxuICAncGFnZUxvYWRTdHJhdGVneScsXG4gICdwcm94eScsXG4gICdzZXRXaW5kb3dSZWN0JyxcbiAgJ3RpbWVvdXRzJyxcbiAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJyxcbl07XG5cbmZ1bmN0aW9uIGlzU3RhbmRhcmRDYXAoY2FwKSB7XG4gIHJldHVybiAhIV8uZmluZChcbiAgICBTVEFOREFSRF9DQVBTLFxuICAgIChzdGFuZGFyZENhcCkgPT4gc3RhbmRhcmRDYXAudG9Mb3dlckNhc2UoKSA9PT0gYCR7Y2FwfWAudG9Mb3dlckNhc2UoKVxuICApO1xufVxuXG4vLyBJZiB0aGUgJ2FwcGl1bTonIHByZWZpeCB3YXMgcHJvdmlkZWQgYW5kIGl0J3MgYSB2YWxpZCBjYXBhYmlsaXR5LCBzdHJpcCBvdXQgdGhlIHByZWZpeCAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1leHRlbnNpb24tY2FwYWJpbGl0aWVzKVxuLy8gKE5PVEU6IE1ldGhvZCBpcyBkZXN0cnVjdGl2ZSBhbmQgbXV0YXRlcyBjb250ZW50cyBvZiBjYXBzKVxuZnVuY3Rpb24gc3RyaXBBcHBpdW1QcmVmaXhlcyhjYXBzKSB7XG4gIGNvbnN0IHByZWZpeCA9ICdhcHBpdW06JztcbiAgY29uc3QgcHJlZml4ZWRDYXBzID0gXy5maWx0ZXIoXy5rZXlzKGNhcHMpLCAoY2FwKSA9PiBgJHtjYXB9YC5zdGFydHNXaXRoKHByZWZpeCkpO1xuICBjb25zdCBiYWRQcmVmaXhlZENhcHMgPSBbXTtcblxuICAvLyBTdHJpcCBvdXQgdGhlICdhcHBpdW06JyBwcmVmaXhcbiAgZm9yIChsZXQgcHJlZml4ZWRDYXAgb2YgcHJlZml4ZWRDYXBzKSB7XG4gICAgY29uc3Qgc3RyaXBwZWRDYXBOYW1lID0gcHJlZml4ZWRDYXAuc3Vic3RyKHByZWZpeC5sZW5ndGgpO1xuXG4gICAgLy8gSWYgaXQncyBzdGFuZGFyZCBjYXBhYmlsaXR5IHRoYXQgd2FzIHByZWZpeGVkLCBhZGQgaXQgdG8gYW4gYXJyYXkgb2YgaW5jb3JyZWN0bHkgcHJlZml4ZWQgY2FwYWJpbGl0aWVzXG4gICAgaWYgKGlzU3RhbmRhcmRDYXAoc3RyaXBwZWRDYXBOYW1lKSkge1xuICAgICAgYmFkUHJlZml4ZWRDYXBzLnB1c2goc3RyaXBwZWRDYXBOYW1lKTtcbiAgICAgIGlmIChfLmlzTmlsKGNhcHNbc3RyaXBwZWRDYXBOYW1lXSkpIHtcbiAgICAgICAgY2Fwc1tzdHJpcHBlZENhcE5hbWVdID0gY2Fwc1twcmVmaXhlZENhcF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybihcbiAgICAgICAgICBgSWdub3JpbmcgY2FwYWJpbGl0eSAnJHtwcmVmaXhlZENhcH09JHtjYXBzW3ByZWZpeGVkQ2FwXX0nIGFuZCBgICtcbiAgICAgICAgICAgIGB1c2luZyBjYXBhYmlsaXR5ICcke3N0cmlwcGVkQ2FwTmFtZX09JHtjYXBzW3N0cmlwcGVkQ2FwTmFtZV19J2BcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2Fwc1tzdHJpcHBlZENhcE5hbWVdID0gY2Fwc1twcmVmaXhlZENhcF07XG4gICAgfVxuXG4gICAgLy8gU3RyaXAgb3V0IHRoZSBwcmVmaXhcbiAgICBkZWxldGUgY2Fwc1twcmVmaXhlZENhcF07XG4gIH1cblxuICAvLyBJZiB3ZSBmb3VuZCBzdGFuZGFyZCBjYXBzIHRoYXQgd2VyZSBpbmNvcnJlY3RseSBwcmVmaXhlZCwgdGhyb3cgYW4gZXhjZXB0aW9uIChlLmcuOiBkb24ndCBhY2NlcHQgJ2FwcGl1bTpwbGF0Zm9ybU5hbWUnLCBvbmx5IGFjY2VwdCBqdXN0ICdwbGF0Zm9ybU5hbWUnKVxuICBpZiAoYmFkUHJlZml4ZWRDYXBzLmxlbmd0aCA+IDApIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBUaGUgY2FwYWJpbGl0aWVzICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGJhZFByZWZpeGVkQ2Fwc1xuICAgICAgKX0gYXJlIHN0YW5kYXJkIGNhcGFiaWxpdGllcyBhbmQgZG8gbm90IHJlcXVpcmUgXCJhcHBpdW06XCIgcHJlZml4YFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgYW4gYXJyYXkgb2YgYWxsIHRoZSB1bnByZWZpeGVkIGNhcHMgdGhhdCBhcmUgYmVpbmcgdXNlZCBpbiAnYWx3YXlzTWF0Y2gnIGFuZCBhbGwgb2YgdGhlICdmaXJzdE1hdGNoJyBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYXBzIEEgY2FwYWJpbGl0aWVzIG9iamVjdFxuICovXG5mdW5jdGlvbiBmaW5kTm9uUHJlZml4ZWRDYXBzKHthbHdheXNNYXRjaCA9IHt9LCBmaXJzdE1hdGNoID0gW119KSB7XG4gIHJldHVybiBfLmNoYWluKFthbHdheXNNYXRjaCwgLi4uZmlyc3RNYXRjaF0pXG4gICAgLnJlZHVjZShcbiAgICAgICh1bnByZWZpeGVkQ2FwcywgY2FwcykgPT4gW1xuICAgICAgICAuLi51bnByZWZpeGVkQ2FwcyxcbiAgICAgICAgLi4uT2JqZWN0LmtleXMoY2FwcykuZmlsdGVyKChjYXApID0+ICFjYXAuaW5jbHVkZXMoJzonKSAmJiAhaXNTdGFuZGFyZENhcChjYXApKSxcbiAgICAgIF0sXG4gICAgICBbXVxuICAgIClcbiAgICAudW5pcSgpXG4gICAgLnZhbHVlKCk7XG59XG5cbi8vIFBhcnNlIGNhcGFiaWxpdGllcyAoYmFzZWQgb24gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jcHJvY2Vzc2luZy1jYXBhYmlsaXRpZXMpXG4vKipcbiAqXG4gKiBAcGFyYW0ge1czQ0NhcGFiaWxpdGllc30gY2Fwc1xuICogQHBhcmFtIHtDb25zdHJhaW50c30gW2NvbnN0cmFpbnRzXVxuICogQHBhcmFtIHtib29sZWFufSBbc2hvdWxkVmFsaWRhdGVDYXBzXVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzKGNhcHMsIGNvbnN0cmFpbnRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgLy8gSWYgY2FwYWJpbGl0aWVzIHJlcXVlc3QgaXMgbm90IGFuIG9iamVjdCwgcmV0dXJuIGVycm9yICgjMS4xKVxuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAnVGhlIGNhcGFiaWxpdGllcyBhcmd1bWVudCB3YXMgbm90IHZhbGlkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbihzKTogXCJjYXBhYmlsaXRpZXNcIiBtdXN0IGJlIGEgSlNPTiBvYmplY3QuJ1xuICAgICk7XG4gIH1cblxuICAvLyBMZXQgJ3JlcXVpcmVkQ2FwcycgYmUgcHJvcGVydHkgbmFtZWQgJ2Fsd2F5c01hdGNoJyBmcm9tIGNhcGFiaWxpdGllcyByZXF1ZXN0ICgjMilcbiAgLy8gYW5kICdhbGxGaXJzdE1hdGNoQ2FwcycgYmUgcHJvcGVydHkgbmFtZWQgJ2ZpcnN0TWF0Y2gnIGZyb20gY2FwYWJpbGl0aWVzIHJlcXVlc3QgKCMzKVxuICBsZXQge1xuICAgIGFsd2F5c01hdGNoOiByZXF1aXJlZENhcHMgPSB7fSwgLy8gSWYgJ3JlcXVpcmVkQ2FwcycgaXMgdW5kZWZpbmVkLCBzZXQgaXQgdG8gYW4gZW1wdHkgSlNPTiBvYmplY3QgKCMyLjEpXG4gICAgZmlyc3RNYXRjaDogYWxsRmlyc3RNYXRjaENhcHMgPSBbe31dLCAvLyBJZiAnZmlyc3RNYXRjaCcgaXMgdW5kZWZpbmVkIHNldCBpdCB0byBhIHNpbmdsZXRvbiBsaXN0IHdpdGggb25lIGVtcHR5IG9iamVjdCAoIzMuMSlcbiAgfSA9IGNhcHM7XG5cbiAgLy8gUmVqZWN0ICdmaXJzdE1hdGNoJyBhcmd1bWVudCBpZiBpdCdzIG5vdCBhbiBhcnJheSAoIzMuMilcbiAgaWYgKCFfLmlzQXJyYXkoYWxsRmlyc3RNYXRjaENhcHMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICdUaGUgY2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggYXJndW1lbnQgd2FzIG5vdCB2YWxpZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb24ocyk6IFwiY2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2hcIiBtdXN0IGJlIGEgSlNPTiBhcnJheSBvciB1bmRlZmluZWQnXG4gICAgKTtcbiAgfVxuXG4gIC8vIElmIGFuIGVtcHR5IGFycmF5IGFzIHByb3ZpZGVkLCB3ZSdsbCBiZSBmb3JnaXZpbmcgYW5kIG1ha2UgaXQgYW4gYXJyYXkgb2Ygb25lIGVtcHR5IG9iamVjdFxuICAvLyBJbiB0aGUgZnV0dXJlLCByZWplY3QgJ2ZpcnN0TWF0Y2gnIGFyZ3VtZW50IGlmIGl0cyBhcnJheSBkaWQgbm90IGhhdmUgb25lIG9yIG1vcmUgZW50cmllcyAoIzMuMilcbiAgaWYgKGFsbEZpcnN0TWF0Y2hDYXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFRoZSBmaXJzdE1hdGNoIGFycmF5IGluIHRoZSBnaXZlbiBjYXBhYmlsaXRpZXMgaGFzIG5vIGVudHJpZXMuIEFkZGluZyBhbiBlbXB0eSBlbnRyeSBmbyBybm93LCBgICtcbiAgICAgICAgYGJ1dCBpdCB3aWxsIHJlcXVpcmUgb25lIG9yIG1vcmUgZW50cmllcyBhcyBXM0Mgc3BlYy5gXG4gICAgKTtcbiAgICBhbGxGaXJzdE1hdGNoQ2Fwcy5wdXNoKHt9KTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBub24tcHJlZml4ZWQsIG5vbi1zdGFuZGFyZCBjYXBhYmlsaXRpZXMgYW5kIGxvZyB3YXJuaW5ncyBpZiB0aGV5IGFyZSBmb3VuZFxuICBsZXQgbm9uUHJlZml4ZWRDYXBzID0gZmluZE5vblByZWZpeGVkQ2FwcyhjYXBzKTtcbiAgaWYgKCFfLmlzRW1wdHkobm9uUHJlZml4ZWRDYXBzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICBgQWxsIG5vbi1zdGFuZGFyZCBjYXBhYmlsaXRpZXMgc2hvdWxkIGhhdmUgYSB2ZW5kb3IgcHJlZml4LiBUaGUgZm9sbG93aW5nIGNhcGFiaWxpdGllcyBkaWQgbm90IGhhdmUgb25lOiAke25vblByZWZpeGVkQ2Fwc31gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFN0cmlwIG91dCB0aGUgJ2FwcGl1bTonIHByZWZpeCBmcm9tIGFsbFxuICBzdHJpcEFwcGl1bVByZWZpeGVzKHJlcXVpcmVkQ2Fwcyk7XG4gIGZvciAobGV0IGZpcnN0TWF0Y2hDYXBzIG9mIGFsbEZpcnN0TWF0Y2hDYXBzKSB7XG4gICAgc3RyaXBBcHBpdW1QcmVmaXhlcyhmaXJzdE1hdGNoQ2Fwcyk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB0aGUgcmVxdWlyZWRDYXBzLiBCdXQgZG9uJ3QgdmFsaWRhdGUgJ3ByZXNlbmNlJyBiZWNhdXNlIGlmIHRoYXQgY29uc3RyYWludCBmYWlscyBvbiAnYWx3YXlzTWF0Y2gnIGl0IGNvdWxkIHN0aWxsIHBhc3Mgb24gb25lIG9mIHRoZSAnZmlyc3RNYXRjaCcga2V5c1xuICBpZiAoc2hvdWxkVmFsaWRhdGVDYXBzKSB7XG4gICAgcmVxdWlyZWRDYXBzID0gdmFsaWRhdGVDYXBzKHJlcXVpcmVkQ2FwcywgY29uc3RyYWludHMsIHtcbiAgICAgIHNraXBQcmVzZW5jZUNvbnN0cmFpbnQ6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBSZW1vdmUgdGhlICdwcmVzZW5jZScgY29uc3RyYWludCBmb3IgYW55IGtleXMgdGhhdCBhcmUgYWxyZWFkeSBwcmVzZW50IGluICdyZXF1aXJlZENhcHMnXG4gIC8vIHNpbmNlIHdlIGtub3cgdGhhdCB0aGlzIGNvbnN0cmFpbnQgaGFzIGFscmVhZHkgcGFzc2VkXG4gIGxldCBmaWx0ZXJlZENvbnN0cmFpbnRzID0gey4uLmNvbnN0cmFpbnRzfTtcbiAgbGV0IHJlcXVpcmVkQ2Fwc0tleXMgPSBfLmtleXMocmVxdWlyZWRDYXBzKTtcbiAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhmaWx0ZXJlZENvbnN0cmFpbnRzKSkge1xuICAgIGlmIChyZXF1aXJlZENhcHNLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGRlbGV0ZSBmaWx0ZXJlZENvbnN0cmFpbnRzW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgYWxsIG9mIHRoZSBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMgYW5kIHJldHVybiBhbiBhcnJheSB3aXRoIG9ubHkgdGhlIHZhbGlkIGNhcHMgKHNlZSBzcGVjICM1KVxuICBsZXQgdmFsaWRhdGlvbkVycm9ycyA9IFtdO1xuICAvKiogQHR5cGUge0NhcGFiaWxpdGllc1tdfSAqL1xuICBsZXQgdmFsaWRhdGVkRmlyc3RNYXRjaENhcHMgPSBfLmNvbXBhY3QoXG4gICAgYWxsRmlyc3RNYXRjaENhcHMubWFwKChmaXJzdE1hdGNoQ2FwcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVmFsaWRhdGUgZmlyc3RNYXRjaCBjYXBzXG4gICAgICAgIHJldHVybiBzaG91bGRWYWxpZGF0ZUNhcHNcbiAgICAgICAgICA/IHZhbGlkYXRlQ2FwcyhmaXJzdE1hdGNoQ2FwcywgZmlsdGVyZWRDb25zdHJhaW50cylcbiAgICAgICAgICA6IGZpcnN0TWF0Y2hDYXBzO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB2YWxpZGF0aW9uRXJyb3JzLnB1c2goZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9KVxuICApO1xuXG4gIC8vIFRyeSB0byBtZXJnZSByZXF1aXJlZENhcHMgd2l0aCBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMsIGJyZWFrIG9uY2UgaXQgZmluZHMgaXRzIGZpcnN0IG1hdGNoIChzZWUgc3BlYyAjNilcbiAgbGV0IG1hdGNoZWRDYXBzID0gbnVsbDtcbiAgZm9yIChsZXQgZmlyc3RNYXRjaENhcHMgb2YgdmFsaWRhdGVkRmlyc3RNYXRjaENhcHMpIHtcbiAgICB0cnkge1xuICAgICAgbWF0Y2hlZENhcHMgPSBtZXJnZUNhcHMocmVxdWlyZWRDYXBzLCBmaXJzdE1hdGNoQ2Fwcyk7XG4gICAgICBpZiAobWF0Y2hlZENhcHMpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihlcnIubWVzc2FnZSk7XG4gICAgICB2YWxpZGF0aW9uRXJyb3JzLnB1c2goZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgdmFyaWFibGVzIGZvciB0ZXN0aW5nIHB1cnBvc2VzXG4gIHJldHVybiB7XG4gICAgcmVxdWlyZWRDYXBzLFxuICAgIGFsbEZpcnN0TWF0Y2hDYXBzLFxuICAgIHZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzLFxuICAgIG1hdGNoZWRDYXBzLFxuICAgIHZhbGlkYXRpb25FcnJvcnMsXG4gIH07XG59XG5cbi8vIENhbGxzIHBhcnNlQ2FwcyBhbmQganVzdCByZXR1cm5zIHRoZSBtYXRjaGVkQ2FwcyB2YXJpYWJsZVxuLyoqXG4gKlxuICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IHczY0NhcHNcbiAqIEBwYXJhbSB7Q29uc3RyYWludHN9IFtjb25zdHJhaW50c11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Nob3VsZFZhbGlkYXRlQ2Fwc11cbiAqIEByZXR1cm5zIHtDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwcywgY29uc3RyYWludHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICBjb25zdCB7bWF0Y2hlZENhcHMsIHZhbGlkYXRpb25FcnJvcnN9ID0gcGFyc2VDYXBzKHczY0NhcHMsIGNvbnN0cmFpbnRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gIC8vIElmIHdlIGZvdW5kIGFuIGVycm9yIHRocm93IGFuIGV4Y2VwdGlvblxuICBpZiAoIXV0aWwuaGFzVmFsdWUobWF0Y2hlZENhcHMpKSB7XG4gICAgaWYgKF8uaXNBcnJheSh3M2NDYXBzLmZpcnN0TWF0Y2gpICYmIHczY0NhcHMuZmlyc3RNYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBJZiB0aGVyZSB3YXMgbW9yZSB0aGFuIG9uZSAnZmlyc3RNYXRjaCcgY2FwLCBpbmRpY2F0ZSB0aGF0IHdlIGNvdWxkbid0IGZpbmQgYSBtYXRjaGluZyBjYXBhYmlsaXRpZXMgc2V0IGFuZCBzaG93IGFsbCB0aGUgZXJyb3JzXG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgbWF0Y2hpbmcgY2FwYWJpbGl0aWVzIGZyb20gJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB3M2NDYXBzXG4gICAgICAgICl9OlxcbiAke3ZhbGlkYXRpb25FcnJvcnMuam9pbignXFxuJyl9YFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHNob3cgdGhlIHNpbmd1bGFyIGVycm9yIG1lc3NhZ2VcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IodmFsaWRhdGlvbkVycm9yc1swXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRDYXBzID8/IHt9O1xufVxuXG4vKipcbiAqIFJldHVybiBhIGNvcHkgb2YgYSBjYXBhYmlsaXRpZXMgb2JqZWN0IHdoaWNoIGhhcyB0YWtlbiBldmVyeXRoaW5nIHdpdGhpbiB0aGUgJ29wdGlvbnMnXG4gKiBjYXBhYmlsaXR5IGFuZCBwcm9tb3RlZCBpdCB0byB0aGUgdG9wIGxldmVsLiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhc3N1bWVkIHRvIGJlIHJ1biBhZnRlclxuICogYWxsIHZlbmRvciBwcmVmaXhlcyBoYXZlIGFscmVhZHkgYmVlbiBzdHJpcHBlZCBmcm9tIHRoZSB0b3AgbGV2ZWwuIFNvIHdlIGFyZSBkZWFsaW5nIHdpdGggZS5nLlxuICogJ29wdGlvbnMnIGFuZCBub3QgJ2FwcGl1bTpvcHRpb25zJyBhdCB0aGlzIHBvaW50LiBBbnkgcHJlZml4ZXMgX2luc2lkZV8gdGhlICdvcHRpb25zJyBjYXBhYmlsaXR5XG4gKiB3aWxsIHRoZW1zZWx2ZXMgYmUgc3RyaXBwZWQuIFRoaXMgaXMgZGVzaWduZWQgYXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIG5vdCBvbmUgdG8gb3BlcmF0ZSBvblxuICogdXNlci1jb25zdHJ1Y3RlZCBjYXBhYmlsaXRpZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9yaWdpbmFsQ2FwcyAtIHRoZSBjYXBhYmlsaXRpZXMgdG8gYW5hbHl6ZSBhbmQgcHJvbW90ZSBmcm9tICdvcHRpb25zJ1xuICogQHJldHVybiB7b2JqZWN0IX0gLSB0aGUgY2FwYWJpbGl0aWVzIHdpdGggJ29wdGlvbnMnIHByb21vdGVkIGlmIG5lY2Vzc2FyeVxuICovXG5mdW5jdGlvbiBwcm9tb3RlQXBwaXVtT3B0aW9ucyhvcmlnaW5hbENhcHMpIHtcbiAgY29uc3QgYXBwaXVtT3B0aW9ucyA9IG9yaWdpbmFsQ2Fwc1tBUFBJVU1fT1BUU19DQVBdO1xuICBpZiAoIWFwcGl1bU9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3JpZ2luYWxDYXBzO1xuICB9XG5cbiAgbGV0IGNhcHMgPSBfLmNsb25lRGVlcChvcmlnaW5hbENhcHMpO1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChhcHBpdW1PcHRpb25zKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihgVGhlICR7QVBQSVVNX09QVFNfQ0FQfSBjYXBhYmlsaXR5IG11c3QgYmUgYW4gb2JqZWN0YCk7XG4gIH1cblxuICAvLyBmaXJzdCBnZXQgcmlkIG9mIGFueSBwcmVmaXhlcyBpbnNpZGUgYXBwaXVtOm9wdGlvbnNcbiAgc3RyaXBBcHBpdW1QcmVmaXhlcyhhcHBpdW1PcHRpb25zKTtcblxuICAvLyB3YXJuIGlmIHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgYW55IGtleXMgb24gdGhlIGJhc2UgY2FwcyBvYmplY3RcbiAgY29uc3Qgb3ZlcndyaXR0ZW5LZXlzID0gXy5pbnRlcnNlY3Rpb24oT2JqZWN0LmtleXMoY2FwcyksIE9iamVjdC5rZXlzKGFwcGl1bU9wdGlvbnMpKTtcbiAgaWYgKG92ZXJ3cml0dGVuS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgRm91bmQgY2FwYWJpbGl0aWVzIGluc2lkZSAke1BSRUZJWEVEX0FQUElVTV9PUFRTX0NBUH0gdGhhdCB3aWxsIG92ZXJ3cml0ZSBgICtcbiAgICAgICAgYGNhcGFiaWxpdGllcyBhdCB0aGUgdG9wIGxldmVsOiAke0pTT04uc3RyaW5naWZ5KG92ZXJ3cml0dGVuS2V5cyl9YFxuICAgICk7XG4gIH1cblxuICAvLyBub3cganVzdCBhcHBseSB0aGVtIHRvIHRoZSBtYWluIGNhcHMgb2JqZWN0XG4gIGNhcHMgPSB7Li4uY2FwcywgLi4uYXBwaXVtT3B0aW9uc307XG5cbiAgLy8gYW5kIHJlbW92ZSBhbGwgdHJhY2VzIG9mIHRoZSBvcHRpb25zIGNhcFxuICBkZWxldGUgY2Fwc1tBUFBJVU1fT1BUU19DQVBdO1xuICByZXR1cm4gY2Fwcztcbn1cblxuZXhwb3J0IHtcbiAgcGFyc2VDYXBzLFxuICBwcm9jZXNzQ2FwYWJpbGl0aWVzLFxuICB2YWxpZGF0ZUNhcHMsXG4gIG1lcmdlQ2FwcyxcbiAgQVBQSVVNX1ZFTkRPUl9QUkVGSVgsXG4gIEFQUElVTV9PUFRTX0NBUCxcbiAgZmluZE5vblByZWZpeGVkQ2FwcyxcbiAgaXNTdGFuZGFyZENhcCxcbiAgc3RyaXBBcHBpdW1QcmVmaXhlcyxcbiAgcHJvbW90ZUFwcGl1bU9wdGlvbnMsXG4gIFBSRUZJWEVEX0FQUElVTV9PUFRTX0NBUCxcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllc30gVzNDQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29uc3RyYWludHN9IENvbnN0cmFpbnRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ2FwYWJpbGl0aWVzfSBDYXBhYmlsaXRpZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFZhbGlkYXRlQ2Fwc09wdHNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBQcmVzZW5jZUNvbnN0cmFpbnRdIC0gaWYgdHJ1ZSwgc2tpcCB0aGUgcHJlc2VuY2UgY29uc3RyYWludFxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxvQkFBb0IsR0FBRyxTQUE3Qjs7QUFDQSxNQUFNQyxlQUFlLEdBQUcsU0FBeEI7O0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUksR0FBRUYsb0JBQXFCLEdBQUVDLGVBQWdCLEVBQTNFOzs7QUFTQSxTQUFTRSxTQUFULENBQW1CQyxPQUFPLEdBQUcsRUFBN0IsRUFBaUNDLFNBQVMsR0FBRyxFQUE3QyxFQUFpRDtFQUMvQyxJQUFJQyxNQUFNLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JKLE9BQWxCLENBQWI7O0VBRUEsS0FBSyxJQUFJLENBQUNLLElBQUQsRUFBT0MsS0FBUCxDQUFULElBQTBCQyxlQUFBLENBQUVDLE9BQUYsQ0FBVVAsU0FBVixDQUExQixFQUFnRDtJQUU5QyxJQUFJLENBQUNNLGVBQUEsQ0FBRUUsV0FBRixDQUFjVCxPQUFPLENBQUNLLElBQUQsQ0FBckIsQ0FBTCxFQUFtQztNQUNqQyxNQUFNLElBQUlLLGNBQUEsQ0FBT0Msb0JBQVgsQ0FDSCxhQUFZTixJQUFLLHVDQUFzQ08sSUFBSSxDQUFDQyxTQUFMLENBQ3REYixPQURzRCxDQUV0RCxvQkFBbUJZLElBQUksQ0FBQ0MsU0FBTCxDQUFlWixTQUFmLENBQTBCLFVBSDNDLENBQU47SUFLRDs7SUFDREMsTUFBTSxDQUFDRyxJQUFELENBQU4sR0FBZUMsS0FBZjtFQUNEOztFQUVELE9BQU9KLE1BQVA7QUFDRDs7QUFVRCxTQUFTWSxZQUFULENBQXNCQyxJQUF0QixFQUE0QkMsV0FBVyxHQUFHLEVBQTFDLEVBQThDQyxJQUFJLEdBQUcsRUFBckQsRUFBeUQ7RUFDdkQsSUFBSTtJQUFDQztFQUFELElBQTJCRCxJQUEvQjs7RUFFQSxJQUFJLENBQUNWLGVBQUEsQ0FBRVksYUFBRixDQUFnQkosSUFBaEIsQ0FBTCxFQUE0QjtJQUMxQixNQUFNLElBQUlMLGNBQUEsQ0FBT0Msb0JBQVgsQ0FBaUMsdUJBQWpDLENBQU47RUFDRDs7RUFFREssV0FBVyxHQUFHVCxlQUFBLENBQUVhLFNBQUYsQ0FBWUosV0FBWixDQUFkOztFQUVBLElBQUlFLHNCQUFKLEVBQTRCO0lBRTFCLEtBQUssSUFBSUcsR0FBVCxJQUFnQmQsZUFBQSxDQUFFZSxJQUFGLENBQU9OLFdBQVAsQ0FBaEIsRUFBcUM7TUFDbkMsT0FBT0EsV0FBVyxDQUFDSyxHQUFELENBQVgsQ0FBaUJFLFFBQXhCO0lBQ0Q7RUFDRjs7RUFFRCxJQUFJQyxnQkFBZ0IsR0FBR0Msc0JBQUEsQ0FBVUMsUUFBVixDQUFtQm5CLGVBQUEsQ0FBRW9CLE1BQUYsQ0FBU1osSUFBVCxFQUFlYSxhQUFBLENBQUtDLFFBQXBCLENBQW5CLEVBQWtEYixXQUFsRCxFQUErRDtJQUNwRmMsWUFBWSxFQUFFO0VBRHNFLENBQS9ELENBQXZCOztFQUlBLElBQUlOLGdCQUFKLEVBQXNCO0lBQ3BCLElBQUlPLE9BQU8sR0FBRyxFQUFkOztJQUNBLEtBQUssSUFBSSxDQUFDQyxTQUFELEVBQVlDLE9BQVosQ0FBVCxJQUFpQzFCLGVBQUEsQ0FBRUMsT0FBRixDQUFVZ0IsZ0JBQVYsQ0FBakMsRUFBOEQ7TUFDNUQsS0FBSyxJQUFJVSxNQUFULElBQW1CRCxPQUFuQixFQUE0QjtRQUMxQkYsT0FBTyxDQUFDSSxJQUFSLENBQWMsSUFBR0gsU0FBVSxLQUFJRSxNQUFPLEVBQXRDO01BQ0Q7SUFDRjs7SUFDRCxNQUFNLElBQUl4QixjQUFBLENBQU9DLG9CQUFYLENBQWdDb0IsT0FBTyxDQUFDSyxJQUFSLENBQWEsSUFBYixDQUFoQyxDQUFOO0VBQ0Q7O0VBR0QsT0FBT3JCLElBQVA7QUFDRDs7QUFHRCxNQUFNc0IsYUFBYSxHQUFHLENBQ3BCLGFBRG9CLEVBRXBCLGdCQUZvQixFQUdwQixjQUhvQixFQUlwQixxQkFKb0IsRUFLcEIsa0JBTG9CLEVBTXBCLE9BTm9CLEVBT3BCLGVBUG9CLEVBUXBCLFVBUm9CLEVBU3BCLHlCQVRvQixDQUF0Qjs7QUFZQSxTQUFTQyxhQUFULENBQXVCQyxHQUF2QixFQUE0QjtFQUMxQixPQUFPLENBQUMsQ0FBQ2hDLGVBQUEsQ0FBRWlDLElBQUYsQ0FDUEgsYUFETyxFQUVOSSxXQUFELElBQWlCQSxXQUFXLENBQUNDLFdBQVosT0FBK0IsR0FBRUgsR0FBSSxFQUFQLENBQVNHLFdBQVQsRUFGeEMsQ0FBVDtBQUlEOztBQUlELFNBQVNDLG1CQUFULENBQTZCNUIsSUFBN0IsRUFBbUM7RUFDakMsTUFBTTZCLE1BQU0sR0FBRyxTQUFmOztFQUNBLE1BQU1DLFlBQVksR0FBR3RDLGVBQUEsQ0FBRXVDLE1BQUYsQ0FBU3ZDLGVBQUEsQ0FBRWUsSUFBRixDQUFPUCxJQUFQLENBQVQsRUFBd0J3QixHQUFELElBQVUsR0FBRUEsR0FBSSxFQUFQLENBQVNRLFVBQVQsQ0FBb0JILE1BQXBCLENBQWhDLENBQXJCOztFQUNBLE1BQU1JLGVBQWUsR0FBRyxFQUF4Qjs7RUFHQSxLQUFLLElBQUlDLFdBQVQsSUFBd0JKLFlBQXhCLEVBQXNDO0lBQ3BDLE1BQU1LLGVBQWUsR0FBR0QsV0FBVyxDQUFDRSxNQUFaLENBQW1CUCxNQUFNLENBQUNRLE1BQTFCLENBQXhCOztJQUdBLElBQUlkLGFBQWEsQ0FBQ1ksZUFBRCxDQUFqQixFQUFvQztNQUNsQ0YsZUFBZSxDQUFDYixJQUFoQixDQUFxQmUsZUFBckI7O01BQ0EsSUFBSTNDLGVBQUEsQ0FBRThDLEtBQUYsQ0FBUXRDLElBQUksQ0FBQ21DLGVBQUQsQ0FBWixDQUFKLEVBQW9DO1FBQ2xDbkMsSUFBSSxDQUFDbUMsZUFBRCxDQUFKLEdBQXdCbkMsSUFBSSxDQUFDa0MsV0FBRCxDQUE1QjtNQUNELENBRkQsTUFFTztRQUNMSyxlQUFBLENBQUlDLElBQUosQ0FDRyx3QkFBdUJOLFdBQVksSUFBR2xDLElBQUksQ0FBQ2tDLFdBQUQsQ0FBYyxRQUF6RCxHQUNHLHFCQUFvQkMsZUFBZ0IsSUFBR25DLElBQUksQ0FBQ21DLGVBQUQsQ0FBa0IsR0FGbEU7TUFJRDtJQUNGLENBVkQsTUFVTztNQUNMbkMsSUFBSSxDQUFDbUMsZUFBRCxDQUFKLEdBQXdCbkMsSUFBSSxDQUFDa0MsV0FBRCxDQUE1QjtJQUNEOztJQUdELE9BQU9sQyxJQUFJLENBQUNrQyxXQUFELENBQVg7RUFDRDs7RUFHRCxJQUFJRCxlQUFlLENBQUNJLE1BQWhCLEdBQXlCLENBQTdCLEVBQWdDO0lBQzlCRSxlQUFBLENBQUlDLElBQUosQ0FDRyxvQkFBbUIzQyxJQUFJLENBQUNDLFNBQUwsQ0FDbEJtQyxlQURrQixDQUVsQixnRUFISjtFQUtEO0FBQ0Y7O0FBTUQsU0FBU1EsbUJBQVQsQ0FBNkI7RUFBQ0MsV0FBVyxHQUFHLEVBQWY7RUFBbUJDLFVBQVUsR0FBRztBQUFoQyxDQUE3QixFQUFrRTtFQUNoRSxPQUFPbkQsZUFBQSxDQUFFb0QsS0FBRixDQUFRLENBQUNGLFdBQUQsRUFBYyxHQUFHQyxVQUFqQixDQUFSLEVBQ0pFLE1BREksQ0FFSCxDQUFDQyxjQUFELEVBQWlCOUMsSUFBakIsS0FBMEIsQ0FDeEIsR0FBRzhDLGNBRHFCLEVBRXhCLEdBQUcxRCxNQUFNLENBQUNtQixJQUFQLENBQVlQLElBQVosRUFBa0IrQixNQUFsQixDQUEwQlAsR0FBRCxJQUFTLENBQUNBLEdBQUcsQ0FBQ3VCLFFBQUosQ0FBYSxHQUFiLENBQUQsSUFBc0IsQ0FBQ3hCLGFBQWEsQ0FBQ0MsR0FBRCxDQUF0RSxDQUZxQixDQUZ2QixFQU1ILEVBTkcsRUFRSndCLElBUkksR0FTSnpELEtBVEksRUFBUDtBQVVEOztBQVVELFNBQVMwRCxTQUFULENBQW1CakQsSUFBbkIsRUFBeUJDLFdBQVcsR0FBRyxFQUF2QyxFQUEyQ2lELGtCQUFrQixHQUFHLElBQWhFLEVBQXNFO0VBRXBFLElBQUksQ0FBQzFELGVBQUEsQ0FBRVksYUFBRixDQUFnQkosSUFBaEIsQ0FBTCxFQUE0QjtJQUMxQixNQUFNLElBQUlMLGNBQUEsQ0FBT0Msb0JBQVgsQ0FDSiw0R0FESSxDQUFOO0VBR0Q7O0VBSUQsSUFBSTtJQUNGOEMsV0FBVyxFQUFFUyxZQUFZLEdBQUcsRUFEMUI7SUFFRlIsVUFBVSxFQUFFUyxpQkFBaUIsR0FBRyxDQUFDLEVBQUQ7RUFGOUIsSUFHQXBELElBSEo7O0VBTUEsSUFBSSxDQUFDUixlQUFBLENBQUU2RCxPQUFGLENBQVVELGlCQUFWLENBQUwsRUFBbUM7SUFDakMsTUFBTSxJQUFJekQsY0FBQSxDQUFPQyxvQkFBWCxDQUNKLDZJQURJLENBQU47RUFHRDs7RUFJRCxJQUFJd0QsaUJBQWlCLENBQUNmLE1BQWxCLEtBQTZCLENBQWpDLEVBQW9DO0lBQ2xDRSxlQUFBLENBQUlDLElBQUosQ0FDRyxnR0FBRCxHQUNHLHNEQUZMOztJQUlBWSxpQkFBaUIsQ0FBQ2hDLElBQWxCLENBQXVCLEVBQXZCO0VBQ0Q7O0VBR0QsSUFBSWtDLGVBQWUsR0FBR2IsbUJBQW1CLENBQUN6QyxJQUFELENBQXpDOztFQUNBLElBQUksQ0FBQ1IsZUFBQSxDQUFFK0QsT0FBRixDQUFVRCxlQUFWLENBQUwsRUFBaUM7SUFDL0IsTUFBTSxJQUFJM0QsY0FBQSxDQUFPQyxvQkFBWCxDQUNILDJHQUEwRzBELGVBQWdCLEVBRHZILENBQU47RUFHRDs7RUFHRDFCLG1CQUFtQixDQUFDdUIsWUFBRCxDQUFuQjs7RUFDQSxLQUFLLElBQUlLLGNBQVQsSUFBMkJKLGlCQUEzQixFQUE4QztJQUM1Q3hCLG1CQUFtQixDQUFDNEIsY0FBRCxDQUFuQjtFQUNEOztFQUdELElBQUlOLGtCQUFKLEVBQXdCO0lBQ3RCQyxZQUFZLEdBQUdwRCxZQUFZLENBQUNvRCxZQUFELEVBQWVsRCxXQUFmLEVBQTRCO01BQ3JERSxzQkFBc0IsRUFBRTtJQUQ2QixDQUE1QixDQUEzQjtFQUdEOztFQUlELElBQUlzRCxtQkFBbUIsR0FBRyxFQUFDLEdBQUd4RDtFQUFKLENBQTFCOztFQUNBLElBQUl5RCxnQkFBZ0IsR0FBR2xFLGVBQUEsQ0FBRWUsSUFBRixDQUFPNEMsWUFBUCxDQUF2Qjs7RUFDQSxLQUFLLElBQUk3QyxHQUFULElBQWdCZCxlQUFBLENBQUVlLElBQUYsQ0FBT2tELG1CQUFQLENBQWhCLEVBQTZDO0lBQzNDLElBQUlDLGdCQUFnQixDQUFDWCxRQUFqQixDQUEwQnpDLEdBQTFCLENBQUosRUFBb0M7TUFDbEMsT0FBT21ELG1CQUFtQixDQUFDbkQsR0FBRCxDQUExQjtJQUNEO0VBQ0Y7O0VBR0QsSUFBSUcsZ0JBQWdCLEdBQUcsRUFBdkI7O0VBRUEsSUFBSWtELHVCQUF1QixHQUFHbkUsZUFBQSxDQUFFb0UsT0FBRixDQUM1QlIsaUJBQWlCLENBQUNTLEdBQWxCLENBQXVCTCxjQUFELElBQW9CO0lBQ3hDLElBQUk7TUFFRixPQUFPTixrQkFBa0IsR0FDckJuRCxZQUFZLENBQUN5RCxjQUFELEVBQWlCQyxtQkFBakIsQ0FEUyxHQUVyQkQsY0FGSjtJQUdELENBTEQsQ0FLRSxPQUFPTSxDQUFQLEVBQVU7TUFDVnJELGdCQUFnQixDQUFDVyxJQUFqQixDQUFzQjBDLENBQUMsQ0FBQzlDLE9BQXhCO0lBQ0Q7RUFDRixDQVRELENBRDRCLENBQTlCOztFQWNBLElBQUkrQyxXQUFXLEdBQUcsSUFBbEI7O0VBQ0EsS0FBSyxJQUFJUCxjQUFULElBQTJCRyx1QkFBM0IsRUFBb0Q7SUFDbEQsSUFBSTtNQUNGSSxXQUFXLEdBQUcvRSxTQUFTLENBQUNtRSxZQUFELEVBQWVLLGNBQWYsQ0FBdkI7O01BQ0EsSUFBSU8sV0FBSixFQUFpQjtRQUNmO01BQ0Q7SUFDRixDQUxELENBS0UsT0FBT0MsR0FBUCxFQUFZO01BQ1p6QixlQUFBLENBQUlDLElBQUosQ0FBU3dCLEdBQUcsQ0FBQ2hELE9BQWI7O01BQ0FQLGdCQUFnQixDQUFDVyxJQUFqQixDQUFzQjRDLEdBQUcsQ0FBQ2hELE9BQTFCO0lBQ0Q7RUFDRjs7RUFHRCxPQUFPO0lBQ0xtQyxZQURLO0lBRUxDLGlCQUZLO0lBR0xPLHVCQUhLO0lBSUxJLFdBSks7SUFLTHREO0VBTEssQ0FBUDtBQU9EOztBQVVELFNBQVN3RCxtQkFBVCxDQUE2QkMsT0FBN0IsRUFBc0NqRSxXQUFXLEdBQUcsRUFBcEQsRUFBd0RpRCxrQkFBa0IsR0FBRyxJQUE3RSxFQUFtRjtFQUNqRixNQUFNO0lBQUNhLFdBQUQ7SUFBY3REO0VBQWQsSUFBa0N3QyxTQUFTLENBQUNpQixPQUFELEVBQVVqRSxXQUFWLEVBQXVCaUQsa0JBQXZCLENBQWpEOztFQUdBLElBQUksQ0FBQ3JDLGFBQUEsQ0FBS0MsUUFBTCxDQUFjaUQsV0FBZCxDQUFMLEVBQWlDO0lBQy9CLElBQUl2RSxlQUFBLENBQUU2RCxPQUFGLENBQVVhLE9BQU8sQ0FBQ3ZCLFVBQWxCLEtBQWlDdUIsT0FBTyxDQUFDdkIsVUFBUixDQUFtQk4sTUFBbkIsR0FBNEIsQ0FBakUsRUFBb0U7TUFFbEUsTUFBTSxJQUFJMUMsY0FBQSxDQUFPQyxvQkFBWCxDQUNILDZDQUE0Q0MsSUFBSSxDQUFDQyxTQUFMLENBQzNDb0UsT0FEMkMsQ0FFM0MsT0FBTXpELGdCQUFnQixDQUFDWSxJQUFqQixDQUFzQixJQUF0QixDQUE0QixFQUhoQyxDQUFOO0lBS0QsQ0FQRCxNQU9PO01BRUwsTUFBTSxJQUFJMUIsY0FBQSxDQUFPQyxvQkFBWCxDQUFnQ2EsZ0JBQWdCLENBQUMsQ0FBRCxDQUFoRCxDQUFOO0lBQ0Q7RUFDRjs7RUFFRCxPQUFPc0QsV0FBUCxhQUFPQSxXQUFQLGNBQU9BLFdBQVAsR0FBc0IsRUFBdEI7QUFDRDs7QUFhRCxTQUFTSSxvQkFBVCxDQUE4QkMsWUFBOUIsRUFBNEM7RUFDMUMsTUFBTUMsYUFBYSxHQUFHRCxZQUFZLENBQUN0RixlQUFELENBQWxDOztFQUNBLElBQUksQ0FBQ3VGLGFBQUwsRUFBb0I7SUFDbEIsT0FBT0QsWUFBUDtFQUNEOztFQUVELElBQUlwRSxJQUFJLEdBQUdSLGVBQUEsQ0FBRWEsU0FBRixDQUFZK0QsWUFBWixDQUFYOztFQUNBLElBQUksQ0FBQzVFLGVBQUEsQ0FBRVksYUFBRixDQUFnQmlFLGFBQWhCLENBQUwsRUFBcUM7SUFDbkMsTUFBTSxJQUFJMUUsY0FBQSxDQUFPMkUsc0JBQVgsQ0FBbUMsT0FBTXhGLGVBQWdCLCtCQUF6RCxDQUFOO0VBQ0Q7O0VBR0Q4QyxtQkFBbUIsQ0FBQ3lDLGFBQUQsQ0FBbkI7O0VBR0EsTUFBTUUsZUFBZSxHQUFHL0UsZUFBQSxDQUFFZ0YsWUFBRixDQUFlcEYsTUFBTSxDQUFDbUIsSUFBUCxDQUFZUCxJQUFaLENBQWYsRUFBa0NaLE1BQU0sQ0FBQ21CLElBQVAsQ0FBWThELGFBQVosQ0FBbEMsQ0FBeEI7O0VBQ0EsSUFBSUUsZUFBZSxDQUFDbEMsTUFBaEIsR0FBeUIsQ0FBN0IsRUFBZ0M7SUFDOUJFLGVBQUEsQ0FBSUMsSUFBSixDQUNHLDZCQUE0QnpELHdCQUF5Qix1QkFBdEQsR0FDRyxrQ0FBaUNjLElBQUksQ0FBQ0MsU0FBTCxDQUFleUUsZUFBZixDQUFnQyxFQUZ0RTtFQUlEOztFQUdEdkUsSUFBSSxHQUFHLEVBQUMsR0FBR0EsSUFBSjtJQUFVLEdBQUdxRTtFQUFiLENBQVA7RUFHQSxPQUFPckUsSUFBSSxDQUFDbEIsZUFBRCxDQUFYO0VBQ0EsT0FBT2tCLElBQVA7QUFDRCJ9
258
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBJVU1fVkVORE9SX1BSRUZJWCIsIkFQUElVTV9PUFRTX0NBUCIsIlBSRUZJWEVEX0FQUElVTV9PUFRTX0NBUCIsIm1lcmdlQ2FwcyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJyZXN1bHQiLCJPYmplY3QiLCJhc3NpZ24iLCJuYW1lIiwidmFsdWUiLCJfIiwidG9QYWlycyIsImlzVW5kZWZpbmVkIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwidmFsaWRhdGVDYXBzIiwiY2FwcyIsImNvbnN0cmFpbnRzIiwib3B0cyIsInNraXBQcmVzZW5jZUNvbnN0cmFpbnQiLCJpc1BsYWluT2JqZWN0IiwiY2xvbmVEZWVwIiwia2V5Iiwia2V5cyIsInByZXNlbmNlIiwidmFsaWRhdGlvbkVycm9ycyIsInZhbGlkYXRvciIsInZhbGlkYXRlIiwicGlja0J5IiwidXRpbCIsImhhc1ZhbHVlIiwiZnVsbE1lc3NhZ2VzIiwibWVzc2FnZSIsImF0dHJpYnV0ZSIsInJlYXNvbnMiLCJyZWFzb24iLCJwdXNoIiwiam9pbiIsIlNUQU5EQVJEX0NBUFMiLCJpc1N0YW5kYXJkQ2FwIiwiY2FwIiwiZmluZCIsInN0YW5kYXJkQ2FwIiwidG9Mb3dlckNhc2UiLCJzdHJpcEFwcGl1bVByZWZpeGVzIiwicHJlZml4IiwicHJlZml4ZWRDYXBzIiwiZmlsdGVyIiwic3RhcnRzV2l0aCIsImJhZFByZWZpeGVkQ2FwcyIsInByZWZpeGVkQ2FwIiwic3RyaXBwZWRDYXBOYW1lIiwic3Vic3RyIiwibGVuZ3RoIiwiaXNOaWwiLCJsb2ciLCJ3YXJuIiwiZmluZE5vblByZWZpeGVkQ2FwcyIsImFsd2F5c01hdGNoIiwiZmlyc3RNYXRjaCIsImNoYWluIiwicmVkdWNlIiwidW5wcmVmaXhlZENhcHMiLCJpbmNsdWRlcyIsInVuaXEiLCJwYXJzZUNhcHMiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJyZXF1aXJlZENhcHMiLCJhbGxGaXJzdE1hdGNoQ2FwcyIsImlzQXJyYXkiLCJub25QcmVmaXhlZENhcHMiLCJpc0VtcHR5IiwiZmlyc3RNYXRjaENhcHMiLCJmaWx0ZXJlZENvbnN0cmFpbnRzIiwicmVxdWlyZWRDYXBzS2V5cyIsInZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzIiwiY29tcGFjdCIsIm1hcCIsImUiLCJtYXRjaGVkQ2FwcyIsImVyciIsInByb2Nlc3NDYXBhYmlsaXRpZXMiLCJ3M2NDYXBzIiwicHJvbW90ZUFwcGl1bU9wdGlvbnMiLCJvcmlnaW5hbENhcHMiLCJhcHBpdW1PcHRpb25zIiwiU2Vzc2lvbk5vdENyZWF0ZWRFcnJvciIsIm92ZXJ3cml0dGVuS2V5cyIsImludGVyc2VjdGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NhcGFiaWxpdGllcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7dmFsaWRhdG9yfSBmcm9tICcuL2Rlc2lyZWQtY2Fwcyc7XG5pbXBvcnQge3V0aWx9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgbG9nIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7ZXJyb3JzfSBmcm9tICcuLi9wcm90b2NvbC9lcnJvcnMnO1xuXG5jb25zdCBBUFBJVU1fVkVORE9SX1BSRUZJWCA9ICdhcHBpdW06JztcbmNvbnN0IEFQUElVTV9PUFRTX0NBUCA9ICdvcHRpb25zJztcbmNvbnN0IFBSRUZJWEVEX0FQUElVTV9PUFRTX0NBUCA9IGAke0FQUElVTV9WRU5ET1JfUFJFRklYfSR7QVBQSVVNX09QVFNfQ0FQfWA7XG5cbi8vIFRha2VzIHByaW1hcnkgY2FwcyBvYmplY3QgYW5kIG1lcmdlcyBpdCBpbnRvIGEgc2Vjb25kYXJ5IGNhcHMgb2JqZWN0LlxuLy8gKHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZm4tbWVyZ2luZy1jYXBhYmlsaXRpZXMpXG4vKipcbiAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBbcHJpbWFyeV1cbiAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBbc2Vjb25kYXJ5XVxuICogQHJldHVybnMge0NhcGFiaWxpdGllc31cbiAqL1xuZnVuY3Rpb24gbWVyZ2VDYXBzKHByaW1hcnkgPSB7fSwgc2Vjb25kYXJ5ID0ge30pIHtcbiAgbGV0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIHByaW1hcnkpO1xuXG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgXy50b1BhaXJzKHNlY29uZGFyeSkpIHtcbiAgICAvLyBPdmVyd3JpdGluZyBpcyBub3QgYWxsb3dlZC4gUHJpbWFyeSBhbmQgc2Vjb25kYXJ5IG11c3QgaGF2ZSBkaWZmZXJlbnQgcHJvcGVydGllcyAodzNjIHJ1bGUgNC40KVxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwcmltYXJ5W25hbWVdKSkge1xuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgYHByb3BlcnR5ICcke25hbWV9JyBzaG91bGQgbm90IGV4aXN0IG9uIGJvdGggcHJpbWFyeSAoJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBwcmltYXJ5XG4gICAgICAgICl9KSBhbmQgc2Vjb25kYXJ5ICgke0pTT04uc3RyaW5naWZ5KHNlY29uZGFyeSl9KSBvYmplY3RgXG4gICAgICApO1xuICAgIH1cbiAgICByZXN1bHRbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFZhbGlkYXRlcyBjYXBzIGFnYWluc3QgYSBzZXQgb2YgY29uc3RyYWludHNcbi8qKlxuICpcbiAqIEBwYXJhbSB7Q2FwYWJpbGl0aWVzfSBjYXBzXG4gKiBAcGFyYW0ge0NvbnN0cmFpbnRzfSBbY29uc3RyYWludHNdXG4gKiBAcGFyYW0ge1ZhbGlkYXRlQ2Fwc09wdHN9IFtvcHRzXVxuICogQHJldHVybnMge0NhcGFiaWxpdGllc31cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDYXBzKGNhcHMsIGNvbnN0cmFpbnRzID0ge30sIG9wdHMgPSB7fSkge1xuICBsZXQge3NraXBQcmVzZW5jZUNvbnN0cmFpbnR9ID0gb3B0cztcblxuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoYG11c3QgYmUgYSBKU09OIG9iamVjdGApO1xuICB9XG5cbiAgY29uc3RyYWludHMgPSBfLmNsb25lRGVlcChjb25zdHJhaW50cyk7IC8vIERlZmVuc2l2ZSBjb3B5XG5cbiAgaWYgKHNraXBQcmVzZW5jZUNvbnN0cmFpbnQpIHtcbiAgICAvLyBSZW1vdmUgdGhlICdwcmVzZW5jZScgY29uc3RyYWludCBpZiB3ZSdyZSBub3QgY2hlY2tpbmcgZm9yIGl0XG4gICAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhjb25zdHJhaW50cykpIHtcbiAgICAgIGRlbGV0ZSBjb25zdHJhaW50c1trZXldLnByZXNlbmNlO1xuICAgIH1cbiAgfVxuXG4gIGxldCB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdG9yLnZhbGlkYXRlKF8ucGlja0J5KGNhcHMsIHV0aWwuaGFzVmFsdWUpLCBjb25zdHJhaW50cywge1xuICAgIGZ1bGxNZXNzYWdlczogZmFsc2UsXG4gIH0pO1xuXG4gIGlmICh2YWxpZGF0aW9uRXJyb3JzKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSBbXTtcbiAgICBmb3IgKGxldCBbYXR0cmlidXRlLCByZWFzb25zXSBvZiBfLnRvUGFpcnModmFsaWRhdGlvbkVycm9ycykpIHtcbiAgICAgIGZvciAobGV0IHJlYXNvbiBvZiByZWFzb25zKSB7XG4gICAgICAgIG1lc3NhZ2UucHVzaChgJyR7YXR0cmlidXRlfScgJHtyZWFzb259YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IobWVzc2FnZS5qb2luKCc7ICcpKTtcbiAgfVxuXG4gIC8vIFJldHVybiBjYXBzXG4gIHJldHVybiBjYXBzO1xufVxuXG4vLyBTdGFuZGFyZCwgbm9uLXByZWZpeGVkIGNhcGFiaWxpdGllcyAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi10YWJsZS1vZi1zdGFuZGFyZC1jYXBhYmlsaXRpZXMpXG5jb25zdCBTVEFOREFSRF9DQVBTID0gW1xuICAnYnJvd3Nlck5hbWUnLFxuICAnYnJvd3NlclZlcnNpb24nLFxuICAncGxhdGZvcm1OYW1lJyxcbiAgJ2FjY2VwdEluc2VjdXJlQ2VydHMnLFxuICAncGFnZUxvYWRTdHJhdGVneScsXG4gICdwcm94eScsXG4gICdzZXRXaW5kb3dSZWN0JyxcbiAgJ3RpbWVvdXRzJyxcbiAgJ3VuaGFuZGxlZFByb21wdEJlaGF2aW9yJyxcbl07XG5cbmZ1bmN0aW9uIGlzU3RhbmRhcmRDYXAoY2FwKSB7XG4gIHJldHVybiAhIV8uZmluZChcbiAgICBTVEFOREFSRF9DQVBTLFxuICAgIChzdGFuZGFyZENhcCkgPT4gc3RhbmRhcmRDYXAudG9Mb3dlckNhc2UoKSA9PT0gYCR7Y2FwfWAudG9Mb3dlckNhc2UoKVxuICApO1xufVxuXG4vLyBJZiB0aGUgJ2FwcGl1bTonIHByZWZpeCB3YXMgcHJvdmlkZWQgYW5kIGl0J3MgYSB2YWxpZCBjYXBhYmlsaXR5LCBzdHJpcCBvdXQgdGhlIHByZWZpeCAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2Rmbi1leHRlbnNpb24tY2FwYWJpbGl0aWVzKVxuLy8gKE5PVEU6IE1ldGhvZCBpcyBkZXN0cnVjdGl2ZSBhbmQgbXV0YXRlcyBjb250ZW50cyBvZiBjYXBzKVxuZnVuY3Rpb24gc3RyaXBBcHBpdW1QcmVmaXhlcyhjYXBzKSB7XG4gIGNvbnN0IHByZWZpeCA9ICdhcHBpdW06JztcbiAgY29uc3QgcHJlZml4ZWRDYXBzID0gXy5maWx0ZXIoXy5rZXlzKGNhcHMpLCAoY2FwKSA9PiBgJHtjYXB9YC5zdGFydHNXaXRoKHByZWZpeCkpO1xuICBjb25zdCBiYWRQcmVmaXhlZENhcHMgPSBbXTtcblxuICAvLyBTdHJpcCBvdXQgdGhlICdhcHBpdW06JyBwcmVmaXhcbiAgZm9yIChsZXQgcHJlZml4ZWRDYXAgb2YgcHJlZml4ZWRDYXBzKSB7XG4gICAgY29uc3Qgc3RyaXBwZWRDYXBOYW1lID0gcHJlZml4ZWRDYXAuc3Vic3RyKHByZWZpeC5sZW5ndGgpO1xuXG4gICAgLy8gSWYgaXQncyBzdGFuZGFyZCBjYXBhYmlsaXR5IHRoYXQgd2FzIHByZWZpeGVkLCBhZGQgaXQgdG8gYW4gYXJyYXkgb2YgaW5jb3JyZWN0bHkgcHJlZml4ZWQgY2FwYWJpbGl0aWVzXG4gICAgaWYgKGlzU3RhbmRhcmRDYXAoc3RyaXBwZWRDYXBOYW1lKSkge1xuICAgICAgYmFkUHJlZml4ZWRDYXBzLnB1c2goc3RyaXBwZWRDYXBOYW1lKTtcbiAgICAgIGlmIChfLmlzTmlsKGNhcHNbc3RyaXBwZWRDYXBOYW1lXSkpIHtcbiAgICAgICAgY2Fwc1tzdHJpcHBlZENhcE5hbWVdID0gY2Fwc1twcmVmaXhlZENhcF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cud2FybihcbiAgICAgICAgICBgSWdub3JpbmcgY2FwYWJpbGl0eSAnJHtwcmVmaXhlZENhcH09JHtjYXBzW3ByZWZpeGVkQ2FwXX0nIGFuZCBgICtcbiAgICAgICAgICAgIGB1c2luZyBjYXBhYmlsaXR5ICcke3N0cmlwcGVkQ2FwTmFtZX09JHtjYXBzW3N0cmlwcGVkQ2FwTmFtZV19J2BcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2Fwc1tzdHJpcHBlZENhcE5hbWVdID0gY2Fwc1twcmVmaXhlZENhcF07XG4gICAgfVxuXG4gICAgLy8gU3RyaXAgb3V0IHRoZSBwcmVmaXhcbiAgICBkZWxldGUgY2Fwc1twcmVmaXhlZENhcF07XG4gIH1cblxuICAvLyBJZiB3ZSBmb3VuZCBzdGFuZGFyZCBjYXBzIHRoYXQgd2VyZSBpbmNvcnJlY3RseSBwcmVmaXhlZCwgdGhyb3cgYW4gZXhjZXB0aW9uIChlLmcuOiBkb24ndCBhY2NlcHQgJ2FwcGl1bTpwbGF0Zm9ybU5hbWUnLCBvbmx5IGFjY2VwdCBqdXN0ICdwbGF0Zm9ybU5hbWUnKVxuICBpZiAoYmFkUHJlZml4ZWRDYXBzLmxlbmd0aCA+IDApIHtcbiAgICBsb2cud2FybihcbiAgICAgIGBUaGUgY2FwYWJpbGl0aWVzICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGJhZFByZWZpeGVkQ2Fwc1xuICAgICAgKX0gYXJlIHN0YW5kYXJkIGNhcGFiaWxpdGllcyBhbmQgZG8gbm90IHJlcXVpcmUgXCJhcHBpdW06XCIgcHJlZml4YFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgYW4gYXJyYXkgb2YgYWxsIHRoZSB1bnByZWZpeGVkIGNhcHMgdGhhdCBhcmUgYmVpbmcgdXNlZCBpbiAnYWx3YXlzTWF0Y2gnIGFuZCBhbGwgb2YgdGhlICdmaXJzdE1hdGNoJyBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYXBzIEEgY2FwYWJpbGl0aWVzIG9iamVjdFxuICovXG5mdW5jdGlvbiBmaW5kTm9uUHJlZml4ZWRDYXBzKHthbHdheXNNYXRjaCA9IHt9LCBmaXJzdE1hdGNoID0gW119KSB7XG4gIHJldHVybiBfLmNoYWluKFthbHdheXNNYXRjaCwgLi4uZmlyc3RNYXRjaF0pXG4gICAgLnJlZHVjZShcbiAgICAgICh1bnByZWZpeGVkQ2FwcywgY2FwcykgPT4gW1xuICAgICAgICAuLi51bnByZWZpeGVkQ2FwcyxcbiAgICAgICAgLi4uT2JqZWN0LmtleXMoY2FwcykuZmlsdGVyKChjYXApID0+ICFjYXAuaW5jbHVkZXMoJzonKSAmJiAhaXNTdGFuZGFyZENhcChjYXApKSxcbiAgICAgIF0sXG4gICAgICBbXVxuICAgIClcbiAgICAudW5pcSgpXG4gICAgLnZhbHVlKCk7XG59XG5cbi8vIFBhcnNlIGNhcGFiaWxpdGllcyAoYmFzZWQgb24gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmRyaXZlci8jcHJvY2Vzc2luZy1jYXBhYmlsaXRpZXMpXG4vKipcbiAqXG4gKiBAcGFyYW0ge1czQ0NhcGFiaWxpdGllc30gY2Fwc1xuICogQHBhcmFtIHtDb25zdHJhaW50c30gW2NvbnN0cmFpbnRzXVxuICogQHBhcmFtIHtib29sZWFufSBbc2hvdWxkVmFsaWRhdGVDYXBzXVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcGFyc2VDYXBzKGNhcHMsIGNvbnN0cmFpbnRzID0ge30sIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgLy8gSWYgY2FwYWJpbGl0aWVzIHJlcXVlc3QgaXMgbm90IGFuIG9iamVjdCwgcmV0dXJuIGVycm9yICgjMS4xKVxuICBpZiAoIV8uaXNQbGFpbk9iamVjdChjYXBzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAnVGhlIGNhcGFiaWxpdGllcyBhcmd1bWVudCB3YXMgbm90IHZhbGlkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbihzKTogXCJjYXBhYmlsaXRpZXNcIiBtdXN0IGJlIGEgSlNPTiBvYmplY3QuJ1xuICAgICk7XG4gIH1cblxuICAvLyBMZXQgJ3JlcXVpcmVkQ2FwcycgYmUgcHJvcGVydHkgbmFtZWQgJ2Fsd2F5c01hdGNoJyBmcm9tIGNhcGFiaWxpdGllcyByZXF1ZXN0ICgjMilcbiAgLy8gYW5kICdhbGxGaXJzdE1hdGNoQ2FwcycgYmUgcHJvcGVydHkgbmFtZWQgJ2ZpcnN0TWF0Y2gnIGZyb20gY2FwYWJpbGl0aWVzIHJlcXVlc3QgKCMzKVxuICBsZXQge1xuICAgIGFsd2F5c01hdGNoOiByZXF1aXJlZENhcHMgPSB7fSwgLy8gSWYgJ3JlcXVpcmVkQ2FwcycgaXMgdW5kZWZpbmVkLCBzZXQgaXQgdG8gYW4gZW1wdHkgSlNPTiBvYmplY3QgKCMyLjEpXG4gICAgZmlyc3RNYXRjaDogYWxsRmlyc3RNYXRjaENhcHMgPSBbe31dLCAvLyBJZiAnZmlyc3RNYXRjaCcgaXMgdW5kZWZpbmVkIHNldCBpdCB0byBhIHNpbmdsZXRvbiBsaXN0IHdpdGggb25lIGVtcHR5IG9iamVjdCAoIzMuMSlcbiAgfSA9IGNhcHM7XG5cbiAgLy8gUmVqZWN0ICdmaXJzdE1hdGNoJyBhcmd1bWVudCBpZiBpdCdzIG5vdCBhbiBhcnJheSAoIzMuMilcbiAgaWYgKCFfLmlzQXJyYXkoYWxsRmlyc3RNYXRjaENhcHMpKSB7XG4gICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICdUaGUgY2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2ggYXJndW1lbnQgd2FzIG5vdCB2YWxpZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb24ocyk6IFwiY2FwYWJpbGl0aWVzLmZpcnN0TWF0Y2hcIiBtdXN0IGJlIGEgSlNPTiBhcnJheSBvciB1bmRlZmluZWQnXG4gICAgKTtcbiAgfVxuXG4gIC8vIElmIGFuIGVtcHR5IGFycmF5IGFzIHByb3ZpZGVkLCB3ZSdsbCBiZSBmb3JnaXZpbmcgYW5kIG1ha2UgaXQgYW4gYXJyYXkgb2Ygb25lIGVtcHR5IG9iamVjdFxuICAvLyBJbiB0aGUgZnV0dXJlLCByZWplY3QgJ2ZpcnN0TWF0Y2gnIGFyZ3VtZW50IGlmIGl0cyBhcnJheSBkaWQgbm90IGhhdmUgb25lIG9yIG1vcmUgZW50cmllcyAoIzMuMilcbiAgaWYgKGFsbEZpcnN0TWF0Y2hDYXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZy53YXJuKFxuICAgICAgYFRoZSBmaXJzdE1hdGNoIGFycmF5IGluIHRoZSBnaXZlbiBjYXBhYmlsaXRpZXMgaGFzIG5vIGVudHJpZXMuIEFkZGluZyBhbiBlbXB0eSBlbnRyeSBmbyBybm93LCBgICtcbiAgICAgICAgYGJ1dCBpdCB3aWxsIHJlcXVpcmUgb25lIG9yIG1vcmUgZW50cmllcyBhcyBXM0Mgc3BlYy5gXG4gICAgKTtcbiAgICBhbGxGaXJzdE1hdGNoQ2Fwcy5wdXNoKHt9KTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBub24tcHJlZml4ZWQsIG5vbi1zdGFuZGFyZCBjYXBhYmlsaXRpZXMgYW5kIGxvZyB3YXJuaW5ncyBpZiB0aGV5IGFyZSBmb3VuZFxuICBsZXQgbm9uUHJlZml4ZWRDYXBzID0gZmluZE5vblByZWZpeGVkQ2FwcyhjYXBzKTtcbiAgaWYgKCFfLmlzRW1wdHkobm9uUHJlZml4ZWRDYXBzKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICBgQWxsIG5vbi1zdGFuZGFyZCBjYXBhYmlsaXRpZXMgc2hvdWxkIGhhdmUgYSB2ZW5kb3IgcHJlZml4LiBUaGUgZm9sbG93aW5nIGNhcGFiaWxpdGllcyBkaWQgbm90IGhhdmUgb25lOiAke25vblByZWZpeGVkQ2Fwc31gXG4gICAgKTtcbiAgfVxuXG4gIC8vIFN0cmlwIG91dCB0aGUgJ2FwcGl1bTonIHByZWZpeCBmcm9tIGFsbFxuICBzdHJpcEFwcGl1bVByZWZpeGVzKHJlcXVpcmVkQ2Fwcyk7XG4gIGZvciAobGV0IGZpcnN0TWF0Y2hDYXBzIG9mIGFsbEZpcnN0TWF0Y2hDYXBzKSB7XG4gICAgc3RyaXBBcHBpdW1QcmVmaXhlcyhmaXJzdE1hdGNoQ2Fwcyk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB0aGUgcmVxdWlyZWRDYXBzLiBCdXQgZG9uJ3QgdmFsaWRhdGUgJ3ByZXNlbmNlJyBiZWNhdXNlIGlmIHRoYXQgY29uc3RyYWludCBmYWlscyBvbiAnYWx3YXlzTWF0Y2gnIGl0IGNvdWxkIHN0aWxsIHBhc3Mgb24gb25lIG9mIHRoZSAnZmlyc3RNYXRjaCcga2V5c1xuICBpZiAoc2hvdWxkVmFsaWRhdGVDYXBzKSB7XG4gICAgcmVxdWlyZWRDYXBzID0gdmFsaWRhdGVDYXBzKHJlcXVpcmVkQ2FwcywgY29uc3RyYWludHMsIHtcbiAgICAgIHNraXBQcmVzZW5jZUNvbnN0cmFpbnQ6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBSZW1vdmUgdGhlICdwcmVzZW5jZScgY29uc3RyYWludCBmb3IgYW55IGtleXMgdGhhdCBhcmUgYWxyZWFkeSBwcmVzZW50IGluICdyZXF1aXJlZENhcHMnXG4gIC8vIHNpbmNlIHdlIGtub3cgdGhhdCB0aGlzIGNvbnN0cmFpbnQgaGFzIGFscmVhZHkgcGFzc2VkXG4gIGxldCBmaWx0ZXJlZENvbnN0cmFpbnRzID0gey4uLmNvbnN0cmFpbnRzfTtcbiAgbGV0IHJlcXVpcmVkQ2Fwc0tleXMgPSBfLmtleXMocmVxdWlyZWRDYXBzKTtcbiAgZm9yIChsZXQga2V5IG9mIF8ua2V5cyhmaWx0ZXJlZENvbnN0cmFpbnRzKSkge1xuICAgIGlmIChyZXF1aXJlZENhcHNLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGRlbGV0ZSBmaWx0ZXJlZENvbnN0cmFpbnRzW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgYWxsIG9mIHRoZSBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMgYW5kIHJldHVybiBhbiBhcnJheSB3aXRoIG9ubHkgdGhlIHZhbGlkIGNhcHMgKHNlZSBzcGVjICM1KVxuICBsZXQgdmFsaWRhdGlvbkVycm9ycyA9IFtdO1xuICAvKiogQHR5cGUge0NhcGFiaWxpdGllc1tdfSAqL1xuICBsZXQgdmFsaWRhdGVkRmlyc3RNYXRjaENhcHMgPSBfLmNvbXBhY3QoXG4gICAgYWxsRmlyc3RNYXRjaENhcHMubWFwKChmaXJzdE1hdGNoQ2FwcykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVmFsaWRhdGUgZmlyc3RNYXRjaCBjYXBzXG4gICAgICAgIHJldHVybiBzaG91bGRWYWxpZGF0ZUNhcHNcbiAgICAgICAgICA/IHZhbGlkYXRlQ2FwcyhmaXJzdE1hdGNoQ2FwcywgZmlsdGVyZWRDb25zdHJhaW50cylcbiAgICAgICAgICA6IGZpcnN0TWF0Y2hDYXBzO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB2YWxpZGF0aW9uRXJyb3JzLnB1c2goZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9KVxuICApO1xuXG4gIC8vIFRyeSB0byBtZXJnZSByZXF1aXJlZENhcHMgd2l0aCBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMsIGJyZWFrIG9uY2UgaXQgZmluZHMgaXRzIGZpcnN0IG1hdGNoIChzZWUgc3BlYyAjNilcbiAgbGV0IG1hdGNoZWRDYXBzID0gbnVsbDtcbiAgZm9yIChsZXQgZmlyc3RNYXRjaENhcHMgb2YgdmFsaWRhdGVkRmlyc3RNYXRjaENhcHMpIHtcbiAgICB0cnkge1xuICAgICAgbWF0Y2hlZENhcHMgPSBtZXJnZUNhcHMocmVxdWlyZWRDYXBzLCBmaXJzdE1hdGNoQ2Fwcyk7XG4gICAgICBpZiAobWF0Y2hlZENhcHMpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBsb2cud2FybihlcnIubWVzc2FnZSk7XG4gICAgICB2YWxpZGF0aW9uRXJyb3JzLnB1c2goZXJyLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgdmFyaWFibGVzIGZvciB0ZXN0aW5nIHB1cnBvc2VzXG4gIHJldHVybiB7XG4gICAgcmVxdWlyZWRDYXBzLFxuICAgIGFsbEZpcnN0TWF0Y2hDYXBzLFxuICAgIHZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBzLFxuICAgIG1hdGNoZWRDYXBzLFxuICAgIHZhbGlkYXRpb25FcnJvcnMsXG4gIH07XG59XG5cbi8vIENhbGxzIHBhcnNlQ2FwcyBhbmQganVzdCByZXR1cm5zIHRoZSBtYXRjaGVkQ2FwcyB2YXJpYWJsZVxuLyoqXG4gKlxuICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IHczY0NhcHNcbiAqIEBwYXJhbSB7Q29uc3RyYWludHN9IFtjb25zdHJhaW50c11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Nob3VsZFZhbGlkYXRlQ2Fwc11cbiAqIEByZXR1cm5zIHtDYXBhYmlsaXRpZXN9XG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NDYXBhYmlsaXRpZXModzNjQ2FwcywgY29uc3RyYWludHMgPSB7fSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICBjb25zdCB7bWF0Y2hlZENhcHMsIHZhbGlkYXRpb25FcnJvcnN9ID0gcGFyc2VDYXBzKHczY0NhcHMsIGNvbnN0cmFpbnRzLCBzaG91bGRWYWxpZGF0ZUNhcHMpO1xuXG4gIC8vIElmIHdlIGZvdW5kIGFuIGVycm9yIHRocm93IGFuIGV4Y2VwdGlvblxuICBpZiAoIXV0aWwuaGFzVmFsdWUobWF0Y2hlZENhcHMpKSB7XG4gICAgaWYgKF8uaXNBcnJheSh3M2NDYXBzLmZpcnN0TWF0Y2gpICYmIHczY0NhcHMuZmlyc3RNYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBJZiB0aGVyZSB3YXMgbW9yZSB0aGFuIG9uZSAnZmlyc3RNYXRjaCcgY2FwLCBpbmRpY2F0ZSB0aGF0IHdlIGNvdWxkbid0IGZpbmQgYSBtYXRjaGluZyBjYXBhYmlsaXRpZXMgc2V0IGFuZCBzaG93IGFsbCB0aGUgZXJyb3JzXG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgbWF0Y2hpbmcgY2FwYWJpbGl0aWVzIGZyb20gJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICB3M2NDYXBzXG4gICAgICAgICl9OlxcbiAke3ZhbGlkYXRpb25FcnJvcnMuam9pbignXFxuJyl9YFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlLCBqdXN0IHNob3cgdGhlIHNpbmd1bGFyIGVycm9yIG1lc3NhZ2VcbiAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IodmFsaWRhdGlvbkVycm9yc1swXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRDYXBzID8/IHt9O1xufVxuXG4vKipcbiAqIFJldHVybiBhIGNvcHkgb2YgYSBjYXBhYmlsaXRpZXMgb2JqZWN0IHdoaWNoIGhhcyB0YWtlbiBldmVyeXRoaW5nIHdpdGhpbiB0aGUgJ29wdGlvbnMnXG4gKiBjYXBhYmlsaXR5IGFuZCBwcm9tb3RlZCBpdCB0byB0aGUgdG9wIGxldmVsLiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBhc3N1bWVkIHRvIGJlIHJ1biBhZnRlclxuICogYWxsIHZlbmRvciBwcmVmaXhlcyBoYXZlIGFscmVhZHkgYmVlbiBzdHJpcHBlZCBmcm9tIHRoZSB0b3AgbGV2ZWwuIFNvIHdlIGFyZSBkZWFsaW5nIHdpdGggZS5nLlxuICogJ29wdGlvbnMnIGFuZCBub3QgJ2FwcGl1bTpvcHRpb25zJyBhdCB0aGlzIHBvaW50LiBBbnkgcHJlZml4ZXMgX2luc2lkZV8gdGhlICdvcHRpb25zJyBjYXBhYmlsaXR5XG4gKiB3aWxsIHRoZW1zZWx2ZXMgYmUgc3RyaXBwZWQuIFRoaXMgaXMgZGVzaWduZWQgYXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIG5vdCBvbmUgdG8gb3BlcmF0ZSBvblxuICogdXNlci1jb25zdHJ1Y3RlZCBjYXBhYmlsaXRpZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9yaWdpbmFsQ2FwcyAtIHRoZSBjYXBhYmlsaXRpZXMgdG8gYW5hbHl6ZSBhbmQgcHJvbW90ZSBmcm9tICdvcHRpb25zJ1xuICogQHJldHVybiB7b2JqZWN0IX0gLSB0aGUgY2FwYWJpbGl0aWVzIHdpdGggJ29wdGlvbnMnIHByb21vdGVkIGlmIG5lY2Vzc2FyeVxuICovXG5mdW5jdGlvbiBwcm9tb3RlQXBwaXVtT3B0aW9ucyhvcmlnaW5hbENhcHMpIHtcbiAgY29uc3QgYXBwaXVtT3B0aW9ucyA9IG9yaWdpbmFsQ2Fwc1tBUFBJVU1fT1BUU19DQVBdO1xuICBpZiAoIWFwcGl1bU9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3JpZ2luYWxDYXBzO1xuICB9XG5cbiAgbGV0IGNhcHMgPSBfLmNsb25lRGVlcChvcmlnaW5hbENhcHMpO1xuICBpZiAoIV8uaXNQbGFpbk9iamVjdChhcHBpdW1PcHRpb25zKSkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihgVGhlICR7QVBQSVVNX09QVFNfQ0FQfSBjYXBhYmlsaXR5IG11c3QgYmUgYW4gb2JqZWN0YCk7XG4gIH1cblxuICAvLyBmaXJzdCBnZXQgcmlkIG9mIGFueSBwcmVmaXhlcyBpbnNpZGUgYXBwaXVtOm9wdGlvbnNcbiAgc3RyaXBBcHBpdW1QcmVmaXhlcyhhcHBpdW1PcHRpb25zKTtcblxuICAvLyB3YXJuIGlmIHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgYW55IGtleXMgb24gdGhlIGJhc2UgY2FwcyBvYmplY3RcbiAgY29uc3Qgb3ZlcndyaXR0ZW5LZXlzID0gXy5pbnRlcnNlY3Rpb24oT2JqZWN0LmtleXMoY2FwcyksIE9iamVjdC5rZXlzKGFwcGl1bU9wdGlvbnMpKTtcbiAgaWYgKG92ZXJ3cml0dGVuS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgbG9nLndhcm4oXG4gICAgICBgRm91bmQgY2FwYWJpbGl0aWVzIGluc2lkZSAke1BSRUZJWEVEX0FQUElVTV9PUFRTX0NBUH0gdGhhdCB3aWxsIG92ZXJ3cml0ZSBgICtcbiAgICAgICAgYGNhcGFiaWxpdGllcyBhdCB0aGUgdG9wIGxldmVsOiAke0pTT04uc3RyaW5naWZ5KG92ZXJ3cml0dGVuS2V5cyl9YFxuICAgICk7XG4gIH1cblxuICAvLyBub3cganVzdCBhcHBseSB0aGVtIHRvIHRoZSBtYWluIGNhcHMgb2JqZWN0XG4gIGNhcHMgPSB7Li4uY2FwcywgLi4uYXBwaXVtT3B0aW9uc307XG5cbiAgLy8gYW5kIHJlbW92ZSBhbGwgdHJhY2VzIG9mIHRoZSBvcHRpb25zIGNhcFxuICBkZWxldGUgY2Fwc1tBUFBJVU1fT1BUU19DQVBdO1xuICByZXR1cm4gY2Fwcztcbn1cblxuZXhwb3J0IHtcbiAgcGFyc2VDYXBzLFxuICBwcm9jZXNzQ2FwYWJpbGl0aWVzLFxuICB2YWxpZGF0ZUNhcHMsXG4gIG1lcmdlQ2FwcyxcbiAgQVBQSVVNX1ZFTkRPUl9QUkVGSVgsXG4gIEFQUElVTV9PUFRTX0NBUCxcbiAgZmluZE5vblByZWZpeGVkQ2FwcyxcbiAgaXNTdGFuZGFyZENhcCxcbiAgc3RyaXBBcHBpdW1QcmVmaXhlcyxcbiAgcHJvbW90ZUFwcGl1bU9wdGlvbnMsXG4gIFBSRUZJWEVEX0FQUElVTV9PUFRTX0NBUCxcbn07XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlczQ0NhcGFiaWxpdGllc30gVzNDQ2FwYWJpbGl0aWVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29uc3RyYWludHN9IENvbnN0cmFpbnRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ2FwYWJpbGl0aWVzfSBDYXBhYmlsaXRpZXNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFZhbGlkYXRlQ2Fwc09wdHNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3NraXBQcmVzZW5jZUNvbnN0cmFpbnRdIC0gaWYgdHJ1ZSwgc2tpcCB0aGUgcHJlc2VuY2UgY29uc3RyYWludFxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxvQkFBb0IsR0FBRyxTQUE3Qjs7QUFDQSxNQUFNQyxlQUFlLEdBQUcsU0FBeEI7O0FBQ0EsTUFBTUMsd0JBQXdCLEdBQUksR0FBRUYsb0JBQXFCLEdBQUVDLGVBQWdCLEVBQTNFOzs7QUFTQSxTQUFTRSxTQUFULENBQW1CQyxPQUFPLEdBQUcsRUFBN0IsRUFBaUNDLFNBQVMsR0FBRyxFQUE3QyxFQUFpRDtFQUMvQyxJQUFJQyxNQUFNLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JKLE9BQWxCLENBQWI7O0VBRUEsS0FBSyxJQUFJLENBQUNLLElBQUQsRUFBT0MsS0FBUCxDQUFULElBQTBCQyxlQUFBLENBQUVDLE9BQUYsQ0FBVVAsU0FBVixDQUExQixFQUFnRDtJQUU5QyxJQUFJLENBQUNNLGVBQUEsQ0FBRUUsV0FBRixDQUFjVCxPQUFPLENBQUNLLElBQUQsQ0FBckIsQ0FBTCxFQUFtQztNQUNqQyxNQUFNLElBQUlLLGNBQUEsQ0FBT0Msb0JBQVgsQ0FDSCxhQUFZTixJQUFLLHVDQUFzQ08sSUFBSSxDQUFDQyxTQUFMLENBQ3REYixPQURzRCxDQUV0RCxvQkFBbUJZLElBQUks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
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @param {SessionBase} Base
3
+ * @returns {ExecuteBase}
4
+ */
5
+ export function ExecuteMixin(Base: SessionBase): ExecuteBase;
6
+ export type IExecuteCommands = import('@appium/types').ExecuteCommands;
7
+ export type Driver = import('@appium/types').Driver;
8
+ export type DriverClass = import('@appium/types').DriverClass;
9
+ export type SessionBase = import('./session').SessionBase;
10
+ export type ExecuteBase = import('../driver').BaseDriverBase<import('@appium/types').TimeoutCommands & import('@appium/types').EventCommands & import('@appium/types').FindCommands & import('@appium/types').LogCommands & import('@appium/types').SettingsCommands & import('@appium/types').SessionCommands & IExecuteCommands>;
11
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../lib/basedriver/commands/execute.js"],"names":[],"mappings":"AAGA;;;GAGG;AACH,mCAHW,WAAW,GACT,WAAW,CAmDvB;+BAGY,OAAO,eAAe,EAAE,eAAe;qBACvC,OAAO,eAAe,EAAE,MAAM;0BAC9B,OAAO,eAAe,EAAE,WAAW;0BACnC,OAAO,WAAW,EAAE,WAAW;0BAC/B,OAAO,WAAW,EAAE,cAAc,CAAC,OAAO,eAAe,EAAE,eAAe,GAAG,OAAO,eAAe,EAAE,aAAa,GAAG,OAAO,eAAe,EAAE,YAAY,GAAG,OAAO,eAAe,EAAE,WAAW,GAAG,OAAO,eAAe,EAAE,gBAAgB,GAAG,OAAO,eAAe,EAAE,eAAe,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ExecuteMixin = ExecuteMixin;
9
+
10
+ require("source-map-support/register");
11
+
12
+ var _lodash = _interopRequireDefault(require("lodash"));
13
+
14
+ var _protocol = require("../../protocol");
15
+
16
+ function ExecuteMixin(Base) {
17
+ class ExecuteCommands extends Base {
18
+ async executeMethod(script, protoArgs) {
19
+ if (!protoArgs || !_lodash.default.isArray(protoArgs) || protoArgs.length > 1) {
20
+ throw new _protocol.errors.InvalidArgumentError(`Did not get correct format of arguments for execute method. Expected zero or one ` + `arguments to execute script and instead received: ${JSON.stringify(protoArgs)}`);
21
+ }
22
+
23
+ let args = protoArgs[0] ?? {};
24
+
25
+ if (!_lodash.default.isPlainObject(args)) {
26
+ throw new _protocol.errors.InvalidArgumentError(`Did not receive an appropriate execute method parameters object. It needs to be ` + `deserializable as a plain JS object`);
27
+ }
28
+
29
+ const Driver = this.constructor;
30
+
31
+ const availableScripts = _lodash.default.keys(Driver.executeMethodMap);
32
+
33
+ const commandMetadata = Driver.executeMethodMap[script];
34
+
35
+ if (!commandMetadata) {
36
+ throw new _protocol.errors.UnsupportedOperationError(`Unsupported execute method '${script}'. Available methods ` + `are: ${availableScripts.join(', ')}`);
37
+ }
38
+
39
+ let argsToApply = [];
40
+
41
+ if (!commandMetadata.params) {
42
+ commandMetadata.params = {
43
+ required: [],
44
+ optional: []
45
+ };
46
+ } else {
47
+ var _commandMetadata$para, _commandMetadata$para2;
48
+
49
+ (_commandMetadata$para = commandMetadata.params).required ?? (_commandMetadata$para.required = []);
50
+ (_commandMetadata$para2 = commandMetadata.params).optional ?? (_commandMetadata$para2.optional = []);
51
+ (0, _protocol.checkParams)(commandMetadata.params, args, null);
52
+ }
53
+
54
+ argsToApply = (0, _protocol.makeArgs)({}, args, commandMetadata.params, null);
55
+ return await this[Driver.executeMethodMap[script].command](...argsToApply);
56
+ }
57
+
58
+ }
59
+
60
+ return ExecuteCommands;
61
+ }
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeGVjdXRlTWl4aW4iLCJCYXNlIiwiRXhlY3V0ZUNvbW1hbmRzIiwiZXhlY3V0ZU1ldGhvZCIsInNjcmlwdCIsInByb3RvQXJncyIsIl8iLCJpc0FycmF5IiwibGVuZ3RoIiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiYXJncyIsImlzUGxhaW5PYmplY3QiLCJEcml2ZXIiLCJjb25zdHJ1Y3RvciIsImF2YWlsYWJsZVNjcmlwdHMiLCJrZXlzIiwiZXhlY3V0ZU1ldGhvZE1hcCIsImNvbW1hbmRNZXRhZGF0YSIsIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IiLCJqb2luIiwiYXJnc1RvQXBwbHkiLCJwYXJhbXMiLCJyZXF1aXJlZCIsIm9wdGlvbmFsIiwiY2hlY2tQYXJhbXMiLCJtYWtlQXJncyIsImNvbW1hbmQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvYmFzZWRyaXZlci9jb21tYW5kcy9leGVjdXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge2Vycm9ycywgbWFrZUFyZ3MsIGNoZWNrUGFyYW1zfSBmcm9tICcuLi8uLi9wcm90b2NvbCc7XG5cbi8qKlxuICogQHBhcmFtIHtTZXNzaW9uQmFzZX0gQmFzZVxuICogQHJldHVybnMge0V4ZWN1dGVCYXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gRXhlY3V0ZU1peGluKEJhc2UpIHtcbiAgLyoqXG4gICAqIEBpbXBsZW1lbnRzIHtJRXhlY3V0ZUNvbW1hbmRzfVxuICAgKi9cbiAgY2xhc3MgRXhlY3V0ZUNvbW1hbmRzIGV4dGVuZHMgQmFzZSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNjcmlwdFxuICAgICAqIEBwYXJhbSB7W1JlY29yZDxzdHJpbmcsIGFueT5dfFtdfSBwcm90b0FyZ3NcbiAgICAgKi9cbiAgICBhc3luYyBleGVjdXRlTWV0aG9kKHNjcmlwdCwgcHJvdG9BcmdzKSB7XG4gICAgICAvLyB0aGUgdzNjIHByb3RvY29sIHdpbGwgZ2l2ZSB1cyBhbiBhcnJheSBvZiBhcmd1bWVudHMgdG8gYXBwbHkgdG8gYSBqYXZhc2NyaXB0IGZ1bmN0aW9uLlxuICAgICAgLy8gdGhhdCdzIG5vdCB3aGF0IHdlJ3JlIGRvaW5nLiB3ZSdyZSBnb2luZyB0byBsb29rIGZvciBhIEpTIG9iamVjdCBhcyB0aGUgZmlyc3QgYXJnLCBzbyB3ZVxuICAgICAgLy8gY2FuIHBlcmZvcm0gdmFsaWRhdGlvbiBvbiBpdC4gd2UnbGwgaWdub3JlIGV2ZXJ5dGhpbmcgZWxzZS5cbiAgICAgIGlmICghcHJvdG9BcmdzIHx8ICFfLmlzQXJyYXkocHJvdG9BcmdzKSB8fCBwcm90b0FyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRBcmd1bWVudEVycm9yKFxuICAgICAgICAgIGBEaWQgbm90IGdldCBjb3JyZWN0IGZvcm1hdCBvZiBhcmd1bWVudHMgZm9yIGV4ZWN1dGUgbWV0aG9kLiBFeHBlY3RlZCB6ZXJvIG9yIG9uZSBgICtcbiAgICAgICAgICAgIGBhcmd1bWVudHMgdG8gZXhlY3V0ZSBzY3JpcHQgYW5kIGluc3RlYWQgcmVjZWl2ZWQ6ICR7SlNPTi5zdHJpbmdpZnkocHJvdG9BcmdzKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBsZXQgYXJncyA9IHByb3RvQXJnc1swXSA/PyB7fTtcbiAgICAgIGlmICghXy5pc1BsYWluT2JqZWN0KGFyZ3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYERpZCBub3QgcmVjZWl2ZSBhbiBhcHByb3ByaWF0ZSBleGVjdXRlIG1ldGhvZCBwYXJhbWV0ZXJzIG9iamVjdC4gSXQgbmVlZHMgdG8gYmUgYCArXG4gICAgICAgICAgICBgZGVzZXJpYWxpemFibGUgYXMgYSBwbGFpbiBKUyBvYmplY3RgXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IERyaXZlciA9IC8qKiBAdHlwZSB7RHJpdmVyQ2xhc3N9ICovICh0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVNjcmlwdHMgPSBfLmtleXMoRHJpdmVyLmV4ZWN1dGVNZXRob2RNYXApO1xuICAgICAgY29uc3QgY29tbWFuZE1ldGFkYXRhID0gRHJpdmVyLmV4ZWN1dGVNZXRob2RNYXBbc2NyaXB0XTtcbiAgICAgIGlmICghY29tbWFuZE1ldGFkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcbiAgICAgICAgICBgVW5zdXBwb3J0ZWQgZXhlY3V0ZSBtZXRob2QgJyR7c2NyaXB0fScuIEF2YWlsYWJsZSBtZXRob2RzIGAgK1xuICAgICAgICAgICAgYGFyZTogJHthdmFpbGFibGVTY3JpcHRzLmpvaW4oJywgJyl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbGV0IGFyZ3NUb0FwcGx5ID0gW107XG4gICAgICBpZiAoIWNvbW1hbmRNZXRhZGF0YS5wYXJhbXMpIHtcbiAgICAgICAgY29tbWFuZE1ldGFkYXRhLnBhcmFtcyA9IHtyZXF1aXJlZDogW10sIG9wdGlvbmFsOiBbXX07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21tYW5kTWV0YWRhdGEucGFyYW1zLnJlcXVpcmVkID8/PSBbXTtcbiAgICAgICAgY29tbWFuZE1ldGFkYXRhLnBhcmFtcy5vcHRpb25hbCA/Pz0gW107XG4gICAgICAgIGNoZWNrUGFyYW1zKGNvbW1hbmRNZXRhZGF0YS5wYXJhbXMsIGFyZ3MsIG51bGwpO1xuICAgICAgfVxuICAgICAgYXJnc1RvQXBwbHkgPSBtYWtlQXJncyh7fSwgYXJncywgY29tbWFuZE1ldGFkYXRhLnBhcmFtcywgbnVsbCk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpc1tEcml2ZXIuZXhlY3V0ZU1ldGhvZE1hcFtzY3JpcHRdLmNvbW1hbmRdKC4uLmFyZ3NUb0FwcGx5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEV4ZWN1dGVDb21tYW5kcztcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRXhlY3V0ZUNvbW1hbmRzfSBJRXhlY3V0ZUNvbW1hbmRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyfSBEcml2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJDbGFzc30gRHJpdmVyQ2xhc3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vc2Vzc2lvbicpLlNlc3Npb25CYXNlfSBTZXNzaW9uQmFzZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vZHJpdmVyJykuQmFzZURyaXZlckJhc2U8aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuVGltZW91dENvbW1hbmRzICYgaW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRXZlbnRDb21tYW5kcyAmIGltcG9ydCgnQGFwcGl1bS90eXBlcycpLkZpbmRDb21tYW5kcyAmIGltcG9ydCgnQGFwcGl1bS90eXBlcycpLkxvZ0NvbW1hbmRzICYgaW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuU2V0dGluZ3NDb21tYW5kcyAmIGltcG9ydCgnQGFwcGl1bS90eXBlcycpLlNlc3Npb25Db21tYW5kcyAmIElFeGVjdXRlQ29tbWFuZHM+fSBFeGVjdXRlQmFzZVxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBTU8sU0FBU0EsWUFBVCxDQUFzQkMsSUFBdEIsRUFBNEI7RUFJakMsTUFBTUMsZUFBTixTQUE4QkQsSUFBOUIsQ0FBbUM7SUFLZCxNQUFiRSxhQUFhLENBQUNDLE1BQUQsRUFBU0MsU0FBVCxFQUFvQjtNQUlyQyxJQUFJLENBQUNBLFNBQUQsSUFBYyxDQUFDQyxlQUFBLENBQUVDLE9BQUYsQ0FBVUYsU0FBVixDQUFmLElBQXVDQSxTQUFTLENBQUNHLE1BQVYsR0FBbUIsQ0FBOUQsRUFBaUU7UUFDL0QsTUFBTSxJQUFJQyxnQkFBQSxDQUFPQyxvQkFBWCxDQUNILG1GQUFELEdBQ0cscURBQW9EQyxJQUFJLENBQUNDLFNBQUwsQ0FBZVAsU0FBZixDQUEwQixFQUY3RSxDQUFOO01BSUQ7O01BQ0QsSUFBSVEsSUFBSSxHQUFHUixTQUFTLENBQUMsQ0FBRCxDQUFULElBQWdCLEVBQTNCOztNQUNBLElBQUksQ0FBQ0MsZUFBQSxDQUFFUSxhQUFGLENBQWdCRCxJQUFoQixDQUFMLEVBQTRCO1FBQzFCLE1BQU0sSUFBSUosZ0JBQUEsQ0FBT0Msb0JBQVgsQ0FDSCxrRkFBRCxHQUNHLHFDQUZDLENBQU47TUFJRDs7TUFFRCxNQUFNSyxNQUFNLEdBQStCLEtBQUtDLFdBQWhEOztNQUNBLE1BQU1DLGdCQUFnQixHQUFHWCxlQUFBLENBQUVZLElBQUYsQ0FBT0gsTUFBTSxDQUFDSSxnQkFBZCxDQUF6Qjs7TUFDQSxNQUFNQyxlQUFlLEdBQUdMLE1BQU0sQ0FBQ0ksZ0JBQVAsQ0FBd0JmLE1BQXhCLENBQXhCOztNQUNBLElBQUksQ0FBQ2dCLGVBQUwsRUFBc0I7UUFDcEIsTUFBTSxJQUFJWCxnQkFBQSxDQUFPWSx5QkFBWCxDQUNILCtCQUE4QmpCLE1BQU8sdUJBQXRDLEdBQ0csUUFBT2EsZ0JBQWdCLENBQUNLLElBQWpCLENBQXNCLElBQXRCLENBQTRCLEVBRmxDLENBQU47TUFJRDs7TUFDRCxJQUFJQyxXQUFXLEdBQUcsRUFBbEI7O01BQ0EsSUFBSSxDQUFDSCxlQUFlLENBQUNJLE1BQXJCLEVBQTZCO1FBQzNCSixlQUFlLENBQUNJLE1BQWhCLEdBQXlCO1VBQUNDLFFBQVEsRUFBRSxFQUFYO1VBQWVDLFFBQVEsRUFBRTtRQUF6QixDQUF6QjtNQUNELENBRkQsTUFFTztRQUFBOztRQUNMLHlCQUFBTixlQUFlLENBQUNJLE1BQWhCLEVBQXVCQyxRQUF2QiwyQkFBdUJBLFFBQXZCLEdBQW9DLEVBQXBDO1FBQ0EsMEJBQUFMLGVBQWUsQ0FBQ0ksTUFBaEIsRUFBdUJFLFFBQXZCLDRCQUF1QkEsUUFBdkIsR0FBb0MsRUFBcEM7UUFDQSxJQUFBQyxxQkFBQSxFQUFZUCxlQUFlLENBQUNJLE1BQTVCLEVBQW9DWCxJQUFwQyxFQUEwQyxJQUExQztNQUNEOztNQUNEVSxXQUFXLEdBQUcsSUFBQUssa0JBQUEsRUFBUyxFQUFULEVBQWFmLElBQWIsRUFBbUJPLGVBQWUsQ0FBQ0ksTUFBbkMsRUFBMkMsSUFBM0MsQ0FBZDtNQUNBLE9BQU8sTUFBTSxLQUFLVCxNQUFNLENBQUNJLGdCQUFQLENBQXdCZixNQUF4QixFQUFnQ3lCLE9BQXJDLEVBQThDLEdBQUdOLFdBQWpELENBQWI7SUFDRDs7RUExQ2dDOztFQTRDbkMsT0FBT3JCLGVBQVA7QUFDRCJ9
@@ -3,6 +3,6 @@
3
3
  * Returns a `BaseDriver` class.
4
4
  * @param {BaseDriverBase} Base
5
5
  */
6
- export function createBaseDriverClass(Base: BaseDriverBase): import("./session").SessionBase;
6
+ export function createBaseDriverClass(Base: BaseDriverBase): import("./execute").ExecuteBase;
7
7
  export type BaseDriverBase<T = {}> = import('../driver').BaseDriverBase<T>;
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../lib/basedriver/commands/index.js"],"names":[],"mappings":"AASA;;;;GAIG;AACH,4CAFW,cAAc,mCAUxB;qCAIY,OAAO,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../lib/basedriver/commands/index.js"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,4CAFW,cAAc,mCAWxB;qCAIY,OAAO,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC"}
@@ -19,6 +19,8 @@ var _settings = require("./settings");
19
19
 
20
20
  var _timeout = require("./timeout");
21
21
 
22
+ var _execute = require("./execute");
23
+
22
24
  function createBaseDriverClass(Base) {
23
25
  const WithTimeoutCommands = (0, _timeout.TimeoutMixin)(Base);
24
26
  const WithEventCommands = (0, _event.EventMixin)(WithTimeoutCommands);
@@ -26,6 +28,7 @@ function createBaseDriverClass(Base) {
26
28
  const WithLogCommands = (0, _log.LogMixin)(WithFindCommands);
27
29
  const WithSettingsCommands = (0, _settings.SettingsMixin)(WithLogCommands);
28
30
  const WithSessionCommands = (0, _session.SessionMixin)(WithSettingsCommands);
29
- return WithSessionCommands;
31
+ const WithExecuteCommands = (0, _execute.ExecuteMixin)(WithSessionCommands);
32
+ return WithExecuteCommands;
30
33
  }
31
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVCYXNlRHJpdmVyQ2xhc3MiLCJCYXNlIiwiV2l0aFRpbWVvdXRDb21tYW5kcyIsIlRpbWVvdXRNaXhpbiIsIldpdGhFdmVudENvbW1hbmRzIiwiRXZlbnRNaXhpbiIsIldpdGhGaW5kQ29tbWFuZHMiLCJGaW5kTWl4aW4iLCJXaXRoTG9nQ29tbWFuZHMiLCJMb2dNaXhpbiIsIldpdGhTZXR0aW5nc0NvbW1hbmRzIiwiU2V0dGluZ3NNaXhpbiIsIldpdGhTZXNzaW9uQ29tbWFuZHMiLCJTZXNzaW9uTWl4aW4iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvYmFzZWRyaXZlci9jb21tYW5kcy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtFdmVudE1peGlufSBmcm9tICcuL2V2ZW50JztcbmltcG9ydCB7RmluZE1peGlufSBmcm9tICcuL2ZpbmQnO1xuaW1wb3J0IHtMb2dNaXhpbn0gZnJvbSAnLi9sb2cnO1xuaW1wb3J0IHtTZXNzaW9uTWl4aW59IGZyb20gJy4vc2Vzc2lvbic7XG5pbXBvcnQge1NldHRpbmdzTWl4aW59IGZyb20gJy4vc2V0dGluZ3MnO1xuaW1wb3J0IHtUaW1lb3V0TWl4aW59IGZyb20gJy4vdGltZW91dCc7XG5cbi8qKlxuICogQXBwbGllcyBhbGwgdGhlIG1peGlucyB0byB0aGUgYEJhc2VEcml2ZXJCYXNlYCBjbGFzcy5cbiAqIFJldHVybnMgYSBgQmFzZURyaXZlcmAgY2xhc3MuXG4gKiBAcGFyYW0ge0Jhc2VEcml2ZXJCYXNlfSBCYXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCYXNlRHJpdmVyQ2xhc3MoQmFzZSkge1xuICBjb25zdCBXaXRoVGltZW91dENvbW1hbmRzID0gVGltZW91dE1peGluKEJhc2UpO1xuICBjb25zdCBXaXRoRXZlbnRDb21tYW5kcyA9IEV2ZW50TWl4aW4oV2l0aFRpbWVvdXRDb21tYW5kcyk7XG4gIGNvbnN0IFdpdGhGaW5kQ29tbWFuZHMgPSBGaW5kTWl4aW4oV2l0aEV2ZW50Q29tbWFuZHMpO1xuICBjb25zdCBXaXRoTG9nQ29tbWFuZHMgPSBMb2dNaXhpbihXaXRoRmluZENvbW1hbmRzKTtcbiAgY29uc3QgV2l0aFNldHRpbmdzQ29tbWFuZHMgPSBTZXR0aW5nc01peGluKFdpdGhMb2dDb21tYW5kcyk7XG4gIGNvbnN0IFdpdGhTZXNzaW9uQ29tbWFuZHMgPSBTZXNzaW9uTWl4aW4oV2l0aFNldHRpbmdzQ29tbWFuZHMpO1xuICByZXR1cm4gV2l0aFNlc3Npb25Db21tYW5kcztcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUgW1Q9e31dXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9kcml2ZXInKS5CYXNlRHJpdmVyQmFzZTxUPn0gQmFzZURyaXZlckJhc2VcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFPTyxTQUFTQSxxQkFBVCxDQUErQkMsSUFBL0IsRUFBcUM7RUFDMUMsTUFBTUMsbUJBQW1CLEdBQUcsSUFBQUMscUJBQUEsRUFBYUYsSUFBYixDQUE1QjtFQUNBLE1BQU1HLGlCQUFpQixHQUFHLElBQUFDLGlCQUFBLEVBQVdILG1CQUFYLENBQTFCO0VBQ0EsTUFBTUksZ0JBQWdCLEdBQUcsSUFBQUMsZUFBQSxFQUFVSCxpQkFBVixDQUF6QjtFQUNBLE1BQU1JLGVBQWUsR0FBRyxJQUFBQyxhQUFBLEVBQVNILGdCQUFULENBQXhCO0VBQ0EsTUFBTUksb0JBQW9CLEdBQUcsSUFBQUMsdUJBQUEsRUFBY0gsZUFBZCxDQUE3QjtFQUNBLE1BQU1JLG1CQUFtQixHQUFHLElBQUFDLHFCQUFBLEVBQWFILG9CQUFiLENBQTVCO0VBQ0EsT0FBT0UsbUJBQVA7QUFDRCJ9
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVCYXNlRHJpdmVyQ2xhc3MiLCJCYXNlIiwiV2l0aFRpbWVvdXRDb21tYW5kcyIsIlRpbWVvdXRNaXhpbiIsIldpdGhFdmVudENvbW1hbmRzIiwiRXZlbnRNaXhpbiIsIldpdGhGaW5kQ29tbWFuZHMiLCJGaW5kTWl4aW4iLCJXaXRoTG9nQ29tbWFuZHMiLCJMb2dNaXhpbiIsIldpdGhTZXR0aW5nc0NvbW1hbmRzIiwiU2V0dGluZ3NNaXhpbiIsIldpdGhTZXNzaW9uQ29tbWFuZHMiLCJTZXNzaW9uTWl4aW4iLCJXaXRoRXhlY3V0ZUNvbW1hbmRzIiwiRXhlY3V0ZU1peGluIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2Jhc2Vkcml2ZXIvY29tbWFuZHMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7RXZlbnRNaXhpbn0gZnJvbSAnLi9ldmVudCc7XG5pbXBvcnQge0ZpbmRNaXhpbn0gZnJvbSAnLi9maW5kJztcbmltcG9ydCB7TG9nTWl4aW59IGZyb20gJy4vbG9nJztcbmltcG9ydCB7U2Vzc2lvbk1peGlufSBmcm9tICcuL3Nlc3Npb24nO1xuaW1wb3J0IHtTZXR0aW5nc01peGlufSBmcm9tICcuL3NldHRpbmdzJztcbmltcG9ydCB7VGltZW91dE1peGlufSBmcm9tICcuL3RpbWVvdXQnO1xuaW1wb3J0IHtFeGVjdXRlTWl4aW59IGZyb20gJy4vZXhlY3V0ZSc7XG5cbi8qKlxuICogQXBwbGllcyBhbGwgdGhlIG1peGlucyB0byB0aGUgYEJhc2VEcml2ZXJCYXNlYCBjbGFzcy5cbiAqIFJldHVybnMgYSBgQmFzZURyaXZlcmAgY2xhc3MuXG4gKiBAcGFyYW0ge0Jhc2VEcml2ZXJCYXNlfSBCYXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCYXNlRHJpdmVyQ2xhc3MoQmFzZSkge1xuICBjb25zdCBXaXRoVGltZW91dENvbW1hbmRzID0gVGltZW91dE1peGluKEJhc2UpO1xuICBjb25zdCBXaXRoRXZlbnRDb21tYW5kcyA9IEV2ZW50TWl4aW4oV2l0aFRpbWVvdXRDb21tYW5kcyk7XG4gIGNvbnN0IFdpdGhGaW5kQ29tbWFuZHMgPSBGaW5kTWl4aW4oV2l0aEV2ZW50Q29tbWFuZHMpO1xuICBjb25zdCBXaXRoTG9nQ29tbWFuZHMgPSBMb2dNaXhpbihXaXRoRmluZENvbW1hbmRzKTtcbiAgY29uc3QgV2l0aFNldHRpbmdzQ29tbWFuZHMgPSBTZXR0aW5nc01peGluKFdpdGhMb2dDb21tYW5kcyk7XG4gIGNvbnN0IFdpdGhTZXNzaW9uQ29tbWFuZHMgPSBTZXNzaW9uTWl4aW4oV2l0aFNldHRpbmdzQ29tbWFuZHMpO1xuICBjb25zdCBXaXRoRXhlY3V0ZUNvbW1hbmRzID0gRXhlY3V0ZU1peGluKFdpdGhTZXNzaW9uQ29tbWFuZHMpO1xuICByZXR1cm4gV2l0aEV4ZWN1dGVDb21tYW5kcztcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUgW1Q9e31dXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9kcml2ZXInKS5CYXNlRHJpdmVyQmFzZTxUPn0gQmFzZURyaXZlckJhc2VcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFPTyxTQUFTQSxxQkFBVCxDQUErQkMsSUFBL0IsRUFBcUM7RUFDMUMsTUFBTUMsbUJBQW1CLEdBQUcsSUFBQUMscUJBQUEsRUFBYUYsSUFBYixDQUE1QjtFQUNBLE1BQU1HLGlCQUFpQixHQUFHLElBQUFDLGlCQUFBLEVBQVdILG1CQUFYLENBQTFCO0VBQ0EsTUFBTUksZ0JBQWdCLEdBQUcsSUFBQUMsZUFBQSxFQUFVSCxpQkFBVixDQUF6QjtFQUNBLE1BQU1JLGVBQWUsR0FBRyxJQUFBQyxhQUFBLEVBQVNILGdCQUFULENBQXhCO0VBQ0EsTUFBTUksb0JBQW9CLEdBQUcsSUFBQUMsdUJBQUEsRUFBY0gsZUFBZCxDQUE3QjtFQUNBLE1BQU1JLG1CQUFtQixHQUFHLElBQUFDLHFCQUFBLEVBQWFILG9CQUFiLENBQTVCO0VBQ0EsTUFBTUksbUJBQW1CLEdBQUcsSUFBQUMscUJBQUEsRUFBYUgsbUJBQWIsQ0FBNUI7RUFDQSxPQUFPRSxtQkFBUDtBQUNEIn0=
@@ -14,10 +14,8 @@ var _lodash = _interopRequireDefault(require("lodash"));
14
14
  function LogMixin(Base) {
15
15
  class LogCommands extends Base {
16
16
  constructor(...args) {
17
- var _this$supportedLogTyp;
18
-
19
17
  super(...args);
20
- this.supportedLogTypes = (_this$supportedLogTyp = this.supportedLogTypes) !== null && _this$supportedLogTyp !== void 0 ? _this$supportedLogTyp : {};
18
+ this.supportedLogTypes = this.supportedLogTypes ?? {};
21
19
  }
22
20
 
23
21
  async getLogTypes() {
@@ -41,4 +39,4 @@ function LogMixin(Base) {
41
39
 
42
40
  return LogCommands;
43
41
  }
44
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2dNaXhpbiIsIkJhc2UiLCJMb2dDb21tYW5kcyIsImNvbnN0cnVjdG9yIiwiYXJncyIsInN1cHBvcnRlZExvZ1R5cGVzIiwiZ2V0TG9nVHlwZXMiLCJsb2ciLCJkZWJ1ZyIsIl8iLCJrZXlzIiwiZ2V0TG9nIiwibG9nVHlwZSIsImluY2x1ZGVzIiwibG9nc1R5cGVzV2l0aERlc2NyaXB0aW9ucyIsIm1hcFZhbHVlcyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldHRlciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL2xvZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZXF1aXJlLWF3YWl0ICovXG4vLyBAdHMtY2hlY2tcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKlxuICogQHBhcmFtIHtGaW5kQmFzZX0gQmFzZVxuICogQHJldHVybnMge0xvZ0Jhc2V9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMb2dNaXhpbihCYXNlKSB7XG4gIC8qKlxuICAgKiBAaW1wbGVtZW50cyB7SUxvZ0NvbW1hbmRzfVxuICAgKi9cbiAgY2xhc3MgTG9nQ29tbWFuZHMgZXh0ZW5kcyBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgTG9nVHlwZTxEcml2ZXI+Pn0gKi9cbiAgICAgIHRoaXMuc3VwcG9ydGVkTG9nVHlwZXMgPSB0aGlzLnN1cHBvcnRlZExvZ1R5cGVzID8/IHt9O1xuICAgIH1cblxuICAgIGFzeW5jIGdldExvZ1R5cGVzKCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1JldHJpZXZpbmcgc3VwcG9ydGVkIGxvZyB0eXBlcycpO1xuICAgICAgcmV0dXJuIF8ua2V5cyh0aGlzLnN1cHBvcnRlZExvZ1R5cGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAdGhpcyB7RHJpdmVyfVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dUeXBlXG4gICAgICovXG4gICAgYXN5bmMgZ2V0TG9nKGxvZ1R5cGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXRyaWV2aW5nICcke2xvZ1R5cGV9JyBsb2dzYCk7XG5cbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZ2V0TG9nVHlwZXMoKSkuaW5jbHVkZXMobG9nVHlwZSkpIHtcbiAgICAgICAgY29uc3QgbG9nc1R5cGVzV2l0aERlc2NyaXB0aW9ucyA9IF8ubWFwVmFsdWVzKHRoaXMuc3VwcG9ydGVkTG9nVHlwZXMsICdkZXNjcmlwdGlvbicpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIGxvZyB0eXBlICcke2xvZ1R5cGV9Jy4gYCArXG4gICAgICAgICAgICBgU3VwcG9ydGVkIHR5cGVzOiAke0pTT04uc3RyaW5naWZ5KGxvZ3NUeXBlc1dpdGhEZXNjcmlwdGlvbnMpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3VwcG9ydGVkTG9nVHlwZXNbbG9nVHlwZV0uZ2V0dGVyKHRoaXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gTG9nQ29tbWFuZHM7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkxvZ0NvbW1hbmRzfSBJTG9nQ29tbWFuZHNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJ9IERyaXZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9maW5kJykuRmluZEJhc2V9IEZpbmRCYXNlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9kcml2ZXInKS5CYXNlRHJpdmVyQmFzZTxpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5UaW1lb3V0Q29tbWFuZHMgJiBpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FdmVudENvbW1hbmRzICYgaW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRmluZENvbW1hbmRzICYgSUxvZ0NvbW1hbmRzPn0gTG9nQmFzZVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Mb2dUeXBlPFQ+fSBMb2dUeXBlXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQTs7QUFPTyxTQUFTQSxRQUFULENBQWtCQyxJQUFsQixFQUF3QjtFQUk3QixNQUFNQyxXQUFOLFNBQTBCRCxJQUExQixDQUErQjtJQUM3QkUsV0FBVyxDQUFDLEdBQUdDLElBQUosRUFBVTtNQUFBOztNQUNuQixNQUFNLEdBQUdBLElBQVQ7TUFFQSxLQUFLQyxpQkFBTCw0QkFBeUIsS0FBS0EsaUJBQTlCLHlFQUFtRCxFQUFuRDtJQUNEOztJQUVnQixNQUFYQyxXQUFXLEdBQUc7TUFDbEIsS0FBS0MsR0FBTCxDQUFTQyxLQUFULENBQWUsZ0NBQWY7TUFDQSxPQUFPQyxlQUFBLENBQUVDLElBQUYsQ0FBTyxLQUFLTCxpQkFBWixDQUFQO0lBQ0Q7O0lBTVcsTUFBTk0sTUFBTSxDQUFDQyxPQUFELEVBQVU7TUFDcEIsS0FBS0wsR0FBTCxDQUFTQyxLQUFULENBQWdCLGVBQWNJLE9BQVEsUUFBdEM7O01BRUEsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLTixXQUFMLEVBQVAsRUFBMkJPLFFBQTNCLENBQW9DRCxPQUFwQyxDQUFMLEVBQW1EO1FBQ2pELE1BQU1FLHlCQUF5QixHQUFHTCxlQUFBLENBQUVNLFNBQUYsQ0FBWSxLQUFLVixpQkFBakIsRUFBb0MsYUFBcEMsQ0FBbEM7O1FBQ0EsTUFBTSxJQUFJVyxLQUFKLENBQ0gseUJBQXdCSixPQUFRLEtBQWpDLEdBQ0csb0JBQW1CSyxJQUFJLENBQUNDLFNBQUwsQ0FBZUoseUJBQWYsQ0FBMEMsRUFGNUQsQ0FBTjtNQUlEOztNQUVELE9BQU8sTUFBTSxLQUFLVCxpQkFBTCxDQUF1Qk8sT0FBdkIsRUFBZ0NPLE1BQWhDLENBQXVDLElBQXZDLENBQWI7SUFDRDs7RUE1QjRCOztFQThCL0IsT0FBT2pCLFdBQVA7QUFDRCJ9
42
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2dNaXhpbiIsIkJhc2UiLCJMb2dDb21tYW5kcyIsImNvbnN0cnVjdG9yIiwiYXJncyIsInN1cHBvcnRlZExvZ1R5cGVzIiwiZ2V0TG9nVHlwZXMiLCJsb2ciLCJkZWJ1ZyIsIl8iLCJrZXlzIiwiZ2V0TG9nIiwibG9nVHlwZSIsImluY2x1ZGVzIiwibG9nc1R5cGVzV2l0aERlc2NyaXB0aW9ucyIsIm1hcFZhbHVlcyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldHRlciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL2xvZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZXF1aXJlLWF3YWl0ICovXG4vLyBAdHMtY2hlY2tcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKlxuICogQHBhcmFtIHtGaW5kQmFzZX0gQmFzZVxuICogQHJldHVybnMge0xvZ0Jhc2V9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMb2dNaXhpbihCYXNlKSB7XG4gIC8qKlxuICAgKiBAaW1wbGVtZW50cyB7SUxvZ0NvbW1hbmRzfVxuICAgKi9cbiAgY2xhc3MgTG9nQ29tbWFuZHMgZXh0ZW5kcyBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcbiAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgTG9nVHlwZTxEcml2ZXI+Pn0gKi9cbiAgICAgIHRoaXMuc3VwcG9ydGVkTG9nVHlwZXMgPSB0aGlzLnN1cHBvcnRlZExvZ1R5cGVzID8/IHt9O1xuICAgIH1cblxuICAgIGFzeW5jIGdldExvZ1R5cGVzKCkge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1JldHJpZXZpbmcgc3VwcG9ydGVkIGxvZyB0eXBlcycpO1xuICAgICAgcmV0dXJuIF8ua2V5cyh0aGlzLnN1cHBvcnRlZExvZ1R5cGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAdGhpcyB7RHJpdmVyfVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dUeXBlXG4gICAgICovXG4gICAgYXN5bmMgZ2V0TG9nKGxvZ1R5cGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKGBSZXRyaWV2aW5nICcke2xvZ1R5cGV9JyBsb2dzYCk7XG5cbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZ2V0TG9nVHlwZXMoKSkuaW5jbHVkZXMobG9nVHlwZSkpIHtcbiAgICAgICAgY29uc3QgbG9nc1R5cGVzV2l0aERlc2NyaXB0aW9ucyA9IF8ubWFwVmFsdWVzKHRoaXMuc3VwcG9ydGVkTG9nVHlwZXMsICdkZXNjcmlwdGlvbicpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIGxvZyB0eXBlICcke2xvZ1R5cGV9Jy4gYCArXG4gICAgICAgICAgICBgU3VwcG9ydGVkIHR5cGVzOiAke0pTT04uc3RyaW5naWZ5KGxvZ3NUeXBlc1dpdGhEZXNjcmlwdGlvbnMpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc3VwcG9ydGVkTG9nVHlwZXNbbG9nVHlwZV0uZ2V0dGVyKHRoaXMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gTG9nQ29tbWFuZHM7XG59XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkxvZ0NvbW1hbmRzfSBJTG9nQ29tbWFuZHNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJ9IERyaXZlclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9maW5kJykuRmluZEJhc2V9IEZpbmRCYXNlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9kcml2ZXInKS5CYXNlRHJpdmVyQmFzZTxpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5UaW1lb3V0Q29tbWFuZHMgJiBpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FdmVudENvbW1hbmRzICYgaW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRmluZENvbW1hbmRzICYgSUxvZ0NvbW1hbmRzPn0gTG9nQmFzZVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Mb2dUeXBlPFQ+fSBMb2dUeXBlXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQTs7QUFPTyxTQUFTQSxRQUFULENBQWtCQyxJQUFsQixFQUF3QjtFQUk3QixNQUFNQyxXQUFOLFNBQTBCRCxJQUExQixDQUErQjtJQUM3QkUsV0FBVyxDQUFDLEdBQUdDLElBQUosRUFBVTtNQUNuQixNQUFNLEdBQUdBLElBQVQ7TUFFQSxLQUFLQyxpQkFBTCxHQUF5QixLQUFLQSxpQkFBTCxJQUEwQixFQUFuRDtJQUNEOztJQUVnQixNQUFYQyxXQUFXLEdBQUc7TUFDbEIsS0FBS0MsR0FBTCxDQUFTQyxLQUFULENBQWUsZ0NBQWY7TUFDQSxPQUFPQyxlQUFBLENBQUVDLElBQUYsQ0FBTyxLQUFLTCxpQkFBWixDQUFQO0lBQ0Q7O0lBTVcsTUFBTk0sTUFBTSxDQUFDQyxPQUFELEVBQVU7TUFDcEIsS0FBS0wsR0FBTCxDQUFTQyxLQUFULENBQWdCLGVBQWNJLE9BQVEsUUFBdEM7O01BRUEsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLTixXQUFMLEVBQVAsRUFBMkJPLFFBQTNCLENBQW9DRCxPQUFwQyxDQUFMLEVBQW1EO1FBQ2pELE1BQU1FLHlCQUF5QixHQUFHTCxlQUFBLENBQUVNLFNBQUYsQ0FBWSxLQUFLVixpQkFBakIsRUFBb0MsYUFBcEMsQ0FBbEM7O1FBQ0EsTUFBTSxJQUFJVyxLQUFKLENBQ0gseUJBQXdCSixPQUFRLEtBQWpDLEdBQ0csb0JBQW1CSyxJQUFJLENBQUNDLFNBQUwsQ0FBZUoseUJBQWYsQ0FBMEMsRUFGNUQsQ0FBTjtNQUlEOztNQUVELE9BQU8sTUFBTSxLQUFLVCxpQkFBTCxDQUF1Qk8sT0FBdkIsRUFBZ0NPLE1BQWhDLENBQXVDLElBQXZDLENBQWI7SUFDRDs7RUE1QjRCOztFQThCL0IsT0FBT2pCLFdBQVA7QUFDRCJ9
@@ -2,6 +2,7 @@ export type Capabilities = import('@appium/types').Capabilities;
2
2
  export type W3CCapabilities = import('@appium/types').W3CCapabilities;
3
3
  export type Driver = import('@appium/types').Driver;
4
4
  export type Core = import('@appium/types').Core;
5
+ export type ExecuteMethodMap = import('@appium/types').ExecuteMethodMap;
5
6
  export type ServerArgs = import('@appium/types').ServerArgs;
6
7
  export type EventHistory = import('@appium/types').EventHistory;
7
8
  export type AppiumLogger = import('@appium/types').AppiumLogger;
@@ -14,6 +15,8 @@ export class DriverCore implements Core {
14
15
  * know which version of basedriver it inherited from
15
16
  */
16
17
  static baseVersion: any;
18
+ /** @type {ExecuteMethodMap} */
19
+ static executeMethodMap: ExecuteMethodMap;
17
20
  constructor(opts?: import("@appium/types").ServerArgs, shouldValidateCaps?: boolean);
18
21
  /**
19
22
  * @type {string?}
@@ -162,8 +165,16 @@ export class DriverCore implements Core {
162
165
  * not
163
166
  *
164
167
  * @param {string} name - name of feature/command
168
+ * @deprecated
165
169
  */
166
170
  ensureFeatureEnabled(name: string): void;
171
+ /**
172
+ * Assert that a given feature is enabled and throw a helpful error if it's
173
+ * not
174
+ *
175
+ * @param {string} name - name of feature/command
176
+ */
177
+ assertFeatureEnabled(name: string): void;
167
178
  /**
168
179
  *
169
180
  * @param {string} strategy
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/core.js"],"names":[],"mappings":"2BA0Za,OAAO,eAAe,EAAE,YAAY;8BACpC,OAAO,eAAe,EAAE,eAAe;qBACvC,OAAO,eAAe,EAAE,MAAM;mBAC9B,OAAO,eAAe,EAAE,IAAI;yBAC5B,OAAO,eAAe,EAAE,UAAU;2BAClC,OAAO,eAAe,EAAE,YAAY;2BACpC,OAAO,eAAe,EAAE,YAAY;AA7YjD;;GAEG;AACH;IACE;;;OAGG;IACH,wBAAoC;IAkGpC,qFAiBC;IAjHD;;OAEG;IACH,WAFU,MAAM,QAEC;IAEjB;;OAEG;IACH,MAFU,OAAO,eAAe,EAAE,UAAU,CAEvC;IAEL;;OAEG;IACH,aAFU,UAAU,CAER;IAEZ;;OAEG;IACH,MAFU,YAAY,CAEjB;IAEL;;OAEG;IACH,cAFU,eAAe,CAEZ;IAEb,+CAAkB;IAElB;;;;;;;OAOG;IACH,iBAA6B;IAE7B,gCAA+B;IAE/B,uBAAuB;IACvB,eADW,MAAM,EAAE,CACA;IAEnB,uBAAuB;IACvB,cADW,MAAM,EAAE,CACD;IAElB,4BAA6C;IAE7C,uBAAmB;IAEnB,uBAAuB;IACvB,mBADW,MAAM,EAAE,CACI;IAEvB,uBAAuB;IACvB,sBADW,MAAM,EAAE,CACO;IAE1B,uBAAuB;IACvB,gBADW,MAAM,EAAE,CACC;IAEpB,8BAA8B;IAC9B,gBADW,OAAO,OAAO,QACH;IAEtB,2BAA2B;IAC3B,eADW,YAAY,CACQ;IAG/B,kCAAkC;IAClC,cADW,mBAAmB,CACI;IAElC;;OAEG;IACH,MAFU,YAAY,CAEjB;IAEL;;OAEG;IACH,wCAA6B;IAE7B;;OAEG;IACH,oBAFU,OAAO,CAEE;IAEnB;;OAEG;IACH,wCAAqC;IAErC;;;;;OAKG;IACH,8BAAgC;IAqBhC,gDAEC;IAED;;;;;;;;OAQG;IACH,wCAJqB,GAAG,EAAE,KAAK,IAAI,QAMlC;IAED;;;;;;;OAOG;IACH,0CAEC;IAED;;;;;;;;;;OAUG;IACH,sCAEC;IAMD,yDAEC;IAED;;;OAGG;IACH,oBAFW,MAAM,QAgBhB;IAED;;;OAGG;IACH,yBAEC;IAED;;;;;OAKG;IACH,+CAFa,OAAO,CAKnB;IAED;;;;;OAKG;IACH,4BAHW,MAAM,GACJ,IAAI,GAAG,IAAI,CAIvB;IAED,6BAEC;IAED,yBAEC;IAED,2BAEC;IADC,6BAAiC;IAGnC,uBAEC;IAED;;;;;;OAMG;IACH,uBAJW,MAAM,WAuBhB;IAED;;;;;OAKG;IACH,2BAFW,MAAM,QAYhB;IAED;;;;OAIG;IACH,kCAHW,MAAM,0CAgBhB;IAED;;;;OAIG;IACH,6CAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,6BAHW,MAAM,GACJ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAI9B;IAED;;;;OAIG;IACH,0CAFa,OAAO,CAInB;IAED;;;;;;;;;;;;OAYG;IACH,+BATW,MAAM,UAGN,OAAO,eAAe,EAAE,UAAU,OAClC,MAAM,SACN,GAAG,GAED,OAAO,CAoBnB;IAED;;;OAGG;IACH,yBAFW,MAAM,QAIhB;IAED,sDAEC;IAED,wCAKC;CACF"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../lib/basedriver/core.js"],"names":[],"mappings":"2BAwaa,OAAO,eAAe,EAAE,YAAY;8BACpC,OAAO,eAAe,EAAE,eAAe;qBACvC,OAAO,eAAe,EAAE,MAAM;mBAC9B,OAAO,eAAe,EAAE,IAAI;+BAC5B,OAAO,eAAe,EAAE,gBAAgB;yBACxC,OAAO,eAAe,EAAE,UAAU;2BAClC,OAAO,eAAe,EAAE,YAAY;2BACpC,OAAO,eAAe,EAAE,YAAY;AA5ZjD;;GAEG;AACH;IACE;;;OAGG;IACH,wBAAoC;IAEpC,+BAA+B;IAC/B,yBADW,gBAAgB,CACE;IAkG7B,qFAiBC;IAjHD;;OAEG;IACH,WAFU,MAAM,QAEC;IAEjB;;OAEG;IACH,MAFU,OAAO,eAAe,EAAE,UAAU,CAEvC;IAEL;;OAEG;IACH,aAFU,UAAU,CAER;IAEZ;;OAEG;IACH,MAFU,YAAY,CAEjB;IAEL;;OAEG;IACH,cAFU,eAAe,CAEZ;IAEb,+CAAkB;IAElB;;;;;;;OAOG;IACH,iBAA6B;IAE7B,gCAA+B;IAE/B,uBAAuB;IACvB,eADW,MAAM,EAAE,CACA;IAEnB,uBAAuB;IACvB,cADW,MAAM,EAAE,CACD;IAElB,4BAA6C;IAE7C,uBAAmB;IAEnB,uBAAuB;IACvB,mBADW,MAAM,EAAE,CACI;IAEvB,uBAAuB;IACvB,sBADW,MAAM,EAAE,CACO;IAE1B,uBAAuB;IACvB,gBADW,MAAM,EAAE,CACC;IAEpB,8BAA8B;IAC9B,gBADW,OAAO,OAAO,QACH;IAEtB,2BAA2B;IAC3B,eADW,YAAY,CACQ;IAG/B,kCAAkC;IAClC,cADW,mBAAmB,CACI;IAElC;;OAEG;IACH,MAFU,YAAY,CAEjB;IAEL;;OAEG;IACH,wCAA6B;IAE7B;;OAEG;IACH,oBAFU,OAAO,CAEE;IAEnB;;OAEG;IACH,wCAAqC;IAErC;;;;;OAKG;IACH,8BAAgC;IAqBhC,gDAEC;IAED;;;;;;;;OAQG;IACH,wCAJqB,GAAG,EAAE,KAAK,IAAI,QAMlC;IAED;;;;;;;OAOG;IACH,0CAEC;IAED;;;;;;;;;;OAUG;IACH,sCAEC;IAMD,yDAEC;IAED;;;OAGG;IACH,oBAFW,MAAM,QAgBhB;IAED;;;OAGG;IACH,yBAEC;IAED;;;;;OAKG;IACH,+CAFa,OAAO,CAKnB;IAED;;;;;OAKG;IACH,4BAHW,MAAM,GACJ,IAAI,GAAG,IAAI,CAIvB;IAED,6BAEC;IAED,yBAEC;IAED,2BAEC;IADC,6BAAiC;IAGnC,uBAEC;IAED;;;;;;OAMG;IACH,uBAJW,MAAM,WAuBhB;IAED;;;;;;OAMG;IACH,2BAHW,MAAM,QAKhB;IAED;;;;;OAKG;IACH,2BAFW,MAAM,QAYhB;IAED;;;;OAIG;IACH,kCAHW,MAAM,0CAgBhB;IAED;;;;OAIG;IACH,6CAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,6BAHW,MAAM,GACJ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAI9B;IAED;;;;OAIG;IACH,0CAFa,OAAO,CAInB;IAED;;;;;;;;;;;;OAYG;IACH,+BATW,MAAM,UAGN,OAAO,eAAe,EAAE,UAAU,OAClC,MAAM,SACN,GAAG,GAED,OAAO,CAoBnB;IAED;;;OAGG;IACH,yBAFW,MAAM,QAIhB;IAED,sDAEC;IAED,wCAKC;CACF"}
@@ -36,6 +36,7 @@ const ON_UNEXPECTED_SHUTDOWN_EVENT = 'onUnexpectedShutdown';
36
36
 
37
37
  class DriverCore {
38
38
  static baseVersion = BASEDRIVER_VER;
39
+ static executeMethodMap = {};
39
40
  sessionId = null;
40
41
  opts;
41
42
  initialOpts;
@@ -158,6 +159,10 @@ class DriverCore {
158
159
  }
159
160
 
160
161
  ensureFeatureEnabled(name) {
162
+ this.assertFeatureEnabled(name);
163
+ }
164
+
165
+ assertFeatureEnabled(name) {
161
166
  if (!this.isFeatureEnabled(name)) {
162
167
  throw new Error(`Potentially insecure feature '${name}' has not been ` + `enabled. If you want to enable this feature and accept ` + `the security ramifications, please do so by following ` + `the documented instructions at https://github.com/appium` + `/appium/blob/master/docs/en/writing-running-appium/security.md`);
163
168
  }
@@ -232,4 +237,4 @@ class DriverCore {
232
237
  }
233
238
 
234
239
  exports.DriverCore = DriverCore;
235
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2ZXJzaW9uIiwiQkFTRURSSVZFUl9WRVIiLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJfX2Rpcm5hbWUiLCJORVdfQ09NTUFORF9USU1FT1VUX01TIiwiT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCIsIkRyaXZlckNvcmUiLCJiYXNlVmVyc2lvbiIsInNlc3Npb25JZCIsIm9wdHMiLCJpbml0aWFsT3B0cyIsImNhcHMiLCJvcmlnaW5hbENhcHMiLCJoZWxwZXJzIiwiYmFzZVBhdGgiLCJERUZBVUxUX0JBU0VfUEFUSCIsInJlbGF4ZWRTZWN1cml0eUVuYWJsZWQiLCJhbGxvd0luc2VjdXJlIiwiZGVueUluc2VjdXJlIiwibmV3Q29tbWFuZFRpbWVvdXRNcyIsImltcGxpY2l0V2FpdE1zIiwibG9jYXRvclN0cmF0ZWdpZXMiLCJ3ZWJMb2NhdG9yU3RyYXRlZ2llcyIsIm1hbmFnZWREcml2ZXJzIiwibm9Db21tYW5kVGltZXIiLCJfZXZlbnRIaXN0b3J5IiwiY29tbWFuZHMiLCJldmVudEVtaXR0ZXIiLCJFdmVudEVtaXR0ZXIiLCJfbG9nIiwic2h1dGRvd25VbmV4cGVjdGVkbHkiLCJzaG91bGRWYWxpZGF0ZUNhcHMiLCJjb21tYW5kc1F1ZXVlR3VhcmQiLCJBc3luY0xvY2siLCJzZXR0aW5ncyIsIkRldmljZVNldHRpbmdzIiwiY29uc3RydWN0b3IiLCJsb2dnZXIiLCJnZXRMb2dnZXIiLCJnZW5lcmF0ZURyaXZlckxvZ1ByZWZpeCIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsIm9zIiwidG1wZGlyIiwiXyIsImNsb25lRGVlcCIsImxvZyIsIm9uVW5leHBlY3RlZFNodXRkb3duIiwiaGFuZGxlciIsIm9uIiwiZHJpdmVyRGF0YSIsImlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQiLCJldmVudEhpc3RvcnkiLCJsb2dFdmVudCIsImV2ZW50TmFtZSIsIkVycm9yIiwidHMiLCJEYXRlIiwibm93IiwibG9nVGltZSIsInRvVGltZVN0cmluZyIsInB1c2giLCJkZWJ1ZyIsImdldFN0YXR1cyIsInNlc3Npb25FeGlzdHMiLCJkcml2ZXJGb3JTZXNzaW9uIiwiaXNNanNvbndwUHJvdG9jb2wiLCJwcm90b2NvbCIsIlBST1RPQ09MUyIsIk1KU09OV1AiLCJpc1czQ1Byb3RvY29sIiwiVzNDIiwic2V0UHJvdG9jb2xNSlNPTldQIiwic2V0UHJvdG9jb2xXM0MiLCJpc0ZlYXR1cmVFbmFibGVkIiwibmFtZSIsImluY2x1ZGVzIiwiZW5zdXJlRmVhdHVyZUVuYWJsZWQiLCJ2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSIsInN0cmF0ZWd5Iiwid2ViQ29udGV4dCIsInZhbGlkU3RyYXRlZ2llcyIsImpvaW4iLCJjb25jYXQiLCJlcnJvcnMiLCJJbnZhbGlkU2VsZWN0b3JFcnJvciIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJtZXRob2QiLCJ1cmwiLCJib2R5IiwiYXZvaWRTY2hlbWEiLCJpc0FycmF5IiwibGVuZ3RoIiwiYXZvaWRNZXRob2QiLCJhdm9pZFBhdGhSZWdleCIsImlzUmVnRXhwIiwibm9ybWFsaXplZFVybCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJ0ZXN0IiwiYWRkTWFuYWdlZERyaXZlciIsImRyaXZlciIsImdldE1hbmFnZWREcml2ZXJzIiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsImNsZWFyVGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvcmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXdhaXQgKi9cblxuaW1wb3J0IHtmcywgbG9nZ2VyfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQge0RFRkFVTFRfQkFTRV9QQVRILCBQUk9UT0NPTFN9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2Vycm9yc30gZnJvbSAnLi4vcHJvdG9jb2wnO1xuaW1wb3J0IERldmljZVNldHRpbmdzIGZyb20gJy4vZGV2aWNlLXNldHRpbmdzJztcbmltcG9ydCBoZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5cbi8vIGZvciBjb21wYXQgd2l0aCBydW5uaW5nIHRlc3RzIHRyYW5zcGlsZWQgYW5kIGluLXBsYWNlXG5jb25zdCB7dmVyc2lvbjogQkFTRURSSVZFUl9WRVJ9ID0gZnMucmVhZFBhY2thZ2VKc29uRnJvbShfX2Rpcm5hbWUpO1xuXG5jb25zdCBORVdfQ09NTUFORF9USU1FT1VUX01TID0gNjAgKiAxMDAwO1xuXG5jb25zdCBPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5UID0gJ29uVW5leHBlY3RlZFNodXRkb3duJztcbi8qKlxuICogQGltcGxlbWVudHMge0NvcmV9XG4gKi9cbmNsYXNzIERyaXZlckNvcmUge1xuICAvKipcbiAgICogTWFrZSB0aGUgYmFzZWRyaXZlciB2ZXJzaW9uIGF2YWlsYWJsZSBzbyBmb3IgYW55IGRyaXZlciB3aGljaCBpbmhlcml0cyBmcm9tIHRoaXMgcGFja2FnZSwgd2VcbiAgICoga25vdyB3aGljaCB2ZXJzaW9uIG9mIGJhc2Vkcml2ZXIgaXQgaW5oZXJpdGVkIGZyb21cbiAgICovXG4gIHN0YXRpYyBiYXNlVmVyc2lvbiA9IEJBU0VEUklWRVJfVkVSO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7c3RyaW5nP31cbiAgICovXG4gIHNlc3Npb25JZCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJPcHRzfVxuICAgKi9cbiAgb3B0cztcblxuICAvKipcbiAgICogQHR5cGUge1NlcnZlckFyZ3N9XG4gICAqL1xuICBpbml0aWFsT3B0cztcblxuICAvKipcbiAgICogQHR5cGUge0NhcGFiaWxpdGllc31cbiAgICovXG4gIGNhcHM7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtXM0NDYXBhYmlsaXRpZXN9XG4gICAqL1xuICBvcmlnaW5hbENhcHM7XG5cbiAgaGVscGVycyA9IGhlbHBlcnM7XG5cbiAgLyoqXG4gICAqIGJhc2VQYXRoIGlzIHVzZWQgZm9yIHNldmVyYWwgcHVycG9zZXMsIGZvciBleGFtcGxlIGluIHNldHRpbmcgdXBcbiAgICogcHJveHlpbmcgdG8gb3RoZXIgZHJpdmVycywgc2luY2Ugd2UgbmVlZCB0byBrbm93IHdoYXQgdGhlIGJhc2UgcGF0aFxuICAgKiBvZiBhbnkgaW5jb21pbmcgcmVxdWVzdCBtaWdodCBsb29rIGxpa2UuIFdlIHNldCBpdCB0byB0aGUgZGVmYXVsdFxuICAgKiBpbml0aWFsbHkgYnV0IGl0IGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBkdXJpbmcgYW55IGFjdHVhbCBwcm9ncmFtXG4gICAqIGV4ZWN1dGlvbiBieSB0aGUgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCB3aGljaCBpcyBuZWNlc3NhcmlseSBydW4gYXNcbiAgICogdGhlIGVudHJ5cG9pbnQgZm9yIGFueSBBcHBpdW0gc2VydmVyXG4gICAqL1xuICBiYXNlUGF0aCA9IERFRkFVTFRfQkFTRV9QQVRIO1xuXG4gIHJlbGF4ZWRTZWN1cml0eUVuYWJsZWQgPSBmYWxzZTtcblxuICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICBhbGxvd0luc2VjdXJlID0gW107XG5cbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgZGVueUluc2VjdXJlID0gW107XG5cbiAgbmV3Q29tbWFuZFRpbWVvdXRNcyA9IE5FV19DT01NQU5EX1RJTUVPVVRfTVM7XG5cbiAgaW1wbGljaXRXYWl0TXMgPSAwO1xuXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGxvY2F0b3JTdHJhdGVnaWVzID0gW107XG5cbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgd2ViTG9jYXRvclN0cmF0ZWdpZXMgPSBbXTtcblxuICAvKiogQHR5cGUge0RyaXZlcltdfSAqL1xuICBtYW5hZ2VkRHJpdmVycyA9IFtdO1xuXG4gIC8qKiBAdHlwZSB7Tm9kZUpTLlRpbWVvdXQ/fSAqL1xuICBub0NvbW1hbmRUaW1lciA9IG51bGw7XG5cbiAgLyoqIEB0eXBlIHtFdmVudEhpc3Rvcnl9ICovXG4gIF9ldmVudEhpc3RvcnkgPSB7Y29tbWFuZHM6IFtdfTtcblxuICAvLyB1c2VkIHRvIGhhbmRsZSBkcml2ZXIgZXZlbnRzXG4gIC8qKiBAdHlwZSB7Tm9kZUpTLkV2ZW50RW1pdHRlcn0gKi9cbiAgZXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7QXBwaXVtTG9nZ2VyfVxuICAgKi9cbiAgX2xvZztcblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgc2h1dGRvd25VbmV4cGVjdGVkbHkgPSBmYWxzZTtcblxuICAvKipcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBzaG91bGRWYWxpZGF0ZUNhcHM7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIGNvbW1hbmRzUXVldWVHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcblxuICAvKipcbiAgICogc2V0dGluZ3Mgc2hvdWxkIGJlIGluc3RhbnRpYXRlZCBieSBkcml2ZXJzIHdoaWNoIGV4dGVuZCBCYXNlRHJpdmVyLCBidXRcbiAgICogd2Ugc2V0IGl0IHRvIGFuIGVtcHR5IERldmljZVNldHRpbmdzIGluc3RhbmNlIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlXG4gICAqIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGFwcGxpZWQgZXZlbiBpZiBhbiBleHRlbmRpbmcgZHJpdmVyIGRvZXNuJ3QgdXRpbGl6ZVxuICAgKiB0aGUgc2V0dGluZ3MgZnVuY3Rpb25hbGl0eSBpdHNlbGZcbiAgICovXG4gIHNldHRpbmdzID0gbmV3IERldmljZVNldHRpbmdzKCk7XG5cbiAgY29uc3RydWN0b3Iob3B0cyA9IC8qKiBAdHlwZSB7U2VydmVyQXJnc30gKi8gKHt9KSwgc2hvdWxkVmFsaWRhdGVDYXBzID0gdHJ1ZSkge1xuICAgIHRoaXMuX2xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoaGVscGVycy5nZW5lcmF0ZURyaXZlckxvZ1ByZWZpeCh0aGlzKSk7XG5cbiAgICAvLyBzZXR1cCBzdGF0ZVxuICAgIHRoaXMub3B0cyA9IG9wdHM7XG5cbiAgICAvLyB1c2UgYSBjdXN0b20gdG1wIGRpciB0byBhdm9pZCBsb3NpbmcgZGF0YSBhbmQgYXBwIHdoZW4gY29tcHV0ZXIgaXNcbiAgICAvLyByZXN0YXJ0ZWRcbiAgICB0aGlzLm9wdHMudG1wRGlyID0gdGhpcy5vcHRzLnRtcERpciB8fCBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiB8fCBvcy50bXBkaXIoKTtcblxuICAgIC8vIGJhc2UtZHJpdmVyIGludGVybmFsc1xuICAgIHRoaXMuc2hvdWxkVmFsaWRhdGVDYXBzID0gc2hvdWxkVmFsaWRhdGVDYXBzO1xuXG4gICAgLy8ga2VlcGluZyB0cmFjayBvZiBpbml0aWFsIG9wdHNcbiAgICB0aGlzLmluaXRpYWxPcHRzID0gXy5jbG9uZURlZXAodGhpcy5vcHRzKTtcblxuICAgIHRoaXMuc2Vzc2lvbklkID0gbnVsbDtcbiAgfVxuXG4gIGdldCBsb2coKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBjYWxsYmFjayBoYW5kbGVyIGlmIG5lZWRlZCB0byBleGVjdXRlIGEgY3VzdG9tIHBpZWNlIG9mIGNvZGVcbiAgICogd2hlbiB0aGUgZHJpdmVyIGlzIHNodXQgZG93biB1bmV4cGVjdGVkbHkuIE11bHRpcGxlIGNhbGxzIHRvIHRoaXMgbWV0aG9kXG4gICAqIHdpbGwgY2F1c2UgdGhlIGhhbmRsZXIgdG8gYmUgZXhlY3V0ZWQgbXV0aXBsZSB0aW1lc1xuICAgKlxuICAgKiBAcGFyYW0geyguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZH0gaGFuZGxlciBUaGUgY29kZSB0byBiZSBleGVjdXRlZCBvbiB1bmV4cGVjdGVkIHNodXRkb3duLlxuICAgKiBUaGUgZnVuY3Rpb24gbWF5IGFjY2VwdCBvbmUgYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBhY3R1YWwgZXJyb3IgaW5zdGFuY2UsIHdoaWNoXG4gICAqIGNhdXNlZCB0aGUgZHJpdmVyIHRvIHNodXQgZG93bi5cbiAgICovXG4gIG9uVW5leHBlY3RlZFNodXRkb3duKGhhbmRsZXIpIHtcbiAgICB0aGlzLmV2ZW50RW1pdHRlci5vbihPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5ULCBoYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgQXBwaXVtRHJpdmVyIHRvIHN0b3JlIHRoZSBkYXRhIG9mIHRoZVxuICAgKiBzcGVjaWZpYyBkcml2ZXIgc2Vzc2lvbnMuIFRoaXMgZGF0YSBjYW4gYmUgbGF0ZXIgdXNlZCB0byBhZGp1c3RcbiAgICogcHJvcGVydGllcyBmb3IgZHJpdmVyIGluc3RhbmNlcyBydW5uaW5nIGluIHBhcmFsbGVsLlxuICAgKiBPdmVycmlkZSBpdCBpbiBpbmhlcml0ZWQgZHJpdmVyIGNsYXNzZXMgaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLHVua25vd24+fSBEcml2ZXIgcHJvcGVydGllcyBtYXBwaW5nXG4gICAqL1xuICBnZXQgZHJpdmVyRGF0YSgpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBjb250cm9scyB0aGUgd2F5IHsjZXhlY3V0ZUNvbW1hbmR9IG1ldGhvZFxuICAgKiBoYW5kbGVzIG5ldyBkcml2ZXIgY29tbWFuZHMgcmVjZWl2ZWQgZnJvbSB0aGUgY2xpZW50LlxuICAgKiBPdmVycmlkZSBpdCBmb3IgaW5oZXJpdGVkIGNsYXNzZXMgb25seSBpbiBzcGVjaWFsIGNhc2VzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgdHJ1ZSAoZGVmYXVsdCkgdGhlbiBhbGwgdGhlIGNvbW1hbmRzXG4gICAqICAgcmVjZWl2ZWQgYnkgdGhlIHBhcnRpY3VsYXIgZHJpdmVyIGluc3RhbmNlIGFyZSBnb2luZyB0byBiZSBwdXQgaW50byB0aGUgcXVldWUsXG4gICAqICAgc28gZWFjaCBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIG5vdCBiZSBleGVjdXRlZCB1bnRpbCB0aGUgcHJldmlvdXMgY29tbWFuZFxuICAgKiAgIGV4ZWN1dGlvbiBpcyBjb21wbGV0ZWQuIEZhbHNlIHZhbHVlIGRpc2FibGVzIHRoYXQgcXVldWUsIHNvIGVhY2ggZHJpdmVyIGNvbW1hbmRcbiAgICogICBpcyBleGVjdXRlZCBpbmRlcGVuZGVudGx5IGFuZCBkb2VzIG5vdCB3YWl0IGZvciBhbnl0aGluZy5cbiAgICovXG4gIGdldCBpc0NvbW1hbmRzUXVldWVFbmFibGVkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLypcbiAgICogbWFrZSBldmVudEhpc3RvcnkgYSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGEgY2xvbmVkIG9iamVjdCBzbyBhIGNvbnN1bWVyIGNhbid0XG4gICAqIGluYWR2ZXJ0ZW50bHkgY2hhbmdlIGRhdGEgb3V0c2lkZSBvZiBsb2dFdmVudFxuICAgKi9cbiAgZ2V0IGV2ZW50SGlzdG9yeSgpIHtcbiAgICByZXR1cm4gXy5jbG9uZURlZXAodGhpcy5fZXZlbnRIaXN0b3J5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBUEkgbWV0aG9kIGZvciBkcml2ZXIgZGV2ZWxvcGVycyB0byBsb2cgdGltaW5ncyBmb3IgaW1wb3J0YW50IGV2ZW50c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gICAqL1xuICBsb2dFdmVudChldmVudE5hbWUpIHtcbiAgICBpZiAoZXZlbnROYW1lID09PSAnY29tbWFuZHMnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBsb2cgY29tbWFuZHMgZGlyZWN0bHknKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBldmVudE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZXZlbnROYW1lICR7ZXZlbnROYW1lfWApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2V2ZW50SGlzdG9yeVtldmVudE5hbWVdKSB7XG4gICAgICB0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXSA9IFtdO1xuICAgIH1cbiAgICBjb25zdCB0cyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgbG9nVGltZSA9IG5ldyBEYXRlKHRzKS50b1RpbWVTdHJpbmcoKTtcbiAgICB0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXS5wdXNoKHRzKTtcbiAgICB0aGlzLmxvZy5kZWJ1ZyhgRXZlbnQgJyR7ZXZlbnROYW1lfScgbG9nZ2VkIGF0ICR7dHN9ICgke2xvZ1RpbWV9KWApO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRkZW4gaW4gYXBwaXVtIGRyaXZlciwgYnV0IGhlcmUgc28gdGhhdCBpbmRpdmlkdWFsIGRyaXZlcnMgY2FuIGJlXG4gICAqIHRlc3RlZCB3aXRoIGNsaWVudHMgdGhhdCBwb2xsXG4gICAqL1xuICBhc3luYyBnZXRTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIG1ldGhvZCByZXF1aXJlZCBieSBNSlNPTldQIGluIG9yZGVyIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IHNob3VsZFxuICAgKiByZXNwb25kIHdpdGggYW4gaW52YWxpZCBzZXNzaW9uIHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2Vzc2lvbklkXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNlc3Npb25FeGlzdHMoc2Vzc2lvbklkKSB7XG4gICAgaWYgKCFzZXNzaW9uSWQpIHJldHVybiBmYWxzZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjdXJseVxuICAgIHJldHVybiBzZXNzaW9uSWQgPT09IHRoaXMuc2Vzc2lvbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIG1ldGhvZCByZXF1aXJlZCBieSBNSlNPTldQIGluIG9yZGVyIHRvIGRldGVybWluZSBpZiB0aGUgY29tbWFuZCBzaG91bGRcbiAgICogYmUgcHJveGllZCBkaXJlY3RseSB0byB0aGUgZHJpdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWRcbiAgICogQHJldHVybnMge0NvcmUgfCBudWxsfVxuICAgKi9cbiAgZHJpdmVyRm9yU2Vzc2lvbihzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlzTWpzb253cFByb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIGlzVzNDUHJvdG9jb2woKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdG9jb2wgPT09IFBST1RPQ09MUy5XM0M7XG4gIH1cblxuICBzZXRQcm90b2NvbE1KU09OV1AoKSB7XG4gICAgdGhpcy5wcm90b2NvbCA9IFBST1RPQ09MUy5NSlNPTldQO1xuICB9XG5cbiAgc2V0UHJvdG9jb2xXM0MoKSB7XG4gICAgdGhpcy5wcm90b2NvbCA9IFBST1RPQ09MUy5XM0M7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZCB2aWEgaXRzIG5hbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAgICovXG4gIGlzRmVhdHVyZUVuYWJsZWQobmFtZSkge1xuICAgIC8vIGlmIHdlIGhhdmUgZXhwbGljaXRseSBkZW5pZWQgdGhpcyBmZWF0dXJlLCByZXR1cm4gZmFsc2UgaW1tZWRpYXRlbHlcbiAgICBpZiAodGhpcy5kZW55SW5zZWN1cmUgJiYgXy5pbmNsdWRlcyh0aGlzLmRlbnlJbnNlY3VyZSwgbmFtZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBzcGVjaWZpY2FsbHkgaGF2ZSBhbGxvd2VkIHRoZSBmZWF0dXJlLCByZXR1cm4gdHJ1ZVxuICAgIGlmICh0aGlzLmFsbG93SW5zZWN1cmUgJiYgXy5pbmNsdWRlcyh0aGlzLmFsbG93SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBvdGhlcndpc2UsIGlmIHdlJ3ZlIGdsb2JhbGx5IGFsbG93ZWQgaW5zZWN1cmUgZmVhdHVyZXMgYW5kIG5vdCBkZW5pZWRcbiAgICAvLyB0aGlzIG9uZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5yZWxheGVkU2VjdXJpdHlFbmFibGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBpZiB3ZSBoYXZlbid0IGFsbG93ZWQgYW55dGhpbmcgaW5zZWN1cmUsIHRoZW4gcmVqZWN0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VydCB0aGF0IGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIGFuZCB0aHJvdyBhIGhlbHBmdWwgZXJyb3IgaWYgaXQnc1xuICAgKiBub3RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAgKi9cbiAgZW5zdXJlRmVhdHVyZUVuYWJsZWQobmFtZSkge1xuICAgIGlmICghdGhpcy5pc0ZlYXR1cmVFbmFibGVkKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQb3RlbnRpYWxseSBpbnNlY3VyZSBmZWF0dXJlICcke25hbWV9JyBoYXMgbm90IGJlZW4gYCArXG4gICAgICAgICAgYGVuYWJsZWQuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgYW5kIGFjY2VwdCBgICtcbiAgICAgICAgICBgdGhlIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMsIHBsZWFzZSBkbyBzbyBieSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgYHRoZSBkb2N1bWVudGVkIGluc3RydWN0aW9ucyBhdCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtYCArXG4gICAgICAgICAgYC9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3NlY3VyaXR5Lm1kYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3dlYkNvbnRleHRdXG4gICAqL1xuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneShzdHJhdGVneSwgd2ViQ29udGV4dCA9IGZhbHNlKSB7XG4gICAgbGV0IHZhbGlkU3RyYXRlZ2llcyA9IHRoaXMubG9jYXRvclN0cmF0ZWdpZXM7XG4gICAgdGhpcy5sb2cuZGVidWcoYFZhbGlkIGxvY2F0b3Igc3RyYXRlZ2llcyBmb3IgdGhpcyByZXF1ZXN0OiAke3ZhbGlkU3RyYXRlZ2llcy5qb2luKCcsICcpfWApO1xuXG4gICAgaWYgKHdlYkNvbnRleHQpIHtcbiAgICAgIHZhbGlkU3RyYXRlZ2llcyA9IHZhbGlkU3RyYXRlZ2llcy5jb25jYXQodGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmluY2x1ZGVzKHZhbGlkU3RyYXRlZ2llcywgc3RyYXRlZ3kpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRTZWxlY3RvckVycm9yKFxuICAgICAgICBgTG9jYXRvciBTdHJhdGVneSAnJHtzdHJhdGVneX0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgc2Vzc2lvbmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2Vzc2lvbklkXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHByb3h5QWN0aXZlKHNlc3Npb25JZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkXG4gICAqIEByZXR1cm5zIHtbc3RyaW5nLCBSZWdFeHBdW119XG4gICAqL1xuICBnZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZXNzaW9uSWRdXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2FuUHJveHkoc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBnaXZlbiBjb21tYW5kIHJvdXRlIChleHByZXNzZWQgYXMgbWV0aG9kIGFuZCB1cmwpIHNob3VsZCBub3QgYmVcbiAgICogcHJveGllZCBhY2NvcmRpbmcgdG8gdGhpcyBkcml2ZXJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCAtIHRoZSBjdXJyZW50IHNlc3Npb25JZCAoaW4gY2FzZSB0aGUgZHJpdmVyIHJ1bnNcbiAgICogbXVsdGlwbGUgc2Vzc2lvbiBpZHMgYW5kIHJlcXVpcmVzIGl0KS4gVGhpcyBpcyBub3QgdXNlZCBpbiB0aGlzIG1ldGhvZCBidXRcbiAgICogc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlIHRvIG92ZXJyaWRkZW4gbWV0aG9kcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5IVFRQTWV0aG9kfSBtZXRob2QgLSBIVFRQIG1ldGhvZCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIHVybCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIHthbnl9IFtib2R5XSAtIHdlYmRyaXZlciByZXF1ZXN0IGJvZHlcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gd2hldGhlciB0aGUgcm91dGUgc2hvdWxkIGJlIGF2b2lkZWRcbiAgICovXG4gIHByb3h5Um91dGVJc0F2b2lkZWQoc2Vzc2lvbklkLCBtZXRob2QsIHVybCwgYm9keSkge1xuICAgIGZvciAobGV0IGF2b2lkU2NoZW1hIG9mIHRoaXMuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKSkge1xuICAgICAgaWYgKCFfLmlzQXJyYXkoYXZvaWRTY2hlbWEpIHx8IGF2b2lkU2NoZW1hLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3h5IGF2b2lkYW5jZSBtdXN0IGJlIGEgbGlzdCBvZiBwYWlycycpO1xuICAgICAgfVxuICAgICAgbGV0IFthdm9pZE1ldGhvZCwgYXZvaWRQYXRoUmVnZXhdID0gYXZvaWRTY2hlbWE7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoWydHRVQnLCAnUE9TVCcsICdERUxFVEUnXSwgYXZvaWRNZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHByb3h5IGF2b2lkYW5jZSBtZXRob2QgJyR7YXZvaWRNZXRob2R9J2ApO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzUmVnRXhwKGF2b2lkUGF0aFJlZ2V4KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3h5IGF2b2lkYW5jZSBwYXRoIG11c3QgYmUgYSByZWd1bGFyIGV4cHJlc3Npb24nKTtcbiAgICAgIH1cbiAgICAgIGxldCBub3JtYWxpemVkVXJsID0gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7Xy5lc2NhcGVSZWdFeHAodGhpcy5iYXNlUGF0aCl9YCksICcnKTtcbiAgICAgIGlmIChhdm9pZE1ldGhvZCA9PT0gbWV0aG9kICYmIGF2b2lkUGF0aFJlZ2V4LnRlc3Qobm9ybWFsaXplZFVybCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0RyaXZlcn0gZHJpdmVyXG4gICAqL1xuICBhZGRNYW5hZ2VkRHJpdmVyKGRyaXZlcikge1xuICAgIHRoaXMubWFuYWdlZERyaXZlcnMucHVzaChkcml2ZXIpO1xuICB9XG5cbiAgZ2V0TWFuYWdlZERyaXZlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFuYWdlZERyaXZlcnM7XG4gIH1cblxuICBhc3luYyBjbGVhck5ld0NvbW1hbmRUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLm5vQ29tbWFuZFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5ub0NvbW1hbmRUaW1lcik7XG4gICAgICB0aGlzLm5vQ29tbWFuZFRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHtEcml2ZXJDb3JlfTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ2FwYWJpbGl0aWVzfSBDYXBhYmlsaXRpZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXN9IFczQ0NhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlcn0gRHJpdmVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29yZX0gQ29yZVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlNlcnZlckFyZ3N9IFNlcnZlckFyZ3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FdmVudEhpc3Rvcnl9IEV2ZW50SGlzdG9yeVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkFwcGl1bUxvZ2dlcn0gQXBwaXVtTG9nZ2VyXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNO0VBQUNBLE9BQU8sRUFBRUM7QUFBVixJQUE0QkMsV0FBQSxDQUFHQyxtQkFBSCxDQUF1QkMsU0FBdkIsQ0FBbEM7O0FBRUEsTUFBTUMsc0JBQXNCLEdBQUcsS0FBSyxJQUFwQztBQUVBLE1BQU1DLDRCQUE0QixHQUFHLHNCQUFyQzs7QUFJQSxNQUFNQyxVQUFOLENBQWlCO0VBS0csT0FBWEMsV0FBVyxHQUFHUCxjQUFIO0VBS2xCUSxTQUFTLEdBQUcsSUFBSDtFQUtUQyxJQUFJO0VBS0pDLFdBQVc7RUFLWEMsSUFBSTtFQUtKQyxZQUFZO0VBRVpDLE9BQU8sR0FBR0EsZ0JBQUg7RUFVUEMsUUFBUSxHQUFHQyw0QkFBSDtFQUVSQyxzQkFBc0IsR0FBRyxLQUFIO0VBR3RCQyxhQUFhLEdBQUcsRUFBSDtFQUdiQyxZQUFZLEdBQUcsRUFBSDtFQUVaQyxtQkFBbUIsR0FBR2Ysc0JBQUg7RUFFbkJnQixjQUFjLEdBQUcsQ0FBSDtFQUdkQyxpQkFBaUIsR0FBRyxFQUFIO0VBR2pCQyxvQkFBb0IsR0FBRyxFQUFIO0VBR3BCQyxjQUFjLEdBQUcsRUFBSDtFQUdkQyxjQUFjLEdBQUcsSUFBSDtFQUdkQyxhQUFhLEdBQUc7SUFBQ0MsUUFBUSxFQUFFO0VBQVgsQ0FBSDtFQUliQyxZQUFZLEdBQUcsSUFBSUMsb0JBQUosRUFBSDtFQUtaQyxJQUFJO0VBS0pDLG9CQUFvQixHQUFHLEtBQUg7RUFLcEJDLGtCQUFrQjtFQUtsQkMsa0JBQWtCLEdBQUcsSUFBSUMsa0JBQUosRUFBSDtFQVFsQkMsUUFBUSxHQUFHLElBQUlDLHVCQUFKLEVBQUg7O0VBRVJDLFdBQVcsQ0FBQzNCLElBQUksR0FBOEIsRUFBbkMsRUFBd0NzQixrQkFBa0IsR0FBRyxJQUE3RCxFQUFtRTtJQUM1RSxLQUFLRixJQUFMLEdBQVlRLGVBQUEsQ0FBT0MsU0FBUCxDQUFpQnpCLGdCQUFBLENBQVEwQix1QkFBUixDQUFnQyxJQUFoQyxDQUFqQixDQUFaO0lBR0EsS0FBSzlCLElBQUwsR0FBWUEsSUFBWjtJQUlBLEtBQUtBLElBQUwsQ0FBVStCLE1BQVYsR0FBbUIsS0FBSy9CLElBQUwsQ0FBVStCLE1BQVYsSUFBb0JDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxjQUFoQyxJQUFrREMsV0FBQSxDQUFHQyxNQUFILEVBQXJFO0lBR0EsS0FBS2Qsa0JBQUwsR0FBMEJBLGtCQUExQjtJQUdBLEtBQUtyQixXQUFMLEdBQW1Cb0MsZUFBQSxDQUFFQyxTQUFGLENBQVksS0FBS3RDLElBQWpCLENBQW5CO0lBRUEsS0FBS0QsU0FBTCxHQUFpQixJQUFqQjtFQUNEOztFQUVNLElBQUh3QyxHQUFHLEdBQUc7SUFDUixPQUFPLEtBQUtuQixJQUFaO0VBQ0Q7O0VBV0RvQixvQkFBb0IsQ0FBQ0MsT0FBRCxFQUFVO0lBQzVCLEtBQUt2QixZQUFMLENBQWtCd0IsRUFBbEIsQ0FBcUI5Qyw0QkFBckIsRUFBbUQ2QyxPQUFuRDtFQUNEOztFQVVhLElBQVZFLFVBQVUsR0FBRztJQUNmLE9BQU8sRUFBUDtFQUNEOztFQWF5QixJQUF0QkMsc0JBQXNCLEdBQUc7SUFDM0IsT0FBTyxJQUFQO0VBQ0Q7O0VBTWUsSUFBWkMsWUFBWSxHQUFHO0lBQ2pCLE9BQU9SLGVBQUEsQ0FBRUMsU0FBRixDQUFZLEtBQUt0QixhQUFqQixDQUFQO0VBQ0Q7O0VBTUQ4QixRQUFRLENBQUNDLFNBQUQsRUFBWTtJQUNsQixJQUFJQSxTQUFTLEtBQUssVUFBbEIsRUFBOEI7TUFDNUIsTUFBTSxJQUFJQyxLQUFKLENBQVUsOEJBQVYsQ0FBTjtJQUNEOztJQUNELElBQUksT0FBT0QsU0FBUCxLQUFxQixRQUF6QixFQUFtQztNQUNqQyxNQUFNLElBQUlDLEtBQUosQ0FBVyxxQkFBb0JELFNBQVUsRUFBekMsQ0FBTjtJQUNEOztJQUNELElBQUksQ0FBQyxLQUFLL0IsYUFBTCxDQUFtQitCLFNBQW5CLENBQUwsRUFBb0M7TUFDbEMsS0FBSy9CLGFBQUwsQ0FBbUIrQixTQUFuQixJQUFnQyxFQUFoQztJQUNEOztJQUNELE1BQU1FLEVBQUUsR0FBR0MsSUFBSSxDQUFDQyxHQUFMLEVBQVg7SUFDQSxNQUFNQyxPQUFPLEdBQUcsSUFBSUYsSUFBSixDQUFTRCxFQUFULEVBQWFJLFlBQWIsRUFBaEI7O0lBQ0EsS0FBS3JDLGFBQUwsQ0FBbUIrQixTQUFuQixFQUE4Qk8sSUFBOUIsQ0FBbUNMLEVBQW5DOztJQUNBLEtBQUtWLEdBQUwsQ0FBU2dCLEtBQVQsQ0FBZ0IsVUFBU1IsU0FBVSxlQUFjRSxFQUFHLEtBQUlHLE9BQVEsR0FBaEU7RUFDRDs7RUFNYyxNQUFUSSxTQUFTLEdBQUc7SUFDaEIsT0FBTyxFQUFQO0VBQ0Q7O0VBUURDLGFBQWEsQ0FBQzFELFNBQUQsRUFBWTtJQUN2QixJQUFJLENBQUNBLFNBQUwsRUFBZ0IsT0FBTyxLQUFQO0lBQ2hCLE9BQU9BLFNBQVMsS0FBSyxLQUFLQSxTQUExQjtFQUNEOztFQVFEMkQsZ0JBQWdCLENBQUMzRCxTQUFELEVBQVk7SUFDMUIsT0FBTyxJQUFQO0VBQ0Q7O0VBRUQ0RCxpQkFBaUIsR0FBRztJQUNsQixPQUFPLEtBQUtDLFFBQUwsS0FBa0JDLG9CQUFBLENBQVVDLE9BQW5DO0VBQ0Q7O0VBRURDLGFBQWEsR0FBRztJQUNkLE9BQU8sS0FBS0gsUUFBTCxLQUFrQkMsb0JBQUEsQ0FBVUcsR0FBbkM7RUFDRDs7RUFFREMsa0JBQWtCLEdBQUc7SUFDbkIsS0FBS0wsUUFBTCxHQUFnQkMsb0JBQUEsQ0FBVUMsT0FBMUI7RUFDRDs7RUFFREksY0FBYyxHQUFHO0lBQ2YsS0FBS04sUUFBTCxHQUFnQkMsb0JBQUEsQ0FBVUcsR0FBMUI7RUFDRDs7RUFTREcsZ0JBQWdCLENBQUNDLElBQUQsRUFBTztJQUVyQixJQUFJLEtBQUszRCxZQUFMLElBQXFCNEIsZUFBQSxDQUFFZ0MsUUFBRixDQUFXLEtBQUs1RCxZQUFoQixFQUE4QjJELElBQTlCLENBQXpCLEVBQThEO01BQzVELE9BQU8sS0FBUDtJQUNEOztJQUdELElBQUksS0FBSzVELGFBQUwsSUFBc0I2QixlQUFBLENBQUVnQyxRQUFGLENBQVcsS0FBSzdELGFBQWhCLEVBQStCNEQsSUFBL0IsQ0FBMUIsRUFBZ0U7TUFDOUQsT0FBTyxJQUFQO0lBQ0Q7O0lBSUQsSUFBSSxLQUFLN0Qsc0JBQVQsRUFBaUM7TUFDL0IsT0FBTyxJQUFQO0lBQ0Q7O0lBR0QsT0FBTyxLQUFQO0VBQ0Q7O0VBUUQrRCxvQkFBb0IsQ0FBQ0YsSUFBRCxFQUFPO0lBQ3pCLElBQUksQ0FBQyxLQUFLRCxnQkFBTCxDQUFzQkMsSUFBdEIsQ0FBTCxFQUFrQztNQUNoQyxNQUFNLElBQUlwQixLQUFKLENBQ0gsaUNBQWdDb0IsSUFBSyxpQkFBdEMsR0FDRyx5REFESCxHQUVHLHdEQUZILEdBR0csMERBSEgsR0FJRyxnRUFMQyxDQUFOO0lBT0Q7RUFDRjs7RUFPREcsdUJBQXVCLENBQUNDLFFBQUQsRUFBV0MsVUFBVSxHQUFHLEtBQXhCLEVBQStCO0lBQ3BELElBQUlDLGVBQWUsR0FBRyxLQUFLOUQsaUJBQTNCO0lBQ0EsS0FBSzJCLEdBQUwsQ0FBU2dCLEtBQVQsQ0FBZ0IsOENBQTZDbUIsZUFBZSxDQUFDQyxJQUFoQixDQUFxQixJQUFyQixDQUEyQixFQUF4Rjs7SUFFQSxJQUFJRixVQUFKLEVBQWdCO01BQ2RDLGVBQWUsR0FBR0EsZUFBZSxDQUFDRSxNQUFoQixDQUF1QixLQUFLL0Qsb0JBQTVCLENBQWxCO0lBQ0Q7O0lBRUQsSUFBSSxDQUFDd0IsZUFBQSxDQUFFZ0MsUUFBRixDQUFXSyxlQUFYLEVBQTRCRixRQUE1QixDQUFMLEVBQTRDO01BQzFDLE1BQU0sSUFBSUssZ0JBQUEsQ0FBT0Msb0JBQVgsQ0FDSCxxQkFBb0JOLFFBQVMscUNBRDFCLENBQU47SUFHRDtFQUNGOztFQU9ETyxXQUFXLENBQUNoRixTQUFELEVBQVk7SUFDckIsT0FBTyxLQUFQO0VBQ0Q7O0VBT0RpRixpQkFBaUIsQ0FBQ2pGLFNBQUQsRUFBWTtJQUMzQixPQUFPLEVBQVA7RUFDRDs7RUFPRGtGLFFBQVEsQ0FBQ2xGLFNBQUQsRUFBWTtJQUNsQixPQUFPLEtBQVA7RUFDRDs7RUFlRG1GLG1CQUFtQixDQUFDbkYsU0FBRCxFQUFZb0YsTUFBWixFQUFvQkMsR0FBcEIsRUFBeUJDLElBQXpCLEVBQStCO0lBQ2hELEtBQUssSUFBSUMsV0FBVCxJQUF3QixLQUFLTixpQkFBTCxDQUF1QmpGLFNBQXZCLENBQXhCLEVBQTJEO01BQ3pELElBQUksQ0FBQ3NDLGVBQUEsQ0FBRWtELE9BQUYsQ0FBVUQsV0FBVixDQUFELElBQTJCQSxXQUFXLENBQUNFLE1BQVosS0FBdUIsQ0FBdEQsRUFBeUQ7UUFDdkQsTUFBTSxJQUFJeEMsS0FBSixDQUFVLHlDQUFWLENBQU47TUFDRDs7TUFDRCxJQUFJLENBQUN5QyxXQUFELEVBQWNDLGNBQWQsSUFBZ0NKLFdBQXBDOztNQUNBLElBQUksQ0FBQ2pELGVBQUEsQ0FBRWdDLFFBQUYsQ0FBVyxDQUFDLEtBQUQsRUFBUSxNQUFSLEVBQWdCLFFBQWhCLENBQVgsRUFBc0NvQixXQUF0QyxDQUFMLEVBQXlEO1FBQ3ZELE1BQU0sSUFBSXpDLEtBQUosQ0FBVyx3Q0FBdUN5QyxXQUFZLEdBQTlELENBQU47TUFDRDs7TUFDRCxJQUFJLENBQUNwRCxlQUFBLENBQUVzRCxRQUFGLENBQVdELGNBQVgsQ0FBTCxFQUFpQztRQUMvQixNQUFNLElBQUkxQyxLQUFKLENBQVUsbURBQVYsQ0FBTjtNQUNEOztNQUNELElBQUk0QyxhQUFhLEdBQUdSLEdBQUcsQ0FBQ1MsT0FBSixDQUFZLElBQUlDLE1BQUosQ0FBWSxJQUFHekQsZUFBQSxDQUFFMEQsWUFBRixDQUFlLEtBQUsxRixRQUFwQixDQUE4QixFQUE3QyxDQUFaLEVBQTZELEVBQTdELENBQXBCOztNQUNBLElBQUlvRixXQUFXLEtBQUtOLE1BQWhCLElBQTBCTyxjQUFjLENBQUNNLElBQWYsQ0FBb0JKLGFBQXBCLENBQTlCLEVBQWtFO1FBQ2hFLE9BQU8sSUFBUDtNQUNEO0lBQ0Y7O0lBQ0QsT0FBTyxLQUFQO0VBQ0Q7O0VBTURLLGdCQUFnQixDQUFDQyxNQUFELEVBQVM7SUFDdkIsS0FBS3BGLGNBQUwsQ0FBb0J3QyxJQUFwQixDQUF5QjRDLE1BQXpCO0VBQ0Q7O0VBRURDLGlCQUFpQixHQUFHO0lBQ2xCLE9BQU8sS0FBS3JGLGNBQVo7RUFDRDs7RUFFMkIsTUFBdEJzRixzQkFBc0IsR0FBRztJQUM3QixJQUFJLEtBQUtyRixjQUFULEVBQXlCO01BQ3ZCc0YsWUFBWSxDQUFDLEtBQUt0RixjQUFOLENBQVo7TUFDQSxLQUFLQSxjQUFMLEdBQXNCLElBQXRCO0lBQ0Q7RUFDRjs7QUE5WGMifQ==
240
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2ZXJzaW9uIiwiQkFTRURSSVZFUl9WRVIiLCJmcyIsInJlYWRQYWNrYWdlSnNvbkZyb20iLCJfX2Rpcm5hbWUiLCJORVdfQ09NTUFORF9USU1FT1VUX01TIiwiT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCIsIkRyaXZlckNvcmUiLCJiYXNlVmVyc2lvbiIsImV4ZWN1dGVNZXRob2RNYXAiLCJzZXNzaW9uSWQiLCJvcHRzIiwiaW5pdGlhbE9wdHMiLCJjYXBzIiwib3JpZ2luYWxDYXBzIiwiaGVscGVycyIsImJhc2VQYXRoIiwiREVGQVVMVF9CQVNFX1BBVEgiLCJyZWxheGVkU2VjdXJpdHlFbmFibGVkIiwiYWxsb3dJbnNlY3VyZSIsImRlbnlJbnNlY3VyZSIsIm5ld0NvbW1hbmRUaW1lb3V0TXMiLCJpbXBsaWNpdFdhaXRNcyIsImxvY2F0b3JTdHJhdGVnaWVzIiwid2ViTG9jYXRvclN0cmF0ZWdpZXMiLCJtYW5hZ2VkRHJpdmVycyIsIm5vQ29tbWFuZFRpbWVyIiwiX2V2ZW50SGlzdG9yeSIsImNvbW1hbmRzIiwiZXZlbnRFbWl0dGVyIiwiRXZlbnRFbWl0dGVyIiwiX2xvZyIsInNodXRkb3duVW5leHBlY3RlZGx5Iiwic2hvdWxkVmFsaWRhdGVDYXBzIiwiY29tbWFuZHNRdWV1ZUd1YXJkIiwiQXN5bmNMb2NrIiwic2V0dGluZ3MiLCJEZXZpY2VTZXR0aW5ncyIsImNvbnN0cnVjdG9yIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXgiLCJ0bXBEaXIiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1RNUF9ESVIiLCJvcyIsInRtcGRpciIsIl8iLCJjbG9uZURlZXAiLCJsb2ciLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsImhhbmRsZXIiLCJvbiIsImRyaXZlckRhdGEiLCJpc0NvbW1hbmRzUXVldWVFbmFibGVkIiwiZXZlbnRIaXN0b3J5IiwibG9nRXZlbnQiLCJldmVudE5hbWUiLCJFcnJvciIsInRzIiwiRGF0ZSIsIm5vdyIsImxvZ1RpbWUiLCJ0b1RpbWVTdHJpbmciLCJwdXNoIiwiZGVidWciLCJnZXRTdGF0dXMiLCJzZXNzaW9uRXhpc3RzIiwiZHJpdmVyRm9yU2Vzc2lvbiIsImlzTWpzb253cFByb3RvY29sIiwicHJvdG9jb2wiLCJQUk9UT0NPTFMiLCJNSlNPTldQIiwiaXNXM0NQcm90b2NvbCIsIlczQyIsInNldFByb3RvY29sTUpTT05XUCIsInNldFByb3RvY29sVzNDIiwiaXNGZWF0dXJlRW5hYmxlZCIsIm5hbWUiLCJpbmNsdWRlcyIsImVuc3VyZUZlYXR1cmVFbmFibGVkIiwiYXNzZXJ0RmVhdHVyZUVuYWJsZWQiLCJ2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneSIsInN0cmF0ZWd5Iiwid2ViQ29udGV4dCIsInZhbGlkU3RyYXRlZ2llcyIsImpvaW4iLCJjb25jYXQiLCJlcnJvcnMiLCJJbnZhbGlkU2VsZWN0b3JFcnJvciIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsInByb3h5Um91dGVJc0F2b2lkZWQiLCJtZXRob2QiLCJ1cmwiLCJib2R5IiwiYXZvaWRTY2hlbWEiLCJpc0FycmF5IiwibGVuZ3RoIiwiYXZvaWRNZXRob2QiLCJhdm9pZFBhdGhSZWdleCIsImlzUmVnRXhwIiwibm9ybWFsaXplZFVybCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJ0ZXN0IiwiYWRkTWFuYWdlZERyaXZlciIsImRyaXZlciIsImdldE1hbmFnZWREcml2ZXJzIiwiY2xlYXJOZXdDb21tYW5kVGltZW91dCIsImNsZWFyVGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9iYXNlZHJpdmVyL2NvcmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlcXVpcmUtYXdhaXQgKi9cblxuaW1wb3J0IHtmcywgbG9nZ2VyfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tICdldmVudHMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQge0RFRkFVTFRfQkFTRV9QQVRILCBQUk9UT0NPTFN9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2Vycm9yc30gZnJvbSAnLi4vcHJvdG9jb2wnO1xuaW1wb3J0IERldmljZVNldHRpbmdzIGZyb20gJy4vZGV2aWNlLXNldHRpbmdzJztcbmltcG9ydCBoZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5cbi8vIGZvciBjb21wYXQgd2l0aCBydW5uaW5nIHRlc3RzIHRyYW5zcGlsZWQgYW5kIGluLXBsYWNlXG5jb25zdCB7dmVyc2lvbjogQkFTRURSSVZFUl9WRVJ9ID0gZnMucmVhZFBhY2thZ2VKc29uRnJvbShfX2Rpcm5hbWUpO1xuXG5jb25zdCBORVdfQ09NTUFORF9USU1FT1VUX01TID0gNjAgKiAxMDAwO1xuXG5jb25zdCBPTl9VTkVYUEVDVEVEX1NIVVRET1dOX0VWRU5UID0gJ29uVW5leHBlY3RlZFNodXRkb3duJztcbi8qKlxuICogQGltcGxlbWVudHMge0NvcmV9XG4gKi9cbmNsYXNzIERyaXZlckNvcmUge1xuICAvKipcbiAgICogTWFrZSB0aGUgYmFzZWRyaXZlciB2ZXJzaW9uIGF2YWlsYWJsZSBzbyBmb3IgYW55IGRyaXZlciB3aGljaCBpbmhlcml0cyBmcm9tIHRoaXMgcGFja2FnZSwgd2VcbiAgICoga25vdyB3aGljaCB2ZXJzaW9uIG9mIGJhc2Vkcml2ZXIgaXQgaW5oZXJpdGVkIGZyb21cbiAgICovXG4gIHN0YXRpYyBiYXNlVmVyc2lvbiA9IEJBU0VEUklWRVJfVkVSO1xuXG4gIC8qKiBAdHlwZSB7RXhlY3V0ZU1ldGhvZE1hcH0gKi9cbiAgc3RhdGljIGV4ZWN1dGVNZXRob2RNYXAgPSB7fTtcblxuICAvKipcbiAgICogQHR5cGUge3N0cmluZz99XG4gICAqL1xuICBzZXNzaW9uSWQgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyT3B0c31cbiAgICovXG4gIG9wdHM7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtTZXJ2ZXJBcmdzfVxuICAgKi9cbiAgaW5pdGlhbE9wdHM7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtDYXBhYmlsaXRpZXN9XG4gICAqL1xuICBjYXBzO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7VzNDQ2FwYWJpbGl0aWVzfVxuICAgKi9cbiAgb3JpZ2luYWxDYXBzO1xuXG4gIGhlbHBlcnMgPSBoZWxwZXJzO1xuXG4gIC8qKlxuICAgKiBiYXNlUGF0aCBpcyB1c2VkIGZvciBzZXZlcmFsIHB1cnBvc2VzLCBmb3IgZXhhbXBsZSBpbiBzZXR0aW5nIHVwXG4gICAqIHByb3h5aW5nIHRvIG90aGVyIGRyaXZlcnMsIHNpbmNlIHdlIG5lZWQgdG8ga25vdyB3aGF0IHRoZSBiYXNlIHBhdGhcbiAgICogb2YgYW55IGluY29taW5nIHJlcXVlc3QgbWlnaHQgbG9vayBsaWtlLiBXZSBzZXQgaXQgdG8gdGhlIGRlZmF1bHRcbiAgICogaW5pdGlhbGx5IGJ1dCBpdCBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIGFueSBhY3R1YWwgcHJvZ3JhbVxuICAgKiBleGVjdXRpb24gYnkgdGhlIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgd2hpY2ggaXMgbmVjZXNzYXJpbHkgcnVuIGFzXG4gICAqIHRoZSBlbnRyeXBvaW50IGZvciBhbnkgQXBwaXVtIHNlcnZlclxuICAgKi9cbiAgYmFzZVBhdGggPSBERUZBVUxUX0JBU0VfUEFUSDtcblxuICByZWxheGVkU2VjdXJpdHlFbmFibGVkID0gZmFsc2U7XG5cbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgYWxsb3dJbnNlY3VyZSA9IFtdO1xuXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIGRlbnlJbnNlY3VyZSA9IFtdO1xuXG4gIG5ld0NvbW1hbmRUaW1lb3V0TXMgPSBORVdfQ09NTUFORF9USU1FT1VUX01TO1xuXG4gIGltcGxpY2l0V2FpdE1zID0gMDtcblxuICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICBsb2NhdG9yU3RyYXRlZ2llcyA9IFtdO1xuXG4gIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gIHdlYkxvY2F0b3JTdHJhdGVnaWVzID0gW107XG5cbiAgLyoqIEB0eXBlIHtEcml2ZXJbXX0gKi9cbiAgbWFuYWdlZERyaXZlcnMgPSBbXTtcblxuICAvKiogQHR5cGUge05vZGVKUy5UaW1lb3V0P30gKi9cbiAgbm9Db21tYW5kVGltZXIgPSBudWxsO1xuXG4gIC8qKiBAdHlwZSB7RXZlbnRIaXN0b3J5fSAqL1xuICBfZXZlbnRIaXN0b3J5ID0ge2NvbW1hbmRzOiBbXX07XG5cbiAgLy8gdXNlZCB0byBoYW5kbGUgZHJpdmVyIGV2ZW50c1xuICAvKiogQHR5cGUge05vZGVKUy5FdmVudEVtaXR0ZXJ9ICovXG4gIGV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogQHR5cGUge0FwcGl1bUxvZ2dlcn1cbiAgICovXG4gIF9sb2c7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHNodXRkb3duVW5leHBlY3RlZGx5ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgc2hvdWxkVmFsaWRhdGVDYXBzO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBjb21tYW5kc1F1ZXVlR3VhcmQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbiAgLyoqXG4gICAqIHNldHRpbmdzIHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgYnkgZHJpdmVycyB3aGljaCBleHRlbmQgQmFzZURyaXZlciwgYnV0XG4gICAqIHdlIHNldCBpdCB0byBhbiBlbXB0eSBEZXZpY2VTZXR0aW5ncyBpbnN0YW5jZSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZVxuICAgKiBkZWZhdWx0IHNldHRpbmdzIGFyZSBhcHBsaWVkIGV2ZW4gaWYgYW4gZXh0ZW5kaW5nIGRyaXZlciBkb2Vzbid0IHV0aWxpemVcbiAgICogdGhlIHNldHRpbmdzIGZ1bmN0aW9uYWxpdHkgaXRzZWxmXG4gICAqL1xuICBzZXR0aW5ncyA9IG5ldyBEZXZpY2VTZXR0aW5ncygpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdHMgPSAvKiogQHR5cGUge1NlcnZlckFyZ3N9ICovICh7fSksIHNob3VsZFZhbGlkYXRlQ2FwcyA9IHRydWUpIHtcbiAgICB0aGlzLl9sb2cgPSBsb2dnZXIuZ2V0TG9nZ2VyKGhlbHBlcnMuZ2VuZXJhdGVEcml2ZXJMb2dQcmVmaXgodGhpcykpO1xuXG4gICAgLy8gc2V0dXAgc3RhdGVcbiAgICB0aGlzLm9wdHMgPSBvcHRzO1xuXG4gICAgLy8gdXNlIGEgY3VzdG9tIHRtcCBkaXIgdG8gYXZvaWQgbG9zaW5nIGRhdGEgYW5kIGFwcCB3aGVuIGNvbXB1dGVyIGlzXG4gICAgLy8gcmVzdGFydGVkXG4gICAgdGhpcy5vcHRzLnRtcERpciA9IHRoaXMub3B0cy50bXBEaXIgfHwgcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgfHwgb3MudG1wZGlyKCk7XG5cbiAgICAvLyBiYXNlLWRyaXZlciBpbnRlcm5hbHNcbiAgICB0aGlzLnNob3VsZFZhbGlkYXRlQ2FwcyA9IHNob3VsZFZhbGlkYXRlQ2FwcztcblxuICAgIC8vIGtlZXBpbmcgdHJhY2sgb2YgaW5pdGlhbCBvcHRzXG4gICAgdGhpcy5pbml0aWFsT3B0cyA9IF8uY2xvbmVEZWVwKHRoaXMub3B0cyk7XG5cbiAgICB0aGlzLnNlc3Npb25JZCA9IG51bGw7XG4gIH1cblxuICBnZXQgbG9nKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2c7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgY2FsbGJhY2sgaGFuZGxlciBpZiBuZWVkZWQgdG8gZXhlY3V0ZSBhIGN1c3RvbSBwaWVjZSBvZiBjb2RlXG4gICAqIHdoZW4gdGhlIGRyaXZlciBpcyBzaHV0IGRvd24gdW5leHBlY3RlZGx5LiBNdWx0aXBsZSBjYWxscyB0byB0aGlzIG1ldGhvZFxuICAgKiB3aWxsIGNhdXNlIHRoZSBoYW5kbGVyIHRvIGJlIGV4ZWN1dGVkIG11dGlwbGUgdGltZXNcbiAgICpcbiAgICogQHBhcmFtIHsoLi4uYXJnczogYW55W10pID0+IHZvaWR9IGhhbmRsZXIgVGhlIGNvZGUgdG8gYmUgZXhlY3V0ZWQgb24gdW5leHBlY3RlZCBzaHV0ZG93bi5cbiAgICogVGhlIGZ1bmN0aW9uIG1heSBhY2NlcHQgb25lIGFyZ3VtZW50LCB3aGljaCBpcyB0aGUgYWN0dWFsIGVycm9yIGluc3RhbmNlLCB3aGljaFxuICAgKiBjYXVzZWQgdGhlIGRyaXZlciB0byBzaHV0IGRvd24uXG4gICAqL1xuICBvblVuZXhwZWN0ZWRTaHV0ZG93bihoYW5kbGVyKSB7XG4gICAgdGhpcy5ldmVudEVtaXR0ZXIub24oT05fVU5FWFBFQ1RFRF9TSFVURE9XTl9FVkVOVCwgaGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IEFwcGl1bURyaXZlciB0byBzdG9yZSB0aGUgZGF0YSBvZiB0aGVcbiAgICogc3BlY2lmaWMgZHJpdmVyIHNlc3Npb25zLiBUaGlzIGRhdGEgY2FuIGJlIGxhdGVyIHVzZWQgdG8gYWRqdXN0XG4gICAqIHByb3BlcnRpZXMgZm9yIGRyaXZlciBpbnN0YW5jZXMgcnVubmluZyBpbiBwYXJhbGxlbC5cbiAgICogT3ZlcnJpZGUgaXQgaW4gaW5oZXJpdGVkIGRyaXZlciBjbGFzc2VzIGlmIG5lY2Vzc2FyeS5cbiAgICpcbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gRHJpdmVyIHByb3BlcnRpZXMgbWFwcGluZ1xuICAgKi9cbiAgZ2V0IGRyaXZlckRhdGEoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgY29udHJvbHMgdGhlIHdheSB7I2V4ZWN1dGVDb21tYW5kfSBtZXRob2RcbiAgICogaGFuZGxlcyBuZXcgZHJpdmVyIGNvbW1hbmRzIHJlY2VpdmVkIGZyb20gdGhlIGNsaWVudC5cbiAgICogT3ZlcnJpZGUgaXQgZm9yIGluaGVyaXRlZCBjbGFzc2VzIG9ubHkgaW4gc3BlY2lhbCBjYXNlcy5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIHRydWUgKGRlZmF1bHQpIHRoZW4gYWxsIHRoZSBjb21tYW5kc1xuICAgKiAgIHJlY2VpdmVkIGJ5IHRoZSBwYXJ0aWN1bGFyIGRyaXZlciBpbnN0YW5jZSBhcmUgZ29pbmcgdG8gYmUgcHV0IGludG8gdGhlIHF1ZXVlLFxuICAgKiAgIHNvIGVhY2ggZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgdW50aWwgdGhlIHByZXZpb3VzIGNvbW1hbmRcbiAgICogICBleGVjdXRpb24gaXMgY29tcGxldGVkLiBGYWxzZSB2YWx1ZSBkaXNhYmxlcyB0aGF0IHF1ZXVlLCBzbyBlYWNoIGRyaXZlciBjb21tYW5kXG4gICAqICAgaXMgZXhlY3V0ZWQgaW5kZXBlbmRlbnRseSBhbmQgZG9lcyBub3Qgd2FpdCBmb3IgYW55dGhpbmcuXG4gICAqL1xuICBnZXQgaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qXG4gICAqIG1ha2UgZXZlbnRIaXN0b3J5IGEgcHJvcGVydHkgYW5kIHJldHVybiBhIGNsb25lZCBvYmplY3Qgc28gYSBjb25zdW1lciBjYW4ndFxuICAgKiBpbmFkdmVydGVudGx5IGNoYW5nZSBkYXRhIG91dHNpZGUgb2YgbG9nRXZlbnRcbiAgICovXG4gIGdldCBldmVudEhpc3RvcnkoKSB7XG4gICAgcmV0dXJuIF8uY2xvbmVEZWVwKHRoaXMuX2V2ZW50SGlzdG9yeSk7XG4gIH1cblxuICAvKipcbiAgICogQVBJIG1ldGhvZCBmb3IgZHJpdmVyIGRldmVsb3BlcnMgdG8gbG9nIHRpbWluZ3MgZm9yIGltcG9ydGFudCBldmVudHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICAgKi9cbiAgbG9nRXZlbnQoZXZlbnROYW1lKSB7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2NvbW1hbmRzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9nIGNvbW1hbmRzIGRpcmVjdGx5Jyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXZlbnROYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGV2ZW50TmFtZSAke2V2ZW50TmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9ldmVudEhpc3RvcnlbZXZlbnROYW1lXSkge1xuICAgICAgdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0gPSBbXTtcbiAgICB9XG4gICAgY29uc3QgdHMgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGxvZ1RpbWUgPSBuZXcgRGF0ZSh0cykudG9UaW1lU3RyaW5nKCk7XG4gICAgdGhpcy5fZXZlbnRIaXN0b3J5W2V2ZW50TmFtZV0ucHVzaCh0cyk7XG4gICAgdGhpcy5sb2cuZGVidWcoYEV2ZW50ICcke2V2ZW50TmFtZX0nIGxvZ2dlZCBhdCAke3RzfSAoJHtsb2dUaW1lfSlgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZGVuIGluIGFwcGl1bSBkcml2ZXIsIGJ1dCBoZXJlIHNvIHRoYXQgaW5kaXZpZHVhbCBkcml2ZXJzIGNhbiBiZVxuICAgKiB0ZXN0ZWQgd2l0aCBjbGllbnRzIHRoYXQgcG9sbFxuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBzaG91bGRcbiAgICogcmVzcG9uZCB3aXRoIGFuIGludmFsaWQgc2Vzc2lvbiByZXNwb25zZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3Nlc3Npb25JZF1cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZXNzaW9uRXhpc3RzKHNlc3Npb25JZCkge1xuICAgIGlmICghc2Vzc2lvbklkKSByZXR1cm4gZmFsc2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY3VybHlcbiAgICByZXR1cm4gc2Vzc2lvbklkID09PSB0aGlzLnNlc3Npb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBtZXRob2QgcmVxdWlyZWQgYnkgTUpTT05XUCBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgdGhlIGNvbW1hbmQgc2hvdWxkXG4gICAqIGJlIHByb3hpZWQgZGlyZWN0bHkgdG8gdGhlIGRyaXZlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkXG4gICAqIEByZXR1cm5zIHtDb3JlIHwgbnVsbH1cbiAgICovXG4gIGRyaXZlckZvclNlc3Npb24oc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpc01qc29ud3BQcm90b2NvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm90b2NvbCA9PT0gUFJPVE9DT0xTLk1KU09OV1A7XG4gIH1cblxuICBpc1czQ1Byb3RvY29sKCkge1xuICAgIHJldHVybiB0aGlzLnByb3RvY29sID09PSBQUk9UT0NPTFMuVzNDO1xuICB9XG5cbiAgc2V0UHJvdG9jb2xNSlNPTldQKCkge1xuICAgIHRoaXMucHJvdG9jb2wgPSBQUk9UT0NPTFMuTUpTT05XUDtcbiAgfVxuXG4gIHNldFByb3RvY29sVzNDKCkge1xuICAgIHRoaXMucHJvdG9jb2wgPSBQUk9UT0NPTFMuVzNDO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgYSBnaXZlbiBmZWF0dXJlIGlzIGVuYWJsZWQgdmlhIGl0cyBuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gbmFtZSBvZiBmZWF0dXJlL2NvbW1hbmRcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAqL1xuICBpc0ZlYXR1cmVFbmFibGVkKG5hbWUpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGV4cGxpY2l0bHkgZGVuaWVkIHRoaXMgZmVhdHVyZSwgcmV0dXJuIGZhbHNlIGltbWVkaWF0ZWx5XG4gICAgaWYgKHRoaXMuZGVueUluc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5kZW55SW5zZWN1cmUsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugc3BlY2lmaWNhbGx5IGhhdmUgYWxsb3dlZCB0aGUgZmVhdHVyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAodGhpcy5hbGxvd0luc2VjdXJlICYmIF8uaW5jbHVkZXModGhpcy5hbGxvd0luc2VjdXJlLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCBpZiB3ZSd2ZSBnbG9iYWxseSBhbGxvd2VkIGluc2VjdXJlIGZlYXR1cmVzIGFuZCBub3QgZGVuaWVkXG4gICAgLy8gdGhpcyBvbmUsIHJldHVybiB0cnVlXG4gICAgaWYgKHRoaXMucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBhbGxvd2VkIGFueXRoaW5nIGluc2VjdXJlLCB0aGVuIHJlamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlcnQgdGhhdCBhIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgdGhyb3cgYSBoZWxwZnVsIGVycm9yIGlmIGl0J3NcbiAgICogbm90XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gbmFtZSBvZiBmZWF0dXJlL2NvbW1hbmRcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGVuc3VyZUZlYXR1cmVFbmFibGVkKG5hbWUpIHtcbiAgICB0aGlzLmFzc2VydEZlYXR1cmVFbmFibGVkKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VydCB0aGF0IGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIGFuZCB0aHJvdyBhIGhlbHBmdWwgZXJyb3IgaWYgaXQnc1xuICAgKiBub3RcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBuYW1lIG9mIGZlYXR1cmUvY29tbWFuZFxuICAgKi9cbiAgYXNzZXJ0RmVhdHVyZUVuYWJsZWQobmFtZSkge1xuICAgIGlmICghdGhpcy5pc0ZlYXR1cmVFbmFibGVkKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQb3RlbnRpYWxseSBpbnNlY3VyZSBmZWF0dXJlICcke25hbWV9JyBoYXMgbm90IGJlZW4gYCArXG4gICAgICAgICAgYGVuYWJsZWQuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgYW5kIGFjY2VwdCBgICtcbiAgICAgICAgICBgdGhlIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMsIHBsZWFzZSBkbyBzbyBieSBmb2xsb3dpbmcgYCArXG4gICAgICAgICAgYHRoZSBkb2N1bWVudGVkIGluc3RydWN0aW9ucyBhdCBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtYCArXG4gICAgICAgICAgYC9hcHBpdW0vYmxvYi9tYXN0ZXIvZG9jcy9lbi93cml0aW5nLXJ1bm5pbmctYXBwaXVtL3NlY3VyaXR5Lm1kYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3dlYkNvbnRleHRdXG4gICAqL1xuICB2YWxpZGF0ZUxvY2F0b3JTdHJhdGVneShzdHJhdGVneSwgd2ViQ29udGV4dCA9IGZhbHNlKSB7XG4gICAgbGV0IHZhbGlkU3RyYXRlZ2llcyA9IHRoaXMubG9jYXRvclN0cmF0ZWdpZXM7XG4gICAgdGhpcy5sb2cuZGVidWcoYFZhbGlkIGxvY2F0b3Igc3RyYXRlZ2llcyBmb3IgdGhpcyByZXF1ZXN0OiAke3ZhbGlkU3RyYXRlZ2llcy5qb2luKCcsICcpfWApO1xuXG4gICAgaWYgKHdlYkNvbnRleHQpIHtcbiAgICAgIHZhbGlkU3RyYXRlZ2llcyA9IHZhbGlkU3RyYXRlZ2llcy5jb25jYXQodGhpcy53ZWJMb2NhdG9yU3RyYXRlZ2llcyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmluY2x1ZGVzKHZhbGlkU3RyYXRlZ2llcywgc3RyYXRlZ3kpKSB7XG4gICAgICB0aHJvdyBuZXcgZXJyb3JzLkludmFsaWRTZWxlY3RvckVycm9yKFxuICAgICAgICBgTG9jYXRvciBTdHJhdGVneSAnJHtzdHJhdGVneX0nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgc2Vzc2lvbmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2Vzc2lvbklkXVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHByb3h5QWN0aXZlKHNlc3Npb25JZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkXG4gICAqIEByZXR1cm5zIHtbc3RyaW5nLCBSZWdFeHBdW119XG4gICAqL1xuICBnZXRQcm94eUF2b2lkTGlzdChzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZXNzaW9uSWRdXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2FuUHJveHkoc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBnaXZlbiBjb21tYW5kIHJvdXRlIChleHByZXNzZWQgYXMgbWV0aG9kIGFuZCB1cmwpIHNob3VsZCBub3QgYmVcbiAgICogcHJveGllZCBhY2NvcmRpbmcgdG8gdGhpcyBkcml2ZXJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlc3Npb25JZCAtIHRoZSBjdXJyZW50IHNlc3Npb25JZCAoaW4gY2FzZSB0aGUgZHJpdmVyIHJ1bnNcbiAgICogbXVsdGlwbGUgc2Vzc2lvbiBpZHMgYW5kIHJlcXVpcmVzIGl0KS4gVGhpcyBpcyBub3QgdXNlZCBpbiB0aGlzIG1ldGhvZCBidXRcbiAgICogc2hvdWxkIGJlIG1hZGUgYXZhaWxhYmxlIHRvIG92ZXJyaWRkZW4gbWV0aG9kcy5cbiAgICogQHBhcmFtIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5IVFRQTWV0aG9kfSBtZXRob2QgLSBIVFRQIG1ldGhvZCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIHVybCBvZiB0aGUgcm91dGVcbiAgICogQHBhcmFtIHthbnl9IFtib2R5XSAtIHdlYmRyaXZlciByZXF1ZXN0IGJvZHlcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gd2hldGhlciB0aGUgcm91dGUgc2hvdWxkIGJlIGF2b2lkZWRcbiAgICovXG4gIHByb3h5Um91dGVJc0F2b2lkZWQoc2Vzc2lvbklkLCBtZXRob2QsIHVybCwgYm9keSkge1xuICAgIGZvciAobGV0IGF2b2lkU2NoZW1hIG9mIHRoaXMuZ2V0UHJveHlBdm9pZExpc3Qoc2Vzc2lvbklkKSkge1xuICAgICAgaWYgKCFfLmlzQXJyYXkoYXZvaWRTY2hlbWEpIHx8IGF2b2lkU2NoZW1hLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3h5IGF2b2lkYW5jZSBtdXN0IGJlIGEgbGlzdCBvZiBwYWlycycpO1xuICAgICAgfVxuICAgICAgbGV0IFthdm9pZE1ldGhvZCwgYXZvaWRQYXRoUmVnZXhdID0gYXZvaWRTY2hlbWE7XG4gICAgICBpZiAoIV8uaW5jbHVkZXMoWydHRVQnLCAnUE9TVCcsICdERUxFVEUnXSwgYXZvaWRNZXRob2QpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHByb3h5IGF2b2lkYW5jZSBtZXRob2QgJyR7YXZvaWRNZXRob2R9J2ApO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzUmVnRXhwKGF2b2lkUGF0aFJlZ2V4KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3h5IGF2b2lkYW5jZSBwYXRoIG11c3QgYmUgYSByZWd1bGFyIGV4cHJlc3Npb24nKTtcbiAgICAgIH1cbiAgICAgIGxldCBub3JtYWxpemVkVXJsID0gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7Xy5lc2NhcGVSZWdFeHAodGhpcy5iYXNlUGF0aCl9YCksICcnKTtcbiAgICAgIGlmIChhdm9pZE1ldGhvZCA9PT0gbWV0aG9kICYmIGF2b2lkUGF0aFJlZ2V4LnRlc3Qobm9ybWFsaXplZFVybCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0RyaXZlcn0gZHJpdmVyXG4gICAqL1xuICBhZGRNYW5hZ2VkRHJpdmVyKGRyaXZlcikge1xuICAgIHRoaXMubWFuYWdlZERyaXZlcnMucHVzaChkcml2ZXIpO1xuICB9XG5cbiAgZ2V0TWFuYWdlZERyaXZlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFuYWdlZERyaXZlcnM7XG4gIH1cblxuICBhc3luYyBjbGVhck5ld0NvbW1hbmRUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLm5vQ29tbWFuZFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5ub0NvbW1hbmRUaW1lcik7XG4gICAgICB0aGlzLm5vQ29tbWFuZFRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHtEcml2ZXJDb3JlfTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ2FwYWJpbGl0aWVzfSBDYXBhYmlsaXRpZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXN9IFczQ0NhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlcn0gRHJpdmVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29yZX0gQ29yZVxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkV4ZWN1dGVNZXRob2RNYXB9IEV4ZWN1dGVNZXRob2RNYXBcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TZXJ2ZXJBcmdzfSBTZXJ2ZXJBcmdzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRXZlbnRIaXN0b3J5fSBFdmVudEhpc3RvcnlcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5BcHBpdW1Mb2dnZXJ9IEFwcGl1bUxvZ2dlclxuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTTtFQUFDQSxPQUFPLEVBQUVDO0FBQVYsSUFBNEJDLFdBQUEsQ0FBR0MsbUJBQUgsQ0FBdUJDLFNBQXZCLENBQWxDOztBQUVBLE1BQU1DLHNCQUFzQixHQUFHLEtBQUssSUFBcEM7QUFFQSxNQUFNQyw0QkFBNEIsR0FBRyxzQkFBckM7O0FBSUEsTUFBTUMsVUFBTixDQUFpQjtFQUtHLE9BQVhDLFdBQVcsR0FBR1AsY0FBSDtFQUdLLE9BQWhCUSxnQkFBZ0IsR0FBRyxFQUFIO0VBS3ZCQyxTQUFTLEdBQUcsSUFBSDtFQUtUQyxJQUFJO0VBS0pDLFdBQVc7RUFLWEMsSUFBSTtFQUtKQyxZQUFZO0VBRVpDLE9BQU8sR0FBR0EsZ0JBQUg7RUFVUEMsUUFBUSxHQUFHQyw0QkFBSDtFQUVSQyxzQkFBc0IsR0FBRyxLQUFIO0VBR3RCQyxhQUFhLEdBQUcsRUFBSDtFQUdiQyxZQUFZLEdBQUcsRUFBSDtFQUVaQyxtQkFBbUIsR0FBR2hCLHNCQUFIO0VBRW5CaUIsY0FB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