verdaccio 5.3.2 → 5.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/CODE_OF_CONDUCT.md +10 -10
  3. package/CONTRIBUTING.md +28 -27
  4. package/README.md +6 -5
  5. package/SECURITY.md +8 -9
  6. package/build/api/debug/index.js +1 -1
  7. package/build/api/endpoint/api/dist-tags.js +4 -4
  8. package/build/api/endpoint/api/package.js +3 -3
  9. package/build/api/endpoint/api/ping.js +1 -1
  10. package/build/api/endpoint/api/publish.js +11 -11
  11. package/build/api/endpoint/api/star.js +5 -5
  12. package/build/api/endpoint/api/stars.js +1 -1
  13. package/build/api/endpoint/api/user.js +19 -9
  14. package/build/api/endpoint/api/v1/index.js +26 -0
  15. package/build/api/endpoint/api/v1/profile.js +13 -5
  16. package/build/api/endpoint/api/v1/search.js +4 -4
  17. package/build/api/endpoint/api/v1/token.js +20 -11
  18. package/build/api/endpoint/api/whoami.js +1 -1
  19. package/build/api/endpoint/index.js +11 -14
  20. package/build/api/index.js +23 -17
  21. package/build/api/middleware.js +6 -6
  22. package/build/api/rate-limiter.js +24 -0
  23. package/build/api/web/api.js +6 -18
  24. package/build/api/web/endpoint/index.js +51 -0
  25. package/build/api/web/endpoint/package.js +16 -11
  26. package/build/api/web/endpoint/search.js +9 -3
  27. package/build/api/web/endpoint/user.js +11 -5
  28. package/build/api/web/html/renderHTML.js +13 -9
  29. package/build/api/web/html/template.js +1 -1
  30. package/build/api/web/index.js +14 -11
  31. package/build/config/env.js +1 -1
  32. package/build/index.js +1 -1
  33. package/build/lib/auth-utils.js +15 -8
  34. package/build/lib/auth.js +7 -17
  35. package/build/lib/bootstrap.js +8 -8
  36. package/build/lib/cli/cli.js +3 -3
  37. package/build/lib/cli/commands/info.js +3 -3
  38. package/build/lib/cli/commands/init.js +3 -3
  39. package/build/lib/cli/commands/version.js +1 -1
  40. package/build/lib/cli/utils.js +3 -3
  41. package/build/lib/config-path.js +3 -3
  42. package/build/lib/config-utils.js +3 -3
  43. package/build/lib/config.js +16 -31
  44. package/build/lib/constants.js +5 -4
  45. package/build/lib/crypto-utils.js +3 -3
  46. package/build/lib/local-storage.js +7 -15
  47. package/build/lib/logger/formatter/index.js +1 -1
  48. package/build/lib/logger/formatter/prettifier.js +3 -3
  49. package/build/lib/logger/levels.js +1 -1
  50. package/build/lib/logger/logger.js +10 -6
  51. package/build/lib/logger/utils.js +1 -1
  52. package/build/lib/metadata-utils.js +3 -3
  53. package/build/lib/notify/index.js +3 -3
  54. package/build/lib/notify/notify-request.js +5 -5
  55. package/build/lib/plugin-loader.js +4 -4
  56. package/build/lib/search.js +2 -6
  57. package/build/lib/storage-utils.js +3 -3
  58. package/build/lib/storage.js +10 -22
  59. package/build/lib/up-storage.js +14 -45
  60. package/build/lib/uplink-util.js +1 -1
  61. package/build/lib/utils.js +32 -14
  62. package/build/utils/user.js +1 -1
  63. package/conf/README.md +3 -3
  64. package/conf/default.yaml +3 -1
  65. package/conf/docker.yaml +3 -1
  66. package/eslintrc.js +92 -92
  67. package/index.js +1 -1
  68. package/package.json +66 -59
  69. package/prettier.config.js +15 -0
  70. package/tsconfig.json +3 -10
  71. package/yarn-plugins/plugin-postinstall.js +10 -10
@@ -7,25 +7,25 @@ exports.default = _default;
7
7
  exports.loadTheme = loadTheme;
8
8
  exports.validatePrimaryColor = validatePrimaryColor;
9
9
 
10
- var _fs = _interopRequireDefault(require("fs"));
11
-
12
- var _path = _interopRequireDefault(require("path"));
13
-
14
- var _lodash = _interopRequireDefault(require("lodash"));
10
+ var _debug = _interopRequireDefault(require("debug"));
15
11
 
16
12
  var _express = _interopRequireDefault(require("express"));
17
13
 
18
- var _debug = _interopRequireDefault(require("debug"));
14
+ var _fs = _interopRequireDefault(require("fs"));
19
15
 
20
- var _search = _interopRequireDefault(require("../../lib/search"));
16
+ var _lodash = _interopRequireDefault(require("lodash"));
17
+
18
+ var _path = _interopRequireDefault(require("path"));
21
19
 
22
20
  var _constants = require("../../lib/constants");
23
21
 
22
+ var _logger = require("../../lib/logger");
23
+
24
24
  var _pluginLoader = _interopRequireDefault(require("../../lib/plugin-loader"));
25
25
 
26
- var _utils = require("../../lib/utils");
26
+ var _search = _interopRequireDefault(require("../../lib/search"));
27
27
 
28
- var _logger = require("../../lib/logger");
28
+ var _utils = require("../../lib/utils");
29
29
 
30
30
  var _renderHTML = _interopRequireDefault(require("./html/renderHTML"));
31
31
 
@@ -83,7 +83,9 @@ function _default(config, auth, storage) {
83
83
  /* eslint new-cap:off */
84
84
 
85
85
 
86
- const router = _express.default.Router();
86
+ const router = _express.default.Router(); // run in production mode by default, just in case
87
+ // it shouldn't make any difference anyway
88
+
87
89
 
88
90
  router.use(auth.webUIJWTmiddleware());
89
91
  router.use(setSecurityWebHeaders); // static assets
@@ -107,6 +109,7 @@ function _default(config, auth, storage) {
107
109
  // Use POSIX version `path.posix.join` instead.
108
110
  config.web.logo = _path.default.posix.join('/-/static/', _path.default.basename(config.web.logo));
109
111
  router.get(config.web.logo, function (_req, res, next) {
112
+ // @ts-ignore
110
113
  debug('serve custom logo web:%s - local:%s', config.web.logo, absoluteLocalFile);
111
114
  res.sendFile(absoluteLocalFile, sendFileCallback(next));
112
115
  });
@@ -133,4 +136,4 @@ function _default(config, auth, storage) {
133
136
  });
134
137
  return router;
135
138
  }
