@bitgo-beta/sdk-core 8.2.1-beta.2049 → 8.2.1-beta.2050
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/dist/src/account-lib/baseCoin/ed25519KeyPair.js +3 -3
- package/dist/src/account-lib/index.d.ts +0 -1
- package/dist/src/account-lib/index.d.ts.map +1 -1
- package/dist/src/account-lib/index.js +1 -2
- package/dist/src/bitgo/keychain/keychains.js +4 -4
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +3 -21
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -1
- package/dist/src/bitgo/safe/derivableEd25519Pub.js +6 -145
- package/dist/src/bitgo/safe/index.d.ts +1 -1
- package/dist/src/bitgo/safe/index.d.ts.map +1 -1
- package/dist/src/bitgo/safe/index.js +2 -2
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -1
- package/dist/src/bitgo/safe/safe.js +12 -33
- package/dist/src/bitgo/safe/safes.js +4 -4
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +0 -4
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +3 -5
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaVrfMPCv2.js +1 -6
- package/dist/src/bitgo/wallet/safeKeychain.js +3 -3
- package/dist/test/unit/bitgo/safe/safeDerivation.js +5 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -9
- package/LICENSE +0 -191
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +0 -52
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +0 -1
- package/dist/src/account-lib/util/ed25519KeyDeriver.js +0 -91
- package/dist/src/bitgo/safe/safeDerivation.d.ts +0 -43
- package/dist/src/bitgo/safe/safeDerivation.d.ts.map +0 -1
- package/dist/src/bitgo/safe/safeDerivation.js +0 -151
|
@@ -36,7 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.Ed25519KeyPair = void 0;
|
|
37
37
|
const nacl = __importStar(require("tweetnacl"));
|
|
38
38
|
const crypto_1 = require("../util/crypto");
|
|
39
|
-
const
|
|
39
|
+
const sdk_lib_safes_1 = require("@bitgo-beta/sdk-lib-safes");
|
|
40
40
|
const iface_1 = require("./iface");
|
|
41
41
|
const DEFAULT_SEED_SIZE_BYTES = 32;
|
|
42
42
|
class Ed25519KeyPair {
|
|
@@ -148,10 +148,10 @@ class Ed25519KeyPair {
|
|
|
148
148
|
if (!this.keyPair?.prv) {
|
|
149
149
|
throw new Error('need private key to derive hardened keypair');
|
|
150
150
|
}
|
|
151
|
-
const seed =
|
|
151
|
+
const seed = sdk_lib_safes_1.Ed25519KeyDeriver.derivePath(path, this.keyPair.prv).key;
|
|
152
152
|
const derivedKeyPair = nacl.sign.keyPair.fromSeed(seed);
|
|
153
153
|
return this.getKeyPair(derivedKeyPair);
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
exports.Ed25519KeyPair = Ed25519KeyPair;
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOUtleVBhaXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWNjb3VudC1saWIvYmFzZUNvaW4vZWQyNTUxOUtleVBhaXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLDJDQU13QjtBQUN4QixpRUFBOEQ7QUFHOUQsbUNBQXlGO0FBRXpGLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBRW5DLE1BQXNCLGNBQWM7SUFJbEM7Ozs7T0FJRztJQUNILFlBQXNCLE1BQXVCO1FBQzNDLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN2RCxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLElBQUksSUFBQSxjQUFNLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7YUFBTSxJQUFJLElBQUEsb0JBQVksRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLElBQUksSUFBQSxtQkFBVyxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLHVC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QUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQzthQUFNLENBQUM7WUFDTixlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFBLHFCQUFZLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxjQUFjLENBQUMsSUFBWTtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLHFDQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUEvSEQsd0NBK0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbmFjbCBmcm9tICd0d2VldG5hY2wnO1xuaW1wb3J0IHtcbiAgaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXksXG4gIGlzVmFsaWRFZDI1NTE5U2VjcmV0S2V5LFxuICBpc1ZhbGlkRWQyNTUxOVNlZWQsXG4gIHRvSGV4LFxuICB0b1VpbnQ4QXJyYXksXG59IGZyb20gJy4uL3V0aWwvY3J5cHRvJztcbmltcG9ydCB7IEVkMjU1MTlLZXlEZXJpdmVyIH0gZnJvbSAnLi4vdXRpbC9lZDI1NTE5S2V5RGVyaXZlcic7XG5pbXBvcnQgeyBCYXNlS2V5UGFpciB9IGZyb20gJy4vYmFzZUtleVBhaXInO1xuaW1wb3J0IHsgQWRkcmVzc0Zvcm1hdCwgRG90QWRkcmVzc0Zvcm1hdCB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBpc1ByaXZhdGVLZXksIGlzUHVibGljS2V5LCBpc1NlZWQsIERlZmF1bHRLZXlzLCBLZXlQYWlyT3B0aW9ucyB9IGZyb20gJy4vaWZhY2UnO1xuXG5jb25zdCBERUZBVUxUX1NFRURfU0laRV9CWVRFUyA9IDMyO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWQyNTUxOUtleVBhaXIgaW1wbGVtZW50cyBCYXNlS2V5UGFpciB7XG4gIHByb3RlY3RlZCBrZXlQYWlyOiBEZWZhdWx0S2V5cztcbiAgcHJvdGVjdGVkIHNvdXJjZT86IEtleVBhaXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuIEJ5IGRlZmF1bHQsIGNyZWF0ZXMgYSBrZXkgcGFpciB3aXRoIGEgcmFuZG9tIG1hc3RlciBzZWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0tleVBhaXJPcHRpb25zfSBzb3VyY2UgRWl0aGVyIGEgbWFzdGVyIHNlZWQsIGEgcHJpdmF0ZSBrZXksIG9yIGEgcHVibGljIGtleVxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHNvdXJjZT86IEtleVBhaXJPcHRpb25zKSB7XG4gICAgbGV0IG5hY2xLZXlQYWlyO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICBjb25zdCBzZWVkID0gbmFjbC5yYW5kb21CeXRlcyhERUZBVUxUX1NFRURfU0laRV9CWVRFUyk7XG4gICAgICBuYWNsS2V5UGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHNlZWQpO1xuICAgICAgdGhpcy5zZXRLZXlQYWlyKG5hY2xLZXlQYWlyKTtcbiAgICB9IGVsc2UgaWYgKGlzU2VlZChzb3VyY2UpKSB7XG4gICAgICBuYWNsS2V5UGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHNvdXJjZS5zZWVkKTtcbiAgICAgIHRoaXMuc2V0S2V5UGFpcihuYWNsS2V5UGFpcik7XG4gICAgfSBlbHNlIGlmIChpc1ByaXZhdGVLZXkoc291cmNlKSkge1xuICAgICAgdGhpcy5yZWNvcmRLZXlzRnJvbVByaXZhdGVLZXkoc291cmNlLnBydik7XG4gICAgfSBlbHNlIGlmIChpc1B1YmxpY0tleShzb3VyY2UpKSB7XG4gICAgICB0aGlzLnJlY29yZEtleXNGcm9tUHVibGljS2V5KHNvdXJjZS5wdWIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0S2V5UGFpcihuYWNsS2V5UGFpcjogbmFjbC5TaWduS2V5UGFpcik6IERlZmF1bHRLZXlzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJ2OiB0b0hleChuYWNsS2V5UGFpci5zZWNyZXRLZXkuc2xpY2UoMCwgMzIpKSxcbiAgICAgIHB1YjogdG9IZXgobmFjbEtleVBhaXIucHVibGljS2V5KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRLZXlQYWlyKG5hY2xLZXlQYWlyOiBuYWNsLlNpZ25LZXlQYWlyKTogdm9pZCB7XG4gICAgdGhpcy5rZXlQYWlyID0gdGhpcy5nZXRLZXlQYWlyKG5hY2xLZXlQYWlyKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICByZWNvcmRLZXlzRnJvbVByaXZhdGVLZXkocHJ2OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNWYWxpZEVkMjU1MTlTZWVkKHBydikpIHtcbiAgICAgIGNvbnN0IGRlY29kZWRQcnYgPSB0b1VpbnQ4QXJyYXkocHJ2KTtcbiAgICAgIGNvbnN0IG5hY2xLZXlQYWlyID0gbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQoZGVjb2RlZFBydik7XG4gICAgICB0aGlzLnNldEtleVBhaXIobmFjbEtleVBhaXIpO1xuICAgIH0gZWxzZSBpZiAoaXNWYWxpZEVkMjU1MTlTZWNyZXRLZXkocHJ2KSkge1xuICAgICAgY29uc3QgZGVjb2RlZFBydiA9IHRvVWludDhBcnJheShwcnYpO1xuICAgICAgY29uc3QgbmFjbEtleVBhaXIgPSBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VjcmV0S2V5KGRlY29kZWRQcnYpO1xuICAgICAgdGhpcy5zZXRLZXlQYWlyKG5hY2xLZXlQYWlyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rZXlQYWlyID0gdGhpcy5yZWNvcmRLZXlzRnJvbVByaXZhdGVLZXlJblByb3RvY29sRm9ybWF0KHBydik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHJlY29yZEtleXNGcm9tUHVibGljS2V5KHB1Yjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGlzVmFsaWRFZDI1NTE5UHVibGljS2V5KHB1YikpIHtcbiAgICAgIHRoaXMua2V5UGFpciA9IHsgcHViIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua2V5UGFpciA9IHRoaXMucmVjb3JkS2V5c0Zyb21QdWJsaWNLZXlJblByb3RvY29sRm9ybWF0KHB1Yik7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgcmVjb3JkS2V5c0Zyb21Qcml2YXRlS2V5SW5Qcm90b2NvbEZvcm1hdChwcnY6IHN0cmluZyk6IERlZmF1bHRLZXlzO1xuXG4gIGFic3RyYWN0IHJlY29yZEtleXNGcm9tUHVibGljS2V5SW5Qcm90b2NvbEZvcm1hdChwdWI6IHN0cmluZyk6IERlZmF1bHRLZXlzO1xuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhYnN0cmFjdCBnZXRBZGRyZXNzKGZvcm1hdD86IEFkZHJlc3NGb3JtYXQgfCBEb3RBZGRyZXNzRm9ybWF0KTogc3RyaW5nO1xuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhYnN0cmFjdCBnZXRLZXlzKCk6IGFueTtcblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgc2lnbmF0dXJlIGZvciBhbiBhcmJpdHJhcnkgc3RyaW5nIHdpdGggdGhlIGN1cnJlbnQgcHJpdmF0ZSBrZXkgdXNpbmcgdGhlIGVkMjU1MTkgcHVibGljLWtleSBzaWduYXR1cmVcbiAgICogc3lzdGVtLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSB0byBwcm9kdWNlIGEgc2lnbmF0dXJlIGZvclxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gVGhlIHNpZ25hdHVyZSBwcm9kdWNlZCBmb3IgdGhlIG1lc3NhZ2VcbiAgICogQHRocm93cyBpZiB0aGVyZSBpcyBubyBwcml2YXRlIGtleVxuICAgKi9cbiAgc2lnbk1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IHRvVWludDhBcnJheShCdWZmZXIuZnJvbShtZXNzYWdlKS50b1N0cmluZygnaGV4JykpO1xuICAgIGNvbnN0IHBydiA9IHRoaXMua2V5UGFpcj8ucHJ2O1xuICAgIGlmICghcHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hY2wuc2lnbi5kZXRhY2hlZChtZXNzYWdlVG9TaWduLCBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZCh0b1VpbnQ4QXJyYXkocHJ2KSkuc2VjcmV0S2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBhIG1lc3NhZ2Ugc2lnbmF0dXJlIHVzaW5nIHRoZSBjdXJyZW50IHB1YmxpYyBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIHNpZ25lZFxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHNpZ25hdHVyZSB0byB2ZXJpZnlcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG1lc3NhZ2Ugd2FzIHNpZ25lZCB3aXRoIHRoZSBjdXJyZW50IGtleSBwYWlyXG4gICAqL1xuICB2ZXJpZnlTaWduYXR1cmUobWVzc2FnZTogVWludDhBcnJheSB8IHN0cmluZywgc2lnbmF0dXJlOiBVaW50OEFycmF5KTogYm9vbGVhbiB7XG4gICAgbGV0IG1lc3NhZ2VUb1ZlcmlmeTtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBtZXNzYWdlVG9WZXJpZnkgPSB0b1VpbnQ4QXJyYXkoQnVmZmVyLmZyb20obWVzc2FnZSkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZVRvVmVyaWZ5ID0gbWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmtleVBhaXI/LnB1Yikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwdWJsaWNLZXkgPSB0b1VpbnQ4QXJyYXkodGhpcy5rZXlQYWlyLnB1Yik7XG4gICAgcmV0dXJuIG5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnkobWVzc2FnZVRvVmVyaWZ5LCBzaWduYXR1cmUsIHB1YmxpY0tleSk7XG4gIH1cblxuICAvKipcbiAgICogRGVyaXZlcyBhIGhhcmRlbmVkIGNoaWxkIGtleSBwYWlyIHVzaW5nIHRoaXMga2V5IHBhaXIncyBzZWNyZXQga2V5XG4gICAqIGFzIHRoZSBzZWVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBkZXJpdmF0aW9uIHBhdGhcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGRlcml2ZUhhcmRlbmVkKHBhdGg6IHN0cmluZyk6IERlZmF1bHRLZXlzIHtcbiAgICBpZiAoIXRoaXMua2V5UGFpcj8ucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25lZWQgcHJpdmF0ZSBrZXkgdG8gZGVyaXZlIGhhcmRlbmVkIGtleXBhaXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWVkID0gRWQyNTUxOUtleURlcml2ZXIuZGVyaXZlUGF0aChwYXRoLCB0aGlzLmtleVBhaXIucHJ2KS5rZXk7XG4gICAgY29uc3QgZGVyaXZlZEtleVBhaXIgPSBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChzZWVkKTtcblxuICAgIHJldHVybiB0aGlzLmdldEtleVBhaXIoZGVyaXZlZEtleVBhaXIpO1xuICB9XG59XG4iXX0=
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOUtleVBhaXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWNjb3VudC1saWIvYmFzZUNvaW4vZWQyNTUxOUtleVBhaXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLDJDQU13QjtBQUN4Qiw2REFBOEQ7QUFHOUQsbUNBQXlGO0FBRXpGLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBRW5DLE1BQXNCLGNBQWM7SUFJbEM7Ozs7T0FJRztJQUNILFlBQXNCLE1BQXVCO1FBQzNDLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN2RCxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLElBQUksSUFBQSxjQUFNLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQixXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7YUFBTSxJQUFJLElBQUEsb0JBQVksRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLElBQUksSUFBQSxtQkFBVyxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLHVC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QUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkUsQ0FBQzthQUFNLENBQUM7WUFDTixlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFBLHFCQUFZLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxjQUFjLENBQUMsSUFBWTtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLGlDQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUEvSEQsd0NBK0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbmFjbCBmcm9tICd0d2VldG5hY2wnO1xuaW1wb3J0IHtcbiAgaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXksXG4gIGlzVmFsaWRFZDI1NTE5U2VjcmV0S2V5LFxuICBpc1ZhbGlkRWQyNTUxOVNlZWQsXG4gIHRvSGV4LFxuICB0b1VpbnQ4QXJyYXksXG59IGZyb20gJy4uL3V0aWwvY3J5cHRvJztcbmltcG9ydCB7IEVkMjU1MTlLZXlEZXJpdmVyIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1zYWZlcyc7XG5pbXBvcnQgeyBCYXNlS2V5UGFpciB9IGZyb20gJy4vYmFzZUtleVBhaXInO1xuaW1wb3J0IHsgQWRkcmVzc0Zvcm1hdCwgRG90QWRkcmVzc0Zvcm1hdCB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBpc1ByaXZhdGVLZXksIGlzUHVibGljS2V5LCBpc1NlZWQsIERlZmF1bHRLZXlzLCBLZXlQYWlyT3B0aW9ucyB9IGZyb20gJy4vaWZhY2UnO1xuXG5jb25zdCBERUZBVUxUX1NFRURfU0laRV9CWVRFUyA9IDMyO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRWQyNTUxOUtleVBhaXIgaW1wbGVtZW50cyBCYXNlS2V5UGFpciB7XG4gIHByb3RlY3RlZCBrZXlQYWlyOiBEZWZhdWx0S2V5cztcbiAgcHJvdGVjdGVkIHNvdXJjZT86IEtleVBhaXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuIEJ5IGRlZmF1bHQsIGNyZWF0ZXMgYSBrZXkgcGFpciB3aXRoIGEgcmFuZG9tIG1hc3RlciBzZWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0tleVBhaXJPcHRpb25zfSBzb3VyY2UgRWl0aGVyIGEgbWFzdGVyIHNlZWQsIGEgcHJpdmF0ZSBrZXksIG9yIGEgcHVibGljIGtleVxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHNvdXJjZT86IEtleVBhaXJPcHRpb25zKSB7XG4gICAgbGV0IG5hY2xLZXlQYWlyO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICBjb25zdCBzZWVkID0gbmFjbC5yYW5kb21CeXRlcyhERUZBVUxUX1NFRURfU0laRV9CWVRFUyk7XG4gICAgICBuYWNsS2V5UGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHNlZWQpO1xuICAgICAgdGhpcy5zZXRLZXlQYWlyKG5hY2xLZXlQYWlyKTtcbiAgICB9IGVsc2UgaWYgKGlzU2VlZChzb3VyY2UpKSB7XG4gICAgICBuYWNsS2V5UGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHNvdXJjZS5zZWVkKTtcbiAgICAgIHRoaXMuc2V0S2V5UGFpcihuYWNsS2V5UGFpcik7XG4gICAgfSBlbHNlIGlmIChpc1ByaXZhdGVLZXkoc291cmNlKSkge1xuICAgICAgdGhpcy5yZWNvcmRLZXlzRnJvbVByaXZhdGVLZXkoc291cmNlLnBydik7XG4gICAgfSBlbHNlIGlmIChpc1B1YmxpY0tleShzb3VyY2UpKSB7XG4gICAgICB0aGlzLnJlY29yZEtleXNGcm9tUHVibGljS2V5KHNvdXJjZS5wdWIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0S2V5UGFpcihuYWNsS2V5UGFpcjogbmFjbC5TaWduS2V5UGFpcik6IERlZmF1bHRLZXlzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJ2OiB0b0hleChuYWNsS2V5UGFpci5zZWNyZXRLZXkuc2xpY2UoMCwgMzIpKSxcbiAgICAgIHB1YjogdG9IZXgobmFjbEtleVBhaXIucHVibGljS2V5KSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRLZXlQYWlyKG5hY2xLZXlQYWlyOiBuYWNsLlNpZ25LZXlQYWlyKTogdm9pZCB7XG4gICAgdGhpcy5rZXlQYWlyID0gdGhpcy5nZXRLZXlQYWlyKG5hY2xLZXlQYWlyKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICByZWNvcmRLZXlzRnJvbVByaXZhdGVLZXkocHJ2OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNWYWxpZEVkMjU1MTlTZWVkKHBydikpIHtcbiAgICAgIGNvbnN0IGRlY29kZWRQcnYgPSB0b1VpbnQ4QXJyYXkocHJ2KTtcbiAgICAgIGNvbnN0IG5hY2xLZXlQYWlyID0gbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQoZGVjb2RlZFBydik7XG4gICAgICB0aGlzLnNldEtleVBhaXIobmFjbEtleVBhaXIpO1xuICAgIH0gZWxzZSBpZiAoaXNWYWxpZEVkMjU1MTlTZWNyZXRLZXkocHJ2KSkge1xuICAgICAgY29uc3QgZGVjb2RlZFBydiA9IHRvVWludDhBcnJheShwcnYpO1xuICAgICAgY29uc3QgbmFjbEtleVBhaXIgPSBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VjcmV0S2V5KGRlY29kZWRQcnYpO1xuICAgICAgdGhpcy5zZXRLZXlQYWlyKG5hY2xLZXlQYWlyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rZXlQYWlyID0gdGhpcy5yZWNvcmRLZXlzRnJvbVByaXZhdGVLZXlJblByb3RvY29sRm9ybWF0KHBydik7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHJlY29yZEtleXNGcm9tUHVibGljS2V5KHB1Yjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGlzVmFsaWRFZDI1NTE5UHVibGljS2V5KHB1YikpIHtcbiAgICAgIHRoaXMua2V5UGFpciA9IHsgcHViIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua2V5UGFpciA9IHRoaXMucmVjb3JkS2V5c0Zyb21QdWJsaWNLZXlJblByb3RvY29sRm9ybWF0KHB1Yik7XG4gICAgfVxuICB9XG5cbiAgYWJzdHJhY3QgcmVjb3JkS2V5c0Zyb21Qcml2YXRlS2V5SW5Qcm90b2NvbEZvcm1hdChwcnY6IHN0cmluZyk6IERlZmF1bHRLZXlzO1xuXG4gIGFic3RyYWN0IHJlY29yZEtleXNGcm9tUHVibGljS2V5SW5Qcm90b2NvbEZvcm1hdChwdWI6IHN0cmluZyk6IERlZmF1bHRLZXlzO1xuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhYnN0cmFjdCBnZXRBZGRyZXNzKGZvcm1hdD86IEFkZHJlc3NGb3JtYXQgfCBEb3RBZGRyZXNzRm9ybWF0KTogc3RyaW5nO1xuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBhYnN0cmFjdCBnZXRLZXlzKCk6IGFueTtcblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgc2lnbmF0dXJlIGZvciBhbiBhcmJpdHJhcnkgc3RyaW5nIHdpdGggdGhlIGN1cnJlbnQgcHJpdmF0ZSBrZXkgdXNpbmcgdGhlIGVkMjU1MTkgcHVibGljLWtleSBzaWduYXR1cmVcbiAgICogc3lzdGVtLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSB0byBwcm9kdWNlIGEgc2lnbmF0dXJlIGZvclxuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gVGhlIHNpZ25hdHVyZSBwcm9kdWNlZCBmb3IgdGhlIG1lc3NhZ2VcbiAgICogQHRocm93cyBpZiB0aGVyZSBpcyBubyBwcml2YXRlIGtleVxuICAgKi9cbiAgc2lnbk1lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgY29uc3QgbWVzc2FnZVRvU2lnbiA9IHRvVWludDhBcnJheShCdWZmZXIuZnJvbShtZXNzYWdlKS50b1N0cmluZygnaGV4JykpO1xuICAgIGNvbnN0IHBydiA9IHRoaXMua2V5UGFpcj8ucHJ2O1xuICAgIGlmICghcHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hY2wuc2lnbi5kZXRhY2hlZChtZXNzYWdlVG9TaWduLCBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZCh0b1VpbnQ4QXJyYXkocHJ2KSkuc2VjcmV0S2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBhIG1lc3NhZ2Ugc2lnbmF0dXJlIHVzaW5nIHRoZSBjdXJyZW50IHB1YmxpYyBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIHNpZ25lZFxuICAgKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IHNpZ25hdHVyZSB0byB2ZXJpZnlcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG1lc3NhZ2Ugd2FzIHNpZ25lZCB3aXRoIHRoZSBjdXJyZW50IGtleSBwYWlyXG4gICAqL1xuICB2ZXJpZnlTaWduYXR1cmUobWVzc2FnZTogVWludDhBcnJheSB8IHN0cmluZywgc2lnbmF0dXJlOiBVaW50OEFycmF5KTogYm9vbGVhbiB7XG4gICAgbGV0IG1lc3NhZ2VUb1ZlcmlmeTtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBtZXNzYWdlVG9WZXJpZnkgPSB0b1VpbnQ4QXJyYXkoQnVmZmVyLmZyb20obWVzc2FnZSkudG9TdHJpbmcoJ2hleCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZVRvVmVyaWZ5ID0gbWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmtleVBhaXI/LnB1Yikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwdWJsaWNLZXkgPSB0b1VpbnQ4QXJyYXkodGhpcy5rZXlQYWlyLnB1Yik7XG4gICAgcmV0dXJuIG5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnkobWVzc2FnZVRvVmVyaWZ5LCBzaWduYXR1cmUsIHB1YmxpY0tleSk7XG4gIH1cblxuICAvKipcbiAgICogRGVyaXZlcyBhIGhhcmRlbmVkIGNoaWxkIGtleSBwYWlyIHVzaW5nIHRoaXMga2V5IHBhaXIncyBzZWNyZXQga2V5XG4gICAqIGFzIHRoZSBzZWVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBkZXJpdmF0aW9uIHBhdGhcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGRlcml2ZUhhcmRlbmVkKHBhdGg6IHN0cmluZyk6IERlZmF1bHRLZXlzIHtcbiAgICBpZiAoIXRoaXMua2V5UGFpcj8ucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25lZWQgcHJpdmF0ZSBrZXkgdG8gZGVyaXZlIGhhcmRlbmVkIGtleXBhaXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWVkID0gRWQyNTUxOUtleURlcml2ZXIuZGVyaXZlUGF0aChwYXRoLCB0aGlzLmtleVBhaXIucHJ2KS5rZXk7XG4gICAgY29uc3QgZGVyaXZlZEtleVBhaXIgPSBuYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZChzZWVkKTtcblxuICAgIHJldHVybiB0aGlzLmdldEtleVBhaXIoZGVyaXZlZEtleVBhaXIpO1xuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/account-lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAE3B,OAAO,KAAK,kBAAkB,MAAM,YAAY,CAAC;AACjD,cAAc,OAAO,CAAC;AACtB,cAAc,eAAe,CAAC;AAE9B,OAAO,KAAK,eAAe,MAAM,eAAe,CAAC;AACjD,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/account-lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAE3B,OAAO,KAAK,kBAAkB,MAAM,YAAY,CAAC;AACjD,cAAc,OAAO,CAAC;AACtB,cAAc,eAAe,CAAC;AAE9B,OAAO,KAAK,eAAe,MAAM,eAAe,CAAC;AACjD,cAAc,WAAW,CAAC"}
|
|
@@ -44,6 +44,5 @@ __exportStar(require("./mpc"), exports);
|
|
|
44
44
|
__exportStar(require("./util/crypto"), exports);
|
|
45
45
|
// Deprecated
|
|
46
46
|
exports.acountLibCrypto = __importStar(require("./util/crypto"));
|
|
47
|
-
__exportStar(require("./util/ed25519KeyDeriver"), exports);
|
|
48
47
|
__exportStar(require("./staking"), exports);
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWNjb3VudC1saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQTJCO0FBQzNCLGFBQWE7QUFDYixpRUFBaUQ7QUFDakQsd0NBQXNCO0FBQ3RCLGdEQUE4QjtBQUM5QixhQUFhO0FBQ2IsaUVBQWlEO0FBQ2pELDRDQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmFzZUNvaW4nO1xuLy8gRGVwcmVjYXRlZFxuZXhwb3J0ICogYXMgYWNjb3VudExpYkJhc2VDb2luIGZyb20gJy4vYmFzZUNvaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9tcGMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsL2NyeXB0byc7XG4vLyBEZXByZWNhdGVkXG5leHBvcnQgKiBhcyBhY291bnRMaWJDcnlwdG8gZnJvbSAnLi91dGlsL2NyeXB0byc7XG5leHBvcnQgKiBmcm9tICcuL3N0YWtpbmcnO1xuIl19
|
|
@@ -41,7 +41,7 @@ const assert_1 = __importDefault(require("assert"));
|
|
|
41
41
|
const _ = __importStar(require("lodash"));
|
|
42
42
|
const common = __importStar(require("../../common"));
|
|
43
43
|
const errors_1 = require("../errors");
|
|
44
|
-
const
|
|
44
|
+
const sdk_lib_safes_1 = require("@bitgo-beta/sdk-lib-safes");
|
|
45
45
|
const utils_1 = require("../utils");
|
|
46
46
|
const ovcJsonCodec_1 = require("./ovcJsonCodec");
|
|
47
47
|
class Keychains {
|
|
@@ -342,8 +342,8 @@ class Keychains {
|
|
|
342
342
|
// Stellar/Algorand/HBAR public key; coin-specific encoding happens after public soft
|
|
343
343
|
// derivation when the wallet child is minted.
|
|
344
344
|
const withKey = params;
|
|
345
|
-
if (params.safeId !== undefined && withKey.pub !== undefined && (0,
|
|
346
|
-
withKey.pub = (0,
|
|
345
|
+
if (params.safeId !== undefined && withKey.pub !== undefined && (0, sdk_lib_safes_1.isValidEd25519StrKeyPublicKey)(withKey.pub)) {
|
|
346
|
+
withKey.pub = (0, sdk_lib_safes_1.encodeDerivableEd25519Pub)((0, sdk_lib_safes_1.decodeEd25519StrKeyPublicKey)(withKey.pub), (0, sdk_lib_safes_1.generateEd25519ChainCode)());
|
|
347
347
|
}
|
|
348
348
|
const serverResponse = await this.add(params);
|
|
349
349
|
return _.extend({}, serverResponse, _.pick(params, ['prv', 'encryptedPrv', 'provider', 'source']));
|
|
@@ -629,4 +629,4 @@ class Keychains {
|
|
|
629
629
|
}
|
|
630
630
|
}
|
|
631
631
|
exports.Keychains = Keychains;
|
|
632
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2hhaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2tleWNoYWluL2tleWNoYWlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxvREFBNEI7QUFDNUIsMENBQTRCO0FBQzVCLHFEQUF1QztBQUd2QyxzQ0FBNEQ7QUFDNUQscUVBS3FDO0FBQ3JDLG9DQUF1RztBQW1CdkcsaURBQXVGO0FBR3ZGLE1BQWEsU0FBUztJQUlwQixZQUFZLEtBQWdCLEVBQUUsUUFBbUI7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQTBCO1FBQ2xDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDckIsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxD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LEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixNQUFNLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ2IsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQ3RDLEtBQUssRUFBRSxNQUFNO2dCQUNiLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjthQUM1QyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzNDLElBQUksQ0FBQztZQUNKLFlBQVk7WUFDWixHQUFHO1lBQ0gsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1NBQ3BCLENBQUM7YUFDRCxNQUFNLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQWtCO1FBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRjtBQS9vQkQsOEJBK29CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRzc1NldHRpbmdzIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IElCYXNlQ29pbiwgS2V5Y2hhaW5zVHJpcGxldCwgS2V5UGFpciB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBTYWZlTXBjQ2VyZW1vbnlVbnN1cHBvcnRlZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7XG4gIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG4gIGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIsXG4gIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSxcbiAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG59IGZyb20gJy4uL3NhZmUvZGVyaXZhYmxlRWQyNTUxOVB1Yic7XG5pbXBvcnQgeyBkZWNvZGVPckVsc2UsIEVDRFNBVXRpbHMsIEVERFNBVXRpbHMsIGdlbmVyYXRlUmFuZG9tUGFzc3dvcmQsIFJlcXVlc3RUcmFjZXIgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQge1xuICBBZGRLZXljaGFpbk9wdGlvbnMsXG4gIEFwaUtleVNoYXJlLFxuICBDaGFuZ2VkS2V5Y2hhaW5zLFxuICBDcmVhdGVCYWNrdXBPcHRpb25zLFxuICBDcmVhdGVCaXRHb09wdGlvbnMsXG4gIENyZWF0ZU1wY09wdGlvbnMsXG4gIEdldEtleWNoYWluT3B0aW9ucyxcbiAgR2V0S2V5c0ZvclNpZ25pbmdPcHRpb25zLFxuICBJS2V5Y2hhaW5zLFxuICBLZXljaGFpbixcbiAgTGlzdEtleWNoYWluT3B0aW9ucyxcbiAgTGlzdEtleWNoYWluc1Jlc3VsdCxcbiAgUmVjcmVhdGVNcGNPcHRpb25zLFxuICBSb3RhdGVLZXljaGFpbk9wdGlvbnMsXG4gIFVwZGF0ZVBhc3N3b3JkT3B0aW9ucyxcbiAgVXBkYXRlU2luZ2xlS2V5Y2hhaW5QYXNzd29yZE9wdGlvbnMsXG59IGZyb20gJy4vaUtleWNoYWlucyc7XG5pbXBvcnQgeyBCaXRHb0tleUZyb21PdmNTaGFyZXMsIEJpdEdvVG9PdmNKU09OLCBPdmNUb0JpdEdvSlNPTiB9IGZyb20gJy4vb3ZjSnNvbkNvZGVjJztcbmltcG9ydCB7IEVuY3J5cHRpb25WZXJzaW9uLCBJRW5jcnlwdGlvblNlc3Npb24gfSBmcm9tICcuLi8uLi9hcGknO1xuXG5leHBvcnQgY2xhc3MgS2V5Y2hhaW5zIGltcGxlbWVudHMgSUtleWNoYWlucyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYml0Z286IEJpdEdvQmFzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlQ29pbjogSUJhc2VDb2luO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGJhc2VDb2luOiBJQmFzZUNvaW4pIHtcbiAgICB0aGlzLmJpdGdvID0gYml0Z287XG4gICAgdGhpcy5iYXNlQ29pbiA9IGJhc2VDb2luO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGtleWNoYWluIGJ5IElEXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy5pZFxuICAgKiBAcGFyYW0gcGFyYW1zLnhwdWIgKG9wdGlvbmFsKVxuICAgKiBAcGFyYW0gcGFyYW1zLmV0aEFkZHJlc3MgKG9wdGlvbmFsKVxuICAgKiBAcGFyYW0gcGFyYW1zLnJlcUlkIChvcHRpb25hbClcbiAgICovXG4gIGFzeW5jIGdldChwYXJhbXM6IEdldEtleWNoYWluT3B0aW9ucyk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbXSwgWyd4cHViJywgJ2V0aEFkZHJlc3MnXSk7XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChwYXJhbXMuaWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIG11c3QgYmUgZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGlkID0gcGFyYW1zLmlkO1xuICAgIGlmIChwYXJhbXMucmVxSWQpIHtcbiAgICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihwYXJhbXMucmVxSWQpO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnby5nZXQodGhpcy5iYXNlQ29pbi51cmwoJy9rZXkvJyArIGVuY29kZVVSSUNvbXBvbmVudChpZCkpKS5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBsaXN0IHRoZSB1c2VycyBrZXljaGFpbnNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLmxpbWl0IC0gTWF4IG51bWJlciBvZiByZXN1bHRzIGluIGEgc2luZ2xlIGNhbGwuXG4gICAqIEBwYXJhbSBwYXJhbXMucHJldklkIC0gQ29udGludWUgaXRlcmF0aW5nIChwcm92aWRlZCBieSBuZXh0QmF0Y2hQcmV2SWQgaW4gdGhlIHByZXZpb3VzIGxpc3QpXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgbGlzdChwYXJhbXM6IExpc3RLZXljaGFpbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8TGlzdEtleWNoYWluc1Jlc3VsdD4ge1xuICAgIGNvbnN0IHF1ZXJ5T2JqZWN0OiBhbnkgPSB7fTtcblxuICAgIGlmICghXy5pc1VuZGVmaW5lZChwYXJhbXMubGltaXQpKSB7XG4gICAgICBpZiAoIV8uaXNOdW1iZXIocGFyYW1zLmxpbWl0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgbGltaXQgYXJndW1lbnQsIGV4cGVjdGluZyBudW1iZXInKTtcbiAgICAgIH1cbiAgICAgIHF1ZXJ5T2JqZWN0LmxpbWl0ID0gcGFyYW1zLmxpbWl0O1xuICAgIH1cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1zLnByZXZJZCkpIHtcbiAgICAgIGlmICghXy5pc1N0cmluZyhwYXJhbXMucHJldklkKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHJldklkIGFyZ3VtZW50LCBleHBlY3Rpbmcgc3RyaW5nJyk7XG4gICAgICB9XG4gICAgICBxdWVyeU9iamVjdC5wcmV2SWQgPSBwYXJhbXMucHJldklkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJpdGdvLmdldCh0aGlzLmJhc2VDb2luLnVybCgnL2tleScpKS5xdWVyeShxdWVyeU9iamVjdCkucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIHRoZSBkZWNyeXB0aW9uIHBhc3N3b3JkIGZvciBhbGwgcG9zc2libGUga2V5Y2hhaW5zIGFzc29jaWF0ZWQgd2l0aCBhIHVzZXIuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgdGhyb3VnaCBhbGwga2V5cyBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIsIGRlY3J5cHRzXG4gICAqIHRoZW0gd2l0aCB0aGUgb2xkIHBhc3N3b3JkIGFuZCByZS1lbmNyeXB0cyB0aGVtIHdpdGggdGhlIG5ldyBwYXNzd29yZC5cbiAgICpcbiAgICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSB1c2VyIGNoYW5nZXMgdGhlaXIgbG9naW4gcGFzc3dvcmQsIGFuZCBhcmUgZXhwZWN0aW5nXG4gICAqIHRoYXQgdGhlaXIgd2FsbGV0IHBhc3N3b3JkcyBhcmUgY2hhbmdlZCB0byBtYXRjaCB0aGUgbmV3IGxvZ2luIHBhc3N3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMub2xkUGFzc3dvcmQgLSBUaGUgb2xkIHBhc3N3b3JkIHVzZWQgZm9yIGVuY3J5cHRpbmcgdGhlIGtleVxuICAgKiBAcGFyYW0gcGFyYW1zLm5ld1Bhc3N3b3JkIC0gVGhlIG5ldyBwYXNzd29yZCB0byBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAgICogQHJldHVybnMgY2hhbmdlZEtleXMgT2JqZWN0IC0gZS5nLjpcbiAgICogIHtcbiAgICogICAgeHB1YjE6IGVuY3J5cHRlZFBydixcbiAgICogICAgLi4uXG4gICAqICB9XG4gICAqL1xuICBhc3luYyB1cGRhdGVQYXNzd29yZChwYXJhbXM6IFVwZGF0ZVBhc3N3b3JkT3B0aW9ucyk6IFByb21pc2U8Q2hhbmdlZEtleWNoYWlucz4ge1xuICAgIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIFsnb2xkUGFzc3dvcmQnLCAnbmV3UGFzc3dvcmQnXSwgW10pO1xuICAgIGNvbnN0IGNoYW5nZWRLZXlzOiBDaGFuZ2VkS2V5Y2hhaW5zID0ge307XG4gICAgbGV0IHByZXZJZDtcbiAgICBsZXQga2V5c0xlZnQgPSB0cnVlO1xuICAgIHdoaWxlIChrZXlzTGVmdCkge1xuICAgICAgY29uc3QgcmVzdWx0OiBMaXN0S2V5Y2hhaW5zUmVzdWx0ID0gYXdhaXQgdGhpcy5saXN0KHsgbGltaXQ6IDUwMCwgcHJldklkIH0pO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgcmVzdWx0LmtleXMpIHtcbiAgICAgICAgY29uc3Qgb2xkRW5jcnlwdGVkUHJ2ID0ga2V5LmVuY3J5cHRlZFBydjtcbiAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQob2xkRW5jcnlwdGVkUHJ2KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZEtleWNoYWluID0gYXdhaXQgdGhpcy51cGRhdGVTaW5nbGVLZXljaGFpblBhc3N3b3JkKHtcbiAgICAgICAgICAgIGtleWNoYWluOiBrZXksXG4gICAgICAgICAgICBvbGRQYXNzd29yZDogcGFyYW1zLm9sZFBhc3N3b3JkLFxuICAgICAgICAgICAgbmV3UGFzc3dvcmQ6IHBhcmFtcy5uZXdQYXNzd29yZCxcbiAgICAgICAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgICAgICBlbmNyeXB0aW9uU2Vzc2lvbjogcGFyYW1zLmVuY3J5cHRpb25TZXNzaW9uLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh1cGRhdGVkS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2KSB7XG4gICAgICAgICAgICAvLyBCb3RoIFRTUyBhbmQgbXVsdGktdXNlci1vZmMga2V5cyBoYXZlIG11bHRpcGxlIHB1YmxpYyBrZXlzIGluIHRoZWlyIGtleSBkb2N1bWVudCBhbmQgdGh1cyBuZWVkIHRvIHVzZSBvYmplY3RJRFxuICAgICAgICAgICAgY29uc3QgY2hhbmdlZEtleUlkZW50aWZpZXIgPVxuICAgICAgICAgICAgICB1cGRhdGVkS2V5Y2hhaW4udHlwZSA9PT0gJ3RzcycgfHwgS2V5Y2hhaW5zLmlzTXVsdGlVc2VyS2V5KHVwZGF0ZWRLZXljaGFpbilcbiAgICAgICAgICAgICAgICA/IHVwZGF0ZWRLZXljaGFpbi5pZFxuICAgICAgICAgICAgICAgIDogdXBkYXRlZEtleWNoYWluLnB1YjtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VkS2V5SWRlbnRpZmllcikge1xuICAgICAgICAgICAgICBjaGFuZ2VkS2V5c1tjaGFuZ2VkS2V5SWRlbnRpZmllcl0gPSB1cGRhdGVkS2V5Y2hhaW4uZW5jcnlwdGVkUHJ2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlmIHRoZSBwYXNzd29yZCB3YXMgaW5jb3JyZWN0LCBzaWxlbmNlIHRoZSBlcnJvciwgdGhyb3cgb3RoZXJ3aXNlLlxuICAgICAgICAgIC8vIHVwZGF0ZVNpbmdsZUtleWNoYWluUGFzc3dvcmQgd3JhcHMgYSB3cm9uZy1wYXNzd29yZCAob3IgY29ycnVwdCBpbnB1dCkgZmFpbHVyZSBhc1xuICAgICAgICAgIC8vICdmYWlsZWQgdG8gdXBkYXRlIGtleWNoYWluIHBhc3N3b3JkOiAuLi4nLCBzbyB0cmVhdCB0aGF0IGFzIGEgc2tpcC1hYmxlIGVycm9yLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFlLm1lc3NhZ2UuaW5jbHVkZXMoJ3ByaXZhdGUga2V5IGlzIGluY29ycmVjdCcpICYmXG4gICAgICAgICAgICAhZS5tZXNzYWdlLmluY2x1ZGVzKCdmYWlsZWQgdG8gdXBkYXRlIGtleWNoYWluIHBhc3N3b3JkJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0Lm5leHRCYXRjaFByZXZJZCkge1xuICAgICAgICBwcmV2SWQgPSByZXN1bHQubmV4dEJhdGNoUHJldklkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5c0xlZnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZWRLZXlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgZW5jcnlwdGlvbiB2ZXJzaW9uIG9mIGEgY2lwaGVydGV4dCBieSBpbnNwZWN0aW5nIGl0cyBcInZcIiBmaWVsZC5cbiAgICogICAtIHYxIChTSkNMIC8gUEJLREYyLVNIQTI1NiArIEFFUy0yNTYtQ0NNKTogXCJ2XCIgYWJzZW50IG9yIGV4cGxpY2l0bHkgMVxuICAgKiAgIC0gdjIgKEFyZ29uMmlkICsgQUVTLTI1Ni1HQ00pOiBcInZcIiA9PT0gMlxuICAgKiBUaHJvd3Mgb24gdW5yZWNvZ25pemVkIHZhbHVlcyBzbyBjYWxsZXJzIGNhbm5vdCBzaWxlbnRseSBtaXMtaGFuZGxlIHVua25vd24gZW52ZWxvcGVzLlxuICAgKi9cbiAgZ2V0RW5jcnlwdGlvblZlcnNpb24oY2lwaGVydGV4dDogc3RyaW5nKTogRW5jcnlwdGlvblZlcnNpb24ge1xuICAgIGxldCBlbnZlbG9wZTogeyB2PzogdW5rbm93biB9O1xuICAgIHRyeSB7XG4gICAgICBlbnZlbG9wZSA9IEpTT04ucGFyc2UoY2lwaGVydGV4dCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgY2lwaGVydGV4dCBlbnZlbG9wZTogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgaWYgKGVudmVsb3BlLnYgPT09IDIpIHtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBpZiAoZW52ZWxvcGUudiA9PT0gdW5kZWZpbmVkIHx8IGVudmVsb3BlLnYgPT09IDEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBlbmNyeXB0aW9uIHZlcnNpb246ICR7U3RyaW5nKGVudmVsb3BlLnYpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcGFzc3dvcmQgdXNlZCB0byBkZWNyeXB0IGEgc2luZ2xlIGtleWNoYWluLiBEZWZhdWx0cyB0byBwcmVzZXJ2aW5nIHRoZVxuICAgKiBzb3VyY2UgZW52ZWxvcGUgdmVyc2lvbiAodjEgc3RheXMgdjEsIHYyIHN0YXlzIHYyKSwgc28gdGhpcyBpcyBhIG5vLW9wIHdpdGggcmVzcGVjdCB0b1xuICAgKiBlbmNyeXB0aW9uIHZlcnNpb24gdW5sZXNzIHRoZSBjYWxsZXIgb3B0cyBpbi4gUGFzcyBgZW5jcnlwdGlvblZlcnNpb246IDJgIHRvIGV4cGxpY2l0bHlcbiAgICogdXBncmFkZSBhIHYxIChTSkNMKSBrZXljaGFpbiB0byB2MiAoQXJnb24yaWQgKyBBRVMtMjU2LUdDTSkgYXMgcGFydCBvZiB0aGUgcGFzc3dvcmQgY2hhbmdlXG4gICAqIChlLmcuIG9uY2UgYSBjYWxsZXIgaXMgcmVhZHksIGFmdGVyIHRoZSBTZXB0IDE1IGJyZWFraW5nLWNoYW5nZSB3aW5kb3cgY2xvc2VzKS5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLmtleWNoYWluIC0gVGhlIGtleWNoYWluIHdob3NlIHBhc3N3b3JkIHNob3VsZCBiZSB1cGRhdGVkXG4gICAqIEBwYXJhbSBwYXJhbXMub2xkUGFzc3dvcmQgLSBUaGUgb2xkIHBhc3N3b3JkIHVzZWQgZm9yIGVuY3J5cHRpbmcgdGhlIGtleVxuICAgKiBAcGFyYW0gcGFyYW1zLm5ld1Bhc3N3b3JkIC0gVGhlIG5ldyBwYXNzd29yZCB0byBiZSB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAgICogQHBhcmFtIHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbiAtIE9wdGlvbmFsIGVudmVsb3BlIHZlcnNpb24gdG8gZW1pdDsgZGVmYXVsdHMgdG8gdGhlIHNvdXJjZSBlbnZlbG9wZSdzIHZlcnNpb25cbiAgICogQHJldHVybnMge1Byb21pc2U8S2V5Y2hhaW4+fVxuICAgKi9cbiAgYXN5bmMgdXBkYXRlU2luZ2xlS2V5Y2hhaW5QYXNzd29yZChwYXJhbXM6IFVwZGF0ZVNpbmdsZUtleWNoYWluUGFzc3dvcmRPcHRpb25zID0ge30pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKHBhcmFtcy5vbGRQYXNzd29yZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgb2xkIHBhc3N3b3JkIHRvIGJlIGEgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzU3RyaW5nKHBhcmFtcy5uZXdQYXNzd29yZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgbmV3IHBhc3N3b3JkIHRvIGJlIGEgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzT2JqZWN0KHBhcmFtcy5rZXljaGFpbikgfHwgIV8uaXNTdHJpbmcocGFyYW1zLmtleWNoYWluLmVuY3J5cHRlZFBydikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQga2V5Y2hhaW4gdG8gYmUgYW4gb2JqZWN0IHdpdGggYW4gZW5jcnlwdGVkUHJ2IHByb3BlcnR5Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2xkRW5jcnlwdGVkUHJ2ID0gcGFyYW1zLmtleWNoYWluLmVuY3J5cHRlZFBydjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjcnlwdGVkUHJ2ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHsgaW5wdXQ6IG9sZEVuY3J5cHRlZFBydiwgcGFzc3dvcmQ6IHBhcmFtcy5vbGRQYXNzd29yZCB9KTtcbiAgICAgIGNvbnN0IG5ld0VuY3J5cHRlZFBydiA9IHBhcmFtcy5lbmNyeXB0aW9uU2Vzc2lvblxuICAgICAgICA/IGF3YWl0IHBhcmFtcy5lbmNyeXB0aW9uU2Vzc2lvbi5lbmNyeXB0KGRlY3J5cHRlZFBydilcbiAgICAgICAgOiBhd2FpdCB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICAgICAgaW5wdXQ6IGRlY3J5cHRlZFBydixcbiAgICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMubmV3UGFzc3dvcmQsXG4gICAgICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uID8/IHRoaXMuZ2V0RW5jcnlwdGlvblZlcnNpb24ob2xkRW5jcnlwdGVkUHJ2KSxcbiAgICAgICAgICB9KTtcbiAgICAgIHJldHVybiBfLmFzc2lnbih7fSwgcGFyYW1zLmtleWNoYWluLCB7IGVuY3J5cHRlZFBydjogbmV3RW5jcnlwdGVkUHJ2IH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGNhdGNoaW5nIGFuIGVycm9yIGhlcmUgbWVhbnMgdGhhdCB0aGUgcGFzc3dvcmQgd2FzIGluY29ycmVjdCBvciwgbGVzcyBsaWtlbHksIHRoZSBpbnB1dCB0byBkZWNyeXB0IGlzIGNvcnJ1cHRlZFxuICAgICAgY29uc3QgZXJyb3JEZXRhaWwgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhaWxlZCB0byB1cGRhdGUga2V5Y2hhaW4gcGFzc3dvcmQ6ICR7ZXJyb3JEZXRhaWx9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlY3J5cHQgYW4gZW5jcnlwdGVkIHByaXZhdGUga2V5IHdpdGggYHBhc3NwaHJhc2VgIGFuZCByZS1lbmNyeXB0IGl0IGFzIGEgdjJcbiAgICogKEFyZ29uMmlkICsgQUVTLTI1Ni1HQ00pIGVudmVsb3BlIHdpdGggdGhlIHNhbWUgcGFzc3BocmFzZS5cbiAgICpcbiAgICogVXNlZCB0byB1cGdyYWRlIGxlZ2FjeSB2MSAoU0pDTCkgZW52ZWxvcGVzIHRvIHYyIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHBhc3NwaHJhc2UuXG4gICAqIENhbGxlcnMgdGhhdCBuZWVkIHRvIHRyeSBhIGZhbGxiYWNrIHBhc3NwaHJhc2UgKGUuZy4gYW4gb3JpZ2luYWwgcGFzc3BocmFzZSBmcm9tXG4gICAqIGJlZm9yZSBhIHBhc3N3b3JkIHJvdGF0aW9uKSBzaG91bGQgaGFuZGxlIHRoYXQgdGhlbXNlbHZlcyDigJQgdGhpcyBwcmltaXRpdmUgZG9lcyBvbmVcbiAgICogdGhpbmcgYW5kIGxldHMgZGVjcnlwdGlvbiBlcnJvcnMgc3VyZmFjZSBkaXJlY3RseS5cbiAgICovXG4gIGFzeW5jIHJlZW5jcnlwdEFzVjIoZW5jcnlwdGVkUHJ2OiBzdHJpbmcsIHBhc3NwaHJhc2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcHJ2ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHsgaW5wdXQ6IGVuY3J5cHRlZFBydiwgcGFzc3dvcmQ6IHBhc3NwaHJhc2UgfSk7XG4gICAgcmV0dXJuIHRoaXMuYml0Z28uZW5jcnlwdCh7IGlucHV0OiBwcnYsIHBhc3N3b3JkOiBwYXNzcGhyYXNlLCBlbmNyeXB0aW9uVmVyc2lvbjogMiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBwdWJsaWMvcHJpdmF0ZSBrZXkgcGFpclxuICAgKiBAcGFyYW0gcGFyYW1zIC0gb3B0aW9uYWwgcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMuc2VlZCBvcHRpb25hbCAtIHNlZWQgdG8gdXNlIGZvciBrZXlwYWlyIGdlbmVyYXRpb25cbiAgICogQHBhcmFtIHBhcmFtcy5pc1Jvb3RLZXkgb3B0aW9uYWwgLSB3aGV0aGVyIHRoZSByZXN1bHRpbmcga2V5cGFpciBzaG91bGQgYmUgYSByb290IGtleVxuICAgKiBAcmV0dXJucyB7S2V5UGFpcn0gLSB0aGUgZ2VuZXJhdGVkIGtleXBhaXJcbiAgICovXG4gIGNyZWF0ZShwYXJhbXM6IHsgc2VlZD86IEJ1ZmZlcjsgaXNSb290S2V5PzogYm9vbGVhbiB9ID0ge30pOiBLZXlQYWlyIHtcbiAgICBpZiAocGFyYW1zPy5pc1Jvb3RLZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmJhc2VDb2luLmdlbmVyYXRlUm9vdEtleVBhaXIocGFyYW1zLnNlZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYXNlQ29pbi5nZW5lcmF0ZUtleVBhaXIocGFyYW1zLnNlZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGtleWNoYWluIHRvIEJpdEdvJ3MgcmVjb3Jkc1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBhZGQocGFyYW1zOiBBZGRLZXljaGFpbk9wdGlvbnMgPSB7fSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKFxuICAgICAgcGFyYW1zLFxuICAgICAgW10sXG4gICAgICBbXG4gICAgICAgICdwdWInLFxuICAgICAgICAnZW5jcnlwdGVkUHJ2JyxcbiAgICAgICAgJ2tleVR5cGUnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICdzb3VyY2UnLFxuICAgICAgICAnb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlJyxcbiAgICAgICAgJ2VudGVycHJpc2UnLFxuICAgICAgICAnZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCcsXG4gICAgICAgICdkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoJyxcbiAgICAgICAgJ3BhcmVudCcsXG4gICAgICAgICdzYWZlSWQnLFxuICAgICAgXVxuICAgICk7XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1zLmRpc2FibGVLUlNFbWFpbCkpIHtcbiAgICAgIGlmICghXy5pc0Jvb2xlYW4ocGFyYW1zLmRpc2FibGVLUlNFbWFpbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGRpc2FibGVLUlNFbWFpbCBhcmd1bWVudCwgZXhwZWN0aW5nIGJvb2xlYW4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnJlcUlkKSB7XG4gICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocGFyYW1zLnJlcUlkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy5iYXNlQ29pbi51cmwoJy9rZXknKSlcbiAgICAgIC5zZW5kKHtcbiAgICAgICAgcHViOiBwYXJhbXMucHViLFxuICAgICAgICBjb21tb25QdWI6IHBhcmFtcy5jb21tb25QdWIsXG4gICAgICAgIGNvbW1vbktleWNoYWluOiBwYXJhbXMuY29tbW9uS2V5Y2hhaW4sXG4gICAgICAgIGVuY3J5cHRlZFBydjogcGFyYW1zLmVuY3J5cHRlZFBydixcbiAgICAgICAgdHlwZTogcGFyYW1zLnR5cGUsXG4gICAgICAgIGtleVR5cGU6IHBhcmFtcy5rZXlUeXBlLFxuICAgICAgICBzb3VyY2U6IHBhcmFtcy5zb3VyY2UsXG4gICAgICAgIHByb3ZpZGVyOiBwYXJhbXMucHJvdmlkZXIsXG4gICAgICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgICAgZW50ZXJwcmlzZTogcGFyYW1zLmVudGVycHJpc2UsXG4gICAgICAgIGRlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQ6IHBhcmFtcy5kZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkLFxuICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhQYXRoOiBwYXJhbXMuZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aCxcbiAgICAgICAgcGFyZW50OiBwYXJhbXMucGFyZW50LFxuICAgICAgICBkaXNhYmxlS1JTRW1haWw6IHBhcmFtcy5kaXNhYmxlS1JTRW1haWwsXG4gICAgICAgIGtyc1NwZWNpZmljOiBwYXJhbXMua3JzU3BlY2lmaWMsXG4gICAgICAgIGtleVNoYXJlczogcGFyYW1zLmtleVNoYXJlcyxcbiAgICAgICAgdXNlckdQR1B1YmxpY0tleTogcGFyYW1zLnVzZXJHUEdQdWJsaWNLZXksXG4gICAgICAgIGJhY2t1cEdQR1B1YmxpY0tleTogcGFyYW1zLmJhY2t1cEdQR1B1YmxpY0tleSxcbiAgICAgICAgYWxnb1VzZWQ6IHBhcmFtcy5hbGdvVXNlZCxcbiAgICAgICAgaXNEaXN0cmlidXRlZEN1c3RvZHk6IHBhcmFtcy5pc0Rpc3RyaWJ1dGVkQ3VzdG9keSxcbiAgICAgICAgaXNNUEN2MjogcGFyYW1zLmlzTVBDdjIsXG4gICAgICAgIGNvaW5TcGVjaWZpYzogcGFyYW1zLmNvaW5TcGVjaWZpYyxcbiAgICAgICAgd2ViYXV0aG5EZXZpY2VzOiBwYXJhbXMud2ViYXV0aG5EZXZpY2VzLFxuICAgICAgICB3ZWJhdXRobkluZm86IHBhcmFtcy53ZWJhdXRobkluZm8sXG4gICAgICAgIHNhZmVJZDogcGFyYW1zLnNhZmVJZCxcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQml0R28ga2V5XG4gICAqIEBwYXJhbSBwYXJhbXMgKGVtcHR5KVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlQml0R28ocGFyYW1zOiBDcmVhdGVCaXRHb09wdGlvbnMgPSB7fSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBwYXJhbXMuc291cmNlID0gJ2JpdGdvJztcblxuICAgIHRoaXMuYmFzZUNvaW4ucHJlQ3JlYXRlQml0R28ocGFyYW1zIGFzIGFueSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYWRkKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYmFja3VwIGtleVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMucHJvdmlkZXIgKG9wdGlvbmFsKVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlQmFja3VwKHBhcmFtczogQ3JlYXRlQmFja3VwT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIHBhcmFtcy5zb3VyY2UgPSAnYmFja3VwJztcblxuICAgIGNvbnN0IGlzVHNzQmFja3VwS2V5ID0gcGFyYW1zLnBydiAmJiAocGFyYW1zLmNvbW1vbktleWNoYWluIHx8IHBhcmFtcy5jb21tb25QdWIpO1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zLnByb3ZpZGVyKSAmJiAhaXNUc3NCYWNrdXBLZXkpIHtcbiAgICAgIC8vIGlmIHRoZSBwcm92aWRlciBpcyB1bmRlZmluZWQsIHdlIGdlbmVyYXRlIGEgbG9jYWwga2V5IGFuZCBhZGQgdGhlIHNvdXJjZSBkZXRhaWxzXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNyZWF0ZSgpO1xuICAgICAgXy5leHRlbmQocGFyYW1zLCBrZXkpO1xuICAgICAgaWYgKHBhcmFtcy5wYXNzcGhyYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgXy5leHRlbmQocGFyYW1zLCB7XG4gICAgICAgICAgZW5jcnlwdGVkUHJ2OiBhd2FpdCB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICAgICAgaW5wdXQ6IGtleS5wcnYsXG4gICAgICAgICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXYWxsZXQgU2FmZXMgdjEgc2xvdCDikaMgKGBlZDI1NTE5TXVsdGlzaWdgKTogc3RvcmUgbmV1dHJhbCByYXcgZGVyaXZhdGlvbiBtYXRlcmlhbCBhc1xuICAgIC8vIHB1YmxpY0tleTMyIHx8IGNoYWluQ29kZTMyLCBzZXJpYWxpemVkIHRvZ2V0aGVyIGFzIGNhbm9uaWNhbCB1bnBhZGRlZCBSRkMgNDY0OCBiYXNlMzJcbiAgICAvLyAoZXhhY3RseSAxMDMgdXBwZXJjYXNlIGNoYXJhY3RlcnMpLiBUaGUgcm9vdCBpcyBkZWxpYmVyYXRlbHkgbm90IGVuY29kZWQgYXMgYVxuICAgIC8vIFN0ZWxsYXIvQWxnb3JhbmQvSEJBUiBwdWJsaWMga2V5OyBjb2luLXNwZWNpZmljIGVuY29kaW5nIGhhcHBlbnMgYWZ0ZXIgcHVibGljIHNvZnRcbiAgICAvLyBkZXJpdmF0aW9uIHdoZW4gdGhlIHdhbGxldCBjaGlsZCBpcyBtaW50ZWQuXG4gICAgY29uc3Qgd2l0aEtleSA9IHBhcmFtcyBhcyBDcmVhdGVCYWNrdXBPcHRpb25zICYgeyBwdWI/OiBzdHJpbmcgfTtcbiAgICBpZiAocGFyYW1zLnNhZmVJZCAhPT0gdW5kZWZpbmVkICYmIHdpdGhLZXkucHViICE9PSB1bmRlZmluZWQgJiYgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkod2l0aEtleS5wdWIpKSB7XG4gICAgICB3aXRoS2V5LnB1YiA9IGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIoZGVjb2RlRWQyNTUxOVN0cktleVB1YmxpY0tleSh3aXRoS2V5LnB1YiksIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSgpKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZXJ2ZXJSZXNwb25zZSA9IGF3YWl0IHRoaXMuYWRkKHBhcmFtcyk7XG4gICAgcmV0dXJuIF8uZXh0ZW5kKHt9LCBzZXJ2ZXJSZXNwb25zZSwgXy5waWNrKHBhcmFtcywgWydwcnYnLCAnZW5jcnlwdGVkUHJ2JywgJ3Byb3ZpZGVyJywgJ3NvdXJjZSddKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBrZXlzIGZvciBzaWduaW5nIGZyb20gYSB3YWxsZXRcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxLZXljaGFpbltdPn1cbiAgICovXG4gIGFzeW5jIGdldEtleXNGb3JTaWduaW5nKHBhcmFtczogR2V0S2V5c0ZvclNpZ25pbmdPcHRpb25zID0ge30pOiBQcm9taXNlPEtleWNoYWluW10+IHtcbiAgICBpZiAoIV8uaXNPYmplY3QocGFyYW1zLndhbGxldCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSB3YWxsZXQnKTtcbiAgICB9XG4gICAgY29uc3Qgd2FsbGV0ID0gcGFyYW1zLndhbGxldDtcbiAgICBjb25zdCByZXFJZCA9IHBhcmFtcy5yZXFJZCB8fCBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgIGNvbnN0IGlkcyA9IHdhbGxldC5iYXNlQ29pbi5rZXlJZHNGb3JTaWduaW5nKCk7XG4gICAgY29uc3Qga2V5Y2hhaW5RdWVyaWVzQmx1ZWJpcmRzID0gaWRzLm1hcCgoaWQpID0+IHRoaXMuZ2V0KHsgaWQ6IHdhbGxldC5rZXlJZHMoKVtpZF0sIHJlcUlkIH0pKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoa2V5Y2hhaW5RdWVyaWVzQmx1ZWJpcmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjcmVhdGUgYW5kIHN0b3JlIE1QQyBrZXljaGFpbnMgd2l0aCBCaXRHby5cbiAgICogQHBhcmFtIHBhcmFtcyBwYXNzcGhyYXNlIHVzZWQgdG8gZW5jcnlwdCBzZWNyZXQgbWF0ZXJpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8S2V5Y2hhaW5zVHJpcGxldD59IG5ld2x5IGNyZWF0ZWQgVXNlciwgQmFja3VwLCBhbmQgQml0R28ga2V5c1xuICAgKi9cbiAgYXN5bmMgY3JlYXRlTXBjKHBhcmFtczogQ3JlYXRlTXBjT3B0aW9ucyk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIGlmIChwYXJhbXMubXVsdGlzaWdUeXBlICE9PSAndHNzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBtdWx0aS1zaWcgdHlwZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHRzc1NldHRpbmdzOiBUc3NTZXR0aW5ncyA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5nZXQodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKCcvYXBpL3YyL3Rzcy9zZXR0aW5ncycpKVxuICAgICAgLnF1ZXJ5KHsgZW50ZXJwcmlzZTogcGFyYW1zLmVudGVycHJpc2UgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgICBjb25zdCBtdWx0aXNpZ1R5cGVWZXJzaW9uID1cbiAgICAgIHRzc1NldHRpbmdzLmNvaW5TZXR0aW5nc1t0aGlzLmJhc2VDb2luLmdldEZhbWlseSgpXT8ud2FsbGV0Q3JlYXRpb25TZXR0aW5ncz8ubXVsdGlTaWdUeXBlVmVyc2lvbjtcblxuICAgIGNvbnN0IGlzTVBDdjIgPSBtdWx0aXNpZ1R5cGVWZXJzaW9uID09PSAnTVBDdjInO1xuICAgIGlmIChwYXJhbXMuc2FmZUlkICYmICFpc01QQ3YyKSB7XG4gICAgICAvLyBUaGUgbGVnYWN5IE1QQ3YxIGNlcmVtb25pZXMgYWNjZXB0IGEgc2FmZUlkIGZvciBzaWduYXR1cmUgY29tcGF0aWJpbGl0eSBidXQgc2lsZW50bHlcbiAgICAgIC8vIGlnbm9yZSBpdCAoc2VlIEVERFNBVXRpbHMuZGVmYXVsdC5jcmVhdGVLZXljaGFpbnMgLyBFQ0RTQVV0aWxzLkVjZHNhVXRpbHMuY3JlYXRlS2V5Y2hhaW5zKSxcbiAgICAgIC8vIHNvIHRoZSByZXN1bHRpbmcga2V5cyBuZXZlciBnZXQgdGFnZ2VkIHdpdGggdGhlIHNhZmUgYW5kIFdQJ3MgZmluYWxpemUgc3RlcCByZWplY3RzIHRoZW1cbiAgICAgIC8vIHdpdGggYSBnZW5lcmljIDQwMC4gRmFpbCBmYXN0IGhlcmUgaW5zdGVhZCBvZiBsZXR0aW5nIHRoYXQgY29uZnVzaW5nIGVycm9yIHN1cmZhY2UgbGF0ZXIuXG4gICAgICB0aHJvdyBuZXcgU2FmZU1wY0NlcmVtb255VW5zdXBwb3J0ZWRFcnJvcih0aGlzLmJhc2VDb2luLmdldEZhbWlseSgpKTtcbiAgICB9XG5cbiAgICAvLyBBIHNhZmVJZCBvbiBhIGtleWdlbiBjZXJlbW9ueSBzZWxlY3RzIHRoZSBWUkYgdmFyaWFudCwgd2hpY2ggYWRkaXRpb25hbGx5IHJ1bnMgdGhlXG4gICAgLy8gVlJGIERLRyBhbG9uZ3NpZGUgdGhlIHNpZ25pbmcgREtHLiBPcmRpbmFyeSBUU1Mgd2FsbGV0IGNyZWF0aW9uIG5ldmVyIHNldHMgc2FmZUlkXG4gICAgLy8gYW5kIGtlZXBzIHRoZSBwbGFpbiBNUEN2MiBmbG93LlxuICAgIGxldCBNcGNVdGlscztcbiAgICBpZiAodGhpcy5iYXNlQ29pbi5nZXRNUENBbGdvcml0aG0oKSA9PT0gJ2VkZHNhJykge1xuICAgICAgTXBjVXRpbHMgPSBpc01QQ3YyXG4gICAgICAgID8gcGFyYW1zLnNhZmVJZFxuICAgICAgICAgID8gRUREU0FVdGlscy5FZGRzYVZyZk1QQ3YyVXRpbHNcbiAgICAgICAgICA6IEVERFNBVXRpbHMuRWRkc2FNUEN2MlV0aWxzXG4gICAgICAgIDogRUREU0FVdGlscy5kZWZhdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBNcGNVdGlscyA9IGlzTVBDdjJcbiAgICAgICAgPyBwYXJhbXMuc2FmZUlkXG4gICAgICAgICAgPyBFQ0RTQVV0aWxzLkVjZHNhVnJmTVBDdjJVdGlsc1xuICAgICAgICAgIDogRUNEU0FVdGlscy5FY2RzYU1QQ3YyVXRpbHNcbiAgICAgICAgOiBFQ0RTQVV0aWxzLkVjZHNhVXRpbHM7XG4gICAgfVxuXG4gICAgY29uc3QgbXBjVXRpbHMgPSBuZXcgTXBjVXRpbHModGhpcy5iaXRnbywgdGhpcy5iYXNlQ29pbik7XG4gICAgcmV0dXJuIGF3YWl0IG1wY1V0aWxzLmNyZWF0ZUtleWNoYWlucyh7XG4gICAgICBwYXNzcGhyYXNlOiBwYXJhbXMucGFzc3BocmFzZSxcbiAgICAgIGVudGVycHJpc2U6IHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlOiBwYXJhbXMub3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgcmV0cm9maXQ6IHBhcmFtcy5yZXRyb2ZpdCxcbiAgICAgIHdlYmF1dGhuSW5mbzogcGFyYW1zLndlYmF1dGhuSW5mbyxcbiAgICAgIGVuY3J5cHRpb25WZXJzaW9uOiBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICBzYWZlSWQ6IHBhcmFtcy5zYWZlSWQsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWNyZWF0ZU1wYyhwYXJhbXM6IFJlY3JlYXRlTXBjT3B0aW9ucyk6IFByb21pc2U8S2V5Y2hhaW5zVHJpcGxldD4ge1xuICAgIGFzc2VydChwYXJhbXMuY29pbiwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGNvaW4nKSk7XG4gICAgYXNzZXJ0KHBhcmFtcy53YWxsZXRJZCwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIHdhbGxldElkJykpO1xuICAgIGFzc2VydChwYXJhbXMub3RwLCBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gb3RwJykpO1xuICAgIGFzc2VydChwYXJhbXMucGFzc3BocmFzZSwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIHBhc3NwaHJhc2UnKSk7XG5cbiAgICBhc3NlcnQoXG4gICAgICBwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkV2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBlbmNyeXB0ZWRXYWxsZXRQYXNzcGhyYXNlJylcbiAgICApO1xuICAgIGFzc2VydChwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkVXNlcktleSwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGVuY3J5cHRlZFVzZXJLZXknKSk7XG4gICAgYXNzZXJ0KHBhcmFtcy5lbmNyeXB0ZWRNYXRlcmlhbC5lbmNyeXB0ZWRCYWNrdXBLZXksIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBlbmNyeXB0ZWRCYWNrdXBLZXknKSk7XG5cbiAgICBhd2FpdCB0aGlzLmJpdGdvLnBvc3QodGhpcy5iaXRnby5taWNyb3NlcnZpY2VzVXJsKCcvYXBpL3YxL3VzZXIvdW5sb2NrJykpLnNlbmQoeyBvdHA6IHBhcmFtcy5vdHAgfSkucmVzdWx0KCk7XG4gICAgY29uc3QgeyByZWNvdmVyeUluZm8gfSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybChgL2FwaS92Mi8ke3BhcmFtcy5jb2lufS93YWxsZXQvJHtwYXJhbXMud2FsbGV0SWR9L3Bhc3Njb2RlcmVjb3ZlcnlgKSlcbiAgICAgIC5yZXN1bHQoKTtcblxuICAgIGlmICghcmVjb3ZlcnlJbmZvIHx8ICEoJ3Bhc3Njb2RlRW5jcnlwdGlvbkNvZGUnIGluIHJlY292ZXJ5SW5mbykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGdldCByZWNvdmVyeSBpbmZvJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjcnlwdGVkV2FsbGV0UGFzc3BocmFzZSA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICBpbnB1dDogcGFyYW1zLmVuY3J5cHRlZE1hdGVyaWFsLmVuY3J5cHRlZFdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBwYXNzd29yZDogcmVjb3ZlcnlJbmZvLnBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWNyeXB0ZWRVc2VyS2V5ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgIGlucHV0OiBwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkVXNlcktleSxcbiAgICAgIHBhc3N3b3JkOiBkZWNyeXB0ZWRXYWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkQmFja3VwS2V5ID0gYXdhaXQgdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgIGlucHV0OiBwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkQmFja3VwS2V5LFxuICAgICAgcGFzc3dvcmQ6IGRlY3J5cHRlZFdhbGxldFBhc3NwaHJhc2UsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVNcGMoe1xuICAgICAgLi4ucGFyYW1zLFxuICAgICAgbXVsdGlzaWdUeXBlOiAndHNzJyxcbiAgICAgIHJldHJvZml0OiB7XG4gICAgICAgIGRlY3J5cHRlZFVzZXJLZXksXG4gICAgICAgIGRlY3J5cHRlZEJhY2t1cEtleSxcbiAgICAgICAgd2FsbGV0SWQ6IHBhcmFtcy53YWxsZXRJZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSXQgcGFyc2VzIHRoZSBKU09OIGRvd25sb2FkZWQgZnJvbSB0aGUgT1ZDIGZvciBwbGF0Zm9ybSAoQml0R28pLFxuICAgKiBhbmQgY3JlYXRlcyBhIGNvcnJlc3BvbmRpbmcgVFNTIEJpdEdvIGtleS4gSXQgYWxzbyByZXR1cm5zIHRoZSBKU09OIHRoYXQgbmVlZHNcbiAgICogdG8gYmUgdXBsb2FkZWQgYmFjayB0byB0aGUgT1ZDcyBjb250YWluaW5nIHRoZSBCaXRHbyAtPiBPVkMgc2hhcmVzLlxuICAgKiBAcGFyYW0gb3ZjT3V0cHV0SnNvbiBKU09OIGZvcm1hdCBvZiB0aGUgZmlsZSBkb3dubG9hZGVkIGZyb20gdGhlIE9WQyBmb3IgcGxhdGZvcm1cbiAgICogQHBhcmFtIGVudGVycHJpc2UgT3B0aW9uYWwgZW50ZXJwcmlzZSBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGtleVxuICAgKiBAcmV0dXJucyB7Qml0R29LZXlGcm9tT3ZjU2hhcmVzfVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlVHNzQml0R29LZXlGcm9tT3ZjU2hhcmVzKG92Y091dHB1dEpzb246IHVua25vd24sIGVudGVycHJpc2U/OiBzdHJpbmcpOiBQcm9taXNlPEJpdEdvS2V5RnJvbU92Y1NoYXJlcz4ge1xuICAgIGNvbnN0IGRlY29kZWRPdmNPdXRwdXQgPSBkZWNvZGVPckVsc2UoT3ZjVG9CaXRHb0pTT04ubmFtZSwgT3ZjVG9CaXRHb0pTT04sIG92Y091dHB1dEpzb24sIChlcnJvcnMpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IocykgcGFyc2luZyBPVkMgSlNPTjogJHtlcnJvcnN9YCk7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVjb2RlZE92Y091dHB1dC5zdGF0ZSAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGF0ZSBleHBlY3RlZCB0byBiZSBcIjFcIi4gUGxlYXNlIGNvbXBsZXRlIHRoZSBmaXJzdCB0d28gT1ZDIG9wZXJhdGlvbnMnKTtcbiAgICB9XG5cbiAgICAvLyBPVkMtMSBpcyByZXNwb25zaWJsZSBmb3IgdGhlIFVzZXIga2V5XG4gICAgY29uc3Qgb3ZjMSA9IGRlY29kZWRPdmNPdXRwdXQub3ZjWzFdO1xuICAgIC8vIE9WQy0yIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgQmFja3VwIGtleVxuICAgIGNvbnN0IG92YzIgPSBkZWNvZGVkT3ZjT3V0cHV0Lm92Y1syXTtcblxuICAgIGNvbnN0IGtleVNoYXJlczogQXBpS2V5U2hhcmVbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgZnJvbTogJ3VzZXInLFxuICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgcHVibGljU2hhcmU6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnB1YmxpY1NoYXJlLFxuICAgICAgICBwcml2YXRlU2hhcmU6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnVTaWcudG9TdHJpbmcoKSA/PyAnJyxcbiAgICAgICAgdnNzUHJvb2Y6IG92YzEub3ZjVG9CaXRnb1NoYXJlLnZzc1Byb29mID8/ICcnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZnJvbTogJ2JhY2t1cCcsXG4gICAgICAgIHRvOiAnYml0Z28nLFxuICAgICAgICBwdWJsaWNTaGFyZTogb3ZjMi5vdmNUb0JpdGdvU2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgIHByaXZhdGVTaGFyZTogb3ZjMi5vdmNUb0JpdGdvU2hhcmUucHJpdmF0ZVNoYXJlLFxuICAgICAgICBwcml2YXRlU2hhcmVQcm9vZjogb3ZjMi5vdmNUb0JpdGdvU2hhcmUudVNpZy50b1N0cmluZygpID8/ICcnLFxuICAgICAgICB2c3NQcm9vZjogb3ZjMi5vdmNUb0JpdGdvU2hhcmUudnNzUHJvb2YgPz8gJycsXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCBrZXkgPSBhd2FpdCB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpLmFkZCh7XG4gICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICBrZXlTaGFyZXMsXG4gICAgICBrZXlUeXBlOiAndHNzJyxcbiAgICAgIHVzZXJHUEdQdWJsaWNLZXk6IG92YzEuZ3BnUHViS2V5LFxuICAgICAgYmFja3VwR1BHUHVibGljS2V5OiBvdmMyLmdwZ1B1YktleSxcbiAgICAgIGVudGVycHJpc2UsXG4gICAgfSk7XG4gICAgYXNzZXJ0KGtleS5rZXlTaGFyZXMpO1xuICAgIGFzc2VydChrZXkuY29tbW9uS2V5Y2hhaW4pO1xuICAgIGFzc2VydChrZXkud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyk7XG5cbiAgICBjb25zdCBiaXRnb1RvVXNlclNoYXJlID0ga2V5LmtleVNoYXJlcy5maW5kKFxuICAgICAgKHZhbHVlOiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9KSA9PiB2YWx1ZS5mcm9tID09PSAnYml0Z28nICYmIHZhbHVlLnRvID09PSAndXNlcidcbiAgICApO1xuICAgIGFzc2VydChiaXRnb1RvVXNlclNoYXJlKTtcbiAgICBhc3NlcnQoYml0Z29Ub1VzZXJTaGFyZS52c3NQcm9vZik7XG4gICAgYXNzZXJ0KGJpdGdvVG9Vc2VyU2hhcmUucGFpbGxpZXJQdWJsaWNLZXkpO1xuICAgIGNvbnN0IGJpdGdvVG9CYWNrdXBTaGFyZSA9IGtleS5rZXlTaGFyZXMuZmluZChcbiAgICAgICh2YWx1ZTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSkgPT4gdmFsdWUuZnJvbSA9PT0gJ2JpdGdvJyAmJiB2YWx1ZS50byA9PT0gJ2JhY2t1cCdcbiAgICApO1xuICAgIGFzc2VydChiaXRnb1RvQmFja3VwU2hhcmUpO1xuICAgIGFzc2VydChiaXRnb1RvQmFja3VwU2hhcmUudnNzUHJvb2YpO1xuICAgIGFzc2VydChiaXRnb1RvQmFja3VwU2hhcmUucGFpbGxpZXJQdWJsaWNLZXkpO1xuXG4gICAgLy8gQ3JlYXRlIEpTT04gZGF0YSB3aXRoIHBsYXRmb3JtIHNoYXJlcyBmb3IgT1ZDLTEgYW5kIE9WQy0yXG4gICAgY29uc3QgYml0Z29Ub092Y091dHB1dDogQml0R29Ub092Y0pTT04gPSB7XG4gICAgICB3YWxsZXQ6IHtcbiAgICAgICAgLi4uZGVjb2RlZE92Y091dHB1dCxcbiAgICAgICAgcGxhdGZvcm06IHtcbiAgICAgICAgICBjb21tb25LZXljaGFpbjoga2V5LmNvbW1vbktleWNoYWluLFxuICAgICAgICAgIHdhbGxldEdwZ1B1YktleVNpZ3M6IGtleS53YWxsZXRIU01HUEdQdWJsaWNLZXlTaWdzLFxuICAgICAgICAgIG92Yzoge1xuICAgICAgICAgICAgLy8gQml0R28gdG8gVXNlciAoT1ZDLTEpXG4gICAgICAgICAgICAxOiB7XG4gICAgICAgICAgICAgIGJpdGdvVG9PdmNTaGFyZToge1xuICAgICAgICAgICAgICAgIGk6IDEsXG4gICAgICAgICAgICAgICAgajogMyxcbiAgICAgICAgICAgICAgICBwdWJsaWNTaGFyZTogYml0Z29Ub1VzZXJTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlU2hhcmU6IGJpdGdvVG9Vc2VyU2hhcmUucHJpdmF0ZVNoYXJlLFxuICAgICAgICAgICAgICAgIHBhaWxsaWVyUHVibGljS2V5OiBiaXRnb1RvVXNlclNoYXJlLnBhaWxsaWVyUHVibGljS2V5LFxuICAgICAgICAgICAgICAgIHZzc1Byb29mOiBiaXRnb1RvVXNlclNoYXJlLnZzc1Byb29mLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIEJpdEdvIHRvIEJhY2t1cCAoT1ZDLTIpXG4gICAgICAgICAgICAyOiB7XG4gICAgICAgICAgICAgIGJpdGdvVG9PdmNTaGFyZToge1xuICAgICAgICAgICAgICAgIGk6IDIsXG4gICAgICAgICAgICAgICAgajogMyxcbiAgICAgICAgICAgICAgICBwdWJsaWNTaGFyZTogYml0Z29Ub0JhY2t1cFNoYXJlLnB1YmxpY1NoYXJlLFxuICAgICAgICAgICAgICAgIHByaXZhdGVTaGFyZTogYml0Z29Ub0JhY2t1cFNoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgICAgICAgICBwYWlsbGllclB1YmxpY0tleTogYml0Z29Ub0JhY2t1cFNoYXJlLnBhaWxsaWVyUHVibGljS2V5LFxuICAgICAgICAgICAgICAgIHZzc1Byb29mOiBiaXRnb1RvQmFja3VwU2hhcmUudnNzUHJvb2YsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyBNYXJrIGl0IHJlYWR5IGZvciBuZXh0IG9wZXJhdGlvbiwgc2hvdWxkIGJlIDJcbiAgICBiaXRnb1RvT3ZjT3V0cHV0LndhbGxldC5zdGF0ZSArPSAxO1xuXG4gICAgY29uc3Qgb3V0cHV0OiBCaXRHb0tleUZyb21PdmNTaGFyZXMgPSB7XG4gICAgICBiaXRHb0tleUlkOiBrZXkuaWQsXG4gICAgICBiaXRHb091dHB1dEpzb25Gb3JPdmM6IGJpdGdvVG9PdmNPdXRwdXQsXG4gICAgfTtcblxuICAgIHJldHVybiBkZWNvZGVPckVsc2UoQml0R29LZXlGcm9tT3ZjU2hhcmVzLm5hbWUsIEJpdEdvS2V5RnJvbU92Y1NoYXJlcywgb3V0cHV0LCAoZXJyb3JzKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHByb2R1Y2luZyB0aGUgb3V0cHV0OiAke2Vycm9yc31gKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdXNlciBrZXljaGFpbiwgZW5jcnlwdCB0aGUgcHJpdmF0ZSBrZXkgd2l0aCB0aGUgd2FsbGV0IHBhc3NwaHJhc2UgYW5kIHN0b3JlIGl0IGluIEJpdEdvLlxuICAgKiBAcGFyYW0gd2FsbGV0UGFzc3BocmFzZVxuICAgKiBAcmV0dXJucyBLZXljaGFpbiBpbmNsdWRpbmcgdGhlIGRlY3J5cHRlZCBwcml2YXRlIGtleVxuICAgKi9cbiAgYXN5bmMgY3JlYXRlVXNlcktleWNoYWluKFxuICAgIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZyxcbiAgICBlbmNyeXB0aW9uVmVyc2lvbj86IEVuY3J5cHRpb25WZXJzaW9uLFxuICAgIHNlc3Npb24/OiBJRW5jcnlwdGlvblNlc3Npb25cbiAgKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IGtleWNoYWlucyA9IHRoaXMuYmFzZUNvaW4ua2V5Y2hhaW5zKCk7XG4gICAgY29uc3QgbmV3S2V5Y2hhaW4gPSBrZXljaGFpbnMuY3JlYXRlKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlID0gZ2VuZXJhdGVSYW5kb21QYXNzd29yZCg1KTtcblxuICAgIC8vIFdoZW4gYSBzZXNzaW9uIGlzIHRocmVhZGVkIGluICh0eXBpY2FsbHkgZnJvbSBhIGJ1bGsgb3BlcmF0aW9uIHRoYXQgYWxyZWFkeSByYW4gdGhlIEtERlxuICAgIC8vIG9uY2UpLCByZXVzZSBpdCBzbyB0aGlzIGVudmVsb3BlJ3MgQUVTIGtleSBkZXJpdmVzIHZpYSBIS0RGIGluc3RlYWQgb2YgYW5vdGhlciBBcmdvbjIuXG4gICAgY29uc3QgZW5jcnlwdGVkUHJ2ID0gc2Vzc2lvblxuICAgICAgPyBhd2FpdCBzZXNzaW9uLmVuY3J5cHQobmV3S2V5Y2hhaW4ucHJ2KVxuICAgICAgOiBhd2FpdCB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIGlucHV0OiBuZXdLZXljaGFpbi5wcnYsXG4gICAgICAgICAgZW5jcnlwdGlvblZlcnNpb24sXG4gICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihhd2FpdCBrZXljaGFpbnMuYWRkKHtcbiAgICAgICAgZW5jcnlwdGVkUHJ2LFxuICAgICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICAgIHB1YjogbmV3S2V5Y2hhaW4ucHViLFxuICAgICAgICBzb3VyY2U6ICd1c2VyJyxcbiAgICAgIH0pKSxcbiAgICAgIHBydjogbmV3S2V5Y2hhaW4ucHJ2LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUm90YXRlIGFuIG9mYyBtdWx0aS11c2VyLWtleWNoYWluIGJ5IHJlY3JlYXRpbmcgYSBuZXcga2V5cGFpciwgZW5jcnlwdCBpdCB1c2luZyB0aGUgdXNlciBwYXNzd29yZCBhbmQgc2VudCBpdCB0byBXUFxuICAgKiBUaGlzIGlzIG9ubHkgbWVhbnQgdG8gYmUgY2FsbGVkIGJ5IG9mYyBtdWx0aS11c2VyLXdhbGxldCdzIGtleSwgYW5kIHdpbGwgdGhyb3cgaWYgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBSZXF1aXJlcyAyZmEgYXV0aCBiZWZvcmUgY2FsbGluZy4gQ2FsbCB0aGUgYml0Z28udW5sb2NrKCkgU0RLIG1ldGhvZCB0byB1bmxvY2sgdGhlIHNlc3Npb24gZmlyc3QuXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVycyBmb3IgdGhlIHJvdGF0ZSBrZXljaGFpbiBtZXRob2RcbiAgICogQHJldHVybiByb3RhdGVkS2V5Y2hhaW5cbiAgICovXG4gIGFzeW5jIHJvdGF0ZUtleWNoYWluKHBhcmFtczogUm90YXRlS2V5Y2hhaW5PcHRpb25zKTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGNvbnN0IGtleUNoYWluID0gYXdhaXQgdGhpcy5nZXQoeyBpZDogcGFyYW1zLmlkIH0pO1xuICAgIGlmICghS2V5Y2hhaW5zLmlzTXVsdGlVc2VyS2V5KGtleUNoYWluKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGByb3RhdGVLZXljaGFpbiBpcyBvbmx5IHBlcm1pdHRlZCBmb3Igb2ZjIG11bHRpLXVzZXIta2V5IHdhbGxldGApO1xuICAgIH1cblxuICAgIGxldCBwdWI6IHN0cmluZywgZW5jcnlwdGVkUHJ2OiBzdHJpbmc7XG4gICAgaWYgKCdlbmNyeXB0ZWRQcnYnIGluIHBhcmFtcykge1xuICAgICAgLy8gY2xpZW50IHBhc3NlZCBpbiBwdWIgYW5kIGVuY3J5cHRlZFBydiBkaXJlY3RseVxuICAgICAgcHViID0gcGFyYW1zLnB1YjtcbiAgICAgIGVuY3J5cHRlZFBydiA9IHBhcmFtcy5lbmNyeXB0ZWRQcnY7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGJpdGdvIGdlbmVyYXRlIHB1YiBhbmQgcHJ2IGFuZCBlbmNyeXB0IGl0XG4gICAgICBjb25zdCB7IHB1Yjoga2V5UHViLCBwcnY6IGtleVBydiB9ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgIGlmICgha2V5UHViKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdFeHBlY3RlZCBhIHB1YmxpYyBrZXkgdG8gYmUgZ2VuZXJhdGVkJyk7XG4gICAgICB9XG4gICAgICBwdWIgPSBrZXlQdWI7XG4gICAgICBlbmNyeXB0ZWRQcnYgPSBhd2FpdCB0aGlzLmJpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDoga2V5UHJ2LFxuICAgICAgICBwYXNzd29yZDogcGFyYW1zLnBhc3N3b3JkLFxuICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYml0Z29cbiAgICAgIC5wdXQodGhpcy5iYXNlQ29pbi51cmwoYC9rZXkvJHtwYXJhbXMuaWR9YCkpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIGVuY3J5cHRlZFBydixcbiAgICAgICAgcHViLFxuICAgICAgICByZXFJZDogcGFyYW1zLnJlcUlkLFxuICAgICAgfSlcbiAgICAgIC5yZXN1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGF0aWMgaGVscGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgYSBrZXljaGFpbiBpcyBhIG9mYyBtdWx0aS11c2VyLWtleVxuICAgKiBAcGFyYW0ga2V5Y2hhaW5cbiAgICovXG4gIHN0YXRpYyBpc011bHRpVXNlcktleShrZXljaGFpbjogS2V5Y2hhaW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGtleWNoYWluLmNvaW5TcGVjaWZpYz8ub2ZjPy5bJ2ZlYXR1cmVzJ10gPz8gW10pLmluY2x1ZGVzKCdtdWx0aS11c2VyLWtleScpO1xuICB9XG59XG4iXX0=
|
|
632
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2hhaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2JpdGdvL2tleWNoYWluL2tleWNoYWlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxvREFBNEI7QUFDNUIsMENBQTRCO0FBQzVCLHFEQUF1QztBQUd2QyxzQ0FBNEQ7QUFDNUQsNkRBS21DO0FBQ25DLG9DQUF1RztBQW1CdkcsaURBQXVGO0FBR3ZGLE1BQWEsU0FBUztJQUlwQixZQUFZLEtBQWdCLEVBQUUsUUFBbUI7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQTBCO1FBQ2xDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDckIsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxD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LEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixNQUFNLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFDRCxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ2IsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQ3RDLEtBQUssRUFBRSxNQUFNO2dCQUNiLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjthQUM1QyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNkLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQzNDLElBQUksQ0FBQztZQUNKLFlBQVk7WUFDWixHQUFHO1lBQ0gsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1NBQ3BCLENBQUM7YUFDRCxNQUFNLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQWtCO1FBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7Q0FDRjtBQS9vQkQsOEJBK29CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRzc1NldHRpbmdzIH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IElCYXNlQ29pbiwgS2V5Y2hhaW5zVHJpcGxldCwgS2V5UGFpciB9IGZyb20gJy4uL2Jhc2VDb2luJztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJy4uL2JpdGdvQmFzZSc7XG5pbXBvcnQgeyBTYWZlTXBjQ2VyZW1vbnlVbnN1cHBvcnRlZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7XG4gIGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG4gIGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIsXG4gIGdlbmVyYXRlRWQyNTUxOUNoYWluQ29kZSxcbiAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItc2FmZXMnO1xuaW1wb3J0IHsgZGVjb2RlT3JFbHNlLCBFQ0RTQVV0aWxzLCBFRERTQVV0aWxzLCBnZW5lcmF0ZVJhbmRvbVBhc3N3b3JkLCBSZXF1ZXN0VHJhY2VyIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgQWRkS2V5Y2hhaW5PcHRpb25zLFxuICBBcGlLZXlTaGFyZSxcbiAgQ2hhbmdlZEtleWNoYWlucyxcbiAgQ3JlYXRlQmFja3VwT3B0aW9ucyxcbiAgQ3JlYXRlQml0R29PcHRpb25zLFxuICBDcmVhdGVNcGNPcHRpb25zLFxuICBHZXRLZXljaGFpbk9wdGlvbnMsXG4gIEdldEtleXNGb3JTaWduaW5nT3B0aW9ucyxcbiAgSUtleWNoYWlucyxcbiAgS2V5Y2hhaW4sXG4gIExpc3RLZXljaGFpbk9wdGlvbnMsXG4gIExpc3RLZXljaGFpbnNSZXN1bHQsXG4gIFJlY3JlYXRlTXBjT3B0aW9ucyxcbiAgUm90YXRlS2V5Y2hhaW5PcHRpb25zLFxuICBVcGRhdGVQYXNzd29yZE9wdGlvbnMsXG4gIFVwZGF0ZVNpbmdsZUtleWNoYWluUGFzc3dvcmRPcHRpb25zLFxufSBmcm9tICcuL2lLZXljaGFpbnMnO1xuaW1wb3J0IHsgQml0R29LZXlGcm9tT3ZjU2hhcmVzLCBCaXRHb1RvT3ZjSlNPTiwgT3ZjVG9CaXRHb0pTT04gfSBmcm9tICcuL292Y0pzb25Db2RlYyc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uVmVyc2lvbiwgSUVuY3J5cHRpb25TZXNzaW9uIH0gZnJvbSAnLi4vLi4vYXBpJztcblxuZXhwb3J0IGNsYXNzIEtleWNoYWlucyBpbXBsZW1lbnRzIElLZXljaGFpbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IGJpdGdvOiBCaXRHb0Jhc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZUNvaW46IElCYXNlQ29pbjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBiYXNlQ29pbjogSUJhc2VDb2luKSB7XG4gICAgdGhpcy5iaXRnbyA9IGJpdGdvO1xuICAgIHRoaXMuYmFzZUNvaW4gPSBiYXNlQ29pbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBrZXljaGFpbiBieSBJRFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMuaWRcbiAgICogQHBhcmFtIHBhcmFtcy54cHViIChvcHRpb25hbClcbiAgICogQHBhcmFtIHBhcmFtcy5ldGhBZGRyZXNzIChvcHRpb25hbClcbiAgICogQHBhcmFtIHBhcmFtcy5yZXFJZCAob3B0aW9uYWwpXG4gICAqL1xuICBhc3luYyBnZXQocGFyYW1zOiBHZXRLZXljaGFpbk9wdGlvbnMpOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgY29tbW9uLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywgW10sIFsneHB1YicsICdldGhBZGRyZXNzJ10pO1xuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zLmlkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpZCBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IHBhcmFtcy5pZDtcbiAgICBpZiAocGFyYW1zLnJlcUlkKSB7XG4gICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocGFyYW1zLnJlcUlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMuYmFzZUNvaW4udXJsKCcva2V5LycgKyBlbmNvZGVVUklDb21wb25lbnQoaWQpKSkucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogbGlzdCB0aGUgdXNlcnMga2V5Y2hhaW5zXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy5saW1pdCAtIE1heCBudW1iZXIgb2YgcmVzdWx0cyBpbiBhIHNpbmdsZSBjYWxsLlxuICAgKiBAcGFyYW0gcGFyYW1zLnByZXZJZCAtIENvbnRpbnVlIGl0ZXJhdGluZyAocHJvdmlkZWQgYnkgbmV4dEJhdGNoUHJldklkIGluIHRoZSBwcmV2aW91cyBsaXN0KVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGFzeW5jIGxpc3QocGFyYW1zOiBMaXN0S2V5Y2hhaW5PcHRpb25zID0ge30pOiBQcm9taXNlPExpc3RLZXljaGFpbnNSZXN1bHQ+IHtcbiAgICBjb25zdCBxdWVyeU9iamVjdDogYW55ID0ge307XG5cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1zLmxpbWl0KSkge1xuICAgICAgaWYgKCFfLmlzTnVtYmVyKHBhcmFtcy5saW1pdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGxpbWl0IGFyZ3VtZW50LCBleHBlY3RpbmcgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgICBxdWVyeU9iamVjdC5saW1pdCA9IHBhcmFtcy5saW1pdDtcbiAgICB9XG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtcy5wcmV2SWQpKSB7XG4gICAgICBpZiAoIV8uaXNTdHJpbmcocGFyYW1zLnByZXZJZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHByZXZJZCBhcmd1bWVudCwgZXhwZWN0aW5nIHN0cmluZycpO1xuICAgICAgfVxuICAgICAgcXVlcnlPYmplY3QucHJldklkID0gcGFyYW1zLnByZXZJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iaXRnby5nZXQodGhpcy5iYXNlQ29pbi51cmwoJy9rZXknKSkucXVlcnkocXVlcnlPYmplY3QpLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgZGVjcnlwdGlvbiBwYXNzd29yZCBmb3IgYWxsIHBvc3NpYmxlIGtleWNoYWlucyBhc3NvY2lhdGVkIHdpdGggYSB1c2VyLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggYWxsIGtleXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLCBkZWNyeXB0c1xuICAgKiB0aGVtIHdpdGggdGhlIG9sZCBwYXNzd29yZCBhbmQgcmUtZW5jcnlwdHMgdGhlbSB3aXRoIHRoZSBuZXcgcGFzc3dvcmQuXG4gICAqXG4gICAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgdXNlciBjaGFuZ2VzIHRoZWlyIGxvZ2luIHBhc3N3b3JkLCBhbmQgYXJlIGV4cGVjdGluZ1xuICAgKiB0aGF0IHRoZWlyIHdhbGxldCBwYXNzd29yZHMgYXJlIGNoYW5nZWQgdG8gbWF0Y2ggdGhlIG5ldyBsb2dpbiBwYXNzd29yZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLm9sZFBhc3N3b3JkIC0gVGhlIG9sZCBwYXNzd29yZCB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAgICogQHBhcmFtIHBhcmFtcy5uZXdQYXNzd29yZCAtIFRoZSBuZXcgcGFzc3dvcmQgdG8gYmUgdXNlZCBmb3IgZW5jcnlwdGluZyB0aGUga2V5XG4gICAqIEByZXR1cm5zIGNoYW5nZWRLZXlzIE9iamVjdCAtIGUuZy46XG4gICAqICB7XG4gICAqICAgIHhwdWIxOiBlbmNyeXB0ZWRQcnYsXG4gICAqICAgIC4uLlxuICAgKiAgfVxuICAgKi9cbiAgYXN5bmMgdXBkYXRlUGFzc3dvcmQocGFyYW1zOiBVcGRhdGVQYXNzd29yZE9wdGlvbnMpOiBQcm9taXNlPENoYW5nZWRLZXljaGFpbnM+IHtcbiAgICBjb21tb24udmFsaWRhdGVQYXJhbXMocGFyYW1zLCBbJ29sZFBhc3N3b3JkJywgJ25ld1Bhc3N3b3JkJ10sIFtdKTtcbiAgICBjb25zdCBjaGFuZ2VkS2V5czogQ2hhbmdlZEtleWNoYWlucyA9IHt9O1xuICAgIGxldCBwcmV2SWQ7XG4gICAgbGV0IGtleXNMZWZ0ID0gdHJ1ZTtcbiAgICB3aGlsZSAoa2V5c0xlZnQpIHtcbiAgICAgIGNvbnN0IHJlc3VsdDogTGlzdEtleWNoYWluc1Jlc3VsdCA9IGF3YWl0IHRoaXMubGlzdCh7IGxpbWl0OiA1MDAsIHByZXZJZCB9KTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc3VsdC5rZXlzKSB7XG4gICAgICAgIGNvbnN0IG9sZEVuY3J5cHRlZFBydiA9IGtleS5lbmNyeXB0ZWRQcnY7XG4gICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKG9sZEVuY3J5cHRlZFBydikpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRLZXljaGFpbiA9IGF3YWl0IHRoaXMudXBkYXRlU2luZ2xlS2V5Y2hhaW5QYXNzd29yZCh7XG4gICAgICAgICAgICBrZXljaGFpbjoga2V5LFxuICAgICAgICAgICAgb2xkUGFzc3dvcmQ6IHBhcmFtcy5vbGRQYXNzd29yZCxcbiAgICAgICAgICAgIG5ld1Bhc3N3b3JkOiBwYXJhbXMubmV3UGFzc3dvcmQsXG4gICAgICAgICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICAgICAgZW5jcnlwdGlvblNlc3Npb246IHBhcmFtcy5lbmNyeXB0aW9uU2Vzc2lvbixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodXBkYXRlZEtleWNoYWluLmVuY3J5cHRlZFBydikge1xuICAgICAgICAgICAgLy8gQm90aCBUU1MgYW5kIG11bHRpLXVzZXItb2ZjIGtleXMgaGF2ZSBtdWx0aXBsZSBwdWJsaWMga2V5cyBpbiB0aGVpciBrZXkgZG9jdW1lbnQgYW5kIHRodXMgbmVlZCB0byB1c2Ugb2JqZWN0SURcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRLZXlJZGVudGlmaWVyID1cbiAgICAgICAgICAgICAgdXBkYXRlZEtleWNoYWluLnR5cGUgPT09ICd0c3MnIHx8IEtleWNoYWlucy5pc011bHRpVXNlcktleSh1cGRhdGVkS2V5Y2hhaW4pXG4gICAgICAgICAgICAgICAgPyB1cGRhdGVkS2V5Y2hhaW4uaWRcbiAgICAgICAgICAgICAgICA6IHVwZGF0ZWRLZXljaGFpbi5wdWI7XG4gICAgICAgICAgICBpZiAoY2hhbmdlZEtleUlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgY2hhbmdlZEtleXNbY2hhbmdlZEtleUlkZW50aWZpZXJdID0gdXBkYXRlZEtleWNoYWluLmVuY3J5cHRlZFBydjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZiB0aGUgcGFzc3dvcmQgd2FzIGluY29ycmVjdCwgc2lsZW5jZSB0aGUgZXJyb3IsIHRocm93IG90aGVyd2lzZS5cbiAgICAgICAgICAvLyB1cGRhdGVTaW5nbGVLZXljaGFpblBhc3N3b3JkIHdyYXBzIGEgd3JvbmctcGFzc3dvcmQgKG9yIGNvcnJ1cHQgaW5wdXQpIGZhaWx1cmUgYXNcbiAgICAgICAgICAvLyAnZmFpbGVkIHRvIHVwZGF0ZSBrZXljaGFpbiBwYXNzd29yZDogLi4uJywgc28gdHJlYXQgdGhhdCBhcyBhIHNraXAtYWJsZSBlcnJvci5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhZS5tZXNzYWdlLmluY2x1ZGVzKCdwcml2YXRlIGtleSBpcyBpbmNvcnJlY3QnKSAmJlxuICAgICAgICAgICAgIWUubWVzc2FnZS5pbmNsdWRlcygnZmFpbGVkIHRvIHVwZGF0ZSBrZXljaGFpbiBwYXNzd29yZCcpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdC5uZXh0QmF0Y2hQcmV2SWQpIHtcbiAgICAgICAgcHJldklkID0gcmVzdWx0Lm5leHRCYXRjaFByZXZJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXNMZWZ0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkS2V5cztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGVuY3J5cHRpb24gdmVyc2lvbiBvZiBhIGNpcGhlcnRleHQgYnkgaW5zcGVjdGluZyBpdHMgXCJ2XCIgZmllbGQuXG4gICAqICAgLSB2MSAoU0pDTCAvIFBCS0RGMi1TSEEyNTYgKyBBRVMtMjU2LUNDTSk6IFwidlwiIGFic2VudCBvciBleHBsaWNpdGx5IDFcbiAgICogICAtIHYyIChBcmdvbjJpZCArIEFFUy0yNTYtR0NNKTogXCJ2XCIgPT09IDJcbiAgICogVGhyb3dzIG9uIHVucmVjb2duaXplZCB2YWx1ZXMgc28gY2FsbGVycyBjYW5ub3Qgc2lsZW50bHkgbWlzLWhhbmRsZSB1bmtub3duIGVudmVsb3Blcy5cbiAgICovXG4gIGdldEVuY3J5cHRpb25WZXJzaW9uKGNpcGhlcnRleHQ6IHN0cmluZyk6IEVuY3J5cHRpb25WZXJzaW9uIHtcbiAgICBsZXQgZW52ZWxvcGU6IHsgdj86IHVua25vd24gfTtcbiAgICB0cnkge1xuICAgICAgZW52ZWxvcGUgPSBKU09OLnBhcnNlKGNpcGhlcnRleHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIGNpcGhlcnRleHQgZW52ZWxvcGU6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIGlmIChlbnZlbG9wZS52ID09PSAyKSB7XG4gICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgaWYgKGVudmVsb3BlLnYgPT09IHVuZGVmaW5lZCB8fCBlbnZlbG9wZS52ID09PSAxKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQgZW5jcnlwdGlvbiB2ZXJzaW9uOiAke1N0cmluZyhlbnZlbG9wZS52KX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBhc3N3b3JkIHVzZWQgdG8gZGVjcnlwdCBhIHNpbmdsZSBrZXljaGFpbi4gRGVmYXVsdHMgdG8gcHJlc2VydmluZyB0aGVcbiAgICogc291cmNlIGVudmVsb3BlIHZlcnNpb24gKHYxIHN0YXlzIHYxLCB2MiBzdGF5cyB2MiksIHNvIHRoaXMgaXMgYSBuby1vcCB3aXRoIHJlc3BlY3QgdG9cbiAgICogZW5jcnlwdGlvbiB2ZXJzaW9uIHVubGVzcyB0aGUgY2FsbGVyIG9wdHMgaW4uIFBhc3MgYGVuY3J5cHRpb25WZXJzaW9uOiAyYCB0byBleHBsaWNpdGx5XG4gICAqIHVwZ3JhZGUgYSB2MSAoU0pDTCkga2V5Y2hhaW4gdG8gdjIgKEFyZ29uMmlkICsgQUVTLTI1Ni1HQ00pIGFzIHBhcnQgb2YgdGhlIHBhc3N3b3JkIGNoYW5nZVxuICAgKiAoZS5nLiBvbmNlIGEgY2FsbGVyIGlzIHJlYWR5LCBhZnRlciB0aGUgU2VwdCAxNSBicmVha2luZy1jaGFuZ2Ugd2luZG93IGNsb3NlcykuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbiAtIFRoZSBrZXljaGFpbiB3aG9zZSBwYXNzd29yZCBzaG91bGQgYmUgdXBkYXRlZFxuICAgKiBAcGFyYW0gcGFyYW1zLm9sZFBhc3N3b3JkIC0gVGhlIG9sZCBwYXNzd29yZCB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBrZXlcbiAgICogQHBhcmFtIHBhcmFtcy5uZXdQYXNzd29yZCAtIFRoZSBuZXcgcGFzc3dvcmQgdG8gYmUgdXNlZCBmb3IgZW5jcnlwdGluZyB0aGUga2V5XG4gICAqIEBwYXJhbSBwYXJhbXMuZW5jcnlwdGlvblZlcnNpb24gLSBPcHRpb25hbCBlbnZlbG9wZSB2ZXJzaW9uIHRvIGVtaXQ7IGRlZmF1bHRzIHRvIHRoZSBzb3VyY2UgZW52ZWxvcGUncyB2ZXJzaW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEtleWNoYWluPn1cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVNpbmdsZUtleWNoYWluUGFzc3dvcmQocGFyYW1zOiBVcGRhdGVTaW5nbGVLZXljaGFpblBhc3N3b3JkT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxLZXljaGFpbj4ge1xuICAgIGlmICghXy5pc1N0cmluZyhwYXJhbXMub2xkUGFzc3dvcmQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIG9sZCBwYXNzd29yZCB0byBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICghXy5pc1N0cmluZyhwYXJhbXMubmV3UGFzc3dvcmQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIG5ldyBwYXNzd29yZCB0byBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICghXy5pc09iamVjdChwYXJhbXMua2V5Y2hhaW4pIHx8ICFfLmlzU3RyaW5nKHBhcmFtcy5rZXljaGFpbi5lbmNyeXB0ZWRQcnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIGtleWNoYWluIHRvIGJlIGFuIG9iamVjdCB3aXRoIGFuIGVuY3J5cHRlZFBydiBwcm9wZXJ0eScpO1xuICAgIH1cblxuICAgIGNvbnN0IG9sZEVuY3J5cHRlZFBydiA9IHBhcmFtcy5rZXljaGFpbi5lbmNyeXB0ZWRQcnY7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY3J5cHRlZFBydiA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdCh7IGlucHV0OiBvbGRFbmNyeXB0ZWRQcnYsIHBhc3N3b3JkOiBwYXJhbXMub2xkUGFzc3dvcmQgfSk7XG4gICAgICBjb25zdCBuZXdFbmNyeXB0ZWRQcnYgPSBwYXJhbXMuZW5jcnlwdGlvblNlc3Npb25cbiAgICAgICAgPyBhd2FpdCBwYXJhbXMuZW5jcnlwdGlvblNlc3Npb24uZW5jcnlwdChkZWNyeXB0ZWRQcnYpXG4gICAgICAgIDogYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0KHtcbiAgICAgICAgICAgIGlucHV0OiBkZWNyeXB0ZWRQcnYsXG4gICAgICAgICAgICBwYXNzd29yZDogcGFyYW1zLm5ld1Bhc3N3b3JkLFxuICAgICAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbiA/PyB0aGlzLmdldEVuY3J5cHRpb25WZXJzaW9uKG9sZEVuY3J5cHRlZFBydiksXG4gICAgICAgICAgfSk7XG4gICAgICByZXR1cm4gXy5hc3NpZ24oe30sIHBhcmFtcy5rZXljaGFpbiwgeyBlbmNyeXB0ZWRQcnY6IG5ld0VuY3J5cHRlZFBydiB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBjYXRjaGluZyBhbiBlcnJvciBoZXJlIG1lYW5zIHRoYXQgdGhlIHBhc3N3b3JkIHdhcyBpbmNvcnJlY3Qgb3IsIGxlc3MgbGlrZWx5LCB0aGUgaW5wdXQgdG8gZGVjcnlwdCBpcyBjb3JydXB0ZWRcbiAgICAgIGNvbnN0IGVycm9yRGV0YWlsID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gdXBkYXRlIGtleWNoYWluIHBhc3N3b3JkOiAke2Vycm9yRGV0YWlsfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNyeXB0IGFuIGVuY3J5cHRlZCBwcml2YXRlIGtleSB3aXRoIGBwYXNzcGhyYXNlYCBhbmQgcmUtZW5jcnlwdCBpdCBhcyBhIHYyXG4gICAqIChBcmdvbjJpZCArIEFFUy0yNTYtR0NNKSBlbnZlbG9wZSB3aXRoIHRoZSBzYW1lIHBhc3NwaHJhc2UuXG4gICAqXG4gICAqIFVzZWQgdG8gdXBncmFkZSBsZWdhY3kgdjEgKFNKQ0wpIGVudmVsb3BlcyB0byB2MiB3aXRob3V0IGNoYW5naW5nIHRoZSBwYXNzcGhyYXNlLlxuICAgKiBDYWxsZXJzIHRoYXQgbmVlZCB0byB0cnkgYSBmYWxsYmFjayBwYXNzcGhyYXNlIChlLmcuIGFuIG9yaWdpbmFsIHBhc3NwaHJhc2UgZnJvbVxuICAgKiBiZWZvcmUgYSBwYXNzd29yZCByb3RhdGlvbikgc2hvdWxkIGhhbmRsZSB0aGF0IHRoZW1zZWx2ZXMg4oCUIHRoaXMgcHJpbWl0aXZlIGRvZXMgb25lXG4gICAqIHRoaW5nIGFuZCBsZXRzIGRlY3J5cHRpb24gZXJyb3JzIHN1cmZhY2UgZGlyZWN0bHkuXG4gICAqL1xuICBhc3luYyByZWVuY3J5cHRBc1YyKGVuY3J5cHRlZFBydjogc3RyaW5nLCBwYXNzcGhyYXNlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHBydiA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdCh7IGlucHV0OiBlbmNyeXB0ZWRQcnYsIHBhc3N3b3JkOiBwYXNzcGhyYXNlIH0pO1xuICAgIHJldHVybiB0aGlzLmJpdGdvLmVuY3J5cHQoeyBpbnB1dDogcHJ2LCBwYXNzd29yZDogcGFzc3BocmFzZSwgZW5jcnlwdGlvblZlcnNpb246IDIgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgcHVibGljL3ByaXZhdGUga2V5IHBhaXJcbiAgICogQHBhcmFtIHBhcmFtcyAtIG9wdGlvbmFsIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnNlZWQgb3B0aW9uYWwgLSBzZWVkIHRvIHVzZSBmb3Iga2V5cGFpciBnZW5lcmF0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMuaXNSb290S2V5IG9wdGlvbmFsIC0gd2hldGhlciB0aGUgcmVzdWx0aW5nIGtleXBhaXIgc2hvdWxkIGJlIGEgcm9vdCBrZXlcbiAgICogQHJldHVybnMge0tleVBhaXJ9IC0gdGhlIGdlbmVyYXRlZCBrZXlwYWlyXG4gICAqL1xuICBjcmVhdGUocGFyYW1zOiB7IHNlZWQ/OiBCdWZmZXI7IGlzUm9vdEtleT86IGJvb2xlYW4gfSA9IHt9KTogS2V5UGFpciB7XG4gICAgaWYgKHBhcmFtcz8uaXNSb290S2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5iYXNlQ29pbi5nZW5lcmF0ZVJvb3RLZXlQYWlyKHBhcmFtcy5zZWVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYmFzZUNvaW4uZ2VuZXJhdGVLZXlQYWlyKHBhcmFtcy5zZWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBrZXljaGFpbiB0byBCaXRHbydzIHJlY29yZHNcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgYWRkKHBhcmFtczogQWRkS2V5Y2hhaW5PcHRpb25zID0ge30pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuICAgIGNvbW1vbi52YWxpZGF0ZVBhcmFtcyhcbiAgICAgIHBhcmFtcyxcbiAgICAgIFtdLFxuICAgICAgW1xuICAgICAgICAncHViJyxcbiAgICAgICAgJ2VuY3J5cHRlZFBydicsXG4gICAgICAgICdrZXlUeXBlJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAnc291cmNlJyxcbiAgICAgICAgJ29yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZScsXG4gICAgICAgICdlbnRlcnByaXNlJyxcbiAgICAgICAgJ2Rlcml2ZWRGcm9tUGFyZW50V2l0aFNlZWQnLFxuICAgICAgICAnZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aCcsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAnc2FmZUlkJyxcbiAgICAgIF1cbiAgICApO1xuXG4gICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtcy5kaXNhYmxlS1JTRW1haWwpKSB7XG4gICAgICBpZiAoIV8uaXNCb29sZWFuKHBhcmFtcy5kaXNhYmxlS1JTRW1haWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBkaXNhYmxlS1JTRW1haWwgYXJndW1lbnQsIGV4cGVjdGluZyBib29sZWFuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5yZXFJZCkge1xuICAgICAgdGhpcy5iaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHBhcmFtcy5yZXFJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMuYmFzZUNvaW4udXJsKCcva2V5JykpXG4gICAgICAuc2VuZCh7XG4gICAgICAgIHB1YjogcGFyYW1zLnB1YixcbiAgICAgICAgY29tbW9uUHViOiBwYXJhbXMuY29tbW9uUHViLFxuICAgICAgICBjb21tb25LZXljaGFpbjogcGFyYW1zLmNvbW1vbktleWNoYWluLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IHBhcmFtcy5lbmNyeXB0ZWRQcnYsXG4gICAgICAgIHR5cGU6IHBhcmFtcy50eXBlLFxuICAgICAgICBrZXlUeXBlOiBwYXJhbXMua2V5VHlwZSxcbiAgICAgICAgc291cmNlOiBwYXJhbXMuc291cmNlLFxuICAgICAgICBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6IHBhcmFtcy5vcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUsXG4gICAgICAgIGVudGVycHJpc2U6IHBhcmFtcy5lbnRlcnByaXNlLFxuICAgICAgICBkZXJpdmVkRnJvbVBhcmVudFdpdGhTZWVkOiBwYXJhbXMuZGVyaXZlZEZyb21QYXJlbnRXaXRoU2VlZCxcbiAgICAgICAgZGVyaXZlZEZyb21QYXJlbnRXaXRoUGF0aDogcGFyYW1zLmRlcml2ZWRGcm9tUGFyZW50V2l0aFBhdGgsXG4gICAgICAgIHBhcmVudDogcGFyYW1zLnBhcmVudCxcbiAgICAgICAgZGlzYWJsZUtSU0VtYWlsOiBwYXJhbXMuZGlzYWJsZUtSU0VtYWlsLFxuICAgICAgICBrcnNTcGVjaWZpYzogcGFyYW1zLmtyc1NwZWNpZmljLFxuICAgICAgICBrZXlTaGFyZXM6IHBhcmFtcy5rZXlTaGFyZXMsXG4gICAgICAgIHVzZXJHUEdQdWJsaWNLZXk6IHBhcmFtcy51c2VyR1BHUHVibGljS2V5LFxuICAgICAgICBiYWNrdXBHUEdQdWJsaWNLZXk6IHBhcmFtcy5iYWNrdXBHUEdQdWJsaWNLZXksXG4gICAgICAgIGFsZ29Vc2VkOiBwYXJhbXMuYWxnb1VzZWQsXG4gICAgICAgIGlzRGlzdHJpYnV0ZWRDdXN0b2R5OiBwYXJhbXMuaXNEaXN0cmlidXRlZEN1c3RvZHksXG4gICAgICAgIGlzTVBDdjI6IHBhcmFtcy5pc01QQ3YyLFxuICAgICAgICBjb2luU3BlY2lmaWM6IHBhcmFtcy5jb2luU3BlY2lmaWMsXG4gICAgICAgIHdlYmF1dGhuRGV2aWNlczogcGFyYW1zLndlYmF1dGhuRGV2aWNlcyxcbiAgICAgICAgd2ViYXV0aG5JbmZvOiBwYXJhbXMud2ViYXV0aG5JbmZvLFxuICAgICAgICBzYWZlSWQ6IHBhcmFtcy5zYWZlSWQsXG4gICAgICB9KVxuICAgICAgLnJlc3VsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEJpdEdvIGtleVxuICAgKiBAcGFyYW0gcGFyYW1zIChlbXB0eSlcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJpdEdvKHBhcmFtczogQ3JlYXRlQml0R29PcHRpb25zID0ge30pOiBQcm9taXNlPEtleWNoYWluPiB7XG4gICAgcGFyYW1zLnNvdXJjZSA9ICdiaXRnbyc7XG5cbiAgICB0aGlzLmJhc2VDb2luLnByZUNyZWF0ZUJpdEdvKHBhcmFtcyBhcyBhbnkpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmFkZChwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGJhY2t1cCBrZXlcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnByb3ZpZGVyIChvcHRpb25hbClcbiAgICovXG4gIGFzeW5jIGNyZWF0ZUJhY2t1cChwYXJhbXM6IENyZWF0ZUJhY2t1cE9wdGlvbnMgPSB7fSk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBwYXJhbXMuc291cmNlID0gJ2JhY2t1cCc7XG5cbiAgICBjb25zdCBpc1Rzc0JhY2t1cEtleSA9IHBhcmFtcy5wcnYgJiYgKHBhcmFtcy5jb21tb25LZXljaGFpbiB8fCBwYXJhbXMuY29tbW9uUHViKTtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy5wcm92aWRlcikgJiYgIWlzVHNzQmFja3VwS2V5KSB7XG4gICAgICAvLyBpZiB0aGUgcHJvdmlkZXIgaXMgdW5kZWZpbmVkLCB3ZSBnZW5lcmF0ZSBhIGxvY2FsIGtleSBhbmQgYWRkIHRoZSBzb3VyY2UgZGV0YWlsc1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jcmVhdGUoKTtcbiAgICAgIF8uZXh0ZW5kKHBhcmFtcywga2V5KTtcbiAgICAgIGlmIChwYXJhbXMucGFzc3BocmFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIF8uZXh0ZW5kKHBhcmFtcywge1xuICAgICAgICAgIGVuY3J5cHRlZFBydjogYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0KHtcbiAgICAgICAgICAgIGlucHV0OiBrZXkucHJ2LFxuICAgICAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzcGhyYXNlLFxuICAgICAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbixcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2FsbGV0IFNhZmVzIHYxIHNsb3Qg4pGjIChgZWQyNTUxOU11bHRpc2lnYCk6IHN0b3JlIG5ldXRyYWwgcmF3IGRlcml2YXRpb24gbWF0ZXJpYWwgYXNcbiAgICAvLyBwdWJsaWNLZXkzMiB8fCBjaGFpbkNvZGUzMiwgc2VyaWFsaXplZCB0b2dldGhlciBhcyBjYW5vbmljYWwgdW5wYWRkZWQgUkZDIDQ2NDggYmFzZTMyXG4gICAgLy8gKGV4YWN0bHkgMTAzIHVwcGVyY2FzZSBjaGFyYWN0ZXJzKS4gVGhlIHJvb3QgaXMgZGVsaWJlcmF0ZWx5IG5vdCBlbmNvZGVkIGFzIGFcbiAgICAvLyBTdGVsbGFyL0FsZ29yYW5kL0hCQVIgcHVibGljIGtleTsgY29pbi1zcGVjaWZpYyBlbmNvZGluZyBoYXBwZW5zIGFmdGVyIHB1YmxpYyBzb2Z0XG4gICAgLy8gZGVyaXZhdGlvbiB3aGVuIHRoZSB3YWxsZXQgY2hpbGQgaXMgbWludGVkLlxuICAgIGNvbnN0IHdpdGhLZXkgPSBwYXJhbXMgYXMgQ3JlYXRlQmFja3VwT3B0aW9ucyAmIHsgcHViPzogc3RyaW5nIH07XG4gICAgaWYgKHBhcmFtcy5zYWZlSWQgIT09IHVuZGVmaW5lZCAmJiB3aXRoS2V5LnB1YiAhPT0gdW5kZWZpbmVkICYmIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KHdpdGhLZXkucHViKSkge1xuICAgICAgd2l0aEtleS5wdWIgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKGRlY29kZUVkMjU1MTlTdHJLZXlQdWJsaWNLZXkod2l0aEtleS5wdWIpLCBnZW5lcmF0ZUVkMjU1MTlDaGFpbkNvZGUoKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmVyUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFkZChwYXJhbXMpO1xuICAgIHJldHVybiBfLmV4dGVuZCh7fSwgc2VydmVyUmVzcG9uc2UsIF8ucGljayhwYXJhbXMsIFsncHJ2JywgJ2VuY3J5cHRlZFBydicsICdwcm92aWRlcicsICdzb3VyY2UnXSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMga2V5cyBmb3Igc2lnbmluZyBmcm9tIGEgd2FsbGV0XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8S2V5Y2hhaW5bXT59XG4gICAqL1xuICBhc3luYyBnZXRLZXlzRm9yU2lnbmluZyhwYXJhbXM6IEdldEtleXNGb3JTaWduaW5nT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxLZXljaGFpbltdPiB7XG4gICAgaWYgKCFfLmlzT2JqZWN0KHBhcmFtcy53YWxsZXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gd2FsbGV0Jyk7XG4gICAgfVxuICAgIGNvbnN0IHdhbGxldCA9IHBhcmFtcy53YWxsZXQ7XG4gICAgY29uc3QgcmVxSWQgPSBwYXJhbXMucmVxSWQgfHwgbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICBjb25zdCBpZHMgPSB3YWxsZXQuYmFzZUNvaW4ua2V5SWRzRm9yU2lnbmluZygpO1xuICAgIGNvbnN0IGtleWNoYWluUXVlcmllc0JsdWViaXJkcyA9IGlkcy5tYXAoKGlkKSA9PiB0aGlzLmdldCh7IGlkOiB3YWxsZXQua2V5SWRzKClbaWRdLCByZXFJZCB9KSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGtleWNoYWluUXVlcmllc0JsdWViaXJkcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gY3JlYXRlIGFuZCBzdG9yZSBNUEMga2V5Y2hhaW5zIHdpdGggQml0R28uXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFzc3BocmFzZSB1c2VkIHRvIGVuY3J5cHQgc2VjcmV0IG1hdGVyaWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+fSBuZXdseSBjcmVhdGVkIFVzZXIsIEJhY2t1cCwgYW5kIEJpdEdvIGtleXNcbiAgICovXG4gIGFzeW5jIGNyZWF0ZU1wYyhwYXJhbXM6IENyZWF0ZU1wY09wdGlvbnMpOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBpZiAocGFyYW1zLm11bHRpc2lnVHlwZSAhPT0gJ3RzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbXVsdGktc2lnIHR5cGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0c3NTZXR0aW5nczogVHNzU2V0dGluZ3MgPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAuZ2V0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCgnL2FwaS92Mi90c3Mvc2V0dGluZ3MnKSlcbiAgICAgIC5xdWVyeSh7IGVudGVycHJpc2U6IHBhcmFtcy5lbnRlcnByaXNlIH0pXG4gICAgICAucmVzdWx0KCk7XG4gICAgY29uc3QgbXVsdGlzaWdUeXBlVmVyc2lvbiA9XG4gICAgICB0c3NTZXR0aW5ncy5jb2luU2V0dGluZ3NbdGhpcy5iYXNlQ29pbi5nZXRGYW1pbHkoKV0/LndhbGxldENyZWF0aW9uU2V0dGluZ3M/Lm11bHRpU2lnVHlwZVZlcnNpb247XG5cbiAgICBjb25zdCBpc01QQ3YyID0gbXVsdGlzaWdUeXBlVmVyc2lvbiA9PT0gJ01QQ3YyJztcbiAgICBpZiAocGFyYW1zLnNhZmVJZCAmJiAhaXNNUEN2Mikge1xuICAgICAgLy8gVGhlIGxlZ2FjeSBNUEN2MSBjZXJlbW9uaWVzIGFjY2VwdCBhIHNhZmVJZCBmb3Igc2lnbmF0dXJlIGNvbXBhdGliaWxpdHkgYnV0IHNpbGVudGx5XG4gICAgICAvLyBpZ25vcmUgaXQgKHNlZSBFRERTQVV0aWxzLmRlZmF1bHQuY3JlYXRlS2V5Y2hhaW5zIC8gRUNEU0FVdGlscy5FY2RzYVV0aWxzLmNyZWF0ZUtleWNoYWlucyksXG4gICAgICAvLyBzbyB0aGUgcmVzdWx0aW5nIGtleXMgbmV2ZXIgZ2V0IHRhZ2dlZCB3aXRoIHRoZSBzYWZlIGFuZCBXUCdzIGZpbmFsaXplIHN0ZXAgcmVqZWN0cyB0aGVtXG4gICAgICAvLyB3aXRoIGEgZ2VuZXJpYyA0MDAuIEZhaWwgZmFzdCBoZXJlIGluc3RlYWQgb2YgbGV0dGluZyB0aGF0IGNvbmZ1c2luZyBlcnJvciBzdXJmYWNlIGxhdGVyLlxuICAgICAgdGhyb3cgbmV3IFNhZmVNcGNDZXJlbW9ueVVuc3VwcG9ydGVkRXJyb3IodGhpcy5iYXNlQ29pbi5nZXRGYW1pbHkoKSk7XG4gICAgfVxuXG4gICAgLy8gQSBzYWZlSWQgb24gYSBrZXlnZW4gY2VyZW1vbnkgc2VsZWN0cyB0aGUgVlJGIHZhcmlhbnQsIHdoaWNoIGFkZGl0aW9uYWxseSBydW5zIHRoZVxuICAgIC8vIFZSRiBES0cgYWxvbmdzaWRlIHRoZSBzaWduaW5nIERLRy4gT3JkaW5hcnkgVFNTIHdhbGxldCBjcmVhdGlvbiBuZXZlciBzZXRzIHNhZmVJZFxuICAgIC8vIGFuZCBrZWVwcyB0aGUgcGxhaW4gTVBDdjIgZmxvdy5cbiAgICBsZXQgTXBjVXRpbHM7XG4gICAgaWYgKHRoaXMuYmFzZUNvaW4uZ2V0TVBDQWxnb3JpdGhtKCkgPT09ICdlZGRzYScpIHtcbiAgICAgIE1wY1V0aWxzID0gaXNNUEN2MlxuICAgICAgICA/IHBhcmFtcy5zYWZlSWRcbiAgICAgICAgICA/IEVERFNBVXRpbHMuRWRkc2FWcmZNUEN2MlV0aWxzXG4gICAgICAgICAgOiBFRERTQVV0aWxzLkVkZHNhTVBDdjJVdGlsc1xuICAgICAgICA6IEVERFNBVXRpbHMuZGVmYXVsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgTXBjVXRpbHMgPSBpc01QQ3YyXG4gICAgICAgID8gcGFyYW1zLnNhZmVJZFxuICAgICAgICAgID8gRUNEU0FVdGlscy5FY2RzYVZyZk1QQ3YyVXRpbHNcbiAgICAgICAgICA6IEVDRFNBVXRpbHMuRWNkc2FNUEN2MlV0aWxzXG4gICAgICAgIDogRUNEU0FVdGlscy5FY2RzYVV0aWxzO1xuICAgIH1cblxuICAgIGNvbnN0IG1wY1V0aWxzID0gbmV3IE1wY1V0aWxzKHRoaXMuYml0Z28sIHRoaXMuYmFzZUNvaW4pO1xuICAgIHJldHVybiBhd2FpdCBtcGNVdGlscy5jcmVhdGVLZXljaGFpbnMoe1xuICAgICAgcGFzc3BocmFzZTogcGFyYW1zLnBhc3NwaHJhc2UsXG4gICAgICBlbnRlcnByaXNlOiBwYXJhbXMuZW50ZXJwcmlzZSxcbiAgICAgIG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogcGFyYW1zLm9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSxcbiAgICAgIHJldHJvZml0OiBwYXJhbXMucmV0cm9maXQsXG4gICAgICB3ZWJhdXRobkluZm86IHBhcmFtcy53ZWJhdXRobkluZm8sXG4gICAgICBlbmNyeXB0aW9uVmVyc2lvbjogcGFyYW1zLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgc2FmZUlkOiBwYXJhbXMuc2FmZUlkLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVjcmVhdGVNcGMocGFyYW1zOiBSZWNyZWF0ZU1wY09wdGlvbnMpOiBQcm9taXNlPEtleWNoYWluc1RyaXBsZXQ+IHtcbiAgICBhc3NlcnQocGFyYW1zLmNvaW4sIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBjb2luJykpO1xuICAgIGFzc2VydChwYXJhbXMud2FsbGV0SWQsIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSB3YWxsZXRJZCcpKTtcbiAgICBhc3NlcnQocGFyYW1zLm90cCwgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIG90cCcpKTtcbiAgICBhc3NlcnQocGFyYW1zLnBhc3NwaHJhc2UsIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBwYXNzcGhyYXNlJykpO1xuXG4gICAgYXNzZXJ0KFxuICAgICAgcGFyYW1zLmVuY3J5cHRlZE1hdGVyaWFsLmVuY3J5cHRlZFdhbGxldFBhc3NwaHJhc2UsXG4gICAgICBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gZW5jcnlwdGVkV2FsbGV0UGFzc3BocmFzZScpXG4gICAgKTtcbiAgICBhc3NlcnQocGFyYW1zLmVuY3J5cHRlZE1hdGVyaWFsLmVuY3J5cHRlZFVzZXJLZXksIG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBwYXJhbSBlbmNyeXB0ZWRVc2VyS2V5JykpO1xuICAgIGFzc2VydChwYXJhbXMuZW5jcnlwdGVkTWF0ZXJpYWwuZW5jcnlwdGVkQmFja3VwS2V5LCBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0gZW5jcnlwdGVkQmFja3VwS2V5JykpO1xuXG4gICAgYXdhaXQgdGhpcy5iaXRnby5wb3N0KHRoaXMuYml0Z28ubWljcm9zZXJ2aWNlc1VybCgnL2FwaS92MS91c2VyL3VubG9jaycpKS5zZW5kKHsgb3RwOiBwYXJhbXMub3RwIH0pLnJlc3VsdCgpO1xuICAgIGNvbnN0IHsgcmVjb3ZlcnlJbmZvIH0gPSBhd2FpdCB0aGlzLmJpdGdvXG4gICAgICAucG9zdCh0aGlzLmJpdGdvLm1pY3Jvc2VydmljZXNVcmwoYC9hcGkvdjIvJHtwYXJhbXMuY29pbn0vd2FsbGV0LyR7cGFyYW1zLndhbGxldElkfS9wYXNzY29kZXJlY292ZXJ5YCkpXG4gICAgICAucmVzdWx0KCk7XG5cbiAgICBpZiAoIXJlY292ZXJ5SW5mbyB8fCAhKCdwYXNzY29kZUVuY3J5cHRpb25Db2RlJyBpbiByZWNvdmVyeUluZm8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBnZXQgcmVjb3ZlcnkgaW5mbycpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY3J5cHRlZFdhbGxldFBhc3NwaHJhc2UgPSBhd2FpdCB0aGlzLmJpdGdvLmRlY3J5cHQoe1xuICAgICAgaW5wdXQ6IHBhcmFtcy5lbmNyeXB0ZWRNYXRlcmlhbC5lbmNyeXB0ZWRXYWxsZXRQYXNzcGhyYXNlLFxuICAgICAgcGFzc3dvcmQ6IHJlY292ZXJ5SW5mby5wYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVjcnlwdGVkVXNlcktleSA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICBpbnB1dDogcGFyYW1zLmVuY3J5cHRlZE1hdGVyaWFsLmVuY3J5cHRlZFVzZXJLZXksXG4gICAgICBwYXNzd29yZDogZGVjcnlwdGVkV2FsbGV0UGFzc3BocmFzZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlY3J5cHRlZEJhY2t1cEtleSA9IGF3YWl0IHRoaXMuYml0Z28uZGVjcnlwdCh7XG4gICAgICBpbnB1dDogcGFyYW1zLmVuY3J5cHRlZE1hdGVyaWFsLmVuY3J5cHRlZEJhY2t1cEtleSxcbiAgICAgIHBhc3N3b3JkOiBkZWNyeXB0ZWRXYWxsZXRQYXNzcGhyYXNlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTXBjKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIG11bHRpc2lnVHlwZTogJ3RzcycsXG4gICAgICByZXRyb2ZpdDoge1xuICAgICAgICBkZWNyeXB0ZWRVc2VyS2V5LFxuICAgICAgICBkZWNyeXB0ZWRCYWNrdXBLZXksXG4gICAgICAgIHdhbGxldElkOiBwYXJhbXMud2FsbGV0SWQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHBhcnNlcyB0aGUgSlNPTiBkb3dubG9hZGVkIGZyb20gdGhlIE9WQyBmb3IgcGxhdGZvcm0gKEJpdEdvKSxcbiAgICogYW5kIGNyZWF0ZXMgYSBjb3JyZXNwb25kaW5nIFRTUyBCaXRHbyBrZXkuIEl0IGFsc28gcmV0dXJucyB0aGUgSlNPTiB0aGF0IG5lZWRzXG4gICAqIHRvIGJlIHVwbG9hZGVkIGJhY2sgdG8gdGhlIE9WQ3MgY29udGFpbmluZyB0aGUgQml0R28gLT4gT1ZDIHNoYXJlcy5cbiAgICogQHBhcmFtIG92Y091dHB1dEpzb24gSlNPTiBmb3JtYXQgb2YgdGhlIGZpbGUgZG93bmxvYWRlZCBmcm9tIHRoZSBPVkMgZm9yIHBsYXRmb3JtXG4gICAqIEBwYXJhbSBlbnRlcnByaXNlIE9wdGlvbmFsIGVudGVycHJpc2UgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXlcbiAgICogQHJldHVybnMge0JpdEdvS2V5RnJvbU92Y1NoYXJlc31cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVRzc0JpdEdvS2V5RnJvbU92Y1NoYXJlcyhvdmNPdXRwdXRKc29uOiB1bmtub3duLCBlbnRlcnByaXNlPzogc3RyaW5nKTogUHJvbWlzZTxCaXRHb0tleUZyb21PdmNTaGFyZXM+IHtcbiAgICBjb25zdCBkZWNvZGVkT3ZjT3V0cHV0ID0gZGVjb2RlT3JFbHNlKE92Y1RvQml0R29KU09OLm5hbWUsIE92Y1RvQml0R29KU09OLCBvdmNPdXRwdXRKc29uLCAoZXJyb3JzKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yKHMpIHBhcnNpbmcgT1ZDIEpTT046ICR7ZXJyb3JzfWApO1xuICAgIH0pO1xuXG4gICAgaWYgKGRlY29kZWRPdmNPdXRwdXQuc3RhdGUgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3RhdGUgZXhwZWN0ZWQgdG8gYmUgXCIxXCIuIFBsZWFzZSBjb21wbGV0ZSB0aGUgZmlyc3QgdHdvIE9WQyBvcGVyYXRpb25zJyk7XG4gICAgfVxuXG4gICAgLy8gT1ZDLTEgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBVc2VyIGtleVxuICAgIGNvbnN0IG92YzEgPSBkZWNvZGVkT3ZjT3V0cHV0Lm92Y1sxXTtcbiAgICAvLyBPVkMtMiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIEJhY2t1cCBrZXlcbiAgICBjb25zdCBvdmMyID0gZGVjb2RlZE92Y091dHB1dC5vdmNbMl07XG5cbiAgICBjb25zdCBrZXlTaGFyZXM6IEFwaUtleVNoYXJlW10gPSBbXG4gICAgICB7XG4gICAgICAgIGZyb206ICd1c2VyJyxcbiAgICAgICAgdG86ICdiaXRnbycsXG4gICAgICAgIHB1YmxpY1NoYXJlOiBvdmMxLm92Y1RvQml0Z29TaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgcHJpdmF0ZVNoYXJlOiBvdmMxLm92Y1RvQml0Z29TaGFyZS5wcml2YXRlU2hhcmUsXG4gICAgICAgIHByaXZhdGVTaGFyZVByb29mOiBvdmMxLm92Y1RvQml0Z29TaGFyZS51U2lnLnRvU3RyaW5nKCkgPz8gJycsXG4gICAgICAgIHZzc1Byb29mOiBvdmMxLm92Y1RvQml0Z29TaGFyZS52c3NQcm9vZiA/PyAnJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGZyb206ICdiYWNrdXAnLFxuICAgICAgICB0bzogJ2JpdGdvJyxcbiAgICAgICAgcHVibGljU2hhcmU6IG92YzIub3ZjVG9CaXRnb1NoYXJlLnB1YmxpY1NoYXJlLFxuICAgICAgICBwcml2YXRlU2hhcmU6IG92YzIub3ZjVG9CaXRnb1NoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgcHJpdmF0ZVNoYXJlUHJvb2Y6IG92YzIub3ZjVG9CaXRnb1NoYXJlLnVTaWcudG9TdHJpbmcoKSA/PyAnJyxcbiAgICAgICAgdnNzUHJvb2Y6IG92YzIub3ZjVG9CaXRnb1NoYXJlLnZzc1Byb29mID8/ICcnLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3Qga2V5ID0gYXdhaXQgdGhpcy5iYXNlQ29pbi5rZXljaGFpbnMoKS5hZGQoe1xuICAgICAgc291cmNlOiAnYml0Z28nLFxuICAgICAga2V5U2hhcmVzLFxuICAgICAga2V5VHlwZTogJ3RzcycsXG4gICAgICB1c2VyR1BHUHVibGljS2V5OiBvdmMxLmdwZ1B1YktleSxcbiAgICAgIGJhY2t1cEdQR1B1YmxpY0tleTogb3ZjMi5ncGdQdWJLZXksXG4gICAgICBlbnRlcnByaXNlLFxuICAgIH0pO1xuICAgIGFzc2VydChrZXkua2V5U2hhcmVzKTtcbiAgICBhc3NlcnQoa2V5LmNvbW1vbktleWNoYWluKTtcbiAgICBhc3NlcnQoa2V5LndhbGxldEhTTUdQR1B1YmxpY0tleVNpZ3MpO1xuXG4gICAgY29uc3QgYml0Z29Ub1VzZXJTaGFyZSA9IGtleS5rZXlTaGFyZXMuZmluZChcbiAgICAgICh2YWx1ZTogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSkgPT4gdmFsdWUuZnJvbSA9PT0gJ2JpdGdvJyAmJiB2YWx1ZS50byA9PT0gJ3VzZXInXG4gICAgKTtcbiAgICBhc3NlcnQoYml0Z29Ub1VzZXJTaGFyZSk7XG4gICAgYXNzZXJ0KGJpdGdvVG9Vc2VyU2hhcmUudnNzUHJvb2YpO1xuICAgIGFzc2VydChiaXRnb1RvVXNlclNoYXJlLnBhaWxsaWVyUHVibGljS2V5KTtcbiAgICBjb25zdCBiaXRnb1RvQmFja3VwU2hhcmUgPSBrZXkua2V5U2hhcmVzLmZpbmQoXG4gICAgICAodmFsdWU6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0pID0+IHZhbHVlLmZyb20gPT09ICdiaXRnbycgJiYgdmFsdWUudG8gPT09ICdiYWNrdXAnXG4gICAgKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cFNoYXJlKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cFNoYXJlLnZzc1Byb29mKTtcbiAgICBhc3NlcnQoYml0Z29Ub0JhY2t1cFNoYXJlLnBhaWxsaWVyUHVibGljS2V5KTtcblxuICAgIC8vIENyZWF0ZSBKU09OIGRhdGEgd2l0aCBwbGF0Zm9ybSBzaGFyZXMgZm9yIE9WQy0xIGFuZCBPVkMtMlxuICAgIGNvbnN0IGJpdGdvVG9PdmNPdXRwdXQ6IEJpdEdvVG9PdmNKU09OID0ge1xuICAgICAgd2FsbGV0OiB7XG4gICAgICAgIC4uLmRlY29kZWRPdmNPdXRwdXQsXG4gICAgICAgIHBsYXRmb3JtOiB7XG4gICAgICAgICAgY29tbW9uS2V5Y2hhaW46IGtleS5jb21tb25LZXljaGFpbixcbiAgICAgICAgICB3YWxsZXRHcGdQdWJLZXlTaWdzOiBrZXkud2FsbGV0SFNNR1BHUHVibGljS2V5U2lncyxcbiAgICAgICAgICBvdmM6IHtcbiAgICAgICAgICAgIC8vIEJpdEdvIHRvIFVzZXIgKE9WQy0xKVxuICAgICAgICAgICAgMToge1xuICAgICAgICAgICAgICBiaXRnb1RvT3ZjU2hhcmU6IHtcbiAgICAgICAgICAgICAgICBpOiAxLFxuICAgICAgICAgICAgICAgIGo6IDMsXG4gICAgICAgICAgICAgICAgcHVibGljU2hhcmU6IGJpdGdvVG9Vc2VyU2hhcmUucHVibGljU2hhcmUsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZVNoYXJlOiBiaXRnb1RvVXNlclNoYXJlLnByaXZhdGVTaGFyZSxcbiAgICAgICAgICAgICAgICBwYWlsbGllclB1YmxpY0tleTogYml0Z29Ub1VzZXJTaGFyZS5wYWlsbGllclB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICB2c3NQcm9vZjogYml0Z29Ub1VzZXJTaGFyZS52c3NQcm9vZixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBCaXRHbyB0byBCYWNrdXAgKE9WQy0yKVxuICAgICAgICAgICAgMjoge1xuICAgICAgICAgICAgICBiaXRnb1RvT3ZjU2hhcmU6IHtcbiAgICAgICAgICAgICAgICBpOiAyLFxuICAgICAgICAgICAgICAgIGo6IDMsXG4gICAgICAgICAgICAgICAgcHVibGljU2hhcmU6IGJpdGdvVG9CYWNrdXBTaGFyZS5wdWJsaWNTaGFyZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlU2hhcmU6IGJpdGdvVG9CYWNrdXBTaGFyZS5wcml2YXRlU2hhcmUsXG4gICAgICAgICAgICAgICAgcGFpbGxpZXJQdWJsaWNLZXk6IGJpdGdvVG9CYWNrdXBTaGFyZS5wYWlsbGllclB1YmxpY0tleSxcbiAgICAgICAgICAgICAgICB2c3NQcm9vZjogYml0Z29Ub0JhY2t1cFNoYXJlLnZzc1Byb29mLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLy8gTWFyayBpdCByZWFkeSBmb3IgbmV4dCBvcGVyYXRpb24sIHNob3VsZCBiZSAyXG4gICAgYml0Z29Ub092Y091dHB1dC53YWxsZXQuc3RhdGUgKz0gMTtcblxuICAgIGNvbnN0IG91dHB1dDogQml0R29LZXlGcm9tT3ZjU2hhcmVzID0ge1xuICAgICAgYml0R29LZXlJZDoga2V5LmlkLFxuICAgICAgYml0R29PdXRwdXRKc29uRm9yT3ZjOiBiaXRnb1RvT3ZjT3V0cHV0LFxuICAgIH07XG5cbiAgICByZXR1cm4gZGVjb2RlT3JFbHNlKEJpdEdvS2V5RnJvbU92Y1NoYXJlcy5uYW1lLCBCaXRHb0tleUZyb21PdmNTaGFyZXMsIG91dHB1dCwgKGVycm9ycykgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBwcm9kdWNpbmcgdGhlIG91dHB1dDogJHtlcnJvcnN9YCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHVzZXIga2V5Y2hhaW4sIGVuY3J5cHQgdGhlIHByaXZhdGUga2V5IHdpdGggdGhlIHdhbGxldCBwYXNzcGhyYXNlIGFuZCBzdG9yZSBpdCBpbiBCaXRHby5cbiAgICogQHBhcmFtIHdhbGxldFBhc3NwaHJhc2VcbiAgICogQHJldHVybnMgS2V5Y2hhaW4gaW5jbHVkaW5nIHRoZSBkZWNyeXB0ZWQgcHJpdmF0ZSBrZXlcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVVzZXJLZXljaGFpbihcbiAgICB3YWxsZXRQYXNzcGhyYXNlOiBzdHJpbmcsXG4gICAgZW5jcnlwdGlvblZlcnNpb24/OiBFbmNyeXB0aW9uVmVyc2lvbixcbiAgICBzZXNzaW9uPzogSUVuY3J5cHRpb25TZXNzaW9uXG4gICk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBrZXljaGFpbnMgPSB0aGlzLmJhc2VDb2luLmtleWNoYWlucygpO1xuICAgIGNvbnN0IG5ld0tleWNoYWluID0ga2V5Y2hhaW5zLmNyZWF0ZSgpO1xuICAgIGNvbnN0IG9yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZSA9IGdlbmVyYXRlUmFuZG9tUGFzc3dvcmQoNSk7XG5cbiAgICAvLyBXaGVuIGEgc2Vzc2lvbiBpcyB0aHJlYWRlZCBpbiAodHlwaWNhbGx5IGZyb20gYSBidWxrIG9wZXJhdGlvbiB0aGF0IGFscmVhZHkgcmFuIHRoZSBLREZcbiAgICAvLyBvbmNlKSwgcmV1c2UgaXQgc28gdGhpcyBlbnZlbG9wZSdzIEFFUyBrZXkgZGVyaXZlcyB2aWEgSEtERiBpbnN0ZWFkIG9mIGFub3RoZXIgQXJnb24yLlxuICAgIGNvbnN0IGVuY3J5cHRlZFBydiA9IHNlc3Npb25cbiAgICAgID8gYXdhaXQgc2Vzc2lvbi5lbmNyeXB0KG5ld0tleWNoYWluLnBydilcbiAgICAgIDogYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0KHtcbiAgICAgICAgICBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgICBpbnB1dDogbmV3S2V5Y2hhaW4ucHJ2LFxuICAgICAgICAgIGVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi4oYXdhaXQga2V5Y2hhaW5zLmFkZCh7XG4gICAgICAgIGVuY3J5cHRlZFBydixcbiAgICAgICAgb3JpZ2luYWxQYXNzY29kZUVuY3J5cHRpb25Db2RlLFxuICAgICAgICBwdWI6IG5ld0tleWNoYWluLnB1YixcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICB9KSksXG4gICAgICBwcnY6IG5ld0tleWNoYWluLnBydixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJvdGF0ZSBhbiBvZmMgbXVsdGktdXNlci1rZXljaGFpbiBieSByZWNyZWF0aW5nIGEgbmV3IGtleXBhaXIsIGVuY3J5cHQgaXQgdXNpbmcgdGhlIHVzZXIgcGFzc3dvcmQgYW5kIHNlbnQgaXQgdG8gV1BcbiAgICogVGhpcyBpcyBvbmx5IG1lYW50IHRvIGJlIGNhbGxlZCBieSBvZmMgbXVsdGktdXNlci13YWxsZXQncyBrZXksIGFuZCB3aWxsIHRocm93IGlmIG90aGVyd2lzZS5cbiAgICpcbiAgICogUmVxdWlyZXMgMmZhIGF1dGggYmVmb3JlIGNhbGxpbmcuIENhbGwgdGhlIGJpdGdvLnVubG9jaygpIFNESyBtZXRob2QgdG8gdW5sb2NrIHRoZSBzZXNzaW9uIGZpcnN0LlxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnMgZm9yIHRoZSByb3RhdGUga2V5Y2hhaW4gbWV0aG9kXG4gICAqIEByZXR1cm4gcm90YXRlZEtleWNoYWluXG4gICAqL1xuICBhc3luYyByb3RhdGVLZXljaGFpbihwYXJhbXM6IFJvdGF0ZUtleWNoYWluT3B0aW9ucyk6IFByb21pc2U8S2V5Y2hhaW4+IHtcbiAgICBjb25zdCBrZXlDaGFpbiA9IGF3YWl0IHRoaXMuZ2V0KHsgaWQ6IHBhcmFtcy5pZCB9KTtcbiAgICBpZiAoIUtleWNoYWlucy5pc011bHRpVXNlcktleShrZXlDaGFpbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcm90YXRlS2V5Y2hhaW4gaXMgb25seSBwZXJtaXR0ZWQgZm9yIG9mYyBtdWx0aS11c2VyLWtleSB3YWxsZXRgKTtcbiAgICB9XG5cbiAgICBsZXQgcHViOiBzdHJpbmcsIGVuY3J5cHRlZFBydjogc3RyaW5nO1xuICAgIGlmICgnZW5jcnlwdGVkUHJ2JyBpbiBwYXJhbXMpIHtcbiAgICAgIC8vIGNsaWVudCBwYXNzZWQgaW4gcHViIGFuZCBlbmNyeXB0ZWRQcnYgZGlyZWN0bHlcbiAgICAgIHB1YiA9IHBhcmFtcy5wdWI7XG4gICAgICBlbmNyeXB0ZWRQcnYgPSBwYXJhbXMuZW5jcnlwdGVkUHJ2O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBiaXRnbyBnZW5lcmF0ZSBwdWIgYW5kIHBydiBhbmQgZW5jcnlwdCBpdFxuICAgICAgY29uc3QgeyBwdWI6IGtleVB1YiwgcHJ2OiBrZXlQcnYgfSA9IHRoaXMuY3JlYXRlKCk7XG4gICAgICBpZiAoIWtleVB1Yikge1xuICAgICAgICB0aHJvdyBFcnJvcignRXhwZWN0ZWQgYSBwdWJsaWMga2V5IHRvIGJlIGdlbmVyYXRlZCcpO1xuICAgICAgfVxuICAgICAgcHViID0ga2V5UHViO1xuICAgICAgZW5jcnlwdGVkUHJ2ID0gYXdhaXQgdGhpcy5iaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IGtleVBydixcbiAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzd29yZCxcbiAgICAgICAgZW5jcnlwdGlvblZlcnNpb246IHBhcmFtcy5lbmNyeXB0aW9uVmVyc2lvbixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJpdGdvXG4gICAgICAucHV0KHRoaXMuYmFzZUNvaW4udXJsKGAva2V5LyR7cGFyYW1zLmlkfWApKVxuICAgICAgLnNlbmQoe1xuICAgICAgICBlbmNyeXB0ZWRQcnYsXG4gICAgICAgIHB1YixcbiAgICAgICAgcmVxSWQ6IHBhcmFtcy5yZXFJZCxcbiAgICAgIH0pXG4gICAgICAucmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGljIGhlbHBlciBtZXRob2QgdG8gZGV0ZXJtaW5lIGlmIGEga2V5Y2hhaW4gaXMgYSBvZmMgbXVsdGktdXNlci1rZXlcbiAgICogQHBhcmFtIGtleWNoYWluXG4gICAqL1xuICBzdGF0aWMgaXNNdWx0aVVzZXJLZXkoa2V5Y2hhaW46IEtleWNoYWluKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChrZXljaGFpbi5jb2luU3BlY2lmaWM/Lm9mYz8uWydmZWF0dXJlcyddID8/IFtdKS5pbmNsdWRlcygnbXVsdGktdXNlci1rZXknKTtcbiAgfVxufVxuIl19
|
|
@@ -4,28 +4,10 @@
|
|
|
4
4
|
* Safe backup and BitGo roots store raw public key (32 bytes) || raw chain code (32 bytes),
|
|
5
5
|
* encoded together as canonical unpadded RFC 4648 base32. Coin-specific public-key encodings are
|
|
6
6
|
* applied only to derived wallet children.
|
|
7
|
+
*
|
|
8
|
+
* The pure codecs + composite-pub encoding moved to @bitgo-beta/sdk-lib-safes. Only the WASM
|
|
9
|
+
* soft-derivation remains here (it needs Ed25519BIP32/Eddsa, which live in sdk-core).
|
|
7
10
|
*/
|
|
8
|
-
export declare const DERIVABLE_ED25519_PUBLIC_KEY_BYTES = 32;
|
|
9
|
-
export declare const DERIVABLE_ED25519_CHAIN_CODE_BYTES = 32;
|
|
10
|
-
export declare const DERIVABLE_ED25519_PUB_LENGTH = 103;
|
|
11
|
-
/** Returns true for canonical base32-encoded 64-byte public derivation material. */
|
|
12
|
-
export declare function isDerivableEd25519Pub(pub: string): boolean;
|
|
13
|
-
/** Throws unless the value is canonical base32-encoded 64-byte root material. */
|
|
14
|
-
export declare function assertDerivableEd25519Pub(pub: string): void;
|
|
15
|
-
/** Compose raw public-key and chain-code bytes into one base32 root value. */
|
|
16
|
-
export declare function encodeDerivableEd25519Pub(pub: Buffer, chainCode: Buffer): string;
|
|
17
|
-
/** Decode a base32 root into raw public-key and chain-code buffers. */
|
|
18
|
-
export declare function decodeDerivableEd25519Pub(composite: string): {
|
|
19
|
-
pub: Buffer;
|
|
20
|
-
chainCode: Buffer;
|
|
21
|
-
};
|
|
22
|
-
/** Generate a fresh raw 32-byte chain code for root composition. */
|
|
23
|
-
export declare function generateEd25519ChainCode(): Buffer;
|
|
24
|
-
export declare function decodeEd25519StrKeyPublicKey(pub: string): Buffer;
|
|
25
|
-
export declare function isValidEd25519StrKeyPublicKey(pub: string): boolean;
|
|
26
|
-
export declare function decodeEd25519StrKeySecretSeed(seed: string): Buffer;
|
|
27
|
-
export declare function encodeEd25519StrKeyPublicKey(rawPub: Buffer): string;
|
|
28
|
-
export declare function isChecksumValidStrKeyEd25519Pub(pub: string): boolean;
|
|
29
11
|
/** Soft-derive `m/<index>` and return the derived raw 32-byte public key. */
|
|
30
12
|
export declare function softDeriveChildPubEd25519(compositePub: string, index: number): Promise<Buffer>;
|
|
31
13
|
//# sourceMappingURL=derivableEd25519Pub.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derivableEd25519Pub.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/derivableEd25519Pub.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"derivableEd25519Pub.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/safe/derivableEd25519Pub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,6EAA6E;AAC7E,wBAAsB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUpG"}
|