@appium/support 2.55.2 → 2.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/build/lib/env.js +102 -0
  2. package/build/lib/fs.js +74 -56
  3. package/build/lib/image-util.js +4 -332
  4. package/build/lib/index.js +18 -6
  5. package/build/lib/log-internal.js +2 -4
  6. package/build/lib/logger.js +2 -4
  7. package/build/lib/logging.js +2 -4
  8. package/build/lib/mjpeg.js +2 -4
  9. package/build/lib/mkdirp.js +7 -11
  10. package/build/lib/net.js +2 -4
  11. package/build/lib/node.js +99 -2
  12. package/build/lib/npm.js +240 -0
  13. package/build/lib/plist.js +2 -4
  14. package/build/lib/process.js +2 -4
  15. package/build/lib/system.js +2 -4
  16. package/build/lib/tempdir.js +2 -4
  17. package/build/lib/timing.js +2 -4
  18. package/build/lib/util.js +6 -8
  19. package/build/lib/zip.js +4 -8
  20. package/lib/env.js +162 -0
  21. package/lib/fs.js +193 -69
  22. package/lib/image-util.js +3 -570
  23. package/lib/index.js +8 -2
  24. package/lib/log-internal.js +2 -2
  25. package/lib/logging.js +1 -1
  26. package/lib/mkdirp.js +3 -6
  27. package/lib/net.js +4 -4
  28. package/lib/node.js +104 -1
  29. package/lib/npm.js +335 -0
  30. package/lib/tempdir.js +6 -6
  31. package/lib/util.js +28 -24
  32. package/lib/zip.js +7 -8
  33. package/package.json +20 -9
  34. package/build/test/assets/sample_binary.plist +0 -0
  35. package/build/test/assets/sample_text.plist +0 -28
  36. package/build/test/fs-specs.js +0 -264
  37. package/build/test/helpers.js +0 -35
  38. package/build/test/image-util-e2e-specs.js +0 -227
  39. package/build/test/index-specs.js +0 -49
  40. package/build/test/log-internals-specs.js +0 -97
  41. package/build/test/logger/helpers.js +0 -71
  42. package/build/test/logger/logger-force-specs.js +0 -41
  43. package/build/test/logger/logger-normal-specs.js +0 -113
  44. package/build/test/logger/logger-test-specs.js +0 -40
  45. package/build/test/mjpeg-e2e-specs.js +0 -96
  46. package/build/test/net-e2e-specs.js +0 -32
  47. package/build/test/node-e2e-specs.js +0 -22
  48. package/build/test/plist-specs.js +0 -54
  49. package/build/test/process-specs.js +0 -104
  50. package/build/test/system-specs.js +0 -136
  51. package/build/test/tempdir-specs.js +0 -86
  52. package/build/test/timing-specs.js +0 -125
  53. package/build/test/util-e2e-specs.js +0 -136
  54. package/build/test/util-specs.js +0 -537
  55. package/build/test/zip-e2e-specs.js +0 -233
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.MANIFEST_RELATIVE_PATH = exports.MANIFEST_BASENAME = exports.DEFAULT_APPIUM_HOME = void 0;
9
+ exports.hasAppiumDependency = hasAppiumDependency;
10
+ exports.resolveManifestPath = exports.resolveAppiumHome = exports.readPackageInDir = void 0;
11
+
12
+ require("source-map-support/register");
13
+
14
+ var _lodash = _interopRequireDefault(require("lodash"));
15
+
16
+ var _os = require("os");
17
+
18
+ var _path = _interopRequireDefault(require("path"));
19
+
20
+ var _pkgDir = _interopRequireDefault(require("pkg-dir"));
21
+
22
+ var _readPkg = _interopRequireDefault(require("read-pkg"));
23
+
24
+ var _npm = require("./npm");
25
+
26
+ const DEFAULT_APPIUM_HOME = _path.default.resolve((0, _os.homedir)(), '.appium');
27
+
28
+ exports.DEFAULT_APPIUM_HOME = DEFAULT_APPIUM_HOME;
29
+ const MANIFEST_BASENAME = 'extensions.yaml';
30
+ exports.MANIFEST_BASENAME = MANIFEST_BASENAME;
31
+
32
+ const MANIFEST_RELATIVE_PATH = _path.default.join('node_modules', '.cache', 'appium', MANIFEST_BASENAME);
33
+
34
+ exports.MANIFEST_RELATIVE_PATH = MANIFEST_RELATIVE_PATH;
35
+
36
+ async function hasAppiumDependency(cwd) {
37
+ let listResult;
38
+ let resolved;
39
+ let version;
40
+
41
+ try {
42
+ var _listResult$dependenc, _listResult, _listResult$dependenc2, _listResult$dependenc3, _listResult$dependenc4, _listResult2, _listResult2$dependen, _listResult2$dependen2;
43
+
44
+ listResult = await _npm.npm.list(cwd, 'appium');
45
+ resolved = (_listResult$dependenc = (_listResult = listResult) === null || _listResult === void 0 ? void 0 : (_listResult$dependenc2 = _listResult.dependencies) === null || _listResult$dependenc2 === void 0 ? void 0 : (_listResult$dependenc3 = _listResult$dependenc2.appium) === null || _listResult$dependenc3 === void 0 ? void 0 : _listResult$dependenc3.resolved) !== null && _listResult$dependenc !== void 0 ? _listResult$dependenc : '';
46
+ version = (_listResult$dependenc4 = (_listResult2 = listResult) === null || _listResult2 === void 0 ? void 0 : (_listResult2$dependen = _listResult2.dependencies) === null || _listResult2$dependen === void 0 ? void 0 : (_listResult2$dependen2 = _listResult2$dependen.appium) === null || _listResult2$dependen2 === void 0 ? void 0 : _listResult2$dependen2.version) !== null && _listResult$dependenc4 !== void 0 ? _listResult$dependenc4 : '';
47
+ } catch {
48
+ try {
49
+ var _ref, _pkg$dependencies$app, _pkg$dependencies, _pkg$devDependencies, _pkg$optionalDependen;
50
+
51
+ const pkg = await readPackageInDir(cwd);
52
+ version = resolved = (_ref = (_pkg$dependencies$app = pkg === null || pkg === void 0 ? void 0 : (_pkg$dependencies = pkg.dependencies) === null || _pkg$dependencies === void 0 ? void 0 : _pkg$dependencies.appium) !== null && _pkg$dependencies$app !== void 0 ? _pkg$dependencies$app : pkg === null || pkg === void 0 ? void 0 : (_pkg$devDependencies = pkg.devDependencies) === null || _pkg$devDependencies === void 0 ? void 0 : _pkg$devDependencies.appium) !== null && _ref !== void 0 ? _ref : pkg === null || pkg === void 0 ? void 0 : (_pkg$optionalDependen = pkg.optionalDependencies) === null || _pkg$optionalDependen === void 0 ? void 0 : _pkg$optionalDependen.appium;
53
+ } catch {}
54
+ }
55
+
56
+ return Boolean(version && (!resolved || resolved && !resolved.startsWith('file:')) && !version.startsWith('1') && !version.startsWith('0'));
57
+ }
58
+
59
+ const readPackageInDir = _lodash.default.memoize(async function _readPackageInDir(cwd) {
60
+ return await (0, _readPkg.default)({
61
+ cwd,
62
+ normalize: true
63
+ });
64
+ });
65
+
66
+ exports.readPackageInDir = readPackageInDir;
67
+
68
+ const resolveAppiumHome = _lodash.default.memoize(async function _resolveAppiumHome(cwd = process.cwd()) {
69
+ if (process.env.APPIUM_HOME) {
70
+ return process.env.APPIUM_HOME;
71
+ }
72
+
73
+ if (!_path.default.isAbsolute(cwd)) {
74
+ throw new TypeError('`cwd` parameter must be an absolute path');
75
+ }
76
+
77
+ let currentPkgDir;
78
+
79
+ try {
80
+ currentPkgDir = await (0, _pkgDir.default)(cwd);
81
+
82
+ if (!currentPkgDir) {
83
+ return DEFAULT_APPIUM_HOME;
84
+ }
85
+ } catch {
86
+ return DEFAULT_APPIUM_HOME;
87
+ }
88
+
89
+ return (await hasAppiumDependency(currentPkgDir)) ? currentPkgDir : DEFAULT_APPIUM_HOME;
90
+ });
91
+
92
+ exports.resolveAppiumHome = resolveAppiumHome;
93
+
94
+ const resolveManifestPath = _lodash.default.memoize(async function _resolveManifestPath(appiumHome) {
95
+ var _appiumHome;
96
+
97
+ appiumHome = (_appiumHome = appiumHome) !== null && _appiumHome !== void 0 ? _appiumHome : await resolveAppiumHome();
98
+ return _path.default.join(appiumHome, MANIFEST_RELATIVE_PATH);
99
+ });
100
+
101
+ exports.resolveManifestPath = resolveManifestPath;
102
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9lbnYuanMiXSwibmFtZXMiOlsiREVGQVVMVF9BUFBJVU1fSE9NRSIsInBhdGgiLCJyZXNvbHZlIiwiTUFOSUZFU1RfQkFTRU5BTUUiLCJNQU5JRkVTVF9SRUxBVElWRV9QQVRIIiwiam9pbiIsImhhc0FwcGl1bURlcGVuZGVuY3kiLCJjd2QiLCJsaXN0UmVzdWx0IiwicmVzb2x2ZWQiLCJ2ZXJzaW9uIiwibnBtIiwibGlzdCIsImRlcGVuZGVuY2llcyIsImFwcGl1bSIsInBrZyIsInJlYWRQYWNrYWdlSW5EaXIiLCJkZXZEZXBlbmRlbmNpZXMiLCJvcHRpb25hbERlcGVuZGVuY2llcyIsIkJvb2xlYW4iLCJzdGFydHNXaXRoIiwiXyIsIm1lbW9pemUiLCJfcmVhZFBhY2thZ2VJbkRpciIsIm5vcm1hbGl6ZSIsInJlc29sdmVBcHBpdW1Ib21lIiwiX3Jlc29sdmVBcHBpdW1Ib21lIiwicHJvY2VzcyIsImVudiIsIkFQUElVTV9IT01FIiwiaXNBYnNvbHV0ZSIsIlR5cGVFcnJvciIsImN1cnJlbnRQa2dEaXIiLCJyZXNvbHZlTWFuaWZlc3RQYXRoIiwiX3Jlc29sdmVNYW5pZmVzdFBhdGgiLCJhcHBpdW1Ib21lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBTU8sTUFBTUEsbUJBQW1CLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYSxrQkFBYixFQUF3QixTQUF4QixDQUE1Qjs7O0FBTUEsTUFBTUMsaUJBQWlCLEdBQUcsaUJBQTFCOzs7QUFNQSxNQUFNQyxzQkFBc0IsR0FBR0gsY0FBS0ksSUFBTCxDQUNwQyxjQURvQyxFQUVwQyxRQUZvQyxFQUdwQyxRQUhvQyxFQUlwQ0YsaUJBSm9DLENBQS9COzs7O0FBdUJBLGVBQWVHLG1CQUFmLENBQW9DQyxHQUFwQyxFQUF5QztBQUs5QyxNQUFJQyxVQUFKO0FBRUEsTUFBSUMsUUFBSjtBQUVBLE1BQUlDLE9BQUo7O0FBQ0EsTUFBSTtB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Y2tcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgcGtnRGlyIGZyb20gJ3BrZy1kaXInO1xuaW1wb3J0IHJlYWRQa2cgZnJvbSAncmVhZC1wa2cnO1xuaW1wb3J0IHsgbnBtIH0gZnJvbSAnLi9ucG0nO1xuXG4vKipcbiAqIFBhdGggdG8gdGhlIGRlZmF1bHQgYEFQUElVTV9IT01FYCBkaXIgKGB+Ly5hcHBpdW1gKS5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FQUElVTV9IT01FID0gcGF0aC5yZXNvbHZlKGhvbWVkaXIoKSwgJy5hcHBpdW0nKTtcblxuLyoqXG4gKiBCYXNlbmFtZSBvZiBleHRlbnNpb24gbWFuaWZlc3QgZmlsZS5cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBNQU5JRkVTVF9CQVNFTkFNRSA9ICdleHRlbnNpb25zLnlhbWwnO1xuXG4vKipcbiAqIFJlbGF0aXZlIHBhdGggdG8gZXh0ZW5zaW9uIG1hbmlmZXN0IGZpbGUgZnJvbSBgQVBQSVVNX0hPTUVgLlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IE1BTklGRVNUX1JFTEFUSVZFX1BBVEggPSBwYXRoLmpvaW4oXG4gICdub2RlX21vZHVsZXMnLFxuICAnLmNhY2hlJyxcbiAgJ2FwcGl1bScsXG4gIE1BTklGRVNUX0JBU0VOQU1FLFxuKTtcblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiBhcHBpdW0gaXMgaW5zdGFsbGVkIGFzIGEgZGVwZW5kZW5jeSBvZiBhIGxvY2FsIHBhY2thZ2UgYXQgYGN3ZGAuXG4gKlxuICogVGhlIGZvbGxvd2luZyBzcGVjaWFsIGNhc2VzIGFyZSBjb25zaWRlcmVkOlxuICpcbiAqIC0gSWYgYHJlc29sdmVkYCBzdGFydHMgd2l0aCBgZmlsZTpgLCB0aGVuIGBjd2RgIGxpa2VseSBwb2ludHMgdG8gYGFwcGl1bS1tb25vcmVwb2AsIGFuZCAoZm9yIG5vdykgd2UgZXhwZWN0IGBBUFBJVU1fSE9NRWAgdG8gYmUgdGhlIGRlZmF1bHQuXG4gKiAtIElmIHRoZSBgdmVyc2lvbmAgYmVnaW5zIHdpdGggYDBgIG9yIGAxYCwgd2UncmUgbG9va2luZyBhdCBhbiBvbGQgdmVyc2lvbiBvZiBgYXBwaXVtYCAobm90IHRoaXMgb25lISlcbiAqXG4gKiBOb3RlIHRoYXQgd2UgYXJlIF9ub3RfIHBlcmZvcm1pbmcgdGhlIGNoZWNrIFwiaXMgdGhlIGN1cnJlbnRseSBydW5uaW5nIEFwcGl1bSB0aGUgc2FtZSBvbmUgYXMgZm91bmQgaW4gdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzXCIsIGJlY2F1c2UgSSdtIG5vdCBzdXJlIGl0IGFjdHVhbGx5IG1hdHRlcnMgKGFzc3VtaW5nIHRoZSB2ZXJzaW9ucyBhcmUgY29tcGF0aWJsZSkuXG4gKiBSZWdhcmRsZXNzIHdlIG1heSB3YW50IHRvIG1ha2UgdGhpcyBtb3JlIHJvYnVzdCBpbiB0aGUgZnV0dXJlLCBhcyB3ZSBoaXQgZWRnZSBjYXNlcy5cbiAqXG4gKiBfQWxzb18gbm90ZSB0aGF0IGlmIGBhcHBpdW1gIGFwcGVhcnMgYXMgYSBkZXBlbmRlbmN5IGluIGBwYWNrYWdlLmpzb25gIF9idXQgaXQgaXMgbm90IHlldCBpbnN0YWxsZWRfIHRoaXMgZnVuY3Rpb24gd2lsbCByZXNvbHZlIGBmYWxzZWAuICBUaGlzIG1heSBub3QgYmUgZXhhY3RseSB3aGF0IHdlIHdhbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGN3ZFxuICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYXNBcHBpdW1EZXBlbmRlbmN5IChjd2QpIHtcbiAgLyoqXG4gICAqIEB0b2RvIHR5cGUgdGhpc1xuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKi9cbiAgbGV0IGxpc3RSZXN1bHQ7XG4gIC8qKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH0gKi9cbiAgbGV0IHJlc29sdmVkO1xuICAvKiogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9ICovXG4gIGxldCB2ZXJzaW9uO1xuICB0cnkge1xuICAgIGxpc3RSZXN1bHQgPSBhd2FpdCBucG0ubGlzdChjd2QsICdhcHBpdW0nKTtcbiAgICAvLyBpZiBcInJlc29sdmVkXCIgaXMgZW1wdHksIHRoZW4gYGFwcGl1bWAgaXMgaW4gZGVwZW5kZW5jaWVzLCBidXQgYG5wbSBpbnN0YWxsYCBoYXMgbm90IGJlZW4gcnVuLlxuICAgIC8vIGluIG90aGVyIHdvcmRzLCB0aGlzIGZ1bmN0aW9uIGNhbiByZXNvbHZlIGB0cnVlYCBldmVuIGlmIGByZXNvbHZlZGAgaXMgZW1wdHkuLi5cbiAgICByZXNvbHZlZCA9IGxpc3RSZXN1bHQ/LmRlcGVuZGVuY2llcz8uYXBwaXVtPy5yZXNvbHZlZCA/PyAnJztcbiAgICAvLyAuLi5ob3dldmVyLCBpdCBjYW5ub3QgZG8gc28gdW5sZXNzIGB2ZXJzaW9uYCBpcyBub25lbXB0eS5cbiAgICB2ZXJzaW9uID0gbGlzdFJlc3VsdD8uZGVwZW5kZW5jaWVzPy5hcHBpdW0/LnZlcnNpb24gPz8gJyc7XG4gIH0gY2F0Y2gge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwa2cgPSBhd2FpdCByZWFkUGFja2FnZUluRGlyKGN3ZCk7XG4gICAgICAvLyB3ZSdyZSBvbmx5IGdvaW5nIHRvIGxvb2sgYXQgdGhlc2UgdGhyZWUgZmllbGRzIGZvciBub3csIGJ1dCB3ZSBjYW4gY2hhbmdlIGl0IGxhdGVyIGlmIG5lZWQgYmUuXG4gICAgICB2ZXJzaW9uID0gcmVzb2x2ZWQgPVxuICAgICAgICBwa2c/LmRlcGVuZGVuY2llcz8uYXBwaXVtID8/XG4gICAgICAgIHBrZz8uZGV2RGVwZW5kZW5jaWVzPy5hcHBpdW0gPz9cbiAgICAgICAgcGtnPy5vcHRpb25hbERlcGVuZGVuY2llcz8uYXBwaXVtO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuICByZXR1cm4gQm9vbGVhbihcbiAgICB2ZXJzaW9uICYmXG4gICAgICAoIXJlc29sdmVkIHx8IChyZXNvbHZlZCAmJiAhcmVzb2x2ZWQuc3RhcnRzV2l0aCgnZmlsZTonKSkpICYmXG4gICAgICAvLyBkb2luZyBhbnkgZnVydGhlciBjaGVja2luZyBoZXJlIG1heSBiZSBhIGZvb2wncyBlcnJhbmQsIGJlY2F1c2UgeW91IGNhbiBwaW4gdGhlIHZlcnNpb25cbiAgICAgIC8vIHRvIGEgX2xvdF8gb2YgZGlmZmVyZW50IHRoaW5ncyAodGFncywgVVJMcywgZXRjKS5cbiAgICAgICF2ZXJzaW9uLnN0YXJ0c1dpdGgoJzEnKSAmJlxuICAgICAgIXZlcnNpb24uc3RhcnRzV2l0aCgnMCcpLFxuICApO1xufVxuXG4vKipcbiAqIFJlYWQgYSBgcGFja2FnZS5qc29uYCBpbiBkaXIgYGN3ZGAuICBJZiBub25lIGZvdW5kLCByZXR1cm4gYHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBjb25zdCByZWFkUGFja2FnZUluRGlyID0gXy5tZW1vaXplKFxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN3ZCAtIERpcmVjdG9yeSBvc3RlbnNpYmx5IGhhdmluZyBhIGBwYWNrYWdlLmpzb25gXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgncmVhZC1wa2cnKS5Ob3JtYWxpemVkUGFja2FnZUpzb258dW5kZWZpbmVkPn1cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIF9yZWFkUGFja2FnZUluRGlyIChjd2QpIHtcbiAgICByZXR1cm4gYXdhaXQgcmVhZFBrZyh7Y3dkLCBub3JtYWxpemU6IHRydWV9KTtcbiAgfSxcbik7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBsb2NhdGlvbiBvZiBBcHBpdW0ncyBcImhvbWVcIiBkaXJcbiAqXG4gKiAtIElmIGBBUFBJVU1fSE9NRWAgaXMgc2V0IGluIHRoZSBlbnZpcm9ubWVudCwgdXNlIHRoYXRcbiAqIC0gSWYgd2UgaGF2ZSBhbiBgZXh0ZW5zaW9ucy55YW1sYCBpbiB7QGxpbmtjb2RlIERFRkFVTFRfQVBQSVVNX0hPTUV9LCB0aGVuIHVzZSB0aGF0LlxuICogLSBJZiB3ZSBmaW5kIGEgYHBhY2thZ2UuanNvbmAgaW4gb3IgYWJvdmUgYGN3ZGAgYW5kIHtAbGlua2NvZGUgc2hvdWxkVXNlQ3dkRm9yQXBwaXVtSG9tZX0gcmV0dXJucyBgdHJ1ZWAsIHRoZW4gdXNlIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgYHBhY2thZ2UuanNvbmAuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlQXBwaXVtSG9tZSA9IF8ubWVtb2l6ZShcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY3dkXSAtIEN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBfTXVzdF8gYmUgYWJzb2x1dGUsIGlmIHNwZWNpZmllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn1cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIF9yZXNvbHZlQXBwaXVtSG9tZSAoY3dkID0gcHJvY2Vzcy5jd2QoKSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5BUFBJVU1fSE9NRSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3MuZW52LkFQUElVTV9IT01FO1xuICAgIH1cblxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGN3ZCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Bjd2RgIHBhcmFtZXRlciBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgnKTtcbiAgICB9XG5cbiAgICAvKiogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9ICovXG4gICAgbGV0IGN1cnJlbnRQa2dEaXI7XG5cbiAgICB0cnkge1xuICAgICAgY3VycmVudFBrZ0RpciA9IGF3YWl0IHBrZ0Rpcihjd2QpO1xuXG4gICAgICAvLyBpZiB3ZSBjYW4ndCBmaW5kIGEgYHBhY2thZ2UuanNvbmAsIHVzZSB0aGUgZGVmYXVsdFxuICAgICAgaWYgKCFjdXJyZW50UGtnRGlyKSB7XG4gICAgICAgIHJldHVybiBERUZBVUxUX0FQUElVTV9IT01FO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gdW5jbGVhciBpZiB0aGlzIGNhbiBhY3R1YWxseSBoYXBwZW5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gREVGQVVMVF9BUFBJVU1fSE9NRTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGF3YWl0IGhhc0FwcGl1bURlcGVuZGVuY3koY3VycmVudFBrZ0RpcikpXG4gICAgICA/IGN1cnJlbnRQa2dEaXJcbiAgICAgIDogREVGQVVMVF9BUFBJVU1fSE9NRTtcbiAgfSxcbik7XG5cbi8qKlxuICogRmlndXJlIG91dCBtYW5pZmVzdCBwYXRoIGJhc2VkIG9uIGBhcHBpdW1Ib21lYC5cbiAqXG4gKiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0LCBpZiBgYXBwaXVtSG9tZWAgaGFzIGJlZW4gcHJvdmlkZWQsIGl0IHdhcyByZXNvbHZlZCB2aWEge0BsaW5rIHJlc29sdmVBcHBpdW1Ib21lIGByZXNvbHZlQXBwaXVtSG9tZSgpYH0hICBJZiB1bnN1cmUsXG4gKiBkb24ndCBwYXNzIGEgcGFyYW1ldGVyIGFuZCBsZXQgYHJlc29sdmVBcHBpdW1Ib21lKClgIGhhbmRsZSBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVNYW5pZmVzdFBhdGggPSBfLm1lbW9pemUoXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FwcGl1bUhvbWVdIC0gQXBwaXVtIGhvbWUgZGlyZWN0b3J5XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBfcmVzb2x2ZU1hbmlmZXN0UGF0aCAoYXBwaXVtSG9tZSkge1xuICAgIC8vIGNhbiB5b3UgXCJhd2FpdFwiIGluIGEgZGVmYXVsdCBwYXJhbWV0ZXI/IGlzIHRoYXQgYSBnb29kIGlkZWE/XG4gICAgYXBwaXVtSG9tZSA9IGFwcGl1bUhvbWUgPz8gKGF3YWl0IHJlc29sdmVBcHBpdW1Ib21lKCkpO1xuICAgIHJldHVybiBwYXRoLmpvaW4oYXBwaXVtSG9tZSwgTUFOSUZFU1RfUkVMQVRJVkVfUEFUSCk7XG4gIH0sXG4pO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3JlYWQtcGtnJykuTm9ybWFsaXplZFBhY2thZ2VKc29ufSBOb3JtYWxpemVkUGFja2FnZUpzb25cbiAqL1xuIl19
package/build/lib/fs.js CHANGED
@@ -9,48 +9,48 @@ exports.fs = exports.default = void 0;
9
9
 