136
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvd2ViL2luZGV4LnRzIl0sIm5hbWVzIjpbInNldFNlY3VyaXR5V2ViSGVhZGVycyIsInJlcXVpcmUiLCJkZWJ1ZyIsImxvYWRUaGVtZSIsImNvbmZpZyIsIl8iLCJpc05pbCIsInRoZW1lIiwiaGVhZCIsInBsdWdpbiIsInN0YXRpY1BhdGgiLCJtYW5pZmVzdCIsIm1hbmlmZXN0RmlsZXMiLCJ2YWxpZGF0ZVByaW1hcnlDb2xvciIsInByaW1hcnlDb2xvciIsImlzSGV4IiwidGVzdCIsInNlbmRGaWxlQ2FsbGJhY2siLCJuZXh0IiwiZXJyIiwic3RhdHVzIiwiSFRUUF9TVEFUVVMiLCJOT1RfRk9VTkQiLCJhdXRoIiwic3RvcmFnZSIsIlNlYXJjaCIsImNvbmZpZ3VyZVN0b3JhZ2UiLCJyb3V0ZXIiLCJleHByZXNzIiwiUm91dGVyIiwidXNlIiwid2ViVUlKV1RtaWRkbGV3YXJlIiwiZ2V0IiwicmVxIiwicmVzIiwiZmlsZW5hbWUiLCJwYXJhbXMiLCJmaWxlIiwic2VuZEZpbGUiLCJ3ZWIiLCJsb2dvIiwiYWJzb2x1dGVMb2NhbEZpbGUiLCJwYXRoIiwicG9zaXgiLCJyZXNvbHZlIiwiZnMiLCJleGlzdHNTeW5jIiwiYWNjZXNzU3luYyIsImNvbnN0YW50cyIsIlJfT0siLCJqb2luIiwiYmFzZW5hbWUiLCJfcmVxIiwidW5kZWZpbmVkIiwibG9nZ2VyIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBNEJDLE9BQU8sQ0FBQyxlQUFELENBQXpDOztBQUVBLE1BQU1DLEtBQUssR0FBRyxvQkFBVyxXQUFYLENBQWQ7O0FBRU8sU0FBU0MsU0FBVCxDQUFtQkMsTUFBbkIsRUFBMkI7QUFDaEMsTUFBSUMsZ0JBQUVDLEtBQUYsQ0FBUUYsTUFBTSxDQUFD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WCxFQUFtQk8sUUFBbkIsRUFBNkJDLGFBQTdCLEVBQTRDcUIsR0FBNUMsRUFBaURDLEdBQWpEO0FBQ0FoQyxJQUFBQSxLQUFLLENBQUMscUJBQUQsQ0FBTDtBQUNELEdBSEQ7QUFLQXlCLEVBQUFBLE1BQU0sQ0FBQ0ssR0FBUCxDQUFXLEdBQVgsRUFBZ0IsVUFBVUMsR0FBVixFQUFlQyxHQUFmLEVBQW9CaEIsSUFBcEIsRUFBMEI7QUFDeEMsNkJBQVdkLE1BQVgsRUFBbUJPLFFBQW5CLEVBQTZCQyxhQUE3QixFQUE0Q3FCLEdBQTVDLEVBQWlEQyxHQUFqRDtBQUNBaEMsSUFBQUEsS0FBSyxDQUFDLGFBQUQsQ0FBTDtBQUNELEdBSEQ7QUFLQSxTQUFPeUIsTUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5cbmltcG9ydCBTZWFyY2ggZnJvbSAnLi4vLi4vbGliL3NlYXJjaCc7XG5pbXBvcnQgeyBIVFRQX1NUQVRVUyB9IGZyb20gJy4uLy4uL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IGxvYWRQbHVnaW4gZnJvbSAnLi4vLi4vbGliL3BsdWdpbi1sb2FkZXInO1xuaW1wb3J0IHsgaXNIVFRQUHJvdG9jb2wgfSBmcm9tICcuLi8uLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vbGliL2xvZ2dlcic7XG5pbXBvcnQgcmVuZGVySFRNTCBmcm9tICcuL2h0bWwvcmVuZGVySFRNTCc7XG5cbmNvbnN0IHsgc2V0U2VjdXJpdHlXZWJIZWFkZXJzIH0gPSByZXF1aXJlKCcuLi9taWRkbGV3YXJlJyk7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkVGhlbWUoY29uZmlnKSB7XG4gIGlmIChfLmlzTmlsKGNvbmZpZy50aGVtZSkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIF8uaGVhZChcbiAgICAgIGxvYWRQbHVnaW4oXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgY29uZmlnLnRoZW1lLFxuICAgICAgICB7fSxcbiAgICAgICAgZnVuY3Rpb24gKHBsdWdpbikge1xuICAgICAgICAgIHJldHVybiBwbHVnaW4uc3RhdGljUGF0aCAmJiBwbHVnaW4ubWFuaWZlc3QgJiYgcGx1Z2luLm1hbmlmZXN0RmlsZXM7XG4gICAgICAgIH0sXG4gICAgICAgICd2ZXJkYWNjaW8tdGhlbWUnXG4gICAgICApXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQcmltYXJ5Q29sb3IocHJpbWFyeUNvbG9yKSB7XG4gIGNvbnN0IGlzSGV4ID0gL14jKyhbYS1mQS1GMC05XXs2fXxbYS1mQS1GMC05XXszfSkkL2kudGVzdChwcmltYXJ5Q29sb3IpO1xuICBpZiAoIWlzSGV4KSB7XG4gICAgZGVidWcoJ2ludmFsaWQgcHJpbWFyeSBjb2xvciAlbycsIHByaW1hcnlDb2xvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHByaW1hcnlDb2xvcjtcbn1cblxuY29uc3Qgc2VuZEZpbGVDYWxsYmFjayA9IChuZXh0KSA9PiAoZXJyKSA9PiB7XG4gIGlmICghZXJyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChlcnIuc3RhdHVzID09PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICBuZXh0KCk7XG4gIH0gZWxzZSB7XG4gICAgbmV4dChlcnIpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoY29uZmlnLCBhdXRoLCBzdG9yYWdlKSB7XG4gIGxldCB7IHN0YXRpY1BhdGgsIG1hbmlmZXN0LCBtYW5pZmVzdEZpbGVzIH0gPSBsb2FkVGhlbWUoY29uZmlnKSB8fCByZXF1aXJlKCdAdmVyZGFjY2lvL3VpLXRoZW1lJykoKTtcbiAgZGVidWcoJ3N0YXRpYyBwYXRoICVvJywgc3RhdGljUGF0aCk7XG4gIFNlYXJjaC5jb25maWd1cmVTdG9yYWdlKHN0b3JhZ2UpO1xuXG4gIC8qIGVzbGludCBuZXctY2FwOm9mZiAqL1xuICBjb25zdCByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICByb3V0ZXIudXNlKGF1dGgud2ViVUlKV1RtaWRkbGV3YXJlKCkpO1xuICByb3V0ZXIudXNlKHNldFNlY3VyaXR5V2ViSGVhZGVycyk7XG5cbiAgLy8gc3RhdGljIGFzc2V0c1xuICByb3V0ZXIuZ2V0KCcvLS9zdGF0aWMvKicsIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gcmVxLnBhcmFtc1swXTtcbiAgICBjb25zdCBmaWxlID0gYCR7c3RhdGljUGF0aH0vJHtmaWxlbmFtZX1gO1xuICAgIGRlYnVnKCdyZW5kZXIgc3RhdGljIGZpbGUgJW8nLCBmaWxlKTtcbiAgICByZXMuc2VuZEZpbGUoZmlsZSwgc2VuZEZpbGVDYWxsYmFjayhuZXh0KSk7XG4gIH0pO1xuXG4gIC8vIGxvZ29cbiAgaWYgKGNvbmZpZz8ud2ViPy5sb2dvICYmICFpc0hUVFBQcm90b2NvbChjb25maWc/LndlYj8ubG9nbykpIHtcbiAgICAvLyBVUkkgcmVsYXRlZCB0byBhIGxvY2FsIGZpbGVcbiAgICBjb25zdCBhYnNvbHV0ZUxvY2FsRmlsZSA9IHBhdGgucG9zaXgucmVzb2x2ZShjb25maWcud2ViLmxvZ28pO1xuICAgIGRlYnVnKCdzZXJ2ZSBsb2NhbCBsb2dvICVzJywgYWJzb2x1dGVMb2NhbEZpbGUpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhhYnNvbHV0ZUxvY2FsRmlsZSkgJiYgdHlwZW9mIGZzLmFjY2Vzc1N5bmMoYWJzb2x1dGVMb2NhbEZpbGUsIGZzLmNvbnN0YW50cy5SX09LKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gTm90ZTogYHBhdGguam9pbmAgd2lsbCBicmVhayBvbiBXaW5kb3dzLCBiZWNhdXNlIGl0IHRyYW5zZm9ybXMgYC9gIHRvIGBcXGBcbiAgICAgICAgLy8gVXNlIFBPU0lYIHZlcnNpb24gYHBhdGgucG9zaXguam9pbmAgaW5zdGVhZC5cbiAgICAgICAgY29uZmlnLndlYi5sb2dvID0gcGF0aC5wb3NpeC5qb2luKCcvLS9zdGF0aWMvJywgcGF0aC5iYXNlbmFtZShjb25maWcud2ViLmxvZ28pKTtcbiAgICAgICAgcm91dGVyLmdldChjb25maWcud2ViLmxvZ28sIGZ1bmN0aW9uIChfcmVxLCByZXMsIG5leHQpIHtcbiAgICAgICAgICBkZWJ1Zygnc2VydmUgY3VzdG9tIGxvZ28gIHdlYjolcyAtIGxvY2FsOiVzJywgY29uZmlnLndlYi5sb2dvLCBhYnNvbHV0ZUxvY2FsRmlsZSk7XG4gICAgICAgICAgcmVzLnNlbmRGaWxlKGFic29sdXRlTG9jYWxGaWxlLCBzZW5kRmlsZUNhbGxiYWNrKG5leHQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRlYnVnKCdlbmFibGVkIGN1c3RvbSBsb2dvICVzJywgY29uZmlnLndlYi5sb2dvKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmZpZy53ZWIubG9nbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgbG9nZ2VyLndhcm4oYHdlYiBsb2dvIGlzIHdyb25nLCBwYXRoICR7YWJzb2x1dGVMb2NhbEZpbGV9IGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFkYWJsZWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgY29uZmlnLndlYi5sb2dvID0gdW5kZWZpbmVkO1xuICAgICAgbG9nZ2VyLndhcm4oYHdlYiBsb2dvIGlzIHdyb25nLCBwYXRoICR7YWJzb2x1dGVMb2NhbEZpbGV9IGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFkYWJsZWApO1xuICAgIH1cbiAgfVxuXG4gIHJvdXRlci5nZXQoJy8tL3dlYi86c2VjdGlvbi8qJywgZnVuY3Rpb24gKHJlcSwgcmVzKSB7XG4gICAgcmVuZGVySFRNTChjb25maWcsIG1hbmlmZXN0LCBtYW5pZmVzdEZpbGVzLCByZXEsIHJlcyk7XG4gICAgZGVidWcoJ3JlbmRlciBodG1sIHNlY3Rpb24nKTtcbiAgfSk7XG5cbiAgcm91dGVyLmdldCgnLycsIGZ1bmN0aW9uIChyZXEsIHJlcywgbmV4dCkge1xuICAgIHJlbmRlckhUTUwoY29uZmlnLCBtYW5pZmVzdCwgbWFuaWZlc3RGaWxlcywgcmVxLCByZXMpO1xuICAgIGRlYnVnKCdyZW5kZXIgcm9vdCcpO1xuICB9KTtcblxuICByZXR1cm4gcm91dGVyO1xufVxuIl19
139
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvd2ViL2luZGV4LnRzIl0sIm5hbWVzIjpbInNldFNlY3VyaXR5V2ViSGVhZGVycyIsInJlcXVpcmUiLCJkZWJ1ZyIsImxvYWRUaGVtZSIsImNvbmZpZyIsIl8iLCJpc05pbCIsInRoZW1lIiwiaGVhZCIsInBsdWdpbiIsInN0YXRpY1BhdGgiLCJtYW5pZmVzdCIsIm1hbmlmZXN0RmlsZXMiLCJ2YWxpZGF0ZVByaW1hcnlDb2xvciIsInByaW1hcnlDb2xvciIsImlzSGV4IiwidGVzdCIsInNlbmRGaWxlQ2FsbGJhY2siLCJuZXh0IiwiZXJyIiwic3RhdHVzIiwiSFRUUF9TVEFUVVMiLCJOT1RfRk9VTkQiLCJhdXRoIiwic3RvcmFnZSIsIlNlYXJjaCIsImNvbmZpZ3VyZVN0b3JhZ2UiLCJyb3V0ZXIiLCJleHByZXNzIiwiUm91dGVyIiwidXNlIiwid2ViVUlKV1RtaWRkbGV3YXJlIiwiZ2V0IiwicmVxIiwicmVzIiwiZmlsZW5hbWUiLCJwYXJhbXMiLCJmaWxlIiwic2VuZEZpbGUiLCJ3ZWIiLCJsb2dvIiwiYWJzb2x1dGVMb2NhbEZpbGUiLCJwYXRoIiwicG9zaXgiLCJyZXNvbHZlIiwiZnMiLCJleGlzdHNTeW5jIiwiYWNjZXNzU3luYyIsImNvbnN0YW50cyIsIlJfT0siLCJqb2luIiwiYmFzZW5hbWUiLCJfcmVxIiwidW5kZWZpbmVkIiwibG9nZ2VyIiwid2FybiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNO0FBQUVBLEVBQUFBO0FBQUYsSUFBNEJDLE9BQU8sQ0FBQyxlQUFELENBQXpDOztBQUVBLE1BQU1DLEtBQUssR0FBRyxvQkFBVyxXQUFYLENBQWQ7O0FBRU8sU0FBU0MsU0FBVCxDQUFtQkMsTUFBbkIsRUFBMkI7QUFDaEMsTUFBSUMsZ0JBQUVDLEtBQUYsQ0FBUUYsTUFBTSxDQUFDRyxLQUFmLE1BQTBCLEtBQTlCLEVBQXFDO0FBQ25DLFdBQU9GLGdCQUFFRyxJQUFGLENBQ0wsMkJBQ0VKLE1BREYsRUFFRUEsTUFBTSxDQUFDRyxLQUZULEVBR0UsRUFIRixFQUlFLFVBQVVFLE1BQVYsRUFBa0I7QUFDaEIsYUFBT0EsTUFBTSxDQUFDQyxVQUFQLElBQXFCRCxNQUFNLENBQUNFLFFBQTVCLElBQXdDRixNQUFNLENBQUNHLGFBQXREO0FBQ0QsS0FOSCxFQU9FLGlCQVBGLENBREssQ0FBUDtBQVdEO0FBQ0Y7O0FBRU0sU0FBU0Msb0JBQVQsQ0FBOEJDLFlBQTlCLEVBQTRDO0FBQ2pELFFBQU1DLEtBQUssR0FBRyx1Q0FBdUNDLElBQXZDLENBQTRDRixZQUE1QyxDQUFkOztBQUNBLE1BQUksQ0FBQ0MsS0FBTCxFQUFZO0FBQ1ZiLElBQUFBLEtBQUssQ0FBQywwQkFBRCxFQUE2QlksWUFBN0IsQ0FBTDtBQUNBO0FBQ0Q7O0FBRUQsU0FBT0EsWUFBUDtBQUNEOztBQUVELE1BQU1HLGdCQUFnQixHQUFJQyxJQUFELElBQVdDLEdBQUQsSUFBUztBQUMxQyxNQUFJLENBQUNBLEdBQUwsRUFBVTtBQUNSO0FBQ0Q7O0FBQ0QsTUFBSUEsR0FBRyxDQUFDQyxNQUFKLEtBQWVDLHVCQUFZQyxTQUEvQixFQUEwQztBQUN4Q0osSUFBQUEsSUFBSTtBQUNMLEdBRkQsTUFFTztBQUNMQSxJQUFBQSxJQUFJLENBQUNDLEdBQUQsQ0FBSjtBQUNEO0FBQ0YsQ0FURDs7QUFXZSxrQkFBVWYsTUFBVixFQUEwQm1CLElBQTFCLEVBQWdDQyxPQUFoQyxFQUF5QztBQUFBOztBQUN0RCxNQUFJO0FBQUVkLElBQUFBLFVBQUY7QUFBY0MsSUFBQUEsUUFBZDtBQUF3QkMsSUFBQUE7QUFBeEIsTUFBMENULFNBQVMsQ0FBQ0MsTUFBRCxDQUFULElBQXFCSCxPQUFPLENBQUMscUJBQUQsQ0FBUCxFQUFuRTs7QUFDQUMsRUFBQUEsS0FBSyxDQUFDLGdCQUFELEVBQW1CUSxVQUFuQixDQUFMOztBQUNBZSxrQkFBT0MsZ0JBQVAsQ0FBd0JGLE9BQXhCO0FBRUE7OztBQUNBLFFBQU1HLE1BQU0sR0FBR0MsaUJBQVFDLE1BQVIsRUFBZixDQU5zRCxDQU90RDtBQUNBOzs7QUFDQUYsRUFBQUEsTUFBTSxDQUFDRyxHQUFQLENBQVdQLElBQUksQ0FBQ1Esa0JBQUwsRUFBWDtBQUNBSixFQUFBQSxNQUFNLENBQUNHLEdBQVAsQ0FBVzlCLHFCQUFYLEVBVnNELENBWXREOztBQUNBMkIsRUFBQUEsTUFBTSxDQUFDSyxHQUFQLENBQVcsYUFBWCxFQUEwQixVQUFVQyxHQUFWLEVBQWVDLEdBQWYsRUFBb0JoQixJQUFwQixFQUEwQjtBQUNsRCxVQUFNaUIsUUFBUSxHQUFHRixHQUFHLENBQUNHLE1BQUosQ0FBVyxDQUFYLENBQWpCO0FBQ0EsVUFBTUMsSUFBSSxHQUFJLEdBQUUzQixVQUFXLElBQUd5QixRQUFTLEVBQXZDO0FBQ0FqQyxJQUFBQSxLQUFLLENBQUMsdUJBQUQsRUFBMEJtQyxJQUExQixDQUFMO0FBQ0FILElBQUFBLEdBQUcsQ0FBQ0ksUUFBSixDQUFhRCxJQUFiLEVBQW1CcEIsZ0JBQWdCLENBQUNDLElBQUQsQ0FBbkM7QUFDRCxHQUxELEVBYnNELENBb0J0RDs7QUFDQSxNQUFJZCxNQUFNLFNBQU4sSUFBQUEsTUFBTSxXQUFOLG1CQUFBQSxNQUFNLENBQUVtQyxHQUFSLG9EQUFhQyxJQUFiLElBQXFCLENBQUMsMkJBQWVwQyxNQUFmLGFBQWVBLE1BQWYsdUNBQWVBLE1BQU0sQ0FBRW1DLEdBQXZCLGlEQUFlLGFBQWFDLElBQTVCLENBQTFCLEVBQTZEO0FBQzNEO0FBQ0EsVUFBTUMsaUJBQWlCLEdBQUdDLGNBQUtDLEtBQUwsQ0FBV0MsT0FBWCxDQUFtQnhDLE1BQU0sQ0FBQ21DLEdBQVAsQ0FBV0MsSUFBOUIsQ0FBMUI7O0FBQ0F0QyxJQUFBQSxLQUFLLENBQUMscUJBQUQsRUFBd0J1QyxpQkFBeEIsQ0FBTDs7QUFDQSxRQUFJO0FBQ0YsVUFBSUksWUFBR0MsVUFBSCxDQUFjTCxpQkFBZCxLQUFvQyxPQUFPSSxZQUFHRSxVQUFILENBQWNOLGlCQUFkLEVBQWlDSSxZQUFHRyxTQUFILENBQWFDLElBQTlDLENBQVAsS0FBK0QsV0FBdkcsRUFBb0g7QUFDbEg7QUFDQTtBQUNBN0MsUUFBQUEsTUFBTSxDQUFDbUMsR0FBUCxDQUFXQyxJQUFYLEdBQWtCRSxjQUFLQyxLQUFMLENBQVdPLElBQVgsQ0FBZ0IsWUFBaEIsRUFBOEJSLGNBQUtTLFFBQUwsQ0FBYy9DLE1BQU0sQ0FBQ21DLEdBQVAsQ0FBV0MsSUFBekIsQ0FBOUIsQ0FBbEI7QUFDQWIsUUFBQUEsTUFBTSxDQUFDSyxHQUFQLENBQVc1QixNQUFNLENBQUNtQyxHQUFQLENBQVdDLElBQXRCLEVBQTRCLFVBQVVZLElBQVYsRUFBZ0JsQixHQUFoQixFQUFxQmhCLElBQXJCLEVBQTJCO0FBQ3JEO0FBQ0FoQixVQUFBQSxLQUFLLENBQUMsc0NBQUQsRUFBeUNFLE1BQU0sQ0FBQ21DLEdBQVAsQ0FBV0MsSUFBcEQsRUFBMERDLGlCQUExRCxDQUFMO0FBQ0FQLFVBQUFBLEdBQUcsQ0FBQ0ksUUFBSixDQUFhRyxpQkFBYixFQUFnQ3hCLGdCQUFnQixDQUFDQyxJQUFELENBQWhEO0FBQ0QsU0FKRDtBQUtBaEIsUUFBQUEsS0FBSyxDQUFDLHdCQUFELEVBQTJCRSxNQUFNLENBQUNtQyxHQUFQLENBQVdDLElBQXRDLENBQUw7QUFDRCxPQVZELE1BVU87QUFDTHBDLFFBQUFBLE1BQU0sQ0FBQ21DLEdBQVAsQ0FBV0MsSUFBWCxHQUFrQmEsU0FBbEI7O0FBQ0FDLHVCQUFPQyxJQUFQLENBQWEsMkJBQTBCZCxpQkFBa0Isb0NBQXpEO0FBQ0Q7QUFDRixLQWZELENBZUUsTUFBTTtBQUNOckMsTUFBQUEsTUFBTSxDQUFDbUMsR0FBUCxDQUFXQyxJQUFYLEdBQWtCYSxTQUFsQjs7QUFDQUMscUJBQU9DLElBQVAsQ0FBYSwyQkFBMEJkLGlCQUFrQixvQ0FBekQ7QUFDRDtBQUNGOztBQUVEZCxFQUFBQSxNQUFNLENBQUNLLEdBQVAsQ0FBVyxtQkFBWCxFQUFnQyxVQUFVQyxHQUFWLEVBQWVDLEdBQWYsRUFBb0I7QUFDbEQsNkJBQVc5QixNQUFYLEVBQW1CTyxRQUFuQixFQUE2QkMsYUFBN0IsRUFBNENxQixHQUE1QyxFQUFpREMsR0FBakQ7QUFDQWhDLElBQUFBLEtBQUssQ0FBQyxxQkFBRCxDQUFMO0FBQ0QsR0FIRDtBQUtBeUIsRUFBQUEsTUFBTSxDQUFDSyxHQUFQLENBQVcsR0FBWCxFQUFnQixVQUFVQyxHQUFWLEVBQWVDLEdBQWYsRUFBb0JoQixJQUFwQixFQUEwQjtBQUN4Qyw2QkFBV2QsTUFBWCxFQUFtQk8sUUFBbkIsRUFBNkJDLGFBQTdCLEVBQTRDcUIsR0FBNUMsRUFBaURDLEdBQWpEO0FBQ0FoQyxJQUFBQSxLQUFLLENBQUMsYUFBRCxDQUFMO0FBQ0QsR0FIRDtBQUtBLFNBQU95QixNQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuXG5pbXBvcnQgeyBIVFRQX1NUQVRVUyB9IGZyb20gJy4uLy4uL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vbGliL2xvZ2dlcic7XG5pbXBvcnQgbG9hZFBsdWdpbiBmcm9tICcuLi8uLi9saWIvcGx1Z2luLWxvYWRlcic7XG5pbXBvcnQgU2VhcmNoIGZyb20gJy4uLy4uL2xpYi9zZWFyY2gnO1xuaW1wb3J0IHsgaXNIVFRQUHJvdG9jb2wgfSBmcm9tICcuLi8uLi9saWIvdXRpbHMnO1xuaW1wb3J0IHJlbmRlckhUTUwgZnJvbSAnLi9odG1sL3JlbmRlckhUTUwnO1xuXG5jb25zdCB7IHNldFNlY3VyaXR5V2ViSGVhZGVycyB9ID0gcmVxdWlyZSgnLi4vbWlkZGxld2FyZScpO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2NpbycpO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFRoZW1lKGNvbmZpZykge1xuICBpZiAoXy5pc05pbChjb25maWcudGhlbWUpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBfLmhlYWQoXG4gICAgICBsb2FkUGx1Z2luKFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGNvbmZpZy50aGVtZSxcbiAgICAgICAge30sXG4gICAgICAgIGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICAgICAgICByZXR1cm4gcGx1Z2luLnN0YXRpY1BhdGggJiYgcGx1Z2luLm1hbmlmZXN0ICYmIHBsdWdpbi5tYW5pZmVzdEZpbGVzO1xuICAgICAgICB9LFxuICAgICAgICAndmVyZGFjY2lvLXRoZW1lJ1xuICAgICAgKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUHJpbWFyeUNvbG9yKHByaW1hcnlDb2xvcikge1xuICBjb25zdCBpc0hleCA9IC9eIysoW2EtZkEtRjAtOV17Nn18W2EtZkEtRjAtOV17M30pJC9pLnRlc3QocHJpbWFyeUNvbG9yKTtcbiAgaWYgKCFpc0hleCkge1xuICAgIGRlYnVnKCdpbnZhbGlkIHByaW1hcnkgY29sb3IgJW8nLCBwcmltYXJ5Q29sb3IpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBwcmltYXJ5Q29sb3I7XG59XG5cbmNvbnN0IHNlbmRGaWxlQ2FsbGJhY2sgPSAobmV4dCkgPT4gKGVycikgPT4ge1xuICBpZiAoIWVycikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZXJyLnN0YXR1cyA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgbmV4dCgpO1xuICB9IGVsc2Uge1xuICAgIG5leHQoZXJyKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKGNvbmZpZzogQ29uZmlnLCBhdXRoLCBzdG9yYWdlKSB7XG4gIGxldCB7IHN0YXRpY1BhdGgsIG1hbmlmZXN0LCBtYW5pZmVzdEZpbGVzIH0gPSBsb2FkVGhlbWUoY29uZmlnKSB8fCByZXF1aXJlKCdAdmVyZGFjY2lvL3VpLXRoZW1lJykoKTtcbiAgZGVidWcoJ3N0YXRpYyBwYXRoICVvJywgc3RhdGljUGF0aCk7XG4gIFNlYXJjaC5jb25maWd1cmVTdG9yYWdlKHN0b3JhZ2UpO1xuXG4gIC8qIGVzbGludCBuZXctY2FwOm9mZiAqL1xuICBjb25zdCByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAvLyBydW4gaW4gcHJvZHVjdGlvbiBtb2RlIGJ5IGRlZmF1bHQsIGp1c3QgaW4gY2FzZVxuICAvLyBpdCBzaG91bGRuJ3QgbWFrZSBhbnkgZGlmZmVyZW5jZSBhbnl3YXlcbiAgcm91dGVyLnVzZShhdXRoLndlYlVJSldUbWlkZGxld2FyZSgpKTtcbiAgcm91dGVyLnVzZShzZXRTZWN1cml0eVdlYkhlYWRlcnMpO1xuXG4gIC8vIHN0YXRpYyBhc3NldHNcbiAgcm91dGVyLmdldCgnLy0vc3RhdGljLyonLCBmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHJlcS5wYXJhbXNbMF07XG4gICAgY29uc3QgZmlsZSA9IGAke3N0YXRpY1BhdGh9LyR7ZmlsZW5hbWV9YDtcbiAgICBkZWJ1ZygncmVuZGVyIHN0YXRpYyBmaWxlICVvJywgZmlsZSk7XG4gICAgcmVzLnNlbmRGaWxlKGZpbGUsIHNlbmRGaWxlQ2FsbGJhY2sobmV4dCkpO1xuICB9KTtcblxuICAvLyBsb2dvXG4gIGlmIChjb25maWc/LndlYj8ubG9nbyAmJiAhaXNIVFRQUHJvdG9jb2woY29uZmlnPy53ZWI/LmxvZ28pKSB7XG4gICAgLy8gVVJJIHJlbGF0ZWQgdG8gYSBsb2NhbCBmaWxlXG4gICAgY29uc3QgYWJzb2x1dGVMb2NhbEZpbGUgPSBwYXRoLnBvc2l4LnJlc29sdmUoY29uZmlnLndlYi5sb2dvKTtcbiAgICBkZWJ1Zygnc2VydmUgbG9jYWwgbG9nbyAlcycsIGFic29sdXRlTG9jYWxGaWxlKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoYWJzb2x1dGVMb2NhbEZpbGUpICYmIHR5cGVvZiBmcy5hY2Nlc3NTeW5jKGFic29sdXRlTG9jYWxGaWxlLCBmcy5jb25zdGFudHMuUl9PSykgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIE5vdGU6IGBwYXRoLmpvaW5gIHdpbGwgYnJlYWsgb24gV2luZG93cywgYmVjYXVzZSBpdCB0cmFuc2Zvcm1zIGAvYCB0byBgXFxgXG4gICAgICAgIC8vIFVzZSBQT1NJWCB2ZXJzaW9uIGBwYXRoLnBvc2l4LmpvaW5gIGluc3RlYWQuXG4gICAgICAgIGNvbmZpZy53ZWIubG9nbyA9IHBhdGgucG9zaXguam9pbignLy0vc3RhdGljLycsIHBhdGguYmFzZW5hbWUoY29uZmlnLndlYi5sb2dvKSk7XG4gICAgICAgIHJvdXRlci5nZXQoY29uZmlnLndlYi5sb2dvLCBmdW5jdGlvbiAoX3JlcSwgcmVzLCBuZXh0KSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGRlYnVnKCdzZXJ2ZSBjdXN0b20gbG9nbyAgd2ViOiVzIC0gbG9jYWw6JXMnLCBjb25maWcud2ViLmxvZ28sIGFic29sdXRlTG9jYWxGaWxlKTtcbiAgICAgICAgICByZXMuc2VuZEZpbGUoYWJzb2x1dGVMb2NhbEZpbGUsIHNlbmRGaWxlQ2FsbGJhY2sobmV4dCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgZGVidWcoJ2VuYWJsZWQgY3VzdG9tIGxvZ28gJXMnLCBjb25maWcud2ViLmxvZ28pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uZmlnLndlYi5sb2dvID0gdW5kZWZpbmVkO1xuICAgICAgICBsb2dnZXIud2Fybihgd2ViIGxvZ28gaXMgd3JvbmcsIHBhdGggJHthYnNvbHV0ZUxvY2FsRmlsZX0gZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWRhYmxlYCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb25maWcud2ViLmxvZ28gPSB1bmRlZmluZWQ7XG4gICAgICBsb2dnZXIud2Fybihgd2ViIGxvZ28gaXMgd3JvbmcsIHBhdGggJHthYnNvbHV0ZUxvY2FsRmlsZX0gZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IHJlYWRhYmxlYCk7XG4gICAgfVxuICB9XG5cbiAgcm91dGVyLmdldCgnLy0vd2ViLzpzZWN0aW9uLyonLCBmdW5jdGlvbiAocmVxLCByZXMpIHtcbiAgICByZW5kZXJIVE1MKGNvbmZpZywgbWFuaWZlc3QsIG1hbmlmZXN0RmlsZXMsIHJlcSwgcmVzKTtcbiAgICBkZWJ1ZygncmVuZGVyIGh0bWwgc2VjdGlvbicpO1xuICB9KTtcblxuICByb3V0ZXIuZ2V0KCcvJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgcmVuZGVySFRNTChjb25maWcsIG1hbmlmZXN0LCBtYW5pZmVzdEZpbGVzLCByZXEsIHJlcyk7XG4gICAgZGVidWcoJ3JlbmRlciByb290Jyk7XG4gIH0pO1xuXG4gIHJldHVybiByb3V0ZXI7XG59XG4iXX0=
@@ -11,4 +11,4 @@ module.exports = {
11
11
  SRC_ROOT: path.resolve(APP_ROOT, 'src/'),
12
12
  DIST_PATH: path.resolve(APP_ROOT, 'static/')
13
13
  };
14
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvZW52LnRzIl0sIm5hbWVzIjpbInBhdGgiLCJyZXF1aXJlIiwiQVBQX1JPT1QiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwibW9kdWxlIiwiZXhwb3J0cyIsIlNSQ19ST09UIiwiRElTVF9QQVRIIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBRUEsTUFBTUMsUUFBUSxHQUFHRixJQUFJLENBQUNHLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixRQUF4QixDQUFqQjtBQUVBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZkosRUFBQUEsUUFEZTtBQUVmSyxFQUFBQSxRQUFRLEVBQUVQLElBQUksQ0FBQ0csT0FBTCxDQUFhRCxRQUFiLEVBQXVCLE1BQXZCLENBRks7QUFHZk0sRUFBQUEsU0FBUyxFQUFFUixJQUFJLENBQUNHLE9BQUwsQ0FBYUQsUUFBYixFQUF1QixTQUF2QjtBQUhJLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5jb25zdCBBUFBfUk9PVCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi8uLi8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFQUF9ST09ULFxuICBTUkNfUk9PVDogcGF0aC5yZXNvbHZlKEFQUF9ST09ULCAnc3JjLycpLFxuICBESVNUX1BBVEg6IHBhdGgucmVzb2x2ZShBUFBfUk9PVCwgJ3N0YXRpYy8nKVxufTtcbiJdfQ==
14
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvZW52LnRzIl0sIm5hbWVzIjpbInBhdGgiLCJyZXF1aXJlIiwiQVBQX1JPT1QiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwibW9kdWxlIiwiZXhwb3J0cyIsIlNSQ19ST09UIiwiRElTVF9QQVRIIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBRUEsTUFBTUMsUUFBUSxHQUFHRixJQUFJLENBQUNHLE9BQUwsQ0FBYUMsU0FBYixFQUF3QixRQUF4QixDQUFqQjtBQUVBQyxNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZkosRUFBQUEsUUFEZTtBQUVmSyxFQUFBQSxRQUFRLEVBQUVQLElBQUksQ0FBQ0csT0FBTCxDQUFhRCxRQUFiLEVBQXVCLE1BQXZCLENBRks7QUFHZk0sRUFBQUEsU0FBUyxFQUFFUixJQUFJLENBQUNHLE9BQUwsQ0FBYUQsUUFBYixFQUF1QixTQUF2QjtBQUhJLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuXG5jb25zdCBBUFBfUk9PVCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi8uLi8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFQUF9ST09ULFxuICBTUkNfUk9PVDogcGF0aC5yZXNvbHZlKEFQUF9ST09ULCAnc3JjLycpLFxuICBESVNUX1BBVEg6IHBhdGgucmVzb2x2ZShBUFBfUk9PVCwgJ3N0YXRpYy8nKSxcbn07XG4iXX0=
package/build/index.js CHANGED
@@ -10,4 +10,4 @@ var _bootstrap = require("./lib/bootstrap");
10
10
  // @flow
