@bitgo/sdk-coin-flrp 1.6.1 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/lib/ExportInCTxBuilder.d.ts +5 -13
- package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ExportInCTxBuilder.js +24 -64
- package/dist/src/lib/ExportInPTxBuilder.d.ts +8 -26
- package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ExportInPTxBuilder.js +84 -181
- package/dist/src/lib/ImportInCTxBuilder.d.ts +7 -20
- package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ImportInCTxBuilder.js +80 -167
- package/dist/src/lib/ImportInPTxBuilder.d.ts +28 -13
- package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ImportInPTxBuilder.js +136 -105
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts +0 -6
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicInCTransactionBuilder.js +1 -14
- package/dist/src/lib/atomicTransactionBuilder.d.ts +50 -24
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +127 -187
- package/dist/src/lib/iface.d.ts +31 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +9 -2
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +0 -2
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +1 -7
- package/dist/src/lib/transaction.d.ts +10 -6
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +10 -13
- package/dist/src/lib/transactionBuilder.d.ts +24 -16
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +46 -28
- package/dist/src/lib/utils.d.ts +31 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +71 -1
- package/dist/test/resources/account.d.ts +30 -0
- package/dist/test/resources/account.d.ts.map +1 -1
- package/dist/test/resources/account.js +27 -2
- package/dist/test/resources/transactionData/exportInC.d.ts +30 -0
- package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -1
- package/dist/test/resources/transactionData/exportInC.js +32 -13
- package/dist/test/resources/transactionData/exportInP.d.ts +39 -48
- package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -1
- package/dist/test/resources/transactionData/exportInP.js +70 -109
- package/dist/test/resources/transactionData/importInC.d.ts +39 -10
- package/dist/test/resources/transactionData/importInC.d.ts.map +1 -1
- package/dist/test/resources/transactionData/importInC.js +101 -25
- package/dist/test/resources/transactionData/importInP.d.ts +46 -15
- package/dist/test/resources/transactionData/importInP.d.ts.map +1 -1
- package/dist/test/resources/transactionData/importInP.js +65 -39
- package/dist/test/unit/flrp.js +15 -12
- package/dist/test/unit/lib/exportInCTxBuilder.js +32 -31
- package/dist/test/unit/lib/exportInPTxBuilder.js +112 -246
- package/dist/test/unit/lib/importInCTxBuilder.js +157 -353
- package/dist/test/unit/lib/importInPTxBuilder.js +227 -222
- package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -1
- package/dist/test/unit/lib/signFlowTestSuit.js +1 -1
- package/dist/test/unit/lib/signatureIndex.d.ts +13 -0
- package/dist/test/unit/lib/signatureIndex.d.ts.map +1 -0
- package/dist/test/unit/lib/signatureIndex.js +591 -0
- package/dist/test/unit/lib/transactionBuilderFactory.js +2 -2
- package/dist/test/unit/lib/utils.js +94 -32
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
|
@@ -12,23 +12,42 @@ const iface_1 = require("./iface");
|
|
|
12
12
|
class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
|
|
13
13
|
constructor(_coinConfig) {
|
|
14
14
|
super(_coinConfig);
|
|
15
|
-
// For Import INTO P-chain:
|
|
16
|
-
// - external chain (source) is C-chain
|
|
17
|
-
// - blockchain ID (destination) is P-chain
|
|
18
15
|
this._externalChainId = utils_1.default.cb58Decode(this.transaction._network.cChainBlockchainID);
|
|
19
|
-
// P-chain blockchain ID (from network config - typically all zeros for primary network)
|
|
20
16
|
this.transaction._blockchainID = Buffer.from(utils_1.default.cb58Decode(this.transaction._network.blockchainID)).toString('hex');
|
|
21
17
|
}
|
|
22
18
|
get transactionType() {
|
|
23
19
|
return sdk_core_1.TransactionType.Import;
|
|
24
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* @param {string | string[]} senderPubKey - C-chain address(es) with C- prefix
|
|
23
|
+
* @throws {BuildTransactionError} if any address is not a C-chain address
|
|
24
|
+
*/
|
|
25
|
+
fromPubKey(senderPubKey) {
|
|
26
|
+
const pubKeys = Array.isArray(senderPubKey) ? senderPubKey : [senderPubKey];
|
|
27
|
+
const invalidAddress = pubKeys.find((addr) => !addr.startsWith('C-'));
|
|
28
|
+
if (invalidAddress) {
|
|
29
|
+
throw new sdk_core_1.BuildTransactionError(`Invalid fromAddress: expected C-chain address (C-...), got ${invalidAddress}`);
|
|
30
|
+
}
|
|
31
|
+
this.transaction._fromAddresses = pubKeys.map((addr) => utils_1.default.parseAddress(addr));
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @param {string[]} addresses - Array of P-chain addresses (bech32 format with P- prefix)
|
|
36
|
+
* @throws {BuildTransactionError} if any address is not a P-chain address
|
|
37
|
+
*/
|
|
38
|
+
to(addresses) {
|
|
39
|
+
const invalidAddress = addresses.find((addr) => !addr.startsWith('P-'));
|
|
40
|
+
if (invalidAddress) {
|
|
41
|
+
throw new sdk_core_1.BuildTransactionError(`Invalid toAddress: expected P-chain address (P-...), got ${invalidAddress}`);
|
|
42
|
+
}
|
|
43
|
+
this.transaction._to = addresses.map((addr) => utils_1.default.parseAddress(addr));
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
25
46
|
initBuilder(tx, rawBytes, parsedCredentials) {
|
|
26
47
|
const importTx = tx;
|
|
27
48
|
if (!this.verifyTxType(importTx._type)) {
|
|
28
49
|
throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
|
|
29
50
|
}
|
|
30
|
-
// The regular change output is the tx output in Import tx.
|
|
31
|
-
// It's expected to have only one output with the addresses of the sender.
|
|
32
51
|
const outputs = importTx.baseTx.outputs;
|
|
33
52
|
if (outputs.length !== 1) {
|
|
34
53
|
throw new sdk_core_1.BuildTransactionError('Transaction can have one external output');
|
|
@@ -40,38 +59,31 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
40
59
|
}
|
|
41
60
|
const transferOutput = output.output;
|
|
42
61
|
const outputOwners = transferOutput.outputOwners;
|
|
43
|
-
// Set locktime from output
|
|
44
62
|
this.transaction._locktime = outputOwners.locktime.value();
|
|
45
|
-
// Set threshold from output
|
|
46
63
|
this.transaction._threshold = outputOwners.threshold.value();
|
|
47
|
-
// Convert output addresses to buffers and set as fromAddresses
|
|
48
64
|
this.transaction._fromAddresses = outputOwners.addrs.map((addr) => Buffer.from(addr.toBytes()));
|
|
49
|
-
// Set external chain ID from the source chain
|
|
50
65
|
this._externalChainId = Buffer.from(importTx.sourceChain.toBytes());
|
|
51
|
-
|
|
52
|
-
this.transaction._utxos = this.recoverUtxos(importTx.ins);
|
|
53
|
-
// Calculate and set fee from input/output difference
|
|
66
|
+
this.transaction._utxos = this.recoverUtxos(importTx.ins, outputOwners.addrs);
|
|
54
67
|
const totalInputAmount = importTx.ins.reduce((sum, input) => sum + input.amount(), BigInt(0));
|
|
55
68
|
const outputAmount = transferOutput.amount();
|
|
56
69
|
const fee = totalInputAmount - outputAmount;
|
|
57
70
|
this.transaction._fee.fee = fee.toString();
|
|
58
|
-
// Use credentials passed from TransactionBuilderFactory (properly extracted using codec)
|
|
59
71
|
const credentials = parsedCredentials || [];
|
|
60
72
|
const hasCredentials = credentials.length > 0;
|
|
61
|
-
// If there are credentials, store the original bytes to preserve exact format
|
|
62
73
|
if (rawBytes && hasCredentials) {
|
|
63
74
|
this.transaction._rawSignedBytes = rawBytes;
|
|
64
75
|
}
|
|
65
|
-
|
|
66
|
-
// Match avaxp behavior: dynamic ordering based on addressesIndex from UTXO
|
|
67
|
-
// Use centralized methods for credential and AddressMap creation
|
|
76
|
+
this.computeAddressesIndexFromParsed();
|
|
68
77
|
const txCredentials = credentials.length > 0
|
|
69
78
|
? credentials
|
|
70
|
-
: this.transaction._utxos.map((utxo) =>
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const addressMaps = this.transaction._utxos.map((utxo) =>
|
|
79
|
+
: this.transaction._utxos.map((utxo) => {
|
|
80
|
+
const utxoThreshold = utxo.threshold || this.transaction._threshold;
|
|
81
|
+
return this.createCredentialForUtxo(utxo, utxoThreshold);
|
|
82
|
+
});
|
|
83
|
+
const addressMaps = this.transaction._utxos.map((utxo) => {
|
|
84
|
+
const utxoThreshold = utxo.threshold || this.transaction._threshold;
|
|
85
|
+
return this.createAddressMapForUtxo(utxo, utxoThreshold);
|
|
86
|
+
});
|
|
75
87
|
const unsignedTx = new flarejs_1.UnsignedTx(importTx, [], new flarejs_1.utils.AddressMaps(addressMaps), txCredentials);
|
|
76
88
|
this.transaction.setTransaction(unsignedTx);
|
|
77
89
|
return this;
|
|
@@ -83,110 +95,129 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
83
95
|
return ImportInPTxBuilder.verifyTxType(txnType);
|
|
84
96
|
}
|
|
85
97
|
/**
|
|
86
|
-
* Build the import transaction for P-chain
|
|
98
|
+
* Build the import transaction for P-chain (importing FROM C-chain)
|
|
87
99
|
* @protected
|
|
88
100
|
*/
|
|
89
|
-
buildFlareTransaction() {
|
|
90
|
-
// if tx has credentials, tx shouldn't change
|
|
101
|
+
async buildFlareTransaction() {
|
|
91
102
|
if (this.transaction.hasCredentials)
|
|
92
103
|
return;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const fee = BigInt(this.transaction.fee.fee);
|
|
96
|
-
// Validate that totalAmount is sufficient to cover the fee (matching AVAX validation)
|
|
97
|
-
// This ensures we don't create transactions with insufficient funds
|
|
98
|
-
if (totalAmount < fee) {
|
|
99
|
-
throw new sdk_core_1.BuildTransactionError(`Utxo outputs get ${totalAmount.toString()} and ${fee.toString()} is required`);
|
|
100
|
-
}
|
|
101
|
-
const outputAmount = totalAmount - fee;
|
|
102
|
-
// Create the output for P-chain (TransferableOutput with TransferOutput)
|
|
103
|
-
const assetIdBytes = new Uint8Array(Buffer.from(this.transaction._assetId, 'hex'));
|
|
104
|
-
// Create OutputOwners with the P-chain addresses (sorted by byte value as per AVAX protocol)
|
|
105
|
-
const sortedAddresses = [...this.transaction._fromAddresses].sort((a, b) => Buffer.compare(a, b));
|
|
106
|
-
const outputOwners = new flarejs_1.OutputOwners(new flarejs_1.BigIntPr(this.transaction._locktime), new flarejs_1.Int(this.transaction._threshold), sortedAddresses.map((addr) => new flarejs_1.Address(addr)));
|
|
107
|
-
const transferOutput = new flarejs_1.TransferOutput(new flarejs_1.BigIntPr(outputAmount), outputOwners);
|
|
108
|
-
const output = new flarejs_1.TransferableOutput(new flarejs_1.Id(assetIdBytes), transferOutput);
|
|
109
|
-
// Create the BaseTx for the P-chain import transaction
|
|
110
|
-
const baseTx = new flarejs_1.avaxSerial.BaseTx(new flarejs_1.Int(this.transaction._networkID), new flarejs_1.Id(Buffer.from(this.transaction._blockchainID, 'hex')), [output], // outputs
|
|
111
|
-
[], // inputs (empty for import - inputs come from importedInputs)
|
|
112
|
-
new flarejs_1.Bytes(new Uint8Array(0)) // empty memo
|
|
113
|
-
);
|
|
114
|
-
// Create the P-chain import transaction using pvmSerial.ImportTx
|
|
115
|
-
const importTx = new flarejs_1.pvmSerial.ImportTx(baseTx, new flarejs_1.Id(this._externalChainId), // sourceChain (C-chain)
|
|
116
|
-
inputs // importedInputs (ins)
|
|
117
|
-
);
|
|
118
|
-
// Create AddressMaps based on signature slot order (matching credential order), not sorted addresses
|
|
119
|
-
// This matches the approach used in credentials: addressesIndex determines signature order
|
|
120
|
-
// AddressMaps should map addresses to signature slots in the same order as credentials
|
|
121
|
-
// Use centralized method for AddressMap creation
|
|
122
|
-
const addressMaps = credentials.map((credential, credIdx) => this.createAddressMapForUtxo(this.transaction._utxos[credIdx], this.transaction._threshold));
|
|
123
|
-
// Create unsigned transaction
|
|
124
|
-
const unsignedTx = new flarejs_1.UnsignedTx(importTx, [], // Empty UTXOs array
|
|
125
|
-
new flarejs_1.utils.AddressMaps(addressMaps), credentials);
|
|
126
|
-
this.transaction.setTransaction(unsignedTx);
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Create inputs from UTXOs for P-chain import
|
|
130
|
-
* @returns inputs, credentials, and total amount
|
|
131
|
-
*/
|
|
132
|
-
createImportInputs() {
|
|
133
|
-
const sender = this.transaction._fromAddresses.slice();
|
|
134
|
-
if (this.recoverSigner) {
|
|
135
|
-
// switch first and last signer
|
|
136
|
-
const tmp = sender.pop();
|
|
137
|
-
sender.push(sender[0]);
|
|
138
|
-
if (tmp) {
|
|
139
|
-
sender[0] = tmp;
|
|
140
|
-
}
|
|
104
|
+
if (!this.transaction._utxos || this.transaction._utxos.length === 0) {
|
|
105
|
+
throw new sdk_core_1.BuildTransactionError('UTXOs are required');
|
|
141
106
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
this.transaction.
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
107
|
+
if (!this.transaction._feeState) {
|
|
108
|
+
throw new sdk_core_1.BuildTransactionError('Fee state is required');
|
|
109
|
+
}
|
|
110
|
+
if (!this.transaction._context) {
|
|
111
|
+
throw new sdk_core_1.BuildTransactionError('context is required');
|
|
112
|
+
}
|
|
113
|
+
if (!this.transaction._fromAddresses || this.transaction._fromAddresses.length === 0) {
|
|
114
|
+
throw new sdk_core_1.BuildTransactionError('fromAddresses are required');
|
|
115
|
+
}
|
|
116
|
+
if (!this.transaction._to || this.transaction._to.length === 0) {
|
|
117
|
+
throw new sdk_core_1.BuildTransactionError('toAddresses are required');
|
|
118
|
+
}
|
|
119
|
+
if (!this.transaction._threshold) {
|
|
120
|
+
throw new sdk_core_1.BuildTransactionError('threshold is required');
|
|
121
|
+
}
|
|
122
|
+
if (this.transaction._locktime === undefined) {
|
|
123
|
+
throw new sdk_core_1.BuildTransactionError('locktime is required');
|
|
124
|
+
}
|
|
125
|
+
this.computeAddressesIndex();
|
|
126
|
+
this.validateUtxoAddresses();
|
|
127
|
+
const assetId = utils_1.default.cb58Encode(Buffer.from(this.transaction._assetId, 'hex'));
|
|
128
|
+
const nativeUtxos = utils_1.default.decodedToUtxos(this.transaction._utxos, assetId);
|
|
129
|
+
const totalUtxoAmount = nativeUtxos.reduce((sum, utxo) => {
|
|
130
|
+
const output = utxo.output;
|
|
131
|
+
return sum + output.amount();
|
|
132
|
+
}, BigInt(0));
|
|
133
|
+
if (totalUtxoAmount === BigInt(0)) {
|
|
134
|
+
throw new sdk_core_1.BuildTransactionError('UTXOs have zero total balance');
|
|
135
|
+
}
|
|
136
|
+
const toAddresses = this.transaction._to.map((addr) => Buffer.from(addr));
|
|
137
|
+
const fromAddresses = this.transaction._fromAddresses.map((addr) => Buffer.from(addr));
|
|
138
|
+
const invalidToAddress = toAddresses.find((addr) => addr.length !== 20);
|
|
139
|
+
if (invalidToAddress) {
|
|
140
|
+
throw new sdk_core_1.BuildTransactionError(`Invalid toAddress length: expected 20 bytes, got ${invalidToAddress.length}`);
|
|
141
|
+
}
|
|
142
|
+
const invalidFromAddress = fromAddresses.find((addr) => addr.length !== 20);
|
|
143
|
+
if (invalidFromAddress) {
|
|
144
|
+
throw new sdk_core_1.BuildTransactionError(`Invalid fromAddress length: expected 20 bytes, got ${invalidFromAddress.length}`);
|
|
145
|
+
}
|
|
146
|
+
const importTx = flarejs_1.pvm.e.newImportTx({
|
|
147
|
+
feeState: this.transaction._feeState,
|
|
148
|
+
fromAddressesBytes: fromAddresses,
|
|
149
|
+
sourceChainId: this.transaction._network.cChainBlockchainID,
|
|
150
|
+
toAddressesBytes: toAddresses,
|
|
151
|
+
utxos: nativeUtxos,
|
|
152
|
+
threshold: this.transaction._threshold,
|
|
153
|
+
locktime: this.transaction._locktime,
|
|
154
|
+
}, this.transaction._context);
|
|
155
|
+
const flareUnsignedTx = importTx;
|
|
156
|
+
const innerTx = flareUnsignedTx.getTx();
|
|
157
|
+
const utxosWithIndex = innerTx.ins.map((input, idx) => {
|
|
158
|
+
const originalUtxo = this.transaction._utxos[idx];
|
|
159
|
+
return {
|
|
160
|
+
...originalUtxo,
|
|
161
|
+
addressesIndex: originalUtxo.addressesIndex,
|
|
162
|
+
addresses: originalUtxo.addresses,
|
|
163
|
+
threshold: originalUtxo.threshold || this.transaction._threshold,
|
|
164
|
+
};
|
|
163
165
|
});
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
166
|
+
this.transaction._utxos = utxosWithIndex;
|
|
167
|
+
const txCredentials = utxosWithIndex.map((utxo) => this.createCredentialForUtxo(utxo, utxo.threshold));
|
|
168
|
+
const addressMaps = utxosWithIndex.map((utxo) => this.createAddressMapForUtxo(utxo, utxo.threshold));
|
|
169
|
+
const fixedUnsignedTx = new flarejs_1.UnsignedTx(innerTx, [], new flarejs_1.utils.AddressMaps(addressMaps), txCredentials);
|
|
170
|
+
this.transaction.setTransaction(fixedUnsignedTx);
|
|
169
171
|
}
|
|
170
172
|
/**
|
|
171
|
-
* Recover UTXOs from imported inputs
|
|
173
|
+
* Recover UTXOs from imported inputs.
|
|
174
|
+
* Uses output addresses as proxy for UTXO addresses since they should be the same
|
|
175
|
+
* addresses controlling the multisig (just potentially in different on-chain order).
|
|
176
|
+
*
|
|
172
177
|
* @param importedInputs Array of transferable inputs
|
|
178
|
+
* @param outputAddrs Output owner addresses to use as proxy for UTXO addresses
|
|
173
179
|
* @returns Array of decoded UTXO objects
|
|
174
180
|
*/
|
|
175
|
-
recoverUtxos(importedInputs) {
|
|
181
|
+
recoverUtxos(importedInputs, outputAddrs) {
|
|
182
|
+
const proxyAddresses = outputAddrs
|
|
183
|
+
? outputAddrs.map((addr) => utils_1.default.addressToString(this.transaction._network.hrp, this.transaction._network.alias, Buffer.from(addr.toBytes())))
|
|
184
|
+
: [];
|
|
176
185
|
return importedInputs.map((input) => {
|
|
177
186
|
const utxoId = input.utxoID;
|
|
178
187
|
const transferInput = input.input;
|
|
188
|
+
const sigIndicies = transferInput.sigIndicies();
|
|
179
189
|
const utxo = {
|
|
180
190
|
outputID: iface_1.SECP256K1_Transfer_Output,
|
|
181
191
|
amount: transferInput.amount().toString(),
|
|
182
192
|
txid: utils_1.default.cb58Encode(Buffer.from(utxoId.txID.toBytes())),
|
|
183
193
|
outputidx: utxoId.outputIdx.value().toString(),
|
|
184
|
-
threshold: this.transaction._threshold,
|
|
185
|
-
addresses:
|
|
194
|
+
threshold: sigIndicies.length || this.transaction._threshold,
|
|
195
|
+
addresses: proxyAddresses,
|
|
196
|
+
addressesIndex: sigIndicies,
|
|
186
197
|
};
|
|
187
198
|
return utxo;
|
|
188
199
|
});
|
|
189
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Compute proper addressesIndex from parsed transaction's sigIndicies.
|
|
203
|
+
* Following AVAX P approach: addressesIndex[senderIdx] = position of sender in UTXO addresses.
|
|
204
|
+
*
|
|
205
|
+
* For parsed transactions:
|
|
206
|
+
* - sigIndicies tells us which UTXO positions need to sign for each slot
|
|
207
|
+
* - We use output addresses as proxy for UTXO addresses
|
|
208
|
+
* - We compute addressesIndex as sender -> utxo position mapping
|
|
209
|
+
*/
|
|
210
|
+
computeAddressesIndexFromParsed() {
|
|
211
|
+
const sender = this.transaction._fromAddresses;
|
|
212
|
+
if (!sender || sender.length === 0)
|
|
213
|
+
return;
|
|
214
|
+
this.transaction._utxos.forEach((utxo) => {
|
|
215
|
+
if (utxo.addresses && utxo.addresses.length > 0) {
|
|
216
|
+
const utxoAddresses = utxo.addresses.map((a) => utils_1.default.parseAddress(a));
|
|
217
|
+
utxo.addressesIndex = sender.map((senderAddr) => utxoAddresses.findIndex((utxoAddr) => Buffer.compare(Buffer.from(utxoAddr), Buffer.from(senderAddr)) === 0));
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
}
|
|
190
221
|
}
|
|
191
222
|
exports.ImportInPTxBuilder = ImportInPTxBuilder;
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsOENBQXVGO0FBQ3ZGLHlFQUFzRTtBQUN0RSxtREFnQitCO0FBQy9CLG9EQUE0QjtBQUM1QixtQ0FBOEY7QUFFOUYsTUFBYSxrQkFBbUIsU0FBUSxtREFBd0I7SUFDOUQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsMkJBQTJCO1FBQzNCLHVDQUF1QztRQUN2QywyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN2Rix3RkFBd0Y7UUFDeEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUM3RyxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQU0sRUFBRSxRQUFpQixFQUFFLGlCQUFnQztRQUNyRSxNQUFNLFFBQVEsR0FBRyxFQUF3QixDQUFDO1FBRTFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCwwRUFBMEU7UUFDMUUsTUFBTSxPQUFPLEdBQUcsUUFBUSxD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QUFJLEVBQUUsRUFBRSxDQUN0RCxlQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN6RzthQUNGLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBNVBELGdEQTRQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIE5vdFN1cHBvcnRlZCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vYXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIHB2bVNlcmlhbCxcbiAgYXZheFNlcmlhbCxcbiAgVW5zaWduZWRUeCxcbiAgSW50LFxuICBJZCxcbiAgVHJhbnNmZXJhYmxlSW5wdXQsXG4gIFRyYW5zZmVyYWJsZU91dHB1dCxcbiAgVHJhbnNmZXJPdXRwdXQsXG4gIFRyYW5zZmVySW5wdXQsXG4gIE91dHB1dE93bmVycyxcbiAgdXRpbHMgYXMgRmxhcmVVdGlscyxcbiAgQWRkcmVzcyxcbiAgQmlnSW50UHIsXG4gIENyZWRlbnRpYWwsXG4gIEJ5dGVzLFxufSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIEZsYXJlVHJhbnNhY3Rpb25UeXBlLCBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgY2xhc3MgSW1wb3J0SW5QVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIC8vIEZvciBJbXBvcnQgSU5UTyBQLWNoYWluOlxuICAgIC8vIC0gZXh0ZXJuYWwgY2hhaW4gKHNvdXJjZSkgaXMgQy1jaGFpblxuICAgIC8vIC0gYmxvY2tjaGFpbiBJRCAoZGVzdGluYXRpb24pIGlzIFAtY2hhaW5cbiAgICB0aGlzLl9leHRlcm5hbENoYWluSWQgPSB1dGlscy5jYjU4RGVjb2RlKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuY0NoYWluQmxvY2tjaGFpbklEKTtcbiAgICAvLyBQLWNoYWluIGJsb2NrY2hhaW4gSUQgKGZyb20gbmV0d29yayBjb25maWcgLSB0eXBpY2FsbHkgYWxsIHplcm9zIGZvciBwcmltYXJ5IG5ldHdvcmspXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklEID0gQnVmZmVyLmZyb20odXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmJsb2NrY2hhaW5JRCkpLnRvU3RyaW5nKFxuICAgICAgJ2hleCdcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkltcG9ydDtcbiAgfVxuXG4gIGluaXRCdWlsZGVyKHR4OiBUeCwgcmF3Qnl0ZXM/OiBCdWZmZXIsIHBhcnNlZENyZWRlbnRpYWxzPzogQ3JlZGVudGlhbFtdKTogdGhpcyB7XG4gICAgY29uc3QgaW1wb3J0VHggPSB0eCBhcyBwdm1TZXJpYWwuSW1wb3J0VHg7XG5cbiAgICBpZiAoIXRoaXMudmVyaWZ5VHhUeXBlKGltcG9ydFR4Ll90eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNhY3Rpb24gY2Fubm90IGJlIHBhcnNlZCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgIH1cblxuICAgIC8vIFRoZSByZWd1bGFyIGNoYW5nZSBvdXRwdXQgaXMgdGhlIHR4IG91dHB1dCBpbiBJbXBvcnQgdHguXG4gICAgLy8gSXQncyBleHBlY3RlZCB0byBoYXZlIG9ubHkgb25lIG91dHB1dCB3aXRoIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHNlbmRlci5cbiAgICBjb25zdCBvdXRwdXRzID0gaW1wb3J0VHguYmFzZVR4Lm91dHB1dHM7XG4gICAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW4gaGF2ZSBvbmUgZXh0ZXJuYWwgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXTtcbiAgICBjb25zdCBhc3NldElkID0gb3V0cHV0LmFzc2V0SWQudG9CeXRlcygpO1xuICAgIGlmIChCdWZmZXIuY29tcGFyZShhc3NldElkLCBCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkLCAnaGV4JykpICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBc3NldCBJRCBvZiB0aGUgb3V0cHV0IGRvZXMgbm90IG1hdGNoIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZmVyT3V0cHV0ID0gb3V0cHV0Lm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICBjb25zdCBvdXRwdXRPd25lcnMgPSB0cmFuc2Zlck91dHB1dC5vdXRwdXRPd25lcnM7XG5cbiAgICAvLyBTZXQgbG9ja3RpbWUgZnJvbSBvdXRwdXRcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSA9IG91dHB1dE93bmVycy5sb2NrdGltZS52YWx1ZSgpO1xuXG4gICAgLy8gU2V0IHRocmVzaG9sZCBmcm9tIG91dHB1dFxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCA9IG91dHB1dE93bmVycy50aHJlc2hvbGQudmFsdWUoKTtcblxuICAgIC8vIENvbnZlcnQgb3V0cHV0IGFkZHJlc3NlcyB0byBidWZmZXJzIGFuZCBzZXQgYXMgZnJvbUFkZHJlc3Nlc1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBvdXRwdXRPd25lcnMuYWRkcnMubWFwKChhZGRyKSA9PiBCdWZmZXIuZnJvbShhZGRyLnRvQnl0ZXMoKSkpO1xuXG4gICAgLy8gU2V0IGV4dGVybmFsIGNoYWluIElEIGZyb20gdGhlIHNvdXJjZSBjaGFpblxuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IEJ1ZmZlci5mcm9tKGltcG9ydFR4LnNvdXJjZUNoYWluLnRvQnl0ZXMoKSk7XG5cbiAgICAvLyBSZWNvdmVyIFVUWE9zIGZyb20gaW1wb3J0ZWQgaW5wdXRzXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSB0aGlzLnJlY292ZXJVdHhvcyhpbXBvcnRUeC5pbnMpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFuZCBzZXQgZmVlIGZyb20gaW5wdXQvb3V0cHV0IGRpZmZlcmVuY2VcbiAgICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gaW1wb3J0VHguaW5zLnJlZHVjZSgoc3VtLCBpbnB1dCkgPT4gc3VtICsgaW5wdXQuYW1vdW50KCksIEJpZ0ludCgwKSk7XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdHJhbnNmZXJPdXRwdXQuYW1vdW50KCk7XG4gICAgY29uc3QgZmVlID0gdG90YWxJbnB1dEFtb3VudCAtIG91dHB1dEFtb3VudDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlID0gZmVlLnRvU3RyaW5nKCk7XG5cbiAgICAvLyBVc2UgY3JlZGVudGlhbHMgcGFzc2VkIGZyb20gVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSAocHJvcGVybHkgZXh0cmFjdGVkIHVzaW5nIGNvZGVjKVxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyc2VkQ3JlZGVudGlhbHMgfHwgW107XG4gICAgY29uc3QgaGFzQ3JlZGVudGlhbHMgPSBjcmVkZW50aWFscy5sZW5ndGggPiAwO1xuXG4gICAgLy8gSWYgdGhlcmUgYXJlIGNyZWRlbnRpYWxzLCBzdG9yZSB0aGUgb3JpZ2luYWwgYnl0ZXMgdG8gcHJlc2VydmUgZXhhY3QgZm9ybWF0XG4gICAgaWYgKHJhd0J5dGVzICYmIGhhc0NyZWRlbnRpYWxzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9yYXdTaWduZWRCeXRlcyA9IHJhd0J5dGVzO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBwcm9wZXIgVW5zaWduZWRUeCB3cmFwcGVyIHdpdGggY3JlZGVudGlhbHNcbiAgICAvLyBNYXRjaCBhdmF4cCBiZWhhdmlvcjogZHluYW1pYyBvcmRlcmluZyBiYXNlZCBvbiBhZGRyZXNzZXNJbmRleCBmcm9tIFVUWE9cbiAgICAvLyBVc2UgY2VudHJhbGl6ZWQgbWV0aG9kcyBmb3IgY3JlZGVudGlhbCBhbmQgQWRkcmVzc01hcCBjcmVhdGlvblxuICAgIGNvbnN0IHR4Q3JlZGVudGlhbHMgPVxuICAgICAgY3JlZGVudGlhbHMubGVuZ3RoID4gMFxuICAgICAgICA/IGNyZWRlbnRpYWxzXG4gICAgICAgIDogdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubWFwKCh1dHhvKSA9PiB0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkpO1xuXG4gICAgLy8gQ3JlYXRlIEFkZHJlc3NNYXBzIGJhc2VkIG9uIHNpZ25hdHVyZSBzbG90IG9yZGVyIChtYXRjaGluZyBjcmVkZW50aWFsIG9yZGVyKSwgbm90IHNvcnRlZCBhZGRyZXNzZXNcbiAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGFwcHJvYWNoIHVzZWQgaW4gY3JlZGVudGlhbHM6IGFkZHJlc3Nlc0luZGV4IGRldGVybWluZXMgc2lnbmF0dXJlIG9yZGVyXG4gICAgLy8gQWRkcmVzc01hcHMgc2hvdWxkIG1hcCBhZGRyZXNzZXMgdG8gc2lnbmF0dXJlIHNsb3RzIGluIHRoZSBzYW1lIG9yZGVyIGFzIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5tYXAoKHV0eG8pID0+XG4gICAgICB0aGlzLmNyZWF0ZUFkZHJlc3NNYXBGb3JVdHhvKHV0eG8sIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZClcbiAgICApO1xuXG4gICAgY29uc3QgdW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KGltcG9ydFR4LCBbXSwgbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLCB0eENyZWRlbnRpYWxzKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odW5zaWduZWRUeCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eG5UeXBlID09PSBGbGFyZVRyYW5zYWN0aW9uVHlwZS5Qdm1JbXBvcnRUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSW1wb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eG5UeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgaW1wb3J0IHRyYW5zYWN0aW9uIGZvciBQLWNoYWluXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gaWYgdHggaGFzIGNyZWRlbnRpYWxzLCB0eCBzaG91bGRuJ3QgY2hhbmdlXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaGFzQ3JlZGVudGlhbHMpIHJldHVybjtcblxuICAgIGNvbnN0IHsgaW5wdXRzLCBjcmVkZW50aWFscywgdG90YWxBbW91bnQgfSA9IHRoaXMuY3JlYXRlSW1wb3J0SW5wdXRzKCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgZmVlIGZyb20gdHJhbnNhY3Rpb24gZmVlIHNldHRpbmdzXG4gICAgY29uc3QgZmVlID0gQmlnSW50KHRoaXMudHJhbnNhY3Rpb24uZmVlLmZlZSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IHRvdGFsQW1vdW50IGlzIHN1ZmZpY2llbnQgdG8gY292ZXIgdGhlIGZlZSAobWF0Y2hpbmcgQVZBWCB2YWxpZGF0aW9uKVxuICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBkb24ndCBjcmVhdGUgdHJhbnNhY3Rpb25zIHdpdGggaW5zdWZmaWNpZW50IGZ1bmRzXG4gICAgaWYgKHRvdGFsQW1vdW50IDwgZmVlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBVdHhvIG91dHB1dHMgZ2V0ICR7dG90YWxBbW91bnQudG9TdHJpbmcoKX0gYW5kICR7ZmVlLnRvU3RyaW5nKCl9IGlzIHJlcXVpcmVkYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdG90YWxBbW91bnQgLSBmZWU7XG5cbiAgICAvLyBDcmVhdGUgdGhlIG91dHB1dCBmb3IgUC1jaGFpbiAoVHJhbnNmZXJhYmxlT3V0cHV0IHdpdGggVHJhbnNmZXJPdXRwdXQpXG4gICAgY29uc3QgYXNzZXRJZEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcblxuICAgIC8vIENyZWF0ZSBPdXRwdXRPd25lcnMgd2l0aCB0aGUgUC1jaGFpbiBhZGRyZXNzZXMgKHNvcnRlZCBieSBieXRlIHZhbHVlIGFzIHBlciBBVkFYIHByb3RvY29sKVxuICAgIGNvbnN0IHNvcnRlZEFkZHJlc3NlcyA9IFsuLi50aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzXS5zb3J0KChhLCBiKSA9PiBCdWZmZXIuY29tcGFyZShhLCBiKSk7XG4gICAgY29uc3Qgb3V0cHV0T3duZXJzID0gbmV3IE91dHB1dE93bmVycyhcbiAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICBuZXcgSW50KHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCksXG4gICAgICBzb3J0ZWRBZGRyZXNzZXMubWFwKChhZGRyKSA9PiBuZXcgQWRkcmVzcyhhZGRyKSlcbiAgICApO1xuXG4gICAgY29uc3QgdHJhbnNmZXJPdXRwdXQgPSBuZXcgVHJhbnNmZXJPdXRwdXQobmV3IEJpZ0ludFByKG91dHB1dEFtb3VudCksIG91dHB1dE93bmVycyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFRyYW5zZmVyYWJsZU91dHB1dChuZXcgSWQoYXNzZXRJZEJ5dGVzKSwgdHJhbnNmZXJPdXRwdXQpO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBCYXNlVHggZm9yIHRoZSBQLWNoYWluIGltcG9ydCB0cmFuc2FjdGlvblxuICAgIGNvbnN0IGJhc2VUeCA9IG5ldyBhdmF4U2VyaWFsLkJhc2VUeChcbiAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lEKSxcbiAgICAgIG5ldyBJZChCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQsICdoZXgnKSksXG4gICAgICBbb3V0cHV0XSwgLy8gb3V0cHV0c1xuICAgICAgW10sIC8vIGlucHV0cyAoZW1wdHkgZm9yIGltcG9ydCAtIGlucHV0cyBjb21lIGZyb20gaW1wb3J0ZWRJbnB1dHMpXG4gICAgICBuZXcgQnl0ZXMobmV3IFVpbnQ4QXJyYXkoMCkpIC8vIGVtcHR5IG1lbW9cbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBQLWNoYWluIGltcG9ydCB0cmFuc2FjdGlvbiB1c2luZyBwdm1TZXJpYWwuSW1wb3J0VHhcbiAgICBjb25zdCBpbXBvcnRUeCA9IG5ldyBwdm1TZXJpYWwuSW1wb3J0VHgoXG4gICAgICBiYXNlVHgsXG4gICAgICBuZXcgSWQodGhpcy5fZXh0ZXJuYWxDaGFpbklkKSwgLy8gc291cmNlQ2hhaW4gKEMtY2hhaW4pXG4gICAgICBpbnB1dHMgLy8gaW1wb3J0ZWRJbnB1dHMgKGlucylcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIEFkZHJlc3NNYXBzIGJhc2VkIG9uIHNpZ25hdHVyZSBzbG90IG9yZGVyIChtYXRjaGluZyBjcmVkZW50aWFsIG9yZGVyKSwgbm90IHNvcnRlZCBhZGRyZXNzZXNcbiAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGFwcHJvYWNoIHVzZWQgaW4gY3JlZGVudGlhbHM6IGFkZHJlc3Nlc0luZGV4IGRldGVybWluZXMgc2lnbmF0dXJlIG9yZGVyXG4gICAgLy8gQWRkcmVzc01hcHMgc2hvdWxkIG1hcCBhZGRyZXNzZXMgdG8gc2lnbmF0dXJlIHNsb3RzIGluIHRoZSBzYW1lIG9yZGVyIGFzIGNyZWRlbnRpYWxzXG4gICAgLy8gVXNlIGNlbnRyYWxpemVkIG1ldGhvZCBmb3IgQWRkcmVzc01hcCBjcmVhdGlvblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gY3JlZGVudGlhbHMubWFwKChjcmVkZW50aWFsLCBjcmVkSWR4KSA9PlxuICAgICAgdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh0aGlzLnRyYW5zYWN0aW9uLl91dHhvc1tjcmVkSWR4XSwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoXG4gICAgICBpbXBvcnRUeCxcbiAgICAgIFtdLCAvLyBFbXB0eSBVVFhPcyBhcnJheVxuICAgICAgbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLFxuICAgICAgY3JlZGVudGlhbHNcbiAgICApO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih1bnNpZ25lZFR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgaW5wdXRzIGZyb20gVVRYT3MgZm9yIFAtY2hhaW4gaW1wb3J0XG4gICAqIEByZXR1cm5zIGlucHV0cywgY3JlZGVudGlhbHMsIGFuZCB0b3RhbCBhbW91bnRcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVJbXBvcnRJbnB1dHMoKToge1xuICAgIGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgIHRvdGFsQW1vdW50OiBiaWdpbnQ7XG4gIH0ge1xuICAgIGNvbnN0IHNlbmRlciA9IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMuc2xpY2UoKTtcbiAgICBpZiAodGhpcy5yZWNvdmVyU2lnbmVyKSB7XG4gICAgICAvLyBzd2l0Y2ggZmlyc3QgYW5kIGxhc3Qgc2lnbmVyXG4gICAgICBjb25zdCB0bXAgPSBzZW5kZXIucG9wKCk7XG4gICAgICBzZW5kZXIucHVzaChzZW5kZXJbMF0pO1xuICAgICAgaWYgKHRtcCkge1xuICAgICAgICBzZW5kZXJbMF0gPSB0bXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsQW1vdW50ID0gQmlnSW50KDApO1xuICAgIGNvbnN0IGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSA9IFtdO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10gPSBbXTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZvckVhY2goKHV0eG86IERlY29kZWRVdHhvT2JqKSA9PiB7XG4gICAgICBjb25zdCBhbW91bnQgPSBCaWdJbnQodXR4by5hbW91bnQpO1xuICAgICAgdG90YWxBbW91bnQgKz0gYW1vdW50O1xuXG4gICAgICAvLyBDcmVhdGUgc2lnbmF0dXJlIGluZGljZXMgZm9yIHRocmVzaG9sZFxuICAgICAgY29uc3Qgc2lnSW5kaWNlczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkOyBpKyspIHtcbiAgICAgICAgc2lnSW5kaWNlcy5wdXNoKGkpO1xuICAgICAgfVxuXG4gICAgICAvLyBVc2UgZnJvbU5hdGl2ZSB0byBjcmVhdGUgVHJhbnNmZXJhYmxlSW5wdXRcbiAgICAgIC8vIGZyb21OYXRpdmUgZXhwZWN0cyBjYjU4LWVuY29kZWQgc3RyaW5ncyBmb3IgdHhJZCBhbmQgYXNzZXRJZFxuICAgICAgY29uc3QgdHhJZENiNTggPSB1dHhvLnR4aWQ7IC8vIEFscmVhZHkgY2I1OCBlbmNvZGVkXG4gICAgICBjb25zdCBhc3NldElkQ2I1OCA9IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcblxuICAgICAgY29uc3QgdHJhbnNmZXJhYmxlSW5wdXQgPSBUcmFuc2ZlcmFibGVJbnB1dC5mcm9tTmF0aXZlKFxuICAgICAgICB0eElkQ2I1OCxcbiAgICAgICAgTnVtYmVyKHV0eG8ub3V0cHV0aWR4KSxcbiAgICAgICAgYXNzZXRJZENiNTgsXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgc2lnSW5kaWNlc1xuICAgICAgKTtcblxuICAgICAgaW5wdXRzLnB1c2godHJhbnNmZXJhYmxlSW5wdXQpO1xuXG4gICAgICAvLyBDcmVhdGUgY3JlZGVudGlhbCB3aXRoIGVtcHR5IHNpZ25hdHVyZXMgZm9yIHNsb3QgaWRlbnRpZmljYXRpb25cbiAgICAgIC8vIE1hdGNoIGF2YXhwIGJlaGF2aW9yOiBkeW5hbWljIG9yZGVyaW5nIGJhc2VkIG9uIGFkZHJlc3Nlc0luZGV4IGZyb20gVVRYT1xuICAgICAgLy8gVXNlIGNlbnRyYWxpemVkIG1ldGhvZCBmb3IgY3JlZGVudGlhbCBjcmVhdGlvblxuICAgICAgY3JlZGVudGlhbHMucHVzaCh0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0cyxcbiAgICAgIGNyZWRlbnRpYWxzLFxuICAgICAgdG90YWxBbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIFVUWE9zIGZyb20gaW1wb3J0ZWQgaW5wdXRzXG4gICAqIEBwYXJhbSBpbXBvcnRlZElucHV0cyBBcnJheSBvZiB0cmFuc2ZlcmFibGUgaW5wdXRzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGRlY29kZWQgVVRYTyBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIHJlY292ZXJVdHhvcyhpbXBvcnRlZElucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSk6IERlY29kZWRVdHhvT2JqW10ge1xuICAgIHJldHVybiBpbXBvcnRlZElucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCB1dHhvSWQgPSBpbnB1dC51dHhvSUQ7XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IHV0eG86IERlY29kZWRVdHhvT2JqID0ge1xuICAgICAgICBvdXRwdXRJRDogU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCxcbiAgICAgICAgYW1vdW50OiB0cmFuc2ZlcklucHV0LmFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICAgIHR4aWQ6IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odXR4b0lkLnR4SUQudG9CeXRlcygpKSksXG4gICAgICAgIG91dHB1dGlkeDogdXR4b0lkLm91dHB1dElkeC52YWx1ZSgpLnRvU3RyaW5nKCksXG4gICAgICAgIHRocmVzaG9sZDogdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgICBhZGRyZXNzZXM6IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubWFwKChhZGRyKSA9PlxuICAgICAgICAgIHV0aWxzLmFkZHJlc3NUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmhycCwgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5hbGlhcywgQnVmZmVyLmZyb20oYWRkcikpXG4gICAgICAgICksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHV0eG87XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsOENBQXVGO0FBQ3ZGLHlFQUFzRTtBQUN0RSxtREFTK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLG1EQUF3QjtJQUM5RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0csS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxZQUErQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksZ0NBQXFCLENB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SSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDNUcsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNRRCxnREEyUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBOb3RTdXBwb3J0ZWQsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0b21pY1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBwdm1TZXJpYWwsXG4gIFVuc2lnbmVkVHgsXG4gIFRyYW5zZmVyYWJsZUlucHV0LFxuICBUcmFuc2Zlck91dHB1dCxcbiAgVHJhbnNmZXJJbnB1dCxcbiAgdXRpbHMgYXMgRmxhcmVVdGlscyxcbiAgQ3JlZGVudGlhbCxcbiAgcHZtLFxufSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIEZsYXJlVHJhbnNhY3Rpb25UeXBlLCBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgY2xhc3MgSW1wb3J0SW5QVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IHV0aWxzLmNiNThEZWNvZGUodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5jQ2hhaW5CbG9ja2NoYWluSUQpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCA9IEJ1ZmZlci5mcm9tKHV0aWxzLmNiNThEZWNvZGUodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ibG9ja2NoYWluSUQpKS50b1N0cmluZyhcbiAgICAgICdoZXgnXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gc2VuZGVyUHViS2V5IC0gQy1jaGFpbiBhZGRyZXNzKGVzKSB3aXRoIEMtIHByZWZpeFxuICAgKiBAdGhyb3dzIHtCdWlsZFRyYW5zYWN0aW9uRXJyb3J9IGlmIGFueSBhZGRyZXNzIGlzIG5vdCBhIEMtY2hhaW4gYWRkcmVzc1xuICAgKi9cbiAgZnJvbVB1YktleShzZW5kZXJQdWJLZXk6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgcHViS2V5cyA9IEFycmF5LmlzQXJyYXkoc2VuZGVyUHViS2V5KSA/IHNlbmRlclB1YktleSA6IFtzZW5kZXJQdWJLZXldO1xuICAgIGNvbnN0IGludmFsaWRBZGRyZXNzID0gcHViS2V5cy5maW5kKChhZGRyKSA9PiAhYWRkci5zdGFydHNXaXRoKCdDLScpKTtcbiAgICBpZiAoaW52YWxpZEFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgZnJvbUFkZHJlc3M6IGV4cGVjdGVkIEMtY2hhaW4gYWRkcmVzcyAoQy0uLi4pLCBnb3QgJHtpbnZhbGlkQWRkcmVzc31gKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyA9IHB1YktleXMubWFwKChhZGRyKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYWRkcikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFkZHJlc3NlcyAtIEFycmF5IG9mIFAtY2hhaW4gYWRkcmVzc2VzIChiZWNoMzIgZm9ybWF0IHdpdGggUC0gcHJlZml4KVxuICAgKiBAdGhyb3dzIHtCdWlsZFRyYW5zYWN0aW9uRXJyb3J9IGlmIGFueSBhZGRyZXNzIGlzIG5vdCBhIFAtY2hhaW4gYWRkcmVzc1xuICAgKi9cbiAgdG8oYWRkcmVzc2VzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IGludmFsaWRBZGRyZXNzID0gYWRkcmVzc2VzLmZpbmQoKGFkZHIpID0+ICFhZGRyLnN0YXJ0c1dpdGgoJ1AtJykpO1xuICAgIGlmIChpbnZhbGlkQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCB0b0FkZHJlc3M6IGV4cGVjdGVkIFAtY2hhaW4gYWRkcmVzcyAoUC0uLi4pLCBnb3QgJHtpbnZhbGlkQWRkcmVzc31gKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdG8gPSBhZGRyZXNzZXMubWFwKChhZGRyKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYWRkcikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFR4LCByYXdCeXRlcz86IEJ1ZmZlciwgcGFyc2VkQ3JlZGVudGlhbHM/OiBDcmVkZW50aWFsW10pOiB0aGlzIHtcbiAgICBjb25zdCBpbXBvcnRUeCA9IHR4IGFzIHB2bVNlcmlhbC5JbXBvcnRUeDtcblxuICAgIGlmICghdGhpcy52ZXJpZnlUeFR5cGUoaW1wb3J0VHguX3R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0cyA9IGltcG9ydFR4LmJhc2VUeC5vdXRwdXRzO1xuICAgIGlmIChvdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2FuIGhhdmUgb25lIGV4dGVybmFsIG91dHB1dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbMF07XG4gICAgY29uc3QgYXNzZXRJZCA9IG91dHB1dC5hc3NldElkLnRvQnl0ZXMoKTtcbiAgICBpZiAoQnVmZmVyLmNvbXBhcmUoYXNzZXRJZCwgQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgQXNzZXQgSUQgb2YgdGhlIG91dHB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zlck91dHB1dCA9IG91dHB1dC5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgY29uc3Qgb3V0cHV0T3duZXJzID0gdHJhbnNmZXJPdXRwdXQub3V0cHV0T3duZXJzO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gb3V0cHV0T3duZXJzLmxvY2t0aW1lLnZhbHVlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gb3V0cHV0T3duZXJzLnRocmVzaG9sZC52YWx1ZSgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBvdXRwdXRPd25lcnMuYWRkcnMubWFwKChhZGRyKSA9PiBCdWZmZXIuZnJvbShhZGRyLnRvQnl0ZXMoKSkpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IEJ1ZmZlci5mcm9tKGltcG9ydFR4LnNvdXJjZUNoYWluLnRvQnl0ZXMoKSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcyA9IHRoaXMucmVjb3ZlclV0eG9zKGltcG9ydFR4Lmlucywgb3V0cHV0T3duZXJzLmFkZHJzKTtcblxuICAgIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSBpbXBvcnRUeC5pbnMucmVkdWNlKChzdW0sIGlucHV0KSA9PiBzdW0gKyBpbnB1dC5hbW91bnQoKSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSB0cmFuc2Zlck91dHB1dC5hbW91bnQoKTtcbiAgICBjb25zdCBmZWUgPSB0b3RhbElucHV0QW1vdW50IC0gb3V0cHV0QW1vdW50O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUgPSBmZWUudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyc2VkQ3JlZGVudGlhbHMgfHwgW107XG4gICAgY29uc3QgaGFzQ3JlZGVudGlhbHMgPSBjcmVkZW50aWFscy5sZW5ndGggPiAwO1xuXG4gICAgaWYgKHJhd0J5dGVzICYmIGhhc0NyZWRlbnRpYWxzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9yYXdTaWduZWRCeXRlcyA9IHJhd0J5dGVzO1xuICAgIH1cblxuICAgIHRoaXMuY29tcHV0ZUFkZHJlc3Nlc0luZGV4RnJvbVBhcnNlZCgpO1xuXG4gICAgY29uc3QgdHhDcmVkZW50aWFscyA9XG4gICAgICBjcmVkZW50aWFscy5sZW5ndGggPiAwXG4gICAgICAgID8gY3JlZGVudGlhbHNcbiAgICAgICAgOiB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5tYXAoKHV0eG8pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHV0eG9UaHJlc2hvbGQgPSB1dHhvLnRocmVzaG9sZCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB1dHhvVGhyZXNob2xkKTtcbiAgICAgICAgICB9KTtcblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubWFwKCh1dHhvKSA9PiB7XG4gICAgICBjb25zdCB1dHhvVGhyZXNob2xkID0gdXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkO1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQWRkcmVzc01hcEZvclV0eG8odXR4bywgdXR4b1RocmVzaG9sZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoaW1wb3J0VHgsIFtdLCBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksIHR4Q3JlZGVudGlhbHMpO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih1bnNpZ25lZFR4KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXRpYyB2ZXJpZnlUeFR5cGUodHhuVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR4blR5cGUgPT09IEZsYXJlVHJhbnNhY3Rpb25UeXBlLlB2bUltcG9ydFR4O1xuICB9XG5cbiAgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBJbXBvcnRJblBUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4blR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBpbXBvcnQgdHJhbnNhY3Rpb24gZm9yIFAtY2hhaW4gKGltcG9ydGluZyBGUk9NIEMtY2hhaW4pXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaGFzQ3JlZGVudGlhbHMpIHJldHVybjtcbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX3V0eG9zIHx8IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVVRYT3MgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fZmVlU3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ZlZSBzdGF0ZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2NvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2NvbnRleHQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzIHx8IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdmcm9tQWRkcmVzc2VzIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX3RvIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RvLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcigndG9BZGRyZXNzZXMgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0aHJlc2hvbGQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2xvY2t0aW1lIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wdXRlQWRkcmVzc2VzSW5kZXgoKTtcblxuICAgIHRoaXMudmFsaWRhdGVVdHhvQWRkcmVzc2VzKCk7XG5cbiAgICBjb25zdCBhc3NldElkID0gdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkLCAnaGV4JykpO1xuICAgIGNvbnN0IG5hdGl2ZVV0eG9zID0gdXRpbHMuZGVjb2RlZFRvVXR4b3ModGhpcy50cmFuc2FjdGlvbi5fdXR4b3MsIGFzc2V0SWQpO1xuXG4gICAgY29uc3QgdG90YWxVdHhvQW1vdW50ID0gbmF0aXZlVXR4b3MucmVkdWNlKChzdW0sIHV0eG8pID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHV0eG8ub3V0cHV0IGFzIFRyYW5zZmVyT3V0cHV0O1xuICAgICAgcmV0dXJuIHN1bSArIG91dHB1dC5hbW91bnQoKTtcbiAgICB9LCBCaWdJbnQoMCkpO1xuXG4gICAgaWYgKHRvdGFsVXR4b0Ftb3VudCA9PT0gQmlnSW50KDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVVFhPcyBoYXZlIHplcm8gdG90YWwgYmFsYW5jZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvQWRkcmVzc2VzID0gdGhpcy50cmFuc2FjdGlvbi5fdG8ubWFwKChhZGRyKSA9PiBCdWZmZXIuZnJvbShhZGRyKSk7XG4gICAgY29uc3QgZnJvbUFkZHJlc3NlcyA9IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubWFwKChhZGRyKSA9PiBCdWZmZXIuZnJvbShhZGRyKSk7XG5cbiAgICBjb25zdCBpbnZhbGlkVG9BZGRyZXNzID0gdG9BZGRyZXNzZXMuZmluZCgoYWRkcikgPT4gYWRkci5sZW5ndGggIT09IDIwKTtcbiAgICBpZiAoaW52YWxpZFRvQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCB0b0FkZHJlc3MgbGVuZ3RoOiBleHBlY3RlZCAyMCBieXRlcywgZ290ICR7aW52YWxpZFRvQWRkcmVzcy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZEZyb21BZGRyZXNzID0gZnJvbUFkZHJlc3Nlcy5maW5kKChhZGRyKSA9PiBhZGRyLmxlbmd0aCAhPT0gMjApO1xuICAgIGlmIChpbnZhbGlkRnJvbUFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZyb21BZGRyZXNzIGxlbmd0aDogZXhwZWN0ZWQgMjAgYnl0ZXMsIGdvdCAke2ludmFsaWRGcm9tQWRkcmVzcy5sZW5ndGh9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRUeCA9IHB2bS5lLm5ld0ltcG9ydFR4KFxuICAgICAge1xuICAgICAgICBmZWVTdGF0ZTogdGhpcy50cmFuc2FjdGlvbi5fZmVlU3RhdGUsXG4gICAgICAgIGZyb21BZGRyZXNzZXNCeXRlczogZnJvbUFkZHJlc3NlcyxcbiAgICAgICAgc291cmNlQ2hhaW5JZDogdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5jQ2hhaW5CbG9ja2NoYWluSUQsXG4gICAgICAgIHRvQWRkcmVzc2VzQnl0ZXM6IHRvQWRkcmVzc2VzLFxuICAgICAgICB1dHhvczogbmF0aXZlVXR4b3MsXG4gICAgICAgIHRocmVzaG9sZDogdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgICBsb2NrdGltZTogdGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUsXG4gICAgICB9LFxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fY29udGV4dFxuICAgICk7XG5cbiAgICBjb25zdCBmbGFyZVVuc2lnbmVkVHggPSBpbXBvcnRUeCBhcyBVbnNpZ25lZFR4O1xuICAgIGNvbnN0IGlubmVyVHggPSBmbGFyZVVuc2lnbmVkVHguZ2V0VHgoKSBhcyBwdm1TZXJpYWwuSW1wb3J0VHg7XG5cbiAgICBjb25zdCB1dHhvc1dpdGhJbmRleCA9IGlubmVyVHguaW5zLm1hcCgoaW5wdXQsIGlkeCkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWxVdHhvID0gdGhpcy50cmFuc2FjdGlvbi5fdXR4b3NbaWR4XTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9yaWdpbmFsVXR4byxcbiAgICAgICAgYWRkcmVzc2VzSW5kZXg6IG9yaWdpbmFsVXR4by5hZGRyZXNzZXNJbmRleCxcbiAgICAgICAgYWRkcmVzc2VzOiBvcmlnaW5hbFV0eG8uYWRkcmVzc2VzLFxuICAgICAgICB0aHJlc2hvbGQ6IG9yaWdpbmFsVXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gdXR4b3NXaXRoSW5kZXg7XG5cbiAgICBjb25zdCB0eENyZWRlbnRpYWxzID0gdXR4b3NXaXRoSW5kZXgubWFwKCh1dHhvKSA9PiB0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHV0eG8udGhyZXNob2xkKSk7XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IHV0eG9zV2l0aEluZGV4Lm1hcCgodXR4bykgPT4gdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh1dHhvLCB1dHhvLnRocmVzaG9sZCkpO1xuXG4gICAgY29uc3QgZml4ZWRVbnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoaW5uZXJUeCwgW10sIG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKSwgdHhDcmVkZW50aWFscyk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKGZpeGVkVW5zaWduZWRUeCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBVVFhPcyBmcm9tIGltcG9ydGVkIGlucHV0cy5cbiAgICogVXNlcyBvdXRwdXQgYWRkcmVzc2VzIGFzIHByb3h5IGZvciBVVFhPIGFkZHJlc3NlcyBzaW5jZSB0aGV5IHNob3VsZCBiZSB0aGUgc2FtZVxuICAgKiBhZGRyZXNzZXMgY29udHJvbGxpbmcgdGhlIG11bHRpc2lnIChqdXN0IHBvdGVudGlhbGx5IGluIGRpZmZlcmVudCBvbi1jaGFpbiBvcmRlcikuXG4gICAqXG4gICAqIEBwYXJhbSBpbXBvcnRlZElucHV0cyBBcnJheSBvZiB0cmFuc2ZlcmFibGUgaW5wdXRzXG4gICAqIEBwYXJhbSBvdXRwdXRBZGRycyBPdXRwdXQgb3duZXIgYWRkcmVzc2VzIHRvIHVzZSBhcyBwcm94eSBmb3IgVVRYTyBhZGRyZXNzZXNcbiAgICogQHJldHVybnMgQXJyYXkgb2YgZGVjb2RlZCBVVFhPIG9iamVjdHNcbiAgICovXG4gIHByaXZhdGUgcmVjb3ZlclV0eG9zKFxuICAgIGltcG9ydGVkSW5wdXRzOiBUcmFuc2ZlcmFibGVJbnB1dFtdLFxuICAgIG91dHB1dEFkZHJzPzogeyB0b0J5dGVzKCk6IFVpbnQ4QXJyYXkgfVtdXG4gICk6IERlY29kZWRVdHhvT2JqW10ge1xuICAgIGNvbnN0IHByb3h5QWRkcmVzc2VzID0gb3V0cHV0QWRkcnNcbiAgICAgID8gb3V0cHV0QWRkcnMubWFwKChhZGRyKSA9PlxuICAgICAgICAgIHV0aWxzLmFkZHJlc3NUb1N0cmluZyhcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuaHJwLFxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5hbGlhcyxcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGFkZHIudG9CeXRlcygpKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBbXTtcblxuICAgIHJldHVybiBpbXBvcnRlZElucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCB1dHhvSWQgPSBpbnB1dC51dHhvSUQ7XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IHNpZ0luZGljaWVzID0gdHJhbnNmZXJJbnB1dC5zaWdJbmRpY2llcygpO1xuXG4gICAgICBjb25zdCB1dHhvOiBEZWNvZGVkVXR4b09iaiA9IHtcbiAgICAgICAgb3V0cHV0SUQ6IFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsXG4gICAgICAgIGFtb3VudDogdHJhbnNmZXJJbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICB0eGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHV0eG9JZC50eElELnRvQnl0ZXMoKSkpLFxuICAgICAgICBvdXRwdXRpZHg6IHV0eG9JZC5vdXRwdXRJZHgudmFsdWUoKS50b1N0cmluZygpLFxuICAgICAgICB0aHJlc2hvbGQ6IHNpZ0luZGljaWVzLmxlbmd0aCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICAgIGFkZHJlc3NlczogcHJveHlBZGRyZXNzZXMsXG4gICAgICAgIGFkZHJlc3Nlc0luZGV4OiBzaWdJbmRpY2llcyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdXR4bztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHByb3BlciBhZGRyZXNzZXNJbmRleCBmcm9tIHBhcnNlZCB0cmFuc2FjdGlvbidzIHNpZ0luZGljaWVzLlxuICAgKiBGb2xsb3dpbmcgQVZBWCBQIGFwcHJvYWNoOiBhZGRyZXNzZXNJbmRleFtzZW5kZXJJZHhdID0gcG9zaXRpb24gb2Ygc2VuZGVyIGluIFVUWE8gYWRkcmVzc2VzLlxuICAgKlxuICAgKiBGb3IgcGFyc2VkIHRyYW5zYWN0aW9uczpcbiAgICogLSBzaWdJbmRpY2llcyB0ZWxscyB1cyB3aGljaCBVVFhPIHBvc2l0aW9ucyBuZWVkIHRvIHNpZ24gZm9yIGVhY2ggc2xvdFxuICAgKiAtIFdlIHVzZSBvdXRwdXQgYWRkcmVzc2VzIGFzIHByb3h5IGZvciBVVFhPIGFkZHJlc3Nlc1xuICAgKiAtIFdlIGNvbXB1dGUgYWRkcmVzc2VzSW5kZXggYXMgc2VuZGVyIC0+IHV0eG8gcG9zaXRpb24gbWFwcGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBjb21wdXRlQWRkcmVzc2VzSW5kZXhGcm9tUGFyc2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbmRlciA9IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXM7XG4gICAgaWYgKCFzZW5kZXIgfHwgc2VuZGVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MuZm9yRWFjaCgodXR4bykgPT4ge1xuICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzICYmIHV0eG8uYWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdXR4b0FkZHJlc3NlcyA9IHV0eG8uYWRkcmVzc2VzLm1hcCgoYSkgPT4gdXRpbHMucGFyc2VBZGRyZXNzKGEpKTtcbiAgICAgICAgdXR4by5hZGRyZXNzZXNJbmRleCA9IHNlbmRlci5tYXAoKHNlbmRlckFkZHIpID0+XG4gICAgICAgICAgdXR4b0FkZHJlc3Nlcy5maW5kSW5kZXgoKHV0eG9BZGRyKSA9PiBCdWZmZXIuY29tcGFyZShCdWZmZXIuZnJvbSh1dHhvQWRkciksIEJ1ZmZlci5mcm9tKHNlbmRlckFkZHIpKSA9PT0gMClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -4,12 +4,6 @@ import { UnsignedTx } from '@flarenetwork/flarejs';
|
|
|
4
4
|
import { Transaction } from './transaction';
|
|
5
5
|
export declare abstract class AtomicInCTransactionBuilder extends AtomicTransactionBuilder {
|
|
6
6
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
7
|
-
/**
|
|
8
|
-
* C-Chain base fee with decimal places converted from 18 to 9.
|
|
9
|
-
*
|
|
10
|
-
* @param {string | number} baseFee
|
|
11
|
-
*/
|
|
12
|
-
feeRate(baseFee: string | number): this;
|
|
13
7
|
/** @inheritdoc */
|
|
14
8
|
fromImplementation(rawTransaction: string): Transaction;
|
|
15
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomicInCTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicInCTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAa,UAAU,EAA2C,MAAM,uBAAuB,CAAC;AAEvG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,8BAAsB,2BAA4B,SAAQ,wBAAwB;gBACpE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"atomicInCTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicInCTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAa,UAAU,EAA2C,MAAM,uBAAuB,CAAC;AAEvG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,8BAAsB,2BAA4B,SAAQ,wBAAwB;gBACpE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ7C,kBAAkB;IAClB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAYvD;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM9B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;CASlC"}
|
|
@@ -11,22 +11,9 @@ const utils_1 = __importDefault(require("./utils"));
|
|
|
11
11
|
class AtomicInCTransactionBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
|
|
12
12
|
constructor(_coinConfig) {
|
|
13
13
|
super(_coinConfig);
|
|
14
|
-
// external chain id is P
|
|
15
14
|
this._externalChainId = utils_1.default.cb58Decode(this.transaction._network.blockchainID);
|
|
16
|
-
// chain id is C
|
|
17
15
|
this.transaction._blockchainID = Buffer.from(utils_1.default.cb58Decode(this.transaction._network.cChainBlockchainID)).toString('hex');
|
|
18
16
|
}
|
|
19
|
-
/**
|
|
20
|
-
* C-Chain base fee with decimal places converted from 18 to 9.
|
|
21
|
-
*
|
|
22
|
-
* @param {string | number} baseFee
|
|
23
|
-
*/
|
|
24
|
-
feeRate(baseFee) {
|
|
25
|
-
const fee = BigInt(baseFee);
|
|
26
|
-
this.validateFee(fee);
|
|
27
|
-
this.transaction._fee.feeRate = Number(fee);
|
|
28
|
-
return this;
|
|
29
|
-
}
|
|
30
17
|
/** @inheritdoc */
|
|
31
18
|
fromImplementation(rawTransaction) {
|
|
32
19
|
const txBytes = new Uint8Array(Buffer.from(rawTransaction, 'hex'));
|
|
@@ -63,4 +50,4 @@ class AtomicInCTransactionBuilder extends atomicTransactionBuilder_1.AtomicTrans
|
|
|
63
50
|
}
|
|
64
51
|
}
|
|
65
52
|
exports.AtomicInCTransactionBuilder = AtomicInCTransactionBuilder;
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEseUVBQXNFO0FBRXRFLDhDQUF3RDtBQUN4RCxtREFBdUc7QUFDdkcsb0RBQTRCO0FBRzVCLE1BQXNCLDJCQUE0QixTQUFRLG1EQUF3QjtJQUNoRixZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUMxQyxlQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQy9ELENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsY0FBc0I7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBRyxtQkFBUyxDQUFDLGFBQWEsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFELE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxtQkFBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTFELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxlQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakgsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxlQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsR0FBVztRQUNyQixJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksZ0NBQXFCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEVBQWM7UUFDeEIsc0NBQXNDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUEvQ0Qsa0VBK0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBldm1TZXJpYWwsIFVuc2lnbmVkVHgsIHV0aWxzIGFzIEZsYXJlVXRpbHMsIGF2bVNlcmlhbCwgQWRkcmVzcyB9IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IHV0aWxzLmNiNThEZWNvZGUodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ibG9ja2NoYWluSUQpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCA9IEJ1ZmZlci5mcm9tKFxuICAgICAgdXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmNDaGFpbkJsb2NrY2hhaW5JRClcbiAgICApLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20ocmF3VHJhbnNhY3Rpb24sICdoZXgnKSk7XG4gICAgY29uc3QgY29kZWMgPSBhdm1TZXJpYWwuZ2V0QVZNTWFuYWdlcigpLmdldERlZmF1bHRDb2RlYygpO1xuICAgIGNvbnN0IFt0eF0gPSBldm1TZXJpYWwuSW1wb3J0VHguZnJvbUJ5dGVzKHR4Qnl0ZXMsIGNvZGVjKTtcblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGEpID0+IG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXAoW1tuZXcgQWRkcmVzcyhhKSwgMF1dKSk7XG5cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgodHgsIFtdLCBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksIFtdKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHVuc2lnbmVkVHgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgZmVlIGlzIGdyZWF0ZXIgdGhhbiAwLlxuICAgKiBAcGFyYW0ge2JpZ2ludH0gZmVlXG4gICAqL1xuICB2YWxpZGF0ZUZlZShmZWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChmZWUgPD0gQmlnSW50KDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdGZWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VW5zaWduZWRUeH0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMgaXRzZWxmXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVW5zaWduZWRUeCk6IHRoaXMge1xuICAgIC8vIFZhbGlkYXRlIG5ldHdvcmsgYW5kIGJsb2NrY2hhaW4gSURzXG4gICAgY29uc3QgYmFzZVR4ID0gdHguZ2V0VHgoKTtcbiAgICBpZiAoYmFzZVR4LmdldEJsb2NrY2hhaW5JZCgpICE9PSB0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYmxvY2tjaGFpbiBJRCBtaXNtYXRjaCcpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKHR4KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuIl19
|
|
@@ -2,33 +2,19 @@ import { BaseCoin as CoinConfig } from '@bitgo/statics';
|
|
|
2
2
|
import { TransactionType } from '@bitgo/sdk-core';
|
|
3
3
|
import { TransactionBuilder } from './transactionBuilder';
|
|
4
4
|
import { Transaction } from './transaction';
|
|
5
|
-
import {
|
|
5
|
+
import { Credential, utils as FlareUtils } from '@flarenetwork/flarejs';
|
|
6
6
|
import { DecodedUtxoObj } from './iface';
|
|
7
|
+
import { FlrpFeeState } from '@bitgo/public-types';
|
|
7
8
|
export declare abstract class AtomicTransactionBuilder extends TransactionBuilder {
|
|
8
9
|
protected _externalChainId: Buffer;
|
|
9
10
|
protected recoverSigner: boolean;
|
|
10
11
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
11
|
-
/**
|
|
12
|
-
* Create inputs and outputs from UTXOs
|
|
13
|
-
* @param {bigint} amount Amount to transfer
|
|
14
|
-
* @return {
|
|
15
|
-
* inputs: TransferableInput[];
|
|
16
|
-
* outputs: TransferableInput[];
|
|
17
|
-
* credentials: Credential[];
|
|
18
|
-
* }
|
|
19
|
-
* @protected
|
|
20
|
-
*/
|
|
21
|
-
protected createInputOutput(amount: bigint): {
|
|
22
|
-
inputs: TransferableInput[];
|
|
23
|
-
outputs: TransferableInput[];
|
|
24
|
-
credentials: Credential[];
|
|
25
|
-
};
|
|
26
12
|
/** @inheritdoc */
|
|
27
13
|
protected buildImplementation(): Promise<Transaction>;
|
|
28
14
|
/**
|
|
29
15
|
* Builds the Flare transaction. Transaction field is changed.
|
|
30
16
|
*/
|
|
31
|
-
protected abstract buildFlareTransaction(): void
|
|
17
|
+
protected abstract buildFlareTransaction(): void | Promise<void>;
|
|
32
18
|
protected abstract get transactionType(): TransactionType;
|
|
33
19
|
/**
|
|
34
20
|
* Fee is fix for AVM atomic tx.
|
|
@@ -57,20 +43,60 @@ export declare abstract class AtomicTransactionBuilder extends TransactionBuilde
|
|
|
57
43
|
*/
|
|
58
44
|
fee(feeValue: string | bigint): this;
|
|
59
45
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
46
|
+
* Set the fee state for dynamic fee calculation (P-chain transactions)
|
|
47
|
+
*
|
|
48
|
+
* @param {FlrpFeeState} state - the fee state from the network
|
|
49
|
+
*/
|
|
50
|
+
feeState(state: FlrpFeeState): this;
|
|
51
|
+
/**
|
|
52
|
+
* Set the amount for the transaction
|
|
53
|
+
*
|
|
54
|
+
* @param {bigint | string} value - the amount to transfer
|
|
55
|
+
*/
|
|
56
|
+
amount(value: bigint | string): this;
|
|
57
|
+
/**
|
|
58
|
+
* Compute addressesIndex for UTXOs following AVAX P approach.
|
|
59
|
+
* addressesIndex[senderIdx] = position of sender[senderIdx] in UTXO's address list
|
|
60
|
+
*
|
|
61
|
+
* Example:
|
|
62
|
+
* A = user key, B = hsm key, C = backup key
|
|
63
|
+
* sender (bitgoAddresses) = [ A, B, C ]
|
|
64
|
+
* utxo.addresses (IMS addresses) = [ B, C, A ]
|
|
65
|
+
* addressesIndex = [ 2, 0, 1 ]
|
|
66
|
+
* (sender[0]=A is at position 2 in UTXO, sender[1]=B is at position 0, etc.)
|
|
67
|
+
*
|
|
68
|
+
* @protected
|
|
69
|
+
*/
|
|
70
|
+
protected computeAddressesIndex(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Validate UTXOs have consistent addresses.
|
|
73
|
+
* Note: UTXO threshold can differ from transaction threshold - each UTXO has its own
|
|
74
|
+
* signature requirement based on how it was created (e.g., change outputs may have threshold=1).
|
|
75
|
+
* @protected
|
|
76
|
+
*/
|
|
77
|
+
protected validateUtxoAddresses(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Create credential with dynamic ordering based on addressesIndex from UTXO.
|
|
80
|
+
* Matches AVAX P behavior: signature order depends on UTXO address positions.
|
|
81
|
+
*
|
|
82
|
+
* addressesIndex[senderIdx] = utxoPosition tells us where each sender is in the UTXO.
|
|
83
|
+
* We create signature slots ordered by utxoPosition (smaller position = earlier slot).
|
|
84
|
+
*
|
|
62
85
|
* @param utxo - The UTXO to create credential for
|
|
63
|
-
* @param threshold - Number of signatures required
|
|
86
|
+
* @param threshold - Number of signatures required for this specific UTXO
|
|
64
87
|
* @returns Credential with empty signatures ordered based on UTXO positions
|
|
65
88
|
* @protected
|
|
66
89
|
*/
|
|
67
90
|
protected createCredentialForUtxo(utxo: DecodedUtxoObj, threshold: number): Credential;
|
|
68
91
|
/**
|
|
69
|
-
* Create AddressMap based on
|
|
70
|
-
*
|
|
71
|
-
*
|
|
92
|
+
* Create AddressMap based on addressesIndex following AVAX P approach.
|
|
93
|
+
* Maps each sender address to its signature slot based on UTXO position ordering.
|
|
94
|
+
*
|
|
95
|
+
* addressesIndex[senderIdx] = utxoPosition
|
|
96
|
+
* Signature slots are ordered by utxoPosition (smaller = earlier slot).
|
|
97
|
+
*
|
|
72
98
|
* @param utxo - The UTXO to create AddressMap for
|
|
73
|
-
* @param threshold - Number of signatures required
|
|
99
|
+
* @param threshold - Number of signatures required for this specific UTXO
|
|
74
100
|
* @returns AddressMap that maps addresses to signature slots based on UTXO order
|
|
75
101
|
* @protected
|
|
76
102
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atomicTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,
|
|
1
|
+
{"version":3,"file":"atomicTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAyB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAW,KAAK,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,8BAAsB,wBAAyB,SAAQ,kBAAkB;IACvE,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,aAAa,UAAS;gBAEpB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAW3D;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,qBAAqB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEhE,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D;;;;;OAKG;IACH,SAAS,KAAK,QAAQ,IAAI,MAAM,CAE/B;IAED;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAI1D;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAO/C;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMpC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKnC;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOpC;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAiBvC;;;;;OAKG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAcvC;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU;IA0CtF;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,UAAU;CAoClG"}
|