10
10
  require("source-map-support/register");
11
11
 
12
- var _lodash = _interopRequireDefault(require("lodash"));
12
+ var _bluebird = _interopRequireDefault(require("bluebird"));
13
13
 
14
- var _path = _interopRequireDefault(require("path"));
14
+ var _crypto = _interopRequireDefault(require("crypto"));
15
15
 
16
- var _fs2 = _interopRequireDefault(require("fs"));
16
+ var _fs = require("fs");
17
17
 
18
- var _rimraf = _interopRequireDefault(require("rimraf"));
18
+ var _glob = _interopRequireDefault(require("glob"));
19
19
 
20
- var _ncp = _interopRequireDefault(require("ncp"));
20
+ var _klaw = _interopRequireDefault(require("klaw"));
21
21
 
22
- var _bluebird = _interopRequireDefault(require("bluebird"));
22
+ var _lodash = _interopRequireDefault(require("lodash"));
23
23
 
24
24
  var _mv = _interopRequireDefault(require("mv"));
25
25
 
26
- var _which = _interopRequireDefault(require("which"));
26
+ var _ncp = _interopRequireDefault(require("ncp"));
27
27
 
28
- var _glob = _interopRequireDefault(require("glob"));
28
+ var _path = _interopRequireDefault(require("path"));
29
29
 
