Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

@bitgo/utxo-lib

Package Overview
Dependencies
Maintainers
6
Versions
171
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@bitgo/utxo-lib - npm Package Compare versions

Comparing version 8.1.0 to 8.2.0

./dist/src/index.js

2

dist/src/bitgo/signature.d.ts

@@ -43,3 +43,3 @@ /// <reference types="node" />

* @param verificationSettings
* @param prevOutputs - must be set for p2tr transactions
* @param prevOutputs - must be set for p2tr and p2trMusig2 transactions
* @returns SignatureVerification[] - in order of parsed non-empty signatures

@@ -46,0 +46,0 @@ */

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.signInput2Of3 = exports.signInputP2shP2pk = exports.getDefaultSigHash = exports.verifySignatureWithPublicKey = exports.verifySignatureWithPublicKeys = exports.getSignaturesWithPublicKeys = exports.verifySignature = exports.getSignatureVerifications = void 0;
const assert = require("assert");
const bitcoinjs_lib_1 = require("bitcoinjs-lib");

@@ -11,2 +10,3 @@ const UtxoTransaction_1 = require("./UtxoTransaction");

const parseInput_1 = require("./parseInput");
const taproot_1 = require("../taproot");
/**

@@ -19,3 +19,3 @@ * @deprecated - use {@see verifySignaturesWithPublicKeys} instead

* @param verificationSettings
* @param prevOutputs - must be set for p2tr transactions
* @param prevOutputs - must be set for p2tr and p2trMusig2 transactions
* @returns SignatureVerification[] - in order of parsed non-empty signatures

@@ -38,9 +38,32 @@ */

