@bitgo-beta/abstract-eth 1.0.2-beta.2195 → 1.0.2-beta.2196
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/iface.d.ts +22 -0
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/transactionBuilder.d.ts +52 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +138 -1
- package/dist/src/lib/utils.d.ts +15 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +36 -1
- package/dist/src/lib/zamaUtils.d.ts +69 -0
- package/dist/src/lib/zamaUtils.d.ts.map +1 -1
- package/dist/src/lib/zamaUtils.js +136 -2
- package/dist/test/unit/transactionBuilder/finalizeUnwrapERC7984.d.ts +3 -0
- package/dist/test/unit/transactionBuilder/finalizeUnwrapERC7984.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/finalizeUnwrapERC7984.js +127 -0
- package/dist/test/unit/transactionBuilder/index.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/index.d.ts.map +1 -1
- package/dist/test/unit/transactionBuilder/index.js +3 -1
- package/dist/test/unit/transactionBuilder/unwrapERC7984.d.ts +3 -0
- package/dist/test/unit/transactionBuilder/unwrapERC7984.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/unwrapERC7984.js +134 -0
- package/dist/test/unit/zamaUtils.js +88 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -40,6 +40,12 @@ describe('Zama Utils', () => {
|
|
|
40
40
|
it('should have correct selector for wrap(address,uint256)', () => {
|
|
41
41
|
zamaUtils_1.wrapMethodId.should.equal('0xbf376c7a');
|
|
42
42
|
});
|
|
43
|
+
it('should have correct selector for unwrap(address,address,bytes32,bytes)', () => {
|
|
44
|
+
zamaUtils_1.unwrapMethodId.should.equal('0x5bf4ef06');
|
|
45
|
+
});
|
|
46
|
+
it('should have correct selector for finalizeUnwrap(bytes32,uint64,bytes)', () => {
|
|
47
|
+
zamaUtils_1.finalizeUnwrapMethodId.should.equal('0x5bb67a05');
|
|
48
|
+
});
|
|
43
49
|
it('method IDs should all be distinct', () => {
|
|
44
50
|
const ids = new Set([
|
|
45
51
|
zamaUtils_1.delegateForUserDecryptionMethodId,
|
|
@@ -47,8 +53,10 @@ describe('Zama Utils', () => {
|
|
|
47
53
|
zamaUtils_1.callFromParentMethodId,
|
|
48
54
|
zamaUtils_1.approveMethodId,
|
|
49
55
|
zamaUtils_1.wrapMethodId,
|
|
56
|
+
zamaUtils_1.unwrapMethodId,
|
|
57
|
+
zamaUtils_1.finalizeUnwrapMethodId,
|
|
50
58
|
]);
|
|
51
|
-
ids.size.should.equal(
|
|
59
|
+
ids.size.should.equal(7);
|
|
52
60
|
});
|
|
53
61
|
});
|
|
54
62
|
// -------------------------------------------------------------------------
|
|
@@ -187,6 +195,84 @@ describe('Zama Utils', () => {
|
|
|
187
195
|
});
|
|
188
196
|
});
|
|
189
197
|
});
|
|
198
|
+
describe('buildUnwrapCalldata', () => {
|
|
199
|
+
const FROM = '0x1111111111111111111111111111111111111111';
|
|
200
|
+
const TO = '0x1111111111111111111111111111111111111111';
|
|
201
|
+
const ENCRYPTED_AMOUNT = '0x' + 'ab'.repeat(32);
|
|
202
|
+
const INPUT_PROOF = '0x' + 'cd'.repeat(64);
|
|
203
|
+
describe('output format', () => {
|
|
204
|
+
it('should produce a 0x-prefixed hex string starting with unwrap selector', () => {
|
|
205
|
+
const calldata = (0, zamaUtils_1.buildUnwrapCalldata)(FROM, TO, ENCRYPTED_AMOUNT, INPUT_PROOF);
|
|
206
|
+
calldata.should.be.a.String();
|
|
207
|
+
calldata.should.startWith(zamaUtils_1.unwrapMethodId);
|
|
208
|
+
calldata.slice(0, 10).should.equal('0x5bf4ef06');
|
|
209
|
+
});
|
|
210
|
+
it('should round-trip through decodeUnwrapCalldata', () => {
|
|
211
|
+
const calldata = (0, zamaUtils_1.buildUnwrapCalldata)(FROM, TO, ENCRYPTED_AMOUNT, INPUT_PROOF);
|
|
212
|
+
const decoded = (0, zamaUtils_1.decodeUnwrapCalldata)(calldata);
|
|
213
|
+
decoded.from.toLowerCase().should.equal(FROM.toLowerCase());
|
|
214
|
+
decoded.to.toLowerCase().should.equal(TO.toLowerCase());
|
|
215
|
+
decoded.encryptedAmount.should.equal(ENCRYPTED_AMOUNT);
|
|
216
|
+
decoded.inputProof.should.equal(INPUT_PROOF);
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
describe('validation', () => {
|
|
220
|
+
it('should reject an invalid from address', () => {
|
|
221
|
+
(() => (0, zamaUtils_1.buildUnwrapCalldata)('not-an-address', TO, ENCRYPTED_AMOUNT, INPUT_PROOF)).should.throw(/invalid from address/);
|
|
222
|
+
});
|
|
223
|
+
it('should reject an invalid to address', () => {
|
|
224
|
+
(() => (0, zamaUtils_1.buildUnwrapCalldata)(FROM, 'not-an-address', ENCRYPTED_AMOUNT, INPUT_PROOF)).should.throw(/invalid to address/);
|
|
225
|
+
});
|
|
226
|
+
it('should reject a bad EIP-55 checksum', () => {
|
|
227
|
+
const badChecksum = '0x2Debbe0487ef921df4457f9e36ed05be2df1ac75';
|
|
228
|
+
(() => (0, zamaUtils_1.buildUnwrapCalldata)(badChecksum, TO, ENCRYPTED_AMOUNT, INPUT_PROOF)).should.throw(/invalid from address/);
|
|
229
|
+
});
|
|
230
|
+
it('should reject a non-32-byte encryptedAmount', () => {
|
|
231
|
+
(() => (0, zamaUtils_1.buildUnwrapCalldata)(FROM, TO, '0xabcd', INPUT_PROOF)).should.throw(/encryptedAmount must be a 32-byte/);
|
|
232
|
+
});
|
|
233
|
+
it('should reject an empty inputProof', () => {
|
|
234
|
+
(() => (0, zamaUtils_1.buildUnwrapCalldata)(FROM, TO, ENCRYPTED_AMOUNT, '0x')).should.throw(/inputProof must be a non-empty/);
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
describe('buildFinalizeUnwrapCalldata', () => {
|
|
239
|
+
const REQUEST_ID = '0x' + '11'.repeat(32);
|
|
240
|
+
const CLEARTEXT_AMOUNT = '1000000';
|
|
241
|
+
const DECRYPTION_PROOF = '0x' + 'ee'.repeat(64);
|
|
242
|
+
describe('output format', () => {
|
|
243
|
+
it('should produce a 0x-prefixed hex string starting with finalizeUnwrap selector', () => {
|
|
244
|
+
const calldata = (0, zamaUtils_1.buildFinalizeUnwrapCalldata)(REQUEST_ID, CLEARTEXT_AMOUNT, DECRYPTION_PROOF);
|
|
245
|
+
calldata.should.be.a.String();
|
|
246
|
+
calldata.should.startWith(zamaUtils_1.finalizeUnwrapMethodId);
|
|
247
|
+
calldata.slice(0, 10).should.equal('0x5bb67a05');
|
|
248
|
+
});
|
|
249
|
+
it('should round-trip through decodeFinalizeUnwrapCalldata', () => {
|
|
250
|
+
const calldata = (0, zamaUtils_1.buildFinalizeUnwrapCalldata)(REQUEST_ID, CLEARTEXT_AMOUNT, DECRYPTION_PROOF);
|
|
251
|
+
const decoded = (0, zamaUtils_1.decodeFinalizeUnwrapCalldata)(calldata);
|
|
252
|
+
decoded.requestId.should.equal(REQUEST_ID);
|
|
253
|
+
decoded.cleartextAmount.should.equal(CLEARTEXT_AMOUNT);
|
|
254
|
+
decoded.decryptionProof.should.equal(DECRYPTION_PROOF);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
describe('validation', () => {
|
|
258
|
+
it('should reject a non-32-byte requestId', () => {
|
|
259
|
+
(() => (0, zamaUtils_1.buildFinalizeUnwrapCalldata)('0xabcd', CLEARTEXT_AMOUNT, DECRYPTION_PROOF)).should.throw(/requestId must be a 32-byte/);
|
|
260
|
+
});
|
|
261
|
+
it('should reject cleartextAmount of 0', () => {
|
|
262
|
+
(() => (0, zamaUtils_1.buildFinalizeUnwrapCalldata)(REQUEST_ID, '0', DECRYPTION_PROOF)).should.throw(/cleartextAmount must be > 0/);
|
|
263
|
+
});
|
|
264
|
+
it('should reject cleartextAmount exceeding uint64', () => {
|
|
265
|
+
(() => (0, zamaUtils_1.buildFinalizeUnwrapCalldata)(REQUEST_ID, (zamaUtils_1.UINT64_MAX + 1n).toString(), DECRYPTION_PROOF)).should.throw(/cleartextAmount exceeds uint64/);
|
|
266
|
+
});
|
|
267
|
+
it('should accept cleartextAmount equal to UINT64_MAX', () => {
|
|
268
|
+
const calldata = (0, zamaUtils_1.buildFinalizeUnwrapCalldata)(REQUEST_ID, zamaUtils_1.UINT64_MAX.toString(), DECRYPTION_PROOF);
|
|
269
|
+
(0, zamaUtils_1.decodeFinalizeUnwrapCalldata)(calldata).cleartextAmount.should.equal(zamaUtils_1.UINT64_MAX.toString());
|
|
270
|
+
});
|
|
271
|
+
it('should reject an empty decryptionProof', () => {
|
|
272
|
+
(() => (0, zamaUtils_1.buildFinalizeUnwrapCalldata)(REQUEST_ID, CLEARTEXT_AMOUNT, '0x')).should.throw(/decryptionProof must be a non-empty/);
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
});
|
|
190
276
|
// -------------------------------------------------------------------------
|
|
191
277
|
describe('buildDelegationCalldata', () => {
|
|
192
278
|
describe('output format', () => {
|
|
@@ -499,4 +585,4 @@ describe('Zama Utils', () => {
|
|
|
499
585
|
});
|
|
500
586
|
});
|
|
501
587
|
});
|
|
502
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemFtYVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3phbWFVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixvRUFBeUM7QUFDekMsdURBZ0JpQztBQUNqQyx5REFBK0U7QUFFL0UsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDMUIsTUFBTSxXQUFXLEdBQUcsNENBQTRDLENBQUM7SUFDakUsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMsQ0FBQztJQUN0RSxNQUFNLGFBQWEsR0FBRyw0Q0FBNEMsQ0FBQztJQUNuRSxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSxNQUFNLGlCQUFpQixHQUFHLDRDQUE0QyxDQUFDO0lBQ3ZFLCtEQUErRDtJQUMvRCxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBRTNELGtEQUFrRDtJQUNsRCxTQUFTLG9CQUFvQixDQUFDLFFBQWdCO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxNQUFNLE9BQU8sR0FBRyx3QkFBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakYsT0FBTyxDQUFFLE9BQU8sQ0FBQyxDQUFDLENBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUcsT0FBTyxDQUFDLENBQUMsQ0FBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENB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QyxFQUFDLEdBQUcsQ0FBQyxFQUFFLDZDQUE2QyxDQUFDLENBQUM7UUFDcEgsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUVBQXVFLEVBQUUsR0FBRyxFQUFFO1lBQy9FLDRGQUE0RjtZQUM1RixNQUFNLGFBQWEsR0FBRyxJQUFBLG1DQUF1QixFQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2RixNQUFNLE9BQU8sR0FBRyxJQUFBLGdDQUFvQixFQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNuRSxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxJQUFBLG9EQUF3QyxFQUFDLE9BQU8sQ0FBQyxFQUN2RCxtREFBbUQsQ0FDcEQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhFQUE4RSxFQUFFLEdBQUcsRUFBRTtZQUN0RixNQUFNLE9BQU8sR0FBRyxJQUFBLG1EQUF1QyxFQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0YsTUFBTSxPQUFPLEdBQUcsSUFBQSxvREFBd0MsRUFBQyxPQUFPLENBQUMsQ0FBQztZQUNsRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUMzQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IEV0aGVyZXVtQWJpIGZyb20gJ2V0aGVyZXVtanMtYWJpJztcbmltcG9ydCB7XG4gIGJ1aWxkQXBwcm92ZUNhbGxkYXRhLFxuICBidWlsZFdyYXBDYWxsZGF0YSxcbiAgZGVjb2RlV3JhcENhbGxkYXRhLFxuICBidWlsZERlbGVnYXRpb25DYWxsZGF0YSxcbiAgYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEsXG4gIGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJCeUhhbmRsZUNhbGxkYXRhLFxuICBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEsXG4gIGRlY29kZUZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEsXG4gIHdyYXBJbkNhbGxGcm9tUGFyZW50LFxuICBhcHByb3ZlTWV0aG9kSWQsXG4gIHdyYXBNZXRob2RJZCxcbiAgVUlOVDY0X01BWCxcbiAgZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbk1ldGhvZElkLFxuICBhY2xNdWx0aWNhbGxNZXRob2RJZCxcbiAgY2FsbEZyb21QYXJlbnRNZXRob2RJZCxcbn0gZnJvbSAnLi4vLi4vc3JjL2xpYi96YW1hVXRpbHMnO1xuaW1wb3J0IHsgY29uZmlkZW50aWFsVHJhbnNmZXJOb1Byb29mTWV0aG9kSWQgfSBmcm9tICcuLi8uLi9zcmMvbGliL3dhbGxldFV0aWwnO1xuXG5kZXNjcmliZSgnWmFtYSBVdGlscycsICgpID0+IHtcbiAgY29uc3QgQUNMX0FERFJFU1MgPSAnMHhmMEZmZGM5M2I3RTE4NmJDMmY4Q0IzZEFBNzVEODZkMTkzMEE0MzNEJztcbiAgY29uc3QgREVMRUdBVEVfQUREUkVTUyA9ICcweDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnO1xuICBjb25zdCBUT0tFTl9BRERSRVNTID0gJzB4OTQxNjcxMjkxNzJBMzVhYjA5M0I0NGI4Yjk2MjEzRERiYzNjRDM4Nyc7XG4gIGNvbnN0IFRPS0VOX0FERFJFU1NfMiA9ICcweDRFN0IwNkQ3ODk2NTU5NGVCNUVGNTQxNGMzNTdjYTIxRTE1NTQ0OTEnO1xuICBjb25zdCBUT0tFTl9BRERSRVNTXzMgPSAnMHhBMGI4Njk5MWM2MjE4YjM2YzFkMTlENGEyZTlFYjBjRTM2MDZlQjQ4JztcbiAgY29uc3QgRk9SV0FSREVSX0FERFJFU1MgPSAnMHhEZUFEYmVlZmRFQWRiZWVmZEVhZGJFRUZkZWFkYmVFRmRFYURiZWVGJztcbiAgLy8gSG9vZGkgaHRldGg6Y3VzZHQgd3JhcHBlciAoc3BlbmRlciBmb3IgZXhhY3QtYW1vdW50IGFwcHJvdmUpXG4gIGNvbnN0IFdSQVBQRVJfQUREUkVTUyA9ICcweDJkZWJiZTA0ODdlZjkyMWRmNDQ1N2Y5ZTM2ZWQwNWJlMmRmMWFjNzUnO1xuICBjb25zdCBFWFBJUlkgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSArIDM2NSAqIDg2NDAwO1xuXG4gIC8vIEhlbHBlcjogZGVjb2RlIGEgZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbiBjYWxsXG4gIGZ1bmN0aW9uIGRlY29kZURlbGVnYXRpb25DYWxsKGNhbGxkYXRhOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmcsIG51bWJlcl0ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuZnJvbShjYWxsZGF0YS5zbGljZSgxMCksICdoZXgnKTtcbiAgICBjb25zdCBkZWNvZGVkID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsnYWRkcmVzcycsICdhZGRyZXNzJywgJ3VpbnQ2NCddLCBwYXlsb2FkKTtcbiAgICByZXR1cm4gWyhkZWNvZGVkWzBdIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpLCAoZGVjb2RlZFsxXSBhcyBCdWZmZXIpLnRvU3RyaW5nKCdoZXgnKSwgTnVtYmVyKGRlY29kZWRbMl0pXTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZGVzY3JpYmUoJ01ldGhvZCBJRHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3Qgc2VsZWN0b3IgZm9yIGRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb24oYWRkcmVzcyxhZGRyZXNzLHVpbnQ2NCknLCAoKSA9PiB7XG4gICAgICBkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uTWV0aG9kSWQuc2hvdWxkLmVxdWFsKCcweDA0ZjYxYTk1Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgY29ycmVjdCBzZWxlY3RvciBmb3IgbXVsdGljYWxsKGJ5dGVzW10pJywgKCkgPT4ge1xuICAgICAgYWNsTXVsdGljYWxsTWV0aG9kSWQuc2hvdWxkLmVxdWFsKCcweGFjOTY1MGQ4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgY29ycmVjdCBzZWxlY3RvciBmb3IgY2FsbEZyb21QYXJlbnQoYWRkcmVzcyx1aW50MjU2LGJ5dGVzKScsICgpID0+IHtcbiAgICAgIGNhbGxGcm9tUGFyZW50TWV0aG9kSWQuc2hvdWxkLmVxdWFsKCcweDc3ZTYwYjM1Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgY29ycmVjdCBzZWxlY3RvciBmb3IgYXBwcm92ZShhZGRyZXNzLHVpbnQyNTYpJywgKCkgPT4ge1xuICAgICAgYXBwcm92ZU1ldGhvZElkLnNob3VsZC5lcXVhbCgnMHgwOTVlYTdiMycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3Qgc2VsZWN0b3IgZm9yIHdyYXAoYWRkcmVzcyx1aW50MjU2KScsICgpID0+IHtcbiAgICAgIHdyYXBNZXRob2RJZC5zaG91bGQuZXF1YWwoJzB4YmYzNzZjN2EnKTtcbiAgICB9KTtcblxuICAgIGl0KCdtZXRob2QgSURzIHNob3VsZCBhbGwgYmUgZGlzdGluY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBuZXcgU2V0KFtcbiAgICAgICAgZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbk1ldGhvZElkLFxuICAgICAgICBhY2xNdWx0aWNhbGxNZXRob2RJZCxcbiAgICAgICAgY2FsbEZyb21QYXJlbnRNZXRob2RJZCxcbiAgICAgICAgYXBwcm92ZU1ldGhvZElkLFxuICAgICAgICB3cmFwTWV0aG9kSWQsXG4gICAgICBdKTtcbiAgICAgIGlkcy5zaXplLnNob3VsZC5lcXVhbCg1KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnYnVpbGRBcHByb3ZlQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgY29uc3QgRVhBQ1RfQU1PVU5UID0gJzEwMDAwMDAnOyAvLyAxIFVTRFQgKDYgZGVjaW1hbHMpXG5cbiAgICBkZXNjcmliZSgnb3V0cHV0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIDB4LXByZWZpeGVkIGhleCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCBFWEFDVF9BTU9VTlQpO1xuICAgICAgICBjYWxsZGF0YS5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgICAgY2FsbGRhdGEuc2hvdWxkLnN0YXJ0V2l0aCgnMHgnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhdmUgZXhhY3QgbGVuZ3RoOiA0LWJ5dGUgc2VsZWN0b3IgKyAyIMOXIDMyLWJ5dGUgQUJJIHdvcmRzID0gNjggYnl0ZXMgKDEzOCBjaGFycyknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCBFWEFDVF9BTU9VTlQpO1xuICAgICAgICBjYWxsZGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDEzOCk7IC8vICcweCcgKyAxMzYgaGV4IGNoYXJzXG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdGFydCB3aXRoIGFwcHJvdmUgc2VsZWN0b3IgMHgwOTVlYTdiMycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZEFwcHJvdmVDYWxsZGF0YShXUkFQUEVSX0FERFJFU1MsIEVYQUNUX0FNT1VOVCk7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoYXBwcm92ZU1ldGhvZElkKTtcbiAgICAgICAgY2FsbGRhdGEuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbCgnMHgwOTVlYTdiMycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQUJJIHBhcmFtZXRlciBlbmNvZGluZycsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgZW5jb2RlIHdyYXBwZXIgYXMgc3BlbmRlciBpbiB0aGUgZmlyc3QgQUJJIHdvcmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCBFWEFDVF9BTU9VTlQpO1xuICAgICAgICBjb25zdCB3b3JkMSA9IGNhbGxkYXRhLnNsaWNlKDEwLCA3NCk7XG4gICAgICAgIHdvcmQxLnNob3VsZC5lcXVhbChXUkFQUEVSX0FERFJFU1Muc2xpY2UoMikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwgJzAnKSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBlbmNvZGUgZXhhY3QgYW1vdW50IGluIHRoZSBzZWNvbmQgQUJJIHdvcmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCBFWEFDVF9BTU9VTlQpO1xuICAgICAgICBjb25zdCB3b3JkMiA9IGNhbGxkYXRhLnNsaWNlKDc0LCAxMzgpO1xuICAgICAgICB3b3JkMi5zaG91bGQuZXF1YWwoQmlnSW50KEVYQUNUX0FNT1VOVCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDY0LCAnMCcpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGVuY29kZSBhcHByb3ZlKDApIHJlc2V0IHdoZW4gYW1vdW50IGlzIDAnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCAwKTtcbiAgICAgICAgY2FsbGRhdGEuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChhcHByb3ZlTWV0aG9kSWQpO1xuICAgICAgICBjYWxsZGF0YS5zbGljZSg3NCwgMTM4KS5zaG91bGQuZXF1YWwoJzAnLnJlcGVhdCg2NCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYWNjZXB0IGFtb3VudCBhcyBiaWdpbnQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCAxMDAwMDAwbik7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDc0LCAxMzgpLnNob3VsZC5lcXVhbChCaWdJbnQoRVhBQ1RfQU1PVU5UKS50b1N0cmluZygxNikucGFkU3RhcnQoNjQsICcwJykpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYWNjZXB0IGFtb3VudCBhcyBudW1iZXInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCAxMDAwMDAwKTtcbiAgICAgICAgY2FsbGRhdGEuc2xpY2UoNzQsIDEzOCkuc2hvdWxkLmVxdWFsKEJpZ0ludChFWEFDVF9BTU9VTlQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg2NCwgJzAnKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCB3cmFwcGVyIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgICgoKSA9PiBidWlsZEFwcHJvdmVDYWxsZGF0YSgnbm90LWFuLWFkZHJlc3MnLCBFWEFDVF9BTU9VTlQpKS5zaG91bGQudGhyb3coL2ludmFsaWQgd3JhcHBlciBhZGRyZXNzLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgYSBiYWQgRUlQLTU1IGNoZWNrc3VtJywgKCkgPT4ge1xuICAgICAgICAvLyBNaXhlZCBjYXNlIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGNvcnJlY3QgY2hlY2tzdW1cbiAgICAgICAgY29uc3QgYmFkQ2hlY2tzdW0gPSAnMHgyRGViYmUwNDg3ZWY5MjFkZjQ0NTdmOWUzNmVkMDViZTJkZjFhYzc1JztcbiAgICAgICAgKCgpID0+IGJ1aWxkQXBwcm92ZUNhbGxkYXRhKGJhZENoZWNrc3VtLCBFWEFDVF9BTU9VTlQpKS5zaG91bGQudGhyb3coL2ludmFsaWQgd3JhcHBlciBhZGRyZXNzLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBhY2NlcHQgYWxsLWxvd2VyY2FzZSBhZGRyZXNzZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLnRvTG93ZXJDYXNlKCksIEVYQUNUX0FNT1VOVCk7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoYXBwcm92ZU1ldGhvZElkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhIG5lZ2F0aXZlIGFtb3VudCcsICgpID0+IHtcbiAgICAgICAgKCgpID0+IGJ1aWxkQXBwcm92ZUNhbGxkYXRhKFdSQVBQRVJfQUREUkVTUywgLTEpKS5zaG91bGQudGhyb3coL2Ftb3VudCBtdXN0IGJlID49IDAvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhIG5vbi1udW1lcmljIGFtb3VudCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgICgoKSA9PiBidWlsZEFwcHJvdmVDYWxsZGF0YShXUkFQUEVSX0FERFJFU1MsICdhYmMnKSkuc2hvdWxkLnRocm93KC9pbnZhbGlkIGFtb3VudC8pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZGVzY3JpYmUoJ2J1aWxkV3JhcENhbGxkYXRhJywgKCkgPT4ge1xuICAgIGNvbnN0IFJFQ0lQSUVOVCA9ICcweDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnO1xuICAgIGNvbnN0IEVYQUNUX0FNT1VOVCA9ICcxMDAwMDAwJztcbiAgICBjb25zdCBSQVRFX09ORSA9ICcxJztcbiAgICBjb25zdCBSQVRFXzFFMTIgPSAnMTAwMDAwMDAwMDAwMCc7IC8vIGh0ZXRoOmN0ZXN0MVxuXG4gICAgZGVzY3JpYmUoJ291dHB1dCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgYSAweC1wcmVmaXhlZCBoZXggc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkV3JhcENhbGxkYXRhKFJFQ0lQSUVOVCwgRVhBQ1RfQU1PVU5ULCBSQVRFX09ORSk7XG4gICAgICAgIGNhbGxkYXRhLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgICBjYWxsZGF0YS5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGF2ZSBleGFjdCBsZW5ndGg6IDQtYnl0ZSBzZWxlY3RvciArIDIgw5cgMzItYnl0ZSBBQkkgd29yZHMgPSA2OCBieXRlcyAoMTM4IGNoYXJzKScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIEVYQUNUX0FNT1VOVCwgUkFURV9PTkUpO1xuICAgICAgICBjYWxsZGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDEzOCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdGFydCB3aXRoIHdyYXAgc2VsZWN0b3IgMHhiZjM3NmM3YScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIEVYQUNUX0FNT1VOVCwgUkFURV9PTkUpO1xuICAgICAgICBjYWxsZGF0YS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKHdyYXBNZXRob2RJZCk7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoJzB4YmYzNzZjN2EnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0FCSSBwYXJhbWV0ZXIgZW5jb2RpbmcnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGVuY29kZSByZWNpcGllbnQgaW4gdGhlIGZpcnN0IEFCSSB3b3JkJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkV3JhcENhbGxkYXRhKFJFQ0lQSUVOVCwgRVhBQ1RfQU1PVU5ULCBSQVRFX09ORSk7XG4gICAgICAgIGNvbnN0IHdvcmQxID0gY2FsbGRhdGEuc2xpY2UoMTAsIDc0KTtcbiAgICAgICAgd29yZDEuc2hvdWxkLmVxdWFsKFJFQ0lQSUVOVC5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLnBhZFN0YXJ0KDY0LCAnMCcpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGVuY29kZSBhbW91bnQgaW4gdGhlIHNlY29uZCBBQkkgd29yZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIEVYQUNUX0FNT1VOVCwgUkFURV9PTkUpO1xuICAgICAgICBjb25zdCB3b3JkMiA9IGNhbGxkYXRhLnNsaWNlKDc0LCAxMzgpO1xuICAgICAgICB3b3JkMi5zaG91bGQuZXF1YWwoQmlnSW50KEVYQUNUX0FNT1VOVCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDY0LCAnMCcpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgdGhyb3VnaCBkZWNvZGVXcmFwQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRXcmFwQ2FsbGRhdGEoUkVDSVBJRU5ULCBFWEFDVF9BTU9VTlQsIFJBVEVfT05FKTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVdyYXBDYWxsZGF0YShjYWxsZGF0YSk7XG4gICAgICAgIGRlY29kZWQudG8udG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwoUkVDSVBJRU5ULnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBkZWNvZGVkLmFtb3VudC5zaG91bGQuZXF1YWwoRVhBQ1RfQU1PVU5UKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3ZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhbiBpbnZhbGlkIHRvIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgICgoKSA9PiBidWlsZFdyYXBDYWxsZGF0YSgnbm90LWFuLWFkZHJlc3MnLCBFWEFDVF9BTU9VTlQsIFJBVEVfT05FKSkuc2hvdWxkLnRocm93KC9pbnZhbGlkIHRvIGFkZHJlc3MvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhIGJhZCBFSVAtNTUgY2hlY2tzdW0nLCAoKSA9PiB7XG4gICAgICAgIC8vIE1peGVkIGNhc2UgdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgY29ycmVjdCBjaGVja3N1bSAoc2FtZSBwYXR0ZXJuIGFzIGFwcHJvdmUgdGVzdHMpXG4gICAgICAgIGNvbnN0IGJhZENoZWNrc3VtID0gJzB4MkRlYmJlMDQ4N2VmOTIxZGY0NDU3ZjllMzZlZDA1YmUyZGYxYWM3NSc7XG4gICAgICAgICgoKSA9PiBidWlsZFdyYXBDYWxsZGF0YShiYWRDaGVja3N1bSwgRVhBQ1RfQU1PVU5ULCBSQVRFX09ORSkpLnNob3VsZC50aHJvdygvaW52YWxpZCB0byBhZGRyZXNzLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgYW1vdW50IDAnLCAoKSA9PiB7XG4gICAgICAgICgoKSA9PiBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIDAsIFJBVEVfT05FKSkuc2hvdWxkLnRocm93KC9hbW91bnQgbXVzdCBiZSA+IDAvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhIG5lZ2F0aXZlIGFtb3VudCcsICgpID0+IHtcbiAgICAgICAgKCgpID0+IGJ1aWxkV3JhcENhbGxkYXRhKFJFQ0lQSUVOVCwgLTEsIFJBVEVfT05FKSkuc2hvdWxkLnRocm93KC9hbW91bnQgbXVzdCBiZSA+IDAvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIGFtb3VudCDDlyByYXRlIGV4Y2VlZHMgdWludDY0JywgKCkgPT4ge1xuICAgICAgICAvLyBVSU5UNjRfTUFYIC8gMWUxMiArIDEgb3ZlcmZsb3dzIGZvciBjdGVzdDEtc3R5bGUgcmF0ZVxuICAgICAgICBjb25zdCB0b29MYXJnZSA9IChVSU5UNjRfTUFYIC8gQmlnSW50KFJBVEVfMUUxMikgKyAxbikudG9TdHJpbmcoKTtcbiAgICAgICAgKCgpID0+IGJ1aWxkV3JhcENhbGxkYXRhKFJFQ0lQSUVOVCwgdG9vTGFyZ2UsIFJBVEVfMUUxMikpLnNob3VsZC50aHJvdygvZXhjZWVkcyB1aW50NjQvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGFjY2VwdCBhbW91bnQgw5cgcmF0ZSB0aGF0IGZpdHMgdWludDY0IGZvciByYXRlIDFlMTInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9rID0gKFVJTlQ2NF9NQVggLyBCaWdJbnQoUkFURV8xRTEyKSkudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIG9rLCBSQVRFXzFFMTIpO1xuICAgICAgICBjYWxsZGF0YS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKHdyYXBNZXRob2RJZCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBlbmNvZGUgd2l0aG91dCByYXRlIHdoZW4gcmF0ZSBpcyBvbWl0dGVkIChkZXNlcmlhbGl6ZSBwYXRoKScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIEVYQUNUX0FNT1VOVCk7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwod3JhcE1ldGhvZElkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGRlc2NyaWJlKCdidWlsZERlbGVnYXRpb25DYWxsZGF0YScsICgpID0+IHtcbiAgICBkZXNjcmliZSgnb3V0cHV0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIDB4LXByZWZpeGVkIGhleCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKTtcbiAgICAgICAgY2FsbGRhdGEuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICAgIGNhbGxkYXRhLnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBoYXZlIGV4YWN0IGxlbmd0aDogNC1ieXRlIHNlbGVjdG9yICsgMyDDlyAzMi1ieXRlIEFCSSB3b3JkcyA9IDEwMCBieXRlcyAoMjAyIGNoYXJzKScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICBjYWxsZGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDIwMik7IC8vICcweCcgKyAyMDAgaGV4IGNoYXJzXG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdGFydCB3aXRoIGRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb24gc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKTtcbiAgICAgICAgY2FsbGRhdGEuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uTWV0aG9kSWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQUJJIHBhcmFtZXRlciBlbmNvZGluZyDigJQgcG9zaXRpb24gYW5kIHZhbHVlJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBlbmNvZGUgZGVsZWdhdGUgYWRkcmVzcyBhcyBmaXJzdCBBQkkgd29yZCAoYnl0ZXMgNOKAkzM1KScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICAvLyBGaXJzdCAzMi1ieXRlIHdvcmQgYWZ0ZXIgNC1ieXRlIHNlbGVjdG9yID0gaGV4IGNoYXJzIDEw4oCTNzRcbiAgICAgICAgY29uc3Qgd29yZDEgPSBjYWxsZGF0YS5zbGljZSgxMCwgNzQpO1xuICAgICAgICB3b3JkMS5zaG91bGQuZXF1YWwoREVMRUdBVEVfQUREUkVTUy5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLnBhZFN0YXJ0KDY0LCAnMCcpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGVuY29kZSB0b2tlbiBhZGRyZXNzIGFzIHNlY29uZCBBQkkgd29yZCAoYnl0ZXMgMzbigJM2NyknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKTtcbiAgICAgICAgY29uc3Qgd29yZDIgPSBjYWxsZGF0YS5zbGljZSg3NCwgMTM4KTtcbiAgICAgICAgd29yZDIuc2hvdWxkLmVxdWFsKFRPS0VOX0FERFJFU1Muc2xpY2UoMikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwgJzAnKSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBlbmNvZGUgZXhwaXJ5IHRpbWVzdGFtcCBhcyB0aGlyZCBBQkkgd29yZCAoYnl0ZXMgNjjigJM5OSknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKTtcbiAgICAgICAgY29uc3Qgd29yZDMgPSBjYWxsZGF0YS5zbGljZSgxMzgsIDIwMik7XG4gICAgICAgIGNvbnN0IGVuY29kZWRFeHBpcnkgPSBFWFBJUlkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDY0LCAnMCcpO1xuICAgICAgICB3b3JkMy5zaG91bGQuZXF1YWwoZW5jb2RlZEV4cGlyeSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByb3VuZC10cmlwIGRlY29kZSB0byBvcmlnaW5hbCBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IFtkZWxlZ2F0ZSwgdG9rZW4sIGV4cGlyeV0gPSBkZWNvZGVEZWxlZ2F0aW9uQ2FsbChjYWxsZGF0YSk7XG4gICAgICAgIGRlbGVnYXRlLnNob3VsZC5lcXVhbChERUxFR0FURV9BRERSRVNTLnNsaWNlKDIpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB0b2tlbi5zaG91bGQuZXF1YWwoVE9LRU5fQUREUkVTUy5zbGljZSgyKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgZXhwaXJ5LnNob3VsZC5lcXVhbChFWFBJUlkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncGFyYW1ldGVyIGlzb2xhdGlvbicsICgpID0+IHtcbiAgICAgIGl0KCdkaWZmZXJlbnQgZGVsZWdhdGUgYWRkcmVzc2VzIHNob3VsZCBwcm9kdWNlIGRpZmZlcmVudCBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgICAgY29uc3QgREVMRUdBVEVfMiA9ICcweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjInO1xuICAgICAgICBjb25zdCBjMSA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IGMyID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfMiwgVE9LRU5fQUREUkVTUywgRVhQSVJZKTtcbiAgICAgICAgYzEuc2hvdWxkLm5vdC5lcXVhbChjMik7XG4gICAgICAgIC8vIE9ubHkgZmlyc3Qgd29yZCBkaWZmZXJzXG4gICAgICAgIGMxLnNsaWNlKDEwLCA3NCkuc2hvdWxkLm5vdC5lcXVhbChjMi5zbGljZSgxMCwgNzQpKTtcbiAgICAgICAgYzEuc2xpY2UoNzQpLnNob3VsZC5lcXVhbChjMi5zbGljZSg3NCkpOyAvLyB0b2tlbiBhbmQgZXhwaXJ5IHVuY2hhbmdlZFxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkaWZmZXJlbnQgdG9rZW4gYWRkcmVzc2VzIHNob3VsZCBwcm9kdWNlIGRpZmZlcmVudCBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgICAgY29uc3QgYzEgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCBjMiA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMiwgRVhQSVJZKTtcbiAgICAgICAgYzEuc2hvdWxkLm5vdC5lcXVhbChjMik7XG4gICAgICAgIC8vIE9ubHkgc2Vjb25kIHdvcmQgZGlmZmVyc1xuICAgICAgICBjMS5zbGljZSgxMCwgNzQpLnNob3VsZC5lcXVhbChjMi5zbGljZSgxMCwgNzQpKTsgLy8gZGVsZWdhdGUgdW5jaGFuZ2VkXG4gICAgICAgIGMxLnNsaWNlKDc0LCAxMzgpLnNob3VsZC5ub3QuZXF1YWwoYzIuc2xpY2UoNzQsIDEzOCkpO1xuICAgICAgICBjMS5zbGljZSgxMzgpLnNob3VsZC5lcXVhbChjMi5zbGljZSgxMzgpKTsgLy8gZXhwaXJ5IHVuY2hhbmdlZFxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkaWZmZXJlbnQgZXhwaXJ5IHRpbWVzdGFtcHMgc2hvdWxkIHByb2R1Y2UgZGlmZmVyZW50IGNhbGxkYXRhJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjMSA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IGMyID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZICsgODY0MDApO1xuICAgICAgICBjMS5zaG91bGQubm90LmVxdWFsKGMyKTtcbiAgICAgICAgLy8gT25seSB0aGlyZCB3b3JkIGRpZmZlcnNcbiAgICAgICAgYzEuc2xpY2UoMTAsIDEzOCkuc2hvdWxkLmVxdWFsKGMyLnNsaWNlKDEwLCAxMzgpKTsgLy8gZGVsZWdhdGUgKyB0b2tlbiB1bmNoYW5nZWRcbiAgICAgICAgYzEuc2xpY2UoMTM4KS5zaG91bGQubm90LmVxdWFsKGMyLnNsaWNlKDEzOCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYWRkcmVzcyBjYXNlIGhhbmRsaW5nJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBub3JtYWxpc2UgY2hlY2tzdW1tZWQgKG1peGVkLWNhc2UpIGFkZHJlc3NlcyB0byBsb3dlcmNhc2UgaW4gZW5jb2RpbmcnLCAoKSA9PiB7XG4gICAgICAgIC8vIFRPS0VOX0FERFJFU1NfMyBpcyBFSVAtNTUgY2hlY2tzdW1tZWQ6IDB4QTBiODY5OTFjNjIxOGIzNmMxZDE5RDRhMmU5RWIwY0UzNjA2ZUI0OFxuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMywgRVhQSVJZKTtcbiAgICAgICAgY29uc3Qgd29yZDIgPSBjYWxsZGF0YS5zbGljZSg3NCwgMTM4KTtcbiAgICAgICAgd29yZDIuc2hvdWxkLmVxdWFsKFRPS0VOX0FERFJFU1NfMy5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLnBhZFN0YXJ0KDY0LCAnMCcpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGRlc2NyaWJlKCdidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YScsICgpID0+IHtcbiAgICBkZXNjcmliZSgnb3V0cHV0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIDB4LXByZWZpeGVkIGhleCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgICAgICBjYWxsZGF0YS5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgICAgY2FsbGRhdGEuc2hvdWxkLnN0YXJ0V2l0aCgnMHgnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHN0YXJ0IHdpdGggbXVsdGljYWxsIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTXSwgRVhQSVJZKTtcbiAgICAgICAgY2FsbGRhdGEuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChhY2xNdWx0aWNhbGxNZXRob2RJZCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdpbm5lciBjYWxsIGNvcnJlY3RuZXNzJywgKCkgPT4ge1xuICAgICAgLy8gU3RyYXRlZ3k6IGJ1aWxkIGV4cGVjdGVkIGlubmVyIGNhbGxzIGluZGVwZW5kZW50bHksIHRoZW4gdmVyaWZ5IHRoZXkgYXJlXG4gICAgICAvLyBlbWJlZGRlZCBpbiB0aGUgbXVsdGljYWxsIHBheWxvYWQuIFRoaXMgYXZvaWRzIGRlY29kaW5nIHRoZSBjb21wbGV4IGJ5dGVzW11cbiAgICAgIC8vIEFCSSBzdHJ1Y3R1cmUgYW5kIGRpcmVjdGx5IHZlcmlmaWVzIHdoYXQgbWF0dGVyczogdGhlIHJpZ2h0IGNhbGxzIGFyZSBwcmVzZW50LlxuXG4gICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gdGhlIGV4cGVjdGVkIGlubmVyIGRlbGVnYXRpb24gY2FsbCBmb3IgZWFjaCB0b2tlbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXIxID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKS5zbGljZSgyKTtcbiAgICAgICAgY29uc3QgaW5uZXIyID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTU18yLCBFWFBJUlkpLnNsaWNlKDIpO1xuICAgICAgICBjb25zdCBpbm5lcjMgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzMsIEVYUElSWSkuc2xpY2UoMik7XG5cbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShcbiAgICAgICAgICBERUxFR0FURV9BRERSRVNTLFxuICAgICAgICAgIFtUT0tFTl9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzIsIFRPS0VOX0FERFJFU1NfM10sXG4gICAgICAgICAgRVhQSVJZXG4gICAgICAgICk7XG5cbiAgICAgICAgY2FsbGRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoaW5uZXIxKTtcbiAgICAgICAgY2FsbGRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoaW5uZXIyKTtcbiAgICAgICAgY2FsbGRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoaW5uZXIzKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2luZ2xlLXRva2VuIG11bHRpY2FsbCBzaG91bGQgY29udGFpbiBpdHMgaW5uZXIgY2FsbCBidXQgbm90IG90aGVycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXIxID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKS5zbGljZSgyKTtcbiAgICAgICAgY29uc3QgaW5uZXIyID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTU18yLCBFWFBJUlkpLnNsaWNlKDIpO1xuXG4gICAgICAgIGNvbnN0IHNpbmdsZSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTXSwgRVhQSVJZKTtcblxuICAgICAgICBzaW5nbGUuc2hvdWxkLmNvbnRhaW5FcWwoaW5uZXIxKTtcbiAgICAgICAgc2luZ2xlLnNob3VsZC5ub3QuY29udGFpbkVxbChpbm5lcjIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdlYWNoIGlubmVyIGNhbGwgc2hvdWxkIHN0YXJ0IHdpdGggZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbiBzZWxlY3RvcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gW1RPS0VOX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMiwgVE9LRU5fQUREUkVTU18zXTtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCB0b2tlbnMsIEVYUElSWSk7XG5cbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgICAgICBjb25zdCBleHBlY3RlZElubmVyID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgdG9rZW4sIEVYUElSWSkuc2xpY2UoMik7XG4gICAgICAgICAgLy8gRWFjaCBpbm5lciBjYWxsIHN0YXJ0cyB3aXRoIGRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb24gc2VsZWN0b3JcbiAgICAgICAgICBleHBlY3RlZElubmVyLnNob3VsZC5zdGFydFdpdGgoZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbk1ldGhvZElkLnNsaWNlKDIpKTtcbiAgICAgICAgICBjYWxsZGF0YS5zaG91bGQuY29udGFpbkVxbChleHBlY3RlZElubmVyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkaWZmZXJlbnQgZXhwaXJ5IHRpbWVzdGFtcHMgY2hhbmdlIGFsbCBpbm5lciBjYWxscycsICgpID0+IHtcbiAgICAgICAgY29uc3QgYzEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTUywgVE9LRU5fQUREUkVTU18yXSwgRVhQSVJZKTtcbiAgICAgICAgY29uc3QgYzIgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTUywgVE9LRU5fQUREUkVTU18yXSwgRVhQSVJZICsgODY0MDApO1xuXG4gICAgICAgIC8vIElubmVyIGNhbGxzIHdpdGggb2xkIGV4cGlyeSBzaG91bGQgTk9UIGFwcGVhciBpbiB0aGUgbmV3IG11bHRpY2FsbFxuICAgICAgICBjb25zdCBpbm5lcjFPbGQgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpLnNsaWNlKDIpO1xuICAgICAgICBjMi5zaG91bGQubm90LmNvbnRhaW5FcWwoaW5uZXIxT2xkKTtcblxuICAgICAgICAvLyBBbmQgdmljZSB2ZXJzYVxuICAgICAgICBjb25zdCBpbm5lcjFOZXcgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkgKyA4NjQwMCkuc2xpY2UoMik7XG4gICAgICAgIGMxLnNob3VsZC5ub3QuY29udGFpbkVxbChpbm5lcjFOZXcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSBsb25nZXIgY2FsbGRhdGEgZm9yIG1vcmUgdG9rZW5zJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBzaW5nbGUgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IGRvdWJsZSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzJdLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCB0cmlwbGUgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShcbiAgICAgICAgICBERUxFR0FURV9BRERSRVNTLFxuICAgICAgICAgIFtUT0tFTl9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzIsIFRPS0VOX0FERFJFU1NfM10sXG4gICAgICAgICAgRVhQSVJZXG4gICAgICAgICk7XG4gICAgICAgIGRvdWJsZS5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKHNpbmdsZS5sZW5ndGgpO1xuICAgICAgICB0cmlwbGUubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbihkb3VibGUubGVuZ3RoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGlmZmVyZW50IHRva2VuIG9yZGVyaW5ncyBzaG91bGQgcHJvZHVjZSBkaWZmZXJlbnQgY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGMxID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMl0sIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IGMyID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NfMiwgVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgICAgIGMxLnNob3VsZC5ub3QuZXF1YWwoYzIpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXJyb3IgaGFuZGxpbmcnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gZ2l2ZW4gYW4gZW1wdHkgdG9rZW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW10sIEVYUElSWSksXG4gICAgICAgICAgL3Rva2VuQ29udHJhY3RBZGRyZXNzZXMgbXVzdCBub3QgYmUgZW1wdHkvXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnd3JhcEluQ2FsbEZyb21QYXJlbnQnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ291dHB1dCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgYSAweC1wcmVmaXhlZCBoZXggc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lciA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwSW5DYWxsRnJvbVBhcmVudChBQ0xfQUREUkVTUywgaW5uZXIpO1xuICAgICAgICB3cmFwcGVkLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgICB3cmFwcGVkLnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdGFydCB3aXRoIGNhbGxGcm9tUGFyZW50IHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lciA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwSW5DYWxsRnJvbVBhcmVudChBQ0xfQUREUkVTUywgaW5uZXIpO1xuICAgICAgICB3cmFwcGVkLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoY2FsbEZyb21QYXJlbnRNZXRob2RJZCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwcm9kdWNlIGxvbmdlciBjYWxsZGF0YSB0aGFuIHRoZSBpbm5lciBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCB3cmFwcGVkID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoRk9SV0FSREVSX0FERFJFU1MsIGlubmVyKTtcbiAgICAgICAgd3JhcHBlZC5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKGlubmVyLmxlbmd0aCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdBQkkgcGFyYW1ldGVyIGRlY29kaW5nJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBkZWNvZGUgdGFyZ2V0IGFkZHJlc3MgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lciA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwSW5DYWxsRnJvbVBhcmVudChBQ0xfQUREUkVTUywgaW5uZXIpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmZyb20od3JhcHBlZC5zbGljZSgxMCksICdoZXgnKTtcbiAgICAgICAgY29uc3QgW3RhcmdldF0gPSBFdGhlcmV1bUFiaS5yYXdEZWNvZGUoWydhZGRyZXNzJywgJ3VpbnQyNTYnLCAnYnl0ZXMnXSwgcGF5bG9hZCk7XG4gICAgICAgICh0YXJnZXQgYXMgQnVmZmVyKS50b1N0cmluZygnaGV4Jykuc2hvdWxkLmVxdWFsKEFDTF9BRERSRVNTLnNsaWNlKDIpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZW5jb2RlIHZhbHVlIGFzIDAgKG5vIEVUSCB0cmFuc2ZlciknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlubmVyID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKTtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IHdyYXBJbkNhbGxGcm9tUGFyZW50KEFDTF9BRERSRVNTLCBpbm5lcik7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuZnJvbSh3cmFwcGVkLnNsaWNlKDEwKSwgJ2hleCcpO1xuICAgICAgICBjb25zdCBbLCB2YWx1ZV0gPSBFdGhlcmV1bUFiaS5yYXdEZWNvZGUoWydhZGRyZXNzJywgJ3VpbnQyNTYnLCAnYnl0ZXMnXSwgcGF5bG9hZCk7XG4gICAgICAgIHZhbHVlLnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSBpbm5lciBjYWxsZGF0YSBleGFjdGx5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lciA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwSW5DYWxsRnJvbVBhcmVudChBQ0xfQUREUkVTUywgaW5uZXIpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmZyb20od3JhcHBlZC5zbGljZSgxMCksICdoZXgnKTtcbiAgICAgICAgY29uc3QgWywgLCBkYXRhXSA9IEV0aGVyZXVtQWJpLnJhd0RlY29kZShbJ2FkZHJlc3MnLCAndWludDI1NicsICdieXRlcyddLCBwYXlsb2FkKTtcbiAgICAgICAgKCcweCcgKyAoZGF0YSBhcyBCdWZmZXIpLnRvU3RyaW5nKCdoZXgnKSkuc2hvdWxkLmVxdWFsKGlubmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHByZXNlcnZlIG11bHRpY2FsbCBpbm5lciBjYWxsZGF0YSBleGFjdGx5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lciA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzJdLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCB3cmFwcGVkID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoQUNMX0FERFJFU1MsIGlubmVyKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHdyYXBwZWQuc2xpY2UoMTApLCAnaGV4Jyk7XG4gICAgICAgIGNvbnN0IFssICwgZGF0YV0gPSBFdGhlcmV1bUFiaS5yYXdEZWNvZGUoWydhZGRyZXNzJywgJ3VpbnQyNTYnLCAnYnl0ZXMnXSwgcGF5bG9hZCk7XG4gICAgICAgICgnMHgnICsgKGRhdGEgYXMgQnVmZmVyKS50b1N0cmluZygnaGV4JykpLnNob3VsZC5lcXVhbChpbm5lcik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd0YXJnZXQgYWRkcmVzcyBpc29sYXRpb24nLCAoKSA9PiB7XG4gICAgICBpdCgnZGlmZmVyZW50IHRhcmdldCBhZGRyZXNzZXMgc2hvdWxkIHByb2R1Y2UgZGlmZmVyZW50IGNhbGxkYXRhJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lciA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IHcxID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoQUNMX0FERFJFU1MsIGlubmVyKTtcbiAgICAgICAgY29uc3QgdzIgPSB3cmFwSW5DYWxsRnJvbVBhcmVudChGT1JXQVJERVJfQUREUkVTUywgaW5uZXIpO1xuICAgICAgICB3MS5zaG91bGQubm90LmVxdWFsKHcyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGRlc2NyaWJlKCdidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyQnlIYW5kbGVDYWxsZGF0YScsICgpID0+IHtcbiAgICBjb25zdCBIQU5ETEUgPSAnMHgnICsgJ2FiJy5yZXBlYXQoMzIpOyAvLyAzMi1ieXRlIG1vY2sgaGFuZGxlXG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIDB4LXByZWZpeGVkIGhleCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyQnlIYW5kbGVDYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBIQU5ETEUpO1xuICAgICAgcmVzdWx0LnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgcmVzdWx0LnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN0YXJ0IHdpdGggdGhlIGNvbmZpZGVudGlhbFRyYW5zZmVyTm9Qcm9vZiBzZWxlY3RvciAoMHg1YmViZWQ3ZSknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyQnlIYW5kbGVDYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBIQU5ETEUpO1xuICAgICAgcmVzdWx0LnNob3VsZC5zdGFydFdpdGgoY29uZmlkZW50aWFsVHJhbnNmZXJOb1Byb29mTWV0aG9kSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgdGhlIHJlY2lwaWVudCBhZGRyZXNzIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJCeUhhbmRsZUNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIEhBTkRMRSk7XG4gICAgICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmZyb20ocmVzdWx0LnNsaWNlKDEwKSwgJ2hleCcpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IEV0aGVyZXVtQWJpLnJhd0RlY29kZShbJ2FkZHJlc3MnLCAnYnl0ZXMzMiddLCBwYXlsb2FkKTtcbiAgICAgICgnMHgnICsgKGRlY29kZWRbMF0gYXMgQnVmZmVyKS50b1N0cmluZygnaGV4JykpLnRvTG93ZXJDYXNlKCkuc2hvdWxkLmVxdWFsKERFTEVHQVRFX0FERFJFU1MudG9Mb3dlckNhc2UoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVuY29kZSB0aGUgZW5jcnlwdGVkIGhhbmRsZSBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyQnlIYW5kbGVDYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBIQU5ETEUpO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHJlc3VsdC5zbGljZSgxMCksICdoZXgnKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBFdGhlcmV1bUFiaS5yYXdEZWNvZGUoWydhZGRyZXNzJywgJ2J5dGVzMzInXSwgcGF5bG9hZCk7XG4gICAgICAoJzB4JyArIChkZWNvZGVkWzFdIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpKS5zaG91bGQuZXF1YWwoSEFORExFKTtcbiAgICB9KTtcblxuICAgIGl0KCdkaWZmZXJlbnQgaGFuZGxlcyBzaG91bGQgcHJvZHVjZSBkaWZmZXJlbnQgY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICBjb25zdCBoMSA9ICcweCcgKyAnMDEnLnJlcGVhdCgzMik7XG4gICAgICBjb25zdCBoMiA9ICcweCcgKyAnMDInLnJlcGVhdCgzMik7XG4gICAgICBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyQnlIYW5kbGVDYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBoMSkuc2hvdWxkLm5vdC5lcXVhbChcbiAgICAgICAgYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlckJ5SGFuZGxlQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgaDIpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RpZmZlcmVudCByZWNpcGllbnQgYWRkcmVzc2VzIHNob3VsZCBwcm9kdWNlIGRpZmZlcmVudCBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgIGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJCeUhhbmRsZUNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIEhBTkRMRSkuc2hvdWxkLm5vdC5lcXVhbChcbiAgICAgICAgYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlckJ5SGFuZGxlQ2FsbGRhdGEoVE9LRU5fQUREUkVTUywgSEFORExFKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnYnVpbGRGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbkNhbGxkYXRhJywgKCkgPT4ge1xuICAgIGNvbnN0IFBBUkVOVF9BRERSRVNTID0gJzB4MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMic7XG4gICAgY29uc3QgSEFORExFID0gJzB4JyArICdjZCcucmVwZWF0KDMyKTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgMHgtcHJlZml4ZWQgaGV4IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShUT0tFTl9BRERSRVNTLCBQQVJFTlRfQUREUkVTUywgSEFORExFKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdGFydCB3aXRoIHRoZSBjYWxsRnJvbVBhcmVudCBzZWxlY3RvcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShUT0tFTl9BRERSRVNTLCBQQVJFTlRfQUREUkVTUywgSEFORExFKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuc3RhcnRXaXRoKGNhbGxGcm9tUGFyZW50TWV0aG9kSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lubmVyIGNhbGxkYXRhIHNob3VsZCBzdGFydCB3aXRoIGNvbmZpZGVudGlhbFRyYW5zZmVyTm9Qcm9vZiBzZWxlY3RvcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShUT0tFTl9BRERSRVNTLCBQQVJFTlRfQUREUkVTUywgSEFORExFKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuZnJvbShyZXN1bHQuc2xpY2UoMTApLCAnaGV4Jyk7XG4gICAgICBjb25zdCBkZWNvZGVkID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsnYWRkcmVzcycsICd1aW50MjU2JywgJ2J5dGVzJ10sIHBheWxvYWQpO1xuICAgICAgY29uc3QgaW5uZXJDYWxsZGF0YSA9ICcweCcgKyAoZGVjb2RlZFsyXSBhcyBCdWZmZXIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGlubmVyQ2FsbGRhdGEuc2hvdWxkLnN0YXJ0V2l0aChjb25maWRlbnRpYWxUcmFuc2Zlck5vUHJvb2ZNZXRob2RJZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnb3V0ZXIgdGFyZ2V0IGFkZHJlc3Mgc2hvdWxkIGVxdWFsIHRoZSB0b2tlbiBjb250cmFjdCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbkNhbGxkYXRhKFRPS0VOX0FERFJFU1MsIFBBUkVOVF9BRERSRVNTLCBIQU5ETEUpO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHJlc3VsdC5zbGljZSgxMCksICdoZXgnKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBFdGhlcmV1bUFiaS5yYXdEZWNvZGUoWydhZGRyZXNzJywgJ3VpbnQyNTYnLCAnYnl0ZXMnXSwgcGF5bG9hZCk7XG4gICAgICAoJzB4JyArIChkZWNvZGVkWzBdIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpKS50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChUT0tFTl9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lubmVyIHJlY2lwaWVudCBzaG91bGQgZXF1YWwgdGhlIHBhcmVudCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbkNhbGxkYXRhKFRPS0VOX0FERFJFU1MsIFBBUkVOVF9BRERSRVNTLCBIQU5ETEUpO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHJlc3VsdC5zbGljZSgxMCksICdoZXgnKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBFdGhlcmV1bUFiaS5yYXdEZWNvZGUoWydhZGRyZXNzJywgJ3VpbnQyNTYnLCAnYnl0ZXMnXSwgcGF5bG9hZCk7XG4gICAgICBjb25zdCBpbm5lckNhbGxkYXRhID0gJzB4JyArIChkZWNvZGVkWzJdIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgaW5uZXJQYXlsb2FkID0gQnVmZmVyLmZyb20oaW5uZXJDYWxsZGF0YS5zbGljZSgxMCksICdoZXgnKTtcbiAgICAgIGNvbnN0IGlubmVyRGVjb2RlZCA9IEV0aGVyZXVtQWJpLnJhd0RlY29kZShbJ2FkZHJlc3MnLCAnYnl0ZXMzMiddLCBpbm5lclBheWxvYWQpO1xuICAgICAgKCcweCcgKyAoaW5uZXJEZWNvZGVkWzBdIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpKS50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChQQVJFTlRfQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdkaWZmZXJlbnQgdG9rZW4gYWRkcmVzc2VzIHNob3VsZCBwcm9kdWNlIGRpZmZlcmVudCBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgIGJ1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShUT0tFTl9BRERSRVNTLCBQQVJFTlRfQUREUkVTUywgSEFORExFKS5zaG91bGQubm90LmVxdWFsKFxuICAgICAgICBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoVE9LRU5fQUREUkVTU18yLCBQQVJFTlRfQUREUkVTUywgSEFORExFKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnZGVjb2RlRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YScsICgpID0+IHtcbiAgICBjb25zdCBQQVJFTlRfQUREUkVTUyA9ICcweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjInO1xuICAgIGNvbnN0IEhBTkRMRSA9ICcweCcgKyAnZWYnLnJlcGVhdCgzMik7XG5cbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgZW5jb2RlIGFuZCBkZWNvZGUgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgY29uc3QgZW5jb2RlZCA9IGJ1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShUT0tFTl9BRERSRVNTLCBQQVJFTlRfQUREUkVTUywgSEFORExFKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbkNhbGxkYXRhKGVuY29kZWQpO1xuICAgICAgZGVjb2RlZC50b2tlbkNvbnRyYWN0QWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChUT0tFTl9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgZGVjb2RlZC5wYXJlbnRBZGRyZXNzLnRvTG93ZXJDYXNlKCkuc2hvdWxkLmVxdWFsKFBBUkVOVF9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgZGVjb2RlZC5lbmNyeXB0ZWRIYW5kbGUuc2hvdWxkLmVxdWFsKEhBTkRMRSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBjYWxsZGF0YSB3aXRoIHdyb25nIG91dGVyIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgY29uc3QgYmFkID0gJzB4ZGVhZGJlZWYnICsgJzAwJy5yZXBlYXQoNjQpO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBkZWNvZGVGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbkNhbGxkYXRhKGJhZCksIC9JbnZhbGlkIEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuIGNhbGxkYXRhLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBjYWxsZGF0YSB3aXRoIGNvcnJlY3Qgb3V0ZXIgYnV0IHdyb25nIGlubmVyIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgLy8gV3JhcCBkZWxlZ2F0aW9uIGNhbGxkYXRhIGluIGNhbGxGcm9tUGFyZW50IOKAlCBpbm5lciBzdGFydHMgd2l0aCAweDA0ZjYxYTk1LCBub3QgMHg1YmViZWQ3ZVxuICAgICAgY29uc3QgaW5uZXJDYWxsZGF0YSA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICBjb25zdCB3cmFwcGVkID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoVE9LRU5fQUREUkVTUywgaW5uZXJDYWxsZGF0YSk7XG4gICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAoKSA9PiBkZWNvZGVGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbkNhbGxkYXRhKHdyYXBwZWQpLFxuICAgICAgICAvSW52YWxpZCBGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbiBpbm5lciBjYWxsZGF0YS9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGVjb2RlZCB0b2tlbkNvbnRyYWN0QWRkcmVzcyBzaG91bGQgYmUgY2hlY2tzdW1tZWQgb3IgbG93ZXJjYXNlIGNvbnNpc3RlbnRseScsICgpID0+IHtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoVE9LRU5fQUREUkVTUywgUEFSRU5UX0FERFJFU1MsIEhBTkRMRSk7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShlbmNvZGVkKTtcbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLnRva2VuQ29udHJhY3RBZGRyZXNzKTtcbiAgICAgIGRlY29kZWQudG9rZW5Db250cmFjdEFkZHJlc3Muc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
588
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemFtYVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3phbWFVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1QixvRUFBeUM7QUFDekMsdURBc0JpQztBQUNqQyx5REFBK0U7QUFFL0UsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7SUFDMUIsTUFBTSxXQUFXLEdBQUcsNENBQTRDLENBQUM7SUFDakUsTUFBTSxnQkFBZ0IsR0FBRyw0Q0FBNEMsQ0FBQztJQUN0RSxNQUFNLGFBQWEsR0FBRyw0Q0FBNEMsQ0FBQztJQUNuRSxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSxNQUFNLGlCQUFpQixHQUFHLDRDQUE0QyxDQUFDO0lBQ3ZFLCtEQUErRDtJQUMvRCxNQUFNLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBRTNELGtEQUFrRDtJQUNsRCxTQUFTLG9CQUFvQixDQUFDLFFBQWdCO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxNQUFNLE9BQU8sR0FBRyx3QkFBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakYsT0FBTyxDQUFFLE9BQU8sQ0FBQyxDQUFDLENBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUcsT0FBTyxDQUFDLENBQUMsQ0FBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENB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QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxvREFBd0MsRUFBQyxHQUFHLENBQUMsRUFBRSw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ3BILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVFQUF1RSxFQUFFLEdBQUcsRUFBRTtZQUMvRSw0RkFBNEY7WUFDNUYsTUFBTSxhQUFhLEdBQUcsSUFBQSxtQ0FBdUIsRUFBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDdkYsTUFBTSxPQUFPLEdBQUcsSUFBQSxnQ0FBb0IsRUFBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDbkUsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFLENBQUMsSUFBQSxvREFBd0MsRUFBQyxPQUFPLENBQUMsRUFDdkQsbURBQW1ELENBQ3BELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4RUFBOEUsRUFBRSxHQUFHLEVBQUU7WUFDdEYsTUFBTSxPQUFPLEdBQUcsSUFBQSxtREFBdUMsRUFBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9GLE1BQU0sT0FBTyxHQUFHLElBQUEsb0RBQXdDLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDM0MsT0FBTyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCBFdGhlcmV1bUFiaSBmcm9tICdldGhlcmV1bWpzLWFiaSc7XG5pbXBvcnQge1xuICBidWlsZEFwcHJvdmVDYWxsZGF0YSxcbiAgYnVpbGRXcmFwQ2FsbGRhdGEsXG4gIGRlY29kZVdyYXBDYWxsZGF0YSxcbiAgYnVpbGRVbndyYXBDYWxsZGF0YSxcbiAgZGVjb2RlVW53cmFwQ2FsbGRhdGEsXG4gIGJ1aWxkRmluYWxpemVVbndyYXBDYWxsZGF0YSxcbiAgZGVjb2RlRmluYWxpemVVbndyYXBDYWxsZGF0YSxcbiAgYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEsXG4gIGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhLFxuICBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyQnlIYW5kbGVDYWxsZGF0YSxcbiAgYnVpbGRGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbkNhbGxkYXRhLFxuICBkZWNvZGVGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbkNhbGxkYXRhLFxuICB3cmFwSW5DYWxsRnJvbVBhcmVudCxcbiAgYXBwcm92ZU1ldGhvZElkLFxuICB3cmFwTWV0aG9kSWQsXG4gIFVJTlQ2NF9NQVgsXG4gIHVud3JhcE1ldGhvZElkLFxuICBmaW5hbGl6ZVVud3JhcE1ldGhvZElkLFxuICBkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uTWV0aG9kSWQsXG4gIGFjbE11bHRpY2FsbE1ldGhvZElkLFxuICBjYWxsRnJvbVBhcmVudE1ldGhvZElkLFxufSBmcm9tICcuLi8uLi9zcmMvbGliL3phbWFVdGlscyc7XG5pbXBvcnQgeyBjb25maWRlbnRpYWxUcmFuc2Zlck5vUHJvb2ZNZXRob2RJZCB9IGZyb20gJy4uLy4uL3NyYy9saWIvd2FsbGV0VXRpbCc7XG5cbmRlc2NyaWJlKCdaYW1hIFV0aWxzJywgKCkgPT4ge1xuICBjb25zdCBBQ0xfQUREUkVTUyA9ICcweGYwRmZkYzkzYjdFMTg2YkMyZjhDQjNkQUE3NUQ4NmQxOTMwQTQzM0QnO1xuICBjb25zdCBERUxFR0FURV9BRERSRVNTID0gJzB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc7XG4gIGNvbnN0IFRPS0VOX0FERFJFU1MgPSAnMHg5NDE2NzEyOTE3MkEzNWFiMDkzQjQ0YjhiOTYyMTNERGJjM2NEMzg3JztcbiAgY29uc3QgVE9LRU5fQUREUkVTU18yID0gJzB4NEU3QjA2RDc4OTY1NTk0ZUI1RUY1NDE0YzM1N2NhMjFFMTU1NDQ5MSc7XG4gIGNvbnN0IFRPS0VOX0FERFJFU1NfMyA9ICcweEEwYjg2OTkxYzYyMThiMzZjMWQxOUQ0YTJlOUViMGNFMzYwNmVCNDgnO1xuICBjb25zdCBGT1JXQVJERVJfQUREUkVTUyA9ICcweERlQURiZWVmZEVBZGJlZWZkRWFkYkVFRmRlYWRiZUVGZEVhRGJlZUYnO1xuICAvLyBIb29kaSBodGV0aDpjdXNkdCB3cmFwcGVyIChzcGVuZGVyIGZvciBleGFjdC1hbW91bnQgYXBwcm92ZSlcbiAgY29uc3QgV1JBUFBFUl9BRERSRVNTID0gJzB4MmRlYmJlMDQ4N2VmOTIxZGY0NDU3ZjllMzZlZDA1YmUyZGYxYWM3NSc7XG4gIGNvbnN0IEVYUElSWSA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApICsgMzY1ICogODY0MDA7XG5cbiAgLy8gSGVscGVyOiBkZWNvZGUgYSBkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uIGNhbGxcbiAgZnVuY3Rpb24gZGVjb2RlRGVsZWdhdGlvbkNhbGwoY2FsbGRhdGE6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZywgbnVtYmVyXSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKGNhbGxkYXRhLnNsaWNlKDEwKSwgJ2hleCcpO1xuICAgIGNvbnN0IGRlY29kZWQgPSBFdGhlcmV1bUFiaS5yYXdEZWNvZGUoWydhZGRyZXNzJywgJ2FkZHJlc3MnLCAndWludDY0J10sIHBheWxvYWQpO1xuICAgIHJldHVybiBbKGRlY29kZWRbMF0gYXMgQnVmZmVyKS50b1N0cmluZygnaGV4JyksIChkZWNvZGVkWzFdIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpLCBOdW1iZXIoZGVjb2RlZFsyXSldO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnTWV0aG9kIElEcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGhhdmUgY29ycmVjdCBzZWxlY3RvciBmb3IgZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbihhZGRyZXNzLGFkZHJlc3MsdWludDY0KScsICgpID0+IHtcbiAgICAgIGRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb25NZXRob2RJZC5zaG91bGQuZXF1YWwoJzB4MDRmNjFhOTUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBjb3JyZWN0IHNlbGVjdG9yIGZvciBtdWx0aWNhbGwoYnl0ZXNbXSknLCAoKSA9PiB7XG4gICAgICBhY2xNdWx0aWNhbGxNZXRob2RJZC5zaG91bGQuZXF1YWwoJzB4YWM5NjUwZDgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBjb3JyZWN0IHNlbGVjdG9yIGZvciBjYWxsRnJvbVBhcmVudChhZGRyZXNzLHVpbnQyNTYsYnl0ZXMpJywgKCkgPT4ge1xuICAgICAgY2FsbEZyb21QYXJlbnRNZXRob2RJZC5zaG91bGQuZXF1YWwoJzB4NzdlNjBiMzUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBjb3JyZWN0IHNlbGVjdG9yIGZvciBhcHByb3ZlKGFkZHJlc3MsdWludDI1NiknLCAoKSA9PiB7XG4gICAgICBhcHByb3ZlTWV0aG9kSWQuc2hvdWxkLmVxdWFsKCcweDA5NWVhN2IzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgY29ycmVjdCBzZWxlY3RvciBmb3Igd3JhcChhZGRyZXNzLHVpbnQyNTYpJywgKCkgPT4ge1xuICAgICAgd3JhcE1ldGhvZElkLnNob3VsZC5lcXVhbCgnMHhiZjM3NmM3YScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3Qgc2VsZWN0b3IgZm9yIHVud3JhcChhZGRyZXNzLGFkZHJlc3MsYnl0ZXMzMixieXRlcyknLCAoKSA9PiB7XG4gICAgICB1bndyYXBNZXRob2RJZC5zaG91bGQuZXF1YWwoJzB4NWJmNGVmMDYnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBjb3JyZWN0IHNlbGVjdG9yIGZvciBmaW5hbGl6ZVVud3JhcChieXRlczMyLHVpbnQ2NCxieXRlcyknLCAoKSA9PiB7XG4gICAgICBmaW5hbGl6ZVVud3JhcE1ldGhvZElkLnNob3VsZC5lcXVhbCgnMHg1YmI2N2EwNScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21ldGhvZCBJRHMgc2hvdWxkIGFsbCBiZSBkaXN0aW5jdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQoW1xuICAgICAgICBkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uTWV0aG9kSWQsXG4gICAgICAgIGFjbE11bHRpY2FsbE1ldGhvZElkLFxuICAgICAgICBjYWxsRnJvbVBhcmVudE1ldGhvZElkLFxuICAgICAgICBhcHByb3ZlTWV0aG9kSWQsXG4gICAgICAgIHdyYXBNZXRob2RJZCxcbiAgICAgICAgdW53cmFwTWV0aG9kSWQsXG4gICAgICAgIGZpbmFsaXplVW53cmFwTWV0aG9kSWQsXG4gICAgICBdKTtcbiAgICAgIGlkcy5zaXplLnNob3VsZC5lcXVhbCg3KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnYnVpbGRBcHByb3ZlQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgY29uc3QgRVhBQ1RfQU1PVU5UID0gJzEwMDAwMDAnOyAvLyAxIFVTRFQgKDYgZGVjaW1hbHMpXG5cbiAgICBkZXNjcmliZSgnb3V0cHV0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIDB4LXByZWZpeGVkIGhleCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCBFWEFDVF9BTU9VTlQpO1xuICAgICAgICBjYWxsZGF0YS5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgICAgY2FsbGRhdGEuc2hvdWxkLnN0YXJ0V2l0aCgnMHgnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGhhdmUgZXhhY3QgbGVuZ3RoOiA0LWJ5dGUgc2VsZWN0b3IgKyAyIMOXIDMyLWJ5dGUgQUJJIHdvcmRzID0gNjggYnl0ZXMgKDEzOCBjaGFycyknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCBFWEFDVF9BTU9VTlQpO1xuICAgICAgICBjYWxsZGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDEzOCk7IC8vICcweCcgKyAxMzYgaGV4IGNoYXJzXG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdGFydCB3aXRoIGFwcHJvdmUgc2VsZWN0b3IgMHgwOTVlYTdiMycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZEFwcHJvdmVDYWxsZGF0YShXUkFQUEVSX0FERFJFU1MsIEVYQUNUX0FNT1VOVCk7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoYXBwcm92ZU1ldGhvZElkKTtcbiAgICAgICAgY2FsbGRhdGEuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbCgnMHgwOTVlYTdiMycpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQUJJIHBhcmFtZXRlciBlbmNvZGluZycsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgZW5jb2RlIHdyYXBwZXIgYXMgc3BlbmRlciBpbiB0aGUgZmlyc3QgQUJJIHdvcmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCBFWEFDVF9BTU9VTlQpO1xuICAgICAgICBjb25zdCB3b3JkMSA9IGNhbGxkYXRhLnNsaWNlKDEwLCA3NCk7XG4gICAgICAgIHdvcmQxLnNob3VsZC5lcXVhbChXUkFQUEVSX0FERFJFU1Muc2xpY2UoMikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwgJzAnKSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBlbmNvZGUgZXhhY3QgYW1vdW50IGluIHRoZSBzZWNvbmQgQUJJIHdvcmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCBFWEFDVF9BTU9VTlQpO1xuICAgICAgICBjb25zdCB3b3JkMiA9IGNhbGxkYXRhLnNsaWNlKDc0LCAxMzgpO1xuICAgICAgICB3b3JkMi5zaG91bGQuZXF1YWwoQmlnSW50KEVYQUNUX0FNT1VOVCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDY0LCAnMCcpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGVuY29kZSBhcHByb3ZlKDApIHJlc2V0IHdoZW4gYW1vdW50IGlzIDAnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCAwKTtcbiAgICAgICAgY2FsbGRhdGEuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbChhcHByb3ZlTWV0aG9kSWQpO1xuICAgICAgICBjYWxsZGF0YS5zbGljZSg3NCwgMTM4KS5zaG91bGQuZXF1YWwoJzAnLnJlcGVhdCg2NCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYWNjZXB0IGFtb3VudCBhcyBiaWdpbnQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCAxMDAwMDAwbik7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDc0LCAxMzgpLnNob3VsZC5lcXVhbChCaWdJbnQoRVhBQ1RfQU1PVU5UKS50b1N0cmluZygxNikucGFkU3RhcnQoNjQsICcwJykpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgYWNjZXB0IGFtb3VudCBhcyBudW1iZXInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLCAxMDAwMDAwKTtcbiAgICAgICAgY2FsbGRhdGEuc2xpY2UoNzQsIDEzOCkuc2hvdWxkLmVxdWFsKEJpZ0ludChFWEFDVF9BTU9VTlQpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg2NCwgJzAnKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCB3cmFwcGVyIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgICgoKSA9PiBidWlsZEFwcHJvdmVDYWxsZGF0YSgnbm90LWFuLWFkZHJlc3MnLCBFWEFDVF9BTU9VTlQpKS5zaG91bGQudGhyb3coL2ludmFsaWQgd3JhcHBlciBhZGRyZXNzLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgYSBiYWQgRUlQLTU1IGNoZWNrc3VtJywgKCkgPT4ge1xuICAgICAgICAvLyBNaXhlZCBjYXNlIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGNvcnJlY3QgY2hlY2tzdW1cbiAgICAgICAgY29uc3QgYmFkQ2hlY2tzdW0gPSAnMHgyRGViYmUwNDg3ZWY5MjFkZjQ0NTdmOWUzNmVkMDViZTJkZjFhYzc1JztcbiAgICAgICAgKCgpID0+IGJ1aWxkQXBwcm92ZUNhbGxkYXRhKGJhZENoZWNrc3VtLCBFWEFDVF9BTU9VTlQpKS5zaG91bGQudGhyb3coL2ludmFsaWQgd3JhcHBlciBhZGRyZXNzLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBhY2NlcHQgYWxsLWxvd2VyY2FzZSBhZGRyZXNzZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRBcHByb3ZlQ2FsbGRhdGEoV1JBUFBFUl9BRERSRVNTLnRvTG93ZXJDYXNlKCksIEVYQUNUX0FNT1VOVCk7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoYXBwcm92ZU1ldGhvZElkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhIG5lZ2F0aXZlIGFtb3VudCcsICgpID0+IHtcbiAgICAgICAgKCgpID0+IGJ1aWxkQXBwcm92ZUNhbGxkYXRhKFdSQVBQRVJfQUREUkVTUywgLTEpKS5zaG91bGQudGhyb3coL2Ftb3VudCBtdXN0IGJlID49IDAvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhIG5vbi1udW1lcmljIGFtb3VudCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgICgoKSA9PiBidWlsZEFwcHJvdmVDYWxsZGF0YShXUkFQUEVSX0FERFJFU1MsICdhYmMnKSkuc2hvdWxkLnRocm93KC9pbnZhbGlkIGFtb3VudC8pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZGVzY3JpYmUoJ2J1aWxkV3JhcENhbGxkYXRhJywgKCkgPT4ge1xuICAgIGNvbnN0IFJFQ0lQSUVOVCA9ICcweDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnO1xuICAgIGNvbnN0IEVYQUNUX0FNT1VOVCA9ICcxMDAwMDAwJztcbiAgICBjb25zdCBSQVRFX09ORSA9ICcxJztcbiAgICBjb25zdCBSQVRFXzFFMTIgPSAnMTAwMDAwMDAwMDAwMCc7IC8vIGh0ZXRoOmN0ZXN0MVxuXG4gICAgZGVzY3JpYmUoJ291dHB1dCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgYSAweC1wcmVmaXhlZCBoZXggc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkV3JhcENhbGxkYXRhKFJFQ0lQSUVOVCwgRVhBQ1RfQU1PVU5ULCBSQVRFX09ORSk7XG4gICAgICAgIGNhbGxkYXRhLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgICBjYWxsZGF0YS5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGF2ZSBleGFjdCBsZW5ndGg6IDQtYnl0ZSBzZWxlY3RvciArIDIgw5cgMzItYnl0ZSBBQkkgd29yZHMgPSA2OCBieXRlcyAoMTM4IGNoYXJzKScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIEVYQUNUX0FNT1VOVCwgUkFURV9PTkUpO1xuICAgICAgICBjYWxsZGF0YS5sZW5ndGguc2hvdWxkLmVxdWFsKDEzOCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdGFydCB3aXRoIHdyYXAgc2VsZWN0b3IgMHhiZjM3NmM3YScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIEVYQUNUX0FNT1VOVCwgUkFURV9PTkUpO1xuICAgICAgICBjYWxsZGF0YS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKHdyYXBNZXRob2RJZCk7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoJzB4YmYzNzZjN2EnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0FCSSBwYXJhbWV0ZXIgZW5jb2RpbmcnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIGVuY29kZSByZWNpcGllbnQgaW4gdGhlIGZpcnN0IEFCSSB3b3JkJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkV3JhcENhbGxkYXRhKFJFQ0lQSUVOVCwgRVhBQ1RfQU1PVU5ULCBSQVRFX09ORSk7XG4gICAgICAgIGNvbnN0IHdvcmQxID0gY2FsbGRhdGEuc2xpY2UoMTAsIDc0KTtcbiAgICAgICAgd29yZDEuc2hvdWxkLmVxdWFsKFJFQ0lQSUVOVC5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLnBhZFN0YXJ0KDY0LCAnMCcpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGVuY29kZSBhbW91bnQgaW4gdGhlIHNlY29uZCBBQkkgd29yZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIEVYQUNUX0FNT1VOVCwgUkFURV9PTkUpO1xuICAgICAgICBjb25zdCB3b3JkMiA9IGNhbGxkYXRhLnNsaWNlKDc0LCAxMzgpO1xuICAgICAgICB3b3JkMi5zaG91bGQuZXF1YWwoQmlnSW50KEVYQUNUX0FNT1VOVCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDY0LCAnMCcpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgdGhyb3VnaCBkZWNvZGVXcmFwQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRXcmFwQ2FsbGRhdGEoUkVDSVBJRU5ULCBFWEFDVF9BTU9VTlQsIFJBVEVfT05FKTtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVdyYXBDYWxsZGF0YShjYWxsZGF0YSk7XG4gICAgICAgIGRlY29kZWQudG8udG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwoUkVDSVBJRU5ULnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBkZWNvZGVkLmFtb3VudC5zaG91bGQuZXF1YWwoRVhBQ1RfQU1PVU5UKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3ZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhbiBpbnZhbGlkIHRvIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgICgoKSA9PiBidWlsZFdyYXBDYWxsZGF0YSgnbm90LWFuLWFkZHJlc3MnLCBFWEFDVF9BTU9VTlQsIFJBVEVfT05FKSkuc2hvdWxkLnRocm93KC9pbnZhbGlkIHRvIGFkZHJlc3MvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhIGJhZCBFSVAtNTUgY2hlY2tzdW0nLCAoKSA9PiB7XG4gICAgICAgIC8vIE1peGVkIGNhc2UgdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgY29ycmVjdCBjaGVja3N1bSAoc2FtZSBwYXR0ZXJuIGFzIGFwcHJvdmUgdGVzdHMpXG4gICAgICAgIGNvbnN0IGJhZENoZWNrc3VtID0gJzB4MkRlYmJlMDQ4N2VmOTIxZGY0NDU3ZjllMzZlZDA1YmUyZGYxYWM3NSc7XG4gICAgICAgICgoKSA9PiBidWlsZFdyYXBDYWxsZGF0YShiYWRDaGVja3N1bSwgRVhBQ1RfQU1PVU5ULCBSQVRFX09ORSkpLnNob3VsZC50aHJvdygvaW52YWxpZCB0byBhZGRyZXNzLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgYW1vdW50IDAnLCAoKSA9PiB7XG4gICAgICAgICgoKSA9PiBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIDAsIFJBVEVfT05FKSkuc2hvdWxkLnRocm93KC9hbW91bnQgbXVzdCBiZSA+IDAvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhIG5lZ2F0aXZlIGFtb3VudCcsICgpID0+IHtcbiAgICAgICAgKCgpID0+IGJ1aWxkV3JhcENhbGxkYXRhKFJFQ0lQSUVOVCwgLTEsIFJBVEVfT05FKSkuc2hvdWxkLnRocm93KC9hbW91bnQgbXVzdCBiZSA+IDAvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIGFtb3VudCDDlyByYXRlIGV4Y2VlZHMgdWludDY0JywgKCkgPT4ge1xuICAgICAgICAvLyBVSU5UNjRfTUFYIC8gMWUxMiArIDEgb3ZlcmZsb3dzIGZvciBjdGVzdDEtc3R5bGUgcmF0ZVxuICAgICAgICBjb25zdCB0b29MYXJnZSA9IChVSU5UNjRfTUFYIC8gQmlnSW50KFJBVEVfMUUxMikgKyAxbikudG9TdHJpbmcoKTtcbiAgICAgICAgKCgpID0+IGJ1aWxkV3JhcENhbGxkYXRhKFJFQ0lQSUVOVCwgdG9vTGFyZ2UsIFJBVEVfMUUxMikpLnNob3VsZC50aHJvdygvZXhjZWVkcyB1aW50NjQvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGFjY2VwdCBhbW91bnQgw5cgcmF0ZSB0aGF0IGZpdHMgdWludDY0IGZvciByYXRlIDFlMTInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9rID0gKFVJTlQ2NF9NQVggLyBCaWdJbnQoUkFURV8xRTEyKSkudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIG9rLCBSQVRFXzFFMTIpO1xuICAgICAgICBjYWxsZGF0YS5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKHdyYXBNZXRob2RJZCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBlbmNvZGUgd2l0aG91dCByYXRlIHdoZW4gcmF0ZSBpcyBvbWl0dGVkIChkZXNlcmlhbGl6ZSBwYXRoKScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZFdyYXBDYWxsZGF0YShSRUNJUElFTlQsIEVYQUNUX0FNT1VOVCk7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwod3JhcE1ldGhvZElkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGRVbndyYXBDYWxsZGF0YScsICgpID0+IHtcbiAgICBjb25zdCBGUk9NID0gJzB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc7XG4gICAgY29uc3QgVE8gPSAnMHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExJztcbiAgICBjb25zdCBFTkNSWVBURURfQU1PVU5UID0gJzB4JyArICdhYicucmVwZWF0KDMyKTtcbiAgICBjb25zdCBJTlBVVF9QUk9PRiA9ICcweCcgKyAnY2QnLnJlcGVhdCg2NCk7XG5cbiAgICBkZXNjcmliZSgnb3V0cHV0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIDB4LXByZWZpeGVkIGhleCBzdHJpbmcgc3RhcnRpbmcgd2l0aCB1bndyYXAgc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRVbndyYXBDYWxsZGF0YShGUk9NLCBUTywgRU5DUllQVEVEX0FNT1VOVCwgSU5QVVRfUFJPT0YpO1xuICAgICAgICBjYWxsZGF0YS5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgICAgY2FsbGRhdGEuc2hvdWxkLnN0YXJ0V2l0aCh1bndyYXBNZXRob2RJZCk7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoJzB4NWJmNGVmMDYnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgdGhyb3VnaCBkZWNvZGVVbndyYXBDYWxsZGF0YScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZFVud3JhcENhbGxkYXRhKEZST00sIFRPLCBFTkNSWVBURURfQU1PVU5ULCBJTlBVVF9QUk9PRik7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVVbndyYXBDYWxsZGF0YShjYWxsZGF0YSk7XG4gICAgICAgIGRlY29kZWQuZnJvbS50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChGUk9NLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBkZWNvZGVkLnRvLnRvTG93ZXJDYXNlKCkuc2hvdWxkLmVxdWFsKFRPLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBkZWNvZGVkLmVuY3J5cHRlZEFtb3VudC5zaG91bGQuZXF1YWwoRU5DUllQVEVEX0FNT1VOVCk7XG4gICAgICAgIGRlY29kZWQuaW5wdXRQcm9vZi5zaG91bGQuZXF1YWwoSU5QVVRfUFJPT0YpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndmFsaWRhdGlvbicsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgZnJvbSBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgICAoKCkgPT4gYnVpbGRVbndyYXBDYWxsZGF0YSgnbm90LWFuLWFkZHJlc3MnLCBUTywgRU5DUllQVEVEX0FNT1VOVCwgSU5QVVRfUFJPT0YpKS5zaG91bGQudGhyb3coXG4gICAgICAgICAgL2ludmFsaWQgZnJvbSBhZGRyZXNzL1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgdG8gYWRkcmVzcycsICgpID0+IHtcbiAgICAgICAgKCgpID0+IGJ1aWxkVW53cmFwQ2FsbGRhdGEoRlJPTSwgJ25vdC1hbi1hZGRyZXNzJywgRU5DUllQVEVEX0FNT1VOVCwgSU5QVVRfUFJPT0YpKS5zaG91bGQudGhyb3coXG4gICAgICAgICAgL2ludmFsaWQgdG8gYWRkcmVzcy9cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhIGJhZCBFSVAtNTUgY2hlY2tzdW0nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZENoZWNrc3VtID0gJzB4MkRlYmJlMDQ4N2VmOTIxZGY0NDU3ZjllMzZlZDA1YmUyZGYxYWM3NSc7XG4gICAgICAgICgoKSA9PiBidWlsZFVud3JhcENhbGxkYXRhKGJhZENoZWNrc3VtLCBUTywgRU5DUllQVEVEX0FNT1VOVCwgSU5QVVRfUFJPT0YpKS5zaG91bGQudGhyb3coXG4gICAgICAgICAgL2ludmFsaWQgZnJvbSBhZGRyZXNzL1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmVqZWN0IGEgbm9uLTMyLWJ5dGUgZW5jcnlwdGVkQW1vdW50JywgKCkgPT4ge1xuICAgICAgICAoKCkgPT4gYnVpbGRVbndyYXBDYWxsZGF0YShGUk9NLCBUTywgJzB4YWJjZCcsIElOUFVUX1BST09GKSkuc2hvdWxkLnRocm93KC9lbmNyeXB0ZWRBbW91bnQgbXVzdCBiZSBhIDMyLWJ5dGUvKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhbiBlbXB0eSBpbnB1dFByb29mJywgKCkgPT4ge1xuICAgICAgICAoKCkgPT4gYnVpbGRVbndyYXBDYWxsZGF0YShGUk9NLCBUTywgRU5DUllQVEVEX0FNT1VOVCwgJzB4JykpLnNob3VsZC50aHJvdygvaW5wdXRQcm9vZiBtdXN0IGJlIGEgbm9uLWVtcHR5Lyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2J1aWxkRmluYWxpemVVbndyYXBDYWxsZGF0YScsICgpID0+IHtcbiAgICBjb25zdCBSRVFVRVNUX0lEID0gJzB4JyArICcxMScucmVwZWF0KDMyKTtcbiAgICBjb25zdCBDTEVBUlRFWFRfQU1PVU5UID0gJzEwMDAwMDAnO1xuICAgIGNvbnN0IERFQ1JZUFRJT05fUFJPT0YgPSAnMHgnICsgJ2VlJy5yZXBlYXQoNjQpO1xuXG4gICAgZGVzY3JpYmUoJ291dHB1dCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgYSAweC1wcmVmaXhlZCBoZXggc3RyaW5nIHN0YXJ0aW5nIHdpdGggZmluYWxpemVVbndyYXAgc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRGaW5hbGl6ZVVud3JhcENhbGxkYXRhKFJFUVVFU1RfSUQsIENMRUFSVEVYVF9BTU9VTlQsIERFQ1JZUFRJT05fUFJPT0YpO1xuICAgICAgICBjYWxsZGF0YS5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgICAgY2FsbGRhdGEuc2hvdWxkLnN0YXJ0V2l0aChmaW5hbGl6ZVVud3JhcE1ldGhvZElkKTtcbiAgICAgICAgY2FsbGRhdGEuc2xpY2UoMCwgMTApLnNob3VsZC5lcXVhbCgnMHg1YmI2N2EwNScpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcm91bmQtdHJpcCB0aHJvdWdoIGRlY29kZUZpbmFsaXplVW53cmFwQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRGaW5hbGl6ZVVud3JhcENhbGxkYXRhKFJFUVVFU1RfSUQsIENMRUFSVEVYVF9BTU9VTlQsIERFQ1JZUFRJT05fUFJPT0YpO1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlRmluYWxpemVVbndyYXBDYWxsZGF0YShjYWxsZGF0YSk7XG4gICAgICAgIGRlY29kZWQucmVxdWVzdElkLnNob3VsZC5lcXVhbChSRVFVRVNUX0lEKTtcbiAgICAgICAgZGVjb2RlZC5jbGVhcnRleHRBbW91bnQuc2hvdWxkLmVxdWFsKENMRUFSVEVYVF9BTU9VTlQpO1xuICAgICAgICBkZWNvZGVkLmRlY3J5cHRpb25Qcm9vZi5zaG91bGQuZXF1YWwoREVDUllQVElPTl9QUk9PRik7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCByZWplY3QgYSBub24tMzItYnl0ZSByZXF1ZXN0SWQnLCAoKSA9PiB7XG4gICAgICAgICgoKSA9PiBidWlsZEZpbmFsaXplVW53cmFwQ2FsbGRhdGEoJzB4YWJjZCcsIENMRUFSVEVYVF9BTU9VTlQsIERFQ1JZUFRJT05fUFJPT0YpKS5zaG91bGQudGhyb3coXG4gICAgICAgICAgL3JlcXVlc3RJZCBtdXN0IGJlIGEgMzItYnl0ZS9cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBjbGVhcnRleHRBbW91bnQgb2YgMCcsICgpID0+IHtcbiAgICAgICAgKCgpID0+IGJ1aWxkRmluYWxpemVVbndyYXBDYWxsZGF0YShSRVFVRVNUX0lELCAnMCcsIERFQ1JZUFRJT05fUFJPT0YpKS5zaG91bGQudGhyb3coXG4gICAgICAgICAgL2NsZWFydGV4dEFtb3VudCBtdXN0IGJlID4gMC9cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBjbGVhcnRleHRBbW91bnQgZXhjZWVkaW5nIHVpbnQ2NCcsICgpID0+IHtcbiAgICAgICAgKCgpID0+IGJ1aWxkRmluYWxpemVVbndyYXBDYWxsZGF0YShSRVFVRVNUX0lELCAoVUlOVDY0X01BWCArIDFuKS50b1N0cmluZygpLCBERUNSWVBUSU9OX1BST09GKSkuc2hvdWxkLnRocm93KFxuICAgICAgICAgIC9jbGVhcnRleHRBbW91bnQgZXhjZWVkcyB1aW50NjQvXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBhY2NlcHQgY2xlYXJ0ZXh0QW1vdW50IGVxdWFsIHRvIFVJTlQ2NF9NQVgnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRGaW5hbGl6ZVVud3JhcENhbGxkYXRhKFJFUVVFU1RfSUQsIFVJTlQ2NF9NQVgudG9TdHJpbmcoKSwgREVDUllQVElPTl9QUk9PRik7XG4gICAgICAgIGRlY29kZUZpbmFsaXplVW53cmFwQ2FsbGRhdGEoY2FsbGRhdGEpLmNsZWFydGV4dEFtb3VudC5zaG91bGQuZXF1YWwoVUlOVDY0X01BWC50b1N0cmluZygpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHJlamVjdCBhbiBlbXB0eSBkZWNyeXB0aW9uUHJvb2YnLCAoKSA9PiB7XG4gICAgICAgICgoKSA9PiBidWlsZEZpbmFsaXplVW53cmFwQ2FsbGRhdGEoUkVRVUVTVF9JRCwgQ0xFQVJURVhUX0FNT1VOVCwgJzB4JykpLnNob3VsZC50aHJvdyhcbiAgICAgICAgICAvZGVjcnlwdGlvblByb29mIG11c3QgYmUgYSBub24tZW1wdHkvXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ291dHB1dCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgYSAweC1wcmVmaXhlZCBoZXggc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNhbGxkYXRhLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgICBjYWxsZGF0YS5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgaGF2ZSBleGFjdCBsZW5ndGg6IDQtYnl0ZSBzZWxlY3RvciArIDMgw5cgMzItYnl0ZSBBQkkgd29yZHMgPSAxMDAgYnl0ZXMgKDIwMiBjaGFycyknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKTtcbiAgICAgICAgY2FsbGRhdGEubGVuZ3RoLnNob3VsZC5lcXVhbCgyMDIpOyAvLyAnMHgnICsgMjAwIGhleCBjaGFyc1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3RhcnQgd2l0aCBkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uIHNlbGVjdG9yJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoZGVsZWdhdGVGb3JVc2VyRGVjcnlwdGlvbk1ldGhvZElkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0FCSSBwYXJhbWV0ZXIgZW5jb2Rpbmcg4oCUIHBvc2l0aW9uIGFuZCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgZW5jb2RlIGRlbGVnYXRlIGFkZHJlc3MgYXMgZmlyc3QgQUJJIHdvcmQgKGJ5dGVzIDTigJMzNSknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKTtcbiAgICAgICAgLy8gRmlyc3QgMzItYnl0ZSB3b3JkIGFmdGVyIDQtYnl0ZSBzZWxlY3RvciA9IGhleCBjaGFycyAxMOKAkzc0XG4gICAgICAgIGNvbnN0IHdvcmQxID0gY2FsbGRhdGEuc2xpY2UoMTAsIDc0KTtcbiAgICAgICAgd29yZDEuc2hvdWxkLmVxdWFsKERFTEVHQVRFX0FERFJFU1Muc2xpY2UoMikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwgJzAnKSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBlbmNvZGUgdG9rZW4gYWRkcmVzcyBhcyBzZWNvbmQgQUJJIHdvcmQgKGJ5dGVzIDM24oCTNjcpJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IHdvcmQyID0gY2FsbGRhdGEuc2xpY2UoNzQsIDEzOCk7XG4gICAgICAgIHdvcmQyLnNob3VsZC5lcXVhbChUT0tFTl9BRERSRVNTLnNsaWNlKDIpLnRvTG93ZXJDYXNlKCkucGFkU3RhcnQoNjQsICcwJykpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZW5jb2RlIGV4cGlyeSB0aW1lc3RhbXAgYXMgdGhpcmQgQUJJIHdvcmQgKGJ5dGVzIDY44oCTOTkpJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IHdvcmQzID0gY2FsbGRhdGEuc2xpY2UoMTM4LCAyMDIpO1xuICAgICAgICBjb25zdCBlbmNvZGVkRXhwaXJ5ID0gRVhQSVJZLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg2NCwgJzAnKTtcbiAgICAgICAgd29yZDMuc2hvdWxkLmVxdWFsKGVuY29kZWRFeHBpcnkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcm91bmQtdHJpcCBkZWNvZGUgdG8gb3JpZ2luYWwgcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCBbZGVsZWdhdGUsIHRva2VuLCBleHBpcnldID0gZGVjb2RlRGVsZWdhdGlvbkNhbGwoY2FsbGRhdGEpO1xuICAgICAgICBkZWxlZ2F0ZS5zaG91bGQuZXF1YWwoREVMRUdBVEVfQUREUkVTUy5zbGljZSgyKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgdG9rZW4uc2hvdWxkLmVxdWFsKFRPS0VOX0FERFJFU1Muc2xpY2UoMikudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGV4cGlyeS5zaG91bGQuZXF1YWwoRVhQSVJZKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3BhcmFtZXRlciBpc29sYXRpb24nLCAoKSA9PiB7XG4gICAgICBpdCgnZGlmZmVyZW50IGRlbGVnYXRlIGFkZHJlc3NlcyBzaG91bGQgcHJvZHVjZSBkaWZmZXJlbnQgY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IERFTEVHQVRFXzIgPSAnMHgyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyJztcbiAgICAgICAgY29uc3QgYzEgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCBjMiA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFXzIsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGMxLnNob3VsZC5ub3QuZXF1YWwoYzIpO1xuICAgICAgICAvLyBPbmx5IGZpcnN0IHdvcmQgZGlmZmVyc1xuICAgICAgICBjMS5zbGljZSgxMCwgNzQpLnNob3VsZC5ub3QuZXF1YWwoYzIuc2xpY2UoMTAsIDc0KSk7XG4gICAgICAgIGMxLnNsaWNlKDc0KS5zaG91bGQuZXF1YWwoYzIuc2xpY2UoNzQpKTsgLy8gdG9rZW4gYW5kIGV4cGlyeSB1bmNoYW5nZWRcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGlmZmVyZW50IHRva2VuIGFkZHJlc3NlcyBzaG91bGQgcHJvZHVjZSBkaWZmZXJlbnQgY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGMxID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKTtcbiAgICAgICAgY29uc3QgYzIgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzIsIEVYUElSWSk7XG4gICAgICAgIGMxLnNob3VsZC5ub3QuZXF1YWwoYzIpO1xuICAgICAgICAvLyBPbmx5IHNlY29uZCB3b3JkIGRpZmZlcnNcbiAgICAgICAgYzEuc2xpY2UoMTAsIDc0KS5zaG91bGQuZXF1YWwoYzIuc2xpY2UoMTAsIDc0KSk7IC8vIGRlbGVnYXRlIHVuY2hhbmdlZFxuICAgICAgICBjMS5zbGljZSg3NCwgMTM4KS5zaG91bGQubm90LmVxdWFsKGMyLnNsaWNlKDc0LCAxMzgpKTtcbiAgICAgICAgYzEuc2xpY2UoMTM4KS5zaG91bGQuZXF1YWwoYzIuc2xpY2UoMTM4KSk7IC8vIGV4cGlyeSB1bmNoYW5nZWRcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGlmZmVyZW50IGV4cGlyeSB0aW1lc3RhbXBzIHNob3VsZCBwcm9kdWNlIGRpZmZlcmVudCBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgICAgY29uc3QgYzEgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCBjMiA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSArIDg2NDAwKTtcbiAgICAgICAgYzEuc2hvdWxkLm5vdC5lcXVhbChjMik7XG4gICAgICAgIC8vIE9ubHkgdGhpcmQgd29yZCBkaWZmZXJzXG4gICAgICAgIGMxLnNsaWNlKDEwLCAxMzgpLnNob3VsZC5lcXVhbChjMi5zbGljZSgxMCwgMTM4KSk7IC8vIGRlbGVnYXRlICsgdG9rZW4gdW5jaGFuZ2VkXG4gICAgICAgIGMxLnNsaWNlKDEzOCkuc2hvdWxkLm5vdC5lcXVhbChjMi5zbGljZSgxMzgpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2FkZHJlc3MgY2FzZSBoYW5kbGluZycsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgbm9ybWFsaXNlIGNoZWNrc3VtbWVkIChtaXhlZC1jYXNlKSBhZGRyZXNzZXMgdG8gbG93ZXJjYXNlIGluIGVuY29kaW5nJywgKCkgPT4ge1xuICAgICAgICAvLyBUT0tFTl9BRERSRVNTXzMgaXMgRUlQLTU1IGNoZWNrc3VtbWVkOiAweEEwYjg2OTkxYzYyMThiMzZjMWQxOUQ0YTJlOUViMGNFMzYwNmVCNDhcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzMsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IHdvcmQyID0gY2FsbGRhdGEuc2xpY2UoNzQsIDEzOCk7XG4gICAgICAgIHdvcmQyLnNob3VsZC5lcXVhbChUT0tFTl9BRERSRVNTXzMuc2xpY2UoMikudG9Mb3dlckNhc2UoKS5wYWRTdGFydCg2NCwgJzAnKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ291dHB1dCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgYSAweC1wcmVmaXhlZCBoZXggc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsZGF0YSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTXSwgRVhQSVJZKTtcbiAgICAgICAgY2FsbGRhdGEuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICAgIGNhbGxkYXRhLnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBzdGFydCB3aXRoIG11bHRpY2FsbCBzZWxlY3RvcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGRhdGEgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG4gICAgICAgIGNhbGxkYXRhLnNsaWNlKDAsIDEwKS5zaG91bGQuZXF1YWwoYWNsTXVsdGljYWxsTWV0aG9kSWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5uZXIgY2FsbCBjb3JyZWN0bmVzcycsICgpID0+IHtcbiAgICAgIC8vIFN0cmF0ZWd5OiBidWlsZCBleHBlY3RlZCBpbm5lciBjYWxscyBpbmRlcGVuZGVudGx5LCB0aGVuIHZlcmlmeSB0aGV5IGFyZVxuICAgICAgLy8gZW1iZWRkZWQgaW4gdGhlIG11bHRpY2FsbCBwYXlsb2FkLiBUaGlzIGF2b2lkcyBkZWNvZGluZyB0aGUgY29tcGxleCBieXRlc1tdXG4gICAgICAvLyBBQkkgc3RydWN0dXJlIGFuZCBkaXJlY3RseSB2ZXJpZmllcyB3aGF0IG1hdHRlcnM6IHRoZSByaWdodCBjYWxscyBhcmUgcHJlc2VudC5cblxuICAgICAgaXQoJ3Nob3VsZCBjb250YWluIHRoZSBleHBlY3RlZCBpbm5lciBkZWxlZ2F0aW9uIGNhbGwgZm9yIGVhY2ggdG9rZW4nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlubmVyMSA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSkuc2xpY2UoMik7XG4gICAgICAgIGNvbnN0IGlubmVyMiA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMiwgRVhQSVJZKS5zbGljZSgyKTtcbiAgICAgICAgY29uc3QgaW5uZXIzID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTU18zLCBFWFBJUlkpLnNsaWNlKDIpO1xuXG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoXG4gICAgICAgICAgREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgICBbVE9LRU5fQUREUkVTUywgVE9LRU5fQUREUkVTU18yLCBUT0tFTl9BRERSRVNTXzNdLFxuICAgICAgICAgIEVYUElSWVxuICAgICAgICApO1xuXG4gICAgICAgIGNhbGxkYXRhLnNob3VsZC5jb250YWluRXFsKGlubmVyMSk7XG4gICAgICAgIGNhbGxkYXRhLnNob3VsZC5jb250YWluRXFsKGlubmVyMik7XG4gICAgICAgIGNhbGxkYXRhLnNob3VsZC5jb250YWluRXFsKGlubmVyMyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3NpbmdsZS10b2tlbiBtdWx0aWNhbGwgc2hvdWxkIGNvbnRhaW4gaXRzIGlubmVyIGNhbGwgYnV0IG5vdCBvdGhlcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlubmVyMSA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSkuc2xpY2UoMik7XG4gICAgICAgIGNvbnN0IGlubmVyMiA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMiwgRVhQSVJZKS5zbGljZSgyKTtcblxuICAgICAgICBjb25zdCBzaW5nbGUgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTU10sIEVYUElSWSk7XG5cbiAgICAgICAgc2luZ2xlLnNob3VsZC5jb250YWluRXFsKGlubmVyMSk7XG4gICAgICAgIHNpbmdsZS5zaG91bGQubm90LmNvbnRhaW5FcWwoaW5uZXIyKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZWFjaCBpbm5lciBjYWxsIHNob3VsZCBzdGFydCB3aXRoIGRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb24gc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IFtUT0tFTl9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzIsIFRPS0VOX0FERFJFU1NfM107XG4gICAgICAgIGNvbnN0IGNhbGxkYXRhID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgdG9rZW5zLCBFWFBJUlkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgICAgICAgY29uc3QgZXhwZWN0ZWRJbm5lciA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIHRva2VuLCBFWFBJUlkpLnNsaWNlKDIpO1xuICAgICAgICAgIC8vIEVhY2ggaW5uZXIgY2FsbCBzdGFydHMgd2l0aCBkZWxlZ2F0ZUZvclVzZXJEZWNyeXB0aW9uIHNlbGVjdG9yXG4gICAgICAgICAgZXhwZWN0ZWRJbm5lci5zaG91bGQuc3RhcnRXaXRoKGRlbGVnYXRlRm9yVXNlckRlY3J5cHRpb25NZXRob2RJZC5zbGljZSgyKSk7XG4gICAgICAgICAgY2FsbGRhdGEuc2hvdWxkLmNvbnRhaW5FcWwoZXhwZWN0ZWRJbm5lcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGlmZmVyZW50IGV4cGlyeSB0aW1lc3RhbXBzIGNoYW5nZSBhbGwgaW5uZXIgY2FsbHMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGMxID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMl0sIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IGMyID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1MsIFRPS0VOX0FERFJFU1NfMl0sIEVYUElSWSArIDg2NDAwKTtcblxuICAgICAgICAvLyBJbm5lciBjYWxscyB3aXRoIG9sZCBleHBpcnkgc2hvdWxkIE5PVCBhcHBlYXIgaW4gdGhlIG5ldyBtdWx0aWNhbGxcbiAgICAgICAgY29uc3QgaW5uZXIxT2xkID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKS5zbGljZSgyKTtcbiAgICAgICAgYzIuc2hvdWxkLm5vdC5jb250YWluRXFsKGlubmVyMU9sZCk7XG5cbiAgICAgICAgLy8gQW5kIHZpY2UgdmVyc2FcbiAgICAgICAgY29uc3QgaW5uZXIxTmV3ID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZICsgODY0MDApLnNsaWNlKDIpO1xuICAgICAgICBjMS5zaG91bGQubm90LmNvbnRhaW5FcWwoaW5uZXIxTmV3KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgbG9uZ2VyIGNhbGxkYXRhIGZvciBtb3JlIHRva2VucycsICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2luZ2xlID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgW1RPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCBkb3VibGUgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTUywgVE9LRU5fQUREUkVTU18yXSwgRVhQSVJZKTtcbiAgICAgICAgY29uc3QgdHJpcGxlID0gYnVpbGRNdWx0aWNhbGxEZWxlZ2F0aW9uQ2FsbGRhdGEoXG4gICAgICAgICAgREVMRUdBVEVfQUREUkVTUyxcbiAgICAgICAgICBbVE9LRU5fQUREUkVTUywgVE9LRU5fQUREUkVTU18yLCBUT0tFTl9BRERSRVNTXzNdLFxuICAgICAgICAgIEVYUElSWVxuICAgICAgICApO1xuICAgICAgICBkb3VibGUubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbihzaW5nbGUubGVuZ3RoKTtcbiAgICAgICAgdHJpcGxlLmxlbmd0aC5zaG91bGQuYmUuZ3JlYXRlclRoYW4oZG91YmxlLmxlbmd0aCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2RpZmZlcmVudCB0b2tlbiBvcmRlcmluZ3Mgc2hvdWxkIHByb2R1Y2UgZGlmZmVyZW50IGNhbGxkYXRhJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjMSA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTLCBUT0tFTl9BRERSRVNTXzJdLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCBjMiA9IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtUT0tFTl9BRERSRVNTXzIsIFRPS0VOX0FERFJFU1NdLCBFWFBJUlkpO1xuICAgICAgICBjMS5zaG91bGQubm90LmVxdWFsKGMyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Vycm9yIGhhbmRsaW5nJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGdpdmVuIGFuIGVtcHR5IHRva2VuIGFycmF5JywgKCkgPT4ge1xuICAgICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAgICgpID0+IGJ1aWxkTXVsdGljYWxsRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFtdLCBFWFBJUlkpLFxuICAgICAgICAgIC90b2tlbkNvbnRyYWN0QWRkcmVzc2VzIG11c3Qgbm90IGJlIGVtcHR5L1xuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZGVzY3JpYmUoJ3dyYXBJbkNhbGxGcm9tUGFyZW50JywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdvdXRwdXQgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBwcm9kdWNlIGEgMHgtcHJlZml4ZWQgaGV4IHN0cmluZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCB3cmFwcGVkID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoQUNMX0FERFJFU1MsIGlubmVyKTtcbiAgICAgICAgd3JhcHBlZC5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgICAgd3JhcHBlZC5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgc3RhcnQgd2l0aCBjYWxsRnJvbVBhcmVudCBzZWxlY3RvcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCB3cmFwcGVkID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoQUNMX0FERFJFU1MsIGlubmVyKTtcbiAgICAgICAgd3JhcHBlZC5zbGljZSgwLCAxMCkuc2hvdWxkLmVxdWFsKGNhbGxGcm9tUGFyZW50TWV0aG9kSWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSBsb25nZXIgY2FsbGRhdGEgdGhhbiB0aGUgaW5uZXIgY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlubmVyID0gYnVpbGREZWxlZ2F0aW9uQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgVE9LRU5fQUREUkVTUywgRVhQSVJZKTtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IHdyYXBJbkNhbGxGcm9tUGFyZW50KEZPUldBUkRFUl9BRERSRVNTLCBpbm5lcik7XG4gICAgICAgIHdyYXBwZWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbihpbm5lci5sZW5ndGgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQUJJIHBhcmFtZXRlciBkZWNvZGluZycsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgZGVjb2RlIHRhcmdldCBhZGRyZXNzIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCB3cmFwcGVkID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoQUNMX0FERFJFU1MsIGlubmVyKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHdyYXBwZWQuc2xpY2UoMTApLCAnaGV4Jyk7XG4gICAgICAgIGNvbnN0IFt0YXJnZXRdID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsnYWRkcmVzcycsICd1aW50MjU2JywgJ2J5dGVzJ10sIHBheWxvYWQpO1xuICAgICAgICAodGFyZ2V0IGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChBQ0xfQUREUkVTUy5zbGljZSgyKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGVuY29kZSB2YWx1ZSBhcyAwIChubyBFVEggdHJhbnNmZXIpJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lciA9IGJ1aWxkRGVsZWdhdGlvbkNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIFRPS0VOX0FERFJFU1MsIEVYUElSWSk7XG4gICAgICAgIGNvbnN0IHdyYXBwZWQgPSB3cmFwSW5DYWxsRnJvbVBhcmVudChBQ0xfQUREUkVTUywgaW5uZXIpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmZyb20od3JhcHBlZC5zbGljZSgxMCksICdoZXgnKTtcbiAgICAgICAgY29uc3QgWywgdmFsdWVdID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsnYWRkcmVzcycsICd1aW50MjU2JywgJ2J5dGVzJ10sIHBheWxvYWQpO1xuICAgICAgICB2YWx1ZS50b1N0cmluZygpLnNob3VsZC5lcXVhbCgnMCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcHJlc2VydmUgaW5uZXIgY2FsbGRhdGEgZXhhY3RseScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCB3cmFwcGVkID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoQUNMX0FERFJFU1MsIGlubmVyKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHdyYXBwZWQuc2xpY2UoMTApLCAnaGV4Jyk7XG4gICAgICAgIGNvbnN0IFssICwgZGF0YV0gPSBFdGhlcmV1bUFiaS5yYXdEZWNvZGUoWydhZGRyZXNzJywgJ3VpbnQyNTYnLCAnYnl0ZXMnXSwgcGF5bG9hZCk7XG4gICAgICAgICgnMHgnICsgKGRhdGEgYXMgQnVmZmVyKS50b1N0cmluZygnaGV4JykpLnNob3VsZC5lcXVhbChpbm5lcik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSBtdWx0aWNhbGwgaW5uZXIgY2FsbGRhdGEgZXhhY3RseScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBidWlsZE11bHRpY2FsbERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBbVE9LRU5fQUREUkVTUywgVE9LRU5fQUREUkVTU18yXSwgRVhQSVJZKTtcbiAgICAgICAgY29uc3Qgd3JhcHBlZCA9IHdyYXBJbkNhbGxGcm9tUGFyZW50KEFDTF9BRERSRVNTLCBpbm5lcik7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuZnJvbSh3cmFwcGVkLnNsaWNlKDEwKSwgJ2hleCcpO1xuICAgICAgICBjb25zdCBbLCAsIGRhdGFdID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsnYWRkcmVzcycsICd1aW50MjU2JywgJ2J5dGVzJ10sIHBheWxvYWQpO1xuICAgICAgICAoJzB4JyArIChkYXRhIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpKS5zaG91bGQuZXF1YWwoaW5uZXIpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndGFyZ2V0IGFkZHJlc3MgaXNvbGF0aW9uJywgKCkgPT4ge1xuICAgICAgaXQoJ2RpZmZlcmVudCB0YXJnZXQgYWRkcmVzc2VzIHNob3VsZCBwcm9kdWNlIGRpZmZlcmVudCBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgICBjb25zdCB3MSA9IHdyYXBJbkNhbGxGcm9tUGFyZW50KEFDTF9BRERSRVNTLCBpbm5lcik7XG4gICAgICAgIGNvbnN0IHcyID0gd3JhcEluQ2FsbEZyb21QYXJlbnQoRk9SV0FSREVSX0FERFJFU1MsIGlubmVyKTtcbiAgICAgICAgdzEuc2hvdWxkLm5vdC5lcXVhbCh3Mik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBkZXNjcmliZSgnYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlckJ5SGFuZGxlQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgY29uc3QgSEFORExFID0gJzB4JyArICdhYicucmVwZWF0KDMyKTsgLy8gMzItYnl0ZSBtb2NrIGhhbmRsZVxuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSAweC1wcmVmaXhlZCBoZXggc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlckJ5SGFuZGxlQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgSEFORExFKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdGFydCB3aXRoIHRoZSBjb25maWRlbnRpYWxUcmFuc2Zlck5vUHJvb2Ygc2VsZWN0b3IgKDB4NWJlYmVkN2UpJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlckJ5SGFuZGxlQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgSEFORExFKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuc3RhcnRXaXRoKGNvbmZpZGVudGlhbFRyYW5zZmVyTm9Qcm9vZk1ldGhvZElkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZW5jb2RlIHRoZSByZWNpcGllbnQgYWRkcmVzcyBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyQnlIYW5kbGVDYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBIQU5ETEUpO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKHJlc3VsdC5zbGljZSgxMCksICdoZXgnKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBFdGhlcmV1bUFiaS5yYXdEZWNvZGUoWydhZGRyZXNzJywgJ2J5dGVzMzInXSwgcGF5bG9hZCk7XG4gICAgICAoJzB4JyArIChkZWNvZGVkWzBdIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpKS50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChERUxFR0FURV9BRERSRVNTLnRvTG93ZXJDYXNlKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgdGhlIGVuY3J5cHRlZCBoYW5kbGUgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlckJ5SGFuZGxlQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgSEFORExFKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuZnJvbShyZXN1bHQuc2xpY2UoMTApLCAnaGV4Jyk7XG4gICAgICBjb25zdCBkZWNvZGVkID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsnYWRkcmVzcycsICdieXRlczMyJ10sIHBheWxvYWQpO1xuICAgICAgKCcweCcgKyAoZGVjb2RlZFsxXSBhcyBCdWZmZXIpLnRvU3RyaW5nKCdoZXgnKSkuc2hvdWxkLmVxdWFsKEhBTkRMRSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGlmZmVyZW50IGhhbmRsZXMgc2hvdWxkIHByb2R1Y2UgZGlmZmVyZW50IGNhbGxkYXRhJywgKCkgPT4ge1xuICAgICAgY29uc3QgaDEgPSAnMHgnICsgJzAxJy5yZXBlYXQoMzIpO1xuICAgICAgY29uc3QgaDIgPSAnMHgnICsgJzAyJy5yZXBlYXQoMzIpO1xuICAgICAgYnVpbGRDb25maWRlbnRpYWxUcmFuc2ZlckJ5SGFuZGxlQ2FsbGRhdGEoREVMRUdBVEVfQUREUkVTUywgaDEpLnNob3VsZC5ub3QuZXF1YWwoXG4gICAgICAgIGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJCeUhhbmRsZUNhbGxkYXRhKERFTEVHQVRFX0FERFJFU1MsIGgyKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdkaWZmZXJlbnQgcmVjaXBpZW50IGFkZHJlc3NlcyBzaG91bGQgcHJvZHVjZSBkaWZmZXJlbnQgY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICBidWlsZENvbmZpZGVudGlhbFRyYW5zZmVyQnlIYW5kbGVDYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBIQU5ETEUpLnNob3VsZC5ub3QuZXF1YWwoXG4gICAgICAgIGJ1aWxkQ29uZmlkZW50aWFsVHJhbnNmZXJCeUhhbmRsZUNhbGxkYXRhKFRPS0VOX0FERFJFU1MsIEhBTkRMRSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZGVzY3JpYmUoJ2J1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YScsICgpID0+IHtcbiAgICBjb25zdCBQQVJFTlRfQUREUkVTUyA9ICcweDIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjInO1xuICAgIGNvbnN0IEhBTkRMRSA9ICcweCcgKyAnY2QnLnJlcGVhdCgzMik7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIDB4LXByZWZpeGVkIGhleCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoVE9LRU5fQUREUkVTUywgUEFSRU5UX0FERFJFU1MsIEhBTkRMRSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICByZXN1bHQuc2hvdWxkLnN0YXJ0V2l0aCgnMHgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3RhcnQgd2l0aCB0aGUgY2FsbEZyb21QYXJlbnQgc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoVE9LRU5fQUREUkVTUywgUEFSRU5UX0FERFJFU1MsIEhBTkRMRSk7XG4gICAgICByZXN1bHQuc2hvdWxkLnN0YXJ0V2l0aChjYWxsRnJvbVBhcmVudE1ldGhvZElkKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbm5lciBjYWxsZGF0YSBzaG91bGQgc3RhcnQgd2l0aCBjb25maWRlbnRpYWxUcmFuc2Zlck5vUHJvb2Ygc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoVE9LRU5fQUREUkVTUywgUEFSRU5UX0FERFJFU1MsIEhBTkRMRSk7XG4gICAgICBjb25zdCBwYXlsb2FkID0gQnVmZmVyLmZyb20ocmVzdWx0LnNsaWNlKDEwKSwgJ2hleCcpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IEV0aGVyZXVtQWJpLnJhd0RlY29kZShbJ2FkZHJlc3MnLCAndWludDI1NicsICdieXRlcyddLCBwYXlsb2FkKTtcbiAgICAgIGNvbnN0IGlubmVyQ2FsbGRhdGEgPSAnMHgnICsgKGRlY29kZWRbMl0gYXMgQnVmZmVyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBpbm5lckNhbGxkYXRhLnNob3VsZC5zdGFydFdpdGgoY29uZmlkZW50aWFsVHJhbnNmZXJOb1Byb29mTWV0aG9kSWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ291dGVyIHRhcmdldCBhZGRyZXNzIHNob3VsZCBlcXVhbCB0aGUgdG9rZW4gY29udHJhY3QgYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShUT0tFTl9BRERSRVNTLCBQQVJFTlRfQUREUkVTUywgSEFORExFKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuZnJvbShyZXN1bHQuc2xpY2UoMTApLCAnaGV4Jyk7XG4gICAgICBjb25zdCBkZWNvZGVkID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsnYWRkcmVzcycsICd1aW50MjU2JywgJ2J5dGVzJ10sIHBheWxvYWQpO1xuICAgICAgKCcweCcgKyAoZGVjb2RlZFswXSBhcyBCdWZmZXIpLnRvU3RyaW5nKCdoZXgnKSkudG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwoVE9LRU5fQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbm5lciByZWNpcGllbnQgc2hvdWxkIGVxdWFsIHRoZSBwYXJlbnQgYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShUT0tFTl9BRERSRVNTLCBQQVJFTlRfQUREUkVTUywgSEFORExFKTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuZnJvbShyZXN1bHQuc2xpY2UoMTApLCAnaGV4Jyk7XG4gICAgICBjb25zdCBkZWNvZGVkID0gRXRoZXJldW1BYmkucmF3RGVjb2RlKFsnYWRkcmVzcycsICd1aW50MjU2JywgJ2J5dGVzJ10sIHBheWxvYWQpO1xuICAgICAgY29uc3QgaW5uZXJDYWxsZGF0YSA9ICcweCcgKyAoZGVjb2RlZFsyXSBhcyBCdWZmZXIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IGlubmVyUGF5bG9hZCA9IEJ1ZmZlci5mcm9tKGlubmVyQ2FsbGRhdGEuc2xpY2UoMTApLCAnaGV4Jyk7XG4gICAgICBjb25zdCBpbm5lckRlY29kZWQgPSBFdGhlcmV1bUFiaS5yYXdEZWNvZGUoWydhZGRyZXNzJywgJ2J5dGVzMzInXSwgaW5uZXJQYXlsb2FkKTtcbiAgICAgICgnMHgnICsgKGlubmVyRGVjb2RlZFswXSBhcyBCdWZmZXIpLnRvU3RyaW5nKCdoZXgnKSkudG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwoUEFSRU5UX0FERFJFU1MudG9Mb3dlckNhc2UoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZGlmZmVyZW50IHRva2VuIGFkZHJlc3NlcyBzaG91bGQgcHJvZHVjZSBkaWZmZXJlbnQgY2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgICBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoVE9LRU5fQUREUkVTUywgUEFSRU5UX0FERFJFU1MsIEhBTkRMRSkuc2hvdWxkLm5vdC5lcXVhbChcbiAgICAgICAgYnVpbGRGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbkNhbGxkYXRhKFRPS0VOX0FERFJFU1NfMiwgUEFSRU5UX0FERFJFU1MsIEhBTkRMRSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZGVzY3JpYmUoJ2RlY29kZUZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgY29uc3QgUEFSRU5UX0FERFJFU1MgPSAnMHgyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyJztcbiAgICBjb25zdCBIQU5ETEUgPSAnMHgnICsgJ2VmJy5yZXBlYXQoMzIpO1xuXG4gICAgaXQoJ3Nob3VsZCByb3VuZC10cmlwIGVuY29kZSBhbmQgZGVjb2RlIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBidWlsZEZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoVE9LRU5fQUREUkVTUywgUEFSRU5UX0FERFJFU1MsIEhBTkRMRSk7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShlbmNvZGVkKTtcbiAgICAgIGRlY29kZWQudG9rZW5Db250cmFjdEFkZHJlc3MudG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwoVE9LRU5fQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGRlY29kZWQucGFyZW50QWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChQQVJFTlRfQUREUkVTUy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGRlY29kZWQuZW5jcnlwdGVkSGFuZGxlLnNob3VsZC5lcXVhbChIQU5ETEUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgY2FsbGRhdGEgd2l0aCB3cm9uZyBvdXRlciBzZWxlY3RvcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGJhZCA9ICcweGRlYWRiZWVmJyArICcwMCcucmVwZWF0KDY0KTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gZGVjb2RlRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YShiYWQpLCAvSW52YWxpZCBGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbiBjYWxsZGF0YS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBmb3IgY2FsbGRhdGEgd2l0aCBjb3JyZWN0IG91dGVyIGJ1dCB3cm9uZyBpbm5lciBzZWxlY3RvcicsICgpID0+IHtcbiAgICAgIC8vIFdyYXAgZGVsZWdhdGlvbiBjYWxsZGF0YSBpbiBjYWxsRnJvbVBhcmVudCDigJQgaW5uZXIgc3RhcnRzIHdpdGggMHgwNGY2MWE5NSwgbm90IDB4NWJlYmVkN2VcbiAgICAgIGNvbnN0IGlubmVyQ2FsbGRhdGEgPSBidWlsZERlbGVnYXRpb25DYWxsZGF0YShERUxFR0FURV9BRERSRVNTLCBUT0tFTl9BRERSRVNTLCBFWFBJUlkpO1xuICAgICAgY29uc3Qgd3JhcHBlZCA9IHdyYXBJbkNhbGxGcm9tUGFyZW50KFRPS0VOX0FERFJFU1MsIGlubmVyQ2FsbGRhdGEpO1xuICAgICAgc2hvdWxkLnRocm93cyhcbiAgICAgICAgKCkgPT4gZGVjb2RlRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW5DYWxsZGF0YSh3cmFwcGVkKSxcbiAgICAgICAgL0ludmFsaWQgRmx1c2hFUkM3OTg0Rm9yd2FyZGVyVG9rZW4gaW5uZXIgY2FsbGRhdGEvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlY29kZWQgdG9rZW5Db250cmFjdEFkZHJlc3Mgc2hvdWxkIGJlIGNoZWNrc3VtbWVkIG9yIGxvd2VyY2FzZSBjb25zaXN0ZW50bHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBlbmNvZGVkID0gYnVpbGRGbHVzaEVSQzc5ODRGb3J3YXJkZXJUb2tlbkNhbGxkYXRhKFRPS0VOX0FERFJFU1MsIFBBUkVOVF9BRERSRVNTLCBIQU5ETEUpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUZsdXNoRVJDNzk4NEZvcndhcmRlclRva2VuQ2FsbGRhdGEoZW5jb2RlZCk7XG4gICAgICBzaG91bGQuZXhpc3QoZGVjb2RlZC50b2tlbkNvbnRyYWN0QWRkcmVzcyk7XG4gICAgICBkZWNvZGVkLnRva2VuQ29udHJhY3RBZGRyZXNzLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|