30
- var _crypto = _interopRequireDefault(require("crypto"));
30
+ var _pkgDir = _interopRequireDefault(require("pkg-dir"));
31
31
 
32
- var _klaw = _interopRequireDefault(require("klaw"));
32
+ var _readPkg = _interopRequireDefault(require("read-pkg"));
33
33
 
34
- var _sanitizeFilename = _interopRequireDefault(require("sanitize-filename"));
34
+ var _rimraf = _interopRequireDefault(require("rimraf"));
35
35
 
36
- var _findRoot = _interopRequireDefault(require("find-root"));
36
+ var _sanitizeFilename = _interopRequireDefault(require("sanitize-filename"));
37
37
 
38
- var _util = require("./util");
38
+ var _which = _interopRequireDefault(require("which"));
39
39
 
40
40
  var _logger = _interopRequireDefault(require("./logger"));
41
41
 
42
42
  var _timing = _interopRequireDefault(require("./timing"));
43
43
 
44
- const mkdirAsync = _bluebird.default.promisify(_fs2.default.mkdir);
44
+ var _util = require("./util");
45
45
 
46
46
  const ncpAsync = _bluebird.default.promisify(_ncp.default);
47
47
 
48
- const findRootCached = _lodash.default.memoize(_findRoot.default);
48
+ const findRootCached = _lodash.default.memoize(_pkgDir.default.sync);
49
49
 