const parsedScript = parseInput_1.parseSignatureScript2Of3(input);
assert.ok(parsedScript.scriptType !== 'taprootKeyPathSpend');
if (parsedScript.scriptType === 'taprootKeyPathSpend' || parsedScript.scriptType === 'taprootScriptPathSpend') {
if (parsedScript.scriptType === 'taprootKeyPathSpend' &&
(verificationSettings.signatureIndex || verificationSettings.publicKey)) {
throw new Error(`signatureIndex and publicKey parameters not supported for taprootKeyPathSpend`);
}
if (verificationSettings.signatureIndex !== undefined) {
throw new Error(`signatureIndex parameter not supported for taprootScriptPathSpend`);
}
if (!prevOutputs) {
throw new Error(`prevOutputs not set`);
}
if (prevOutputs.length !== transaction.ins.length) {
throw new Error(`prevOutputs length ${prevOutputs.length}, expected ${transaction.ins.length}`);
}
}
let publicKeys;
if (parsedScript.scriptType === 'taprootKeyPathSpend') {
if (!prevOutputs) {
throw new Error(`prevOutputs not set`);
}
publicKeys = [taproot_1.getTaprootOutputKey(prevOutputs[inputIndex].script)];
}
else {
publicKeys = parsedScript.publicKeys.filter((buf) => verificationSettings.publicKey === undefined ||
verificationSettings.publicKey.equals(buf) ||
verificationSettings.publicKey.slice(1).equals(buf));
}
const signatures = parsedScript.signatures
.filter((s) => s && s.length)
.filter((s, i) => verificationSettings.signatureIndex === undefined || verificationSettings.signatureIndex === i);
const publicKeys = parsedScript.publicKeys.filter((buf) => verificationSettings.publicKey === undefined ||
verificationSettings.publicKey.equals(buf) ||
verificationSettings.publicKey.slice(1).equals(buf));
return signatures.map((signatureBuffer) => {

@@ -56,14 +79,5 @@ if (signatureBuffer === 0 || signatureBuffer.length === 0) {

if (parsedScript.scriptType === 'taprootScriptPathSpend') {
if (verificationSettings.signatureIndex !== undefined) {
throw new Error(`signatureIndex parameter not supported for p2tr`);
}
if (!prevOutputs) {
throw new Error(`prevOutputs not set`);
}
if (prevOutputs.length !== transaction.ins.length) {
throw new Error(`prevOutputs length ${prevOutputs.length}, expected ${transaction.ins.length}`);
}
if (!('controlBlock' in parsedScript)) {
throw new Error('expected controlBlock');
}
const { controlBlock, pubScript } = parsedScript;

@@ -81,2 +95,12 @@ const leafHash = bitcoinjs_lib_1.taproot.getTapleafHash(noble_ecc_1.ecc, controlBlock, pubScript);

}
else if (parsedScript.scriptType === 'taprootKeyPathSpend') {
if (!prevOutputs) {
throw new Error(`prevOutputs not set`);
}
const signatureHash = transaction.hashForWitnessV1(inputIndex, prevOutputs.map(({ script }) => script), prevOutputs.map(({ value }) => value), hashType);
const result = noble_ecc_1.ecc.verifySchnorr(signatureHash, publicKeys[0], signatureBuffer);
return result
? { signedBy: publicKeys[0], signature: signatureBuffer }
: { signedBy: undefined, signature: undefined };
}
else {

@@ -229,2 +253,2 @@ // slice the last byte from the signature hash input because it's the hash type

exports.signInput2Of3 = signInput2Of3;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpdGdvL3NpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBaUM7QUFHakMsaURBQWdGO0FBRWhGLHVEQUFvRDtBQUVwRCxtREFNeUI7QUFFekIsMENBQTREO0FBQzVELDRDQUE2QztBQUM3Qyw2Q0FBd0Q7QUE4QnhEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLHlCQUF5QixDQUN2QyxXQUFxQyxFQUNyQyxVQUFrQixFQUNsQixNQUFlLEVBQ2YsdUJBQTZDLEVBQUUsRUFDL0MsV0FBaUM7SUFFakMsMEJBQTBCO0lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztLQUN4QztJQUVELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsMEJBQTBCO0lBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBQ3BEO0lBRUQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDOUUsaUNBQWlDO1FBQ2pDLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFFRCxNQUFNLFlBQVksR0FBRyxxQ0FBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEtBQUsscUJBQXFCLENBQUMsQ0FBQztJQUU3RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVTtTQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFD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aW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ2JpcDMyJztcblxuaW1wb3J0IHsgVHJhbnNhY3Rpb24sIHRhcHJvb3QsIFR4T3V0cHV0LCBTY3JpcHRTaWduYXR1cmUgfSBmcm9tICdiaXRjb2luanMtbGliJztcblxuaW1wb3J0IHsgVXR4b1RyYW5zYWN0aW9uIH0gZnJvbSAnLi9VdHhvVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVXR4b1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vVXR4b1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzLFxuICBjcmVhdGVPdXRwdXRTY3JpcHRQMnNoUDJwayxcbiAgY3JlYXRlU3BlbmRTY3JpcHRQMnRyLFxuICBTY3JpcHRUeXBlMk9mMyxcbiAgc2NyaXB0VHlwZTJPZjNBc1ByZXZPdXRUeXBlLFxufSBmcm9tICcuL291dHB1dFNjcmlwdHMnO1xuaW1wb3J0IHsgVHJpcGxlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRNYWlubmV0LCBOZXR3b3JrLCBuZXR3b3JrcyB9IGZyb20gJy4uL25ldHdvcmtzJztcbmltcG9ydCB7IGVjYyBhcyBlY2NMaWIgfSBmcm9tICcuLi9ub2JsZV9lY2MnO1xuaW1wb3J0IHsgcGFyc2VTaWduYXR1cmVTY3JpcHQyT2YzIH0gZnJvbSAnLi9wYXJzZUlucHV0JztcblxuLyoqXG4gKiBDb25zdHJhaW50cyBmb3Igc2lnbmF0dXJlIHZlcmlmaWNhdGlvbnMuXG4gKiBQYXJhbWV0ZXJzIGFyZSBjb25qdW5jdGl2ZTogaWYgbXVsdGlwbGUgcGFyYW1ldGVycyBhcmUgc2V0LCBhIHZlcmlmaWNhdGlvbiBmb3IgYW4gaW5kaXZpZHVhbFxuICogc2lnbmF0dXJlIG11c3Qgc2F0aXNmeSBhbGwgb2YgdGhlbS5cbiAqL1xuZXhwb3J0IHR5cGUgVmVyaWZpY2F0aW9uU2V0dGluZ3MgPSB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIHNpZ25hdHVyZSB0byB2ZXJpZnkuIE9ubHkgaXRlcmF0ZXMgb3ZlciBub24tZW1wdHkgc2lnbmF0dXJlcy5cbiAgICovXG4gIHNpZ25hdHVyZUluZGV4PzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHB1YmxpYyBrZXkgdG8gdmVyaWZ5LlxuICAgKi9cbiAgcHVibGljS2V5PzogQnVmZmVyO1xufTtcblxuLyoqXG4gKiBSZXN1bHQgZm9yIGEgaW5kaXZpZHVhbCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIFNpZ25hdHVyZVZlcmlmaWNhdGlvbiA9XG4gIHwge1xuICAgICAgLyoqIFNldCB0byB0aGUgcHVibGljIGtleSB0aGF0IHNpZ25lZCBmb3IgdGhlIHNpZ25hdHVyZSAqL1xuICAgICAgc2lnbmVkQnk6IEJ1ZmZlcjtcbiAgICAgIC8qKiBTZXQgdG8gdGhlIHNpZ25hdHVyZSBidWZmZXIgKi9cbiAgICAgIHNpZ25hdHVyZTogQnVmZmVyO1xuICAgIH1cbiAgfCB7IHNpZ25lZEJ5OiB1bmRlZmluZWQ7IHNpZ25hdHVyZTogdW5kZWZpbmVkIH07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgLSB1c2Uge0BzZWUgdmVyaWZ5U2lnbmF0dXJlc1dpdGhQdWJsaWNLZXlzfSBpbnN0ZWFkXG4gKiBHZXQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbnMgZm9yIG11bHRzaWcgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSBhbW91bnQgLSBtdXN0IGJlIHNldCBmb3Igc2Vnd2l0IHRyYW5zYWN0aW9ucyBhbmQgQklQMTQzIHRyYW5zYWN0aW9uc1xuICogQHBhcmFtIHZlcmlmaWNhdGlvblNldHRpbmdzXG4gKiBAcGFyYW0gcHJldk91dHB1dHMgLSBtdXN0IGJlIHNldCBmb3IgcDJ0ciB0cmFuc2FjdGlvbnNcbiAqIEByZXR1cm5zIFNpZ25hdHVyZVZlcmlmaWNhdGlvbltdIC0gaW4gb3JkZXIgb2YgcGFyc2VkIG5vbi1lbXB0eSBzaWduYXR1cmVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaWduYXR1cmVWZXJpZmljYXRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0cmFuc2FjdGlvbjogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIGFtb3VudDogVE51bWJlcixcbiAgdmVyaWZpY2F0aW9uU2V0dGluZ3M6IFZlcmlmaWNhdGlvblNldHRpbmdzID0ge30sXG4gIHByZXZPdXRwdXRzPzogVHhPdXRwdXQ8VE51bWJlcj5bXVxuKTogU2lnbmF0dXJlVmVyaWZpY2F0aW9uW10ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIXRyYW5zYWN0aW9uLmlucykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB0cmFuc2FjdGlvbmApO1xuICB9XG5cbiAgY29uc3QgaW5wdXQgPSB0cmFuc2FjdGlvbi5pbnNbaW5wdXRJbmRleF07XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghaW5wdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGlucHV0IGF0IGluZGV4ICR7aW5wdXRJbmRleH1gKTtcbiAgfVxuXG4gIGlmICgoIWlucHV0LnNjcmlwdCB8fCBpbnB1dC5zY3JpcHQubGVuZ3RoID09PSAwKSAmJiBpbnB1dC53aXRuZXNzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIFVuc2lnbmVkIGlucHV0OiBubyBzaWduYXR1cmVzLlxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFNjcmlwdCA9IHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyhpbnB1dCk7XG4gIGFzc2VydC5vayhwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSAhPT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKTtcblxuICBjb25zdCBzaWduYXR1cmVzID0gcGFyc2VkU2NyaXB0LnNpZ25hdHVyZXNcbiAgICAuZmlsdGVyKChzKSA9PiBzICYmIHMubGVuZ3RoKVxuICAgIC5maWx0ZXIoKHMsIGkpID0+IHZlcmlmaWNhdGlvblNldHRpbmdzLnNpZ25hdHVyZUluZGV4ID09PSB1bmRlZmluZWQgfHwgdmVyaWZpY2F0aW9uU2V0dGluZ3Muc2lnbmF0dXJlSW5kZXggPT09IGkpO1xuXG4gIGNvbnN0IHB1YmxpY0tleXMgPSBwYXJzZWRTY3JpcHQucHVibGljS2V5cy5maWx0ZXIoXG4gICAgKGJ1ZikgPT5cbiAgICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkuZXF1YWxzKGJ1ZikgfHxcbiAgICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleS5zbGljZSgxKS5lcXVhbHMoYnVmKVxuICApO1xuXG4gIHJldHVybiBzaWduYXR1cmVzLm1hcCgoc2lnbmF0dXJlQnVmZmVyKTogU2lnbmF0dXJlVmVyaWZpY2F0aW9uID0+IHtcbiAgICBpZiAoc2lnbmF0dXJlQnVmZmVyID09PSAwIHx8IHNpZ25hdHVyZUJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IHNpZ25lZEJ5OiB1bmRlZmluZWQsIHNpZ25hdHVyZTogdW5kZWZpbmVkIH07XG4gICAgfVxuXG4gICAgbGV0IGhhc2hUeXBlID0gVHJhbnNhY3Rpb24uU0lHSEFTSF9ERUZBVUxUO1xuXG4gICAgaWYgKHNpZ25hdHVyZUJ1ZmZlci5sZW5ndGggPT09IDY1KSB7XG4gICAgICBoYXNoVHlwZSA9IHNpZ25hdHVyZUJ1ZmZlcltzaWduYXR1cmVCdWZmZXIubGVuZ3RoIC0gMV07XG4gICAgICBzaWduYXR1cmVCdWZmZXIgPSBzaWduYXR1cmVCdWZmZXIuc2xpY2UoMCwgLTEpO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnKSB7XG4gICAgICBpZiAodmVyaWZpY2F0aW9uU2V0dGluZ3Muc2lnbmF0dXJlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25hdHVyZUluZGV4IHBhcmFtZXRlciBub3Qgc3VwcG9ydGVkIGZvciBwMnRyYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcHJldk91dHB1dHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmV2T3V0cHV0cyBub3Qgc2V0YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2T3V0cHV0cy5sZW5ndGggIT09IHRyYW5zYWN0aW9uLmlucy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmV2T3V0cHV0cyBsZW5ndGggJHtwcmV2T3V0cHV0cy5sZW5ndGh9LCBleHBlY3RlZCAke3RyYW5zYWN0aW9uLmlucy5sZW5ndGh9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKCdjb250cm9sQmxvY2snIGluIHBhcnNlZFNjcmlwdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBjb250cm9sQmxvY2snKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgY29udHJvbEJsb2NrLCBwdWJTY3JpcHQgfSA9IHBhcnNlZFNjcmlwdDtcbiAgICAgIGNvbnN0IGxlYWZIYXNoID0gdGFwcm9vdC5nZXRUYXBsZWFmSGFzaChlY2NMaWIsIGNvbnRyb2xCbG9jaywgcHViU2NyaXB0KTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZUhhc2ggPSB0cmFuc2FjdGlvbi5oYXNoRm9yV2l0bmVzc1YxKFxuICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICBwcmV2T3V0cHV0cy5tYXAoKHsgc2NyaXB0IH0pID0+IHNjcmlwdCksXG4gICAgICAgIHByZXZPdXRwdXRzLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSksXG4gICAgICAgIGhhc2hUeXBlLFxuICAgICAgICBsZWFmSGFzaFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc2lnbmVkQnkgPSBwdWJsaWNLZXlzLmZpbHRlcihcbiAgICAgICAgKGspID0+IEJ1ZmZlci5pc0J1ZmZlcihzaWduYXR1cmVCdWZmZXIpICYmIGVjY0xpYi52ZXJpZnlTY2hub3JyKHNpZ25hdHVyZUhhc2gsIGssIHNpZ25hdHVyZUJ1ZmZlcilcbiAgICAgICk7XG5cbiAgICAgIGlmIChzaWduZWRCeS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHsgc2lnbmVkQnk6IHVuZGVmaW5lZCwgc2lnbmF0dXJlOiB1bmRlZmluZWQgfTtcbiAgICAgIH1cbiAgICAgIGlmIChzaWduZWRCeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHsgc2lnbmVkQnk6IHNpZ25lZEJ5WzBdLCBzaWduYXR1cmU6IHNpZ25hdHVyZUJ1ZmZlciB9O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbGxlZ2FsIHN0YXRlOiBzaWduZWQgYnkgbXVsdGlwbGUgcHVibGljIGtleXNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2xpY2UgdGhlIGxhc3QgYnl0ZSBmcm9tIHRoZSBzaWduYXR1cmUgaGFzaCBpbnB1dCBiZWNhdXNlIGl0J3MgdGhlIGhhc2ggdHlwZVxuICAgICAgY29uc3QgeyBzaWduYXR1cmUsIGhhc2hUeXBlIH0gPSBTY3JpcHRTaWduYXR1cmUuZGVjb2RlKHNpZ25hdHVyZUJ1ZmZlcik7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbkhhc2ggPVxuICAgICAgICBwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMndzaCcgfHwgcGFyc2VkU2NyaXB0LnNjcmlwdFR5cGUgPT09ICdwMndzaCdcbiAgICAgICAgICA/IHRyYW5zYWN0aW9uLmhhc2hGb3JXaXRuZXNzVjAoaW5wdXRJbmRleCwgcGFyc2VkU2NyaXB0LnB1YlNjcmlwdCwgYW1vdW50LCBoYXNoVHlwZSlcbiAgICAgICAgICA6IHRyYW5zYWN0aW9uLmhhc2hGb3JTaWduYXR1cmVCeU5ldHdvcmsoaW5wdXRJbmRleCwgcGFyc2VkU2NyaXB0LnB1YlNjcmlwdCwgYW1vdW50LCBoYXNoVHlwZSk7XG4gICAgICBjb25zdCBzaWduZWRCeSA9IHB1YmxpY0tleXMuZmlsdGVyKChwdWJsaWNLZXkpID0+XG4gICAgICAgIGVjY0xpYi52ZXJpZnkoXG4gICAgICAgICAgdHJhbnNhY3Rpb25IYXNoLFxuICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICBzaWduYXR1cmUsXG4gICAgICAgICAgLypcbiAgICAgICAgICAgIFN0cmljdCB2ZXJpZmljYXRpb24gKHJlcXVpcmUgbG93ZXItUyB2YWx1ZSksIGFzIHJlcXVpcmVkIGJ5IEJJUC0wMTQ2XG4gICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXBzL2Jsb2IvbWFzdGVyL2JpcC0wMTQ2Lm1lZGlhd2lraVxuICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW4tY29yZS9zZWNwMjU2azEvYmxvYi9hYzgzYmUzMy9pbmNsdWRlL3NlY3AyNTZrMS5oI0w0NzgtTDUwOFxuICAgICAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2JpdGNvaW5qcy90aW55LXNlY3AyNTZrMS9ibG9iL3YxLjEuNi9qcy5qcyNMMjMxLUwyMzNcbiAgICAgICAgICAqL1xuICAgICAgICAgIHRydWVcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgaWYgKHNpZ25lZEJ5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4geyBzaWduZWRCeTogdW5kZWZpbmVkLCBzaWduYXR1cmU6IHVuZGVmaW5lZCB9O1xuICAgICAgfVxuICAgICAgaWYgKHNpZ25lZEJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4geyBzaWduZWRCeTogc2lnbmVkQnlbMF0sIHNpZ25hdHVyZTogc2lnbmF0dXJlQnVmZmVyIH07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGlsbGVnYWwgc3RhdGU6IHNpZ25lZCBieSBtdWx0aXBsZSBwdWJsaWMga2V5c2ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHtAc2VlIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzfSBpbnN0ZWFkXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBpbnB1dEluZGV4XG4gKiBAcGFyYW0gYW1vdW50XG4gKiBAcGFyYW0gdmVyaWZpY2F0aW9uU2V0dGluZ3MgLSBpZiBwdWJsaWNLZXkgaXMgc3BlY2lmaWVkLCByZXR1cm5zIHRydWUgaWZmIGFueSBzaWduYXR1cmUgaXMgc2lnbmVkIGJ5IHB1YmxpY0tleS5cbiAqIEBwYXJhbSBwcmV2T3V0cHV0cyAtIG11c3QgYmUgc2V0IGZvciBwMnRyIHRyYW5zYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5U2lnbmF0dXJlPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0cmFuc2FjdGlvbjogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIGFtb3VudDogVE51bWJlcixcbiAgdmVyaWZpY2F0aW9uU2V0dGluZ3M6IFZlcmlmaWNhdGlvblNldHRpbmdzID0ge30sXG4gIHByZXZPdXRwdXRzPzogVHhPdXRwdXQ8VE51bWJlcj5bXVxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNpZ25hdHVyZVZlcmlmaWNhdGlvbnMgPSBnZXRTaWduYXR1cmVWZXJpZmljYXRpb25zKFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIGlucHV0SW5kZXgsXG4gICAgYW1vdW50LFxuICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLFxuICAgIHByZXZPdXRwdXRzXG4gICkuZmlsdGVyKFxuICAgICh2KSA9PlxuICAgICAgLy8gSWYgbm8gcHVibGljS2V5IGlzIHNldCBpbiB2ZXJpZmljYXRpb25TZXR0aW5ncywgYWxsIHNpZ25hdHVyZXMgbXVzdCBiZSB2YWxpZC5cbiAgICAgIC8vIE90aGVyd2lzZSwgYSBzaW5nbGUgdmFsaWQgc2lnbmF0dXJlIGJ5IHRoZSBzcGVjaWZpZWQgcHVia2V5IGlzIHN1ZmZpY2llbnQuXG4gICAgICB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgKHYuc2lnbmVkQnkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAodmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5LmVxdWFscyh2LnNpZ25lZEJ5KSB8fFxuICAgICAgICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleS5zbGljZSgxKS5lcXVhbHModi5zaWduZWRCeSkpKVxuICApO1xuXG4gIHJldHVybiBzaWduYXR1cmVWZXJpZmljYXRpb25zLmxlbmd0aCA+IDAgJiYgc2lnbmF0dXJlVmVyaWZpY2F0aW9ucy5ldmVyeSgodikgPT4gdi5zaWduZWRCeSAhPT0gdW5kZWZpbmVkKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdlxuICogQHBhcmFtIHB1YmxpY0tleVxuICogQHJldHVybiB0cnVlIGlmZiBzaWduYXR1cmUgaXMgYnkgcHVibGljS2V5IChvciB4b25seSB2YXJpYW50IG9mIHB1YmxpY0tleSlcbiAqL1xuZnVuY3Rpb24gaXNTaWduYXR1cmVCeVB1YmxpY0tleSh2OiBTaWduYXR1cmVWZXJpZmljYXRpb24sIHB1YmxpY0tleTogQnVmZmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgISF2LnNpZ25lZEJ5ICYmXG4gICAgKHYuc2lnbmVkQnkuZXF1YWxzKHB1YmxpY0tleSkgfHxcbiAgICAgIC8qIGZvciBwMnRyIHNpZ25hdHVyZXMsIHdlIHBhc3MgdGhlIHB1YmtleSBpbiAzMy1ieXRlIGZvcm1hdCByZWNvdmVyIGl0IGZyb20gdGhlIHNpZ25hdHVyZSBpbiAzMi1ieXRlIGZvcm1hdCAqL1xuICAgICAgKHB1YmxpY0tleS5sZW5ndGggPT09IDMzICYmIGlzU2lnbmF0dXJlQnlQdWJsaWNLZXkodiwgcHVibGljS2V5LnNsaWNlKDEpKSkpXG4gICk7XG59XG5cbi8qKlxuICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gaW5wdXRJbmRleFxuICogQHBhcmFtIHByZXZPdXRwdXRzXG4gKiBAcGFyYW0gcHVibGljS2V5c1xuICogQHJldHVybiBhcnJheSB3aXRoIHNpZ25hdHVyZSBjb3JyZXNwb25kaW5nIHRvIG4tdGgga2V5LCB1bmRlZmluZWQgaWYgbm8gbWF0Y2ggZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25hdHVyZXNXaXRoUHVibGljS2V5czxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHJhbnNhY3Rpb246IFV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICBwcmV2T3V0cHV0czogVHhPdXRwdXQ8VE51bWJlcj5bXSxcbiAgcHVibGljS2V5czogQnVmZmVyW11cbik6IEFycmF5PEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICBpZiAodHJhbnNhY3Rpb24uaW5zLmxlbmd0aCAhPT0gcHJldk91dHB1dHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnB1dCBsZW5ndGggbXVzdCBtYXRjaCBwcmV2T3V0cHV0cyBsZW5ndGhgKTtcbiAgfVxuXG4gIGNvbnN0IHNpZ25hdHVyZVZlcmlmaWNhdGlvbnMgPSBnZXRTaWduYXR1cmVWZXJpZmljYXRpb25zKFxuICAgIHRyYW5zYWN0aW9uLFxuICAgIGlucHV0SW5kZXgsXG4gICAgcHJldk91dHB1dHNbaW5wdXRJbmRleF0udmFsdWUsXG4gICAge30sXG4gICAgcHJldk91dHB1dHNcbiAgKTtcblxuICByZXR1cm4gcHVibGljS2V5cy5tYXAoKHB1YmxpY0tleSkgPT4ge1xuICAgIGNvbnN0IHYgPSBzaWduYXR1cmVWZXJpZmljYXRpb25zLmZpbmQoKHYpID0+IGlzU2lnbmF0dXJlQnlQdWJsaWNLZXkodiwgcHVibGljS2V5KSk7XG4gICAgcmV0dXJuIHYgPyB2LnNpZ25hdHVyZSA6IHVuZGVmaW5lZDtcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gaW5wdXRJbmRleFxuICogQHBhcmFtIHByZXZPdXRwdXRzIC0gdHJhbnNhY3Rpb24gb3V0cHV0cyBmb3IgaW5wdXRzXG4gKiBAcGFyYW0gcHVibGljS2V5cyAtIHB1YmxpYyBrZXlzIHRvIGNoZWNrIHNpZ25hdHVyZXMgZm9yXG4gKiBAcmV0dXJuIGFycmF5IG9mIGJvb2xlYW5zIGluZGljYXRpbmcgYSB2YWxpZCBzaWduYXR1cmUgZm9yIGV2ZXJ5IHB1YmtleSBpbiBfcHVibGljS2V5c19cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0cmFuc2FjdGlvbjogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHByZXZPdXRwdXRzOiBUeE91dHB1dDxUTnVtYmVyPltdLFxuICBwdWJsaWNLZXlzOiBCdWZmZXJbXVxuKTogYm9vbGVhbltdIHtcbiAgcmV0dXJuIGdldFNpZ25hdHVyZXNXaXRoUHVibGljS2V5cyh0cmFuc2FjdGlvbiwgaW5wdXRJbmRleCwgcHJldk91dHB1dHMsIHB1YmxpY0tleXMpLm1hcCgocykgPT4gcyAhPT0gdW5kZWZpbmVkKTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZvciB7QHNlZSB2ZXJpZnlTaWduYXR1cmVXaXRoUHVibGljS2V5c30gZm9yIHNpbmdsZSBwdWJrZXlcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSBwcmV2T3V0cHV0c1xuICogQHBhcmFtIHB1YmxpY0tleVxuICogQHJldHVybiB0cnVlIGlmZiBzaWduYXR1cmUgaXMgdmFsaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXk8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHRyYW5zYWN0aW9uOiBVdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgcHJldk91dHB1dHM6IFR4T3V0cHV0PFROdW1iZXI+W10sXG4gIHB1YmxpY0tleTogQnVmZmVyXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzKHRyYW5zYWN0aW9uLCBpbnB1dEluZGV4LCBwcmV2T3V0cHV0cywgW3B1YmxpY0tleV0pWzBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFNpZ0hhc2gobmV0d29yazogTmV0d29yaywgc2NyaXB0VHlwZT86IFNjcmlwdFR5cGUyT2YzKTogbnVtYmVyIHtcbiAgc3dpdGNoIChnZXRNYWlubmV0KG5ldHdvcmspKSB7XG4gICAgY2FzZSBuZXR3b3Jrcy5iaXRjb2luY2FzaDpcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5zdjpcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5nb2xkOlxuICAgIGNhc2UgbmV0d29ya3MuZWNhc2g6XG4gICAgICByZXR1cm4gVHJhbnNhY3Rpb24uU0lHSEFTSF9BTEwgfCBVdHhvVHJhbnNhY3Rpb24uU0lHSEFTSF9GT1JLSUQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzY3JpcHRUeXBlID09PSAncDJ0cicgPyBUcmFuc2FjdGlvbi5TSUdIQVNIX0RFRkFVTFQgOiBUcmFuc2FjdGlvbi5TSUdIQVNIX0FMTDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbklucHV0UDJzaFAycGs8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4QnVpbGRlcjogVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPixcbiAgdmluOiBudW1iZXIsXG4gIGtleVBhaXI6IEJJUDMySW50ZXJmYWNlXG4pOiB2b2lkIHtcbiAgY29uc3QgcHJldk91dFNjcmlwdFR5cGUgPSAncDJzaC1wMnBrJztcbiAgY29uc3QgeyByZWRlZW1TY3JpcHQsIHdpdG5lc3NTY3JpcHQgfSA9IGNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrKGtleVBhaXIucHVibGljS2V5KTtcbiAga2V5UGFpci5uZXR3b3JrID0gdHhCdWlsZGVyLm5ldHdvcms7XG5cbiAgdHhCdWlsZGVyLnNpZ24oe1xuICAgIHZpbixcbiAgICBwcmV2T3V0U2NyaXB0VHlwZSxcbiAgICBrZXlQYWlyLFxuICAgIGhhc2hUeXBlOiBnZXREZWZhdWx0U2lnSGFzaCh0eEJ1aWxkZXIubmV0d29yayBhcyBOZXR3b3JrKSxcbiAgICByZWRlZW1TY3JpcHQsXG4gICAgd2l0bmVzc1NjcmlwdCxcbiAgICB3aXRuZXNzVmFsdWU6IHVuZGVmaW5lZCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduSW5wdXQyT2YzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eEJ1aWxkZXI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIHZpbjogbnVtYmVyLFxuICBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlMk9mMyxcbiAgcHVia2V5czogVHJpcGxlPEJ1ZmZlcj4sXG4gIGtleVBhaXI6IEJJUDMySW50ZXJmYWNlLFxuICBjb3NpZ25lcjogQnVmZmVyLFxuICBhbW91bnQ6IFROdW1iZXJcbik6IHZvaWQge1xuICBsZXQgY29udHJvbEJsb2NrO1xuICBsZXQgcmVkZWVtU2NyaXB0O1xuICBsZXQgd2l0bmVzc1NjcmlwdDtcblxuICBjb25zdCBwcmV2T3V0U2NyaXB0VHlwZSA9IHNjcmlwdFR5cGUyT2YzQXNQcmV2T3V0VHlwZShzY3JpcHRUeXBlKTtcbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyJykge1xuICAgICh7IHdpdG5lc3NTY3JpcHQsIGNvbnRyb2xCbG9jayB9ID0gY3JlYXRlU3BlbmRTY3JpcHRQMnRyKHB1YmtleXMsIFtrZXlQYWlyLnB1YmxpY0tleSwgY29zaWduZXJdKSk7XG4gIH0gZWxzZSB7XG4gICAgKHsgcmVkZWVtU2NyaXB0LCB3aXRuZXNzU2NyaXB0IH0gPSBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzKHB1YmtleXMsIHNjcmlwdFR5cGUpKTtcbiAgfVxuXG4gIGtleVBhaXIubmV0d29yayA9IHR4QnVpbGRlci5uZXR3b3JrO1xuXG4gIHR4QnVpbGRlci5zaWduKHtcbiAgICB2aW4sXG4gICAgcHJldk91dFNjcmlwdFR5cGUsXG4gICAga2V5UGFpcixcbiAgICBoYXNoVHlwZTogZ2V0RGVmYXVsdFNpZ0hhc2godHhCdWlsZGVyLm5ldHdvcmsgYXMgTmV0d29yaywgc2NyaXB0VHlwZSksXG4gICAgcmVkZWVtU2NyaXB0LFxuICAgIHdpdG5lc3NTY3JpcHQsXG4gICAgd2l0bmVzc1ZhbHVlOiBhbW91bnQsXG4gICAgY29udHJvbEJsb2NrLFxuICB9KTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JpdGdvL3NpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxpREFBZ0Y7QUFFaEYsdURBQW9EO0FBRXBELG1EQU15QjtBQUV6QiwwQ0FBNEQ7QUFDNUQsNENBQTZDO0FBQzdDLDZDQUF3RDtBQUN4RCx3Q0FBaUQ7QUE4QmpEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLHlCQUF5QixDQUN2QyxXQUFxQyxFQUNyQyxVQUFrQixFQUNsQixNQUFlLEVBQ2YsdUJBQTZDLEVBQUUsRUFDL0MsV0FBaUM7SUFFakMsMEJBQTBCO0lBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztLQUN4QztJQUVELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsMEJBQTBCO0lBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBQ3BEO0lBRUQsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDOUUsaUNBQWlDO1FBQ2pDLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFFRCxNQUFNLFlBQVksR0FBRyxxQ0FBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVyRCxJQUFJLFlBQVksQ0FBQyxVQUFVLEtBQUsscUJBQXFCLElBQUksWUFBWSxDQUFDLFVBQVUsS0FBSyx3QkFBd0IsRUFBRTtRQUM3RyxJQUNFLFlBQVksQ0FBQyxVQUFVLEtBQUsscUJBQXFCO1lBQ2pELENBQUMs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QyxDQUFDO0FBQ0wsQ0FBQztBQWhDRCxzQ0FnQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCSVAzMkludGVyZmFjZSB9IGZyb20gJ2JpcDMyJztcblxuaW1wb3J0IHsgVHJhbnNhY3Rpb24sIHRhcHJvb3QsIFR4T3V0cHV0LCBTY3JpcHRTaWduYXR1cmUgfSBmcm9tICdiaXRjb2luanMtbGliJztcblxuaW1wb3J0IHsgVXR4b1RyYW5zYWN0aW9uIH0gZnJvbSAnLi9VdHhvVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVXR4b1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vVXR4b1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzLFxuICBjcmVhdGVPdXRwdXRTY3JpcHRQMnNoUDJwayxcbiAgY3JlYXRlU3BlbmRTY3JpcHRQMnRyLFxuICBTY3JpcHRUeXBlMk9mMyxcbiAgc2NyaXB0VHlwZTJPZjNBc1ByZXZPdXRUeXBlLFxufSBmcm9tICcuL291dHB1dFNjcmlwdHMnO1xuaW1wb3J0IHsgVHJpcGxlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRNYWlubmV0LCBOZXR3b3JrLCBuZXR3b3JrcyB9IGZyb20gJy4uL25ldHdvcmtzJztcbmltcG9ydCB7IGVjYyBhcyBlY2NMaWIgfSBmcm9tICcuLi9ub2JsZV9lY2MnO1xuaW1wb3J0IHsgcGFyc2VTaWduYXR1cmVTY3JpcHQyT2YzIH0gZnJvbSAnLi9wYXJzZUlucHV0JztcbmltcG9ydCB7IGdldFRhcHJvb3RPdXRwdXRLZXkgfSBmcm9tICcuLi90YXByb290JztcblxuLyoqXG4gKiBDb25zdHJhaW50cyBmb3Igc2lnbmF0dXJlIHZlcmlmaWNhdGlvbnMuXG4gKiBQYXJhbWV0ZXJzIGFyZSBjb25qdW5jdGl2ZTogaWYgbXVsdGlwbGUgcGFyYW1ldGVycyBhcmUgc2V0LCBhIHZlcmlmaWNhdGlvbiBmb3IgYW4gaW5kaXZpZHVhbFxuICogc2lnbmF0dXJlIG11c3Qgc2F0aXNmeSBhbGwgb2YgdGhlbS5cbiAqL1xuZXhwb3J0IHR5cGUgVmVyaWZpY2F0aW9uU2V0dGluZ3MgPSB7XG4gIC8qKlxuICAgKiBUaGUgaW5kZXggb2YgdGhlIHNpZ25hdHVyZSB0byB2ZXJpZnkuIE9ubHkgaXRlcmF0ZXMgb3ZlciBub24tZW1wdHkgc2lnbmF0dXJlcy5cbiAgICovXG4gIHNpZ25hdHVyZUluZGV4PzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHB1YmxpYyBrZXkgdG8gdmVyaWZ5LlxuICAgKi9cbiAgcHVibGljS2V5PzogQnVmZmVyO1xufTtcblxuLyoqXG4gKiBSZXN1bHQgZm9yIGEgaW5kaXZpZHVhbCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIFNpZ25hdHVyZVZlcmlmaWNhdGlvbiA9XG4gIHwge1xuICAgICAgLyoqIFNldCB0byB0aGUgcHVibGljIGtleSB0aGF0IHNpZ25lZCBmb3IgdGhlIHNpZ25hdHVyZSAqL1xuICAgICAgc2lnbmVkQnk6IEJ1ZmZlcjtcbiAgICAgIC8qKiBTZXQgdG8gdGhlIHNpZ25hdHVyZSBidWZmZXIgKi9cbiAgICAgIHNpZ25hdHVyZTogQnVmZmVyO1xuICAgIH1cbiAgfCB7IHNpZ25lZEJ5OiB1bmRlZmluZWQ7IHNpZ25hdHVyZTogdW5kZWZpbmVkIH07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgLSB1c2Uge0BzZWUgdmVyaWZ5U2lnbmF0dXJlc1dpdGhQdWJsaWNLZXlzfSBpbnN0ZWFkXG4gKiBHZXQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbnMgZm9yIG11bHRzaWcgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSBhbW91bnQgLSBtdXN0IGJlIHNldCBmb3Igc2Vnd2l0IHRyYW5zYWN0aW9ucyBhbmQgQklQMTQzIHRyYW5zYWN0aW9uc1xuICogQHBhcmFtIHZlcmlmaWNhdGlvblNldHRpbmdzXG4gKiBAcGFyYW0gcHJldk91dHB1dHMgLSBtdXN0IGJlIHNldCBmb3IgcDJ0ciBhbmQgcDJ0ck11c2lnMiB0cmFuc2FjdGlvbnNcbiAqIEByZXR1cm5zIFNpZ25hdHVyZVZlcmlmaWNhdGlvbltdIC0gaW4gb3JkZXIgb2YgcGFyc2VkIG5vbi1lbXB0eSBzaWduYXR1cmVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaWduYXR1cmVWZXJpZmljYXRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0cmFuc2FjdGlvbjogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIGFtb3VudDogVE51bWJlcixcbiAgdmVyaWZpY2F0aW9uU2V0dGluZ3M6IFZlcmlmaWNhdGlvblNldHRpbmdzID0ge30sXG4gIHByZXZPdXRwdXRzPzogVHhPdXRwdXQ8VE51bWJlcj5bXVxuKTogU2lnbmF0dXJlVmVyaWZpY2F0aW9uW10ge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIXRyYW5zYWN0aW9uLmlucykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB0cmFuc2FjdGlvbmApO1xuICB9XG5cbiAgY29uc3QgaW5wdXQgPSB0cmFuc2FjdGlvbi5pbnNbaW5wdXRJbmRleF07XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghaW5wdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGlucHV0IGF0IGluZGV4ICR7aW5wdXRJbmRleH1gKTtcbiAgfVxuXG4gIGlmICgoIWlucHV0LnNjcmlwdCB8fCBpbnB1dC5zY3JpcHQubGVuZ3RoID09PSAwKSAmJiBpbnB1dC53aXRuZXNzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIFVuc2lnbmVkIGlucHV0OiBubyBzaWduYXR1cmVzLlxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFNjcmlwdCA9IHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyhpbnB1dCk7XG5cbiAgaWYgKHBhcnNlZFNjcmlwdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgfHwgcGFyc2VkU2NyaXB0LnNjcmlwdFR5cGUgPT09ICd0YXByb290U2NyaXB0UGF0aFNwZW5kJykge1xuICAgIGlmIChcbiAgICAgIHBhcnNlZFNjcmlwdC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgJiZcbiAgICAgICh2ZXJpZmljYXRpb25TZXR0aW5ncy5zaWduYXR1cmVJbmRleCB8fCB2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHNpZ25hdHVyZUluZGV4IGFuZCBwdWJsaWNLZXkgcGFyYW1ldGVycyBub3Qgc3VwcG9ydGVkIGZvciB0YXByb290S2V5UGF0aFNwZW5kYCk7XG4gICAgfVxuXG4gICAgaWYgKHZlcmlmaWNhdGlvblNldHRpbmdzLnNpZ25hdHVyZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgc2lnbmF0dXJlSW5kZXggcGFyYW1ldGVyIG5vdCBzdXBwb3J0ZWQgZm9yIHRhcHJvb3RTY3JpcHRQYXRoU3BlbmRgKTtcbiAgICB9XG5cbiAgICBpZiAoIXByZXZPdXRwdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXZPdXRwdXRzIG5vdCBzZXRgKTtcbiAgICB9XG5cbiAgICBpZiAocHJldk91dHB1dHMubGVuZ3RoICE9PSB0cmFuc2FjdGlvbi5pbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXZPdXRwdXRzIGxlbmd0aCAke3ByZXZPdXRwdXRzLmxlbmd0aH0sIGV4cGVjdGVkICR7dHJhbnNhY3Rpb24uaW5zLmxlbmd0aH1gKTtcbiAgICB9XG4gIH1cblxuICBsZXQgcHVibGljS2V5czogQnVmZmVyW107XG4gIGlmIChwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSB7XG4gICAgaWYgKCFwcmV2T3V0cHV0cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmV2T3V0cHV0cyBub3Qgc2V0YCk7XG4gICAgfVxuICAgIHB1YmxpY0tleXMgPSBbZ2V0VGFwcm9vdE91dHB1dEtleShwcmV2T3V0cHV0c1tpbnB1dEluZGV4XS5zY3JpcHQpXTtcbiAgfSBlbHNlIHtcbiAgICBwdWJsaWNLZXlzID0gcGFyc2VkU2NyaXB0LnB1YmxpY0tleXMuZmlsdGVyKFxuICAgICAgKGJ1ZikgPT5cbiAgICAgICAgdmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5LmVxdWFscyhidWYpIHx8XG4gICAgICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleS5zbGljZSgxKS5lcXVhbHMoYnVmKVxuICAgICk7XG4gIH1cblxuICBjb25zdCBzaWduYXR1cmVzID0gcGFyc2VkU2NyaXB0LnNpZ25hdHVyZXNcbiAgICAuZmlsdGVyKChzKSA9PiBzICYmIHMubGVuZ3RoKVxuICAgIC5maWx0ZXIoKHMsIGkpID0+IHZlcmlmaWNhdGlvblNldHRpbmdzLnNpZ25hdHVyZUluZGV4ID09PSB1bmRlZmluZWQgfHwgdmVyaWZpY2F0aW9uU2V0dGluZ3Muc2lnbmF0dXJlSW5kZXggPT09IGkpO1xuXG4gIHJldHVybiBzaWduYXR1cmVzLm1hcCgoc2lnbmF0dXJlQnVmZmVyKTogU2lnbmF0dXJlVmVyaWZpY2F0aW9uID0+IHtcbiAgICBpZiAoc2lnbmF0dXJlQnVmZmVyID09PSAwIHx8IHNpZ25hdHVyZUJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB7IHNpZ25lZEJ5OiB1bmRlZmluZWQsIHNpZ25hdHVyZTogdW5kZWZpbmVkIH07XG4gICAgfVxuXG4gICAgbGV0IGhhc2hUeXBlID0gVHJhbnNhY3Rpb24uU0lHSEFTSF9ERUZBVUxUO1xuXG4gICAgaWYgKHNpZ25hdHVyZUJ1ZmZlci5sZW5ndGggPT09IDY1KSB7XG4gICAgICBoYXNoVHlwZSA9IHNpZ25hdHVyZUJ1ZmZlcltzaWduYXR1cmVCdWZmZXIubGVuZ3RoIC0gMV07XG4gICAgICBzaWduYXR1cmVCdWZmZXIgPSBzaWduYXR1cmVCdWZmZXIuc2xpY2UoMCwgLTEpO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RTY3JpcHRQYXRoU3BlbmQnKSB7XG4gICAgICBpZiAoIXByZXZPdXRwdXRzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJldk91dHB1dHMgbm90IHNldGApO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBjb250cm9sQmxvY2ssIHB1YlNjcmlwdCB9ID0gcGFyc2VkU2NyaXB0O1xuICAgICAgY29uc3QgbGVhZkhhc2ggPSB0YXByb290LmdldFRhcGxlYWZIYXNoKGVjY0xpYiwgY29udHJvbEJsb2NrLCBwdWJTY3JpcHQpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlSGFzaCA9IHRyYW5zYWN0aW9uLmhhc2hGb3JXaXRuZXNzVjEoXG4gICAgICAgIGlucHV0SW5kZXgsXG4gICAgICAgIHByZXZPdXRwdXRzLm1hcCgoeyBzY3JpcHQgfSkgPT4gc2NyaXB0KSxcbiAgICAgICAgcHJldk91dHB1dHMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSxcbiAgICAgICAgaGFzaFR5cGUsXG4gICAgICAgIGxlYWZIYXNoXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzaWduZWRCeSA9IHB1YmxpY0tleXMuZmlsdGVyKFxuICAgICAgICAoaykgPT4gQnVmZmVyLmlzQnVmZmVyKHNpZ25hdHVyZUJ1ZmZlcikgJiYgZWNjTGliLnZlcmlmeVNjaG5vcnIoc2lnbmF0dXJlSGFzaCwgaywgc2lnbmF0dXJlQnVmZmVyKVxuICAgICAgKTtcblxuICAgICAgaWYgKHNpZ25lZEJ5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4geyBzaWduZWRCeTogdW5kZWZpbmVkLCBzaWduYXR1cmU6IHVuZGVmaW5lZCB9O1xuICAgICAgfVxuICAgICAgaWYgKHNpZ25lZEJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4geyBzaWduZWRCeTogc2lnbmVkQnlbMF0sIHNpZ25hdHVyZTogc2lnbmF0dXJlQnVmZmVyIH07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGlsbGVnYWwgc3RhdGU6IHNpZ25lZCBieSBtdWx0aXBsZSBwdWJsaWMga2V5c2ApO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkU2NyaXB0LnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgICAgaWYgKCFwcmV2T3V0cHV0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXZPdXRwdXRzIG5vdCBzZXRgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZ25hdHVyZUhhc2ggPSB0cmFuc2FjdGlvbi5oYXNoRm9yV2l0bmVzc1YxKFxuICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICBwcmV2T3V0cHV0cy5tYXAoKHsgc2NyaXB0IH0pID0+IHNjcmlwdCksXG4gICAgICAgIHByZXZPdXRwdXRzLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSksXG4gICAgICAgIGhhc2hUeXBlXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZWNjTGliLnZlcmlmeVNjaG5vcnIoc2lnbmF0dXJlSGFzaCwgcHVibGljS2V5c1swXSwgc2lnbmF0dXJlQnVmZmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgPyB7IHNpZ25lZEJ5OiBwdWJsaWNLZXlzWzBdLCBzaWduYXR1cmU6IHNpZ25hdHVyZUJ1ZmZlciB9XG4gICAgICAgIDogeyBzaWduZWRCeTogdW5kZWZpbmVkLCBzaWduYXR1cmU6IHVuZGVmaW5lZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzbGljZSB0aGUgbGFzdCBieXRlIGZyb20gdGhlIHNpZ25hdHVyZSBoYXNoIGlucHV0IGJlY2F1c2UgaXQncyB0aGUgaGFzaCB0eXBlXG4gICAgICBjb25zdCB7IHNpZ25hdHVyZSwgaGFzaFR5cGUgfSA9IFNjcmlwdFNpZ25hdHVyZS5kZWNvZGUoc2lnbmF0dXJlQnVmZmVyKTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSGFzaCA9XG4gICAgICAgIHBhcnNlZFNjcmlwdC5zY3JpcHRUeXBlID09PSAncDJzaFAyd3NoJyB8fCBwYXJzZWRTY3JpcHQuc2NyaXB0VHlwZSA9PT0gJ3Ayd3NoJ1xuICAgICAgICAgID8gdHJhbnNhY3Rpb24uaGFzaEZvcldpdG5lc3NWMChpbnB1dEluZGV4LCBwYXJzZWRTY3JpcHQucHViU2NyaXB0LCBhbW91bnQsIGhhc2hUeXBlKVxuICAgICAgICAgIDogdHJhbnNhY3Rpb24uaGFzaEZvclNpZ25hdHVyZUJ5TmV0d29yayhpbnB1dEluZGV4LCBwYXJzZWRTY3JpcHQucHViU2NyaXB0LCBhbW91bnQsIGhhc2hUeXBlKTtcbiAgICAgIGNvbnN0IHNpZ25lZEJ5ID0gcHVibGljS2V5cy5maWx0ZXIoKHB1YmxpY0tleSkgPT5cbiAgICAgICAgZWNjTGliLnZlcmlmeShcbiAgICAgICAgICB0cmFuc2FjdGlvbkhhc2gsXG4gICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgICAvKlxuICAgICAgICAgICAgU3RyaWN0IHZlcmlmaWNhdGlvbiAocmVxdWlyZSBsb3dlci1TIHZhbHVlKSwgYXMgcmVxdWlyZWQgYnkgQklQLTAxNDZcbiAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAxNDYubWVkaWF3aWtpXG4gICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi1jb3JlL3NlY3AyNTZrMS9ibG9iL2FjODNiZTMzL2luY2x1ZGUvc2VjcDI1NmsxLmgjTDQ3OC1MNTA4XG4gICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbmpzL3Rpbnktc2VjcDI1NmsxL2Jsb2IvdjEuMS42L2pzLmpzI0wyMzEtTDIzM1xuICAgICAgICAgICovXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICBpZiAoc2lnbmVkQnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7IHNpZ25lZEJ5OiB1bmRlZmluZWQsIHNpZ25hdHVyZTogdW5kZWZpbmVkIH07XG4gICAgICB9XG4gICAgICBpZiAoc2lnbmVkQnkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7IHNpZ25lZEJ5OiBzaWduZWRCeVswXSwgc2lnbmF0dXJlOiBzaWduYXR1cmVCdWZmZXIgfTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgaWxsZWdhbCBzdGF0ZTogc2lnbmVkIGJ5IG11bHRpcGxlIHB1YmxpYyBrZXlzYCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2Uge0BzZWUgdmVyaWZ5U2lnbmF0dXJlV2l0aFB1YmxpY0tleXN9IGluc3RlYWRcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSBhbW91bnRcbiAqIEBwYXJhbSB2ZXJpZmljYXRpb25TZXR0aW5ncyAtIGlmIHB1YmxpY0tleSBpcyBzcGVjaWZpZWQsIHJldHVybnMgdHJ1ZSBpZmYgYW55IHNpZ25hdHVyZSBpcyBzaWduZWQgYnkgcHVibGljS2V5LlxuICogQHBhcmFtIHByZXZPdXRwdXRzIC0gbXVzdCBiZSBzZXQgZm9yIHAydHIgdHJhbnNhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmU8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHRyYW5zYWN0aW9uOiBVdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgYW1vdW50OiBUTnVtYmVyLFxuICB2ZXJpZmljYXRpb25TZXR0aW5nczogVmVyaWZpY2F0aW9uU2V0dGluZ3MgPSB7fSxcbiAgcHJldk91dHB1dHM/OiBUeE91dHB1dDxUTnVtYmVyPltdXG4pOiBib29sZWFuIHtcbiAgY29uc3Qgc2lnbmF0dXJlVmVyaWZpY2F0aW9ucyA9IGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnMoXG4gICAgdHJhbnNhY3Rpb24sXG4gICAgaW5wdXRJbmRleCxcbiAgICBhbW91bnQsXG4gICAgdmVyaWZpY2F0aW9uU2V0dGluZ3MsXG4gICAgcHJldk91dHB1dHNcbiAgKS5maWx0ZXIoXG4gICAgKHYpID0+XG4gICAgICAvLyBJZiBubyBwdWJsaWNLZXkgaXMgc2V0IGluIHZlcmlmaWNhdGlvblNldHRpbmdzLCBhbGwgc2lnbmF0dXJlcyBtdXN0IGJlIHZhbGlkLlxuICAgICAgLy8gT3RoZXJ3aXNlLCBhIHNpbmdsZSB2YWxpZCBzaWduYXR1cmUgYnkgdGhlIHNwZWNpZmllZCBwdWJrZXkgaXMgc3VmZmljaWVudC5cbiAgICAgIHZlcmlmaWNhdGlvblNldHRpbmdzLnB1YmxpY0tleSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAodi5zaWduZWRCeSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICh2ZXJpZmljYXRpb25TZXR0aW5ncy5wdWJsaWNLZXkuZXF1YWxzKHYuc2lnbmVkQnkpIHx8XG4gICAgICAgICAgdmVyaWZpY2F0aW9uU2V0dGluZ3MucHVibGljS2V5LnNsaWNlKDEpLmVxdWFscyh2LnNpZ25lZEJ5KSkpXG4gICk7XG5cbiAgcmV0dXJuIHNpZ25hdHVyZVZlcmlmaWNhdGlvbnMubGVuZ3RoID4gMCAmJiBzaWduYXR1cmVWZXJpZmljYXRpb25zLmV2ZXJ5KCh2KSA9PiB2LnNpZ25lZEJ5ICE9PSB1bmRlZmluZWQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB2XG4gKiBAcGFyYW0gcHVibGljS2V5XG4gKiBAcmV0dXJuIHRydWUgaWZmIHNpZ25hdHVyZSBpcyBieSBwdWJsaWNLZXkgKG9yIHhvbmx5IHZhcmlhbnQgb2YgcHVibGljS2V5KVxuICovXG5mdW5jdGlvbiBpc1NpZ25hdHVyZUJ5UHVibGljS2V5KHY6IFNpZ25hdHVyZVZlcmlmaWNhdGlvbiwgcHVibGljS2V5OiBCdWZmZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAhIXYuc2lnbmVkQnkgJiZcbiAgICAodi5zaWduZWRCeS5lcXVhbHMocHVibGljS2V5KSB8fFxuICAgICAgLyogZm9yIHAydHIgc2lnbmF0dXJlcywgd2UgcGFzcyB0aGUgcHVia2V5IGluIDMzLWJ5dGUgZm9ybWF0IHJlY292ZXIgaXQgZnJvbSB0aGUgc2lnbmF0dXJlIGluIDMyLWJ5dGUgZm9ybWF0ICovXG4gICAgICAocHVibGljS2V5Lmxlbmd0aCA9PT0gMzMgJiYgaXNTaWduYXR1cmVCeVB1YmxpY0tleSh2LCBwdWJsaWNLZXkuc2xpY2UoMSkpKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBpbnB1dEluZGV4XG4gKiBAcGFyYW0gcHJldk91dHB1dHNcbiAqIEBwYXJhbSBwdWJsaWNLZXlzXG4gKiBAcmV0dXJuIGFycmF5IHdpdGggc2lnbmF0dXJlIGNvcnJlc3BvbmRpbmcgdG8gbi10aCBrZXksIHVuZGVmaW5lZCBpZiBubyBtYXRjaCBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2lnbmF0dXJlc1dpdGhQdWJsaWNLZXlzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0cmFuc2FjdGlvbjogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHByZXZPdXRwdXRzOiBUeE91dHB1dDxUTnVtYmVyPltdLFxuICBwdWJsaWNLZXlzOiBCdWZmZXJbXVxuKTogQXJyYXk8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gIGlmICh0cmFuc2FjdGlvbi5pbnMubGVuZ3RoICE9PSBwcmV2T3V0cHV0cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGlucHV0IGxlbmd0aCBtdXN0IG1hdGNoIHByZXZPdXRwdXRzIGxlbmd0aGApO1xuICB9XG5cbiAgY29uc3Qgc2lnbmF0dXJlVmVyaWZpY2F0aW9ucyA9IGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnMoXG4gICAgdHJhbnNhY3Rpb24sXG4gICAgaW5wdXRJbmRleCxcbiAgICBwcmV2T3V0cHV0c1tpbnB1dEluZGV4XS52YWx1ZSxcbiAgICB7fSxcbiAgICBwcmV2T3V0cHV0c1xuICApO1xuXG4gIHJldHVybiBwdWJsaWNLZXlzLm1hcCgocHVibGljS2V5KSA9PiB7XG4gICAgY29uc3QgdiA9IHNpZ25hdHVyZVZlcmlmaWNhdGlvbnMuZmluZCgodikgPT4gaXNTaWduYXR1cmVCeVB1YmxpY0tleSh2LCBwdWJsaWNLZXkpKTtcbiAgICByZXR1cm4gdiA/IHYuc2lnbmF0dXJlIDogdW5kZWZpbmVkO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBpbnB1dEluZGV4XG4gKiBAcGFyYW0gcHJldk91dHB1dHMgLSB0cmFuc2FjdGlvbiBvdXRwdXRzIGZvciBpbnB1dHNcbiAqIEBwYXJhbSBwdWJsaWNLZXlzIC0gcHVibGljIGtleXMgdG8gY2hlY2sgc2lnbmF0dXJlcyBmb3JcbiAqIEByZXR1cm4gYXJyYXkgb2YgYm9vbGVhbnMgaW5kaWNhdGluZyBhIHZhbGlkIHNpZ25hdHVyZSBmb3IgZXZlcnkgcHVia2V5IGluIF9wdWJsaWNLZXlzX1xuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5U2lnbmF0dXJlV2l0aFB1YmxpY0tleXM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHRyYW5zYWN0aW9uOiBVdHhvVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgcHJldk91dHB1dHM6IFR4T3V0cHV0PFROdW1iZXI+W10sXG4gIHB1YmxpY0tleXM6IEJ1ZmZlcltdXG4pOiBib29sZWFuW10ge1xuICByZXR1cm4gZ2V0U2lnbmF0dXJlc1dpdGhQdWJsaWNLZXlzKHRyYW5zYWN0aW9uLCBpbnB1dEluZGV4LCBwcmV2T3V0cHV0cywgcHVibGljS2V5cykubWFwKChzKSA9PiBzICE9PSB1bmRlZmluZWQpO1xufVxuXG4vKipcbiAqIFdyYXBwZXIgZm9yIHtAc2VlIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzfSBmb3Igc2luZ2xlIHB1YmtleVxuICogQHBhcmFtIHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0gaW5wdXRJbmRleFxuICogQHBhcmFtIHByZXZPdXRwdXRzXG4gKiBAcGFyYW0gcHVibGljS2V5XG4gKiBAcmV0dXJuIHRydWUgaWZmIHNpZ25hdHVyZSBpcyB2YWxpZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5U2lnbmF0dXJlV2l0aFB1YmxpY0tleTxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHJhbnNhY3Rpb246IFV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICBwcmV2T3V0cHV0czogVHhPdXRwdXQ8VE51bWJlcj5bXSxcbiAgcHVibGljS2V5OiBCdWZmZXJcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gdmVyaWZ5U2lnbmF0dXJlV2l0aFB1YmxpY0tleXModHJhbnNhY3Rpb24sIGlucHV0SW5kZXgsIHByZXZPdXRwdXRzLCBbcHVibGljS2V5XSlbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0U2lnSGFzaChuZXR3b3JrOiBOZXR3b3JrLCBzY3JpcHRUeXBlPzogU2NyaXB0VHlwZTJPZjMpOiBudW1iZXIge1xuICBzd2l0Y2ggKGdldE1haW5uZXQobmV0d29yaykpIHtcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5jYXNoOlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbnN2OlxuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmdvbGQ6XG4gICAgY2FzZSBuZXR3b3Jrcy5lY2FzaDpcbiAgICAgIHJldHVybiBUcmFuc2FjdGlvbi5TSUdIQVNIX0FMTCB8IFV0eG9UcmFuc2FjdGlvbi5TSUdIQVNIX0ZPUktJRDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHNjcmlwdFR5cGUgPT09ICdwMnRyJyA/IFRyYW5zYWN0aW9uLlNJR0hBU0hfREVGQVVMVCA6IFRyYW5zYWN0aW9uLlNJR0hBU0hfQUxMO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduSW5wdXRQMnNoUDJwazxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHhCdWlsZGVyOiBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+LFxuICB2aW46IG51bWJlcixcbiAga2V5UGFpcjogQklQMzJJbnRlcmZhY2Vcbik6IHZvaWQge1xuICBjb25zdCBwcmV2T3V0U2NyaXB0VHlwZSA9ICdwMnNoLXAycGsnO1xuICBjb25zdCB7IHJlZGVlbVNjcmlwdCwgd2l0bmVzc1NjcmlwdCB9ID0gY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGsoa2V5UGFpci5wdWJsaWNLZXkpO1xuICBrZXlQYWlyLm5ldHdvcmsgPSB0eEJ1aWxkZXIubmV0d29yaztcblxuICB0eEJ1aWxkZXIuc2lnbih7XG4gICAgdmluLFxuICAgIHByZXZPdXRTY3JpcHRUeXBlLFxuICAgIGtleVBhaXIsXG4gICAgaGFzaFR5cGU6IGdldERlZmF1bHRTaWdIYXNoKHR4QnVpbGRlci5uZXR3b3JrIGFzIE5ldHdvcmspLFxuICAgIHJlZGVlbVNjcmlwdCxcbiAgICB3aXRuZXNzU2NyaXB0LFxuICAgIHdpdG5lc3NWYWx1ZTogdW5kZWZpbmVkLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25JbnB1dDJPZjM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4QnVpbGRlcjogVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPixcbiAgdmluOiBudW1iZXIsXG4gIHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUyT2YzLFxuICBwdWJrZXlzOiBUcmlwbGU8QnVmZmVyPixcbiAga2V5UGFpcjogQklQMzJJbnRlcmZhY2UsXG4gIGNvc2lnbmVyOiBCdWZmZXIsXG4gIGFtb3VudDogVE51bWJlclxuKTogdm9pZCB7XG4gIGxldCBjb250cm9sQmxvY2s7XG4gIGxldCByZWRlZW1TY3JpcHQ7XG4gIGxldCB3aXRuZXNzU2NyaXB0O1xuXG4gIGNvbnN0IHByZXZPdXRTY3JpcHRUeXBlID0gc2NyaXB0VHlwZTJPZjNBc1ByZXZPdXRUeXBlKHNjcmlwdFR5cGUpO1xuICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3AydHInKSB7XG4gICAgKHsgd2l0bmVzc1NjcmlwdCwgY29udHJvbEJsb2NrIH0gPSBjcmVhdGVTcGVuZFNjcmlwdFAydHIocHVia2V5cywgW2tleVBhaXIucHVibGljS2V5LCBjb3NpZ25lcl0pKTtcbiAgfSBlbHNlIHtcbiAgICAoeyByZWRlZW1TY3JpcHQsIHdpdG5lc3NTY3JpcHQgfSA9IGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMocHVia2V5cywgc2NyaXB0VHlwZSkpO1xuICB9XG5cbiAga2V5UGFpci5uZXR3b3JrID0gdHhCdWlsZGVyLm5ldHdvcms7XG5cbiAgdHhCdWlsZGVyLnNpZ24oe1xuICAgIHZpbixcbiAgICBwcmV2T3V0U2NyaXB0VHlwZSxcbiAgICBrZXlQYWlyLFxuICAgIGhhc2hUeXBlOiBnZXREZWZhdWx0U2lnSGFzaCh0eEJ1aWxkZXIubmV0d29yayBhcyBOZXR3b3JrLCBzY3JpcHRUeXBlKSxcbiAgICByZWRlZW1TY3JpcHQsXG4gICAgd2l0bmVzc1NjcmlwdCxcbiAgICB3aXRuZXNzVmFsdWU6IGFtb3VudCxcbiAgICBjb250cm9sQmxvY2ssXG4gIH0pO1xufVxuIl19

@@ -15,2 +15,11 @@ /// <reference types="node" />

}
declare type SignatureParams = {
/** When true, and add the second (last) nonce and signature for a taproot key
* path spend deterministically. Throws an error if done for the first nonce/signature
* of a taproot keypath spend. Ignore for all other input types.
*/
deterministic: boolean;
/** Allowed sighash types */
sighashTypes: number[];
};
export interface HDTaprootSigner extends HDSigner {

@@ -147,8 +156,11 @@ /**

*/
signAllInputsHD(hdKeyPair: HDTaprootSigner | HDTaprootMusig2Signer, sighashTypes?: number[]): this;
signAllInputsHD(hdKeyPair: HDTaprootSigner | HDTaprootMusig2Signer, params?: number[] | Partial<SignatureParams>): this;
/**
* Mostly copied from bitcoinjs-lib/ts_src/psbt.ts:signInputHD
*/
signTaprootInputHD(inputIndex: number, hdKeyPair: HDTaprootSigner | HDTaprootMusig2Signer, sighashTypes?: number[]): this;
signInputHD(inputIndex: number, hdKeyPair: HDTaprootSigner | HDTaprootMusig2Signer, sighashTypes?: number[]): this;
signTaprootInputHD(inputIndex: number, hdKeyPair: HDTaprootSigner | HDTaprootMusig2Signer, { sighashTypes, deterministic }?: {
sighashTypes?: number[] | undefined;
deterministic?: boolean | undefined;
}): this;
signInputHD(inputIndex: number, hdKeyPair: HDTaprootSigner | HDTaprootMusig2Signer, params?: number[] | Partial<SignatureParams>): this;
private getMusig2Participants;

@@ -158,13 +170,16 @@ private getMusig2Nonces;

* Signs p2tr musig2 key path input with 2 aggregated keys.
*
* Note: Only can sign deterministically as the cosigner
* @param inputIndex
* @param signer - XY public key and private key are required
* @param sighashTypes
* @param deterministic If true, sign the musig input deterministically
*/
signTaprootMusig2Input(inputIndex: number, signer: Musig2Signer, sighashTypes?: number[]): this;
signTaprootMusig2Input(inputIndex: number, signer: Musig2Signer, { sighashTypes, deterministic }?: {
sighashTypes?: number[] | undefined;
deterministic?: boolean | undefined;
}): this;
signTaprootInput(inputIndex: number, signer: SchnorrSigner, leafHashes: Buffer[], sighashTypes?: number[]): this;
private getTaprootOutputScript;
getTaprootHashForSig(inputIndex: number, sighashTypes?: number[], leafHash?: Buffer): {
hash: Buffer;
sighashType: number;
};
private getTaprootHashForSig;
/**

@@ -193,26 +208,56 @@ * Adds proprietary key value pair to PSBT input.

/**
* Generates and sets Musig2 nonces to p2trMusig2 key path spending inputs.
* The properties tapInternalKey, tapMerkleRoot, tapBip32Derivation for derivedWalletKey are
* required per p2trMusig2 key path input.
* Also participant keys are required from psbt proprietary key values.
* Ref: https://gist.github.com/sanket1729/4b525c6049f4d9e034d27368c49f28a6
* @param psbt
* @param derivedKeyPair derived key pair
* Generates and sets MuSig2 nonce to taproot key path input at inputIndex.
* If input is not a taproot key path, no action.
*
* @param inputIndex input index
* @param keyPair derived key pair
* @param sessionId Optional extra entropy. If provided it must either be a counter unique to this secret key,
* (converted to an array of 32 bytes), or 32 uniformly random bytes.
* @param deterministic If true, set the cosigner nonce deterministically
*/
setMusig2Nonces(derivedKeyPair: BIP32Interface, sessionId?: Buffer): this;
setInputMusig2Nonce(inputIndex: number, derivedKeyPair: BIP32Interface, params?: {
sessionId?: Buffer;
deterministic?: boolean;
}): this;
/**
* Generates and sets Musig2 nonces to p2trMusig2 key path spending inputs.
* The properties tapInternalKey, tapMerkleRoot, tapBip32Derivation for derivedWalletKey are
* required per p2trMusig2 key path input.
* Also participant keys are required from psbt proprietary key values.
* Ref: https://gist.github.com/sanket1729/4b525c6049f4d9e034d27368c49f28a6
* @param rootKeyPair HD key pair
* Generates and sets MuSig2 nonce to taproot key path input at inputIndex.
* If input is not a taproot key path, no action.
*
* @param inputIndex input index
* @param keyPair HD root key pair
* @param sessionId Optional extra entropy. If provided it must either be a counter unique to this secret key,
* (converted to an array of 32 bytes), or 32 uniformly random bytes.
* @param deterministic If true, set the cosigner nonce deterministically
*/
setMusig2NoncesHD(rootKeyPair: BIP32Interface, sessionId?: Buffer): this;
setInputMusig2NonceHD(inputIndex: number, keyPair: BIP32Interface, params?: {
sessionId?: Buffer;
deterministic?: boolean;
}): this;
/**
* Generates and sets MuSig2 nonce to all taproot key path inputs. Other inputs will be skipped.
*
* @param inputIndex input index
* @param keyPair derived key pair
* @param sessionId Optional extra entropy. If provided it must either be a counter unique to this secret key,
* (converted to an array of 32 bytes), or 32 uniformly random bytes.
*/
setAllInputsMusig2Nonce(keyPair: BIP32Interface, params?: {
sessionId?: Buffer;
deterministic?: boolean;
}): this;
/**
* Generates and sets MuSig2 nonce to all taproot key path inputs. Other inputs will be skipped.
*
* @param inputIndex input index
* @param keyPair HD root key pair
* @param sessionId Optional extra entropy. If provided it must either be a counter unique to this secret key,
* (converted to an array of 32 bytes), or 32 uniformly random bytes.
*/
setAllInputsMusig2NonceHD(keyPair: BIP32Interface, params?: {
sessionId?: Buffer;
deterministic?: boolean;
}): this;
clone(): this;
}
export {};
//# sourceMappingURL=UtxoPsbt.d.ts.map

@@ -21,3 +21,3 @@ /**

export declare const chainCodesP2trMusig2: readonly [40, 41];
export declare const chainCodes: (0 | 30 | 1 | 10 | 11 | 20 | 21 | 31 | 40 | 41)[];
export declare const chainCodes: (0 | 1 | 10 | 11 | 20 | 21 | 30 | 31 | 40 | 41)[];
export declare type ChainCode = (typeof chainCodes)[number];

@@ -24,0 +24,0 @@ export declare function isChainCode(n: unknown): n is ChainCode;

@@ -80,12 +80,3 @@ "use strict";

const { txid, vout, script, value } = Unspent_1.toPrevOutput(u, psbt.network);
const walletKeys = rootWalletKeys.deriveForChainAndIndex(u.chain, u.index);
const scriptType = outputScripts_1.scriptTypeForChain(u.chain);
psbt.addInput({
hash: txid,
index: vout,
witnessUtxo: {
script,
value,
},
});
psbt.addInput({ hash: txid, index: vout });
const inputIndex = psbt.inputCount - 1;

@@ -95,3 +86,6 @@ // Because Zcash directly hashes the value for non-segwit transactions, we do not need to check indirectly

// segwit transactions
if (!chains_1.isSegwit(u.chain) && __1.getMainnet(psbt.network) !== __1.networks.zcash) {
if (chains_1.isSegwit(u.chain) || __1.getMainnet(psbt.network) === __1.networks.zcash) {
psbt.updateInput(inputIndex, { witnessUtxo: { script, value } });
}
else {
if (!Unspent_1.isUnspentWithPrevTx(u)) {

@@ -106,2 +100,4 @@ throw new Error('Error, require previous tx to add to PSBT');

}
const walletKeys = rootWalletKeys.deriveForChainAndIndex(u.chain, u.index);
const scriptType = outputScripts_1.scriptTypeForChain(u.chain);
const isBackupFlow = signer === 'backup' || cosigner === 'backup';

@@ -161,2 +157,2 @@ if (scriptType === 'p2tr' || (scriptType === 'p2trMusig2' && isBackupFlow)) {

exports.addWalletUnspentToPsbt = addWalletUnspentToPsbt;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5zcGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvVW5zcGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBc0Q7QUFFdEQsb0RBTzBCO0FBQzFCLDJDQUErQztBQUMvQyw0Q0FBNEU7QUFLNUUsd0NBQXFHO0FBQ3JHLHFDQUErQztBQUUvQyxzQ0FBeUQ7QUFDekQsZ0RBQTZEO0FBYTdELFNBQWdCLGVBQWUsQ0FBa0MsQ0FBbUI7SUFDbEYsT0FBUSxDQUE0QixDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDM0QsQ0FBQztBQUZELDBDQUVDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQ2xDLFNBQTBDLEVBQzFDLFVBQWtCLEVBQ2xCLE9BQStCLEVBQy9CLGFBQWtEO0lBRWxELE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RyxNQUFNLFVBQVUsR0FBRyxrQ0FBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsTUFBTSxTQUFTLEdBQUcsc0NBQXNCLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDekYsTUFBTSxpQkFBaUIsR0FBRyx3QkFBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQWtCLENBQUMsQ0FBQztJQUN4RixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1FBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0NBQWdDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ3JHLENBQUM7S0FDSDtJ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Q0FBQyxDQUFDO2dCQUN2QyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTO2dCQUN4QyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQzNCLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVzthQUMxRCxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDakQ7UUFDRCxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDaEQ7S0FDRjtBQUNILENBQUM7QUEvRkQsd0RBK0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TWFpbm5ldCwgTmV0d29yaywgbmV0d29ya3MgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vVXR4b1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBjcmVhdGVLZXlQYXRoUDJ0ck11c2lnMixcbiAgY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyxcbiAgY3JlYXRlU3BlbmRTY3JpcHRQMnRyLFxuICBjcmVhdGVTcGVuZFNjcmlwdFAydHJNdXNpZzIsXG4gIHNjcmlwdFR5cGVGb3JDaGFpbixcbiAgdG9YT25seVB1YmxpY0tleSxcbn0gZnJvbSAnLi4vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQgeyB0b091dHB1dFNjcmlwdCB9IGZyb20gJy4uLy4uL2FkZHJlc3MnO1xuaW1wb3J0IHsgc2lnbklucHV0Mk9mMywgdmVyaWZ5U2lnbmF0dXJlV2l0aFB1YmxpY0tleXMgfSBmcm9tICcuLi9zaWduYXR1cmUnO1xuaW1wb3J0IHsgV2FsbGV0VW5zcGVudFNpZ25lciB9IGZyb20gJy4vV2FsbGV0VW5zcGVudFNpZ25lcic7XG5pbXBvcnQgeyBLZXlOYW1lLCBSb290V2FsbGV0S2V5cyB9IGZyb20gJy4vV2FsbGV0S2V5cyc7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9VdHhvVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJpcGxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgdG9PdXRwdXQsIFVuc3BlbnRXaXRoUHJldlR4LCBVbnNwZW50LCBpc1Vuc3BlbnRXaXRoUHJldlR4LCB0b1ByZXZPdXRwdXQgfSBmcm9tICcuLi9VbnNwZW50JztcbmltcG9ydCB7IENoYWluQ29kZSwgaXNTZWd3aXQgfSBmcm9tICcuL2NoYWlucyc7XG5pbXBvcnQgeyBVdHhvUHNidCB9IGZyb20gJy4uL1V0eG9Qc2J0JztcbmltcG9ydCB7IGVuY29kZVBzYnRNdXNpZzJQYXJ0aWNpcGFudHMgfSBmcm9tICcuLi9NdXNpZzInO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBVbnNwZW50PFROdW1iZXI+IHtcbiAgY2hhaW46IENoYWluQ29kZTtcbiAgaW5kZXg6IG51bWJlcjtcbiAgd2l0bmVzc1NjcmlwdD86IHN0cmluZztcbiAgdmFsdWVTdHJpbmc/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9uV2l0bmVzc1dhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBVbnNwZW50V2l0aFByZXZUeDxUTnVtYmVyPixcbiAgICBXYWxsZXRVbnNwZW50PFROdW1iZXI+IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4odTogVW5zcGVudDxUTnVtYmVyPik6IHUgaXMgV2FsbGV0VW5zcGVudDxUTnVtYmVyPiB7XG4gIHJldHVybiAodSBhcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+KS5jaGFpbiAhPT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbklucHV0V2l0aFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4QnVpbGRlcjogVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICB1bnNwZW50OiBXYWxsZXRVbnNwZW50PFROdW1iZXI+LFxuICB1bnNwZW50U2lnbmVyOiBXYWxsZXRVbnNwZW50U2lnbmVyPFJvb3RXYWxsZXRLZXlzPlxuKTogdm9pZCB7XG4gIGNvbnN0IHsgd2FsbGV0S2V5cywgc2lnbmVyLCBjb3NpZ25lciB9ID0gdW5zcGVudFNpZ25lci5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpO1xuICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZUZvckNoYWluKHVuc3BlbnQuY2hhaW4pO1xuICBjb25zdCBwdWJTY3JpcHQgPSBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzKHdhbGxldEtleXMucHVibGljS2V5cywgc2NyaXB0VHlwZSkuc2NyaXB0UHViS2V5O1xuICBjb25zdCBwdWJTY3JpcHRFeHBlY3RlZCA9IHRvT3V0cHV0U2NyaXB0KHVuc3BlbnQuYWRkcmVzcywgdHhCdWlsZGVyLm5ldHdvcmsgYXMgTmV0d29yayk7XG4gIGlmICghcHViU2NyaXB0LmVxdWFscyhwdWJTY3JpcHRFeHBlY3RlZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgcHVic2NyaXB0IG1pc21hdGNoOiBleHBlY3RlZCAke3B1YlNjcmlwdEV4cGVjdGVkLnRvU3RyaW5nKCdoZXgnKX0gZ290ICR7cHViU2NyaXB0LnRvU3RyaW5nKCdoZXgnKX1gXG4gICAgKTtcbiAgfVxuICBzaWduSW5wdXQyT2YzPFROdW1iZXI+KFxuICAgIHR4QnVpbGRlcixcbiAgICBpbnB1dEluZGV4LFxuICAgIHNjcmlwdFR5cGUsXG4gICAgd2FsbGV0S2V5cy5wdWJsaWNLZXlzLFxuICAgIHNpZ25lcixcbiAgICBjb3NpZ25lci5wdWJsaWNLZXksXG4gICAgdW5zcGVudC52YWx1ZVxuICApO1xufVxuXG4vKipcbiAqIEBwYXJhbSB0eFxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSB1bnNwZW50c1xuICogQHBhcmFtIHdhbGxldEtleXNcbiAqIEByZXR1cm4gdHJpcGxlIG9mIGJvb2xlYW5zIGluZGljYXRpbmcgYSB2YWxpZCBzaWduYXR1cmUgZm9yIGVhY2ggcHVia2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmVXaXRoVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IFV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICB1bnNwZW50czogVW5zcGVudDxUTnVtYmVyPltdLFxuICB3YWxsZXRLZXlzOiBSb290V2FsbGV0S2V5c1xuKTogVHJpcGxlPGJvb2xlYW4+IHtcbiAgaWYgKHR4Lmlucy5sZW5ndGggIT09IHVuc3BlbnRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW5wdXQgbGVuZ3RoIG11c3QgbWF0Y2ggdW5zcGVudHMgbGVuZ3RoYCk7XG4gIH1cbiAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2lucHV0SW5kZXhdO1xuICBpZiAoIWlzV2FsbGV0VW5zcGVudCh1bnNwZW50KSkge1xuICAgIHJldHVybiBbZmFsc2UsIGZhbHNlLCBmYWxzZV07XG4gIH1cbiAgcmV0dXJuIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzKFxuICAgIHR4LFxuICAgIGlucHV0SW5kZXgsXG4gICAgdW5zcGVudHMubWFwKCh1KSA9PiB0b091dHB1dCh1LCB0eC5uZXR3b3JrKSksXG4gICAgd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXNcbiAgKSBhcyBUcmlwbGU8Ym9vbGVhbj47XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVzZWQgaW4gY2VydGFpbiBsZWdhY3kgc2lnbmluZyBtZXRob2RzIHRoYXQgZG8gbm90IGRlcml2ZSBzaWduaW5nIGRhdGEgZnJvbSBpbmRleC9jaGFpblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhbGxldFVuc3BlbnRMZWdhY3k8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+IHtcbiAgLyoqIEBkZXByZWNhdGVkIC0gb2J2aWF0ZWQgYnkgc2lnbldpdGhVbnNwZW50ICovXG4gIHJlZGVlbVNjcmlwdD86IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkIC0gb2J2aWF0ZWQgYnkgdmVyaWZ5V2l0aFVuc3BlbnQgKi9cbiAgd2l0bmVzc1NjcmlwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFJlcGxheVByb3RlY3Rpb25VbnNwZW50VG9Qc2J0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgdTogVW5zcGVudDxiaWdpbnQ+LFxuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlcixcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBuZXR3b3JrOiBOZXR3b3JrID0gcHNidC5uZXR3b3JrXG4pOiB2b2lkIHtcbiAgaWYgKG5ldHdvcmsgIT09IHBzYnQubmV0d29yaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgbmV0d29yayBwYXJhbWV0ZXIgZG9lcyBub3QgbWF0Y2ggcHNidC5uZXR3b3JrYCk7XG4gIH1cbiAgY29uc3QgeyB0eGlkLCB2b3V0IH0gPSB0b1ByZXZPdXRwdXQodSwgcHNidC5uZXR3b3JrKTtcbiAgY29uc3QgaXNaY2FzaCA9IGdldE1haW5uZXQocHNidC5uZXR3b3JrKSA9PT0gbmV0d29ya3MuemNhc2g7XG5cbiAgLy8gQmVjYXVzZSBaY2FzaCBkaXJlY3RseSBoYXNoZXMgdGhlIHZhbHVlIGZvciBub24tc2Vnd2l0IHRyYW5zYWN0aW9ucywgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgaW5kaXJlY3RseVxuICAvLyB3aXRoIHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbi4gVGhlcmVmb3JlLCB3ZSBjYW4gdHJlYXQgWmNhc2ggbm9uLXNlZ3dpdCB0cmFuc2FjdGlvbnMgYXMgQml0Y29pblxuICAvLyBzZWd3aXQgdHJhbnNhY3Rpb25zXG4gIGlmICghaXNVbnNwZW50V2l0aFByZXZUeCh1KSAmJiAhaXNaY2FzaCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIHJlcXVpcmUgcHJldmlvdXMgdHggdG8gYWRkIHRvIFBTQlQnKTtcbiAgfVxuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoOiB0eGlkLFxuICAgIGluZGV4OiB2b3V0LFxuICAgIHJlZGVlbVNjcmlwdCxcbiAgfSk7XG4gIGlmICghaXNaY2FzaCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQocHNidC5pbnB1dENvdW50IC0gMSwgeyBub25XaXRuZXNzVXR4bzogKHUgYXMgVW5zcGVudFdpdGhQcmV2VHg8YmlnaW50PikucHJldlR4IH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRXYWxsZXRVbnNwZW50VG9Qc2J0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgdTogV2FsbGV0VW5zcGVudDxiaWdpbnQ+LFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ25lcjogS2V5TmFtZSxcbiAgY29zaWduZXI6IEtleU5hbWUsXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgbmV0d29yazogTmV0d29yayA9IHBzYnQubmV0d29ya1xuKTogdm9pZCB7XG4gIGlmIChuZXR3b3JrICE9PSBwc2J0Lm5ldHdvcmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5ldHdvcmsgcGFyYW1ldGVyIGRvZXMgbm90IG1hdGNoIHBzYnQubmV0d29ya2ApO1xuICB9XG4gIGNvbnN0IHsgdHhpZCwgdm91dCwgc2NyaXB0LCB2YWx1ZSB9ID0gdG9QcmV2T3V0cHV0KHUsIHBzYnQubmV0d29yayk7XG4gIGNvbnN0IHdhbGxldEtleXMgPSByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHUuY2hhaW4sIHUuaW5kZXgpO1xuICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZUZvckNoYWluKHUuY2hhaW4pO1xuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoOiB0eGlkLFxuICAgIGluZGV4OiB2b3V0LFxuICAgIHdpdG5lc3NVdHhvOiB7XG4gICAgICBzY3JpcHQsXG4gICAgICB2YWx1ZSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgaW5wdXRJbmRleCA9IHBzYnQuaW5wdXRDb3VudCAtIDE7XG4gIC8vIEJlY2F1c2UgWmNhc2ggZGlyZWN0bHkgaGFzaGVzIHRoZSB2YWx1ZSBmb3Igbm9uLXNlZ3dpdCB0cmFuc2FjdGlvbnMsIHdlIGRvIG5vdCBuZWVkIHRvIGNoZWNrIGluZGlyZWN0bHlcbiAgLy8gd2l0aCB0aGUgcHJldmlvdXMgdHJhbnNhY3Rpb24uIFRoZXJlZm9yZSwgd2UgY2FuIHRyZWF0IFpjYXNoIG5vbi1zZWd3aXQgdHJhbnNhY3Rpb25zIGFzIEJpdGNvaW5cbiAgLy8gc2Vnd2l0IHRyYW5zYWN0aW9uc1xuICBpZiAoIWlzU2Vnd2l0KHUuY2hhaW4pICYmIGdldE1haW5uZXQocHNidC5uZXR3b3JrKSAhPT0gbmV0d29ya3MuemNhc2gpIHtcbiAgICBpZiAoIWlzVW5zcGVudFdpdGhQcmV2VHgodSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIHJlcXVpcmUgcHJldmlvdXMgdHggdG8gYWRkIHRvIFBTQlQnKTtcbiAgICB9XG4gICAgLy8gRm9yY2UgdGhlIGxpdGVjb2luIHRyYW5zYWN0aW9uIHRvIGhhdmUgbm8gTVdFQiBhZHZhbmNlZCB0cmFuc2FjdGlvbiBmbGFnXG4gICAgaWYgKGdldE1haW5uZXQocHNidC5uZXR3b3JrKSA9PT0gbmV0d29ya3MubGl0ZWNvaW4pIHtcbiAgICAgIHUucHJldlR4ID0gY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKHUucHJldlR4LCBwc2J0Lm5ldHdvcmssIHsgYW1vdW50VHlwZTogJ2JpZ2ludCcgfSkudG9CdWZmZXIoKTtcbiAgICB9XG4gICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IG5vbldpdG5lc3NVdHhvOiB1LnByZXZUeCB9KTtcbiAgfVxuXG4gIGNvbnN0IGlzQmFja3VwRmxvdyA9IHNpZ25lciA9PT0gJ2JhY2t1cCcgfHwgY29zaWduZXIgPT09ICdiYWNrdXAnO1xuXG4gIGlmIChzY3JpcHRUeXBlID09PSAncDJ0cicgfHwgKHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJyAmJiBpc0JhY2t1cEZsb3cpKSB7XG4gICAgY29uc3QgY3JlYXRlU3BlbmRTY3JpcHRQMnRyRm4gPSBzY3JpcHRUeXBlID09PSAncDJ0cicgPyBjcmVhdGVTcGVuZFNjcmlwdFAydHIgOiBjcmVhdGVTcGVuZFNjcmlwdFAydHJNdXNpZzI7XG4gICAgY29uc3QgeyBjb250cm9sQmxvY2ssIHdpdG5lc3NTY3JpcHQsIGxlYWZWZXJzaW9uLCBsZWFmSGFzaCB9ID0gY3JlYXRlU3BlbmRTY3JpcHRQMnRyRm4od2FsbGV0S2V5cy5wdWJsaWNLZXlzLCBbXG4gICAgICB3YWxsZXRLZXlzW3NpZ25lcl0ucHVibGljS2V5LFxuICAgICAgd2FsbGV0S2V5c1tjb3NpZ25lcl0ucHVibGljS2V5LFxuICAgIF0pO1xuICAgIHBzYnQudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwge1xuICAgICAgdGFwTGVhZlNjcmlwdDogW3sgY29udHJvbEJsb2NrLCBzY3JpcHQ6IHdpdG5lc3NTY3JpcHQsIGxlYWZWZXJzaW9uIH1dLFxuICAgICAgdGFwQmlwMzJEZXJpdmF0aW9uOiBbc2lnbmVyLCBjb3NpZ25lcl0ubWFwKChrZXkpID0+ICh7XG4gICAgICAgIGxlYWZIYXNoZXM6IFtsZWFmSGFzaF0sXG4gICAgICAgIHB1YmtleTogdG9YT25seVB1YmxpY0tleSh3YWxsZXRLZXlzW2tleV0ucHVibGljS2V5KSxcbiAgICAgICAgcGF0aDogcm9vdFdhbGxldEtleXMuZ2V0RGVyaXZhdGlvblBhdGgocm9vdFdhbGxldEtleXNba2V5XSwgdS5jaGFpbiwgdS5pbmRleCksXG4gICAgICAgIG1hc3RlckZpbmdlcnByaW50OiByb290V2FsbGV0S2V5c1trZXldLmZpbmdlcnByaW50LFxuICAgICAgfSkpLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJykge1xuICAgIGNvbnN0IHtcbiAgICAgIGludGVybmFsUHVia2V5OiB0YXBJbnRlcm5hbEtleSxcbiAgICAgIG91dHB1dFB1YmtleTogdGFwT3V0cHV0S2V5LFxuICAgICAgdGFwdHJlZVJvb3QsXG4gICAgfSA9IGNyZWF0ZUtleVBhdGhQMnRyTXVzaWcyKHdhbGxldEtleXMucHVibGljS2V5cyk7XG4gICAgY29uc3QgcGFydGljaXBhbnRzS2V5VmFsRGF0YSA9IGVuY29kZVBzYnRNdXNpZzJQYXJ0aWNpcGFudHMoe1xuICAgICAgdGFwT3V0cHV0S2V5LFxuICAgICAgdGFwSW50ZXJuYWxLZXksXG4gICAgICBwYXJ0aWNpcGFudFB1YktleXM6IFt3YWxsZXRLZXlzLnVzZXIucHVibGljS2V5LCB3YWxsZXRLZXlzLmJpdGdvLnB1YmxpY0tleV0sXG4gICAgfSk7XG4gICAgcHNidC5hZGRQcm9wcmlldGFyeUtleVZhbFRvSW5wdXQoaW5wdXRJbmRleCwgcGFydGljaXBhbnRzS2V5VmFsRGF0YSk7XG4gICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICB0YXBJbnRlcm5hbEtleTogdGFwSW50ZXJuYWxLZXksXG4gICAgICB0YXBNZXJrbGVSb290OiB0YXB0cmVlUm9vdCxcbiAgICAgIHRhcEJpcDMyRGVyaXZhdGlvbjogW3NpZ25lciwgY29zaWduZXJdLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICBsZWFmSGFzaGVzOiBbXSxcbiAgICAgICAgcHVia2V5OiB0b1hPbmx5UHVibGljS2V5KHdhbGxldEtleXNba2V5XS5wdWJsaWNLZXkpLFxuICAgICAgICBwYXRoOiByb290V2FsbGV0S2V5cy5nZXREZXJpdmF0aW9uUGF0aChyb290V2FsbGV0S2V5c1trZXldLCB1LmNoYWluLCB1LmluZGV4KSxcbiAgICAgICAgbWFzdGVyRmluZ2VycHJpbnQ6IHJvb3RXYWxsZXRLZXlzW2tleV0uZmluZ2VycHJpbnQsXG4gICAgICB9KSksXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyB3aXRuZXNzU2NyaXB0LCByZWRlZW1TY3JpcHQgfSA9IGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMod2FsbGV0S2V5cy5wdWJsaWNLZXlzLCBzY3JpcHRUeXBlKTtcbiAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHtcbiAgICAgIGJpcDMyRGVyaXZhdGlvbjogWzAsIDEsIDJdLm1hcCgoaWR4KSA9PiAoe1xuICAgICAgICBwdWJrZXk6IHdhbGxldEtleXMudHJpcGxlW2lkeF0ucHVibGljS2V5LFxuICAgICAgICBwYXRoOiB3YWxsZXRLZXlzLnBhdGhzW2lkeF0sXG4gICAgICAgIG1hc3RlckZpbmdlcnByaW50OiByb290V2FsbGV0S2V5cy50cmlwbGVbaWR4XS5maW5nZXJwcmludCxcbiAgICAgIH0pKSxcbiAgICB9KTtcbiAgICBpZiAod2l0bmVzc1NjcmlwdCkge1xuICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHdpdG5lc3NTY3JpcHQgfSk7XG4gICAgfVxuICAgIGlmIChyZWRlZW1TY3JpcHQpIHtcbiAgICAgIHBzYnQudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwgeyByZWRlZW1TY3JpcHQgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5zcGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby93YWxsZXQvVW5zcGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBc0Q7QUFFdEQsb0RBTzBCO0FBQzFCLDJDQUErQztBQUMvQyw0Q0FBNEU7QUFLNUUsd0NBQXFHO0FBQ3JHLHFDQUErQztBQUUvQyxzQ0FBeUQ7QUFDekQsZ0RBQTZEO0FBYTdELFNBQWdCLGVBQWUsQ0FBa0MsQ0FBbUI7SUFDbEYsT0FBUSxDQUE0QixDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDM0QsQ0FBQztBQUZELDBDQUVDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQ2xDLFNBQTBDLEVBQzFDLFVBQWtCLEVBQ2xCLE9BQStCLEVBQy9CLGFBQWtEO0lBRWxELE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RyxNQUFNLFVBQVUsR0FBRyxrQ0FBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsTUFBTSxTQUFTLEdBQUcsc0NBQXNCLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDekYsTUFBTSxpQkFBaUIsR0FBRyx3QkFBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQWtCLENBQUMsQ0FBQztJQUN4RixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1FBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0NBQWdDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ3JHLENBQUM7S0FDSDtJ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RSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTO2dCQUN4QyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQzNCLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVzthQUMxRCxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDakQ7UUFDRCxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDaEQ7S0FDRjtBQUNILENBQUM7QUE1RkQsd0RBNEZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TWFpbm5ldCwgTmV0d29yaywgbmV0d29ya3MgfSBmcm9tICcuLi8uLic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vVXR4b1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBjcmVhdGVLZXlQYXRoUDJ0ck11c2lnMixcbiAgY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyxcbiAgY3JlYXRlU3BlbmRTY3JpcHRQMnRyLFxuICBjcmVhdGVTcGVuZFNjcmlwdFAydHJNdXNpZzIsXG4gIHNjcmlwdFR5cGVGb3JDaGFpbixcbiAgdG9YT25seVB1YmxpY0tleSxcbn0gZnJvbSAnLi4vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQgeyB0b091dHB1dFNjcmlwdCB9IGZyb20gJy4uLy4uL2FkZHJlc3MnO1xuaW1wb3J0IHsgc2lnbklucHV0Mk9mMywgdmVyaWZ5U2lnbmF0dXJlV2l0aFB1YmxpY0tleXMgfSBmcm9tICcuLi9zaWduYXR1cmUnO1xuaW1wb3J0IHsgV2FsbGV0VW5zcGVudFNpZ25lciB9IGZyb20gJy4vV2FsbGV0VW5zcGVudFNpZ25lcic7XG5pbXBvcnQgeyBLZXlOYW1lLCBSb290V2FsbGV0S2V5cyB9IGZyb20gJy4vV2FsbGV0S2V5cyc7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9VdHhvVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJpcGxlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgdG9PdXRwdXQsIFVuc3BlbnRXaXRoUHJldlR4LCBVbnNwZW50LCBpc1Vuc3BlbnRXaXRoUHJldlR4LCB0b1ByZXZPdXRwdXQgfSBmcm9tICcuLi9VbnNwZW50JztcbmltcG9ydCB7IENoYWluQ29kZSwgaXNTZWd3aXQgfSBmcm9tICcuL2NoYWlucyc7XG5pbXBvcnQgeyBVdHhvUHNidCB9IGZyb20gJy4uL1V0eG9Qc2J0JztcbmltcG9ydCB7IGVuY29kZVBzYnRNdXNpZzJQYXJ0aWNpcGFudHMgfSBmcm9tICcuLi9NdXNpZzInO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBVbnNwZW50PFROdW1iZXI+IHtcbiAgY2hhaW46IENoYWluQ29kZTtcbiAgaW5kZXg6IG51bWJlcjtcbiAgd2l0bmVzc1NjcmlwdD86IHN0cmluZztcbiAgdmFsdWVTdHJpbmc/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9uV2l0bmVzc1dhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBVbnNwZW50V2l0aFByZXZUeDxUTnVtYmVyPixcbiAgICBXYWxsZXRVbnNwZW50PFROdW1iZXI+IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4odTogVW5zcGVudDxUTnVtYmVyPik6IHUgaXMgV2FsbGV0VW5zcGVudDxUTnVtYmVyPiB7XG4gIHJldHVybiAodSBhcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+KS5jaGFpbiAhPT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbklucHV0V2l0aFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4QnVpbGRlcjogVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICB1bnNwZW50OiBXYWxsZXRVbnNwZW50PFROdW1iZXI+LFxuICB1bnNwZW50U2lnbmVyOiBXYWxsZXRVbnNwZW50U2lnbmVyPFJvb3RXYWxsZXRLZXlzPlxuKTogdm9pZCB7XG4gIGNvbnN0IHsgd2FsbGV0S2V5cywgc2lnbmVyLCBjb3NpZ25lciB9ID0gdW5zcGVudFNpZ25lci5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpO1xuICBjb25zdCBzY3JpcHRUeXBlID0gc2NyaXB0VHlwZUZvckNoYWluKHVuc3BlbnQuY2hhaW4pO1xuICBjb25zdCBwdWJTY3JpcHQgPSBjcmVhdGVPdXRwdXRTY3JpcHQyb2YzKHdhbGxldEtleXMucHVibGljS2V5cywgc2NyaXB0VHlwZSkuc2NyaXB0UHViS2V5O1xuICBjb25zdCBwdWJTY3JpcHRFeHBlY3RlZCA9IHRvT3V0cHV0U2NyaXB0KHVuc3BlbnQuYWRkcmVzcywgdHhCdWlsZGVyLm5ldHdvcmsgYXMgTmV0d29yayk7XG4gIGlmICghcHViU2NyaXB0LmVxdWFscyhwdWJTY3JpcHRFeHBlY3RlZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgcHVic2NyaXB0IG1pc21hdGNoOiBleHBlY3RlZCAke3B1YlNjcmlwdEV4cGVjdGVkLnRvU3RyaW5nKCdoZXgnKX0gZ290ICR7cHViU2NyaXB0LnRvU3RyaW5nKCdoZXgnKX1gXG4gICAgKTtcbiAgfVxuICBzaWduSW5wdXQyT2YzPFROdW1iZXI+KFxuICAgIHR4QnVpbGRlcixcbiAgICBpbnB1dEluZGV4LFxuICAgIHNjcmlwdFR5cGUsXG4gICAgd2FsbGV0S2V5cy5wdWJsaWNLZXlzLFxuICAgIHNpZ25lcixcbiAgICBjb3NpZ25lci5wdWJsaWNLZXksXG4gICAgdW5zcGVudC52YWx1ZVxuICApO1xufVxuXG4vKipcbiAqIEBwYXJhbSB0eFxuICogQHBhcmFtIGlucHV0SW5kZXhcbiAqIEBwYXJhbSB1bnNwZW50c1xuICogQHBhcmFtIHdhbGxldEtleXNcbiAqIEByZXR1cm4gdHJpcGxlIG9mIGJvb2xlYW5zIGluZGljYXRpbmcgYSB2YWxpZCBzaWduYXR1cmUgZm9yIGVhY2ggcHVia2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTaWduYXR1cmVXaXRoVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IFV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICB1bnNwZW50czogVW5zcGVudDxUTnVtYmVyPltdLFxuICB3YWxsZXRLZXlzOiBSb290V2FsbGV0S2V5c1xuKTogVHJpcGxlPGJvb2xlYW4+IHtcbiAgaWYgKHR4Lmlucy5sZW5ndGggIT09IHVuc3BlbnRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW5wdXQgbGVuZ3RoIG11c3QgbWF0Y2ggdW5zcGVudHMgbGVuZ3RoYCk7XG4gIH1cbiAgY29uc3QgdW5zcGVudCA9IHVuc3BlbnRzW2lucHV0SW5kZXhdO1xuICBpZiAoIWlzV2FsbGV0VW5zcGVudCh1bnNwZW50KSkge1xuICAgIHJldHVybiBbZmFsc2UsIGZhbHNlLCBmYWxzZV07XG4gIH1cbiAgcmV0dXJuIHZlcmlmeVNpZ25hdHVyZVdpdGhQdWJsaWNLZXlzKFxuICAgIHR4LFxuICAgIGlucHV0SW5kZXgsXG4gICAgdW5zcGVudHMubWFwKCh1KSA9PiB0b091dHB1dCh1LCB0eC5uZXR3b3JrKSksXG4gICAgd2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KHVuc3BlbnQuY2hhaW4sIHVuc3BlbnQuaW5kZXgpLnB1YmxpY0tleXNcbiAgKSBhcyBUcmlwbGU8Ym9vbGVhbj47XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVzZWQgaW4gY2VydGFpbiBsZWdhY3kgc2lnbmluZyBtZXRob2RzIHRoYXQgZG8gbm90IGRlcml2ZSBzaWduaW5nIGRhdGEgZnJvbSBpbmRleC9jaGFpblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhbGxldFVuc3BlbnRMZWdhY3k8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBXYWxsZXRVbnNwZW50PFROdW1iZXI+IHtcbiAgLyoqIEBkZXByZWNhdGVkIC0gb2J2aWF0ZWQgYnkgc2lnbldpdGhVbnNwZW50ICovXG4gIHJlZGVlbVNjcmlwdD86IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkIC0gb2J2aWF0ZWQgYnkgdmVyaWZ5V2l0aFVuc3BlbnQgKi9cbiAgd2l0bmVzc1NjcmlwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFJlcGxheVByb3RlY3Rpb25VbnNwZW50VG9Qc2J0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgdTogVW5zcGVudDxiaWdpbnQ+LFxuICByZWRlZW1TY3JpcHQ6IEJ1ZmZlcixcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBuZXR3b3JrOiBOZXR3b3JrID0gcHNidC5uZXR3b3JrXG4pOiB2b2lkIHtcbiAgaWYgKG5ldHdvcmsgIT09IHBzYnQubmV0d29yaykge1xuICAgIHRocm93IG5ldyBFcnJvcihgbmV0d29yayBwYXJhbWV0ZXIgZG9lcyBub3QgbWF0Y2ggcHNidC5uZXR3b3JrYCk7XG4gIH1cbiAgY29uc3QgeyB0eGlkLCB2b3V0IH0gPSB0b1ByZXZPdXRwdXQodSwgcHNidC5uZXR3b3JrKTtcbiAgY29uc3QgaXNaY2FzaCA9IGdldE1haW5uZXQocHNidC5uZXR3b3JrKSA9PT0gbmV0d29ya3MuemNhc2g7XG5cbiAgLy8gQmVjYXVzZSBaY2FzaCBkaXJlY3RseSBoYXNoZXMgdGhlIHZhbHVlIGZvciBub24tc2Vnd2l0IHRyYW5zYWN0aW9ucywgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgaW5kaXJlY3RseVxuICAvLyB3aXRoIHRoZSBwcmV2aW91cyB0cmFuc2FjdGlvbi4gVGhlcmVmb3JlLCB3ZSBjYW4gdHJlYXQgWmNhc2ggbm9uLXNlZ3dpdCB0cmFuc2FjdGlvbnMgYXMgQml0Y29pblxuICAvLyBzZWd3aXQgdHJhbnNhY3Rpb25zXG4gIGlmICghaXNVbnNwZW50V2l0aFByZXZUeCh1KSAmJiAhaXNaY2FzaCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIHJlcXVpcmUgcHJldmlvdXMgdHggdG8gYWRkIHRvIFBTQlQnKTtcbiAgfVxuICBwc2J0LmFkZElucHV0KHtcbiAgICBoYXNoOiB0eGlkLFxuICAgIGluZGV4OiB2b3V0LFxuICAgIHJlZGVlbVNjcmlwdCxcbiAgfSk7XG4gIGlmICghaXNaY2FzaCkge1xuICAgIHBzYnQudXBkYXRlSW5wdXQocHNidC5pbnB1dENvdW50IC0gMSwgeyBub25XaXRuZXNzVXR4bzogKHUgYXMgVW5zcGVudFdpdGhQcmV2VHg8YmlnaW50PikucHJldlR4IH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRXYWxsZXRVbnNwZW50VG9Qc2J0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgdTogV2FsbGV0VW5zcGVudDxiaWdpbnQ+LFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ25lcjogS2V5TmFtZSxcbiAgY29zaWduZXI6IEtleU5hbWUsXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgbmV0d29yazogTmV0d29yayA9IHBzYnQubmV0d29ya1xuKTogdm9pZCB7XG4gIGlmIChuZXR3b3JrICE9PSBwc2J0Lm5ldHdvcmspIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5ldHdvcmsgcGFyYW1ldGVyIGRvZXMgbm90IG1hdGNoIHBzYnQubmV0d29ya2ApO1xuICB9XG4gIGNvbnN0IHsgdHhpZCwgdm91dCwgc2NyaXB0LCB2YWx1ZSB9ID0gdG9QcmV2T3V0cHV0KHUsIHBzYnQubmV0d29yayk7XG5cbiAgcHNidC5hZGRJbnB1dCh7IGhhc2g6IHR4aWQsIGluZGV4OiB2b3V0IH0pO1xuICBjb25zdCBpbnB1dEluZGV4ID0gcHNidC5pbnB1dENvdW50IC0gMTtcblxuICAvLyBCZWNhdXNlIFpjYXNoIGRpcmVjdGx5IGhhc2hlcyB0aGUgdmFsdWUgZm9yIG5vbi1zZWd3aXQgdHJhbnNhY3Rpb25zLCB3ZSBkbyBub3QgbmVlZCB0byBjaGVjayBpbmRpcmVjdGx5XG4gIC8vIHdpdGggdGhlIHByZXZpb3VzIHRyYW5zYWN0aW9uLiBUaGVyZWZvcmUsIHdlIGNhbiB0cmVhdCBaY2FzaCBub24tc2Vnd2l0IHRyYW5zYWN0aW9ucyBhcyBCaXRjb2luXG4gIC8vIHNlZ3dpdCB0cmFuc2FjdGlvbnNcbiAgaWYgKGlzU2Vnd2l0KHUuY2hhaW4pIHx8IGdldE1haW5uZXQocHNidC5uZXR3b3JrKSA9PT0gbmV0d29ya3MuemNhc2gpIHtcbiAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgd2l0bmVzc1V0eG86IHsgc2NyaXB0LCB2YWx1ZSB9IH0pO1xuICB9IGVsc2Uge1xuICAgIGlmICghaXNVbnNwZW50V2l0aFByZXZUeCh1KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgcmVxdWlyZSBwcmV2aW91cyB0eCB0byBhZGQgdG8gUFNCVCcpO1xuICAgIH1cbiAgICAvLyBGb3JjZSB0aGUgbGl0ZWNvaW4gdHJhbnNhY3Rpb24gdG8gaGF2ZSBubyBNV0VCIGFkdmFuY2VkIHRyYW5zYWN0aW9uIGZsYWdcbiAgICBpZiAoZ2V0TWFpbm5ldChwc2J0Lm5ldHdvcmspID09PSBuZXR3b3Jrcy5saXRlY29pbikge1xuICAgICAgdS5wcmV2VHggPSBjcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIodS5wcmV2VHgsIHBzYnQubmV0d29yaywgeyBhbW91bnRUeXBlOiAnYmlnaW50JyB9KS50b0J1ZmZlcigpO1xuICAgIH1cbiAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHsgbm9uV2l0bmVzc1V0eG86IHUucHJldlR4IH0pO1xuICB9XG5cbiAgY29uc3Qgd2FsbGV0S2V5cyA9IHJvb3RXYWxsZXRLZXlzLmRlcml2ZUZvckNoYWluQW5kSW5kZXgodS5jaGFpbiwgdS5pbmRleCk7XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlRm9yQ2hhaW4odS5jaGFpbik7XG4gIGNvbnN0IGlzQmFja3VwRmxvdyA9IHNpZ25lciA9PT0gJ2JhY2t1cCcgfHwgY29zaWduZXIgPT09ICdiYWNrdXAnO1xuXG4gIGlmIChzY3JpcHRUeXBlID09PSAncDJ0cicgfHwgKHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJyAmJiBpc0JhY2t1cEZsb3cpKSB7XG4gICAgY29uc3QgY3JlYXRlU3BlbmRTY3JpcHRQMnRyRm4gPSBzY3JpcHRUeXBlID09PSAncDJ0cicgPyBjcmVhdGVTcGVuZFNjcmlwdFAydHIgOiBjcmVhdGVTcGVuZFNjcmlwdFAydHJNdXNpZzI7XG4gICAgY29uc3QgeyBjb250cm9sQmxvY2ssIHdpdG5lc3NTY3JpcHQsIGxlYWZWZXJzaW9uLCBsZWFmSGFzaCB9ID0gY3JlYXRlU3BlbmRTY3JpcHRQMnRyRm4od2FsbGV0S2V5cy5wdWJsaWNLZXlzLCBbXG4gICAgICB3YWxsZXRLZXlzW3NpZ25lcl0ucHVibGljS2V5LFxuICAgICAgd2FsbGV0S2V5c1tjb3NpZ25lcl0ucHVibGljS2V5LFxuICAgIF0pO1xuICAgIHBzYnQudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwge1xuICAgICAgdGFwTGVhZlNjcmlwdDogW3sgY29udHJvbEJsb2NrLCBzY3JpcHQ6IHdpdG5lc3NTY3JpcHQsIGxlYWZWZXJzaW9uIH1dLFxuICAgICAgdGFwQmlwMzJEZXJpdmF0aW9uOiBbc2lnbmVyLCBjb3NpZ25lcl0ubWFwKChrZXkpID0+ICh7XG4gICAgICAgIGxlYWZIYXNoZXM6IFtsZWFmSGFzaF0sXG4gICAgICAgIHB1YmtleTogdG9YT25seVB1YmxpY0tleSh3YWxsZXRLZXlzW2tleV0ucHVibGljS2V5KSxcbiAgICAgICAgcGF0aDogcm9vdFdhbGxldEtleXMuZ2V0RGVyaXZhdGlvblBhdGgocm9vdFdhbGxldEtleXNba2V5XSwgdS5jaGFpbiwgdS5pbmRleCksXG4gICAgICAgIG1hc3RlckZpbmdlcnByaW50OiByb290V2FsbGV0S2V5c1trZXldLmZpbmdlcnByaW50LFxuICAgICAgfSkpLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKHNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyJykge1xuICAgIGNvbnN0IHtcbiAgICAgIGludGVybmFsUHVia2V5OiB0YXBJbnRlcm5hbEtleSxcbiAgICAgIG91dHB1dFB1YmtleTogdGFwT3V0cHV0S2V5LFxuICAgICAgdGFwdHJlZVJvb3QsXG4gICAgfSA9IGNyZWF0ZUtleVBhdGhQMnRyTXVzaWcyKHdhbGxldEtleXMucHVibGljS2V5cyk7XG4gICAgY29uc3QgcGFydGljaXBhbnRzS2V5VmFsRGF0YSA9IGVuY29kZVBzYnRNdXNpZzJQYXJ0aWNpcGFudHMoe1xuICAgICAgdGFwT3V0cHV0S2V5LFxuICAgICAgdGFwSW50ZXJuYWxLZXksXG4gICAgICBwYXJ0aWNpcGFudFB1YktleXM6IFt3YWxsZXRLZXlzLnVzZXIucHVibGljS2V5LCB3YWxsZXRLZXlzLmJpdGdvLnB1YmxpY0tleV0sXG4gICAgfSk7XG4gICAgcHNidC5hZGRQcm9wcmlldGFyeUtleVZhbFRvSW5wdXQoaW5wdXRJbmRleCwgcGFydGljaXBhbnRzS2V5VmFsRGF0YSk7XG4gICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7XG4gICAgICB0YXBJbnRlcm5hbEtleTogdGFwSW50ZXJuYWxLZXksXG4gICAgICB0YXBNZXJrbGVSb290OiB0YXB0cmVlUm9vdCxcbiAgICAgIHRhcEJpcDMyRGVyaXZhdGlvbjogW3NpZ25lciwgY29zaWduZXJdLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICBsZWFmSGFzaGVzOiBbXSxcbiAgICAgICAgcHVia2V5OiB0b1hPbmx5UHVibGljS2V5KHdhbGxldEtleXNba2V5XS5wdWJsaWNLZXkpLFxuICAgICAgICBwYXRoOiByb290V2FsbGV0S2V5cy5nZXREZXJpdmF0aW9uUGF0aChyb290V2FsbGV0S2V5c1trZXldLCB1LmNoYWluLCB1LmluZGV4KSxcbiAgICAgICAgbWFzdGVyRmluZ2VycHJpbnQ6IHJvb3RXYWxsZXRLZXlzW2tleV0uZmluZ2VycHJpbnQsXG4gICAgICB9KSksXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyB3aXRuZXNzU2NyaXB0LCByZWRlZW1TY3JpcHQgfSA9IGNyZWF0ZU91dHB1dFNjcmlwdDJvZjMod2FsbGV0S2V5cy5wdWJsaWNLZXlzLCBzY3JpcHRUeXBlKTtcbiAgICBwc2J0LnVwZGF0ZUlucHV0KGlucHV0SW5kZXgsIHtcbiAgICAgIGJpcDMyRGVyaXZhdGlvbjogWzAsIDEsIDJdLm1hcCgoaWR4KSA9PiAoe1xuICAgICAgICBwdWJrZXk6IHdhbGxldEtleXMudHJpcGxlW2lkeF0ucHVibGljS2V5LFxuICAgICAgICBwYXRoOiB3YWxsZXRLZXlzLnBhdGhzW2lkeF0sXG4gICAgICAgIG1hc3RlckZpbmdlcnByaW50OiByb290V2FsbGV0S2V5cy50cmlwbGVbaWR4XS5maW5nZXJwcmludCxcbiAgICAgIH0pKSxcbiAgICB9KTtcbiAgICBpZiAod2l0bmVzc1NjcmlwdCkge1xuICAgICAgcHNidC51cGRhdGVJbnB1dChpbnB1dEluZGV4LCB7IHdpdG5lc3NTY3JpcHQgfSk7XG4gICAgfVxuICAgIGlmIChyZWRlZW1TY3JpcHQpIHtcbiAgICAgIHBzYnQudXBkYXRlSW5wdXQoaW5wdXRJbmRleCwgeyByZWRlZW1TY3JpcHQgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
import { ScriptType, ScriptType2Of3 } from '../bitgo/outputScripts';
import { KeyName, RootWalletKeys, Unspent, UtxoPsbt } from '../bitgo';
import { KeyName, RootWalletKeys, Unspent, UtxoPsbt, UtxoTransaction, WalletUnspent } from '../bitgo';
import { Network } from '../networks';

@@ -64,2 +64,7 @@ /**

export declare function constructPsbt(inputs: Input[], outputs: Output[], network: Network, rootWalletKeys: RootWalletKeys, sign: 'unsigned' | 'halfsigned' | 'fullsigned'): UtxoPsbt;
/**
* Verifies signatures of fully signed tx (with taproot key path support).
* NOTE: taproot key path tx can only be built and signed with PSBT.
*/
export declare function verifyFullySignedSignatures(tx: UtxoTransaction<bigint>, unspents: WalletUnspent<bigint>[], walletKeys: RootWalletKeys, signer: KeyName, cosigner: KeyName): boolean;
//# sourceMappingURL=psbt.d.ts.map
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.constructPsbt = exports.signAllPsbtInputs = exports.signPsbtInput = exports.getSigners = exports.toUnspent = exports.outputScriptTypes = exports.inputScriptTypes = void 0;
exports.verifyFullySignedSignatures = exports.constructPsbt = exports.signAllPsbtInputs = exports.signPsbtInput = exports.getSigners = exports.toUnspent = exports.outputScriptTypes = exports.inputScriptTypes = void 0;
const assert = require("assert");

@@ -8,3 +8,2 @@ const outputScripts_1 = require("../bitgo/outputScripts");

const mock_1 = require("./mock");
const bitgo_2 = require("../bitgo");
/**

@@ -28,3 +27,3 @@ * array of supported input script types.

else {
const chain = bitgo_2.getInternalChainCode(input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType);
const chain = bitgo_1.getInternalChainCode(input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType);
return mock_1.mockWalletUnspent(network, input.value, {

@@ -102,3 +101,3 @@ chain,

outputs.forEach((output, i) => {
bitgo_1.addWalletOutputToPsbt(psbt, rootWalletKeys, output.isInternalAddress ? bitgo_2.getInternalChainCode(output.scriptType) : bitgo_1.getExternalChainCode(output.scriptType), i, output.value);
bitgo_1.addWalletOutputToPsbt(psbt, rootWalletKeys, output.isInternalAddress ? bitgo_1.getInternalChainCode(output.scriptType) : bitgo_1.getExternalChainCode(output.scriptType), i, output.value);
});

@@ -108,4 +107,4 @@ if (sign === 'unsigned') {

}
psbt.setMusig2NoncesHD(rootWalletKeys['user']);
psbt.setMusig2NoncesHD(rootWalletKeys['bitgo']);
psbt.setAllInputsMusig2NonceHD(rootWalletKeys['user']);
psbt.setAllInputsMusig2NonceHD(rootWalletKeys['bitgo']);
signAllPsbtInputs(psbt, inputs, rootWalletKeys, 'halfsigned');

@@ -118,2 +117,28 @@ if (sign === 'fullsigned') {

exports.constructPsbt = constructPsbt;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0dXRpbC9wc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUNqQywwREFNZ0M7QUFDaEMsb0NBV2tCO0FBRWxCLGlDQUF3RTtBQUN4RSxvQ0FBZ0Q7QUEyQmhEOzs7O0dBSUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLENBQUMsR0FBRywrQkFBZSxFQUFFLHFCQUFxQixFQUFFLGtDQUFrQixDQUFVLENBQUM7QUFFekc7O0dBRUc7QUFDVSxRQUFBLGlCQUFpQixHQUFHLCtCQUFlLENBQUM7QUFFakQ7O0dBRUc7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLEtBQVksRUFDWixLQUFhLEVBQ2IsT0FBZ0IsRUFDaEIsY0FBOEI7SUFFOUIsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUNuQyxPQUFPLGtDQUEyQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUN4RztTQUFNO1FBQ0wsTUFBTSxLQUFLLEdBQUcsNEJBQW9CLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakgsT0FBTyx3QkFBaUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUM3QyxLQUFLO1lBQ0wsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJLEVBQUUsY0FBYztZQUNwQixLQUFLO1NBQ04sQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO0FBakJELDhCQWlCQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLFNBQTBCO0lBQ25ELE9BQU87UUFDTCxVQUFVLEVB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JztcbmltcG9ydCB7XG4gIGNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrLFxuICBTY3JpcHRUeXBlLFxuICBTY3JpcHRUeXBlMk9mMyxcbiAgc2NyaXB0VHlwZVAyc2hQMnBrLFxuICBzY3JpcHRUeXBlczJPZjMsXG59IGZyb20gJy4uL2JpdGdvL291dHB1dFNjcmlwdHMnO1xuaW1wb3J0IHtcbiAgYWRkUmVwbGF5UHJvdGVjdGlvblVuc3BlbnRUb1BzYnQsXG4gIGFkZFdhbGxldE91dHB1dFRvUHNidCxcbiAgYWRkV2FsbGV0VW5zcGVudFRvUHNidCxcbiAgY3JlYXRlUHNidEZvck5ldHdvcmssXG4gIGdldEV4dGVybmFsQ2hhaW5Db2RlLFxuICBpc1dhbGxldFVuc3BlbnQsXG4gIEtleU5hbWUsXG4gIFJvb3RXYWxsZXRLZXlzLFxuICBVbnNwZW50LFxuICBVdHhvUHNidCxcbn0gZnJvbSAnLi4vYml0Z28nO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uL25ldHdvcmtzJztcbmltcG9ydCB7IG1vY2tSZXBsYXlQcm90ZWN0aW9uVW5zcGVudCwgbW9ja1dhbGxldFVuc3BlbnQgfSBmcm9tICcuL21vY2snO1xuaW1wb3J0IHsgZ2V0SW50ZXJuYWxDaGFpbkNvZGUgfSBmcm9tICcuLi9iaXRnbyc7XG5cbi8qKlxuICogaW5wdXQgc2NyaXB0IHR5cGUgYW5kIHZhbHVlLlxuICogdXNlIHAydHJNdXNpZzIgZm9yIHAydHJNdXNpZzIgc2NyaXB0IHBhdGguXG4gKiB1c2UgdGFwcm9vdEtleVBhdGhTcGVuZCBmb3IgcDJ0ck11c2lnMiBrZXkgcGF0aC5cbiAqL1xuZXhwb3J0IHR5cGUgSW5wdXRTY3JpcHRUeXBlID0gU2NyaXB0VHlwZSB8ICd0YXByb290S2V5UGF0aFNwZW5kJztcbmV4cG9ydCB0eXBlIE91dHB1dFNjcmlwdFR5cGUgPSBTY3JpcHRUeXBlMk9mMztcblxuLyoqXG4gKiBvdXRwdXQgc2NyaXB0IHR5cGUgYW5kIHZhbHVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXQge1xuICBzY3JpcHRUeXBlOiBJbnB1dFNjcmlwdFR5cGU7XG4gIHZhbHVlOiBiaWdpbnQ7XG59XG5cbi8qKlxuICogc2V0IGlzSW50ZXJuYWxBZGRyZXNzPXRydWUgZm9yIGludGVybmFsIG91dHB1dCBhZGRyZXNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0IHtcbiAgc2NyaXB0VHlwZTogT3V0cHV0U2NyaXB0VHlwZTtcbiAgdmFsdWU6IGJpZ2ludDtcbiAgaXNJbnRlcm5hbEFkZHJlc3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGFycmF5IG9mIHN1cHBvcnRlZCBpbnB1dCBzY3JpcHQgdHlwZXMuXG4gKiB1c2UgcDJ0ck11c2lnMiBmb3IgcDJ0ck11c2lnMiBzY3JpcHQgcGF0aC5cbiAqIHVzZSB0YXByb290S2V5UGF0aFNwZW5kIGZvciBwMnRyTXVzaWcyIGtleSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgaW5wdXRTY3JpcHRUeXBlcyA9IFsuLi5zY3JpcHRUeXBlczJPZjMsICd0YXByb290S2V5UGF0aFNwZW5kJywgc2NyaXB0VHlwZVAyc2hQMnBrXSBhcyBjb25zdDtcblxuLyoqXG4gKiBhcnJheSBvZiBzdXBwb3J0ZWQgb3V0cHV0IHNjcmlwdCB0eXBlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IG91dHB1dFNjcmlwdFR5cGVzID0gc2NyaXB0VHlwZXMyT2YzO1xuXG4vKipcbiAqIGNyZWF0ZSB1bnNwZW50IG9iamVjdCBmcm9tIGlucHV0IHNjcmlwdCB0eXBlLCBpbmRleCwgbmV0d29yayBhbmQgcm9vdCB3YWxsZXQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbnNwZW50KFxuICBpbnB1dDogSW5wdXQsXG4gIGluZGV4OiBudW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5c1xuKTogVW5zcGVudDxiaWdpbnQ+IHtcbiAgaWYgKGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICByZXR1cm4gbW9ja1JlcGxheVByb3RlY3Rpb25VbnNwZW50KG5ldHdvcmssIGlucHV0LnZhbHVlLCB7IGtleTogcm9vdFdhbGxldEtleXNbJ3VzZXInXSwgdm91dDogaW5kZXggfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2hhaW4gPSBnZXRJbnRlcm5hbENoYWluQ29kZShpbnB1dC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiBpbnB1dC5zY3JpcHRUeXBlKTtcbiAgICByZXR1cm4gbW9ja1dhbGxldFVuc3BlbnQobmV0d29yaywgaW5wdXQudmFsdWUsIHtcbiAgICAgIGNoYWluLFxuICAgICAgdm91dDogaW5kZXgsXG4gICAgICBrZXlzOiByb290V2FsbGV0S2V5cyxcbiAgICAgIGluZGV4LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogcmV0dXJucyBzaWduZXIgYW5kIGNvc2lnbmVyIG5hbWVzIGZvciBJbnB1dFNjcmlwdFR5cGUuXG4gKiB1c2VyIGFuZCB1bmRlZmluZWQgYXMgc2lnbmVyIGFuZCBjb3NpZ25lciByZXNwZWN0aXZlbHkgZm9yIHAyc2hQMnBrLlxuICogdXNlciBhbmQgYmFja3VwIGFzIHNpZ25lciBhbmQgY29zaWduZXIgcmVzcGVjdGl2ZWx5IGZvciBwMnRyTXVzaWcyLlxuICogdXNlciBhbmQgYml0Z28gYXMgc2lnbmVyIGFuZCBjb3NpZ25lciByZXNwZWN0aXZlbHkgZm9yIG90aGVyIGlucHV0IHNjcmlwdCB0eXBlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25lcnMoaW5wdXRUeXBlOiBJbnB1dFNjcmlwdFR5cGUpOiB7IHNpZ25lck5hbWU6IEtleU5hbWU7IGNvc2lnbmVyTmFtZT86IEtleU5hbWUgfSB7XG4gIHJldHVybiB7XG4gICAgc2lnbmVyTmFtZTogJ3VzZXInLFxuICAgIGNvc2lnbmVyTmFtZTogaW5wdXRUeXBlID09PSAncDJzaFAycGsnID8gdW5kZWZpbmVkIDogaW5wdXRUeXBlID09PSAncDJ0ck11c2lnMicgPyAnYmFja3VwJyA6ICdiaXRnbycsXG4gIH07XG59XG5cbi8qKlxuICogc2lnbnMgd2l0aCBmaXJzdCBvciBzZWNvbmQgc2lnbmF0dXJlIGZvciBzaW5nbGUgaW5wdXQuXG4gKiBwMnNoUDJwayBpcyBzaWduZWQgb25seSB3aXRoIGZpcnN0IHNpZ24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduUHNidElucHV0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgaW5wdXQ6IElucHV0LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnXG4pOiB2b2lkIHtcbiAgY29uc3QgeyBzaWduZXJOYW1lLCBjb3NpZ25lck5hbWUgfSA9IGdldFNpZ25lcnMoaW5wdXQuc2NyaXB0VHlwZSk7XG4gIGlmIChzaWduID09PSAnaGFsZnNpZ25lZCcpIHtcbiAgICBpZiAoaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgcHNidC5zaWduSW5wdXQoaW5wdXRJbmRleCwgcm9vdFdhbGxldEtleXNbc2lnbmVyTmFtZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwc2J0LnNpZ25JbnB1dEhEKGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzW3NpZ25lck5hbWVdKTtcbiAgICB9XG4gIH1cbiAgaWYgKHNpZ24gPT09ICdmdWxsc2lnbmVkJyAmJiBjb3NpZ25lck5hbWUpIHtcbiAgICBwc2J0LnNpZ25JbnB1dEhEKGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzW2Nvc2lnbmVyTmFtZV0pO1xuICB9XG59XG5cbi8qKlxuICogc2lnbnMgd2l0aCBmaXJzdCBvciBzZWNvbmQgc2lnbmF0dXJlIGZvciBhbGwgaW5wdXRzLlxuICogcDJzaFAycGsgaXMgc2lnbmVkIG9ubHkgd2l0aCBmaXJzdCBzaWduLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbkFsbFBzYnRJbnB1dHMoXG4gIHBzYnQ6IFV0eG9Qc2J0LFxuICBpbnB1dHM6IElucHV0W10sXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnXG4pOiB2b2lkIHtcbiAgaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuICAgIHNpZ25Qc2J0SW5wdXQocHNidCwgaW5wdXQsIGluZGV4LCByb290V2FsbGV0S2V5cywgc2lnbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIGNvbnN0cnVjdCBwc2J0IGZvciBnaXZlbiBpbnB1dHMsIG91dHB1dHMsIG5ldHdvcmsgYW5kIHJvb3Qgd2FsbGV0IGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RQc2J0KFxuICBpbnB1dHM6IElucHV0W10sXG4gIG91dHB1dHM6IE91dHB1dFtdLFxuICBuZXR3b3JrOiBOZXR3b3JrLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ246ICd1bnNpZ25lZCcgfCAnaGFsZnNpZ25lZCcgfCAnZnVsbHNpZ25lZCdcbik6IFV0eG9Qc2J0IHtcbiAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IGlucHV0cy5yZWR1Y2UoKHN1bSwgaW5wdXQpID0+IHN1bSArIGlucHV0LnZhbHVlLCBCaWdJbnQoMCkpO1xuICBjb25zdCBvdXRwdXRJbnB1dEFtb3VudCA9IG91dHB1dHMucmVkdWNlKChzdW0sIG91dHB1dCkgPT4gc3VtICsgb3V0cHV0LnZhbHVlLCBCaWdJbnQoMCkpO1xuICBhc3NlcnQodG90YWxJbnB1dEFtb3VudCA+PSBvdXRwdXRJbnB1dEFtb3VudCwgJ3RvdGFsIG91dHB1dCBjYW4gbm90IGV4Y2VlZCB0b3RhbCBpbnB1dCcpO1xuXG4gIGNvbnN0IHBzYnQgPSBjcmVhdGVQc2J0Rm9yTmV0d29yayh7IG5ldHdvcmsgfSk7XG4gIGNvbnN0IHVuc3BlbnRzID0gaW5wdXRzLm1hcCgoaW5wdXQsIGkpID0+IHRvVW5zcGVudChpbnB1dCwgaSwgbmV0d29yaywgcm9vdFdhbGxldEtleXMpKTtcblxuICB1bnNwZW50cy5mb3JFYWNoKCh1LCBpKSA9PiB7XG4gICAgY29uc3QgeyBzaWduZXJOYW1lLCBjb3NpZ25lck5hbWUgfSA9IGdldFNpZ25lcnMoaW5wdXRzW2ldLnNjcmlwdFR5cGUpO1xuICAgIGlmIChpc1dhbGxldFVuc3BlbnQodSkgJiYgY29zaWduZXJOYW1lKSB7XG4gICAgICBhZGRXYWxsZXRVbnNwZW50VG9Qc2J0KHBzYnQsIHUsIHJvb3RXYWxsZXRLZXlzLCBzaWduZXJOYW1lLCBjb3NpZ25lck5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IHJlZGVlbVNjcmlwdCB9ID0gY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGsocm9vdFdhbGxldEtleXNbc2lnbmVyTmFtZV0ucHVibGljS2V5KTtcbiAgICAgIGFzc2VydChyZWRlZW1TY3JpcHQpO1xuICAgICAgYWRkUmVwbGF5UHJvdGVjdGlvblVuc3BlbnRUb1BzYnQocHNidCwgdSwgcmVkZWVtU2NyaXB0KTtcbiAgICB9XG4gIH0pO1xuXG4gIG91dHB1dHMuZm9yRWFjaCgob3V0cHV0LCBpKSA9PiB7XG4gICAgYWRkV2FsbGV0T3V0cHV0VG9Qc2J0KFxuICAgICAgcHNidCxcbiAgICAgIHJvb3RXYWxsZXRLZXlzLFxuICAgICAgb3V0cHV0LmlzSW50ZXJuYWxBZGRyZXNzID8gZ2V0SW50ZXJuYWxDaGFpbkNvZGUob3V0cHV0LnNjcmlwdFR5cGUpIDogZ2V0RXh0ZXJuYWxDaGFpbkNvZGUob3V0cHV0LnNjcmlwdFR5cGUpLFxuICAgICAgaSxcbiAgICAgIG91dHB1dC52YWx1ZVxuICAgICk7XG4gIH0pO1xuXG4gIGlmIChzaWduID09PSAndW5zaWduZWQnKSB7XG4gICAgcmV0dXJuIHBzYnQ7XG4gIH1cblxuICBwc2J0LnNldE11c2lnMk5vbmNlc0hEKHJvb3RXYWxsZXRLZXlzWyd1c2VyJ10pO1xuICBwc2J0LnNldE11c2lnMk5vbmNlc0hEKHJvb3RXYWxsZXRLZXlzWydiaXRnbyddKTtcblxuICBzaWduQWxsUHNidElucHV0cyhwc2J0LCBpbnB1dHMsIHJvb3RXYWxsZXRLZXlzLCAnaGFsZnNpZ25lZCcpO1xuXG4gIGlmIChzaWduID09PSAnZnVsbHNpZ25lZCcpIHtcbiAgICBzaWduQWxsUHNidElucHV0cyhwc2J0LCBpbnB1dHMsIHJvb3RXYWxsZXRLZXlzLCBzaWduKTtcbiAgfVxuXG4gIHJldHVybiBwc2J0O1xufVxuIl19
/**
* Verifies signatures of fully signed tx (with taproot key path support).
* NOTE: taproot key path tx can only be built and signed with PSBT.
*/
function verifyFullySignedSignatures(tx, unspents, walletKeys, signer, cosigner) {
const prevOutputs = unspents.map((u) => bitgo_1.toOutput(u, tx.network));
return unspents.every((u, index) => {
if (bitgo_1.parseSignatureScript2Of3(tx.ins[index]).scriptType === 'taprootKeyPathSpend') {
const result = bitgo_1.getSignatureVerifications(tx, index, u.value, undefined, prevOutputs);
return result.length === 1 && result[0].signature;
}
else {
const result = bitgo_1.verifySignatureWithUnspent(tx, index, unspents, walletKeys);
if ((signer === 'user' && cosigner === 'bitgo') || (signer === 'bitgo' && cosigner === 'user')) {
return result[0] && !result[1] && result[2];
}
else if ((signer === 'user' && cosigner === 'backup') || (signer === 'backup' && cosigner === 'user')) {
return result[0] && result[1] && !result[2];
}
else {
return !result[0] && result[1] && result[2];
}
}
});
}
exports.verifyFullySignedSignatures = verifyFullySignedSignatures;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0dXRpbC9wc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUVqQywwREFNZ0M7QUFDaEMsb0NBa0JrQjtBQUVsQixpQ0FBd0U7QUEyQnhFOzs7O0dBSUc7QUFDVSxRQUFBLGdCQUFnQixHQUFHLENBQUMsR0FBRywrQkFBZSxFQUFFLHFCQUFxQixFQUFFLGtDQUFrQixDQUFVLENBQUM7QUFFekc7O0dBRUc7QUFDVSxRQUFBLGlCQUFpQixHQUFHLCtCQUFlLENBQUM7QUFFakQ7O0dBRUc7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLEtBQVksRUFDWixLQUFhLEVBQ2IsT0FBZ0IsRUFDaEIsY0FBOEI7SUFFOUIsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUNuQyxPQUFPLGtDQUEyQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUN4RztTQUFNO1FBQ0wsTUFBTSxLQUFLLEdBQUcsNEJBQW9CLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakgsT0FBTyx3QkFBaUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUM3QyxLQUFLO1lBQ0wsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJLEVBQUUsY0FBYztZQUNwQixLQUFLO1NBQ04sQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO0FBakJELDhCQWlCQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLFNBQTBCO0lBQ25ELE9BQU87UUFDTCxVQUFVLEVBQUUsTUFBTTtRQUNs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QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QztpQkFBTTtnQkFDTCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0M7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQXZCRCxrRUF1QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGssXG4gIFNjcmlwdFR5cGUsXG4gIFNjcmlwdFR5cGUyT2YzLFxuICBzY3JpcHRUeXBlUDJzaFAycGssXG4gIHNjcmlwdFR5cGVzMk9mMyxcbn0gZnJvbSAnLi4vYml0Z28vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQge1xuICBhZGRSZXBsYXlQcm90ZWN0aW9uVW5zcGVudFRvUHNidCxcbiAgYWRkV2FsbGV0T3V0cHV0VG9Qc2J0LFxuICBhZGRXYWxsZXRVbnNwZW50VG9Qc2J0LFxuICBjcmVhdGVQc2J0Rm9yTmV0d29yayxcbiAgZ2V0RXh0ZXJuYWxDaGFpbkNvZGUsXG4gIGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnMsXG4gIGlzV2FsbGV0VW5zcGVudCxcbiAgS2V5TmFtZSxcbiAgcGFyc2VTaWduYXR1cmVTY3JpcHQyT2YzLFxuICBnZXRJbnRlcm5hbENoYWluQ29kZSxcbiAgUm9vdFdhbGxldEtleXMsXG4gIHRvT3V0cHV0LFxuICBVbnNwZW50LFxuICBVdHhvUHNidCxcbiAgVXR4b1RyYW5zYWN0aW9uLFxuICB2ZXJpZnlTaWduYXR1cmVXaXRoVW5zcGVudCxcbiAgV2FsbGV0VW5zcGVudCxcbn0gZnJvbSAnLi4vYml0Z28nO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uL25ldHdvcmtzJztcbmltcG9ydCB7IG1vY2tSZXBsYXlQcm90ZWN0aW9uVW5zcGVudCwgbW9ja1dhbGxldFVuc3BlbnQgfSBmcm9tICcuL21vY2snO1xuXG4vKipcbiAqIGlucHV0IHNjcmlwdCB0eXBlIGFuZCB2YWx1ZS5cbiAqIHVzZSBwMnRyTXVzaWcyIGZvciBwMnRyTXVzaWcyIHNjcmlwdCBwYXRoLlxuICogdXNlIHRhcHJvb3RLZXlQYXRoU3BlbmQgZm9yIHAydHJNdXNpZzIga2V5IHBhdGguXG4gKi9cbmV4cG9ydCB0eXBlIElucHV0U2NyaXB0VHlwZSA9IFNjcmlwdFR5cGUgfCAndGFwcm9vdEtleVBhdGhTcGVuZCc7XG5leHBvcnQgdHlwZSBPdXRwdXRTY3JpcHRUeXBlID0gU2NyaXB0VHlwZTJPZjM7XG5cbi8qKlxuICogb3V0cHV0IHNjcmlwdCB0eXBlIGFuZCB2YWx1ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElucHV0IHtcbiAgc2NyaXB0VHlwZTogSW5wdXRTY3JpcHRUeXBlO1xuICB2YWx1ZTogYmlnaW50O1xufVxuXG4vKipcbiAqIHNldCBpc0ludGVybmFsQWRkcmVzcz10cnVlIGZvciBpbnRlcm5hbCBvdXRwdXQgYWRkcmVzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE91dHB1dCB7XG4gIHNjcmlwdFR5cGU6IE91dHB1dFNjcmlwdFR5cGU7XG4gIHZhbHVlOiBiaWdpbnQ7XG4gIGlzSW50ZXJuYWxBZGRyZXNzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBhcnJheSBvZiBzdXBwb3J0ZWQgaW5wdXQgc2NyaXB0IHR5cGVzLlxuICogdXNlIHAydHJNdXNpZzIgZm9yIHAydHJNdXNpZzIgc2NyaXB0IHBhdGguXG4gKiB1c2UgdGFwcm9vdEtleVBhdGhTcGVuZCBmb3IgcDJ0ck11c2lnMiBrZXkgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlucHV0U2NyaXB0VHlwZXMgPSBbLi4uc2NyaXB0VHlwZXMyT2YzLCAndGFwcm9vdEtleVBhdGhTcGVuZCcsIHNjcmlwdFR5cGVQMnNoUDJwa10gYXMgY29uc3Q7XG5cbi8qKlxuICogYXJyYXkgb2Ygc3VwcG9ydGVkIG91dHB1dCBzY3JpcHQgdHlwZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBvdXRwdXRTY3JpcHRUeXBlcyA9IHNjcmlwdFR5cGVzMk9mMztcblxuLyoqXG4gKiBjcmVhdGUgdW5zcGVudCBvYmplY3QgZnJvbSBpbnB1dCBzY3JpcHQgdHlwZSwgaW5kZXgsIG5ldHdvcmsgYW5kIHJvb3Qgd2FsbGV0IGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvVW5zcGVudChcbiAgaW5wdXQ6IElucHV0LFxuICBpbmRleDogbnVtYmVyLFxuICBuZXR3b3JrOiBOZXR3b3JrLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXNcbik6IFVuc3BlbnQ8YmlnaW50PiB7XG4gIGlmIChpbnB1dC5zY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgcmV0dXJuIG1vY2tSZXBsYXlQcm90ZWN0aW9uVW5zcGVudChuZXR3b3JrLCBpbnB1dC52YWx1ZSwgeyBrZXk6IHJvb3RXYWxsZXRLZXlzWyd1c2VyJ10sIHZvdXQ6IGluZGV4IH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNoYWluID0gZ2V0SW50ZXJuYWxDaGFpbkNvZGUoaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnID8gJ3AydHJNdXNpZzInIDogaW5wdXQuc2NyaXB0VHlwZSk7XG4gICAgcmV0dXJuIG1vY2tXYWxsZXRVbnNwZW50KG5ldHdvcmssIGlucHV0LnZhbHVlLCB7XG4gICAgICBjaGFpbixcbiAgICAgIHZvdXQ6IGluZGV4LFxuICAgICAga2V5czogcm9vdFdhbGxldEtleXMsXG4gICAgICBpbmRleCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIHJldHVybnMgc2lnbmVyIGFuZCBjb3NpZ25lciBuYW1lcyBmb3IgSW5wdXRTY3JpcHRUeXBlLlxuICogdXNlciBhbmQgdW5kZWZpbmVkIGFzIHNpZ25lciBhbmQgY29zaWduZXIgcmVzcGVjdGl2ZWx5IGZvciBwMnNoUDJway5cbiAqIHVzZXIgYW5kIGJhY2t1cCBhcyBzaWduZXIgYW5kIGNvc2lnbmVyIHJlc3BlY3RpdmVseSBmb3IgcDJ0ck11c2lnMi5cbiAqIHVzZXIgYW5kIGJpdGdvIGFzIHNpZ25lciBhbmQgY29zaWduZXIgcmVzcGVjdGl2ZWx5IGZvciBvdGhlciBpbnB1dCBzY3JpcHQgdHlwZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaWduZXJzKGlucHV0VHlwZTogSW5wdXRTY3JpcHRUeXBlKTogeyBzaWduZXJOYW1lOiBLZXlOYW1lOyBjb3NpZ25lck5hbWU/OiBLZXlOYW1lIH0ge1xuICByZXR1cm4ge1xuICAgIHNpZ25lck5hbWU6ICd1c2VyJyxcbiAgICBjb3NpZ25lck5hbWU6IGlucHV0VHlwZSA9PT0gJ3Ayc2hQMnBrJyA/IHVuZGVmaW5lZCA6IGlucHV0VHlwZSA9PT0gJ3AydHJNdXNpZzInID8gJ2JhY2t1cCcgOiAnYml0Z28nLFxuICB9O1xufVxuXG4vKipcbiAqIHNpZ25zIHdpdGggZmlyc3Qgb3Igc2Vjb25kIHNpZ25hdHVyZSBmb3Igc2luZ2xlIGlucHV0LlxuICogcDJzaFAycGsgaXMgc2lnbmVkIG9ubHkgd2l0aCBmaXJzdCBzaWduLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnblBzYnRJbnB1dChcbiAgcHNidDogVXR4b1BzYnQsXG4gIGlucHV0OiBJbnB1dCxcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ246ICdoYWxmc2lnbmVkJyB8ICdmdWxsc2lnbmVkJ1xuKTogdm9pZCB7XG4gIGNvbnN0IHsgc2lnbmVyTmFtZSwgY29zaWduZXJOYW1lIH0gPSBnZXRTaWduZXJzKGlucHV0LnNjcmlwdFR5cGUpO1xuICBpZiAoc2lnbiA9PT0gJ2hhbGZzaWduZWQnKSB7XG4gICAgaWYgKGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgIHBzYnQuc2lnbklucHV0KGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzW3NpZ25lck5hbWVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHNidC5zaWduSW5wdXRIRChpbnB1dEluZGV4LCByb290V2FsbGV0S2V5c1tzaWduZXJOYW1lXSk7XG4gICAgfVxuICB9XG4gIGlmIChzaWduID09PSAnZnVsbHNpZ25lZCcgJiYgY29zaWduZXJOYW1lKSB7XG4gICAgcHNidC5zaWduSW5wdXRIRChpbnB1dEluZGV4LCByb290V2FsbGV0S2V5c1tjb3NpZ25lck5hbWVdKTtcbiAgfVxufVxuXG4vKipcbiAqIHNpZ25zIHdpdGggZmlyc3Qgb3Igc2Vjb25kIHNpZ25hdHVyZSBmb3IgYWxsIGlucHV0cy5cbiAqIHAyc2hQMnBrIGlzIHNpZ25lZCBvbmx5IHdpdGggZmlyc3Qgc2lnbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25BbGxQc2J0SW5wdXRzKFxuICBwc2J0OiBVdHhvUHNidCxcbiAgaW5wdXRzOiBJbnB1dFtdLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ246ICdoYWxmc2lnbmVkJyB8ICdmdWxsc2lnbmVkJ1xuKTogdm9pZCB7XG4gIGlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5kZXgpID0+IHtcbiAgICBzaWduUHNidElucHV0KHBzYnQsIGlucHV0LCBpbmRleCwgcm9vdFdhbGxldEtleXMsIHNpZ24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBjb25zdHJ1Y3QgcHNidCBmb3IgZ2l2ZW4gaW5wdXRzLCBvdXRwdXRzLCBuZXR3b3JrIGFuZCByb290IHdhbGxldCBrZXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0UHNidChcbiAgaW5wdXRzOiBJbnB1dFtdLFxuICBvdXRwdXRzOiBPdXRwdXRbXSxcbiAgbmV0d29yazogTmV0d29yayxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBzaWduOiAndW5zaWduZWQnIHwgJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnXG4pOiBVdHhvUHNidCB7XG4gIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSBpbnB1dHMucmVkdWNlKChzdW0sIGlucHV0KSA9PiBzdW0gKyBpbnB1dC52YWx1ZSwgQmlnSW50KDApKTtcbiAgY29uc3Qgb3V0cHV0SW5wdXRBbW91bnQgPSBvdXRwdXRzLnJlZHVjZSgoc3VtLCBvdXRwdXQpID0+IHN1bSArIG91dHB1dC52YWx1ZSwgQmlnSW50KDApKTtcbiAgYXNzZXJ0KHRvdGFsSW5wdXRBbW91bnQgPj0gb3V0cHV0SW5wdXRBbW91bnQsICd0b3RhbCBvdXRwdXQgY2FuIG5vdCBleGNlZWQgdG90YWwgaW5wdXQnKTtcblxuICBjb25zdCBwc2J0ID0gY3JlYXRlUHNidEZvck5ldHdvcmsoeyBuZXR3b3JrIH0pO1xuICBjb25zdCB1bnNwZW50cyA9IGlucHV0cy5tYXAoKGlucHV0LCBpKSA9PiB0b1Vuc3BlbnQoaW5wdXQsIGksIG5ldHdvcmssIHJvb3RXYWxsZXRLZXlzKSk7XG5cbiAgdW5zcGVudHMuZm9yRWFjaCgodSwgaSkgPT4ge1xuICAgIGNvbnN0IHsgc2lnbmVyTmFtZSwgY29zaWduZXJOYW1lIH0gPSBnZXRTaWduZXJzKGlucHV0c1tpXS5zY3JpcHRUeXBlKTtcbiAgICBpZiAoaXNXYWxsZXRVbnNwZW50KHUpICYmIGNvc2lnbmVyTmFtZSkge1xuICAgICAgYWRkV2FsbGV0VW5zcGVudFRvUHNidChwc2J0LCB1LCByb290V2FsbGV0S2V5cywgc2lnbmVyTmFtZSwgY29zaWduZXJOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyByZWRlZW1TY3JpcHQgfSA9IGNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrKHJvb3RXYWxsZXRLZXlzW3NpZ25lck5hbWVdLnB1YmxpY0tleSk7XG4gICAgICBhc3NlcnQocmVkZWVtU2NyaXB0KTtcbiAgICAgIGFkZFJlcGxheVByb3RlY3Rpb25VbnNwZW50VG9Qc2J0KHBzYnQsIHUsIHJlZGVlbVNjcmlwdCk7XG4gICAgfVxuICB9KTtcblxuICBvdXRwdXRzLmZvckVhY2goKG91dHB1dCwgaSkgPT4ge1xuICAgIGFkZFdhbGxldE91dHB1dFRvUHNidChcbiAgICAgIHBzYnQsXG4gICAgICByb290V2FsbGV0S2V5cyxcbiAgICAgIG91dHB1dC5pc0ludGVybmFsQWRkcmVzcyA/IGdldEludGVybmFsQ2hhaW5Db2RlKG91dHB1dC5zY3JpcHRUeXBlKSA6IGdldEV4dGVybmFsQ2hhaW5Db2RlKG91dHB1dC5zY3JpcHRUeXBlKSxcbiAgICAgIGksXG4gICAgICBvdXRwdXQudmFsdWVcbiAgICApO1xuICB9KTtcblxuICBpZiAoc2lnbiA9PT0gJ3Vuc2lnbmVkJykge1xuICAgIHJldHVybiBwc2J0O1xuICB9XG5cbiAgcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzWyd1c2VyJ10pO1xuICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQocm9vdFdhbGxldEtleXNbJ2JpdGdvJ10pO1xuXG4gIHNpZ25BbGxQc2J0SW5wdXRzKHBzYnQsIGlucHV0cywgcm9vdFdhbGxldEtleXMsICdoYWxmc2lnbmVkJyk7XG5cbiAgaWYgKHNpZ24gPT09ICdmdWxsc2lnbmVkJykge1xuICAgIHNpZ25BbGxQc2J0SW5wdXRzKHBzYnQsIGlucHV0cywgcm9vdFdhbGxldEtleXMsIHNpZ24pO1xuICB9XG5cbiAgcmV0dXJuIHBzYnQ7XG59XG5cbi8qKlxuICogVmVyaWZpZXMgc2lnbmF0dXJlcyBvZiBmdWxseSBzaWduZWQgdHggKHdpdGggdGFwcm9vdCBrZXkgcGF0aCBzdXBwb3J0KS5cbiAqIE5PVEU6IHRhcHJvb3Qga2V5IHBhdGggdHggY2FuIG9ubHkgYmUgYnVpbHQgYW5kIHNpZ25lZCB3aXRoIFBTQlQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlGdWxseVNpZ25lZFNpZ25hdHVyZXMoXG4gIHR4OiBVdHhvVHJhbnNhY3Rpb248YmlnaW50PixcbiAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdLFxuICB3YWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbmVyOiBLZXlOYW1lLFxuICBjb3NpZ25lcjogS2V5TmFtZVxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHByZXZPdXRwdXRzID0gdW5zcGVudHMubWFwKCh1KSA9PiB0b091dHB1dCh1LCB0eC5uZXR3b3JrKSk7XG4gIHJldHVybiB1bnNwZW50cy5ldmVyeSgodSwgaW5kZXgpID0+IHtcbiAgICBpZiAocGFyc2VTaWduYXR1cmVTY3JpcHQyT2YzKHR4Lmluc1tpbmRleF0pLnNjcmlwdFR5cGUgPT09ICd0YXByb290S2V5UGF0aFNwZW5kJykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0U2lnbmF0dXJlVmVyaWZpY2F0aW9ucyh0eCwgaW5kZXgsIHUudmFsdWUsIHVuZGVmaW5lZCwgcHJldk91dHB1dHMpO1xuICAgICAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDEgJiYgcmVzdWx0WzBdLnNpZ25hdHVyZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmVyaWZ5U2lnbmF0dXJlV2l0aFVuc3BlbnQodHgsIGluZGV4LCB1bnNwZW50cywgd2FsbGV0S2V5cyk7XG4gICAgICBpZiAoKHNpZ25lciA9PT0gJ3VzZXInICYmIGNvc2lnbmVyID09PSAnYml0Z28nKSB8fCAoc2lnbmVyID09PSAnYml0Z28nICYmIGNvc2lnbmVyID09PSAndXNlcicpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRbMF0gJiYgIXJlc3VsdFsxXSAmJiByZXN1bHRbMl07XG4gICAgICB9IGVsc2UgaWYgKChzaWduZXIgPT09ICd1c2VyJyAmJiBjb3NpZ25lciA9PT0gJ2JhY2t1cCcpIHx8IChzaWduZXIgPT09ICdiYWNrdXAnICYmIGNvc2lnbmVyID09PSAndXNlcicpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRbMF0gJiYgcmVzdWx0WzFdICYmICFyZXN1bHRbMl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gIXJlc3VsdFswXSAmJiByZXN1bHRbMV0gJiYgcmVzdWx0WzJdO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4iXX0=
{
"name": "@bitgo/utxo-lib",
"version": "8.1.0",
"version": "8.2.0",
"description": "Client-side Bitcoin JavaScript library",

@@ -87,3 +87,3 @@ "main": "./dist/src/index.js",

"license": "MIT",
"gitHead": "ff58147e8b5afd189b2a4abe08cda97d2bb5c2ff"
"gitHead": "7924f71a0599488f81127ca3b3944c824add85b0"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc