appium-adb 9.0.0 → 9.2.1
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.
- package/README.md +0 -2
- package/build/lib/tools/aab-utils.js +157 -0
- package/build/lib/tools/apk-signing.js +9 -4
- package/build/lib/tools/apk-utils.js +4 -4
- package/build/lib/tools/apks-utils.js +5 -6
- package/build/lib/tools/index.js +4 -2
- package/lib/tools/aab-utils.js +158 -0
- package/lib/tools/apk-signing.js +3 -3
- package/lib/tools/apk-utils.js +5 -6
- package/lib/tools/apks-utils.js +5 -5
- package/lib/tools/index.js +2 -0
- package/package.json +6 -8
- package/lib/.DS_Store +0 -0
package/README.md
CHANGED
|
@@ -3,8 +3,6 @@ appium-adb
|
|
|
3
3
|
|
|
4
4
|
[](https://npmjs.org/package/appium-adb)
|
|
5
5
|
[](https://npmjs.org/package/appium-adb)
|
|
6
|
-
[](https://david-dm.org/appium/appium-adb)
|
|
7
|
-
[](https://david-dm.org/appium/appium-adb#info=devDependencies)
|
|
8
6
|
|
|
9
7
|
[](https://travis-ci.org/appium/appium-adb)
|
|
10
8
|
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
|
|
10
|
+
require("source-map-support/register");
|
|
11
|
+
|
|
12
|
+
var _logger = _interopRequireDefault(require("../logger.js"));
|
|
13
|
+
|
|
14
|
+
var _path = _interopRequireDefault(require("path"));
|
|
15
|
+
|
|
16
|
+
var _support = require("@appium/support");
|
|
17
|
+
|
|
18
|
+
var _lruCache = _interopRequireDefault(require("lru-cache"));
|
|
19
|
+
|
|
20
|
+
var _helpers = require("../helpers.js");
|
|
21
|
+
|
|
22
|
+
var _asyncLock = _interopRequireDefault(require("async-lock"));
|
|
23
|
+
|
|
24
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
25
|
+
|
|
26
|
+
var _crypto = _interopRequireDefault(require("crypto"));
|
|
27
|
+
|
|
28
|
+
const AAB_CACHE = new _lruCache.default({
|
|
29
|
+
max: 10,
|
|
30
|
+
dispose: (hash, extractedFilesRoot) => _support.fs.rimraf(extractedFilesRoot)
|
|
31
|
+
});
|
|
32
|
+
const AAB_CACHE_GUARD = new _asyncLock.default();
|
|
33
|
+
const UNIVERSAL_APK = 'universal.apk';
|
|
34
|
+
const aabUtilsMethods = {};
|
|
35
|
+
process.on('exit', () => {
|
|
36
|
+
if (!AAB_CACHE.size) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const paths = [...AAB_CACHE.values()];
|
|
41
|
+
|
|
42
|
+
_logger.default.debug(`Performing cleanup of ${paths.length} cached .aab ` + _support.util.pluralize('package', paths.length));
|
|
43
|
+
|
|
44
|
+
for (const appPath of paths) {
|
|
45
|
+
try {
|
|
46
|
+
_support.fs.rimrafSync(appPath);
|
|
47
|
+
} catch (e) {
|
|
48
|
+
_logger.default.warn(e.message);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
aabUtilsMethods.extractUniversalApk = async function extractUniversalApk(aabPath, opts = {}) {
|
|
54
|
+
if (!(await _support.fs.exists(aabPath))) {
|
|
55
|
+
throw new Error(`The file at '${aabPath}' either does not exist or is not accessible`);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const aabName = _path.default.basename(aabPath);
|
|
59
|
+
|
|
60
|
+
const apkName = aabName.substring(0, aabName.length - _path.default.extname(aabName).length) + '.apk';
|
|
61
|
+
const tmpRoot = await _support.tempDir.openDir();
|
|
62
|
+
|
|
63
|
+
const tmpApksPath = _path.default.join(tmpRoot, `${aabName}.apks`);
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
return await AAB_CACHE_GUARD.acquire(aabPath, async () => {
|
|
67
|
+
const aabHash = await _support.fs.hash(aabPath);
|
|
68
|
+
const {
|
|
69
|
+
keystore,
|
|
70
|
+
keystorePassword,
|
|
71
|
+
keyAlias,
|
|
72
|
+
keyPassword
|
|
73
|
+
} = opts;
|
|
74
|
+
let cacheHash = aabHash;
|
|
75
|
+
|
|
76
|
+
if (keystore) {
|
|
77
|
+
if (!(await _support.fs.exists(keystore))) {
|
|
78
|
+
throw new Error(`The keystore file at '${keystore}' either does not exist ` + `or is not accessible`);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (!keystorePassword || !keyAlias || !keyPassword) {
|
|
82
|
+
throw new Error('It is mandatory to also provide keystore password, key alias, ' + 'and key password if the keystore path is set');
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const keystoreHash = await _support.fs.hash(keystore);
|
|
86
|
+
|
|
87
|
+
const keyAliasHash = _crypto.default.createHash('sha1');
|
|
88
|
+
|
|
89
|
+
keyAliasHash.update(keyAlias);
|
|
90
|
+
cacheHash = [cacheHash, keystoreHash, keyAliasHash.digest('hex')].join(':');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
_logger.default.debug(`Calculated the cache key for '${aabPath}': ${cacheHash}`);
|
|
94
|
+
|
|
95
|
+
if (AAB_CACHE.has(cacheHash)) {
|
|
96
|
+
const resultPath = _path.default.resolve(AAB_CACHE.get(cacheHash), apkName);
|
|
97
|
+
|
|
98
|
+
if (await _support.fs.exists(resultPath)) {
|
|
99
|
+
return resultPath;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
AAB_CACHE.del(cacheHash);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
await this.initAapt2();
|
|
106
|
+
const args = ['build-apks', '--aapt2', this.binaries.aapt2, '--bundle', aabPath, '--output', tmpApksPath, ...(keystore ? ['--ks', keystore, '--ks-pass', `pass:${keystorePassword}`, '--ks-key-alias', keyAlias, '--key-pass', `pass:${keyPassword}`] : []), '--mode=universal'];
|
|
107
|
+
|
|
108
|
+
_logger.default.debug(`Preparing universal .apks bundle from '${aabPath}'`);
|
|
109
|
+
|
|
110
|
+
await this.execBundletool(args, `Cannot build a universal .apks bundle from '${aabPath}'`);
|
|
111
|
+
|
|
112
|
+
_logger.default.debug(`Unpacking universal application bundle at '${tmpApksPath}' to '${tmpRoot}'`);
|
|
113
|
+
|
|
114
|
+
await (0, _helpers.unzipFile)(tmpApksPath, tmpRoot);
|
|
115
|
+
let universalApkPath;
|
|
116
|
+
const fileDeletionPromises = [];
|
|
117
|
+
const allFileNames = await _support.fs.readdir(tmpRoot);
|
|
118
|
+
|
|
119
|
+
for (const fileName of allFileNames) {
|
|
120
|
+
const fullPath = _path.default.join(tmpRoot, fileName);
|
|
121
|
+
|
|
122
|
+
if (fileName === UNIVERSAL_APK) {
|
|
123
|
+
universalApkPath = fullPath;
|
|
124
|
+
} else {
|
|
125
|
+
fileDeletionPromises.push(_support.fs.rimraf(fullPath));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
try {
|
|
130
|
+
await _bluebird.default.all(fileDeletionPromises);
|
|
131
|
+
} catch (ign) {}
|
|
132
|
+
|
|
133
|
+
if (!universalApkPath) {
|
|
134
|
+
_logger.default.debug(`The following items were extracted from the .aab bundle: ${allFileNames}`);
|
|
135
|
+
|
|
136
|
+
throw new Error(`${UNIVERSAL_APK} cannot be found in '${aabPath}' bundle. ` + `Does the archive contain a valid application bundle?`);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const resultPath = _path.default.join(tmpRoot, apkName);
|
|
140
|
+
|
|
141
|
+
_logger.default.debug(`Found ${UNIVERSAL_APK} at '${universalApkPath}'. Caching it to '${resultPath}'`);
|
|
142
|
+
|
|
143
|
+
await _support.fs.mv(universalApkPath, resultPath);
|
|
144
|
+
AAB_CACHE.set(cacheHash, tmpRoot);
|
|
145
|
+
return resultPath;
|
|
146
|
+
});
|
|
147
|
+
} catch (e) {
|
|
148
|
+
await _support.fs.rimraf(tmpRoot);
|
|
149
|
+
throw e;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
var _default = aabUtilsMethods;
|
|
154
|
+
exports.default = _default;require('source-map-support').install();
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hYWItdXRpbHMuanMiXSwibmFtZXMiOlsiQUFCX0NBQ0hFIiwiTFJVIiwibWF4IiwiZGlzcG9zZSIsImhhc2giLCJleHRyYWN0ZWRGaWxlc1Jvb3QiLCJmcyIsInJpbXJhZiIsIkFBQl9DQUNIRV9HVUFSRCIsIkFzeW5jTG9jayIsIlVOSVZFUlNBTF9BUEsiLCJhYWJVdGlsc01ldGhvZHMiLCJwcm9jZXNzIiwib24iLCJzaXplIiwicGF0aHMiLCJ2YWx1ZXMiLCJsb2ciLCJkZWJ1ZyIsImxlbmd0aCIsInV0aWwiLCJwbHVyYWxpemUiLCJhcHBQYXRoIiwicmltcmFmU3luYyIsImUiLCJ3YXJuIiwibWVzc2FnZSIsImV4dHJhY3RVbml2ZXJzYWxBcGsiLCJhYWJQYXRoIiwib3B0cyIsImV4aXN0cyIsIkVycm9yIiwiYWFiTmFtZSIsInBhdGgiLCJiYXNlbmFtZSIsImFwa05hbWUiLCJzdWJzdHJpbmciLCJleHRuYW1lIiwidG1wUm9vdCIsInRlbXBEaXIiLCJvcGVuRGlyIiwidG1wQXBrc1BhdGgiLCJqb2luIiwiYWNxdWlyZSIsImFhYkhhc2giLCJrZXlzdG9yZSIsImtleXN0b3JlUGFzc3dvcmQiLCJrZXlBbGlhcyIsImtleVBhc3N3b3JkIiwiY2FjaGVIYXNoIiwia2V5c3RvcmVIYXNoIiwia2V5QWxpYXNIYXNoIiwiY3J5cHRvIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsImRpZ2VzdCIsImhhcyIsInJlc3VsdFBhdGgiLCJyZXNvbHZlIiwiZ2V0IiwiZGVsIiwiaW5pdEFhcHQyIiwiYXJncyIsImJpbmFyaWVzIiwiYWFwdDIiLCJleGVjQnVuZGxldG9vbCIsInVuaXZlcnNhbEFwa1BhdGgiLCJmaWxlRGVsZXRpb25Qcm9taXNlcyIsImFsbEZpbGVOYW1lcyIsInJlYWRkaXIiLCJmaWxlTmFtZSIsImZ1bGxQYXRoIiwicHVzaCIsIkIiLCJhbGwiLCJpZ24iLCJtdiIsInNldCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFD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QlQsVUFBVyxHQUF4Rjs7QUFDQSxZQUFNbkQsWUFBR3NFLEVBQUgsQ0FBTVYsZ0JBQU4sRUFBd0JULFVBQXhCLENBQU47QUFDQXpELE1BQUFBLFNBQVMsQ0FBQzZFLEdBQVYsQ0FBYzVCLFNBQWQsRUFBeUJYLE9BQXpCO0FBQ0EsYUFBT21CLFVBQVA7QUFDRCxLQTNFWSxDQUFiO0FBNEVELEdBN0VELENBNkVFLE9BQU9qQyxDQUFQLEVBQVU7QUFDVixVQUFNbEIsWUFBR0MsTUFBSCxDQUFVK0IsT0FBVixDQUFOO0FBQ0EsVUFBTWQsQ0FBTjtBQUNEO0FBQ0YsQ0ExRkQ7O2VBNEZlYixlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBmcywgdGVtcERpciwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgeyB1bnppcEZpbGUgfSBmcm9tICcuLi9oZWxwZXJzLmpzJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQgQiBmcm9tICdibHVlYmlyZCc7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmNvbnN0IEFBQl9DQUNIRSA9IG5ldyBMUlUoe1xuICBtYXg6IDEwLFxuICBkaXNwb3NlOiAoaGFzaCwgZXh0cmFjdGVkRmlsZXNSb290KSA9PiBmcy5yaW1yYWYoZXh0cmFjdGVkRmlsZXNSb290KSxcbn0pO1xuY29uc3QgQUFCX0NBQ0hFX0dVQVJEID0gbmV3IEFzeW5jTG9jaygpO1xuY29uc3QgVU5JVkVSU0FMX0FQSyA9ICd1bml2ZXJzYWwuYXBrJztcblxuY29uc3QgYWFiVXRpbHNNZXRob2RzID0ge307XG5cbnByb2Nlc3Mub24oJ2V4aXQnLCAoKSA9PiB7XG4gIGlmICghQUFCX0NBQ0hFLnNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYXRocyA9IFsuLi5BQUJfQ0FDSEUudmFsdWVzKCldO1xuICBsb2cuZGVidWcoYFBlcmZvcm1pbmcgY2xlYW51cCBvZiAke3BhdGhzLmxlbmd0aH0gY2FjaGVkIC5hYWIgYCArXG4gICAgdXRpbC5wbHVyYWxpemUoJ3BhY2thZ2UnLCBwYXRocy5sZW5ndGgpKTtcbiAgZm9yIChjb25zdCBhcHBQYXRoIG9mIHBhdGhzKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFzeW5jaHJvbm91cyBjYWxscyBhcmUgbm90IHN1cHBvcnRlZCBpbiBvbkV4aXQgaGFuZGxlclxuICAgICAgZnMucmltcmFmU3luYyhhcHBQYXRoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2cud2FybihlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufSk7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQXBrQ3JlYXRpb25PcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5c3RvcmUgU3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBkZXBsb3ltZW50IGtleXN0b3JlIHVzZWRcbiAqIHRvIHNpZ24gdGhlIEFQS3MuIFRoaXMgZmxhZyBpcyBvcHRpb25hbC4gSWYgeW91IGRvbid0IGluY2x1ZGUgaXQsXG4gKiBidW5kbGV0b29sIGF0dGVtcHRzIHRvIHNpZ24geW91ciBBUEtzIHdpdGggYSBkZWJ1ZyBzaWduaW5nIGtleS5cbiAqIElmIHRoZSAuYXBrIGhhcyBiZWVuIGFscmVhZHkgc2lnbmVkIGFuZCBjYWNoZWQgdGhlbiBpdCBpcyBub3QgZ29pbmcgdG8gYmUgcmVzaWduZWRcbiAqIHVubGVzcyBhIGRpZmZlcmVudCBrZXlzdG9yZSBvciBrZXkgYWxpYXMgaXMgdXNlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlzdG9yZVBhc3N3b3JkIFNwZWNpZmllcyB5b3VyIGtleXN0b3Jl4oCZcyBwYXNzd29yZC5cbiAqIEl0IGlzIG1hbmRhdG9yeSB0byBwcm92aWRlIHRoaXMgdmFsdWUgaWYgYGtleXN0b3JlYCBvbmUgaXMgYXNzaWduZWRcbiAqIG90aGVyd2lzZSBpdCBpcyBnb2luZyB0byBiZSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleUFsaWFzIFNwZWNpZmllcyB0aGUgYWxpYXMgb2YgdGhlIHNpZ25pbmcga2V5IHlvdSB3YW50IHRvIHVzZS5cbiAqIEl0IGlzIG1hbmRhdG9yeSB0byBwcm92aWRlIHRoaXMgdmFsdWUgaWYgYGtleXN0b3JlYCBvbmUgaXMgYXNzaWduZWRcbiAqIG90aGVyd2lzZSBpdCBpcyBnb2luZyB0byBiZSBpZ25vcmVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleVBhc3N3b3JkIFNwZWNpZmllcyB0aGUgcGFzc3dvcmQgZm9yIHRoZSBzaWduaW5nIGtleS5cbiAqIEl0IGlzIG1hbmRhdG9yeSB0byBwcm92aWRlIHRoaXMgdmFsdWUgaWYgYGtleXN0b3JlYCBvbmUgaXMgYXNzaWduZWRcbiAqIG90aGVyd2lzZSBpdCBpcyBnb2luZyB0byBiZSBpZ25vcmVkLlxuICovXG5cbi8qKlxuICogQnVpbGRzIGEgdW5pdmVyc2FsIC5hcGsgZnJvbSB0aGUgZ2l2ZW4gLmFhYiBwYWNrYWdlLiBTZWVcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9jb21tYW5kLWxpbmUvYnVuZGxldG9vbCNnZW5lcmF0ZV9hcGtzXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhYWJQYXRoIEZ1bGwgcGF0aCB0byB0aGUgc291cmNlIC5hYWIgcGFja2FnZVxuICogQHBhcmFtIHtBcGtDcmVhdGlvbk9wdGlvbnN9IG9wdHNcbiAqIEByZXR1cm5zIFRoZSBwYXRoIHRvIHRoZSByZXN1bHRpbmcgdW5pdmVyc2FsIC5hcGsuIFRoZSAuYXBrIGlzIHN0b3JlZCBpbiB0aGUgaW50ZXJuYWwgY2FjaGVcbiAqIGJ5IGRlZmF1bHQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSB1bml2ZXJzYWwgLmFwa1xuICovXG5hYWJVdGlsc01ldGhvZHMuZXh0cmFjdFVuaXZlcnNhbEFwayA9IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RVbml2ZXJzYWxBcGsgKGFhYlBhdGgsIG9wdHMgPSB7fSkge1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhhYWJQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGZpbGUgYXQgJyR7YWFiUGF0aH0nIGVpdGhlciBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICB9XG5cbiAgY29uc3QgYWFiTmFtZSA9IHBhdGguYmFzZW5hbWUoYWFiUGF0aCk7XG4gIGNvbnN0IGFwa05hbWUgPSBhYWJOYW1lLnN1YnN0cmluZygwLCBhYWJOYW1lLmxlbmd0aCAtIHBhdGguZXh0bmFtZShhYWJOYW1lKS5sZW5ndGgpICsgJy5hcGsnO1xuICBjb25zdCB0bXBSb290ID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gIGNvbnN0IHRtcEFwa3NQYXRoID0gcGF0aC5qb2luKHRtcFJvb3QsIGAke2FhYk5hbWV9LmFwa3NgKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgQUFCX0NBQ0hFX0dVQVJELmFjcXVpcmUoYWFiUGF0aCwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWFiSGFzaCA9IGF3YWl0IGZzLmhhc2goYWFiUGF0aCk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGtleXN0b3JlLFxuICAgICAgICBrZXlzdG9yZVBhc3N3b3JkLFxuICAgICAgICBrZXlBbGlhcyxcbiAgICAgICAga2V5UGFzc3dvcmQsXG4gICAgICB9ID0gb3B0cztcbiAgICAgIGxldCBjYWNoZUhhc2ggPSBhYWJIYXNoO1xuICAgICAgaWYgKGtleXN0b3JlKSB7XG4gICAgICAgIGlmICghYXdhaXQgZnMuZXhpc3RzKGtleXN0b3JlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGtleXN0b3JlIGZpbGUgYXQgJyR7a2V5c3RvcmV9JyBlaXRoZXIgZG9lcyBub3QgZXhpc3QgYCArXG4gICAgICAgICAgICBgb3IgaXMgbm90IGFjY2Vzc2libGVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWtleXN0b3JlUGFzc3dvcmQgfHwgIWtleUFsaWFzIHx8ICFrZXlQYXNzd29yZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgbWFuZGF0b3J5IHRvIGFsc28gcHJvdmlkZSBrZXlzdG9yZSBwYXNzd29yZCwga2V5IGFsaWFzLCAnICtcbiAgICAgICAgICAgICdhbmQga2V5IHBhc3N3b3JkIGlmIHRoZSBrZXlzdG9yZSBwYXRoIGlzIHNldCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleXN0b3JlSGFzaCA9IGF3YWl0IGZzLmhhc2goa2V5c3RvcmUpO1xuICAgICAgICBjb25zdCBrZXlBbGlhc0hhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpO1xuICAgICAgICBrZXlBbGlhc0hhc2gudXBkYXRlKGtleUFsaWFzKTtcbiAgICAgICAgY2FjaGVIYXNoID0gW2NhY2hlSGFzaCwga2V5c3RvcmVIYXNoLCBrZXlBbGlhc0hhc2guZGlnZXN0KCdoZXgnKV0uam9pbignOicpO1xuICAgICAgfVxuICAgICAgbG9nLmRlYnVnKGBDYWxjdWxhdGVkIHRoZSBjYWNoZSBrZXkgZm9yICcke2FhYlBhdGh9JzogJHtjYWNoZUhhc2h9YCk7XG4gICAgICBpZiAoQUFCX0NBQ0hFLmhhcyhjYWNoZUhhc2gpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLnJlc29sdmUoQUFCX0NBQ0hFLmdldChjYWNoZUhhc2gpLCBhcGtOYW1lKTtcbiAgICAgICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhyZXN1bHRQYXRoKSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRQYXRoO1xuICAgICAgICB9XG4gICAgICAgIEFBQl9DQUNIRS5kZWwoY2FjaGVIYXNoKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5pbml0QWFwdDIoKTtcbiAgICAgIGNvbnN0IGFyZ3MgPSBbXG4gICAgICAgICdidWlsZC1hcGtzJyxcbiAgICAgICAgJy0tYWFwdDInLCB0aGlzLmJpbmFyaWVzLmFhcHQyLFxuICAgICAgICAnLS1idW5kbGUnLCBhYWJQYXRoLFxuICAgICAgICAnLS1vdXRwdXQnLCB0bXBBcGtzUGF0aCxcbiAgICAgICAgLi4uKGtleXN0b3JlID8gW1xuICAgICAgICAgICctLWtzJywga2V5c3RvcmUsXG4gICAgICAgICAgJy0ta3MtcGFzcycsIGBwYXNzOiR7a2V5c3RvcmVQYXNzd29yZH1gLFxuICAgICAgICAgICctLWtzLWtleS1hbGlhcycsIGtleUFsaWFzLFxuICAgICAgICAgICctLWtleS1wYXNzJywgYHBhc3M6JHtrZXlQYXNzd29yZH1gLFxuICAgICAgICBdIDogW10pLFxuICAgICAgICAnLS1tb2RlPXVuaXZlcnNhbCdcbiAgICAgIF07XG4gICAgICBsb2cuZGVidWcoYFByZXBhcmluZyB1bml2ZXJzYWwgLmFwa3MgYnVuZGxlIGZyb20gJyR7YWFiUGF0aH0nYCk7XG4gICAgICBhd2FpdCB0aGlzLmV4ZWNCdW5kbGV0b29sKGFyZ3MsIGBDYW5ub3QgYnVpbGQgYSB1bml2ZXJzYWwgLmFwa3MgYnVuZGxlIGZyb20gJyR7YWFiUGF0aH0nYCk7XG5cbiAgICAgIGxvZy5kZWJ1ZyhgVW5wYWNraW5nIHVuaXZlcnNhbCBhcHBsaWNhdGlvbiBidW5kbGUgYXQgJyR7dG1wQXBrc1BhdGh9JyB0byAnJHt0bXBSb290fSdgKTtcbiAgICAgIGF3YWl0IHVuemlwRmlsZSh0bXBBcGtzUGF0aCwgdG1wUm9vdCk7XG4gICAgICBsZXQgdW5pdmVyc2FsQXBrUGF0aDtcbiAgICAgIGNvbnN0IGZpbGVEZWxldGlvblByb21pc2VzID0gW107XG4gICAgICBjb25zdCBhbGxGaWxlTmFtZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRtcFJvb3QpO1xuICAgICAgZm9yIChjb25zdCBmaWxlTmFtZSBvZiBhbGxGaWxlTmFtZXMpIHtcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgZmlsZU5hbWUpO1xuICAgICAgICBpZiAoZmlsZU5hbWUgPT09IFVOSVZFUlNBTF9BUEspIHtcbiAgICAgICAgICB1bml2ZXJzYWxBcGtQYXRoID0gZnVsbFBhdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsZURlbGV0aW9uUHJvbWlzZXMucHVzaChmcy5yaW1yYWYoZnVsbFBhdGgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgQi5hbGwoZmlsZURlbGV0aW9uUHJvbWlzZXMpO1xuICAgICAgfSBjYXRjaCAoaWduKSB7fVxuICAgICAgaWYgKCF1bml2ZXJzYWxBcGtQYXRoKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgVGhlIGZvbGxvd2luZyBpdGVtcyB3ZXJlIGV4dHJhY3RlZCBmcm9tIHRoZSAuYWFiIGJ1bmRsZTogJHthbGxGaWxlTmFtZXN9YCk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtVTklWRVJTQUxfQVBLfSBjYW5ub3QgYmUgZm91bmQgaW4gJyR7YWFiUGF0aH0nIGJ1bmRsZS4gYCArXG4gICAgICAgICAgYERvZXMgdGhlIGFyY2hpdmUgY29udGFpbiBhIHZhbGlkIGFwcGxpY2F0aW9uIGJ1bmRsZT9gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3VsdFBhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgYXBrTmFtZSk7XG4gICAgICBsb2cuZGVidWcoYEZvdW5kICR7VU5JVkVSU0FMX0FQS30gYXQgJyR7dW5pdmVyc2FsQXBrUGF0aH0nLiBDYWNoaW5nIGl0IHRvICcke3Jlc3VsdFBhdGh9J2ApO1xuICAgICAgYXdhaXQgZnMubXYodW5pdmVyc2FsQXBrUGF0aCwgcmVzdWx0UGF0aCk7XG4gICAgICBBQUJfQ0FDSEUuc2V0KGNhY2hlSGFzaCwgdG1wUm9vdCk7XG4gICAgICByZXR1cm4gcmVzdWx0UGF0aDtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGF3YWl0IGZzLnJpbXJhZih0bXBSb290KTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBhYWJVdGlsc01ldGhvZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9hYWItdXRpbHMuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|
|
@@ -54,7 +54,8 @@ apkSigningMethods.executeApksigner = async function executeApksigner(args = [])
|
|
|
54
54
|
stdout,
|
|
55
55
|
stderr
|
|
56
56
|
} = await (0, _teen_process.exec)(fullCmd[0], fullCmd.slice(1), {
|
|
57
|
-
cwd: _path.default.dirname(apkSignerJar)
|
|
57
|
+
cwd: _path.default.dirname(apkSignerJar),
|
|
58
|
+
windowsVerbatimArguments: _support.system.isWindows()
|
|
58
59
|
});
|
|
59
60
|
|
|
60
61
|
for (let [name, stream] of [['stdout', stdout], ['stderr', stderr]]) {
|
|
@@ -117,7 +118,9 @@ apkSigningMethods.signWithCustomCert = async function signWithCustomCert(apk) {
|
|
|
117
118
|
|
|
118
119
|
_logger.default.debug(`Starting jarsigner: ${_support.util.quote(fullCmd)}`);
|
|
119
120
|
|
|
120
|
-
await (0, _teen_process.exec)(fullCmd[0], fullCmd.slice(1)
|
|
121
|
+
await (0, _teen_process.exec)(fullCmd[0], fullCmd.slice(1), {
|
|
122
|
+
windowsVerbatimArguments: _support.system.isWindows()
|
|
123
|
+
});
|
|
121
124
|
} catch (e) {
|
|
122
125
|
throw new Error(`Could not sign with custom certificate. ` + `Original error: ${e.stderr || e.message}`);
|
|
123
126
|
}
|
|
@@ -293,7 +296,9 @@ apkSigningMethods.getKeystoreHash = async function getKeystoreHash() {
|
|
|
293
296
|
try {
|
|
294
297
|
const {
|
|
295
298
|
stdout
|
|
296
|
-
} = await (0, _teen_process.exec)(keytool, args
|
|
299
|
+
} = await (0, _teen_process.exec)(keytool, args, {
|
|
300
|
+
windowsVerbatimArguments: _support.system.isWindows()
|
|
301
|
+
});
|
|
297
302
|
const result = {};
|
|
298
303
|
|
|
299
304
|
for (const hashName of [SHA512, SHA256, SHA1, MD5]) {
|
|
@@ -325,4 +330,4 @@ var _default = apkSigningMethods;
|
|
|
325
330
|
exports.default = _default;require('source-map-support').install();
|
|
326
331
|
|
|
327
332
|
|
|
328
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hcGstc2lnbmluZy5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX1BSSVZBVEVfS0VZIiwicGF0aCIsInJlc29sdmUiLCJyb290RGlyIiwiREVGQVVMVF9DRVJUSUZJQ0FURSIsIkJVTkRMRVRPT0xfVFVUT1JJQUwiLCJBUEtTSUdORVJfVkVSSUZZX0ZBSUwiLCJTSEExIiwiU0hBMjU2IiwiU0hBNTEyIiwiTUQ1IiwiREVGQVVMVF9DRVJUX0hBU0giLCJKQVZBX1BST1BTX0lOSVRfRVJST1IiLCJTSUdORURfQVBQU19DQUNIRSIsIkxSVSIsIm1heCIsImFwa1NpZ25pbmdNZXRob2RzIiwiZXhlY3V0ZUFwa3NpZ25lciIsImFyZ3MiLCJhcGtTaWduZXJKYXIiLCJmdWxsQ21kIiwibG9nIiwiZGVidWciLCJ1dGlsIiwicXVvdGUiLCJzdGRvdXQiLCJzdGRlcnIiLCJzbGljZSIsImN3ZCIsImRpcm5hbWUiLCJuYW1lIiwic3RyZWFtIiwiXyIsInRyaW0iLCJzcGxpdCIsImZpbHRlciIsImxpbmUiLCJpbmNsdWRlcyIsImpvaW4iLCJzaWduV2l0aERlZmF1bHRDZXJ0IiwiYXBrIiwiZnMiLCJleGlzdHMiLCJFcnJvciIsImUiLCJtZXNzYWdlIiwic2lnbldpdGhDdXN0b21DZXJ0Iiwia2V5c3RvcmVQYXRoIiwia2V5QWxpYXMiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5UGFzc3dvcmQiLCJlcnIiLCJ3YXJuIiwiamFyc2lnbmVyIiwic3lzdGVtIiwiaXNXaW5kb3dzIiwic2lnbiIsImFwcFBhdGgiLCJlbmRzV2l0aCIsIkFQS1NfRVhURU5TSU9OIiwidXNlS2V5c3RvcmUiLCJ6aXBBbGlnbkFwayIsImluaXRaaXBBbGlnbiIsImJpbmFyaWVzIiwiemlwYWxpZ24iLCJhY2Nlc3MiLCJfZnMiLCJXX09LIiwiYWxpZ25lZEFwayIsInRlbXBEaXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJtdiIsIm1rZGlycCIsInVubGluayIsImNoZWNrQXBrQ2VydCIsInBrZyIsIm9wdHMiLCJleHRuYW1lIiwiZXh0cmFjdEJhc2VBcGsiLCJoYXNoTWF0Y2hlcyIsImFwa3NpZ25lck91dHB1dCIsImV4cGVjdGVkSGFzaGVzIiwidmFsdWUiLCJ0b1BhaXJzIiwiUmVnRXhwIiwidGVzdCIsImJhc2VuYW1lIiwicmVxdWlyZURlZmF1bHRDZXJ0IiwiYXBwSGFzaCIsImhhc2giLCJoYXMiLCJvdXRwdXQiLCJleHBlY3RlZCIsImdldCIsImdldEtleXN0b3JlSGFzaCIsImhhc01hdGNoIiwiaW5mbyIsImlzU2lnbmVkIiwic2V0IiwiZXJyTXNnIiwia2V5dG9vbCIsInJlc3VsdCIsImhhc2hOYW1lIiwiaGFzaFJlIiwibWF0Y2giLCJleGVjIiwicmVwbGFjZSIsInRvTG93ZXJDYXNlIiwiaXNFbXB0eSIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsbUJBQW1CLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYUMsZ0JBQWIsRUFBc0IsTUFBdEIsRUFBOEIsYUFBOUIsQ0FBNUI7O0FBQ0EsTUFBTUMsbUJBQW1CLEdBQUdILGNBQUtDLE9BQUwsQ0FBYUMsZ0JBQWIsRUFBc0IsTUFBdEIsRUFBOEIsa0JBQTlCLENBQTVCOztBQUNBLE1BQU1FLG1CQUFtQixHQUFHLDhEQUE1QjtBQUNBLE1BQU1DLHFCQUFxQixHQUFHLGlCQUE5QjtBQUNBLE1BQU1DLElBQUksR0FBRyxNQUFiO0FBQ0EsTUFBTUMsTUFBTSxHQUFHLFFBQWY7QUFDQSxNQUFNQyxNQUFNLEdBQUcsUUFBZjtBQUNBLE1BQU1DLEdBQUcsR0FBRyxLQUFaO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUc7QUFDeEIsR0FBQ0gsTUFBRCxHQUFVO0FBRGMsQ0FBMUI7QUFHQSxNQUFNSSxxQkFBcUIsR0FBRyxrQ0FBOUI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxJQUFJQyxpQkFBSixDQUFRO0FBQ2hDQyxFQUFB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TUFBSixDQUFZLFFBQU9rQixRQUFTLG1CQUE1QixFQUFnRCxJQUFoRCxDQUFmO0FBQ0EsWUFBTUUsS0FBSyxHQUFHRCxNQUFNLENBQUNFLElBQVAsQ0FBWWpGLE1BQVosQ0FBZDs7QUFDQSxVQUFJLENBQUNnRixLQUFMLEVBQVk7QUFDVjtBQUNEOztBQUNESCxNQUFBQSxNQUFNLENBQUNDLFFBQUQsQ0FBTixHQUFtQkUsS0FBSyxDQUFDLENBQUQsQ0FBTCxDQUFTRSxPQUFULENBQWlCLElBQWpCLEVBQXVCLEVBQXZCLEVBQTJCQyxXQUEzQixFQUFuQjtBQUNEOztBQUNELFFBQUk1RSxnQkFBRTZFLE9BQUYsQ0FBVVAsTUFBVixDQUFKLEVBQXVCO0FBQ3JCakYsc0JBQUlDLEtBQUosQ0FBVUcsTUFBVjs7QUFDQSxZQUFNLElBQUlrQixLQUFKLENBQVUscURBQVYsQ0FBTjtBQUNEOztBQUNEdEIsb0JBQUlDLEtBQUosQ0FBVyxrQkFBaUJ3RixJQUFJLENBQUNDLFNBQUwsQ0FBZVQsTUFBZixDQUF1QixFQUFuRDs7QUFDQSxXQUFPQSxNQUFQO0FBQ0QsR0FqQkQsQ0FpQkUsT0FBTzFELENBQVAsRUFBVTtBQUNWLFVBQU0sSUFBSUQsS0FBSixDQUFXLDJCQUEwQixLQUFLSSxZQUFhLGNBQTdDLEdBQ2IsbUJBQWtCSCxDQUFDLENBQUNsQixNQUFGLElBQVlrQixDQUFDLENBQUNDLE9BQVEsRUFEckMsQ0FBTjtBQUVEO0FBQ0YsQ0FuQ0Q7O2VBcUNlN0IsaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IF9mcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBleGVjIH0gZnJvbSAndGVlbl9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXIuanMnO1xuaW1wb3J0IHsgdGVtcERpciwgc3lzdGVtLCBta2RpcnAsIGZzLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7XG4gIGdldEphdmFGb3JPcywgZ2V0QXBrc2lnbmVyRm9yT3MsIGdldEphdmFIb21lLFxuICByb290RGlyLCBBUEtTX0VYVEVOU0lPTiwgdW5zaWduQXBrLFxufSBmcm9tICcuLi9oZWxwZXJzLmpzJztcblxuY29uc3QgREVGQVVMVF9QUklWQVRFX0tFWSA9IHBhdGgucmVzb2x2ZShyb290RGlyLCAna2V5cycsICd0ZXN0a2V5LnBrOCcpO1xuY29uc3QgREVGQVVMVF9DRVJUSUZJQ0FURSA9IHBhdGgucmVzb2x2ZShyb290RGlyLCAna2V5cycsICd0ZXN0a2V5Lng1MDkucGVtJyk7XG5jb25zdCBCVU5ETEVUT09MX1RVVE9SSUFMID0gJ2h0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3N0dWRpby9jb21tYW5kLWxpbmUvYnVuZGxldG9vbCc7XG5jb25zdCBBUEtTSUdORVJfVkVSSUZZX0ZBSUwgPSAnRE9FUyBOT1QgVkVSSUZZJztcbmNvbnN0IFNIQTEgPSAnc2hhMSc7XG5jb25zdCBTSEEyNTYgPSAnc2hhMjU2JztcbmNvbnN0IFNIQTUxMiA9ICdzaGE1MTInO1xuY29uc3QgTUQ1ID0gJ21kNSc7XG5jb25zdCBERUZBVUxUX0NFUlRfSEFTSCA9IHtcbiAgW1NIQTI1Nl06ICdhNDBkYTgwYTU5ZDE3MGNhYTk1MGNmMTVjMThjNDU0ZDQ3YTM5YjI2OTg5ZDhiNjQwZWNkNzQ1YmE3MWJmNWRjJ1xufTtcbmNvbnN0IEpBVkFfUFJPUFNfSU5JVF9FUlJPUiA9ICdqYXZhLmxhbmcuRXJyb3I6IFByb3BlcnRpZXMgaW5pdCc7XG5jb25zdCBTSUdORURfQVBQU19DQUNIRSA9IG5ldyBMUlUoe1xuICBtYXg6IDMwLFxufSk7XG5cblxuY29uc3QgYXBrU2lnbmluZ01ldGhvZHMgPSB7fTtcblxuLyoqXG4gKiBFeGVjdXRlIGFwa3NpZ25lciB1dGlsaXR5IHdpdGggZ2l2ZW4gYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7P0FycmF5PFN0cmluZz59IGFyZ3MgLSBUaGUgbGlzdCBvZiB0b29sIGFyZ3VtZW50cy5cbiAqIEByZXR1cm4ge3N0cmluZ30gLSBDb21tYW5kIHN0ZG91dFxuICogQHRocm93cyB7RXJyb3J9IElmIGFwa3NpZ25lciBiaW5hcnkgaXMgbm90IHByZXNlbnQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtXG4gKiAgICAgICAgICAgICAgICAgb3IgdGhlIHJldHVybiBjb2RlIGlzIG5vdCBlcXVhbCB0byB6ZXJvLlxuICovXG5hcGtTaWduaW5nTWV0aG9kcy5leGVjdXRlQXBrc2lnbmVyID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZUFwa3NpZ25lciAoYXJncyA9IFtdKSB7XG4gIGNvbnN0IGFwa1NpZ25lckphciA9IGF3YWl0IGdldEFwa3NpZ25lckZvck9zKHRoaXMpO1xuICBjb25zdCBmdWxsQ21kID0gW1xuICAgIGF3YWl0IGdldEphdmFGb3JPcygpLCAnLVhteDEwMjRNJywgJy1Yc3MxbScsXG4gICAgJy1qYXInLCBhcGtTaWduZXJKYXIsXG4gICAgLi4uYXJnc1xuICBdO1xuICBsb2cuZGVidWcoYFN0YXJ0aW5nIGFwa3NpZ25lcjogJHt1dGlsLnF1b3RlKGZ1bGxDbWQpfWApO1xuICAvLyBJdCBpcyBuZWNlc3NhcnkgdG8gc3BlY2lmeSBDV0QgZXhwbGljaXRseTsgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcHBpdW0vYXBwaXVtL2lzc3Vlcy8xNDcyNCNpc3N1ZWNvbW1lbnQtNzM3NDQ2NzE1XG4gIGNvbnN0IHtzdGRvdXQsIHN0ZGVycn0gPSBhd2FpdCBleGVjKGZ1bGxDbWRbMF0sIGZ1bGxDbWQuc2xpY2UoMSksIHtcbiAgICBjd2Q6IHBhdGguZGlybmFtZShhcGtTaWduZXJKYXIpXG4gIH0pO1xuICBmb3IgKGxldCBbbmFtZSwgc3RyZWFtXSBvZiBbWydzdGRvdXQnLCBzdGRvdXRdLCBbJ3N0ZGVycicsIHN0ZGVycl1dKSB7XG4gICAgaWYgKCFfLnRyaW0oc3RyZWFtKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgPT09ICdzdGRvdXQnKSB7XG4gICAgICAvLyBNYWtlIHRoZSBvdXRwdXQgbGVzcyB0YWxrYXRpdmVcbiAgICAgIHN0cmVhbSA9IHN0cmVhbS5zcGxpdCgnXFxuJylcbiAgICAgICAgLmZpbHRlcigobGluZSkgPT4gIWxpbmUuaW5jbHVkZXMoJ1dBUk5JTkc6JykpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBhcGtzaWduZXIgJHtuYW1lfTogJHtzdHJlYW19YCk7XG4gIH1cbiAgcmV0dXJuIHN0ZG91dDtcbn07XG5cbi8qKlxuICogKFJlKXNpZ24gdGhlIGdpdmVuIGFwayBmaWxlIG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSB3aXRoIHRoZSBkZWZhdWx0IGNlcnRpZmljYXRlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGsgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBsb2NhbCBhcGsgZmlsZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBzaWduaW5nIGZhaWxzLlxuICovXG5hcGtTaWduaW5nTWV0aG9kcy5zaWduV2l0aERlZmF1bHRDZXJ0ID0gYXN5bmMgZnVuY3Rpb24gc2lnbldpdGhEZWZhdWx0Q2VydCAoYXBrKSB7XG4gIGxvZy5kZWJ1ZyhgU2lnbmluZyAnJHthcGt9JyB3aXRoIGRlZmF1bHQgY2VydGApO1xuICBpZiAoIShhd2FpdCBmcy5leGlzdHMoYXBrKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YXBrfSBmaWxlIGRvZXNuJ3QgZXhpc3QuYCk7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW1xuICAgICdzaWduJyxcbiAgICAnLS1rZXknLCBERUZBVUxUX1BSSVZBVEVfS0VZLFxuICAgICctLWNlcnQnLCBERUZBVUxUX0NFUlRJRklDQVRFLFxuICAgIGFwayxcbiAgXTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBcGtzaWduZXIoYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBzaWduICcke2Fwa30nIHdpdGggdGhlIGRlZmF1bHQgY2VydGlmaWNhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiAoUmUpc2lnbiB0aGUgZ2l2ZW4gYXBrIGZpbGUgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtIHdpdGggYSBjdXN0b20gY2VydGlmaWNhdGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwayAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIGxvY2FsIGFwayBmaWxlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHNpZ25pbmcgZmFpbHMuXG4gKi9cbmFwa1NpZ25pbmdNZXRob2RzLnNpZ25XaXRoQ3VzdG9tQ2VydCA9IGFzeW5jIGZ1bmN0aW9uIHNpZ25XaXRoQ3VzdG9tQ2VydCAoYXBrKSB7XG4gIGxvZy5kZWJ1ZyhgU2lnbmluZyAnJHthcGt9JyB3aXRoIGN1c3RvbSBjZXJ0YCk7XG4gIGlmICghKGF3YWl0IGZzLmV4aXN0cyh0aGlzLmtleXN0b3JlUGF0aCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBLZXlzdG9yZTogJHt0aGlzLmtleXN0b3JlUGF0aH0gZG9lc24ndCBleGlzdC5gKTtcbiAgfVxuICBpZiAoIShhd2FpdCBmcy5leGlzdHMoYXBrKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Fwa30nIGRvZXNuJ3QgZXhpc3QuYCk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUFwa3NpZ25lcihbJ3NpZ24nLFxuICAgICAgJy0ta3MnLCB0aGlzLmtleXN0b3JlUGF0aCxcbiAgICAgICctLWtzLWtleS1hbGlhcycsIHRoaXMua2V5QWxpYXMsXG4gICAgICAnLS1rcy1wYXNzJywgYHBhc3M6JHt0aGlzLmtleXN0b3JlUGFzc3dvcmR9YCxcbiAgICAgICctLWtleS1wYXNzJywgYHBhc3M6JHt0aGlzLmtleVBhc3N3b3JkfWAsXG4gICAgICBhcGtdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCB1c2UgYXBrc2lnbmVyIHRvb2wgZm9yIHNpZ25pbmcuIERlZmF1bHRpbmcgdG8gamFyc2lnbmVyLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyIHx8IGVyci5zdGRvdXQgfHwgZXJyLm1lc3NhZ2V9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhd2FpdCB1bnNpZ25BcGsoYXBrKSkge1xuICAgICAgICBsb2cuZGVidWcoYCcke2Fwa30nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bnNpZ25lZGApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKGAnJHthcGt9JyBkb2VzIG5vdCBuZWVkIHRvIGJlIHVuc2lnbmVkYCk7XG4gICAgICB9XG4gICAgICBjb25zdCBqYXJzaWduZXIgPSBwYXRoLnJlc29sdmUoYXdhaXQgZ2V0SmF2YUhvbWUoKSwgJ2JpbicsXG4gICAgICAgIGBqYXJzaWduZXIke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWApO1xuICAgICAgY29uc3QgZnVsbENtZCA9IFtqYXJzaWduZXIsXG4gICAgICAgICctc2lnYWxnJywgJ01ENXdpdGhSU0EnLFxuICAgICAgICAnLWRpZ2VzdGFsZycsICdTSEExJyxcbiAgICAgICAgJy1rZXlzdG9yZScsIHRoaXMua2V5c3RvcmVQYXRoLFxuICAgICAgICAnLXN0b3JlcGFzcycsIHRoaXMua2V5c3RvcmVQYXNzd29yZCxcbiAgICAgICAgJy1rZXlwYXNzJywgdGhpcy5rZXlQYXNzd29yZCxcbiAgICAgICAgYXBrLCB0aGlzLmtleUFsaWFzXTtcbiAgICAgIGxvZy5kZWJ1ZyhgU3RhcnRpbmcgamFyc2lnbmVyOiAke3V0aWwucXVvdGUoZnVsbENtZCl9YCk7XG4gICAgICBhd2FpdCBleGVjKGZ1bGxDbWRbMF0sIGZ1bGxDbWQuc2xpY2UoMSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHNpZ24gd2l0aCBjdXN0b20gY2VydGlmaWNhdGUuIGAgK1xuICAgICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiAoUmUpc2lnbiB0aGUgZ2l2ZW4gYXBrIGZpbGUgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtIHdpdGggZWl0aGVyXG4gKiBjdXN0b20gb3IgZGVmYXVsdCBjZXJ0aWZpY2F0ZSBiYXNlZCBvbiBfdGhpcy51c2VLZXlzdG9yZV8gcHJvcGVydHkgdmFsdWVcbiAqIGFuZCBaaXAtYWxpZ25zIGl0IGFmdGVyIHNpZ25pbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcFBhdGggLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBsb2NhbCAuYXBrKHMpIGZpbGUuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgc2lnbmluZyBmYWlscy5cbiAqL1xuYXBrU2lnbmluZ01ldGhvZHMuc2lnbiA9IGFzeW5jIGZ1bmN0aW9uIHNpZ24gKGFwcFBhdGgpIHtcbiAgaWYgKGFwcFBhdGguZW5kc1dpdGgoQVBLU19FWFRFTlNJT04pKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSAnU2lnbmluZyBvZiAuYXBrcy1maWxlcyBpcyBub3Qgc3VwcG9ydGVkLiAnO1xuICAgIGlmICh0aGlzLnVzZUtleXN0b3JlKSB7XG4gICAgICBtZXNzYWdlICs9ICdDb25zaWRlciBtYW51YWwgYXBwbGljYXRpb24gYnVuZGxlIHNpZ25pbmcgd2l0aCB0aGUgY3VzdG9tIGtleXN0b3JlICcgK1xuICAgICAgICBgbGlrZSBpdCBpcyBkZXNjcmliZWQgYXQgJHtCVU5ETEVUT09MX1RVVE9SSUFMfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lc3NhZ2UgKz0gYENvbnNpZGVyIG1hbnVhbCBhcHBsaWNhdGlvbiBidW5kbGUgc2lnbmluZyB3aXRoIHRoZSBrZXkgYXQgJyR7REVGQVVMVF9QUklWQVRFX0tFWX0nIGAgK1xuICAgICAgICBgYW5kIHRoZSBjZXJ0aWZpY2F0ZSBhdCAnJHtERUZBVUxUX0NFUlRJRklDQVRFfScuIFJlYWQgJHtCVU5ETEVUT09MX1RVVE9SSUFMfSBmb3IgbW9yZSBkZXRhaWxzLmA7XG4gICAgfVxuICAgIGxvZy53YXJuKG1lc3NhZ2UpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGl0IGlzIG5lY2Vzc2FyeSB0byBhcHBseSB6aXBhbGlnbiBvbmx5IGJlZm9yZSBzaWduaW5nXG4gIC8vIGlmIGFwa3NpZ25lciBpcyB1c2VkXG4gIGF3YWl0IHRoaXMuemlwQWxpZ25BcGsoYXBwUGF0aCk7XG5cbiAgaWYgKHRoaXMudXNlS2V5c3RvcmUpIHtcbiAgICBhd2FpdCB0aGlzLnNpZ25XaXRoQ3VzdG9tQ2VydChhcHBQYXRoKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCB0aGlzLnNpZ25XaXRoRGVmYXVsdENlcnQoYXBwUGF0aCk7XG4gIH1cbn07XG5cbi8qKlxuICogUGVyZm9ybSB6aXAtYWxpZ25pbmcgdG8gdGhlIGdpdmVuIGxvY2FsIGFwayBmaWxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGsgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBsb2NhbCBhcGsgZmlsZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBhcGsgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGFsaWduZWRcbiAqIG9yIGZhbHNlIGlmIHRoZSBhcGsgaGFzIGJlZW4gYWxyZWFkeSBhbGlnbmVkLlxuICogQHRocm93cyB7RXJyb3J9IElmIHppcC1hbGlnbiBmYWlscy5cbiAqL1xuYXBrU2lnbmluZ01ldGhvZHMuemlwQWxpZ25BcGsgPSBhc3luYyBmdW5jdGlvbiB6aXBBbGlnbkFwayAoYXBrKSB7XG4gIGF3YWl0IHRoaXMuaW5pdFppcEFsaWduKCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLnppcGFsaWduLCBbJy1jJywgJzQnLCBhcGtdKTtcbiAgICBsb2cuZGVidWcoYCR7YXBrfScgaXMgYWxyZWFkeSB6aXAtYWxpZ25lZC4gRG9pbmcgbm90aGluZ2ApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZy5kZWJ1ZyhgJyR7YXBrfScgaXMgbm90IHppcC1hbGlnbmVkLiBBbGlnbmluZ2ApO1xuICB9XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMuYWNjZXNzKGFwaywgX2ZzLldfT0spO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHthcGt9JyBpcyBub3Qgd3JpdGVhYmxlLiBgICtcbiAgICAgIGBQbGVhc2UgZ3JhbnQgd3JpdGUgcGVybWlzc2lvbnMgdG8gdGhpcyBmaWxlIG9yIHRvIGl0cyBwYXJlbnQgZm9sZGVyICcke3BhdGguZGlybmFtZShhcGspfScgYCArXG4gICAgICBgZm9yIHRoZSBBcHBpdW0gcHJvY2Vzcywgc28gaXQgY2FuIHppcC1hbGlnbiB0aGUgZmlsZWApO1xuICB9XG4gIGNvbnN0IGFsaWduZWRBcGsgPSBhd2FpdCB0ZW1wRGlyLnBhdGgoe3ByZWZpeDogJ2FwcGl1bScsIHN1ZmZpeDogJy50bXAnfSk7XG4gIGF3YWl0IG1rZGlycChwYXRoLmRpcm5hbWUoYWxpZ25lZEFwaykpO1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWModGhpcy5iaW5hcmllcy56aXBhbGlnbiwgWyctZicsICc0JywgYXBrLCBhbGlnbmVkQXBrXSk7XG4gICAgYXdhaXQgZnMubXYoYWxpZ25lZEFwaywgYXBrLCB7IG1rZGlycDogdHJ1ZSB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChhd2FpdCBmcy5leGlzdHMoYWxpZ25lZEFwaykpIHtcbiAgICAgIGF3YWl0IGZzLnVubGluayhhbGlnbmVkQXBrKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGB6aXBBbGlnbkFwayBmYWlsZWQuIE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDZXJ0Q2hlY2tPcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcXVpcmVEZWZhdWx0Q2VydCBbdHJ1ZV0gV2hldGhlciB0byByZXF1aXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIEFQS1xuICogaXMgc2lnbmVkIHdpdGggdGhlIGRlZmF1bHQgQXBwaXVtIGNlcnRpZmljYXRlIG9yIGFueSB2YWxpZCBjZXJ0aWZpY2F0ZS4gVGhpcyBvcHRpb25cbiAqIG9ubHkgaGFzIGVmZmVjdCBpZiBgdXNlS2V5c3RvcmVgIHByb3BlcnR5IGlzIHVuc2V0LlxuICovXG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGFwcCBpcyBhbHJlYWR5IHNpZ25lZCB3aXRoIHRoZSBkZWZhdWx0IEFwcGl1bSBjZXJ0aWZpY2F0ZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIGxvY2FsIC5hcGsocykgZmlsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwZ2sgLSBUaGUgbmFtZSBvZiBhcHBsaWNhdGlvbiBwYWNrYWdlLlxuICogQHBhcmFtIHtDZXJ0Q2hlY2tPcHRpb25zfSBvcHRzIC0gQ2VydGlmaWNhdGUgY2hlY2tpbmcgb3B0aW9uc1xuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBnaXZlbiBhcHBsaWNhdGlvbiBpcyBhbHJlYWR5IHNpZ25lZC5cbiAqL1xuYXBrU2lnbmluZ01ldGhvZHMuY2hlY2tBcGtDZXJ0ID0gYXN5bmMgZnVuY3Rpb24gY2hlY2tBcGtDZXJ0IChhcHBQYXRoLCBwa2csIG9wdHMgPSB7fSkge1xuICBsb2cuZGVidWcoYENoZWNraW5nIGFwcCBjZXJ0IGZvciAke2FwcFBhdGh9YCk7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGFwcFBhdGgpKSB7XG4gICAgbG9nLmRlYnVnKGAnJHthcHBQYXRofScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocGF0aC5leHRuYW1lKGFwcFBhdGgpID09PSBBUEtTX0VYVEVOU0lPTikge1xuICAgIGFwcFBhdGggPSBhd2FpdCB0aGlzLmV4dHJhY3RCYXNlQXBrKGFwcFBhdGgpO1xuICB9XG5cbiAgY29uc3QgaGFzaE1hdGNoZXMgPSAoYXBrc2lnbmVyT3V0cHV0LCBleHBlY3RlZEhhc2hlcykgPT4ge1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBfLnRvUGFpcnMoZXhwZWN0ZWRIYXNoZXMpKSB7XG4gICAgICBpZiAobmV3IFJlZ0V4cChgZGlnZXN0OlxcXFxzKyR7dmFsdWV9XFxcXGJgLCAnaScpLnRlc3QoYXBrc2lnbmVyT3V0cHV0KSkge1xuICAgICAgICBsb2cuZGVidWcoYCR7bmFtZX0gaGFzaCBkaWQgbWF0Y2ggZm9yICcke3BhdGguYmFzZW5hbWUoYXBwUGF0aCl9J2ApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIGNvbnN0IHtcbiAgICByZXF1aXJlRGVmYXVsdENlcnQgPSB0cnVlLFxuICB9ID0gb3B0cztcblxuICBjb25zdCBhcHBIYXNoID0gYXdhaXQgZnMuaGFzaChhcHBQYXRoKTtcbiAgaWYgKFNJR05FRF9BUFBTX0NBQ0hFLmhhcyhhcHBIYXNoKSkge1xuICAgIGxvZy5kZWJ1ZyhgVXNpbmcgdGhlIHByZXZpb3VzbHkgY2FjaGVkIHNpZ25hdHVyZSBlbnRyeSBmb3IgJyR7cGF0aC5iYXNlbmFtZShhcHBQYXRoKX0nYCk7XG4gICAgY29uc3Qge2tleXN0b3JlUGF0aCwgb3V0cHV0LCBleHBlY3RlZH0gPSBTSUdORURfQVBQU19DQUNIRS5nZXQoYXBwSGFzaCk7XG4gICAgaWYgKHRoaXMudXNlS2V5c3RvcmUgJiYgdGhpcy5rZXlzdG9yZVBhdGggPT09IGtleXN0b3JlUGF0aCB8fCAhdGhpcy51c2VLZXlzdG9yZSkge1xuICAgICAgcmV0dXJuICghdGhpcy51c2VLZXlzdG9yZSAmJiAhcmVxdWlyZURlZmF1bHRDZXJ0KSB8fCBoYXNoTWF0Y2hlcyhvdXRwdXQsIGV4cGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBleHBlY3RlZCA9IHRoaXMudXNlS2V5c3RvcmVcbiAgICA/IGF3YWl0IHRoaXMuZ2V0S2V5c3RvcmVIYXNoKGFwcFBhdGgsIHBrZylcbiAgICA6IERFRkFVTFRfQ0VSVF9IQVNIO1xuICB0cnkge1xuICAgIGF3YWl0IGdldEFwa3NpZ25lckZvck9zKHRoaXMpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUFwa3NpZ25lcihbJ3ZlcmlmeScsICctLXByaW50LWNlcnRzJywgYXBwUGF0aF0pO1xuICAgIGNvbnN0IGhhc01hdGNoID0gaGFzaE1hdGNoZXMob3V0cHV0LCBleHBlY3RlZCk7XG4gICAgaWYgKGhhc01hdGNoKSB7XG4gICAgICBsb2cuaW5mbyhgJyR7YXBwUGF0aH0nIGlzIHNpZ25lZCB3aXRoIHRoZSBgICtcbiAgICAgICAgYCR7dGhpcy51c2VLZXlzdG9yZSA/ICdrZXlzdG9yZScgOiAnZGVmYXVsdCd9IGNlcnRpZmljYXRlYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZy5pbmZvKGAnJHthcHBQYXRofScgaXMgc2lnbmVkIHdpdGggYSBgICtcbiAgICAgICAgYG5vbi0ke3RoaXMudXNlS2V5c3RvcmUgPyAna2V5c3RvcmUnIDogJ2RlZmF1bHQnfSBjZXJ0aWZpY2F0ZWApO1xuICAgIH1cbiAgICBjb25zdCBpc1NpZ25lZCA9ICghdGhpcy51c2VLZXlzdG9yZSAmJiAhcmVxdWlyZURlZmF1bHRDZXJ0KSB8fCBoYXNNYXRjaDtcbiAgICBpZiAoaXNTaWduZWQpIHtcbiAgICAgIFNJR05FRF9BUFBTX0NBQ0hFLnNldChhcHBIYXNoLCB7XG4gICAgICAgIG91dHB1dCxcbiAgICAgICAgZXhwZWN0ZWQsXG4gICAgICAgIGtleXN0b3JlUGF0aDogdGhpcy5rZXlzdG9yZVBhdGgsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzU2lnbmVkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBubyBzaWduYXR1cmVcbiAgICBpZiAoXy5pbmNsdWRlcyhlcnIuc3RkZXJyLCBBUEtTSUdORVJfVkVSSUZZX0ZBSUwpKSB7XG4gICAgICBsb2cuaW5mbyhgJyR7YXBwUGF0aH0nIGlzIG5vdCBzaWduZWRgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZXJyTXNnID0gZXJyLnN0ZGVyciB8fCBlcnIuc3Rkb3V0IHx8IGVyci5tZXNzYWdlO1xuICAgIGlmIChfLmluY2x1ZGVzKGVyck1zZywgSkFWQV9QUk9QU19JTklUX0VSUk9SKSkge1xuICAgICAgLy8gVGhpcyBlcnJvciBwb3BzIHVwIHJhbmRvbWx5IGFuZCB3ZSBhcmUgbm90IHF1aXRlIHN1cmUgd2h5LlxuICAgICAgLy8gTXkgZ3Vlc3MgLSBhIHJhY2UgY29uZGl0aW9uIGluIGphdmEgdm0gaW5pdGlhbGl6YXRpb24uXG4gICAgICAvLyBOZXZlcnRoZWxlc3MsIGxldHMgbWFrZSBBcHBpdW0gdG8gYmVsaWV2ZSB0aGUgZmlsZSBpcyBhbHJlYWR5IHNpZ25lZCxcbiAgICAgIC8vIGJlY2F1c2UgaXQgd291bGQgYmUgdHJ1ZSBmb3IgOTklIG9mIFVJQXV0b21hdG9yMi1iYXNlZFxuICAgICAgLy8gdGVzdHMsIHdoZXJlIHdlIHByZXNpZ24gc2VydmVyIGJpbmFyaWVzIHdoaWxlIHB1Ymxpc2hpbmcgdGhlaXIgTlBNIG1vZHVsZS5cbiAgICAgIC8vIElmIHRoZXNlIGFyZSBub3Qgc2lnbmVkLCBlLmcuIGluIGNhc2Ugb2YgRXNwcmVzc28sIHRoZW4gdGhlIG5leHQgc3RlcChzKVxuICAgICAgLy8gd291bGQgYW55d2F5IGZhaWwuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE0NzI0IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICBsb2cud2FybihlcnJNc2cpO1xuICAgICAgbG9nLndhcm4oYEFzc3VtaW5nICcke2FwcFBhdGh9JyBpcyBhbHJlYWR5IHNpZ25lZCBhbmQgY29udGludWluZyBhbnl3YXlgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB2ZXJpZnkgdGhlIHNpZ25hdHVyZSBvZiAnJHthcHBQYXRofScuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Vyck1zZ31gKTtcbiAgfVxufTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBLZXlzdG9yZUhhc2hcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gbWQ1IHRoZSBtZDUgaGFzaCB2YWx1ZSBvZiB0aGUga2V5c3RvcmVcbiAqIEBwcm9wZXJ0eSB7P3N0cmluZ30gc2hhMSB0aGUgc2hhMSBoYXNoIHZhbHVlIG9mIHRoZSBrZXlzdG9yZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzaGEyNTYgdGhlIHNoYTI1NiBoYXNoIHZhbHVlIG9mIHRoZSBrZXlzdG9yZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzaGE1MTIgdGhlIHNoYTUxMiBoYXNoIHZhbHVlIG9mIHRoZSBrZXlzdG9yZVxuICovXG5cbi8qKlxuICogUmV0cmlldmUgdGhlIHRoZSBoYXNoIG9mIHRoZSBnaXZlbiBrZXlzdG9yZS5cbiAqXG4gKiBAcmV0dXJuIHtLZXlzdG9yZUhhc2h9XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgZ2V0dGluZyBrZXlzdG9yZSBoYXNoIGZhaWxzLlxuICovXG5hcGtTaWduaW5nTWV0aG9kcy5nZXRLZXlzdG9yZUhhc2ggPSBhc3luYyBmdW5jdGlvbiBnZXRLZXlzdG9yZUhhc2ggKCkge1xuICBsb2cuZGVidWcoYEdldHRpbmcgaGFzaCBvZiB0aGUgJyR7dGhpcy5rZXlzdG9yZVBhdGh9JyBrZXlzdG9yZWApO1xuICBjb25zdCBrZXl0b29sID0gcGF0aC5yZXNvbHZlKGF3YWl0IGdldEphdmFIb21lKCksICdiaW4nLFxuICAgIGBrZXl0b29sJHtzeXN0ZW0uaXNXaW5kb3dzKCkgPyAnLmV4ZScgOiAnJ31gKTtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoa2V5dG9vbCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBrZXl0b29sIHV0aWxpdHkgY2Fubm90IGJlIGZvdW5kIGF0ICcke2tleXRvb2x9J2ApO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbXG4gICAgJy12JywgJy1saXN0JyxcbiAgICAnLWFsaWFzJywgdGhpcy5rZXlBbGlhcyxcbiAgICAnLWtleXN0b3JlJywgdGhpcy5rZXlzdG9yZVBhdGgsXG4gICAgJy1zdG9yZXBhc3MnLCB0aGlzLmtleXN0b3JlUGFzc3dvcmRcbiAgXTtcbiAgbG9nLmluZm8oYFJ1bm5pbmcgJyR7a2V5dG9vbH0nIHdpdGggYXJndW1lbnRzOiAke3V0aWwucXVvdGUoYXJncyl9YCk7XG4gIHRyeSB7XG4gICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBleGVjKGtleXRvb2wsIGFyZ3MpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgaGFzaE5hbWUgb2YgW1NIQTUxMiwgU0hBMjU2LCBTSEExLCBNRDVdKSB7XG4gICAgICBjb25zdCBoYXNoUmUgPSBuZXcgUmVnRXhwKGBeXFxcXHMqJHtoYXNoTmFtZX06XFxcXHMqKFthLWYwLTk6XSspYCwgJ21pJyk7XG4gICAgICBjb25zdCBtYXRjaCA9IGhhc2hSZS5leGVjKHN0ZG91dCk7XG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0W2hhc2hOYW1lXSA9IG1hdGNoWzFdLnJlcGxhY2UoLzovZywgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmIChfLmlzRW1wdHkocmVzdWx0KSkge1xuICAgICAgbG9nLmRlYnVnKHN0ZG91dCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwYXJzZSB0aGUgaGFzaCB2YWx1ZSBmcm9tIHRoZSBrZXl0b29sIG91dHB1dCcpO1xuICAgIH1cbiAgICBsb2cuZGVidWcoYEtleXN0b3JlIGhhc2g6ICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZ2V0IHRoZSBoYXNoIG9mICcke3RoaXMua2V5c3RvcmVQYXRofScga2V5c3RvcmUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgYXBrU2lnbmluZ01ldGhvZHM7XG4iXSwiZmlsZSI6ImxpYi90b29scy9hcGstc2lnbmluZy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
|
|
333
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi90b29scy9hcGstc2lnbmluZy5qcyJdLCJuYW1lcyI6WyJERUZBVUxUX1BSSVZBVEVfS0VZIiwicGF0aCIsInJlc29sdmUiLCJyb290RGlyIiwiREVGQVVMVF9DRVJUSUZJQ0FURSIsIkJVTkRMRVRPT0xfVFVUT1JJQUwiLCJBUEtTSUdORVJfVkVSSUZZX0ZBSUwiLCJTSEExIiwiU0hBMjU2IiwiU0hBNTEyIiwiTUQ1IiwiREVGQVVMVF9DRVJUX0hBU0giLCJKQVZBX1BST1BTX0lOSVRfRVJST1IiLCJTSUdORURfQVBQU19DQUNIRSIsIkxSVSIsIm1heCIsImFwa1NpZ25pbmdNZXRob2RzIiwiZXhlY3V0ZUFwa3NpZ25lciIsImFyZ3MiLCJhcGtTaWduZXJKYXIiLCJmdWxsQ21kIiwibG9nIiwiZGVidWciLCJ1dGlsIiwicXVvdGUiLCJzdGRvdXQiLCJzdGRlcnIiLCJzbGljZSIsImN3ZCIsImRpcm5hbWUiLCJ3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMiLCJzeXN0ZW0iLCJpc1dpbmRvd3MiLCJuYW1lIiwic3RyZWFtIiwiXyIsInRyaW0iLCJzcGxpdCIsImZpbHRlciIsImxpbmUiLCJpbmNsdWRlcyIsImpvaW4iLCJzaWduV2l0aERlZmF1bHRDZXJ0IiwiYXBrIiwiZnMiLCJleGlzdHMiLCJFcnJvciIsImUiLCJtZXNzYWdlIiwic2lnbldpdGhDdXN0b21DZXJ0Iiwia2V5c3RvcmVQYXRoIiwia2V5QWxpYXMiLCJrZXlzdG9yZVBhc3N3b3JkIiwia2V5UGFzc3dvcmQiLCJlcnIiLCJ3YXJuIiwiamFyc2lnbmVyIiwic2lnbiIsImFwcFBhdGgiLCJlbmRzV2l0aCIsIkFQS1NfRVhURU5TSU9OIiwidXNlS2V5c3RvcmUiLCJ6aXBBbGlnbkFwayIsImluaXRaaXBBbGlnbiIsImJpbmFyaWVzIiwiemlwYWxpZ24iLCJhY2Nlc3MiLCJfZnMiLCJXX09LIiwiYWxpZ25lZEFwayIsInRlbXBEaXIiLCJwcmVmaXgiLCJzdWZmaXgiLCJtdiIsIm1rZGlycCIsInVubGluayIsImNoZWNrQXBrQ2VydCIsInBrZyIsIm9wdHMiLCJleHRuYW1lIiwiZXh0cmFjdEJhc2VBcGsiLCJoYXNoTWF0Y2hlcyIsImFwa3NpZ25lck91dHB1dCIsImV4cGVjdGVkSGFzaGVzIiwidmFsdWUiLCJ0b1BhaXJzIiwiUmVnRXhwIiwidGVzdCIsImJhc2VuYW1lIiwicmVxdWlyZURlZmF1bHRDZXJ0IiwiYXBwSGFzaCIsImhhc2giLCJoYXMiLCJvdXRwdXQiLCJleHBlY3RlZCIsImdldCIsImdldEtleXN0b3JlSGFzaCIsImhhc01hdGNoIiwiaW5mbyIsImlzU2lnbmVkIiwic2V0IiwiZXJyTXNnIiwia2V5dG9vbCIsInJlc3VsdCIsImhhc2hOYW1lIiwiaGFzaFJlIiwibWF0Y2giLCJleGVjIiwicmVwbGFjZSIsInRvTG93ZXJDYXNlIiwiaXNFbXB0eSIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0EsTUFBTUEsbUJBQW1CLEdBQUdDLGNBQUtDLE9BQUwsQ0FBYUMsZ0JBQWIsRUFBc0IsTUFBdEIsRUFBOEIsYUFBOUIsQ0FBNUI7O0FBQ0EsTUFBTUMsbUJBQW1CLEdBQUdILGNBQUtDLE9BQUwsQ0FBYUMsZ0JBQWIsRUFBc0IsTUFBdEIsRUFBOEIsa0JBQTlCLENBQTVCOztBQUNBLE1BQU1FLG1CQUFtQixHQUFHLDhEQUE1QjtBQUNBLE1BQU1DLHFCQUFxQixHQUFHLGlCQUE5QjtBQUNBLE1BQU1DLElBQUksR0FBRyxNQUFiO0FBQ0EsTUFBTUMsTUFBTSxHQUFHLFFBQWY7QUFDQSxNQUFNQyxNQUFNLEdBQUcsUUFBZjtBQUNBLE1BQU1DLEdBQUcsR0FBRyxLQUFaO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUc7QUFDeEIsR0FBQ0gsTUFBRCxHQUFVO0FBRGMsQ0FBMUI7QUFHQSxNQUFNSSxxQkFBcUIsR0FBRyxrQ0FBOUI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxJ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Z0JBQU9DLFNBQVA7QUFBNUIsS0FBcEIsQ0FBdkI7QUFDQSxVQUFNdUUsTUFBTSxHQUFHLEVBQWY7O0FBQ0EsU0FBSyxNQUFNQyxRQUFYLElBQXVCLENBQUMvRixNQUFELEVBQVNELE1BQVQsRUFBaUJELElBQWpCLEVBQXVCRyxHQUF2QixDQUF2QixFQUFvRDtBQUNsRCxZQUFNK0YsTUFBTSxHQUFHLElBQUluQixNQUFKLENBQVksUUFBT2tCLFFBQVMsbUJBQTVCLEVBQWdELElBQWhELENBQWY7QUFDQSxZQUFNRSxLQUFLLEdBQUdELE1BQU0sQ0FBQ0UsSUFBUCxDQUFZbEYsTUFBWixDQUFkOztBQUNBLFVBQUksQ0FBQ2lGLEtBQUwsRUFBWTtBQUNWO0FBQ0Q7O0FBQ0RILE1BQUFBLE1BQU0sQ0FBQ0MsUUFBRCxDQUFOLEdBQW1CRSxLQUFLLENBQUMsQ0FBRCxDQUFMLENBQVNFLE9BQVQsQ0FBaUIsSUFBakIsRUFBdUIsRUFBdkIsRUFBMkJDLFdBQTNCLEVBQW5CO0FBQ0Q7O0FBQ0QsUUFBSTFFLGdCQUFFMkUsT0FBRixDQUFVUCxNQUFWLENBQUosRUFBdUI7QUFDckJsRixzQkFBSUMsS0FBSixDQUFVRyxNQUFWOztBQUNBLFlBQU0sSUFBSXFCLEtBQUosQ0FBVSxxREFBVixDQUFOO0FBQ0Q7O0FBQ0R6QixvQkFBSUMsS0FBSixDQUFXLGtCQUFpQnlGLElBQUksQ0FBQ0MsU0FBTCxDQUFlVCxNQUFmLENBQXVCLEVBQW5EOztBQUNBLFdBQU9BLE1BQVA7QUFDRCxHQWpCRCxDQWlCRSxPQUFPeEQsQ0FBUCxFQUFVO0FBQ1YsVUFBTSxJQUFJRCxLQUFKLENBQVcsMkJBQTBCLEtBQUtJLFlBQWEsY0FBN0MsR0FDYixtQkFBa0JILENBQUMsQ0FBQ3JCLE1BQUYsSUFBWXFCLENBQUMsQ0FBQ0MsT0FBUSxFQURyQyxDQUFOO0FBRUQ7QUFDRixDQW5DRDs7ZUFxQ2VoQyxpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgX2ZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IGV4ZWMgfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyB0ZW1wRGlyLCBzeXN0ZW0sIG1rZGlycCwgZnMsIHV0aWwgfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IExSVSBmcm9tICdscnUtY2FjaGUnO1xuaW1wb3J0IHtcbiAgZ2V0SmF2YUZvck9zLCBnZXRBcGtzaWduZXJGb3JPcywgZ2V0SmF2YUhvbWUsXG4gIHJvb3REaXIsIEFQS1NfRVhURU5TSU9OLCB1bnNpZ25BcGssXG59IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuXG5jb25zdCBERUZBVUxUX1BSSVZBVEVfS0VZID0gcGF0aC5yZXNvbHZlKHJvb3REaXIsICdrZXlzJywgJ3Rlc3RrZXkucGs4Jyk7XG5jb25zdCBERUZBVUxUX0NFUlRJRklDQVRFID0gcGF0aC5yZXNvbHZlKHJvb3REaXIsICdrZXlzJywgJ3Rlc3RrZXkueDUwOS5wZW0nKTtcbmNvbnN0IEJVTkRMRVRPT0xfVFVUT1JJQUwgPSAnaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS9idW5kbGV0b29sJztcbmNvbnN0IEFQS1NJR05FUl9WRVJJRllfRkFJTCA9ICdET0VTIE5PVCBWRVJJRlknO1xuY29uc3QgU0hBMSA9ICdzaGExJztcbmNvbnN0IFNIQTI1NiA9ICdzaGEyNTYnO1xuY29uc3QgU0hBNTEyID0gJ3NoYTUxMic7XG5jb25zdCBNRDUgPSAnbWQ1JztcbmNvbnN0IERFRkFVTFRfQ0VSVF9IQVNIID0ge1xuICBbU0hBMjU2XTogJ2E0MGRhODBhNTlkMTcwY2FhOTUwY2YxNWMxOGM0NTRkNDdhMzliMjY5ODlkOGI2NDBlY2Q3NDViYTcxYmY1ZGMnXG59O1xuY29uc3QgSkFWQV9QUk9QU19JTklUX0VSUk9SID0gJ2phdmEubGFuZy5FcnJvcjogUHJvcGVydGllcyBpbml0JztcbmNvbnN0IFNJR05FRF9BUFBTX0NBQ0hFID0gbmV3IExSVSh7XG4gIG1heDogMzAsXG59KTtcblxuXG5jb25zdCBhcGtTaWduaW5nTWV0aG9kcyA9IHt9O1xuXG4vKipcbiAqIEV4ZWN1dGUgYXBrc2lnbmVyIHV0aWxpdHkgd2l0aCBnaXZlbiBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHs/QXJyYXk8U3RyaW5nPn0gYXJncyAtIFRoZSBsaXN0IG9mIHRvb2wgYXJndW1lbnRzLlxuICogQHJldHVybiB7c3RyaW5nfSAtIENvbW1hbmQgc3Rkb3V0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYXBrc2lnbmVyIGJpbmFyeSBpcyBub3QgcHJlc2VudCBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW1cbiAqICAgICAgICAgICAgICAgICBvciB0aGUgcmV0dXJuIGNvZGUgaXMgbm90IGVxdWFsIHRvIHplcm8uXG4gKi9cbmFwa1NpZ25pbmdNZXRob2RzLmV4ZWN1dGVBcGtzaWduZXIgPSBhc3luYyBmdW5jdGlvbiBleGVjdXRlQXBrc2lnbmVyIChhcmdzID0gW10pIHtcbiAgY29uc3QgYXBrU2lnbmVySmFyID0gYXdhaXQgZ2V0QXBrc2lnbmVyRm9yT3ModGhpcyk7XG4gIGNvbnN0IGZ1bGxDbWQgPSBbXG4gICAgYXdhaXQgZ2V0SmF2YUZvck9zKCksICctWG14MTAyNE0nLCAnLVhzczFtJyxcbiAgICAnLWphcicsIGFwa1NpZ25lckphcixcbiAgICAuLi5hcmdzXG4gIF07XG4gIGxvZy5kZWJ1ZyhgU3RhcnRpbmcgYXBrc2lnbmVyOiAke3V0aWwucXVvdGUoZnVsbENtZCl9YCk7XG4gIC8vIEl0IGlzIG5lY2Vzc2FyeSB0byBzcGVjaWZ5IENXRCBleHBsaWNpdGx5OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0vaXNzdWVzLzE0NzI0I2lzc3VlY29tbWVudC03Mzc0NDY3MTVcbiAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IGF3YWl0IGV4ZWMoZnVsbENtZFswXSwgZnVsbENtZC5zbGljZSgxKSwge1xuICAgIGN3ZDogcGF0aC5kaXJuYW1lKGFwa1NpZ25lckphciksIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogc3lzdGVtLmlzV2luZG93cygpXG4gIH0pO1xuICBmb3IgKGxldCBbbmFtZSwgc3RyZWFtXSBvZiBbWydzdGRvdXQnLCBzdGRvdXRdLCBbJ3N0ZGVycicsIHN0ZGVycl1dKSB7XG4gICAgaWYgKCFfLnRyaW0oc3RyZWFtKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgPT09ICdzdGRvdXQnKSB7XG4gICAgICAvLyBNYWtlIHRoZSBvdXRwdXQgbGVzcyB0YWxrYXRpdmVcbiAgICAgIHN0cmVhbSA9IHN0cmVhbS5zcGxpdCgnXFxuJylcbiAgICAgICAgLmZpbHRlcigobGluZSkgPT4gIWxpbmUuaW5jbHVkZXMoJ1dBUk5JTkc6JykpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBhcGtzaWduZXIgJHtuYW1lfTogJHtzdHJlYW19YCk7XG4gIH1cbiAgcmV0dXJuIHN0ZG91dDtcbn07XG5cbi8qKlxuICogKFJlKXNpZ24gdGhlIGdpdmVuIGFwayBmaWxlIG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSB3aXRoIHRoZSBkZWZhdWx0IGNlcnRpZmljYXRlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcGsgLSBUaGUgZnVsbCBwYXRoIHRvIHRoZSBsb2NhbCBhcGsgZmlsZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBzaWduaW5nIGZhaWxzLlxuICovXG5hcGtTaWduaW5nTWV0aG9kcy5zaWduV2l0aERlZmF1bHRDZXJ0ID0gYXN5bmMgZnVuY3Rpb24gc2lnbldpdGhEZWZhdWx0Q2VydCAoYXBrKSB7XG4gIGxvZy5kZWJ1ZyhgU2lnbmluZyAnJHthcGt9JyB3aXRoIGRlZmF1bHQgY2VydGApO1xuICBpZiAoIShhd2FpdCBmcy5leGlzdHMoYXBrKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YXBrfSBmaWxlIGRvZXNuJ3QgZXhpc3QuYCk7XG4gIH1cblxuICBjb25zdCBhcmdzID0gW1xuICAgICdzaWduJyxcbiAgICAnLS1rZXknLCBERUZBVUxUX1BSSVZBVEVfS0VZLFxuICAgICctLWNlcnQnLCBERUZBVUxUX0NFUlRJRklDQVRFLFxuICAgIGFwayxcbiAgXTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVBcGtzaWduZXIoYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBzaWduICcke2Fwa30nIHdpdGggdGhlIGRlZmF1bHQgY2VydGlmaWNhdGUuIGAgK1xuICAgICAgYE9yaWdpbmFsIGVycm9yOiAke2Uuc3RkZXJyIHx8IGUuc3Rkb3V0IHx8IGUubWVzc2FnZX1gKTtcbiAgfVxufTtcblxuLyoqXG4gKiAoUmUpc2lnbiB0aGUgZ2l2ZW4gYXBrIGZpbGUgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtIHdpdGggYSBjdXN0b20gY2VydGlmaWNhdGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwayAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIGxvY2FsIGFwayBmaWxlLlxuICogQHRocm93cyB7RXJyb3J9IElmIHNpZ25pbmcgZmFpbHMuXG4gKi9cbmFwa1NpZ25pbmdNZXRob2RzLnNpZ25XaXRoQ3VzdG9tQ2VydCA9IGFzeW5jIGZ1bmN0aW9uIHNpZ25XaXRoQ3VzdG9tQ2VydCAoYXBrKSB7XG4gIGxvZy5kZWJ1ZyhgU2lnbmluZyAnJHthcGt9JyB3aXRoIGN1c3RvbSBjZXJ0YCk7XG4gIGlmICghKGF3YWl0IGZzLmV4aXN0cyh0aGlzLmtleXN0b3JlUGF0aCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBLZXlzdG9yZTogJHt0aGlzLmtleXN0b3JlUGF0aH0gZG9lc24ndCBleGlzdC5gKTtcbiAgfVxuICBpZiAoIShhd2FpdCBmcy5leGlzdHMoYXBrKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCcke2Fwa30nIGRvZXNuJ3QgZXhpc3QuYCk7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZUFwa3NpZ25lcihbJ3NpZ24nLFxuICAgICAgJy0ta3MnLCB0aGlzLmtleXN0b3JlUGF0aCxcbiAgICAgICctLWtzLWtleS1hbGlhcycsIHRoaXMua2V5QWxpYXMsXG4gICAgICAnLS1rcy1wYXNzJywgYHBhc3M6JHt0aGlzLmtleXN0b3JlUGFzc3dvcmR9YCxcbiAgICAgICctLWtleS1wYXNzJywgYHBhc3M6JHt0aGlzLmtleVBhc3N3b3JkfWAsXG4gICAgICBhcGtdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nLndhcm4oYENhbm5vdCB1c2UgYXBrc2lnbmVyIHRvb2wgZm9yIHNpZ25pbmcuIERlZmF1bHRpbmcgdG8gamFyc2lnbmVyLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlcnIuc3RkZXJyIHx8IGVyci5zdGRvdXQgfHwgZXJyLm1lc3NhZ2V9YCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhd2FpdCB1bnNpZ25BcGsoYXBrKSkge1xuICAgICAgICBsb2cuZGVidWcoYCcke2Fwa30nIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bnNpZ25lZGApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nLmRlYnVnKGAnJHthcGt9JyBkb2VzIG5vdCBuZWVkIHRvIGJlIHVuc2lnbmVkYCk7XG4gICAgICB9XG4gICAgICBjb25zdCBqYXJzaWduZXIgPSBwYXRoLnJlc29sdmUoYXdhaXQgZ2V0SmF2YUhvbWUoKSwgJ2JpbicsXG4gICAgICAgIGBqYXJzaWduZXIke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWApO1xuICAgICAgY29uc3QgZnVsbENtZCA9IFtqYXJzaWduZXIsXG4gICAgICAgICctc2lnYWxnJywgJ01ENXdpdGhSU0EnLFxuICAgICAgICAnLWRpZ2VzdGFsZycsICdTSEExJyxcbiAgICAgICAgJy1rZXlzdG9yZScsIHRoaXMua2V5c3RvcmVQYXRoLFxuICAgICAgICAnLXN0b3JlcGFzcycsIHRoaXMua2V5c3RvcmVQYXNzd29yZCxcbiAgICAgICAgJy1rZXlwYXNzJywgdGhpcy5rZXlQYXNzd29yZCxcbiAgICAgICAgYXBrLCB0aGlzLmtleUFsaWFzXTtcbiAgICAgIGxvZy5kZWJ1ZyhgU3RhcnRpbmcgamFyc2lnbmVyOiAke3V0aWwucXVvdGUoZnVsbENtZCl9YCk7XG4gICAgICBhd2FpdCBleGVjKGZ1bGxDbWRbMF0sIGZ1bGxDbWQuc2xpY2UoMSksIHsgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBzeXN0ZW0uaXNXaW5kb3dzKCkgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3Qgc2lnbiB3aXRoIGN1c3RvbSBjZXJ0aWZpY2F0ZS4gYCArXG4gICAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIChSZSlzaWduIHRoZSBnaXZlbiBhcGsgZmlsZSBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gd2l0aCBlaXRoZXJcbiAqIGN1c3RvbSBvciBkZWZhdWx0IGNlcnRpZmljYXRlIGJhc2VkIG9uIF90aGlzLnVzZUtleXN0b3JlXyBwcm9wZXJ0eSB2YWx1ZVxuICogYW5kIFppcC1hbGlnbnMgaXQgYWZ0ZXIgc2lnbmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwUGF0aCAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIGxvY2FsIC5hcGsocykgZmlsZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBzaWduaW5nIGZhaWxzLlxuICovXG5hcGtTaWduaW5nTWV0aG9kcy5zaWduID0gYXN5bmMgZnVuY3Rpb24gc2lnbiAoYXBwUGF0aCkge1xuICBpZiAoYXBwUGF0aC5lbmRzV2l0aChBUEtTX0VYVEVOU0lPTikpIHtcbiAgICBsZXQgbWVzc2FnZSA9ICdTaWduaW5nIG9mIC5hcGtzLWZpbGVzIGlzIG5vdCBzdXBwb3J0ZWQuICc7XG4gICAgaWYgKHRoaXMudXNlS2V5c3RvcmUpIHtcbiAgICAgIG1lc3NhZ2UgKz0gJ0NvbnNpZGVyIG1hbnVhbCBhcHBsaWNhdGlvbiBidW5kbGUgc2lnbmluZyB3aXRoIHRoZSBjdXN0b20ga2V5c3RvcmUgJyArXG4gICAgICAgIGBsaWtlIGl0IGlzIGRlc2NyaWJlZCBhdCAke0JVTkRMRVRPT0xfVFVUT1JJQUx9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSArPSBgQ29uc2lkZXIgbWFudWFsIGFwcGxpY2F0aW9uIGJ1bmRsZSBzaWduaW5nIHdpdGggdGhlIGtleSBhdCAnJHtERUZBVUxUX1BSSVZBVEVfS0VZfScgYCArXG4gICAgICAgIGBhbmQgdGhlIGNlcnRpZmljYXRlIGF0ICcke0RFRkFVTFRfQ0VSVElGSUNBVEV9Jy4gUmVhZCAke0JVTkRMRVRPT0xfVFVUT1JJQUx9IGZvciBtb3JlIGRldGFpbHMuYDtcbiAgICB9XG4gICAgbG9nLndhcm4obWVzc2FnZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gaXQgaXMgbmVjZXNzYXJ5IHRvIGFwcGx5IHppcGFsaWduIG9ubHkgYmVmb3JlIHNpZ25pbmdcbiAgLy8gaWYgYXBrc2lnbmVyIGlzIHVzZWRcbiAgYXdhaXQgdGhpcy56aXBBbGlnbkFwayhhcHBQYXRoKTtcblxuICBpZiAodGhpcy51c2VLZXlzdG9yZSkge1xuICAgIGF3YWl0IHRoaXMuc2lnbldpdGhDdXN0b21DZXJ0KGFwcFBhdGgpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IHRoaXMuc2lnbldpdGhEZWZhdWx0Q2VydChhcHBQYXRoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBQZXJmb3JtIHppcC1hbGlnbmluZyB0byB0aGUgZ2l2ZW4gbG9jYWwgYXBrIGZpbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFwayAtIFRoZSBmdWxsIHBhdGggdG8gdGhlIGxvY2FsIGFwayBmaWxlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGFwayBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgYWxpZ25lZFxuICogb3IgZmFsc2UgaWYgdGhlIGFwayBoYXMgYmVlbiBhbHJlYWR5IGFsaWduZWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgemlwLWFsaWduIGZhaWxzLlxuICovXG5hcGtTaWduaW5nTWV0aG9kcy56aXBBbGlnbkFwayA9IGFzeW5jIGZ1bmN0aW9uIHppcEFsaWduQXBrIChhcGspIHtcbiAgYXdhaXQgdGhpcy5pbml0WmlwQWxpZ24oKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjKHRoaXMuYmluYXJpZXMuemlwYWxpZ24sIFsnLWMnLCAnNCcsIGFwa10pO1xuICAgIGxvZy5kZWJ1ZyhgJHthcGt9JyBpcyBhbHJlYWR5IHppcC1hbGlnbmVkLiBEb2luZyBub3RoaW5nYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nLmRlYnVnKGAnJHthcGt9JyBpcyBub3QgemlwLWFsaWduZWQuIEFsaWduaW5nYCk7XG4gIH1cbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5hY2Nlc3MoYXBrLCBfZnMuV19PSyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBmaWxlIGF0ICcke2Fwa30nIGlzIG5vdCB3cml0ZWFibGUuIGAgK1xuICAgICAgYFBsZWFzZSBncmFudCB3cml0ZSBwZXJtaXNzaW9ucyB0byB0aGlzIGZpbGUgb3IgdG8gaXRzIHBhcmVudCBmb2xkZXIgJyR7cGF0aC5kaXJuYW1lKGFwayl9JyBgICtcbiAgICAgIGBmb3IgdGhlIEFwcGl1bSBwcm9jZXNzLCBzbyBpdCBjYW4gemlwLWFsaWduIHRoZSBmaWxlYCk7XG4gIH1cbiAgY29uc3QgYWxpZ25lZEFwayA9IGF3YWl0IHRlbXBEaXIucGF0aCh7cHJlZml4OiAnYXBwaXVtJywgc3VmZml4OiAnLnRtcCd9KTtcbiAgYXdhaXQgbWtkaXJwKHBhdGguZGlybmFtZShhbGlnbmVkQXBrKSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlYyh0aGlzLmJpbmFyaWVzLnppcGFsaWduLCBbJy1mJywgJzQnLCBhcGssIGFsaWduZWRBcGtdKTtcbiAgICBhd2FpdCBmcy5tdihhbGlnbmVkQXBrLCBhcGssIHsgbWtkaXJwOiB0cnVlIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGF3YWl0IGZzLmV4aXN0cyhhbGlnbmVkQXBrKSkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKGFsaWduZWRBcGspO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYHppcEFsaWduQXBrIGZhaWxlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZS5zdGRlcnIgfHwgZS5tZXNzYWdlfWApO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENlcnRDaGVja09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVxdWlyZURlZmF1bHRDZXJ0IFt0cnVlXSBXaGV0aGVyIHRvIHJlcXVpcmUgdGhhdCB0aGUgZGVzdGluYXRpb24gQVBLXG4gKiBpcyBzaWduZWQgd2l0aCB0aGUgZGVmYXVsdCBBcHBpdW0gY2VydGlmaWNhdGUgb3IgYW55IHZhbGlkIGNlcnRpZmljYXRlLiBUaGlzIG9wdGlvblxuICogb25seSBoYXMgZWZmZWN0IGlmIGB1c2VLZXlzdG9yZWAgcHJvcGVydHkgaXMgdW5zZXQuXG4gKi9cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgYXBwIGlzIGFscmVhZHkgc2lnbmVkIHdpdGggdGhlIGRlZmF1bHQgQXBwaXVtIGNlcnRpZmljYXRlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBQYXRoIC0gVGhlIGZ1bGwgcGF0aCB0byB0aGUgbG9jYWwgLmFwayhzKSBmaWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IHBnayAtIFRoZSBuYW1lIG9mIGFwcGxpY2F0aW9uIHBhY2thZ2UuXG4gKiBAcGFyYW0ge0NlcnRDaGVja09wdGlvbnN9IG9wdHMgLSBDZXJ0aWZpY2F0ZSBjaGVja2luZyBvcHRpb25zXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGdpdmVuIGFwcGxpY2F0aW9uIGlzIGFscmVhZHkgc2lnbmVkLlxuICovXG5hcGtTaWduaW5nTWV0aG9kcy5jaGVja0Fwa0NlcnQgPSBhc3luYyBmdW5jdGlvbiBjaGVja0Fwa0NlcnQgKGFwcFBhdGgsIHBrZywgb3B0cyA9IHt9KSB7XG4gIGxvZy5kZWJ1ZyhgQ2hlY2tpbmcgYXBwIGNlcnQgZm9yICR7YXBwUGF0aH1gKTtcbiAgaWYgKCFhd2FpdCBmcy5leGlzdHMoYXBwUGF0aCkpIHtcbiAgICBsb2cuZGVidWcoYCcke2FwcFBhdGh9JyBkb2VzIG5vdCBleGlzdGApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwYXRoLmV4dG5hbWUoYXBwUGF0aCkgPT09IEFQS1NfRVhURU5TSU9OKSB7XG4gICAgYXBwUGF0aCA9IGF3YWl0IHRoaXMuZXh0cmFjdEJhc2VBcGsoYXBwUGF0aCk7XG4gIH1cblxuICBjb25zdCBoYXNoTWF0Y2hlcyA9IChhcGtzaWduZXJPdXRwdXQsIGV4cGVjdGVkSGFzaGVzKSA9PiB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIF8udG9QYWlycyhleHBlY3RlZEhhc2hlcykpIHtcbiAgICAgIGlmIChuZXcgUmVnRXhwKGBkaWdlc3Q6XFxcXHMrJHt2YWx1ZX1cXFxcYmAsICdpJykudGVzdChhcGtzaWduZXJPdXRwdXQpKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgJHtuYW1lfSBoYXNoIGRpZCBtYXRjaCBmb3IgJyR7cGF0aC5iYXNlbmFtZShhcHBQYXRoKX0nYCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgY29uc3Qge1xuICAgIHJlcXVpcmVEZWZhdWx0Q2VydCA9IHRydWUsXG4gIH0gPSBvcHRzO1xuXG4gIGNvbnN0IGFwcEhhc2ggPSBhd2FpdCBmcy5oYXNoKGFwcFBhdGgpO1xuICBpZiAoU0lHTkVEX0FQUFNfQ0FDSEUuaGFzKGFwcEhhc2gpKSB7XG4gICAgbG9nLmRlYnVnKGBVc2luZyB0aGUgcHJldmlvdXNseSBjYWNoZWQgc2lnbmF0dXJlIGVudHJ5IGZvciAnJHtwYXRoLmJhc2VuYW1lKGFwcFBhdGgpfSdgKTtcbiAgICBjb25zdCB7a2V5c3RvcmVQYXRoLCBvdXRwdXQsIGV4cGVjdGVkfSA9IFNJR05FRF9BUFBTX0NBQ0hFLmdldChhcHBIYXNoKTtcbiAgICBpZiAodGhpcy51c2VLZXlzdG9yZSAmJiB0aGlzLmtleXN0b3JlUGF0aCA9PT0ga2V5c3RvcmVQYXRoIHx8ICF0aGlzLnVzZUtleXN0b3JlKSB7XG4gICAgICByZXR1cm4gKCF0aGlzLnVzZUtleXN0b3JlICYmICFyZXF1aXJlRGVmYXVsdENlcnQpIHx8IGhhc2hNYXRjaGVzKG91dHB1dCwgZXhwZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV4cGVjdGVkID0gdGhpcy51c2VLZXlzdG9yZVxuICAgID8gYXdhaXQgdGhpcy5nZXRLZXlzdG9yZUhhc2goYXBwUGF0aCwgcGtnKVxuICAgIDogREVGQVVMVF9DRVJUX0hBU0g7XG4gIHRyeSB7XG4gICAgYXdhaXQgZ2V0QXBrc2lnbmVyRm9yT3ModGhpcyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdGhpcy5leGVjdXRlQXBrc2lnbmVyKFsndmVyaWZ5JywgJy0tcHJpbnQtY2VydHMnLCBhcHBQYXRoXSk7XG4gICAgY29uc3QgaGFzTWF0Y2ggPSBoYXNoTWF0Y2hlcyhvdXRwdXQsIGV4cGVjdGVkKTtcbiAgICBpZiAoaGFzTWF0Y2gpIHtcbiAgICAgIGxvZy5pbmZvKGAnJHthcHBQYXRofScgaXMgc2lnbmVkIHdpdGggdGhlIGAgK1xuICAgICAgICBgJHt0aGlzLnVzZUtleXN0b3JlID8gJ2tleXN0b3JlJyA6ICdkZWZhdWx0J30gY2VydGlmaWNhdGVgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmluZm8oYCcke2FwcFBhdGh9JyBpcyBzaWduZWQgd2l0aCBhIGAgK1xuICAgICAgICBgbm9uLSR7dGhpcy51c2VLZXlzdG9yZSA/ICdrZXlzdG9yZScgOiAnZGVmYXVsdCd9IGNlcnRpZmljYXRlYCk7XG4gICAgfVxuICAgIGNvbnN0IGlzU2lnbmVkID0gKCF0aGlzLnVzZUtleXN0b3JlICYmICFyZXF1aXJlRGVmYXVsdENlcnQpIHx8IGhhc01hdGNoO1xuICAgIGlmIChpc1NpZ25lZCkge1xuICAgICAgU0lHTkVEX0FQUFNfQ0FDSEUuc2V0KGFwcEhhc2gsIHtcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICBleHBlY3RlZCxcbiAgICAgICAga2V5c3RvcmVQYXRoOiB0aGlzLmtleXN0b3JlUGF0aCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaXNTaWduZWQ7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIG5vIHNpZ25hdHVyZVxuICAgIGlmIChfLmluY2x1ZGVzKGVyci5zdGRlcnIsIEFQS1NJR05FUl9WRVJJRllfRkFJTCkpIHtcbiAgICAgIGxvZy5pbmZvKGAnJHthcHBQYXRofScgaXMgbm90IHNpZ25lZGApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBlcnJNc2cgPSBlcnIuc3RkZXJyIHx8IGVyci5zdGRvdXQgfHwgZXJyLm1lc3NhZ2U7XG4gICAgaWYgKF8uaW5jbHVkZXMoZXJyTXNnLCBKQVZBX1BST1BTX0lOSVRfRVJST1IpKSB7XG4gICAgICAvLyBUaGlzIGVycm9yIHBvcHMgdXAgcmFuZG9tbHkgYW5kIHdlIGFyZSBub3QgcXVpdGUgc3VyZSB3aHkuXG4gICAgICAvLyBNeSBndWVzcyAtIGEgcmFjZSBjb25kaXRpb24gaW4gamF2YSB2bSBpbml0aWFsaXphdGlvbi5cbiAgICAgIC8vIE5ldmVydGhlbGVzcywgbGV0cyBtYWtlIEFwcGl1bSB0byBiZWxpZXZlIHRoZSBmaWxlIGlzIGFscmVhZHkgc2lnbmVkLFxuICAgICAgLy8gYmVjYXVzZSBpdCB3b3VsZCBiZSB0cnVlIGZvciA5OSUgb2YgVUlBdXRvbWF0b3IyLWJhc2VkXG4gICAgICAvLyB0ZXN0cywgd2hlcmUgd2UgcHJlc2lnbiBzZXJ2ZXIgYmluYXJpZXMgd2hpbGUgcHVibGlzaGluZyB0aGVpciBOUE0gbW9kdWxlLlxuICAgICAgLy8gSWYgdGhlc2UgYXJlIG5vdCBzaWduZWQsIGUuZy4gaW4gY2FzZSBvZiBFc3ByZXNzbywgdGhlbiB0aGUgbmV4dCBzdGVwKHMpXG4gICAgICAvLyB3b3VsZCBhbnl3YXkgZmFpbC5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS9pc3N1ZXMvMTQ3MjQgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIGxvZy53YXJuKGVyck1zZyk7XG4gICAgICBsb2cud2FybihgQXNzdW1pbmcgJyR7YXBwUGF0aH0nIGlzIGFscmVhZHkgc2lnbmVkIGFuZCBjb250aW51aW5nIGFueXdheWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHZlcmlmeSB0aGUgc2lnbmF0dXJlIG9mICcke2FwcFBhdGh9Jy4gYCArXG4gICAgICBgT3JpZ2luYWwgZXJyb3I6ICR7ZXJyTXNnfWApO1xuICB9XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEtleXN0b3JlSGFzaFxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBtZDUgdGhlIG1kNSBoYXNoIHZhbHVlIG9mIHRoZSBrZXlzdG9yZVxuICogQHByb3BlcnR5IHs/c3RyaW5nfSBzaGExIHRoZSBzaGExIGhhc2ggdmFsdWUgb2YgdGhlIGtleXN0b3JlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHNoYTI1NiB0aGUgc2hhMjU2IGhhc2ggdmFsdWUgb2YgdGhlIGtleXN0b3JlXG4gKiBAcHJvcGVydHkgez9zdHJpbmd9IHNoYTUxMiB0aGUgc2hhNTEyIGhhc2ggdmFsdWUgb2YgdGhlIGtleXN0b3JlXG4gKi9cblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgdGhlIGhhc2ggb2YgdGhlIGdpdmVuIGtleXN0b3JlLlxuICpcbiAqIEByZXR1cm4ge0tleXN0b3JlSGFzaH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBnZXR0aW5nIGtleXN0b3JlIGhhc2ggZmFpbHMuXG4gKi9cbmFwa1NpZ25pbmdNZXRob2RzLmdldEtleXN0b3JlSGFzaCA9IGFzeW5jIGZ1bmN0aW9uIGdldEtleXN0b3JlSGFzaCAoKSB7XG4gIGxvZy5kZWJ1ZyhgR2V0dGluZyBoYXNoIG9mIHRoZSAnJHt0aGlzLmtleXN0b3JlUGF0aH0nIGtleXN0b3JlYCk7XG4gIGNvbnN0IGtleXRvb2wgPSBwYXRoLnJlc29sdmUoYXdhaXQgZ2V0SmF2YUhvbWUoKSwgJ2JpbicsXG4gICAgYGtleXRvb2wke3N5c3RlbS5pc1dpbmRvd3MoKSA/ICcuZXhlJyA6ICcnfWApO1xuICBpZiAoIWF3YWl0IGZzLmV4aXN0cyhrZXl0b29sKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGtleXRvb2wgdXRpbGl0eSBjYW5ub3QgYmUgZm91bmQgYXQgJyR7a2V5dG9vbH0nYCk7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtcbiAgICAnLXYnLCAnLWxpc3QnLFxuICAgICctYWxpYXMnLCB0aGlzLmtleUFsaWFzLFxuICAgICcta2V5c3RvcmUnLCB0aGlzLmtleXN0b3JlUGF0aCxcbiAgICAnLXN0b3JlcGFzcycsIHRoaXMua2V5c3RvcmVQYXNzd29yZFxuICBdO1xuICBsb2cuaW5mbyhgUnVubmluZyAnJHtrZXl0b29sfScgd2l0aCBhcmd1bWVudHM6ICR7dXRpbC5xdW90ZShhcmdzKX1gKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB7c3Rkb3V0fSA9IGF3YWl0IGV4ZWMoa2V5dG9vbCwgYXJncywgeyB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IHN5c3RlbS5pc1dpbmRvd3MoKSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGhhc2hOYW1lIG9mIFtTSEE1MTIsIFNIQTI1NiwgU0hBMSwgTUQ1XSkge1xuICAgICAgY29uc3QgaGFzaFJlID0gbmV3IFJlZ0V4cChgXlxcXFxzKiR7aGFzaE5hbWV9OlxcXFxzKihbYS1mMC05Ol0rKWAsICdtaScpO1xuICAgICAgY29uc3QgbWF0Y2ggPSBoYXNoUmUuZXhlYyhzdGRvdXQpO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdFtoYXNoTmFtZV0gPSBtYXRjaFsxXS5yZXBsYWNlKC86L2csICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoXy5pc0VtcHR5KHJlc3VsdCkpIHtcbiAgICAgIGxvZy5kZWJ1ZyhzdGRvdXQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFyc2UgdGhlIGhhc2ggdmFsdWUgZnJvbSB0aGUga2V5dG9vbCBvdXRwdXQnKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKGBLZXlzdG9yZSBoYXNoOiAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCB0aGUgaGFzaCBvZiAnJHt0aGlzLmtleXN0b3JlUGF0aH0nIGtleXN0b3JlLiBgICtcbiAgICAgIGBPcmlnaW5hbCBlcnJvcjogJHtlLnN0ZGVyciB8fCBlLm1lc3NhZ2V9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFwa1NpZ25pbmdNZXRob2RzO1xuIl0sImZpbGUiOiJsaWIvdG9vbHMvYXBrLXNpZ25pbmcuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
|