@bitgo-beta/sdk-coin-flrp 1.0.1-beta.382 → 1.0.1-beta.383
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/ExportInPTxBuilder.d.ts +6 -2
- package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ExportInPTxBuilder.js +35 -16
- package/dist/src/lib/ImportInCTxBuilder.d.ts +6 -1
- package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ImportInCTxBuilder.js +37 -38
- package/dist/src/lib/ImportInPTxBuilder.d.ts +15 -1
- package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ImportInPTxBuilder.js +44 -17
- package/dist/src/lib/atomicTransactionBuilder.d.ts +35 -7
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +102 -70
- package/dist/test/resources/transactionData/exportInP.js +2 -2
- package/dist/test/resources/transactionData/importInC.js +2 -2
- package/dist/test/resources/transactionData/importInP.js +2 -2
- package/dist/test/unit/lib/importInPTxBuilder.js +1 -2
- 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/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -63,7 +63,7 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
63
63
|
this.transaction._threshold = outputOwners.threshold.value();
|
|
64
64
|
this.transaction._fromAddresses = outputOwners.addrs.map((addr) => Buffer.from(addr.toBytes()));
|
|
65
65
|
this._externalChainId = Buffer.from(importTx.sourceChain.toBytes());
|
|
66
|
-
this.transaction._utxos = this.recoverUtxos(importTx.ins);
|
|
66
|
+
this.transaction._utxos = this.recoverUtxos(importTx.ins, outputOwners.addrs);
|
|
67
67
|
const totalInputAmount = importTx.ins.reduce((sum, input) => sum + input.amount(), BigInt(0));
|
|
68
68
|
const outputAmount = transferOutput.amount();
|
|
69
69
|
const fee = totalInputAmount - outputAmount;
|
|
@@ -73,6 +73,7 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
73
73
|
if (rawBytes && hasCredentials) {
|
|
74
74
|
this.transaction._rawSignedBytes = rawBytes;
|
|
75
75
|
}
|
|
76
|
+
this.computeAddressesIndexFromParsed();
|
|
76
77
|
const txCredentials = credentials.length > 0
|
|
77
78
|
? credentials
|
|
78
79
|
: this.transaction._utxos.map((utxo) => {
|
|
@@ -121,10 +122,10 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
121
122
|
if (this.transaction._locktime === undefined) {
|
|
122
123
|
throw new sdk_core_1.BuildTransactionError('locktime is required');
|
|
123
124
|
}
|
|
124
|
-
|
|
125
|
+
this.computeAddressesIndex();
|
|
126
|
+
this.validateUtxoAddresses();
|
|
125
127
|
const assetId = utils_1.default.cb58Encode(Buffer.from(this.transaction._assetId, 'hex'));
|
|
126
128
|
const nativeUtxos = utils_1.default.decodedToUtxos(this.transaction._utxos, assetId);
|
|
127
|
-
// Validate UTXO balance is non-zero (fee will be deducted during import)
|
|
128
129
|
const totalUtxoAmount = nativeUtxos.reduce((sum, utxo) => {
|
|
129
130
|
const output = utxo.output;
|
|
130
131
|
return sum + output.amount();
|
|
@@ -134,7 +135,6 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
134
135
|
}
|
|
135
136
|
const toAddresses = this.transaction._to.map((addr) => Buffer.from(addr));
|
|
136
137
|
const fromAddresses = this.transaction._fromAddresses.map((addr) => Buffer.from(addr));
|
|
137
|
-
// Validate address lengths (P-chain addresses are 20 bytes)
|
|
138
138
|
const invalidToAddress = toAddresses.find((addr) => addr.length !== 20);
|
|
139
139
|
if (invalidToAddress) {
|
|
140
140
|
throw new sdk_core_1.BuildTransactionError(`Invalid toAddress length: expected 20 bytes, got ${invalidToAddress.length}`);
|
|
@@ -155,42 +155,69 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
155
155
|
const flareUnsignedTx = importTx;
|
|
156
156
|
const innerTx = flareUnsignedTx.getTx();
|
|
157
157
|
const utxosWithIndex = innerTx.ins.map((input, idx) => {
|
|
158
|
-
const
|
|
159
|
-
const addressesIndex = transferInput.sigIndicies();
|
|
158
|
+
const originalUtxo = this.transaction._utxos[idx];
|
|
160
159
|
return {
|
|
161
|
-
...
|
|
162
|
-
addressesIndex,
|
|
163
|
-
addresses:
|
|
164
|
-
threshold:
|
|
160
|
+
...originalUtxo,
|
|
161
|
+
addressesIndex: originalUtxo.addressesIndex,
|
|
162
|
+
addresses: originalUtxo.addresses,
|
|
163
|
+
threshold: originalUtxo.threshold || this.transaction._threshold,
|
|
165
164
|
};
|
|
166
165
|
});
|
|
166
|
+
this.transaction._utxos = utxosWithIndex;
|
|
167
167
|
const txCredentials = utxosWithIndex.map((utxo) => this.createCredentialForUtxo(utxo, utxo.threshold));
|
|
168
168
|
const addressMaps = utxosWithIndex.map((utxo) => this.createAddressMapForUtxo(utxo, utxo.threshold));
|
|
169
169
|
const fixedUnsignedTx = new flarejs_1.UnsignedTx(innerTx, [], new flarejs_1.utils.AddressMaps(addressMaps), txCredentials);
|
|
170
170
|
this.transaction.setTransaction(fixedUnsignedTx);
|
|
171
171
|
}
|
|
172
172
|
/**
|
|
173
|
-
* 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
|
+
*
|
|
174
177
|
* @param importedInputs Array of transferable inputs
|
|
178
|
+
* @param outputAddrs Output owner addresses to use as proxy for UTXO addresses
|
|
175
179
|
* @returns Array of decoded UTXO objects
|
|
176
180
|
*/
|
|
177
|
-
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
|
+
: [];
|
|
178
185
|
return importedInputs.map((input) => {
|
|
179
186
|
const utxoId = input.utxoID;
|
|
180
187
|
const transferInput = input.input;
|
|
181
|
-
const
|
|
188
|
+
const sigIndicies = transferInput.sigIndicies();
|
|
182
189
|
const utxo = {
|
|
183
190
|
outputID: iface_1.SECP256K1_Transfer_Output,
|
|
184
191
|
amount: transferInput.amount().toString(),
|
|
185
192
|
txid: utils_1.default.cb58Encode(Buffer.from(utxoId.txID.toBytes())),
|
|
186
193
|
outputidx: utxoId.outputIdx.value().toString(),
|
|
187
|
-
threshold:
|
|
188
|
-
addresses:
|
|
189
|
-
addressesIndex,
|
|
194
|
+
threshold: sigIndicies.length || this.transaction._threshold,
|
|
195
|
+
addresses: proxyAddresses,
|
|
196
|
+
addressesIndex: sigIndicies,
|
|
190
197
|
};
|
|
191
198
|
return utxo;
|
|
192
199
|
});
|
|
193
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
|
+
}
|
|
194
221
|
}
|
|
195
222
|
exports.ImportInPTxBuilder = ImportInPTxBuilder;
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTRGO0FBQzVGLHlFQUFzRTtBQUN0RSxtREFTK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLG1EQUF3QjtJQUM5RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0csS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxZQUErQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksZ0NBQXFCLENBQUMsOERBQThELGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDbEgsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGVBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNsRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxFQUFFLENBQUMsU0FBbUI7UUFDcEIsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksZ0NBQXFCLENBQUMsNERBQTRELGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDaEgsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGVBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN6RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBTSxFQUFFLFFBQWlCLEVBQUUsaUJBQWdDO1FBQ3JFLE1BQU0sUUFBUSxHQUFHLEVBQXdCLENBQUM7UUFFMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLHVCQUFZLENBQUMscUVBQXFFLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDeEMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUF3QixDQUFDO1FBQ3ZELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTFELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlGLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsR0FBRyxZQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUzQyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7UUFDNUMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFOUMsSUFBSSxRQUFRLElBQUksY0FBYyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO1FBQzlDLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FDakIsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxXQUFXO1lBQ2IsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNuQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO2dCQUNwRSxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFFVCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ3BFLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFHLElBQUksb0JBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLElBQUksZUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUV4RyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQWU7UUFDakMsT0FBTyxPQUFPLEtBQUssNEJBQW9CLENBQUMsV0FBVyxDQUFDO0lBQ3RELENBQUM7SUFFRCxZQUFZLENBQUMsT0FBZTtRQUMxQixPQUFPLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sS0FBSyxDQUFDLHFCQUFxQjtRQUNuQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYztZQUFFLE9BQU87UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyRSxNQUFNLElBQUksZ0NBQXFCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLGdDQUFxQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9ELE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksZ0NBQXFCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksZ0NBQXFCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBRUQsdURBQXVEO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sV0FBVyxHQUFHLGVBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFM0UseUVBQXlFO1FBQ3pFLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDdkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQXdCLENBQUM7WUFDN0MsT0FBTyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9CLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVkLElBQUksZUFBZSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV2Riw0REFBNEQ7UUFDNUQsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksZ0NBQXFCLENBQUMsb0RBQW9ELGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDakgsQ0FBQztRQUVELE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM1RSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLGdDQUFxQixDQUM3QixzREFBc0Qsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQ2xGLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsYUFBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQ2hDO1lBQ0UsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUztZQUNwQyxrQkFBa0IsRUFBRSxhQUFhO1lBQ2pDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0I7WUFDM0QsZ0JBQWdCLEVBQUUsV0FBVztZQUM3QixLQUFLLEVBQUUsV0FBVztZQUNsQixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVO1lBQ3RDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVM7U0FDckMsRUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDMUIsQ0FBQztRQUVGLE1BQU0sZUFBZSxHQUFHLFFBQXNCLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBd0IsQ0FBQztRQUU5RCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNwRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBc0IsQ0FBQztZQUNuRCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkQsT0FBTztnQkFDTCxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztnQkFDL0IsY0FBYztnQkFDZCxTQUFTLEVBQUUsRUFBRTtnQkFDYixTQUFTLEVBQUUsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTO2FBQzNFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFdkcsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUVyRyxNQUFNLGVBQWUsR0FBRyxJQUFJLG9CQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLGVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFNUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxZQUFZLENBQUMsY0FBbUM7UUFDdEQsT0FBTyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUM1QixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsS0FBc0IsQ0FBQztZQUNuRCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFbkQsTUFBTSxJQUFJLEdBQW1CO2dCQUMzQixRQUFRLEVBQUUsaUNBQXlCO2dCQUNuQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtnQkFDekMsSUFBSSxFQUFFLGVBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFELFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRTtnQkFDOUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVO2dCQUMvRCxTQUFTLEVBQUUsRUFBRTtnQkFDYixjQUFjO2FBQ2YsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE5TkQsZ0RBOE5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBOb3RTdXBwb3J0ZWQsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vYXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIHB2bVNlcmlhbCxcbiAgVW5zaWduZWRUeCxcbiAgVHJhbnNmZXJhYmxlSW5wdXQsXG4gIFRyYW5zZmVyT3V0cHV0LFxuICBUcmFuc2ZlcklucHV0LFxuICB1dGlscyBhcyBGbGFyZVV0aWxzLFxuICBDcmVkZW50aWFsLFxuICBwdm0sXG59IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiwgRmxhcmVUcmFuc2FjdGlvblR5cGUsIFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBJbXBvcnRJblBUeEJ1aWxkZXIgZXh0ZW5kcyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fZXh0ZXJuYWxDaGFpbklkID0gdXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmNDaGFpbkJsb2NrY2hhaW5JRCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklEID0gQnVmZmVyLmZyb20odXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmJsb2NrY2hhaW5JRCkpLnRvU3RyaW5nKFxuICAgICAgJ2hleCdcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkltcG9ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBzZW5kZXJQdWJLZXkgLSBDLWNoYWluIGFkZHJlc3MoZXMpIHdpdGggQy0gcHJlZml4XG4gICAqIEB0aHJvd3Mge0J1aWxkVHJhbnNhY3Rpb25FcnJvcn0gaWYgYW55IGFkZHJlc3MgaXMgbm90IGEgQy1jaGFpbiBhZGRyZXNzXG4gICAqL1xuICBmcm9tUHViS2V5KHNlbmRlclB1YktleTogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzIHtcbiAgICBjb25zdCBwdWJLZXlzID0gQXJyYXkuaXNBcnJheShzZW5kZXJQdWJLZXkpID8gc2VuZGVyUHViS2V5IDogW3NlbmRlclB1YktleV07XG4gICAgY29uc3QgaW52YWxpZEFkZHJlc3MgPSBwdWJLZXlzLmZpbmQoKGFkZHIpID0+ICFhZGRyLnN0YXJ0c1dpdGgoJ0MtJykpO1xuICAgIGlmIChpbnZhbGlkQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBmcm9tQWRkcmVzczogZXhwZWN0ZWQgQy1jaGFpbiBhZGRyZXNzIChDLS4uLiksIGdvdCAke2ludmFsaWRBZGRyZXNzfWApO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzID0gcHViS2V5cy5tYXAoKGFkZHIpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhZGRyKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYWRkcmVzc2VzIC0gQXJyYXkgb2YgUC1jaGFpbiBhZGRyZXNzZXMgKGJlY2gzMiBmb3JtYXQgd2l0aCBQLSBwcmVmaXgpXG4gICAqIEB0aHJvd3Mge0J1aWxkVHJhbnNhY3Rpb25FcnJvcn0gaWYgYW55IGFkZHJlc3MgaXMgbm90IGEgUC1jaGFpbiBhZGRyZXNzXG4gICAqL1xuICB0byhhZGRyZXNzZXM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgaW52YWxpZEFkZHJlc3MgPSBhZGRyZXNzZXMuZmluZCgoYWRkcikgPT4gIWFkZHIuc3RhcnRzV2l0aCgnUC0nKSk7XG4gICAgaWYgKGludmFsaWRBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRvQWRkcmVzczogZXhwZWN0ZWQgUC1jaGFpbiBhZGRyZXNzIChQLS4uLiksIGdvdCAke2ludmFsaWRBZGRyZXNzfWApO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90byA9IGFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhZGRyKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHgsIHJhd0J5dGVzPzogQnVmZmVyLCBwYXJzZWRDcmVkZW50aWFscz86IENyZWRlbnRpYWxbXSk6IHRoaXMge1xuICAgIGNvbnN0IGltcG9ydFR4ID0gdHggYXMgcHZtU2VyaWFsLkltcG9ydFR4O1xuXG4gICAgaWYgKCF0aGlzLnZlcmlmeVR4VHlwZShpbXBvcnRUeC5fdHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSBwYXJzZWQgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzID0gaW1wb3J0VHguYmFzZVR4Lm91dHB1dHM7XG4gICAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW4gaGF2ZSBvbmUgZXh0ZXJuYWwgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXTtcbiAgICBjb25zdCBhc3NldElkID0gb3V0cHV0LmFzc2V0SWQudG9CeXRlcygpO1xuICAgIGlmIChCdWZmZXIuY29tcGFyZShhc3NldElkLCBCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkLCAnaGV4JykpICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBc3NldCBJRCBvZiB0aGUgb3V0cHV0IGRvZXMgbm90IG1hdGNoIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZmVyT3V0cHV0ID0gb3V0cHV0Lm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICBjb25zdCBvdXRwdXRPd25lcnMgPSB0cmFuc2Zlck91dHB1dC5vdXRwdXRPd25lcnM7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUgPSBvdXRwdXRPd25lcnMubG9ja3RpbWUudmFsdWUoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQgPSBvdXRwdXRPd25lcnMudGhyZXNob2xkLnZhbHVlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyA9IG91dHB1dE93bmVycy5hZGRycy5tYXAoKGFkZHIpID0+IEJ1ZmZlci5mcm9tKGFkZHIudG9CeXRlcygpKSk7XG4gICAgdGhpcy5fZXh0ZXJuYWxDaGFpbklkID0gQnVmZmVyLmZyb20oaW1wb3J0VHguc291cmNlQ2hhaW4udG9CeXRlcygpKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcyA9IHRoaXMucmVjb3ZlclV0eG9zKGltcG9ydFR4Lmlucyk7XG5cbiAgICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gaW1wb3J0VHguaW5zLnJlZHVjZSgoc3VtLCBpbnB1dCkgPT4gc3VtICsgaW5wdXQuYW1vdW50KCksIEJpZ0ludCgwKSk7XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdHJhbnNmZXJPdXRwdXQuYW1vdW50KCk7XG4gICAgY29uc3QgZmVlID0gdG90YWxJbnB1dEFtb3VudCAtIG91dHB1dEFtb3VudDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlID0gZmVlLnRvU3RyaW5nKCk7XG5cbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHBhcnNlZENyZWRlbnRpYWxzIHx8IFtdO1xuICAgIGNvbnN0IGhhc0NyZWRlbnRpYWxzID0gY3JlZGVudGlhbHMubGVuZ3RoID4gMDtcblxuICAgIGlmIChyYXdCeXRlcyAmJiBoYXNDcmVkZW50aWFscykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fcmF3U2lnbmVkQnl0ZXMgPSByYXdCeXRlcztcbiAgICB9XG5cbiAgICBjb25zdCB0eENyZWRlbnRpYWxzID1cbiAgICAgIGNyZWRlbnRpYWxzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBjcmVkZW50aWFsc1xuICAgICAgICA6IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLm1hcCgodXR4bykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXR4b1RocmVzaG9sZCA9IHV0eG8udGhyZXNob2xkIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHV0eG9UaHJlc2hvbGQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5tYXAoKHV0eG8pID0+IHtcbiAgICAgIGNvbnN0IHV0eG9UaHJlc2hvbGQgPSB1dHhvLnRocmVzaG9sZCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh1dHhvLCB1dHhvVGhyZXNob2xkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSBuZXcgVW5zaWduZWRUeChpbXBvcnRUeCwgW10sIG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKSwgdHhDcmVkZW50aWFscyk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKHVuc2lnbmVkVHgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHhuVHlwZSA9PT0gRmxhcmVUcmFuc2FjdGlvblR5cGUuUHZtSW1wb3J0VHg7XG4gIH1cblxuICB2ZXJpZnlUeFR5cGUodHhuVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEltcG9ydEluUFR4QnVpbGRlci52ZXJpZnlUeFR5cGUodHhuVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGltcG9ydCB0cmFuc2FjdGlvbiBmb3IgUC1jaGFpbiAoaW1wb3J0aW5nIEZST00gQy1jaGFpbilcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5oYXNDcmVkZW50aWFscykgcmV0dXJuO1xuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgfHwgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVVFhPcyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl9mZWVTdGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRmVlIHN0YXRlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fY29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignY29udGV4dCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgfHwgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2Zyb21BZGRyZXNzZXMgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fdG8gfHwgdGhpcy50cmFuc2FjdGlvbi5fdG8ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0b0FkZHJlc3NlcyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3RocmVzaG9sZCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignbG9ja3RpbWUgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IGRlY29kZWQgVVRYT3MgdG8gbmF0aXZlIEZsYXJlSlMgVXR4byBvYmplY3RzXG4gICAgY29uc3QgYXNzZXRJZCA9IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcbiAgICBjb25zdCBuYXRpdmVVdHhvcyA9IHV0aWxzLmRlY29kZWRUb1V0eG9zKHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLCBhc3NldElkKTtcblxuICAgIC8vIFZhbGlkYXRlIFVUWE8gYmFsYW5jZSBpcyBub24temVybyAoZmVlIHdpbGwgYmUgZGVkdWN0ZWQgZHVyaW5nIGltcG9ydClcbiAgICBjb25zdCB0b3RhbFV0eG9BbW91bnQgPSBuYXRpdmVVdHhvcy5yZWR1Y2UoKHN1bSwgdXR4bykgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdXR4by5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgICByZXR1cm4gc3VtICsgb3V0cHV0LmFtb3VudCgpO1xuICAgIH0sIEJpZ0ludCgwKSk7XG5cbiAgICBpZiAodG90YWxVdHhvQW1vdW50ID09PSBCaWdJbnQoMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1VUWE9zIGhhdmUgemVybyB0b3RhbCBiYWxhbmNlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9BZGRyZXNzZXMgPSB0aGlzLnRyYW5zYWN0aW9uLl90by5tYXAoKGFkZHIpID0+IEJ1ZmZlci5mcm9tKGFkZHIpKTtcbiAgICBjb25zdCBmcm9tQWRkcmVzc2VzID0gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IEJ1ZmZlci5mcm9tKGFkZHIpKTtcblxuICAgIC8vIFZhbGlkYXRlIGFkZHJlc3MgbGVuZ3RocyAoUC1jaGFpbiBhZGRyZXNzZXMgYXJlIDIwIGJ5dGVzKVxuICAgIGNvbnN0IGludmFsaWRUb0FkZHJlc3MgPSB0b0FkZHJlc3Nlcy5maW5kKChhZGRyKSA9PiBhZGRyLmxlbmd0aCAhPT0gMjApO1xuICAgIGlmIChpbnZhbGlkVG9BZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRvQWRkcmVzcyBsZW5ndGg6IGV4cGVjdGVkIDIwIGJ5dGVzLCBnb3QgJHtpbnZhbGlkVG9BZGRyZXNzLmxlbmd0aH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkRnJvbUFkZHJlc3MgPSBmcm9tQWRkcmVzc2VzLmZpbmQoKGFkZHIpID0+IGFkZHIubGVuZ3RoICE9PSAyMCk7XG4gICAgaWYgKGludmFsaWRGcm9tQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEludmFsaWQgZnJvbUFkZHJlc3MgbGVuZ3RoOiBleHBlY3RlZCAyMCBieXRlcywgZ290ICR7aW52YWxpZEZyb21BZGRyZXNzLmxlbmd0aH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGltcG9ydFR4ID0gcHZtLmUubmV3SW1wb3J0VHgoXG4gICAgICB7XG4gICAgICAgIGZlZVN0YXRlOiB0aGlzLnRyYW5zYWN0aW9uLl9mZWVTdGF0ZSxcbiAgICAgICAgZnJvbUFkZHJlc3Nlc0J5dGVzOiBmcm9tQWRkcmVzc2VzLFxuICAgICAgICBzb3VyY2VDaGFpbklkOiB0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmNDaGFpbkJsb2NrY2hhaW5JRCxcbiAgICAgICAgdG9BZGRyZXNzZXNCeXRlczogdG9BZGRyZXNzZXMsXG4gICAgICAgIHV0eG9zOiBuYXRpdmVVdHhvcyxcbiAgICAgICAgdGhyZXNob2xkOiB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICAgIGxvY2t0aW1lOiB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSxcbiAgICAgIH0sXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9jb250ZXh0XG4gICAgKTtcblxuICAgIGNvbnN0IGZsYXJlVW5zaWduZWRUeCA9IGltcG9ydFR4IGFzIFVuc2lnbmVkVHg7XG4gICAgY29uc3QgaW5uZXJUeCA9IGZsYXJlVW5zaWduZWRUeC5nZXRUeCgpIGFzIHB2bVNlcmlhbC5JbXBvcnRUeDtcblxuICAgIGNvbnN0IHV0eG9zV2l0aEluZGV4ID0gaW5uZXJUeC5pbnMubWFwKChpbnB1dCwgaWR4KSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4ID0gdHJhbnNmZXJJbnB1dC5zaWdJbmRpY2llcygpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy50cmFuc2FjdGlvbi5fdXR4b3NbaWR4XSxcbiAgICAgICAgYWRkcmVzc2VzSW5kZXgsXG4gICAgICAgIGFkZHJlc3NlczogW10sXG4gICAgICAgIHRocmVzaG9sZDogYWRkcmVzc2VzSW5kZXgubGVuZ3RoIHx8IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zW2lkeF0udGhyZXNob2xkLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHR4Q3JlZGVudGlhbHMgPSB1dHhvc1dpdGhJbmRleC5tYXAoKHV0eG8pID0+IHRoaXMuY3JlYXRlQ3JlZGVudGlhbEZvclV0eG8odXR4bywgdXR4by50aHJlc2hvbGQpKTtcblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gdXR4b3NXaXRoSW5kZXgubWFwKCh1dHhvKSA9PiB0aGlzLmNyZWF0ZUFkZHJlc3NNYXBGb3JVdHhvKHV0eG8sIHV0eG8udGhyZXNob2xkKSk7XG5cbiAgICBjb25zdCBmaXhlZFVuc2lnbmVkVHggPSBuZXcgVW5zaWduZWRUeChpbm5lclR4LCBbXSwgbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLCB0eENyZWRlbnRpYWxzKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24oZml4ZWRVbnNpZ25lZFR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIFVUWE9zIGZyb20gaW1wb3J0ZWQgaW5wdXRzXG4gICAqIEBwYXJhbSBpbXBvcnRlZElucHV0cyBBcnJheSBvZiB0cmFuc2ZlcmFibGUgaW5wdXRzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGRlY29kZWQgVVRYTyBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIHJlY292ZXJVdHhvcyhpbXBvcnRlZElucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSk6IERlY29kZWRVdHhvT2JqW10ge1xuICAgIHJldHVybiBpbXBvcnRlZElucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCB1dHhvSWQgPSBpbnB1dC51dHhvSUQ7XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4ID0gdHJhbnNmZXJJbnB1dC5zaWdJbmRpY2llcygpO1xuXG4gICAgICBjb25zdCB1dHhvOiBEZWNvZGVkVXR4b09iaiA9IHtcbiAgICAgICAgb3V0cHV0SUQ6IFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsXG4gICAgICAgIGFtb3VudDogdHJhbnNmZXJJbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICB0eGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHV0eG9JZC50eElELnRvQnl0ZXMoKSkpLFxuICAgICAgICBvdXRwdXRpZHg6IHV0eG9JZC5vdXRwdXRJZHgudmFsdWUoKS50b1N0cmluZygpLFxuICAgICAgICB0aHJlc2hvbGQ6IGFkZHJlc3Nlc0luZGV4Lmxlbmd0aCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICAgIGFkZHJlc3NlczogW10sXG4gICAgICAgIGFkZHJlc3Nlc0luZGV4LFxuICAgICAgfTtcbiAgICAgIHJldHVybiB1dHhvO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTRGO0FBQzVGLHlFQUFzRTtBQUN0RSxtREFTK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLG1EQUF3QjtJQUM5RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0csS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxZQUErQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksZ0NBQXFCLENB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SSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDNUcsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNRRCxnREEyUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIE5vdFN1cHBvcnRlZCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHtcbiAgcHZtU2VyaWFsLFxuICBVbnNpZ25lZFR4LFxuICBUcmFuc2ZlcmFibGVJbnB1dCxcbiAgVHJhbnNmZXJPdXRwdXQsXG4gIFRyYW5zZmVySW5wdXQsXG4gIHV0aWxzIGFzIEZsYXJlVXRpbHMsXG4gIENyZWRlbnRpYWwsXG4gIHB2bSxcbn0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IERlY29kZWRVdHhvT2JqLCBGbGFyZVRyYW5zYWN0aW9uVHlwZSwgU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCwgVHggfSBmcm9tICcuL2lmYWNlJztcblxuZXhwb3J0IGNsYXNzIEltcG9ydEluUFR4QnVpbGRlciBleHRlbmRzIEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9leHRlcm5hbENoYWluSWQgPSB1dGlscy5jYjU4RGVjb2RlKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuY0NoYWluQmxvY2tjaGFpbklEKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQgPSBCdWZmZXIuZnJvbSh1dGlscy5jYjU4RGVjb2RlKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYmxvY2tjaGFpbklEKSkudG9TdHJpbmcoXG4gICAgICAnaGV4J1xuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuSW1wb3J0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IHNlbmRlclB1YktleSAtIEMtY2hhaW4gYWRkcmVzcyhlcykgd2l0aCBDLSBwcmVmaXhcbiAgICogQHRocm93cyB7QnVpbGRUcmFuc2FjdGlvbkVycm9yfSBpZiBhbnkgYWRkcmVzcyBpcyBub3QgYSBDLWNoYWluIGFkZHJlc3NcbiAgICovXG4gIGZyb21QdWJLZXkoc2VuZGVyUHViS2V5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IHB1YktleXMgPSBBcnJheS5pc0FycmF5KHNlbmRlclB1YktleSkgPyBzZW5kZXJQdWJLZXkgOiBbc2VuZGVyUHViS2V5XTtcbiAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9IHB1YktleXMuZmluZCgoYWRkcikgPT4gIWFkZHIuc3RhcnRzV2l0aCgnQy0nKSk7XG4gICAgaWYgKGludmFsaWRBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIGZyb21BZGRyZXNzOiBleHBlY3RlZCBDLWNoYWluIGFkZHJlc3MgKEMtLi4uKSwgZ290ICR7aW52YWxpZEFkZHJlc3N9YCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBwdWJLZXlzLm1hcCgoYWRkcikgPT4gdXRpbHMucGFyc2VBZGRyZXNzKGFkZHIpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhZGRyZXNzZXMgLSBBcnJheSBvZiBQLWNoYWluIGFkZHJlc3NlcyAoYmVjaDMyIGZvcm1hdCB3aXRoIFAtIHByZWZpeClcbiAgICogQHRocm93cyB7QnVpbGRUcmFuc2FjdGlvbkVycm9yfSBpZiBhbnkgYWRkcmVzcyBpcyBub3QgYSBQLWNoYWluIGFkZHJlc3NcbiAgICovXG4gIHRvKGFkZHJlc3Nlczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICBjb25zdCBpbnZhbGlkQWRkcmVzcyA9IGFkZHJlc3Nlcy5maW5kKChhZGRyKSA9PiAhYWRkci5zdGFydHNXaXRoKCdQLScpKTtcbiAgICBpZiAoaW52YWxpZEFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdG9BZGRyZXNzOiBleHBlY3RlZCBQLWNoYWluIGFkZHJlc3MgKFAtLi4uKSwgZ290ICR7aW52YWxpZEFkZHJlc3N9YCk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RvID0gYWRkcmVzc2VzLm1hcCgoYWRkcikgPT4gdXRpbHMucGFyc2VBZGRyZXNzKGFkZHIpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGluaXRCdWlsZGVyKHR4OiBUeCwgcmF3Qnl0ZXM/OiBCdWZmZXIsIHBhcnNlZENyZWRlbnRpYWxzPzogQ3JlZGVudGlhbFtdKTogdGhpcyB7XG4gICAgY29uc3QgaW1wb3J0VHggPSB0eCBhcyBwdm1TZXJpYWwuSW1wb3J0VHg7XG5cbiAgICBpZiAoIXRoaXMudmVyaWZ5VHhUeXBlKGltcG9ydFR4Ll90eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNhY3Rpb24gY2Fubm90IGJlIHBhcnNlZCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHMgPSBpbXBvcnRUeC5iYXNlVHgub3V0cHV0cztcbiAgICBpZiAob3V0cHV0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1RyYW5zYWN0aW9uIGNhbiBoYXZlIG9uZSBleHRlcm5hbCBvdXRwdXQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzWzBdO1xuICAgIGNvbnN0IGFzc2V0SWQgPSBvdXRwdXQuYXNzZXRJZC50b0J5dGVzKCk7XG4gICAgaWYgKEJ1ZmZlci5jb21wYXJlKGFzc2V0SWQsIEJ1ZmZlci5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQsICdoZXgnKSkgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEFzc2V0IElEIG9mIHRoZSBvdXRwdXQgZG9lcyBub3QgbWF0Y2ggdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmZXJPdXRwdXQgPSBvdXRwdXQub3V0cHV0IGFzIFRyYW5zZmVyT3V0cHV0O1xuICAgIGNvbnN0IG91dHB1dE93bmVycyA9IHRyYW5zZmVyT3V0cHV0Lm91dHB1dE93bmVycztcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSA9IG91dHB1dE93bmVycy5sb2NrdGltZS52YWx1ZSgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCA9IG91dHB1dE93bmVycy50aHJlc2hvbGQudmFsdWUoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzID0gb3V0cHV0T3duZXJzLmFkZHJzLm1hcCgoYWRkcikgPT4gQnVmZmVyLmZyb20oYWRkci50b0J5dGVzKCkpKTtcbiAgICB0aGlzLl9leHRlcm5hbENoYWluSWQgPSBCdWZmZXIuZnJvbShpbXBvcnRUeC5zb3VyY2VDaGFpbi50b0J5dGVzKCkpO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSB0aGlzLnJlY292ZXJVdHhvcyhpbXBvcnRUeC5pbnMsIG91dHB1dE93bmVycy5hZGRycyk7XG5cbiAgICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gaW1wb3J0VHguaW5zLnJlZHVjZSgoc3VtLCBpbnB1dCkgPT4gc3VtICsgaW5wdXQuYW1vdW50KCksIEJpZ0ludCgwKSk7XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdHJhbnNmZXJPdXRwdXQuYW1vdW50KCk7XG4gICAgY29uc3QgZmVlID0gdG90YWxJbnB1dEFtb3VudCAtIG91dHB1dEFtb3VudDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlID0gZmVlLnRvU3RyaW5nKCk7XG5cbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHBhcnNlZENyZWRlbnRpYWxzIHx8IFtdO1xuICAgIGNvbnN0IGhhc0NyZWRlbnRpYWxzID0gY3JlZGVudGlhbHMubGVuZ3RoID4gMDtcblxuICAgIGlmIChyYXdCeXRlcyAmJiBoYXNDcmVkZW50aWFscykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fcmF3U2lnbmVkQnl0ZXMgPSByYXdCeXRlcztcbiAgICB9XG5cbiAgICB0aGlzLmNvbXB1dGVBZGRyZXNzZXNJbmRleEZyb21QYXJzZWQoKTtcblxuICAgIGNvbnN0IHR4Q3JlZGVudGlhbHMgPVxuICAgICAgY3JlZGVudGlhbHMubGVuZ3RoID4gMFxuICAgICAgICA/IGNyZWRlbnRpYWxzXG4gICAgICAgIDogdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubWFwKCh1dHhvKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1dHhvVGhyZXNob2xkID0gdXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3JlZGVudGlhbEZvclV0eG8odXR4bywgdXR4b1RocmVzaG9sZCk7XG4gICAgICAgICAgfSk7XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLm1hcCgodXR4bykgPT4ge1xuICAgICAgY29uc3QgdXR4b1RocmVzaG9sZCA9IHV0eG8udGhyZXNob2xkIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZDtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUFkZHJlc3NNYXBGb3JVdHhvKHV0eG8sIHV0eG9UaHJlc2hvbGQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KGltcG9ydFR4LCBbXSwgbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLCB0eENyZWRlbnRpYWxzKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odW5zaWduZWRUeCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eG5UeXBlID09PSBGbGFyZVRyYW5zYWN0aW9uVHlwZS5Qdm1JbXBvcnRUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSW1wb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eG5UeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgaW1wb3J0IHRyYW5zYWN0aW9uIGZvciBQLWNoYWluIChpbXBvcnRpbmcgRlJPTSBDLWNoYWluKVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRGbGFyZVRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmhhc0NyZWRlbnRpYWxzKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl91dHhvcyB8fCB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1VUWE9zIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2ZlZVN0YXRlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdGZWUgc3RhdGUgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl9jb250ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdjb250ZXh0IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyB8fCB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignZnJvbUFkZHJlc3NlcyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl90byB8fCB0aGlzLnRyYW5zYWN0aW9uLl90by5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3RvQWRkcmVzc2VzIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcigndGhyZXNob2xkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdsb2NrdGltZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcHV0ZUFkZHJlc3Nlc0luZGV4KCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlVXR4b0FkZHJlc3NlcygpO1xuXG4gICAgY29uc3QgYXNzZXRJZCA9IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcbiAgICBjb25zdCBuYXRpdmVVdHhvcyA9IHV0aWxzLmRlY29kZWRUb1V0eG9zKHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLCBhc3NldElkKTtcblxuICAgIGNvbnN0IHRvdGFsVXR4b0Ftb3VudCA9IG5hdGl2ZVV0eG9zLnJlZHVjZSgoc3VtLCB1dHhvKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB1dHhvLm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICAgIHJldHVybiBzdW0gKyBvdXRwdXQuYW1vdW50KCk7XG4gICAgfSwgQmlnSW50KDApKTtcblxuICAgIGlmICh0b3RhbFV0eG9BbW91bnQgPT09IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVVRYT3MgaGF2ZSB6ZXJvIHRvdGFsIGJhbGFuY2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b0FkZHJlc3NlcyA9IHRoaXMudHJhbnNhY3Rpb24uX3RvLm1hcCgoYWRkcikgPT4gQnVmZmVyLmZyb20oYWRkcikpO1xuICAgIGNvbnN0IGZyb21BZGRyZXNzZXMgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoYWRkcikgPT4gQnVmZmVyLmZyb20oYWRkcikpO1xuXG4gICAgY29uc3QgaW52YWxpZFRvQWRkcmVzcyA9IHRvQWRkcmVzc2VzLmZpbmQoKGFkZHIpID0+IGFkZHIubGVuZ3RoICE9PSAyMCk7XG4gICAgaWYgKGludmFsaWRUb0FkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdG9BZGRyZXNzIGxlbmd0aDogZXhwZWN0ZWQgMjAgYnl0ZXMsIGdvdCAke2ludmFsaWRUb0FkZHJlc3MubGVuZ3RofWApO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWRGcm9tQWRkcmVzcyA9IGZyb21BZGRyZXNzZXMuZmluZCgoYWRkcikgPT4gYWRkci5sZW5ndGggIT09IDIwKTtcbiAgICBpZiAoaW52YWxpZEZyb21BZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgSW52YWxpZCBmcm9tQWRkcmVzcyBsZW5ndGg6IGV4cGVjdGVkIDIwIGJ5dGVzLCBnb3QgJHtpbnZhbGlkRnJvbUFkZHJlc3MubGVuZ3RofWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1wb3J0VHggPSBwdm0uZS5uZXdJbXBvcnRUeChcbiAgICAgIHtcbiAgICAgICAgZmVlU3RhdGU6IHRoaXMudHJhbnNhY3Rpb24uX2ZlZVN0YXRlLFxuICAgICAgICBmcm9tQWRkcmVzc2VzQnl0ZXM6IGZyb21BZGRyZXNzZXMsXG4gICAgICAgIHNvdXJjZUNoYWluSWQ6IHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuY0NoYWluQmxvY2tjaGFpbklELFxuICAgICAgICB0b0FkZHJlc3Nlc0J5dGVzOiB0b0FkZHJlc3NlcyxcbiAgICAgICAgdXR4b3M6IG5hdGl2ZVV0eG9zLFxuICAgICAgICB0aHJlc2hvbGQ6IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCxcbiAgICAgICAgbG9ja3RpbWU6IHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lLFxuICAgICAgfSxcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2NvbnRleHRcbiAgICApO1xuXG4gICAgY29uc3QgZmxhcmVVbnNpZ25lZFR4ID0gaW1wb3J0VHggYXMgVW5zaWduZWRUeDtcbiAgICBjb25zdCBpbm5lclR4ID0gZmxhcmVVbnNpZ25lZFR4LmdldFR4KCkgYXMgcHZtU2VyaWFsLkltcG9ydFR4O1xuXG4gICAgY29uc3QgdXR4b3NXaXRoSW5kZXggPSBpbm5lclR4Lmlucy5tYXAoKGlucHV0LCBpZHgpID0+IHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVXR4byA9IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zW2lkeF07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vcmlnaW5hbFV0eG8sXG4gICAgICAgIGFkZHJlc3Nlc0luZGV4OiBvcmlnaW5hbFV0eG8uYWRkcmVzc2VzSW5kZXgsXG4gICAgICAgIGFkZHJlc3Nlczogb3JpZ2luYWxVdHhvLmFkZHJlc3NlcyxcbiAgICAgICAgdGhyZXNob2xkOiBvcmlnaW5hbFV0eG8udGhyZXNob2xkIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcyA9IHV0eG9zV2l0aEluZGV4O1xuXG4gICAgY29uc3QgdHhDcmVkZW50aWFscyA9IHV0eG9zV2l0aEluZGV4Lm1hcCgodXR4bykgPT4gdGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB1dHhvLnRocmVzaG9sZCkpO1xuXG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSB1dHhvc1dpdGhJbmRleC5tYXAoKHV0eG8pID0+IHRoaXMuY3JlYXRlQWRkcmVzc01hcEZvclV0eG8odXR4bywgdXR4by50aHJlc2hvbGQpKTtcblxuICAgIGNvbnN0IGZpeGVkVW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KGlubmVyVHgsIFtdLCBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksIHR4Q3JlZGVudGlhbHMpO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbihmaXhlZFVuc2lnbmVkVHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY292ZXIgVVRYT3MgZnJvbSBpbXBvcnRlZCBpbnB1dHMuXG4gICAqIFVzZXMgb3V0cHV0IGFkZHJlc3NlcyBhcyBwcm94eSBmb3IgVVRYTyBhZGRyZXNzZXMgc2luY2UgdGhleSBzaG91bGQgYmUgdGhlIHNhbWVcbiAgICogYWRkcmVzc2VzIGNvbnRyb2xsaW5nIHRoZSBtdWx0aXNpZyAoanVzdCBwb3RlbnRpYWxseSBpbiBkaWZmZXJlbnQgb24tY2hhaW4gb3JkZXIpLlxuICAgKlxuICAgKiBAcGFyYW0gaW1wb3J0ZWRJbnB1dHMgQXJyYXkgb2YgdHJhbnNmZXJhYmxlIGlucHV0c1xuICAgKiBAcGFyYW0gb3V0cHV0QWRkcnMgT3V0cHV0IG93bmVyIGFkZHJlc3NlcyB0byB1c2UgYXMgcHJveHkgZm9yIFVUWE8gYWRkcmVzc2VzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGRlY29kZWQgVVRYTyBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIHJlY292ZXJVdHhvcyhcbiAgICBpbXBvcnRlZElucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSxcbiAgICBvdXRwdXRBZGRycz86IHsgdG9CeXRlcygpOiBVaW50OEFycmF5IH1bXVxuICApOiBEZWNvZGVkVXR4b09ialtdIHtcbiAgICBjb25zdCBwcm94eUFkZHJlc3NlcyA9IG91dHB1dEFkZHJzXG4gICAgICA/IG91dHB1dEFkZHJzLm1hcCgoYWRkcikgPT5cbiAgICAgICAgICB1dGlscy5hZGRyZXNzVG9TdHJpbmcoXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmhycCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYWxpYXMsXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShhZGRyLnRvQnl0ZXMoKSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogW107XG5cbiAgICByZXR1cm4gaW1wb3J0ZWRJbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdXR4b0lkID0gaW5wdXQudXR4b0lEO1xuICAgICAgY29uc3QgdHJhbnNmZXJJbnB1dCA9IGlucHV0LmlucHV0IGFzIFRyYW5zZmVySW5wdXQ7XG4gICAgICBjb25zdCBzaWdJbmRpY2llcyA9IHRyYW5zZmVySW5wdXQuc2lnSW5kaWNpZXMoKTtcblxuICAgICAgY29uc3QgdXR4bzogRGVjb2RlZFV0eG9PYmogPSB7XG4gICAgICAgIG91dHB1dElEOiBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LFxuICAgICAgICBhbW91bnQ6IHRyYW5zZmVySW5wdXQuYW1vdW50KCkudG9TdHJpbmcoKSxcbiAgICAgICAgdHhpZDogdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbSh1dHhvSWQudHhJRC50b0J5dGVzKCkpKSxcbiAgICAgICAgb3V0cHV0aWR4OiB1dHhvSWQub3V0cHV0SWR4LnZhbHVlKCkudG9TdHJpbmcoKSxcbiAgICAgICAgdGhyZXNob2xkOiBzaWdJbmRpY2llcy5sZW5ndGggfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgICBhZGRyZXNzZXM6IHByb3h5QWRkcmVzc2VzLFxuICAgICAgICBhZGRyZXNzZXNJbmRleDogc2lnSW5kaWNpZXMsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHV0eG87XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBwcm9wZXIgYWRkcmVzc2VzSW5kZXggZnJvbSBwYXJzZWQgdHJhbnNhY3Rpb24ncyBzaWdJbmRpY2llcy5cbiAgICogRm9sbG93aW5nIEFWQVggUCBhcHByb2FjaDogYWRkcmVzc2VzSW5kZXhbc2VuZGVySWR4XSA9IHBvc2l0aW9uIG9mIHNlbmRlciBpbiBVVFhPIGFkZHJlc3Nlcy5cbiAgICpcbiAgICogRm9yIHBhcnNlZCB0cmFuc2FjdGlvbnM6XG4gICAqIC0gc2lnSW5kaWNpZXMgdGVsbHMgdXMgd2hpY2ggVVRYTyBwb3NpdGlvbnMgbmVlZCB0byBzaWduIGZvciBlYWNoIHNsb3RcbiAgICogLSBXZSB1c2Ugb3V0cHV0IGFkZHJlc3NlcyBhcyBwcm94eSBmb3IgVVRYTyBhZGRyZXNzZXNcbiAgICogLSBXZSBjb21wdXRlIGFkZHJlc3Nlc0luZGV4IGFzIHNlbmRlciAtPiB1dHhvIHBvc2l0aW9uIG1hcHBpbmdcbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZUFkZHJlc3Nlc0luZGV4RnJvbVBhcnNlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZW5kZXIgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzO1xuICAgIGlmICghc2VuZGVyIHx8IHNlbmRlci5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZvckVhY2goKHV0eG8pID0+IHtcbiAgICAgIGlmICh1dHhvLmFkZHJlc3NlcyAmJiB1dHhvLmFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHV0eG9BZGRyZXNzZXMgPSB1dHhvLmFkZHJlc3Nlcy5tYXAoKGEpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhKSk7XG4gICAgICAgIHV0eG8uYWRkcmVzc2VzSW5kZXggPSBzZW5kZXIubWFwKChzZW5kZXJBZGRyKSA9PlxuICAgICAgICAgIHV0eG9BZGRyZXNzZXMuZmluZEluZGV4KCh1dHhvQWRkcikgPT4gQnVmZmVyLmNvbXBhcmUoQnVmZmVyLmZyb20odXR4b0FkZHIpLCBCdWZmZXIuZnJvbShzZW5kZXJBZGRyKSkgPT09IDApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -55,20 +55,48 @@ export declare abstract class AtomicTransactionBuilder extends TransactionBuilde
|
|
|
55
55
|
*/
|
|
56
56
|
amount(value: bigint | string): this;
|
|
57
57
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
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
|
+
*
|
|
60
85
|
* @param utxo - The UTXO to create credential for
|
|
61
|
-
* @param threshold - Number of signatures required
|
|
86
|
+
* @param threshold - Number of signatures required for this specific UTXO
|
|
62
87
|
* @returns Credential with empty signatures ordered based on UTXO positions
|
|
63
88
|
* @protected
|
|
64
89
|
*/
|
|
65
90
|
protected createCredentialForUtxo(utxo: DecodedUtxoObj, threshold: number): Credential;
|
|
66
91
|
/**
|
|
67
|
-
* Create AddressMap based on
|
|
68
|
-
*
|
|
69
|
-
*
|
|
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
|
+
*
|
|
70
98
|
* @param utxo - The UTXO to create AddressMap for
|
|
71
|
-
* @param threshold - Number of signatures required
|
|
99
|
+
* @param threshold - Number of signatures required for this specific UTXO
|
|
72
100
|
* @returns AddressMap that maps addresses to signature slots based on UTXO order
|
|
73
101
|
* @protected
|
|
74
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,qBAAqB,CAAC;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"atomicTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,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"}
|
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.AtomicTransactionBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
7
8
|
const transactionBuilder_1 = require("./transactionBuilder");
|
|
8
9
|
const transaction_1 = require("./transaction");
|
|
9
10
|
const flarejs_1 = require("@flarenetwork/flarejs");
|
|
@@ -86,112 +87,143 @@ class AtomicTransactionBuilder extends transactionBuilder_1.TransactionBuilder {
|
|
|
86
87
|
return this;
|
|
87
88
|
}
|
|
88
89
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
90
|
+
* Compute addressesIndex for UTXOs following AVAX P approach.
|
|
91
|
+
* addressesIndex[senderIdx] = position of sender[senderIdx] in UTXO's address list
|
|
92
|
+
*
|
|
93
|
+
* Example:
|
|
94
|
+
* A = user key, B = hsm key, C = backup key
|
|
95
|
+
* sender (bitgoAddresses) = [ A, B, C ]
|
|
96
|
+
* utxo.addresses (IMS addresses) = [ B, C, A ]
|
|
97
|
+
* addressesIndex = [ 2, 0, 1 ]
|
|
98
|
+
* (sender[0]=A is at position 2 in UTXO, sender[1]=B is at position 0, etc.)
|
|
99
|
+
*
|
|
100
|
+
* @protected
|
|
101
|
+
*/
|
|
102
|
+
computeAddressesIndex() {
|
|
103
|
+
const sender = this.transaction._fromAddresses;
|
|
104
|
+
this.transaction._utxos.forEach((utxo) => {
|
|
105
|
+
if (utxo.addressesIndex && utxo.addressesIndex.length > 0) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (utxo.addresses && utxo.addresses.length > 0) {
|
|
109
|
+
const utxoAddresses = utxo.addresses.map((a) => utils_1.default.parseAddress(a));
|
|
110
|
+
utxo.addressesIndex = sender.map((a) => utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0));
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Validate UTXOs have consistent addresses.
|
|
116
|
+
* Note: UTXO threshold can differ from transaction threshold - each UTXO has its own
|
|
117
|
+
* signature requirement based on how it was created (e.g., change outputs may have threshold=1).
|
|
118
|
+
* @protected
|
|
119
|
+
*/
|
|
120
|
+
validateUtxoAddresses() {
|
|
121
|
+
this.transaction._utxos.forEach((utxo) => {
|
|
122
|
+
if (!utxo) {
|
|
123
|
+
throw new sdk_core_1.BuildTransactionError('Utxo is undefined');
|
|
124
|
+
}
|
|
125
|
+
if (utxo.addressesIndex?.includes(-1)) {
|
|
126
|
+
throw new sdk_core_1.BuildTransactionError('Addresses are inconsistent: ' + utxo.txid);
|
|
127
|
+
}
|
|
128
|
+
if (utxo.threshold !== undefined && utxo.threshold <= 0) {
|
|
129
|
+
throw new sdk_core_1.BuildTransactionError('UTXO threshold must be positive: ' + utxo.txid);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Create credential with dynamic ordering based on addressesIndex from UTXO.
|
|
135
|
+
* Matches AVAX P behavior: signature order depends on UTXO address positions.
|
|
136
|
+
*
|
|
137
|
+
* addressesIndex[senderIdx] = utxoPosition tells us where each sender is in the UTXO.
|
|
138
|
+
* We create signature slots ordered by utxoPosition (smaller position = earlier slot).
|
|
139
|
+
*
|
|
91
140
|
* @param utxo - The UTXO to create credential for
|
|
92
|
-
* @param threshold - Number of signatures required
|
|
141
|
+
* @param threshold - Number of signatures required for this specific UTXO
|
|
93
142
|
* @returns Credential with empty signatures ordered based on UTXO positions
|
|
94
143
|
* @protected
|
|
95
144
|
*/
|
|
96
145
|
createCredentialForUtxo(utxo, threshold) {
|
|
97
146
|
const sender = this.transaction._fromAddresses;
|
|
98
|
-
const
|
|
99
|
-
//
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
emptySignatures.push(utils_1.default.createNewSig(''));
|
|
147
|
+
const addressesIndex = utxo.addressesIndex ?? [];
|
|
148
|
+
// either user (0) or recovery (2)
|
|
149
|
+
const firstIndex = this.recoverSigner ? 2 : 0;
|
|
150
|
+
const bitgoIndex = 1;
|
|
151
|
+
if (threshold === 1) {
|
|
152
|
+
if (sender && sender.length > firstIndex && addressesIndex[firstIndex] !== undefined) {
|
|
153
|
+
return new flarejs_1.Credential([utils_1.default.createEmptySigWithAddress(Buffer.from(sender[firstIndex]).toString('hex'))]);
|
|
106
154
|
}
|
|
107
|
-
return new flarejs_1.Credential(
|
|
155
|
+
return new flarejs_1.Credential([utils_1.default.createNewSig('')]);
|
|
108
156
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
157
|
+
// If we have valid addressesIndex, use it to determine signature order
|
|
158
|
+
// addressesIndex[senderIdx] = position in UTXO
|
|
159
|
+
// Smaller position = earlier slot in signature array
|
|
160
|
+
if (addressesIndex.length >= 2 && sender && sender.length >= threshold) {
|
|
161
|
+
let emptySignatures;
|
|
162
|
+
if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) {
|
|
163
|
+
emptySignatures = [
|
|
164
|
+
utils_1.default.createNewSig(''),
|
|
165
|
+
utils_1.default.createEmptySigWithAddress(Buffer.from(sender[firstIndex]).toString('hex')),
|
|
166
|
+
];
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
emptySignatures = [
|
|
170
|
+
utils_1.default.createEmptySigWithAddress(Buffer.from(sender[firstIndex]).toString('hex')),
|
|
171
|
+
utils_1.default.createNewSig(''),
|
|
172
|
+
];
|
|
114
173
|
}
|
|
115
174
|
return new flarejs_1.Credential(emptySignatures);
|
|
116
175
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
// either user (0) or recovery (2)
|
|
121
|
-
const firstIndex = this.recoverSigner ? 2 : 0;
|
|
122
|
-
const bitgoIndex = 1;
|
|
123
|
-
// Dynamic ordering based on addressesIndex
|
|
124
|
-
let emptySignatures;
|
|
125
|
-
if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) {
|
|
126
|
-
// Bitgo comes first in signature order: [zeros, userAddress]
|
|
127
|
-
emptySignatures = [
|
|
128
|
-
utils_1.default.createNewSig(''),
|
|
129
|
-
utils_1.default.createEmptySigWithAddress(Buffer.from(sender[firstIndex]).toString('hex')),
|
|
130
|
-
];
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
// User comes first in signature order: [userAddress, zeros]
|
|
134
|
-
emptySignatures = [
|
|
135
|
-
utils_1.default.createEmptySigWithAddress(Buffer.from(sender[firstIndex]).toString('hex')),
|
|
136
|
-
utils_1.default.createNewSig(''),
|
|
137
|
-
];
|
|
176
|
+
const emptySignatures = [];
|
|
177
|
+
for (let i = 0; i < threshold; i++) {
|
|
178
|
+
emptySignatures.push(utils_1.default.createNewSig(''));
|
|
138
179
|
}
|
|
139
180
|
return new flarejs_1.Credential(emptySignatures);
|
|
140
181
|
}
|
|
141
182
|
/**
|
|
142
|
-
* Create AddressMap based on
|
|
143
|
-
*
|
|
144
|
-
*
|
|
183
|
+
* Create AddressMap based on addressesIndex following AVAX P approach.
|
|
184
|
+
* Maps each sender address to its signature slot based on UTXO position ordering.
|
|
185
|
+
*
|
|
186
|
+
* addressesIndex[senderIdx] = utxoPosition
|
|
187
|
+
* Signature slots are ordered by utxoPosition (smaller = earlier slot).
|
|
188
|
+
*
|
|
145
189
|
* @param utxo - The UTXO to create AddressMap for
|
|
146
|
-
* @param threshold - Number of signatures required
|
|
190
|
+
* @param threshold - Number of signatures required for this specific UTXO
|
|
147
191
|
* @returns AddressMap that maps addresses to signature slots based on UTXO order
|
|
148
192
|
* @protected
|
|
149
193
|
*/
|
|
150
194
|
createAddressMapForUtxo(utxo, threshold) {
|
|
151
195
|
const addressMap = new flarejs_1.utils.AddressMap();
|
|
152
196
|
const sender = this.transaction._fromAddresses;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
addressMap.set(new flarejs_1.Address(sender[utxoAddrIdx]), slotIdx);
|
|
163
|
-
}
|
|
197
|
+
const addressesIndex = utxo.addressesIndex ?? [];
|
|
198
|
+
const firstIndex = this.recoverSigner ? 2 : 0;
|
|
199
|
+
const bitgoIndex = 1;
|
|
200
|
+
if (threshold === 1) {
|
|
201
|
+
if (sender && sender.length > firstIndex) {
|
|
202
|
+
addressMap.set(new flarejs_1.Address(sender[firstIndex]), 0);
|
|
203
|
+
}
|
|
204
|
+
else if (sender && sender.length > 0) {
|
|
205
|
+
addressMap.set(new flarejs_1.Address(sender[0]), 0);
|
|
164
206
|
}
|
|
165
207
|
return addressMap;
|
|
166
208
|
}
|
|
167
|
-
|
|
168
|
-
if (utxo && utxo.addresses && utxo.addresses.length > 0 && sender && sender.length >= threshold) {
|
|
169
|
-
const utxoAddresses = utxo.addresses.map((a) => utils_1.default.parseAddress(a));
|
|
170
|
-
const addressesIndex = sender.map((a) => utxoAddresses.findIndex((u) => Buffer.compare(Buffer.from(u), Buffer.from(a)) === 0));
|
|
171
|
-
const firstIndex = this.recoverSigner ? 2 : 0;
|
|
172
|
-
const bitgoIndex = 1;
|
|
173
|
-
// Determine signature slot order based on addressesIndex (same logic as credentials)
|
|
209
|
+
if (addressesIndex.length >= 2 && sender && sender.length >= threshold) {
|
|
174
210
|
if (addressesIndex[bitgoIndex] < addressesIndex[firstIndex]) {
|
|
175
|
-
// Bitgo comes first: slot 0 = bitgo, slot 1 = firstIndex
|
|
176
211
|
addressMap.set(new flarejs_1.Address(sender[bitgoIndex]), 0);
|
|
177
212
|
addressMap.set(new flarejs_1.Address(sender[firstIndex]), 1);
|
|
178
213
|
}
|
|
179
214
|
else {
|
|
180
|
-
// User/recovery comes first: slot 0 = firstIndex, slot 1 = bitgo
|
|
181
215
|
addressMap.set(new flarejs_1.Address(sender[firstIndex]), 0);
|
|
182
216
|
addressMap.set(new flarejs_1.Address(sender[bitgoIndex]), 1);
|
|
183
217
|
}
|
|
218
|
+
return addressMap;
|
|
184
219
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
addressMap.set(new flarejs_1.Address(addr), i);
|
|
190
|
-
});
|
|
191
|
-
}
|
|
220
|
+
if (sender && sender.length >= threshold) {
|
|
221
|
+
sender.slice(0, threshold).forEach((addr, i) => {
|
|
222
|
+
addressMap.set(new flarejs_1.Address(addr), i);
|
|
223
|
+
});
|
|
192
224
|
}
|
|
193
225
|
return addressMap;
|
|
194
226
|
}
|
|
195
227
|
}
|
|
196
228
|
exports.AtomicTransactionBuilder = AtomicTransactionBuilder;
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsNkRBQTBEO0FBQzFELCtDQUE0QztBQUM1QyxtREFBaUY7QUFHakYsb0RBQTRCO0FBRTVCLE1BQXNCLHdCQUF5QixTQUFRLHVDQUFrQjtJQUl2RSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUhYLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBSTlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRCxrQkFBa0I7SUFDUixLQUFLLENBQUMsbUJBQW1CO1FBQ2pDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFTRDs7Ozs7T0FLRztJQUNILElBQWMsUUFBUTtRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFD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QUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sc0VBQXNFO1lBQ3RFLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDN0MsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGlCQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUFyTkQsNERBcU5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IENyZWRlbnRpYWwsIEFkZHJlc3MsIHV0aWxzIGFzIEZsYXJlVXRpbHMgfSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmogfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEZscnBGZWVTdGF0ZSB9IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF9leHRlcm5hbENoYWluSWQ6IEJ1ZmZlcjtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZSA9IHRoaXMuZml4ZWRGZWU7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGF3YWl0IHRoaXMuYnVpbGRGbGFyZVRyYW5zYWN0aW9uKCk7XG4gICAgdGhpcy5zZXRUcmFuc2FjdGlvblR5cGUodGhpcy50cmFuc2FjdGlvblR5cGUpO1xuICAgIGlmICh0aGlzLmhhc1NpZ25lcigpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleVBhaXIgb2YgdGhpcy5fc2lnbmVyKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudHJhbnNhY3Rpb24uc2lnbihrZXlQYWlyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHRoZSBGbGFyZSB0cmFuc2FjdGlvbi4gVHJhbnNhY3Rpb24gZmllbGQgaXMgY2hhbmdlZC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBGZWUgaXMgZml4IGZvciBBVk0gYXRvbWljIHR4LlxuICAgKlxuICAgKiBAcmV0dXJucyBuZXR3b3JrLnR4RmVlXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgZml4ZWRGZWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay50eEZlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHRyYW5zYWN0aW9uIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHRyYW5zYWN0aW9uVHlwZSBUaGUgdHJhbnNhY3Rpb24gdHlwZSB0byBiZSBzZXRcbiAgICovXG4gIHNldFRyYW5zYWN0aW9uVHlwZSh0cmFuc2FjdGlvblR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IHZvaWQge1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3R5cGUgPSB0cmFuc2FjdGlvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGludGVybmFsIGNoYWluIGlzIHRoZSBvbmUgc2V0IGZvciB0aGUgY29pbiBpbiBjb2luQ29uZmlnLm5ldHdvcmsuIFRoZSBleHRlcm5hbCBjaGFpbiBpcyB0aGUgb3RoZXIgY2hhaW4gaW52b2x2ZWQuXG4gICAqIFRoZSBleHRlcm5hbCBjaGFpbiBpZCBpcyB0aGUgc291cmNlIG9uIGltcG9ydCBhbmQgdGhlIGRlc3RpbmF0aW9uIG9uIGV4cG9ydC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYWluSWQgLSBpZCBvZiB0aGUgZXh0ZXJuYWwgY2hhaW5cbiAgICovXG4gIGV4dGVybmFsQ2hhaW5JZChjaGFpbklkOiBzdHJpbmcgfCBCdWZmZXIpOiB0aGlzIHtcbiAgICBjb25zdCBuZXdUYXJnZXRDaGFpbklkID0gdHlwZW9mIGNoYWluSWQgPT09ICdzdHJpbmcnID8gdXRpbHMuY2I1OERlY29kZShjaGFpbklkKSA6IEJ1ZmZlci5mcm9tKGNoYWluSWQpO1xuICAgIHRoaXMudmFsaWRhdGVDaGFpbklkKG5ld1RhcmdldENoYWluSWQpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IG5ld1RhcmdldENoYWluSWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiBmZWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBiaWdpbnR9IGZlZVZhbHVlIC0gdGhlIGZlZSB2YWx1ZVxuICAgKi9cbiAgZmVlKGZlZVZhbHVlOiBzdHJpbmcgfCBiaWdpbnQpOiB0aGlzIHtcbiAgICBjb25zdCBmZWUgPSB0eXBlb2YgZmVlVmFsdWUgPT09ICdzdHJpbmcnID8gZmVlVmFsdWUgOiBmZWVWYWx1ZS50b1N0cmluZygpO1xuICAgICh0aGlzLnRyYW5zYWN0aW9uIGFzIFRyYW5zYWN0aW9uKS5fZmVlLmZlZSA9IGZlZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZlZSBzdGF0ZSBmb3IgZHluYW1pYyBmZWUgY2FsY3VsYXRpb24gKFAtY2hhaW4gdHJhbnNhY3Rpb25zKVxuICAgKlxuICAgKiBAcGFyYW0ge0ZscnBGZWVTdGF0ZX0gc3RhdGUgLSB0aGUgZmVlIHN0YXRlIGZyb20gdGhlIG5ldHdvcmtcbiAgICovXG4gIGZlZVN0YXRlKHN0YXRlOiBGbHJwRmVlU3RhdGUpOiB0aGlzIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWVTdGF0ZSA9IHN0YXRlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgYW1vdW50IGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtiaWdpbnQgfCBzdHJpbmd9IHZhbHVlIC0gdGhlIGFtb3VudCB0byB0cmFuc2ZlclxuICAgKi9cbiAgYW1vdW50KHZhbHVlOiBiaWdpbnQgfCBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCB2YWx1ZUJpZ0ludCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBCaWdJbnQodmFsdWUpIDogdmFsdWU7XG4gICAgdGhpcy52YWxpZGF0ZUFtb3VudCh2YWx1ZUJpZ0ludCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fYW1vdW50ID0gdmFsdWVCaWdJbnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGNyZWRlbnRpYWwgd2l0aCBkeW5hbWljIG9yZGVyaW5nIGJhc2VkIG9uIGFkZHJlc3Nlc0luZGV4IGZyb20gVVRYT1xuICAgKiBNYXRjaGVzIGF2YXhwIGJlaGF2aW9yOiBzaWduYXR1cmUgb3JkZXIgZGVwZW5kcyBvbiBVVFhPIGFkZHJlc3MgcG9zaXRpb25zXG4gICAqIEBwYXJhbSB1dHhvIC0gVGhlIFVUWE8gdG8gY3JlYXRlIGNyZWRlbnRpYWwgZm9yXG4gICAqIEBwYXJhbSB0aHJlc2hvbGQgLSBOdW1iZXIgb2Ygc2lnbmF0dXJlcyByZXF1aXJlZFxuICAgKiBAcmV0dXJucyBDcmVkZW50aWFsIHdpdGggZW1wdHkgc2lnbmF0dXJlcyBvcmRlcmVkIGJhc2VkIG9uIFVUWE8gcG9zaXRpb25zXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvOiBEZWNvZGVkVXR4b09iaiwgdGhyZXNob2xkOiBudW1iZXIpOiBDcmVkZW50aWFsIHtcbiAgICBjb25zdCBzZW5kZXIgPSAodGhpcy50cmFuc2FjdGlvbiBhcyBUcmFuc2FjdGlvbikuX2Zyb21BZGRyZXNzZXM7XG4gICAgY29uc3QgaGFzQWRkcmVzc2VzID0gc2VuZGVyICYmIHNlbmRlci5sZW5ndGggPj0gdGhyZXNob2xkO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBwcmUtY29tcHV0ZWQgYWRkcmVzc2VzSW5kZXggKGZyb20gcGFyc2luZyBhIHRyYW5zYWN0aW9uKSwgdXNlIGl0IGRpcmVjdGx5XG4gICAgLy8gVGhpcyBpcyB0aGUgYXV0aG9yaXRhdGl2ZSBzb3VyY2UgZm9yIHNpZ25hdHVyZSBvcmRlcmluZyBmcm9tIHBhcnNlZCB0cmFuc2FjdGlvbnNcbiAgICBpZiAodXR4by5hZGRyZXNzZXNJbmRleCAmJiB1dHhvLmFkZHJlc3Nlc0luZGV4Lmxlbmd0aCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIC8vIENyZWF0ZSBjcmVkZW50aWFscyBtYXRjaGluZyB0aGUgc2lnSW5kaWNpZXMgb3JkZXIgZnJvbSB0aGUgcGFyc2VkIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBlbXB0eVNpZ25hdHVyZXM6IFJldHVyblR5cGU8dHlwZW9mIHV0aWxzLmNyZWF0ZU5ld1NpZz5bXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHJlc2hvbGQ7IGkrKykge1xuICAgICAgICBlbXB0eVNpZ25hdHVyZXMucHVzaCh1dGlscy5jcmVhdGVOZXdTaWcoJycpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgQ3JlZGVudGlhbChlbXB0eVNpZ25hdHVyZXMpO1xuICAgIH1cblxuICAgIGlmICghaGFzQWRkcmVzc2VzIHx8ICF1dHhvLmFkZHJlc3NlcyB8fCB1dHhvLmFkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIEZhbGxiYWNrOiB1c2UgYWxsIHplcm9zIGlmIG5vIGFkZHJlc3NlcyBhdmFpbGFibGVcbiAgICAgIGNvbnN0IGVtcHR5U2lnbmF0dXJlczogUmV0dXJuVHlwZTx0eXBlb2YgdXRpbHMuY3JlYXRlTmV3U2lnPltdID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocmVzaG9sZDsgaSsrKSB7XG4gICAgICAgIGVtcHR5U2lnbmF0dXJlcy5wdXNoKHV0aWxzLmNyZWF0ZU5ld1NpZygnJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBDcmVkZW50aWFsKGVtcHR5U2lnbmF0dXJlcyk7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBhZGRyZXNzZXNJbmRleDogcG9zaXRpb24gb2YgZWFjaCBfZnJvbUFkZHJlc3NlcyBpbiBVVFhPJ3MgYWRkcmVzcyBsaXN0XG4gICAgY29uc3QgdXR4b0FkZHJlc3NlcyA9IHV0eG8uYWRkcmVzc2VzLm1hcCgoYSkgPT4gdXRpbHMucGFyc2VBZGRyZXNzKGEpKTtcbiAgICBjb25zdCBhZGRyZXNzZXNJbmRleCA9IHNlbmRlci5tYXAoKGEpID0+XG4gICAgICB1dHhvQWRkcmVzc2VzLmZpbmRJbmRleCgodSkgPT4gQnVmZmVyLmNvbXBhcmUoQnVmZmVyLmZyb20odSksIEJ1ZmZlci5mcm9tKGEpKSA9PT0gMClcbiAgICApO1xuXG4gICAgLy8gZWl0aGVyIHVzZXIgKDApIG9yIHJlY292ZXJ5ICgyKVxuICAgIGNvbnN0IGZpcnN0SW5kZXggPSB0aGlzLnJlY292ZXJTaWduZXIgPyAyIDogMDtcbiAgICBjb25zdCBiaXRnb0luZGV4ID0gMTtcblxuICAgIC8vIER5bmFtaWMgb3JkZXJpbmcgYmFzZWQgb24gYWRkcmVzc2VzSW5kZXhcbiAgICBsZXQgZW1wdHlTaWduYXR1cmVzOiBSZXR1cm5UeXBlPHR5cGVvZiB1dGlscy5jcmVhdGVOZXdTaWc+W107XG4gICAgaWYgKGFkZHJlc3Nlc0luZGV4W2JpdGdvSW5kZXhdIDwgYWRkcmVzc2VzSW5kZXhbZmlyc3RJbmRleF0pIHtcbiAgICAgIC8vIEJpdGdvIGNvbWVzIGZpcnN0IGluIHNpZ25hdHVyZSBvcmRlcjogW3plcm9zLCB1c2VyQWRkcmVzc11cbiAgICAgIGVtcHR5U2lnbmF0dXJlcyA9IFtcbiAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKCcnKSxcbiAgICAgICAgdXRpbHMuY3JlYXRlRW1wdHlTaWdXaXRoQWRkcmVzcyhCdWZmZXIuZnJvbShzZW5kZXJbZmlyc3RJbmRleF0pLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2VyIGNvbWVzIGZpcnN0IGluIHNpZ25hdHVyZSBvcmRlcjogW3VzZXJBZGRyZXNzLCB6ZXJvc11cbiAgICAgIGVtcHR5U2lnbmF0dXJlcyA9IFtcbiAgICAgICAgdXRpbHMuY3JlYXRlRW1wdHlTaWdXaXRoQWRkcmVzcyhCdWZmZXIuZnJvbShzZW5kZXJbZmlyc3RJbmRleF0pLnRvU3RyaW5nKCdoZXgnKSksXG4gICAgICAgIHV0aWxzLmNyZWF0ZU5ld1NpZygnJyksXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IENyZWRlbnRpYWwoZW1wdHlTaWduYXR1cmVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgQWRkcmVzc01hcCBiYXNlZCBvbiBzaWduYXR1cmUgc2xvdCBvcmRlciAobWF0Y2hpbmcgY3JlZGVudGlhbCBvcmRlciksIG5vdCBzb3J0ZWQgYWRkcmVzc2VzXG4gICAqIFRoaXMgbWF0Y2hlcyB0aGUgYXBwcm9hY2ggdXNlZCBpbiBjcmVkZW50aWFsczogYWRkcmVzc2VzSW5kZXggZGV0ZXJtaW5lcyBzaWduYXR1cmUgb3JkZXJcbiAgICogQWRkcmVzc01hcHMgc2hvdWxkIG1hcCBhZGRyZXNzZXMgdG8gc2lnbmF0dXJlIHNsb3RzIGluIHRoZSBzYW1lIG9yZGVyIGFzIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB1dHhvIC0gVGhlIFVUWE8gdG8gY3JlYXRlIEFkZHJlc3NNYXAgZm9yXG4gICAqIEBwYXJhbSB0aHJlc2hvbGQgLSBOdW1iZXIgb2Ygc2lnbmF0dXJlcyByZXF1aXJlZFxuICAgKiBAcmV0dXJucyBBZGRyZXNzTWFwIHRoYXQgbWFwcyBhZGRyZXNzZXMgdG8gc2lnbmF0dXJlIHNsb3RzIGJhc2VkIG9uIFVUWE8gb3JkZXJcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUFkZHJlc3NNYXBGb3JVdHhvKHV0eG86IERlY29kZWRVdHhvT2JqLCB0aHJlc2hvbGQ6IG51bWJlcik6IEZsYXJlVXRpbHMuQWRkcmVzc01hcCB7XG4gICAgY29uc3QgYWRkcmVzc01hcCA9IG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXAoKTtcbiAgICBjb25zdCBzZW5kZXIgPSAodGhpcy50cmFuc2FjdGlvbiBhcyBUcmFuc2FjdGlvbikuX2Zyb21BZGRyZXNzZXM7XG5cbiAgICAvLyBJZiB3ZSBoYXZlIHByZS1jb21wdXRlZCBhZGRyZXNzZXNJbmRleCAoZnJvbSBwYXJzaW5nIGEgdHJhbnNhY3Rpb24pLCB1c2UgaXQgZGlyZWN0bHlcbiAgICAvLyBhZGRyZXNzZXNJbmRleCBmcm9tIHNpZ0luZGljaWVzKCkgdGVsbHMgdXM6IGFkZHJlc3Nlc0luZGV4W3Nsb3RJZHhdID0gdXR4b0FkZHJlc3NJZHhcbiAgICAvLyBUaGlzIG1lYW5zIHNsb3QgJ3Nsb3RJZHgnIGV4cGVjdHMgc2lnbmF0dXJlIGZyb20gVVRYTyBhZGRyZXNzIGF0IGluZGV4ICd1dHhvQWRkcmVzc0lkeCdcbiAgICAvLyBBc3N1bWluZyBzZW5kZXJbaV0gY29ycmVzcG9uZHMgdG8gdXR4b0FkZHJlc3NbaV0sIHdlIG1hcCBzZW5kZXJbYWRkcmVzc2VzSW5kZXhbc2xvdElkeF1dIHRvIHNsb3RJZHhcbiAgICBpZiAodXR4by5hZGRyZXNzZXNJbmRleCAmJiB1dHhvLmFkZHJlc3Nlc0luZGV4Lmxlbmd0aCA+PSB0aHJlc2hvbGQgJiYgc2VuZGVyICYmIHNlbmRlci5sZW5ndGggPj0gdGhyZXNob2xkKSB7XG4gICAgICBmb3IgKGxldCBzbG90SWR4ID0gMDsgc2xvdElkeCA8IHRocmVzaG9sZDsgc2xvdElkeCsrKSB7XG4gICAgICAgIGNvbnN0IHV0eG9BZGRySWR4ID0gdXR4by5hZGRyZXNzZXNJbmRleFtzbG90SWR4XTtcbiAgICAgICAgLy8gTWFwIHRoZSBzZW5kZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIFVUWE8gYWRkcmVzcyBpbmRleCB0byB0aGlzIHNsb3RcbiAgICAgICAgaWYgKHV0eG9BZGRySWR4IDwgc2VuZGVyLmxlbmd0aCkge1xuICAgICAgICAgIGFkZHJlc3NNYXAuc2V0KG5ldyBBZGRyZXNzKHNlbmRlclt1dHhvQWRkcklkeF0pLCBzbG90SWR4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFkZHJlc3NNYXA7XG4gICAgfVxuXG4gICAgLy8gSWYgVVRYTyBoYXMgYWRkcmVzc2VzLCBjb21wdXRlIGFkZHJlc3Nlc0luZGV4IHRvIGRldGVybWluZSBzaWduYXR1cmUgb3JkZXJcbiAgICBpZiAodXR4byAmJiB1dHhvLmFkZHJlc3NlcyAmJiB1dHhvLmFkZHJlc3Nlcy5sZW5ndGggPiAwICYmIHNlbmRlciAmJiBzZW5kZXIubGVuZ3RoID49IHRocmVzaG9sZCkge1xuICAgICAgY29uc3QgdXR4b0FkZHJlc3NlcyA9IHV0eG8uYWRkcmVzc2VzLm1hcCgoYSkgPT4gdXRpbHMucGFyc2VBZGRyZXNzKGEpKTtcbiAgICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4ID0gc2VuZGVyLm1hcCgoYSkgPT5cbiAgICAgICAgdXR4b0FkZHJlc3Nlcy5maW5kSW5kZXgoKHUpID0+IEJ1ZmZlci5jb21wYXJlKEJ1ZmZlci5mcm9tKHUpLCBCdWZmZXIuZnJvbShhKSkgPT09IDApXG4gICAgICApO1xuXG4gICAgICBjb25zdCBmaXJzdEluZGV4ID0gdGhpcy5yZWNvdmVyU2lnbmVyID8gMiA6IDA7XG4gICAgICBjb25zdCBiaXRnb0luZGV4ID0gMTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHNpZ25hdHVyZSBzbG90IG9yZGVyIGJhc2VkIG9uIGFkZHJlc3Nlc0luZGV4IChzYW1lIGxvZ2ljIGFzIGNyZWRlbnRpYWxzKVxuICAgICAgaWYgKGFkZHJlc3Nlc0luZGV4W2JpdGdvSW5kZXhdIDwgYWRkcmVzc2VzSW5kZXhbZmlyc3RJbmRleF0pIHtcbiAgICAgICAgLy8gQml0Z28gY29tZXMgZmlyc3Q6IHNsb3QgMCA9IGJpdGdvLCBzbG90IDEgPSBmaXJzdEluZGV4XG4gICAgICAgIGFkZHJlc3NNYXAuc2V0KG5ldyBBZGRyZXNzKHNlbmRlcltiaXRnb0luZGV4XSksIDApO1xuICAgICAgICBhZGRyZXNzTWFwLnNldChuZXcgQWRkcmVzcyhzZW5kZXJbZmlyc3RJbmRleF0pLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVzZXIvcmVjb3ZlcnkgY29tZXMgZmlyc3Q6IHNsb3QgMCA9IGZpcnN0SW5kZXgsIHNsb3QgMSA9IGJpdGdvXG4gICAgICAgIGFkZHJlc3NNYXAuc2V0KG5ldyBBZGRyZXNzKHNlbmRlcltmaXJzdEluZGV4XSksIDApO1xuICAgICAgICBhZGRyZXNzTWFwLnNldChuZXcgQWRkcmVzcyhzZW5kZXJbYml0Z29JbmRleF0pLCAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2s6IG1hcCBhZGRyZXNzZXMgc2VxdWVudGlhbGx5IGlmIG5vIFVUWE8gYWRkcmVzc2VzIGF2YWlsYWJsZVxuICAgICAgaWYgKHNlbmRlciAmJiBzZW5kZXIubGVuZ3RoID49IHRocmVzaG9sZCkge1xuICAgICAgICBzZW5kZXIuc2xpY2UoMCwgdGhyZXNob2xkKS5mb3JFYWNoKChhZGRyLCBpKSA9PiB7XG4gICAgICAgICAgYWRkcmVzc01hcC5zZXQobmV3IEFkZHJlc3MoYWRkciksIGkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYWRkcmVzc01hcDtcbiAgfVxufVxuIl19
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQThFO0FBQzlFLDZEQUEwRDtBQUMxRCwrQ0FBNEM7QUFDNUMsbURBQWlGO0FBR2pGLG9EQUE0QjtBQUU1QixNQUFzQix3QkFBeUIsU0FBUSx1Q0FBa0I7SUFJdkUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFIWCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUk5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNyQixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBU0Q7Ozs7O09BS0c7SUFDSCxJQUFjLFFBQVE7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFD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LEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzVELFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksaUJBQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGlCQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxpQkFBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JELENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBRUQsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxpQkFBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQXRQRCw0REFzUEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBDcmVkZW50aWFsLCBBZGRyZXNzLCB1dGlscyBhcyBGbGFyZVV0aWxzIH0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB7IERlY29kZWRVdHhvT2JqIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBGbHJwRmVlU3RhdGUgfSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfZXh0ZXJuYWxDaGFpbklkOiBCdWZmZXI7XG4gIHByb3RlY3RlZCByZWNvdmVyU2lnbmVyID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oX2NvaW5Db25maWcpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUgPSB0aGlzLmZpeGVkRmVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8VHJhbnNhY3Rpb24+IHtcbiAgICBhd2FpdCB0aGlzLmJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpO1xuICAgIHRoaXMuc2V0VHJhbnNhY3Rpb25UeXBlKHRoaXMudHJhbnNhY3Rpb25UeXBlKTtcbiAgICBpZiAodGhpcy5oYXNTaWduZXIoKSkge1xuICAgICAgZm9yIChjb25zdCBrZXlQYWlyIG9mIHRoaXMuX3NpZ25lcikge1xuICAgICAgICBhd2FpdCB0aGlzLnRyYW5zYWN0aW9uLnNpZ24oa2V5UGFpcik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgRmxhcmUgdHJhbnNhY3Rpb24uIFRyYW5zYWN0aW9uIGZpZWxkIGlzIGNoYW5nZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYnVpbGRGbGFyZVRyYW5zYWN0aW9uKCk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZTtcblxuICAvKipcbiAgICogRmVlIGlzIGZpeCBmb3IgQVZNIGF0b21pYyB0eC5cbiAgICpcbiAgICogQHJldHVybnMgbmV0d29yay50eEZlZVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGZpeGVkRmVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsudHhGZWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSB0cmFuc2FjdGlvbiB0eXBlXG4gICAqXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0cmFuc2FjdGlvblR5cGUgVGhlIHRyYW5zYWN0aW9uIHR5cGUgdG8gYmUgc2V0XG4gICAqL1xuICBzZXRUcmFuc2FjdGlvblR5cGUodHJhbnNhY3Rpb25UeXBlOiBUcmFuc2FjdGlvblR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90eXBlID0gdHJhbnNhY3Rpb25UeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5hbCBjaGFpbiBpcyB0aGUgb25lIHNldCBmb3IgdGhlIGNvaW4gaW4gY29pbkNvbmZpZy5uZXR3b3JrLiBUaGUgZXh0ZXJuYWwgY2hhaW4gaXMgdGhlIG90aGVyIGNoYWluIGludm9sdmVkLlxuICAgKiBUaGUgZXh0ZXJuYWwgY2hhaW4gaWQgaXMgdGhlIHNvdXJjZSBvbiBpbXBvcnQgYW5kIHRoZSBkZXN0aW5hdGlvbiBvbiBleHBvcnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFpbklkIC0gaWQgb2YgdGhlIGV4dGVybmFsIGNoYWluXG4gICAqL1xuICBleHRlcm5hbENoYWluSWQoY2hhaW5JZDogc3RyaW5nIHwgQnVmZmVyKTogdGhpcyB7XG4gICAgY29uc3QgbmV3VGFyZ2V0Q2hhaW5JZCA9IHR5cGVvZiBjaGFpbklkID09PSAnc3RyaW5nJyA/IHV0aWxzLmNiNThEZWNvZGUoY2hhaW5JZCkgOiBCdWZmZXIuZnJvbShjaGFpbklkKTtcbiAgICB0aGlzLnZhbGlkYXRlQ2hhaW5JZChuZXdUYXJnZXRDaGFpbklkKTtcbiAgICB0aGlzLl9leHRlcm5hbENoYWluSWQgPSBuZXdUYXJnZXRDaGFpbklkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gZmVlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgYmlnaW50fSBmZWVWYWx1ZSAtIHRoZSBmZWUgdmFsdWVcbiAgICovXG4gIGZlZShmZWVWYWx1ZTogc3RyaW5nIHwgYmlnaW50KTogdGhpcyB7XG4gICAgY29uc3QgZmVlID0gdHlwZW9mIGZlZVZhbHVlID09PSAnc3RyaW5nJyA/IGZlZVZhbHVlIDogZmVlVmFsdWUudG9TdHJpbmcoKTtcbiAgICAodGhpcy50cmFuc2FjdGlvbiBhcyBUcmFuc2FjdGlvbikuX2ZlZS5mZWUgPSBmZWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBmZWUgc3RhdGUgZm9yIGR5bmFtaWMgZmVlIGNhbGN1bGF0aW9uIChQLWNoYWluIHRyYW5zYWN0aW9ucylcbiAgICpcbiAgICogQHBhcmFtIHtGbHJwRmVlU3RhdGV9IHN0YXRlIC0gdGhlIGZlZSBzdGF0ZSBmcm9tIHRoZSBuZXR3b3JrXG4gICAqL1xuICBmZWVTdGF0ZShzdGF0ZTogRmxycEZlZVN0YXRlKTogdGhpcyB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZmVlU3RhdGUgPSBzdGF0ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFtb3VudCBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7YmlnaW50IHwgc3RyaW5nfSB2YWx1ZSAtIHRoZSBhbW91bnQgdG8gdHJhbnNmZXJcbiAgICovXG4gIGFtb3VudCh2YWx1ZTogYmlnaW50IHwgc3RyaW5nKTogdGhpcyB7XG4gICAgY29uc3QgdmFsdWVCaWdJbnQgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gQmlnSW50KHZhbHVlKSA6IHZhbHVlO1xuICAgIHRoaXMudmFsaWRhdGVBbW91bnQodmFsdWVCaWdJbnQpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Ftb3VudCA9IHZhbHVlQmlnSW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgYWRkcmVzc2VzSW5kZXggZm9yIFVUWE9zIGZvbGxvd2luZyBBVkFYIFAgYXBwcm9hY2guXG4gICAqIGFkZHJlc3Nlc0luZGV4W3NlbmRlcklkeF0gPSBwb3NpdGlvbiBvZiBzZW5kZXJbc2VuZGVySWR4XSBpbiBVVFhPJ3MgYWRkcmVzcyBsaXN0XG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqICAgQSA9IHVzZXIga2V5LCBCID0gaHNtIGtleSwgQyA9IGJhY2t1cCBrZXlcbiAgICogICBzZW5kZXIgKGJpdGdvQWRkcmVzc2VzKSA9IFsgQSwgQiwgQyBdXG4gICAqICAgdXR4by5hZGRyZXNzZXMgKElNUyBhZGRyZXNzZXMpID0gWyBCLCBDLCBBIF1cbiAgICogICBhZGRyZXNzZXNJbmRleCA9IFsgMiwgMCwgMSBdXG4gICAqICAgKHNlbmRlclswXT1BIGlzIGF0IHBvc2l0aW9uIDIgaW4gVVRYTywgc2VuZGVyWzFdPUIgaXMgYXQgcG9zaXRpb24gMCwgZXRjLilcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbXB1dGVBZGRyZXNzZXNJbmRleCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZW5kZXIgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MuZm9yRWFjaCgodXR4bykgPT4ge1xuICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzSW5kZXggJiYgdXR4by5hZGRyZXNzZXNJbmRleC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzICYmIHV0eG8uYWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdXR4b0FkZHJlc3NlcyA9IHV0eG8uYWRkcmVzc2VzLm1hcCgoYSkgPT4gdXRpbHMucGFyc2VBZGRyZXNzKGEpKTtcbiAgICAgICAgdXR4by5hZGRyZXNzZXNJbmRleCA9IHNlbmRlci5tYXAoKGEpID0+XG4gICAgICAgICAgdXR4b0FkZHJlc3Nlcy5maW5kSW5kZXgoKHUpID0+IEJ1ZmZlci5jb21wYXJlKEJ1ZmZlci5mcm9tKHUpLCBCdWZmZXIuZnJvbShhKSkgPT09IDApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgVVRYT3MgaGF2ZSBjb25zaXN0ZW50IGFkZHJlc3Nlcy5cbiAgICogTm90ZTogVVRYTyB0aHJlc2hvbGQgY2FuIGRpZmZlciBmcm9tIHRyYW5zYWN0aW9uIHRocmVzaG9sZCAtIGVhY2ggVVRYTyBoYXMgaXRzIG93blxuICAgKiBzaWduYXR1cmUgcmVxdWlyZW1lbnQgYmFzZWQgb24gaG93IGl0IHdhcyBjcmVhdGVkIChlLmcuLCBjaGFuZ2Ugb3V0cHV0cyBtYXkgaGF2ZSB0aHJlc2hvbGQ9MSkuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZVV0eG9BZGRyZXNzZXMoKTogdm9pZCB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MuZm9yRWFjaCgodXR4bykgPT4ge1xuICAgICAgaWYgKCF1dHhvKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1V0eG8gaXMgdW5kZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICBpZiAodXR4by5hZGRyZXNzZXNJbmRleD8uaW5jbHVkZXMoLTEpKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0FkZHJlc3NlcyBhcmUgaW5jb25zaXN0ZW50OiAnICsgdXR4by50eGlkKTtcbiAgICAgIH1cbiAgICAgIGlmICh1dHhvLnRocmVzaG9sZCAhPT0gdW5kZWZpbmVkICYmIHV0eG8udGhyZXNob2xkIDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVVRYTyB0aHJlc2hvbGQgbXVzdCBiZSBwb3NpdGl2ZTogJyArIHV0eG8udHhpZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGNyZWRlbnRpYWwgd2l0aCBkeW5hbWljIG9yZGVyaW5nIGJhc2VkIG9uIGFkZHJlc3Nlc0luZGV4IGZyb20gVVRYTy5cbiAgICogTWF0Y2hlcyBBVkFYIFAgYmVoYXZpb3I6IHNpZ25hdHVyZSBvcmRlciBkZXBlbmRzIG9uIFVUWE8gYWRkcmVzcyBwb3NpdGlvbnMuXG4gICAqXG4gICAqIGFkZHJlc3Nlc0luZGV4W3NlbmRlcklkeF0gPSB1dHhvUG9zaXRpb24gdGVsbHMgdXMgd2hlcmUgZWFjaCBzZW5kZXIgaXMgaW4gdGhlIFVUWE8uXG4gICAqIFdlIGNyZWF0ZSBzaWduYXR1cmUgc2xvdHMgb3JkZXJlZCBieSB1dHhvUG9zaXRpb24gKHNtYWxsZXIgcG9zaXRpb24gPSBlYXJsaWVyIHNsb3QpLlxuICAgKlxuICAgKiBAcGFyYW0gdXR4byAtIFRoZSBVVFhPIHRvIGNyZWF0ZSBjcmVkZW50aWFsIGZvclxuICAgKiBAcGFyYW0gdGhyZXNob2xkIC0gTnVtYmVyIG9mIHNpZ25hdHVyZXMgcmVxdWlyZWQgZm9yIHRoaXMgc3BlY2lmaWMgVVRYT1xuICAgKiBAcmV0dXJucyBDcmVkZW50aWFsIHdpdGggZW1wdHkgc2lnbmF0dXJlcyBvcmRlcmVkIGJhc2VkIG9uIFVUWE8gcG9zaXRpb25zXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvOiBEZWNvZGVkVXR4b09iaiwgdGhyZXNob2xkOiBudW1iZXIpOiBDcmVkZW50aWFsIHtcbiAgICBjb25zdCBzZW5kZXIgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzO1xuICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4ID0gdXR4by5hZGRyZXNzZXNJbmRleCA/PyBbXTtcblxuICAgIC8vIGVpdGhlciB1c2VyICgwKSBvciByZWNvdmVyeSAoMilcbiAgICBjb25zdCBmaXJzdEluZGV4ID0gdGhpcy5yZWNvdmVyU2lnbmVyID8gMiA6IDA7XG4gICAgY29uc3QgYml0Z29JbmRleCA9IDE7XG5cbiAgICBpZiAodGhyZXNob2xkID09PSAxKSB7XG4gICAgICBpZiAoc2VuZGVyICYmIHNlbmRlci5sZW5ndGggPiBmaXJzdEluZGV4ICYmIGFkZHJlc3Nlc0luZGV4W2ZpcnN0SW5kZXhdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVkZW50aWFsKFt1dGlscy5jcmVhdGVFbXB0eVNpZ1dpdGhBZGRyZXNzKEJ1ZmZlci5mcm9tKHNlbmRlcltmaXJzdEluZGV4XSkudG9TdHJpbmcoJ2hleCcpKV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBDcmVkZW50aWFsKFt1dGlscy5jcmVhdGVOZXdTaWcoJycpXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSB2YWxpZCBhZGRyZXNzZXNJbmRleCwgdXNlIGl0IHRvIGRldGVybWluZSBzaWduYXR1cmUgb3JkZXJcbiAgICAvLyBhZGRyZXNzZXNJbmRleFtzZW5kZXJJZHhdID0gcG9zaXRpb24gaW4gVVRYT1xuICAgIC8vIFNtYWxsZXIgcG9zaXRpb24gPSBlYXJsaWVyIHNsb3QgaW4gc2lnbmF0dXJlIGFycmF5XG4gICAgaWYgKGFkZHJlc3Nlc0luZGV4Lmxlbmd0aCA+PSAyICYmIHNlbmRlciAmJiBzZW5kZXIubGVuZ3RoID49IHRocmVzaG9sZCkge1xuICAgICAgbGV0IGVtcHR5U2lnbmF0dXJlczogUmV0dXJuVHlwZTx0eXBlb2YgdXRpbHMuY3JlYXRlTmV3U2lnPltdO1xuXG4gICAgICBpZiAoYWRkcmVzc2VzSW5kZXhbYml0Z29JbmRleF0gPCBhZGRyZXNzZXNJbmRleFtmaXJzdEluZGV4XSkge1xuICAgICAgICBlbXB0eVNpZ25hdHVyZXMgPSBbXG4gICAgICAgICAgdXRpbHMuY3JlYXRlTmV3U2lnKCcnKSxcbiAgICAgICAgICB1dGlscy5jcmVhdGVFbXB0eVNpZ1dpdGhBZGRyZXNzKEJ1ZmZlci5mcm9tKHNlbmRlcltmaXJzdEluZGV4XSkudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtcHR5U2lnbmF0dXJlcyA9IFtcbiAgICAgICAgICB1dGlscy5jcmVhdGVFbXB0eVNpZ1dpdGhBZGRyZXNzKEJ1ZmZlci5mcm9tKHNlbmRlcltmaXJzdEluZGV4XSkudG9TdHJpbmcoJ2hleCcpKSxcbiAgICAgICAgICB1dGlscy5jcmVhdGVOZXdTaWcoJycpLFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBDcmVkZW50aWFsKGVtcHR5U2lnbmF0dXJlcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW1wdHlTaWduYXR1cmVzOiBSZXR1cm5UeXBlPHR5cGVvZiB1dGlscy5jcmVhdGVOZXdTaWc+W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocmVzaG9sZDsgaSsrKSB7XG4gICAgICBlbXB0eVNpZ25hdHVyZXMucHVzaCh1dGlscy5jcmVhdGVOZXdTaWcoJycpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDcmVkZW50aWFsKGVtcHR5U2lnbmF0dXJlcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIEFkZHJlc3NNYXAgYmFzZWQgb24gYWRkcmVzc2VzSW5kZXggZm9sbG93aW5nIEFWQVggUCBhcHByb2FjaC5cbiAgICogTWFwcyBlYWNoIHNlbmRlciBhZGRyZXNzIHRvIGl0cyBzaWduYXR1cmUgc2xvdCBiYXNlZCBvbiBVVFhPIHBvc2l0aW9uIG9yZGVyaW5nLlxuICAgKlxuICAgKiBhZGRyZXNzZXNJbmRleFtzZW5kZXJJZHhdID0gdXR4b1Bvc2l0aW9uXG4gICAqIFNpZ25hdHVyZSBzbG90cyBhcmUgb3JkZXJlZCBieSB1dHhvUG9zaXRpb24gKHNtYWxsZXIgPSBlYXJsaWVyIHNsb3QpLlxuICAgKlxuICAgKiBAcGFyYW0gdXR4byAtIFRoZSBVVFhPIHRvIGNyZWF0ZSBBZGRyZXNzTWFwIGZvclxuICAgKiBAcGFyYW0gdGhyZXNob2xkIC0gTnVtYmVyIG9mIHNpZ25hdHVyZXMgcmVxdWlyZWQgZm9yIHRoaXMgc3BlY2lmaWMgVVRYT1xuICAgKiBAcmV0dXJucyBBZGRyZXNzTWFwIHRoYXQgbWFwcyBhZGRyZXNzZXMgdG8gc2lnbmF0dXJlIHNsb3RzIGJhc2VkIG9uIFVUWE8gb3JkZXJcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUFkZHJlc3NNYXBGb3JVdHhvKHV0eG86IERlY29kZWRVdHhvT2JqLCB0aHJlc2hvbGQ6IG51bWJlcik6IEZsYXJlVXRpbHMuQWRkcmVzc01hcCB7XG4gICAgY29uc3QgYWRkcmVzc01hcCA9IG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXAoKTtcbiAgICBjb25zdCBzZW5kZXIgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzO1xuICAgIGNvbnN0IGFkZHJlc3Nlc0luZGV4ID0gdXR4by5hZGRyZXNzZXNJbmRleCA/PyBbXTtcblxuICAgIGNvbnN0IGZpcnN0SW5kZXggPSB0aGlzLnJlY292ZXJTaWduZXIgPyAyIDogMDtcbiAgICBjb25zdCBiaXRnb0luZGV4ID0gMTtcblxuICAgIGlmICh0aHJlc2hvbGQgPT09IDEpIHtcbiAgICAgIGlmIChzZW5kZXIgJiYgc2VuZGVyLmxlbmd0aCA+IGZpcnN0SW5kZXgpIHtcbiAgICAgICAgYWRkcmVzc01hcC5zZXQobmV3IEFkZHJlc3Moc2VuZGVyW2ZpcnN0SW5kZXhdKSwgMCk7XG4gICAgICB9IGVsc2UgaWYgKHNlbmRlciAmJiBzZW5kZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBhZGRyZXNzTWFwLnNldChuZXcgQWRkcmVzcyhzZW5kZXJbMF0pLCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhZGRyZXNzTWFwO1xuICAgIH1cblxuICAgIGlmIChhZGRyZXNzZXNJbmRleC5sZW5ndGggPj0gMiAmJiBzZW5kZXIgJiYgc2VuZGVyLmxlbmd0aCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGlmIChhZGRyZXNzZXNJbmRleFtiaXRnb0luZGV4XSA8IGFkZHJlc3Nlc0luZGV4W2ZpcnN0SW5kZXhdKSB7XG4gICAgICAgIGFkZHJlc3NNYXAuc2V0KG5ldyBBZGRyZXNzKHNlbmRlcltiaXRnb0luZGV4XSksIDApO1xuICAgICAgICBhZGRyZXNzTWFwLnNldChuZXcgQWRkcmVzcyhzZW5kZXJbZmlyc3RJbmRleF0pLCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZHJlc3NNYXAuc2V0KG5ldyBBZGRyZXNzKHNlbmRlcltmaXJzdEluZGV4XSksIDApO1xuICAgICAgICBhZGRyZXNzTWFwLnNldChuZXcgQWRkcmVzcyhzZW5kZXJbYml0Z29JbmRleF0pLCAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhZGRyZXNzTWFwO1xuICAgIH1cblxuICAgIGlmIChzZW5kZXIgJiYgc2VuZGVyLmxlbmd0aCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIHNlbmRlci5zbGljZSgwLCB0aHJlc2hvbGQpLmZvckVhY2goKGFkZHIsIGkpID0+IHtcbiAgICAgICAgYWRkcmVzc01hcC5zZXQobmV3IEFkZHJlc3MoYWRkciksIGkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZHJlc3NNYXA7XG4gIH1cbn1cbiJdfQ==
|