11
11
  var _default = _bootstrap.startVerdaccio;
12
12
  exports.default = _default;
13
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6WyJzdGFydFZlcmRhY2NpbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBOztBQUZBO2VBSWVBLHlCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcblxuaW1wb3J0IHsgc3RhcnRWZXJkYWNjaW8gfSBmcm9tICcuL2xpYi9ib290c3RyYXAnO1xuXG5leHBvcnQgZGVmYXVsdCBzdGFydFZlcmRhY2NpbztcbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6WyJzdGFydFZlcmRhY2NpbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQURBO2VBR2VBLHlCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB7IHN0YXJ0VmVyZGFjY2lvIH0gZnJvbSAnLi9saWIvYm9vdHN0cmFwJztcblxuZXhwb3J0IGRlZmF1bHQgc3RhcnRWZXJkYWNjaW87XG4iXX0=
@@ -8,7 +8,7 @@ exports.buildUserBuffer = buildUserBuffer;
8
8
  exports.createAnonymousRemoteUser = createAnonymousRemoteUser;
9
9
  exports.createRemoteUser = createRemoteUser;
10
10
  exports.createSessionToken = createSessionToken;
11
- exports.expireReasons = exports.defaultSecurity = void 0;
11
+ exports.expireReasons = exports.defaultUserRateLimiting = exports.defaultSecurity = void 0;
12
12
  exports.getApiToken = getApiToken;
13
13
  exports.getAuthenticatedMessage = getAuthenticatedMessage;
14
14
  exports.getDefaultPlugins = getDefaultPlugins;
@@ -23,18 +23,18 @@ exports.parseBasicPayload = parseBasicPayload;
23
23
  exports.validatePassword = validatePassword;
24
24
  exports.verifyJWTPayload = verifyJWTPayload;
25
25
 
26
- var _lodash = _interopRequireDefault(require("lodash"));
27
-
28
26
  var _debug = _interopRequireDefault(require("debug"));
29
27
 
30
- var _logger = require("../lib/logger");
28
+ var _lodash = _interopRequireDefault(require("lodash"));
31
29
 
32
- var _utils = require("./utils");
30
+ var _logger = require("../lib/logger");
33
31
 
34
32
  var _constants = require("./constants");
35
33
 
36
34
  var _cryptoUtils = require("./crypto-utils");
37
35
 
36
+ var _utils = require("./utils");
37
+
38
38
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39
39
 
40
40
  const debug = (0, _debug.default)('verdaccio');
