@bitgo/sdk-coin-xdc 1.10.8 → 1.10.10
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/xdc.d.ts +1 -11
- package/dist/src/xdc.d.ts.map +1 -1
- package/dist/src/xdc.js +1 -27
- package/dist/src/xdcToken.d.ts +1 -11
- package/dist/src/xdcToken.d.ts.map +1 -1
- package/dist/src/xdcToken.js +1 -27
- package/dist/test/unit/xdc.js +102 -1
- package/dist/test/unit/xdcToken.js +52 -115
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -3,8 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
require("should");
|
|
4
4
|
const sdk_test_1 = require("@bitgo/sdk-test");
|
|
5
5
|
const sdk_api_1 = require("@bitgo/sdk-api");
|
|
6
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
6
7
|
const src_1 = require("../../src");
|
|
7
|
-
const
|
|
8
|
+
const getBuilder_1 = require("./getBuilder");
|
|
9
|
+
/** Encode ERC-20 transfer(address,uint256) calldata without ethereumjs-abi. */
|
|
10
|
+
function encodeErc20Transfer(to, amount) {
|
|
11
|
+
const address = to.toLowerCase().replace(/^0x/, '').padStart(64, '0');
|
|
12
|
+
const value = BigInt(amount).toString(16).padStart(64, '0');
|
|
13
|
+
return `0xa9059cbb${address}${value}`;
|
|
14
|
+
}
|
|
8
15
|
describe('XDC Token:', function () {
|
|
9
16
|
let bitgo;
|
|
10
17
|
let xdcTokenCoin;
|
|
@@ -105,67 +112,62 @@ describe('XDC Token:', function () {
|
|
|
105
112
|
});
|
|
106
113
|
});
|
|
107
114
|
describe('verifyTssTransaction', function () {
|
|
108
|
-
|
|
115
|
+
const recipientAddress = '0x174cfd823af8ce27ed0afee3fcf3c3ba259116be';
|
|
116
|
+
const wrongAddress = '0x7e85bdc27c050e3905ebf4b8e634d9ad6edd0de6';
|
|
117
|
+
const tokenContractAddress = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
|
|
118
|
+
it('should accept an ERC-20 transfer where calldata matches declared recipient', async function () {
|
|
109
119
|
const token = bitgo.coin('txdc:tmt');
|
|
110
|
-
const
|
|
120
|
+
const erc20TransferData = encodeErc20Transfer(recipientAddress, '10000000');
|
|
121
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('txdc');
|
|
122
|
+
txBuilder.type(sdk_core_1.TransactionType.ContractCall);
|
|
123
|
+
txBuilder.fee({ fee: '10', gasLimit: '60000' });
|
|
124
|
+
txBuilder.counter(1);
|
|
125
|
+
txBuilder.contract(tokenContractAddress);
|
|
126
|
+
txBuilder.data(erc20TransferData);
|
|
127
|
+
const tx = await txBuilder.build();
|
|
128
|
+
const txHex = tx.toBroadcastFormat();
|
|
129
|
+
const wallet = new sdk_core_1.Wallet(bitgo, token, { coinSpecific: { baseAddress: recipientAddress } });
|
|
111
130
|
const result = await token.verifyTssTransaction({
|
|
112
131
|
txParams: {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
address: resources_1.mockTokenTransferData.recipientAddress,
|
|
116
|
-
amount: resources_1.mockTokenTransferData.tokenAmount,
|
|
117
|
-
},
|
|
118
|
-
],
|
|
132
|
+
type: 'transfer',
|
|
133
|
+
recipients: [{ address: recipientAddress, amount: '10000000' }],
|
|
119
134
|
},
|
|
120
|
-
txPrebuild:
|
|
121
|
-
wallet
|
|
135
|
+
txPrebuild: { txHex, coin: 'txdc:tmt', walletId: 'fakeWalletId' },
|
|
136
|
+
wallet,
|
|
122
137
|
});
|
|
123
138
|
result.should.equal(true);
|
|
124
139
|
});
|
|
125
|
-
it('should
|
|
140
|
+
it('should reject an ERC-20 transfer when calldata recipient does not match declared recipient', async function () {
|
|
126
141
|
const token = bitgo.coin('txdc:tmt');
|
|
127
|
-
const
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const mockWallet = {};
|
|
140
|
-
const result = await token.verifyTssTransaction({
|
|
141
|
-
txParams: {
|
|
142
|
-
type: 'tokenApproval',
|
|
143
|
-
},
|
|
144
|
-
txPrebuild: resources_1.mockTokenTransferData.txPrebuild,
|
|
145
|
-
wallet: mockWallet,
|
|
146
|
-
});
|
|
147
|
-
result.should.equal(true);
|
|
148
|
-
});
|
|
149
|
-
it('should return true for consolidate type without recipients', async function () {
|
|
150
|
-
const token = bitgo.coin('txdc:tmt');
|
|
151
|
-
const mockWallet = {};
|
|
152
|
-
const result = await token.verifyTssTransaction({
|
|
142
|
+
const erc20TransferData = encodeErc20Transfer(wrongAddress, '10000000');
|
|
143
|
+
const txBuilder = (0, getBuilder_1.getBuilder)('txdc');
|
|
144
|
+
txBuilder.type(sdk_core_1.TransactionType.ContractCall);
|
|
145
|
+
txBuilder.fee({ fee: '10', gasLimit: '60000' });
|
|
146
|
+
txBuilder.counter(1);
|
|
147
|
+
txBuilder.contract(tokenContractAddress);
|
|
148
|
+
txBuilder.data(erc20TransferData);
|
|
149
|
+
const tx = await txBuilder.build();
|
|
150
|
+
const txHex = tx.toBroadcastFormat();
|
|
151
|
+
const wallet = new sdk_core_1.Wallet(bitgo, token, { coinSpecific: { baseAddress: recipientAddress } });
|
|
152
|
+
await token
|
|
153
|
+
.verifyTssTransaction({
|
|
153
154
|
txParams: {
|
|
154
|
-
type: '
|
|
155
|
+
type: 'transfer',
|
|
156
|
+
recipients: [{ address: recipientAddress, amount: '10000000' }],
|
|
155
157
|
},
|
|
156
|
-
txPrebuild:
|
|
157
|
-
wallet
|
|
158
|
-
})
|
|
159
|
-
|
|
158
|
+
txPrebuild: { txHex, coin: 'txdc:tmt', walletId: 'fakeWalletId' },
|
|
159
|
+
wallet,
|
|
160
|
+
})
|
|
161
|
+
.should.be.rejectedWith('destination address does not match with the recipient address');
|
|
160
162
|
});
|
|
161
163
|
it('should throw error when txParams.recipients is missing and no valid type', async function () {
|
|
162
164
|
const token = bitgo.coin('txdc:tmt');
|
|
163
|
-
const
|
|
165
|
+
const wallet = new sdk_core_1.Wallet(bitgo, token, { coinSpecific: { baseAddress: recipientAddress } });
|
|
164
166
|
await token
|
|
165
167
|
.verifyTssTransaction({
|
|
166
168
|
txParams: {},
|
|
167
|
-
txPrebuild:
|
|
168
|
-
wallet
|
|
169
|
+
txPrebuild: { txHex: '0x00', coin: 'txdc:tmt', walletId: 'fakeWalletId' },
|
|
170
|
+
wallet,
|
|
169
171
|
})
|
|
170
172
|
.should.be.rejectedWith('missing txParams');
|
|
171
173
|
});
|
|
@@ -174,79 +176,14 @@ describe('XDC Token:', function () {
|
|
|
174
176
|
await token
|
|
175
177
|
.verifyTssTransaction({
|
|
176
178
|
txParams: {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
address: resources_1.mockTokenTransferData.recipientAddress,
|
|
180
|
-
amount: resources_1.mockTokenTransferData.tokenAmount,
|
|
181
|
-
},
|
|
182
|
-
],
|
|
179
|
+
type: 'transfer',
|
|
180
|
+
recipients: [{ address: recipientAddress, amount: '10000000' }],
|
|
183
181
|
},
|
|
184
|
-
txPrebuild:
|
|
182
|
+
txPrebuild: { txHex: '0x00', coin: 'txdc:tmt', walletId: 'fakeWalletId' },
|
|
185
183
|
wallet: undefined,
|
|
186
184
|
})
|
|
187
185
|
.should.be.rejectedWith('missing params');
|
|
188
186
|
});
|
|
189
|
-
it('should throw error when txPrebuild is missing', async function () {
|
|
190
|
-
const token = bitgo.coin('txdc:tmt');
|
|
191
|
-
const mockWallet = {};
|
|
192
|
-
await token
|
|
193
|
-
.verifyTssTransaction({
|
|
194
|
-
txParams: {
|
|
195
|
-
recipients: [
|
|
196
|
-
{
|
|
197
|
-
address: resources_1.mockTokenTransferData.recipientAddress,
|
|
198
|
-
amount: resources_1.mockTokenTransferData.tokenAmount,
|
|
199
|
-
},
|
|
200
|
-
],
|
|
201
|
-
},
|
|
202
|
-
txPrebuild: undefined,
|
|
203
|
-
wallet: mockWallet,
|
|
204
|
-
})
|
|
205
|
-
.should.be.rejectedWith('missing params');
|
|
206
|
-
});
|
|
207
|
-
it('should throw error for batch + hop transaction', async function () {
|
|
208
|
-
const token = bitgo.coin('txdc:tmt');
|
|
209
|
-
const mockWallet = {};
|
|
210
|
-
await token
|
|
211
|
-
.verifyTssTransaction({
|
|
212
|
-
txParams: {
|
|
213
|
-
hop: true,
|
|
214
|
-
recipients: [
|
|
215
|
-
{ address: '0x1111111111111111111111111111111111111111', amount: '1000' },
|
|
216
|
-
{ address: '0x2222222222222222222222222222222222222222', amount: '2000' },
|
|
217
|
-
],
|
|
218
|
-
},
|
|
219
|
-
txPrebuild: resources_1.mockTokenTransferData.txPrebuild,
|
|
220
|
-
wallet: mockWallet,
|
|
221
|
-
})
|
|
222
|
-
.should.be.rejectedWith('tx cannot be both a batch and hop transaction');
|
|
223
|
-
});
|
|
224
|
-
it('should not throw EIP155 error when verifying token transaction', async function () {
|
|
225
|
-
// This test ensures that verifyTssTransaction does NOT parse the txHex
|
|
226
|
-
// which would fail with "Incompatible EIP155-based V" error
|
|
227
|
-
const token = bitgo.coin('txdc:tmt');
|
|
228
|
-
const mockWallet = {};
|
|
229
|
-
// Use the signableHex (with v=51) which would fail if parsed
|
|
230
|
-
const txPrebuildWithSignableHex = {
|
|
231
|
-
...resources_1.mockTokenTransferData.txPrebuild,
|
|
232
|
-
txHex: resources_1.mockTokenTransferData.signableHex,
|
|
233
|
-
};
|
|
234
|
-
// This should NOT throw EIP155 error because verifyTssTransaction
|
|
235
|
-
// does not parse the transaction
|
|
236
|
-
const result = await token.verifyTssTransaction({
|
|
237
|
-
txParams: {
|
|
238
|
-
recipients: [
|
|
239
|
-
{
|
|
240
|
-
address: resources_1.mockTokenTransferData.recipientAddress,
|
|
241
|
-
amount: resources_1.mockTokenTransferData.tokenAmount,
|
|
242
|
-
},
|
|
243
|
-
],
|
|
244
|
-
},
|
|
245
|
-
txPrebuild: txPrebuildWithSignableHex,
|
|
246
|
-
wallet: mockWallet,
|
|
247
|
-
});
|
|
248
|
-
result.should.equal(true);
|
|
249
|
-
});
|
|
250
187
|
});
|
|
251
188
|
});
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGRjVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQveGRjVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZ0I7QUFDaEIsOENBQTBEO0FBQzFELDRDQUEwQztBQUcxQyxtQ0FBK0M7QUFDL0MsNENBQXFEO0FBRXJELFFBQVEsQ0FBQyxZQUFZLEVBQUU7SUFDckIsSUFBSSxLQUFtQixDQUFDO0lBQ3hCLElBQUksWUFBWSxDQUFDO0lBQ2pCLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQztJQUU3QixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUEsY0FBUSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hCLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlCQUF5QixFQUFFO1FBQzVCLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9DLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxZQUFZLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsMkNBQTJDLEVBQUU7UUFDcEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDakYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVuQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNsQyxFQUFFLENBQUMsR0FBRyxTQUFTLG1DQUFtQyxFQUFFO29CQUNsRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNwQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBUSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUMsQ0FBQyxDQUFDO2dCQUVILEVBQUUsQ0FBQyxHQUFHLFNBQVMsaURBQWlELEVBQUU7b0JBQ2hFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFhLENBQUM7b0JBQ2hELDREQUE0RDtvQkFDNUQsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNELENBQUMsQ0FBQyxDQUFDO2dCQUVILEVBQUUsQ0FBQyxHQUFHLFNBQVMsNkNBQTZDLEVBQUU7b0JBQzVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFhLENBQUM7b0JBQ2hELDREQUE0RDtvQkFDNUQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUM7b0JBQzlDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDeEMsK0NBQStDO29CQUMvQyxxRkFBcUY7b0JBQ3JGLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDOUQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDbEMsRUFBRSxDQUFDLEdBQUcsU0FBUyxtQ0FBbUMsRUFBRTtvQkFDbEQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDcEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQVEsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsQ0FBQztnQkFFSCxFQUFFLENBQUMsR0FBRyxTQUFTLGlEQUFpRCxFQUFFO29CQUNoRSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBYSxDQUFDO29CQUNoRCw0REFBNEQ7b0JBQzVELENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMzRCxDQUFDLENBQUMsQ0FBQztnQkFFSCxFQUFFLENBQUMsR0FBRyxTQUFTLDZDQUE2QyxFQUFFO29CQUM1RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBYSxDQUFDO29CQUNoRCw0REFBNEQ7b0JBQzVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO29CQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDOUQsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsRUFBRSxDQUFDLEdBQUcsU0FBUyxpQ0FBaUMsRUFBRTtvQkFDaEQsOERBQThEO29CQUM5RCxNQUFNLEtBQUssR0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN6QyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUMsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsRUFBRSxDQUFDLEdBQUcsU0FBUyx3REFBd0QsRUFBRTtvQkFDdkUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQWEsQ0FBQztvQkFDaEQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUN4QixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7b0JBRXRCLElBQUksQ0FBQzt3QkFDSCw0REFBNEQ7d0JBQzVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO3dCQUM5Qyx5REFBeUQ7d0JBQ3pELHVEQUF1RDt3QkFDdkQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdkIsQ0FBQztvQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUNYLFdBQVcsR0FBRyxJQUFJLENBQUM7d0JBQ25CLFlBQVksR0FBSSxDQUFXLENBQUMsT0FBTyxDQUFDO29CQUN0QyxDQUFDO29CQUVELFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztnQkFDaEUsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdFQUF3RSxFQUFFO1lBQzNFLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxhQUFhLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztZQUV2RCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQzlCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3BDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFRLENBQUMsQ0FBQztnQkFDckMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDaEQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMvRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsc0JBQXNCLEVBQUU7UUFDL0IsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEtBQUs7WUFDNUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQWEsQ0FBQztZQUNqRCxNQUFNLFVBQVUsR0FBRyxFQUF3QixDQUFDO1lBRTVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLG9CQUFvQixDQUFDO2dCQUM5QyxRQUFRLEVBQUU7b0JBQ1IsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLE9BQU8sRUFBRSxpQ0FBcUIsQ0FBQyxnQkFBZ0I7NEJBQy9DLE1BQU0sRUFBRSxpQ0FBcUIsQ0FBQyxXQUFXO3lCQUMxQztxQkFDRjtpQkFDRjtnQkFDRCxVQUFVLEVBQUUsaUNBQXFCLENBQUMsVUFFaEI7Z0JBQ2xCLE1BQU0sRUFBRSxVQUFVO2FBQ25CLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhEQUE4RCxFQUFFLEtBQUs7WUFDdEUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQWEsQ0FBQztZQUNqRCxNQUFNLFVBQVUsR0FBRyxFQUF3QixDQUFDO1lBRTVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLG9CQUFvQixDQUFDO2dCQUM5QyxRQUFRLEVBQUU7b0JBQ1IsSUFBSSxFQUFFLGVBQWU7aUJBQ3RCO2dCQUNELFVBQVUsRUFBRSxpQ0FBcUIsQ0FBQyxVQUVoQjtnQkFDbEIsTUFBTSxFQUFFLFVBQVU7YUFDbkIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsS0FBSztZQUN0RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBYSxDQUFDO1lBQ2pELE1BQU0sVUFBVSxHQUFHLEVBQXdCLENBQUM7WUFFNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsb0JBQW9CLENBQUM7Z0JBQzlDLFFBQVEsRUFBRTtvQkFDUixJQUFJLEVBQUUsZUFBZTtpQkFDdEI7Z0JBQ0QsVUFBVSxFQUFFLGlDQUFxQixDQUFDLFVBRWhCO2dCQUNsQixNQUFNLEVBQUUsVUFBVTthQUNuQixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLO1lBQ3BFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFhLENBQUM7WUFDakQsTUFBTSxVQUFVLEdBQUcsRUFBd0IsQ0FBQztZQUU1QyxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztnQkFDOUMsUUFBUSxFQUFFO29CQUNSLElBQUksRUFBRSxhQUFhO2lCQUNwQjtnQkFDRCxVQUFVLEVBQUUsaUNBQXFCLENBQUMsVUFFaEI7Z0JBQ2xCLE1BQU0sRUFBRSxVQUFVO2FBQ25CLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEtBQUs7WUFDbEYsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQWEsQ0FBQztZQUNqRCxNQUFNLFVBQVUsR0FBRyxFQUF3QixDQUFDO1lBRTVDLE1BQU0sS0FBSztpQkFDUixvQkFBb0IsQ0FBQztnQkFDcEIsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osVUFBVSxFQUFFLGlDQUFxQixDQUFDLFVBRWhCO2dCQUNsQixNQUFNLEVBQUUsVUFBVTthQUNuQixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSztZQUNuRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBYSxDQUFDO1lBRWpELE1BQU0sS0FBSztpQkFDUixvQkFBb0IsQ0FBQztnQkFDcEIsUUFBUSxFQUFFO29CQUNSLFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxPQUFPLEVBQUUsaUNBQXFCLENBQUMsZ0JBQWdCOzRCQUMvQyxNQUFNLEVBQUUsaUNBQXFCLENBQUMsV0FBVzt5QkFDMUM7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsVUFBVSxFQUFFLGlDQUFxQixDQUFDLFVBRWhCO2dCQUNsQixNQUFNLEVBQUUsU0FBK0I7YUFDeEMsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEtBQUs7WUFDdkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQWEsQ0FBQztZQUNqRCxNQUFNLFVBQVUsR0FBRyxFQUF3QixDQUFDO1lBRTVDLE1BQU0sS0FBSztpQkFDUixvQkFBb0IsQ0FBQztnQkFDcEIsUUFBUSxFQUFFO29CQUNSLFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxPQUFPLEVBQUUsaUNBQXFCLENBQUMsZ0JBQWdCOzRCQUMvQyxNQUFNLEVBQUUsaUNBQXFCLENBQUMsV0FBVzt5QkFDMUM7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsVUFBVSxFQUFFLFNBQXNGO2dCQUNsRyxNQUFNLEVBQUUsVUFBVTthQUNuQixDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUUsS0FBSztZQUN4RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBYSxDQUFDO1lBQ2pELE1BQU0sVUFBVSxHQUFHLEVBQXdCLENBQUM7WUFFNUMsTUFBTSxLQUFLO2lCQUNSLG9CQUFvQixDQUFDO2dCQUNwQixRQUFRLEVBQUU7b0JBQ1IsR0FBRyxFQUFFLElBQUk7b0JBQ1QsVUFBVSxFQUFFO3dCQUNWLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7d0JBQ3pFLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7cUJBQzFFO2lCQUNGO2dCQUNELFVBQVUsRUFBRSxpQ0FBcUIsQ0FBQyxVQUVoQjtnQkFDbEIsTUFBTSxFQUFFLFVBQVU7YUFDbkIsQ0FBQztpQkFDRCxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEtBQUs7WUFDeEUsdUVBQXVFO1lBQ3ZFLDREQUE0RDtZQUM1RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBYSxDQUFDO1lBQ2pELE1BQU0sVUFBVSxHQUFHLEVBQXdCLENBQUM7WUFFNUMsNkRBQTZEO1lBQzdELE1BQU0seUJBQXlCLEdBQUc7Z0JBQ2hDLEdBQUcsaUNBQXFCLENBQUMsVUFBVTtnQkFDbkMsS0FBSyxFQUFFLGlDQUFxQixDQUFDLFdBQVc7YUFDekMsQ0FBQztZQUVGLGtFQUFrRTtZQUNsRSxpQ0FBaUM7WUFDakMsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsb0JBQW9CLENBQUM7Z0JBQzlDLFFBQVEsRUFBRTtvQkFDUixVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsT0FBTyxFQUFFLGlDQUFxQixDQUFDLGdCQUFnQjs0QkFDL0MsTUFBTSxFQUFFLGlDQUFxQixDQUFDLFdBQVc7eUJBQzFDO3FCQUNGO2lCQUNGO2dCQUNELFVBQVUsRUFBRSx5QkFFTTtnQkFDbEIsTUFBTSxFQUFFLFVBQVU7YUFDbkIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBJV2FsbGV0IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgcmVnaXN0ZXIsIFhkY1Rva2VuIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IG1vY2tUb2tlblRyYW5zZmVyRGF0YSB9IGZyb20gJy4uL3Jlc291cmNlcyc7XG5cbmRlc2NyaWJlKCdYREMgVG9rZW46JywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IHhkY1Rva2VuQ29pbjtcbiAgY29uc3QgdG9rZW5OYW1lID0gJ3hkYzp1c2RjJztcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ3Byb2QnIH0pO1xuICAgIHJlZ2lzdGVyKGJpdGdvKTtcbiAgICBiaXRnby5pbml0aWFsaXplVGVzdFZhcnMoKTtcbiAgICB4ZGNUb2tlbkNvaW4gPSBiaXRnby5jb2luKHRva2VuTmFtZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmV0dXJuIGNvbnN0YW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICB4ZGNUb2tlbkNvaW4uZ2V0Q2hhaW4oKS5zaG91bGQuZXF1YWwoJ3hkYzp1c2RjJyk7XG4gICAgeGRjVG9rZW5Db2luLmdldEJhc2VDaGFpbigpLnNob3VsZC5lcXVhbCgneGRjJyk7XG4gICAgeGRjVG9rZW5Db2luLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdYREMgVG9rZW4nKTtcbiAgICB4ZGNUb2tlbkNvaW4uZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxZTYpO1xuICAgIHhkY1Rva2VuQ29pbi50eXBlLnNob3VsZC5lcXVhbCh0b2tlbk5hbWUpO1xuICAgIHhkY1Rva2VuQ29pbi5uYW1lLnNob3VsZC5lcXVhbCgnVVNEIENvaW4nKTtcbiAgICB4ZGNUb2tlbkNvaW4uY29pbi5zaG91bGQuZXF1YWwoJ3hkYycpO1xuICAgIHhkY1Rva2VuQ29pbi5uZXR3b3JrLnNob3VsZC5lcXVhbCgnTWFpbm5ldCcpO1xuICAgIHhkY1Rva2VuQ29pbi5kZWNpbWFsUGxhY2VzLnNob3VsZC5lcXVhbCg2KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Rva2VuIFJlZ2lzdHJhdGlvbiBhbmQgVHJhbnNhY3Rpb25CdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1haW5uZXRUb2tlbnMgPSBbJ3hkYzp1c2RjJywgJ3hkYzpsYnQnLCAneGRjOmdhbWEnLCAneGRjOnNyeCcsICd4ZGM6d2V0aCddO1xuICAgIGNvbnN0IHRlc3RuZXRUb2tlbnMgPSBbJ3R4ZGM6dG10J107XG5cbiAgICBkZXNjcmliZSgnTWFpbm5ldCB0b2tlbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBtYWlubmV0VG9rZW5zLmZvckVhY2goKHRva2VuTmFtZSkgPT4ge1xuICAgICAgICBpdChgJHt0b2tlbk5hbWV9IHNob3VsZCBiZSByZWdpc3RlcmVkIGFzIFhkY1Rva2VuYCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHRva2VuID0gYml0Z28uY29pbih0b2tlbk5hbWUpO1xuICAgICAgICAgIHRva2VuLnNob3VsZC5iZS5pbnN0YW5jZU9mKFhkY1Rva2VuKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoYCR7dG9rZW5OYW1lfSBzaG91bGQgY3JlYXRlIFRyYW5zYWN0aW9uQnVpbGRlciB3aXRob3V0IGVycm9yYCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHRva2VuID0gYml0Z28uY29pbih0b2tlbk5hbWUpIGFzIFhkY1Rva2VuO1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBhY2Nlc3NpbmcgcHJvdGVjdGVkIG1ldGhvZCBmb3IgdGVzdGluZ1xuICAgICAgICAgICgoKSA9PiB0b2tlbi5nZXRUcmFuc2FjdGlvbkJ1aWxkZXIoKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChgJHt0b2tlbk5hbWV9IHNob3VsZCB1c2UgWERDLXNwZWNpZmljIFRyYW5zYWN0aW9uQnVpbGRlcmAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IGJpdGdvLmNvaW4odG9rZW5OYW1lKSBhcyBYZGNUb2tlbjtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gYWNjZXNzaW5nIHByb3RlY3RlZCBtZXRob2QgZm9yIHRlc3RpbmdcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gdG9rZW4uZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk7XG4gICAgICAgICAgYnVpbGRlci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnX2NvbW1vbicpO1xuICAgICAgICAgIC8vIFZlcmlmeSBpdCdzIHVzaW5nIFhEQydzIGdldENvbW1vbiwgbm90IEVWTSdzXG4gICAgICAgICAgLy8gWERDJ3MgVHJhbnNhY3Rpb25CdWlsZGVyIHNob3VsZCBjcmVhdGUgc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgU0hBUkVEX0VWTV9TREsgZmVhdHVyZVxuICAgICAgICAgIGJ1aWxkZXIuY29uc3RydWN0b3IubmFtZS5zaG91bGQuZXF1YWwoJ1RyYW5zYWN0aW9uQnVpbGRlcicpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1Rlc3RuZXQgdG9rZW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgdGVzdG5ldFRva2Vucy5mb3JFYWNoKCh0b2tlbk5hbWUpID0+IHtcbiAgICAgICAgaXQoYCR7dG9rZW5OYW1lfSBzaG91bGQgYmUgcmVnaXN0ZXJlZCBhcyBYZGNUb2tlbmAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IGJpdGdvLmNvaW4odG9rZW5OYW1lKTtcbiAgICAgICAgICB0b2tlbi5zaG91bGQuYmUuaW5zdGFuY2VPZihYZGNUb2tlbik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KGAke3Rva2VuTmFtZX0gc2hvdWxkIGNyZWF0ZSBUcmFuc2FjdGlvbkJ1aWxkZXIgd2l0aG91dCBlcnJvcmAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IGJpdGdvLmNvaW4odG9rZW5OYW1lKSBhcyBYZGNUb2tlbjtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gYWNjZXNzaW5nIHByb3RlY3RlZCBtZXRob2QgZm9yIHRlc3RpbmdcbiAgICAgICAgICAoKCkgPT4gdG9rZW4uZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCkpLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoYCR7dG9rZW5OYW1lfSBzaG91bGQgdXNlIFhEQy1zcGVjaWZpYyBUcmFuc2FjdGlvbkJ1aWxkZXJgLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW4gPSBiaXRnby5jb2luKHRva2VuTmFtZSkgYXMgWGRjVG9rZW47XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGFjY2Vzc2luZyBwcm90ZWN0ZWQgbWV0aG9kIGZvciB0ZXN0aW5nXG4gICAgICAgICAgY29uc3QgYnVpbGRlciA9IHRva2VuLmdldFRyYW5zYWN0aW9uQnVpbGRlcigpO1xuICAgICAgICAgIGJ1aWxkZXIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ19jb21tb24nKTtcbiAgICAgICAgICBidWlsZGVyLmNvbnN0cnVjdG9yLm5hbWUuc2hvdWxkLmVxdWFsKCdUcmFuc2FjdGlvbkJ1aWxkZXInKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoYCR7dG9rZW5OYW1lfSBzaG91bGQgaGF2ZSBjb3JyZWN0IGJhc2UgY2hhaW5gLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICBjb25zdCB0b2tlbjogYW55ID0gYml0Z28uY29pbih0b2tlbk5hbWUpO1xuICAgICAgICAgIHRva2VuLmdldEJhc2VDaGFpbigpLnNob3VsZC5lcXVhbCgndHhkYycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChgJHt0b2tlbk5hbWV9IHNob3VsZCBub3QgdGhyb3cgXCJDYW5ub3QgdXNlIGNvbW1vbiBzZGsgbW9kdWxlXCIgZXJyb3JgLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW4gPSBiaXRnby5jb2luKHRva2VuTmFtZSkgYXMgWGRjVG9rZW47XG4gICAgICAgICAgbGV0IGVycm9yVGhyb3duID0gZmFsc2U7XG4gICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBhY2Nlc3NpbmcgcHJvdGVjdGVkIG1ldGhvZCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9IHRva2VuLmdldFRyYW5zYWN0aW9uQnVpbGRlcigpO1xuICAgICAgICAgICAgLy8gVHJ5IHRvIHVzZSB0aGUgYnVpbGRlciB0byBlbnN1cmUgaXQncyBmdWxseSBmdW5jdGlvbmFsXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gdHlwZSBleHBlY3RzIFRyYW5zYWN0aW9uVHlwZSBlbnVtXG4gICAgICAgICAgICBidWlsZGVyLnR5cGUoJ1NlbmQnKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvclRocm93biA9IHRydWU7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAoZSBhcyBFcnJvcikubWVzc2FnZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvclRocm93bi5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgICAgIGVycm9yTWVzc2FnZS5zaG91bGQubm90Lm1hdGNoKC9DYW5ub3QgdXNlIGNvbW1vbiBzZGsgbW9kdWxlLyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBhbGwgWERDIHRva2VucyB1c2UgWGRjVG9rZW4gY2xhc3MsIG5vdCBFdGhMaWtlRXJjMjBUb2tlbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFsbFRva2VucyA9IFsuLi5tYWlubmV0VG9rZW5zLCAuLi50ZXN0bmV0VG9rZW5zXTtcblxuICAgICAgYWxsVG9rZW5zLmZvckVhY2goKHRva2VuTmFtZSkgPT4ge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGJpdGdvLmNvaW4odG9rZW5OYW1lKTtcbiAgICAgICAgdG9rZW4uc2hvdWxkLmJlLmluc3RhbmNlT2YoWGRjVG9rZW4pO1xuICAgICAgICB0b2tlbi5jb25zdHJ1Y3Rvci5uYW1lLnNob3VsZC5lcXVhbCgnWGRjVG9rZW4nKTtcbiAgICAgICAgdG9rZW4uY29uc3RydWN0b3IubmFtZS5zaG91bGQubm90LmVxdWFsKCdFdGhMaWtlRXJjMjBUb2tlbicpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlUc3NUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciB2YWxpZCB0b2tlbiB0cmFuc2ZlciBwYXJhbXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGJpdGdvLmNvaW4oJ3R4ZGM6dG10JykgYXMgWGRjVG9rZW47XG4gICAgICBjb25zdCBtb2NrV2FsbGV0ID0ge30gYXMgdW5rbm93biBhcyBJV2FsbGV0O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0b2tlbi52ZXJpZnlUc3NUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgcmVjaXBpZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhZGRyZXNzOiBtb2NrVG9rZW5UcmFuc2ZlckRhdGEucmVjaXBpZW50QWRkcmVzcyxcbiAgICAgICAgICAgICAgYW1vdW50OiBtb2NrVG9rZW5UcmFuc2ZlckRhdGEudG9rZW5BbW91bnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHR4UHJlYnVpbGQ6IG1vY2tUb2tlblRyYW5zZmVyRGF0YS50eFByZWJ1aWxkIGFzIHVua25vd24gYXMgUGFyYW1ldGVyczxcbiAgICAgICAgICB0eXBlb2YgdG9rZW4udmVyaWZ5VHNzVHJhbnNhY3Rpb25cbiAgICAgICAgPlswXVsndHhQcmVidWlsZCddLFxuICAgICAgICB3YWxsZXQ6IG1vY2tXYWxsZXQsXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIHRyYW5zZmVyVG9rZW4gdHlwZSB3aXRob3V0IHJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGJpdGdvLmNvaW4oJ3R4ZGM6dG10JykgYXMgWGRjVG9rZW47XG4gICAgICBjb25zdCBtb2NrV2FsbGV0ID0ge30gYXMgdW5rbm93biBhcyBJV2FsbGV0O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0b2tlbi52ZXJpZnlUc3NUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZTogJ3RyYW5zZmVyVG9rZW4nLFxuICAgICAgICB9LFxuICAgICAgICB0eFByZWJ1aWxkOiBtb2NrVG9rZW5UcmFuc2ZlckRhdGEudHhQcmVidWlsZCBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8XG4gICAgICAgICAgdHlwZW9mIHRva2VuLnZlcmlmeVRzc1RyYW5zYWN0aW9uXG4gICAgICAgID5bMF1bJ3R4UHJlYnVpbGQnXSxcbiAgICAgICAgd2FsbGV0OiBtb2NrV2FsbGV0LFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciB0b2tlbkFwcHJvdmFsIHR5cGUgd2l0aG91dCByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdG9rZW4gPSBiaXRnby5jb2luKCd0eGRjOnRtdCcpIGFzIFhkY1Rva2VuO1xuICAgICAgY29uc3QgbW9ja1dhbGxldCA9IHt9IGFzIHVua25vd24gYXMgSVdhbGxldDtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdG9rZW4udmVyaWZ5VHNzVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgIHR5cGU6ICd0b2tlbkFwcHJvdmFsJyxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDogbW9ja1Rva2VuVHJhbnNmZXJEYXRhLnR4UHJlYnVpbGQgYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPFxuICAgICAgICAgIHR5cGVvZiB0b2tlbi52ZXJpZnlUc3NUcmFuc2FjdGlvblxuICAgICAgICA+WzBdWyd0eFByZWJ1aWxkJ10sXG4gICAgICAgIHdhbGxldDogbW9ja1dhbGxldCxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgY29uc29saWRhdGUgdHlwZSB3aXRob3V0IHJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGJpdGdvLmNvaW4oJ3R4ZGM6dG10JykgYXMgWGRjVG9rZW47XG4gICAgICBjb25zdCBtb2NrV2FsbGV0ID0ge30gYXMgdW5rbm93biBhcyBJV2FsbGV0O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0b2tlbi52ZXJpZnlUc3NUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZTogJ2NvbnNvbGlkYXRlJyxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDogbW9ja1Rva2VuVHJhbnNmZXJEYXRhLnR4UHJlYnVpbGQgYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPFxuICAgICAgICAgIHR5cGVvZiB0b2tlbi52ZXJpZnlUc3NUcmFuc2FjdGlvblxuICAgICAgICA+WzBdWyd0eFByZWJ1aWxkJ10sXG4gICAgICAgIHdhbGxldDogbW9ja1dhbGxldCxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHR4UGFyYW1zLnJlY2lwaWVudHMgaXMgbWlzc2luZyBhbmQgbm8gdmFsaWQgdHlwZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gYml0Z28uY29pbigndHhkYzp0bXQnKSBhcyBYZGNUb2tlbjtcbiAgICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7fSBhcyB1bmtub3duIGFzIElXYWxsZXQ7XG5cbiAgICAgIGF3YWl0IHRva2VuXG4gICAgICAgIC52ZXJpZnlUc3NUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHt9LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IG1vY2tUb2tlblRyYW5zZmVyRGF0YS50eFByZWJ1aWxkIGFzIHVua25vd24gYXMgUGFyYW1ldGVyczxcbiAgICAgICAgICAgIHR5cGVvZiB0b2tlbi52ZXJpZnlUc3NUcmFuc2FjdGlvblxuICAgICAgICAgID5bMF1bJ3R4UHJlYnVpbGQnXSxcbiAgICAgICAgICB3YWxsZXQ6IG1vY2tXYWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHR4UGFyYW1zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIHdoZW4gd2FsbGV0IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGJpdGdvLmNvaW4oJ3R4ZGM6dG10JykgYXMgWGRjVG9rZW47XG5cbiAgICAgIGF3YWl0IHRva2VuXG4gICAgICAgIC52ZXJpZnlUc3NUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IG1vY2tUb2tlblRyYW5zZmVyRGF0YS5yZWNpcGllbnRBZGRyZXNzLFxuICAgICAgICAgICAgICAgIGFtb3VudDogbW9ja1Rva2VuVHJhbnNmZXJEYXRhLnRva2VuQW1vdW50LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IG1vY2tUb2tlblRyYW5zZmVyRGF0YS50eFByZWJ1aWxkIGFzIHVua25vd24gYXMgUGFyYW1ldGVyczxcbiAgICAgICAgICAgIHR5cGVvZiB0b2tlbi52ZXJpZnlUc3NUcmFuc2FjdGlvblxuICAgICAgICAgID5bMF1bJ3R4UHJlYnVpbGQnXSxcbiAgICAgICAgICB3YWxsZXQ6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIElXYWxsZXQsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdtaXNzaW5nIHBhcmFtcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHR4UHJlYnVpbGQgaXMgbWlzc2luZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gYml0Z28uY29pbigndHhkYzp0bXQnKSBhcyBYZGNUb2tlbjtcbiAgICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7fSBhcyB1bmtub3duIGFzIElXYWxsZXQ7XG5cbiAgICAgIGF3YWl0IHRva2VuXG4gICAgICAgIC52ZXJpZnlUc3NUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZHJlc3M6IG1vY2tUb2tlblRyYW5zZmVyRGF0YS5yZWNpcGllbnRBZGRyZXNzLFxuICAgICAgICAgICAgICAgIGFtb3VudDogbW9ja1Rva2VuVHJhbnNmZXJEYXRhLnRva2VuQW1vdW50LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHRva2VuLnZlcmlmeVRzc1RyYW5zYWN0aW9uPlswXVsndHhQcmVidWlsZCddLFxuICAgICAgICAgIHdhbGxldDogbW9ja1dhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ21pc3NpbmcgcGFyYW1zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBiYXRjaCArIGhvcCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gYml0Z28uY29pbigndHhkYzp0bXQnKSBhcyBYZGNUb2tlbjtcbiAgICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7fSBhcyB1bmtub3duIGFzIElXYWxsZXQ7XG5cbiAgICAgIGF3YWl0IHRva2VuXG4gICAgICAgIC52ZXJpZnlUc3NUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIGhvcDogdHJ1ZSxcbiAgICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgICAgeyBhZGRyZXNzOiAnMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJywgYW1vdW50OiAnMTAwMCcgfSxcbiAgICAgICAgICAgICAgeyBhZGRyZXNzOiAnMHgyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyJywgYW1vdW50OiAnMjAwMCcgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eFByZWJ1aWxkOiBtb2NrVG9rZW5UcmFuc2ZlckRhdGEudHhQcmVidWlsZCBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8XG4gICAgICAgICAgICB0eXBlb2YgdG9rZW4udmVyaWZ5VHNzVHJhbnNhY3Rpb25cbiAgICAgICAgICA+WzBdWyd0eFByZWJ1aWxkJ10sXG4gICAgICAgICAgd2FsbGV0OiBtb2NrV2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgndHggY2Fubm90IGJlIGJvdGggYSBiYXRjaCBhbmQgaG9wIHRyYW5zYWN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCB0aHJvdyBFSVAxNTUgZXJyb3Igd2hlbiB2ZXJpZnlpbmcgdG9rZW4gdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHZlcmlmeVRzc1RyYW5zYWN0aW9uIGRvZXMgTk9UIHBhcnNlIHRoZSB0eEhleFxuICAgICAgLy8gd2hpY2ggd291bGQgZmFpbCB3aXRoIFwiSW5jb21wYXRpYmxlIEVJUDE1NS1iYXNlZCBWXCIgZXJyb3JcbiAgICAgIGNvbnN0IHRva2VuID0gYml0Z28uY29pbigndHhkYzp0bXQnKSBhcyBYZGNUb2tlbjtcbiAgICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7fSBhcyB1bmtub3duIGFzIElXYWxsZXQ7XG5cbiAgICAgIC8vIFVzZSB0aGUgc2lnbmFibGVIZXggKHdpdGggdj01MSkgd2hpY2ggd291bGQgZmFpbCBpZiBwYXJzZWRcbiAgICAgIGNvbnN0IHR4UHJlYnVpbGRXaXRoU2lnbmFibGVIZXggPSB7XG4gICAgICAgIC4uLm1vY2tUb2tlblRyYW5zZmVyRGF0YS50eFByZWJ1aWxkLFxuICAgICAgICB0eEhleDogbW9ja1Rva2VuVHJhbnNmZXJEYXRhLnNpZ25hYmxlSGV4LFxuICAgICAgfTtcblxuICAgICAgLy8gVGhpcyBzaG91bGQgTk9UIHRocm93IEVJUDE1NSBlcnJvciBiZWNhdXNlIHZlcmlmeVRzc1RyYW5zYWN0aW9uXG4gICAgICAvLyBkb2VzIG5vdCBwYXJzZSB0aGUgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRva2VuLnZlcmlmeVRzc1RyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICByZWNpcGllbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFkZHJlc3M6IG1vY2tUb2tlblRyYW5zZmVyRGF0YS5yZWNpcGllbnRBZGRyZXNzLFxuICAgICAgICAgICAgICBhbW91bnQ6IG1vY2tUb2tlblRyYW5zZmVyRGF0YS50b2tlbkFtb3VudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDogdHhQcmVidWlsZFdpdGhTaWduYWJsZUhleCBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8XG4gICAgICAgICAgdHlwZW9mIHRva2VuLnZlcmlmeVRzc1RyYW5zYWN0aW9uXG4gICAgICAgID5bMF1bJ3R4UHJlYnVpbGQnXSxcbiAgICAgICAgd2FsbGV0OiBtb2NrV2FsbGV0LFxuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGRjVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQveGRjVG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZ0I7QUFDaEIsOENBQTBEO0FBQzFELDRDQUEwQztBQUMxQyw4Q0FBMEQ7QUFFMUQsbUNBQStDO0FBRS9DLDZDQUEwQztBQUUxQywrRUFBK0U7QUFDL0UsU0FBUyxtQkFBbUIsQ0FBQyxFQUFVLEVBQUUsTUFBYztJQUNyRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RCxPQUFPLGFBQWEsT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ3hDLENBQUM7QUFFRCxRQUFRLENBQUMsWUFBWSxFQUFFO0lBQ3JCLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFlBQVksQ0FBQztJQUNqQixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7SUFFN0IsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFBLGNBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUNoQixLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5QkFBeUIsRUFBRTtRQUM1QixZQUFZLENB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QUFhLENBQUM7WUFFakQsTUFBTSxLQUFLO2lCQUNSLG9CQUFvQixDQUFDO2dCQUNwQixRQUFRLEVBQUU7b0JBQ1IsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztpQkFDekQ7Z0JBQ1IsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQVM7Z0JBQ2hGLE1BQU0sRUFBRSxTQUE4QjthQUN2QyxDQUFDO2lCQUNELE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUsIFdhbGxldCB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyLCBYZGNUb2tlbiB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IGdldEJ1aWxkZXIgfSBmcm9tICcuL2dldEJ1aWxkZXInO1xuXG4vKiogRW5jb2RlIEVSQy0yMCB0cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpIGNhbGxkYXRhIHdpdGhvdXQgZXRoZXJldW1qcy1hYmkuICovXG5mdW5jdGlvbiBlbmNvZGVFcmMyMFRyYW5zZmVyKHRvOiBzdHJpbmcsIGFtb3VudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYWRkcmVzcyA9IHRvLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXjB4LywgJycpLnBhZFN0YXJ0KDY0LCAnMCcpO1xuICBjb25zdCB2YWx1ZSA9IEJpZ0ludChhbW91bnQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg2NCwgJzAnKTtcbiAgcmV0dXJuIGAweGE5MDU5Y2JiJHthZGRyZXNzfSR7dmFsdWV9YDtcbn1cblxuZGVzY3JpYmUoJ1hEQyBUb2tlbjonLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBsZXQgeGRjVG9rZW5Db2luO1xuICBjb25zdCB0b2tlbk5hbWUgPSAneGRjOnVzZGMnO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAncHJvZCcgfSk7XG4gICAgcmVnaXN0ZXIoYml0Z28pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIHhkY1Rva2VuQ29pbiA9IGJpdGdvLmNvaW4odG9rZW5OYW1lKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZXR1cm4gY29uc3RhbnRzJywgZnVuY3Rpb24gKCkge1xuICAgIHhkY1Rva2VuQ29pbi5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgneGRjOnVzZGMnKTtcbiAgICB4ZGNUb2tlbkNvaW4uZ2V0QmFzZUNoYWluKCkuc2hvdWxkLmVxdWFsKCd4ZGMnKTtcbiAgICB4ZGNUb2tlbkNvaW4uZ2V0RnVsbE5hbWUoKS5zaG91bGQuZXF1YWwoJ1hEQyBUb2tlbicpO1xuICAgIHhkY1Rva2VuQ29pbi5nZXRCYXNlRmFjdG9yKCkuc2hvdWxkLmVxdWFsKDFlNik7XG4gICAgeGRjVG9rZW5Db2luLnR5cGUuc2hvdWxkLmVxdWFsKHRva2VuTmFtZSk7XG4gICAgeGRjVG9rZW5Db2luLm5hbWUuc2hvdWxkLmVxdWFsKCdVU0QgQ29pbicpO1xuICAgIHhkY1Rva2VuQ29pbi5jb2luLnNob3VsZC5lcXVhbCgneGRjJyk7XG4gICAgeGRjVG9rZW5Db2luLm5ldHdvcmsuc2hvdWxkLmVxdWFsKCdNYWlubmV0Jyk7XG4gICAgeGRjVG9rZW5Db2luLmRlY2ltYWxQbGFjZXMuc2hvdWxkLmVxdWFsKDYpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVG9rZW4gUmVnaXN0cmF0aW9uIGFuZCBUcmFuc2FjdGlvbkJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbWFpbm5ldFRva2VucyA9IFsneGRjOnVzZGMnLCAneGRjOmxidCcsICd4ZGM6Z2FtYScsICd4ZGM6c3J4JywgJ3hkYzp3ZXRoJ107XG4gICAgY29uc3QgdGVzdG5ldFRva2VucyA9IFsndHhkYzp0bXQnXTtcblxuICAgIGRlc2NyaWJlKCdNYWlubmV0IHRva2VucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1haW5uZXRUb2tlbnMuZm9yRWFjaCgodG9rZW5OYW1lKSA9PiB7XG4gICAgICAgIGl0KGAke3Rva2VuTmFtZX0gc2hvdWxkIGJlIHJlZ2lzdGVyZWQgYXMgWGRjVG9rZW5gLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW4gPSBiaXRnby5jb2luKHRva2VuTmFtZSk7XG4gICAgICAgICAgdG9rZW4uc2hvdWxkLmJlLmluc3RhbmNlT2YoWGRjVG9rZW4pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChgJHt0b2tlbk5hbWV9IHNob3VsZCBjcmVhdGUgVHJhbnNhY3Rpb25CdWlsZGVyIHdpdGhvdXQgZXJyb3JgLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgdG9rZW4gPSBiaXRnby5jb2luKHRva2VuTmFtZSkgYXMgWGRjVG9rZW47XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGFjY2Vzc2luZyBwcm90ZWN0ZWQgbWV0aG9kIGZvciB0ZXN0aW5nXG4gICAgICAgICAgKCgpID0+IHRva2VuLmdldFRyYW5zYWN0aW9uQnVpbGRlcigpKS5zaG91bGQubm90LnRocm93KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KGAke3Rva2VuTmFtZX0gc2hvdWxkIHVzZSBYREMtc3BlY2lmaWMgVHJhbnNhY3Rpb25CdWlsZGVyYCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHRva2VuID0gYml0Z28uY29pbih0b2tlbk5hbWUpIGFzIFhkY1Rva2VuO1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBhY2Nlc3NpbmcgcHJvdGVjdGVkIG1ldGhvZCBmb3IgdGVzdGluZ1xuICAgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSB0b2tlbi5nZXRUcmFuc2FjdGlvbkJ1aWxkZXIoKTtcbiAgICAgICAgICBidWlsZGVyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdfY29tbW9uJyk7XG4gICAgICAgICAgLy8gVmVyaWZ5IGl0J3MgdXNpbmcgWERDJ3MgZ2V0Q29tbW9uLCBub3QgRVZNJ3NcbiAgICAgICAgICAvLyBYREMncyBUcmFuc2FjdGlvbkJ1aWxkZXIgc2hvdWxkIGNyZWF0ZSBzdWNjZXNzZnVsbHkgd2l0aG91dCBTSEFSRURfRVZNX1NESyBmZWF0dXJlXG4gICAgICAgICAgYnVpbGRlci5jb25zdHJ1Y3Rvci5uYW1lLnNob3VsZC5lcXVhbCgnVHJhbnNhY3Rpb25CdWlsZGVyJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVGVzdG5ldCB0b2tlbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0ZXN0bmV0VG9rZW5zLmZvckVhY2goKHRva2VuTmFtZSkgPT4ge1xuICAgICAgICBpdChgJHt0b2tlbk5hbWV9IHNob3VsZCBiZSByZWdpc3RlcmVkIGFzIFhkY1Rva2VuYCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHRva2VuID0gYml0Z28uY29pbih0b2tlbk5hbWUpO1xuICAgICAgICAgIHRva2VuLnNob3VsZC5iZS5pbnN0YW5jZU9mKFhkY1Rva2VuKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoYCR7dG9rZW5OYW1lfSBzaG91bGQgY3JlYXRlIFRyYW5zYWN0aW9uQnVpbGRlciB3aXRob3V0IGVycm9yYCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHRva2VuID0gYml0Z28uY29pbih0b2tlbk5hbWUpIGFzIFhkY1Rva2VuO1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBhY2Nlc3NpbmcgcHJvdGVjdGVkIG1ldGhvZCBmb3IgdGVzdGluZ1xuICAgICAgICAgICgoKSA9PiB0b2tlbi5nZXRUcmFuc2FjdGlvbkJ1aWxkZXIoKSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChgJHt0b2tlbk5hbWV9IHNob3VsZCB1c2UgWERDLXNwZWNpZmljIFRyYW5zYWN0aW9uQnVpbGRlcmAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IGJpdGdvLmNvaW4odG9rZW5OYW1lKSBhcyBYZGNUb2tlbjtcbiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gYWNjZXNzaW5nIHByb3RlY3RlZCBtZXRob2QgZm9yIHRlc3RpbmdcbiAgICAgICAgICBjb25zdCBidWlsZGVyID0gdG9rZW4uZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk7XG4gICAgICAgICAgYnVpbGRlci5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnX2NvbW1vbicpO1xuICAgICAgICAgIGJ1aWxkZXIuY29uc3RydWN0b3IubmFtZS5zaG91bGQuZXF1YWwoJ1RyYW5zYWN0aW9uQnVpbGRlcicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChgJHt0b2tlbk5hbWV9IHNob3VsZCBoYXZlIGNvcnJlY3QgYmFzZSBjaGFpbmAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgIGNvbnN0IHRva2VuOiBhbnkgPSBiaXRnby5jb2luKHRva2VuTmFtZSk7XG4gICAgICAgICAgdG9rZW4uZ2V0QmFzZUNoYWluKCkuc2hvdWxkLmVxdWFsKCd0eGRjJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KGAke3Rva2VuTmFtZX0gc2hvdWxkIG5vdCB0aHJvdyBcIkNhbm5vdCB1c2UgY29tbW9uIHNkayBtb2R1bGVcIiBlcnJvcmAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCB0b2tlbiA9IGJpdGdvLmNvaW4odG9rZW5OYW1lKSBhcyBYZGNUb2tlbjtcbiAgICAgICAgICBsZXQgZXJyb3JUaHJvd24gPSBmYWxzZTtcbiAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJyc7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGFjY2Vzc2luZyBwcm90ZWN0ZWQgbWV0aG9kIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBjb25zdCBidWlsZGVyID0gdG9rZW4uZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk7XG4gICAgICAgICAgICAvLyBUcnkgdG8gdXNlIHRoZSBidWlsZGVyIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IGZ1bmN0aW9uYWxcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSB0eXBlIGV4cGVjdHMgVHJhbnNhY3Rpb25UeXBlIGVudW1cbiAgICAgICAgICAgIGJ1aWxkZXIudHlwZSgnU2VuZCcpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IChlIGFzIEVycm9yKS5tZXNzYWdlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yVGhyb3duLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICAgICAgZXJyb3JNZXNzYWdlLnNob3VsZC5ub3QubWF0Y2goL0Nhbm5vdCB1c2UgY29tbW9uIHNkayBtb2R1bGUvKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmVyaWZ5IGFsbCBYREMgdG9rZW5zIHVzZSBYZGNUb2tlbiBjbGFzcywgbm90IEV0aExpa2VFcmMyMFRva2VuJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWxsVG9rZW5zID0gWy4uLm1haW5uZXRUb2tlbnMsIC4uLnRlc3RuZXRUb2tlbnNdO1xuXG4gICAgICBhbGxUb2tlbnMuZm9yRWFjaCgodG9rZW5OYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gYml0Z28uY29pbih0b2tlbk5hbWUpO1xuICAgICAgICB0b2tlbi5zaG91bGQuYmUuaW5zdGFuY2VPZihYZGNUb2tlbik7XG4gICAgICAgIHRva2VuLmNvbnN0cnVjdG9yLm5hbWUuc2hvdWxkLmVxdWFsKCdYZGNUb2tlbicpO1xuICAgICAgICB0b2tlbi5jb25zdHJ1Y3Rvci5uYW1lLnNob3VsZC5ub3QuZXF1YWwoJ0V0aExpa2VFcmMyMFRva2VuJyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZlcmlmeVRzc1RyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHJlY2lwaWVudEFkZHJlc3MgPSAnMHgxNzRjZmQ4MjNhZjhjZTI3ZWQwYWZlZTNmY2YzYzNiYTI1OTExNmJlJztcbiAgICBjb25zdCB3cm9uZ0FkZHJlc3MgPSAnMHg3ZTg1YmRjMjdjMDUwZTM5MDVlYmY0YjhlNjM0ZDlhZDZlZGQwZGU2JztcbiAgICBjb25zdCB0b2tlbkNvbnRyYWN0QWRkcmVzcyA9ICcweGEwYjg2OTkxYzYyMThiMzZjMWQxOWQ0YTJlOWViMGNlMzYwNmViNDgnO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYW4gRVJDLTIwIHRyYW5zZmVyIHdoZXJlIGNhbGxkYXRhIG1hdGNoZXMgZGVjbGFyZWQgcmVjaXBpZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdG9rZW4gPSBiaXRnby5jb2luKCd0eGRjOnRtdCcpIGFzIFhkY1Rva2VuO1xuXG4gICAgICBjb25zdCBlcmMyMFRyYW5zZmVyRGF0YSA9IGVuY29kZUVyYzIwVHJhbnNmZXIocmVjaXBpZW50QWRkcmVzcywgJzEwMDAwMDAwJyk7XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ3R4ZGMnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6ICcxMCcsIGdhc0xpbWl0OiAnNjAwMDAnIH0pO1xuICAgICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gICAgICB0eEJ1aWxkZXIuY29udHJhY3QodG9rZW5Db250cmFjdEFkZHJlc3MpO1xuICAgICAgdHhCdWlsZGVyLmRhdGEoZXJjMjBUcmFuc2ZlckRhdGEpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdG9rZW4sIHsgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzIH0gfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRva2VuLnZlcmlmeVRzc1RyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MsIGFtb3VudDogJzEwMDAwMDAwJyB9XSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXgsIGNvaW46ICd0eGRjOnRtdCcsIHdhbGxldElkOiAnZmFrZVdhbGxldElkJyB9IGFzIGFueSxcbiAgICAgICAgd2FsbGV0LFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gRVJDLTIwIHRyYW5zZmVyIHdoZW4gY2FsbGRhdGEgcmVjaXBpZW50IGRvZXMgbm90IG1hdGNoIGRlY2xhcmVkIHJlY2lwaWVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gYml0Z28uY29pbigndHhkYzp0bXQnKSBhcyBYZGNUb2tlbjtcblxuICAgICAgY29uc3QgZXJjMjBUcmFuc2ZlckRhdGEgPSBlbmNvZGVFcmMyMFRyYW5zZmVyKHdyb25nQWRkcmVzcywgJzEwMDAwMDAwJyk7XG5cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGdldEJ1aWxkZXIoJ3R4ZGMnKSBhcyBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgICB0eEJ1aWxkZXIudHlwZShUcmFuc2FjdGlvblR5cGUuQ29udHJhY3RDYWxsKTtcbiAgICAgIHR4QnVpbGRlci5mZWUoeyBmZWU6ICcxMCcsIGdhc0xpbWl0OiAnNjAwMDAnIH0pO1xuICAgICAgdHhCdWlsZGVyLmNvdW50ZXIoMSk7XG4gICAgICB0eEJ1aWxkZXIuY29udHJhY3QodG9rZW5Db250cmFjdEFkZHJlc3MpO1xuICAgICAgdHhCdWlsZGVyLmRhdGEoZXJjMjBUcmFuc2ZlckRhdGEpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChiaXRnbywgdG9rZW4sIHsgY29pblNwZWNpZmljOiB7IGJhc2VBZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzIH0gfSk7XG5cbiAgICAgIGF3YWl0IHRva2VuXG4gICAgICAgIC52ZXJpZnlUc3NUcmFuc2FjdGlvbih7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiByZWNpcGllbnRBZGRyZXNzLCBhbW91bnQ6ICcxMDAwMDAwMCcgfV0sXG4gICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCwgY29pbjogJ3R4ZGM6dG10Jywgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnIH0gYXMgYW55LFxuICAgICAgICAgIHdhbGxldCxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ2Rlc3RpbmF0aW9uIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgcmVjaXBpZW50IGFkZHJlc3MnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiB0eFBhcmFtcy5yZWNpcGllbnRzIGlzIG1pc3NpbmcgYW5kIG5vIHZhbGlkIHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGJpdGdvLmNvaW4oJ3R4ZGM6dG10JykgYXMgWGRjVG9rZW47XG4gICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KGJpdGdvLCB0b2tlbiwgeyBjb2luU3BlY2lmaWM6IHsgYmFzZUFkZHJlc3M6IHJlY2lwaWVudEFkZHJlc3MgfSB9KTtcblxuICAgICAgYXdhaXQgdG9rZW5cbiAgICAgICAgLnZlcmlmeVRzc1RyYW5zYWN0aW9uKHtcbiAgICAgICAgICB0eFBhcmFtczoge30sXG4gICAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleDogJzB4MDAnLCBjb2luOiAndHhkYzp0bXQnLCB3YWxsZXRJZDogJ2Zha2VXYWxsZXRJZCcgfSBhcyBhbnksXG4gICAgICAgICAgd2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyB0eFBhcmFtcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIHdhbGxldCBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdG9rZW4gPSBiaXRnby5jb2luKCd0eGRjOnRtdCcpIGFzIFhkY1Rva2VuO1xuXG4gICAgICBhd2FpdCB0b2tlblxuICAgICAgICAudmVyaWZ5VHNzVHJhbnNhY3Rpb24oe1xuICAgICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAndHJhbnNmZXInLFxuICAgICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogcmVjaXBpZW50QWRkcmVzcywgYW1vdW50OiAnMTAwMDAwMDAnIH1dLFxuICAgICAgICAgIH0gYXMgYW55LFxuICAgICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXg6ICcweDAwJywgY29pbjogJ3R4ZGM6dG10Jywgd2FsbGV0SWQ6ICdmYWtlV2FsbGV0SWQnIH0gYXMgYW55LFxuICAgICAgICAgIHdhbGxldDogdW5kZWZpbmVkIGFzIHVua25vd24gYXMgV2FsbGV0LFxuICAgICAgICB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnbWlzc2luZyBwYXJhbXMnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|