50
50
  const fs = {
51
51
  async hasAccess(path) {
52
52
  try {
53
- await this.access(path, _fs2.default.R_OK);
53
+ await _fs.promises.access(path, _fs.constants.R_OK);
54
54
  } catch (err) {
55
55
  return false;
56
56
  }
@@ -58,37 +58,37 @@ const fs = {
58
58
  return true;
59
59
  },
60
60
 
61
- exists(path) {
62
- return this.hasAccess(path);
61
+ async exists(path) {
62
+ return await fs.hasAccess(path);
63
63
  },
64
64
 
65
65
  rimraf: _bluebird.default.promisify(_rimraf.default),
66
- rimrafSync: _rimraf.default.sync.bind(_rimraf.default),
66
+ rimrafSync: _rimraf.default.sync,
67
67
 
68
- async mkdir(...args) {
68
+ async mkdir(filepath, opts = {}) {
69
69
  try {
70
- return await mkdirAsync(...args);
70
+ return await _fs.promises.mkdir(filepath, opts);
71
71
  } catch (err) {
72
- if (err && err.code !== 'EEXIST') {
72
+ if ((err === null || err === void 0 ? void 0 : err.code) !== 'EEXIST') {
73
73
  throw err;
74
74
  }
75
75
  }
76
76
  },
77
77
 
78
- async copyFile(source, destination, ...otherArgs) {
79
- if (!(await this.hasAccess(source))) {
78
+ async copyFile(source, destination, opts = {}) {
79
+ if (!(await fs.hasAccess(source))) {
80
80
  throw new Error(`The file at '${source}' does not exist or is not accessible`);
81
81
  }
82
82
 
83
- return await ncpAsync(source, destination, ...otherArgs);
83
+ return await ncpAsync(source, destination, opts);
84
84
  },
85
85
 
86
86
  async md5(filePath) {
87
- return await this.hash(filePath, 'md5');
87
+ return await fs.hash(filePath, 'md5');
88
88
  },
89
89
 
90
90
  mv: _bluebird.default.promisify(_mv.default),
91
- which: _bluebird.default.promisify(_which.default),
91
+ which: _which.default,
92
92
  glob: _bluebird.default.promisify(_glob.default),
93
93
  sanitizeName: _sanitizeFilename.default,
94
94
 
@@ -96,14 +96,23 @@ const fs = {
96
96
  return await new _bluebird.default((resolve, reject) => {
97
97
  const fileHash = _crypto.default.createHash(algorithm);
98
98
 
99
- const readStream = _fs2.default.createReadStream(filePath);
100
-
99
+ const readStream = (0, _fs.createReadStream)(filePath);
101
100
  readStream.on('error', e => reject(new Error(`Cannot calculate ${algorithm} hash for '${filePath}'. Original error: ${e.message}`)));
102
101
  readStream.on('data', chunk => fileHash.update(chunk));
103
102
  readStream.on('end', () => resolve(fileHash.digest('hex')));
104
103
  });
105
104
  },
106
105
 
106
+ walk(dir, opts) {
107
+ return (0, _klaw.default)(dir, opts);
108
+ },
109
+
110
+ async mkdirp(dir) {
111
+ return await fs.mkdir(dir, {
112
+ recursive: true
113
+ });
114
+ },
115
+
107
116
  async walkDir(dir, recursive, callback) {
108
117
  let isValidRoot = false;
109
118
  let errMsg = null;
@@ -153,7 +162,9 @@ const fs = {
153
162
  reject(err);
154
163
  }
155
164
  }).on('end', function () {
156
- lastFileProcessed.then(resolve).catch(function (err) {
165
+ lastFileProcessed.then(file => {
166
+ resolve(file !== null && file !== void 0 ? file : null);
167
+ }).catch(function (err) {
157
168
  _logger.default.warn(`Unexpected error: ${err.message}`);
158
169
 
159
170
  reject(err);
@@ -168,11 +179,13 @@ const fs = {
168
179
  });
169
180
  },
170
181
 
171
- readPackageJsonFrom(dir) {
172
- const root = fs.findRoot(dir);
182
+ readPackageJsonFrom(dir, opts = {}) {
183
+ const cwd = fs.findRoot(dir);
173
184
 
174
185
  try {
175
- return JSON.parse(_fs2.default.readFileSync(_path.default.join(root, 'package.json'), 'utf8'));
186
+ return _readPkg.default.sync({ ...opts,
187
+ cwd
188
+ });
176
189
  } catch (err) {
177
190
  err.message = `Failed to read a \`package.json\` from dir \`${dir}\`:\n\n${err.message}`;
178
191
  throw err;
@@ -191,30 +204,35 @@ const fs = {
191
204
  }
192
205
 
193
206
  return result;
194
- }
207
+ },
195
208
 
209
+ access: _fs.promises.access,
210
+ appendFile: _fs.promises.appendFile,
211
+ chmod: _fs.promises.chmod,
212
+ close: _bluebird.default.promisify(_fs.close),
213
+ constants: _fs.constants,
214
+ createWriteStream: _fs.createWriteStream,
215
+ createReadStream: _fs.createReadStream,
216
+ lstat: _fs.promises.lstat,
217
+ open: _bluebird.default.promisify(_fs.open),
218
+ openFile: _fs.promises.open,
219
+ readdir: _fs.promises.readdir,
220
+ read: _bluebird.default.promisify(_fs.read),
221
+ readFile: _fs.promises.readFile,
222
+ readlink: _fs.promises.readlink,
223
+ realpath: _fs.promises.realpath,
224
+ rename: _fs.promises.rename,
225
+ stat: _fs.promises.stat,
226
+ symlink: _fs.promises.symlink,
227
+ unlink: _fs.promises.unlink,
228
+ write: _bluebird.default.promisify(_fs.write),
229
+ writeFile: _fs.promises.writeFile,
230
+ F_OK: _fs.constants.F_OK,
231
+ R_OK: _fs.constants.R_OK,
232
+ W_OK: _fs.constants.W_OK,
233
+ X_OK: _fs.constants.X_OK
196
234
  };
197
235
  exports.fs = fs;
198
- const simples = ['open', 'close', 'access', 'readFile', 'writeFile', 'write', 'read', 'readlink', 'chmod', 'unlink', 'readdir', 'stat', 'rename', 'lstat', 'appendFile', 'realpath', 'symlink'];
199
-
200
- for (const s of simples) {
201
- fs[s] = _bluebird.default.promisify(_fs2.default[s]);
202
- }
203
-
204
- const syncFunctions = ['createReadStream', 'createWriteStream'];
205
-
206
- for (const s of syncFunctions) {
207
- fs[s] = _fs2.default[s];
208
- }
209
-
210
- const constants = ['F_OK', 'R_OK', 'W_OK', 'X_OK', 'constants'];
211
-
212
- for (const c of constants) {
213
- fs[c] = _fs2.default[c];
214
- }
215
-
216
236
  var _default = fs;
217
- exports.default = _default;require('source-map-support').install();
218
-
219
-
220
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9mcy5qcyJdLCJuYW1lcyI6WyJta2RpckFzeW5jIiwiQiIsInByb21pc2lmeSIsIl9mcyIsIm1rZGlyIiwibmNwQXN5bmMiLCJuY3AiLCJmaW5kUm9vdENhY2hlZCIsIl8iLCJtZW1vaXplIiwiZmluZFJvb3QiLCJmcyIsImhhc0FjY2VzcyIsInBhdGgiLCJhY2Nlc3MiLCJSX09LIiwiZXJyIiwiZXhpc3RzIiwicmltcmFmIiwicmltcmFmU3luYyIsInN5bmMiLCJiaW5kIiwiYXJncyIsImNvZGUiLCJjb3B5RmlsZSIsInNvdXJjZSIsImRlc3RpbmF0aW9uIiwib3RoZXJBcmdzIiwiRXJyb3IiLCJtZDUiLCJmaWxlUGF0aCIsImhhc2giLCJtdiIsIndoaWNoIiwiZ2xvYiIsInNhbml0aXplTmFtZSIsInNhbml0aXplIiwiYWxnb3JpdGhtIiwicmVzb2x2ZSIsInJlamVjdCIsImZpbGVIYXNoIiwiY3J5cHRvIiwiY3JlYXRlSGFzaCIsInJlYWRTdHJlYW0iLCJjcmVhdGVSZWFkU3RyZWFtIiwib24iLCJlIiwibWVzc2FnZSIsImNodW5rIiwidXBkYXRlIiwiZGlnZXN0Iiwid2Fsa0RpciIsImRpciIsInJlY3Vyc2l2ZSIsImNhbGxiYWNrIiwiaXNWYWxpZFJvb3QiLCJlcnJNc2ciLCJzdGF0IiwiaXNEaXJlY3RvcnkiLCJ3YWxrZXIiLCJmaWxlQ291bnQiLCJkaXJlY3RvcnlDb3VudCIsInRpbWVyIiwiVGltZXIiLCJzdGFydCIsImxhc3RGaWxlUHJvY2Vzc2VkIiwiZGVwdGhMaW1pdCIsIml0ZW0iLCJwYXVzZSIsInN0YXRzIiwidHJ5IiwidGhlbiIsImRvbmUiLCJyZXN1bWUiLCJjYXRjaCIsImxvZyIsIndhcm4iLCJmaW5hbGx5IiwiZGVidWciLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImRlc3Ryb3kiLCJyZWFkUGFja2FnZUpzb25Gcm9tIiwicm9vdCIsIkpTT04iLCJwYXJzZSIsInJlYWRGaWxlU3luYyIsImpvaW4iLCJpc0Fic29sdXRlIiwiVHlwZUVycm9yIiwicmVzdWx0Iiwic2ltcGxlcyIsInMiLCJzeW5jRnVuY3Rpb25zIiwiY29uc3RhbnRzIiwiYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLGtCQUFFQyxTQUFGLENBQVlDLGFBQUlDLEtBQWhCLENBQW5COztBQUNBLE1BQU1DLFFBQVEsR0FBR0osa0JBQUVDLFNBQUYsQ0FBWUksWUFBWixDQUFqQjs7QUFDQSxNQUFNQyxjQUFjLEdBQUdDLGdCQUFFQyxPQUFGLENBQVVDLGlCQUFWLENBQXZCOztBQUVBLE1BQU1DLEVBQUUsR0FBRztBQUNULFFBQU1DLFNBQU4sQ0FBaUJDLElBQWpCLEVBQXVCO0FBQ3JCLFFBQUk7QUFDRixZQUFNLEtBQUtDLE1BQUwsQ0FBWUQsSUFBWixFQUFrQlYsYUFBSVksSUFBdEIsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVk7QUFDWixhQUFPLEtBQVA7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDRCxHQVJROztBQVNUQyxFQUFBQSxNQUFNLENBQUVKLElBQUYsRUFBUTtBQUFFLFdBQU8sS0FBS0QsU0FBTCxDQUFlQyxJQUFmLENBQVA7QUFBOEIsR0FUckM7O0FBVVRLLEVBQUFBLE1BQU0sRUFBRWpCLGtCQUFFQyxTQUFGLENBQVlnQixlQUFaLENBVkM7QUFXVEMsRUFBQUEsVUFBVSxFQUFFRCxnQkFBT0UsSUFBUCxDQUFZQyxJQUFaLENBQWlCSCxlQUFqQixDQVhIOztBQVlULFFBQU1kLEtBQU4sQ0FBYSxHQUFHa0IsSUFBaEIsRUFBc0I7QUFDcEIsUUFBSTtBQUNGLGFBQU8sTUFBTXRCLFVBQVUsQ0FBQyxHQUFHc0IsSUFBSixDQUF2QjtBQUNELEtBRkQsQ0FFRSxPQUFPTixHQUFQLEVBQVk7QUFD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QStCO0FBQzdCbkYsRUFBQUEsRUFBRSxDQUFDa0YsQ0FBRCxDQUFGLEdBQVExRixhQUFJMEYsQ0FBSixDQUFSO0FBQ0Q7O0FBR0QsTUFBTUUsU0FBUyxHQUFHLENBQ2hCLE1BRGdCLEVBQ1IsTUFEUSxFQUNBLE1BREEsRUFDUSxNQURSLEVBQ2dCLFdBRGhCLENBQWxCOztBQUdBLEtBQUssTUFBTUMsQ0FBWCxJQUFnQkQsU0FBaEIsRUFBMkI7QUFDekJwRixFQUFBQSxFQUFFLENBQUNxRixDQUFELENBQUYsR0FBUTdGLGFBQUk2RixDQUFKLENBQVI7QUFDRDs7ZUFHY3JGLEUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBqc2hpbnQgaWdub3JlOiBzdGFydFxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IF9mcyBmcm9tICdmcyc7XG5pbXBvcnQgcmltcmFmIGZyb20gJ3JpbXJhZic7XG5pbXBvcnQgbmNwIGZyb20gJ25jcCc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgbXYgZnJvbSAnbXYnO1xuaW1wb3J0IHdoaWNoIGZyb20gJ3doaWNoJztcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IGtsYXcgZnJvbSAna2xhdyc7XG5pbXBvcnQgc2FuaXRpemUgZnJvbSAnc2FuaXRpemUtZmlsZW5hbWUnO1xuaW1wb3J0IGZpbmRSb290IGZyb20gJ2ZpbmQtcm9vdCc7XG5pbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgVGltZXIgZnJvbSAnLi90aW1pbmcnO1xuXG5jb25zdCBta2RpckFzeW5jID0gQi5wcm9taXNpZnkoX2ZzLm1rZGlyKTtcbmNvbnN0IG5jcEFzeW5jID0gQi5wcm9taXNpZnkobmNwKTtcbmNvbnN0IGZpbmRSb290Q2FjaGVkID0gXy5tZW1vaXplKGZpbmRSb290KTtcblxuY29uc3QgZnMgPSB7XG4gIGFzeW5jIGhhc0FjY2VzcyAocGF0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmFjY2VzcyhwYXRoLCBfZnMuUl9PSyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBleGlzdHMgKHBhdGgpIHsgcmV0dXJuIHRoaXMuaGFzQWNjZXNzKHBhdGgpOyB9LFxuICByaW1yYWY6IEIucHJvbWlzaWZ5KHJpbXJhZiksXG4gIHJpbXJhZlN5bmM6IHJpbXJhZi5zeW5jLmJpbmQocmltcmFmKSxcbiAgYXN5bmMgbWtkaXIgKC4uLmFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IG1rZGlyQXN5bmMoLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlICE9PSAnRUVYSVNUJykge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBhc3luYyBjb3B5RmlsZSAoc291cmNlLCBkZXN0aW5hdGlvbiwgLi4ub3RoZXJBcmdzKSB7XG4gICAgaWYgKCFhd2FpdCB0aGlzLmhhc0FjY2Vzcyhzb3VyY2UpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke3NvdXJjZX0nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBuY3BBc3luYyhzb3VyY2UsIGRlc3RpbmF0aW9uLCAuLi5vdGhlckFyZ3MpO1xuICB9LFxuICBhc3luYyBtZDUgKGZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFzaChmaWxlUGF0aCwgJ21kNScpO1xuICB9LFxuICBtdjogQi5wcm9taXNpZnkobXYpLFxuICB3aGljaDogQi5wcm9taXNpZnkod2hpY2gpLFxuICBnbG9iOiBCLnByb21pc2lmeShnbG9iKSxcbiAgc2FuaXRpemVOYW1lOiBzYW5pdGl6ZSxcbiAgYXN5bmMgaGFzaCAoZmlsZVBhdGgsIGFsZ29yaXRobSA9ICdzaGExJykge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBmaWxlSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobSk7XG4gICAgICBjb25zdCByZWFkU3RyZWFtID0gX2ZzLmNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpO1xuICAgICAgcmVhZFN0cmVhbS5vbignZXJyb3InLCAoZSkgPT4gcmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYENhbm5vdCBjYWxjdWxhdGUgJHthbGdvcml0aG19IGhhc2ggZm9yICcke2ZpbGVQYXRofScuIE9yaWdpbmFsIGVycm9yOiAke2UubWVzc2FnZX1gKSkpO1xuICAgICAgcmVhZFN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4gZmlsZUhhc2gudXBkYXRlKGNodW5rKSk7XG4gICAgICByZWFkU3RyZWFtLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKGZpbGVIYXNoLmRpZ2VzdCgnaGV4JykpKTtcbiAgICB9KTtcbiAgfSxcbiAgLyoqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgdGhlIGRpcmVjdG9yeSB3YWxraW5nXG4gICAqIEBuYW1lIFdhbGtEaXJDYWxsYmFja1xuICAgKiBAZnVuY3Rpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1QYXRoIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzRGlyZWN0b3J5IFNob3dzIGlmIGl0IGlzIGEgZGlyZWN0b3J5IG9yIGEgZmlsZVxuICAgKiBAcmV0dXJuIHtib29sZWFufSByZXR1cm4gdHJ1ZSBpZiB5b3Ugd2FudCB0byBzdG9wIHdhbGtpbmdcbiAgKi9cblxuICAvKipcbiAgICogV2Fsa3MgYSBkaXJlY3RvcnkgZ2l2ZW4gYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzIGdpdmVuLiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIHdpdGggYSBwYXRoIGpvaW5lZCB3aXRoIHRoZSBkaXIgcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgRGlyZWN0b3J5IHBhdGggd2hlcmUgd2Ugd2lsbCBzdGFydCB3YWxraW5nXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVjdXJzaXZlIFNldCBpdCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGNvbnRpbnVlIHdhbGtpbmcgc3ViIGRpcmVjdG9yaWVzXG4gICAqIEBwYXJhbSB7V2Fsa0RpckNhbGxiYWNrfSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gYSBuZXcgcGF0aCBpcyBmb3VuZFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGBkaXJgIHBhcmFtZXRlciBjb250YWlucyBhIHBhdGggdG8gYW4gaW52YWxpZCBmb2xkZXJcbiAgICogQHJldHVybiB7P3N0cmluZ30gcmV0dXJucyB0aGUgZm91bmQgcGF0aCBvciBudWxsIGlmIHRoZSBpdGVtIHdhcyBub3QgZm91bmRcbiAgICovXG4gIGFzeW5jIHdhbGtEaXIgKGRpciwgcmVjdXJzaXZlLCBjYWxsYmFjaykgeyAvL2VzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgbGV0IGlzVmFsaWRSb290ID0gZmFsc2U7XG4gICAgbGV0IGVyck1zZyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGlzVmFsaWRSb290ID0gKGF3YWl0IGZzLnN0YXQoZGlyKSkuaXNEaXJlY3RvcnkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJNc2cgPSBlLm1lc3NhZ2U7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFJvb3QpIHtcbiAgICAgIHRocm93IEVycm9yKGAnJHtkaXJ9JyBpcyBub3QgYSB2YWxpZCByb290IGRpcmVjdG9yeWAgKyAoZXJyTXNnID8gYC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyTXNnfWAgOiAnJykpO1xuICAgIH1cblxuICAgIGxldCB3YWxrZXI7XG4gICAgbGV0IGZpbGVDb3VudCA9IDA7XG4gICAgbGV0IGRpcmVjdG9yeUNvdW50ID0gMDtcbiAgICBjb25zdCB0aW1lciA9IG5ldyBUaW1lcigpLnN0YXJ0KCk7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGxldCBsYXN0RmlsZVByb2Nlc3NlZCA9IEIucmVzb2x2ZSgpO1xuICAgICAgd2Fsa2VyID0ga2xhdyhkaXIsIHtcbiAgICAgICAgZGVwdGhMaW1pdDogcmVjdXJzaXZlID8gLTEgOiAwLFxuICAgICAgfSk7XG4gICAgICB3YWxrZXIub24oJ2RhdGEnLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB3YWxrZXIucGF1c2UoKTtcblxuICAgICAgICBpZiAoIWl0ZW0uc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGZpbGVDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpcmVjdG9yeUNvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgICAgIGxhc3RGaWxlUHJvY2Vzc2VkID0gQi50cnkoYXN5bmMgKCkgPT4gYXdhaXQgY2FsbGJhY2soaXRlbS5wYXRoLCBpdGVtLnN0YXRzLmlzRGlyZWN0b3J5KCkpKVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkb25lID0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoaXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdhbGtlci5yZXN1bWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyLCBpdGVtKSB7XG4gICAgICAgIGxvZy53YXJuKGBHb3QgYW4gZXJyb3Igd2hpbGUgd2Fsa2luZyAnJHtpdGVtLnBhdGh9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgLy8ga2xhdyBjYW5ub3QgZ2V0IGJhY2sgZnJvbSBhbiBFTk9FTlQgZXJyb3JcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGxvZy53YXJuKCdBbGwgZmlsZXMgbWF5IG5vdCBoYXZlIGJlZW4gYWNjZXNzZWQnKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsYXN0RmlsZVByb2Nlc3NlZFxuICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGxvZy53YXJuKGBVbmV4cGVjdGVkIGVycm9yOiAke2Vyci5tZXNzYWdlfWApO1xuICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgIGxvZy5kZWJ1ZyhgVHJhdmVyc2VkICR7cGx1cmFsaXplKCdkaXJlY3RvcnknLCBkaXJlY3RvcnlDb3VudCwgdHJ1ZSl9IGAgK1xuICAgICAgICBgYW5kICR7cGx1cmFsaXplKCdmaWxlJywgZmlsZUNvdW50LCB0cnVlKX0gYCArXG4gICAgICAgIGBpbiAke3RpbWVyLmdldER1cmF0aW9uKCkuYXNNaWxsaVNlY29uZHMudG9GaXhlZCgwKX1tc2ApO1xuICAgICAgaWYgKHdhbGtlcikge1xuICAgICAgICB3YWxrZXIuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICAvKipcbiAgICogUmVhZHMgdGhlIGNsb3Nlc3QgYHBhY2thZ2UuanNvbmAgZmlsZSBmcm9tIGFic29sdXRlIHBhdGggYGRpcmAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgLSBEaXJlY3RvcnkgdG8gc2VhcmNoIGZyb21cbiAgICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgZGlyYCBpcyBub3QgYSBub25lbXB0eSBzdHJpbmcgb3IgcmVsYXRpdmUgcGF0aFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2VyZSBwcm9ibGVtcyBmaW5kaW5nIG9yIHJlYWRpbmcgYSBgcGFja2FnZS5qc29uYCBmaWxlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IEEgcGFyc2VkIGBwYWNrYWdlLmpzb25gXG4gICAqL1xuICByZWFkUGFja2FnZUpzb25Gcm9tIChkaXIpIHtcbiAgICBjb25zdCByb290ID0gZnMuZmluZFJvb3QoZGlyKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoX2ZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocm9vdCwgJ3BhY2thZ2UuanNvbicpLCAndXRmOCcpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYEZhaWxlZCB0byByZWFkIGEgXFxgcGFja2FnZS5qc29uXFxgIGZyb20gZGlyIFxcYCR7ZGlyfVxcYDpcXG5cXG4ke2Vyci5tZXNzYWdlfWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9LFxuICAvKipcbiAgICogRmluZHMgdGhlIHByb2plY3Qgcm9vdCBkaXJlY3RvcnkgZnJvbSBgZGlyYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpciAtIERpcmVjdG9yeSB0byBzZWFyY2ggZnJvbVxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGBkaXJgIGlzIG5vdCBhIG5vbmVtcHR5IHN0cmluZyBvciByZWxhdGl2ZSBwYXRoXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3ZXJlIHByb2JsZW1zIGZpbmRpbmcgdGhlIHByb2plY3Qgcm9vdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2xvc2VzZXQgcGFyZW50IGRpciBjb250YWluaW5nIGBwYWNrYWdlLmpzb25gXG4gICAqL1xuICBmaW5kUm9vdCAoZGlyKSB7XG4gICAgaWYgKCFkaXIgfHwgIXBhdGguaXNBYnNvbHV0ZShkaXIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZmluZFJvb3QoKWAgbXVzdCBiZSBwcm92aWRlZCBhIG5vbi1lbXB0eSwgYWJzb2x1dGUgcGF0aCcpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBmaW5kUm9vdENhY2hlZChkaXIpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFxcYGZpbmRSb290KClcXGAgY291bGQgbm90IGZpbmQgXFxgcGFja2FnZS5qc29uXFxgIGZyb20gJHtkaXJ9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5cbi8vIGFkZCB0aGUgc3VwcG9ydGVkIGBmc2AgZnVuY3Rpb25zXG5jb25zdCBzaW1wbGVzID0gW1xuICAnb3BlbicsICdjbG9zZScsICdhY2Nlc3MnLCAncmVhZEZpbGUnLCAnd3JpdGVGaWxlJywgJ3dyaXRlJywgJ3JlYWQnLFxuICAncmVhZGxpbmsnLCAnY2htb2QnLCAndW5saW5rJywgJ3JlYWRkaXInLCAnc3RhdCcsICdyZW5hbWUnLCAnbHN0YXQnLFxuICAnYXBwZW5kRmlsZScsICdyZWFscGF0aCcsICdzeW1saW5rJyxcbl07XG5mb3IgKGNvbnN0IHMgb2Ygc2ltcGxlcykge1xuICBmc1tzXSA9IEIucHJvbWlzaWZ5KF9mc1tzXSk7XG59XG5cbmNvbnN0IHN5bmNGdW5jdGlvbnMgPSBbXG4gICdjcmVhdGVSZWFkU3RyZWFtJyxcbiAgJ2NyZWF0ZVdyaXRlU3RyZWFtJyxcbl07XG5mb3IgKGNvbnN0IHMgb2Ygc3luY0Z1bmN0aW9ucykge1xuICBmc1tzXSA9IF9mc1tzXTtcbn1cblxuLy8gYWRkIHRoZSBjb25zdGFudHMgZnJvbSBgZnNgXG5jb25zdCBjb25zdGFudHMgPSBbXG4gICdGX09LJywgJ1JfT0snLCAnV19PSycsICdYX09LJywgJ2NvbnN0YW50cycsXG5dO1xuZm9yIChjb25zdCBjIG9mIGNvbnN0YW50cykge1xuICBmc1tjXSA9IF9mc1tjXTtcbn1cblxuZXhwb3J0IHsgZnMgfTtcbmV4cG9ydCBkZWZhdWx0IGZzO1xuIl0sImZpbGUiOiJsaWIvZnMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4ifQ==
237
+ exports.default = _default;
238
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9mcy5qcyJdLCJuYW1lcyI6WyJuY3BBc3luYyIsIkIiLCJwcm9taXNpZnkiLCJuY3AiLCJmaW5kUm9vdENhY2hlZCIsIl8iLCJtZW1vaXplIiwicGtnRGlyIiwic3luYyIsImZzIiwiaGFzQWNjZXNzIiwicGF0aCIsImZzUHJvbWlzZXMiLCJhY2Nlc3MiLCJjb25zdGFudHMiLCJSX09LIiwiZXJyIiwiZXhpc3RzIiwicmltcmFmIiwicmltcmFmU3luYyIsIm1rZGlyIiwiZmlsZXBhdGgiLCJvcHRzIiwiY29kZSIsImNvcHlGaWxlIiwic291cmNlIiwiZGVzdGluYXRpb24iLCJFcnJvciIsIm1kNSIsImZpbGVQYXRoIiwiaGFzaCIsIm12Iiwid2hpY2giLCJnbG9iIiwic2FuaXRpemVOYW1lIiwic2FuaXRpemUiLCJhbGdvcml0aG0iLCJyZXNvbHZlIiwicmVqZWN0IiwiZmlsZUhhc2giLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwicmVhZFN0cmVhbSIsIm9uIiwiZSIsIm1lc3NhZ2UiLCJjaHVuayIsInVwZGF0ZSIsImRpZ2VzdCIsIndhbGsiLCJkaXIiLCJta2RpcnAiLCJyZWN1cnNpdmUiLCJ3YWxrRGlyIiwiY2FsbGJhY2siLCJpc1ZhbGlkUm9vdCIsImVyck1zZyIsInN0YXQiLCJpc0RpcmVjdG9yeSIsIndhbGtlciIsImZpbGVDb3VudCIsImRpcmVjdG9yeUNvdW50IiwidGltZXIiLCJUaW1lciIsInN0YXJ0IiwibGFzdEZpbGVQcm9jZXNzZWQiLCJkZXB0aExpbWl0IiwiaXRlbSIsInBhdXNlIiwic3RhdHMiLCJ0cnkiLCJ0aGVuIiwiZG9uZSIsInJlc3VtZSIsImNhdGNoIiwibG9nIiwid2FybiIsImZpbGUiLCJmaW5hbGx5IiwiZGVidWciLCJnZXREdXJhdGlvbiIsImFzTWlsbGlTZWNvbmRzIiwidG9GaXhlZCIsImRlc3Ryb3kiLCJyZWFkUGFja2FnZUpzb25Gcm9tIiwiY3dkIiwiZmluZFJvb3QiLCJyZWFkUGtnIiwiaXNBYnNvbHV0ZSIsIlR5cGVFcnJvciIsInJlc3VsdCIsImFwcGVuZEZpbGUiLCJjaG1vZCIsImNsb3NlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJjcmVhdGVSZWFkU3RyZWFtIiwibHN0YXQiLCJvcGVuIiwib3BlbkZpbGUiLCJyZWFkZGlyIiwicmVhZCIsInJlYWRGaWxlIiwicmVhZGxpbmsiLCJyZWFscGF0aCIsInJlbmFtZSIsInN5bWxpbmsiLCJ1bmxpbmsiLCJ3cml0ZSIsIndyaXRlRmlsZSIsIkZfT0siLCJXX09LIiwiWF9PSyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxRQUFRLEdBQXlGQyxrQkFBRUMsU0FBRixDQUFZQyxZQUFaLENBQXZHOztBQUNBLE1BQU1DLGNBQWMsR0FBR0MsZ0JBQUVDLE9BQUYsQ0FBVUMsZ0JBQU9DLElBQWpCLENBQXZCOztBQUVBLE1BQU1DLEVBQUUsR0FBRztBQU1ULFFBQU1DLFNBQU4sQ0FBaUJDLElBQWpCLEVBQXVCO0FBQ3JCLFFBQUk7QUFDRixZQUFNQyxhQUFXQyxNQUFYLENBQWtCRixJQUFsQixFQUF3QkcsY0FBVUMsSUFBbEMsQ0FBTjtBQUNELEtBRkQsQ0FFRSxPQUFPQyxHQUFQLEVBQVk7QUFDWixhQUFPLEtBQVA7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDRCxHQWJROztBQW1CVCxRQUFNQyxNQUFOLENBQWNOLElBQWQsRUFBb0I7QUFDbEIsV0FBTyxNQUFNRixFQUFFLENBQUNDLFNBQUgsQ0FBYUMsSUFBYixDQUFiO0FBQ0QsR0FyQlE7O0FBMkJUTyxFQUFBQSxNQUFNLEVBQTJFakIsa0JBQUVDLFNBQUYsQ0FBWWdCLGVBQVosQ0EzQnhFO0FBaUNUQyxFQUFBQSxVQUFVLEVBQUVELGdCQUFPVixJQWpDVjs7QUEyQ1QsUUFBTVksS0FBTixDQUFhQyxRQUFi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RixFQUFBQSxJQUFJLEVBQUVELGNBQVVDLElBOVJQO0FBb1NUK0YsRUFBQUEsSUFBSSxFQUFFaEcsY0FBVWdHLElBcFNQO0FBMFNUQyxFQUFBQSxJQUFJLEVBQUVqRyxjQUFVaUc7QUExU1AsQ0FBWDs7ZUE4U2V0RyxFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGNsb3NlLCBjb25zdGFudHMsIGNyZWF0ZVJlYWRTdHJlYW0sIGNyZWF0ZVdyaXRlU3RyZWFtLCBwcm9taXNlcyBhcyBmc1Byb21pc2VzLCByZWFkLCB3cml0ZSwgb3BlbiB9IGZyb20gJ2ZzJztcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InO1xuaW1wb3J0IGtsYXcgZnJvbSAna2xhdyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG12IGZyb20gJ212JztcbmltcG9ydCBuY3AgZnJvbSAnbmNwJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHBrZ0RpciBmcm9tICdwa2ctZGlyJztcbmltcG9ydCByZWFkUGtnIGZyb20gJ3JlYWQtcGtnJztcbmltcG9ydCByaW1yYWYgZnJvbSAncmltcmFmJztcbmltcG9ydCBzYW5pdGl6ZSBmcm9tICdzYW5pdGl6ZS1maWxlbmFtZSc7XG5pbXBvcnQgd2hpY2ggZnJvbSAnd2hpY2gnO1xuaW1wb3J0IGxvZyBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgVGltZXIgZnJvbSAnLi90aW1pbmcnO1xuaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgbmNwQXN5bmMgPSAvKiogQHR5cGUgeyhzb3VyY2U6IHN0cmluZywgZGVzdDogc3RyaW5nLCBvcHRzOiBuY3AuT3B0aW9uc3x1bmRlZmluZWQpID0+IEI8dm9pZD59ICovKEIucHJvbWlzaWZ5KG5jcCkpO1xuY29uc3QgZmluZFJvb3RDYWNoZWQgPSBfLm1lbW9pemUocGtnRGlyLnN5bmMpO1xuXG5jb25zdCBmcyA9IHtcbiAgLyoqXG4gICAqIFJlc29sdmVzIGB0cnVlYCBpZiBgcGF0aGAgaXMgX3JlYWRhYmxlXywgd2hpY2ggZGlmZmVycyBmcm9tIE5vZGUuanMnIGRlZmF1bHQgYmVoYXZpb3Igb2YgXCJjYW4gd2Ugc2VlIGl0P1wiXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdmcycpLlBhdGhMaWtlfSBwYXRoXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzQWNjZXNzIChwYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzUHJvbWlzZXMuYWNjZXNzKHBhdGgsIGNvbnN0YW50cy5SX09LKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFsaWFzIGZvciB7QGxpbmtjb2RlIGZzLmhhc0FjY2Vzc31cbiAgICogQHBhcmFtIHtpbXBvcnQoJ2ZzJykuUGF0aExpa2V9IHBhdGhcbiAgICovXG4gIGFzeW5jIGV4aXN0cyAocGF0aCkge1xuICAgIHJldHVybiBhd2FpdCBmcy5oYXNBY2Nlc3MocGF0aCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGRpcmVjdG9yeSBhbmQgYWxsIGl0cyBjb250ZW50cywgcmVjdXJzaXZlbHlcbiAgICogQHRvZG8gUmVwbGFjZSB3aXRoIGBybSgpYCBmcm9tIGBmcy5wcm9taXNlc2Agd2hlbiBOb2RlLmpzIHYxMiBzdXBwb3J0IGlzIGRyb3BwZWQuXG4gICAqL1xuICByaW1yYWY6IC8qKiBAdHlwZSB7KGRpcnBhdGg6IHN0cmluZywgb3B0cz86IHJpbXJhZi5PcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+fSAqLyhCLnByb21pc2lmeShyaW1yYWYpKSxcblxuICAvKipcbiAgICogQWxpYXMgb2Yge0BsaW5rY29kZSByaW1yYWYuc3luY31cbiAgICogQHRvZG8gUmVwbGFjZSB3aXRoIGBybVN5bmMoKWAgZnJvbSBgZnNgIHdoZW4gTm9kZS5qcyB2MTIgc3VwcG9ydCBpcyBkcm9wcGVkLlxuICAgKi9cbiAgcmltcmFmU3luYzogcmltcmFmLnN5bmMsXG5cbiAgLyoqXG4gICAqIExpa2UgTm9kZS5qcycgYGZzUHJvbWlzZXMubWtkaXIoKWAsIGJ1dCB3aWxsIF9ub3RfIHJlamVjdCBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ8VVJMfSBmaWxlcGF0aFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnZnMnKS5NYWtlRGlyZWN0b3J5T3B0aW9uc30gW29wdHNdXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZ3x1bmRlZmluZWQ+fVxuICAgKiBAc2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvZnMuaHRtbCNmc3Byb21pc2VzbWtkaXJwYXRoLW9wdGlvbnNcbiAgICovXG4gIGFzeW5jIG1rZGlyIChmaWxlcGF0aCwgb3B0cyA9IHt9KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmc1Byb21pc2VzLm1rZGlyKGZpbGVwYXRoLCBvcHRzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnI/LmNvZGUgIT09ICdFRVhJU1QnKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIC8qKlxuICAgKiBDb3BpZXMgZmlsZXMgX2FuZCBlbnRpcmUgZGlyZWN0b3JpZXNfXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBTb3VyY2UgdG8gY29weVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzdGluYXRpb24gLSBEZXN0aW5hdGlvbiB0byBjb3B5IHRvXG4gICAqIEBwYXJhbSB7bmNwLk9wdGlvbnN9IFtvcHRzXSAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gYG5jcGBcbiAgICogQHNlZSBodHRwczovL25wbS5pbS9uY3BcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBjb3B5RmlsZSAoc291cmNlLCBkZXN0aW5hdGlvbiwgb3B0cyA9IHt9KSB7XG4gICAgaWYgKCFhd2FpdCBmcy5oYXNBY2Nlc3Moc291cmNlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHtzb3VyY2V9JyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgbmNwQXN5bmMoc291cmNlLCBkZXN0aW5hdGlvbiwgb3B0cyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBNRDUgaGFzaCBvZiBhIGZpbGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdmcycpLlBhdGhMaWtlfSBmaWxlUGF0aFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICAgKi9cbiAgYXN5bmMgbWQ1IChmaWxlUGF0aCkge1xuICAgIHJldHVybiBhd2FpdCBmcy5oYXNoKGZpbGVQYXRoLCAnbWQ1Jyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vdmUgYSBmaWxlXG4gICAqL1xuICBtdjogLyoqIEB0eXBlIHsoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBvcHRzPzogbXYuT3B0aW9ucykgPT4gQjx2b2lkPn0gKi8oQi5wcm9taXNpZnkobXYpKSxcblxuICAvKipcbiAgICogRmluZCBwYXRoIHRvIGFuIGV4ZWN1dGFibGUgaW4gc3lzdGVtIGBQQVRIYFxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ucG0vbm9kZS13aGljaFxuICAgKi9cbiAgd2hpY2gsXG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgZ2xvYiBwYXR0ZXJuLCByZXNvbHZlIHdpdGggbGlzdCBvZiBmaWxlcyBtYXRjaGluZyB0aGF0IHBhdHRlcm5cbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ2xvYlxuICAgKi9cbiAgZ2xvYjogLyoqIEB0eXBlIHsocGF0dGVybjogc3RyaW5nLCBvcHRzPzogZ2xvYi5JT3B0aW9ucykgPT4gQjxzdHJpbmdbXT59ICovKEIucHJvbWlzaWZ5KGdsb2IpKSxcblxuICAvKipcbiAgICogU2FuaXRpemUgYSBmaWxlbmFtZVxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJzaGFwL25vZGUtc2FuaXRpemUtZmlsZW5hbWVcbiAgICovXG4gIHNhbml0aXplTmFtZTogc2FuaXRpemUsXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGhleCBkaWdlc3Qgb2Ygc29tZSBmaWxlIGF0IGBmaWxlUGF0aGBcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2ZzJykuUGF0aExpa2V9IGZpbGVQYXRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxnb3JpdGhtXVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fVxuICAgKi9cbiAgYXN5bmMgaGFzaCAoZmlsZVBhdGgsIGFsZ29yaXRobSA9ICdzaGExJykge1xuICAgIHJldHVybiBhd2FpdCBuZXcgQigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBmaWxlSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobSk7XG4gICAgICBjb25zdCByZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCk7XG4gICAgICByZWFkU3RyZWFtLm9uKCdlcnJvcicsIChlKSA9PiByZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihgQ2Fubm90IGNhbGN1bGF0ZSAke2FsZ29yaXRobX0gaGFzaCBmb3IgJyR7ZmlsZVBhdGh9Jy4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5tZXNzYWdlfWApKSk7XG4gICAgICByZWFkU3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKSA9PiBmaWxlSGFzaC51cGRhdGUoY2h1bmspKTtcbiAgICAgIHJlYWRTdHJlYW0ub24oJ2VuZCcsICgpID0+IHJlc29sdmUoZmlsZUhhc2guZGlnZXN0KCdoZXgnKSkpO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGBXYWxrZXJgIGluc3RhbmNlLCB3aGljaCBpcyBhIHJlYWRhYmxlIHN0cmVhbSAoYW5kIHRodXNseSBhbiBhc3luYyBpdGVyYXRvcikuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaXIgLSBEaXIgdG8gc3RhcnQgd2Fsa2luZyBhdFxuICAgKiBAcGFyYW0ge2ltcG9ydCgna2xhdycpLk9wdGlvbnN9IFtvcHRzXVxuICAgKiBAcmV0dXJucyB7aW1wb3J0KCdrbGF3JykuV2Fsa2VyfVxuICAgKiBAc2VlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2tsYXdcbiAgICovXG4gIHdhbGsgKGRpciwgb3B0cykge1xuICAgIHJldHVybiBrbGF3KGRpciwgb3B0cyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNyZWF0ZSBhIGRpcmVjdG9yeS5cbiAgICogQHBhcmFtIHtpbXBvcnQoJ2ZzJykuUGF0aExpa2V9IGRpclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmd8dW5kZWZpbmVkPn1cbiAgICovXG4gIGFzeW5jIG1rZGlycCAoZGlyKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZzLm1rZGlyKGRpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBXYWxrcyBhIGRpcmVjdG9yeSBnaXZlbiBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMgZ2l2ZW4uIFRoZSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgd2l0aCBhIHBhdGggam9pbmVkIHdpdGggdGhlIGRpciBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpciBEaXJlY3RvcnkgcGF0aCB3aGVyZSB3ZSB3aWxsIHN0YXJ0IHdhbGtpbmdcbiAgICogQHBhcmFtIHtib29sZWFufSByZWN1cnNpdmUgU2V0IGl0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gY29udGludWUgd2Fsa2luZyBzdWIgZGlyZWN0b3JpZXNcbiAgICogQHBhcmFtIHtXYWxrRGlyQ2FsbGJhY2t9IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiBhIG5ldyBwYXRoIGlzIGZvdW5kXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgYGRpcmAgcGFyYW1ldGVyIGNvbnRhaW5zIGEgcGF0aCB0byBhbiBpbnZhbGlkIGZvbGRlclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc/Pn0gcmV0dXJucyB0aGUgZm91bmQgcGF0aCBvciBudWxsIGlmIHRoZSBpdGVtIHdhcyBub3QgZm91bmRcbiAgICovXG4gIGFzeW5jIHdhbGtEaXIgKGRpciwgcmVjdXJzaXZlLCBjYWxsYmFjaykgeyAvL2VzbGludC1kaXNhYmxlLWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgbGV0IGlzVmFsaWRSb290ID0gZmFsc2U7XG4gICAgbGV0IGVyck1zZyA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGlzVmFsaWRSb290ID0gKGF3YWl0IGZzLnN0YXQoZGlyKSkuaXNEaXJlY3RvcnkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJNc2cgPSBlLm1lc3NhZ2U7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFJvb3QpIHtcbiAgICAgIHRocm93IEVycm9yKGAnJHtkaXJ9JyBpcyBub3QgYSB2YWxpZCByb290IGRpcmVjdG9yeWAgKyAoZXJyTXNnID8gYC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyTXNnfWAgOiAnJykpO1xuICAgIH1cblxuICAgIGxldCB3YWxrZXI7XG4gICAgbGV0IGZpbGVDb3VudCA9IDA7XG4gICAgbGV0IGRpcmVjdG9yeUNvdW50ID0gMDtcbiAgICBjb25zdCB0aW1lciA9IG5ldyBUaW1lcigpLnN0YXJ0KCk7XG4gICAgcmV0dXJuIGF3YWl0IG5ldyBCKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGxldCBsYXN0RmlsZVByb2Nlc3NlZCA9IEIucmVzb2x2ZSgpO1xuICAgICAgd2Fsa2VyID0ga2xhdyhkaXIsIHtcbiAgICAgICAgZGVwdGhMaW1pdDogcmVjdXJzaXZlID8gLTEgOiAwLFxuICAgICAgfSk7XG4gICAgICB3YWxrZXIub24oJ2RhdGEnLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB3YWxrZXIucGF1c2UoKTtcblxuICAgICAgICBpZiAoIWl0ZW0uc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGZpbGVDb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpcmVjdG9yeUNvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9wcmVmZXItYXdhaXQtdG8tY2FsbGJhY2tzXG4gICAgICAgIGxhc3RGaWxlUHJvY2Vzc2VkID0gQi50cnkoYXN5bmMgKCkgPT4gYXdhaXQgY2FsbGJhY2soaXRlbS5wYXRoLCBpdGVtLnN0YXRzLmlzRGlyZWN0b3J5KCkpKVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkb25lID0gZmFsc2UpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUoaXRlbS5wYXRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdhbGtlci5yZXN1bWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChyZWplY3QpO1xuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyLCBpdGVtKSB7XG4gICAgICAgIGxvZy53YXJuKGBHb3QgYW4gZXJyb3Igd2hpbGUgd2Fsa2luZyAnJHtpdGVtLnBhdGh9JzogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgLy8ga2xhdyBjYW5ub3QgZ2V0IGJhY2sgZnJvbSBhbiBFTk9FTlQgZXJyb3JcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGxvZy53YXJuKCdBbGwgZmlsZXMgbWF5IG5vdCBoYXZlIGJlZW4gYWNjZXNzZWQnKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsYXN0RmlsZVByb2Nlc3NlZFxuICAgICAgICAgIC50aGVuKChmaWxlKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKC8qKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH0gKi8oZmlsZSkgPz8gbnVsbCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgbG9nLndhcm4oYFVuZXhwZWN0ZWQgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuICAgICAgbG9nLmRlYnVnKGBUcmF2ZXJzZWQgJHtwbHVyYWxpemUoJ2RpcmVjdG9yeScsIGRpcmVjdG9yeUNvdW50LCB0cnVlKX0gYCArXG4gICAgICAgIGBhbmQgJHtwbHVyYWxpemUoJ2ZpbGUnLCBmaWxlQ291bnQsIHRydWUpfSBgICtcbiAgICAgICAgYGluICR7dGltZXIuZ2V0RHVyYXRpb24oKS5hc01pbGxpU2Vjb25kcy50b0ZpeGVkKDApfW1zYCk7XG4gICAgICBpZiAod2Fsa2VyKSB7XG4gICAgICAgIHdhbGtlci5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgY2xvc2VzdCBgcGFja2FnZS5qc29uYCBmaWxlIGZyb20gYWJzb2x1dGUgcGF0aCBgZGlyYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpciAtIERpcmVjdG9yeSB0byBzZWFyY2ggZnJvbVxuICAgKiBAcGFyYW0ge2ltcG9ydCgncmVhZC1wa2cnKS5PcHRpb25zfSBbb3B0c10gLSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGByZWFkLXBrZ2BcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIHdlcmUgcHJvYmxlbXMgZmluZGluZyBvciByZWFkaW5nIGEgYHBhY2thZ2UuanNvbmAgZmlsZVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBBIHBhcnNlZCBgcGFja2FnZS5qc29uYFxuICAgKi9cbiAgcmVhZFBhY2thZ2VKc29uRnJvbSAoZGlyLCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBjd2QgPSBmcy5maW5kUm9vdChkaXIpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcmVhZFBrZy5zeW5jKHsuLi5vcHRzLCBjd2R9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gYEZhaWxlZCB0byByZWFkIGEgXFxgcGFja2FnZS5qc29uXFxgIGZyb20gZGlyIFxcYCR7ZGlyfVxcYDpcXG5cXG4ke2Vyci5tZXNzYWdlfWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9LFxuICAvKipcbiAgICogRmluZHMgdGhlIHByb2plY3Qgcm9vdCBkaXJlY3RvcnkgZnJvbSBgZGlyYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpciAtIERpcmVjdG9yeSB0byBzZWFyY2ggZnJvbVxuICAgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGBkaXJgIGlzIG5vdCBhIG5vbmVtcHR5IHN0cmluZyBvciByZWxhdGl2ZSBwYXRoXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3ZXJlIHByb2JsZW1zIGZpbmRpbmcgdGhlIHByb2plY3Qgcm9vdFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2xvc2VzZXQgcGFyZW50IGRpciBjb250YWluaW5nIGBwYWNrYWdlLmpzb25gXG4gICAqL1xuICBmaW5kUm9vdCAoZGlyKSB7XG4gICAgaWYgKCFkaXIgfHwgIXBhdGguaXNBYnNvbHV0ZShkaXIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZmluZFJvb3QoKWAgbXVzdCBiZSBwcm92aWRlZCBhIG5vbi1lbXB0eSwgYWJzb2x1dGUgcGF0aCcpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBmaW5kUm9vdENhY2hlZChkaXIpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFxcYGZpbmRSb290KClcXGAgY291bGQgbm90IGZpbmQgXFxgcGFja2FnZS5qc29uXFxgIGZyb20gJHtkaXJ9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG5cbiAgLy8gYWRkIHRoZSBzdXBwb3J0ZWQgYGZzYCBmdW5jdGlvbnNcbiAgYWNjZXNzOiBmc1Byb21pc2VzLmFjY2VzcyxcbiAgYXBwZW5kRmlsZTogZnNQcm9taXNlcy5hcHBlbmRGaWxlLFxuICBjaG1vZDogZnNQcm9taXNlcy5jaG1vZCxcbiAgY2xvc2U6IEIucHJvbWlzaWZ5KGNsb3NlKSxcbiAgY29uc3RhbnRzLFxuICBjcmVhdGVXcml0ZVN0cmVhbSxcbiAgY3JlYXRlUmVhZFN0cmVhbSxcbiAgbHN0YXQ6IGZzUHJvbWlzZXMubHN0YXQsXG4gIC8qKlxuICAgKiBXYXJuaW5nOiB0aGlzIGlzIGEgcHJvbWlzaWZpZWQge0BsaW5rY29kZSBvcGVuIGZzLm9wZW59LlxuICAgKiBJdCByZXNvbHZlcyB3L2EgZmlsZSBkZXNjcmlwdG9yIGluc3RlYWQgb2YgYSB7QGxpbmtjb2RlIGZzUHJvbWlzZXMuRmlsZUhhbmRsZSBGaWxlSGFuZGxlfSBvYmplY3QsIGFzIHtAbGlua2NvZGUgZnNQcm9taXNlcy5vcGVufSBkb2VzLiBVc2Uge0BsaW5rY29kZSBmcy5vcGVuRmlsZX0gaWYgeW91IHdhbnQgYSBgRmlsZUhhbmRsZWAuXG4gICAqL1xuICBvcGVuOiBCLnByb21pc2lmeShvcGVuKSxcbiAgb3BlbkZpbGU6IGZzUHJvbWlzZXMub3BlbixcbiAgcmVhZGRpcjogZnNQcm9taXNlcy5yZWFkZGlyLFxuICByZWFkOiBCLnByb21pc2lmeShyZWFkKSxcbiAgcmVhZEZpbGU6IGZzUHJvbWlzZXMucmVhZEZpbGUsXG4gIHJlYWRsaW5rOiBmc1Byb21pc2VzLnJlYWRsaW5rLFxuICByZWFscGF0aDogZnNQcm9taXNlcy5yZWFscGF0aCxcbiAgcmVuYW1lOiBmc1Byb21pc2VzLnJlbmFtZSxcbiAgc3RhdDogZnNQcm9taXNlcy5zdGF0LFxuICBzeW1saW5rOiBmc1Byb21pc2VzLnN5bWxpbmssXG4gIHVubGluazogZnNQcm9taXNlcy51bmxpbmssXG4gIHdyaXRlOiBCLnByb21pc2lmeSh3cml0ZSksXG4gIHdyaXRlRmlsZTogZnNQcm9taXNlcy53cml0ZUZpbGUsXG5cbiAgLy8gZGVwcmVjYXRlZCBwcm9wc1xuXG4gIC8qKlxuICAgKiBVc2UgYGNvbnN0YW50cy5GX09LYCBpbnN0ZWFkLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgRl9PSzogY29uc3RhbnRzLkZfT0ssXG5cbiAgLyoqXG4gICAqIFVzZSBgY29uc3RhbnRzLlJfT0tgIGluc3RlYWQuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBSX09LOiBjb25zdGFudHMuUl9PSyxcblxuICAvKipcbiAgICogVXNlIGBjb25zdGFudHMuV19PS2AgaW5zdGVhZC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIFdfT0s6IGNvbnN0YW50cy5XX09LLFxuXG4gIC8qKlxuICAgKiBVc2UgYGNvbnN0YW50cy5YX09LYCBpbnN0ZWFkLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgWF9PSzogY29uc3RhbnRzLlhfT0tcbn07XG5cbmV4cG9ydCB7IGZzIH07XG5leHBvcnQgZGVmYXVsdCBmcztcblxuLyoqXG4gKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgZHVyaW5nIHRoZSBkaXJlY3Rvcnkgd2Fsa2luZ1xuICogQGNhbGxiYWNrIFdhbGtEaXJDYWxsYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1QYXRoIFRoZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGZvbGRlclxuICogQHBhcmFtIHtib29sZWFufSBpc0RpcmVjdG9yeSBTaG93cyBpZiBpdCBpcyBhIGRpcmVjdG9yeSBvciBhIGZpbGVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHJldHVybiB0cnVlIGlmIHlvdSB3YW50IHRvIHN0b3Agd2Fsa2luZ1xuKi9cblxuIl19