appium 2.0.0-beta.22 → 2.0.0-beta.23

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.
@@ -179,6 +179,9 @@ class AppiumDriver extends _baseDriver.BaseDriver {
179
179
 
180
180
  this.assignCliArgsToExtension('driver', driverName, driverInstance);
181
181
  driverInstance.server = this.server;
182
+ driverInstance.serverHost = this.args.address;
183
+ driverInstance.serverPort = this.args.port;
184
+ driverInstance.serverPath = this.args.basePath;
182
185
 
183
186
  try {
184
187
  runningDriversData = await this.curSessionDataForDriver(InnerDriver);
@@ -560,4 +563,4 @@ class NoDriverProxyCommandError extends Error {
560
563
  exports.NoDriverProxyCommandError = NoDriverProxyCommandError;require('source-map-support').install();
561
564
 
562
565
 
563
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hcHBpdW0uanMiXSwibmFtZXMiOlsiZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyIsImF1dG9tYXRpb25OYW1lIiwicHJlc2VuY2UiLCJpc1N0cmluZyIsInBsYXRmb3JtTmFtZSIsInNlc3Npb25zTGlzdEd1YXJkIiwiQXN5bmNMb2NrIiwicGVuZGluZ0RyaXZlcnNHdWFyZCIsIkFwcGl1bURyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJ0bXBEaXIiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1RNUF9ESVIiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJuZXdDb21tYW5kVGltZW91dE1zIiwic2Vzc2lvbnMiLCJwZW5kaW5nRHJpdmVycyIsInBsdWdpbkNsYXNzZXMiLCJzZXNzaW9uUGx1Z2lucyIsInNlc3Npb25sZXNzUGx1Z2lucyIsImlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQiLCJzZXNzaW9uRXhpc3RzIiwic2Vzc2lvbklkIiwiZHN0U2Vzc2lvbiIsImRyaXZlckZvclNlc3Npb24iLCJnZXRTdGF0dXMiLCJidWlsZCIsIl8iLCJjbG9uZSIsImdldFNlc3Npb25zIiwiYWNxdWlyZSIsIm5hbWUiLCJ0b1BhaXJzIiwibWFwIiwiaWQiLCJkcml2ZXIiLCJjYXBhYmlsaXRpZXMiLCJjYXBzIiwicHJpbnROZXdTZXNzaW9uQW5ub3VuY2VtZW50IiwiZHJpdmVyTmFtZSIsImRyaXZlclZlcnNpb24iLCJkcml2ZXJCYXNlVmVyc2lvbiIsImxvZyIsImluZm8iLCJBUFBJVU1fVkVSIiwiYmFzZVZlcnNpb24iLCJfZmluZE1hdGNoaW5nRHJpdmVyIiwiYXNzaWduQ2xpQXJnc1RvRXh0ZW5zaW9uIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJleHRJbnN0YW5jZSIsImNsaUFyZ3MiLCJpc0VtcHR5IiwiY3JlYXRlU2Vzc2lvbiIsImpzb253cENhcHMiLCJyZXFDYXBzIiwidzNjQ2FwYWJpbGl0aWVzIiwiZGVmYXVsdENhcGFiaWxpdGllcyIsImNsb25lRGVlcCIsImRlZmF1bHRTZXR0aW5ncyIsImp3cFNldHRpbmdzIiwiT2JqZWN0IiwiYXNzaWduIiwidzNjU2V0dGluZ3MiLCJhbHdheXNNYXRjaCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJwcm90b2NvbCIsImlubmVyU2Vzc2lvbklkIiwiZENhcHMiLCJwYXJzZWRDYXBzIiwiZGVzaXJlZENhcHMiLCJwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMiLCJwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMiLCJlcnJvciIsIklubmVyRHJpdmVyIiwidmVyc2lvbiIsImRyaXZlckNvbmZpZyIsInNlc3Npb25PdmVycmlkZSIsImRlbGV0ZUFsbFNlc3Npb25zIiwicnVubmluZ0RyaXZlcnNEYXRhIiwib3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEiLCJkcml2ZXJJbnN0YW5jZSIsInJlbGF4ZWRTZWN1cml0eUVuYWJsZWQiLCJkZW55SW5zZWN1cmUiLCJhIiwiYWxsb3dJbnNlY3VyZSIsInNlcnZlciIsImN1clNlc3Npb25EYXRhRm9yRHJpdmVyIiwiZSIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJtZXNzYWdlIiwiZHJ2IiwiZHJpdmVyRGF0YSIsInB1c2giLCJwdWxsIiwiYXR0YWNoVW5leHBlY3RlZFNodXRkb3duSGFuZGxlciIsInN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQiLCJpc1czQ1Byb3RvY29sIiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZVNldHRpbmdzIiwiaXNNanNvbndwUHJvdG9jb2wiLCJ2YWx1ZSIsIm9uU2h1dGRvd24iLCJjYXVzZSIsIkVycm9yIiwid2FybiIsInBsdWdpbiIsImlzRnVuY3Rpb24iLCJvblVuZXhwZWN0ZWRTaHV0ZG93biIsImRlYnVnIiwiZGF0YSIsInZhbHVlcyIsImZpbHRlciIsInMiLCJkYXR1bSIsImRlbGV0ZVNlc3Npb24iLCJvdGhlclNlc3Npb25zRGF0YSIsImN1ckNvbnN0cnVjdG9yTmFtZSIsImtleSIsIm9wdHMiLCJzZXNzaW9uc0NvdW50Iiwic2l6ZSIsImZvcmNlIiwicmVhc29uIiwidXRpbCIsInBsdXJhbGl6ZSIsImNsZWFudXBQcm9taXNlcyIsInN0YXJ0VW5leHBlY3RlZFNodXRkb3duIiwia2V5cyIsImNsZWFudXBQcm9taXNlIiwicGx1Z2luc0ZvclNlc3Npb24iLCJjcmVhdGVQbHVnaW5JbnN0YW5jZXMiLCJwbHVnaW5zVG9IYW5kbGVDbWQiLCJjbWQiLCJwIiwiaGFuZGxlIiwiUGx1Z2luQ2xhc3MiLCJwbHVnaW5OYW1lIiwiZXhlY3V0ZUNvbW1hbmQiLCJpc0dldFN0YXR1cyIsImlzVW1icmVsbGFDbWQiLCJpc0FwcGl1bURyaXZlckNvbW1hbmQiLCJpc1Nlc3Npb25DbWQiLCJyZXFGb3JQcm94eSIsImxhc3QiLCJwb3AiLCJwbHVnaW5zIiwiY21kSGFuZGxlZEJ5IiwiZGVmYXVsdCIsImRlZmF1bHRCZWhhdmlvciIsImxlbmd0aCIsInByb3h5Q29tbWFuZCIsIk5vRHJpdmVyUHJveHlDb21tYW5kRXJyb3IiLCJvcmlnaW5hbFVybCIsIm1ldGhvZCIsImJvZHkiLCJ3cmFwcGVkQ21kIiwid3JhcENvbW1hbmRXaXRoUGx1Z2lucyIsIm5leHQiLCJyZXMiLCJleGVjdXRlV3JhcHBlZENvbW1hbmQiLCJsb2dQbHVnaW5IYW5kbGVyUmVwb3J0IiwiQ1JFQVRFX1NFU1NJT05fQ09NTUFORCIsImZpcnN0IiwiX25leHQiLCJkaWRIYW5kbGUiLCJrIiwiZGlkbnRIYW5kbGUiLCJjbWRSZXMiLCJjbWRFcnIiLCJpc1BsYWluT2JqZWN0IiwiaGFzIiwicHJveHlBY3RpdmUiLCJnZXRQcm94eUF2b2lkTGlzdCIsImNhblByb3h5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsNEJBQTRCLEdBQUc7QUFDbkNDLEVBQUFBLGNBQWMsRUFBRTtBQUNkQyxJQUFBQSxRQUFRLEVBQUUsSUFESTtB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Qyw2REFIUDtBQURhLGdEQUZSLGtDQUVRO0FBS2Q7O0FBWGtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZ2V0QnVpbGRJbmZvLCB1cGRhdGVCdWlsZEluZm8sIEFQUElVTV9WRVIgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBmaW5kTWF0Y2hpbmdEcml2ZXIgfSBmcm9tICcuL2RyaXZlcnMnO1xuaW1wb3J0IHsgQmFzZURyaXZlciwgZXJyb3JzLCBpc1Nlc3Npb25Db21tYW5kLFxuICAgICAgICAgQ1JFQVRFX1NFU1NJT05fQ09NTUFORCB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLCBwdWxsU2V0dGluZ3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzID0ge1xuICBhdXRvbWF0aW9uTmFtZToge1xuICAgIHByZXNlbmNlOiB0cnVlLFxuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBwbGF0Zm9ybU5hbWU6IHtcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbn07XG5cbmNvbnN0IHNlc3Npb25zTGlzdEd1YXJkID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgcGVuZGluZ0RyaXZlcnNHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcblxuY2xhc3MgQXBwaXVtRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChhcmdzKSB7XG4gICAgLy8gSXQgaXMgbmVjZXNzYXJ5IHRvIHNldCBgLS10bXBgIGhlcmUgc2luY2UgaXQgc2hvdWxkIGJlIHNldCB0b1xuICAgIC8vIHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSIG9uY2UgYXQgYW4gaW5pdGlhbCBwb2ludCBpbiB0aGUgQXBwaXVtIGxpZmVjeWNsZS5cbiAgICAvLyBUaGUgcHJvY2VzcyBhcmd1bWVudCB3aWxsIGJlIHJlZmVyZW5jZWQgYnkgQmFzZURyaXZlci5cbiAgICAvLyBQbGVhc2UgY2FsbCBAYXBwaXVtL3N1cHBvcnQudGVtcERpciBtb2R1bGUgdG8gYXBwbHkgdGhpcyBiZW5lZml0LlxuICAgIGlmIChhcmdzLnRtcERpcikge1xuICAgICAgcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgPSBhcmdzLnRtcERpcjtcbiAgICB9XG5cbiAgICBzdXBlcihhcmdzKTtcblxuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cztcblxuICAgIC8vIHRoZSBtYWluIEFwcGl1bSBEcml2ZXIgaGFzIG5vIG5ldyBjb21tYW5kIHRpbWVvdXRcbiAgICB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMgPSAwO1xuXG4gICAgdGhpcy5hcmdzID0gey4uLmFyZ3N9O1xuXG4gICAgLy8gQWNjZXNzIHRvIHNlc3Npb25zIGxpc3QgbXVzdCBiZSBndWFyZGVkIHdpdGggYSBTZW1hcGhvcmUsIGJlY2F1c2VcbiAgICAvLyBpdCBtaWdodCBiZSBjaGFuZ2VkIGJ5IG90aGVyIGFzeW5jIGNhbGxzIGF0IGFueSB0aW1lXG4gICAgLy8gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICB0aGlzLnNlc3Npb25zID0ge307XG5cbiAgICAvLyBBY2Nlc3MgdG8gcGVuZGluZyBkcml2ZXJzIGxpc3QgbXVzdCBiZSBndWFyZGVkIHdpdGggYSBTZW1hcGhvcmUsIGJlY2F1c2VcbiAgICAvLyBpdCBtaWdodCBiZSBjaGFuZ2VkIGJ5IG90aGVyIGFzeW5jIGNhbGxzIGF0IGFueSB0aW1lXG4gICAgLy8gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICB0aGlzLnBlbmRpbmdEcml2ZXJzID0ge307XG5cbiAgICB0aGlzLnBsdWdpbkNsYXNzZXMgPSBbXTsgLy8gbGlzdCBvZiB3aGljaCBwbHVnaW5zIGFyZSBhY3RpdmVcbiAgICB0aGlzLnNlc3Npb25QbHVnaW5zID0ge307IC8vIG1hcCBvZiBzZXNzaW9ucyB0byBhY3R1YWwgcGx1Z2luIGluc3RhbmNlcyBwZXIgc2Vzc2lvblxuICAgIHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zID0gW107IC8vIHNvbWUgY29tbWFuZHMgYXJlIHNlc3Npb25sZXNzLCBzbyB3ZSBuZWVkIGEgc2V0IG9mIHBsdWdpbnMgZm9yIHRoZW1cblxuICAgIC8vIGFsbG93IHRoaXMgdG8gaGFwcGVuIGluIHRoZSBiYWNrZ3JvdW5kLCBzbyBubyBgYXdhaXRgXG4gICAgdXBkYXRlQnVpbGRJbmZvKCk7XG4gIH1cblxuICAvKiogQHR5cGUge0RyaXZlckNvbmZpZ3x1bmRlZmluZWR9ICovXG4gIGRyaXZlckNvbmZpZztcblxuICAvKipcbiAgICogQ2FuY2VsIGNvbW1hbmRzIHF1ZXVlaW5nIGZvciB0aGUgdW1icmVsbGEgQXBwaXVtIGRyaXZlclxuICAgKi9cbiAgZ2V0IGlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQgKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNlc3Npb25FeGlzdHMgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5zZXNzaW9uSWQgIT09IG51bGw7XG4gIH1cblxuICBkcml2ZXJGb3JTZXNzaW9uIChzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICB9XG5cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1aWxkOiBfLmNsb25lKGdldEJ1aWxkSW5mbygpKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U2Vzc2lvbnMgKCkge1xuICAgIGNvbnN0IHNlc3Npb25zID0gYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4gdGhpcy5zZXNzaW9ucyk7XG4gICAgcmV0dXJuIF8udG9QYWlycyhzZXNzaW9ucylcbiAgICAgIC5tYXAoKFtpZCwgZHJpdmVyXSkgPT4gKHtpZCwgY2FwYWJpbGl0aWVzOiBkcml2ZXIuY2Fwc30pKTtcbiAgfVxuXG4gIHByaW50TmV3U2Vzc2lvbkFubm91bmNlbWVudCAoZHJpdmVyTmFtZSwgZHJpdmVyVmVyc2lvbiwgZHJpdmVyQmFzZVZlcnNpb24pIHtcbiAgICBsb2cuaW5mbyhkcml2ZXJWZXJzaW9uXG4gICAgICA/IGBBcHBpdW0gdiR7QVBQSVVNX1ZFUn0gY3JlYXRpbmcgbmV3ICR7ZHJpdmVyTmFtZX0gKHYke2RyaXZlclZlcnNpb259KSBzZXNzaW9uYFxuICAgICAgOiBgQXBwaXVtIHYke0FQUElVTV9WRVJ9IGNyZWF0aW5nIG5ldyAke2RyaXZlck5hbWV9IHNlc3Npb25gXG4gICAgKTtcbiAgICBsb2cuaW5mbyhgQ2hlY2tpbmcgQmFzZURyaXZlciB2ZXJzaW9ucyBmb3IgQXBwaXVtIGFuZCAke2RyaXZlck5hbWV9YCk7XG4gICAgbG9nLmluZm8oQXBwaXVtRHJpdmVyLmJhc2VWZXJzaW9uXG4gICAgICA/IGBBcHBpdW0ncyBCYXNlRHJpdmVyIHZlcnNpb24gaXMgJHtBcHBpdW1Ecml2ZXIuYmFzZVZlcnNpb259YFxuICAgICAgOiBgQ291bGQgbm90IGRldGVybWluZSBBcHBpdW0ncyBCYXNlRHJpdmVyIHZlcnNpb25gXG4gICAgKTtcbiAgICBsb2cuaW5mbyhkcml2ZXJCYXNlVmVyc2lvblxuICAgICAgPyBgJHtkcml2ZXJOYW1lfSdzIEJhc2VEcml2ZXIgdmVyc2lvbiBpcyAke2RyaXZlckJhc2VWZXJzaW9ufWBcbiAgICAgIDogYENvdWxkIG5vdCBkZXRlcm1pbmUgJHtkcml2ZXJOYW1lfSdzIEJhc2VEcml2ZXIgdmVyc2lvbmBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMganVzdCBhbiBhbGlhcyBmb3IgZHJpdmVyLmpzJ3MgbWV0aG9kLCB3aGljaCBpcyBuZWNlc3NhcnkgZm9yXG4gICAqIG1vY2tpbmcgaW4gdGhlIHRlc3Qgc3VpdGVcbiAgICovXG4gIF9maW5kTWF0Y2hpbmdEcml2ZXIgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gZmluZE1hdGNoaW5nRHJpdmVyKC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuZCBhc3NpZ24gQ0xJIGFyZ3MgZm9yIGEgZHJpdmVyIG9yIHBsdWdpblxuICAgKlxuICAgKiBJZiB0aGUgZXh0ZW5zaW9uIGhhcyBwcm92aWRlZCBhIHNjaGVtYSwgdmFsaWRhdGlvbiBoYXMgYWxyZWFkeSBoYXBwZW5lZC5cbiAgICogQHBhcmFtIHtpbXBvcnQoJy4vZXh0LWNvbmZpZy1pbycpLkV4dGVuc2lvblR5cGV9IGV4dFR5cGUgJ2RyaXZlcicgb3IgJ3BsdWdpbidcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgdGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvblxuICAgKiBAcGFyYW0ge09iamVjdH0gZXh0SW5zdGFuY2UgdGhlIGRyaXZlciBvciBwbHVnaW4gaW5zdGFuY2VcbiAgICovXG4gIGFzc2lnbkNsaUFyZ3NUb0V4dGVuc2lvbiAoZXh0VHlwZSwgZXh0TmFtZSwgZXh0SW5zdGFuY2UpIHtcbiAgICBjb25zdCBjbGlBcmdzID0gdGhpcy5hcmdzW2V4dFR5cGVdPy5bZXh0TmFtZV07XG4gICAgaWYgKCFfLmlzRW1wdHkoY2xpQXJncykpIHtcbiAgICAgIGV4dEluc3RhbmNlLmNsaUFyZ3MgPSBjbGlBcmdzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgc2Vzc2lvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbndwQ2FwcyBKU09OV1AgZm9ybWF0dGVkIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXFDYXBzIFJlcXVpcmVkIGNhcGFiaWxpdGllcyAoSlNPTldQIHN0YW5kYXJkKVxuICAgKiBAcGFyYW0ge09iamVjdH0gdzNjQ2FwYWJpbGl0aWVzIFczQyBjYXBhYmlsaXRpZXNcbiAgICogQHJldHVybiB7QXJyYXl9IFVuaXF1ZSBzZXNzaW9uIElEIGFuZCBjYXBhYmlsaXRpZXNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKGpzb253cENhcHMsIHJlcUNhcHMsIHczY0NhcGFiaWxpdGllcykge1xuICAgIGNvbnN0IGRlZmF1bHRDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh0aGlzLmFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gICAgY29uc3QgZGVmYXVsdFNldHRpbmdzID0gcHVsbFNldHRpbmdzKGRlZmF1bHRDYXBhYmlsaXRpZXMpO1xuICAgIGpzb253cENhcHMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBzKTtcbiAgICBjb25zdCBqd3BTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgcHVsbFNldHRpbmdzKGpzb253cENhcHMpKTtcbiAgICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBvbmx5IHByb3ZpZGVzIGNhcHMgdXNpbmcgSlNPTldQIHN0YW5kYXJkLFxuICAgIC8vIGFsdGhvdWdoIGZpcnN0TWF0Y2gvYWx3YXlzTWF0Y2ggcHJvcGVydGllcyBhcmUgc3RpbGwgcHJlc2VudC5cbiAgICAvLyBJbiBzdWNoIGNhc2Ugd2UgYXNzdW1lIHRoZSBjbGllbnQgdW5kZXJzdGFuZHMgVzNDIHByb3RvY29sIGFuZCBtZXJnZSB0aGUgZ2l2ZW5cbiAgICAvLyBKU09OV1AgY2FwcyB0byBXM0MgY2Fwc1xuICAgIGNvbnN0IHczY1NldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgandwU2V0dGluZ3MpO1xuICAgIE9iamVjdC5hc3NpZ24odzNjU2V0dGluZ3MsIHB1bGxTZXR0aW5ncygodzNjQ2FwYWJpbGl0aWVzIHx8IHt9KS5hbHdheXNNYXRjaCB8fCB7fSkpO1xuICAgIGZvciAoY29uc3QgZmlyc3RNYXRjaEVudHJ5IG9mICgodzNjQ2FwYWJpbGl0aWVzIHx8IHt9KS5maXJzdE1hdGNoIHx8IFtdKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih3M2NTZXR0aW5ncywgcHVsbFNldHRpbmdzKGZpcnN0TWF0Y2hFbnRyeSkpO1xuICAgIH1cblxuICAgIGxldCBwcm90b2NvbDtcbiAgICBsZXQgaW5uZXJTZXNzaW9uSWQsIGRDYXBzO1xuICAgIHRyeSB7XG4gICAgICAvLyBQYXJzZSB0aGUgY2FwcyBpbnRvIGEgZm9ybWF0IHRoYXQgdGhlIElubmVyRHJpdmVyIHdpbGwgYWNjZXB0XG4gICAgICBjb25zdCBwYXJzZWRDYXBzID0gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoXG4gICAgICAgIGpzb253cENhcHMsXG4gICAgICAgIHczY0NhcGFiaWxpdGllcyxcbiAgICAgICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMsXG4gICAgICAgIGRlZmF1bHRDYXBhYmlsaXRpZXNcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHtkZXNpcmVkQ2FwcywgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLCBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMsIGVycm9yfSA9IHBhcnNlZENhcHM7XG4gICAgICBwcm90b2NvbCA9IHBhcnNlZENhcHMucHJvdG9jb2w7XG5cbiAgICAgIC8vIElmIHRoZSBwYXJzaW5nIG9mIHRoZSBjYXBzIHByb2R1Y2VkIGFuIGVycm9yLCB0aHJvdyBpdCBpbiBoZXJlXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZHJpdmVyOiBJbm5lckRyaXZlcixcbiAgICAgICAgdmVyc2lvbjogZHJpdmVyVmVyc2lvbixcbiAgICAgICAgZHJpdmVyTmFtZVxuICAgICAgfSA9IHRoaXMuX2ZpbmRNYXRjaGluZ0RyaXZlcih0aGlzLmRyaXZlckNvbmZpZywgZGVzaXJlZENhcHMpO1xuICAgICAgdGhpcy5wcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQoSW5uZXJEcml2ZXIubmFtZSwgZHJpdmVyVmVyc2lvbiwgSW5uZXJEcml2ZXIuYmFzZVZlcnNpb24pO1xuXG4gICAgICBpZiAodGhpcy5hcmdzLnNlc3Npb25PdmVycmlkZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUFsbFNlc3Npb25zKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBydW5uaW5nRHJpdmVyc0RhdGEsIG90aGVyUGVuZGluZ0RyaXZlcnNEYXRhO1xuXG4gICAgICBjb25zdCBkcml2ZXJJbnN0YW5jZSA9IG5ldyBJbm5lckRyaXZlcih0aGlzLmFyZ3MsIHRydWUpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGFzc2lnbiBzZWN1cml0eSB2YWx1ZXMgZGlyZWN0bHkgb24gdGhlIGRyaXZlci4gVGhlIGRyaXZlclxuICAgICAgLy8gc2hvdWxkIG5vdCByZWFkIHNlY3VyaXR5IHZhbHVlcyBmcm9tIGB0aGlzLm9wdHNgIGJlY2F1c2UgdGhvc2UgdmFsdWVzXG4gICAgICAvLyBjb3VsZCBoYXZlIGJlZW4gc2V0IGJ5IGEgbWFsaWNpb3VzIHVzZXIgdmlhIGNhcGFiaWxpdGllcywgd2hlcmVhcyB3ZVxuICAgICAgLy8gd2FudCBhIGd1YXJhbnRlZSB0aGUgdmFsdWVzIHdlcmUgc2V0IGJ5IHRoZSBhcHBpdW0gc2VydmVyIGFkbWluXG4gICAgICBpZiAodGhpcy5hcmdzLnJlbGF4ZWRTZWN1cml0eUVuYWJsZWQpIHtcbiAgICAgICAgbG9nLmluZm8oYEFwcGx5aW5nIHJlbGF4ZWQgc2VjdXJpdHkgdG8gJyR7SW5uZXJEcml2ZXIubmFtZX0nIGFzIHBlciBgICtcbiAgICAgICAgICAgICAgICAgYHNlcnZlciBjb21tYW5kIGxpbmUgYXJndW1lbnQuIEFsbCBpbnNlY3VyZSBmZWF0dXJlcyB3aWxsIGJlIGAgK1xuICAgICAgICAgICAgICAgICBgZW5hYmxlZCB1bmxlc3MgZXhwbGljaXRseSBkaXNhYmxlZCBieSAtLWRlbnktaW5zZWN1cmVgKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuYXJncy5kZW55SW5zZWN1cmUpKSB7XG4gICAgICAgIGxvZy5pbmZvKCdFeHBsaWNpdGx5IHByZXZlbnRpbmcgdXNlIG9mIGluc2VjdXJlIGZlYXR1cmVzOicpO1xuICAgICAgICB0aGlzLmFyZ3MuZGVueUluc2VjdXJlLm1hcCgoYSkgPT4gbG9nLmluZm8oYCAgICAke2F9YCkpO1xuICAgICAgICBkcml2ZXJJbnN0YW5jZS5kZW55SW5zZWN1cmUgPSB0aGlzLmFyZ3MuZGVueUluc2VjdXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmFyZ3MuYWxsb3dJbnNlY3VyZSkpIHtcbiAgICAgICAgbG9nLmluZm8oJ0V4cGxpY2l0bHkgZW5hYmxpbmcgdXNlIG9mIGluc2VjdXJlIGZlYXR1cmVzOicpO1xuICAgICAgICB0aGlzLmFyZ3MuYWxsb3dJbnNlY3VyZS5tYXAoKGEpID0+IGxvZy5pbmZvKGAgICAgJHthfWApKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UuYWxsb3dJbnNlY3VyZSA9IHRoaXMuYXJncy5hbGxvd0luc2VjdXJlO1xuICAgICAgfVxuXG4gICAgICAvLyBMaWtld2lzZSwgYW55IGRyaXZlci1zcGVjaWZpYyBDTEkgYXJncyB0aGF0IHdlcmUgcGFzc2VkIGluIHNob3VsZCBiZSBhc3NpZ25lZCBkaXJlY3RseSB0b1xuICAgICAgLy8gdGhlIGRyaXZlciBzbyB0aGF0IHRoZXkgY2Fubm90IGJlIG1pbWlja2VkIGJ5IGEgbWFsaWNpb3VzIHVzZXIgc2VuZGluZyBpbiBjYXBhYmlsaXRpZXNcbiAgICAgIHRoaXMuYXNzaWduQ2xpQXJnc1RvRXh0ZW5zaW9uKCdkcml2ZXInLCBkcml2ZXJOYW1lLCBkcml2ZXJJbnN0YW5jZSk7XG5cblxuICAgICAgLy8gVGhpcyBhc3NpZ25tZW50IGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0IHdlYiBzb2NrZXRzIGZ1bmN0aW9uYWxpdHkgaW5zaWRlIHRoZSBkcml2ZXJcbiAgICAgIGRyaXZlckluc3RhbmNlLnNlcnZlciA9IHRoaXMuc2VydmVyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcnVubmluZ0RyaXZlcnNEYXRhID0gYXdhaXQgdGhpcy5jdXJTZXNzaW9uRGF0YUZvckRyaXZlcihJbm5lckRyaXZlcik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBlcnJvcnMuU2Vzc2lvbk5vdENyZWF0ZWRFcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgcGVuZGluZ0RyaXZlcnNHdWFyZC5hY3F1aXJlKEFwcGl1bURyaXZlci5uYW1lLCAoKSA9PiB7XG4gICAgICAgIHRoaXMucGVuZGluZ0RyaXZlcnNbSW5uZXJEcml2ZXIubmFtZV0gPSB0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdIHx8IFtdO1xuICAgICAgICBvdGhlclBlbmRpbmdEcml2ZXJzRGF0YSA9IHRoaXMucGVuZGluZ0RyaXZlcnNbSW5uZXJEcml2ZXIubmFtZV0ubWFwKChkcnYpID0+IGRydi5kcml2ZXJEYXRhKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXS5wdXNoKGRyaXZlckluc3RhbmNlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICBbaW5uZXJTZXNzaW9uSWQsIGRDYXBzXSA9IGF3YWl0IGRyaXZlckluc3RhbmNlLmNyZWF0ZVNlc3Npb24oXG4gICAgICAgICAgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLFxuICAgICAgICAgIHJlcUNhcHMsXG4gICAgICAgICAgcHJvY2Vzc2VkVzNDQ2FwYWJpbGl0aWVzLFxuICAgICAgICAgIFsuLi5ydW5uaW5nRHJpdmVyc0RhdGEsIC4uLm90aGVyUGVuZGluZ0RyaXZlcnNEYXRhXVxuICAgICAgICApO1xuICAgICAgICBwcm90b2NvbCA9IGRyaXZlckluc3RhbmNlLnByb3RvY29sO1xuICAgICAgICBhd2FpdCBzZXNzaW9uc0xpc3RHdWFyZC5hY3F1aXJlKEFwcGl1bURyaXZlci5uYW1lLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uc1tpbm5lclNlc3Npb25JZF0gPSBkcml2ZXJJbnN0YW5jZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCBwZW5kaW5nRHJpdmVyc0d1YXJkLmFjcXVpcmUoQXBwaXVtRHJpdmVyLm5hbWUsICgpID0+IHtcbiAgICAgICAgICBfLnB1bGwodGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXSwgZHJpdmVySW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hdHRhY2hVbmV4cGVjdGVkU2h1dGRvd25IYW5kbGVyKGRyaXZlckluc3RhbmNlLCBpbm5lclNlc3Npb25JZCk7XG5cbiAgICAgIGxvZy5pbmZvKGBOZXcgJHtJbm5lckRyaXZlci5uYW1lfSBzZXNzaW9uIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LCBzZXNzaW9uIGAgK1xuICAgICAgICAgICAgICBgJHtpbm5lclNlc3Npb25JZH0gYWRkZWQgdG8gbWFzdGVyIHNlc3Npb24gbGlzdGApO1xuXG4gICAgICAvLyBzZXQgdGhlIE5ldyBDb21tYW5kIFRpbWVvdXQgZm9yIHRoZSBpbm5lciBkcml2ZXJcbiAgICAgIGRyaXZlckluc3RhbmNlLnN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQoKTtcblxuICAgICAgLy8gYXBwbHkgaW5pdGlhbCB2YWx1ZXMgdG8gQXBwaXVtIHNldHRpbmdzIChpZiBwcm92aWRlZClcbiAgICAgIGlmIChkcml2ZXJJbnN0YW5jZS5pc1czQ1Byb3RvY29sKCkgJiYgIV8uaXNFbXB0eSh3M2NTZXR0aW5ncykpIHtcbiAgICAgICAgbG9nLmluZm8oYEFwcGx5aW5nIHRoZSBpbml0aWFsIHZhbHVlcyB0byBBcHBpdW0gc2V0dGluZ3MgcGFyc2VkIGZyb20gVzNDIGNhcHM6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHczY1NldHRpbmdzKSk7XG4gICAgICAgIGF3YWl0IGRyaXZlckluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHczY1NldHRpbmdzKTtcbiAgICAgIH0gZWxzZSBpZiAoZHJpdmVySW5zdGFuY2UuaXNNanNvbndwUHJvdG9jb2woKSAmJiAhXy5pc0VtcHR5KGp3cFNldHRpbmdzKSkge1xuICAgICAgICBsb2cuaW5mbyhgQXBwbHlpbmcgdGhlIGluaXRpYWwgdmFsdWVzIHRvIEFwcGl1bSBzZXR0aW5ncyBwYXJzZWQgZnJvbSBNSlNPTldQIGNhcHM6IGAgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGp3cFNldHRpbmdzKSk7XG4gICAgICAgIGF3YWl0IGRyaXZlckluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKGp3cFNldHRpbmdzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGVycm9yLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJvdG9jb2wsXG4gICAgICB2YWx1ZTogW2lubmVyU2Vzc2lvbklkLCBkQ2FwcywgcHJvdG9jb2xdXG4gICAgfTtcbiAgfVxuXG4gIGF0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXIgKGRyaXZlciwgaW5uZXJTZXNzaW9uSWQpIHtcbiAgICBjb25zdCBvblNodXRkb3duID0gKGNhdXNlID0gbmV3IEVycm9yKCdVbmtub3duIGVycm9yJykpID0+IHtcbiAgICAgIGxvZy53YXJuKGBFbmRpbmcgc2Vzc2lvbiwgY2F1c2Ugd2FzICcke2NhdXNlLm1lc3NhZ2V9J2ApO1xuXG4gICAgICBpZiAodGhpcy5zZXNzaW9uUGx1Z2luc1tpbm5lclNlc3Npb25JZF0pIHtcbiAgICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5zZXNzaW9uUGx1Z2luc1tpbm5lclNlc3Npb25JZF0pIHtcbiAgICAgICAgICBpZiAoXy5pc0Z1bmN0aW9uKHBsdWdpbi5vblVuZXhwZWN0ZWRTaHV0ZG93bikpIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgUGx1Z2luICR7cGx1Z2luLm5hbWV9IGRlZmluZXMgYW4gdW5leHBlY3RlZCBzaHV0ZG93biBoYW5kbGVyOyBjYWxsaW5nIGl0IG5vd2ApO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcGx1Z2luLm9uVW5leHBlY3RlZFNodXRkb3duKGRyaXZlciwgY2F1c2UpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBsb2cud2FybihgR290IGFuIGVycm9yIHdoZW4gcnVubmluZyBwbHVnaW4gJHtwbHVnaW4ubmFtZX0gc2h1dGRvd24gaGFuZGxlcjogJHtlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoYFBsdWdpbiAke3BsdWdpbi5uYW1lfSBkb2VzIG5vdCBkZWZpbmUgYW4gdW5leHBlY3RlZCBzaHV0ZG93biBoYW5kbGVyYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxvZy5pbmZvKGBSZW1vdmluZyBzZXNzaW9uICcke2lubmVyU2Vzc2lvbklkfScgZnJvbSBvdXIgbWFzdGVyIHNlc3Npb24gbGlzdGApO1xuICAgICAgZGVsZXRlIHRoaXMuc2Vzc2lvbnNbaW5uZXJTZXNzaW9uSWRdO1xuICAgICAgZGVsZXRlIHRoaXMuc2Vzc2lvblBsdWdpbnNbaW5uZXJTZXNzaW9uSWRdO1xuICAgIH07XG5cbiAgICBpZiAoXy5pc0Z1bmN0aW9uKGRyaXZlci5vblVuZXhwZWN0ZWRTaHV0ZG93bikpIHtcbiAgICAgIGRyaXZlci5vblVuZXhwZWN0ZWRTaHV0ZG93bihvblNodXRkb3duKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLndhcm4oYEZhaWxlZCB0byBhdHRhY2ggdGhlIHVuZXhwZWN0ZWQgc2h1dGRvd24gbGlzdGVuZXIuIGAgK1xuICAgICAgICBgSXMgJ29uVW5leHBlY3RlZFNodXRkb3duJyBtZXRob2QgYXZhaWxhYmxlIGZvciAnJHtkcml2ZXIuY29uc3RydWN0b3IubmFtZX0nP2ApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGN1clNlc3Npb25EYXRhRm9yRHJpdmVyIChJbm5lckRyaXZlcikge1xuICAgIGNvbnN0IHNlc3Npb25zID0gYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4gdGhpcy5zZXNzaW9ucyk7XG4gICAgY29uc3QgZGF0YSA9IF8udmFsdWVzKHNlc3Npb25zKVxuICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHMpID0+IHMuY29uc3RydWN0b3IubmFtZSA9PT0gSW5uZXJEcml2ZXIubmFtZSlcbiAgICAgICAgICAgICAgICAgICAubWFwKChzKSA9PiBzLmRyaXZlckRhdGEpO1xuICAgIGZvciAobGV0IGRhdHVtIG9mIGRhdGEpIHtcbiAgICAgIGlmICghZGF0dW0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9ibGVtIGdldHRpbmcgc2Vzc2lvbiBkYXRhIGZvciBkcml2ZXIgdHlwZSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke0lubmVyRHJpdmVyLm5hbWV9OyBkb2VzIGl0IGltcGxlbWVudCAnZ2V0IGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYGRyaXZlckRhdGEnP2ApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24gKHNlc3Npb25JZCkge1xuICAgIGxldCBwcm90b2NvbDtcbiAgICB0cnkge1xuICAgICAgbGV0IG90aGVyU2Vzc2lvbnNEYXRhID0gbnVsbDtcbiAgICAgIGxldCBkc3RTZXNzaW9uID0gbnVsbDtcbiAgICAgIGF3YWl0IHNlc3Npb25zTGlzdEd1YXJkLmFjcXVpcmUoQXBwaXVtRHJpdmVyLm5hbWUsICgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyQ29uc3RydWN0b3JOYW1lID0gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIG90aGVyU2Vzc2lvbnNEYXRhID0gXy50b1BhaXJzKHRoaXMuc2Vzc2lvbnMpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gdmFsdWUuY29uc3RydWN0b3IubmFtZSA9PT0gY3VyQ29uc3RydWN0b3JOYW1lICYmIGtleSAhPT0gc2Vzc2lvbklkKVxuICAgICAgICAgICAgICAubWFwKChbLCB2YWx1ZV0pID0+IHZhbHVlLmRyaXZlckRhdGEpO1xuICAgICAgICBkc3RTZXNzaW9uID0gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICAgICAgICBwcm90b2NvbCA9IGRzdFNlc3Npb24ucHJvdG9jb2w7XG4gICAgICAgIGxvZy5pbmZvKGBSZW1vdmluZyBzZXNzaW9uICR7c2Vzc2lvbklkfSBmcm9tIG91ciBtYXN0ZXIgc2Vzc2lvbiBsaXN0YCk7XG4gICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgZGVsZXRlU2Vzc2lvbiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IG9yIG5vdFxuICAgICAgICAvLyBtYWtlIHRoZSBzZXNzaW9uIHVuYXZhaWxhYmxlLCBiZWNhdXNlIHdobyBrbm93cyB3aGF0IHN0YXRlIGl0IG1pZ2h0XG4gICAgICAgIC8vIGJlIGluIG90aGVyd2lzZVxuICAgICAgICBkZWxldGUgdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICAgICAgICBkZWxldGUgdGhpcy5zZXNzaW9uUGx1Z2luc1tzZXNzaW9uSWRdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmFsdWU6IGF3YWl0IGRzdFNlc3Npb24uZGVsZXRlU2Vzc2lvbihzZXNzaW9uSWQsIG90aGVyU2Vzc2lvbnNEYXRhKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nLmVycm9yKGBIYWQgdHJvdWJsZSBlbmRpbmcgc2Vzc2lvbiAke3Nlc3Npb25JZH06ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIGVycm9yOiBlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVBbGxTZXNzaW9ucyAob3B0cyA9IHt9KSB7XG4gICAgY29uc3Qgc2Vzc2lvbnNDb3VudCA9IF8uc2l6ZSh0aGlzLnNlc3Npb25zKTtcbiAgICBpZiAoMCA9PT0gc2Vzc2lvbnNDb3VudCkge1xuICAgICAgbG9nLmRlYnVnKCdUaGVyZSBhcmUgbm8gYWN0aXZlIHNlc3Npb25zIGZvciBjbGVhbnVwJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgZm9yY2UgPSBmYWxzZSxcbiAgICAgIHJlYXNvbixcbiAgICB9ID0gb3B0cztcbiAgICBsb2cuZGVidWcoYENsZWFuaW5nIHVwICR7dXRpbC5wbHVyYWxpemUoJ2FjdGl2ZSBzZXNzaW9uJywgc2Vzc2lvbnNDb3VudCwgdHJ1ZSl9YCk7XG4gICAgY29uc3QgY2xlYW51cFByb21pc2VzID0gZm9yY2VcbiAgICAgID8gXy52YWx1ZXModGhpcy5zZXNzaW9ucykubWFwKChkcnYpID0+IGRydi5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihyZWFzb24gJiYgbmV3IEVycm9yKHJlYXNvbikpKVxuICAgICAgOiBfLmtleXModGhpcy5zZXNzaW9ucykubWFwKChpZCkgPT4gdGhpcy5kZWxldGVTZXNzaW9uKGlkKSk7XG4gICAgZm9yIChjb25zdCBjbGVhbnVwUHJvbWlzZSBvZiBjbGVhbnVwUHJvbWlzZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGNsZWFudXBQcm9taXNlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cuZGVidWcoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXBwcm9wcmlhdGUgcGx1Z2lucyBmb3IgYSBzZXNzaW9uIChvciBzZXNzaW9ubGVzcyBwbHVnaW5zKVxuICAgKlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IHNlc3Npb25JZCAtIHRoZSBzZXNzaW9uSWQgKG9yIG51bGwpIHRvIHVzZSB0byBmaW5kIHBsdWdpbnNcbiAgICogQHJldHVybnMge0FycmF5fSAtIGFycmF5IG9mIHBsdWdpbiBpbnN0YW5jZXNcbiAgICovXG4gIHBsdWdpbnNGb3JTZXNzaW9uIChzZXNzaW9uSWQgPSBudWxsKSB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgaWYgKCF0aGlzLnNlc3Npb25QbHVnaW5zW3Nlc3Npb25JZF0pIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uUGx1Z2luc1tzZXNzaW9uSWRdID0gdGhpcy5jcmVhdGVQbHVnaW5JbnN0YW5jZXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnNlc3Npb25QbHVnaW5zW3Nlc3Npb25JZF07XG4gICAgfVxuXG4gICAgaWYgKF8uaXNFbXB0eSh0aGlzLnNlc3Npb25sZXNzUGx1Z2lucykpIHtcbiAgICAgIHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zID0gdGhpcy5jcmVhdGVQbHVnaW5JbnN0YW5jZXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIGdldCBwbHVnaW5zIGZvciBhIGNvbW1hbmQsIHdlIGVpdGhlciBnZXQgdGhlIHBsdWdpbiBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAgKiBwYXJ0aWN1bGFyIGNvbW1hbmQncyBzZXNzaW9uLCBvciBpbiB0aGUgY2FzZSBvZiBzZXNzaW9ubGVzcyBwbHVnaW5zLCBwdWxsIGZyb20gdGhlIHNldCBvZlxuICAgKiBwbHVnaW4gaW5zdGFuY2VzIHJlc2VydmVkIGZvciBzZXNzaW9ubGVzcyBjb21tYW5kcyAoYW5kIHdlIGxhemlseSBjcmVhdGUgcGx1Z2luIGluc3RhbmNlcyBvblxuICAgKiBmaXJzdCB1c2UpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWQgLSB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZCB0byBmaW5kIGEgcGx1Z2luIHRvIGhhbmRsZVxuICAgKiBAcGFyYW0gez9zdHJpbmd9IHNlc3Npb25JZCAtIHRoZSBwYXJ0aWN1bGFyIHNlc3Npb24gZm9yIHdoaWNoIHRvIGZpbmQgYSBwbHVnaW4sIG9yIG51bGwgaWZcbiAgICogc2Vzc2lvbmxlc3NcbiAgICovXG4gIHBsdWdpbnNUb0hhbmRsZUNtZCAoY21kLCBzZXNzaW9uSWQgPSBudWxsKSB7XG4gICAgLy8gdG8gaGFuZGxlIGEgZ2l2ZW4gY29tbWFuZCwgYSBwbHVnaW4gc2hvdWxkIGVpdGhlciBpbXBsZW1lbnQgdGhhdCBjb21tYW5kIGFzIGEgcGx1Z2luXG4gICAgLy8gaW5zdGFuY2UgbWV0aG9kIG9yIGl0IHNob3VsZCBpbXBsZW1lbnQgYSBnZW5lcmljICdoYW5kbGUnIG1ldGhvZFxuICAgIHJldHVybiB0aGlzLnBsdWdpbnNGb3JTZXNzaW9uKHNlc3Npb25JZClcbiAgICAgIC5maWx0ZXIoKHApID0+IF8uaXNGdW5jdGlvbihwW2NtZF0pIHx8IF8uaXNGdW5jdGlvbihwLmhhbmRsZSkpO1xuICB9XG5cbiAgY3JlYXRlUGx1Z2luSW5zdGFuY2VzICgpIHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5DbGFzc2VzLm1hcCgoUGx1Z2luQ2xhc3MpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBQbHVnaW5DbGFzcy5wbHVnaW5OYW1lO1xuICAgICAgY29uc3QgcGx1Z2luID0gbmV3IFBsdWdpbkNsYXNzKG5hbWUpO1xuICAgICAgdGhpcy5hc3NpZ25DbGlBcmdzVG9FeHRlbnNpb24oJ3BsdWdpbicsIG5hbWUsIHBsdWdpbik7XG4gICAgICByZXR1cm4gcGx1Z2luO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQgKGNtZCwgLi4uYXJncykge1xuICAgIC8vIFdlIGhhdmUgYmFzaWNhbGx5IHRocmVlIGNhc2VzIGZvciBob3cgdG8gaGFuZGxlIGNvbW1hbmRzOlxuICAgIC8vIDEuIGhhbmRsZSBnZXRTdGF0dXMgKHdlIGRvIHRoaXMgYXMgYSBzcGVjaWFsIG91dCBvZiBiYW5kIGNhc2Ugc28gaXQgZG9lc24ndCBnZXQgYWRkZWQgdG8gYW5cbiAgICAvLyAgICBleGVjdXRpb24gcXVldWUsIGFuZCBjYW4gYmUgY2FsbGVkIHdoaWxlIGUuZy4gY3JlYXRlU2Vzc2lvbiBpcyBpbiBwcm9ncmVzcylcbiAgICAvLyAyLiBoYW5kbGUgY29tbWFuZHMgdGhhdCB0aGlzIHVtYnJlbGxhIGRyaXZlciBzaG91bGQgaGFuZGxlLCByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIHNlc3Npb25cbiAgICAvLyAgICBkcml2ZXIgKGZvciBleGFtcGxlLCBkZWxldGVTZXNzaW9uLCBvciBvdGhlciBub24tc2Vzc2lvbiBjb21tYW5kcylcbiAgICAvLyAzLiBoYW5kbGUgc2Vzc2lvbiBkcml2ZXIgY29tbWFuZHMuXG4gICAgLy8gVGhlIHRyaWNreSBwYXJ0IGlzIHRoYXQgYmVjYXVzZSB3ZSBzdXBwb3J0IGNvbW1hbmQgcGx1Z2lucywgd2UgbmVlZCB0byB3cmFwIGFueSBvZiB0aGVzZVxuICAgIC8vIGNhc2VzIHdpdGggcGx1Z2luIGhhbmRsaW5nLlxuXG4gICAgY29uc3QgaXNHZXRTdGF0dXMgPSBjbWQgPT09ICdnZXRTdGF0dXMnO1xuICAgIGNvbnN0IGlzVW1icmVsbGFDbWQgPSAhaXNHZXRTdGF0dXMgJiYgaXNBcHBpdW1Ecml2ZXJDb21tYW5kKGNtZCk7XG4gICAgY29uc3QgaXNTZXNzaW9uQ21kID0gIWlzR2V0U3RhdHVzICYmICFpc1VtYnJlbGxhQ21kO1xuXG4gICAgLy8gaWYgYSBwbHVnaW4gb3ZlcnJpZGUgcHJveHlpbmcgZm9yIHRoaXMgY29tbWFuZCBhbmQgdGhhdCBpcyB3aHkgd2UgYXJlIGhlcmUgaW5zdGVhZCBvZiBqdXN0XG4gICAgLy8gbGV0dGluZyB0aGUgcHJvdG9jb2wgcHJveHkgdGhlIGNvbW1hbmQgZW50aXJlbHksIGRldGVybWluZSB0aGF0LCBnZXQgdGhlIHJlcXVlc3Qgb2JqZWN0IGZvclxuICAgIC8vIHVzZSBsYXRlciBvbiwgdGhlbiBjbGVhbiB1cCB0aGUgYXJnc1xuICAgIGNvbnN0IHJlcUZvclByb3h5ID0gXy5sYXN0KGFyZ3MpPy5yZXFGb3JQcm94eTtcbiAgICBpZiAocmVxRm9yUHJveHkpIHtcbiAgICAgIGFyZ3MucG9wKCk7XG4gICAgfVxuXG5cbiAgICAvLyBmaXJzdCBkbyBzb21lIGVycm9yIGNoZWNraW5nLiBJZiB3ZSdyZSByZXF1ZXN0aW5nIGEgc2Vzc2lvbiBjb21tYW5kIGV4ZWN1dGlvbiwgdGhlbiBtYWtlXG4gICAgLy8gc3VyZSB0aGF0IHNlc3Npb24gYWN0dWFsbHkgZXhpc3RzIG9uIHRoZSBzZXNzaW9uIGRyaXZlciwgYW5kIHNldCB0aGUgc2Vzc2lvbiBkcml2ZXIgaXRzZWxmXG4gICAgbGV0IHNlc3Npb25JZCA9IG51bGw7XG4gICAgbGV0IGRzdFNlc3Npb24gPSBudWxsO1xuICAgIGxldCBwcm90b2NvbCA9IG51bGw7XG4gICAgbGV0IGRyaXZlciA9IHRoaXM7XG4gICAgaWYgKGlzU2Vzc2lvbkNtZCkge1xuICAgICAgc2Vzc2lvbklkID0gXy5sYXN0KGFyZ3MpO1xuICAgICAgZHN0U2Vzc2lvbiA9IGF3YWl0IHNlc3Npb25zTGlzdEd1YXJkLmFjcXVpcmUoQXBwaXVtRHJpdmVyLm5hbWUsICgpID0+IHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXSk7XG4gICAgICBpZiAoIWRzdFNlc3Npb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc2Vzc2lvbiB3aXRoIGlkICcke3Nlc3Npb25JZH0nIGRvZXMgbm90IGV4aXN0YCk7XG4gICAgICB9XG4gICAgICAvLyBub3cgc2F2ZSB0aGUgcmVzcG9uc2UgcHJvdG9jb2wgZ2l2ZW4gdGhhdCB0aGUgc2Vzc2lvbiBkcml2ZXIncyBwcm90b2NvbCBtaWdodCBkaWZmZXJcbiAgICAgIHByb3RvY29sID0gZHN0U2Vzc2lvbi5wcm90b2NvbDtcbiAgICAgIGRyaXZlciA9IGRzdFNlc3Npb247XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFueSBwbHVnaW5zIHdoaWNoIGFyZSByZWdpc3RlcmVkIGFzIGhhbmRsaW5nIHRoaXMgY29tbWFuZFxuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnNUb0hhbmRsZUNtZChjbWQsIHNlc3Npb25JZCk7XG5cbiAgICAvLyBub3cgd2UgZGVmaW5lIGEgJ2NtZEhhbmRsZWRCeScgb2JqZWN0IHdoaWNoIHdpbGwga2VlcCB0cmFjayBvZiB3aGljaCBwbHVnaW5zIGhhdmUgaGFuZGxlZCB0aGlzXG4gICAgLy8gY29tbWFuZC4gd2UgY2FyZSBhYm91dCB0aGlzIGJlY2F1c2UgKGEpIG11bHRpcGxlIHBsdWdpbnMgY2FuIGhhbmRsZSB0aGUgc2FtZSBjb21tYW5kLCBhbmRcbiAgICAvLyAoYikgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCBhIHBsdWdpbiB3aWxsIGFjdHVhbGx5IGNhbGwgdGhlIG5leHQoKSBtZXRob2Qgd2hpY2ggcnVucyB0aGVcbiAgICAvLyBvcmlnaW5hbCBjb21tYW5kIGV4ZWN1dGlvbi4gVGhpcyByZXN1bHRzIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBjb21tYW5kIG1pZ2h0IGJlIGhhbmRsZWRcbiAgICAvLyBieSBzb21lIGJ1dCBub3QgYWxsIHBsdWdpbnMsIG9yIGJ5IHBsdWdpbihzKSBidXQgbm90IGJ5IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBTbyBzdGFydCBvdXRcbiAgICAvLyB0aGlzIG9iamVjdCBkZWNsYXJpbmcgdGhhdCB0aGUgZGVmYXVsdCBoYW5kbGVyIGhhcyBub3QgYmVlbiBleGVjdXRlZC5cbiAgICBjb25zdCBjbWRIYW5kbGVkQnkgPSB7ZGVmYXVsdDogZmFsc2V9O1xuXG4gICAgLy8gbm93IHdlIGRlZmluZSBhbiBhc3luYyBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBwbHVnaW5zLCBhbmQgc3VjY2Vzc2l2ZWx5IHdyYXBwZWRcbiAgICAvLyBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBsdWdpbiB0aGF0IGNhbiBoYW5kbGUgdGhlIGNvbW1hbmQuIFRvIHN0YXJ0IG9mZiB3aXRoLCB0aGUgYXN5bmNcbiAgICAvLyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGNhbGxpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIGkuZS4sIHdoaWNoZXZlciBvZiB0aGUgMyBjYXNlcyBhYm92ZSBpc1xuICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBvbmVcbiAgICBjb25zdCBkZWZhdWx0QmVoYXZpb3IgPSBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBpZiB3ZSdyZSBydW5uaW5nIHdpdGggcGx1Z2lucywgbWFrZSBzdXJlIHdlIGxvZyB0aGF0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGFjdHVhbGx5XG4gICAgICAvLyBoYXBwZW5pbmcgc28gd2UgY2FuIHRlbGwgd2hlbiB0aGUgcGx1Z2luIGNhbGwgY2hhaW4gaXMgdW53cmFwcGluZyB0byB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgICAgLy8gaWYgdGhhdCdzIHdoYXQgaGFwcGVuc1xuICAgICAgcGx1Z2lucy5sZW5ndGggJiYgbG9nLmluZm8oYEV4ZWN1dGluZyBkZWZhdWx0IGhhbmRsaW5nIGJlaGF2aW9yIGZvciBjb21tYW5kICcke2NtZH0nYCk7XG5cbiAgICAgIC8vIGlmIHdlIG1ha2UgaXQgaGVyZSwgd2Uga25vdyB0aGF0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGhhbmRsZWRcbiAgICAgIGNtZEhhbmRsZWRCeS5kZWZhdWx0ID0gdHJ1ZTtcblxuICAgICAgaWYgKHJlcUZvclByb3h5KSB7XG4gICAgICAgIC8vIHdlIHdvdWxkIGhhdmUgcHJveGllZCB0aGlzIGNvbW1hbmQgaGFkIGEgcGx1Z2luIG5vdCBoYW5kbGVkIGl0LCBzbyB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgICAgICAvLyBpcyB0byBkbyB0aGUgcHJveHkgYW5kIHJldHJpZXZlIHRoZSByZXN1bHQgaW50ZXJuYWxseSBzbyBpdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBwbHVnaW5cbiAgICAgICAgLy8gaW4gY2FzZSBpdCBjYWxscyAnYXdhaXQgbmV4dCgpJy4gVGhpcyByZXF1aXJlcyB0aGF0IHRoZSBkcml2ZXIgaGF2ZSBkZWZpbmVkXG4gICAgICAgIC8vICdwcm94eUNvbW1hbmQnIGFuZCBub3QganVzdCAncHJveHlSZXFSZXMnLlxuICAgICAgICBpZiAoIWRzdFNlc3Npb24ucHJveHlDb21tYW5kKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE5vRHJpdmVyUHJveHlDb21tYW5kRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgZHN0U2Vzc2lvbi5wcm94eUNvbW1hbmQocmVxRm9yUHJveHkub3JpZ2luYWxVcmwsIHJlcUZvclByb3h5Lm1ldGhvZCxcbiAgICAgICAgICByZXFGb3JQcm94eS5ib2R5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzR2V0U3RhdHVzKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNVbWJyZWxsYUNtZCkge1xuICAgICAgICAvLyBzb21lIGNvbW1hbmRzLCBsaWtlIGRlbGV0ZVNlc3Npb24sIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRvIGhhbmRsZSBvbiAqdGhpcyogZHJpdmVyLFxuICAgICAgICAvLyBub3QgdGhlIHBsYXRmb3JtIGRyaXZlclxuICAgICAgICByZXR1cm4gYXdhaXQgc3VwZXIuZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKTtcbiAgICAgIH1cblxuICAgICAgLy8gaGVyZSB3ZSBrbm93IHRoYXQgd2UgYXJlIGV4ZWN1dGluZyBhIHNlc3Npb24gY29tbWFuZCwgYW5kIGhhdmUgYSB2YWxpZCBzZXNzaW9uIGRyaXZlclxuICAgICAgcmV0dXJuIGF3YWl0IGRzdFNlc3Npb24uZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgLy8gbm93IHRha2Ugb3VyIGRlZmF1bHQgYmVoYXZpb3IsIHdyYXAgaXQgd2l0aCBhbnkgbnVtYmVyIG9mIHBsdWdpbiBiZWhhdmlvcnMsIGFuZCBydW4gaXRcbiAgICBjb25zdCB3cmFwcGVkQ21kID0gdGhpcy53cmFwQ29tbWFuZFdpdGhQbHVnaW5zKHtcbiAgICAgIGRyaXZlciwgY21kLCBhcmdzLCBwbHVnaW5zLCBjbWRIYW5kbGVkQnksIG5leHQ6IGRlZmF1bHRCZWhhdmlvclxuICAgIH0pO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZXhlY3V0ZVdyYXBwZWRDb21tYW5kKHt3cmFwcGVkQ21kLCBwcm90b2NvbH0pO1xuXG4gICAgLy8gaWYgd2UgaGFkIHBsdWdpbnMsIG1ha2Ugc3VyZSB0byBsb2cgb3V0IHRoZSBoZWxwZnVsIHJlcG9ydCBhYm91dCB3aGljaCBwbHVnaW5zIGVuZGVkIHVwXG4gICAgLy8gaGFuZGxpbmcgdGhlIGNvbW1hbmQgYW5kIHdoaWNoIGRpZG4ndFxuICAgIHRoaXMubG9nUGx1Z2luSGFuZGxlclJlcG9ydChwbHVnaW5zLCB7Y21kLCBjbWRIYW5kbGVkQnl9KTtcblxuICAgIC8vIEFuZCBmaW5hbGx5LCBpZiB0aGUgY29tbWFuZCB3YXMgY3JlYXRlU2Vzc2lvbiwgd2Ugd2FudCB0byBtaWdyYXRlIGFueSBwbHVnaW5zIHdoaWNoIHdlcmVcbiAgICAvLyBwcmV2aW91c2x5IHNlc3Npb25sZXNzIHRvIHVzZSB0aGUgbmV3IHNlc3Npb25JZCwgc28gdGhhdCBwbHVnaW5zIGNhbiBzaGFyZSBzdGF0ZSBiZXR3ZWVuXG4gICAgLy8gdGhlaXIgY3JlYXRlU2Vzc2lvbiBtZXRob2QgYW5kIG90aGVyIGluc3RhbmNlIG1ldGhvZHNcbiAgICBpZiAoY21kID09PSBDUkVBVEVfU0VTU0lPTl9DT01NQU5EICYmIHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zLmxlbmd0aCAmJiAhcmVzLmVycm9yKSB7XG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBfLmZpcnN0KHJlcy52YWx1ZSk7XG4gICAgICBsb2cuaW5mbyhgUHJvbW90aW5nICR7dGhpcy5zZXNzaW9ubGVzc1BsdWdpbnMubGVuZ3RofSBzZXNzaW9ubGVzcyBwbHVnaW5zIHRvIGJlIGF0dGFjaGVkIGAgK1xuICAgICAgICAgICAgICAgYHRvIHNlc3Npb24gSUQgJHtzZXNzaW9uSWR9YCk7XG4gICAgICB0aGlzLnNlc3Npb25QbHVnaW5zW3Nlc3Npb25JZF0gPSB0aGlzLnNlc3Npb25sZXNzUGx1Z2lucztcbiAgICAgIHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHdyYXBDb21tYW5kV2l0aFBsdWdpbnMgKHtkcml2ZXIsIGNtZCwgYXJncywgbmV4dCwgY21kSGFuZGxlZEJ5LCBwbHVnaW5zfSkge1xuICAgIHBsdWdpbnMubGVuZ3RoICYmIGxvZy5pbmZvKGBQbHVnaW5zIHdoaWNoIGNhbiBoYW5kbGUgY21kICcke2NtZH0nOiAke3BsdWdpbnMubWFwKChwKSA9PiBwLm5hbWUpfWApO1xuXG4gICAgLy8gbm93IHdlIGNhbiBnbyB0aHJvdWdoIGVhY2ggcGx1Z2luIGFuZCB3cmFwIGBuZXh0YCBhcm91bmQgaXRzIG93biBoYW5kbGVyLCBwYXNzaW5nIHRoZSAqb2xkKlxuICAgIC8vIG5leHQgaW4gc28gdGhhdCBpdCBjYW4gY2FsbCBpdCBpZiBpdCB3YW50cyB0b1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIC8vIG5lZWQgYW4gSUlGRSBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgdmFsdWUgb2YgbmV4dCB0aGF0J3MgcGFzc2VkIHRvIHBsdWdpbi5oYW5kbGUgdG8gYmVcbiAgICAgIC8vIGV4YWN0bHkgdGhlIHZhbHVlIG9mIG5leHQgaGVyZSBiZWZvcmUgcmVhc3NpZ25tZW50OyB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIGxhemlseVxuICAgICAgLy8gZXZhbHVhdGVkLCBvdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGggaW5maW5pdGUgcmVjdXJzaW9uIG9mIHRoZSBsYXN0IGBuZXh0YCB0byBiZSBkZWZpbmVkLlxuICAgICAgY21kSGFuZGxlZEJ5W3BsdWdpbi5uYW1lXSA9IGZhbHNlOyAvLyB3ZSBzZWUgYSBuZXcgcGx1Z2luLCBzbyBhZGQgaXQgdG8gdGhlICdjbWRIYW5kbGVkQnknIG9iamVjdFxuICAgICAgbmV4dCA9ICgoX25leHQpID0+IGFzeW5jICgpID0+IHtcbiAgICAgICAgbG9nLmluZm8oYFBsdWdpbiAke3BsdWdpbi5uYW1lfSBpcyBub3cgaGFuZGxpbmcgY21kICcke2NtZH0nYCk7XG4gICAgICAgIGNtZEhhbmRsZWRCeVtwbHVnaW4ubmFtZV0gPSB0cnVlOyAvLyBpZiB3ZSBtYWtlIGl0IGhlcmUsIHRoaXMgcGx1Z2luIGhhcyBhdHRlbXB0ZWQgdG8gaGFuZGxlIGNtZFxuICAgICAgICAvLyBmaXJzdCBhdHRlbXB0IHRvIGhhbmRsZSB0aGUgY29tbWFuZCB2aWEgYSBjb21tYW5kLXNwZWNpZmljIGhhbmRsZXIgb24gdGhlIHBsdWdpblxuICAgICAgICBpZiAocGx1Z2luW2NtZF0pIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgcGx1Z2luW2NtZF0oX25leHQsIGRyaXZlciwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlLCBjYWxsIHRoZSBnZW5lcmljICdoYW5kbGUnIG1ldGhvZFxuICAgICAgICByZXR1cm4gYXdhaXQgcGx1Z2luLmhhbmRsZShfbmV4dCwgZHJpdmVyLCBjbWQsIC4uLmFyZ3MpO1xuICAgICAgfSkobmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICBsb2dQbHVnaW5IYW5kbGVyUmVwb3J0IChwbHVnaW5zLCB7Y21kLCBjbWRIYW5kbGVkQnl9KSB7XG4gICAgaWYgKCFwbHVnaW5zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIGRheSwgd2UgaGF2ZSBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHdoaWNoIHBsdWdpbnMgZW5kZWQgdXAgZ2V0dGluZ1xuICAgIC8vIHRoZWlyIGNvZGUgcnVuIGFzIHBhcnQgb2YgaGFuZGxpbmcgdGhpcyBjb21tYW5kLiBCZWNhdXNlIHBsdWdpbnMgY2FuIGNob29zZSAqbm90KiB0b1xuICAgIC8vIHBhc3MgY29udHJvbCB0byBvdGhlciBwbHVnaW5zIG9yIHRvIHRoZSBkZWZhdWx0IGRyaXZlciBiZWhhdmlvciwgdGhpcyBpcyBpbmZvcm1hdGlvblxuICAgIC8vIHdoaWNoIGlzIHByb2JhYmx5IHVzZWZ1bCB0byB0aGUgdXNlciAoZXNwZWNpYWxseSBpbiBzaXR1YXRpb25zIHdoZXJlIHBsdWdpbnMgbWlnaHQgbm90XG4gICAgLy8gaW50ZXJhY3Qgd2VsbCB0b2dldGhlciwgYW5kIGl0IHdvdWxkIGJlIGhhcmQgdG8gZGVidWcgb3RoZXJ3aXNlIHdpdGhvdXQgdGhpcyBraW5kIG9mXG4gICAgLy8gbWVzc2FnZSkuXG4gICAgY29uc3QgZGlkSGFuZGxlID0gT2JqZWN0LmtleXMoY21kSGFuZGxlZEJ5KS5maWx0ZXIoKGspID0+IGNtZEhhbmRsZWRCeVtrXSk7XG4gICAgY29uc3QgZGlkbnRIYW5kbGUgPSBPYmplY3Qua2V5cyhjbWRIYW5kbGVkQnkpLmZpbHRlcigoaykgPT4gIWNtZEhhbmRsZWRCeVtrXSk7XG4gICAgaWYgKGRpZG50SGFuZGxlLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZy5pbmZvKGBDb21tYW5kICcke2NtZH0nIHdhcyAqbm90KiBoYW5kbGVkIGJ5IHRoZSBmb2xsb3dpbmcgYmVoYXZpb3VycyBvciBwbHVnaW5zLCBldmVuIGAgK1xuICAgICAgICAgICAgICAgYHRob3VnaCB0aGV5IHdlcmUgcmVnaXN0ZXJlZCB0byBoYW5kbGUgaXQ6ICR7SlNPTi5zdHJpbmdpZnkoZGlkbnRIYW5kbGUpfS4gVGhlIGAgK1xuICAgICAgICAgICAgICAgYGNvbW1hbmQgKndhcyogaGFuZGxlZCBieSB0aGVzZTogJHtKU09OLnN0cmluZ2lmeShkaWRIYW5kbGUpfS5gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBleGVjdXRlV3JhcHBlZENvbW1hbmQgKHt3cmFwcGVkQ21kLCBwcm90b2NvbH0pIHtcbiAgICBsZXQgY21kUmVzLCBjbWRFcnIsIHJlcyA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyBBdCB0aGlzIHBvaW50LCBgd3JhcHBlZENtZGAgZGVmaW5lcyBhIHdob2xlIHNlcXVlbmNlIG9mIHBsdWdpbiBoYW5kbGVycywgY3VsbWluYXRpbmcgaW5cbiAgICAgIC8vIG91ciBkZWZhdWx0IGhhbmRsZXIuIFdoYXRldmVyIGl0IHJldHVybnMgaXMgd2hhdCB3ZSdyZSBnb2luZyB0byB3YW50IHRvIHNlbmQgYmFjayB0byB0aGVcbiAgICAgIC8vIHVzZXIuXG4gICAgICBjbWRSZXMgPSBhd2FpdCB3cmFwcGVkQ21kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY21kRXJyID0gZTtcbiAgICB9XG5cbiAgICAvLyBTYWRseSwgd2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQga2luZCBvZiBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4gSXQgd2lsbCBlaXRoZXIgYmUgYSBiYXJlXG4gICAgLy8gb2JqZWN0LCBvciBhIHByb3RvY29sLWF3YXJlIG9iamVjdCB3aXRoIHByb3RvY29sIGFuZCBlcnJvci92YWx1ZSBrZXlzLiBTbyB3ZSBuZWVkIHRvIHNuaWZmXG4gICAgLy8gaXQgYW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBkb3VibGUtd3JhcCBpdCBpZiBpdCdzIHRoZSBsYXR0ZXIga2luZC5cbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGNtZFJlcykgJiYgXy5oYXMoY21kUmVzLCAncHJvdG9jb2wnKSkge1xuICAgICAgcmVzID0gY21kUmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMudmFsdWUgPSBjbWRSZXM7XG4gICAgICByZXMuZXJyb3IgPSBjbWRFcnI7XG4gICAgICByZXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3h5QWN0aXZlIChzZXNzaW9uSWQpIHtcbiAgICBjb25zdCBkc3RTZXNzaW9uID0gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICAgIHJldHVybiBkc3RTZXNzaW9uICYmIF8uaXNGdW5jdGlvbihkc3RTZXNzaW9uLnByb3h5QWN0aXZlKSAmJiBkc3RTZXNzaW9uLnByb3h5QWN0aXZlKHNlc3Npb25JZCk7XG4gIH1cblxuICBnZXRQcm94eUF2b2lkTGlzdCAoc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgZHN0U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICByZXR1cm4gZHN0U2Vzc2lvbiA/IGRzdFNlc3Npb24uZ2V0UHJveHlBdm9pZExpc3QoKSA6IFtdO1xuICB9XG5cbiAgY2FuUHJveHkgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5jYW5Qcm94eShzZXNzaW9uSWQpO1xuICB9XG59XG5cbi8vIGhlbHAgZGVjaWRlIHdoaWNoIGNvbW1hbmRzIHNob3VsZCBiZSBwcm94aWVkIHRvIHN1Yi1kcml2ZXJzIGFuZCB3aGljaFxuLy8gc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhpcywgb3VyIHVtYnJlbGxhIGRyaXZlclxuZnVuY3Rpb24gaXNBcHBpdW1Ecml2ZXJDb21tYW5kIChjbWQpIHtcbiAgcmV0dXJuICFpc1Nlc3Npb25Db21tYW5kKGNtZCkgfHwgY21kID09PSAnZGVsZXRlU2Vzc2lvbic7XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gQXBwaXVtIHRyaWVkIHRvIHByb3h5IGEgY29tbWFuZCB1c2luZyBhIGRyaXZlcidzIGBwcm94eUNvbW1hbmRgIG1ldGhvZCBidXQgdGhlXG4gKiBtZXRob2QgZGlkIG5vdCBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgY29kZSA9ICdBUFBJVU1FUlJfTk9fRFJJVkVSX1BST1hZQ09NTUFORCc7XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKGBUaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgdGhpcyBjb21tYW5kIHdhcyB0byBwcm94eSwgYnV0IHRoZSBkcml2ZXIgYCArXG4gICAgICAgICAgYGRpZCBub3QgaGF2ZSB0aGUgJ3Byb3h5Q29tbWFuZCcgbWV0aG9kIGRlZmluZWQuIFRvIGZ1bGx5IHN1cHBvcnQgYCArXG4gICAgICAgICAgYHBsdWdpbnMsIGRyaXZlcnMgc2hvdWxkIGhhdmUgJ3Byb3h5Q29tbWFuZCcgc2V0IHRvIGEgandwUHJveHkgb2JqZWN0J3MgYCArXG4gICAgICAgICAgYCdjb21tYW5kKCknIG1ldGhvZCwgaW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCAncHJveHlSZXFSZXMnYCk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQXBwaXVtRHJpdmVyIH07XG4iXSwiZmlsZSI6ImxpYi9hcHBpdW0uanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
566
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9hcHBpdW0uanMiXSwibmFtZXMiOlsiZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyIsImF1dG9tYXRpb25OYW1lIiwicHJlc2VuY2UiLCJpc1N0cmluZyIsInBsYXRmb3JtTmFtZSIsInNlc3Npb25zTGlzdEd1YXJkIiwiQXN5bmNMb2NrIiwicGVuZGluZ0RyaXZlcnNHdWFyZCIsIkFwcGl1bURyaXZlciIsIkJhc2VEcml2ZXIiLCJjb25zdHJ1Y3RvciIsImFyZ3MiLCJ0bXBEaXIiLCJwcm9jZXNzIiwiZW52IiwiQVBQSVVNX1RNUF9ESVIiLCJkZXNpcmVkQ2FwQ29uc3RyYWludHMiLCJuZXdDb21tYW5kVGltZW91dE1zIiwic2Vzc2lvbnMiLCJwZW5kaW5nRHJpdmVycyIsInBsdWdpbkNsYXNzZXMiLCJzZXNzaW9uUGx1Z2lucyIsInNlc3Npb25sZXNzUGx1Z2lucyIsImlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQiLCJzZXNzaW9uRXhpc3RzIiwic2Vzc2lvbklkIiwiZHN0U2Vzc2lvbiIsImRyaXZlckZvclNlc3Npb24iLCJnZXRTdGF0dXMiLCJidWlsZCIsIl8iLCJjbG9uZSIsImdldFNlc3Npb25zIiwiYWNxdWlyZSIsIm5hbWUiLCJ0b1BhaXJzIiwibWFwIiwiaWQiLCJkcml2ZXIiLCJjYXBhYmlsaXRpZXMiLCJjYXBzIiwicHJpbnROZXdTZXNzaW9uQW5ub3VuY2VtZW50IiwiZHJpdmVyTmFtZSIsImRyaXZlclZlcnNpb24iLCJkcml2ZXJCYXNlVmVyc2lvbiIsImxvZyIsImluZm8iLCJBUFBJVU1fVkVSIiwiYmFzZVZlcnNpb24iLCJfZmluZE1hdGNoaW5nRHJpdmVyIiwiYXNzaWduQ2xpQXJnc1RvRXh0ZW5zaW9uIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJleHRJbnN0YW5jZSIsImNsaUFyZ3MiLCJpc0VtcHR5IiwiY3JlYXRlU2Vzc2lvbiIsImpzb253cENhcHMiLCJyZXFDYXBzIiwidzNjQ2FwYWJpbGl0aWVzIiwiZGVmYXVsdENhcGFiaWxpdGllcyIsImNsb25lRGVlcCIsImRlZmF1bHRTZXR0aW5ncyIsImp3cFNldHRpbmdzIiwiT2JqZWN0IiwiYXNzaWduIiwidzNjU2V0dGluZ3MiLCJhbHdheXNNYXRjaCIsImZpcnN0TWF0Y2hFbnRyeSIsImZpcnN0TWF0Y2giLCJwcm90b2NvbCIsImlubmVyU2Vzc2lvbklkIiwiZENhcHMiLCJwYXJzZWRDYXBzIiwiZGVzaXJlZENhcHMiLCJwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMiLCJwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMiLCJlcnJvciIsIklubmVyRHJpdmVyIiwidmVyc2lvbiIsImRyaXZlckNvbmZpZyIsInNlc3Npb25PdmVycmlkZSIsImRlbGV0ZUFsbFNlc3Npb25zIiwicnVubmluZ0RyaXZlcnNEYXRhIiwib3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEiLCJkcml2ZXJJbnN0YW5jZSIsInJlbGF4ZWRTZWN1cml0eUVuYWJsZWQiLCJkZW55SW5zZWN1cmUiLCJhIiwiYWxsb3dJbnNlY3VyZSIsInNlcnZlciIsInNlcnZlckhvc3QiLCJhZGRyZXNzIiwic2VydmVyUG9ydCIsInBvcnQiLCJzZXJ2ZXJQYXRoIiwiYmFzZVBhdGgiLCJjdXJTZXNzaW9uRGF0YUZvckRyaXZlciIsImUiLCJlcnJvcnMiLCJTZXNzaW9uTm90Q3JlYXRlZEVycm9yIiwibWVzc2FnZSIsImRydiIsImRyaXZlckRhdGEiLCJwdXNoIiwicHVsbCIsImF0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXIiLCJzdGFydE5ld0NvbW1hbmRUaW1lb3V0IiwiaXNXM0NQcm90b2NvbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1cGRhdGVTZXR0aW5ncyIsImlzTWpzb253cFByb3RvY29sIiwidmFsdWUiLCJvblNodXRkb3duIiwiY2F1c2UiLCJFcnJvciIsIndhcm4iLCJwbHVnaW4iLCJpc0Z1bmN0aW9uIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJkZWJ1ZyIsImRhdGEiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJzIiwiZGF0dW0iLCJkZWxldGVTZXNzaW9uIiwib3RoZXJTZXNzaW9uc0RhdGEiLCJjdXJDb25zdHJ1Y3Rvck5hbWUiLCJrZXkiLCJvcHRzIiwic2Vzc2lvbnNDb3VudCIsInNpemUiLCJmb3JjZSIsInJlYXNvbiIsInV0aWwiLCJwbHVyYWxpemUiLCJjbGVhbnVwUHJvbWlzZXMiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJjbGVhbnVwUHJvbWlzZSIsInBsdWdpbnNGb3JTZXNzaW9uIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2VzIiwicGx1Z2luc1RvSGFuZGxlQ21kIiwiY21kIiwicCIsImhhbmRsZSIsIlBsdWdpbkNsYXNzIiwicGx1Z2luTmFtZSIsImV4ZWN1dGVDb21tYW5kIiwiaXNHZXRTdGF0dXMiLCJpc1VtYnJlbGxhQ21kIiwiaXNBcHBpdW1Ecml2ZXJDb21tYW5kIiwiaXNTZXNzaW9uQ21kIiwicmVxRm9yUHJveHkiLCJsYXN0IiwicG9wIiwicGx1Z2lucyIsImNtZEhhbmRsZWRCeSIsImRlZmF1bHQiLCJkZWZhdWx0QmVoYXZpb3IiLCJsZW5ndGgiLCJwcm94eUNvbW1hbmQiLCJOb0RyaXZlclByb3h5Q29tbWFuZEVycm9yIiwib3JpZ2luYWxVcmwiLCJtZXRob2QiLCJib2R5Iiwid3JhcHBlZENtZCIsIndyYXBDb21tYW5kV2l0aFBsdWdpbnMiLCJuZXh0IiwicmVzIiwiZXhlY3V0ZVdyYXBwZWRDb21tYW5kIiwibG9nUGx1Z2luSGFuZGxlclJlcG9ydCIsIkNSRUFURV9TRVNTSU9OX0NPTU1BTkQiLCJmaXJzdCIsIl9uZXh0IiwiZGlkSGFuZGxlIiwiayIsImRpZG50SGFuZGxlIiwiY21kUmVzIiwiY21kRXJyIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUVBLE1B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Z0ssUUFBWCxDQUFvQmpLLFNBQXBCLENBQXJCO0FBQ0Q7O0FBL2xCbUM7Ozs7QUFvbUJ0QyxTQUFTZ0kscUJBQVQsQ0FBZ0NSLEdBQWhDLEVBQXFDO0FBQ25DLFNBQU8sQ0FBQyxrQ0FBaUJBLEdBQWpCLENBQUQsSUFBMEJBLEdBQUcsS0FBSyxlQUF6QztBQUNEOztBQU1NLE1BQU1tQix5QkFBTixTQUF3Q2hELEtBQXhDLENBQThDO0FBTW5EMUcsRUFBQUEsV0FBVyxHQUFJO0FBQ2IsVUFBTyxxRUFBRCxHQUNDLG1FQURELEdBRUMseUVBRkQsR0FHQyw2REFIUDtBQURhLGdEQUZSLGtDQUVRO0FBS2Q7O0FBWGtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBsb2cgZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgZ2V0QnVpbGRJbmZvLCB1cGRhdGVCdWlsZEluZm8sIEFQUElVTV9WRVIgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBmaW5kTWF0Y2hpbmdEcml2ZXIgfSBmcm9tICcuL2RyaXZlcnMnO1xuaW1wb3J0IHsgQmFzZURyaXZlciwgZXJyb3JzLCBpc1Nlc3Npb25Db21tYW5kLFxuICAgICAgICAgQ1JFQVRFX1NFU1NJT05fQ09NTUFORCB9IGZyb20gJ0BhcHBpdW0vYmFzZS1kcml2ZXInO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCB7IHBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLCBwdWxsU2V0dGluZ3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzID0ge1xuICBhdXRvbWF0aW9uTmFtZToge1xuICAgIHByZXNlbmNlOiB0cnVlLFxuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBwbGF0Zm9ybU5hbWU6IHtcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbn07XG5cbmNvbnN0IHNlc3Npb25zTGlzdEd1YXJkID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgcGVuZGluZ0RyaXZlcnNHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcblxuY2xhc3MgQXBwaXVtRHJpdmVyIGV4dGVuZHMgQmFzZURyaXZlciB7XG4gIGNvbnN0cnVjdG9yIChhcmdzKSB7XG4gICAgLy8gSXQgaXMgbmVjZXNzYXJ5IHRvIHNldCBgLS10bXBgIGhlcmUgc2luY2UgaXQgc2hvdWxkIGJlIHNldCB0b1xuICAgIC8vIHByb2Nlc3MuZW52LkFQUElVTV9UTVBfRElSIG9uY2UgYXQgYW4gaW5pdGlhbCBwb2ludCBpbiB0aGUgQXBwaXVtIGxpZmVjeWNsZS5cbiAgICAvLyBUaGUgcHJvY2VzcyBhcmd1bWVudCB3aWxsIGJlIHJlZmVyZW5jZWQgYnkgQmFzZURyaXZlci5cbiAgICAvLyBQbGVhc2UgY2FsbCBAYXBwaXVtL3N1cHBvcnQudGVtcERpciBtb2R1bGUgdG8gYXBwbHkgdGhpcyBiZW5lZml0LlxuICAgIGlmIChhcmdzLnRtcERpcikge1xuICAgICAgcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgPSBhcmdzLnRtcERpcjtcbiAgICB9XG5cbiAgICBzdXBlcihhcmdzKTtcblxuICAgIHRoaXMuZGVzaXJlZENhcENvbnN0cmFpbnRzID0gZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cztcblxuICAgIC8vIHRoZSBtYWluIEFwcGl1bSBEcml2ZXIgaGFzIG5vIG5ldyBjb21tYW5kIHRpbWVvdXRcbiAgICB0aGlzLm5ld0NvbW1hbmRUaW1lb3V0TXMgPSAwO1xuXG4gICAgdGhpcy5hcmdzID0gey4uLmFyZ3N9O1xuXG4gICAgLy8gQWNjZXNzIHRvIHNlc3Npb25zIGxpc3QgbXVzdCBiZSBndWFyZGVkIHdpdGggYSBTZW1hcGhvcmUsIGJlY2F1c2VcbiAgICAvLyBpdCBtaWdodCBiZSBjaGFuZ2VkIGJ5IG90aGVyIGFzeW5jIGNhbGxzIGF0IGFueSB0aW1lXG4gICAgLy8gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICB0aGlzLnNlc3Npb25zID0ge307XG5cbiAgICAvLyBBY2Nlc3MgdG8gcGVuZGluZyBkcml2ZXJzIGxpc3QgbXVzdCBiZSBndWFyZGVkIHdpdGggYSBTZW1hcGhvcmUsIGJlY2F1c2VcbiAgICAvLyBpdCBtaWdodCBiZSBjaGFuZ2VkIGJ5IG90aGVyIGFzeW5jIGNhbGxzIGF0IGFueSB0aW1lXG4gICAgLy8gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICB0aGlzLnBlbmRpbmdEcml2ZXJzID0ge307XG5cbiAgICB0aGlzLnBsdWdpbkNsYXNzZXMgPSBbXTsgLy8gbGlzdCBvZiB3aGljaCBwbHVnaW5zIGFyZSBhY3RpdmVcbiAgICB0aGlzLnNlc3Npb25QbHVnaW5zID0ge307IC8vIG1hcCBvZiBzZXNzaW9ucyB0byBhY3R1YWwgcGx1Z2luIGluc3RhbmNlcyBwZXIgc2Vzc2lvblxuICAgIHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zID0gW107IC8vIHNvbWUgY29tbWFuZHMgYXJlIHNlc3Npb25sZXNzLCBzbyB3ZSBuZWVkIGEgc2V0IG9mIHBsdWdpbnMgZm9yIHRoZW1cblxuICAgIC8vIGFsbG93IHRoaXMgdG8gaGFwcGVuIGluIHRoZSBiYWNrZ3JvdW5kLCBzbyBubyBgYXdhaXRgXG4gICAgdXBkYXRlQnVpbGRJbmZvKCk7XG4gIH1cblxuICAvKiogQHR5cGUge0RyaXZlckNvbmZpZ3x1bmRlZmluZWR9ICovXG4gIGRyaXZlckNvbmZpZztcblxuICAvKipcbiAgICogQ2FuY2VsIGNvbW1hbmRzIHF1ZXVlaW5nIGZvciB0aGUgdW1icmVsbGEgQXBwaXVtIGRyaXZlclxuICAgKi9cbiAgZ2V0IGlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQgKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNlc3Npb25FeGlzdHMgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5zZXNzaW9uSWQgIT09IG51bGw7XG4gIH1cblxuICBkcml2ZXJGb3JTZXNzaW9uIChzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICB9XG5cbiAgYXN5bmMgZ2V0U3RhdHVzICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSByZXF1aXJlLWF3YWl0XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1aWxkOiBfLmNsb25lKGdldEJ1aWxkSW5mbygpKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0U2Vzc2lvbnMgKCkge1xuICAgIGNvbnN0IHNlc3Npb25zID0gYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4gdGhpcy5zZXNzaW9ucyk7XG4gICAgcmV0dXJuIF8udG9QYWlycyhzZXNzaW9ucylcbiAgICAgIC5tYXAoKFtpZCwgZHJpdmVyXSkgPT4gKHtpZCwgY2FwYWJpbGl0aWVzOiBkcml2ZXIuY2Fwc30pKTtcbiAgfVxuXG4gIHByaW50TmV3U2Vzc2lvbkFubm91bmNlbWVudCAoZHJpdmVyTmFtZSwgZHJpdmVyVmVyc2lvbiwgZHJpdmVyQmFzZVZlcnNpb24pIHtcbiAgICBsb2cuaW5mbyhkcml2ZXJWZXJzaW9uXG4gICAgICA/IGBBcHBpdW0gdiR7QVBQSVVNX1ZFUn0gY3JlYXRpbmcgbmV3ICR7ZHJpdmVyTmFtZX0gKHYke2RyaXZlclZlcnNpb259KSBzZXNzaW9uYFxuICAgICAgOiBgQXBwaXVtIHYke0FQUElVTV9WRVJ9IGNyZWF0aW5nIG5ldyAke2RyaXZlck5hbWV9IHNlc3Npb25gXG4gICAgKTtcbiAgICBsb2cuaW5mbyhgQ2hlY2tpbmcgQmFzZURyaXZlciB2ZXJzaW9ucyBmb3IgQXBwaXVtIGFuZCAke2RyaXZlck5hbWV9YCk7XG4gICAgbG9nLmluZm8oQXBwaXVtRHJpdmVyLmJhc2VWZXJzaW9uXG4gICAgICA/IGBBcHBpdW0ncyBCYXNlRHJpdmVyIHZlcnNpb24gaXMgJHtBcHBpdW1Ecml2ZXIuYmFzZVZlcnNpb259YFxuICAgICAgOiBgQ291bGQgbm90IGRldGVybWluZSBBcHBpdW0ncyBCYXNlRHJpdmVyIHZlcnNpb25gXG4gICAgKTtcbiAgICBsb2cuaW5mbyhkcml2ZXJCYXNlVmVyc2lvblxuICAgICAgPyBgJHtkcml2ZXJOYW1lfSdzIEJhc2VEcml2ZXIgdmVyc2lvbiBpcyAke2RyaXZlckJhc2VWZXJzaW9ufWBcbiAgICAgIDogYENvdWxkIG5vdCBkZXRlcm1pbmUgJHtkcml2ZXJOYW1lfSdzIEJhc2VEcml2ZXIgdmVyc2lvbmBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMganVzdCBhbiBhbGlhcyBmb3IgZHJpdmVyLmpzJ3MgbWV0aG9kLCB3aGljaCBpcyBuZWNlc3NhcnkgZm9yXG4gICAqIG1vY2tpbmcgaW4gdGhlIHRlc3Qgc3VpdGVcbiAgICovXG4gIF9maW5kTWF0Y2hpbmdEcml2ZXIgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gZmluZE1hdGNoaW5nRHJpdmVyKC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuZCBhc3NpZ24gQ0xJIGFyZ3MgZm9yIGEgZHJpdmVyIG9yIHBsdWdpblxuICAgKlxuICAgKiBJZiB0aGUgZXh0ZW5zaW9uIGhhcyBwcm92aWRlZCBhIHNjaGVtYSwgdmFsaWRhdGlvbiBoYXMgYWxyZWFkeSBoYXBwZW5lZC5cbiAgICogQHBhcmFtIHtpbXBvcnQoJy4vZXh0LWNvbmZpZy1pbycpLkV4dGVuc2lvblR5cGV9IGV4dFR5cGUgJ2RyaXZlcicgb3IgJ3BsdWdpbidcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgdGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvblxuICAgKiBAcGFyYW0ge09iamVjdH0gZXh0SW5zdGFuY2UgdGhlIGRyaXZlciBvciBwbHVnaW4gaW5zdGFuY2VcbiAgICovXG4gIGFzc2lnbkNsaUFyZ3NUb0V4dGVuc2lvbiAoZXh0VHlwZSwgZXh0TmFtZSwgZXh0SW5zdGFuY2UpIHtcbiAgICBjb25zdCBjbGlBcmdzID0gdGhpcy5hcmdzW2V4dFR5cGVdPy5bZXh0TmFtZV07XG4gICAgaWYgKCFfLmlzRW1wdHkoY2xpQXJncykpIHtcbiAgICAgIGV4dEluc3RhbmNlLmNsaUFyZ3MgPSBjbGlBcmdzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgc2Vzc2lvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbndwQ2FwcyBKU09OV1AgZm9ybWF0dGVkIGRlc2lyZWQgY2FwYWJpbGl0aWVzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZXFDYXBzIFJlcXVpcmVkIGNhcGFiaWxpdGllcyAoSlNPTldQIHN0YW5kYXJkKVxuICAgKiBAcGFyYW0ge09iamVjdH0gdzNjQ2FwYWJpbGl0aWVzIFczQyBjYXBhYmlsaXRpZXNcbiAgICogQHJldHVybiB7QXJyYXl9IFVuaXF1ZSBzZXNzaW9uIElEIGFuZCBjYXBhYmlsaXRpZXNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24gKGpzb253cENhcHMsIHJlcUNhcHMsIHczY0NhcGFiaWxpdGllcykge1xuICAgIGNvbnN0IGRlZmF1bHRDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh0aGlzLmFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gICAgY29uc3QgZGVmYXVsdFNldHRpbmdzID0gcHVsbFNldHRpbmdzKGRlZmF1bHRDYXBhYmlsaXRpZXMpO1xuICAgIGpzb253cENhcHMgPSBfLmNsb25lRGVlcChqc29ud3BDYXBzKTtcbiAgICBjb25zdCBqd3BTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncywgcHVsbFNldHRpbmdzKGpzb253cENhcHMpKTtcbiAgICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBvbmx5IHByb3ZpZGVzIGNhcHMgdXNpbmcgSlNPTldQIHN0YW5kYXJkLFxuICAgIC8vIGFsdGhvdWdoIGZpcnN0TWF0Y2gvYWx3YXlzTWF0Y2ggcHJvcGVydGllcyBhcmUgc3RpbGwgcHJlc2VudC5cbiAgICAvLyBJbiBzdWNoIGNhc2Ugd2UgYXNzdW1lIHRoZSBjbGllbnQgdW5kZXJzdGFuZHMgVzNDIHByb3RvY29sIGFuZCBtZXJnZSB0aGUgZ2l2ZW5cbiAgICAvLyBKU09OV1AgY2FwcyB0byBXM0MgY2Fwc1xuICAgIGNvbnN0IHczY1NldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgandwU2V0dGluZ3MpO1xuICAgIE9iamVjdC5hc3NpZ24odzNjU2V0dGluZ3MsIHB1bGxTZXR0aW5ncygodzNjQ2FwYWJpbGl0aWVzIHx8IHt9KS5hbHdheXNNYXRjaCB8fCB7fSkpO1xuICAgIGZvciAoY29uc3QgZmlyc3RNYXRjaEVudHJ5IG9mICgodzNjQ2FwYWJpbGl0aWVzIHx8IHt9KS5maXJzdE1hdGNoIHx8IFtdKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih3M2NTZXR0aW5ncywgcHVsbFNldHRpbmdzKGZpcnN0TWF0Y2hFbnRyeSkpO1xuICAgIH1cblxuICAgIGxldCBwcm90b2NvbDtcbiAgICBsZXQgaW5uZXJTZXNzaW9uSWQsIGRDYXBzO1xuICAgIHRyeSB7XG4gICAgICAvLyBQYXJzZSB0aGUgY2FwcyBpbnRvIGEgZm9ybWF0IHRoYXQgdGhlIElubmVyRHJpdmVyIHdpbGwgYWNjZXB0XG4gICAgICBjb25zdCBwYXJzZWRDYXBzID0gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoXG4gICAgICAgIGpzb253cENhcHMsXG4gICAgICAgIHczY0NhcGFiaWxpdGllcyxcbiAgICAgICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMsXG4gICAgICAgIGRlZmF1bHRDYXBhYmlsaXRpZXNcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHtkZXNpcmVkQ2FwcywgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLCBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMsIGVycm9yfSA9IHBhcnNlZENhcHM7XG4gICAgICBwcm90b2NvbCA9IHBhcnNlZENhcHMucHJvdG9jb2w7XG5cbiAgICAgIC8vIElmIHRoZSBwYXJzaW5nIG9mIHRoZSBjYXBzIHByb2R1Y2VkIGFuIGVycm9yLCB0aHJvdyBpdCBpbiBoZXJlXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZHJpdmVyOiBJbm5lckRyaXZlcixcbiAgICAgICAgdmVyc2lvbjogZHJpdmVyVmVyc2lvbixcbiAgICAgICAgZHJpdmVyTmFtZVxuICAgICAgfSA9IHRoaXMuX2ZpbmRNYXRjaGluZ0RyaXZlcih0aGlzLmRyaXZlckNvbmZpZywgZGVzaXJlZENhcHMpO1xuICAgICAgdGhpcy5wcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQoSW5uZXJEcml2ZXIubmFtZSwgZHJpdmVyVmVyc2lvbiwgSW5uZXJEcml2ZXIuYmFzZVZlcnNpb24pO1xuXG4gICAgICBpZiAodGhpcy5hcmdzLnNlc3Npb25PdmVycmlkZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUFsbFNlc3Npb25zKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBydW5uaW5nRHJpdmVyc0RhdGEsIG90aGVyUGVuZGluZ0RyaXZlcnNEYXRhO1xuXG4gICAgICBjb25zdCBkcml2ZXJJbnN0YW5jZSA9IG5ldyBJbm5lckRyaXZlcih0aGlzLmFyZ3MsIHRydWUpO1xuXG4gICAgICAvLyBXZSB3YW50IHRvIGFzc2lnbiBzZWN1cml0eSB2YWx1ZXMgZGlyZWN0bHkgb24gdGhlIGRyaXZlci4gVGhlIGRyaXZlclxuICAgICAgLy8gc2hvdWxkIG5vdCByZWFkIHNlY3VyaXR5IHZhbHVlcyBmcm9tIGB0aGlzLm9wdHNgIGJlY2F1c2UgdGhvc2UgdmFsdWVzXG4gICAgICAvLyBjb3VsZCBoYXZlIGJlZW4gc2V0IGJ5IGEgbWFsaWNpb3VzIHVzZXIgdmlhIGNhcGFiaWxpdGllcywgd2hlcmVhcyB3ZVxuICAgICAgLy8gd2FudCBhIGd1YXJhbnRlZSB0aGUgdmFsdWVzIHdlcmUgc2V0IGJ5IHRoZSBhcHBpdW0gc2VydmVyIGFkbWluXG4gICAgICBpZiAodGhpcy5hcmdzLnJlbGF4ZWRTZWN1cml0eUVuYWJsZWQpIHtcbiAgICAgICAgbG9nLmluZm8oYEFwcGx5aW5nIHJlbGF4ZWQgc2VjdXJpdHkgdG8gJyR7SW5uZXJEcml2ZXIubmFtZX0nIGFzIHBlciBgICtcbiAgICAgICAgICAgICAgICAgYHNlcnZlciBjb21tYW5kIGxpbmUgYXJndW1lbnQuIEFsbCBpbnNlY3VyZSBmZWF0dXJlcyB3aWxsIGJlIGAgK1xuICAgICAgICAgICAgICAgICBgZW5hYmxlZCB1bmxlc3MgZXhwbGljaXRseSBkaXNhYmxlZCBieSAtLWRlbnktaW5zZWN1cmVgKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuYXJncy5kZW55SW5zZWN1cmUpKSB7XG4gICAgICAgIGxvZy5pbmZvKCdFeHBsaWNpdGx5IHByZXZlbnRpbmcgdXNlIG9mIGluc2VjdXJlIGZlYXR1cmVzOicpO1xuICAgICAgICB0aGlzLmFyZ3MuZGVueUluc2VjdXJlLm1hcCgoYSkgPT4gbG9nLmluZm8oYCAgICAke2F9YCkpO1xuICAgICAgICBkcml2ZXJJbnN0YW5jZS5kZW55SW5zZWN1cmUgPSB0aGlzLmFyZ3MuZGVueUluc2VjdXJlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmFyZ3MuYWxsb3dJbnNlY3VyZSkpIHtcbiAgICAgICAgbG9nLmluZm8oJ0V4cGxpY2l0bHkgZW5hYmxpbmcgdXNlIG9mIGluc2VjdXJlIGZlYXR1cmVzOicpO1xuICAgICAgICB0aGlzLmFyZ3MuYWxsb3dJbnNlY3VyZS5tYXAoKGEpID0+IGxvZy5pbmZvKGAgICAgJHthfWApKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UuYWxsb3dJbnNlY3VyZSA9IHRoaXMuYXJncy5hbGxvd0luc2VjdXJlO1xuICAgICAgfVxuXG4gICAgICAvLyBMaWtld2lzZSwgYW55IGRyaXZlci1zcGVjaWZpYyBDTEkgYXJncyB0aGF0IHdlcmUgcGFzc2VkIGluIHNob3VsZCBiZSBhc3NpZ25lZCBkaXJlY3RseSB0b1xuICAgICAgLy8gdGhlIGRyaXZlciBzbyB0aGF0IHRoZXkgY2Fubm90IGJlIG1pbWlja2VkIGJ5IGEgbWFsaWNpb3VzIHVzZXIgc2VuZGluZyBpbiBjYXBhYmlsaXRpZXNcbiAgICAgIHRoaXMuYXNzaWduQ2xpQXJnc1RvRXh0ZW5zaW9uKCdkcml2ZXInLCBkcml2ZXJOYW1lLCBkcml2ZXJJbnN0YW5jZSk7XG5cblxuICAgICAgLy8gVGhpcyBhc3NpZ25tZW50IGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0IHdlYiBzb2NrZXRzIGZ1bmN0aW9uYWxpdHkgaW5zaWRlIHRoZSBkcml2ZXJcbiAgICAgIGRyaXZlckluc3RhbmNlLnNlcnZlciA9IHRoaXMuc2VydmVyO1xuXG4gICAgICAvLyBEcml2ZXJzL3BsdWdpbnMgbWlnaHQgYWxzbyB3YW50IHRvIGtub3cgd2hlcmUgdGhleSBhcmUgaG9zdGVkXG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJIb3N0ID0gdGhpcy5hcmdzLmFkZHJlc3M7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJQb3J0ID0gdGhpcy5hcmdzLnBvcnQ7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJQYXRoID0gdGhpcy5hcmdzLmJhc2VQYXRoO1xuXG4gICAgICB0cnkge1xuICAgICAgICBydW5uaW5nRHJpdmVyc0RhdGEgPSBhd2FpdCB0aGlzLmN1clNlc3Npb25EYXRhRm9yRHJpdmVyKElubmVyRHJpdmVyKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IGVycm9ycy5TZXNzaW9uTm90Q3JlYXRlZEVycm9yKGUubWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBwZW5kaW5nRHJpdmVyc0d1YXJkLmFjcXVpcmUoQXBwaXVtRHJpdmVyLm5hbWUsICgpID0+IHtcbiAgICAgICAgdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXSA9IHRoaXMucGVuZGluZ0RyaXZlcnNbSW5uZXJEcml2ZXIubmFtZV0gfHwgW107XG4gICAgICAgIG90aGVyUGVuZGluZ0RyaXZlcnNEYXRhID0gdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXS5tYXAoKGRydikgPT4gZHJ2LmRyaXZlckRhdGEpO1xuICAgICAgICB0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdLnB1c2goZHJpdmVySW5zdGFuY2UpO1xuICAgICAgfSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIFtpbm5lclNlc3Npb25JZCwgZENhcHNdID0gYXdhaXQgZHJpdmVySW5zdGFuY2UuY3JlYXRlU2Vzc2lvbihcbiAgICAgICAgICBwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMsXG4gICAgICAgICAgcmVxQ2FwcyxcbiAgICAgICAgICBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMsXG4gICAgICAgICAgWy4uLnJ1bm5pbmdEcml2ZXJzRGF0YSwgLi4ub3RoZXJQZW5kaW5nRHJpdmVyc0RhdGFdXG4gICAgICAgICk7XG4gICAgICAgIHByb3RvY29sID0gZHJpdmVySW5zdGFuY2UucHJvdG9jb2w7XG4gICAgICAgIGF3YWl0IHNlc3Npb25zTGlzdEd1YXJkLmFjcXVpcmUoQXBwaXVtRHJpdmVyLm5hbWUsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25zW2lubmVyU2Vzc2lvbklkXSA9IGRyaXZlckluc3RhbmNlO1xuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IHBlbmRpbmdEcml2ZXJzR3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICAgIF8ucHVsbCh0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdLCBkcml2ZXJJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmF0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXIoZHJpdmVySW5zdGFuY2UsIGlubmVyU2Vzc2lvbklkKTtcblxuICAgICAgbG9nLmluZm8oYE5ldyAke0lubmVyRHJpdmVyLm5hbWV9IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHksIHNlc3Npb24gYCArXG4gICAgICAgICAgICAgIGAke2lubmVyU2Vzc2lvbklkfSBhZGRlZCB0byBtYXN0ZXIgc2Vzc2lvbiBsaXN0YCk7XG5cbiAgICAgIC8vIHNldCB0aGUgTmV3IENvbW1hbmQgVGltZW91dCBmb3IgdGhlIGlubmVyIGRyaXZlclxuICAgICAgZHJpdmVySW5zdGFuY2Uuc3RhcnROZXdDb21tYW5kVGltZW91dCgpO1xuXG4gICAgICAvLyBhcHBseSBpbml0aWFsIHZhbHVlcyB0byBBcHBpdW0gc2V0dGluZ3MgKGlmIHByb3ZpZGVkKVxuICAgICAgaWYgKGRyaXZlckluc3RhbmNlLmlzVzNDUHJvdG9jb2woKSAmJiAhXy5pc0VtcHR5KHczY1NldHRpbmdzKSkge1xuICAgICAgICBsb2cuaW5mbyhgQXBwbHlpbmcgdGhlIGluaXRpYWwgdmFsdWVzIHRvIEFwcGl1bSBzZXR0aW5ncyBwYXJzZWQgZnJvbSBXM0MgY2FwczogYCArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodzNjU2V0dGluZ3MpKTtcbiAgICAgICAgYXdhaXQgZHJpdmVySW5zdGFuY2UudXBkYXRlU2V0dGluZ3ModzNjU2V0dGluZ3MpO1xuICAgICAgfSBlbHNlIGlmIChkcml2ZXJJbnN0YW5jZS5pc01qc29ud3BQcm90b2NvbCgpICYmICFfLmlzRW1wdHkoandwU2V0dGluZ3MpKSB7XG4gICAgICAgIGxvZy5pbmZvKGBBcHBseWluZyB0aGUgaW5pdGlhbCB2YWx1ZXMgdG8gQXBwaXVtIHNldHRpbmdzIHBhcnNlZCBmcm9tIE1KU09OV1AgY2FwczogYCArXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoandwU2V0dGluZ3MpKTtcbiAgICAgICAgYXdhaXQgZHJpdmVySW5zdGFuY2UudXBkYXRlU2V0dGluZ3MoandwU2V0dGluZ3MpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3IsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwcm90b2NvbCxcbiAgICAgIHZhbHVlOiBbaW5uZXJTZXNzaW9uSWQsIGRDYXBzLCBwcm90b2NvbF1cbiAgICB9O1xuICB9XG5cbiAgYXR0YWNoVW5leHBlY3RlZFNodXRkb3duSGFuZGxlciAoZHJpdmVyLCBpbm5lclNlc3Npb25JZCkge1xuICAgIGNvbnN0IG9uU2h1dGRvd24gPSAoY2F1c2UgPSBuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3InKSkgPT4ge1xuICAgICAgbG9nLndhcm4oYEVuZGluZyBzZXNzaW9uLCBjYXVzZSB3YXMgJyR7Y2F1c2UubWVzc2FnZX0nYCk7XG5cbiAgICAgIGlmICh0aGlzLnNlc3Npb25QbHVnaW5zW2lubmVyU2Vzc2lvbklkXSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLnNlc3Npb25QbHVnaW5zW2lubmVyU2Vzc2lvbklkXSkge1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luLm9uVW5leHBlY3RlZFNodXRkb3duKSkge1xuICAgICAgICAgICAgbG9nLmRlYnVnKGBQbHVnaW4gJHtwbHVnaW4ubmFtZX0gZGVmaW5lcyBhbiB1bmV4cGVjdGVkIHNodXRkb3duIGhhbmRsZXI7IGNhbGxpbmcgaXQgbm93YCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBwbHVnaW4ub25VbmV4cGVjdGVkU2h1dGRvd24oZHJpdmVyLCBjYXVzZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGxvZy53YXJuKGBHb3QgYW4gZXJyb3Igd2hlbiBydW5uaW5nIHBsdWdpbiAke3BsdWdpbi5uYW1lfSBzaHV0ZG93biBoYW5kbGVyOiAke2V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZy5kZWJ1ZyhgUGx1Z2luICR7cGx1Z2luLm5hbWV9IGRvZXMgbm90IGRlZmluZSBhbiB1bmV4cGVjdGVkIHNodXRkb3duIGhhbmRsZXJgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbG9nLmluZm8oYFJlbW92aW5nIHNlc3Npb24gJyR7aW5uZXJTZXNzaW9uSWR9JyBmcm9tIG91ciBtYXN0ZXIgc2Vzc2lvbiBsaXN0YCk7XG4gICAgICBkZWxldGUgdGhpcy5zZXNzaW9uc1tpbm5lclNlc3Npb25JZF07XG4gICAgICBkZWxldGUgdGhpcy5zZXNzaW9uUGx1Z2luc1tpbm5lclNlc3Npb25JZF07XG4gICAgfTtcblxuICAgIGlmIChfLmlzRnVuY3Rpb24oZHJpdmVyLm9uVW5leHBlY3RlZFNodXRkb3duKSkge1xuICAgICAgZHJpdmVyLm9uVW5leHBlY3RlZFNodXRkb3duKG9uU2h1dGRvd24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2cud2FybihgRmFpbGVkIHRvIGF0dGFjaCB0aGUgdW5leHBlY3RlZCBzaHV0ZG93biBsaXN0ZW5lci4gYCArXG4gICAgICAgIGBJcyAnb25VbmV4cGVjdGVkU2h1dGRvd24nIG1ldGhvZCBhdmFpbGFibGUgZm9yICcke2RyaXZlci5jb25zdHJ1Y3Rvci5uYW1lfSc/YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3VyU2Vzc2lvbkRhdGFGb3JEcml2ZXIgKElubmVyRHJpdmVyKSB7XG4gICAgY29uc3Qgc2Vzc2lvbnMgPSBhd2FpdCBzZXNzaW9uc0xpc3RHdWFyZC5hY3F1aXJlKEFwcGl1bURyaXZlci5uYW1lLCAoKSA9PiB0aGlzLnNlc3Npb25zKTtcbiAgICBjb25zdCBkYXRhID0gXy52YWx1ZXMoc2Vzc2lvbnMpXG4gICAgICAgICAgICAgICAgICAgLmZpbHRlcigocykgPT4gcy5jb25zdHJ1Y3Rvci5uYW1lID09PSBJbm5lckRyaXZlci5uYW1lKVxuICAgICAgICAgICAgICAgICAgIC5tYXAoKHMpID0+IHMuZHJpdmVyRGF0YSk7XG4gICAgZm9yIChsZXQgZGF0dW0gb2YgZGF0YSkge1xuICAgICAgaWYgKCFkYXR1bSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2JsZW0gZ2V0dGluZyBzZXNzaW9uIGRhdGEgZm9yIGRyaXZlciB0eXBlIGAgK1xuICAgICAgICAgICAgICAgICAgICAgICAgYCR7SW5uZXJEcml2ZXIubmFtZX07IGRvZXMgaXQgaW1wbGVtZW50ICdnZXQgYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgZHJpdmVyRGF0YSc/YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2Vzc2lvbiAoc2Vzc2lvbklkKSB7XG4gICAgbGV0IHByb3RvY29sO1xuICAgIHRyeSB7XG4gICAgICBsZXQgb3RoZXJTZXNzaW9uc0RhdGEgPSBudWxsO1xuICAgICAgbGV0IGRzdFNlc3Npb24gPSBudWxsO1xuICAgICAgYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJDb25zdHJ1Y3Rvck5hbWUgPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF0uY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgb3RoZXJTZXNzaW9uc0RhdGEgPSBfLnRvUGFpcnModGhpcy5zZXNzaW9ucylcbiAgICAgICAgICAgICAgLmZpbHRlcigoW2tleSwgdmFsdWVdKSA9PiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lID09PSBjdXJDb25zdHJ1Y3Rvck5hbWUgJiYga2V5ICE9PSBzZXNzaW9uSWQpXG4gICAgICAgICAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUuZHJpdmVyRGF0YSk7XG4gICAgICAgIGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgICAgIHByb3RvY29sID0gZHN0U2Vzc2lvbi5wcm90b2NvbDtcbiAgICAgICAgbG9nLmluZm8oYFJlbW92aW5nIHNlc3Npb24gJHtzZXNzaW9uSWR9IGZyb20gb3VyIG1hc3RlciBzZXNzaW9uIGxpc3RgKTtcbiAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBkZWxldGVTZXNzaW9uIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkgb3Igbm90XG4gICAgICAgIC8vIG1ha2UgdGhlIHNlc3Npb24gdW5hdmFpbGFibGUsIGJlY2F1c2Ugd2hvIGtub3dzIHdoYXQgc3RhdGUgaXQgbWlnaHRcbiAgICAgICAgLy8gYmUgaW4gb3RoZXJ3aXNlXG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlc3Npb25QbHVnaW5zW3Nlc3Npb25JZF07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICB2YWx1ZTogYXdhaXQgZHN0U2Vzc2lvbi5kZWxldGVTZXNzaW9uKHNlc3Npb25JZCwgb3RoZXJTZXNzaW9uc0RhdGEpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cuZXJyb3IoYEhhZCB0cm91YmxlIGVuZGluZyBzZXNzaW9uICR7c2Vzc2lvbklkfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3I6IGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbFNlc3Npb25zIChvcHRzID0ge30pIHtcbiAgICBjb25zdCBzZXNzaW9uc0NvdW50ID0gXy5zaXplKHRoaXMuc2Vzc2lvbnMpO1xuICAgIGlmICgwID09PSBzZXNzaW9uc0NvdW50KSB7XG4gICAgICBsb2cuZGVidWcoJ1RoZXJlIGFyZSBubyBhY3RpdmUgc2Vzc2lvbnMgZm9yIGNsZWFudXAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBmb3JjZSA9IGZhbHNlLFxuICAgICAgcmVhc29uLFxuICAgIH0gPSBvcHRzO1xuICAgIGxvZy5kZWJ1ZyhgQ2xlYW5pbmcgdXAgJHt1dGlsLnBsdXJhbGl6ZSgnYWN0aXZlIHNlc3Npb24nLCBzZXNzaW9uc0NvdW50LCB0cnVlKX1gKTtcbiAgICBjb25zdCBjbGVhbnVwUHJvbWlzZXMgPSBmb3JjZVxuICAgICAgPyBfLnZhbHVlcyh0aGlzLnNlc3Npb25zKS5tYXAoKGRydikgPT4gZHJ2LnN0YXJ0VW5leHBlY3RlZFNodXRkb3duKHJlYXNvbiAmJiBuZXcgRXJyb3IocmVhc29uKSkpXG4gICAgICA6IF8ua2V5cyh0aGlzLnNlc3Npb25zKS5tYXAoKGlkKSA9PiB0aGlzLmRlbGV0ZVNlc3Npb24oaWQpKTtcbiAgICBmb3IgKGNvbnN0IGNsZWFudXBQcm9taXNlIG9mIGNsZWFudXBQcm9taXNlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2xlYW51cFByb21pc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhcHByb3ByaWF0ZSBwbHVnaW5zIGZvciBhIHNlc3Npb24gKG9yIHNlc3Npb25sZXNzIHBsdWdpbnMpXG4gICAqXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIHNlc3Npb25JZCAob3IgbnVsbCkgdG8gdXNlIHRvIGZpbmQgcGx1Z2luc1xuICAgKiBAcmV0dXJucyB7QXJyYXl9IC0gYXJyYXkgb2YgcGx1Z2luIGluc3RhbmNlc1xuICAgKi9cbiAgcGx1Z2luc0ZvclNlc3Npb24gKHNlc3Npb25JZCA9IG51bGwpIHtcbiAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICBpZiAoIXRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXSkge1xuICAgICAgICB0aGlzLnNlc3Npb25QbHVnaW5zW3Nlc3Npb25JZF0gPSB0aGlzLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zKSkge1xuICAgICAgdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnMgPSB0aGlzLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnM7XG4gIH1cblxuICAvKipcbiAgICogVG8gZ2V0IHBsdWdpbnMgZm9yIGEgY29tbWFuZCwgd2UgZWl0aGVyIGdldCB0aGUgcGx1Z2luIGluc3RhbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlXG4gICAqIHBhcnRpY3VsYXIgY29tbWFuZCdzIHNlc3Npb24sIG9yIGluIHRoZSBjYXNlIG9mIHNlc3Npb25sZXNzIHBsdWdpbnMsIHB1bGwgZnJvbSB0aGUgc2V0IG9mXG4gICAqIHBsdWdpbiBpbnN0YW5jZXMgcmVzZXJ2ZWQgZm9yIHNlc3Npb25sZXNzIGNvbW1hbmRzIChhbmQgd2UgbGF6aWx5IGNyZWF0ZSBwbHVnaW4gaW5zdGFuY2VzIG9uXG4gICAqIGZpcnN0IHVzZSlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNtZCAtIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRvIGZpbmQgYSBwbHVnaW4gdG8gaGFuZGxlXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIHBhcnRpY3VsYXIgc2Vzc2lvbiBmb3Igd2hpY2ggdG8gZmluZCBhIHBsdWdpbiwgb3IgbnVsbCBpZlxuICAgKiBzZXNzaW9ubGVzc1xuICAgKi9cbiAgcGx1Z2luc1RvSGFuZGxlQ21kIChjbWQsIHNlc3Npb25JZCA9IG51bGwpIHtcbiAgICAvLyB0byBoYW5kbGUgYSBnaXZlbiBjb21tYW5kLCBhIHBsdWdpbiBzaG91bGQgZWl0aGVyIGltcGxlbWVudCB0aGF0IGNvbW1hbmQgYXMgYSBwbHVnaW5cbiAgICAvLyBpbnN0YW5jZSBtZXRob2Qgb3IgaXQgc2hvdWxkIGltcGxlbWVudCBhIGdlbmVyaWMgJ2hhbmRsZScgbWV0aG9kXG4gICAgcmV0dXJuIHRoaXMucGx1Z2luc0ZvclNlc3Npb24oc2Vzc2lvbklkKVxuICAgICAgLmZpbHRlcigocCkgPT4gXy5pc0Z1bmN0aW9uKHBbY21kXSkgfHwgXy5pc0Z1bmN0aW9uKHAuaGFuZGxlKSk7XG4gIH1cblxuICBjcmVhdGVQbHVnaW5JbnN0YW5jZXMgKCkge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbkNsYXNzZXMubWFwKChQbHVnaW5DbGFzcykgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IFBsdWdpbkNsYXNzLnBsdWdpbk5hbWU7XG4gICAgICBjb25zdCBwbHVnaW4gPSBuZXcgUGx1Z2luQ2xhc3MobmFtZSk7XG4gICAgICB0aGlzLmFzc2lnbkNsaUFyZ3NUb0V4dGVuc2lvbigncGx1Z2luJywgbmFtZSwgcGx1Z2luKTtcbiAgICAgIHJldHVybiBwbHVnaW47XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQ29tbWFuZCAoY21kLCAuLi5hcmdzKSB7XG4gICAgLy8gV2UgaGF2ZSBiYXNpY2FsbHkgdGhyZWUgY2FzZXMgZm9yIGhvdyB0byBoYW5kbGUgY29tbWFuZHM6XG4gICAgLy8gMS4gaGFuZGxlIGdldFN0YXR1cyAod2UgZG8gdGhpcyBhcyBhIHNwZWNpYWwgb3V0IG9mIGJhbmQgY2FzZSBzbyBpdCBkb2Vzbid0IGdldCBhZGRlZCB0byBhblxuICAgIC8vICAgIGV4ZWN1dGlvbiBxdWV1ZSwgYW5kIGNhbiBiZSBjYWxsZWQgd2hpbGUgZS5nLiBjcmVhdGVTZXNzaW9uIGlzIGluIHByb2dyZXNzKVxuICAgIC8vIDIuIGhhbmRsZSBjb21tYW5kcyB0aGF0IHRoaXMgdW1icmVsbGEgZHJpdmVyIHNob3VsZCBoYW5kbGUsIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2Vzc2lvblxuICAgIC8vICAgIGRyaXZlciAoZm9yIGV4YW1wbGUsIGRlbGV0ZVNlc3Npb24sIG9yIG90aGVyIG5vbi1zZXNzaW9uIGNvbW1hbmRzKVxuICAgIC8vIDMuIGhhbmRsZSBzZXNzaW9uIGRyaXZlciBjb21tYW5kcy5cbiAgICAvLyBUaGUgdHJpY2t5IHBhcnQgaXMgdGhhdCBiZWNhdXNlIHdlIHN1cHBvcnQgY29tbWFuZCBwbHVnaW5zLCB3ZSBuZWVkIHRvIHdyYXAgYW55IG9mIHRoZXNlXG4gICAgLy8gY2FzZXMgd2l0aCBwbHVnaW4gaGFuZGxpbmcuXG5cbiAgICBjb25zdCBpc0dldFN0YXR1cyA9IGNtZCA9PT0gJ2dldFN0YXR1cyc7XG4gICAgY29uc3QgaXNVbWJyZWxsYUNtZCA9ICFpc0dldFN0YXR1cyAmJiBpc0FwcGl1bURyaXZlckNvbW1hbmQoY21kKTtcbiAgICBjb25zdCBpc1Nlc3Npb25DbWQgPSAhaXNHZXRTdGF0dXMgJiYgIWlzVW1icmVsbGFDbWQ7XG5cbiAgICAvLyBpZiBhIHBsdWdpbiBvdmVycmlkZSBwcm94eWluZyBmb3IgdGhpcyBjb21tYW5kIGFuZCB0aGF0IGlzIHdoeSB3ZSBhcmUgaGVyZSBpbnN0ZWFkIG9mIGp1c3RcbiAgICAvLyBsZXR0aW5nIHRoZSBwcm90b2NvbCBwcm94eSB0aGUgY29tbWFuZCBlbnRpcmVseSwgZGV0ZXJtaW5lIHRoYXQsIGdldCB0aGUgcmVxdWVzdCBvYmplY3QgZm9yXG4gICAgLy8gdXNlIGxhdGVyIG9uLCB0aGVuIGNsZWFuIHVwIHRoZSBhcmdzXG4gICAgY29uc3QgcmVxRm9yUHJveHkgPSBfLmxhc3QoYXJncyk/LnJlcUZvclByb3h5O1xuICAgIGlmIChyZXFGb3JQcm94eSkge1xuICAgICAgYXJncy5wb3AoKTtcbiAgICB9XG5cblxuICAgIC8vIGZpcnN0IGRvIHNvbWUgZXJyb3IgY2hlY2tpbmcuIElmIHdlJ3JlIHJlcXVlc3RpbmcgYSBzZXNzaW9uIGNvbW1hbmQgZXhlY3V0aW9uLCB0aGVuIG1ha2VcbiAgICAvLyBzdXJlIHRoYXQgc2Vzc2lvbiBhY3R1YWxseSBleGlzdHMgb24gdGhlIHNlc3Npb24gZHJpdmVyLCBhbmQgc2V0IHRoZSBzZXNzaW9uIGRyaXZlciBpdHNlbGZcbiAgICBsZXQgc2Vzc2lvbklkID0gbnVsbDtcbiAgICBsZXQgZHN0U2Vzc2lvbiA9IG51bGw7XG4gICAgbGV0IHByb3RvY29sID0gbnVsbDtcbiAgICBsZXQgZHJpdmVyID0gdGhpcztcbiAgICBpZiAoaXNTZXNzaW9uQ21kKSB7XG4gICAgICBzZXNzaW9uSWQgPSBfLmxhc3QoYXJncyk7XG4gICAgICBkc3RTZXNzaW9uID0gYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdKTtcbiAgICAgIGlmICghZHN0U2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXNzaW9uIHdpdGggaWQgJyR7c2Vzc2lvbklkfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgIH1cbiAgICAgIC8vIG5vdyBzYXZlIHRoZSByZXNwb25zZSBwcm90b2NvbCBnaXZlbiB0aGF0IHRoZSBzZXNzaW9uIGRyaXZlcidzIHByb3RvY29sIG1pZ2h0IGRpZmZlclxuICAgICAgcHJvdG9jb2wgPSBkc3RTZXNzaW9uLnByb3RvY29sO1xuICAgICAgZHJpdmVyID0gZHN0U2Vzc2lvbjtcbiAgICB9XG5cbiAgICAvLyBnZXQgYW55IHBsdWdpbnMgd2hpY2ggYXJlIHJlZ2lzdGVyZWQgYXMgaGFuZGxpbmcgdGhpcyBjb21tYW5kXG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2luc1RvSGFuZGxlQ21kKGNtZCwgc2Vzc2lvbklkKTtcblxuICAgIC8vIG5vdyB3ZSBkZWZpbmUgYSAnY21kSGFuZGxlZEJ5JyBvYmplY3Qgd2hpY2ggd2lsbCBrZWVwIHRyYWNrIG9mIHdoaWNoIHBsdWdpbnMgaGF2ZSBoYW5kbGVkIHRoaXNcbiAgICAvLyBjb21tYW5kLiB3ZSBjYXJlIGFib3V0IHRoaXMgYmVjYXVzZSAoYSkgbXVsdGlwbGUgcGx1Z2lucyBjYW4gaGFuZGxlIHRoZSBzYW1lIGNvbW1hbmQsIGFuZFxuICAgIC8vIChiKSB0aGVyZSdzIG5vIGd1YXJhbnRlZSB0aGF0IGEgcGx1Z2luIHdpbGwgYWN0dWFsbHkgY2FsbCB0aGUgbmV4dCgpIG1ldGhvZCB3aGljaCBydW5zIHRoZVxuICAgIC8vIG9yaWdpbmFsIGNvbW1hbmQgZXhlY3V0aW9uLiBUaGlzIHJlc3VsdHMgaW4gYSBzaXR1YXRpb24gd2hlcmUgdGhlIGNvbW1hbmQgbWlnaHQgYmUgaGFuZGxlZFxuICAgIC8vIGJ5IHNvbWUgYnV0IG5vdCBhbGwgcGx1Z2lucywgb3IgYnkgcGx1Z2luKHMpIGJ1dCBub3QgYnkgdGhlIGRlZmF1bHQgYmVoYXZpb3IuIFNvIHN0YXJ0IG91dFxuICAgIC8vIHRoaXMgb2JqZWN0IGRlY2xhcmluZyB0aGF0IHRoZSBkZWZhdWx0IGhhbmRsZXIgaGFzIG5vdCBiZWVuIGV4ZWN1dGVkLlxuICAgIGNvbnN0IGNtZEhhbmRsZWRCeSA9IHtkZWZhdWx0OiBmYWxzZX07XG5cbiAgICAvLyBub3cgd2UgZGVmaW5lIGFuIGFzeW5jIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHBsdWdpbnMsIGFuZCBzdWNjZXNzaXZlbHkgd3JhcHBlZFxuICAgIC8vIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGx1Z2luIHRoYXQgY2FuIGhhbmRsZSB0aGUgY29tbWFuZC4gVG8gc3RhcnQgb2ZmIHdpdGgsIHRoZSBhc3luY1xuICAgIC8vIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgY2FsbGluZyB0aGUgZGVmYXVsdCBiZWhhdmlvciwgaS5lLiwgd2hpY2hldmVyIG9mIHRoZSAzIGNhc2VzIGFib3ZlIGlzXG4gICAgLy8gdGhlIGFwcHJvcHJpYXRlIG9uZVxuICAgIGNvbnN0IGRlZmF1bHRCZWhhdmlvciA9IGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGlmIHdlJ3JlIHJ1bm5pbmcgd2l0aCBwbHVnaW5zLCBtYWtlIHN1cmUgd2UgbG9nIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgYWN0dWFsbHlcbiAgICAgIC8vIGhhcHBlbmluZyBzbyB3ZSBjYW4gdGVsbCB3aGVuIHRoZSBwbHVnaW4gY2FsbCBjaGFpbiBpcyB1bndyYXBwaW5nIHRvIHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gICAgICAvLyBpZiB0aGF0J3Mgd2hhdCBoYXBwZW5zXG4gICAgICBwbHVnaW5zLmxlbmd0aCAmJiBsb2cuaW5mbyhgRXhlY3V0aW5nIGRlZmF1bHQgaGFuZGxpbmcgYmVoYXZpb3IgZm9yIGNvbW1hbmQgJyR7Y21kfSdgKTtcblxuICAgICAgLy8gaWYgd2UgbWFrZSBpdCBoZXJlLCB3ZSBrbm93IHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgaGFuZGxlZFxuICAgICAgY21kSGFuZGxlZEJ5LmRlZmF1bHQgPSB0cnVlO1xuXG4gICAgICBpZiAocmVxRm9yUHJveHkpIHtcbiAgICAgICAgLy8gd2Ugd291bGQgaGF2ZSBwcm94aWVkIHRoaXMgY29tbWFuZCBoYWQgYSBwbHVnaW4gbm90IGhhbmRsZWQgaXQsIHNvIHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gICAgICAgIC8vIGlzIHRvIGRvIHRoZSBwcm94eSBhbmQgcmV0cmlldmUgdGhlIHJlc3VsdCBpbnRlcm5hbGx5IHNvIGl0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBsdWdpblxuICAgICAgICAvLyBpbiBjYXNlIGl0IGNhbGxzICdhd2FpdCBuZXh0KCknLiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGRyaXZlciBoYXZlIGRlZmluZWRcbiAgICAgICAgLy8gJ3Byb3h5Q29tbWFuZCcgYW5kIG5vdCBqdXN0ICdwcm94eVJlcVJlcycuXG4gICAgICAgIGlmICghZHN0U2Vzc2lvbi5wcm94eUNvbW1hbmQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBkc3RTZXNzaW9uLnByb3h5Q29tbWFuZChyZXFGb3JQcm94eS5vcmlnaW5hbFVybCwgcmVxRm9yUHJveHkubWV0aG9kLFxuICAgICAgICAgIHJlcUZvclByb3h5LmJvZHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNHZXRTdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1VtYnJlbGxhQ21kKSB7XG4gICAgICAgIC8vIHNvbWUgY29tbWFuZHMsIGxpa2UgZGVsZXRlU2Vzc2lvbiwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdG8gaGFuZGxlIG9uICp0aGlzKiBkcml2ZXIsXG4gICAgICAgIC8vIG5vdCB0aGUgcGxhdGZvcm0gZHJpdmVyXG4gICAgICAgIHJldHVybiBhd2FpdCBzdXBlci5leGVjdXRlQ29tbWFuZChjbWQsIC4uLmFyZ3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBoZXJlIHdlIGtub3cgdGhhdCB3ZSBhcmUgZXhlY3V0aW5nIGEgc2Vzc2lvbiBjb21tYW5kLCBhbmQgaGF2ZSBhIHZhbGlkIHNlc3Npb24gZHJpdmVyXG4gICAgICByZXR1cm4gYXdhaXQgZHN0U2Vzc2lvbi5leGVjdXRlQ29tbWFuZChjbWQsIC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICAvLyBub3cgdGFrZSBvdXIgZGVmYXVsdCBiZWhhdmlvciwgd3JhcCBpdCB3aXRoIGFueSBudW1iZXIgb2YgcGx1Z2luIGJlaGF2aW9ycywgYW5kIHJ1biBpdFxuICAgIGNvbnN0IHdyYXBwZWRDbWQgPSB0aGlzLndyYXBDb21tYW5kV2l0aFBsdWdpbnMoe1xuICAgICAgZHJpdmVyLCBjbWQsIGFyZ3MsIHBsdWdpbnMsIGNtZEhhbmRsZWRCeSwgbmV4dDogZGVmYXVsdEJlaGF2aW9yXG4gICAgfSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5leGVjdXRlV3JhcHBlZENvbW1hbmQoe3dyYXBwZWRDbWQsIHByb3RvY29sfSk7XG5cbiAgICAvLyBpZiB3ZSBoYWQgcGx1Z2lucywgbWFrZSBzdXJlIHRvIGxvZyBvdXQgdGhlIGhlbHBmdWwgcmVwb3J0IGFib3V0IHdoaWNoIHBsdWdpbnMgZW5kZWQgdXBcbiAgICAvLyBoYW5kbGluZyB0aGUgY29tbWFuZCBhbmQgd2hpY2ggZGlkbid0XG4gICAgdGhpcy5sb2dQbHVnaW5IYW5kbGVyUmVwb3J0KHBsdWdpbnMsIHtjbWQsIGNtZEhhbmRsZWRCeX0pO1xuXG4gICAgLy8gQW5kIGZpbmFsbHksIGlmIHRoZSBjb21tYW5kIHdhcyBjcmVhdGVTZXNzaW9uLCB3ZSB3YW50IHRvIG1pZ3JhdGUgYW55IHBsdWdpbnMgd2hpY2ggd2VyZVxuICAgIC8vIHByZXZpb3VzbHkgc2Vzc2lvbmxlc3MgdG8gdXNlIHRoZSBuZXcgc2Vzc2lvbklkLCBzbyB0aGF0IHBsdWdpbnMgY2FuIHNoYXJlIHN0YXRlIGJldHdlZW5cbiAgICAvLyB0aGVpciBjcmVhdGVTZXNzaW9uIG1ldGhvZCBhbmQgb3RoZXIgaW5zdGFuY2UgbWV0aG9kc1xuICAgIGlmIChjbWQgPT09IENSRUFURV9TRVNTSU9OX0NPTU1BTkQgJiYgdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnMubGVuZ3RoICYmICFyZXMuZXJyb3IpIHtcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IF8uZmlyc3QocmVzLnZhbHVlKTtcbiAgICAgIGxvZy5pbmZvKGBQcm9tb3RpbmcgJHt0aGlzLnNlc3Npb25sZXNzUGx1Z2lucy5sZW5ndGh9IHNlc3Npb25sZXNzIHBsdWdpbnMgdG8gYmUgYXR0YWNoZWQgYCArXG4gICAgICAgICAgICAgICBgdG8gc2Vzc2lvbiBJRCAke3Nlc3Npb25JZH1gKTtcbiAgICAgIHRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXSA9IHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zO1xuICAgICAgdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgd3JhcENvbW1hbmRXaXRoUGx1Z2lucyAoe2RyaXZlciwgY21kLCBhcmdzLCBuZXh0LCBjbWRIYW5kbGVkQnksIHBsdWdpbnN9KSB7XG4gICAgcGx1Z2lucy5sZW5ndGggJiYgbG9nLmluZm8oYFBsdWdpbnMgd2hpY2ggY2FuIGhhbmRsZSBjbWQgJyR7Y21kfSc6ICR7cGx1Z2lucy5tYXAoKHApID0+IHAubmFtZSl9YCk7XG5cbiAgICAvLyBub3cgd2UgY2FuIGdvIHRocm91Z2ggZWFjaCBwbHVnaW4gYW5kIHdyYXAgYG5leHRgIGFyb3VuZCBpdHMgb3duIGhhbmRsZXIsIHBhc3NpbmcgdGhlICpvbGQqXG4gICAgLy8gbmV4dCBpbiBzbyB0aGF0IGl0IGNhbiBjYWxsIGl0IGlmIGl0IHdhbnRzIHRvXG4gICAgZm9yIChjb25zdCBwbHVnaW4gb2YgcGx1Z2lucykge1xuICAgICAgLy8gbmVlZCBhbiBJSUZFIGhlcmUgYmVjYXVzZSB3ZSB3YW50IHRoZSB2YWx1ZSBvZiBuZXh0IHRoYXQncyBwYXNzZWQgdG8gcGx1Z2luLmhhbmRsZSB0byBiZVxuICAgICAgLy8gZXhhY3RseSB0aGUgdmFsdWUgb2YgbmV4dCBoZXJlIGJlZm9yZSByZWFzc2lnbm1lbnQ7IHdlIGRvbid0IHdhbnQgaXQgdG8gYmUgbGF6aWx5XG4gICAgICAvLyBldmFsdWF0ZWQsIG90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aCBpbmZpbml0ZSByZWN1cnNpb24gb2YgdGhlIGxhc3QgYG5leHRgIHRvIGJlIGRlZmluZWQuXG4gICAgICBjbWRIYW5kbGVkQnlbcGx1Z2luLm5hbWVdID0gZmFsc2U7IC8vIHdlIHNlZSBhIG5ldyBwbHVnaW4sIHNvIGFkZCBpdCB0byB0aGUgJ2NtZEhhbmRsZWRCeScgb2JqZWN0XG4gICAgICBuZXh0ID0gKChfbmV4dCkgPT4gYXN5bmMgKCkgPT4ge1xuICAgICAgICBsb2cuaW5mbyhgUGx1Z2luICR7cGx1Z2luLm5hbWV9IGlzIG5vdyBoYW5kbGluZyBjbWQgJyR7Y21kfSdgKTtcbiAgICAgICAgY21kSGFuZGxlZEJ5W3BsdWdpbi5uYW1lXSA9IHRydWU7IC8vIGlmIHdlIG1ha2UgaXQgaGVyZSwgdGhpcyBwbHVnaW4gaGFzIGF0dGVtcHRlZCB0byBoYW5kbGUgY21kXG4gICAgICAgIC8vIGZpcnN0IGF0dGVtcHQgdG8gaGFuZGxlIHRoZSBjb21tYW5kIHZpYSBhIGNvbW1hbmQtc3BlY2lmaWMgaGFuZGxlciBvbiB0aGUgcGx1Z2luXG4gICAgICAgIGlmIChwbHVnaW5bY21kXSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBwbHVnaW5bY21kXShfbmV4dCwgZHJpdmVyLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UsIGNhbGwgdGhlIGdlbmVyaWMgJ2hhbmRsZScgbWV0aG9kXG4gICAgICAgIHJldHVybiBhd2FpdCBwbHVnaW4uaGFuZGxlKF9uZXh0LCBkcml2ZXIsIGNtZCwgLi4uYXJncyk7XG4gICAgICB9KShuZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIGxvZ1BsdWdpbkhhbmRsZXJSZXBvcnQgKHBsdWdpbnMsIHtjbWQsIGNtZEhhbmRsZWRCeX0pIHtcbiAgICBpZiAoIXBsdWdpbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgZGF5LCB3ZSBoYXZlIGFuIG9iamVjdCByZXByZXNlbnRpbmcgd2hpY2ggcGx1Z2lucyBlbmRlZCB1cCBnZXR0aW5nXG4gICAgLy8gdGhlaXIgY29kZSBydW4gYXMgcGFydCBvZiBoYW5kbGluZyB0aGlzIGNvbW1hbmQuIEJlY2F1c2UgcGx1Z2lucyBjYW4gY2hvb3NlICpub3QqIHRvXG4gICAgLy8gcGFzcyBjb250cm9sIHRvIG90aGVyIHBsdWdpbnMgb3IgdG8gdGhlIGRlZmF1bHQgZHJpdmVyIGJlaGF2aW9yLCB0aGlzIGlzIGluZm9ybWF0aW9uXG4gICAgLy8gd2hpY2ggaXMgcHJvYmFibHkgdXNlZnVsIHRvIHRoZSB1c2VyIChlc3BlY2lhbGx5IGluIHNpdHVhdGlvbnMgd2hlcmUgcGx1Z2lucyBtaWdodCBub3RcbiAgICAvLyBpbnRlcmFjdCB3ZWxsIHRvZ2V0aGVyLCBhbmQgaXQgd291bGQgYmUgaGFyZCB0byBkZWJ1ZyBvdGhlcndpc2Ugd2l0aG91dCB0aGlzIGtpbmQgb2ZcbiAgICAvLyBtZXNzYWdlKS5cbiAgICBjb25zdCBkaWRIYW5kbGUgPSBPYmplY3Qua2V5cyhjbWRIYW5kbGVkQnkpLmZpbHRlcigoaykgPT4gY21kSGFuZGxlZEJ5W2tdKTtcbiAgICBjb25zdCBkaWRudEhhbmRsZSA9IE9iamVjdC5rZXlzKGNtZEhhbmRsZWRCeSkuZmlsdGVyKChrKSA9PiAhY21kSGFuZGxlZEJ5W2tdKTtcbiAgICBpZiAoZGlkbnRIYW5kbGUubGVuZ3RoID4gMCkge1xuICAgICAgbG9nLmluZm8oYENvbW1hbmQgJyR7Y21kfScgd2FzICpub3QqIGhhbmRsZWQgYnkgdGhlIGZvbGxvd2luZyBiZWhhdmlvdXJzIG9yIHBsdWdpbnMsIGV2ZW4gYCArXG4gICAgICAgICAgICAgICBgdGhvdWdoIHRoZXkgd2VyZSByZWdpc3RlcmVkIHRvIGhhbmRsZSBpdDogJHtKU09OLnN0cmluZ2lmeShkaWRudEhhbmRsZSl9LiBUaGUgYCArXG4gICAgICAgICAgICAgICBgY29tbWFuZCAqd2FzKiBoYW5kbGVkIGJ5IHRoZXNlOiAke0pTT04uc3RyaW5naWZ5KGRpZEhhbmRsZSl9LmApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVXcmFwcGVkQ29tbWFuZCAoe3dyYXBwZWRDbWQsIHByb3RvY29sfSkge1xuICAgIGxldCBjbWRSZXMsIGNtZEVyciwgcmVzID0ge307XG4gICAgdHJ5IHtcbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGB3cmFwcGVkQ21kYCBkZWZpbmVzIGEgd2hvbGUgc2VxdWVuY2Ugb2YgcGx1Z2luIGhhbmRsZXJzLCBjdWxtaW5hdGluZyBpblxuICAgICAgLy8gb3VyIGRlZmF1bHQgaGFuZGxlci4gV2hhdGV2ZXIgaXQgcmV0dXJucyBpcyB3aGF0IHdlJ3JlIGdvaW5nIHRvIHdhbnQgdG8gc2VuZCBiYWNrIHRvIHRoZVxuICAgICAgLy8gdXNlci5cbiAgICAgIGNtZFJlcyA9IGF3YWl0IHdyYXBwZWRDbWQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjbWRFcnIgPSBlO1xuICAgIH1cblxuICAgIC8vIFNhZGx5LCB3ZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBraW5kIG9mIG9iamVjdCB3aWxsIGJlIHJldHVybmVkLiBJdCB3aWxsIGVpdGhlciBiZSBhIGJhcmVcbiAgICAvLyBvYmplY3QsIG9yIGEgcHJvdG9jb2wtYXdhcmUgb2JqZWN0IHdpdGggcHJvdG9jb2wgYW5kIGVycm9yL3ZhbHVlIGtleXMuIFNvIHdlIG5lZWQgdG8gc25pZmZcbiAgICAvLyBpdCBhbmQgbWFrZSBzdXJlIHdlIGRvbid0IGRvdWJsZS13cmFwIGl0IGlmIGl0J3MgdGhlIGxhdHRlciBraW5kLlxuICAgIGlmIChfLmlzUGxhaW5PYmplY3QoY21kUmVzKSAmJiBfLmhhcyhjbWRSZXMsICdwcm90b2NvbCcpKSB7XG4gICAgICByZXMgPSBjbWRSZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy52YWx1ZSA9IGNtZFJlcztcbiAgICAgIHJlcy5lcnJvciA9IGNtZEVycjtcbiAgICAgIHJlcy5wcm90b2NvbCA9IHByb3RvY29sO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJveHlBY3RpdmUgKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgXy5pc0Z1bmN0aW9uKGRzdFNlc3Npb24ucHJveHlBY3RpdmUpICYmIGRzdFNlc3Npb24ucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0IChzZXNzaW9uSWQpIHtcbiAgICBjb25zdCBkc3RTZXNzaW9uID0gdGhpcy5zZXNzaW9uc1tzZXNzaW9uSWRdO1xuICAgIHJldHVybiBkc3RTZXNzaW9uID8gZHN0U2Vzc2lvbi5nZXRQcm94eUF2b2lkTGlzdCgpIDogW107XG4gIH1cblxuICBjYW5Qcm94eSAoc2Vzc2lvbklkKSB7XG4gICAgY29uc3QgZHN0U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICByZXR1cm4gZHN0U2Vzc2lvbiAmJiBkc3RTZXNzaW9uLmNhblByb3h5KHNlc3Npb25JZCk7XG4gIH1cbn1cblxuLy8gaGVscCBkZWNpZGUgd2hpY2ggY29tbWFuZHMgc2hvdWxkIGJlIHByb3hpZWQgdG8gc3ViLWRyaXZlcnMgYW5kIHdoaWNoXG4vLyBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGlzLCBvdXIgdW1icmVsbGEgZHJpdmVyXG5mdW5jdGlvbiBpc0FwcGl1bURyaXZlckNvbW1hbmQgKGNtZCkge1xuICByZXR1cm4gIWlzU2Vzc2lvbkNvbW1hbmQoY21kKSB8fCBjbWQgPT09ICdkZWxldGVTZXNzaW9uJztcbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBBcHBpdW0gdHJpZWQgdG8gcHJveHkgYSBjb21tYW5kIHVzaW5nIGEgZHJpdmVyJ3MgYHByb3h5Q29tbWFuZGAgbWV0aG9kIGJ1dCB0aGVcbiAqIG1ldGhvZCBkaWQgbm90IGV4aXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBOb0RyaXZlclByb3h5Q29tbWFuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHR5cGUge1JlYWRvbmx5PHN0cmluZz59XG4gICAqL1xuICBjb2RlID0gJ0FQUElVTUVSUl9OT19EUklWRVJfUFJPWFlDT01NQU5EJztcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoYFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGlzIGNvbW1hbmQgd2FzIHRvIHByb3h5LCBidXQgdGhlIGRyaXZlciBgICtcbiAgICAgICAgICBgZGlkIG5vdCBoYXZlIHRoZSAncHJveHlDb21tYW5kJyBtZXRob2QgZGVmaW5lZC4gVG8gZnVsbHkgc3VwcG9ydCBgICtcbiAgICAgICAgICBgcGx1Z2lucywgZHJpdmVycyBzaG91bGQgaGF2ZSAncHJveHlDb21tYW5kJyBzZXQgdG8gYSBqd3BQcm94eSBvYmplY3QncyBgICtcbiAgICAgICAgICBgJ2NvbW1hbmQoKScgbWV0aG9kLCBpbiBhZGRpdGlvbiB0byB0aGUgbm9ybWFsICdwcm94eVJlcVJlcydgKTtcbiAgfVxufVxuXG5leHBvcnQgeyBBcHBpdW1Ecml2ZXIgfTtcbiJdLCJmaWxlIjoibGliL2FwcGl1bS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLiJ9
@@ -50,7 +50,7 @@ class NPM {
50
50
  args.unshift(cmd);
51
51
 
52
52
  if (json) {
53
- args.push('-json');
53
+ args.push('--json');
54
54
  }
55
55
 
56
56
  const npmCmd = _support.system.isWindows() ? 'npm.cmd' : 'npm';
@@ -65,31 +65,42 @@ class NPM {
65
65
  runner = async () => await acquireLock(_runner);
66
66
  }
67
67
 
68
- const {
69
- stdout,
70
- stderr,
71
- code
72
- } = await runner();
73
- const ret = {
74
- stdout,
75
- stderr,
76
- code,
77
- json: null
78
- };
68
+ let ret;
69
+
70
+ try {
71
+ const {
72
+ stdout,
73
+ stderr,
74
+ code
75
+ } = await runner();
76
+ ret = {
77
+ stdout,
78
+ stderr,
79
+ code
80
+ };
79
81
 
80
- if (json) {
81
82
  try {
82
83
  ret.json = JSON.parse(stdout);
83
84
  } catch (ign) {}
85
+ } catch (e) {
86
+ const {
87
+ stdout,
88
+ stderr,
89
+ code
90
+ } = e;
91
+ const err = new Error(`npm command '${cmd} ${args.join(' ')}' failed with code ${code}.\n\nSTDOUT:\n${stdout.trim()}\n\nSTDERR:\n${stderr.trim()}`);
92
+ throw err;
84
93
  }
85
94
 
86
95
  return ret;
87
96
  }
88
97
 
89
98
  async getLatestVersion(pkg) {
90
- return (await this.exec('view', [pkg, 'dist-tags'], {
99
+ var _await$this$exec$json;
100
+
101
+ return (_await$this$exec$json = (await this.exec('view', [pkg, 'dist-tags'], {
91
102
  json: true
92
- })).json.latest;
103
+ })).json) === null || _await$this$exec$json === void 0 ? void 0 : _await$this$exec$json.latest;
93
104
  }
94
105
 
95
106
  async getLatestSafeUpgradeVersion(pkg, curVersion) {
@@ -206,4 +217,4 @@ class NPM {
206
217
  exports.default = NPM;require('source-map-support').install();
207
218
 
208
219
 
209
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvbnBtLmpzIl0sIm5hbWVzIjpbIklOU1RBTExfTE9DS0ZJTEUiLCJMSU5LX0xPQ0tGSUxFIiwiTlBNIiwiY29uc3RydWN0b3IiLCJhcHBpdW1Ib21lIiwiZXhlYyIsImNtZCIsImFyZ3MiLCJvcHRzIiwiZXhlY09wdHMiLCJjd2QiLCJqc29uIiwibG9ja0ZpbGUiLCJkdW1teVBrZ0pzb24iLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwiZXhpc3RzIiwid3JpdGVGaWxlIiwidW5zaGlmdCIsInB1c2giLCJucG1DbWQiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJydW5uZXIiLCJhY3F1aXJlTG9jayIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwiX3J1bm5lciIsInN0ZG91dCIsInN0ZGVyciIsImNvZGUiLCJyZXQiLCJKU09OIiwicGFyc2UiLCJpZ24iLCJnZXRMYXRlc3RWZXJzaW9uIiwicGtnIiwibGF0ZXN0IiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uIiwiY3VyVmVyc2lvbiIsImFsbFZlcnNpb25zIiwiZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMiLCJzYWZlVXBncmFkZVZlciIsImN1clNlbXZlciIsInNlbXZlciIsIkVycm9yIiwidGVzdFZlciIsInRlc3RTZW12ZXIiLCJwcmVyZWxlYXNlIiwibGVuZ3RoIiwiY29tcGFyZSIsIm1ham9yIiwiZm9ybWF0IiwiaW5zdGFsbFBhY2thZ2UiLCJwa2dEaXIiLCJwa2dOYW1lIiwicGtnVmVyIiwicmVzIiwiZXJyb3IiLCJwa2dKc29uIiwicmVxdWlyZSIsImxpbmtQYWNrYWdlIiwicGtnUGF0aCIsIm5hbWUiLCJwcm9jZXNzIiwicGtnSG9tZSIsInVuaW5zdGFsbFBhY2thZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsZ0JBQWdCLEdBQUcsc0JBQXpCO0FBQ0EsTUFBTUMsYUFBYSxHQUFHLG1CQUF0Qjs7QUFF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QUFPLEdBQUdqRCxjQUFLQyxPQUFMLENBQWFrRCxPQUFPLENBQUN2RCxHQUFSLEVBQWIsRUFBNEJxRCxPQUE1QixDQUFWOztBQUVBLFVBQU1HLE9BQU8sR0FBR3BELGNBQUtDLE9BQUwsQ0FBYSxLQUFLWCxVQUFsQixFQUE4Qm9ELE9BQTlCLENBQWhCOztBQUdBLFVBQU1FLEdBQUcsR0FBRyxNQUFNLEtBQUtyRCxJQUFMLENBQVUsTUFBVixFQUFrQixDQUFDLG1CQUFELEVBQXNCMEQsT0FBdEIsQ0FBbEIsRUFBa0Q7QUFBQ3JELE1BQUFBLEdBQUcsRUFBRXdELE9BQU47QUFBZXRELE1BQUFBLFFBQVEsRUFBRVg7QUFBekIsS0FBbEQsQ0FBbEI7O0FBQ0EsUUFBSXlELEdBQUcsQ0FBQy9DLElBQUosSUFBWStDLEdBQUcsQ0FBQy9DLElBQUosQ0FBU2dELEtBQXpCLEVBQWdDO0FBQzlCLFlBQU0sSUFBSWIsS0FBSixDQUFVWSxHQUFHLENBQUMvQyxJQUFKLENBQVNnRCxLQUFuQixDQUFOO0FBQ0Q7O0FBR0QsUUFBSTtBQUNGLGFBQU9FLE9BQU8sQ0FBQy9DLGNBQUtDLE9BQUwsQ0FBYW1ELE9BQWIsRUFBc0IsY0FBdEIsRUFBc0NWLE9BQXRDLEVBQStDLGNBQS9DLENBQUQsQ0FBZDtBQUNELEtBRkQsQ0FFRSxNQUFNO0FBQ04sWUFBTSxJQUFJVixLQUFKLENBQVUsNERBQ0EsaUNBRFYsQ0FBTjtBQUVEO0FBQ0Y7O0FBRXFCLFFBQWhCcUIsZ0JBQWdCLENBQUVaLE1BQUYsRUFBVWxCLEdBQVYsRUFBZTtBQUNuQyxVQUFNLEtBQUtoQyxJQUFMLENBQVUsV0FBVixFQUF1QixDQUFDZ0MsR0FBRCxDQUF2QixFQUE4QjtBQUNsQzNCLE1BQUFBLEdBQUcsRUFBRTZDLE1BRDZCO0FBRWxDM0MsTUFBQUEsUUFBUSxFQUFFWjtBQUZ3QixLQUE5QixDQUFOO0FBSUQ7O0FBbkxzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gJ3RlZW5fcHJvY2Vzcyc7XG5pbXBvcnQgeyBmcywgbWtkaXJwLCB1dGlsLCBzeXN0ZW0gfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuXG5jb25zdCBJTlNUQUxMX0xPQ0tGSUxFID0gJy5hcHBpdW0uaW5zdGFsbC5sb2NrJztcbmNvbnN0IExJTktfTE9DS0ZJTEUgPSAnLmFwcGl1bS5saW5rLmxvY2snO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOUE0ge1xuXG4gIGNvbnN0cnVjdG9yIChhcHBpdW1Ib21lKSB7XG4gICAgdGhpcy5hcHBpdW1Ib21lID0gYXBwaXVtSG9tZTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWMgKGNtZCwgYXJncywgb3B0cywgZXhlY09wdHMgPSB7fSkge1xuICAgIGxldCB7IGN3ZCwganNvbiwgbG9ja0ZpbGUgfSA9IG9wdHM7XG4gICAgaWYgKCFjd2QpIHtcbiAgICAgIGN3ZCA9IHRoaXMuYXBwaXVtSG9tZTtcbiAgICB9XG4gICAgLy8gZW5zdXJlIHRoZSBkaXJlY3Rvcnkgd2Ugd2FudCB0byBpbnN0YWxsIGluc2lkZSBvZiBleGlzdHNcbiAgICBhd2FpdCBta2RpcnAoY3dkKTtcblxuICAgIC8vIG5vdCBvbmx5IHRoaXMsIHRoaXMgZGlyZWN0b3J5IG5lZWRzIGEgJ3BhY2thZ2UuanNvbicgaW5zaWRlIG9mIGl0LCBvdGhlcndpc2UsIGlmIGFueVxuICAgIC8vIGRpcmVjdG9yeSBpbiB0aGUgZmlsZXN5c3RlbSB0cmVlIEFCT1ZFIGN3ZCBoYXBwZW5zIHRvIGhhdmUgYSBwYWNrYWdlLmpzb24gb3IgYSBub2RlX21vZHVsZXNcbiAgICAvLyBkaXIgaW4gaXQsIE5QTSB3aWxsIGluc3RhbGwgdGhlIG1vZHVsZSB1cCB0aGVyZSBpbnN0ZWFkIChzaWxseSBOUE0pXG4gICAgY29uc3QgZHVtbXlQa2dKc29uID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGR1bW15UGtnSnNvbikpIHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShkdW1teVBrZ0pzb24sICd7fScpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBwZXJmb3JtIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBpbiBjd2RcbiAgICBleGVjT3B0cyA9IHsuLi5leGVjT3B0cywgY3dkfTtcblxuICAgIGFyZ3MudW5zaGlmdChjbWQpO1xuICAgIGlmIChqc29uKSB7XG4gICAgICBhcmdzLnB1c2goJy1qc29uJyk7XG4gICAgfVxuICAgIGNvbnN0IG5wbUNtZCA9IHN5c3RlbS5pc1dpbmRvd3MoKSA/ICducG0uY21kJyA6ICducG0nO1xuICAgIGxldCBydW5uZXIgPSBhc3luYyAoKSA9PiBhd2FpdCBleGVjKG5wbUNtZCwgYXJncywgZXhlY09wdHMpO1xuICAgIGlmIChsb2NrRmlsZSkge1xuICAgICAgY29uc3QgYWNxdWlyZUxvY2sgPSB1dGlsLmdldExvY2tGaWxlR3VhcmQocGF0aC5yZXNvbHZlKGN3ZCwgbG9ja0ZpbGUpKTtcbiAgICAgIGNvbnN0IF9ydW5uZXIgPSBydW5uZXI7XG4gICAgICBydW5uZXIgPSBhc3luYyAoKSA9PiBhd2FpdCBhY3F1aXJlTG9jayhfcnVubmVyKTtcbiAgICB9XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IGF3YWl0IHJ1bm5lcigpO1xuICAgIGNvbnN0IHJldCA9IHtzdGRvdXQsIHN0ZGVyciwgY29kZSwganNvbjogbnVsbH07XG5cbiAgICBpZiAoanNvbikge1xuICAgICAgLy8gaWYgcG9zc2libGUsIHBhcnNlIE5QTSdzIGpzb24gb3V0cHV0LiBEdXJpbmcgTlBNIGluc3RhbGwgM3JkLXBhcnR5XG4gICAgICAvLyBwYWNrYWdlcyBjYW4gd3JpdGUgdG8gc3Rkb3V0LCBzbyBzb21ldGltZXMgdGhlIGpzb24gb3V0cHV0IGNhbid0IGJlXG4gICAgICAvLyBndWFyYW50ZWVkIHRvIGJlIHBhcnNlYWJsZVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0Lmpzb24gPSBKU09OLnBhcnNlKHN0ZG91dCk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGFzeW5jIGdldExhdGVzdFZlcnNpb24gKHBrZykge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5leGVjKCd2aWV3JywgW3BrZywgJ2Rpc3QtdGFncyddLCB7XG4gICAgICBqc29uOiB0cnVlXG4gICAgfSkpLmpzb24ubGF0ZXN0O1xuICB9XG5cbiAgYXN5bmMgZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVWZXJzaW9uIChwa2csIGN1clZlcnNpb24pIHtcbiAgICBjb25zdCBhbGxWZXJzaW9ucyA9IChhd2FpdCB0aGlzLmV4ZWMoJ3ZpZXcnLCBbcGtnLCAndmVyc2lvbnMnXSwge1xuICAgICAganNvbjogdHJ1ZVxuICAgIH0pKS5qc29uO1xuICAgIHJldHVybiB0aGlzLmdldExhdGVzdFNhZmVVcGdyYWRlRnJvbVZlcnNpb25zKGN1clZlcnNpb24sIGFsbFZlcnNpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGN1cnJlbnQgdmVyc2lvbiBhbmQgYSBsaXN0IG9mIGFsbCB2ZXJzaW9ucyBmb3IgYSBwYWNrYWdlLCByZXR1cm4gdGhlIHZlcnNpb24gd2hpY2ggaXNcbiAgICogdGhlIGhpZ2hlc3Qgc2FmZWx5LXVwZ3JhZGFibGUgdmVyc2lvbiAobWVhbmluZyBub3QgY3Jvc3NpbmcgYW55IG1ham9yIHJldmlzaW9uIGJvdW5kYXJpZXMsIGFuZFxuICAgKiBub3QgaW5jbHVkaW5nIGFueSBhbHBoYS9iZXRhL3JjIHZlcnNpb25zKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY3VyVmVyc2lvbiAtIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgYSBwYWNrYWdlXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gYWxsVmVyc2lvbnMgLSBhIGxpc3Qgb2YgdmVyc2lvbiBzdHJpbmdzXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ3xudWxsfSAtIHRoZSBoaWdoZXN0IHNhZmVseS11cGdyYWRhYmxlIHZlcnNpb24sIG9yIG51bGwgaWYgdGhlcmUgaXNuJ3Qgb25lXG4gICAqL1xuICBnZXRMYXRlc3RTYWZlVXBncmFkZUZyb21WZXJzaW9ucyAoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpIHtcbiAgICBsZXQgc2FmZVVwZ3JhZGVWZXIgPSBudWxsO1xuICAgIGNvbnN0IGN1clNlbXZlciA9IHNlbXZlci5wYXJzZShjdXJWZXJzaW9uKTtcbiAgICBpZiAoY3VyU2VtdmVyID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSBjdXJyZW50IHZlcnNpb24gJyR7Y3VyVmVyc2lvbn0nYCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdGVzdFZlciBvZiBhbGxWZXJzaW9ucykge1xuICAgICAgY29uc3QgdGVzdFNlbXZlciA9IHNlbXZlci5wYXJzZSh0ZXN0VmVyKTtcbiAgICAgIGlmICh0ZXN0U2VtdmVyID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIHZlcnNpb24gdG8gdGVzdCBhZ2FpbnN0OiAnJHt0ZXN0VmVyfSdgKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSB0ZXN0IHZlcnNpb24gaXMgYSBwcmVyZWxlYXNlLCBpZ25vcmUgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLnByZXJlbGVhc2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHZlcnNpb24gaXMgbGF0ZXIgdGhhbiB0aGUgdGVzdCB2ZXJzaW9uLCBza2lwIHRoaXMgdGVzdCB2ZXJzaW9uXG4gICAgICBpZiAoY3VyU2VtdmVyLmNvbXBhcmUodGVzdFNlbXZlcikgPT09IDEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgdGVzdCB2ZXJzaW9uIGlzIG5ld2VyLCBidXQgY3Jvc3NlcyBhIG1ham9yIHJldmlzaW9uIGJvdW5kYXJ5LCBhbHNvIHNraXAgaXRcbiAgICAgIGlmICh0ZXN0U2VtdmVyLm1ham9yID4gY3VyU2VtdmVyLm1ham9yKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gb3RoZXJ3aXNlIHRoaXMgdmVyc2lvbiBpcyBzYWZlIHRvIHVwZ3JhZGUgdG8uIEJ1dCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvbmVzIG9mIHRoaXNcbiAgICAgIC8vIGtpbmQsIHNvIGtlZXAgaXRlcmF0aW5nIGFuZCBrZWVwaW5nIHRoZSBoaWdoZXN0XG4gICAgICBpZiAoc2FmZVVwZ3JhZGVWZXIgPT09IG51bGwgfHwgdGVzdFNlbXZlci5jb21wYXJlKHNhZmVVcGdyYWRlVmVyKSA9PT0gMSkge1xuICAgICAgICBzYWZlVXBncmFkZVZlciA9IHRlc3RTZW12ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzYWZlVXBncmFkZVZlcikge1xuICAgICAgc2FmZVVwZ3JhZGVWZXIgPSBzYWZlVXBncmFkZVZlci5mb3JtYXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNhZmVVcGdyYWRlVmVyO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFBhY2thZ2UgKHtwa2dEaXIsIHBrZ05hbWUsIHBrZ1Zlcn0pIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmV4ZWMoJ2luc3RhbGwnLCBbXG4gICAgICAnLS1uby1zYXZlJyxcbiAgICAgICctLW5vLXBhY2thZ2UtbG9jaycsXG4gICAgICBwa2dWZXIgPyBgJHtwa2dOYW1lfUAke3BrZ1Zlcn1gIDogcGtnTmFtZVxuICAgIF0sIHtcbiAgICAgIGN3ZDogcGtnRGlyLFxuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGxvY2tGaWxlOiBJTlNUQUxMX0xPQ0tGSUxFXG4gICAgfSk7XG5cbiAgICBpZiAocmVzLmpzb24pIHtcbiAgICAgIC8vIHdlIHBhcnNlZCBhIHZhbGlkIGpzb24gcmVzcG9uc2UsIHNvIGlmIHdlIGdvdCBhbiBlcnJvciBoZXJlLCByZXR1cm4gdGhhdFxuICAgICAgLy8gbWVzc2FnZSBzdHJhaWdodGF3YXlcbiAgICAgIGlmIChyZXMuanNvbi5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmpzb24uZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdyByZWFkIHBhY2thZ2UgZGF0YSBmcm9tIHRoZSBpbnN0YWxsZWQgcGFja2FnZSB0byByZXR1cm4sIGFuZCBtYWtlIHN1cmVcbiAgICAvLyBldmVyeXRoaW5nIGdvdCBpbnN0YWxsZWQgb2suIFJlbWVtYmVyLCBwa2dOYW1lIG1pZ2h0IGVuZCB1cCB3aXRoIGEgLyBpbiBpdCBkdWUgdG8gYW4gbnBtXG4gICAgLy8gb3JnLCBzbyBpZiBzbywgdGhhdCB3aWxsIGdldCBjb3JyZWN0bHkgZXhwbG9kZWQgaW50byBtdWx0aXBsZSBkaXJlY3RvcmllcywgYnkgcGF0aC5yZXNvbHZlIGhlcmVcbiAgICAvLyAoZXZlbiBvbiBXaW5kb3dzISlcbiAgICBjb25zdCBwa2dKc29uID0gcGF0aC5yZXNvbHZlKHBrZ0RpciwgJ25vZGVfbW9kdWxlcycsIHBrZ05hbWUsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUocGtnSnNvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYWNrYWdlIHdhcyBub3QgZG93bmxvYWRlZCBjb3JyZWN0bHk7IGl0cyBwYWNrYWdlLmpzb24gJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ2RpZCBub3QgZXhpc3Qgb3Igd2FzIHVucmVhZGFibGUuIFdlIGxvb2tlZCBmb3IgaXQgYXQgJyArXG4gICAgICAgICAgICAgICAgICAgICAgcGtnSnNvbik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbGlua1BhY2thZ2UgKHBrZ1BhdGgpIHtcbiAgICAvLyBmcm9tIHRoZSBwYXRoIGFsb25lIHdlIGRvbid0IGtub3cgdGhlIG5wbSBwYWNrYWdlIG5hbWUsIHNvIHdlIG5lZWQgdG9cbiAgICAvLyBsb29rIGluIHBhY2thZ2UuanNvblxuICAgIGxldCBwa2dOYW1lO1xuICAgIHRyeSB7XG4gICAgICBwa2dOYW1lID0gcmVxdWlyZShwYXRoLnJlc29sdmUocGtnUGF0aCwgJ3BhY2thZ2UuanNvbicpKS5uYW1lO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBwYWNrYWdlLmpzb24gaW5zaWRlIHRoZSBwYWNrYWdlIHBhdGggJyArXG4gICAgICAgICAgICAgICAgICAgICAgYHByb3ZpZGVkOiAke3BrZ1BhdGh9YCk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBpcyBhZGRlZCB0byBoYW5kbGUgY29tbWFuZHMgd2l0aCByZWxhdGl2ZSBwYXRoc1xuICAgIC8vIGllOiBcIm5vZGUgLiBkcml2ZXIgaW5zdGFsbCAtLXNvdXJjZT1sb2NhbCAuLi9mYWtlLWRyaXZlclwiXG4gICAgcGtnUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBwa2dQYXRoKTtcblxuICAgIGNvbnN0IHBrZ0hvbWUgPSBwYXRoLnJlc29sdmUodGhpcy5hcHBpdW1Ib21lLCBwa2dOYW1lKTtcblxuICAgIC8vIGNhbGwgbGluayB3aXRoIC0tbm8tcGFja2FnZS1sb2NrIHRvIGVuc3VyZSBubyBjb3JydXB0aW9uIHdoaWxlIGluc3RhbGxpbmcgbG9jYWwgcGFja2FnZXNcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmV4ZWMoJ2xpbmsnLCBbJy0tbm8tcGFja2FnZS1sb2NrJywgcGtnUGF0aF0sIHtjd2Q6IHBrZ0hvbWUsIGxvY2tGaWxlOiBMSU5LX0xPQ0tGSUxFfSk7XG4gICAgaWYgKHJlcy5qc29uICYmIHJlcy5qc29uLmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmpzb24uZXJyb3IpO1xuICAgIH1cblxuICAgIC8vIG5vdyBlbnN1cmUgaXQgd2FzIGxpbmtlZCB0byB0aGUgY29ycmVjdCBwbGFjZVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVxdWlyZShwYXRoLnJlc29sdmUocGtnSG9tZSwgJ25vZGVfbW9kdWxlcycsIHBrZ05hbWUsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYWNrYWdlIHdhcyBub3QgbGlua2VkIGNvcnJlY3RseTsgaXRzIHBhY2thZ2UuanNvbiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAnZGlkIG5vdCBleGlzdCBvciB3YXMgdW5yZWFkYWJsZScpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbFBhY2thZ2UgKHBrZ0RpciwgcGtnKSB7XG4gICAgYXdhaXQgdGhpcy5leGVjKCd1bmluc3RhbGwnLCBbcGtnXSwge1xuICAgICAgY3dkOiBwa2dEaXIsXG4gICAgICBsb2NrRmlsZTogSU5TVEFMTF9MT0NLRklMRVxuICAgIH0pO1xuICB9XG59XG4iXSwiZmlsZSI6ImxpYi9jbGkvbnBtLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
220
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9jbGkvbnBtLmpzIl0sIm5hbWVzIjpbIklOU1RBTExfTE9DS0ZJTEUiLCJMSU5LX0xPQ0tGSUxFIiwiTlBNIiwiY29uc3RydWN0b3IiLCJhcHBpdW1Ib21lIiwiZXhlYyIsImNtZCIsImFyZ3MiLCJvcHRzIiwiZXhlY09wdHMiLCJjd2QiLCJqc29uIiwibG9ja0ZpbGUiLCJkdW1teVBrZ0pzb24iLCJwYXRoIiwicmVzb2x2ZSIsImZzIiwiZXhpc3RzIiwid3JpdGVGaWxlIiwidW5zaGlmdCIsInB1c2giLCJucG1DbWQiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJydW5uZXIiLCJhY3F1aXJlTG9jayIsInV0aWwiLCJnZXRMb2NrRmlsZUd1YXJkIiwiX3J1bm5lciIsInJldCIsInN0ZG91dCIsInN0ZGVyciIsImNvZGUiLCJKU09OIiwicGFyc2UiLCJpZ24iLCJlIiwiZXJyIiwiRXJyb3IiLCJqb2luIiwidHJpbSIsImdldExhdGVzdFZlcnNpb24iLCJwa2ciLCJsYXRlc3QiLCJnZXRMYXRlc3RTYWZlVXBncmFkZVZlcnNpb24iLCJjdXJWZXJzaW9uIiwiYWxsVmVyc2lvbnMiLCJnZXRMYXRlc3RTYWZlVXBncmFkZUZyb21WZXJzaW9ucyIsInNhZmVVcGdyYWRlVmVyIiwiY3VyU2VtdmVyIiwic2VtdmVyIiwidGVzdFZlciIsInRlc3RTZW12ZXIiLCJwcmVyZWxlYXNlIiwibGVuZ3RoIiwiY29tcGFyZSIsIm1ham9yIiwiZm9ybWF0IiwiaW5zdGFsbFBhY2thZ2UiLCJwa2dEaXIiLCJwa2dOYW1lIiwicGtnVmVyIiwicmVzIiwiZXJyb3IiLCJwa2dKc29uIiwicmVxdWlyZSIsImxpbmtQYWNrYWdlIiwicGtnUGF0aCIsIm5hbWUiLCJwcm9jZXNzIiwicGtnSG9tZSIsInVuaW5zdGFsbFBhY2thZ2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsZ0JBQWdCLEdBQUcsc0JBQXpCO0FBQ0EsTUFB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QUl0QixLQUFKLENBQVUsNERBQ0EsaUNBRFYsQ0FBTjtBQUVEO0FBQ0Y7O0FBTXFCLFFBQWhCaUMsZ0JBQWdCLENBQUVaLE1BQUYsRUFBVWpCLEdBQVYsRUFBZTtBQUNuQyxVQUFNLEtBQUtyQyxJQUFMLENBQVUsV0FBVixFQUF1QixDQUFDcUMsR0FBRCxDQUF2QixFQUE4QjtBQUNsQ2hDLE1BQUFBLEdBQUcsRUFBRWlELE1BRDZCO0FBRWxDL0MsTUFBQUEsUUFBUSxFQUFFWjtBQUZ3QixLQUE5QixDQUFOO0FBSUQ7O0FBdk5zQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZnMsIG1rZGlycCwgdXRpbCwgc3lzdGVtIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcblxuY29uc3QgSU5TVEFMTF9MT0NLRklMRSA9ICcuYXBwaXVtLmluc3RhbGwubG9jayc7XG5jb25zdCBMSU5LX0xPQ0tGSUxFID0gJy5hcHBpdW0ubGluay5sb2NrJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTlBNIHtcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWVcbiAgICovXG4gIGNvbnN0cnVjdG9yIChhcHBpdW1Ib21lKSB7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgdGhpcy5hcHBpdW1Ib21lID0gYXBwaXVtSG9tZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGBucG1gIHdpdGggZ2l2ZW4gYXJncy5cbiAgICpcbiAgICogSWYgdGhlIHByb2Nlc3MgZXhpdHMgd2l0aCBhIG5vbnplcm8gY29kZSwgdGhlIGNvbnRlbnRzIG9mIGBTVERPVVRgIGFuZCBgU1RERVJSYCB3aWxsIGJlIGluIHRoZVxuICAgKiBgbWVzc2FnZWAgb2YgdGhlIHtAbGluayBUZWVuUHJvY2Vzc0V4ZWNFcnJvcn0gcmVqZWN0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJnc1xuICAgKiBAcGFyYW0ge3sganNvbj86IGJvb2xlYW47IGN3ZD86IHN0cmluZzsgbG9ja0ZpbGU/OiBzdHJpbmc7IH19IG9wdHNcbiAgICovXG4gIGFzeW5jIGV4ZWMgKGNtZCwgYXJncywgb3B0cywgZXhlY09wdHMgPSB7fSkge1xuICAgIGxldCB7IGN3ZCwganNvbiwgbG9ja0ZpbGUgfSA9IG9wdHM7XG4gICAgaWYgKCFjd2QpIHtcbiAgICAgIGN3ZCA9IHRoaXMuYXBwaXVtSG9tZTtcbiAgICB9XG4gICAgLy8gZW5zdXJlIHRoZSBkaXJlY3Rvcnkgd2Ugd2FudCB0byBpbnN0YWxsIGluc2lkZSBvZiBleGlzdHNcbiAgICBhd2FpdCBta2RpcnAoY3dkKTtcblxuICAgIC8vIG5vdCBvbmx5IHRoaXMsIHRoaXMgZGlyZWN0b3J5IG5lZWRzIGEgJ3BhY2thZ2UuanNvbicgaW5zaWRlIG9mIGl0LCBvdGhlcndpc2UsIGlmIGFueVxuICAgIC8vIGRpcmVjdG9yeSBpbiB0aGUgZmlsZXN5c3RlbSB0cmVlIEFCT1ZFIGN3ZCBoYXBwZW5zIHRvIGhhdmUgYSBwYWNrYWdlLmpzb24gb3IgYSBub2RlX21vZHVsZXNcbiAgICAvLyBkaXIgaW4gaXQsIE5QTSB3aWxsIGluc3RhbGwgdGhlIG1vZHVsZSB1cCB0aGVyZSBpbnN0ZWFkIChzaWxseSBOUE0pXG4gICAgY29uc3QgZHVtbXlQa2dKc29uID0gcGF0aC5yZXNvbHZlKGN3ZCwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGR1bW15UGtnSnNvbikpIHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShkdW1teVBrZ0pzb24sICd7fScpO1xuICAgIH1cblxuICAgIC8vIG1ha2Ugc3VyZSB3ZSBwZXJmb3JtIHRoZSBjdXJyZW50IG9wZXJhdGlvbiBpbiBjd2RcbiAgICBleGVjT3B0cyA9IHsuLi5leGVjT3B0cywgY3dkfTtcblxuICAgIGFyZ3MudW5zaGlmdChjbWQpO1xuICAgIGlmIChqc29uKSB7XG4gICAgICBhcmdzLnB1c2goJy0tanNvbicpO1xuICAgIH1cbiAgICBjb25zdCBucG1DbWQgPSBzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnbnBtLmNtZCcgOiAnbnBtJztcbiAgICBsZXQgcnVubmVyID0gYXN5bmMgKCkgPT4gYXdhaXQgZXhlYyhucG1DbWQsIGFyZ3MsIGV4ZWNPcHRzKTtcbiAgICBpZiAobG9ja0ZpbGUpIHtcbiAgICAgIGNvbnN0IGFjcXVpcmVMb2NrID0gdXRpbC5nZXRMb2NrRmlsZUd1YXJkKHBhdGgucmVzb2x2ZShjd2QsIGxvY2tGaWxlKSk7XG4gICAgICBjb25zdCBfcnVubmVyID0gcnVubmVyO1xuICAgICAgcnVubmVyID0gYXN5bmMgKCkgPT4gYXdhaXQgYWNxdWlyZUxvY2soX3J1bm5lcik7XG4gICAgfVxuXG4gICAgbGV0IHJldDtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IGF3YWl0IHJ1bm5lcigpO1xuICAgICAgcmV0ID0gLyoqIEB0eXBlIHtUZWVuUHJvY2Vzc0V4ZWNSZXN1bHR9ICovKHtzdGRvdXQsIHN0ZGVyciwgY29kZX0pO1xuICAgICAgLy8gaWYgcG9zc2libGUsIHBhcnNlIE5QTSdzIGpzb24gb3V0cHV0LiBEdXJpbmcgTlBNIGluc3RhbGwgM3JkLXBhcnR5XG4gICAgICAvLyBwYWNrYWdlcyBjYW4gd3JpdGUgdG8gc3Rkb3V0LCBzbyBzb21ldGltZXMgdGhlIGpzb24gb3V0cHV0IGNhbid0IGJlXG4gICAgICAvLyBndWFyYW50ZWVkIHRvIGJlIHBhcnNlYWJsZVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0Lmpzb24gPSBKU09OLnBhcnNlKHN0ZG91dCk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyLCBjb2RlfSA9IC8qKiBAdHlwZSB7VGVlblByb2Nlc3NFeGVjRXJyb3J9ICovKGUpO1xuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKGBucG0gY29tbWFuZCAnJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9JyBmYWlsZWQgd2l0aCBjb2RlICR7Y29kZX0uXFxuXFxuU1RET1VUOlxcbiR7c3Rkb3V0LnRyaW0oKX1cXG5cXG5TVERFUlI6XFxuJHtzdGRlcnIudHJpbSgpfWApO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dcbiAgICovXG4gIGFzeW5jIGdldExhdGVzdFZlcnNpb24gKHBrZykge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5leGVjKCd2aWV3JywgW3BrZywgJ2Rpc3QtdGFncyddLCB7XG4gICAgICBqc29uOiB0cnVlXG4gICAgfSkpLmpzb24/LmxhdGVzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGtnXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJWZXJzaW9uXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RTYWZlVXBncmFkZVZlcnNpb24gKHBrZywgY3VyVmVyc2lvbikge1xuICAgIGNvbnN0IGFsbFZlcnNpb25zID0gKGF3YWl0IHRoaXMuZXhlYygndmlldycsIFtwa2csICd2ZXJzaW9ucyddLCB7XG4gICAgICBqc29uOiB0cnVlXG4gICAgfSkpLmpzb247XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGF0ZXN0U2FmZVVwZ3JhZGVGcm9tVmVyc2lvbnMoY3VyVmVyc2lvbiwgYWxsVmVyc2lvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgY3VycmVudCB2ZXJzaW9uIGFuZCBhIGxpc3Qgb2YgYWxsIHZlcnNpb25zIGZvciBhIHBhY2thZ2UsIHJldHVybiB0aGUgdmVyc2lvbiB3aGljaCBpc1xuICAgKiB0aGUgaGlnaGVzdCBzYWZlbHktdXBncmFkYWJsZSB2ZXJzaW9uIChtZWFuaW5nIG5vdCBjcm9zc2luZyBhbnkgbWFqb3IgcmV2aXNpb24gYm91bmRhcmllcywgYW5kXG4gICAqIG5vdCBpbmNsdWRpbmcgYW55IGFscGhhL2JldGEvcmMgdmVyc2lvbnMpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJWZXJzaW9uIC0gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBhIHBhY2thZ2VcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBhbGxWZXJzaW9ucyAtIGEgbGlzdCBvZiB2ZXJzaW9uIHN0cmluZ3NcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfG51bGx9IC0gdGhlIGhpZ2hlc3Qgc2FmZWx5LXVwZ3JhZGFibGUgdmVyc2lvbiwgb3IgbnVsbCBpZiB0aGVyZSBpc24ndCBvbmVcbiAgICovXG4gIGdldExhdGVzdFNhZmVVcGdyYWRlRnJvbVZlcnNpb25zIChjdXJWZXJzaW9uLCBhbGxWZXJzaW9ucykge1xuICAgIGxldCBzYWZlVXBncmFkZVZlciA9IG51bGw7XG4gICAgY29uc3QgY3VyU2VtdmVyID0gc2VtdmVyLnBhcnNlKGN1clZlcnNpb24pO1xuICAgIGlmIChjdXJTZW12ZXIgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHBhcnNlIGN1cnJlbnQgdmVyc2lvbiAnJHtjdXJWZXJzaW9ufSdgKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB0ZXN0VmVyIG9mIGFsbFZlcnNpb25zKSB7XG4gICAgICBjb25zdCB0ZXN0U2VtdmVyID0gc2VtdmVyLnBhcnNlKHRlc3RWZXIpO1xuICAgICAgaWYgKHRlc3RTZW12ZXIgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgdmVyc2lvbiB0byB0ZXN0IGFnYWluc3Q6ICcke3Rlc3RWZXJ9J2ApO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIHRlc3QgdmVyc2lvbiBpcyBhIHByZXJlbGVhc2UsIGlnbm9yZSBpdFxuICAgICAgaWYgKHRlc3RTZW12ZXIucHJlcmVsZWFzZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgdmVyc2lvbiBpcyBsYXRlciB0aGFuIHRoZSB0ZXN0IHZlcnNpb24sIHNraXAgdGhpcyB0ZXN0IHZlcnNpb25cbiAgICAgIGlmIChjdXJTZW12ZXIuY29tcGFyZSh0ZXN0U2VtdmVyKSA9PT0gMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSB0ZXN0IHZlcnNpb24gaXMgbmV3ZXIsIGJ1dCBjcm9zc2VzIGEgbWFqb3IgcmV2aXNpb24gYm91bmRhcnksIGFsc28gc2tpcCBpdFxuICAgICAgaWYgKHRlc3RTZW12ZXIubWFqb3IgPiBjdXJTZW12ZXIubWFqb3IpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBvdGhlcndpc2UgdGhpcyB2ZXJzaW9uIGlzIHNhZmUgdG8gdXBncmFkZSB0by4gQnV0IHRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIG9uZXMgb2YgdGhpc1xuICAgICAgLy8ga2luZCwgc28ga2VlcCBpdGVyYXRpbmcgYW5kIGtlZXBpbmcgdGhlIGhpZ2hlc3RcbiAgICAgIGlmIChzYWZlVXBncmFkZVZlciA9PT0gbnVsbCB8fCB0ZXN0U2VtdmVyLmNvbXBhcmUoc2FmZVVwZ3JhZGVWZXIpID09PSAxKSB7XG4gICAgICAgIHNhZmVVcGdyYWRlVmVyID0gdGVzdFNlbXZlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNhZmVVcGdyYWRlVmVyKSB7XG4gICAgICBzYWZlVXBncmFkZVZlciA9IHNhZmVVcGdyYWRlVmVyLmZvcm1hdCgpO1xuICAgIH1cbiAgICByZXR1cm4gc2FmZVVwZ3JhZGVWZXI7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHt7cGtnRGlyOiBzdHJpbmcsIHBrZ05hbWU6IHN0cmluZywgcGtnVmVyPzogc3RyaW5nfX0gcGFyYW0wXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgndHlwZS1mZXN0JykuUGFja2FnZUpzb24+fVxuICAgKi9cbiAgYXN5bmMgaW5zdGFsbFBhY2thZ2UgKHtwa2dEaXIsIHBrZ05hbWUsIHBrZ1Zlcn0pIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmV4ZWMoJ2luc3RhbGwnLCBbXG4gICAgICAnLS1uby1zYXZlJyxcbiAgICAgICctLW5vLXBhY2thZ2UtbG9jaycsXG4gICAgICBwa2dWZXIgPyBgJHtwa2dOYW1lfUAke3BrZ1Zlcn1gIDogcGtnTmFtZVxuICAgIF0sIHtcbiAgICAgIGN3ZDogcGtnRGlyLFxuICAgICAganNvbjogdHJ1ZSxcbiAgICAgIGxvY2tGaWxlOiBJTlNUQUxMX0xPQ0tGSUxFXG4gICAgfSk7XG5cbiAgICBpZiAocmVzLmpzb24pIHtcbiAgICAgIC8vIHdlIHBhcnNlZCBhIHZhbGlkIGpzb24gcmVzcG9uc2UsIHNvIGlmIHdlIGdvdCBhbiBlcnJvciBoZXJlLCByZXR1cm4gdGhhdFxuICAgICAgLy8gbWVzc2FnZSBzdHJhaWdodGF3YXlcbiAgICAgIGlmIChyZXMuanNvbi5lcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmpzb24uZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdyByZWFkIHBhY2thZ2UgZGF0YSBmcm9tIHRoZSBpbnN0YWxsZWQgcGFja2FnZSB0byByZXR1cm4sIGFuZCBtYWtlIHN1cmVcbiAgICAvLyBldmVyeXRoaW5nIGdvdCBpbnN0YWxsZWQgb2suIFJlbWVtYmVyLCBwa2dOYW1lIG1pZ2h0IGVuZCB1cCB3aXRoIGEgLyBpbiBpdCBkdWUgdG8gYW4gbnBtXG4gICAgLy8gb3JnLCBzbyBpZiBzbywgdGhhdCB3aWxsIGdldCBjb3JyZWN0bHkgZXhwbG9kZWQgaW50byBtdWx0aXBsZSBkaXJlY3RvcmllcywgYnkgcGF0aC5yZXNvbHZlIGhlcmVcbiAgICAvLyAoZXZlbiBvbiBXaW5kb3dzISlcbiAgICBjb25zdCBwa2dKc29uID0gcGF0aC5yZXNvbHZlKHBrZ0RpciwgJ25vZGVfbW9kdWxlcycsIHBrZ05hbWUsICdwYWNrYWdlLmpzb24nKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHJlcXVpcmUocGtnSnNvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYWNrYWdlIHdhcyBub3QgZG93bmxvYWRlZCBjb3JyZWN0bHk7IGl0cyBwYWNrYWdlLmpzb24gJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ2RpZCBub3QgZXhpc3Qgb3Igd2FzIHVucmVhZGFibGUuIFdlIGxvb2tlZCBmb3IgaXQgYXQgJyArXG4gICAgICAgICAgICAgICAgICAgICAgcGtnSnNvbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dQYXRoXG4gICAqL1xuICBhc3luYyBsaW5rUGFja2FnZSAocGtnUGF0aCkge1xuICAgIC8vIGZyb20gdGhlIHBhdGggYWxvbmUgd2UgZG9uJ3Qga25vdyB0aGUgbnBtIHBhY2thZ2UgbmFtZSwgc28gd2UgbmVlZCB0b1xuICAgIC8vIGxvb2sgaW4gcGFja2FnZS5qc29uXG4gICAgbGV0IHBrZ05hbWU7XG4gICAgdHJ5IHtcbiAgICAgIHBrZ05hbWUgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShwa2dQYXRoLCAncGFja2FnZS5qc29uJykpLm5hbWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHBhY2thZ2UuanNvbiBpbnNpZGUgdGhlIHBhY2thZ2UgcGF0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICBgcHJvdmlkZWQ6ICR7cGtnUGF0aH1gKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIGlzIGFkZGVkIHRvIGhhbmRsZSBjb21tYW5kcyB3aXRoIHJlbGF0aXZlIHBhdGhzXG4gICAgLy8gaWU6IFwibm9kZSAuIGRyaXZlciBpbnN0YWxsIC0tc291cmNlPWxvY2FsIC4uL2Zha2UtZHJpdmVyXCJcbiAgICBwa2dQYXRoID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIHBrZ1BhdGgpO1xuXG4gICAgY29uc3QgcGtnSG9tZSA9IHBhdGgucmVzb2x2ZSh0aGlzLmFwcGl1bUhvbWUsIHBrZ05hbWUpO1xuXG4gICAgLy8gY2FsbCBsaW5rIHdpdGggLS1uby1wYWNrYWdlLWxvY2sgdG8gZW5zdXJlIG5vIGNvcnJ1cHRpb24gd2hpbGUgaW5zdGFsbGluZyBsb2NhbCBwYWNrYWdlc1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZXhlYygnbGluaycsIFsnLS1uby1wYWNrYWdlLWxvY2snLCBwa2dQYXRoXSwge2N3ZDogcGtnSG9tZSwgbG9ja0ZpbGU6IExJTktfTE9DS0ZJTEV9KTtcbiAgICBpZiAocmVzLmpzb24gJiYgcmVzLmpzb24uZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuanNvbi5lcnJvcik7XG4gICAgfVxuXG4gICAgLy8gbm93IGVuc3VyZSBpdCB3YXMgbGlua2VkIHRvIHRoZSBjb3JyZWN0IHBsYWNlXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiByZXF1aXJlKHBhdGgucmVzb2x2ZShwa2dIb21lLCAnbm9kZV9tb2R1bGVzJywgcGtnTmFtZSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhY2thZ2Ugd2FzIG5vdCBsaW5rZWQgY29ycmVjdGx5OyBpdHMgcGFja2FnZS5qc29uICcgK1xuICAgICAgICAgICAgICAgICAgICAgICdkaWQgbm90IGV4aXN0IG9yIHdhcyB1bnJlYWRhYmxlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dEaXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBrZ1xuICAgKi9cbiAgYXN5bmMgdW5pbnN0YWxsUGFja2FnZSAocGtnRGlyLCBwa2cpIHtcbiAgICBhd2FpdCB0aGlzLmV4ZWMoJ3VuaW5zdGFsbCcsIFtwa2ddLCB7XG4gICAgICBjd2Q6IHBrZ0RpcixcbiAgICAgIGxvY2tGaWxlOiBJTlNUQUxMX0xPQ0tGSUxFXG4gICAgfSk7XG4gIH1cbn1cblxuXG4vKipcbiAqIFJlc3VsdCBmcm9tIGEgbm9uLXplcm8tZXhpdCBleGVjdXRpb24gb2YgYGFwcGl1bWBcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlZW5Qcm9jZXNzRXhlY1Jlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZG91dCAtIFN0ZG91dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZGVyciAtIFN0ZGVyclxuICogQHByb3BlcnR5IHtudW1iZXI/fSBjb2RlIC0gRXhpdCBjb2RlXG4gKiBAcHJvcGVydHkge2FueX0ganNvbiAtIEpTT04gcGFyc2VkIGZyb20gc3Rkb3V0XG4gKi9cblxuLyoqXG4gKiBFeHRyYSBwcm9wcyBgdGVlbl9wcm9jZXNzLmV4ZWNgIGFkZHMgdG8gaXRzIGVycm9yIG9iamVjdHNcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFRlZW5Qcm9jZXNzRXhlY0Vycm9yUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGRvdXQgLSBTVERPVVRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGRlcnIgLSBTVERFUlJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyP30gY29kZSAtIEV4aXQgY29kZVxuICovXG5cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gYnkgYHRlZW5fcHJvY2Vzcy5leGVjYFxuICogQHR5cGVkZWYge0Vycm9yICYgVGVlblByb2Nlc3NFeGVjRXJyb3JQcm9wc30gVGVlblByb2Nlc3NFeGVjRXJyb3JcbiAqL1xuIl0sImZpbGUiOiJsaWIvY2xpL25wbS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -83,4 +83,4 @@ const installLocalExtension = _lodash.default.curry(async (appiumHome, type, pat
83
83
  exports.installLocalExtension = installLocalExtension;require('source-map-support').install();
84
84
 
85
85
 
86
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL2NsaS1oZWxwZXJzLmpzIl0sIm5hbWVzIjpbIkVYRUNVVEFCTEUiLCJwYXRoIiwiam9pbiIsIlBST0pFQ1RfUk9PVCIsInJ1biIsImFwcGl1bUhvbWUiLCJhcmdzIiwiZW52IiwiQVBQSVVNX0hPTUUiLCJQQVRIIiwicHJvY2VzcyIsImV4ZWNQYXRoIiwiY3dkIiwiZXJyIiwic3Rkb3V0Iiwic3RkZXJyIiwicnVuRXJyIiwiT2JqZWN0IiwiYXNzaWduIiwib3JpZ2luYWxNZXNzYWdlIiwibWVzc2FnZSIsInRyaW0iLCJjb21tYW5kIiwicnVuQXBwaXVtIiwiXyIsImN1cnJ5IiwicnVuQXBwaXVtUmF3IiwicnVuQXBwaXVtSnNvbiIsImluY2x1ZGVzIiwicHVzaCIsInJlc3VsdCIsIkpTT04iLCJwYXJzZSIsImluc3RhbGxMb2NhbEV4dGVuc2lvbiIsInR5cGUiLCJwYXRoVG9FeHRlbnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS08sTUFBTUEsVUFBVSxHQUFHQyxjQUFLQyxJQUFMLENBQ3hCQyxxQkFEd0IsRUFFeEIsVUFGd0IsRUFHeEIsUUFId0IsRUFJeEIsT0FKd0IsRUFLeEIsS0FMd0IsRUFNeEIsU0FOd0IsQ0FBbkI7Ozs7QUFpQlAsZUFBZUMsR0FBZixDQUFvQkMsVUFBcEIsRUFBZ0NDLElBQWhDLEVBQXNDO0FBQ3BDLFFBQU1DLEdBQUcsR0FBRztBQUNWQyxJQUFBQSxXQUFXLEVBQUVILFVBREg7QUFFVkksSUFBQUEsSUFBSSxFQUFFQyxPQUFPLENBQUNILEdBQVIsQ0FBWUU7QUFGUixHQUFaOztBQUlBLE1BQUk7QUFJRixXQUFPLE1BQU0sd0JBQUtDLE9BQU8sQ0FBQ0MsUUFBYixFQUF1QixDQUFDWCxVQUFELEVBQWEsR0FBR00sSUFBaEIsQ0FBdkIsRUFBOEM7QUFDekRNLE1BQUFBLEdBQUcsRUFBRVQscUJBRG9EO0FBRXpESSxNQUFBQTtBQUZ5RCxLQUE5QyxDQUFiO0FBSUQsR0FSRCxDQVFFLE9BQU9NLEdBQVAsRUFBWTtBQUNaLFVBQU07QUFBQ0MsTUFBQUEsTUFBRDtBQUFTQyxNQUFBQTtBQUFULFFBQXVERixHQUE3RDtBQUlBLFVBQU1HLE1BQU0sR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQ2JMLEdBRGEsRUFFYjtBQUNFTSxNQUFBQSxlQUFlLEVBQUVOLEdBQUcsQ0FBQ08sT0FEdkI7QUFFRUEsTUFBQUEsT0FBTyxFQUFHLEdBQUVOLE1BQU0sQ0FBQ08sSUFBUCxFQUFjLE9BQU1OLE1BQU0sQ0FBQ00sSUFBUCxFQUFjLEVBRmhEO0FBR0VDLE1BQUFBLE9BQU8sRUFBRyxHQUFFWixPQUFPLENBQUNDLFFBQVMsSUFBR1gsVUFBVyxJQUFHTSxJQUFJLENBQUNKLElBQUwsQ0FBVSxHQUFWLENBQWUsRUFIL0Q7QUFJRUssTUFBQUEsR0FKRjtBQUtFSyxNQUFBQSxHQUFHLEVBQUVUO0FBTFAsS0FGYSxDQUFmO0FBU0EsVUFBTWEsTUFBTjtBQUNEO0FBQ0Y7O0FBT00sTUFBTU8sU0FBUyxHQUFHQyxnQkFBRUMsS0FBRixDQU12QixPQUFPcEIsVUFBUCxFQUFtQkMsSUFBbkIsS0FBNEI7QUFDMUIsUUFBTTtBQUFDUSxJQUFBQTtBQUFELE1BQVcsTUFBTVYsR0FBRyxDQUFDQyxVQUFELEVBQWFDLElBQWIsQ0FBMUI7QUFDQSxTQUFPUSxNQUFQO0FBQ0QsQ0FUc0IsQ0FBbEI7Ozs7QUFnQkEsTUFBTVksWUFBWSxHQUFHRixnQkFBRUMsS0FBRixDQU0xQixPQUFPcEIsVUFBUCxFQUFtQkMsSUFBbkIsS0FBNEIsTUFBTUYsR0FBRyxDQUFDQyxVQUFELEVBQWFDLElBQWIsQ0FOWCxDQUFyQjs7OztBQWFBLE1BQU1xQixhQUFhLEdBQUdILGdCQUFFQyxLQUFGLENBTTNCLE9BQU9wQixVQUFQLEVBQW1CQyxJQUFuQixLQUE0QjtBQUMxQixNQUFJLENBQUNBLElBQUksQ0FBQ3NCLFFBQUwsQ0FBYyxRQUFkLENBQUwsRUFBOEI7QUFDNUJ0QixJQUFBQSxJQUFJLENBQUN1QixJQUFMLENBQVUsUUFBVjtBQUNEOztBQUNELFFBQU1DLE1BQU0sR0FBRyxNQUFNUCxTQUFTLENBQUNsQixVQUFELEVBQWFDLElBQWIsQ0FBOUI7O0FBQ0EsTUFBSTtBQUNGLFdBQU95QixJQUFJLENBQUNDLEtBQUwsQ0FBV0YsTUFBWCxDQUFQO0FBQ0QsR0FGRCxDQUVFLE9BQU9qQixHQUFQLEVBQVk7QUFDWkEsSUFBQUEsR0FBRyxDQUFDTyxPQUFKLEdBQWUsMkNBQTBDVSxNQUFPLEVBQWhFO0FBQ0EsVUFBTWpCLEdBQU47QUFDRDtBQUNGLENBakIwQixDQUF0Qjs7OztBQXVCQSxNQUFNb0IscUJBQXFCLEdBQUdULGdCQUFFQyxLQUFGLENBT25DLE9BQU9wQixVQUFQLEVBQW1CNkIsSUFBbkIsRUFBeUJDLGVBQXpCLEtBQ0UsTUFBTVIsYUFBYSxDQUFDdEIsVUFBRCxFQUFhLENBQzlCNkIsSUFEOEIsRUFFOUIsU0FGOEIsRUFHOUIsVUFIOEIsRUFJOUIsT0FKOEIsRUFLOUJDLGVBTDhCLENBQWIsQ0FSYyxDQUE5QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtleGVjfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHtQUk9KRUNUX1JPT1R9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbi8qKlxuICogUGF0aCB0byB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZS4gU29ydCBvZi5cbiAqL1xuZXhwb3J0IGNvbnN0IEVYRUNVVEFCTEUgPSBwYXRoLmpvaW4oXG4gIFBST0pFQ1RfUk9PVCxcbiAgJ3BhY2thZ2VzJyxcbiAgJ2FwcGl1bScsXG4gICdidWlsZCcsXG4gICdsaWInLFxuICAnbWFpbi5qcycsXG4pO1xuXG4vKipcbiAqIFJ1bnMgdGhlIGBhcHBpdW1gIGV4ZWN1dGFibGUgd2l0aCB0aGUgZ2l2ZW4gYXJncy5cbiAqXG4gKiBJZiB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uemVybyBjb2RlLCB0aGUgZXJyb3Igd2lsbCBiZSBhXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZSAtIFBhdGggdG8gYEFQUElVTV9IT01FYFxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICogQHJldHVybnMge1Byb21pc2U8VGVlblByb2Nlc3NFeGVjUmVzdWx0Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuIChhcHBpdW1Ib21lLCBhcmdzKSB7XG4gIGNvbnN0IGVudiA9IHtcbiAgICBBUFBJVU1fSE9NRTogYXBwaXVtSG9tZSxcbiAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICB9O1xuICB0cnkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtUZWVuUHJvY2Vzc0V4ZWNSZXN1bHR9XG4gICAgICovXG4gICAgcmV0dXJuIGF3YWl0IGV4ZWMocHJvY2Vzcy5leGVjUGF0aCwgW0VYRUNVVEFCTEUsIC4uLmFyZ3NdLCB7XG4gICAgICBjd2Q6IFBST0pFQ1RfUk9PVCxcbiAgICAgIGVudixcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IC8qKiBAdHlwZSB7VGVlblByb2Nlc3NFeGVjRXJyb3J9ICovKGVycik7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0FwcGl1bVJ1bkVycm9yfVxuICAgICAqL1xuICAgIGNvbnN0IHJ1bkVyciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIG9yaWdpbmFsTWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgIG1lc3NhZ2U6IGAke3N0ZG91dC50cmltKCl9XFxuXFxuJHtzdGRlcnIudHJpbSgpfWAsXG4gICAgICAgIGNvbW1hbmQ6IGAke3Byb2Nlc3MuZXhlY1BhdGh9ICR7RVhFQ1VUQUJMRX0gJHthcmdzLmpvaW4oJyAnKX1gLFxuICAgICAgICBlbnYsXG4gICAgICAgIGN3ZDogUFJPSkVDVF9ST09ULFxuICAgICAgfSk7XG4gICAgdGhyb3cgcnVuRXJyO1xuICB9XG59XG5cbi8qKlxuICogUnVucyB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZSB3aXRoIHRoZSBnaXZlbiBhcmdzIGFuZCByZXR1cm5zIGNvbnRlbnRzIG9mIGBTVERPVVRgLlxuICpcbiAqIERvIG5vdCB1c2UgdGhpcyB3aGVuIHRlc3RpbmcgZXJyb3Igb3V0cHV0LCBhcyBpdCB3aWxsIGxpa2VseSBiZSBpbiBgU1RERVJSYC4gVXNlIHtAbGluayBydW5BcHBpdW1SYXd9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW0gPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWUgLSBQYXRoIHRvIGBBUFBJVU1fSE9NRWBcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBDb250ZW50cyBvZiBgYFNURE9VVGBgXG4gICAqL1xuICBhc3luYyAoYXBwaXVtSG9tZSwgYXJncykgPT4ge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgcnVuKGFwcGl1bUhvbWUsIGFyZ3MpO1xuICAgIHJldHVybiBzdGRvdXQ7XG4gIH0sXG4pO1xuXG4vKipcbiAqIFJ1bnMgdGhlIGBhcHBpdW1gIGV4ZWN1dGFibGUgd2l0aCB0aGUgZ2l2ZW4gYXJncyBhbmQgcmV0dXJucyB0aGUgZW50aXJlXG4gKiB7QGxpbmsgVGVlblByb2Nlc3NFeGVjUmVzdWx0fSBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW1SYXcgPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWUgLSBQYXRoIHRvIGBBUFBJVU1fSE9NRWBcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUZWVuUHJvY2Vzc0V4ZWNSZXN1bHQ+fSBSYXcgcmVzdWx0IG9mIGBleGVjYFxuICAgKi9cbiAgYXN5bmMgKGFwcGl1bUhvbWUsIGFyZ3MpID0+IGF3YWl0IHJ1bihhcHBpdW1Ib21lLCBhcmdzKSxcbik7XG5cbi8qKlxuICogUnVucyB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZSB3aXRoIHRoZSBnaXZlbiBhcmdzIGluIEpTT04gbW9kZS5cbiAqIFdpbGwgcmVqZWN0IHdpdGggdGhlIGNvbnRlbnRzIG9mIGBTVERPVVRgICh3aGljaCB3ZXJlIHRvIGJlIHBhc3JlZCkgaWYgcGFyc2luZyBpbnRvIEpTT04gZmFpbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW1Kc29uID0gXy5jdXJyeShcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gUGF0aCB0byBgQVBQSVVNX0hPTUVgXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MgLSBBcmdzLCBpbmNsdWRpbmcgY29tbWFuZHNcbiAgICogQHJldHVybnMge1Byb21pc2U8VGVlblByb2Nlc3NFeGVjUmVzdWx0Pn0gUmF3IHJlc3VsdCBvZiBgZXhlY2BcbiAgICovXG4gIGFzeW5jIChhcHBpdW1Ib21lLCBhcmdzKSA9PiB7XG4gICAgaWYgKCFhcmdzLmluY2x1ZGVzKCctLWpzb24nKSkge1xuICAgICAgYXJncy5wdXNoKCctLWpzb24nKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuQXBwaXVtKGFwcGl1bUhvbWUsIGFyZ3MpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgRXJyb3IgcGFyc2luZyBKU09OLiBDb250ZW50cyBvZiBTVERPVVQ6ICR7cmVzdWx0fWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9LFxuKTtcblxuLyoqXG4gKiBHaXZlbiBhIHBhdGggdG8gYSBsb2NhbCBleHRlbnNpb24sIGluc3RhbGwgaXQgaW50byBgQVBQSVVNX0hPTUVgIHZpYSBDTEkuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnN0YWxsTG9jYWxFeHRlbnNpb24gPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWVcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2xpYi9leHQtY29uZmlnLWlvJykuRXh0ZW5zaW9uVHlwZX0gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFRvRXh0ZW5zaW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG9iamVjdD59XG4gICAqL1xuICBhc3luYyAoYXBwaXVtSG9tZSwgdHlwZSwgcGF0aFRvRXh0ZW5zaW9uKSA9PlxuICAgIGF3YWl0IHJ1bkFwcGl1bUpzb24oYXBwaXVtSG9tZSwgW1xuICAgICAgdHlwZSxcbiAgICAgICdpbnN0YWxsJyxcbiAgICAgICctLXNvdXJjZScsXG4gICAgICAnbG9jYWwnLFxuICAgICAgcGF0aFRvRXh0ZW5zaW9uLFxuICAgIF0pLFxuKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcnVuQXBwaXVtfS5cbiAqIEBwcml2YXRlXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSdW5BcHBpdW1PcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyYXddIC0gV2hldGhlciB0byByZXR1cm4gdGhlIHJhdyBvdXRwdXQgZnJvbSBgdGVlbl9wcm9jZXNzYFxuICovXG5cbi8qKlxuICogUmVzdWx0IGZyb20gYSBub24temVyby1leGl0IGV4ZWN1dGlvbiBvZiBgYXBwaXVtYFxuICogQHR5cGVkZWYge09iamVjdH0gVGVlblByb2Nlc3NFeGVjUmVzdWx0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3Rkb3V0IC0gU3Rkb3V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RkZXJyIC0gU3RkZXJyXG4gKiBAcHJvcGVydHkge251bWJlcj99IGNvZGUgLSBFeGl0IGNvZGVcbiAqL1xuXG4vKipcbiAqIEV4dHJhIHByb3BzIGB0ZWVuX3Byb2Nlc3MuZXhlY2AgYWRkcyB0byBpdHMgZXJyb3Igb2JqZWN0c1xuICogQHR5cGVkZWYge09iamVjdH0gVGVlblByb2Nlc3NFeGVjRXJyb3JQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZG91dCAtIFNURE9VVFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHN0ZGVyciAtIFNUREVSUlxuICogQHByb3BlcnR5IHtudW1iZXI/fSBjb2RlIC0gRXhpdCBjb2RlXG4gKi9cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gYnkgYHRlZW5fcHJvY2Vzcy5leGVjYFxuICogQHR5cGVkZWYge0Vycm9yICYgVGVlblByb2Nlc3NFeGVjRXJyb3JQcm9wc30gVGVlblByb2Nlc3NFeGVjRXJyb3JcbiAqL1xuXG4vKipcbiAqIEVycm9yIHRocm93biBieSBhbGwgb2YgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgd2hpY2ggZXhlY3V0ZSBgYXBwaXVtYC5cbiAqIEB0eXBlZGVmIHtFcnJvciAmIEFwcGl1bVJ1bkVycm9yUHJvcHMgJiBUZWVuUHJvY2Vzc0V4ZWNFcnJvclByb3BzfSBBcHBpdW1SdW5FcnJvclxuICovXG5cbi8qKlxuICogV3JhcHMgdGhlIGVycm9yIHJldHVybmVkIGJ5IHtAbGluayBleGVjfS5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcGl1bVJ1bkVycm9yUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcmlnaW5hbE1lc3NhZ2UgLSBPcmlnaW5hbCBlcnJvciBtZXNzYWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29tbWFuZCAtIENvbW1hbmQgdGhhdCB3YXMgcnVuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZW52IC0gRW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3dkIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICovXG4iXSwiZmlsZSI6InRlc3QvY2xpL2NsaS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
86
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL2NsaS1oZWxwZXJzLmpzIl0sIm5hbWVzIjpbIkVYRUNVVEFCTEUiLCJwYXRoIiwiam9pbiIsIlBST0pFQ1RfUk9PVCIsInJ1biIsImFwcGl1bUhvbWUiLCJhcmdzIiwiZW52IiwiQVBQSVVNX0hPTUUiLCJQQVRIIiwicHJvY2VzcyIsImV4ZWNQYXRoIiwiY3dkIiwiZXJyIiwic3Rkb3V0Iiwic3RkZXJyIiwicnVuRXJyIiwiT2JqZWN0IiwiYXNzaWduIiwib3JpZ2luYWxNZXNzYWdlIiwibWVzc2FnZSIsInRyaW0iLCJjb21tYW5kIiwicnVuQXBwaXVtIiwiXyIsImN1cnJ5IiwicnVuQXBwaXVtUmF3IiwicnVuQXBwaXVtSnNvbiIsImluY2x1ZGVzIiwicHVzaCIsInJlc3VsdCIsIkpTT04iLCJwYXJzZSIsImluc3RhbGxMb2NhbEV4dGVuc2lvbiIsInR5cGUiLCJwYXRoVG9FeHRlbnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS08sTUFBTUEsVUFBVSxHQUFHQyxjQUFLQyxJQUFMLENBQ3hCQyxxQkFEd0IsRUFFeEIsVUFGd0IsRUFHeEIsUUFId0IsRUFJeEIsT0FKd0IsRUFLeEIsS0FMd0IsRUFNeEIsU0FOd0IsQ0FBbkI7Ozs7QUFpQlAsZUFBZUMsR0FBZixDQUFvQkMsVUFBcEIsRUFBZ0NDLElBQWhDLEVBQXNDO0FBQ3BDLFFBQU1DLEdBQUcsR0FBRztBQUNWQyxJQUFBQSxXQUFXLEVBQUVILFVBREg7QUFFVkksSUFBQUEsSUFBSSxFQUFFQyxPQUFPLENBQUNILEdBQVIsQ0FBWUU7QUFGUixHQUFaOztBQUlBLE1BQUk7QUFJRixXQUFPLE1BQU0sd0JBQUtDLE9BQU8sQ0FBQ0MsUUFBYixFQUF1QixDQUFDWCxVQUFELEVBQWEsR0FBR00sSUFBaEIsQ0FBdkIsRUFBOEM7QUFDekRNLE1BQUFBLEdBQUcsRUFBRVQscUJBRG9EO0FBRXpESSxNQUFBQTtBQUZ5RCxLQUE5QyxDQUFiO0FBSUQsR0FSRCxDQVFFLE9BQU9NLEdBQVAsRUFBWTtBQUNaLFVBQU07QUFBQ0MsTUFBQUEsTUFBRDtBQUFTQyxNQUFBQTtBQUFULFFBQXVERixHQUE3RDtBQUlBLFVBQU1HLE1BQU0sR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQ2JMLEdBRGEsRUFFYjtBQUNFTSxNQUFBQSxlQUFlLEVBQUVOLEdBQUcsQ0FBQ08sT0FEdkI7QUFFRUEsTUFBQUEsT0FBTyxFQUFHLEdBQUVOLE1BQU0sQ0FBQ08sSUFBUCxFQUFjLE9BQU1OLE1BQU0sQ0FBQ00sSUFBUCxFQUFjLEVBRmhEO0FBR0VDLE1BQUFBLE9BQU8sRUFBRyxHQUFFWixPQUFPLENBQUNDLFFBQVMsSUFBR1gsVUFBVyxJQUFHTSxJQUFJLENBQUNKLElBQUwsQ0FBVSxHQUFWLENBQWUsRUFIL0Q7QUFJRUssTUFBQUEsR0FKRjtBQUtFSyxNQUFBQSxHQUFHLEVBQUVUO0FBTFAsS0FGYSxDQUFmO0FBU0EsVUFBTWEsTUFBTjtBQUNEO0FBQ0Y7O0FBT00sTUFBTU8sU0FBUyxHQUFHQyxnQkFBRUMsS0FBRixDQU12QixPQUFPcEIsVUFBUCxFQUFtQkMsSUFBbkIsS0FBNEI7QUFDMUIsUUFBTTtBQUFDUSxJQUFBQTtBQUFELE1BQVcsTUFBTVYsR0FBRyxDQUFDQyxVQUFELEVBQWFDLElBQWIsQ0FBMUI7QUFDQSxTQUFPUSxNQUFQO0FBQ0QsQ0FUc0IsQ0FBbEI7Ozs7QUFnQkEsTUFBTVksWUFBWSxHQUFHRixnQkFBRUMsS0FBRixDQU0xQixPQUFPcEIsVUFBUCxFQUFtQkMsSUFBbkIsS0FBNEIsTUFBTUYsR0FBRyxDQUFDQyxVQUFELEVBQWFDLElBQWIsQ0FOWCxDQUFyQjs7OztBQWFBLE1BQU1xQixhQUFhLEdBQUdILGdCQUFFQyxLQUFGLENBTTNCLE9BQU9wQixVQUFQLEVBQW1CQyxJQUFuQixLQUE0QjtBQUMxQixNQUFJLENBQUNBLElBQUksQ0FBQ3NCLFFBQUwsQ0FBYyxRQUFkLENBQUwsRUFBOEI7QUFDNUJ0QixJQUFBQSxJQUFJLENBQUN1QixJQUFMLENBQVUsUUFBVjtBQUNEOztBQUNELFFBQU1DLE1BQU0sR0FBRyxNQUFNUCxTQUFTLENBQUNsQixVQUFELEVBQWFDLElBQWIsQ0FBOUI7O0FBQ0EsTUFBSTtBQUNGLFdBQU95QixJQUFJLENBQUNDLEtBQUwsQ0FBV0YsTUFBWCxDQUFQO0FBQ0QsR0FGRCxDQUVFLE9BQU9qQixHQUFQLEVBQVk7QUFDWkEsSUFBQUEsR0FBRyxDQUFDTyxPQUFKLEdBQWUsMkNBQTBDVSxNQUFPLEVBQWhFO0FBQ0EsVUFBTWpCLEdBQU47QUFDRDtBQUNGLENBakIwQixDQUF0Qjs7OztBQXVCQSxNQUFNb0IscUJBQXFCLEdBQUdULGdCQUFFQyxLQUFGLENBT25DLE9BQU9wQixVQUFQLEVBQW1CNkIsSUFBbkIsRUFBeUJDLGVBQXpCLEtBQ0UsTUFBTVIsYUFBYSxDQUFDdEIsVUFBRCxFQUFhLENBQzlCNkIsSUFEOEIsRUFFOUIsU0FGOEIsRUFHOUIsVUFIOEIsRUFJOUIsT0FKOEIsRUFLOUJDLGVBTDhCLENBQWIsQ0FSYyxDQUE5QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtleGVjfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHtQUk9KRUNUX1JPT1R9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbi8qKlxuICogUGF0aCB0byB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZS4gU29ydCBvZi5cbiAqL1xuZXhwb3J0IGNvbnN0IEVYRUNVVEFCTEUgPSBwYXRoLmpvaW4oXG4gIFBST0pFQ1RfUk9PVCxcbiAgJ3BhY2thZ2VzJyxcbiAgJ2FwcGl1bScsXG4gICdidWlsZCcsXG4gICdsaWInLFxuICAnbWFpbi5qcycsXG4pO1xuXG4vKipcbiAqIFJ1bnMgdGhlIGBhcHBpdW1gIGV4ZWN1dGFibGUgd2l0aCB0aGUgZ2l2ZW4gYXJncy5cbiAqXG4gKiBJZiB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uemVybyBjb2RlLCB0aGUgZXJyb3Igd2lsbCBiZSBhXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZSAtIFBhdGggdG8gYEFQUElVTV9IT01FYFxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICogQHJldHVybnMge1Byb21pc2U8VGVlblByb2Nlc3NFeGVjUmVzdWx0Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuIChhcHBpdW1Ib21lLCBhcmdzKSB7XG4gIGNvbnN0IGVudiA9IHtcbiAgICBBUFBJVU1fSE9NRTogYXBwaXVtSG9tZSxcbiAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICB9O1xuICB0cnkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtUZWVuUHJvY2Vzc0V4ZWNSZXN1bHR9XG4gICAgICovXG4gICAgcmV0dXJuIGF3YWl0IGV4ZWMocHJvY2Vzcy5leGVjUGF0aCwgW0VYRUNVVEFCTEUsIC4uLmFyZ3NdLCB7XG4gICAgICBjd2Q6IFBST0pFQ1RfUk9PVCxcbiAgICAgIGVudixcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IC8qKiBAdHlwZSB7VGVlblByb2Nlc3NFeGVjRXJyb3J9ICovKGVycik7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0FwcGl1bVJ1bkVycm9yfVxuICAgICAqL1xuICAgIGNvbnN0IHJ1bkVyciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIG9yaWdpbmFsTWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgIG1lc3NhZ2U6IGAke3N0ZG91dC50cmltKCl9XFxuXFxuJHtzdGRlcnIudHJpbSgpfWAsXG4gICAgICAgIGNvbW1hbmQ6IGAke3Byb2Nlc3MuZXhlY1BhdGh9ICR7RVhFQ1VUQUJMRX0gJHthcmdzLmpvaW4oJyAnKX1gLFxuICAgICAgICBlbnYsXG4gICAgICAgIGN3ZDogUFJPSkVDVF9ST09ULFxuICAgICAgfSk7XG4gICAgdGhyb3cgcnVuRXJyO1xuICB9XG59XG5cbi8qKlxuICogUnVucyB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZSB3aXRoIHRoZSBnaXZlbiBhcmdzIGFuZCByZXR1cm5zIGNvbnRlbnRzIG9mIGBTVERPVVRgLlxuICpcbiAqIERvIG5vdCB1c2UgdGhpcyB3aGVuIHRlc3RpbmcgZXJyb3Igb3V0cHV0LCBhcyBpdCB3aWxsIGxpa2VseSBiZSBpbiBgU1RERVJSYC4gVXNlIHtAbGluayBydW5BcHBpdW1SYXd9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW0gPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWUgLSBQYXRoIHRvIGBBUFBJVU1fSE9NRWBcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBDb250ZW50cyBvZiBgYFNURE9VVGBgXG4gICAqL1xuICBhc3luYyAoYXBwaXVtSG9tZSwgYXJncykgPT4ge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgcnVuKGFwcGl1bUhvbWUsIGFyZ3MpO1xuICAgIHJldHVybiBzdGRvdXQ7XG4gIH0sXG4pO1xuXG4vKipcbiAqIFJ1bnMgdGhlIGBhcHBpdW1gIGV4ZWN1dGFibGUgd2l0aCB0aGUgZ2l2ZW4gYXJncyBhbmQgcmV0dXJucyB0aGUgZW50aXJlXG4gKiB7QGxpbmsgVGVlblByb2Nlc3NFeGVjUmVzdWx0fSBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW1SYXcgPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWUgLSBQYXRoIHRvIGBBUFBJVU1fSE9NRWBcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUZWVuUHJvY2Vzc0V4ZWNSZXN1bHQ+fSBSYXcgcmVzdWx0IG9mIGBleGVjYFxuICAgKi9cbiAgYXN5bmMgKGFwcGl1bUhvbWUsIGFyZ3MpID0+IGF3YWl0IHJ1bihhcHBpdW1Ib21lLCBhcmdzKSxcbik7XG5cbi8qKlxuICogUnVucyB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZSB3aXRoIHRoZSBnaXZlbiBhcmdzIGluIEpTT04gbW9kZS5cbiAqIFdpbGwgcmVqZWN0IHdpdGggdGhlIGNvbnRlbnRzIG9mIGBTVERPVVRgICh3aGljaCB3ZXJlIHRvIGJlIHBhc3JlZCkgaWYgcGFyc2luZyBpbnRvIEpTT04gZmFpbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW1Kc29uID0gXy5jdXJyeShcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gUGF0aCB0byBgQVBQSVVNX0hPTUVgXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MgLSBBcmdzLCBpbmNsdWRpbmcgY29tbWFuZHNcbiAgICogQHJldHVybnMge1Byb21pc2U8VGVlblByb2Nlc3NFeGVjUmVzdWx0Pn0gUmF3IHJlc3VsdCBvZiBgZXhlY2BcbiAgICovXG4gIGFzeW5jIChhcHBpdW1Ib21lLCBhcmdzKSA9PiB7XG4gICAgaWYgKCFhcmdzLmluY2x1ZGVzKCctLWpzb24nKSkge1xuICAgICAgYXJncy5wdXNoKCctLWpzb24nKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuQXBwaXVtKGFwcGl1bUhvbWUsIGFyZ3MpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgRXJyb3IgcGFyc2luZyBKU09OLiBDb250ZW50cyBvZiBTVERPVVQ6ICR7cmVzdWx0fWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9LFxuKTtcblxuLyoqXG4gKiBHaXZlbiBhIHBhdGggdG8gYSBsb2NhbCBleHRlbnNpb24sIGluc3RhbGwgaXQgaW50byBgQVBQSVVNX0hPTUVgIHZpYSBDTEkuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnN0YWxsTG9jYWxFeHRlbnNpb24gPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWVcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2xpYi9leHQtY29uZmlnLWlvJykuRXh0ZW5zaW9uVHlwZX0gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFRvRXh0ZW5zaW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG9iamVjdD59XG4gICAqL1xuICBhc3luYyAoYXBwaXVtSG9tZSwgdHlwZSwgcGF0aFRvRXh0ZW5zaW9uKSA9PlxuICAgIGF3YWl0IHJ1bkFwcGl1bUpzb24oYXBwaXVtSG9tZSwgW1xuICAgICAgdHlwZSxcbiAgICAgICdpbnN0YWxsJyxcbiAgICAgICctLXNvdXJjZScsXG4gICAgICAnbG9jYWwnLFxuICAgICAgcGF0aFRvRXh0ZW5zaW9uLFxuICAgIF0pLFxuKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcnVuQXBwaXVtfS5cbiAqIEBwcml2YXRlXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSdW5BcHBpdW1PcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyYXddIC0gV2hldGhlciB0byByZXR1cm4gdGhlIHJhdyBvdXRwdXQgZnJvbSBgdGVlbl9wcm9jZXNzYFxuICovXG5cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gYnkgYWxsIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHdoaWNoIGV4ZWN1dGUgYGFwcGl1bWAuXG4gKiBAdHlwZWRlZiB7RXJyb3IgJiBBcHBpdW1SdW5FcnJvclByb3BzICYgaW1wb3J0KCcuLi8uLi9saWIvY2xpL25wbScpLlRlZW5Qcm9jZXNzRXhlY0Vycm9yUHJvcHN9IEFwcGl1bVJ1bkVycm9yXG4gKi9cblxuLyoqXG4gKiBXcmFwcyB0aGUgZXJyb3IgcmV0dXJuZWQgYnkge0BsaW5rIGV4ZWN9LlxuICogQHR5cGVkZWYge09iamVjdH0gQXBwaXVtUnVuRXJyb3JQcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IG9yaWdpbmFsTWVzc2FnZSAtIE9yaWdpbmFsIGVycm9yIG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb21tYW5kIC0gQ29tbWFuZCB0aGF0IHdhcyBydW5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBlbnYgLSBFbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjd2QgLSBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5XG4gKi9cbiJdLCJmaWxlIjoidGVzdC9jbGkvY2xpLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
package/lib/appium.js CHANGED
@@ -216,6 +216,12 @@ class AppiumDriver extends BaseDriver {
216
216
 
217
217
  // This assignment is required for correct web sockets functionality inside the driver
218
218
  driverInstance.server = this.server;
219
+
220
+ // Drivers/plugins might also want to know where they are hosted
221
+ driverInstance.serverHost = this.args.address;
222
+ driverInstance.serverPort = this.args.port;
223
+ driverInstance.serverPath = this.args.basePath;
224
+
219
225
  try {
220
226
  runningDriversData = await this.curSessionDataForDriver(InnerDriver);
221
227
  } catch (e) {
package/lib/cli/npm.js CHANGED
@@ -1,3 +1,5 @@
1
+ // @ts-check
2
+
1
3
  import path from 'path';
2
4
  import semver from 'semver';
3
5
  import { exec } from 'teen_process';
@@ -8,10 +10,23 @@ const LINK_LOCKFILE = '.appium.link.lock';
8
10
 
9
11
  export default class NPM {
10
12
 
13
+ /**
14
+ * @param {string} appiumHome
15
+ */
11
16
  constructor (appiumHome) {
17
+ /** @type {string} */
12
18
  this.appiumHome = appiumHome;
13
19
  }
14
20
 
21
+ /**
22
+ * Execute `npm` with given args.
23
+ *
24
+ * If the process exits with a nonzero code, the contents of `STDOUT` and `STDERR` will be in the
25
+ * `message` of the {@link TeenProcessExecError} rejected.
26
+ * @param {string} cmd
27
+ * @param {string[]} args
28
+ * @param {{ json?: boolean; cwd?: string; lockFile?: string; }} opts
29
+ */
15
30
  async exec (cmd, args, opts, execOpts = {}) {
16
31
  let { cwd, json, lockFile } = opts;
17
32
  if (!cwd) {
@@ -33,7 +48,7 @@ export default class NPM {
33
48
 
34
49
  args.unshift(cmd);
35
50
  if (json) {
36
- args.push('-json');
51
+ args.push('--json');
37
52
  }
38
53
  const npmCmd = system.isWindows() ? 'npm.cmd' : 'npm';
39
54
  let runner = async () => await exec(npmCmd, args, execOpts);
@@ -42,27 +57,38 @@ export default class NPM {
42
57
  const _runner = runner;
43
58
  runner = async () => await acquireLock(_runner);
44
59
  }
45
- const {stdout, stderr, code} = await runner();
46
- const ret = {stdout, stderr, code, json: null};
47
60
 
48
- if (json) {
61
+ let ret;
62
+ try {
63
+ const {stdout, stderr, code} = await runner();
64
+ ret = /** @type {TeenProcessExecResult} */({stdout, stderr, code});
49
65
  // if possible, parse NPM's json output. During NPM install 3rd-party
50
66
  // packages can write to stdout, so sometimes the json output can't be
51
67
  // guaranteed to be parseable
52
68
  try {
53
69
  ret.json = JSON.parse(stdout);
54
70
  } catch (ign) {}
71
+ } catch (e) {
72
+ const {stdout, stderr, code} = /** @type {TeenProcessExecError} */(e);
73
+ const err = new Error(`npm command '${cmd} ${args.join(' ')}' failed with code ${code}.\n\nSTDOUT:\n${stdout.trim()}\n\nSTDERR:\n${stderr.trim()}`);
74
+ throw err;
55
75
  }
56
-
57
76
  return ret;
58
77
  }
59
78
 
79
+ /**
80
+ * @param {string} pkg
81
+ */
60
82
  async getLatestVersion (pkg) {
61
83
  return (await this.exec('view', [pkg, 'dist-tags'], {
62
84
  json: true
63
- })).json.latest;
85
+ })).json?.latest;
64
86
  }
65
87
 
88
+ /**
89
+ * @param {string} pkg
90
+ * @param {string} curVersion
91
+ */
66
92
  async getLatestSafeUpgradeVersion (pkg, curVersion) {
67
93
  const allVersions = (await this.exec('view', [pkg, 'versions'], {
68
94
  json: true
@@ -115,6 +141,11 @@ export default class NPM {
115
141
  return safeUpgradeVer;
116
142
  }
117
143
 
144
+ /**
145
+ *
146
+ * @param {{pkgDir: string, pkgName: string, pkgVer?: string}} param0
147
+ * @returns {Promise<import('type-fest').PackageJson>}
148
+ */
118
149
  async installPackage ({pkgDir, pkgName, pkgVer}) {
119
150
  const res = await this.exec('install', [
120
151
  '--no-save',
@@ -148,6 +179,9 @@ export default class NPM {
148
179
  }
149
180
  }
150
181
 
182
+ /**
183
+ * @param {string} pkgPath
184
+ */
151
185
  async linkPackage (pkgPath) {
152
186
  // from the path alone we don't know the npm package name, so we need to
153
187
  // look in package.json
@@ -180,6 +214,10 @@ export default class NPM {
180
214
  }
181
215
  }
182
216
 
217
+ /**
218
+ * @param {string} pkgDir
219
+ * @param {string} pkg
220
+ */
183
221
  async uninstallPackage (pkgDir, pkg) {
184
222
  await this.exec('uninstall', [pkg], {
185
223
  cwd: pkgDir,
@@ -187,3 +225,27 @@ export default class NPM {
187
225
  });
188
226
  }
189
227
  }
228
+
229
+
230
+ /**
231
+ * Result from a non-zero-exit execution of `appium`
232
+ * @typedef {Object} TeenProcessExecResult
233
+ * @property {string} stdout - Stdout
234
+ * @property {string} stderr - Stderr
235
+ * @property {number?} code - Exit code
236
+ * @property {any} json - JSON parsed from stdout
237
+ */
238
+
239
+ /**
240
+ * Extra props `teen_process.exec` adds to its error objects
241
+ * @typedef {Object} TeenProcessExecErrorProps
242
+ * @property {string} stdout - STDOUT
243
+ * @property {string} stderr - STDERR
244
+ * @property {number?} code - Exit code
245
+ */
246
+
247
+
248
+ /**
249
+ * Error thrown by `teen_process.exec`
250
+ * @typedef {Error & TeenProcessExecErrorProps} TeenProcessExecError
251
+ */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium",
3
- "version": "2.0.0-beta.22",
3
+ "version": "2.0.0-beta.23",
4
4
  "description": "Automation for Apps.",
5
5
  "keywords": [
6
6
  "automation",
@@ -43,12 +43,12 @@
43
43
  "zip-and-upload": "npm run zip && npm run upload"
44
44
  },
45
45
  "dependencies": {
46
- "@appium/base-driver": "^8.2.1",
46
+ "@appium/base-driver": "^8.2.2",
47
47
  "@appium/base-plugin": "1.8.0",
48
48
  "@appium/support": "^2.55.2",
49
49
  "@babel/runtime": "7.16.3",
50
50
  "@sidvind/better-ajv-errors": "0.9.2",
51
- "ajv": "8.8.1",
51
+ "ajv": "8.8.2",
52
52
  "ajv-formats": "2.1.1",
53
53
  "argparse": "2.0.1",
54
54
  "async-lock": "1.3.0",
@@ -79,5 +79,5 @@
79
79
  "tag": "next"
80
80
  },
81
81
  "homepage": "https://appium.io",
82
- "gitHead": "e36a70105880b845e99e2c8a958403f6253f45b6"
82
+ "gitHead": "280d409df6c02d36b4ffc4d02a95ab3f4649b08c"
83
83
  }