@bitgo-beta/sdk-coin-kaspa 0.0.1-beta.43 → 0.0.1-beta.430
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 +224 -33
- package/dist/src/kaspa.d.ts +86 -18
- package/dist/src/kaspa.d.ts.map +1 -1
- package/dist/src/kaspa.js +119 -31
- package/dist/src/lib/constants.d.ts +38 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +56 -5
- package/dist/src/lib/iface.d.ts +28 -17
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +2 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +4 -2
- package/dist/src/lib/keyPair.d.ts +6 -2
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +7 -4
- package/dist/src/lib/pskt.d.ts +257 -0
- package/dist/src/lib/pskt.d.ts.map +1 -0
- package/dist/src/lib/pskt.js +439 -0
- package/dist/src/lib/sighash.d.ts +34 -13
- package/dist/src/lib/sighash.d.ts.map +1 -1
- package/dist/src/lib/sighash.js +115 -56
- package/dist/src/lib/transaction.d.ts +81 -21
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +167 -44
- package/dist/src/lib/transactionBuilder.d.ts +23 -17
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +53 -22
- package/dist/src/lib/utils.d.ts +17 -3
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +45 -11
- package/dist/src/register.js +2 -2
- package/dist/test/fixtures/kaspa.fixtures.d.ts +12 -0
- package/dist/test/fixtures/kaspa.fixtures.d.ts.map +1 -1
- package/dist/test/fixtures/kaspa.fixtures.js +76 -11
- package/dist/test/unit/coin.test.js +129 -9
- package/dist/test/unit/keyPair.test.js +35 -1
- package/dist/test/unit/pskt.test.d.ts +15 -0
- package/dist/test/unit/pskt.test.d.ts.map +1 -0
- package/dist/test/unit/pskt.test.js +383 -0
- package/dist/test/unit/transaction.test.js +259 -64
- package/dist/test/unit/transactionBuilder.test.js +3 -31
- package/dist/test/unit/transactionFlow.test.js +67 -2
- package/dist/test/unit/utils.test.js +63 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -6
- package/LICENSE +0 -191
|
@@ -4,8 +4,22 @@ exports.Transaction = void 0;
|
|
|
4
4
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
5
5
|
const secp256k1_1 = require("@bitgo-beta/secp256k1");
|
|
6
6
|
const sighash_1 = require("./sighash");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
const pskt_1 = require("./pskt");
|
|
9
|
+
/**
|
|
10
|
+
* Returns true when `input`'s scriptPublicKey belongs to a Kaspa ECDSA (v1)
|
|
11
|
+
* address — last opcode is OpCheckSigECDSA (0xAB).
|
|
12
|
+
* Schnorr (v0) scripts end with OpCheckSig (0xAC).
|
|
13
|
+
*/
|
|
14
|
+
function isEcdsaInput(input) {
|
|
15
|
+
if (!input.scriptPublicKey || input.scriptPublicKey.length < 2)
|
|
16
|
+
return false;
|
|
17
|
+
return parseInt(input.scriptPublicKey.slice(-2), 16) === constants_1.OP_CHECKSIG_ECDSA;
|
|
18
|
+
}
|
|
7
19
|
class Transaction extends sdk_core_1.BaseTransaction {
|
|
8
20
|
constructor(coin, txData) {
|
|
21
|
+
// BaseTransaction expects a full statics CoinConfig; we only have the coin name string here.
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
23
|
super({ coin });
|
|
10
24
|
this._txData = txData || {
|
|
11
25
|
version: 0,
|
|
@@ -24,7 +38,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
24
38
|
* Get the transaction fee in sompi.
|
|
25
39
|
* If fee was explicitly set, returns that. Otherwise computes from inputs - outputs.
|
|
26
40
|
*/
|
|
27
|
-
get
|
|
41
|
+
get fee() {
|
|
28
42
|
if (this._txData.fee) {
|
|
29
43
|
return this._txData.fee;
|
|
30
44
|
}
|
|
@@ -39,81 +53,121 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
39
53
|
return (totalIn - totalOut).toString();
|
|
40
54
|
}
|
|
41
55
|
/**
|
|
42
|
-
* Returns the
|
|
56
|
+
* Returns one sighash Buffer per input — the set of messages that must be
|
|
57
|
+
* signed for a multi-input MPCv2 ceremony.
|
|
43
58
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
59
|
+
* Kaspa uses a BIP-143-like sighash scheme (Blake2b) where each input commits
|
|
60
|
+
* to its own index, so input[i] has a distinct hash that cannot be re-used for
|
|
61
|
+
* input[j]. A correct multi-input MPCv2 flow runs one DKLS session per input
|
|
62
|
+
* in parallel and applies each resulting signature via addSignatureForInput().
|
|
48
63
|
*
|
|
49
|
-
*
|
|
64
|
+
* The hash type is automatically selected per input:
|
|
65
|
+
* - Schnorr (scriptPublicKey ends 0xAC): keyed Blake2b-256
|
|
66
|
+
* - ECDSA (scriptPublicKey ends 0xAB): keyed Blake2b-256 + SHA256 double-hash
|
|
50
67
|
*/
|
|
51
|
-
get
|
|
68
|
+
get signablePayloads() {
|
|
52
69
|
if (this._txData.inputs.length === 0) {
|
|
53
|
-
throw new Error('Cannot compute
|
|
70
|
+
throw new Error('Cannot compute signablePayloads: no inputs');
|
|
54
71
|
}
|
|
55
|
-
return
|
|
72
|
+
return this._txData.inputs.map((input, i) => isEcdsaInput(input)
|
|
73
|
+
? (0, sighash_1.computeKaspaEcdsaSigningHash)(this._txData, i, constants_1.SIGHASH_ALL)
|
|
74
|
+
: (0, sighash_1.computeKaspaSigningHash)(this._txData, i, constants_1.SIGHASH_ALL));
|
|
56
75
|
}
|
|
57
76
|
/**
|
|
58
|
-
* Apply a
|
|
77
|
+
* Apply a signature to a single specific input.
|
|
59
78
|
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
79
|
+
* Used in the multi-input MPCv2 flow where each input is signed by an
|
|
80
|
+
* independent DKLS session that commits to that input's sighash. Call this
|
|
81
|
+
* once per input with the signature produced for that input's signablePayloads[i].
|
|
63
82
|
*
|
|
64
|
-
* @param
|
|
65
|
-
* @param
|
|
83
|
+
* @param index 0-based index of the input to sign
|
|
84
|
+
* @param publicKey compressed secp256k1 public key (33 bytes hex) — not used in
|
|
85
|
+
* the scriptSig bytes but kept for symmetry with addSignature
|
|
86
|
+
* @param signature 64-byte signature buffer for input[index]
|
|
66
87
|
* @param sigHashType SigHash type (default: SIGHASH_ALL)
|
|
67
88
|
*/
|
|
68
|
-
|
|
69
|
-
if (
|
|
70
|
-
throw new Error(`
|
|
89
|
+
addSignatureForInput(index, publicKey, signature, sigHashType = constants_1.SIGHASH_ALL) {
|
|
90
|
+
if (index < 0 || index >= this._txData.inputs.length) {
|
|
91
|
+
throw new Error(`Input index ${index} is out of range (tx has ${this._txData.inputs.length} inputs)`);
|
|
71
92
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const sigWithType = Buffer.concat([signature, Buffer.from([sigHashType])]);
|
|
75
|
-
this._txData.inputs[i].signatureScript = sigWithType.toString('hex');
|
|
93
|
+
if (signature.length !== 64) {
|
|
94
|
+
throw new Error(`Expected 64-byte signature, got ${signature.length}`);
|
|
76
95
|
}
|
|
96
|
+
// Kaspa script engine requires push-only signatureScripts.
|
|
97
|
+
// 0x41 = OP_DATA_65: push the next 65 bytes (64-byte sig + 1-byte sighash type) onto the stack.
|
|
98
|
+
const sigWithType = Buffer.concat([Buffer.from([0x41]), signature, Buffer.from([sigHashType])]);
|
|
99
|
+
this._txData.inputs[index].signatureScript = sigWithType.toString('hex');
|
|
77
100
|
}
|
|
78
101
|
/**
|
|
79
|
-
* Sign all inputs with the given private key
|
|
102
|
+
* Sign all inputs with the given private key.
|
|
103
|
+
*
|
|
104
|
+
* Automatically selects the signature algorithm per input by inspecting each
|
|
105
|
+
* input's scriptPublicKey:
|
|
106
|
+
* - Schnorr (last opcode 0xAC, v0 address): BIP-340 Schnorr + Blake2b sighash
|
|
107
|
+
* - ECDSA (last opcode 0xAB, v1 address): secp256k1 ECDSA + Blake2b+SHA256 sighash
|
|
80
108
|
*
|
|
81
|
-
*
|
|
109
|
+
* A single transaction may mix both address types and each input will be
|
|
110
|
+
* signed correctly without any extra parameters.
|
|
111
|
+
*
|
|
112
|
+
* @param privateKey 32-byte private key buffer
|
|
82
113
|
* @param sigHashType SigHash type (default: SIGHASH_ALL = 0x01)
|
|
83
114
|
*/
|
|
84
|
-
sign(privateKey, sigHashType =
|
|
115
|
+
sign(privateKey, sigHashType = constants_1.SIGHASH_ALL) {
|
|
85
116
|
if (privateKey.length !== 32) {
|
|
86
117
|
throw new Error(`Expected 32-byte private key, got ${privateKey.length}`);
|
|
87
118
|
}
|
|
88
119
|
for (let i = 0; i < this._txData.inputs.length; i++) {
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
120
|
+
const input = this._txData.inputs[i];
|
|
121
|
+
let sig;
|
|
122
|
+
let sigHash;
|
|
123
|
+
if (isEcdsaInput(input)) {
|
|
124
|
+
// v1 ECDSA address: double-hash + compact secp256k1 ECDSA signature
|
|
125
|
+
sigHash = (0, sighash_1.computeKaspaEcdsaSigningHash)(this._txData, i, sigHashType);
|
|
126
|
+
sig = secp256k1_1.ecc.sign(sigHash, privateKey);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
// v0 Schnorr address (default): Blake2b sighash + BIP-340 Schnorr signature
|
|
130
|
+
sigHash = (0, sighash_1.computeKaspaSigningHash)(this._txData, i, sigHashType);
|
|
131
|
+
sig = secp256k1_1.ecc.signSchnorr(sigHash, privateKey);
|
|
132
|
+
}
|
|
133
|
+
// Kaspa requires push-only signatureScripts: 0x41 (OP_DATA_65) + 64-byte sig + 1-byte sighash type
|
|
134
|
+
const sigWithType = Buffer.concat([Buffer.from([0x41]), Buffer.from(sig), Buffer.from([sigHashType])]);
|
|
93
135
|
this._txData.inputs[i].signatureScript = sigWithType.toString('hex');
|
|
94
136
|
}
|
|
95
137
|
}
|
|
96
138
|
/**
|
|
97
|
-
* Verify that
|
|
139
|
+
* Verify that the signature on a specific input is valid.
|
|
140
|
+
*
|
|
141
|
+
* Automatically selects the verification algorithm based on the input's
|
|
142
|
+
* scriptPublicKey (ECDSA for 0xAB, Schnorr for 0xAC), matching `sign()`.
|
|
98
143
|
*
|
|
99
|
-
* @param publicKey
|
|
144
|
+
* @param publicKey 33-byte compressed public key (or 32-byte x-only for Schnorr)
|
|
100
145
|
* @param inputIndex Index of the input to verify
|
|
101
146
|
* @param sigHashType SigHash type used when signing
|
|
102
147
|
*/
|
|
103
|
-
verifySignature(publicKey, inputIndex, sigHashType =
|
|
148
|
+
verifySignature(publicKey, inputIndex, sigHashType = constants_1.SIGHASH_ALL) {
|
|
104
149
|
const input = this._txData.inputs[inputIndex];
|
|
105
150
|
if (!input?.signatureScript) {
|
|
106
151
|
return false;
|
|
107
152
|
}
|
|
108
153
|
const sigBytes = Buffer.from(input.signatureScript, 'hex');
|
|
109
|
-
|
|
154
|
+
// signatureScript layout: 0x41 (OP_DATA_65) + 64-byte sig + 1-byte sighash type = 66 bytes
|
|
155
|
+
if (sigBytes.length < 66) {
|
|
110
156
|
return false;
|
|
111
157
|
}
|
|
112
|
-
const sig = sigBytes.slice(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
158
|
+
const sig = sigBytes.slice(1, 65); // skip the 0x41 push opcode
|
|
159
|
+
if (isEcdsaInput(input)) {
|
|
160
|
+
const sigHash = (0, sighash_1.computeKaspaEcdsaSigningHash)(this._txData, inputIndex, sigHashType);
|
|
161
|
+
// ECDSA verification requires 33-byte compressed public key
|
|
162
|
+
const compressedPub = publicKey.length === 33 ? publicKey : Buffer.concat([Buffer.from([0x02]), publicKey]);
|
|
163
|
+
return secp256k1_1.ecc.verify(sigHash, compressedPub, sig);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
const sigHash = (0, sighash_1.computeKaspaSigningHash)(this._txData, inputIndex, sigHashType);
|
|
167
|
+
// Schnorr verification uses x-only (32-byte) public key
|
|
168
|
+
const xOnlyPub = publicKey.length === 33 ? publicKey.slice(1) : publicKey;
|
|
169
|
+
return secp256k1_1.ecc.verifySchnorr(sigHash, xOnlyPub, sig);
|
|
170
|
+
}
|
|
117
171
|
}
|
|
118
172
|
/**
|
|
119
173
|
* Explain the transaction in a human-readable format.
|
|
@@ -144,16 +198,53 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
144
198
|
};
|
|
145
199
|
}
|
|
146
200
|
/**
|
|
147
|
-
* Serialize the transaction to
|
|
201
|
+
* Serialize the transaction to the Kaspa REST API JSON string.
|
|
202
|
+
*
|
|
203
|
+
* This is the wire format accepted by the Kaspa node REST API for broadcasting.
|
|
204
|
+
* Unsigned transactions (signatureScript = "") use this same structure; once
|
|
205
|
+
* all inputs are signed the same format is submitted to the node.
|
|
206
|
+
*
|
|
207
|
+
* Note: inputs in this format carry only `previousOutpoint`, `signatureScript`,
|
|
208
|
+
* `sequence`, and `sigOpCount`. The `amount` and `scriptPublicKey` fields needed
|
|
209
|
+
* for sighash computation are NOT present here — they live in `toJson()`.
|
|
148
210
|
*/
|
|
149
211
|
toBroadcastFormat() {
|
|
150
|
-
return JSON.stringify(
|
|
212
|
+
return JSON.stringify({
|
|
213
|
+
version: this._txData.version,
|
|
214
|
+
inputs: this._txData.inputs.map((input) => ({
|
|
215
|
+
previousOutpoint: {
|
|
216
|
+
transactionId: input.transactionId,
|
|
217
|
+
index: input.transactionIndex,
|
|
218
|
+
},
|
|
219
|
+
signatureScript: input.signatureScript || '',
|
|
220
|
+
sequence: Number(input.sequence ?? 0),
|
|
221
|
+
sigOpCount: input.sigOpCount ?? 1,
|
|
222
|
+
})),
|
|
223
|
+
outputs: this._txData.outputs.map((output) => ({
|
|
224
|
+
amount: Number(output.amount),
|
|
225
|
+
scriptPublicKey: {
|
|
226
|
+
version: 0,
|
|
227
|
+
scriptPublicKey: output.scriptPublicKey || '',
|
|
228
|
+
},
|
|
229
|
+
})),
|
|
230
|
+
lockTime: Number(this._txData.lockTime ?? 0),
|
|
231
|
+
subnetworkId: this._txData.subnetworkId ?? '0000000000000000000000000000000000000000',
|
|
232
|
+
gas: 0,
|
|
233
|
+
payload: this._txData.payload ?? '',
|
|
234
|
+
});
|
|
151
235
|
}
|
|
152
236
|
/**
|
|
153
|
-
* Serialize transaction to hex
|
|
237
|
+
* Serialize transaction to hex using the internal `KaspaTransactionData` format.
|
|
238
|
+
*
|
|
239
|
+
* This hex is used for SDK-internal round-trips (builder serialisation / deserialisation)
|
|
240
|
+
* because the internal format preserves `amount` and `scriptPublicKey` on inputs,
|
|
241
|
+
* which are required for sighash computation but are not present in the REST API format.
|
|
242
|
+
*
|
|
243
|
+
* Use `Buffer.from(tx.toBroadcastFormat()).toString('hex')` when you need the hex
|
|
244
|
+
* representation of the broadcast / HSM wire format.
|
|
154
245
|
*/
|
|
155
246
|
toHex() {
|
|
156
|
-
return Buffer.from(this.
|
|
247
|
+
return Buffer.from(JSON.stringify(this._txData)).toString('hex');
|
|
157
248
|
}
|
|
158
249
|
/**
|
|
159
250
|
* Return transaction data as a plain object.
|
|
@@ -183,6 +274,38 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
183
274
|
canSign(_key) {
|
|
184
275
|
return true;
|
|
185
276
|
}
|
|
277
|
+
/**
|
|
278
|
+
* Convert this transaction to a PSKT in SIGNER role.
|
|
279
|
+
*
|
|
280
|
+
* The PSKT is populated with UTXO data from each input so that sighash
|
|
281
|
+
* computation is possible immediately. Any existing `signatureScript` on an
|
|
282
|
+
* input is carried into the PSKT as `finalScriptSig`.
|
|
283
|
+
*
|
|
284
|
+
* Typical use:
|
|
285
|
+
* ```ts
|
|
286
|
+
* const pskt = tx.toPskt()
|
|
287
|
+
* .sign(privateKey)
|
|
288
|
+
* .toFinalizer()
|
|
289
|
+
* .finalize()
|
|
290
|
+
* .toExtractor();
|
|
291
|
+
* const broadcastJson = pskt.extract();
|
|
292
|
+
* ```
|
|
293
|
+
*/
|
|
294
|
+
toPskt() {
|
|
295
|
+
return pskt_1.Pskt.fromTxData(this._txData);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Reconstruct a Transaction from a PSKT (any role).
|
|
299
|
+
*
|
|
300
|
+
* `finalScriptSig` from each PSKT input is mapped to `signatureScript` so
|
|
301
|
+
* that the resulting transaction is signed if the PSKT has been finalised.
|
|
302
|
+
*
|
|
303
|
+
* @param coin Coin name string (e.g. 'kaspa', 'tkaspa')
|
|
304
|
+
* @param pskt A Pskt instance (typically at FINALIZER or EXTRACTOR role)
|
|
305
|
+
*/
|
|
306
|
+
static fromPskt(coin, pskt) {
|
|
307
|
+
return new Transaction(coin, pskt.toTxData());
|
|
308
|
+
}
|
|
186
309
|
}
|
|
187
310
|
exports.Transaction = Transaction;
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFpRjtBQUNqRixxREFBNEM7QUFFNUMsdUNBQWlFO0FBRWpFLE1BQWEsV0FBWSxTQUFRLDBCQUFlO0lBRzlDLFlBQVksSUFBWSxFQUFFLE1BQTZCO1FBQ3JELEtBQUssQ0FBQyxFQUFFLElBQUksRUFBUyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUk7WUFDdkIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENB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LENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQVksRUFBRSxJQUFtQztRQUMvRCxNQUFNLE1BQU0sR0FBeUIsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEYsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxJQUFhO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBek1ELGtDQXlNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VLZXksIEJhc2VUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IEthc3BhVHJhbnNhY3Rpb25EYXRhLCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBjb21wdXRlS2FzcGFTaWduaW5nSGFzaCwgU0lHSEFTSF9BTEwgfSBmcm9tICcuL3NpZ2hhc2gnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX3R4RGF0YTogS2FzcGFUcmFuc2FjdGlvbkRhdGE7XG5cbiAgY29uc3RydWN0b3IoY29pbjogc3RyaW5nLCB0eERhdGE/OiBLYXNwYVRyYW5zYWN0aW9uRGF0YSkge1xuICAgIHN1cGVyKHsgY29pbiB9IGFzIGFueSk7XG4gICAgdGhpcy5fdHhEYXRhID0gdHhEYXRhIHx8IHtcbiAgICAgIHZlcnNpb246IDAsXG4gICAgICBpbnB1dHM6IFtdLFxuICAgICAgb3V0cHV0czogW10sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHhEYXRhLmlkIHx8ICcnO1xuICB9XG5cbiAgZ2V0IHR4RGF0YSgpOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX3R4RGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIGZlZSBpbiBzb21waS5cbiAgICogSWYgZmVlIHdhcyBleHBsaWNpdGx5IHNldCwgcmV0dXJucyB0aGF0LiBPdGhlcndpc2UgY29tcHV0ZXMgZnJvbSBpbnB1dHMgLSBvdXRwdXRzLlxuICAgKi9cbiAgZ2V0IGdldEZlZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl90eERhdGEuZmVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHhEYXRhLmZlZTtcbiAgICB9XG4gICAgbGV0IHRvdGFsSW4gPSBCaWdJbnQoMCk7XG4gICAgbGV0IHRvdGFsT3V0ID0gQmlnSW50KDApO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fdHhEYXRhLmlucHV0cykge1xuICAgICAgdG90YWxJbiArPSBCaWdJbnQoaW5wdXQuYW1vdW50KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdGhpcy5fdHhEYXRhLm91dHB1dHMpIHtcbiAgICAgIHRvdGFsT3V0ICs9IEJpZ0ludChvdXRwdXQuYW1vdW50KTtcbiAgICB9XG4gICAgcmV0dXJuICh0b3RhbEluIC0gdG90YWxPdXQpLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2lnbmFibGUgcGF5bG9hZCBmb3IgVFNTL01QQyBzaWduaW5nLlxuICAgKlxuICAgKiBGb3IgS2FzcGEsIGVhY2ggaW5wdXQgaGFzIGl0cyBvd24gc2lnaGFzaCAoQklQLTE0My1saWtlIHNjaGVtZSB3aXRoIEJsYWtlMmIpLlxuICAgKiBUaGlzIHJldHVybnMgdGhlIHNpZ2hhc2ggZm9yIHRoZSBmaXJzdCBpbnB1dCwgd2hpY2ggaXMgd2hhdCBUU1Mgc2lnbnMuXG4gICAqIEZvciBtdWx0aS1pbnB1dCB0cmFuc2FjdGlvbnMsIGFsbCBpbnB1dHMgc2hhcmUgdGhlIHNhbWUga2V5IHNvIHRoZSBzYW1lXG4gICAqIFNjaG5vcnIgc2lnbmF0dXJlIGlzIGFwcGxpZWQgdG8gZWFjaCBpbnB1dCdzIGluZGl2aWR1YWwgc2lnaGFzaCBpbiBhZGRTaWduYXR1cmUoKS5cbiAgICpcbiAgICogQHNlZSBBREEncyBUcmFuc2FjdGlvbi5zaWduYWJsZVBheWxvYWQgZm9yIHRoZSBlcXVpdmFsZW50IHBhdHRlcm5cbiAgICovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy5fdHhEYXRhLmlucHV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXB1dGUgc2lnbmFibGVQYXlsb2FkOiBubyBpbnB1dHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgMCwgU0lHSEFTSF9BTEwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGEgU2Nobm9yciBzaWduYXR1cmUgcHJvZHVjZWQgYnkgVFNTL01QQyBzaWduaW5nIHRvIGFsbCBpbnB1dHMuXG4gICAqXG4gICAqIEluIFRTUyBmbG93LCB0aGUga2V5c2VydmVyIHNpZ25zIHRoZSBmaXJzdCBpbnB1dCdzIHNpZ2hhc2guIFNpbmNlIGVhY2ggaW5wdXRcbiAgICogaGFzIGEgZGlmZmVyZW50IHNpZ2hhc2gsIHdlIHJlLXNpZ24gZWFjaCBpbnB1dCBpbmRpdmlkdWFsbHkgdXNpbmcgdGhlXG4gICAqIHgtb25seSBwdWJsaWMga2V5IGRlcml2ZWQgZnJvbSB0aGUgY29tcHJlc3NlZCBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBAcGFyYW0gcHVibGljS2V5IGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmxpYyBrZXkgKDMzIGJ5dGVzIGhleClcbiAgICogQHBhcmFtIHNpZ25hdHVyZSA2NC1ieXRlIFNjaG5vcnIgc2lnbmF0dXJlIGJ1ZmZlciAoZnJvbSBUU1MpXG4gICAqIEBwYXJhbSBzaWdIYXNoVHlwZSBTaWdIYXNoIHR5cGUgKGRlZmF1bHQ6IFNJR0hBU0hfQUxMKVxuICAgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogc3RyaW5nLCBzaWduYXR1cmU6IEJ1ZmZlciwgc2lnSGFzaFR5cGU6IG51bWJlciA9IFNJR0hBU0hfQUxMKTogdm9pZCB7XG4gICAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDY0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIDY0LWJ5dGUgU2Nobm9yciBzaWduYXR1cmUsIGdvdCAke3NpZ25hdHVyZS5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90eERhdGEuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBFYWNoIGlucHV0IGdldHMgdGhlIHNhbWUgc2lnbmF0dXJlIGZvcm1hdDogNjQtYnl0ZSBzaWcgKyBzaWdoYXNoIHR5cGUgYnl0ZVxuICAgICAgY29uc3Qgc2lnV2l0aFR5cGUgPSBCdWZmZXIuY29uY2F0KFtzaWduYXR1cmUsIEJ1ZmZlci5mcm9tKFtzaWdIYXNoVHlwZV0pXSk7XG4gICAgICB0aGlzLl90eERhdGEuaW5wdXRzW2ldLnNpZ25hdHVyZVNjcmlwdCA9IHNpZ1dpdGhUeXBlLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhbGwgaW5wdXRzIHdpdGggdGhlIGdpdmVuIHByaXZhdGUga2V5IHVzaW5nIFNjaG5vcnIgc2lnbmF0dXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHByaXZhdGVLZXkgMzItYnl0ZSBwcml2YXRlIGtleSBidWZmZXJcbiAgICogQHBhcmFtIHNpZ0hhc2hUeXBlIFNpZ0hhc2ggdHlwZSAoZGVmYXVsdDogU0lHSEFTSF9BTEwgPSAweDAxKVxuICAgKi9cbiAgc2lnbihwcml2YXRlS2V5OiBCdWZmZXIsIHNpZ0hhc2hUeXBlOiBudW1iZXIgPSBTSUdIQVNIX0FMTCk6IHZvaWQge1xuICAgIGlmIChwcml2YXRlS2V5Lmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgMzItYnl0ZSBwcml2YXRlIGtleSwgZ290ICR7cHJpdmF0ZUtleS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHhEYXRhLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaSwgc2lnSGFzaFR5cGUpO1xuICAgICAgY29uc3Qgc2lnID0gZWNjLnNpZ25TY2hub3JyKHNpZ0hhc2gsIHByaXZhdGVLZXkpO1xuICAgICAgLy8gNjUtYnl0ZSBzaWduYXR1cmU6IDY0LWJ5dGUgU2Nobm9yciBzaWcgKyAxLWJ5dGUgc2lnaGFzaCB0eXBlXG4gICAgICBjb25zdCBzaWdXaXRoVHlwZSA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKHNpZyksIEJ1ZmZlci5mcm9tKFtzaWdIYXNoVHlwZV0pXSk7XG4gICAgICB0aGlzLl90eERhdGEuaW5wdXRzW2ldLnNpZ25hdHVyZVNjcmlwdCA9IHNpZ1dpdGhUeXBlLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSBTY2hub3JyIHNpZ25hdHVyZSBvbiBhIHNwZWNpZmljIGlucHV0IGlzIHZhbGlkLlxuICAgKlxuICAgKiBAcGFyYW0gcHVibGljS2V5IDMzLWJ5dGUgY29tcHJlc3NlZCBwdWJsaWMga2V5IChvciAzMi1ieXRlIHgtb25seSlcbiAgICogQHBhcmFtIGlucHV0SW5kZXggSW5kZXggb2YgdGhlIGlucHV0IHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gc2lnSGFzaFR5cGUgU2lnSGFzaCB0eXBlIHVzZWQgd2hlbiBzaWduaW5nXG4gICAqL1xuICB2ZXJpZnlTaWduYXR1cmUocHVibGljS2V5OiBCdWZmZXIsIGlucHV0SW5kZXg6IG51bWJlciwgc2lnSGFzaFR5cGU6IG51bWJlciA9IFNJR0hBU0hfQUxMKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLl90eERhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIGlmICghaW5wdXQ/LnNpZ25hdHVyZVNjcmlwdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzaWdCeXRlcyA9IEJ1ZmZlci5mcm9tKGlucHV0LnNpZ25hdHVyZVNjcmlwdCwgJ2hleCcpO1xuICAgIGlmIChzaWdCeXRlcy5sZW5ndGggPCA2NSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzaWcgPSBzaWdCeXRlcy5zbGljZSgwLCA2NCk7XG4gICAgY29uc3Qgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaW5wdXRJbmRleCwgc2lnSGFzaFR5cGUpO1xuICAgIC8vIEFjY2VwdCAzMy1ieXRlIGNvbXByZXNzZWQgb3IgMzItYnl0ZSB4LW9ubHlcbiAgICBjb25zdCB4T25seVB1YiA9IHB1YmxpY0tleS5sZW5ndGggPT09IDMzID8gcHVibGljS2V5LnNsaWNlKDEpIDogcHVibGljS2V5O1xuICAgIHJldHVybiBlY2MudmVyaWZ5U2Nobm9ycihzaWdIYXNoLCB4T25seVB1Yiwgc2lnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluIHRoZSB0cmFuc2FjdGlvbiBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdC5cbiAgICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBsZXQgdG90YWxJbiA9IEJpZ0ludCgwKTtcbiAgICBsZXQgdG90YWxPdXQgPSBCaWdJbnQoMCk7XG5cbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3R4RGF0YS5pbnB1dHMpIHtcbiAgICAgIHRvdGFsSW4gKz0gQmlnSW50KGlucHV0LmFtb3VudCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIHRoaXMuX3R4RGF0YS5vdXRwdXRzKSB7XG4gICAgICB0b3RhbE91dCArPSBCaWdJbnQob3V0cHV0LmFtb3VudCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmVlID0gKHRvdGFsSW4gLSB0b3RhbE91dCkudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IG91dHB1dHMgPSB0aGlzLl90eERhdGEub3V0cHV0cy5tYXAoKG8pID0+ICh7XG4gICAgICBhZGRyZXNzOiBvLmFkZHJlc3MsXG4gICAgICBhbW91bnQ6IG8uYW1vdW50LFxuICAgIH0pKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5fdHhEYXRhLmlkIHx8ICcnLFxuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlNlbmQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50OiB0b3RhbE91dC50b1N0cmluZygpLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuX3R4RGF0YS5mZWUgfHwgZmVlIH0sXG4gICAgICBpbnB1dHM6IHRoaXMuX3R4RGF0YS5pbnB1dHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdGhlIHRyYW5zYWN0aW9uIHRvIGEgSlNPTiBzdHJpbmcgKGJyb2FkY2FzdCBmb3JtYXQpLlxuICAgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5fdHhEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdHJhbnNhY3Rpb24gdG8gaGV4IChKU09OLWVuY29kZWQgdGhlbiBoZXgtZW5jb2RlZCkuXG4gICAqL1xuICB0b0hleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLnRvQnJvYWRjYXN0Rm9ybWF0KCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJhbnNhY3Rpb24gZGF0YSBhcyBhIHBsYWluIG9iamVjdC5cbiAgICovXG4gIHRvSnNvbigpOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fdHhEYXRhIH07XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgZnJvbSBoZXguXG4gICAqL1xuICBzdGF0aWMgZnJvbUhleChjb2luOiBzdHJpbmcsIGhleDogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oY29pbiwganNvbik7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgZnJvbSBKU09OIHN0cmluZyBvciBvYmplY3QuXG4gICAqL1xuICBzdGF0aWMgZnJvbUpzb24oY29pbjogc3RyaW5nLCBkYXRhOiBzdHJpbmcgfCBLYXNwYVRyYW5zYWN0aW9uRGF0YSk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eERhdGE6IEthc3BhVHJhbnNhY3Rpb25EYXRhID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbihjb2luLCB0eERhdGEpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldCBzaWduYXR1cmUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90eERhdGEuaW5wdXRzLm1hcCgoaSkgPT4gaS5zaWduYXR1cmVTY3JpcHQgfHwgJycpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGNhblNpZ24oX2tleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFpRjtBQUNqRixxREFBNEM7QUFFNUMsdUNBQWtGO0FBQ2xGLDJDQUE2RDtBQUM3RCxpQ0FBOEI7QUFFOUI7Ozs7R0FJRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQXFCO0lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM3RSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLDZCQUFpQixDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQUc5QyxZQUFZLElBQVksRUFBRSxNQUE2QjtRQUNyRCw2RkFBNkY7UUFDN0YsOERBQThEO1FBQzlELEtBQUssQ0FBQyxFQUFFLElBQUksRUFBUyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUk7WUFDdkIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxD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Q0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixPQUFPLENBQUMsSUFBYTtRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7OztPQWdCRztJQUNILE1BQU07UUFDSixPQUFPLFdBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBWSxFQUFFLElBQVU7UUFDdEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztDQUNGO0FBM1RELGtDQTJUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VLZXksIEJhc2VUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IEthc3BhVHJhbnNhY3Rpb25EYXRhLCBLYXNwYVV0eG9JbnB1dCwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgY29tcHV0ZUthc3BhU2lnbmluZ0hhc2gsIGNvbXB1dGVLYXNwYUVjZHNhU2lnbmluZ0hhc2ggfSBmcm9tICcuL3NpZ2hhc2gnO1xuaW1wb3J0IHsgT1BfQ0hFQ0tTSUdfRUNEU0EsIFNJR0hBU0hfQUxMIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUHNrdCB9IGZyb20gJy4vcHNrdCc7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gYGlucHV0YCdzIHNjcmlwdFB1YmxpY0tleSBiZWxvbmdzIHRvIGEgS2FzcGEgRUNEU0EgKHYxKVxuICogYWRkcmVzcyDigJQgbGFzdCBvcGNvZGUgaXMgT3BDaGVja1NpZ0VDRFNBICgweEFCKS5cbiAqIFNjaG5vcnIgKHYwKSBzY3JpcHRzIGVuZCB3aXRoIE9wQ2hlY2tTaWcgKDB4QUMpLlxuICovXG5mdW5jdGlvbiBpc0VjZHNhSW5wdXQoaW5wdXQ6IEthc3BhVXR4b0lucHV0KTogYm9vbGVhbiB7XG4gIGlmICghaW5wdXQuc2NyaXB0UHVibGljS2V5IHx8IGlucHV0LnNjcmlwdFB1YmxpY0tleS5sZW5ndGggPCAyKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBwYXJzZUludChpbnB1dC5zY3JpcHRQdWJsaWNLZXkuc2xpY2UoLTIpLCAxNikgPT09IE9QX0NIRUNLU0lHX0VDRFNBO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX3R4RGF0YTogS2FzcGFUcmFuc2FjdGlvbkRhdGE7XG5cbiAgY29uc3RydWN0b3IoY29pbjogc3RyaW5nLCB0eERhdGE/OiBLYXNwYVRyYW5zYWN0aW9uRGF0YSkge1xuICAgIC8vIEJhc2VUcmFuc2FjdGlvbiBleHBlY3RzIGEgZnVsbCBzdGF0aWNzIENvaW5Db25maWc7IHdlIG9ubHkgaGF2ZSB0aGUgY29pbiBuYW1lIHN0cmluZyBoZXJlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgc3VwZXIoeyBjb2luIH0gYXMgYW55KTtcbiAgICB0aGlzLl90eERhdGEgPSB0eERhdGEgfHwge1xuICAgICAgdmVyc2lvbjogMCxcbiAgICAgIGlucHV0czogW10sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eERhdGEuaWQgfHwgJyc7XG4gIH1cblxuICBnZXQgdHhEYXRhKCk6IEthc3BhVHJhbnNhY3Rpb25EYXRhIHtcbiAgICByZXR1cm4gdGhpcy5fdHhEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdHJhbnNhY3Rpb24gZmVlIGluIHNvbXBpLlxuICAgKiBJZiBmZWUgd2FzIGV4cGxpY2l0bHkgc2V0LCByZXR1cm5zIHRoYXQuIE90aGVyd2lzZSBjb21wdXRlcyBmcm9tIGlucHV0cyAtIG91dHB1dHMuXG4gICAqL1xuICBnZXQgZmVlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX3R4RGF0YS5mZWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl90eERhdGEuZmVlO1xuICAgIH1cbiAgICBsZXQgdG90YWxJbiA9IEJpZ0ludCgwKTtcbiAgICBsZXQgdG90YWxPdXQgPSBCaWdJbnQoMCk7XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl90eERhdGEuaW5wdXRzKSB7XG4gICAgICB0b3RhbEluICs9IEJpZ0ludChpbnB1dC5hbW91bnQpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiB0aGlzLl90eERhdGEub3V0cHV0cykge1xuICAgICAgdG90YWxPdXQgKz0gQmlnSW50KG91dHB1dC5hbW91bnQpO1xuICAgIH1cbiAgICByZXR1cm4gKHRvdGFsSW4gLSB0b3RhbE91dCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG9uZSBzaWdoYXNoIEJ1ZmZlciBwZXIgaW5wdXQg4oCUIHRoZSBzZXQgb2YgbWVzc2FnZXMgdGhhdCBtdXN0IGJlXG4gICAqIHNpZ25lZCBmb3IgYSBtdWx0aS1pbnB1dCBNUEN2MiBjZXJlbW9ueS5cbiAgICpcbiAgICogS2FzcGEgdXNlcyBhIEJJUC0xNDMtbGlrZSBzaWdoYXNoIHNjaGVtZSAoQmxha2UyYikgd2hlcmUgZWFjaCBpbnB1dCBjb21taXRzXG4gICAqIHRvIGl0cyBvd24gaW5kZXgsIHNvIGlucHV0W2ldIGhhcyBhIGRpc3RpbmN0IGhhc2ggdGhhdCBjYW5ub3QgYmUgcmUtdXNlZCBmb3JcbiAgICogaW5wdXRbal0uIEEgY29ycmVjdCBtdWx0aS1pbnB1dCBNUEN2MiBmbG93IHJ1bnMgb25lIERLTFMgc2Vzc2lvbiBwZXIgaW5wdXRcbiAgICogaW4gcGFyYWxsZWwgYW5kIGFwcGxpZXMgZWFjaCByZXN1bHRpbmcgc2lnbmF0dXJlIHZpYSBhZGRTaWduYXR1cmVGb3JJbnB1dCgpLlxuICAgKlxuICAgKiBUaGUgaGFzaCB0eXBlIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgcGVyIGlucHV0OlxuICAgKiAgIC0gU2Nobm9yciAoc2NyaXB0UHVibGljS2V5IGVuZHMgMHhBQyk6IGtleWVkIEJsYWtlMmItMjU2XG4gICAqICAgLSBFQ0RTQSAgIChzY3JpcHRQdWJsaWNLZXkgZW5kcyAweEFCKToga2V5ZWQgQmxha2UyYi0yNTYgKyBTSEEyNTYgZG91YmxlLWhhc2hcbiAgICovXG4gIGdldCBzaWduYWJsZVBheWxvYWRzKCk6IEJ1ZmZlcltdIHtcbiAgICBpZiAodGhpcy5fdHhEYXRhLmlucHV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXB1dGUgc2lnbmFibGVQYXlsb2Fkczogbm8gaW5wdXRzJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90eERhdGEuaW5wdXRzLm1hcCgoaW5wdXQsIGkpID0+XG4gICAgICBpc0VjZHNhSW5wdXQoaW5wdXQpXG4gICAgICAgID8gY29tcHV0ZUthc3BhRWNkc2FTaWduaW5nSGFzaCh0aGlzLl90eERhdGEsIGksIFNJR0hBU0hfQUxMKVxuICAgICAgICA6IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaSwgU0lHSEFTSF9BTEwpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhIHNpZ25hdHVyZSB0byBhIHNpbmdsZSBzcGVjaWZpYyBpbnB1dC5cbiAgICpcbiAgICogVXNlZCBpbiB0aGUgbXVsdGktaW5wdXQgTVBDdjIgZmxvdyB3aGVyZSBlYWNoIGlucHV0IGlzIHNpZ25lZCBieSBhblxuICAgKiBpbmRlcGVuZGVudCBES0xTIHNlc3Npb24gdGhhdCBjb21taXRzIHRvIHRoYXQgaW5wdXQncyBzaWdoYXNoLiBDYWxsIHRoaXNcbiAgICogb25jZSBwZXIgaW5wdXQgd2l0aCB0aGUgc2lnbmF0dXJlIHByb2R1Y2VkIGZvciB0aGF0IGlucHV0J3Mgc2lnbmFibGVQYXlsb2Fkc1tpXS5cbiAgICpcbiAgICogQHBhcmFtIGluZGV4ICAgICAgMC1iYXNlZCBpbmRleCBvZiB0aGUgaW5wdXQgdG8gc2lnblxuICAgKiBAcGFyYW0gcHVibGljS2V5ICBjb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJsaWMga2V5ICgzMyBieXRlcyBoZXgpIOKAlCBub3QgdXNlZCBpblxuICAgKiAgICAgICAgICAgICAgICAgICB0aGUgc2NyaXB0U2lnIGJ5dGVzIGJ1dCBrZXB0IGZvciBzeW1tZXRyeSB3aXRoIGFkZFNpZ25hdHVyZVxuICAgKiBAcGFyYW0gc2lnbmF0dXJlICA2NC1ieXRlIHNpZ25hdHVyZSBidWZmZXIgZm9yIGlucHV0W2luZGV4XVxuICAgKiBAcGFyYW0gc2lnSGFzaFR5cGUgU2lnSGFzaCB0eXBlIChkZWZhdWx0OiBTSUdIQVNIX0FMTClcbiAgICovXG4gIGFkZFNpZ25hdHVyZUZvcklucHV0KGluZGV4OiBudW1iZXIsIHB1YmxpY0tleTogc3RyaW5nLCBzaWduYXR1cmU6IEJ1ZmZlciwgc2lnSGFzaFR5cGU6IG51bWJlciA9IFNJR0hBU0hfQUxMKTogdm9pZCB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl90eERhdGEuaW5wdXRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCBpbmRleCAke2luZGV4fSBpcyBvdXQgb2YgcmFuZ2UgKHR4IGhhcyAke3RoaXMuX3R4RGF0YS5pbnB1dHMubGVuZ3RofSBpbnB1dHMpYCk7XG4gICAgfVxuICAgIGlmIChzaWduYXR1cmUubGVuZ3RoICE9PSA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCA2NC1ieXRlIHNpZ25hdHVyZSwgZ290ICR7c2lnbmF0dXJlLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgLy8gS2FzcGEgc2NyaXB0IGVuZ2luZSByZXF1aXJlcyBwdXNoLW9ubHkgc2lnbmF0dXJlU2NyaXB0cy5cbiAgICAvLyAweDQxID0gT1BfREFUQV82NTogcHVzaCB0aGUgbmV4dCA2NSBieXRlcyAoNjQtYnl0ZSBzaWcgKyAxLWJ5dGUgc2lnaGFzaCB0eXBlKSBvbnRvIHRoZSBzdGFjay5cbiAgICBjb25zdCBzaWdXaXRoVHlwZSA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFsweDQxXSksIHNpZ25hdHVyZSwgQnVmZmVyLmZyb20oW3NpZ0hhc2hUeXBlXSldKTtcbiAgICB0aGlzLl90eERhdGEuaW5wdXRzW2luZGV4XS5zaWduYXR1cmVTY3JpcHQgPSBzaWdXaXRoVHlwZS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhbGwgaW5wdXRzIHdpdGggdGhlIGdpdmVuIHByaXZhdGUga2V5LlxuICAgKlxuICAgKiBBdXRvbWF0aWNhbGx5IHNlbGVjdHMgdGhlIHNpZ25hdHVyZSBhbGdvcml0aG0gcGVyIGlucHV0IGJ5IGluc3BlY3RpbmcgZWFjaFxuICAgKiBpbnB1dCdzIHNjcmlwdFB1YmxpY0tleTpcbiAgICogICAtIFNjaG5vcnIgKGxhc3Qgb3Bjb2RlIDB4QUMsIHYwIGFkZHJlc3MpOiBCSVAtMzQwIFNjaG5vcnIgKyBCbGFrZTJiIHNpZ2hhc2hcbiAgICogICAtIEVDRFNBICAgKGxhc3Qgb3Bjb2RlIDB4QUIsIHYxIGFkZHJlc3MpOiBzZWNwMjU2azEgRUNEU0EgKyBCbGFrZTJiK1NIQTI1NiBzaWdoYXNoXG4gICAqXG4gICAqIEEgc2luZ2xlIHRyYW5zYWN0aW9uIG1heSBtaXggYm90aCBhZGRyZXNzIHR5cGVzIGFuZCBlYWNoIGlucHV0IHdpbGwgYmVcbiAgICogc2lnbmVkIGNvcnJlY3RseSB3aXRob3V0IGFueSBleHRyYSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJpdmF0ZUtleSAgMzItYnl0ZSBwcml2YXRlIGtleSBidWZmZXJcbiAgICogQHBhcmFtIHNpZ0hhc2hUeXBlIFNpZ0hhc2ggdHlwZSAoZGVmYXVsdDogU0lHSEFTSF9BTEwgPSAweDAxKVxuICAgKi9cbiAgc2lnbihwcml2YXRlS2V5OiBCdWZmZXIsIHNpZ0hhc2hUeXBlOiBudW1iZXIgPSBTSUdIQVNIX0FMTCk6IHZvaWQge1xuICAgIGlmIChwcml2YXRlS2V5Lmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgMzItYnl0ZSBwcml2YXRlIGtleSwgZ290ICR7cHJpdmF0ZUtleS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHhEYXRhLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLl90eERhdGEuaW5wdXRzW2ldO1xuICAgICAgbGV0IHNpZzogVWludDhBcnJheTtcbiAgICAgIGxldCBzaWdIYXNoOiBCdWZmZXI7XG5cbiAgICAgIGlmIChpc0VjZHNhSW5wdXQoaW5wdXQpKSB7XG4gICAgICAgIC8vIHYxIEVDRFNBIGFkZHJlc3M6IGRvdWJsZS1oYXNoICsgY29tcGFjdCBzZWNwMjU2azEgRUNEU0Egc2lnbmF0dXJlXG4gICAgICAgIHNpZ0hhc2ggPSBjb21wdXRlS2FzcGFFY2RzYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaSwgc2lnSGFzaFR5cGUpO1xuICAgICAgICBzaWcgPSBlY2Muc2lnbihzaWdIYXNoLCBwcml2YXRlS2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHYwIFNjaG5vcnIgYWRkcmVzcyAoZGVmYXVsdCk6IEJsYWtlMmIgc2lnaGFzaCArIEJJUC0zNDAgU2Nobm9yciBzaWduYXR1cmVcbiAgICAgICAgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaSwgc2lnSGFzaFR5cGUpO1xuICAgICAgICBzaWcgPSBlY2Muc2lnblNjaG5vcnIoc2lnSGFzaCwgcHJpdmF0ZUtleSk7XG4gICAgICB9XG4gICAgICAvLyBLYXNwYSByZXF1aXJlcyBwdXNoLW9ubHkgc2lnbmF0dXJlU2NyaXB0czogMHg0MSAoT1BfREFUQV82NSkgKyA2NC1ieXRlIHNpZyArIDEtYnl0ZSBzaWdoYXNoIHR5cGVcbiAgICAgIGNvbnN0IHNpZ1dpdGhUeXBlID0gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oWzB4NDFdKSwgQnVmZmVyLmZyb20oc2lnKSwgQnVmZmVyLmZyb20oW3NpZ0hhc2hUeXBlXSldKTtcbiAgICAgIHRoaXMuX3R4RGF0YS5pbnB1dHNbaV0uc2lnbmF0dXJlU2NyaXB0ID0gc2lnV2l0aFR5cGUudG9TdHJpbmcoJ2hleCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCB0aGUgc2lnbmF0dXJlIG9uIGEgc3BlY2lmaWMgaW5wdXQgaXMgdmFsaWQuXG4gICAqXG4gICAqIEF1dG9tYXRpY2FsbHkgc2VsZWN0cyB0aGUgdmVyaWZpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgaW5wdXQnc1xuICAgKiBzY3JpcHRQdWJsaWNLZXkgKEVDRFNBIGZvciAweEFCLCBTY2hub3JyIGZvciAweEFDKSwgbWF0Y2hpbmcgYHNpZ24oKWAuXG4gICAqXG4gICAqIEBwYXJhbSBwdWJsaWNLZXkgIDMzLWJ5dGUgY29tcHJlc3NlZCBwdWJsaWMga2V5IChvciAzMi1ieXRlIHgtb25seSBmb3IgU2Nobm9ycilcbiAgICogQHBhcmFtIGlucHV0SW5kZXggSW5kZXggb2YgdGhlIGlucHV0IHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gc2lnSGFzaFR5cGUgU2lnSGFzaCB0eXBlIHVzZWQgd2hlbiBzaWduaW5nXG4gICAqL1xuICB2ZXJpZnlTaWduYXR1cmUocHVibGljS2V5OiBCdWZmZXIsIGlucHV0SW5kZXg6IG51bWJlciwgc2lnSGFzaFR5cGU6IG51bWJlciA9IFNJR0hBU0hfQUxMKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLl90eERhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIGlmICghaW5wdXQ/LnNpZ25hdHVyZVNjcmlwdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzaWdCeXRlcyA9IEJ1ZmZlci5mcm9tKGlucHV0LnNpZ25hdHVyZVNjcmlwdCwgJ2hleCcpO1xuICAgIC8vIHNpZ25hdHVyZVNjcmlwdCBsYXlvdXQ6IDB4NDEgKE9QX0RBVEFfNjUpICsgNjQtYnl0ZSBzaWcgKyAxLWJ5dGUgc2lnaGFzaCB0eXBlID0gNjYgYnl0ZXNcbiAgICBpZiAoc2lnQnl0ZXMubGVuZ3RoIDwgNjYpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc2lnID0gc2lnQnl0ZXMuc2xpY2UoMSwgNjUpOyAvLyBza2lwIHRoZSAweDQxIHB1c2ggb3Bjb2RlXG5cbiAgICBpZiAoaXNFY2RzYUlucHV0KGlucHV0KSkge1xuICAgICAgY29uc3Qgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYUVjZHNhU2lnbmluZ0hhc2godGhpcy5fdHhEYXRhLCBpbnB1dEluZGV4LCBzaWdIYXNoVHlwZSk7XG4gICAgICAvLyBFQ0RTQSB2ZXJpZmljYXRpb24gcmVxdWlyZXMgMzMtYnl0ZSBjb21wcmVzc2VkIHB1YmxpYyBrZXlcbiAgICAgIGNvbnN0IGNvbXByZXNzZWRQdWIgPSBwdWJsaWNLZXkubGVuZ3RoID09PSAzMyA/IHB1YmxpY0tleSA6IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFsweDAyXSksIHB1YmxpY0tleV0pO1xuICAgICAgcmV0dXJuIGVjYy52ZXJpZnkoc2lnSGFzaCwgY29tcHJlc3NlZFB1Yiwgc2lnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaW5wdXRJbmRleCwgc2lnSGFzaFR5cGUpO1xuICAgICAgLy8gU2Nobm9yciB2ZXJpZmljYXRpb24gdXNlcyB4LW9ubHkgKDMyLWJ5dGUpIHB1YmxpYyBrZXlcbiAgICAgIGNvbnN0IHhPbmx5UHViID0gcHVibGljS2V5Lmxlbmd0aCA9PT0gMzMgPyBwdWJsaWNLZXkuc2xpY2UoMSkgOiBwdWJsaWNLZXk7XG4gICAgICByZXR1cm4gZWNjLnZlcmlmeVNjaG5vcnIoc2lnSGFzaCwgeE9ubHlQdWIsIHNpZyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxhaW4gdGhlIHRyYW5zYWN0aW9uIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybWF0LlxuICAgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGxldCB0b3RhbEluID0gQmlnSW50KDApO1xuICAgIGxldCB0b3RhbE91dCA9IEJpZ0ludCgwKTtcblxuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fdHhEYXRhLmlucHV0cykge1xuICAgICAgdG90YWxJbiArPSBCaWdJbnQoaW5wdXQuYW1vdW50KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdGhpcy5fdHhEYXRhLm91dHB1dHMpIHtcbiAgICAgIHRvdGFsT3V0ICs9IEJpZ0ludChvdXRwdXQuYW1vdW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBmZWUgPSAodG90YWxJbiAtIHRvdGFsT3V0KS50b1N0cmluZygpO1xuXG4gICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMuX3R4RGF0YS5vdXRwdXRzLm1hcCgobykgPT4gKHtcbiAgICAgIGFkZHJlc3M6IG8uYWRkcmVzcyxcbiAgICAgIGFtb3VudDogby5hbW91bnQsXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLl90eERhdGEuaWQgfHwgJycsXG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU2VuZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQ6IHRvdGFsT3V0LnRvU3RyaW5nKCksXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5fdHhEYXRhLmZlZSB8fCBmZWUgfSxcbiAgICAgIGlucHV0czogdGhpcy5fdHhEYXRhLmlucHV0cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gdG8gdGhlIEthc3BhIFJFU1QgQVBJIEpTT04gc3RyaW5nLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSB3aXJlIGZvcm1hdCBhY2NlcHRlZCBieSB0aGUgS2FzcGEgbm9kZSBSRVNUIEFQSSBmb3IgYnJvYWRjYXN0aW5nLlxuICAgKiBVbnNpZ25lZCB0cmFuc2FjdGlvbnMgKHNpZ25hdHVyZVNjcmlwdCA9IFwiXCIpIHVzZSB0aGlzIHNhbWUgc3RydWN0dXJlOyBvbmNlXG4gICAqIGFsbCBpbnB1dHMgYXJlIHNpZ25lZCB0aGUgc2FtZSBmb3JtYXQgaXMgc3VibWl0dGVkIHRvIHRoZSBub2RlLlxuICAgKlxuICAgKiBOb3RlOiBpbnB1dHMgaW4gdGhpcyBmb3JtYXQgY2Fycnkgb25seSBgcHJldmlvdXNPdXRwb2ludGAsIGBzaWduYXR1cmVTY3JpcHRgLFxuICAgKiBgc2VxdWVuY2VgLCBhbmQgYHNpZ09wQ291bnRgLiBUaGUgYGFtb3VudGAgYW5kIGBzY3JpcHRQdWJsaWNLZXlgIGZpZWxkcyBuZWVkZWRcbiAgICogZm9yIHNpZ2hhc2ggY29tcHV0YXRpb24gYXJlIE5PVCBwcmVzZW50IGhlcmUg4oCUIHRoZXkgbGl2ZSBpbiBgdG9Kc29uKClgLlxuICAgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgdmVyc2lvbjogdGhpcy5fdHhEYXRhLnZlcnNpb24sXG4gICAgICBpbnB1dHM6IHRoaXMuX3R4RGF0YS5pbnB1dHMubWFwKChpbnB1dCkgPT4gKHtcbiAgICAgICAgcHJldmlvdXNPdXRwb2ludDoge1xuICAgICAgICAgIHRyYW5zYWN0aW9uSWQ6IGlucHV0LnRyYW5zYWN0aW9uSWQsXG4gICAgICAgICAgaW5kZXg6IGlucHV0LnRyYW5zYWN0aW9uSW5kZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHNpZ25hdHVyZVNjcmlwdDogaW5wdXQuc2lnbmF0dXJlU2NyaXB0IHx8ICcnLFxuICAgICAgICBzZXF1ZW5jZTogTnVtYmVyKGlucHV0LnNlcXVlbmNlID8/IDApLFxuICAgICAgICBzaWdPcENvdW50OiBpbnB1dC5zaWdPcENvdW50ID8/IDEsXG4gICAgICB9KSksXG4gICAgICBvdXRwdXRzOiB0aGlzLl90eERhdGEub3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgICAgYW1vdW50OiBOdW1iZXIob3V0cHV0LmFtb3VudCksXG4gICAgICAgIHNjcmlwdFB1YmxpY0tleToge1xuICAgICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgICAgc2NyaXB0UHVibGljS2V5OiBvdXRwdXQuc2NyaXB0UHVibGljS2V5IHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgfSkpLFxuICAgICAgbG9ja1RpbWU6IE51bWJlcih0aGlzLl90eERhdGEubG9ja1RpbWUgPz8gMCksXG4gICAgICBzdWJuZXR3b3JrSWQ6IHRoaXMuX3R4RGF0YS5zdWJuZXR3b3JrSWQgPz8gJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgZ2FzOiAwLFxuICAgICAgcGF5bG9hZDogdGhpcy5fdHhEYXRhLnBheWxvYWQgPz8gJycsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRyYW5zYWN0aW9uIHRvIGhleCB1c2luZyB0aGUgaW50ZXJuYWwgYEthc3BhVHJhbnNhY3Rpb25EYXRhYCBmb3JtYXQuXG4gICAqXG4gICAqIFRoaXMgaGV4IGlzIHVzZWQgZm9yIFNESy1pbnRlcm5hbCByb3VuZC10cmlwcyAoYnVpbGRlciBzZXJpYWxpc2F0aW9uIC8gZGVzZXJpYWxpc2F0aW9uKVxuICAgKiBiZWNhdXNlIHRoZSBpbnRlcm5hbCBmb3JtYXQgcHJlc2VydmVzIGBhbW91bnRgIGFuZCBgc2NyaXB0UHVibGljS2V5YCBvbiBpbnB1dHMsXG4gICAqIHdoaWNoIGFyZSByZXF1aXJlZCBmb3Igc2lnaGFzaCBjb21wdXRhdGlvbiBidXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBSRVNUIEFQSSBmb3JtYXQuXG4gICAqXG4gICAqIFVzZSBgQnVmZmVyLmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSkudG9TdHJpbmcoJ2hleCcpYCB3aGVuIHlvdSBuZWVkIHRoZSBoZXhcbiAgICogcmVwcmVzZW50YXRpb24gb2YgdGhlIGJyb2FkY2FzdCAvIEhTTSB3aXJlIGZvcm1hdC5cbiAgICovXG4gIHRvSGV4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHRoaXMuX3R4RGF0YSkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJhbnNhY3Rpb24gZGF0YSBhcyBhIHBsYWluIG9iamVjdC5cbiAgICovXG4gIHRvSnNvbigpOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fdHhEYXRhIH07XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgZnJvbSBoZXguXG4gICAqL1xuICBzdGF0aWMgZnJvbUhleChjb2luOiBzdHJpbmcsIGhleDogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oY29pbiwganNvbik7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgZnJvbSBKU09OIHN0cmluZyBvciBvYmplY3QuXG4gICAqL1xuICBzdGF0aWMgZnJvbUpzb24oY29pbjogc3RyaW5nLCBkYXRhOiBzdHJpbmcgfCBLYXNwYVRyYW5zYWN0aW9uRGF0YSk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eERhdGE6IEthc3BhVHJhbnNhY3Rpb25EYXRhID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbihjb2luLCB0eERhdGEpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldCBzaWduYXR1cmUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90eERhdGEuaW5wdXRzLm1hcCgoaSkgPT4gaS5zaWduYXR1cmVTY3JpcHQgfHwgJycpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGNhblNpZ24oX2tleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhpcyB0cmFuc2FjdGlvbiB0byBhIFBTS1QgaW4gU0lHTkVSIHJvbGUuXG4gICAqXG4gICAqIFRoZSBQU0tUIGlzIHBvcHVsYXRlZCB3aXRoIFVUWE8gZGF0YSBmcm9tIGVhY2ggaW5wdXQgc28gdGhhdCBzaWdoYXNoXG4gICAqIGNvbXB1dGF0aW9uIGlzIHBvc3NpYmxlIGltbWVkaWF0ZWx5LiBBbnkgZXhpc3RpbmcgYHNpZ25hdHVyZVNjcmlwdGAgb24gYW5cbiAgICogaW5wdXQgaXMgY2FycmllZCBpbnRvIHRoZSBQU0tUIGFzIGBmaW5hbFNjcmlwdFNpZ2AuXG4gICAqXG4gICAqIFR5cGljYWwgdXNlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBwc2t0ID0gdHgudG9Qc2t0KClcbiAgICogICAuc2lnbihwcml2YXRlS2V5KVxuICAgKiAgIC50b0ZpbmFsaXplcigpXG4gICAqICAgLmZpbmFsaXplKClcbiAgICogICAudG9FeHRyYWN0b3IoKTtcbiAgICogY29uc3QgYnJvYWRjYXN0SnNvbiA9IHBza3QuZXh0cmFjdCgpO1xuICAgKiBgYGBcbiAgICovXG4gIHRvUHNrdCgpOiBQc2t0IHtcbiAgICByZXR1cm4gUHNrdC5mcm9tVHhEYXRhKHRoaXMuX3R4RGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25zdHJ1Y3QgYSBUcmFuc2FjdGlvbiBmcm9tIGEgUFNLVCAoYW55IHJvbGUpLlxuICAgKlxuICAgKiBgZmluYWxTY3JpcHRTaWdgIGZyb20gZWFjaCBQU0tUIGlucHV0IGlzIG1hcHBlZCB0byBgc2lnbmF0dXJlU2NyaXB0YCBzb1xuICAgKiB0aGF0IHRoZSByZXN1bHRpbmcgdHJhbnNhY3Rpb24gaXMgc2lnbmVkIGlmIHRoZSBQU0tUIGhhcyBiZWVuIGZpbmFsaXNlZC5cbiAgICpcbiAgICogQHBhcmFtIGNvaW4gIENvaW4gbmFtZSBzdHJpbmcgKGUuZy4gJ2thc3BhJywgJ3RrYXNwYScpXG4gICAqIEBwYXJhbSBwc2t0ICBBIFBza3QgaW5zdGFuY2UgKHR5cGljYWxseSBhdCBGSU5BTElaRVIgb3IgRVhUUkFDVE9SIHJvbGUpXG4gICAqL1xuICBzdGF0aWMgZnJvbVBza3QoY29pbjogc3RyaW5nLCBwc2t0OiBQc2t0KTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oY29pbiwgcHNrdC50b1R4RGF0YSgpKTtcbiAgfVxufVxuIl19
|
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
import { BaseTransactionBuilder, BaseTransaction, BaseKey
|
|
1
|
+
import { BaseTransactionBuilder, BaseTransaction, BaseKey } from '@bitgo-beta/sdk-core';
|
|
2
2
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
3
|
import BigNumber from 'bignumber.js';
|
|
4
4
|
import { Transaction } from './transaction';
|
|
5
5
|
import { KaspaUtxoInput, KaspaTransactionOutput } from './iface';
|
|
6
|
-
|
|
7
|
-
publicKey: BasePublicKey;
|
|
8
|
-
signature: Buffer;
|
|
9
|
-
}
|
|
6
|
+
import { Pskt } from './pskt';
|
|
10
7
|
export declare class TransactionBuilder extends BaseTransactionBuilder {
|
|
11
8
|
protected _transaction: Transaction;
|
|
12
9
|
protected _inputs: KaspaUtxoInput[];
|
|
13
10
|
protected _outputs: KaspaTransactionOutput[];
|
|
14
11
|
protected _fee: string;
|
|
15
12
|
protected _fromAddress: string;
|
|
16
|
-
protected _signatures: KaspaSignature[];
|
|
17
13
|
constructor(coinConfig: Readonly<CoinConfig>);
|
|
18
14
|
/** @inheritDoc */
|
|
19
15
|
protected get transaction(): BaseTransaction;
|
|
@@ -39,16 +35,6 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
|
|
|
39
35
|
* Add multiple UTXO inputs.
|
|
40
36
|
*/
|
|
41
37
|
addInputs(utxos: KaspaUtxoInput[]): this;
|
|
42
|
-
/**
|
|
43
|
-
* Add an externally-produced signature (from TSS/MPC signing) to the transaction.
|
|
44
|
-
* The signature will be applied to all inputs during build().
|
|
45
|
-
*
|
|
46
|
-
* This follows the same pattern as ADA's TransactionBuilder.addSignature().
|
|
47
|
-
*
|
|
48
|
-
* @param publicKey The compressed secp256k1 public key that produced the signature
|
|
49
|
-
* @param signature The 64-byte Schnorr signature buffer
|
|
50
|
-
*/
|
|
51
|
-
addSignature(publicKey: BasePublicKey, signature: Buffer): void;
|
|
52
38
|
/** @inheritDoc */
|
|
53
39
|
protected fromImplementation(rawTransaction: string): Transaction;
|
|
54
40
|
/** @inheritDoc */
|
|
@@ -69,6 +55,26 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
|
|
|
69
55
|
validateRawTransaction(rawTransaction: string): void;
|
|
70
56
|
/** @inheritDoc */
|
|
71
57
|
validateValue(value: BigNumber): void;
|
|
58
|
+
/**
|
|
59
|
+
* Build the transaction and return it as an unsigned PSKT in UPDATER role.
|
|
60
|
+
*
|
|
61
|
+
* The PSKT has all inputs and outputs populated with UTXO data but no
|
|
62
|
+
* signatures. It is ready to be handed to a signer (HSM, hardware wallet,
|
|
63
|
+
* or MPCv2 session) via `pskt.toSigner().sign(key)` or
|
|
64
|
+
* `pskt.toSigner().addSignature(...)`.
|
|
65
|
+
*
|
|
66
|
+
* Example:
|
|
67
|
+
* ```ts
|
|
68
|
+
* const pskt = await builder.toPskt();
|
|
69
|
+
* const broadcastJson = pskt
|
|
70
|
+
* .toSigner()
|
|
71
|
+
* .sign(privateKey)
|
|
72
|
+
* .toFinalizer()
|
|
73
|
+
* .finalize()
|
|
74
|
+
* .toExtractor()
|
|
75
|
+
* .extract();
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
toPskt(): Promise<Pskt>;
|
|
72
79
|
}
|
|
73
|
-
export {};
|
|
74
80
|
//# sourceMappingURL=transactionBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,OAAO,EAAgB,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAwB,cAAc,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAIvF,OAAO,EAAE,IAAI,EAAyB,MAAM,QAAQ,CAAC;AAErD,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC5D,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,CAAM;IACzC,SAAS,CAAC,QAAQ,EAAE,sBAAsB,EAAE,CAAM;IAClD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAe;IACrC,SAAS,CAAC,YAAY,SAAM;gBAEhB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK5C,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,eAAe,CAE3C;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,EAAE,EAAE,eAAe,EAE5C;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ7B;;OAEG;IACH,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQzC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKtB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAQpC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAKxC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IASjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;IAgB/D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,eAAe;IAU/D,kBAAkB;IAClB,mBAAmB,CAAC,YAAY,CAAC,EAAE,eAAe,GAAG,IAAI;IASzD,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIvC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMnD,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAQpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC;;;;;;;;;;;;;;;;;;;OAmBG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CA8B9B"}
|