@bitgo-beta/utxo-lib 8.0.3-beta.31 → 8.0.3-beta.310
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -16
- package/dist/src/address.js +5 -5
- package/dist/src/addressFormat.js +9 -9
- package/dist/src/bitgo/Musig2.js +19 -19
- package/dist/src/bitgo/PsbtUtil.d.ts +8 -7
- package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -1
- package/dist/src/bitgo/PsbtUtil.js +18 -3
- package/dist/src/bitgo/Unspent.js +3 -3
- package/dist/src/bitgo/UtxoPsbt.d.ts +19 -4
- package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/UtxoPsbt.js +174 -110
- package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -1
- package/dist/src/bitgo/UtxoTransaction.js +9 -9
- package/dist/src/bitgo/bitcoincash/address.js +6 -6
- package/dist/src/bitgo/bitcoincash/index.js +6 -2
- package/dist/src/bitgo/dash/DashTransaction.js +3 -3
- package/dist/src/bitgo/dash/index.js +6 -2
- package/dist/src/bitgo/index.d.ts +9 -0
- package/dist/src/bitgo/index.d.ts.map +1 -1
- package/dist/src/bitgo/index.js +9 -3
- package/dist/src/bitgo/legacysafe/index.d.ts +15 -0
- package/dist/src/bitgo/legacysafe/index.d.ts.map +1 -0
- package/dist/src/bitgo/legacysafe/index.js +61 -0
- package/dist/src/bitgo/litecoin/LitecoinTransaction.js +2 -2
- package/dist/src/bitgo/litecoin/index.js +6 -2
- package/dist/src/bitgo/outputScripts.d.ts +1 -0
- package/dist/src/bitgo/outputScripts.d.ts.map +1 -1
- package/dist/src/bitgo/outputScripts.js +29 -14
- package/dist/src/bitgo/parseInput.js +6 -6
- package/dist/src/bitgo/psbt/fromHalfSigned.js +5 -5
- package/dist/src/bitgo/signature.d.ts +2 -2
- package/dist/src/bitgo/signature.d.ts.map +1 -1
- package/dist/src/bitgo/signature.js +24 -9
- package/dist/src/bitgo/transaction.d.ts +18 -3
- package/dist/src/bitgo/transaction.d.ts.map +1 -1
- package/dist/src/bitgo/transaction.js +18 -16
- package/dist/src/bitgo/transactionAmounts.d.ts +9 -0
- package/dist/src/bitgo/transactionAmounts.d.ts.map +1 -0
- package/dist/src/bitgo/transactionAmounts.js +33 -0
- package/dist/src/bitgo/types.d.ts +7 -0
- package/dist/src/bitgo/types.d.ts.map +1 -1
- package/dist/src/bitgo/types.js +11 -2
- package/dist/src/bitgo/wallet/Psbt.d.ts +28 -8
- package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/Psbt.js +110 -29
- package/dist/src/bitgo/wallet/Unspent.d.ts +23 -13
- package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/Unspent.js +62 -53
- package/dist/src/bitgo/wallet/WalletOutput.d.ts +17 -1
- package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/WalletOutput.js +68 -27
- package/dist/src/bitgo/wallet/WalletScripts.js +2 -2
- package/dist/src/bitgo/wallet/WalletUnspentSigner.js +4 -4
- package/dist/src/bitgo/wallet/index.js +6 -2
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts +50 -0
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.js +87 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts +26 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.js +116 -0
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +0 -1
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/ZcashPsbt.js +5 -14
- package/dist/src/bitgo/zcash/ZcashTransaction.js +15 -15
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +4 -4
- package/dist/src/bitgo/zcash/address.js +3 -3
- package/dist/src/bitgo/zcash/hashZip0244.js +3 -3
- package/dist/src/bitgo/zcash/index.js +6 -2
- package/dist/src/index.js +6 -2
- package/dist/src/noble_ecc.d.ts +7 -7
- package/dist/src/noble_ecc.d.ts.map +1 -1
- package/dist/src/noble_ecc.js +4 -4
- package/dist/src/testutil/index.js +6 -2
- package/dist/src/testutil/keys.d.ts +3 -0
- package/dist/src/testutil/keys.d.ts.map +1 -1
- package/dist/src/testutil/keys.js +18 -3
- package/dist/src/testutil/mock.d.ts.map +1 -1
- package/dist/src/testutil/mock.js +19 -17
- package/dist/src/testutil/psbt.d.ts +27 -6
- package/dist/src/testutil/psbt.d.ts.map +1 -1
- package/dist/src/testutil/psbt.js +40 -29
- package/dist/src/testutil/transaction.d.ts +14 -5
- package/dist/src/testutil/transaction.d.ts.map +1 -1
- package/dist/src/testutil/transaction.js +20 -20
- package/package.json +8 -8
|
@@ -21,11 +21,11 @@ exports.outputScriptTypes = outputScripts_1.scriptTypes2Of3;
|
|
|
21
21
|
*/
|
|
22
22
|
function toUnspent(input, index, network, rootWalletKeys) {
|
|
23
23
|
if (input.scriptType === 'p2shP2pk') {
|
|
24
|
-
return mock_1.mockReplayProtectionUnspent(network, input.value, { key: rootWalletKeys['user'], vout: index });
|
|
24
|
+
return (0, mock_1.mockReplayProtectionUnspent)(network, input.value, { key: rootWalletKeys['user'], vout: index });
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
|
-
const chain = bitgo_1.getInternalChainCode(input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType);
|
|
28
|
-
return mock_1.mockWalletUnspent(network, input.value, {
|
|
27
|
+
const chain = (0, bitgo_1.getInternalChainCode)(input.scriptType === 'taprootKeyPathSpend' ? 'p2trMusig2' : input.scriptType);
|
|
28
|
+
return (0, mock_1.mockWalletUnspent)(network, input.value, {
|
|
29
29
|
chain,
|
|
30
30
|
vout: index,
|
|
31
31
|
keys: rootWalletKeys,
|
|
@@ -51,18 +51,27 @@ exports.getSigners = getSigners;
|
|
|
51
51
|
* signs with first or second signature for single input.
|
|
52
52
|
* p2shP2pk is signed only with first sign.
|
|
53
53
|
*/
|
|
54
|
-
function signPsbtInput(psbt, input, inputIndex, rootWalletKeys, sign) {
|
|
55
|
-
|
|
54
|
+
function signPsbtInput(psbt, input, inputIndex, rootWalletKeys, sign, params) {
|
|
55
|
+
function signPsbt(psbt, signFunc, skipNonWitnessUtxo) {
|
|
56
|
+
if (skipNonWitnessUtxo) {
|
|
57
|
+
(0, bitgo_1.withUnsafeNonSegwit)(psbt, signFunc);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
signFunc();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const { signers, deterministic, skipNonWitnessUtxo } = params !== null && params !== void 0 ? params : {};
|
|
64
|
+
const { signerName, cosignerName } = signers ? signers : getSigners(input.scriptType);
|
|
56
65
|
if (sign === 'halfsigned') {
|
|
57
66
|
if (input.scriptType === 'p2shP2pk') {
|
|
58
|
-
psbt.signInput(inputIndex, rootWalletKeys[signerName]);
|
|
67
|
+
signPsbt(psbt, () => psbt.signInput(inputIndex, rootWalletKeys[signerName]), skipNonWitnessUtxo);
|
|
59
68
|
}
|
|
60
69
|
else {
|
|
61
|
-
psbt.signInputHD(inputIndex, rootWalletKeys[signerName]);
|
|
70
|
+
signPsbt(psbt, () => psbt.signInputHD(inputIndex, rootWalletKeys[signerName]), skipNonWitnessUtxo);
|
|
62
71
|
}
|
|
63
72
|
}
|
|
64
|
-
if (sign === 'fullsigned' && cosignerName) {
|
|
65
|
-
psbt.signInputHD(inputIndex, rootWalletKeys[cosignerName]);
|
|
73
|
+
if (sign === 'fullsigned' && cosignerName && input.scriptType !== 'p2shP2pk') {
|
|
74
|
+
signPsbt(psbt, () => psbt.signInputHD(inputIndex, rootWalletKeys[cosignerName], { deterministic }), skipNonWitnessUtxo);
|
|
66
75
|
}
|
|
67
76
|
}
|
|
68
77
|
exports.signPsbtInput = signPsbtInput;
|
|
@@ -70,50 +79,52 @@ exports.signPsbtInput = signPsbtInput;
|
|
|
70
79
|
* signs with first or second signature for all inputs.
|
|
71
80
|
* p2shP2pk is signed only with first sign.
|
|
72
81
|
*/
|
|
73
|
-
function signAllPsbtInputs(psbt, inputs, rootWalletKeys, sign) {
|
|
74
|
-
|
|
75
|
-
|
|
82
|
+
function signAllPsbtInputs(psbt, inputs, rootWalletKeys, sign, params) {
|
|
83
|
+
const { signers, deterministic, skipNonWitnessUtxo } = params !== null && params !== void 0 ? params : {};
|
|
84
|
+
inputs.forEach((input, inputIndex) => {
|
|
85
|
+
signPsbtInput(psbt, input, inputIndex, rootWalletKeys, sign, { signers, deterministic, skipNonWitnessUtxo });
|
|
76
86
|
});
|
|
77
87
|
}
|
|
78
88
|
exports.signAllPsbtInputs = signAllPsbtInputs;
|
|
79
89
|
/**
|
|
80
90
|
* construct psbt for given inputs, outputs, network and root wallet keys.
|
|
81
91
|
*/
|
|
82
|
-
function constructPsbt(inputs, outputs, network, rootWalletKeys, sign) {
|
|
92
|
+
function constructPsbt(inputs, outputs, network, rootWalletKeys, sign, params) {
|
|
93
|
+
const { signers, deterministic, skipNonWitnessUtxo } = params !== null && params !== void 0 ? params : {};
|
|
83
94
|
const totalInputAmount = inputs.reduce((sum, input) => sum + input.value, BigInt(0));
|
|
84
95
|
const outputInputAmount = outputs.reduce((sum, output) => sum + output.value, BigInt(0));
|
|
85
96
|
assert(totalInputAmount >= outputInputAmount, 'total output can not exceed total input');
|
|
86
97
|
assert(!outputs.some((o) => (o.scriptType && o.address) || (!o.scriptType && !o.address)), 'only either output script type or address should be provided');
|
|
87
|
-
const psbt = bitgo_1.createPsbtForNetwork({ network });
|
|
98
|
+
const psbt = (0, bitgo_1.createPsbtForNetwork)({ network });
|
|
88
99
|
const unspents = inputs.map((input, i) => toUnspent(input, i, network, rootWalletKeys));
|
|
89
100
|
unspents.forEach((u, i) => {
|
|
90
|
-
const { signerName, cosignerName } = getSigners(inputs[i].scriptType);
|
|
91
|
-
if (bitgo_1.isWalletUnspent(u) && cosignerName) {
|
|
92
|
-
bitgo_1.addWalletUnspentToPsbt(psbt, u, rootWalletKeys, signerName, cosignerName);
|
|
101
|
+
const { signerName, cosignerName } = signers ? signers : getSigners(inputs[i].scriptType);
|
|
102
|
+
if ((0, bitgo_1.isWalletUnspent)(u) && cosignerName) {
|
|
103
|
+
(0, bitgo_1.addWalletUnspentToPsbt)(psbt, u, rootWalletKeys, signerName, cosignerName, { skipNonWitnessUtxo });
|
|
93
104
|
}
|
|
94
105
|
else {
|
|
95
|
-
const { redeemScript } = outputScripts_1.createOutputScriptP2shP2pk(rootWalletKeys[signerName].publicKey);
|
|
106
|
+
const { redeemScript } = (0, outputScripts_1.createOutputScriptP2shP2pk)(rootWalletKeys[signerName].publicKey);
|
|
96
107
|
assert(redeemScript);
|
|
97
|
-
bitgo_1.addReplayProtectionUnspentToPsbt(psbt, u, redeemScript);
|
|
108
|
+
(0, bitgo_1.addReplayProtectionUnspentToPsbt)(psbt, u, redeemScript, { skipNonWitnessUtxo });
|
|
98
109
|
}
|
|
99
110
|
});
|
|
100
111
|
outputs.forEach((output, i) => {
|
|
101
112
|
if (output.scriptType) {
|
|
102
|
-
bitgo_1.addWalletOutputToPsbt(psbt, rootWalletKeys, output.isInternalAddress ? bitgo_1.getInternalChainCode(output.scriptType) : bitgo_1.getExternalChainCode(output.scriptType), i, output.value);
|
|
113
|
+
(0, bitgo_1.addWalletOutputToPsbt)(psbt, rootWalletKeys, output.isInternalAddress ? (0, bitgo_1.getInternalChainCode)(output.scriptType) : (0, bitgo_1.getExternalChainCode)(output.scriptType), i, output.value);
|
|
103
114
|
}
|
|
104
115
|
else if (output.address) {
|
|
105
116
|
const { address, value } = output;
|
|
106
|
-
psbt.addOutput({ script: address_1.toOutputScript(address, network), value });
|
|
117
|
+
psbt.addOutput({ script: (0, address_1.toOutputScript)(address, network), value });
|
|
107
118
|
}
|
|
108
119
|
});
|
|
109
120
|
if (sign === 'unsigned') {
|
|
110
121
|
return psbt;
|
|
111
122
|
}
|
|
112
123
|
psbt.setAllInputsMusig2NonceHD(rootWalletKeys['user']);
|
|
113
|
-
psbt.setAllInputsMusig2NonceHD(rootWalletKeys['bitgo']);
|
|
114
|
-
signAllPsbtInputs(psbt, inputs, rootWalletKeys, 'halfsigned');
|
|
124
|
+
psbt.setAllInputsMusig2NonceHD(rootWalletKeys['bitgo'], { deterministic });
|
|
125
|
+
signAllPsbtInputs(psbt, inputs, rootWalletKeys, 'halfsigned', { signers, skipNonWitnessUtxo });
|
|
115
126
|
if (sign === 'fullsigned') {
|
|
116
|
-
signAllPsbtInputs(psbt, inputs, rootWalletKeys, sign);
|
|
127
|
+
signAllPsbtInputs(psbt, inputs, rootWalletKeys, sign, { signers, deterministic, skipNonWitnessUtxo });
|
|
117
128
|
}
|
|
118
129
|
return psbt;
|
|
119
130
|
}
|
|
@@ -123,14 +134,14 @@ exports.constructPsbt = constructPsbt;
|
|
|
123
134
|
* NOTE: taproot key path tx can only be built and signed with PSBT.
|
|
124
135
|
*/
|
|
125
136
|
function verifyFullySignedSignatures(tx, unspents, walletKeys, signer, cosigner) {
|
|
126
|
-
const prevOutputs = unspents.map((u) => bitgo_1.toOutput(u, tx.network));
|
|
137
|
+
const prevOutputs = unspents.map((u) => (0, bitgo_1.toOutput)(u, tx.network));
|
|
127
138
|
return unspents.every((u, index) => {
|
|
128
|
-
if (bitgo_1.parseSignatureScript2Of3(tx.ins[index]).scriptType === 'taprootKeyPathSpend') {
|
|
129
|
-
const result = bitgo_1.getSignatureVerifications(tx, index, u.value, undefined, prevOutputs);
|
|
139
|
+
if ((0, bitgo_1.parseSignatureScript2Of3)(tx.ins[index]).scriptType === 'taprootKeyPathSpend') {
|
|
140
|
+
const result = (0, bitgo_1.getSignatureVerifications)(tx, index, u.value, undefined, prevOutputs);
|
|
130
141
|
return result.length === 1 && result[0].signature;
|
|
131
142
|
}
|
|
132
143
|
else {
|
|
133
|
-
const result = bitgo_1.verifySignatureWithUnspent(tx, index, unspents, walletKeys);
|
|
144
|
+
const result = (0, bitgo_1.verifySignatureWithUnspent)(tx, index, unspents, walletKeys);
|
|
134
145
|
if ((signer === 'user' && cosigner === 'bitgo') || (signer === 'bitgo' && cosigner === 'user')) {
|
|
135
146
|
return result[0] && !result[1] && result[2];
|
|
136
147
|
}
|
|
@@ -144,4 +155,4 @@ function verifyFullySignedSignatures(tx, unspents, walletKeys, signer, cosigner)
|
|
|
144
155
|
});
|
|
145
156
|
}
|
|
146
157
|
exports.verifyFullySignedSignatures = verifyFullySignedSignatures;
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0dXRpbC9wc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUVqQywwREFNZ0M7QUFDaEMsb0NBa0JrQjtBQUVsQixpQ0FBd0U7QUFDeEUsd0NBQTRDO0FBNkI1Qzs7OztHQUlHO0FBQ1UsUUFBQSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsK0JBQWUsRUFBRSxxQkFBcUIsRUFBRSxrQ0FBa0IsQ0FBVSxDQUFDO0FBRXpHOztHQUVHO0FBQ1UsUUFBQSxpQkFBaUIsR0FBRywrQkFBZSxDQUFDO0FBRWpEOztHQUVHO0FBQ0gsU0FBZ0IsU0FBUyxDQUN2QixLQUFZLEVBQ1osS0FBYSxFQUNiLE9BQWdCLEVBQ2hCLGNBQThCO0lBRTlCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDbkMsT0FBTyxrQ0FBMkIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDeEc7U0FBTTtRQUNMLE1BQU0sS0FBSyxHQUFHLDRCQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUsscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pILE9BQU8sd0JBQWlCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDN0MsS0FBSztZQUNMLElBQUksRUFBRSxLQUFLO1lBQ1gsSUFBSSxFQUFFLGNBQWM7WUFDcEIsS0FBSztTQUNOLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQztBQWpCRCw4QkFpQkM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxTQUEwQjtJQUNuRCxPQUFPO1FBQ0wsVUFBVSxF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YUFBTTtZQUNMLE1BQU0sTUFBTSxHQUFHLGtDQUEwQixDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLFFBQVEsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLElBQUksUUFBUSxLQUFLLE1BQU0sQ0FBQyxFQUFFO2dCQUM5RixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0M7aUJBQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssTUFBTSxDQUFDLEVBQUU7Z0JBQ3ZHLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QztpQkFBTTtnQkFDTCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0M7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQXZCRCxrRUF1QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGssXG4gIFNjcmlwdFR5cGUsXG4gIFNjcmlwdFR5cGUyT2YzLFxuICBzY3JpcHRUeXBlUDJzaFAycGssXG4gIHNjcmlwdFR5cGVzMk9mMyxcbn0gZnJvbSAnLi4vYml0Z28vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQge1xuICBhZGRSZXBsYXlQcm90ZWN0aW9uVW5zcGVudFRvUHNidCxcbiAgYWRkV2FsbGV0T3V0cHV0VG9Qc2J0LFxuICBhZGRXYWxsZXRVbnNwZW50VG9Qc2J0LFxuICBjcmVhdGVQc2J0Rm9yTmV0d29yayxcbiAgZ2V0RXh0ZXJuYWxDaGFpbkNvZGUsXG4gIGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnMsXG4gIGlzV2FsbGV0VW5zcGVudCxcbiAgS2V5TmFtZSxcbiAgcGFyc2VTaWduYXR1cmVTY3JpcHQyT2YzLFxuICBnZXRJbnRlcm5hbENoYWluQ29kZSxcbiAgUm9vdFdhbGxldEtleXMsXG4gIHRvT3V0cHV0LFxuICBVbnNwZW50LFxuICBVdHhvUHNidCxcbiAgVXR4b1RyYW5zYWN0aW9uLFxuICB2ZXJpZnlTaWduYXR1cmVXaXRoVW5zcGVudCxcbiAgV2FsbGV0VW5zcGVudCxcbn0gZnJvbSAnLi4vYml0Z28nO1xuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uL25ldHdvcmtzJztcbmltcG9ydCB7IG1vY2tSZXBsYXlQcm90ZWN0aW9uVW5zcGVudCwgbW9ja1dhbGxldFVuc3BlbnQgfSBmcm9tICcuL21vY2snO1xuaW1wb3J0IHsgdG9PdXRwdXRTY3JpcHQgfSBmcm9tICcuLi9hZGRyZXNzJztcblxuLyoqXG4gKiBpbnB1dCBzY3JpcHQgdHlwZSBhbmQgdmFsdWUuXG4gKiB1c2UgcDJ0ck11c2lnMiBmb3IgcDJ0ck11c2lnMiBzY3JpcHQgcGF0aC5cbiAqIHVzZSB0YXByb290S2V5UGF0aFNwZW5kIGZvciBwMnRyTXVzaWcyIGtleSBwYXRoLlxuICovXG5leHBvcnQgdHlwZSBJbnB1dFNjcmlwdFR5cGUgPSBTY3JpcHRUeXBlIHwgJ3RhcHJvb3RLZXlQYXRoU3BlbmQnO1xuZXhwb3J0IHR5cGUgT3V0cHV0U2NyaXB0VHlwZSA9IFNjcmlwdFR5cGUyT2YzO1xuXG4vKipcbiAqIG91dHB1dCBzY3JpcHQgdHlwZSBhbmQgdmFsdWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gIHNjcmlwdFR5cGU6IElucHV0U2NyaXB0VHlwZTtcbiAgdmFsdWU6IGJpZ2ludDtcbn1cblxuLyoqXG4gKiBzaG91bGQgc2V0IGVpdGhlciBhZGRyZXNzIG9yIHNjcmlwdFR5cGUsIG5ldmVyIGJvdGguXG4gKiBzZXQgaXNJbnRlcm5hbEFkZHJlc3M9dHJ1ZSBmb3IgaW50ZXJuYWwgb3V0cHV0IGFkZHJlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBzY3JpcHRUeXBlPzogT3V0cHV0U2NyaXB0VHlwZTtcbiAgdmFsdWU6IGJpZ2ludDtcbiAgaXNJbnRlcm5hbEFkZHJlc3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGFycmF5IG9mIHN1cHBvcnRlZCBpbnB1dCBzY3JpcHQgdHlwZXMuXG4gKiB1c2UgcDJ0ck11c2lnMiBmb3IgcDJ0ck11c2lnMiBzY3JpcHQgcGF0aC5cbiAqIHVzZSB0YXByb290S2V5UGF0aFNwZW5kIGZvciBwMnRyTXVzaWcyIGtleSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgaW5wdXRTY3JpcHRUeXBlcyA9IFsuLi5zY3JpcHRUeXBlczJPZjMsICd0YXByb290S2V5UGF0aFNwZW5kJywgc2NyaXB0VHlwZVAyc2hQMnBrXSBhcyBjb25zdDtcblxuLyoqXG4gKiBhcnJheSBvZiBzdXBwb3J0ZWQgb3V0cHV0IHNjcmlwdCB0eXBlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IG91dHB1dFNjcmlwdFR5cGVzID0gc2NyaXB0VHlwZXMyT2YzO1xuXG4vKipcbiAqIGNyZWF0ZSB1bnNwZW50IG9iamVjdCBmcm9tIGlucHV0IHNjcmlwdCB0eXBlLCBpbmRleCwgbmV0d29yayBhbmQgcm9vdCB3YWxsZXQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbnNwZW50KFxuICBpbnB1dDogSW5wdXQsXG4gIGluZGV4OiBudW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5c1xuKTogVW5zcGVudDxiaWdpbnQ+IHtcbiAgaWYgKGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICByZXR1cm4gbW9ja1JlcGxheVByb3RlY3Rpb25VbnNwZW50KG5ldHdvcmssIGlucHV0LnZhbHVlLCB7IGtleTogcm9vdFdhbGxldEtleXNbJ3VzZXInXSwgdm91dDogaW5kZXggfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2hhaW4gPSBnZXRJbnRlcm5hbENoYWluQ29kZShpbnB1dC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiBpbnB1dC5zY3JpcHRUeXBlKTtcbiAgICByZXR1cm4gbW9ja1dhbGxldFVuc3BlbnQobmV0d29yaywgaW5wdXQudmFsdWUsIHtcbiAgICAgIGNoYWluLFxuICAgICAgdm91dDogaW5kZXgsXG4gICAgICBrZXlzOiByb290V2FsbGV0S2V5cyxcbiAgICAgIGluZGV4LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogcmV0dXJucyBzaWduZXIgYW5kIGNvc2lnbmVyIG5hbWVzIGZvciBJbnB1dFNjcmlwdFR5cGUuXG4gKiB1c2VyIGFuZCB1bmRlZmluZWQgYXMgc2lnbmVyIGFuZCBjb3NpZ25lciByZXNwZWN0aXZlbHkgZm9yIHAyc2hQMnBrLlxuICogdXNlciBhbmQgYmFja3VwIGFzIHNpZ25lciBhbmQgY29zaWduZXIgcmVzcGVjdGl2ZWx5IGZvciBwMnRyTXVzaWcyLlxuICogdXNlciBhbmQgYml0Z28gYXMgc2lnbmVyIGFuZCBjb3NpZ25lciByZXNwZWN0aXZlbHkgZm9yIG90aGVyIGlucHV0IHNjcmlwdCB0eXBlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25lcnMoaW5wdXRUeXBlOiBJbnB1dFNjcmlwdFR5cGUpOiB7IHNpZ25lck5hbWU6IEtleU5hbWU7IGNvc2lnbmVyTmFtZT86IEtleU5hbWUgfSB7XG4gIHJldHVybiB7XG4gICAgc2lnbmVyTmFtZTogJ3VzZXInLFxuICAgIGNvc2lnbmVyTmFtZTogaW5wdXRUeXBlID09PSAncDJzaFAycGsnID8gdW5kZWZpbmVkIDogaW5wdXRUeXBlID09PSAncDJ0ck11c2lnMicgPyAnYmFja3VwJyA6ICdiaXRnbycsXG4gIH07XG59XG5cbi8qKlxuICogc2lnbnMgd2l0aCBmaXJzdCBvciBzZWNvbmQgc2lnbmF0dXJlIGZvciBzaW5nbGUgaW5wdXQuXG4gKiBwMnNoUDJwayBpcyBzaWduZWQgb25seSB3aXRoIGZpcnN0IHNpZ24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduUHNidElucHV0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgaW5wdXQ6IElucHV0LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnXG4pOiB2b2lkIHtcbiAgY29uc3QgeyBzaWduZXJOYW1lLCBjb3NpZ25lck5hbWUgfSA9IGdldFNpZ25lcnMoaW5wdXQuc2NyaXB0VHlwZSk7XG4gIGlmIChzaWduID09PSAnaGFsZnNpZ25lZCcpIHtcbiAgICBpZiAoaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgcHNidC5zaWduSW5wdXQoaW5wdXRJbmRleCwgcm9vdFdhbGxldEtleXNbc2lnbmVyTmFtZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwc2J0LnNpZ25JbnB1dEhEKGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzW3NpZ25lck5hbWVdKTtcbiAgICB9XG4gIH1cbiAgaWYgKHNpZ24gPT09ICdmdWxsc2lnbmVkJyAmJiBjb3NpZ25lck5hbWUpIHtcbiAgICBwc2J0LnNpZ25JbnB1dEhEKGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzW2Nvc2lnbmVyTmFtZV0pO1xuICB9XG59XG5cbi8qKlxuICogc2lnbnMgd2l0aCBmaXJzdCBvciBzZWNvbmQgc2lnbmF0dXJlIGZvciBhbGwgaW5wdXRzLlxuICogcDJzaFAycGsgaXMgc2lnbmVkIG9ubHkgd2l0aCBmaXJzdCBzaWduLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnbkFsbFBzYnRJbnB1dHMoXG4gIHBzYnQ6IFV0eG9Qc2J0LFxuICBpbnB1dHM6IElucHV0W10sXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnXG4pOiB2b2lkIHtcbiAgaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuICAgIHNpZ25Qc2J0SW5wdXQocHNidCwgaW5wdXQsIGluZGV4LCByb290V2FsbGV0S2V5cywgc2lnbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIGNvbnN0cnVjdCBwc2J0IGZvciBnaXZlbiBpbnB1dHMsIG91dHB1dHMsIG5ldHdvcmsgYW5kIHJvb3Qgd2FsbGV0IGtleXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdHJ1Y3RQc2J0KFxuICBpbnB1dHM6IElucHV0W10sXG4gIG91dHB1dHM6IE91dHB1dFtdLFxuICBuZXR3b3JrOiBOZXR3b3JrLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ246ICd1bnNpZ25lZCcgfCAnaGFsZnNpZ25lZCcgfCAnZnVsbHNpZ25lZCdcbik6IFV0eG9Qc2J0IHtcbiAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IGlucHV0cy5yZWR1Y2UoKHN1bSwgaW5wdXQpID0+IHN1bSArIGlucHV0LnZhbHVlLCBCaWdJbnQoMCkpO1xuICBjb25zdCBvdXRwdXRJbnB1dEFtb3VudCA9IG91dHB1dHMucmVkdWNlKChzdW0sIG91dHB1dCkgPT4gc3VtICsgb3V0cHV0LnZhbHVlLCBCaWdJbnQoMCkpO1xuICBhc3NlcnQodG90YWxJbnB1dEFtb3VudCA+PSBvdXRwdXRJbnB1dEFtb3VudCwgJ3RvdGFsIG91dHB1dCBjYW4gbm90IGV4Y2VlZCB0b3RhbCBpbnB1dCcpO1xuICBhc3NlcnQoXG4gICAgIW91dHB1dHMuc29tZSgobykgPT4gKG8uc2NyaXB0VHlwZSAmJiBvLmFkZHJlc3MpIHx8ICghby5zY3JpcHRUeXBlICYmICFvLmFkZHJlc3MpKSxcbiAgICAnb25seSBlaXRoZXIgb3V0cHV0IHNjcmlwdCB0eXBlIG9yIGFkZHJlc3Mgc2hvdWxkIGJlIHByb3ZpZGVkJ1xuICApO1xuXG4gIGNvbnN0IHBzYnQgPSBjcmVhdGVQc2J0Rm9yTmV0d29yayh7IG5ldHdvcmsgfSk7XG4gIGNvbnN0IHVuc3BlbnRzID0gaW5wdXRzLm1hcCgoaW5wdXQsIGkpID0+IHRvVW5zcGVudChpbnB1dCwgaSwgbmV0d29yaywgcm9vdFdhbGxldEtleXMpKTtcblxuICB1bnNwZW50cy5mb3JFYWNoKCh1LCBpKSA9PiB7XG4gICAgY29uc3QgeyBzaWduZXJOYW1lLCBjb3NpZ25lck5hbWUgfSA9IGdldFNpZ25lcnMoaW5wdXRzW2ldLnNjcmlwdFR5cGUpO1xuICAgIGlmIChpc1dhbGxldFVuc3BlbnQodSkgJiYgY29zaWduZXJOYW1lKSB7XG4gICAgICBhZGRXYWxsZXRVbnNwZW50VG9Qc2J0KHBzYnQsIHUsIHJvb3RXYWxsZXRLZXlzLCBzaWduZXJOYW1lLCBjb3NpZ25lck5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IHJlZGVlbVNjcmlwdCB9ID0gY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGsocm9vdFdhbGxldEtleXNbc2lnbmVyTmFtZV0ucHVibGljS2V5KTtcbiAgICAgIGFzc2VydChyZWRlZW1TY3JpcHQpO1xuICAgICAgYWRkUmVwbGF5UHJvdGVjdGlvblVuc3BlbnRUb1BzYnQocHNidCwgdSwgcmVkZWVtU2NyaXB0KTtcbiAgICB9XG4gIH0pO1xuXG4gIG91dHB1dHMuZm9yRWFjaCgob3V0cHV0LCBpKSA9PiB7XG4gICAgaWYgKG91dHB1dC5zY3JpcHRUeXBlKSB7XG4gICAgICBhZGRXYWxsZXRPdXRwdXRUb1BzYnQoXG4gICAgICAgIHBzYnQsXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzLFxuICAgICAgICBvdXRwdXQuaXNJbnRlcm5hbEFkZHJlc3MgPyBnZXRJbnRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSkgOiBnZXRFeHRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSksXG4gICAgICAgIGksXG4gICAgICAgIG91dHB1dC52YWx1ZVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG91dHB1dC5hZGRyZXNzKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIHZhbHVlIH0gPSBvdXRwdXQ7XG4gICAgICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdDogdG9PdXRwdXRTY3JpcHQoYWRkcmVzcywgbmV0d29yayksIHZhbHVlIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHNpZ24gPT09ICd1bnNpZ25lZCcpIHtcbiAgICByZXR1cm4gcHNidDtcbiAgfVxuXG4gIHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5c1sndXNlciddKTtcbiAgcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzWydiaXRnbyddKTtcblxuICBzaWduQWxsUHNidElucHV0cyhwc2J0LCBpbnB1dHMsIHJvb3RXYWxsZXRLZXlzLCAnaGFsZnNpZ25lZCcpO1xuXG4gIGlmIChzaWduID09PSAnZnVsbHNpZ25lZCcpIHtcbiAgICBzaWduQWxsUHNidElucHV0cyhwc2J0LCBpbnB1dHMsIHJvb3RXYWxsZXRLZXlzLCBzaWduKTtcbiAgfVxuXG4gIHJldHVybiBwc2J0O1xufVxuXG4vKipcbiAqIFZlcmlmaWVzIHNpZ25hdHVyZXMgb2YgZnVsbHkgc2lnbmVkIHR4ICh3aXRoIHRhcHJvb3Qga2V5IHBhdGggc3VwcG9ydCkuXG4gKiBOT1RFOiB0YXByb290IGtleSBwYXRoIHR4IGNhbiBvbmx5IGJlIGJ1aWx0IGFuZCBzaWduZWQgd2l0aCBQU0JULlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5RnVsbHlTaWduZWRTaWduYXR1cmVzKFxuICB0eDogVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4sXG4gIHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ25lcjogS2V5TmFtZSxcbiAgY29zaWduZXI6IEtleU5hbWVcbik6IGJvb2xlYW4ge1xuICBjb25zdCBwcmV2T3V0cHV0cyA9IHVuc3BlbnRzLm1hcCgodSkgPT4gdG9PdXRwdXQodSwgdHgubmV0d29yaykpO1xuICByZXR1cm4gdW5zcGVudHMuZXZlcnkoKHUsIGluZGV4KSA9PiB7XG4gICAgaWYgKHBhcnNlU2lnbmF0dXJlU2NyaXB0Mk9mMyh0eC5pbnNbaW5kZXhdKS5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFNpZ25hdHVyZVZlcmlmaWNhdGlvbnModHgsIGluZGV4LCB1LnZhbHVlLCB1bmRlZmluZWQsIHByZXZPdXRwdXRzKTtcbiAgICAgIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAxICYmIHJlc3VsdFswXS5zaWduYXR1cmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZlcmlmeVNpZ25hdHVyZVdpdGhVbnNwZW50KHR4LCBpbmRleCwgdW5zcGVudHMsIHdhbGxldEtleXMpO1xuICAgICAgaWYgKChzaWduZXIgPT09ICd1c2VyJyAmJiBjb3NpZ25lciA9PT0gJ2JpdGdvJykgfHwgKHNpZ25lciA9PT0gJ2JpdGdvJyAmJiBjb3NpZ25lciA9PT0gJ3VzZXInKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0WzBdICYmICFyZXN1bHRbMV0gJiYgcmVzdWx0WzJdO1xuICAgICAgfSBlbHNlIGlmICgoc2lnbmVyID09PSAndXNlcicgJiYgY29zaWduZXIgPT09ICdiYWNrdXAnKSB8fCAoc2lnbmVyID09PSAnYmFja3VwJyAmJiBjb3NpZ25lciA9PT0gJ3VzZXInKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0WzBdICYmIHJlc3VsdFsxXSAmJiAhcmVzdWx0WzJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICFyZXN1bHRbMF0gJiYgcmVzdWx0WzFdICYmIHJlc3VsdFsyXTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuIl19
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNidC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0dXRpbC9wc2J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUVqQywwREFNZ0M7QUFDaEMsb0NBa0JrQjtBQUVsQixpQ0FBd0U7QUFDeEUsd0NBQTRDO0FBNkI1Qzs7OztHQUlHO0FBQ1UsUUFBQSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsK0JBQWUsRUFBRSxxQkFBcUIsRUFBRSxrQ0FBa0IsQ0FBVSxDQUFDO0FBRXpHOztHQUVHO0FBQ1UsUUFBQSxpQkFBaUIsR0FBRywrQkFBZSxDQUFDO0FBRWpEOztHQUVHO0FBQ0gsU0FBZ0IsU0FBUyxDQUN2QixLQUFZLEVBQ1osS0FBYSxFQUNiLE9BQWdCLEVBQ2hCLGNBQThCO0lBRTlCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDbkMsT0FBTyxJQUFBLGtDQUEyQixFQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUN4RztTQUFNO1FBQ0wsTUFBTSxLQUFLLEdBQUcsSUFBQSw0QkFBb0IsRUFBQyxLQUFLLENBQUMsVUFBVSxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqSCxPQUFPLElBQUEsd0JBQWlCLEVBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDN0MsS0FBSztZQUNMLElBQUksRUFBRSxLQUFLO1lBQ1gsSUFBSSxFQUFFLGNBQWM7WUFDcEIsS0FBSztTQUNOLENBQUMsQ0FBQztLQUNKO0FBQ0gsQ0FBQztBQWpCRCw4QkFpQkM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFVBQVUsQ0FBQyxTQUEwQjtJQUNuRCxP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QUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3JGLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNuRDthQUFNO1lBQ0wsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQ0FBMEIsRUFBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxRQUFRLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxJQUFJLFFBQVEsS0FBSyxNQUFNLENBQUMsRUFBRTtnQkFDOUYsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdDO2lCQUFNLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLFFBQVEsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLE1BQU0sQ0FBQyxFQUFFO2dCQUN2RyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDN0M7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzdDO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUF2QkQsa0VBdUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZU91dHB1dFNjcmlwdFAyc2hQMnBrLFxuICBTY3JpcHRUeXBlLFxuICBTY3JpcHRUeXBlMk9mMyxcbiAgc2NyaXB0VHlwZVAyc2hQMnBrLFxuICBzY3JpcHRUeXBlczJPZjMsXG59IGZyb20gJy4uL2JpdGdvL291dHB1dFNjcmlwdHMnO1xuaW1wb3J0IHtcbiAgYWRkUmVwbGF5UHJvdGVjdGlvblVuc3BlbnRUb1BzYnQsXG4gIGFkZFdhbGxldE91dHB1dFRvUHNidCxcbiAgYWRkV2FsbGV0VW5zcGVudFRvUHNidCxcbiAgY3JlYXRlUHNidEZvck5ldHdvcmssXG4gIGdldEV4dGVybmFsQ2hhaW5Db2RlLFxuICBnZXRJbnRlcm5hbENoYWluQ29kZSxcbiAgZ2V0U2lnbmF0dXJlVmVyaWZpY2F0aW9ucyxcbiAgaXNXYWxsZXRVbnNwZW50LFxuICBLZXlOYW1lLFxuICBwYXJzZVNpZ25hdHVyZVNjcmlwdDJPZjMsXG4gIFJvb3RXYWxsZXRLZXlzLFxuICB0b091dHB1dCxcbiAgVW5zcGVudCxcbiAgVXR4b1BzYnQsXG4gIFV0eG9UcmFuc2FjdGlvbixcbiAgdmVyaWZ5U2lnbmF0dXJlV2l0aFVuc3BlbnQsXG4gIHdpdGhVbnNhZmVOb25TZWd3aXQsXG59IGZyb20gJy4uL2JpdGdvJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBtb2NrUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQsIG1vY2tXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi9tb2NrJztcbmltcG9ydCB7IHRvT3V0cHV0U2NyaXB0IH0gZnJvbSAnLi4vYWRkcmVzcyc7XG5cbi8qKlxuICogaW5wdXQgc2NyaXB0IHR5cGUgYW5kIHZhbHVlLlxuICogdXNlIHAydHJNdXNpZzIgZm9yIHAydHJNdXNpZzIgc2NyaXB0IHBhdGguXG4gKiB1c2UgdGFwcm9vdEtleVBhdGhTcGVuZCBmb3IgcDJ0ck11c2lnMiBrZXkgcGF0aC5cbiAqL1xuZXhwb3J0IHR5cGUgSW5wdXRTY3JpcHRUeXBlID0gU2NyaXB0VHlwZSB8ICd0YXByb290S2V5UGF0aFNwZW5kJztcbmV4cG9ydCB0eXBlIE91dHB1dFNjcmlwdFR5cGUgPSBTY3JpcHRUeXBlMk9mMztcblxuLyoqXG4gKiBpbnB1dCBzY3JpcHQgdHlwZSBhbmQgdmFsdWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnB1dCB7XG4gIHNjcmlwdFR5cGU6IElucHV0U2NyaXB0VHlwZTtcbiAgdmFsdWU6IGJpZ2ludDtcbn1cblxuLyoqXG4gKiBzaG91bGQgc2V0IGVpdGhlciBhZGRyZXNzIG9yIHNjcmlwdFR5cGUsIG5ldmVyIGJvdGguXG4gKiBzZXQgaXNJbnRlcm5hbEFkZHJlc3M9dHJ1ZSBmb3IgaW50ZXJuYWwgb3V0cHV0IGFkZHJlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdXRwdXQge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBzY3JpcHRUeXBlPzogT3V0cHV0U2NyaXB0VHlwZTtcbiAgdmFsdWU6IGJpZ2ludDtcbiAgaXNJbnRlcm5hbEFkZHJlc3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGFycmF5IG9mIHN1cHBvcnRlZCBpbnB1dCBzY3JpcHQgdHlwZXMuXG4gKiB1c2UgcDJ0ck11c2lnMiBmb3IgcDJ0ck11c2lnMiBzY3JpcHQgcGF0aC5cbiAqIHVzZSB0YXByb290S2V5UGF0aFNwZW5kIGZvciBwMnRyTXVzaWcyIGtleSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgaW5wdXRTY3JpcHRUeXBlcyA9IFsuLi5zY3JpcHRUeXBlczJPZjMsICd0YXByb290S2V5UGF0aFNwZW5kJywgc2NyaXB0VHlwZVAyc2hQMnBrXSBhcyBjb25zdDtcblxuLyoqXG4gKiBhcnJheSBvZiBzdXBwb3J0ZWQgb3V0cHV0IHNjcmlwdCB0eXBlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IG91dHB1dFNjcmlwdFR5cGVzID0gc2NyaXB0VHlwZXMyT2YzO1xuXG4vKipcbiAqIGNyZWF0ZSB1bnNwZW50IG9iamVjdCBmcm9tIGlucHV0IHNjcmlwdCB0eXBlLCBpbmRleCwgbmV0d29yayBhbmQgcm9vdCB3YWxsZXQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VbnNwZW50KFxuICBpbnB1dDogSW5wdXQsXG4gIGluZGV4OiBudW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5c1xuKTogVW5zcGVudDxiaWdpbnQ+IHtcbiAgaWYgKGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICByZXR1cm4gbW9ja1JlcGxheVByb3RlY3Rpb25VbnNwZW50KG5ldHdvcmssIGlucHV0LnZhbHVlLCB7IGtleTogcm9vdFdhbGxldEtleXNbJ3VzZXInXSwgdm91dDogaW5kZXggfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY2hhaW4gPSBnZXRJbnRlcm5hbENoYWluQ29kZShpbnB1dC5zY3JpcHRUeXBlID09PSAndGFwcm9vdEtleVBhdGhTcGVuZCcgPyAncDJ0ck11c2lnMicgOiBpbnB1dC5zY3JpcHRUeXBlKTtcbiAgICByZXR1cm4gbW9ja1dhbGxldFVuc3BlbnQobmV0d29yaywgaW5wdXQudmFsdWUsIHtcbiAgICAgIGNoYWluLFxuICAgICAgdm91dDogaW5kZXgsXG4gICAgICBrZXlzOiByb290V2FsbGV0S2V5cyxcbiAgICAgIGluZGV4LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogcmV0dXJucyBzaWduZXIgYW5kIGNvc2lnbmVyIG5hbWVzIGZvciBJbnB1dFNjcmlwdFR5cGUuXG4gKiB1c2VyIGFuZCB1bmRlZmluZWQgYXMgc2lnbmVyIGFuZCBjb3NpZ25lciByZXNwZWN0aXZlbHkgZm9yIHAyc2hQMnBrLlxuICogdXNlciBhbmQgYmFja3VwIGFzIHNpZ25lciBhbmQgY29zaWduZXIgcmVzcGVjdGl2ZWx5IGZvciBwMnRyTXVzaWcyLlxuICogdXNlciBhbmQgYml0Z28gYXMgc2lnbmVyIGFuZCBjb3NpZ25lciByZXNwZWN0aXZlbHkgZm9yIG90aGVyIGlucHV0IHNjcmlwdCB0eXBlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25lcnMoaW5wdXRUeXBlOiBJbnB1dFNjcmlwdFR5cGUpOiB7IHNpZ25lck5hbWU6IEtleU5hbWU7IGNvc2lnbmVyTmFtZT86IEtleU5hbWUgfSB7XG4gIHJldHVybiB7XG4gICAgc2lnbmVyTmFtZTogJ3VzZXInLFxuICAgIGNvc2lnbmVyTmFtZTogaW5wdXRUeXBlID09PSAncDJzaFAycGsnID8gdW5kZWZpbmVkIDogaW5wdXRUeXBlID09PSAncDJ0ck11c2lnMicgPyAnYmFja3VwJyA6ICdiaXRnbycsXG4gIH07XG59XG5cbi8qKlxuICogc2lnbnMgd2l0aCBmaXJzdCBvciBzZWNvbmQgc2lnbmF0dXJlIGZvciBzaW5nbGUgaW5wdXQuXG4gKiBwMnNoUDJwayBpcyBzaWduZWQgb25seSB3aXRoIGZpcnN0IHNpZ24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduUHNidElucHV0KFxuICBwc2J0OiBVdHhvUHNidCxcbiAgaW5wdXQ6IElucHV0LFxuICBpbnB1dEluZGV4OiBudW1iZXIsXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbjogJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnLFxuICBwYXJhbXM/OiB7XG4gICAgc2lnbmVycz86IHsgc2lnbmVyTmFtZTogS2V5TmFtZTsgY29zaWduZXJOYW1lPzogS2V5TmFtZSB9O1xuICAgIGRldGVybWluaXN0aWM/OiBib29sZWFuO1xuICAgIHNraXBOb25XaXRuZXNzVXR4bz86IGJvb2xlYW47XG4gIH1cbik6IHZvaWQge1xuICBmdW5jdGlvbiBzaWduUHNidChwc2J0OiBVdHhvUHNidCwgc2lnbkZ1bmM6ICgpID0+IHZvaWQsIHNraXBOb25XaXRuZXNzVXR4bz86IGJvb2xlYW4pIHtcbiAgICBpZiAoc2tpcE5vbldpdG5lc3NVdHhvKSB7XG4gICAgICB3aXRoVW5zYWZlTm9uU2Vnd2l0KHBzYnQsIHNpZ25GdW5jKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2lnbkZ1bmMoKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB7IHNpZ25lcnMsIGRldGVybWluaXN0aWMsIHNraXBOb25XaXRuZXNzVXR4byB9ID0gcGFyYW1zID8/IHt9O1xuICBjb25zdCB7IHNpZ25lck5hbWUsIGNvc2lnbmVyTmFtZSB9ID0gc2lnbmVycyA/IHNpZ25lcnMgOiBnZXRTaWduZXJzKGlucHV0LnNjcmlwdFR5cGUpO1xuICBpZiAoc2lnbiA9PT0gJ2hhbGZzaWduZWQnKSB7XG4gICAgaWYgKGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgIHNpZ25Qc2J0KHBzYnQsICgpID0+IHBzYnQuc2lnbklucHV0KGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzW3NpZ25lck5hbWVdKSwgc2tpcE5vbldpdG5lc3NVdHhvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2lnblBzYnQocHNidCwgKCkgPT4gcHNidC5zaWduSW5wdXRIRChpbnB1dEluZGV4LCByb290V2FsbGV0S2V5c1tzaWduZXJOYW1lXSksIHNraXBOb25XaXRuZXNzVXR4byk7XG4gICAgfVxuICB9XG4gIGlmIChzaWduID09PSAnZnVsbHNpZ25lZCcgJiYgY29zaWduZXJOYW1lICYmIGlucHV0LnNjcmlwdFR5cGUgIT09ICdwMnNoUDJwaycpIHtcbiAgICBzaWduUHNidChcbiAgICAgIHBzYnQsXG4gICAgICAoKSA9PiBwc2J0LnNpZ25JbnB1dEhEKGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzW2Nvc2lnbmVyTmFtZV0sIHsgZGV0ZXJtaW5pc3RpYyB9KSxcbiAgICAgIHNraXBOb25XaXRuZXNzVXR4b1xuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBzaWducyB3aXRoIGZpcnN0IG9yIHNlY29uZCBzaWduYXR1cmUgZm9yIGFsbCBpbnB1dHMuXG4gKiBwMnNoUDJwayBpcyBzaWduZWQgb25seSB3aXRoIGZpcnN0IHNpZ24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduQWxsUHNidElucHV0cyhcbiAgcHNidDogVXR4b1BzYnQsXG4gIGlucHV0czogSW5wdXRbXSxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBzaWduOiAnaGFsZnNpZ25lZCcgfCAnZnVsbHNpZ25lZCcsXG4gIHBhcmFtcz86IHtcbiAgICBzaWduZXJzPzogeyBzaWduZXJOYW1lOiBLZXlOYW1lOyBjb3NpZ25lck5hbWU/OiBLZXlOYW1lIH07XG4gICAgZGV0ZXJtaW5pc3RpYz86IGJvb2xlYW47XG4gICAgc2tpcE5vbldpdG5lc3NVdHhvPzogYm9vbGVhbjtcbiAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IHsgc2lnbmVycywgZGV0ZXJtaW5pc3RpYywgc2tpcE5vbldpdG5lc3NVdHhvIH0gPSBwYXJhbXMgPz8ge307XG4gIGlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5wdXRJbmRleCkgPT4ge1xuICAgIHNpZ25Qc2J0SW5wdXQocHNidCwgaW5wdXQsIGlucHV0SW5kZXgsIHJvb3RXYWxsZXRLZXlzLCBzaWduLCB7IHNpZ25lcnMsIGRldGVybWluaXN0aWMsIHNraXBOb25XaXRuZXNzVXR4byB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogY29uc3RydWN0IHBzYnQgZm9yIGdpdmVuIGlucHV0cywgb3V0cHV0cywgbmV0d29yayBhbmQgcm9vdCB3YWxsZXQga2V5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdFBzYnQoXG4gIGlucHV0czogSW5wdXRbXSxcbiAgb3V0cHV0czogT3V0cHV0W10sXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbjogJ3Vuc2lnbmVkJyB8ICdoYWxmc2lnbmVkJyB8ICdmdWxsc2lnbmVkJyxcbiAgcGFyYW1zPzoge1xuICAgIHNpZ25lcnM/OiB7IHNpZ25lck5hbWU6IEtleU5hbWU7IGNvc2lnbmVyTmFtZT86IEtleU5hbWUgfTtcbiAgICBkZXRlcm1pbmlzdGljPzogYm9vbGVhbjtcbiAgICBza2lwTm9uV2l0bmVzc1V0eG8/OiBib29sZWFuO1xuICB9XG4pOiBVdHhvUHNidCB7XG4gIGNvbnN0IHsgc2lnbmVycywgZGV0ZXJtaW5pc3RpYywgc2tpcE5vbldpdG5lc3NVdHhvIH0gPSBwYXJhbXMgPz8ge307XG4gIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSBpbnB1dHMucmVkdWNlKChzdW0sIGlucHV0KSA9PiBzdW0gKyBpbnB1dC52YWx1ZSwgQmlnSW50KDApKTtcbiAgY29uc3Qgb3V0cHV0SW5wdXRBbW91bnQgPSBvdXRwdXRzLnJlZHVjZSgoc3VtLCBvdXRwdXQpID0+IHN1bSArIG91dHB1dC52YWx1ZSwgQmlnSW50KDApKTtcbiAgYXNzZXJ0KHRvdGFsSW5wdXRBbW91bnQgPj0gb3V0cHV0SW5wdXRBbW91bnQsICd0b3RhbCBvdXRwdXQgY2FuIG5vdCBleGNlZWQgdG90YWwgaW5wdXQnKTtcbiAgYXNzZXJ0KFxuICAgICFvdXRwdXRzLnNvbWUoKG8pID0+IChvLnNjcmlwdFR5cGUgJiYgby5hZGRyZXNzKSB8fCAoIW8uc2NyaXB0VHlwZSAmJiAhby5hZGRyZXNzKSksXG4gICAgJ29ubHkgZWl0aGVyIG91dHB1dCBzY3JpcHQgdHlwZSBvciBhZGRyZXNzIHNob3VsZCBiZSBwcm92aWRlZCdcbiAgKTtcblxuICBjb25zdCBwc2J0ID0gY3JlYXRlUHNidEZvck5ldHdvcmsoeyBuZXR3b3JrIH0pO1xuICBjb25zdCB1bnNwZW50cyA9IGlucHV0cy5tYXAoKGlucHV0LCBpKSA9PiB0b1Vuc3BlbnQoaW5wdXQsIGksIG5ldHdvcmssIHJvb3RXYWxsZXRLZXlzKSk7XG5cbiAgdW5zcGVudHMuZm9yRWFjaCgodSwgaSkgPT4ge1xuICAgIGNvbnN0IHsgc2lnbmVyTmFtZSwgY29zaWduZXJOYW1lIH0gPSBzaWduZXJzID8gc2lnbmVycyA6IGdldFNpZ25lcnMoaW5wdXRzW2ldLnNjcmlwdFR5cGUpO1xuICAgIGlmIChpc1dhbGxldFVuc3BlbnQodSkgJiYgY29zaWduZXJOYW1lKSB7XG4gICAgICBhZGRXYWxsZXRVbnNwZW50VG9Qc2J0KHBzYnQsIHUsIHJvb3RXYWxsZXRLZXlzLCBzaWduZXJOYW1lLCBjb3NpZ25lck5hbWUsIHsgc2tpcE5vbldpdG5lc3NVdHhvIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IHJlZGVlbVNjcmlwdCB9ID0gY3JlYXRlT3V0cHV0U2NyaXB0UDJzaFAycGsocm9vdFdhbGxldEtleXNbc2lnbmVyTmFtZV0ucHVibGljS2V5KTtcbiAgICAgIGFzc2VydChyZWRlZW1TY3JpcHQpO1xuICAgICAgYWRkUmVwbGF5UHJvdGVjdGlvblVuc3BlbnRUb1BzYnQocHNidCwgdSwgcmVkZWVtU2NyaXB0LCB7IHNraXBOb25XaXRuZXNzVXR4byB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIG91dHB1dHMuZm9yRWFjaCgob3V0cHV0LCBpKSA9PiB7XG4gICAgaWYgKG91dHB1dC5zY3JpcHRUeXBlKSB7XG4gICAgICBhZGRXYWxsZXRPdXRwdXRUb1BzYnQoXG4gICAgICAgIHBzYnQsXG4gICAgICAgIHJvb3RXYWxsZXRLZXlzLFxuICAgICAgICBvdXRwdXQuaXNJbnRlcm5hbEFkZHJlc3MgPyBnZXRJbnRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSkgOiBnZXRFeHRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSksXG4gICAgICAgIGksXG4gICAgICAgIG91dHB1dC52YWx1ZVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG91dHB1dC5hZGRyZXNzKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIHZhbHVlIH0gPSBvdXRwdXQ7XG4gICAgICBwc2J0LmFkZE91dHB1dCh7IHNjcmlwdDogdG9PdXRwdXRTY3JpcHQoYWRkcmVzcywgbmV0d29yayksIHZhbHVlIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHNpZ24gPT09ICd1bnNpZ25lZCcpIHtcbiAgICByZXR1cm4gcHNidDtcbiAgfVxuXG4gIHBzYnQuc2V0QWxsSW5wdXRzTXVzaWcyTm9uY2VIRChyb290V2FsbGV0S2V5c1sndXNlciddKTtcbiAgcHNidC5zZXRBbGxJbnB1dHNNdXNpZzJOb25jZUhEKHJvb3RXYWxsZXRLZXlzWydiaXRnbyddLCB7IGRldGVybWluaXN0aWMgfSk7XG5cbiAgc2lnbkFsbFBzYnRJbnB1dHMocHNidCwgaW5wdXRzLCByb290V2FsbGV0S2V5cywgJ2hhbGZzaWduZWQnLCB7IHNpZ25lcnMsIHNraXBOb25XaXRuZXNzVXR4byB9KTtcblxuICBpZiAoc2lnbiA9PT0gJ2Z1bGxzaWduZWQnKSB7XG4gICAgc2lnbkFsbFBzYnRJbnB1dHMocHNidCwgaW5wdXRzLCByb290V2FsbGV0S2V5cywgc2lnbiwgeyBzaWduZXJzLCBkZXRlcm1pbmlzdGljLCBza2lwTm9uV2l0bmVzc1V0eG8gfSk7XG4gIH1cblxuICByZXR1cm4gcHNidDtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyBzaWduYXR1cmVzIG9mIGZ1bGx5IHNpZ25lZCB0eCAod2l0aCB0YXByb290IGtleSBwYXRoIHN1cHBvcnQpLlxuICogTk9URTogdGFwcm9vdCBrZXkgcGF0aCB0eCBjYW4gb25seSBiZSBidWlsdCBhbmQgc2lnbmVkIHdpdGggUFNCVC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeUZ1bGx5U2lnbmVkU2lnbmF0dXJlcyhcbiAgdHg6IFV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+LFxuICB1bnNwZW50czogVW5zcGVudDxiaWdpbnQ+W10sXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBzaWduZXI6IEtleU5hbWUsXG4gIGNvc2lnbmVyOiBLZXlOYW1lXG4pOiBib29sZWFuIHtcbiAgY29uc3QgcHJldk91dHB1dHMgPSB1bnNwZW50cy5tYXAoKHUpID0+IHRvT3V0cHV0KHUsIHR4Lm5ldHdvcmspKTtcbiAgcmV0dXJuIHVuc3BlbnRzLmV2ZXJ5KCh1LCBpbmRleCkgPT4ge1xuICAgIGlmIChwYXJzZVNpZ25hdHVyZVNjcmlwdDJPZjModHguaW5zW2luZGV4XSkuc2NyaXB0VHlwZSA9PT0gJ3RhcHJvb3RLZXlQYXRoU3BlbmQnKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRTaWduYXR1cmVWZXJpZmljYXRpb25zKHR4LCBpbmRleCwgdS52YWx1ZSwgdW5kZWZpbmVkLCBwcmV2T3V0cHV0cyk7XG4gICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMSAmJiByZXN1bHRbMF0uc2lnbmF0dXJlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB2ZXJpZnlTaWduYXR1cmVXaXRoVW5zcGVudCh0eCwgaW5kZXgsIHVuc3BlbnRzLCB3YWxsZXRLZXlzKTtcbiAgICAgIGlmICgoc2lnbmVyID09PSAndXNlcicgJiYgY29zaWduZXIgPT09ICdiaXRnbycpIHx8IChzaWduZXIgPT09ICdiaXRnbycgJiYgY29zaWduZXIgPT09ICd1c2VyJykpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFswXSAmJiAhcmVzdWx0WzFdICYmIHJlc3VsdFsyXTtcbiAgICAgIH0gZWxzZSBpZiAoKHNpZ25lciA9PT0gJ3VzZXInICYmIGNvc2lnbmVyID09PSAnYmFja3VwJykgfHwgKHNpZ25lciA9PT0gJ2JhY2t1cCcgJiYgY29zaWduZXIgPT09ICd1c2VyJykpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFswXSAmJiByZXN1bHRbMV0gJiYgIXJlc3VsdFsyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAhcmVzdWx0WzBdICYmIHJlc3VsdFsxXSAmJiByZXN1bHRbMl07XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -5,7 +5,7 @@ import { Network } from '../networks';
|
|
|
5
5
|
* input script type and value.
|
|
6
6
|
*/
|
|
7
7
|
export declare type TxnInputScriptType = Exclude<ScriptType, 'p2trMusig2'>;
|
|
8
|
-
export declare type TxnOutputScriptType =
|
|
8
|
+
export declare type TxnOutputScriptType = ScriptType2Of3;
|
|
9
9
|
/**
|
|
10
10
|
* output script type and value
|
|
11
11
|
*/
|
|
@@ -30,7 +30,7 @@ export declare const txnInputScriptTypes: readonly ["p2sh", "p2shP2wsh", "p2wsh"
|
|
|
30
30
|
/**
|
|
31
31
|
* array of supported output script types.
|
|
32
32
|
*/
|
|
33
|
-
export declare const txnOutputScriptTypes: readonly ["p2sh", "p2shP2wsh", "p2wsh", "p2tr"];
|
|
33
|
+
export declare const txnOutputScriptTypes: readonly ["p2sh", "p2shP2wsh", "p2wsh", "p2tr", "p2trMusig2"];
|
|
34
34
|
/**
|
|
35
35
|
* create unspent object from input script type, index, network and root wallet key.
|
|
36
36
|
*/
|
|
@@ -48,14 +48,23 @@ export declare function getTxnSigners(inputType: TxnInputScriptType): {
|
|
|
48
48
|
* signs with first or second signature for single input.
|
|
49
49
|
* p2shP2pk is signed only with first sign.
|
|
50
50
|
*/
|
|
51
|
-
export declare function signTxnInput<TNumber extends number | bigint>(txb: UtxoTransactionBuilder<TNumber>, input: TxnInput<TNumber>, inputIndex: number, rootWalletKeys: RootWalletKeys, sign: 'halfsigned' | 'fullsigned'
|
|
51
|
+
export declare function signTxnInput<TNumber extends number | bigint>(txb: UtxoTransactionBuilder<TNumber>, input: TxnInput<TNumber>, inputIndex: number, rootWalletKeys: RootWalletKeys, sign: 'halfsigned' | 'fullsigned', signers?: {
|
|
52
|
+
signerName: KeyName;
|
|
53
|
+
cosignerName?: KeyName;
|
|
54
|
+
}): void;
|
|
52
55
|
/**
|
|
53
56
|
* signs with first or second signature for all inputs.
|
|
54
57
|
* p2shP2pk is signed only with first sign.
|
|
55
58
|
*/
|
|
56
|
-
export declare function signAllTxnInputs<TNumber extends number | bigint>(txb: UtxoTransactionBuilder<TNumber>, inputs: TxnInput<TNumber>[], rootWalletKeys: RootWalletKeys, sign: 'halfsigned' | 'fullsigned'
|
|
59
|
+
export declare function signAllTxnInputs<TNumber extends number | bigint>(txb: UtxoTransactionBuilder<TNumber>, inputs: TxnInput<TNumber>[], rootWalletKeys: RootWalletKeys, sign: 'halfsigned' | 'fullsigned', signers?: {
|
|
60
|
+
signerName: KeyName;
|
|
61
|
+
cosignerName?: KeyName;
|
|
62
|
+
}): void;
|
|
57
63
|
/**
|
|
58
64
|
* construct transaction for given inputs, outputs, network and root wallet keys.
|
|
59
65
|
*/
|
|
60
|
-
export declare function constructTxnBuilder<TNumber extends number | bigint>(inputs: TxnInput<TNumber>[], outputs: TxnOutput<TNumber>[], network: Network, rootWalletKeys: RootWalletKeys, sign: 'unsigned' | 'halfsigned' | 'fullsigned'
|
|
66
|
+
export declare function constructTxnBuilder<TNumber extends number | bigint>(inputs: TxnInput<TNumber>[], outputs: TxnOutput<TNumber>[], network: Network, rootWalletKeys: RootWalletKeys, sign: 'unsigned' | 'halfsigned' | 'fullsigned', signers?: {
|
|
67
|
+
signerName: KeyName;
|
|
68
|
+
cosignerName?: KeyName;
|
|
69
|
+
}): UtxoTransactionBuilder<TNumber>;
|
|
61
70
|
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/testutil/transaction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/testutil/transaction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAuC,MAAM,wBAAwB,CAAC;AACzG,OAAO,EAGL,OAAO,EAEP,cAAc,EACd,OAAO,EACP,sBAAsB,EAOvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;GAEG;AACH,oBAAY,kBAAkB,GAAG,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACnE,oBAAY,mBAAmB,GAAG,cAAc,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACvD,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,6DAAsE,CAAC;AAEvG;;GAEG;AACH,eAAO,MAAM,oBAAoB,+DAAkB,CAAC;AAEpD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,OAAO,CAAC,CAWlB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,kBAAkB,GAAG;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAK5G;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC1D,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACpC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EACxB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,YAAY,GAAG,YAAY,EACjC,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD,IAAI,CAuBN;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC9D,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACpC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAC3B,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,YAAY,GAAG,YAAY,EACjC,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACjE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EAC3B,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EAC7B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,YAAY,EAC9C,OAAO,CAAC,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD,sBAAsB,CAAC,OAAO,CAAC,CA2CjC"}
|
|
@@ -12,17 +12,17 @@ exports.txnInputScriptTypes = ['p2sh', 'p2shP2wsh', 'p2wsh', 'p2tr', outputScrip
|
|
|
12
12
|
/**
|
|
13
13
|
* array of supported output script types.
|
|
14
14
|
*/
|
|
15
|
-
exports.txnOutputScriptTypes =
|
|
15
|
+
exports.txnOutputScriptTypes = outputScripts_1.scriptTypes2Of3;
|
|
16
16
|
/**
|
|
17
17
|
* create unspent object from input script type, index, network and root wallet key.
|
|
18
18
|
*/
|
|
19
19
|
function toTxnUnspent(input, index, network, rootWalletKeys) {
|
|
20
20
|
if (input.scriptType === 'p2shP2pk') {
|
|
21
|
-
return mock_1.mockReplayProtectionUnspent(network, input.value, { key: rootWalletKeys['user'], vout: index });
|
|
21
|
+
return (0, mock_1.mockReplayProtectionUnspent)(network, input.value, { key: rootWalletKeys['user'], vout: index });
|
|
22
22
|
}
|
|
23
23
|
else {
|
|
24
|
-
return mock_1.mockWalletUnspent(network, input.value, {
|
|
25
|
-
chain: bitgo_1.getInternalChainCode(input.scriptType),
|
|
24
|
+
return (0, mock_1.mockWalletUnspent)(network, input.value, {
|
|
25
|
+
chain: (0, bitgo_1.getInternalChainCode)(input.scriptType),
|
|
26
26
|
vout: index,
|
|
27
27
|
keys: rootWalletKeys,
|
|
28
28
|
index,
|
|
@@ -46,19 +46,19 @@ exports.getTxnSigners = getTxnSigners;
|
|
|
46
46
|
* signs with first or second signature for single input.
|
|
47
47
|
* p2shP2pk is signed only with first sign.
|
|
48
48
|
*/
|
|
49
|
-
function signTxnInput(txb, input, inputIndex, rootWalletKeys, sign) {
|
|
50
|
-
const { signerName, cosignerName } = getTxnSigners(input.scriptType);
|
|
49
|
+
function signTxnInput(txb, input, inputIndex, rootWalletKeys, sign, signers) {
|
|
50
|
+
const { signerName, cosignerName } = signers ? signers : getTxnSigners(input.scriptType);
|
|
51
51
|
const unspent = toTxnUnspent(input, inputIndex, txb.network, rootWalletKeys);
|
|
52
52
|
if (sign === 'halfsigned') {
|
|
53
53
|
if (input.scriptType === 'p2shP2pk') {
|
|
54
|
-
bitgo_1.signInputP2shP2pk(txb, inputIndex, rootWalletKeys[signerName]);
|
|
54
|
+
(0, bitgo_1.signInputP2shP2pk)(txb, inputIndex, rootWalletKeys[signerName]);
|
|
55
55
|
}
|
|
56
|
-
else if (bitgo_1.isWalletUnspent(unspent) && cosignerName) {
|
|
57
|
-
bitgo_1.signInputWithUnspent(txb, inputIndex, unspent, bitgo_1.WalletUnspentSigner.from(rootWalletKeys, rootWalletKeys[signerName], rootWalletKeys[cosignerName]));
|
|
56
|
+
else if ((0, bitgo_1.isWalletUnspent)(unspent) && cosignerName) {
|
|
57
|
+
(0, bitgo_1.signInputWithUnspent)(txb, inputIndex, unspent, bitgo_1.WalletUnspentSigner.from(rootWalletKeys, rootWalletKeys[signerName], rootWalletKeys[cosignerName]));
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
if (bitgo_1.isWalletUnspent(unspent) && sign === 'fullsigned' && cosignerName) {
|
|
61
|
-
bitgo_1.signInputWithUnspent(txb, inputIndex, unspent, bitgo_1.WalletUnspentSigner.from(rootWalletKeys, rootWalletKeys[cosignerName], rootWalletKeys[signerName]));
|
|
60
|
+
if ((0, bitgo_1.isWalletUnspent)(unspent) && sign === 'fullsigned' && cosignerName) {
|
|
61
|
+
(0, bitgo_1.signInputWithUnspent)(txb, inputIndex, unspent, bitgo_1.WalletUnspentSigner.from(rootWalletKeys, rootWalletKeys[cosignerName], rootWalletKeys[signerName]));
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
exports.signTxnInput = signTxnInput;
|
|
@@ -66,28 +66,28 @@ exports.signTxnInput = signTxnInput;
|
|
|
66
66
|
* signs with first or second signature for all inputs.
|
|
67
67
|
* p2shP2pk is signed only with first sign.
|
|
68
68
|
*/
|
|
69
|
-
function signAllTxnInputs(txb, inputs, rootWalletKeys, sign) {
|
|
69
|
+
function signAllTxnInputs(txb, inputs, rootWalletKeys, sign, signers) {
|
|
70
70
|
inputs.forEach((input, index) => {
|
|
71
|
-
signTxnInput(txb, input, index, rootWalletKeys, sign);
|
|
71
|
+
signTxnInput(txb, input, index, rootWalletKeys, sign, signers);
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
74
|
exports.signAllTxnInputs = signAllTxnInputs;
|
|
75
75
|
/**
|
|
76
76
|
* construct transaction for given inputs, outputs, network and root wallet keys.
|
|
77
77
|
*/
|
|
78
|
-
function constructTxnBuilder(inputs, outputs, network, rootWalletKeys, sign) {
|
|
78
|
+
function constructTxnBuilder(inputs, outputs, network, rootWalletKeys, sign, signers) {
|
|
79
79
|
const totalInputAmount = inputs.reduce((sum, input) => sum + BigInt(input.value), BigInt(0));
|
|
80
80
|
const outputInputAmount = outputs.reduce((sum, output) => sum + BigInt(output.value), BigInt(0));
|
|
81
81
|
assert(totalInputAmount >= outputInputAmount, 'total output can not exceed total input');
|
|
82
82
|
assert(!outputs.some((o) => (o.scriptType && o.address) || (!o.scriptType && !o.address)), 'only either output script type or address should be provided');
|
|
83
|
-
const txb = bitgo_1.createTransactionBuilderForNetwork(network);
|
|
83
|
+
const txb = (0, bitgo_1.createTransactionBuilderForNetwork)(network);
|
|
84
84
|
const unspents = inputs.map((input, i) => toTxnUnspent(input, i, network, rootWalletKeys));
|
|
85
85
|
unspents.forEach((u, i) => {
|
|
86
|
-
bitgo_1.addToTransactionBuilder(txb, u);
|
|
86
|
+
(0, bitgo_1.addToTransactionBuilder)(txb, u);
|
|
87
87
|
});
|
|
88
88
|
outputs.forEach((output, i) => {
|
|
89
89
|
const address = output.scriptType
|
|
90
|
-
? bitgo_1.getWalletAddress(rootWalletKeys, output.isInternalAddress ? bitgo_1.getInternalChainCode(output.scriptType) : bitgo_1.getExternalChainCode(output.scriptType), i, network)
|
|
90
|
+
? (0, bitgo_1.getWalletAddress)(rootWalletKeys, output.isInternalAddress ? (0, bitgo_1.getInternalChainCode)(output.scriptType) : (0, bitgo_1.getExternalChainCode)(output.scriptType), i, network)
|
|
91
91
|
: output.address;
|
|
92
92
|
if (!address) {
|
|
93
93
|
throw new Error('address is missing');
|
|
@@ -97,11 +97,11 @@ function constructTxnBuilder(inputs, outputs, network, rootWalletKeys, sign) {
|
|
|
97
97
|
if (sign === 'unsigned') {
|
|
98
98
|
return txb;
|
|
99
99
|
}
|
|
100
|
-
signAllTxnInputs(txb, inputs, rootWalletKeys, 'halfsigned');
|
|
100
|
+
signAllTxnInputs(txb, inputs, rootWalletKeys, 'halfsigned', signers);
|
|
101
101
|
if (sign === 'fullsigned') {
|
|
102
|
-
signAllTxnInputs(txb, inputs, rootWalletKeys, sign);
|
|
102
|
+
signAllTxnInputs(txb, inputs, rootWalletKeys, sign, signers);
|
|
103
103
|
}
|
|
104
104
|
return txb;
|
|
105
105
|
}
|
|
106
106
|
exports.constructTxnBuilder = constructTxnBuilder;
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdHV0aWwvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWlDO0FBRWpDLDBEQUF3RjtBQUN4RixvQ0Fja0I7QUFFbEIsaUNBQXdFO0FBMkJ4RTs7R0FFRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsa0NBQWtCLENBQVUsQ0FBQztBQUV2Rzs7R0FFRztBQUNVLFFBQUEsb0JBQW9CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQVUsQ0FBQztBQUVwRjs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsS0FBd0IsRUFDeEIsS0FBYSxFQUNiLE9BQWdCLEVBQ2hCLGNBQThCO0lBRTlCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDbkMsT0FBTyxrQ0FBMkIsQ0FBVSxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDakg7U0FBTTtRQUNMLE9BQU8sd0JBQWlCLENBQVUsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDdEQsS0FBSyxFQUFFLDRCQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDN0MsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJLEVBQUUsY0FBYztZQUNwQixLQUFLO1NBQ04sQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO0FBaEJELG9DQWdCQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsU0FBNkI7SUFDekQsT0FBTztRQUNMLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFlBQVksRUFBRSxTQUFTLEtB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SSxLQUFLLFlBQVksRUFBRTtRQUN6QixnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNyRDtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQWpERCxrREFpREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgU2NyaXB0VHlwZSwgU2NyaXB0VHlwZTJPZjMsIHNjcmlwdFR5cGVQMnNoUDJwayB9IGZyb20gJy4uL2JpdGdvL291dHB1dFNjcmlwdHMnO1xuaW1wb3J0IHtcbiAgZ2V0RXh0ZXJuYWxDaGFpbkNvZGUsXG4gIGlzV2FsbGV0VW5zcGVudCxcbiAgS2V5TmFtZSxcbiAgZ2V0SW50ZXJuYWxDaGFpbkNvZGUsXG4gIFJvb3RXYWxsZXRLZXlzLFxuICBVbnNwZW50LFxuICBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBjcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGb3JOZXR3b3JrLFxuICBhZGRUb1RyYW5zYWN0aW9uQnVpbGRlcixcbiAgZ2V0V2FsbGV0QWRkcmVzcyxcbiAgc2lnbklucHV0UDJzaFAycGssXG4gIHNpZ25JbnB1dFdpdGhVbnNwZW50LFxuICBXYWxsZXRVbnNwZW50U2lnbmVyLFxufSBmcm9tICcuLi9iaXRnbyc7XG5pbXBvcnQgeyBOZXR3b3JrIH0gZnJvbSAnLi4vbmV0d29ya3MnO1xuaW1wb3J0IHsgbW9ja1JlcGxheVByb3RlY3Rpb25VbnNwZW50LCBtb2NrV2FsbGV0VW5zcGVudCB9IGZyb20gJy4vbW9jayc7XG5cbi8qKlxuICogaW5wdXQgc2NyaXB0IHR5cGUgYW5kIHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBUeG5JbnB1dFNjcmlwdFR5cGUgPSBFeGNsdWRlPFNjcmlwdFR5cGUsICdwMnRyTXVzaWcyJz47XG5leHBvcnQgdHlwZSBUeG5PdXRwdXRTY3JpcHRUeXBlID0gRXhjbHVkZTxTY3JpcHRUeXBlMk9mMywgJ3AydHJNdXNpZzInPjtcblxuLyoqXG4gKiBvdXRwdXQgc2NyaXB0IHR5cGUgYW5kIHZhbHVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHhuSW5wdXQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4ge1xuICBzY3JpcHRUeXBlOiBUeG5JbnB1dFNjcmlwdFR5cGU7XG4gIHZhbHVlOiBUTnVtYmVyO1xufVxuXG4vKipcbiAqIHNob3VsZCBzZXQgZWl0aGVyIGFkZHJlc3Mgb3Igc2NyaXB0VHlwZSwgbmV2ZXIgYm90aC5cbiAqIHNldCBpc0ludGVybmFsQWRkcmVzcz10cnVlIGZvciBpbnRlcm5hbCBvdXRwdXQgYWRkcmVzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFR4bk91dHB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PiB7XG4gIGFkZHJlc3M/OiBzdHJpbmc7XG4gIHNjcmlwdFR5cGU/OiBUeG5PdXRwdXRTY3JpcHRUeXBlO1xuICB2YWx1ZTogVE51bWJlcjtcbiAgaXNJbnRlcm5hbEFkZHJlc3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGFycmF5IG9mIHN1cHBvcnRlZCBpbnB1dCBzY3JpcHQgdHlwZXMuXG4gKi9cbmV4cG9ydCBjb25zdCB0eG5JbnB1dFNjcmlwdFR5cGVzID0gWydwMnNoJywgJ3Ayc2hQMndzaCcsICdwMndzaCcsICdwMnRyJywgc2NyaXB0VHlwZVAyc2hQMnBrXSBhcyBjb25zdDtcblxuLyoqXG4gKiBhcnJheSBvZiBzdXBwb3J0ZWQgb3V0cHV0IHNjcmlwdCB0eXBlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHR4bk91dHB1dFNjcmlwdFR5cGVzID0gWydwMnNoJywgJ3Ayc2hQMndzaCcsICdwMndzaCcsICdwMnRyJ10gYXMgY29uc3Q7XG5cbi8qKlxuICogY3JlYXRlIHVuc3BlbnQgb2JqZWN0IGZyb20gaW5wdXQgc2NyaXB0IHR5cGUsIGluZGV4LCBuZXR3b3JrIGFuZCByb290IHdhbGxldCBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1R4blVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGlucHV0OiBUeG5JbnB1dDxUTnVtYmVyPixcbiAgaW5kZXg6IG51bWJlcixcbiAgbmV0d29yazogTmV0d29yayxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzXG4pOiBVbnNwZW50PFROdW1iZXI+IHtcbiAgaWYgKGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICByZXR1cm4gbW9ja1JlcGxheVByb3RlY3Rpb25VbnNwZW50PFROdW1iZXI+KG5ldHdvcmssIGlucHV0LnZhbHVlLCB7IGtleTogcm9vdFdhbGxldEtleXNbJ3VzZXInXSwgdm91dDogaW5kZXggfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1vY2tXYWxsZXRVbnNwZW50PFROdW1iZXI+KG5ldHdvcmssIGlucHV0LnZhbHVlLCB7XG4gICAgICBjaGFpbjogZ2V0SW50ZXJuYWxDaGFpbkNvZGUoaW5wdXQuc2NyaXB0VHlwZSksXG4gICAgICB2b3V0OiBpbmRleCxcbiAgICAgIGtleXM6IHJvb3RXYWxsZXRLZXlzLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiByZXR1cm5zIHNpZ25lciBhbmQgY29zaWduZXIgbmFtZXMgZm9yIFR4bklucHV0U2NyaXB0VHlwZS5cbiAqIHVzZXIgYW5kIHVuZGVmaW5lZCBhcyBzaWduZXIgYW5kIGNvc2lnbmVyIHJlc3BlY3RpdmVseSBmb3IgcDJzaFAycGsuXG4gKiB1c2VyIGFuZCBiaXRnbyBhcyBzaWduZXIgYW5kIGNvc2lnbmVyIHJlc3BlY3RpdmVseSBmb3Igb3RoZXIgaW5wdXQgc2NyaXB0IHR5cGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHhuU2lnbmVycyhpbnB1dFR5cGU6IFR4bklucHV0U2NyaXB0VHlwZSk6IHsgc2lnbmVyTmFtZTogS2V5TmFtZTsgY29zaWduZXJOYW1lPzogS2V5TmFtZSB9IHtcbiAgcmV0dXJuIHtcbiAgICBzaWduZXJOYW1lOiAndXNlcicsXG4gICAgY29zaWduZXJOYW1lOiBpbnB1dFR5cGUgPT09ICdwMnNoUDJwaycgPyB1bmRlZmluZWQgOiAnYml0Z28nLFxuICB9O1xufVxuXG4vKipcbiAqIHNpZ25zIHdpdGggZmlyc3Qgb3Igc2Vjb25kIHNpZ25hdHVyZSBmb3Igc2luZ2xlIGlucHV0LlxuICogcDJzaFAycGsgaXMgc2lnbmVkIG9ubHkgd2l0aCBmaXJzdCBzaWduLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lnblR4bklucHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eGI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIGlucHV0OiBUeG5JbnB1dDxUTnVtYmVyPixcbiAgaW5wdXRJbmRleDogbnVtYmVyLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ246ICdoYWxmc2lnbmVkJyB8ICdmdWxsc2lnbmVkJ1xuKTogdm9pZCB7XG4gIGNvbnN0IHsgc2lnbmVyTmFtZSwgY29zaWduZXJOYW1lIH0gPSBnZXRUeG5TaWduZXJzKGlucHV0LnNjcmlwdFR5cGUpO1xuICBjb25zdCB1bnNwZW50ID0gdG9UeG5VbnNwZW50KGlucHV0LCBpbnB1dEluZGV4LCB0eGIubmV0d29yaywgcm9vdFdhbGxldEtleXMpO1xuICBpZiAoc2lnbiA9PT0gJ2hhbGZzaWduZWQnKSB7XG4gICAgaWYgKGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnNoUDJwaycpIHtcbiAgICAgIHNpZ25JbnB1dFAyc2hQMnBrKHR4YiwgaW5wdXRJbmRleCwgcm9vdFdhbGxldEtleXNbc2lnbmVyTmFtZV0pO1xuICAgIH0gZWxzZSBpZiAoaXNXYWxsZXRVbnNwZW50KHVuc3BlbnQpICYmIGNvc2lnbmVyTmFtZSkge1xuICAgICAgc2lnbklucHV0V2l0aFVuc3BlbnQoXG4gICAgICAgIHR4YixcbiAgICAgICAgaW5wdXRJbmRleCxcbiAgICAgICAgdW5zcGVudCxcbiAgICAgICAgV2FsbGV0VW5zcGVudFNpZ25lci5mcm9tKHJvb3RXYWxsZXRLZXlzLCByb290V2FsbGV0S2V5c1tzaWduZXJOYW1lXSwgcm9vdFdhbGxldEtleXNbY29zaWduZXJOYW1lXSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChpc1dhbGxldFVuc3BlbnQodW5zcGVudCkgJiYgc2lnbiA9PT0gJ2Z1bGxzaWduZWQnICYmIGNvc2lnbmVyTmFtZSkge1xuICAgIHNpZ25JbnB1dFdpdGhVbnNwZW50KFxuICAgICAgdHhiLFxuICAgICAgaW5wdXRJbmRleCxcbiAgICAgIHVuc3BlbnQsXG4gICAgICBXYWxsZXRVbnNwZW50U2lnbmVyLmZyb20ocm9vdFdhbGxldEtleXMsIHJvb3RXYWxsZXRLZXlzW2Nvc2lnbmVyTmFtZV0sIHJvb3RXYWxsZXRLZXlzW3NpZ25lck5hbWVdKVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBzaWducyB3aXRoIGZpcnN0IG9yIHNlY29uZCBzaWduYXR1cmUgZm9yIGFsbCBpbnB1dHMuXG4gKiBwMnNoUDJwayBpcyBzaWduZWQgb25seSB3aXRoIGZpcnN0IHNpZ24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduQWxsVHhuSW5wdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eGI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIGlucHV0czogVHhuSW5wdXQ8VE51bWJlcj5bXSxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBzaWduOiAnaGFsZnNpZ25lZCcgfCAnZnVsbHNpZ25lZCdcbik6IHZvaWQge1xuICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgc2lnblR4bklucHV0KHR4YiwgaW5wdXQsIGluZGV4LCByb290V2FsbGV0S2V5cywgc2lnbik7XG4gIH0pO1xufVxuXG4vKipcbiAqIGNvbnN0cnVjdCB0cmFuc2FjdGlvbiBmb3IgZ2l2ZW4gaW5wdXRzLCBvdXRwdXRzLCBuZXR3b3JrIGFuZCByb290IHdhbGxldCBrZXlzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0VHhuQnVpbGRlcjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgaW5wdXRzOiBUeG5JbnB1dDxUTnVtYmVyPltdLFxuICBvdXRwdXRzOiBUeG5PdXRwdXQ8VE51bWJlcj5bXSxcbiAgbmV0d29yazogTmV0d29yayxcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBzaWduOiAndW5zaWduZWQnIHwgJ2hhbGZzaWduZWQnIHwgJ2Z1bGxzaWduZWQnXG4pOiBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+IHtcbiAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IGlucHV0cy5yZWR1Y2UoKHN1bSwgaW5wdXQpID0+IHN1bSArIEJpZ0ludChpbnB1dC52YWx1ZSksIEJpZ0ludCgwKSk7XG4gIGNvbnN0IG91dHB1dElucHV0QW1vdW50ID0gb3V0cHV0cy5yZWR1Y2UoKHN1bSwgb3V0cHV0KSA9PiBzdW0gKyBCaWdJbnQob3V0cHV0LnZhbHVlKSwgQmlnSW50KDApKTtcbiAgYXNzZXJ0KHRvdGFsSW5wdXRBbW91bnQgPj0gb3V0cHV0SW5wdXRBbW91bnQsICd0b3RhbCBvdXRwdXQgY2FuIG5vdCBleGNlZWQgdG90YWwgaW5wdXQnKTtcbiAgYXNzZXJ0KFxuICAgICFvdXRwdXRzLnNvbWUoKG8pID0+IChvLnNjcmlwdFR5cGUgJiYgby5hZGRyZXNzKSB8fCAoIW8uc2NyaXB0VHlwZSAmJiAhby5hZGRyZXNzKSksXG4gICAgJ29ubHkgZWl0aGVyIG91dHB1dCBzY3JpcHQgdHlwZSBvciBhZGRyZXNzIHNob3VsZCBiZSBwcm92aWRlZCdcbiAgKTtcblxuICBjb25zdCB0eGIgPSBjcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGb3JOZXR3b3JrPFROdW1iZXI+KG5ldHdvcmspO1xuXG4gIGNvbnN0IHVuc3BlbnRzID0gaW5wdXRzLm1hcCgoaW5wdXQsIGkpID0+IHRvVHhuVW5zcGVudChpbnB1dCwgaSwgbmV0d29yaywgcm9vdFdhbGxldEtleXMpKTtcblxuICB1bnNwZW50cy5mb3JFYWNoKCh1LCBpKSA9PiB7XG4gICAgYWRkVG9UcmFuc2FjdGlvbkJ1aWxkZXIodHhiLCB1KTtcbiAgfSk7XG5cbiAgb3V0cHV0cy5mb3JFYWNoKChvdXRwdXQsIGkpID0+IHtcbiAgICBjb25zdCBhZGRyZXNzID0gb3V0cHV0LnNjcmlwdFR5cGVcbiAgICAgID8gZ2V0V2FsbGV0QWRkcmVzcyhcbiAgICAgICAgICByb290V2FsbGV0S2V5cyxcbiAgICAgICAgICBvdXRwdXQuaXNJbnRlcm5hbEFkZHJlc3MgPyBnZXRJbnRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSkgOiBnZXRFeHRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSksXG4gICAgICAgICAgaSxcbiAgICAgICAgICBuZXR3b3JrXG4gICAgICAgIClcbiAgICAgIDogb3V0cHV0LmFkZHJlc3M7XG4gICAgaWYgKCFhZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZHJlc3MgaXMgbWlzc2luZycpO1xuICAgIH1cbiAgICB0eGIuYWRkT3V0cHV0KGFkZHJlc3MsIG91dHB1dC52YWx1ZSk7XG4gIH0pO1xuXG4gIGlmIChzaWduID09PSAndW5zaWduZWQnKSB7XG4gICAgcmV0dXJuIHR4YjtcbiAgfVxuXG4gIHNpZ25BbGxUeG5JbnB1dHModHhiLCBpbnB1dHMsIHJvb3RXYWxsZXRLZXlzLCAnaGFsZnNpZ25lZCcpO1xuXG4gIGlmIChzaWduID09PSAnZnVsbHNpZ25lZCcpIHtcbiAgICBzaWduQWxsVHhuSW5wdXRzKHR4YiwgaW5wdXRzLCByb290V2FsbGV0S2V5cywgc2lnbik7XG4gIH1cblxuICByZXR1cm4gdHhiO1xufVxuIl19
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdHV0aWwvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWlDO0FBRWpDLDBEQUF5RztBQUN6RyxvQ0Fja0I7QUFFbEIsaUNBQXdFO0FBMkJ4RTs7R0FFRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsa0NBQWtCLENBQVUsQ0FBQztBQUV2Rzs7R0FFRztBQUNVLFFBQUEsb0JBQW9CLEdBQUcsK0JBQWUsQ0FBQztBQUVwRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsS0FBd0IsRUFDeEIsS0FBYSxFQUNiLE9BQWdCLEVBQ2hCLGNBQThCO0lBRTlCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7UUFDbkMsT0FBTyxJQUFBLGtDQUEyQixFQUFVLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNqSDtTQUFNO1FBQ0wsT0FBTyxJQUFBLHdCQUFpQixFQUFVLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ3RELEtBQUssRUFBRSxJQUFBLDRCQUFvQixFQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDN0MsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJLEVBQUUsY0FBYztZQUNwQixLQUFLO1NBQ04sQ0FBQyxDQUFDO0tBQ0o7QUFDSCxDQUFDO0FBaEJELG9DQWdCQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsU0FBNkI7SUFDekQsT0FBTztRQUNMLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLFlBQVksRUFBRSxTQUFTLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxT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VUFBVSxFQUFFO1FBQ3ZCLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFckUsSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFO1FBQ3pCLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztLQUM5RDtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQWxERCxrREFrREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHsgU2NyaXB0VHlwZSwgU2NyaXB0VHlwZTJPZjMsIHNjcmlwdFR5cGVQMnNoUDJwaywgc2NyaXB0VHlwZXMyT2YzIH0gZnJvbSAnLi4vYml0Z28vb3V0cHV0U2NyaXB0cyc7XG5pbXBvcnQge1xuICBnZXRFeHRlcm5hbENoYWluQ29kZSxcbiAgaXNXYWxsZXRVbnNwZW50LFxuICBLZXlOYW1lLFxuICBnZXRJbnRlcm5hbENoYWluQ29kZSxcbiAgUm9vdFdhbGxldEtleXMsXG4gIFVuc3BlbnQsXG4gIFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXIsXG4gIGNyZWF0ZVRyYW5zYWN0aW9uQnVpbGRlckZvck5ldHdvcmssXG4gIGFkZFRvVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBnZXRXYWxsZXRBZGRyZXNzLFxuICBzaWduSW5wdXRQMnNoUDJwayxcbiAgc2lnbklucHV0V2l0aFVuc3BlbnQsXG4gIFdhbGxldFVuc3BlbnRTaWduZXIsXG59IGZyb20gJy4uL2JpdGdvJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBtb2NrUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQsIG1vY2tXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi9tb2NrJztcblxuLyoqXG4gKiBpbnB1dCBzY3JpcHQgdHlwZSBhbmQgdmFsdWUuXG4gKi9cbmV4cG9ydCB0eXBlIFR4bklucHV0U2NyaXB0VHlwZSA9IEV4Y2x1ZGU8U2NyaXB0VHlwZSwgJ3AydHJNdXNpZzInPjtcbmV4cG9ydCB0eXBlIFR4bk91dHB1dFNjcmlwdFR5cGUgPSBTY3JpcHRUeXBlMk9mMztcblxuLyoqXG4gKiBvdXRwdXQgc2NyaXB0IHR5cGUgYW5kIHZhbHVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHhuSW5wdXQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4ge1xuICBzY3JpcHRUeXBlOiBUeG5JbnB1dFNjcmlwdFR5cGU7XG4gIHZhbHVlOiBUTnVtYmVyO1xufVxuXG4vKipcbiAqIHNob3VsZCBzZXQgZWl0aGVyIGFkZHJlc3Mgb3Igc2NyaXB0VHlwZSwgbmV2ZXIgYm90aC5cbiAqIHNldCBpc0ludGVybmFsQWRkcmVzcz10cnVlIGZvciBpbnRlcm5hbCBvdXRwdXQgYWRkcmVzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFR4bk91dHB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PiB7XG4gIGFkZHJlc3M/OiBzdHJpbmc7XG4gIHNjcmlwdFR5cGU/OiBUeG5PdXRwdXRTY3JpcHRUeXBlO1xuICB2YWx1ZTogVE51bWJlcjtcbiAgaXNJbnRlcm5hbEFkZHJlc3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIGFycmF5IG9mIHN1cHBvcnRlZCBpbnB1dCBzY3JpcHQgdHlwZXMuXG4gKi9cbmV4cG9ydCBjb25zdCB0eG5JbnB1dFNjcmlwdFR5cGVzID0gWydwMnNoJywgJ3Ayc2hQMndzaCcsICdwMndzaCcsICdwMnRyJywgc2NyaXB0VHlwZVAyc2hQMnBrXSBhcyBjb25zdDtcblxuLyoqXG4gKiBhcnJheSBvZiBzdXBwb3J0ZWQgb3V0cHV0IHNjcmlwdCB0eXBlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHR4bk91dHB1dFNjcmlwdFR5cGVzID0gc2NyaXB0VHlwZXMyT2YzO1xuXG4vKipcbiAqIGNyZWF0ZSB1bnNwZW50IG9iamVjdCBmcm9tIGlucHV0IHNjcmlwdCB0eXBlLCBpbmRleCwgbmV0d29yayBhbmQgcm9vdCB3YWxsZXQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UeG5VbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICBpbnB1dDogVHhuSW5wdXQ8VE51bWJlcj4sXG4gIGluZGV4OiBudW1iZXIsXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5c1xuKTogVW5zcGVudDxUTnVtYmVyPiB7XG4gIGlmIChpbnB1dC5zY3JpcHRUeXBlID09PSAncDJzaFAycGsnKSB7XG4gICAgcmV0dXJuIG1vY2tSZXBsYXlQcm90ZWN0aW9uVW5zcGVudDxUTnVtYmVyPihuZXR3b3JrLCBpbnB1dC52YWx1ZSwgeyBrZXk6IHJvb3RXYWxsZXRLZXlzWyd1c2VyJ10sIHZvdXQ6IGluZGV4IH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtb2NrV2FsbGV0VW5zcGVudDxUTnVtYmVyPihuZXR3b3JrLCBpbnB1dC52YWx1ZSwge1xuICAgICAgY2hhaW46IGdldEludGVybmFsQ2hhaW5Db2RlKGlucHV0LnNjcmlwdFR5cGUpLFxuICAgICAgdm91dDogaW5kZXgsXG4gICAgICBrZXlzOiByb290V2FsbGV0S2V5cyxcbiAgICAgIGluZGV4LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogcmV0dXJucyBzaWduZXIgYW5kIGNvc2lnbmVyIG5hbWVzIGZvciBUeG5JbnB1dFNjcmlwdFR5cGUuXG4gKiB1c2VyIGFuZCB1bmRlZmluZWQgYXMgc2lnbmVyIGFuZCBjb3NpZ25lciByZXNwZWN0aXZlbHkgZm9yIHAyc2hQMnBrLlxuICogdXNlciBhbmQgYml0Z28gYXMgc2lnbmVyIGFuZCBjb3NpZ25lciByZXNwZWN0aXZlbHkgZm9yIG90aGVyIGlucHV0IHNjcmlwdCB0eXBlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFR4blNpZ25lcnMoaW5wdXRUeXBlOiBUeG5JbnB1dFNjcmlwdFR5cGUpOiB7IHNpZ25lck5hbWU6IEtleU5hbWU7IGNvc2lnbmVyTmFtZT86IEtleU5hbWUgfSB7XG4gIHJldHVybiB7XG4gICAgc2lnbmVyTmFtZTogJ3VzZXInLFxuICAgIGNvc2lnbmVyTmFtZTogaW5wdXRUeXBlID09PSAncDJzaFAycGsnID8gdW5kZWZpbmVkIDogJ2JpdGdvJyxcbiAgfTtcbn1cblxuLyoqXG4gKiBzaWducyB3aXRoIGZpcnN0IG9yIHNlY29uZCBzaWduYXR1cmUgZm9yIHNpbmdsZSBpbnB1dC5cbiAqIHAyc2hQMnBrIGlzIHNpZ25lZCBvbmx5IHdpdGggZmlyc3Qgc2lnbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25UeG5JbnB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHhiOiBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+LFxuICBpbnB1dDogVHhuSW5wdXQ8VE51bWJlcj4sXG4gIGlucHV0SW5kZXg6IG51bWJlcixcbiAgcm9vdFdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBzaWduOiAnaGFsZnNpZ25lZCcgfCAnZnVsbHNpZ25lZCcsXG4gIHNpZ25lcnM/OiB7IHNpZ25lck5hbWU6IEtleU5hbWU7IGNvc2lnbmVyTmFtZT86IEtleU5hbWUgfVxuKTogdm9pZCB7XG4gIGNvbnN0IHsgc2lnbmVyTmFtZSwgY29zaWduZXJOYW1lIH0gPSBzaWduZXJzID8gc2lnbmVycyA6IGdldFR4blNpZ25lcnMoaW5wdXQuc2NyaXB0VHlwZSk7XG4gIGNvbnN0IHVuc3BlbnQgPSB0b1R4blVuc3BlbnQoaW5wdXQsIGlucHV0SW5kZXgsIHR4Yi5uZXR3b3JrLCByb290V2FsbGV0S2V5cyk7XG4gIGlmIChzaWduID09PSAnaGFsZnNpZ25lZCcpIHtcbiAgICBpZiAoaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgc2lnbklucHV0UDJzaFAycGsodHhiLCBpbnB1dEluZGV4LCByb290V2FsbGV0S2V5c1tzaWduZXJOYW1lXSk7XG4gICAgfSBlbHNlIGlmIChpc1dhbGxldFVuc3BlbnQodW5zcGVudCkgJiYgY29zaWduZXJOYW1lKSB7XG4gICAgICBzaWduSW5wdXRXaXRoVW5zcGVudChcbiAgICAgICAgdHhiLFxuICAgICAgICBpbnB1dEluZGV4LFxuICAgICAgICB1bnNwZW50LFxuICAgICAgICBXYWxsZXRVbnNwZW50U2lnbmVyLmZyb20ocm9vdFdhbGxldEtleXMsIHJvb3RXYWxsZXRLZXlzW3NpZ25lck5hbWVdLCByb290V2FsbGV0S2V5c1tjb3NpZ25lck5hbWVdKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzV2FsbGV0VW5zcGVudCh1bnNwZW50KSAmJiBzaWduID09PSAnZnVsbHNpZ25lZCcgJiYgY29zaWduZXJOYW1lKSB7XG4gICAgc2lnbklucHV0V2l0aFVuc3BlbnQoXG4gICAgICB0eGIsXG4gICAgICBpbnB1dEluZGV4LFxuICAgICAgdW5zcGVudCxcbiAgICAgIFdhbGxldFVuc3BlbnRTaWduZXIuZnJvbShyb290V2FsbGV0S2V5cywgcm9vdFdhbGxldEtleXNbY29zaWduZXJOYW1lXSwgcm9vdFdhbGxldEtleXNbc2lnbmVyTmFtZV0pXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIHNpZ25zIHdpdGggZmlyc3Qgb3Igc2Vjb25kIHNpZ25hdHVyZSBmb3IgYWxsIGlucHV0cy5cbiAqIHAyc2hQMnBrIGlzIHNpZ25lZCBvbmx5IHdpdGggZmlyc3Qgc2lnbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25BbGxUeG5JbnB1dHM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4YjogVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxUTnVtYmVyPixcbiAgaW5wdXRzOiBUeG5JbnB1dDxUTnVtYmVyPltdLFxuICByb290V2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIHNpZ246ICdoYWxmc2lnbmVkJyB8ICdmdWxsc2lnbmVkJyxcbiAgc2lnbmVycz86IHsgc2lnbmVyTmFtZTogS2V5TmFtZTsgY29zaWduZXJOYW1lPzogS2V5TmFtZSB9XG4pOiB2b2lkIHtcbiAgaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbmRleCkgPT4ge1xuICAgIHNpZ25UeG5JbnB1dCh0eGIsIGlucHV0LCBpbmRleCwgcm9vdFdhbGxldEtleXMsIHNpZ24sIHNpZ25lcnMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBjb25zdHJ1Y3QgdHJhbnNhY3Rpb24gZm9yIGdpdmVuIGlucHV0cywgb3V0cHV0cywgbmV0d29yayBhbmQgcm9vdCB3YWxsZXQga2V5cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdFR4bkJ1aWxkZXI8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGlucHV0czogVHhuSW5wdXQ8VE51bWJlcj5bXSxcbiAgb3V0cHV0czogVHhuT3V0cHV0PFROdW1iZXI+W10sXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIHJvb3RXYWxsZXRLZXlzOiBSb290V2FsbGV0S2V5cyxcbiAgc2lnbjogJ3Vuc2lnbmVkJyB8ICdoYWxmc2lnbmVkJyB8ICdmdWxsc2lnbmVkJyxcbiAgc2lnbmVycz86IHsgc2lnbmVyTmFtZTogS2V5TmFtZTsgY29zaWduZXJOYW1lPzogS2V5TmFtZSB9XG4pOiBVdHhvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+IHtcbiAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IGlucHV0cy5yZWR1Y2UoKHN1bSwgaW5wdXQpID0+IHN1bSArIEJpZ0ludChpbnB1dC52YWx1ZSksIEJpZ0ludCgwKSk7XG4gIGNvbnN0IG91dHB1dElucHV0QW1vdW50ID0gb3V0cHV0cy5yZWR1Y2UoKHN1bSwgb3V0cHV0KSA9PiBzdW0gKyBCaWdJbnQob3V0cHV0LnZhbHVlKSwgQmlnSW50KDApKTtcbiAgYXNzZXJ0KHRvdGFsSW5wdXRBbW91bnQgPj0gb3V0cHV0SW5wdXRBbW91bnQsICd0b3RhbCBvdXRwdXQgY2FuIG5vdCBleGNlZWQgdG90YWwgaW5wdXQnKTtcbiAgYXNzZXJ0KFxuICAgICFvdXRwdXRzLnNvbWUoKG8pID0+IChvLnNjcmlwdFR5cGUgJiYgby5hZGRyZXNzKSB8fCAoIW8uc2NyaXB0VHlwZSAmJiAhby5hZGRyZXNzKSksXG4gICAgJ29ubHkgZWl0aGVyIG91dHB1dCBzY3JpcHQgdHlwZSBvciBhZGRyZXNzIHNob3VsZCBiZSBwcm92aWRlZCdcbiAgKTtcblxuICBjb25zdCB0eGIgPSBjcmVhdGVUcmFuc2FjdGlvbkJ1aWxkZXJGb3JOZXR3b3JrPFROdW1iZXI+KG5ldHdvcmspO1xuXG4gIGNvbnN0IHVuc3BlbnRzID0gaW5wdXRzLm1hcCgoaW5wdXQsIGkpID0+IHRvVHhuVW5zcGVudChpbnB1dCwgaSwgbmV0d29yaywgcm9vdFdhbGxldEtleXMpKTtcblxuICB1bnNwZW50cy5mb3JFYWNoKCh1LCBpKSA9PiB7XG4gICAgYWRkVG9UcmFuc2FjdGlvbkJ1aWxkZXIodHhiLCB1KTtcbiAgfSk7XG5cbiAgb3V0cHV0cy5mb3JFYWNoKChvdXRwdXQsIGkpID0+IHtcbiAgICBjb25zdCBhZGRyZXNzID0gb3V0cHV0LnNjcmlwdFR5cGVcbiAgICAgID8gZ2V0V2FsbGV0QWRkcmVzcyhcbiAgICAgICAgICByb290V2FsbGV0S2V5cyxcbiAgICAgICAgICBvdXRwdXQuaXNJbnRlcm5hbEFkZHJlc3MgPyBnZXRJbnRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSkgOiBnZXRFeHRlcm5hbENoYWluQ29kZShvdXRwdXQuc2NyaXB0VHlwZSksXG4gICAgICAgICAgaSxcbiAgICAgICAgICBuZXR3b3JrXG4gICAgICAgIClcbiAgICAgIDogb3V0cHV0LmFkZHJlc3M7XG4gICAgaWYgKCFhZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZHJlc3MgaXMgbWlzc2luZycpO1xuICAgIH1cbiAgICB0eGIuYWRkT3V0cHV0KGFkZHJlc3MsIG91dHB1dC52YWx1ZSk7XG4gIH0pO1xuXG4gIGlmIChzaWduID09PSAndW5zaWduZWQnKSB7XG4gICAgcmV0dXJuIHR4YjtcbiAgfVxuXG4gIHNpZ25BbGxUeG5JbnB1dHModHhiLCBpbnB1dHMsIHJvb3RXYWxsZXRLZXlzLCAnaGFsZnNpZ25lZCcsIHNpZ25lcnMpO1xuXG4gIGlmIChzaWduID09PSAnZnVsbHNpZ25lZCcpIHtcbiAgICBzaWduQWxsVHhuSW5wdXRzKHR4YiwgaW5wdXRzLCByb290V2FsbGV0S2V5cywgc2lnbiwgc2lnbmVycyk7XG4gIH1cblxuICByZXR1cm4gdHhiO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/utxo-lib",
|
|
3
|
-
"version": "8.0.3-beta.
|
|
3
|
+
"version": "8.0.3-beta.310",
|
|
4
4
|
"description": "Client-side Bitcoin JavaScript library",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"engines": {
|
|
7
|
-
"node": ">=10.22.0 <
|
|
7
|
+
"node": ">=10.22.0 <21",
|
|
8
8
|
"npm": ">=3.10.10"
|
|
9
9
|
},
|
|
10
10
|
"keywords": [
|
|
@@ -46,14 +46,14 @@
|
|
|
46
46
|
"dist/src"
|
|
47
47
|
],
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@bitgo-beta/blake2b": "3.0.4-beta.
|
|
49
|
+
"@bitgo-beta/blake2b": "3.0.4-beta.546",
|
|
50
50
|
"@brandonblack/musig": "^0.0.1-alpha.0",
|
|
51
51
|
"@noble/secp256k1": "1.6.3",
|
|
52
52
|
"bech32": "^2.0.0",
|
|
53
|
-
"bip174": "npm:@bitgo-forks/bip174@3.1.0-master.
|
|
53
|
+
"bip174": "npm:@bitgo-forks/bip174@3.1.0-master.4",
|
|
54
54
|
"bip32": "^3.0.1",
|
|
55
55
|
"bitcoin-ops": "^1.3.0",
|
|
56
|
-
"bitcoinjs-lib": "npm:@bitgo-forks/bitcoinjs-lib@7.1.0-master.
|
|
56
|
+
"bitcoinjs-lib": "npm:@bitgo-forks/bitcoinjs-lib@7.1.0-master.7",
|
|
57
57
|
"bn.js": "^5.2.1",
|
|
58
58
|
"bs58check": "^2.1.2",
|
|
59
59
|
"cashaddress": "^1.1.0",
|
|
@@ -68,8 +68,8 @@
|
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@types/elliptic": "^6.4.12",
|
|
70
70
|
"@types/fs-extra": "^9.0.12",
|
|
71
|
-
"@types/node": "^
|
|
72
|
-
"axios": "^
|
|
71
|
+
"@types/node": "^16.18.46",
|
|
72
|
+
"axios": "^1.6.0",
|
|
73
73
|
"debug": "^3.1.0",
|
|
74
74
|
"fs-extra": "^9.1.0"
|
|
75
75
|
},
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
},
|
|
85
85
|
"author": "BitGo SDK Team <sdkteam@bitgo.com>",
|
|
86
86
|
"license": "MIT",
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "94aaba69722b0cc93b6bbf8a0b7daee27ab703a5"
|
|
88
88
|
}
|