@@ -153,14 +153,21 @@ function createSessionToken() {
153
153
 
154
154
  const defaultWebTokenOptions = {
155
155
  sign: {
156
- // The expiration token for the website is 7 days
157
- expiresIn: _constants.TIME_EXPIRATION_7D
156
+ // The expiration token for the website is 1 hour
157
+ expiresIn: _constants.TIME_EXPIRATION_1H
158
158
  },
159
159
  verify: {}
160
160
  };
161
161
  const defaultApiTokenConf = {
162
162
  legacy: true
163
+ }; // we limit max 1000 request per 15 minutes on user endpoints
164
+
165
+ const defaultUserRateLimiting = {
166
+ windowMs: 15 * 60 * 1000,
167
+ // 15 minutes
168
+ max: 1000
163
169
  };
170
+ exports.defaultUserRateLimiting = defaultUserRateLimiting;
164
171
  const defaultSecurity = {
165
172
  web: defaultWebTokenOptions,
166
173
  api: defaultApiTokenConf
@@ -305,4 +312,4 @@ function getMiddlewareCredentials(security, secret, authorizationHeader) {
305
312
  return verifyJWTPayload(token, secret);
306
313
  }
307
314
  }
308
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC11dGlscy50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsInZhbGlkYXRlUGFzc3dvcmQiLCJwYXNzd29yZCIsIm1pbkxlbmd0aCIsIkRFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JEIiwibGVuZ3RoIiwiY3JlYXRlUmVtb3RlVXNlciIsIm5hbWUiLCJwbHVnaW5Hcm91cHMiLCJpc0dyb3VwVmFsaWQiLCJBcnJheSIsImlzQXJyYXkiLCJncm91cHMiLCJjb25jYXQiLCJST0xFUyIsIiRBTEwiLCIkQVVUSCIsIkRFUFJFQ0FURURfQUxMIiwiREVQUkVDQVRFRF9BVVRIIiwiQUxMIiwicmVhbF9ncm91cHMiLCJjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyIiwidW5kZWZpbmVkIiwiJEFOT05ZTU9VUyIsIkRFUFJFQ0FURURfQU5PTllNT1VTIiwiYWxsb3dfYWN0aW9uIiwiYWN0aW9uIiwidXNlciIsInBrZyIsImNhbGxiYWNrIiwiZ3JvdXBBY2Nlc3MiLCJoYXNQZXJtaXNzaW9uIiwic29tZSIsImdyb3VwIiwiaW5jbHVkZXMiLCJsb2dnZXIiLCJpbmZvIiwicmVtb3RlIiwiRXJyb3JDb2RlIiwiZ2V0Rm9yYmlkZGVuIiwiZ2V0VW5hdXRob3JpemVkIiwiaGFuZGxlU3BlY2lhbFVucHVibGlzaCIsImlzVW5wdWJsaXNoTWlzc2luZyIsIl8iLCJpc05pbCIsImhhc0dyb3VwcyIsImdldERlZmF1bHRQbHVnaW5zIiwiYXV0aGVudGljYXRlIiwiX3VzZXIiLCJfcGFzc3dvcmQiLCJjYiIsIkFQSV9FUlJPUiIsIkJBRF9VU0VSTkFNRV9QQVNTV09SRCIsImFkZF91c2VyIiwiZ2V0Q29uZmxpY3QiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwiYWxsb3dfdW5wdWJsaXNoIiwiY3JlYXRlU2Vzc2lvblRva2VuIiwidGVuSG91cnNUaW1lIiwiZXhwaXJlcyIsIkRhdGUiLCJub3ciLCJkZWZhdWx0V2ViVG9rZW5PcHRpb25zIiwic2lnbiIsImV4cGlyZXNJbiIsIlRJTUVfRVhQSVJBVElPTl83RCIsInZlcmlmeSIsImRlZmF1bHRBcGlUb2tlbkNvbmYiLCJsZWdhY3kiLCJkZWZhdWx0U2VjdXJpdHkiLCJ3ZWIiLCJhcGkiLCJnZXRTZWN1cml0eSIsImNvbmZpZyIsInNlY3VyaXR5IiwibWVyZ2UiLCJnZXRBdXRoZW50aWNhdGVkTWVzc2FnZSIsImJ1aWxkVXNlckJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJpc0FFU0xlZ2FjeSIsImp3dCIsImdldEFwaVRva2VuIiwiYXV0aCIsInJlbW90ZVVzZXIiLCJhZXNQYXNzd29yZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiYWVzRW5jcnlwdCIsInRvU3RyaW5nIiwiand0RW5jcnlwdCIsInBhcnNlQXV0aFRva2VuSGVhZGVyIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsInBhcnRzIiwic3BsaXQiLCJzY2hlbWUiLCJ0b2tlbiIsInBhcnNlQmFzaWNQYXlsb2FkIiwiY3JlZGVudGlhbHMiLCJpbmRleCIsImluZGV4T2YiLCJzbGljZSIsInBhcnNlQUVTQ3JlZGVudGlhbHMiLCJzZWNyZXQiLCJ0b1VwcGVyQ2FzZSIsIlRPS0VOX0JBU0lDIiwiVE9LRU5fQkVBUkVSIiwidG9rZW5Bc0J1ZmZlciIsImV4cGlyZVJlYXNvbnMiLCJ2ZXJpZnlKV1RQYXlsb2FkIiwicGF5bG9hZCIsImVycm9yIiwiZ2V0Q29kZSIsIkhUVFBfU1RBVFVTIiwiVU5BVVRIT1JJWkVEIiwibWVzc2FnZSIsImlzQXV0aEhlYWRlclZhbGlkIiwiYXV0aG9yaXphdGlvbiIsImdldE1pZGRsZXdhcmVDcmVkZW50aWFscyIsInBhcnNlZENyZWRlbnRpYWxzIiwiaXNTdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLEtBQUssR0FBRyxvQkFBVyxXQUFYLENBQWQ7O0FBRU8sU0FBU0MsZ0JBQVQsQ0FDTEMsUUFESyxF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L0gsTUFBSVosV0FBVyxDQUFDTixRQUFELENBQWYsRUFBMkI7QUFDekIsVUFBTXdCLFdBQVcsR0FBR0ksbUJBQW1CLENBQUNWLG1CQUFELEVBQXNCVyxNQUF0QixDQUF2Qzs7QUFDQSxRQUFJLENBQUNMLFdBQUwsRUFBa0I7QUFDaEI7QUFDRDs7QUFFRCxVQUFNcUIsaUJBQWlCLEdBQUd0QixpQkFBaUIsQ0FBQ0MsV0FBRCxDQUEzQzs7QUFDQSxRQUFJLENBQUNxQixpQkFBTCxFQUF3QjtBQUN0QjtBQUNEOztBQUVELFdBQU9BLGlCQUFQO0FBQ0Q7O0FBQ0QsUUFBTTtBQUFFeEIsSUFBQUEsTUFBRjtBQUFVQyxJQUFBQTtBQUFWLE1BQW9CTCxvQkFBb0IsQ0FBQ0MsbUJBQUQsQ0FBOUM7O0FBRUEsTUFBSWxELGdCQUFFOEUsUUFBRixDQUFXeEIsS0FBWCxLQUFxQkQsTUFBTSxDQUFDUyxXQUFQLE9BQXlCRSx3QkFBYUYsV0FBYixFQUFsRCxFQUE4RTtBQUM1RSxXQUFPSyxnQkFBZ0IsQ0FBQ2IsS0FBRCxFQUFRTyxNQUFSLENBQXZCO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyBSZW1vdGVVc2VyLCBQYWNrYWdlLCBDYWxsYmFjaywgQ29uZmlnLCBTZWN1cml0eSwgQVBJVG9rZW5PcHRpb25zLCBKV1RPcHRpb25zLCBJUGx1Z2luQXV0aCB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgQ29va2llU2Vzc2lvblRva2VuLCBJQXV0aFdlYlVJLCBBdXRoTWlkZGxld2FyZVBheWxvYWQsIEF1dGhUb2tlbkhlYWRlciwgQmFzaWNQYXlsb2FkIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vbGliL2xvZ2dlcic7XG5pbXBvcnQgeyBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0LCBFcnJvckNvZGUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEFQSV9FUlJPUiwgSFRUUF9TVEFUVVMsIFJPTEVTLCBUSU1FX0VYUElSQVRJT05fN0QsIFRPS0VOX0JBU0lDLCBUT0tFTl9CRUFSRVIsIERFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JEIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgYWVzRGVjcnlwdCwgdmVyaWZ5UGF5bG9hZCB9IGZyb20gJy4vY3J5cHRvLXV0aWxzJztcblxuY29uc3QgZGVidWcgPSBidWlsZERlYnVnKCd2ZXJkYWNjaW8nKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGFzc3dvcmQoXG4gIHBhc3N3b3JkOiBzdHJpbmcsIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBtaW5MZW5ndGg6IG51bWJlciA9IERFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JEXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBwYXNzd29yZCA9PT0gJ3N0cmluZycgJiYgcGFzc3dvcmQubGVuZ3RoID49IG1pbkxlbmd0aDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBSZW1vdGVVc2VyIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSB7IG5hbWU6IHh4LCBwbHVnaW5Hcm91cHM6IFtdLCByZWFsX2dyb3VwczogW10gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVtb3RlVXNlcihuYW1lOiBzdHJpbmcsIHBsdWdpbkdyb3Vwczogc3RyaW5nW10pOiBSZW1vdGVVc2VyIHtcbiAgY29uc3QgaXNHcm91cFZhbGlkOiBib29sZWFuID0gQXJyYXkuaXNBcnJheShwbHVnaW5Hcm91cHMpO1xuICBjb25zdCBncm91cHMgPSAoaXNHcm91cFZhbGlkID8gcGx1Z2luR3JvdXBzIDogW10pLmNvbmNhdChbUk9MRVMuJEFMTCwgUk9MRVMuJEFVVEgsIFJPTEVTLkRFUFJFQ0FURURfQUxMLCBST0xFUy5ERVBSRUNBVEVEX0FVVEgsIFJPTEVTLkFMTF0pO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZSxcbiAgICBncm91cHMsXG4gICAgcmVhbF9ncm91cHM6IHBsdWdpbkdyb3VwcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW4gYW5vbnltb3VzIHJlbW90ZSB1c2VyIGluIGNhc2Ugbm9uZSBpcyBsb2dnZWQgaW4uXG4gKiBAcmV0dXJuIHtPYmplY3R9IHsgbmFtZTogeHgsIGdyb3VwczogW10sIHJlYWxfZ3JvdXBzOiBbXSB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk6IFJlbW90ZVVzZXIge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAvLyBncm91cHMgd2l0aG91dCAnJCcgYXJlIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQgZXZlbnR1YWxseVxuICAgIGdyb3VwczogW1JPTEVTLiRBTEwsIFJPTEVTLiRBTk9OWU1PVVMsIFJPTEVTLkRFUFJFQ0FURURfQUxMLCBST0xFUy5ERVBSRUNBVEVEX0FOT05ZTU9VU10sXG4gICAgcmVhbF9ncm91cHM6IFtdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dfYWN0aW9uKGFjdGlvbjogc3RyaW5nKTogRnVuY3Rpb24ge1xuICByZXR1cm4gZnVuY3Rpb24gKHVzZXI6IFJlbW90ZVVzZXIsIHBrZzogUGFja2FnZSwgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgZGVidWcoJ1thdXRoL2FsbG93X2FjdGlvbl06IHVzZXI6ICVvJywgdXNlcj8ubmFtZSk7XG4gICAgY29uc3QgeyBuYW1lLCBncm91cHMgfSA9IHVzZXI7XG4gICAgY29uc3QgZ3JvdXBBY2Nlc3MgPSBwa2dbYWN0aW9uXTtcbiAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gZ3JvdXBBY2Nlc3Muc29tZSgoZ3JvdXApID0+IG5hbWUgPT09IGdyb3VwIHx8IGdyb3Vwcy5pbmNsdWRlcyhncm91cCkpO1xuICAgIGRlYnVnKCdbYXV0aC9hbGxvd19hY3Rpb25dOiBoYXNQZXJtaXNzaW9uPyAlb30gZm9yIHVzZXI6ICVvJywgaGFzUGVybWlzc2lvbiwgdXNlcj8ubmFtZSk7XG5cbiAgICBpZiAoaGFzUGVybWlzc2lvbikge1xuICAgICAgbG9nZ2VyLmluZm8oeyByZW1vdGU6IHVzZXIubmFtZSB9LCBgYXV0aC9hbGxvd19hY3Rpb246IGFjY2VzcyBncmFudGVkIHRvOiBAe3VzZXJ9YCk7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRGb3JiaWRkZW4oYHVzZXIgJHtuYW1lfSBpcyBub3QgYWxsb3dlZCB0byAke2FjdGlvbn0gcGFja2FnZSAke3BrZy5uYW1lfWApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soRXJyb3JDb2RlLmdldFVuYXV0aG9yaXplZChgYXV0aG9yaXphdGlvbiByZXF1aXJlZCB0byAke2FjdGlvbn0gcGFja2FnZSAke3BrZy5uYW1lfWApKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVNwZWNpYWxVbnB1Ymxpc2goKTogYW55IHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh1c2VyOiBSZW1vdGVVc2VyLCBwa2c6IFBhY2thZ2UsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGlvbiA9ICd1bnB1Ymxpc2gnO1xuICAgIC8vIHZlcmlmeSB3aGV0aGVyIHRoZSB1bnB1Ymxpc2ggcHJvcCBoYXMgYmVlbiBkZWZpbmVkXG4gICAgY29uc3QgaXNVbnB1Ymxpc2hNaXNzaW5nOiBib29sZWFuID0gXy5pc05pbChwa2dbYWN0aW9uXSk7XG4gICAgY29uc3QgaGFzR3JvdXBzOiBib29sZWFuID0gaXNVbnB1Ymxpc2hNaXNzaW5nID8gZmFsc2UgOiBwa2dbYWN0aW9uXS5sZW5ndGggPiAwO1xuICAgIGRlYnVnKCdmYWxsYmFjayB1bnB1Ymxpc2ggZm9yIEB7bmFtZX0gaGFzIGdyb3VwczogJW8gZm9yICVvJywgaGFzR3JvdXBzLCB1c2VyPy5uYW1lKTtcbiAgICBpZiAoaXNVbnB1Ymxpc2hNaXNzaW5nIHx8IGhhc0dyb3VwcyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBkZWJ1ZygnYWxsb3dfYWN0aW9uIGZvciAlbyBmb3IgJW8gaGFzIGdyb3VwczogJW8gZm9yICVvJywgYWN0aW9uLCB1c2VyPy5uYW1lLCBoYXNHcm91cHMsIHVzZXIpO1xuICAgIHJldHVybiBhbGxvd19hY3Rpb24oYWN0aW9uKSh1c2VyLCBwa2csIGNhbGxiYWNrKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRQbHVnaW5zKGxvZ2dlcjogYW55KTogSVBsdWdpbkF1dGg8Q29uZmlnPiB7XG4gIHJldHVybiB7XG4gICAgYXV0aGVudGljYXRlKF91c2VyOiBzdHJpbmcsIF9wYXNzd29yZDogc3RyaW5nLCBjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAgIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICAgICAgY2IoRXJyb3JDb2RlLmdldEZvcmJpZGRlbihBUElfRVJST1IuQkFEX1VTRVJOQU1FX1BBU1NXT1JEKSk7XG4gICAgfSxcblxuICAgIGFkZF91c2VyKF91c2VyOiBzdHJpbmcsIF9wYXNzd29yZDogc3RyaW5nLCBjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAgIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICAgICAgcmV0dXJuIGNiKEVycm9yQ29kZS5nZXRDb25mbGljdChBUElfRVJST1IuQkFEX1VTRVJOQU1FX1BBU1NXT1JEKSk7XG4gICAgfSxcblxuICAgIC8vIEZJWE1FOiBhbGxvd19hY3Rpb24gYW5kIGFsbG93X3B1Ymxpc2ggc2hvdWxkIGJlIGluIHRoZSBAdmVyZGFjY2lvL3R5cGVzXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGFsbG93X2FjY2VzczogYWxsb3dfYWN0aW9uKCdhY2Nlc3MnLCBsb2dnZXIpLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhbGxvd19wdWJsaXNoOiBhbGxvd19hY3Rpb24oJ3B1Ymxpc2gnLCBsb2dnZXIpLFxuICAgIGFsbG93X3VucHVibGlzaDogaGFuZGxlU3BlY2lhbFVucHVibGlzaCgpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2Vzc2lvblRva2VuKCk6IENvb2tpZVNlc3Npb25Ub2tlbiB7XG4gIGNvbnN0IHRlbkhvdXJzVGltZSA9IDEwICogNjAgKiA2MCAqIDEwMDA7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBucG1qcy5vcmcgc2V0cyAxMGggZXhwaXJlXG4gICAgZXhwaXJlczogbmV3IERhdGUoRGF0ZS5ub3coKSArIHRlbkhvdXJzVGltZSksXG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRXZWJUb2tlbk9wdGlvbnM6IEpXVE9wdGlvbnMgPSB7XG4gIHNpZ246IHtcbiAgICAvLyBUaGUgZXhwaXJhdGlvbiB0b2tlbiBmb3IgdGhlIHdlYnNpdGUgaXMgNyBkYXlzXG4gICAgZXhwaXJlc0luOiBUSU1FX0VYUElSQVRJT05fN0QsXG4gIH0sXG4gIHZlcmlmeToge30sXG59O1xuXG5jb25zdCBkZWZhdWx0QXBpVG9rZW5Db25mOiBBUElUb2tlbk9wdGlvbnMgPSB7XG4gIGxlZ2FjeTogdHJ1ZSxcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2VjdXJpdHk6IFNlY3VyaXR5ID0ge1xuICB3ZWI6IGRlZmF1bHRXZWJUb2tlbk9wdGlvbnMsXG4gIGFwaTogZGVmYXVsdEFwaVRva2VuQ29uZixcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWN1cml0eShjb25maWc6IENvbmZpZyk6IFNlY3VyaXR5IHtcbiAgaWYgKF8uaXNOaWwoY29uZmlnLnNlY3VyaXR5KSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gXy5tZXJnZShkZWZhdWx0U2VjdXJpdHksIGNvbmZpZy5zZWN1cml0eSk7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFNlY3VyaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRlZE1lc3NhZ2UodXNlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB5b3UgYXJlIGF1dGhlbnRpY2F0ZWQgYXMgJyR7dXNlcn0nYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVXNlckJ1ZmZlcihuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBCdWZmZXIge1xuICByZXR1cm4gQnVmZmVyLmZyb20oYCR7bmFtZX06JHtwYXNzd29yZH1gLCAndXRmOCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBRVNMZWdhY3koc2VjdXJpdHk6IFNlY3VyaXR5KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgbGVnYWN5LCBqd3QgfSA9IHNlY3VyaXR5LmFwaTtcblxuICByZXR1cm4gXy5pc05pbChsZWdhY3kpID09PSBmYWxzZSAmJiBfLmlzTmlsKGp3dCkgJiYgbGVnYWN5ID09PSB0cnVlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXBpVG9rZW4oYXV0aDogSUF1dGhXZWJVSSwgY29uZmlnOiBDb25maWcsIHJlbW90ZVVzZXI6IFJlbW90ZVVzZXIsIGFlc1Bhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzZWN1cml0eTogU2VjdXJpdHkgPSBnZXRTZWN1cml0eShjb25maWcpO1xuXG4gIGlmIChpc0FFU0xlZ2FjeShzZWN1cml0eSkpIHtcbiAgICAvLyBmYWxsYmFjayBhbGwgZ29lcyB0byBBRVMgZW5jcnlwdGlvblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgICAgcmVzb2x2ZShhdXRoLmFlc0VuY3J5cHQoYnVpbGRVc2VyQnVmZmVyKHJlbW90ZVVzZXIubmFtZSBhcyBzdHJpbmcsIGFlc1Bhc3N3b3JkKSkudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICB9KTtcbiAgfVxuICAvLyBpIGFtIHdpbGluZyB0byB1c2UgaGVyZSBfLmlzTmlsIGJ1dCBmbG93IGRvZXMgbm90IGxpa2UgaXQgeWV0LlxuICBjb25zdCB7IGp3dCB9ID0gc2VjdXJpdHkuYXBpO1xuXG4gIGlmIChqd3QgJiYgand0LnNpZ24pIHtcbiAgICByZXR1cm4gYXdhaXQgYXV0aC5qd3RFbmNyeXB0KHJlbW90ZVVzZXIsIGp3dC5zaWduKTtcbiAgfVxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICByZXNvbHZlKGF1dGguYWVzRW5jcnlwdChidWlsZFVzZXJCdWZmZXIocmVtb3RlVXNlci5uYW1lIGFzIHN0cmluZywgYWVzUGFzc3dvcmQpKS50b1N0cmluZygnYmFzZTY0JykpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb25IZWFkZXI6IHN0cmluZyk6IEF1dGhUb2tlbkhlYWRlciB7XG4gIGNvbnN0IHBhcnRzID0gYXV0aG9yaXphdGlvbkhlYWRlci5zcGxpdCgnICcpO1xuICBjb25zdCBbc2NoZW1lLCB0b2tlbl0gPSBwYXJ0cztcblxuICByZXR1cm4geyBzY2hlbWUsIHRva2VuIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJhc2ljUGF5bG9hZChjcmVkZW50aWFsczogc3RyaW5nKTogQmFzaWNQYXlsb2FkIHtcbiAgY29uc3QgaW5kZXggPSBjcmVkZW50aWFscy5pbmRleE9mKCc6Jyk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB1c2VyOiBzdHJpbmcgPSBjcmVkZW50aWFscy5zbGljZSgwLCBpbmRleCk7XG4gIGNvbnN0IHBhc3N3b3JkOiBzdHJpbmcgPSBjcmVkZW50aWFscy5zbGljZShpbmRleCArIDEpO1xuXG4gIHJldHVybiB7IHVzZXIsIHBhc3N3b3JkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFFU0NyZWRlbnRpYWxzKGF1dGhvcml6YXRpb25IZWFkZXI6IHN0cmluZywgc2VjcmV0OiBzdHJpbmcpIHtcbiAgY29uc3QgeyBzY2hlbWUsIHRva2VuIH0gPSBwYXJzZUF1dGhUb2tlbkhlYWRlcihhdXRob3JpemF0aW9uSGVhZGVyKTtcblxuICAvLyBiYXNpYyBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIGVuZm9yY2VkXG4gIGlmIChzY2hlbWUudG9VcHBlckNhc2UoKSA9PT0gVE9LRU5fQkFTSUMudG9VcHBlckNhc2UoKSkge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gY29udmVydFBheWxvYWRUb0Jhc2U2NCh0b2tlbikudG9TdHJpbmcoKTtcblxuICAgIHJldHVybiBjcmVkZW50aWFscztcbiAgfSBlbHNlIGlmIChzY2hlbWUudG9VcHBlckNhc2UoKSA9PT0gVE9LRU5fQkVBUkVSLnRvVXBwZXJDYXNlKCkpIHtcbiAgICBjb25zdCB0b2tlbkFzQnVmZmVyID0gY29udmVydFBheWxvYWRUb0Jhc2U2NCh0b2tlbik7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSBhZXNEZWNyeXB0KHRva2VuQXNCdWZmZXIsIHNlY3JldCkudG9TdHJpbmcoJ3V0ZjgnKTtcblxuICAgIHJldHVybiBjcmVkZW50aWFscztcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZXhwaXJlUmVhc29uczogc3RyaW5nW10gPSBbJ0pzb25XZWJUb2tlbkVycm9yJywgJ1Rva2VuRXhwaXJlZEVycm9yJ107XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlKV1RQYXlsb2FkKHRva2VuOiBzdHJpbmcsIHNlY3JldDogc3RyaW5nKTogUmVtb3RlVXNlciB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZDogUmVtb3RlVXNlciA9IHZlcmlmeVBheWxvYWQodG9rZW4sIHNlY3JldCk7XG5cbiAgICByZXR1cm4gcGF5bG9hZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyAjMTY4IHRoaXMgY2hlY2sgc2hvdWxkIGJlIHJlbW92ZWQgYXMgc29vbiBBRVMgZW5jcnlwdCBpcyByZW1vdmVkLlxuICAgIGlmIChleHBpcmVSZWFzb25zLmluY2x1ZGVzKGVycm9yLm5hbWUpKSB7XG4gICAgICAvLyBpdCBtaWdodCBiZSBwb3NzaWJsZSB0aGUgand0IGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZCBhbmRcbiAgICAgIC8vIG9sZCB0b2tlbnMgZmFpbHMgc3RpbGwgcmVtYWlucyBpbiB1c2FnZSwgdGh1c1xuICAgICAgLy8gd2UgcmV0dXJuIGFuIGFub255bW91cyB1c2VyIHRvIGZvcmNlIGxvZyBpbi5cbiAgICAgIHJldHVybiBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG4gICAgfVxuICAgIHRocm93IEVycm9yQ29kZS5nZXRDb2RlKEhUVFBfU1RBVFVTLlVOQVVUSE9SSVpFRCwgZXJyb3IubWVzc2FnZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXV0aEhlYWRlclZhbGlkKGF1dGhvcml6YXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gYXV0aG9yaXphdGlvbi5zcGxpdCgnICcpLmxlbmd0aCA9PT0gMjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyhzZWN1cml0eTogU2VjdXJpdHksIHNlY3JldDogc3RyaW5nLCBhdXRob3JpemF0aW9uSGVhZGVyOiBzdHJpbmcpOiBBdXRoTWlkZGxld2FyZVBheWxvYWQge1xuICBpZiAoaXNBRVNMZWdhY3koc2VjdXJpdHkpKSB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSBwYXJzZUFFU0NyZWRlbnRpYWxzKGF1dGhvcml6YXRpb25IZWFkZXIsIHNlY3JldCk7XG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZENyZWRlbnRpYWxzID0gcGFyc2VCYXNpY1BheWxvYWQoY3JlZGVudGlhbHMpO1xuICAgIGlmICghcGFyc2VkQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkQ3JlZGVudGlhbHM7XG4gIH1cbiAgY29uc3QgeyBzY2hlbWUsIHRva2VuIH0gPSBwYXJzZUF1dGhUb2tlbkhlYWRlcihhdXRob3JpemF0aW9uSGVhZGVyKTtcblxuICBpZiAoXy5pc1N0cmluZyh0b2tlbikgJiYgc2NoZW1lLnRvVXBwZXJDYXNlKCkgPT09IFRPS0VOX0JFQVJFUi50b1VwcGVyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIHZlcmlmeUpXVFBheWxvYWQodG9rZW4sIHNlY3JldCk7XG4gIH1cbn1cbiJdfQ==
315
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC11dGlscy50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsInZhbGlkYXRlUGFzc3dvcmQiLCJwYXNzd29yZCIsIm1pbkxlbmd0aCIsIkRFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JEIiwibGVuZ3RoIiwiY3JlYXRlUmVtb3RlVXNlciIsIm5hbWUiLCJwbHVnaW5Hcm91cHMiLCJpc0dyb3VwVmFsaWQiLCJBcnJheSIsImlzQXJyYXkiLCJncm91cHMiLCJjb25jYXQiLCJST0xFUyIsIiRBTEwiLCIkQVVUSCIsIkRFUFJFQ0FURURfQUxMIiwiREVQUkVDQVRFRF9BVVRIIiwiQUxMIiwicmVhbF9ncm91cHMiLCJjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyIiwidW5kZWZpbmVkIiwiJEFOT05ZTU9VUyIsIkRFUFJFQ0FURURfQU5PTllNT1VTIiwiYWxsb3dfYWN0aW9uIiwiYWN0aW9uIiwidXNlciIsInBrZyIsImNhbGxiYWNrIiwiZ3JvdXBBY2Nlc3MiLCJoYXNQZXJtaXNzaW9uIiwic29tZSIsImdyb3VwIiwiaW5jbHVkZXMiLCJsb2dnZXIiLCJpbmZvIiwicmVtb3RlIiwiRXJyb3JDb2RlIiwiZ2V0Rm9yYmlkZGVuIiwiZ2V0VW5hdXRob3JpemVkIiwiaGFuZGxlU3BlY2lhbFVucHVibGlzaCIsImlzVW5wdWJsaXNoTWlzc2luZyIsIl8iLCJpc05pbCIsImhhc0dyb3VwcyIsImdldERlZmF1bHRQbHVnaW5zIiwiYXV0aGVudGljYXRlIiwiX3VzZXIiLCJfcGFzc3dvcmQiLCJjYiIsIkFQSV9FUlJPUiIsIkJBRF9VU0VSTkFNRV9QQVNTV09SRCIsImFkZF91c2VyIiwiZ2V0Q29uZmxpY3QiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwiYWxsb3dfdW5wdWJsaXNoIiwiY3JlYXRlU2Vzc2lvblRva2VuIiwidGVuSG91cnNUaW1lIiwiZXhwaXJlcyIsIkRhdGUiLCJub3ciLCJkZWZhdWx0V2ViVG9rZW5PcHRpb25zIiwic2lnbiIsImV4cGlyZXNJbiIsIlRJTUVfRVhQSVJBVElPTl8xSCIsInZlcmlmeSIsImRlZmF1bHRBcGlUb2tlbkNvbmYiLCJsZWdhY3kiLCJkZWZhdWx0VXNlclJhdGVMaW1pdGluZyIsIndpbmRvd01zIiwibWF4IiwiZGVmYXVsdFNlY3VyaXR5Iiwid2ViIiwiYXBpIiwiZ2V0U2VjdXJpdHkiLCJjb25maWciLCJzZWN1cml0eSIsIm1lcmdlIiwiZ2V0QXV0aGVudGljYXRlZE1lc3NhZ2UiLCJidWlsZFVzZXJCdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiaXNBRVNMZWdhY3kiLCJqd3QiLCJnZXRBcGlUb2tlbiIsImF1dGgiLCJyZW1vdGVVc2VyIiwiYWVzUGFzc3dvcmQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFlc0VuY3J5cHQiLCJ0b1N0cmluZyIsImp3dEVuY3J5cHQiLCJwYXJzZUF1dGhUb2tlbkhlYWRlciIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJwYXJ0cyIsInNwbGl0Iiwic2NoZW1lIiwidG9rZW4iLCJwYXJzZUJhc2ljUGF5bG9hZCIsImNyZWRlbnRpYWxzIiwiaW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJwYXJzZUFFU0NyZWRlbnRpYWxzIiwic2VjcmV0IiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsIlRPS0VOX0JFQVJFUiIsInRva2VuQXNCdWZmZXIiLCJleHBpcmVSZWFzb25zIiwidmVyaWZ5SldUUGF5bG9hZCIsInBheWxvYWQiLCJlcnJvciIsImdldENvZGUiLCJIVFRQX1NUQVRVUyIsIlVOQVVUSE9SSVpFRCIsIm1lc3NhZ2UiLCJpc0F1dGhIZWFkZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMiLCJwYXJzZWRDcmVkZW50aWFscyIsImlzU3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUcsb0JB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LENBQTJCQyxhQUEzQixFQUEyRDtBQUNoRSxTQUFPQSxhQUFhLENBQUN2QixLQUFkLENBQW9CLEdBQXBCLEVBQXlCN0YsTUFBekIsS0FBb0MsQ0FBM0M7QUFDRDs7QUFFTSxTQUFTcUgsd0JBQVQsQ0FBa0M1QyxRQUFsQyxFQUFzRDZCLE1BQXRELEVBQXNFWCxtQkFBdEUsRUFBMEg7QUFDL0gsTUFBSVosV0FBVyxDQUFDTixRQUFELENBQWYsRUFBMkI7QUFDekIsVUFBTXdCLFdBQVcsR0FBR0ksbUJBQW1CLENBQUNWLG1CQUFELEVBQXNCVyxNQUF0QixDQUF2Qzs7QUFDQSxRQUFJLENBQUNMLFdBQUwsRUFBa0I7QUFDaEI7QUFDRDs7QUFFRCxVQUFNcUIsaUJBQWlCLEdBQUd0QixpQkFBaUIsQ0FBQ0MsV0FBRCxDQUEzQzs7QUFDQSxRQUFJLENBQUNxQixpQkFBTCxFQUF3QjtBQUN0QjtBQUNEOztBQUVELFdBQU9BLGlCQUFQO0FBQ0Q7O0FBQ0QsUUFBTTtBQUFFeEIsSUFBQUEsTUFBRjtBQUFVQyxJQUFBQTtBQUFWLE1BQW9CTCxvQkFBb0IsQ0FBQ0MsbUJBQUQsQ0FBOUM7O0FBRUEsTUFBSXJELGdCQUFFaUYsUUFBRixDQUFXeEIsS0FBWCxLQUFxQkQsTUFBTSxDQUFDUyxXQUFQLE9BQXlCRSx3QkFBYUYsV0FBYixFQUFsRCxFQUE4RTtBQUM1RSxXQUFPSyxnQkFBZ0IsQ0FBQ2IsS0FBRCxFQUFRTyxNQUFSLENBQXZCO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IEFQSVRva2VuT3B0aW9ucywgQ2FsbGJhY2ssIENvbmZpZywgSVBsdWdpbkF1dGgsIEpXVE9wdGlvbnMsIFBhY2thZ2UsIFJlbW90ZVVzZXIsIFNlY3VyaXR5IH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7IEF1dGhNaWRkbGV3YXJlUGF5bG9hZCwgQXV0aFRva2VuSGVhZGVyLCBCYXNpY1BheWxvYWQsIENvb2tpZVNlc3Npb25Ub2tlbiwgSUF1dGhXZWJVSSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2xpYi9sb2dnZXInO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBERUZBVUxUX01JTl9MSU1JVF9QQVNTV09SRCwgSFRUUF9TVEFUVVMsIFJPTEVTLCBUSU1FX0VYUElSQVRJT05fMUgsIFRPS0VOX0JBU0lDLCBUT0tFTl9CRUFSRVIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhZXNEZWNyeXB0LCB2ZXJpZnlQYXlsb2FkIH0gZnJvbSAnLi9jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0IH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBhc3N3b3JkKFxuICBwYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgbWluTGVuZ3RoOiBudW1iZXIgPSBERUZBVUxUX01JTl9MSU1JVF9QQVNTV09SRFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgcGFzc3dvcmQgPT09ICdzdHJpbmcnICYmIHBhc3N3b3JkLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgUmVtb3RlVXNlciBvYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH0geyBuYW1lOiB4eCwgcGx1Z2luR3JvdXBzOiBbXSwgcmVhbF9ncm91cHM6IFtdIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbW90ZVVzZXIobmFtZTogc3RyaW5nLCBwbHVnaW5Hcm91cHM6IHN0cmluZ1tdKTogUmVtb3RlVXNlciB7XG4gIGNvbnN0IGlzR3JvdXBWYWxpZDogYm9vbGVhbiA9IEFycmF5LmlzQXJyYXkocGx1Z2luR3JvdXBzKTtcbiAgY29uc3QgZ3JvdXBzID0gKGlzR3JvdXBWYWxpZCA/IHBsdWdpbkdyb3VwcyA6IFtdKS5jb25jYXQoW1JPTEVTLiRBTEwsIFJPTEVTLiRBVVRILCBST0xFUy5ERVBSRUNBVEVEX0FMTCwgUk9MRVMuREVQUkVDQVRFRF9BVVRILCBST0xFUy5BTExdKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgZ3JvdXBzLFxuICAgIHJlYWxfZ3JvdXBzOiBwbHVnaW5Hcm91cHMsXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGRzIGFuIGFub255bW91cyByZW1vdGUgdXNlciBpbiBjYXNlIG5vbmUgaXMgbG9nZ2VkIGluLlxuICogQHJldHVybiB7T2JqZWN0fSB7IG5hbWU6IHh4LCBncm91cHM6IFtdLCByZWFsX2dyb3VwczogW10gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpOiBSZW1vdGVVc2VyIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgLy8gZ3JvdXBzIHdpdGhvdXQgJyQnIGFyZSBnb2luZyB0byBiZSBkZXByZWNhdGVkIGV2ZW50dWFsbHlcbiAgICBncm91cHM6IFtST0xFUy4kQUxMLCBST0xFUy4kQU5PTllNT1VTLCBST0xFUy5ERVBSRUNBVEVEX0FMTCwgUk9MRVMuREVQUkVDQVRFRF9BTk9OWU1PVVNdLFxuICAgIHJlYWxfZ3JvdXBzOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93X2FjdGlvbihhY3Rpb246IHN0cmluZyk6IEZ1bmN0aW9uIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh1c2VyOiBSZW1vdGVVc2VyLCBwa2c6IFBhY2thZ2UsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGRlYnVnKCdbYXV0aC9hbGxvd19hY3Rpb25dOiB1c2VyOiAlbycsIHVzZXI/Lm5hbWUpO1xuICAgIGNvbnN0IHsgbmFtZSwgZ3JvdXBzIH0gPSB1c2VyO1xuICAgIGNvbnN0IGdyb3VwQWNjZXNzID0gcGtnW2FjdGlvbl07XG4gICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGdyb3VwQWNjZXNzLnNvbWUoKGdyb3VwKSA9PiBuYW1lID09PSBncm91cCB8fCBncm91cHMuaW5jbHVkZXMoZ3JvdXApKTtcbiAgICBkZWJ1ZygnW2F1dGgvYWxsb3dfYWN0aW9uXTogaGFzUGVybWlzc2lvbj8gJW99IGZvciB1c2VyOiAlbycsIGhhc1Blcm1pc3Npb24sIHVzZXI/Lm5hbWUpO1xuXG4gICAgaWYgKGhhc1Blcm1pc3Npb24pIHtcbiAgICAgIGxvZ2dlci5pbmZvKHsgcmVtb3RlOiB1c2VyLm5hbWUgfSwgYGF1dGgvYWxsb3dfYWN0aW9uOiBhY2Nlc3MgZ3JhbnRlZCB0bzogQHt1c2VyfWApO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Rm9yYmlkZGVuKGB1c2VyICR7bmFtZX0gaXMgbm90IGFsbG93ZWQgdG8gJHthY3Rpb259IHBhY2thZ2UgJHtwa2cubmFtZX1gKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRVbmF1dGhvcml6ZWQoYGF1dGhvcml6YXRpb24gcmVxdWlyZWQgdG8gJHthY3Rpb259IHBhY2thZ2UgJHtwa2cubmFtZX1gKSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVTcGVjaWFsVW5wdWJsaXNoKCk6IGFueSB7XG4gIHJldHVybiBmdW5jdGlvbiAodXNlcjogUmVtb3RlVXNlciwgcGtnOiBQYWNrYWdlLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBhY3Rpb24gPSAndW5wdWJsaXNoJztcbiAgICAvLyB2ZXJpZnkgd2hldGhlciB0aGUgdW5wdWJsaXNoIHByb3AgaGFzIGJlZW4gZGVmaW5lZFxuICAgIGNvbnN0IGlzVW5wdWJsaXNoTWlzc2luZzogYm9vbGVhbiA9IF8uaXNOaWwocGtnW2FjdGlvbl0pO1xuICAgIGNvbnN0IGhhc0dyb3VwczogYm9vbGVhbiA9IGlzVW5wdWJsaXNoTWlzc2luZyA/IGZhbHNlIDogcGtnW2FjdGlvbl0ubGVuZ3RoID4gMDtcbiAgICBkZWJ1ZygnZmFsbGJhY2sgdW5wdWJsaXNoIGZvciBAe25hbWV9IGhhcyBncm91cHM6ICVvIGZvciAlbycsIGhhc0dyb3VwcywgdXNlcj8ubmFtZSk7XG4gICAgaWYgKGlzVW5wdWJsaXNoTWlzc2luZyB8fCBoYXNHcm91cHMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgZGVidWcoJ2FsbG93X2FjdGlvbiBmb3IgJW8gZm9yICVvIGhhcyBncm91cHM6ICVvIGZvciAlbycsIGFjdGlvbiwgdXNlcj8ubmFtZSwgaGFzR3JvdXBzLCB1c2VyKTtcbiAgICByZXR1cm4gYWxsb3dfYWN0aW9uKGFjdGlvbikodXNlciwgcGtnLCBjYWxsYmFjayk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0UGx1Z2lucyhsb2dnZXI6IGFueSk6IElQbHVnaW5BdXRoPENvbmZpZz4ge1xuICByZXR1cm4ge1xuICAgIGF1dGhlbnRpY2F0ZShfdXNlcjogc3RyaW5nLCBfcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgICAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICAgIGNiKEVycm9yQ29kZS5nZXRGb3JiaWRkZW4oQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgIH0sXG5cbiAgICBhZGRfdXNlcihfdXNlcjogc3RyaW5nLCBfcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgICAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICAgIHJldHVybiBjYihFcnJvckNvZGUuZ2V0Q29uZmxpY3QoQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgIH0sXG5cbiAgICAvLyBGSVhNRTogYWxsb3dfYWN0aW9uIGFuZCBhbGxvd19wdWJsaXNoIHNob3VsZCBiZSBpbiB0aGUgQHZlcmRhY2Npby90eXBlc1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhbGxvd19hY2Nlc3M6IGFsbG93X2FjdGlvbignYWNjZXNzJywgbG9nZ2VyKSxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgYWxsb3dfcHVibGlzaDogYWxsb3dfYWN0aW9uKCdwdWJsaXNoJywgbG9nZ2VyKSxcbiAgICBhbGxvd191bnB1Ymxpc2g6IGhhbmRsZVNwZWNpYWxVbnB1Ymxpc2goKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlc3Npb25Ub2tlbigpOiBDb29raWVTZXNzaW9uVG9rZW4ge1xuICBjb25zdCB0ZW5Ib3Vyc1RpbWUgPSAxMCAqIDYwICogNjAgKiAxMDAwO1xuXG4gIHJldHVybiB7XG4gICAgLy8gbnBtanMub3JnIHNldHMgMTBoIGV4cGlyZVxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKERhdGUubm93KCkgKyB0ZW5Ib3Vyc1RpbWUpLFxuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0V2ViVG9rZW5PcHRpb25zOiBKV1RPcHRpb25zID0ge1xuICBzaWduOiB7XG4gICAgLy8gVGhlIGV4cGlyYXRpb24gdG9rZW4gZm9yIHRoZSB3ZWJzaXRlIGlzIDEgaG91clxuICAgIGV4cGlyZXNJbjogVElNRV9FWFBJUkFUSU9OXzFILFxuICB9LFxuICB2ZXJpZnk6IHt9LFxufTtcblxuY29uc3QgZGVmYXVsdEFwaVRva2VuQ29uZjogQVBJVG9rZW5PcHRpb25zID0ge1xuICBsZWdhY3k6IHRydWUsXG59O1xuXG4vLyB3ZSBsaW1pdCBtYXggMTAwMCByZXF1ZXN0IHBlciAxNSBtaW51dGVzIG9uIHVzZXIgZW5kcG9pbnRzXG5leHBvcnQgY29uc3QgZGVmYXVsdFVzZXJSYXRlTGltaXRpbmcgPSB7XG4gIHdpbmRvd01zOiAxNSAqIDYwICogMTAwMCwgLy8gMTUgbWludXRlc1xuICBtYXg6IDEwMDAsXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNlY3VyaXR5OiBTZWN1cml0eSA9IHtcbiAgd2ViOiBkZWZhdWx0V2ViVG9rZW5PcHRpb25zLFxuICBhcGk6IGRlZmF1bHRBcGlUb2tlbkNvbmYsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdXJpdHkoY29uZmlnOiBDb25maWcpOiBTZWN1cml0eSB7XG4gIGlmIChfLmlzTmlsKGNvbmZpZy5zZWN1cml0eSkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIF8ubWVyZ2UoZGVmYXVsdFNlY3VyaXR5LCBjb25maWcuc2VjdXJpdHkpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRTZWN1cml0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF1dGhlbnRpY2F0ZWRNZXNzYWdlKHVzZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgeW91IGFyZSBhdXRoZW50aWNhdGVkIGFzICcke3VzZXJ9J2A7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVzZXJCdWZmZXIobmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogQnVmZmVyIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGAke25hbWV9OiR7cGFzc3dvcmR9YCwgJ3V0ZjgnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQUVTTGVnYWN5KHNlY3VyaXR5OiBTZWN1cml0eSk6IGJvb2xlYW4ge1xuICBjb25zdCB7IGxlZ2FjeSwgand0IH0gPSBzZWN1cml0eS5hcGk7XG5cbiAgcmV0dXJuIF8uaXNOaWwobGVnYWN5KSA9PT0gZmFsc2UgJiYgXy5pc05pbChqd3QpICYmIGxlZ2FjeSA9PT0gdHJ1ZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFwaVRva2VuKGF1dGg6IElBdXRoV2ViVUksIGNvbmZpZzogQ29uZmlnLCByZW1vdGVVc2VyOiBSZW1vdGVVc2VyLCBhZXNQYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2VjdXJpdHk6IFNlY3VyaXR5ID0gZ2V0U2VjdXJpdHkoY29uZmlnKTtcbiAgaWYgKGlzQUVTTGVnYWN5KHNlY3VyaXR5KSkge1xuICAgIC8vIGZhbGxiYWNrIGFsbCBnb2VzIHRvIEFFUyBlbmNyeXB0aW9uXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICByZXNvbHZlKGF1dGguYWVzRW5jcnlwdChidWlsZFVzZXJCdWZmZXIocmVtb3RlVXNlci5uYW1lIGFzIHN0cmluZywgYWVzUGFzc3dvcmQpKS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgIH0pO1xuICB9XG4gIC8vIGkgYW0gd2lsaW5nIHRvIHVzZSBoZXJlIF8uaXNOaWwgYnV0IGZsb3cgZG9lcyBub3QgbGlrZSBpdCB5ZXQuXG4gIGNvbnN0IHsgand0IH0gPSBzZWN1cml0eS5hcGk7XG5cbiAgaWYgKGp3dCAmJiBqd3Quc2lnbikge1xuICAgIHJldHVybiBhd2FpdCBhdXRoLmp3dEVuY3J5cHQocmVtb3RlVXNlciwgand0LnNpZ24pO1xuICB9XG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIHJlc29sdmUoYXV0aC5hZXNFbmNyeXB0KGJ1aWxkVXNlckJ1ZmZlcihyZW1vdGVVc2VyLm5hbWUgYXMgc3RyaW5nLCBhZXNQYXNzd29yZCkpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBdXRoVG9rZW5IZWFkZXIoYXV0aG9yaXphdGlvbkhlYWRlcjogc3RyaW5nKTogQXV0aFRva2VuSGVhZGVyIHtcbiAgY29uc3QgcGFydHMgPSBhdXRob3JpemF0aW9uSGVhZGVyLnNwbGl0KCcgJyk7XG4gIGNvbnN0IFtzY2hlbWUsIHRva2VuXSA9IHBhcnRzO1xuXG4gIHJldHVybiB7IHNjaGVtZSwgdG9rZW4gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmFzaWNQYXlsb2FkKGNyZWRlbnRpYWxzOiBzdHJpbmcpOiBCYXNpY1BheWxvYWQge1xuICBjb25zdCBpbmRleCA9IGNyZWRlbnRpYWxzLmluZGV4T2YoJzonKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHVzZXI6IHN0cmluZyA9IGNyZWRlbnRpYWxzLnNsaWNlKDAsIGluZGV4KTtcbiAgY29uc3QgcGFzc3dvcmQ6IHN0cmluZyA9IGNyZWRlbnRpYWxzLnNsaWNlKGluZGV4ICsgMSk7XG5cbiAgcmV0dXJuIHsgdXNlciwgcGFzc3dvcmQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQUVTQ3JlZGVudGlhbHMoYXV0aG9yaXphdGlvbkhlYWRlcjogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZykge1xuICBjb25zdCB7IHNjaGVtZSwgdG9rZW4gfSA9IHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb25IZWFkZXIpO1xuXG4gIC8vIGJhc2ljIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgZW5mb3JjZWRcbiAgaWYgKHNjaGVtZS50b1VwcGVyQ2FzZSgpID09PSBUT0tFTl9CQVNJQy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0KHRva2VuKS50b1N0cmluZygpO1xuXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICB9IGVsc2UgaWYgKHNjaGVtZS50b1VwcGVyQ2FzZSgpID09PSBUT0tFTl9CRUFSRVIudG9VcHBlckNhc2UoKSkge1xuICAgIGNvbnN0IHRva2VuQXNCdWZmZXIgPSBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0KHRva2VuKTtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IGFlc0RlY3J5cHQodG9rZW5Bc0J1ZmZlciwgc2VjcmV0KS50b1N0cmluZygndXRmOCcpO1xuXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBleHBpcmVSZWFzb25zOiBzdHJpbmdbXSA9IFsnSnNvbldlYlRva2VuRXJyb3InLCAnVG9rZW5FeHBpcmVkRXJyb3InXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeUpXVFBheWxvYWQodG9rZW46IHN0cmluZywgc2VjcmV0OiBzdHJpbmcpOiBSZW1vdGVVc2VyIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkOiBSZW1vdGVVc2VyID0gdmVyaWZ5UGF5bG9hZCh0b2tlbiwgc2VjcmV0KTtcblxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vICMxNjggdGhpcyBjaGVjayBzaG91bGQgYmUgcmVtb3ZlZCBhcyBzb29uIEFFUyBlbmNyeXB0IGlzIHJlbW92ZWQuXG4gICAgaWYgKGV4cGlyZVJlYXNvbnMuaW5jbHVkZXMoZXJyb3IubmFtZSkpIHtcbiAgICAgIC8vIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRoZSBqd3QgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIGFuZFxuICAgICAgLy8gb2xkIHRva2VucyBmYWlscyBzdGlsbCByZW1haW5zIGluIHVzYWdlLCB0aHVzXG4gICAgICAvLyB3ZSByZXR1cm4gYW4gYW5vbnltb3VzIHVzZXIgdG8gZm9yY2UgbG9nIGluLlxuICAgICAgcmV0dXJuIGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcbiAgICB9XG4gICAgdGhyb3cgRXJyb3JDb2RlLmdldENvZGUoSFRUUF9TVEFUVVMuVU5BVVRIT1JJWkVELCBlcnJvci5tZXNzYWdlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBdXRoSGVhZGVyVmFsaWQoYXV0aG9yaXphdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBhdXRob3JpemF0aW9uLnNwbGl0KCcgJykubGVuZ3RoID09PSAyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlkZGxld2FyZUNyZWRlbnRpYWxzKHNlY3VyaXR5OiBTZWN1cml0eSwgc2VjcmV0OiBzdHJpbmcsIGF1dGhvcml6YXRpb25IZWFkZXI6IHN0cmluZyk6IEF1dGhNaWRkbGV3YXJlUGF5bG9hZCB7XG4gIGlmIChpc0FFU0xlZ2FjeShzZWN1cml0eSkpIHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHBhcnNlQUVTQ3JlZGVudGlhbHMoYXV0aG9yaXphdGlvbkhlYWRlciwgc2VjcmV0KTtcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkQ3JlZGVudGlhbHMgPSBwYXJzZUJhc2ljUGF5bG9hZChjcmVkZW50aWFscyk7XG4gICAgaWYgKCFwYXJzZWRDcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWRDcmVkZW50aWFscztcbiAgfVxuICBjb25zdCB7IHNjaGVtZSwgdG9rZW4gfSA9IHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb25IZWFkZXIpO1xuXG4gIGlmIChfLmlzU3RyaW5nKHRva2VuKSAmJiBzY2hlbWUudG9VcHBlckNhc2UoKSA9PT0gVE9LRU5fQkVBUkVSLnRvVXBwZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gdmVyaWZ5SldUUGF5bG9hZCh0b2tlbiwgc2VjcmV0KTtcbiAgfVxufVxuIl19
package/build/lib/auth.js CHANGED
@@ -5,41 +5,31 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _lodash = _interopRequireDefault(require("lodash"));
9
-
10
8
  var _debug = _interopRequireDefault(require("debug"));
11
9
 
10
+ var _lodash = _interopRequireDefault(require("lodash"));
11
+
12
12
  var _pluginLoader = _interopRequireDefault(require("../lib/plugin-loader"));
13
13
 
14
+ var _authUtils = require("./auth-utils");
15
+
16
+ var _configUtils = require("./config-utils");
17
+
14
18
  var _constants = require("./constants");
15
19
 
16
20
  var _cryptoUtils = require("./crypto-utils");
17
21
 
18
22
  var _logger = require("./logger");
19
23
 
20
- var _authUtils = require("./auth-utils");
21
-
22
24
  var _utils = require("./utils");
23
25
 
24
- var _configUtils = require("./config-utils");
25
-
26
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
27
 
28
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
29
-
30
28
  const debug = (0, _debug.default)('verdaccio:auth');
31
29
 
32
30
  class Auth {
33
31
  // pragma: allowlist secret
34
32
  constructor(config) {
35
- _defineProperty(this, "config", void 0);
36
-
37
- _defineProperty(this, "logger", void 0);
38
-
39
- _defineProperty(this, "secret", void 0);
40
-
41
- _defineProperty(this, "plugins", void 0);
42
-
43
33
  this.config = config;
44
34
  this.logger = _logger.logger;
45
35
  this.secret = config.secret;
@@ -548,4 +538,4 @@ class Auth {
548
538
 
549
539
  var _default = Auth;
550
540
  exports.default = _default;
551
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsIkF1dGgiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImxvZ2dlciIsInNlY3JldCIsInBsdWdpbnMiLCJfbG9hZFBsdWdpbiIsIl9hcHBseURlZmF1bHRQbHVnaW5zIiwicGx1Z2luT3B0aW9ucyIsImF1dGgiLCJwbHVnaW4iLCJhdXRoZW50aWNhdGUiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwicHVzaCIsImNoYW5nZVBhc3N3b3JkIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIm5ld1Bhc3N3b3JkIiwiY2IiLCJ2YWxpZFBsdWdpbnMiLCJfIiwiZmlsdGVyIiwiaXNGdW5jdGlvbiIsImlzRW1wdHkiLCJFcnJvckNvZGUiLCJnZXRJbnRlcm5hbEVycm9yIiwiU1VQUE9SVF9FUlJPUlMiLCJQTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UiLCJpc05pbCIsImVyciIsInByb2ZpbGUiLCJlcnJvciIsImluZm8iLCJzbGljZSIsInNlbGYiLCJuZXh0Iiwic2hpZnQiLCJncm91cHMiLCJsZW5ndGgiLCJpc1N0cmluZyIsIlR5cGVFcnJvciIsImlzR3JvdXBWYWxpZCIsImlzQXJyYXkiLCJBUElfRVJST1IiLCJCQURfRk9STUFUX1VTRVJfR1JPVVAiLCJhZGRfdXNlciIsInVzZXIiLCJtZXRob2QiLCJ3YXJuIiwib2siLCJtZXNzYWdlIiwicGFja2FnZU5hbWUiLCJwYWNrYWdlVmVyc2lvbiIsImNhbGxiYWNrIiwicGtnQWxsb3dBY2NlcyIsIm5hbWUiLCJ2ZXJzaW9uIiwicGtnIiwiT2JqZWN0IiwiYXNzaWduIiwicGFja2FnZXMiLCJhbGxvd191bnB1Ymxpc2giLCJhcmd1bWVudHMiLCJpc0Vycm9yIiwiYXBpSldUbWlkZGxld2FyZSIsImhlbHBlcnMiLCJjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyIiwiY3JlYXRlUmVtb3RlVXNlciIsInJlcSIsInJlcyIsIl9uZXh0IiwicGF1c2UiLCJyZXN1bWUiLCJyZW1vdGVfdXNlciIsIl9pc1JlbW90ZVVzZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJoZWFkZXJzIiwiZ2V0QmFkUmVxdWVzdCIsIkJBRF9BVVRIX0hFQURFUiIsInNlY3VyaXR5IiwiX2hhbmRsZUFFU01pZGRsZXdhcmUiLCJfaGFuZGxlSldUQVBJTWlkZGxld2FyZSIsInNjaGVtZSIsInRva2VuIiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsImNyZWRlbnRpYWxzIiwidG9TdHJpbmciLCJnZXRGb3JiaWRkZW4iLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJpc1VuZGVmaW5lZCIsIndlYlVJSldUbWlkZGxld2FyZSIsInN0YXR1cyIsInN0YXR1c0NvZGUiLCJzZW5kIiwicmVwbGFjZSIsIlRPS0VOX0JFQVJFUiIsImp3dEVuY3J5cHQiLCJzaWduT3B0aW9ucyIsInJlYWxfZ3JvdXBzIiwicmVhbEdyb3Vwc1ZhbGlkYXRlZCIsImdyb3VwZWRHcm91cHMiLCJjb25jYXQiLCJwYXlsb2FkIiwiYWVzRW5jcnlwdCIsImJ1ZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQUdBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQVlBOztBQUNBOzs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUcsb0JBQVcsZ0JBQVgsQ0FBZDs7QUFFQSxNQUFNQyxJQUFOLENBQTRCO0FBR0g7QUFHaEJDLEVBQUFBLFdBQVcsQ0FBQ0MsTUFBRCxFQUFpQjtBQUFBOztBQUFBOztBQUFBOztBQUFBOztBQUNqQyxTQUFLQSxNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLQyxNQUFMLEdBQWNBLGNBQWQ7QUFDQSxTQUFLQyxNQUFMLEdBQWNGLE1BQU0sQ0FBQ0UsTUFBckI7QUFDQSxTQUFLQyxPQUFMLEdBQWUsS0FBS0MsV0FBTCxDQUFpQkosTUFBakIsQ0FBZjs7QUFDQSxTQUFLSyxvQkFBTDtBQUNEOztBQUVPRCxFQUFBQSxXQUFXLENBQUNKLE1BQUQsRUFBd0M7QUFDekQsVUFBTU0s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O0FBRUR0QyxNQUFBQSxJQUFJO0FBQ0wsS0E5Q0Q7QUErQ0Q7O0FBRXNCLFFBQVY4RCxVQUFVLENBQUNuRCxJQUFELEVBQW1Cb0QsV0FBbkIsRUFBaUU7QUFDdEYsVUFBTTtBQUFFQyxNQUFBQSxXQUFGO0FBQWU1QyxNQUFBQSxJQUFmO0FBQXFCbEIsTUFBQUE7QUFBckIsUUFBZ0NTLElBQXRDO0FBQ0EsVUFBTXNELG1CQUFtQixHQUFHaEYsZ0JBQUVRLEtBQUYsQ0FBUXVFLFdBQVIsSUFBdUIsRUFBdkIsR0FBNEJBLFdBQXhEO0FBQ0EsVUFBTUUsYUFBYSxHQUFHakYsZ0JBQUVRLEtBQUYsQ0FBUVMsTUFBUixJQUFrQjhELFdBQWxCLEdBQWdDOUQsTUFBTSxDQUFDaUUsTUFBUCxDQUFjRixtQkFBZCxDQUF0RDtBQUNBLFVBQU1HLE9BQW1CLEdBQUc7QUFDMUJKLE1BQUFBLFdBQVcsRUFBRUMsbUJBRGE7QUFFMUI3QyxNQUFBQSxJQUYwQjtBQUcxQmxCLE1BQUFBLE1BQU0sRUFBRWdFO0FBSGtCLEtBQTVCO0FBTUEsVUFBTWxCLEtBQWEsR0FBRyxNQUFNLDhCQUFZb0IsT0FBWixFQUFxQixLQUFLcEcsTUFBMUIsRUFBa0MrRixXQUFsQyxDQUE1QjtBQUVBLFdBQU9mLEtBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTs7O0FBQ1NxQixFQUFBQSxVQUFVLENBQUNDLEdBQUQsRUFBc0I7QUFDckMsV0FBTyw2QkFBV0EsR0FBWCxFQUFnQixLQUFLdEcsTUFBckIsQ0FBUDtBQUNEOztBQTFaeUI7O2VBNlpiSixJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFZlcmRhY2Npb0Vycm9yIH0gZnJvbSAnQHZlcmRhY2Npby9jb21tb25zLWFwaSc7XG5pbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyBDb25maWcsIExvZ2dlciwgQ2FsbGJhY2ssIElQbHVnaW5BdXRoLCBSZW1vdGVVc2VyLCBKV1RTaWduT3B0aW9ucywgU2VjdXJpdHksIEF1dGhQbHVnaW5QYWNrYWdlLCBBbGxvd0FjY2VzcywgUGFja2FnZUFjY2VzcyB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgTmV4dEZ1bmN0aW9uIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgbG9hZFBsdWdpbiBmcm9tICcuLi9saWIvcGx1Z2luLWxvYWRlcic7XG5pbXBvcnQgeyAkUmVxdWVzdEV4dGVuZCwgJFJlc3BvbnNlRXh0ZW5kLCBJQXV0aCwgQUVTUGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEFQSV9FUlJPUiwgU1VQUE9SVF9FUlJPUlMsIFRPS0VOX0JBU0lDLCBUT0tFTl9CRUFSRVIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhZXNFbmNyeXB0LCBzaWduUGF5bG9hZCB9IGZyb20gJy4vY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7XG4gIGdldERlZmF1bHRQbHVnaW5zLFxuICBnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMsXG4gIHZlcmlmeUpXVFBheWxvYWQsXG4gIGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIsXG4gIGlzQXV0aEhlYWRlclZhbGlkLFxuICBnZXRTZWN1cml0eSxcbiAgaXNBRVNMZWdhY3ksXG4gIHBhcnNlQXV0aFRva2VuSGVhZGVyLFxuICBwYXJzZUJhc2ljUGF5bG9hZCxcbiAgY3JlYXRlUmVtb3RlVXNlcixcbn0gZnJvbSAnLi9hdXRoLXV0aWxzJztcbmltcG9ydCB7IGNvbnZlcnRQYXlsb2FkVG9CYXNlNjQsIEVycm9yQ29kZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyB9IGZyb20gJy4vY29uZmlnLXV0aWxzJztcblxuY29uc3QgZGVidWcgPSBidWlsZERlYnVnKCd2ZXJkYWNjaW86YXV0aCcpO1xuXG5jbGFzcyBBdXRoIGltcGxlbWVudHMgSUF1dGgge1xuICBwdWJsaWMgY29uZmlnOiBDb25maWc7XG4gIHB1YmxpYyBsb2dnZXI6IExvZ2dlcjtcbiAgcHVibGljIHNlY3JldDogc3RyaW5nOyAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgcHVibGljIHBsdWdpbnM6IElQbHVnaW5BdXRoPENvbmZpZz5bXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB0aGlzLnNlY3JldCA9IGNvbmZpZy5zZWNyZXQ7XG4gICAgdGhpcy5wbHVnaW5zID0gdGhpcy5fbG9hZFBsdWdpbihjb25maWcpO1xuICAgIHRoaXMuX2FwcGx5RGVmYXVsdFBsdWdpbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvYWRQbHVnaW4oY29uZmlnOiBDb25maWcpOiBJUGx1Z2luQXV0aDxDb25maWc+W10ge1xuICAgIGNvbnN0IHBsdWdpbk9wdGlvbnMgPSB7XG4gICAgICBjb25maWcsXG4gICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgIH07XG5cbiAgICByZXR1cm4gbG9hZFBsdWdpbjxJUGx1Z2luQXV0aDxDb25maWc+Pihjb25maWcsIGNvbmZpZy5hdXRoLCBwbHVnaW5PcHRpb25zLCAocGx1Z2luOiBJUGx1Z2luQXV0aDxDb25maWc+KTogYm9vbGVhbiA9PiB7XG4gICAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZSwgYWxsb3dfYWNjZXNzLCBhbGxvd19wdWJsaXNoIH0gPSBwbHVnaW47XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gYXV0aGVudGljYXRlIHx8IGFsbG93X2FjY2VzcyB8fCBhbGxvd19wdWJsaXNoO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlEZWZhdWx0UGx1Z2lucygpOiB2b2lkIHtcbiAgICB0aGlzLnBsdWdpbnMucHVzaChnZXREZWZhdWx0UGx1Z2lucyh0aGlzLmxvZ2dlcikpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVBhc3N3b3JkKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcGFzc3dvcmQ6IHN0cmluZywgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG4gICAgbmV3UGFzc3dvcmQ6IHN0cmluZywgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG4gICAgY2I6IENhbGxiYWNrXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHZhbGlkUGx1Z2lucyA9IF8uZmlsdGVyKHRoaXMucGx1Z2lucywgKHBsdWdpbikgPT4gXy5pc0Z1bmN0aW9uKHBsdWdpbi5jaGFuZ2VQYXNzd29yZCkpO1xuXG4gICAgaWYgKF8uaXNFbXB0eSh2YWxpZFBsdWdpbnMpKSB7XG4gICAgICByZXR1cm4gY2IoRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoU1VQUE9SVF9FUlJPUlMuUExVR0lOX01JU1NJTkdfSU5URVJGQUNFKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdmFsaWRQbHVnaW5zKSB7XG4gICAgICBpZiAoXy5pc05pbChwbHVnaW4pIHx8IF8uaXNGdW5jdGlvbihwbHVnaW4uY2hhbmdlUGFzc3dvcmQpID09PSBmYWxzZSkge1xuICAgICAgICBkZWJ1ZygnYXV0aCBwbHVnaW4gZG9lcyBub3QgaW1wbGVtZW50IGNoYW5nZVBhc3N3b3JkLCB0cnlpbmcgbmV4dCBvbmUnKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygndXBkYXRpbmcgcGFzc3dvcmQgZm9yICVvJywgdXNlcm5hbWUpO1xuICAgICAgICBwbHVnaW4uY2hhbmdlUGFzc3dvcmQhKHVzZXJuYW1lLCBwYXNzd29yZCwgbmV3UGFzc3dvcmQsIChlcnIsIHByb2ZpbGUpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgeyB1c2VybmFtZSwgZXJyIH0sXG4gICAgICAgICAgICAgIGBBbiBlcnJvciBoYXMgYmVlbiBwcm9kdWNlZFxuICAgICAgICAgICAgdXBkYXRpbmcgdGhlIHBhc3N3b3JkIGZvciBAe3VzZXJuYW1lfS4gRXJyb3I6IEB7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKHsgdXNlcm5hbWUgfSwgJ3VwZGF0ZWQgcGFzc3dvcmQgZm9yIEB7dXNlcm5hbWV9IHdhcyBzdWNjZXNzZnVsJyk7XG4gICAgICAgICAgcmV0dXJuIGNiKG51bGwsIHByb2ZpbGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXV0aGVudGljYXRlKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGNiOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLnNoaWZ0KCkgYXMgSVBsdWdpbkF1dGg8Q29uZmlnPjtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luLmF1dGhlbnRpY2F0ZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG4gICAgICBkZWJ1ZygnYXV0aGVudGljYXRpbmcgJW8nLCB1c2VybmFtZSk7XG4gICAgICBwbHVnaW4uYXV0aGVudGljYXRlKHVzZXJuYW1lLCBwYXNzd29yZCwgZnVuY3Rpb24gKGVyciwgZ3JvdXBzKTogdm9pZCB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IHVzZXJuYW1lLCBlcnIgfSwgJ2F1dGhlbnRpY2F0aW5nIGZvciB1c2VyIEB7dXNlcm5hbWV9IGZhaWxlZC4gRXJyb3I6IEB7ZXJyLm1lc3NhZ2V9Jyk7XG4gICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeHBlY3Q6IFNLSVAgaWYgZ3JvdXBzIGlzIGZhbHNleSBhbmQgbm90IGFuIGFycmF5XG4gICAgICAgIC8vICAgICAgICAgd2l0aCBhdCBsZWFzdCBvbmUgaXRlbSAodHJ1dGh5IGxlbmd0aClcbiAgICAgICAgLy8gRXhwZWN0OiBDT05USU5VRSBvdGhlcndpc2UgKHdpbGwgZXJyb3IgaWYgZ3JvdXBzIGlzIG5vdFxuICAgICAgICAvLyAgICAgICAgIGFuIGFycmF5LCBidXQgdGhpcyBpcyBjdXJyZW50IGJlaGF2aW9yKVxuICAgICAgICAvLyBDYXZlYXQ6IFNUUklORyAoaWYgdmFsaWQpIHdpbGwgcGFzcyBzdWNjZXNzZnVsbHlcbiAgICAgICAgLy8gICAgICAgICBidWcgZ2l2ZSB1bmV4cGVjdGVkIHJlc3VsdHNcbiAgICAgICAgLy8gSW5mbzogQ2Fubm90IHVzZSBgPT0gZmFsc2UgdG8gY2hlY2sgZmFsc2V5IHZhbHVlc2BcbiAgICAgICAgaWYgKCEhZ3JvdXBzICYmIGdyb3Vwcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAvLyBUT0RPOiBjcmVhdGUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBleHBlY3RhdGlvbnNcbiAgICAgICAgICBpZiAoXy5pc1N0cmluZyhncm91cHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4gZ3JvdXAgZXJyb3I6IGludmFsaWQgdHlwZSBmb3IgZnVuY3Rpb24nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNHcm91cFZhbGlkOiBib29sZWFuID0gXy5pc0FycmF5KGdyb3Vwcyk7XG4gICAgICAgICAgaWYgKCFpc0dyb3VwVmFsaWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoQVBJX0VSUk9SLkJBRF9GT1JNQVRfVVNFUl9HUk9VUCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlYnVnKCdhdXRoZW50aWNhdGlvbiBmb3IgdXNlciAlbyB3YXMgc3VjY2Vzc2Z1bGx5LiBHcm91cHM6ICVvJywgdXNlcm5hbWUsIGdyb3Vwcyk7XG4gICAgICAgICAgcmV0dXJuIGNiKGVyciwgY3JlYXRlUmVtb3RlVXNlcih1c2VybmFtZSwgZ3JvdXBzKSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRfdXNlcih1c2VyOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGNiOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgZGVidWcoJ2FkZCB1c2VyICVvJywgdXNlcik7XG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLnNoaWZ0KCkgYXMgSVBsdWdpbkF1dGg8Q29uZmlnPjtcbiAgICAgIGxldCBtZXRob2QgPSAnYWRkdXNlcic7XG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKHBsdWdpblttZXRob2RdKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgbWV0aG9kID0gJ2FkZF91c2VyJztcbiAgICAgICAgc2VsZi5sb2dnZXIud2FybigndGhlIHBsdWdpbiBtZXRob2QgYWRkX3VzZXIgaW4gdGhlIGF1dGggcGx1Z2luIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIHJlbGVhc2UsIG5vdGlmeSB0byB0aGUgcGx1Z2luIGF1dGhvcicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKHBsdWdpblttZXRob2RdKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcC5hZGRfdXNlcigpIGV4ZWN1dGlvblxuICAgICAgICBwbHVnaW5bbWV0aG9kXSh1c2VyLCBwYXNzd29yZCwgZnVuY3Rpb24gKGVyciwgb2spOiB2b2lkIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IHVzZXIsIGVycjogZXJyLm1lc3NhZ2UgfSwgJ3RoZSB1c2VyIEB7dXNlcn0gY291bGQgbm90IGJlaW5nIGFkZGVkLiBFcnJvcjogQHtlcnJ9Jyk7XG4gICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKHsgdXNlciB9LCAndGhlIHVzZXIgQHt1c2VyfSBoYXMgYmVlbiBhZGRlZCcpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXV0aGVudGljYXRlKHVzZXIsIHBhc3N3b3JkLCBjYik7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1c2VyIHRvIGFjY2VzcyBhIHBhY2thZ2UuXG4gICAqL1xuICBwdWJsaWMgYWxsb3dfYWNjZXNzKHsgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uIH06IEF1dGhQbHVnaW5QYWNrYWdlLCB1c2VyOiBSZW1vdGVVc2VyLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBwbHVnaW5zID0gdGhpcy5wbHVnaW5zLnNsaWNlKDApO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHBrZ0FsbG93QWNjZXM6IEFsbG93QWNjZXNzID0geyBuYW1lOiBwYWNrYWdlTmFtZSwgdmVyc2lvbjogcGFja2FnZVZlcnNpb24gfTtcbiAgICBjb25zdCBwa2cgPSBPYmplY3QuYXNzaWduKHt9LCBwa2dBbGxvd0FjY2VzLCBnZXRNYXRjaGVkUGFja2FnZXNTcGVjKHBhY2thZ2VOYW1lLCB0aGlzLmNvbmZpZy5wYWNrYWdlcykpIGFzIEFsbG93QWNjZXNzICYgUGFja2FnZUFjY2VzcztcbiAgICBkZWJ1ZygnYWxsb3cgYWNjZXNzIGZvciAlbycsIHBhY2thZ2VOYW1lKTtcblxuICAgIChmdW5jdGlvbiBuZXh0KCk6IHZvaWQge1xuICAgICAgY29uc3QgcGx1Z2luOiBJUGx1Z2luQXV0aDxDb25maWc+ID0gcGx1Z2lucy5zaGlmdCgpIGFzIElQbHVnaW5BdXRoPENvbmZpZz47XG5cbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5hbGxvd19hY2Nlc3MpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBwbHVnaW4uYWxsb3dfYWNjZXNzISh1c2VyLCBwa2csIGZ1bmN0aW9uIChlcnIsIG9rOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IHBhY2thZ2VOYW1lLCBlcnIgfSwgJ2ZvcmJpZGRlbiBhY2Nlc3MgZm9yIEB7cGFja2FnZU5hbWV9LiBFcnJvcjogQHtlcnIubWVzc2FnZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvaykge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oeyBwYWNrYWdlTmFtZSB9LCAnYWxsb3dlZCBhY2Nlc3MgZm9yIEB7cGFja2FnZU5hbWV9Jyk7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG9rKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5leHQoKTsgLy8gY2IobnVsbCwgZmFsc2UpIGNhdXNlcyBuZXh0IHBsdWdpbiB0byByb2xsXG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFsbG93X3VucHVibGlzaCh7IHBhY2thZ2VOYW1lLCBwYWNrYWdlVmVyc2lvbiB9OiBBdXRoUGx1Z2luUGFja2FnZSwgdXNlcjogUmVtb3RlVXNlciwgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3QgcGtnID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9LCBnZXRNYXRjaGVkUGFja2FnZXNTcGVjKHBhY2thZ2VOYW1lLCB0aGlzLmNvbmZpZy5wYWNrYWdlcykpO1xuICAgIGRlYnVnKCdhbGxvdyB1bnB1Ymxpc2ggZm9yICVvJywgcGFja2FnZU5hbWUpO1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHRoaXMucGx1Z2lucykge1xuICAgICAgaWYgKF8uaXNOaWwocGx1Z2luKSB8fCBfLmlzRnVuY3Rpb24ocGx1Z2luLmFsbG93X3VucHVibGlzaCkgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlYnVnKCdhbGxvdyB1bnB1Ymxpc2ggZm9yICVvIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgYWxsb3dfdW5wdWJsaXNoJywgcGFja2FnZU5hbWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsdWdpbi5hbGxvd191bnB1Ymxpc2ghKHVzZXIsIHBrZywgKGVyciwgb2s6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcih7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGZvcmJpZGRlbiBwdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfSwgaXQgd2lsbCBmYWxsYmFjayBvbiB1bnB1Ymxpc2ggcGVybWlzc2lvbnMnKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfLmlzTmlsKG9rKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgZGVidWcoJ3dlIGJ5cGFzcyB1bnB1Ymxpc2ggZm9yICVvLCBwdWJsaXNoIHdpbGwgaGFuZGxlIHRoZSBhY2Nlc3MnLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbG93X3B1Ymxpc2goLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oeyBwYWNrYWdlTmFtZSwgdXNlcjogdXNlcj8ubmFtZSB9LCAnQHt1c2VyfSBhbGxvd2VkIHVucHVibGlzaCBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBvayk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdXNlciB0byBwdWJsaXNoIGEgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyBhbGxvd19wdWJsaXNoKHsgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uIH06IEF1dGhQbHVnaW5QYWNrYWdlLCB1c2VyOiBSZW1vdGVVc2VyLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBwbHVnaW5zID0gdGhpcy5wbHVnaW5zLnNsaWNlKDApO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHBrZyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lOiBwYWNrYWdlTmFtZSwgdmVyc2lvbjogcGFja2FnZVZlcnNpb24gfSwgZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyhwYWNrYWdlTmFtZSwgdGhpcy5jb25maWcucGFja2FnZXMpKTtcbiAgICBkZWJ1ZygnYWxsb3cgcHVibGlzaCBmb3IgJW8gaW5pdCB8IHBsdWdpbnM6ICVvJywgcGFja2FnZU5hbWUsIHBsdWdpbnMpO1xuICAgIChmdW5jdGlvbiBuZXh0KCk6IHZvaWQge1xuICAgICAgY29uc3QgcGx1Z2luID0gcGx1Z2lucy5zaGlmdCgpO1xuXG4gICAgICBpZiAoXy5pc05pbChwbHVnaW4pIHx8IF8uaXNGdW5jdGlvbihwbHVnaW4uYWxsb3dfcHVibGlzaCkgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIGZvciAlbyBwbHVnaW4gZG9lcyBub3QgaW1wbGVtZW50IGFsbG93X3B1Ymxpc2gnLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHBsdWdpbi5hbGxvd19wdWJsaXNoKHVzZXIsIHBrZywgKGVycjogVmVyZGFjY2lvRXJyb3IsIG9rOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChfLmlzTmlsKGVycikgPT09IGZhbHNlICYmIF8uaXNFcnJvcihlcnIpKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoeyBwYWNrYWdlTmFtZSwgdXNlcjogdXNlcj8ubmFtZSB9LCAnQHt1c2VyfSBpcyBmb3JiaWRkZW4gcHVibGlzaCBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvaykge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oeyBwYWNrYWdlTmFtZSwgdXNlcjogdXNlcj8ubmFtZSB9LCAnQHt1c2VyfSBpcyBhbGxvd2VkIHB1Ymxpc2ggZm9yIEB7cGFja2FnZU5hbWV9Jyk7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG9rKTtcbiAgICAgICAgfVxuICAgICAgICBkZWJ1ZygnYWxsb3cgcHVibGlzaCBza2lwIHZhbGlkYXRpb24gZm9yICVvJywgcGFja2FnZU5hbWUpO1xuICAgICAgICBuZXh0KCk7IC8vIGNiKG51bGwsIGZhbHNlKSBjYXVzZXMgbmV4dCBwbHVnaW4gdG8gcm9sbFxuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHB1YmxpYyBhcGlKV1RtaWRkbGV3YXJlKCk6IEZ1bmN0aW9uIHtcbiAgICBjb25zdCBwbHVnaW5zID0gdGhpcy5wbHVnaW5zLnNsaWNlKDApO1xuICAgIGNvbnN0IGhlbHBlcnMgPSB7IGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIsIGNyZWF0ZVJlbW90ZVVzZXIgfTtcbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiBwbHVnaW5zKSB7XG4gICAgICBpZiAocGx1Z2luLmFwaUpXVG1pZGRsZXdhcmUpIHtcbiAgICAgICAgcmV0dXJuIHBsdWdpbi5hcGlKV1RtaWRkbGV3YXJlKGhlbHBlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQsIF9uZXh0OiBOZXh0RnVuY3Rpb24pOiB2b2lkID0+IHtcbiAgICAgIHJlcS5wYXVzZSgpO1xuXG4gICAgICBjb25zdCBuZXh0ID0gZnVuY3Rpb24gKGVycjogVmVyZGFjY2lvRXJyb3IgfCB2b2lkKTogdm9pZCB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgLy8gdW5jb21tZW50IHRoaXMgdG8gcmVqZWN0IHVzZXJzIHdpdGggYmFkIGF1dGggaGVhZGVyc1xuICAgICAgICAvLyByZXR1cm4gX25leHQuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICAgICAgICAvLyBzd2FsbG93IGVycm9yLCB1c2VyIHJlbWFpbnMgdW5hdXRob3JpemVkXG4gICAgICAgIC8vIHNldCByZW1vdGVVc2VyRXJyb3IgdG8gaW5kaWNhdGUgdGhhdCB1c2VyIHdhcyBhdHRlbXB0aW5nIGF1dGhlbnRpY2F0aW9uXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXEucmVtb3RlX3VzZXIuZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX25leHQoKTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLl9pc1JlbW90ZVVzZXJWYWxpZChyZXEucmVtb3RlX3VzZXIpKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGluIGNhc2UgYXV0aCBoZWFkZXIgZG9lcyBub3QgZXhpc3Qgd2UgcmV0dXJuIGFub255bW91cyBmdW5jdGlvblxuICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpO1xuXG4gICAgICBjb25zdCB7IGF1dGhvcml6YXRpb24gfSA9IHJlcS5oZWFkZXJzO1xuICAgICAgaWYgKF8uaXNOaWwoYXV0aG9yaXphdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0F1dGhIZWFkZXJWYWxpZChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICBkZWJ1ZygnYXBpIG1pZGRsZXdhcmUgYXV0aCBoZWF0aGVyIGlzIG5vdCB2YWxpZCcpO1xuICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0QmFkUmVxdWVzdChBUElfRVJST1IuQkFEX0FVVEhfSEVBREVSKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlY3VyaXR5OiBTZWN1cml0eSA9IGdldFNlY3VyaXR5KHRoaXMuY29uZmlnKTtcbiAgICAgIGNvbnN0IHsgc2VjcmV0IH0gPSB0aGlzLmNvbmZpZztcblxuICAgICAgaWYgKGlzQUVTTGVnYWN5KHNlY3VyaXR5KSkge1xuICAgICAgICBkZWJ1ZygnYXBpIG1pZGRsZXdhcmUgdXNpbmcgbGVnYWN5IGF1dGggdG9rZW4nKTtcbiAgICAgICAgdGhpcy5faGFuZGxlQUVTTWlkZGxld2FyZShyZXEsIHNlY3VyaXR5LCBzZWNyZXQsIGF1dGhvcml6YXRpb24sIG5leHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVidWcoJ2FwaSBtaWRkbGV3YXJlIHVzaW5nIEpXVCBhdXRoIHRva2VuJyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUpXVEFQSU1pZGRsZXdhcmUocmVxLCBzZWN1cml0eSwgc2VjcmV0LCBhdXRob3JpemF0aW9uLCBuZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlSldUQVBJTWlkZGxld2FyZShyZXE6ICRSZXF1ZXN0RXh0ZW5kLCBzZWN1cml0eTogU2VjdXJpdHksIHNlY3JldDogc3RyaW5nLCBhdXRob3JpemF0aW9uOiBzdHJpbmcsIG5leHQ6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgeyBzY2hlbWUsIHRva2VuIH0gPSBwYXJzZUF1dGhUb2tlbkhlYWRlcihhdXRob3JpemF0aW9uKTtcbiAgICBpZiAoc2NoZW1lLnRvVXBwZXJDYXNlKCkgPT09IFRPS0VOX0JBU0lDLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIC8vIHRoaXMgc2hvdWxkIGhhcHBlbiB3aGVuIGNsaWVudCB0cmllcyB0byBsb2dpbiB3aXRoIGFuIGV4aXN0aW5nIHVzZXJcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gY29udmVydFBheWxvYWRUb0Jhc2U2NCh0b2tlbikudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHsgdXNlciwgcGFzc3dvcmQgfSA9IHBhcnNlQmFzaWNQYXlsb2FkKGNyZWRlbnRpYWxzKSBhcyBBRVNQYXlsb2FkO1xuICAgICAgdGhpcy5hdXRoZW50aWNhdGUodXNlciwgcGFzc3dvcmQsIChlcnIsIHVzZXIpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICByZXEucmVtb3RlX3VzZXIgPSB1c2VyO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG4gICAgICAgICAgbmV4dChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gand0IGhhbmRsZXJcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBhbnkgPSBnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMoc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbik7XG4gICAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgLy8gaWYgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZCB3ZSByZWx5IG9uIGl0XG4gICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWRlbnRpYWxzO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB3aXRoIEpXVCB0aHJvdyA0MDFcbiAgICAgICAgbmV4dChFcnJvckNvZGUuZ2V0Rm9yYmlkZGVuKEFQSV9FUlJPUi5CQURfVVNFUk5BTUVfUEFTU1dPUkQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVBRVNNaWRkbGV3YXJlKHJlcTogJFJlcXVlc3RFeHRlbmQsIHNlY3VyaXR5OiBTZWN1cml0eSwgc2VjcmV0OiBzdHJpbmcsIGF1dGhvcml6YXRpb246IHN0cmluZywgbmV4dDogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogYW55ID0gZ2V0TWlkZGxld2FyZUNyZWRlbnRpYWxzKHNlY3VyaXR5LCBzZWNyZXQsIGF1dGhvcml6YXRpb24pO1xuICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgY29uc3QgeyB1c2VyLCBwYXNzd29yZCB9ID0gY3JlZGVudGlhbHM7XG4gICAgICB0aGlzLmF1dGhlbnRpY2F0ZSh1c2VyLCBwYXNzd29yZCwgKGVyciwgdXNlcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IHVzZXI7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcbiAgICAgICAgICBuZXh0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3ZSBmb3JjZSBucG0gY2xpZW50IHRvIGFzayBhZ2FpbiB3aXRoIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0QmFkUmVxdWVzdChBUElfRVJST1IuQkFEX0FVVEhfSEVBREVSKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNSZW1vdGVVc2VyVmFsaWQocmVtb3RlX3VzZXI6IFJlbW90ZVVzZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gXy5pc1VuZGVmaW5lZChyZW1vdGVfdXNlcikgPT09IGZhbHNlICYmIF8uaXNVbmRlZmluZWQocmVtb3RlX3VzZXIubmFtZSkgPT09IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEpXVCBtaWRkbGV3YXJlIGZvciBXZWJVSVxuICAgKi9cbiAgcHVibGljIHdlYlVJSldUbWlkZGxld2FyZSgpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgX25leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzUmVtb3RlVXNlclZhbGlkKHJlcS5yZW1vdGVfdXNlcikpIHtcbiAgICAgICAgcmV0dXJuIF9uZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIHJlcS5wYXVzZSgpO1xuICAgICAgY29uc3QgbmV4dCA9IChlcnI6IFZlcmRhY2Npb0Vycm9yIHwgdm9pZCk6IHZvaWQgPT4ge1xuICAgICAgICByZXEucmVzdW1lKCk7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAvLyByZXEucmVtb3RlX3VzZXIuZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICByZXMuc3RhdHVzKGVyci5zdGF0dXNDb2RlKS5zZW5kKGVyci5tZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbmV4dCgpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgeyBhdXRob3JpemF0aW9uIH0gPSByZXEuaGVhZGVycztcbiAgICAgIGlmIChfLmlzTmlsKGF1dGhvcml6YXRpb24pKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNBdXRoSGVhZGVyVmFsaWQoYXV0aG9yaXphdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldEJhZFJlcXVlc3QoQVBJX0VSUk9SLkJBRF9BVVRIX0hFQURFUikpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2tlbiA9IChhdXRob3JpemF0aW9uIHx8ICcnKS5yZXBsYWNlKGAke1RPS0VOX0JFQVJFUn0gYCwgJycpO1xuICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgY3JlZGVudGlhbHM7XG4gICAgICB0cnkge1xuICAgICAgICBjcmVkZW50aWFscyA9IHZlcmlmeUpXVFBheWxvYWQodG9rZW4sIHRoaXMuY29uZmlnLnNlY3JldCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gRklYTUU6IGludGVuZGVkIGJlaGF2aW91ciwgZG8gd2Ugd2FudCBpdD9cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2lzUmVtb3RlVXNlclZhbGlkKGNyZWRlbnRpYWxzKSkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGdyb3VwcyB9ID0gY3JlZGVudGlhbHM7XG4gICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlYXRlUmVtb3RlVXNlcihuYW1lLCBncm91cHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBqd3RFbmNyeXB0KHVzZXI6IFJlbW90ZVVzZXIsIHNpZ25PcHRpb25zOiBKV1RTaWduT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyByZWFsX2dyb3VwcywgbmFtZSwgZ3JvdXBzIH0gPSB1c2VyO1xuICAgIGNvbnN0IHJlYWxHcm91cHNWYWxpZGF0ZWQgPSBfLmlzTmlsKHJlYWxfZ3JvdXBzKSA/IFtdIDogcmVhbF9ncm91cHM7XG4gICAgY29uc3QgZ3JvdXBlZEdyb3VwcyA9IF8uaXNOaWwoZ3JvdXBzKSA/IHJlYWxfZ3JvdXBzIDogZ3JvdXBzLmNvbmNhdChyZWFsR3JvdXBzVmFsaWRhdGVkKTtcbiAgICBjb25zdCBwYXlsb2FkOiBSZW1vdGVVc2VyID0ge1xuICAgICAgcmVhbF9ncm91cHM6IHJlYWxHcm91cHNWYWxpZGF0ZWQsXG4gICAgICBuYW1lLFxuICAgICAgZ3JvdXBzOiBncm91cGVkR3JvdXBzLFxuICAgIH07XG5cbiAgICBjb25zdCB0b2tlbjogc3RyaW5nID0gYXdhaXQgc2lnblBheWxvYWQocGF5bG9hZCwgdGhpcy5zZWNyZXQsIHNpZ25PcHRpb25zKTtcblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNyeXB0IGEgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIGFlc0VuY3J5cHQoYnVmOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIHJldHVybiBhZXNFbmNyeXB0KGJ1ZiwgdGhpcy5zZWNyZXQpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEF1dGg7XG4iXX0=
541
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsIkF1dGgiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImxvZ2dlciIsInNlY3JldCIsInBsdWdpbnMiLCJfbG9hZFBsdWdpbiIsIl9hcHBseURlZmF1bHRQbHVnaW5zIiwicGx1Z2luT3B0aW9ucyIsImF1dGgiLCJwbHVnaW4iLCJhdXRoZW50aWNhdGUiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwicHVzaCIsImNoYW5nZVBhc3N3b3JkIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIm5ld1Bhc3N3b3JkIiwiY2IiLCJ2YWxpZFBsdWdpbnMiLCJfIiwiZmlsdGVyIiwiaXNGdW5jdGlvbiIsImlzRW1wdHkiLCJFcnJvckNvZGUiLCJnZXRJbnRlcm5hbEVycm9yIiwiU1VQUE9SVF9FUlJPUlMiLCJQTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UiLCJpc05pbCIsImVyciIsInByb2ZpbGUiLCJlcnJvciIsImluZm8iLCJzbGljZSIsInNlbGYiLCJuZXh0Iiwic2hpZnQiLCJncm91cHMiLCJsZW5ndGgiLCJpc1N0cmluZyIsIlR5cGVFcnJvciIsImlzR3JvdXBWYWxpZCIsImlzQXJyYXkiLCJBUElfRVJST1IiLCJCQURfRk9STUFUX1VTRVJfR1JPVVAiLCJhZGRfdXNlciIsInVzZXIiLCJtZXRob2QiLCJ3YXJuIiwib2siLCJtZXNzYWdlIiwicGFja2FnZU5hbWUiLCJwYWNrYWdlVmVyc2lvbiIsImNhbGxiYWNrIiwicGtnQWxsb3dBY2NlcyIsIm5hbWUiLCJ2ZXJzaW9uIiwicGtnIiwiT2JqZWN0IiwiYXNzaWduIiwicGFja2FnZXMiLCJhbGxvd191bnB1Ymxpc2giLCJhcmd1bWVudHMiLCJpc0Vycm9yIiwiYXBpSldUbWlkZGxld2FyZSIsImhlbHBlcnMiLCJjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyIiwiY3JlYXRlUmVtb3RlVXNlciIsInJlcSIsInJlcyIsIl9uZXh0IiwicGF1c2UiLCJyZXN1bWUiLCJyZW1vdGVfdXNlciIsIl9pc1JlbW90ZVVzZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJoZWFkZXJzIiwiZ2V0QmFkUmVxdWVzdCIsIkJBRF9BVVRIX0hFQURFUiIsInNlY3VyaXR5IiwiX2hhbmRsZUFFU01pZGRsZXdhcmUiLCJfaGFuZGxlSldUQVBJTWlkZGxld2FyZSIsInNjaGVtZSIsInRva2VuIiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsImNyZWRlbnRpYWxzIiwidG9TdHJpbmciLCJnZXRGb3JiaWRkZW4iLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJpc1VuZGVmaW5lZCIsIndlYlVJSldUbWlkZGxld2FyZSIsInN0YXR1cyIsInN0YXR1c0NvZGUiLCJzZW5kIiwicmVwbGFjZSIsIlRPS0VOX0JFQVJFUiIsImp3dEVuY3J5cHQiLCJzaWduT3B0aW9ucyIsInJlYWxfZ3JvdXBzIiwicmVhbEdyb3Vwc1ZhbGlkYXRlZCIsImdyb3VwZWRHcm91cHMiLCJjb25jYXQiLCJwYXlsb2FkIiwiYWVzRW5jcnlwdCIsImJ1ZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQU1BOztBQUNBOztBQVlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsS0FBSyxHQUFHLG9CQUFXLGdCQUFYLENBQWQ7O0FBRUEsTUFBTUMsSUFBTixDQUE0QjtBQUdIO0FBR2hCQyxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBaUI7QUFDakMsU0FBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0MsTUFBTCxHQUFjQSxjQUFkO0FBQ0EsU0FBS0MsTUFBTCxHQUFjRixNQUFNLENBQUNFLE1BQXJCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtDLFdBQUwsQ0FBaUJKLE1BQWpCLENBQWY7O0FBQ0EsU0FBS0ssb0JBQUw7QUFDRDs7QUFFT0QsRUFBQUEsV0FBVyxDQUFDSixNQUFELEVBQXdDO0FBQ3pELFVBQU1NLGFBQWEsR0FBRztBQUNwQk4sTUFBQUEsTUFE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OUNEO0FBK0NEOztBQUVzQixRQUFWOEQsVUFBVSxDQUFDbkQsSUFBRCxFQUFtQm9ELFdBQW5CLEVBQWlFO0FBQ3RGLFVBQU07QUFBRUMsTUFBQUEsV0FBRjtBQUFlNUMsTUFBQUEsSUFBZjtBQUFxQmxCLE1BQUFBO0FBQXJCLFFBQWdDUyxJQUF0QztBQUNBLFVBQU1zRCxtQkFBbUIsR0FBR2hGLGdCQUFFUSxLQUFGLENBQVF1RSxXQUFSLElBQXVCLEVBQXZCLEdBQTRCQSxXQUF4RDtBQUNBLFVBQU1FLGFBQWEsR0FBR2pGLGdCQUFFUSxLQUFGLENBQVFTLE1BQVIsSUFBa0I4RCxXQUFsQixHQUFnQzlELE1BQU0sQ0FBQ2lFLE1BQVAsQ0FBY0YsbUJBQWQsQ0FBdEQ7QUFDQSxVQUFNRyxPQUFtQixHQUFHO0FBQzFCSixNQUFBQSxXQUFXLEVBQUVDLG1CQURhO0FBRTFCN0MsTUFBQUEsSUFGMEI7QUFHMUJsQixNQUFBQSxNQUFNLEVBQUVnRTtBQUhrQixLQUE1QjtBQU1BLFVBQU1sQixLQUFhLEdBQUcsTUFBTSw4QkFBWW9CLE9BQVosRUFBcUIsS0FBS3BHLE1BQTFCLEVBQWtDK0YsV0FBbEMsQ0FBNUI7QUFFQSxXQUFPZixLQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7OztBQUNTcUIsRUFBQUEsVUFBVSxDQUFDQyxHQUFELEVBQXNCO0FBQ3JDLFdBQU8sNkJBQVdBLEdBQVgsRUFBZ0IsS0FBS3RHLE1BQXJCLENBQVA7QUFDRDs7QUExWnlCOztlQTZaYkosSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgVmVyZGFjY2lvRXJyb3IgfSBmcm9tICdAdmVyZGFjY2lvL2NvbW1vbnMtYXBpJztcbmltcG9ydCB7IEFsbG93QWNjZXNzLCBBdXRoUGx1Z2luUGFja2FnZSwgQ2FsbGJhY2ssIENvbmZpZywgSVBsdWdpbkF1dGgsIEpXVFNpZ25PcHRpb25zLCBMb2dnZXIsIFBhY2thZ2VBY2Nlc3MsIFJlbW90ZVVzZXIsIFNlY3VyaXR5IH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7ICRSZXF1ZXN0RXh0ZW5kLCAkUmVzcG9uc2VFeHRlbmQsIEFFU1BheWxvYWQsIElBdXRoIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IGxvYWRQbHVnaW4gZnJvbSAnLi4vbGliL3BsdWdpbi1sb2FkZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcixcbiAgY3JlYXRlUmVtb3RlVXNlcixcbiAgZ2V0RGVmYXVsdFBsdWdpbnMsXG4gIGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyxcbiAgZ2V0U2VjdXJpdHksXG4gIGlzQUVTTGVnYWN5LFxuICBpc0F1dGhIZWFkZXJWYWxpZCxcbiAgcGFyc2VBdXRoVG9rZW5IZWFkZXIsXG4gIHBhcnNlQmFzaWNQYXlsb2FkLFxuICB2ZXJpZnlKV1RQYXlsb2FkLFxufSBmcm9tICcuL2F1dGgtdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyB9IGZyb20gJy4vY29uZmlnLXV0aWxzJztcbmltcG9ydCB7IEFQSV9FUlJPUiwgU1VQUE9SVF9FUlJPUlMsIFRPS0VOX0JBU0lDLCBUT0tFTl9CRUFSRVIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhZXNFbmNyeXB0LCBzaWduUGF5bG9hZCB9IGZyb20gJy4vY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEVycm9yQ29kZSwgY29udmVydFBheWxvYWRUb0Jhc2U2NCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2NpbzphdXRoJyk7XG5cbmNsYXNzIEF1dGggaW1wbGVtZW50cyBJQXV0aCB7XG4gIHB1YmxpYyBjb25maWc6IENvbmZpZztcbiAgcHVibGljIGxvZ2dlcjogTG9nZ2VyO1xuICBwdWJsaWMgc2VjcmV0OiBzdHJpbmc7IC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBwdWJsaWMgcGx1Z2luczogSVBsdWdpbkF1dGg8Q29uZmlnPltdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIHRoaXMuc2VjcmV0ID0gY29uZmlnLnNlY3JldDtcbiAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLl9sb2FkUGx1Z2luKGNvbmZpZyk7XG4gICAgdGhpcy5fYXBwbHlEZWZhdWx0UGx1Z2lucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZFBsdWdpbihjb25maWc6IENvbmZpZyk6IElQbHVnaW5BdXRoPENvbmZpZz5bXSB7XG4gICAgY29uc3QgcGx1Z2luT3B0aW9ucyA9IHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgfTtcblxuICAgIHJldHVybiBsb2FkUGx1Z2luPElQbHVnaW5BdXRoPENvbmZpZz4+KGNvbmZpZywgY29uZmlnLmF1dGgsIHBsdWdpbk9wdGlvbnMsIChwbHVnaW46IElQbHVnaW5BdXRoPENvbmZpZz4pOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgYXV0aGVudGljYXRlLCBhbGxvd19hY2Nlc3MsIGFsbG93X3B1Ymxpc2ggfSA9IHBsdWdpbjtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBhdXRoZW50aWNhdGUgfHwgYWxsb3dfYWNjZXNzIHx8IGFsbG93X3B1Ymxpc2g7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseURlZmF1bHRQbHVnaW5zKCk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2lucy5wdXNoKGdldERlZmF1bHRQbHVnaW5zKHRoaXMubG9nZ2VyKSk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlUGFzc3dvcmQoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICBuZXdQYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICBjYjogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRQbHVnaW5zID0gXy5maWx0ZXIodGhpcy5wbHVnaW5zLCAocGx1Z2luKSA9PiBfLmlzRnVuY3Rpb24ocGx1Z2luLmNoYW5nZVBhc3N3b3JkKSk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KHZhbGlkUGx1Z2lucykpIHtcbiAgICAgIHJldHVybiBjYihFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihTVVBQT1JUX0VSUk9SUy5QTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB2YWxpZFBsdWdpbnMpIHtcbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5jaGFuZ2VQYXNzd29yZCkgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlYnVnKCdhdXRoIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgY2hhbmdlUGFzc3dvcmQsIHRyeWluZyBuZXh0IG9uZScpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYnVnKCd1cGRhdGluZyBwYXNzd29yZCBmb3IgJW8nLCB1c2VybmFtZSk7XG4gICAgICAgIHBsdWdpbi5jaGFuZ2VQYXNzd29yZCEodXNlcm5hbWUsIHBhc3N3b3JkLCBuZXdQYXNzd29yZCwgKGVyciwgcHJvZmlsZSk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICB7IHVzZXJuYW1lLCBlcnIgfSxcbiAgICAgICAgICAgICAgYEFuIGVycm9yIGhhcyBiZWVuIHByb2R1Y2VkXG4gICAgICAgICAgICB1cGRhdGluZyB0aGUgcGFzc3dvcmQgZm9yIEB7dXNlcm5hbWV9LiBFcnJvcjogQHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oeyB1c2VybmFtZSB9LCAndXBkYXRlZCBwYXNzd29yZCBmb3IgQHt1c2VybmFtZX0gd2FzIHN1Y2Nlc3NmdWwnKTtcbiAgICAgICAgICByZXR1cm4gY2IobnVsbCwgcHJvZmlsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhdXRoZW50aWNhdGUodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKSBhcyBJUGx1Z2luQXV0aDxDb25maWc+O1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihwbHVnaW4uYXV0aGVudGljYXRlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdhdXRoZW50aWNhdGluZyAlbycsIHVzZXJuYW1lKTtcbiAgICAgIHBsdWdpbi5hdXRoZW50aWNhdGUodXNlcm5hbWUsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBncm91cHMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgdXNlcm5hbWUsIGVyciB9LCAnYXV0aGVudGljYXRpbmcgZm9yIHVzZXIgQHt1c2VybmFtZX0gZmFpbGVkLiBFcnJvcjogQHtlcnIubWVzc2FnZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGVjdDogU0tJUCBpZiBncm91cHMgaXMgZmFsc2V5IGFuZCBub3QgYW4gYXJyYXlcbiAgICAgICAgLy8gICAgICAgICB3aXRoIGF0IGxlYXN0IG9uZSBpdGVtICh0cnV0aHkgbGVuZ3RoKVxuICAgICAgICAvLyBFeHBlY3Q6IENPTlRJTlVFIG90aGVyd2lzZSAod2lsbCBlcnJvciBpZiBncm91cHMgaXMgbm90XG4gICAgICAgIC8vICAgICAgICAgYW4gYXJyYXksIGJ1dCB0aGlzIGlzIGN1cnJlbnQgYmVoYXZpb3IpXG4gICAgICAgIC8vIENhdmVhdDogU1RSSU5HIChpZiB2YWxpZCkgd2lsbCBwYXNzIHN1Y2Nlc3NmdWxseVxuICAgICAgICAvLyAgICAgICAgIGJ1ZyBnaXZlIHVuZXhwZWN0ZWQgcmVzdWx0c1xuICAgICAgICAvLyBJbmZvOiBDYW5ub3QgdXNlIGA9PSBmYWxzZSB0byBjaGVjayBmYWxzZXkgdmFsdWVzYFxuICAgICAgICBpZiAoISFncm91cHMgJiYgZ3JvdXBzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIC8vIFRPRE86IGNyZWF0ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGV4cGVjdGF0aW9uc1xuICAgICAgICAgIGlmIChfLmlzU3RyaW5nKGdyb3VwcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbiBncm91cCBlcnJvcjogaW52YWxpZCB0eXBlIGZvciBmdW5jdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0dyb3VwVmFsaWQ6IGJvb2xlYW4gPSBfLmlzQXJyYXkoZ3JvdXBzKTtcbiAgICAgICAgICBpZiAoIWlzR3JvdXBWYWxpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihBUElfRVJST1IuQkFEX0ZPUk1BVF9VU0VSX0dST1VQKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVidWcoJ2F1dGhlbnRpY2F0aW9uIGZvciB1c2VyICVvIHdhcyBzdWNjZXNzZnVsbHkuIEdyb3VwczogJW8nLCB1c2VybmFtZSwgZ3JvdXBzKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyLCBjcmVhdGVSZW1vdGVVc2VyKHVzZXJuYW1lLCBncm91cHMpKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFkZF91c2VyKHVzZXI6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBkZWJ1ZygnYWRkIHVzZXIgJW8nLCB1c2VyKTtcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKSBhcyBJUGx1Z2luQXV0aDxDb25maWc+O1xuICAgICAgbGV0IG1ldGhvZCA9ICdhZGR1c2VyJztcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBtZXRob2QgPSAnYWRkX3VzZXInO1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKCd0aGUgcGx1Z2luIG1ldGhvZCBhZGRfdXNlciBpbiB0aGUgYXV0aCBwbHVnaW4gaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIG5leHQgbWFqb3IgcmVsZWFzZSwgbm90aWZ5IHRvIHRoZSBwbHVnaW4gYXV0aG9yJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwLmFkZF91c2VyKCkgZXhlY3V0aW9uXG4gICAgICAgIHBsdWdpblttZXRob2RdKHVzZXIsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBvayk6IHZvaWQge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgdXNlciwgZXJyOiBlcnIubWVzc2FnZSB9LCAndGhlIHVzZXIgQHt1c2VyfSBjb3VsZCBub3QgYmVpbmcgYWRkZWQuIEVycm9yOiBAe2Vycn0nKTtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oeyB1c2VyIH0sICd0aGUgdXNlciBAe3VzZXJ9IGhhcyBiZWVuIGFkZGVkJyk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5hdXRoZW50aWNhdGUodXNlciwgcGFzc3dvcmQsIGNiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHVzZXIgdG8gYWNjZXNzIGEgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyBhbGxvd19hY2Nlc3MoeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogQXV0aFBsdWdpblBhY2thZ2UsIHVzZXI6IFJlbW90ZVVzZXIsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnQWxsb3dBY2NlczogQWxsb3dBY2Nlc3MgPSB7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9O1xuICAgIGNvbnN0IHBrZyA9IE9iamVjdC5hc3NpZ24oe30sIHBrZ0FsbG93QWNjZXMsIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKSkgYXMgQWxsb3dBY2Nlc3MgJiBQYWNrYWdlQWNjZXNzO1xuICAgIGRlYnVnKCdhbGxvdyBhY2Nlc3MgZm9yICVvJywgcGFja2FnZU5hbWUpO1xuXG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW46IElQbHVnaW5BdXRoPENvbmZpZz4gPSBwbHVnaW5zLnNoaWZ0KCkgYXMgSVBsdWdpbkF1dGg8Q29uZmlnPjtcblxuICAgICAgaWYgKF8uaXNOaWwocGx1Z2luKSB8fCBfLmlzRnVuY3Rpb24ocGx1Z2luLmFsbG93X2FjY2VzcykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIHBsdWdpbi5hbGxvd19hY2Nlc3MhKHVzZXIsIHBrZywgZnVuY3Rpb24gKGVyciwgb2s6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgcGFja2FnZU5hbWUsIGVyciB9LCAnZm9yYmlkZGVuIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0uIEVycm9yOiBAe2Vyci5tZXNzYWdlfScpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lIH0sICdhbGxvd2VkIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpOyAvLyBjYihudWxsLCBmYWxzZSkgY2F1c2VzIG5leHQgcGx1Z2luIHRvIHJvbGxcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH1cblxuICBwdWJsaWMgYWxsb3dfdW5wdWJsaXNoKHsgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uIH06IEF1dGhQbHVnaW5QYWNrYWdlLCB1c2VyOiBSZW1vdGVVc2VyLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBwa2cgPSBPYmplY3QuYXNzaWduKHsgbmFtZTogcGFja2FnZU5hbWUsIHZlcnNpb246IHBhY2thZ2VWZXJzaW9uIH0sIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKSk7XG4gICAgZGVidWcoJ2FsbG93IHVucHVibGlzaCBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5wbHVnaW5zKSB7XG4gICAgICBpZiAoXy5pc05pbChwbHVnaW4pIHx8IF8uaXNGdW5jdGlvbihwbHVnaW4uYWxsb3dfdW5wdWJsaXNoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2FsbG93IHVucHVibGlzaCBmb3IgJW8gcGx1Z2luIGRvZXMgbm90IGltcGxlbWVudCBhbGxvd191bnB1Ymxpc2gnLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGx1Z2luLmFsbG93X3VucHVibGlzaCEodXNlciwgcGtnLCAoZXJyLCBvazogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKHsgcGFja2FnZU5hbWUsIHVzZXI6IHVzZXI/Lm5hbWUgfSwgJ0B7dXNlcn0gZm9yYmlkZGVuIHB1Ymxpc2ggZm9yIEB7cGFja2FnZU5hbWV9LCBpdCB3aWxsIGZhbGxiYWNrIG9uIHVucHVibGlzaCBwZXJtaXNzaW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF8uaXNOaWwob2spID09PSB0cnVlKSB7XG4gICAgICAgICAgICBkZWJ1Zygnd2UgYnlwYXNzIHVucHVibGlzaCBmb3IgJW8sIHB1Ymxpc2ggd2lsbCBoYW5kbGUgdGhlIGFjY2VzcycsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dfcHVibGlzaCguLi5hcmd1bWVudHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGFsbG93ZWQgdW5wdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG9rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1c2VyIHRvIHB1Ymxpc2ggYSBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIGFsbG93X3B1Ymxpc2goeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogQXV0aFBsdWdpblBhY2thZ2UsIHVzZXI6IFJlbW90ZVVzZXIsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9LCBnZXRNYXRjaGVkUGFja2FnZXNTcGVjKHBhY2thZ2VOYW1lLCB0aGlzLmNvbmZpZy5wYWNrYWdlcykpO1xuICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIGZvciAlbyBpbml0IHwgcGx1Z2luczogJW8nLCBwYWNrYWdlTmFtZSwgcGx1Z2lucyk7XG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLnNoaWZ0KCk7XG5cbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5hbGxvd19wdWJsaXNoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2FsbG93IHB1Ymxpc2ggZm9yICVvIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgYWxsb3dfcHVibGlzaCcsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcGx1Z2luLmFsbG93X3B1Ymxpc2godXNlciwgcGtnLCAoZXJyOiBWZXJkYWNjaW9FcnJvciwgb2s6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UgJiYgXy5pc0Vycm9yKGVycikpIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGlzIGZvcmJpZGRlbiBwdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGlzIGFsbG93ZWQgcHVibGlzaCBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIHNraXAgdmFsaWRhdGlvbiBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIG5leHQoKTsgLy8gY2IobnVsbCwgZmFsc2UpIGNhdXNlcyBuZXh0IHBsdWdpbiB0byByb2xsXG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFwaUpXVG1pZGRsZXdhcmUoKTogRnVuY3Rpb24ge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3QgaGVscGVycyA9IHsgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlciwgY3JlYXRlUmVtb3RlVXNlciB9O1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIGlmIChwbHVnaW4uYXBpSldUbWlkZGxld2FyZSkge1xuICAgICAgICByZXR1cm4gcGx1Z2luLmFwaUpXVG1pZGRsZXdhcmUoaGVscGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgX25leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgICAgcmVxLnBhdXNlKCk7XG5cbiAgICAgIGNvbnN0IG5leHQgPSBmdW5jdGlvbiAoZXJyOiBWZXJkYWNjaW9FcnJvciB8IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICAvLyB1bmNvbW1lbnQgdGhpcyB0byByZWplY3QgdXNlcnMgd2l0aCBiYWQgYXV0aCBoZWFkZXJzXG4gICAgICAgIC8vIHJldHVybiBfbmV4dC5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgICAgIC8vIHN3YWxsb3cgZXJyb3IsIHVzZXIgcmVtYWlucyB1bmF1dGhvcml6ZWRcbiAgICAgICAgLy8gc2V0IHJlbW90ZVVzZXJFcnJvciB0byBpbmRpY2F0ZSB0aGF0IHVzZXIgd2FzIGF0dGVtcHRpbmcgYXV0aGVudGljYXRpb25cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfbmV4dCgpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuX2lzUmVtb3RlVXNlclZhbGlkKHJlcS5yZW1vdGVfdXNlcikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaW4gY2FzZSBhdXRoIGhlYWRlciBkb2VzIG5vdCBleGlzdCB3ZSByZXR1cm4gYW5vbnltb3VzIGZ1bmN0aW9uXG4gICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG5cbiAgICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbiB9ID0gcmVxLmhlYWRlcnM7XG4gICAgICBpZiAoXy5pc05pbChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQXV0aEhlYWRlclZhbGlkKGF1dGhvcml6YXRpb24pKSB7XG4gICAgICAgIGRlYnVnKCdhcGkgbWlkZGxld2FyZSBhdXRoIGhlYXRoZXIgaXMgbm90IHZhbGlkJyk7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5CQURfQVVUSF9IRUFERVIpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VjdXJpdHk6IFNlY3VyaXR5ID0gZ2V0U2VjdXJpdHkodGhpcy5jb25maWcpO1xuICAgICAgY29uc3QgeyBzZWNyZXQgfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgICBpZiAoaXNBRVNMZWdhY3koc2VjdXJpdHkpKSB7XG4gICAgICAgIGRlYnVnKCdhcGkgbWlkZGxld2FyZSB1c2luZyBsZWdhY3kgYXV0aCB0b2tlbicpO1xuICAgICAgICB0aGlzLl9oYW5kbGVBRVNNaWRkbGV3YXJlKHJlcSwgc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbiwgbmV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygnYXBpIG1pZGRsZXdhcmUgdXNpbmcgSldUIGF1dGggdG9rZW4nKTtcbiAgICAgICAgdGhpcy5faGFuZGxlSldUQVBJTWlkZGxld2FyZShyZXEsIHNlY3VyaXR5LCBzZWNyZXQsIGF1dGhvcml6YXRpb24sIG5leHQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVKV1RBUElNaWRkbGV3YXJlKHJlcTogJFJlcXVlc3RFeHRlbmQsIHNlY3VyaXR5OiBTZWN1cml0eSwgc2VjcmV0OiBzdHJpbmcsIGF1dGhvcml6YXRpb246IHN0cmluZywgbmV4dDogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCB7IHNjaGVtZSwgdG9rZW4gfSA9IHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb24pO1xuICAgIGlmIChzY2hlbWUudG9VcHBlckNhc2UoKSA9PT0gVE9LRU5fQkFTSUMudG9VcHBlckNhc2UoKSkge1xuICAgICAgLy8gdGhpcyBzaG91bGQgaGFwcGVuIHdoZW4gY2xpZW50IHRyaWVzIHRvIGxvZ2luIHdpdGggYW4gZXhpc3RpbmcgdXNlclxuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0KHRva2VuKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgeyB1c2VyLCBwYXNzd29yZCB9ID0gcGFyc2VCYXNpY1BheWxvYWQoY3JlZGVudGlhbHMpIGFzIEFFU1BheWxvYWQ7XG4gICAgICB0aGlzLmF1dGhlbnRpY2F0ZSh1c2VyLCBwYXNzd29yZCwgKGVyciwgdXNlcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IHVzZXI7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcbiAgICAgICAgICBuZXh0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBqd3QgaGFuZGxlclxuICAgICAgY29uc3QgY3JlZGVudGlhbHM6IGFueSA9IGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyhzZWN1cml0eSwgc2VjcmV0LCBhdXRob3JpemF0aW9uKTtcbiAgICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgICAvLyBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkIHdlIHJlbHkgb24gaXRcbiAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlZGVudGlhbHM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdpdGggSldUIHRocm93IDQwMVxuICAgICAgICBuZXh0KEVycm9yQ29kZS5nZXRGb3JiaWRkZW4oQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUFFU01pZGRsZXdhcmUocmVxOiAkUmVxdWVzdEV4dGVuZCwgc2VjdXJpdHk6IFNlY3VyaXR5LCBzZWNyZXQ6IHN0cmluZywgYXV0aG9yaXphdGlvbjogc3RyaW5nLCBuZXh0OiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBhbnkgPSBnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMoc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbik7XG4gICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCB7IHVzZXIsIHBhc3N3b3JkIH0gPSBjcmVkZW50aWFscztcbiAgICAgIHRoaXMuYXV0aGVudGljYXRlKHVzZXIsIHBhc3N3b3JkLCAoZXJyLCB1c2VyKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gdXNlcjtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpO1xuICAgICAgICAgIG5leHQoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHdlIGZvcmNlIG5wbSBjbGllbnQgdG8gYXNrIGFnYWluIHdpdGggYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5CQURfQVVUSF9IRUFERVIpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1JlbW90ZVVzZXJWYWxpZChyZW1vdGVfdXNlcjogUmVtb3RlVXNlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBfLmlzVW5kZWZpbmVkKHJlbW90ZV91c2VyKSA9PT0gZmFsc2UgJiYgXy5pc1VuZGVmaW5lZChyZW1vdGVfdXNlci5uYW1lKSA9PT0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSldUIG1pZGRsZXdhcmUgZm9yIFdlYlVJXG4gICAqL1xuICBwdWJsaWMgd2ViVUlKV1RtaWRkbGV3YXJlKCk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBfbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5faXNSZW1vdGVVc2VyVmFsaWQocmVxLnJlbW90ZV91c2VyKSkge1xuICAgICAgICByZXR1cm4gX25leHQoKTtcbiAgICAgIH1cblxuICAgICAgcmVxLnBhdXNlKCk7XG4gICAgICBjb25zdCBuZXh0ID0gKGVycjogVmVyZGFjY2lvRXJyb3IgfCB2b2lkKTogdm9pZCA9PiB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1c0NvZGUpLnNlbmQoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9uZXh0KCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7IGF1dGhvcml6YXRpb24gfSA9IHJlcS5oZWFkZXJzO1xuICAgICAgaWYgKF8uaXNOaWwoYXV0aG9yaXphdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0F1dGhIZWFkZXJWYWxpZChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0QmFkUmVxdWVzdChBUElfRVJST1IuQkFEX0FVVEhfSEVBREVSKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gKGF1dGhvcml6YXRpb24gfHwgJycpLnJlcGxhY2UoYCR7VE9LRU5fQkVBUkVSfSBgLCAnJyk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBjcmVkZW50aWFscztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gdmVyaWZ5SldUUGF5bG9hZCh0b2tlbiwgdGhpcy5jb25maWcuc2VjcmV0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBGSVhNRTogaW50ZW5kZWQgYmVoYXZpb3VyLCBkbyB3ZSB3YW50IGl0P1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNSZW1vdGVVc2VyVmFsaWQoY3JlZGVudGlhbHMpKSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZ3JvdXBzIH0gPSBjcmVkZW50aWFscztcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVSZW1vdGVVc2VyKG5hbWUsIGdyb3Vwcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGp3dEVuY3J5cHQodXNlcjogUmVtb3RlVXNlciwgc2lnbk9wdGlvbnM6IEpXVFNpZ25PcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHJlYWxfZ3JvdXBzLCBuYW1lLCBncm91cHMgfSA9IHVzZXI7XG4gICAgY29uc3QgcmVhbEdyb3Vwc1ZhbGlkYXRlZCA9IF8uaXNOaWwocmVhbF9ncm91cHMpID8gW10gOiByZWFsX2dyb3VwcztcbiAgICBjb25zdCBncm91cGVkR3JvdXBzID0gXy5pc05pbChncm91cHMpID8gcmVhbF9ncm91cHMgOiBncm91cHMuY29uY2F0KHJlYWxHcm91cHNWYWxpZGF0ZWQpO1xuICAgIGNvbnN0IHBheWxvYWQ6IFJlbW90ZVVzZXIgPSB7XG4gICAgICByZWFsX2dyb3VwczogcmVhbEdyb3Vwc1ZhbGlkYXRlZCxcbiAgICAgIG5hbWUsXG4gICAgICBncm91cHM6IGdyb3VwZWRHcm91cHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHRva2VuOiBzdHJpbmcgPSBhd2FpdCBzaWduUGF5bG9hZChwYXlsb2FkLCB0aGlzLnNlY3JldCwgc2lnbk9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY3J5cHQgYSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgYWVzRW5jcnlwdChidWY6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIGFlc0VuY3J5cHQoYnVmLCB0aGlzLnNlY3JldCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXV0aDtcbiJdfQ==