@bitgo/sdk-coin-avaxp 5.0.2 → 5.0.4
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/CHANGELOG.md +11 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +8 -3
- package/dist/test/resources/avaxp.d.ts +1 -0
- package/dist/test/resources/avaxp.d.ts.map +1 -1
- package/dist/test/resources/avaxp.js +16 -2
- package/dist/test/unit/lib/permissionlessValidatorTxBuilder.js +40 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -80,6 +80,17 @@ describe('AvaxP permissionlessValidatorTxBuilder', () => {
|
|
|
80
80
|
txExplain.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
81
81
|
txExplain.outputs[0].address.should.equal(testData.ADDVALIDATOR_SAMPLES.nodeID);
|
|
82
82
|
});
|
|
83
|
+
it('should explains a Signed AddPermissionlessValidatorTx and order inputs', async () => {
|
|
84
|
+
const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('avaxp')).from(
|
|
85
|
+
// https://testnet.snowtrace.io/pvm/tx/2tt3KE6gAG7qpMLL6xoynSyk7ht4egQ74wcF7AuGm25vQ3QNWB?chainId=43113
|
|
86
|
+
'0x0000000000190000000100000000000000000000000000000000000000000000000000000000000000000000000121e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff0000000700000000773594000000000000000000000000020000000393ca93e4cb3b6c10d167d41fbabeb8e94ed2deb5dc787323d722ff40fdfe56040fb98f7aee2075eff4dd7a368ddb6ef7132bff693cbfd9ba30f17c18000000046f8bdc3c893edd2c7f24a6190d6233fda5ccf517d96dd6c08d134179abb2d14e0000000021e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff0000000500000047036aaa00000000020000000100000002865cc8568b9c4c7d36bb96e086619d8c85218d653ff56d051334f839e58977c30000000221e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff00000005000000005fb5d590000000020000000100000002865cc8568b9c4c7d36bb96e086619d8c85218d653ff56d051334f839e58977c30000000121e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff0000000500000007ae61e378000000020000000100000002865cc8568b9c4c7d36bb96e086619d8c85218d653ff56d051334f839e58977c30000000021e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff00000005000003ffb6db3f6900000002000000010000000200000000953cc95e84f29dc6ee7589ef6acb01c9d561cba3000000006616c6750000000066560e750000044e51280e7100000000000000000000000000000000000000000000000000000000000000000000001ca7a2f29ca580c4254e3beabce2047e04ea8c3c7c69a5817b5461c2239593561a3843bc7cb14576390378b145135301478ff8cb5a651e3d082fd6cd1e1777edeabd5b0924ca648f3890d82ebd6259b3cca00e30faa249482fef10293f42e28afb15f0a5dd3f37e5524cd5de3f3c2b909df49873b8196af60004d3f3a84baa46ba08df7baf8e486b0b79a9c207095e1a430000000121e67317cbc4be2aeb00677ad6462778a8f52274b9d605df2591b23027a87dff000000070000044e51280e710000000000000000000000020000000393ca93e4cb3b6c10d167d41fbabeb8e94ed2deb5dc787323d722ff40fdfe56040fb98f7aee2075eff4dd7a368ddb6ef7132bff693cbfd9ba30f17c180000000b0000000000000000000000020000000393ca93e4cb3b6c10d167d41fbabeb8e94ed2deb5dc787323d722ff40fdfe56040fb98f7aee2075eff4dd7a368ddb6ef7132bff693cbfd9ba30f17c180000000b0000000000000000000000020000000393ca93e4cb3b6c10d167d41fbabeb8e94ed2deb5dc787323d722ff40fdfe56040fb98f7aee2075eff4dd7a368ddb6ef7132bff693cbfd9ba30f17c1800004e2000000004000000090000000208304e8841ab96169ea2b28dc358df3594523b3ce87593f1f579b51b7bfb844d49d690f71edb4e6530b8800436a4ef7357046a2155c5b52c15414ae76ca956c8007bbd8dbea9071c1bf1788f853472e08362b1afadc9d0a4412b13b0ea43b703e010df1204d88c6fe0484140b1bb91fdbf7a032d262475a419f80829411a04114001000000090000000208304e8841ab96169ea2b28dc358df3594523b3ce87593f1f579b51b7bfb844d49d690f71edb4e6530b8800436a4ef7357046a2155c5b52c15414ae76ca956c8007bbd8dbea9071c1bf1788f853472e08362b1afadc9d0a4412b13b0ea43b703e010df1204d88c6fe0484140b1bb91fdbf7a032d262475a419f80829411a04114001000000090000000208304e8841ab96169ea2b28dc358df3594523b3ce87593f1f579b51b7bfb844d49d690f71edb4e6530b8800436a4ef7357046a2155c5b52c15414ae76ca956c8007bbd8dbea9071c1bf1788f853472e08362b1afadc9d0a4412b13b0ea43b703e010df1204d88c6fe0484140b1bb91fdbf7a032d262475a419f80829411a04114001000000090000000208304e8841ab96169ea2b28dc358df3594523b3ce87593f1f579b51b7bfb844d49d690f71edb4e6530b8800436a4ef7357046a2155c5b52c15414ae76ca956c8007bbd8dbea9071c1bf1788f853472e08362b1afadc9d0a4412b13b0ea43b703e010df1204d88c6fe0484140b1bb91fdbf7a032d262475a419f80829411a0411400127efec04');
|
|
87
|
+
const tx = await txBuilder.build();
|
|
88
|
+
const txExplain = tx.explainTransaction();
|
|
89
|
+
txExplain.inputs[0].id.should.equal('r8JUUYFv9NWcNe5cxMFdBRjqkL6FZewDf2GtkttmxWCdeFFMK:0');
|
|
90
|
+
txExplain.inputs[1].id.should.equal('22B7GH7fDarBqyw8W7atC8ED3euVnefTiEWBPBmaSXrAhAQ4Lk:0');
|
|
91
|
+
txExplain.inputs[2].id.should.equal('22B7GH7fDarBqyw8W7atC8ED3euVnefTiEWBPBmaSXrAhAQ4Lk:1');
|
|
92
|
+
txExplain.inputs[3].id.should.equal('22B7GH7fDarBqyw8W7atC8ED3euVnefTiEWBPBmaSXrAhAQ4Lk:2');
|
|
93
|
+
});
|
|
83
94
|
it('should explains a Signed AddPermissionlessValidatorTx from raw', async () => {
|
|
84
95
|
const oldHex = '0x000000000019000000050000000000000000000000000000000000000000000000000000000000000000000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000001cbabc80000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad63720000000264d9b5eab8c4a1a25bfa9e3e1a60d78f1ae88e7352e22ef90107648b738a30e3000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000003b6d03400000000200000001000000026ccb2a4fea281a8737d33b2535ee3f70518b354c91f0adcfaa70e459c4b1881c000000003d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000005000000001ce8834000000002000000010000000200000000129a271ff407b1101f35aec82a2f715c5239bd3900000000660f17de0000000066106bb6000000003b9aca0000000000000000000000000000000000000000000000000000000000000000000000001cad9e9476b701edec88e53b1c314456053b3cf846a1192117872e41455f440c074d6ee89530d45e88f79ac0eda06f2887a94d6182edbd953516b262f17565a65d98f5741549cd70d2423abff750bb4b8d982d482376b189142ff8aa4705615fee14be6174610860e9c003aa4aeaa613b1732abf3cd0c9c42fa5856345644068c0d1f9fa1d9af32e20b14fca02983260bc000000013d9bdac0ed1d761330cf680efdeb1a42159eb387d6d2950c96f7d28f61bbe2aa00000007000000003b9aca00000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad63720000000b000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad63720000000b000000000000000000000002000000037086fbc36717c7a407bdb198bd7925296727d6b97565285409e200fdc67c7b63759b5ad29bf01fc2b471d54e58e4c5fadee622abd663bebad3ad637200004e200000000200000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007565285409e200fdc67c7b63759b5ad29bf01fc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007565285409e200fdc67c7b63759b5ad29bf01fc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047becda9';
|
|
85
96
|
const sortedBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tavaxp')).from(oldHex);
|
|
@@ -173,6 +184,9 @@ describe('AvaxP permissionlessValidatorTxBuilder', () => {
|
|
|
173
184
|
const txExplain = tx.explainTransaction();
|
|
174
185
|
const txJson = tx.toJson();
|
|
175
186
|
(0, assert_1.default)(txExplain.outputAmount === testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.stakeAmount);
|
|
187
|
+
txExplain.inputs[0].id.should.equal('WyjYJHa7Ye1KMsBZiQ8hQJzY7YYxTJTTyMkxcVrKRDiNytTY8:0');
|
|
188
|
+
txExplain.inputs[1].id.should.equal('WyjYJHa7Ye1KMsBZiQ8hQJzY7YYxTJTTyMkxcVrKRDiNytTY8:1');
|
|
189
|
+
txExplain.inputs[2].id.should.equal('s92SjoZQemgG97HocX9GgyFy6ZKmapgcgqQ3y5J2uwP3qWBUy:0');
|
|
176
190
|
(0, assert_1.default)(txJson.outputs[0].value === testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.stakeAmount);
|
|
177
191
|
tx.type.should.equal(sdk_core_1.TransactionType.AddPermissionlessValidator);
|
|
178
192
|
console.log(tx.toBroadcastFormat());
|
|
@@ -288,5 +302,30 @@ describe('AvaxP permissionlessValidatorTxBuilder', () => {
|
|
|
288
302
|
console.log(fullSignedTx.toJson());
|
|
289
303
|
});
|
|
290
304
|
});
|
|
305
|
+
it('Should fail to build if utxos change output 0', async () => {
|
|
306
|
+
const unixNow = BigInt(Math.round(new Date().getTime() / 1000));
|
|
307
|
+
const startTime = unixNow + BigInt(60);
|
|
308
|
+
const endTime = startTime + BigInt(60 * 60 * 24 + 600);
|
|
309
|
+
const txBuilder = new AvaxpLib.TransactionBuilderFactory(statics_1.coins.get('tavaxp'))
|
|
310
|
+
.getPermissionlessValidatorTxBuilder()
|
|
311
|
+
.threshold(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.threshold)
|
|
312
|
+
.locktime(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.locktime)
|
|
313
|
+
.recoverMode(false)
|
|
314
|
+
.fromPubKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.bitgoAddresses)
|
|
315
|
+
.startTime(startTime.toString())
|
|
316
|
+
.endTime(endTime.toString())
|
|
317
|
+
.stakeAmount(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.stakeAmountNoOutput)
|
|
318
|
+
.delegationFeeRate(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.delegationFeeRate)
|
|
319
|
+
.nodeID(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.nodeId)
|
|
320
|
+
.blsPublicKey(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsPublicKey)
|
|
321
|
+
.blsSignature(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.blsSignature)
|
|
322
|
+
.utxos(testData.BUILD_AND_SIGN_ADD_PERMISSIONLESS_VALIDATOR_SAMPLE.utxos);
|
|
323
|
+
const tx = await txBuilder.build();
|
|
324
|
+
const txJson = tx.toJson();
|
|
325
|
+
const txExplain = tx.explainTransaction();
|
|
326
|
+
txJson.changeOutputs.length.should.equal(0);
|
|
327
|
+
txExplain.changeOutputs.length.should.equal(0);
|
|
328
|
+
txExplain.changeAmount.should.equal('0');
|
|
329
|
+
});
|
|
291
330
|
});
|
|
292
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEM7QUFDMUMsOENBQWlHO0FBQ2pHLDhDQUEwRDtBQUMxRCw0Q0FBdUM7QUFDdkMsb0RBQTRCO0FBQzVCLHNDQUE2QztBQUM3QywyREFBNkM7QUFDN0MsMENBQTZEO0FBQzdELHdHQUFxRztBQUNyRyxnRUFBa0Q7QUFDbEQsNENBQTRDO0FBRTVDLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7SUFDdEQsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLEtBQW1CLENBQUM7SUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFbkUsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNWLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFlBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7UUFDcEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxD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RCxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztZQUN0RyxNQUFNLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUV2RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2pELFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDckcsTUFBTSxZQUFZLEdBQUcsTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby9zZGstYXBpJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgQXZheFAsIFRhdmF4UCB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyBBdmF4cExpYiBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9wZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcic7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvYXZheHAnO1xuLy8gaW1wb3J0IHsgcHZtIH0gZnJvbSAnQGJpdGdvL2F2YWxhbmNoZWpzJztcblxuZGVzY3JpYmUoJ0F2YXhQIHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyJywgKCkgPT4ge1xuICBsZXQgYmFzZWNvaW47XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSk7XG5cbiAgYmVmb3JlKCgpID0+IHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwge1xuICAgICAgZW52OiAnbW9jaycsXG4gICAgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdhdmF4cCcsIEF2YXhQLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RhdmF4cCcsIFRhdmF4UC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0YXZheHAnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjcmVhdGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmcm9tIGhleCcsICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuaGFsZlNpZ25lZFR4KTtcbiAgICB0eEJ1aWxkZXIuc2hvdWxkLmJlLmFuLmluc3RhbmNlT2YoUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gcmVhZGFibGUnLCAoKSA9PiB7XG4gICAgbGV0IHR4OiBCYXNlVHJhbnNhY3Rpb247XG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLmZ1bGxzaWdudHhIZXhcbiAgICAgICk7XG4gICAgICB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBqc29uIHN0cmluZ2lmaXkgYWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGFzc2VydCh0eXBlb2YgSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpLCAnc3RyaW5nJyk7XG4gICAgICB0eEpzb24uaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLnR4aWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBnZXQgYSB0eGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgdHguaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLnR4aWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGV4cGxhaW5zIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSBTaWduZWQgQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIC8vIGh0dHBzOi8vdGVzdG5ldC5zbm93dHJhY2UuaW8vcHZtL3R4LzJ0dDNLRTZnQUc3cXBNTEw2eG95blN5azdodDRlZ1E3NHdjRjdBdUdtMjV2UTNRTldCP2NoYWluSWQ9NDMxMTNcbiAgICAgICAgJzB4MDAwMDAwMDAwMDE5MDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDBiYWViOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDNhYzAzYzBjYTcxYTFkZGU4NDcwMmQyNzJmYmRkMDg2MDAxODY3MDEyNDJlMTlhZDlhNjE3ZmI5NWRjZjg4NDNhZGU2NmUwNmU1NzhmNTQ5YThiZTU0ZjAxNmFiNzQ4MTI3YWIxYTE4NDYyNmNiYTQ0Yzc0OGExZWUwMDAwMDAwMjRmMTk0ZDhlMDY2YjExZGZlOTJmNTkzY2ZhNWMyZmExYWU0NTA5MjdlY2Q1YjA5Mzk1MmU2MTgzNGY0ZDhhYTQwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwMjNhNGMxODAwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMTRmMTk0ZDhlMDY2YjExZGZlOTJmNTkzY2ZhNWMyZmExYWU0NTA5MjdlY2Q1YjA5Mzk1MmU2MTgzNGY0ZDhhYTQwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwMjNhNGMxODAwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwOTRhOGI4MTc5ZjBiNmU3ZTdjZTU1YjRkNmVjNWFkNTZkYWUxZGU5ZjAwMDAwMDAwNjJiYjAzZTYwMDAwMDAwMDYyZTMyNTU2MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxYzhmOTU0MjNmNzE0MmQwMGE0OGUxMDE0YTNkZThkMjg5MDdkNDIwZGMzM2IzMDUyYTZkZWUwM2EzZjI5NDFhMzkzYzIzNTFlMzU0NzA0Y2E2NmEzZmMyOTg3MDI4MmUxNTg2YTNhYjRjNDVjZmUzMWNhZTM0YzFkMDZmMjEyNDM0YWM3MWIxYmU2Y2ZlMDQ2YzgwYzE2MmUwNTc2MTRhOTRhNWJjOWYxZGVkMWE3MDI5ZGViMGJhNGNhN2M5YjcxNDExZTI5MzQzODY5MWJlNzljMmRiZjE5ZDFjYTdjM2VhZGI5Yzc1NjI0NmZjNWRlNWI3Yjg5NTExYzdkNzMwMmFlMDUxZDllMDNkNzk5MTEzODI5OWI1ZWQ2YTU3MGE5ODAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA3MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzYWMwM2MwY2E3MWExZGRlODQ3MDJkMjcyZmJkZDA4NjAwMTg2NzAxMjQyZTE5YWQ5YTYxN2ZiOTVkY2Y4ODQzYWRlNjZlMDZlNTc4ZjU0OWE4YmU1NGYwMTZhYjc0ODEyN2FiMWExODQ2MjZjYmE0NGM3NDhhMWVlMDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwM2FjMDNjMGNhNzFhMWRkZTg0NzAyZDI3MmZiZGQwODYwMDE4NjcwMTI0MmUxOWFkOWE2MTdmYjk1ZGNmODg0M2FkZTY2ZTA2ZTU3OGY1NDlhOGJlNTRmMDE2YWI3NDgxMjdhYjFhMTg0NjI2Y2JhNDRjNzQ4YTFlZTAwMDAwMDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDNhYzAzYzBjYTcxYTFkZGU4NDcwMmQyNzJmYmRkMDg2MDAxODY3MDEyNDJlMTlhZDlhNjE3ZmI5NWRjZjg4NDNhZGU2NmUwNmU1NzhmNTQ5YThiZTU0ZjAxNmFiNzQ4MTI3YWIxYTE4NDYyNmNiYTQ0Yzc0OGExZWUwMDAzMGQ0MDAwMDAwMDAyMDAwMDAwMDkwMDAwMDAwMmI2MzFlOTU1M2E4NzIxOTc4YmZmZWQzZTc3OGRlN2ViOTA0ZTE2NzU5OWMxZDI2ZDVhOGQzYzQ2MTU4ZGY2NjExNjRjNmNhNjAyOWYyNDk4ODAyMGNjZmNkNjczZTVjMTk4MTdmZjc0ZDAxMjY1MWYyNDVkMDA5YTc0OTU5MTE2MDE3MGVhZTczZDdlMTliMDQ1NjcxZDQxMDUwYjExNzkxNjQzNTY3ZDFiYzljYzUxZmEyMjZkMmJlOTVhNjU2ODlmMTljZGEwNmEyNDJhOTc0OWY2YTE1MGZjYzJhNWI1MGFmMTJhMWJjMzU2NGQxYjc2YWMxZTM4MjZiNWUyMTM2MTAxMDAwMDAwMDkwMDAwMDAwMmI2MzFlOTU1M2E4NzIxOTc4YmZmZWQzZTc3OGRlN2ViOTA0ZTE2NzU5OWMxZDI2ZDVhOGQzYzQ2MTU4ZGY2NjExNjRjNmNhNjAyOWYyNDk4ODAyMGNjZmNkNjczZTVjMTk4MTdmZjc0ZDAxMjY1MWYyNDVkMDA5YTc0OTU5MTE2MDE3MGVhZTczZDdlMTliMDQ1NjcxZDQxMDUwYjExNzkxNjQzNTY3ZDFiYzljYzUxZmEyMjZkMmJlOTVhNjU2ODlmMTljZGEwNmEyNDJhOTc0OWY2YTE1MGZjYzJhNWI1MGFmMTJhMWJjMzU2NGQxYjc2YWMxZTM4MjZiNWUyMTM2MTAxJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubm9kZUlEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSBTaWduZWQgQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCBmcm9tIHJhdycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG9sZEhleCA9XG4gICAgICAgICcweDAwMDAwMDAwMDAxOTAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA3MDAwMDAwMDAxY2JhYmM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzNzA4NmZiYzM2NzE3YzdhNDA3YmRiMTk4YmQ3OTI1Mjk2NzI3ZDZiOTc1NjUyODU0MDllMjAwZmRjNjdjN2I2Mzc1OWI1YWQyOWJmMDFmYzJiNDcxZDU0ZTU4ZTRjNWZhZGVlNjIyYWJkNjYzYmViYWQzYWQ2MzcyMDAwMDAwMDI2NGQ5YjVlYWI4YzRhMWEyNWJmYTllM2UxYTYwZDc4ZjFhZTg4ZTczNTJlMjJlZjkwMTA3NjQ4YjczOGEzMGUzMDAwMDAwMDAzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDUwMDAwMDAwMDNiNmQwMzQwMDAwMDAwMDIwMDAwMDAwMTAwMDAwMDAyNmNjYjJhNGZlYTI4MWE4NzM3ZDMzYjI1MzVlZTNmNzA1MThiMzU0YzkxZjBhZGNmYWE3MGU0NTljNGIxODgxYzAwMDAwMDAwM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA1MDAwMDAwMDAxY2U4ODM0MDAwMDAwMDAyMDAwMDAwMDEwMDAwMDAwMjAwMDAwMDAwMTI5YTI3MWZmNDA3YjExMDFmMzVhZWM4MmEyZjcxNWM1MjM5YmQzOTAwMDAwMDAwNjYwZjE3ZGUwMDAwMDAwMDY2MTA2YmI2MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxY2FkOWU5NDc2YjcwMWVkZWM4OGU1M2IxYzMxNDQ1NjA1M2IzY2Y4NDZhMTE5MjExNzg3MmU0MTQ1NWY0NDBjMDc0ZDZlZTg5NTMwZDQ1ZTg4Zjc5YWMwZWRhMDZmMjg4N2E5NGQ2MTgyZWRiZDk1MzUxNmIyNjJmMTc1NjVhNjVkOThmNTc0MTU0OWNkNzBkMjQyM2FiZmY3NTBiYjRiOGQ5ODJkNDgyMzc2YjE4OTE0MmZmOGFhNDcwNTYxNWZlZTE0YmU2MTc0NjEwODYwZTljMDAzYWE0YWVhYTYxM2IxNzMyYWJmM2NkMGM5YzQyZmE1ODU2MzQ1NjQ0MDY4YzBkMWY5ZmExZDlhZjMyZTIwYjE0ZmNhMDI5ODMyNjBiYzAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA3MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzNzA4NmZiYzM2NzE3YzdhNDA3YmRiMTk4YmQ3OTI1Mjk2NzI3ZDZiOTc1NjUyODU0MDllMjAwZmRjNjdjN2I2Mzc1OWI1YWQyOWJmMDFmYzJiNDcxZDU0ZTU4ZTRjNWZhZGVlNjIyYWJkNjYzYmViYWQzYWQ2MzcyMDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzcwODZmYmMzNjcxN2M3YTQwN2JkYjE5OGJkNzkyNTI5NjcyN2Q2Yjk3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyYjQ3MWQ1NGU1OGU0YzVmYWRlZTYyMmFiZDY2M2JlYmFkM2FkNjM3MjAwMDAwMDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM3MDg2ZmJjMzY3MTdjN2E0MDdiZGIxOThiZDc5MjUyOTY3MjdkNmI5NzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMmI0NzFkNTRlNThlNGM1ZmFkZWU2MjJhYmQ2NjNiZWJhZDNhZDYzNzIwMDAwNGUyMDAwMDAwMDAyMDAwMDAwMDkwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1NjUyODU0MDllMjAwZmRjNjdjN2I2Mzc1OWI1YWQyOWJmMDFmYzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1NjUyODU0MDllMjAwZmRjNjdjN2I2Mzc1OWI1YWQyOWJmMDFmYzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDdiZWNkYTknO1xuICAgICAgY29uc3Qgc29ydGVkQnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20ob2xkSGV4KTtcbiAgICAgIGNvbnN0IHNvcnRlZFR4ID0gYXdhaXQgc29ydGVkQnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gc29ydGVkVHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICAvLyB0aGlzIHR4IGlzIHNvcnRlZCBhbmQgY2FuIGJlIGJyb2FkY2FzdGVkXG4gICAgICBjb25zdCBuZXdIZXggPSBzb3J0ZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgYXNzZXJ0KG5ld0hleCA9PT0gb2xkSGV4KTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwoJ05vZGVJRC0yaE1xQlFkalpNV2RIdll1N1pQTEEyQ21yQWRiVHZwR2YnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4IHdpdGggMSBpbnB1dCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgICcweDAwMDAwMDAwMDAxOTAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA3MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzMmEwMDgzOTU1MGY3NWVlODg3OWNhY2Q5N2ZmMzUwYTUxZDQ3YWUxNGRiOTQzMzVmMmY2NjhiOTcwN2M3ODkwM2MzYjVhYzU0YzZmNDA1NDc4M2M0YTZlY2Q1YjE4ZmEwNzY5MmQzNWVlNGMzZjhiNzRkNDI1NzIxMDAwMDAwMDE0ZjE5NGQ4ZTA2NmIxMWRmZTkyZjU5M2NmYTVjMmZhMWFlNDUwOTI3ZWNkNWIwOTM5NTJlNjE4MzRmNGQ4YWE0MDAwMDAwMDAzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDUwMDAwMDAwMDc3MzU5NDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDBlMjVjOWEwOWViOWM2OGQ0ODA3YTM5Zjk3ODkzZmFjZDlhNmE3ZGExMDAwMDAwMDA2NjBkNzUwOTAwMDAwMDAwNjYwZWM2ODkwMDAwMDAwMDNiOWFjYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFjOGY5NTQyM2Y3MTQyZDAwYTQ4ZTEwMTRhM2RlOGQyODkwN2Q0MjBkYzMzYjMwNTJhNmRlZTAzYTNmMjk0MWEzOTNjMjM1MWUzNTQ3MDRjYTY2YTNmYzI5ODcwMjgyZTE1ODZhM2FiNGM0NWNmZTMxY2FlMzRjMWQwNmYyMTI0MzRhYzcxYjFiZTZjZmUwNDZjODBjMTYyZTA1NzYxNGE5NGE1YmM5ZjFkZWQxYTcwMjlkZWIwYmE0Y2E3YzliNzE0MTFlMjkzNDM4NjkxYmU3OWMyZGJmMTlkMWNhN2MzZWFkYjljNzU2MjQ2ZmM1ZGU1YjdiODk1MTFjN2Q3MzAyYWUwNTFkOWUwM2Q3OTkxMTM4Mjk5YjVlZDZhNTcwYTk4MDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDNiOWFjYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDMyYTAwODM5NTUwZjc1ZWU4ODc5Y2FjZDk3ZmYzNTBhNTFkNDdhZTE0ZGI5NDMzNWYyZjY2OGI5NzA3Yzc4OTAzYzNiNWFjNTRjNmY0MDU0NzgzYzRhNmVjZDViMThmYTA3NjkyZDM1ZWU0YzNmOGI3NGQ0MjU3MjEwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzMmEwMDgzOTU1MGY3NWVlODg3OWNhY2Q5N2ZmMzUwYTUxZDQ3YWUxNGRiOTQzMzVmMmY2NjhiOTcwN2M3ODkwM2MzYjVhYzU0YzZmNDA1NDc4M2M0YTZlY2Q1YjE4ZmEwNzY5MmQzNWVlNGMzZjhiNzRkNDI1NzIxMDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzJhMDA4Mzk1NTBmNzVlZTg4NzljYWNkOTdmZjM1MGE1MWQ0N2FlMTRkYjk0MzM1ZjJmNjY4Yjk3MDdjNzg5MDNjM2I1YWM1NGM2ZjQwNTQ3ODNjNGE2ZWNkNWIxOGZhMDc2OTJkMzVlZTRjM2Y4Yjc0ZDQyNTcyMTAwMDMwZDQwMDAwMDAwMDEwMDAwMDAwOTAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZGI5NDMzNWYyZjY2OGI5NzA3Yzc4OTAzYzNiNWFjNTRjNmY0MDU0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzYzU1NDNiMCdcbiAgICAgICk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCdOb2RlSUQtTWR0ZVM5VTk4N1BZN2l3QTVQY3ozc0tWcHJKQWJBdkU3Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW5zIGEgSGFsZiBTaWduZWQgQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLmhhbGZzaWdudHhIZXhcbiAgICAgICk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5ub2RlSUQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWlucyBhIHVuc2lnbmVkIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKFxuICAgICAgICB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy51bnNpZ25lZFR4SGV4XG4gICAgICApO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubm9kZUlEKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NpZ24gVHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGFuIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yIHRyYW5zYWN0aW9uIGFuZCBicm9hZGNhc3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvKlxuXG4gICAgY29uc3Qga2V5TWFwcGluZzogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgIGY0NWQxYzliZjU3ZDNjMDIyOTlhNzI3ZDZlNWQ4ZDRlNzY0OTg4NDZiMWEyODliNGUzMWEyZWNjY2JjMjEyZmI6IHtcbiAgICAgICAgc291cmNlOiAndXNlcicsXG4gICAgICAgIGVuY29kZWQ6ICdCaGpFemFYTVNGajRhUUJodzI3RHNuNzNiOHJSOWdDVFgnLFxuICAgICAgICBwdWI6ICcwMmFiYjQ1MWMwY2MyNDBlOWE0ZmI5N2ExMzA4NDZkOTBhODcyNDcyNjRlNTcwMTRlNDFkYzIyNmViZjQ5NjU3MjQnLFxuICAgICAgICBwcnY6ICdmNDVkMWM5YmY1N2QzYzAyMjk5YTcyN2Q2ZTVkOGQ0ZTc2NDk4ODQ2YjFhMjg5YjRlMzFhMmVjY2NiYzIxMmZiJyxcbiAgICAgICAgYWRkcmVzczogJ1AtZnVqaTF3NGpqczRxZnVncTBtM251MGQzaHR4NjY2MmRscTg3enE1bnozMycsXG4gICAgICB9LFxuICAgICAgJzJlMGZmZTZlZmJmY2MyN2U5YWFmNGJjZTZhZjc4ZDRjNjZlODliMDk1NWI4NWYwMmQ3ZTE1OTEwZTE2ZWQ0Y2QnOiB7XG4gICAgICAgIHNvdXJjZTogJ2JhY2t1cCcsXG4gICAgICAgIGVuY29kZWQ6ICdCRnpQSk5pZnFkZjZaOEgyUDc2Z1RFYmQ4Um1Dak1TekwnLFxuICAgICAgICBwdWI6ICcwMjU1MjNmYTQ4YTViMGM4ZWQ0YTgzNDRhYWI4Mzk2MDYxZmI0MmNiNGYxNjhiYTVkM2FlMTlmMDM0YzRlYTJkNGQnLFxuICAgICAgICBwcnY6ICcyZTBmZmU2ZWZiZmNjMjdlOWFhZjRiY2U2YWY3OGQ0YzY2ZTg5YjA5NTViODVmMDJkN2UxNTkxMGUxNmVkNGNkJyxcbiAgICAgICAgYWRkcmVzczogJ1AtZnVqaTF3enIwaHNtOHpscjZncGFha3h2dDY3Zjk5OW5qMDQ0ZXRlMDd1dycsXG4gICAgICB9LFxuICAgICAgJzVhMzYwYzg0ODAyMTAyNDUyOGRmYzAyZTc5YmE0NDFmMTcyN2M3NjViNGQwZGNlYzI4OGZmYmQyNzcyY2Q0MzInOiB7XG4gICAgICAgIHNvdXJjZTogJ2JpdGdvJyxcbiAgICAgICAgZW5jb2RlZDogJ0hUNnpvU2VjWXlxSlg2M0hxYWoxdXN2eXFKYnJuYzhpYScsXG4gICAgICAgIHB1YjogJzAzZDcxY2RhM2IxYzMyZWVkMDQ0ODY2ZWM5NmMyYWM1NGFmNDNlN2VkYjhmMTUzNWRmNTFmMzQxZTQ5Njc0ZmZhYScsXG4gICAgICAgIHBydjogJzVhMzYwYzg0ODAyMTAyNDUyOGRmYzAyZTc5YmE0NDFmMTcyN2M3NjViNGQwZGNlYzI4OGZmYmQyNzcyY2Q0MzInLFxuICAgICAgICBhZGRyZXNzOiAnUC1mdWppMWszY2EybmpjdW56bDRoaHh5MjRhdmNhN2h0ZjY2Y21qanVrbDBuJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICAgICAqL1xuICAgICAgY29uc3QgdW5peE5vdyA9IEJpZ0ludChNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkpO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gdW5peE5vdyArIEJpZ0ludCg2MCk7XG4gICAgICBjb25zdCBlbmRUaW1lID0gc3RhcnRUaW1lICsgQmlnSW50KDYwICogNjAgKiAyNCArIDYwMCk7IC8vIDI0IGhvdXJzICsgMTAgbWludXRlc1xuXG4gICAgICAvLyBjb25zdCBBVkFYX1BVQkxJQ19VUkwgPSAnaHR0cHM6Ly9hcGkuYXZheC10ZXN0Lm5ldHdvcmsnO1xuICAgICAgLy8gY29uc3QgcHZtYXBpID0gbmV3IHB2bS5QVk1BcGkoQVZBWF9QVUJMSUNfVVJMKTtcbiAgICAgIC8vIGNvbnN0IHsgdXR4b3MgfSA9IGF3YWl0IHB2bWFwaS5nZXRVVFhPcyh7XG4gICAgICAvLyAgIGFkZHJlc3NlczogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYml0Z29BZGRyZXNzZXMsXG4gICAgICAvLyB9KTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHV0eG9zKTtcblxuICAgICAgY29uc3QgcmVjb3ZlcnlNb2RlID0gZmFsc2U7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKVxuICAgICAgICAuZ2V0UGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnRocmVzaG9sZClcbiAgICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgICAucmVjb3Zlck1vZGUocmVjb3ZlcnlNb2RlKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgICAgLnN0YXJ0VGltZShzdGFydFRpbWUudG9TdHJpbmcoKSlcbiAgICAgICAgLmVuZFRpbWUoZW5kVGltZS50b1N0cmluZygpKVxuICAgICAgICAuc3Rha2VBbW91bnQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuc3Rha2VBbW91bnQpXG4gICAgICAgIC5kZWxlZ2F0aW9uRmVlUmF0ZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5kZWxlZ2F0aW9uRmVlUmF0ZSlcbiAgICAgICAgLm5vZGVJRCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5ub2RlSWQpXG4gICAgICAgIC5ibHNQdWJsaWNLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYmxzUHVibGljS2V5KVxuICAgICAgICAuYmxzU2lnbmF0dXJlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJsc1NpZ25hdHVyZSlcbiAgICAgICAgLnV0eG9zKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnV0eG9zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgYXNzZXJ0KHR4RXhwbGFpbi5vdXRwdXRBbW91bnQgPT09IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnN0YWtlQW1vdW50KTtcbiAgICAgIGFzc2VydCh0eEpzb24ub3V0cHV0c1swXS52YWx1ZSA9PT0gdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuc3Rha2VBbW91bnQpO1xuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yKTtcbiAgICAgIGNvbnNvbGUubG9nKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSlcbiAgICAgICAgLmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSlcbiAgICAgICAgLnJlY292ZXJNb2RlKGZhbHNlKTtcbiAgICAgIGNvbnN0IHR4MiA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcbiAgICAgIHR4Mi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IpO1xuICAgICAgLy8gVGVzdCBzaWduIHdpdGggdXNlciBrZXlcbiAgICAgIHR4QnVpbGRlcjIuc2lnbih7IGtleTogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUudXNlclByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBoYWxmU2lnbmVkID0gYXdhaXQgdHhCdWlsZGVyMi5idWlsZCgpO1xuICAgICAgY29uc3QgaGFsZlNpZ25lZFR4SGV4ID0gaGFsZlNpZ25lZC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgYXNzZXJ0KHR4QnVpbGRlclsnX3N0YWtlQW1vdW50J10gPT09IHR4QnVpbGRlcjJbJ19zdGFrZUFtb3VudCddKTtcbiAgICAgIGNvbnNvbGUubG9nKGhhbGZTaWduZWRUeEhleCk7XG5cbiAgICAgIC8vIGNvbnN0IHR4QnVpbGRlcjIgPSBmYWN0b3J5LmZyb20oaGFsZlNpZ25lZFR4SGV4KTtcbiAgICAgIC8vIHR4QnVpbGRlcjIuc2lnbih7IGtleTogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYmFja3VwUHJpdmF0ZUtleSB9KTtcbiAgICAgIC8vIGNvbnN0IGZ1bGxTaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGZ1bGxTaWduZWRUeC50b0pzb24oKSk7XG5cbiAgICAgIC8vIGNvbnN0IHJlcyA9IGF3YWl0IHB2bWFwaS5pc3N1ZVR4KHsgdHg6IGZ1bGxTaWduZWRUeC50b0Jyb2FkY2FzdEZvcm1hdCgpIH0pO1xuICAgICAgLy8gY29uc3QgdHhTaWduZWQgPVxuICAgICAgLy8gICAnMHgwMDAwMDAwMDAwMTkwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwMDVjODFhNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzcwODZmYmMzNjcxN2M3YTQwN2JkYjE5OGJkNzkyNTI5NjcyN2Q2Yjk3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyYjQ3MWQ1NGU1OGU0YzVmYWRlZTYyMmFiZDY2M2JlYmFkM2FkNjM3MjAwMDAwMDAyNDQxMWFmOWQ5ODc3YzUyYzFiZTNmNzc4MjVhNzRjYTExODY5MTI4NDc4YzQxNDU5MTBlOTI2OTVhMjRjN2Q4MDAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA1MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAyMDAwMDAwMDEwMDAwMDAwMjcxZDg2NDRjOTE5OWUzMGI5ZmVmNTNhZjU2YWVmMjQzZTU0MzFjNmIxYjA5ZDVmMTFhNjYyMmM4NmRiM2YzOWQwMDAwMDAwMDNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwMDVjODFhNDAwMDAwMDAwMjAwMDAwMDAxMDAwMDAwMDIwMDAwMDAwMDEyOWEyNzFmZjQwN2IxMTAxZjM1YWVjODJhMmY3MTVjNTIzOWJkMzkwMDAwMDAwMDY2MGY0YWI1MDAwMDAwMDA2NjEwOWU4ZDAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWNhZDllOTQ3NmI3MDFlZGVjODhlNTNiMWMzMTQ0NTYwNTNiM2NmODQ2YTExOTIxMTc4NzJlNDE0NTVmNDQwYzA3NGQ2ZWU4OTUzMGQ0NWU4OGY3OWFjMGVkYTA2ZjI4ODdhOTRkNjE4MmVkYmQ5NTM1MTZiMjYyZjE3NTY1YTY1ZDk4ZjU3NDE1NDljZDcwZDI0MjNhYmZmNzUwYmI0YjhkOTgyZDQ4MjM3NmIxODkxNDJmZjhhYTQ3MDU2MTVmZWUxNGJlNjE3NDYxMDg2MGU5YzAwM2FhNGFlYWE2MTNiMTczMmFiZjNjZDBjOWM0MmZhNTg1NjM0NTY0NDA2OGMwZDFmOWZhMWQ5YWYzMmUyMGIxNGZjYTAyOTgzMjYwYmMwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzcwODZmYmMzNjcxN2M3YTQwN2JkYjE5OGJkNzkyNTI5NjcyN2Q2Yjk3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyYjQ3MWQ1NGU1OGU0YzVmYWRlZTYyMmFiZDY2M2JlYmFkM2FkNjM3MjAwMDAwMDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM3MDg2ZmJjMzY3MTdjN2E0MDdiZGIxOThiZDc5MjUyOTY3MjdkNmI5NzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMmI0NzFkNTRlNThlNGM1ZmFkZWU2MjJhYmQ2NjNiZWJhZDNhZDYzNzIwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzNzA4NmZiYzM2NzE3YzdhNDA3YmRiMTk4YmQ3OTI1Mjk2NzI3ZDZiOTc1NjUyODU0MDllMjAwZmRjNjdjN2I2Mzc1OWI1YWQyOWJmMDFmYzJiNDcxZDU0ZTU4ZTRjNWZhZGVlNjIyYWJkNjYzYmViYWQzYWQ2MzcyMDAwMzBkNDAwMDAwMDAwMjAwMDAwMDA5MDAwMDAwMDIyOGE1OTQyMDk3MTk1M2FhNjFiNGI0YzkwYjkzNGVmNzZlNmU5YzhhZDI1NmU5NDE3ZTlhNmI1MDE3ZDgzNjgxM2IyYjVjYWQyYTg5MGM2NmM4Mjk1ZjEwNGQ3NDE5MmM0OTY0Y2YyODllMmE0NWFkYjU3YTdiMDViNWU5NTI5ZTAwNGVjMmRhZTVjNDhiYTZmYTRkMWUwYjFjNmI5ZDliYmU3OWM0ODFmZjE2ODQ4YzFmYTNmYTNhNmVkNDc0MzFhMTJhZjRiMmQ5Nzc5YmIxOTJiYjNmMjU0NDA4NzMxNzk4YjUwYzhmMDNmMjViN2U3ZDczMTM3Mzg4OTJlNzFkNjYwMTAwMDAwMDA5MDAwMDAwMDIyOGE1OTQyMDk3MTk1M2FhNjFiNGI0YzkwYjkzNGVmNzZlNmU5YzhhZDI1NmU5NDE3ZTlhNmI1MDE3ZDgzNjgxM2IyYjVjYWQyYTg5MGM2NmM4Mjk1ZjEwNGQ3NDE5MmM0OTY0Y2YyODllMmE0NWFkYjU3YTdiMDViNWU5NTI5ZTAwNGVjMmRhZTVjNDhiYTZmYTRkMWUwYjFjNmI5ZDliYmU3OWM0ODFmZjE2ODQ4YzFmYTNmYTNhNmVkNDc0MzFhMTJhZjRiMmQ5Nzc5YmIxOTJiYjNmMjU0NDA4NzMxNzk4YjUwYzhmMDNmMjViN2U3ZDczMTM3Mzg4OTJlNzFkNjYwMTUxYWEyOTFmJztcbiAgICAgIC8vIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20odHgpO1xuICAgICAgLy8gY29uc3QgZGVjb2RlID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhkZWNvZGUudG9Kc29uKCkpO1xuXG4gICAgICAvLyBjb25zdCByZXMgPSBhd2FpdCBwdm1hcGkuaXNzdWVUeCh7IHR4OiB0eFNpZ25lZCB9KTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHJlcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYW5kIHNpZ24gYW4gQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZWNvdmVyeU1vZGUgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpXG4gICAgICAgIC5nZXRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgICAucmVjb3Zlck1vZGUocmVjb3ZlcnlNb2RlKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJpdGdvQWRkcmVzc2VzKVxuICAgICAgICAuc3RhcnRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUuc3RhcnRUaW1lKVxuICAgICAgICAuZW5kVGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmVuZFRpbWUpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnN0YWtlQW1vdW50KVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5kZWxlZ2F0aW9uRmVlUmF0ZSlcbiAgICAgICAgLm5vZGVJRCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLmJsc1B1YmxpY0tleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJsc1B1YmxpY0tleSlcbiAgICAgICAgLmJsc1NpZ25hdHVyZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJsc1NpZ25hdHVyZSlcbiAgICAgICAgLnV0eG9zKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUudXR4b3MpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcik7XG5cbiAgICAgIC8vIFRlc3Qgc2lnbiB3aXRoIHVzZXIga2V5XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS51c2VyUHJpdmF0ZUtleSB9KTtcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJhY2t1cFByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBmdWxsU2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxTaWduZWRUeC50b0pzb24oKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYW5kIHNpZ24gYSB0cmFuc2FjdGlvbiBpbiByZWNvdmVyeSBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3ZlcnlNb2RlID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpXG4gICAgICAgIC5nZXRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgICAucmVjb3Zlck1vZGUocmVjb3ZlcnlNb2RlKVxuICAgICAgICAuZnJvbVB1YktleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJpdGdvQWRkcmVzc2VzKVxuICAgICAgICAuc3RhcnRUaW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUuc3RhcnRUaW1lKVxuICAgICAgICAuZW5kVGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmVuZFRpbWUpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnN0YWtlQW1vdW50KVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5kZWxlZ2F0aW9uRmVlUmF0ZSlcbiAgICAgICAgLm5vZGVJRCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLmJsc1B1YmxpY0tleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJsc1B1YmxpY0tleSlcbiAgICAgICAgLmJsc1NpZ25hdHVyZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJsc1NpZ25hdHVyZSlcbiAgICAgICAgLnV0eG9zKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUudXR4b3MpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgICAgbGV0IHR4SGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnVuc2lnbmVkUmF3dHhSZWNvdmVyeSk7XG5cbiAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSByZWNvdmVyeU1vZGVcbiAgICAgICAgPyB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmJhY2t1cFByaXZhdGVLZXlcbiAgICAgICAgOiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnVzZXJQcml2YXRlS2V5O1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHtcbiAgICAgICAgICB0eEhleDogdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgfSxcbiAgICAgICAgcHJ2OiBwcml2YXRlS2V5LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgaGFsZlNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgYmFzZWNvaW4uc2lnblRyYW5zYWN0aW9uKHBhcmFtcyk7XG4gICAgICB0eEhleCA9IChoYWxmU2lnbmVkVHJhbnNhY3Rpb24gYXMgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbik/LmhhbGZTaWduZWQ/LnR4SGV4O1xuICAgICAgdHhIZXguc2hvdWxkLmVxdWFsKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUuaGFsZlNpZ25lZFJhd1R4UmVjb3ZlcnkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGFuIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yIHRyYW5zYWN0aW9uIGFuZCBicm9hZGNhc3QgaW4gcmVjb3ZlcnkgbW9kZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVuaXhOb3cgPSBCaWdJbnQoTWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHVuaXhOb3cgKyBCaWdJbnQoNjApO1xuICAgICAgY29uc3QgZW5kVGltZSA9IHN0YXJ0VGltZSArIEJpZ0ludCg2MCAqIDYwICogMjQgKyA2MDApO1xuXG4gICAgICBjb25zdCByZWNvdmVyeU1vZGUgPSB0cnVlO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEF2YXhwTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSlcbiAgICAgICAgLmdldFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5sb2NrdGltZSlcbiAgICAgICAgLnJlY292ZXJNb2RlKHJlY292ZXJ5TW9kZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYml0Z29BZGRyZXNzZXMpXG4gICAgICAgIC5zdGFydFRpbWUoc3RhcnRUaW1lLnRvU3RyaW5nKCkpXG4gICAgICAgIC5lbmRUaW1lKGVuZFRpbWUudG9TdHJpbmcoKSlcbiAgICAgICAgLnN0YWtlQW1vdW50KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnN0YWtlQW1vdW50KVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuZGVsZWdhdGlvbkZlZVJhdGUpXG4gICAgICAgIC5ub2RlSUQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUubm9kZUlkKVxuICAgICAgICAuYmxzUHVibGljS2V5KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJsc1B1YmxpY0tleSlcbiAgICAgICAgLmJsc1NpZ25hdHVyZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5ibHNTaWduYXR1cmUpXG4gICAgICAgIC51dHhvcyh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS51dHhvcyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yKTtcblxuICAgICAgLy8gVGVzdCBzaWduIHdpdGggdXNlciBrZXlcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5iYWNrdXBQcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3QgaGFsZlNpZ25lZCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgaGFsZlNpZ25lZFR4SGV4ID0gaGFsZlNpZ25lZC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCB0eEJ1aWxkZXIyID0gZmFjdG9yeS5mcm9tKGhhbGZTaWduZWRUeEhleCk7XG4gICAgICB0eEJ1aWxkZXIyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnVzZXJQcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3QgZnVsbFNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyMi5idWlsZCgpO1xuICAgICAgY29uc29sZS5sb2coZnVsbFNpZ25lZFR4LnRvSnNvbigpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
331
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbGliL3Blcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEM7QUFDMUMsOENBQWlHO0FBQ2pHLDhDQUEwRDtBQUMxRCw0Q0FBdUM7QUFDdkMsb0RBQTRCO0FBQzVCLHNDQUE2QztBQUM3QywyREFBNkM7QUFDN0MsMENBQTZEO0FBQzdELHdHQUFxRztBQUNyRyxnRUFBa0Q7QUFDbEQsNENBQTRDO0FBRTVDLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7SUFDdEQsSUFBSSxRQUFRLENBQUM7SUFDYixJQUFJLEtBQW1CLENBQUM7SUFDeEIsTUFBTSxPQUFPLEdBQUcsSUFBSSwrQkFBeUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFbkUsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNWLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFO1lBQ25DLEdBQUcsRUFBRSxNQUFNO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFlBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7UUFDcEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxD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ZGstYXBpJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbiwgSGFsZlNpZ25lZEFjY291bnRUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgQXZheFAsIFRhdmF4UCB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyBBdmF4cExpYiBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9wZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcic7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvYXZheHAnO1xuLy8gaW1wb3J0IHsgcHZtIH0gZnJvbSAnQGJpdGdvL2F2YWxhbmNoZWpzJztcblxuZGVzY3JpYmUoJ0F2YXhQIHBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyJywgKCkgPT4ge1xuICBsZXQgYmFzZWNvaW47XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSk7XG5cbiAgYmVmb3JlKCgpID0+IHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwge1xuICAgICAgZW52OiAnbW9jaycsXG4gICAgfSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCdhdmF4cCcsIEF2YXhQLmNyZWF0ZUluc3RhbmNlKTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RhdmF4cCcsIFRhdmF4UC5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0YXZheHAnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBjcmVhdGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmcm9tIGhleCcsICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuaGFsZlNpZ25lZFR4KTtcbiAgICB0eEJ1aWxkZXIuc2hvdWxkLmJlLmFuLmluc3RhbmNlT2YoUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIpO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gcmVhZGFibGUnLCAoKSA9PiB7XG4gICAgbGV0IHR4OiBCYXNlVHJhbnNhY3Rpb247XG4gICAgYmVmb3JlKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLmZ1bGxzaWdudHhIZXhcbiAgICAgICk7XG4gICAgICB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBqc29uIHN0cmluZ2lmaXkgYWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGFzc2VydCh0eXBlb2YgSlNPTi5zdHJpbmdpZnkodHgudG9Kc29uKCkpLCAnc3RyaW5nJyk7XG4gICAgICB0eEpzb24uaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLnR4aWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBnZXQgYSB0eGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgdHguaWQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERF9WQUxJREFUT1JfSURfU0FNUExFLnR4aWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGV4cGxhaW5zIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSBTaWduZWQgQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpLmZyb20oXG4gICAgICAgIC8vIGh0dHBzOi8vdGVzdG5ldC5zbm93dHJhY2UuaW8vcHZtL3R4LzJ0dDNLRTZnQUc3cXBNTEw2eG95blN5azdodDRlZ1E3NHdjRjdBdUdtMjV2UTNRTldCP2NoYWluSWQ9NDMxMTNcbiAgICAgICAgJzB4MDAwMDAwMDAwMDE5MDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDBiYWViOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDNhYzAzYzBjYTcxYTFkZGU4NDcwMmQyNzJmYmRkMDg2MDAxODY3MDEyNDJlMTlhZDlhNjE3ZmI5NWRjZjg4NDNhZGU2NmUwNmU1NzhmNTQ5YThiZTU0ZjAxNmFiNzQ4MTI3YWIxYTE4NDYyNmNiYTQ0Yzc0OGExZWUwMDAwMDAwMjRmMTk0ZDhlMDY2YjExZGZlOTJmNTkzY2ZhNWMyZmExYWU0NTA5MjdlY2Q1YjA5Mzk1MmU2MTgzNGY0ZDhhYTQwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwMjNhNGMxODAwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMTRmMTk0ZDhlMDY2YjExZGZlOTJmNTkzY2ZhNWMyZmExYWU0NTA5MjdlY2Q1YjA5Mzk1MmU2MTgzNGY0ZDhhYTQwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwMjNhNGMxODAwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwOTRhOGI4MTc5ZjBiNmU3ZTdjZTU1YjRkNmVjNWFkNTZkYWUxZGU5ZjAwMDAwMDAwNjJiYjAzZTYwMDAwMDAwMDYyZTMyNTU2MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxYzhmOTU0MjNmNzE0MmQwMGE0OGUxMDE0YTNkZThkMjg5MDdkNDIwZGMzM2IzMDUyYTZkZWUwM2EzZjI5NDFhMzkzYzIzNTFlMzU0NzA0Y2E2NmEzZmMyOTg3MDI4MmUxNTg2YTNhYjRjNDVjZmUzMWNhZTM0YzFkMDZmMjEyNDM0YWM3MWIxYmU2Y2ZlMDQ2YzgwYzE2MmUwNTc2MTRhOTRhNWJjOWYxZGVkMWE3MDI5ZGViMGJhNGNhN2M5YjcxNDExZTI5MzQzODY5MWJlNzljMmRiZjE5ZDFjYTdjM2VhZGI5Yzc1NjI0NmZjNWRlNWI3Yjg5NTExYzdkNzMwMmFlMDUxZDllMDNkNzk5MTEzODI5OWI1ZWQ2YTU3MGE5ODAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA3MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzYWMwM2MwY2E3MWExZGRlODQ3MDJkMjcyZmJkZDA4NjAwMTg2NzAxMjQyZTE5YWQ5YTYxN2ZiOTVkY2Y4ODQzYWRlNjZlMDZlNTc4ZjU0OWE4YmU1NGYwMTZhYjc0ODEyN2FiMWExODQ2MjZjYmE0NGM3NDhhMWVlMDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwM2FjMDNjMGNhNzFhMWRkZTg0NzAyZDI3MmZiZGQwODYwMDE4NjcwMTI0MmUxOWFkOWE2MTdmYjk1ZGNmODg0M2FkZTY2ZTA2ZTU3OGY1NDlhOGJlNTRmMDE2YWI3NDgxMjdhYjFhMTg0NjI2Y2JhNDRjNzQ4YTFlZTAwMDAwMDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDNhYzAzYzBjYTcxYTFkZGU4NDcwMmQyNzJmYmRkMDg2MDAxODY3MDEyNDJlMTlhZDlhNjE3ZmI5NWRjZjg4NDNhZGU2NmUwNmU1NzhmNTQ5YThiZTU0ZjAxNmFiNzQ4MTI3YWIxYTE4NDYyNmNiYTQ0Yzc0OGExZWUwMDAzMGQ0MDAwMDAwMDAyMDAwMDAwMDkwMDAwMDAwMmI2MzFlOTU1M2E4NzIxOTc4YmZmZWQzZTc3OGRlN2ViOTA0ZTE2NzU5OWMxZDI2ZDVhOGQzYzQ2MTU4ZGY2NjExNjRjNmNhNjAyOWYyNDk4ODAyMGNjZmNkNjczZTVjMTk4MTdmZjc0ZDAxMjY1MWYyNDVkMDA5YTc0OTU5MTE2MDE3MGVhZTczZDdlMTliMDQ1NjcxZDQxMDUwYjExNzkxNjQzNTY3ZDFiYzljYzUxZmEyMjZkMmJlOTVhNjU2ODlmMTljZGEwNmEyNDJhOTc0OWY2YTE1MGZjYzJhNWI1MGFmMTJhMWJjMzU2NGQxYjc2YWMxZTM4MjZiNWUyMTM2MTAxMDAwMDAwMDkwMDAwMDAwMmI2MzFlOTU1M2E4NzIxOTc4YmZmZWQzZTc3OGRlN2ViOTA0ZTE2NzU5OWMxZDI2ZDVhOGQzYzQ2MTU4ZGY2NjExNjRjNmNhNjAyOWYyNDk4ODAyMGNjZmNkNjczZTVjMTk4MTdmZjc0ZDAxMjY1MWYyNDVkMDA5YTc0OTU5MTE2MDE3MGVhZTczZDdlMTliMDQ1NjcxZDQxMDUwYjExNzkxNjQzNTY3ZDFiYzljYzUxZmEyMjZkMmJlOTVhNjU2ODlmMTljZGEwNmEyNDJhOTc0OWY2YTE1MGZjYzJhNWI1MGFmMTJhMWJjMzU2NGQxYjc2YWMxZTM4MjZiNWUyMTM2MTAxJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubm9kZUlEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSBTaWduZWQgQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCBhbmQgb3JkZXIgaW5wdXRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCdhdmF4cCcpKS5mcm9tKFxuICAgICAgICAvLyBodHRwczovL3Rlc3RuZXQuc25vd3RyYWNlLmlvL3B2bS90eC8ydHQzS0U2Z0FHN3FwTUxMNnhveW5TeWs3aHQ0ZWdRNzR3Y0Y3QXVHbTI1dlEzUU5XQj9jaGFpbklkPTQzMTEzXG4gICAgICAgICcweDAwMDAwMDAwMDAxOTAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjFlNjczMTdjYmM0YmUyYWViMDA2NzdhZDY0NjI3NzhhOGY1MjI3NGI5ZDYwNWRmMjU5MWIyMzAyN2E4N2RmZjAwMDAwMDA3MDAwMDAwMDA3NzM1OTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzOTNjYTkzZTRjYjNiNmMxMGQxNjdkNDFmYmFiZWI4ZTk0ZWQyZGViNWRjNzg3MzIzZDcyMmZmNDBmZGZlNTYwNDBmYjk4ZjdhZWUyMDc1ZWZmNGRkN2EzNjhkZGI2ZWY3MTMyYmZmNjkzY2JmZDliYTMwZjE3YzE4MDAwMDAwMDQ2ZjhiZGMzYzg5M2VkZDJjN2YyNGE2MTkwZDYyMzNmZGE1Y2NmNTE3ZDk2ZGQ2YzA4ZDEzNDE3OWFiYjJkMTRlMDAwMDAwMDAyMWU2NzMxN2NiYzRiZTJhZWIwMDY3N2FkNjQ2Mjc3OGE4ZjUyMjc0YjlkNjA1ZGYyNTkxYjIzMDI3YTg3ZGZmMDAwMDAwMDUwMDAwMDA0NzAzNmFhYTAwMDAwMDAwMDIwMDAwMDAwMTAwMDAwMDAyODY1Y2M4NTY4YjljNGM3ZDM2YmI5NmUwODY2MTlkOGM4NTIxOGQ2NTNmZjU2ZDA1MTMzNGY4MzllNTg5NzdjMzAwMDAwMDAyMjFlNjczMTdjYmM0YmUyYWViMDA2NzdhZDY0NjI3NzhhOGY1MjI3NGI5ZDYwNWRmMjU5MWIyMzAyN2E4N2RmZjAwMDAwMDA1MDAwMDAwMDA1ZmI1ZDU5MDAwMDAwMDAyMDAwMDAwMDEwMDAwMDAwMjg2NWNjODU2OGI5YzRjN2QzNmJiOTZlMDg2NjE5ZDhjODUyMThkNjUzZmY1NmQwNTEzMzRmODM5ZTU4OTc3YzMwMDAwMDAwMTIxZTY3MzE3Y2JjNGJlMmFlYjAwNjc3YWQ2NDYyNzc4YThmNTIyNzRiOWQ2MDVkZjI1OTFiMjMwMjdhODdkZmYwMDAwMDAwNTAwMDAwMDA3YWU2MWUzNzgwMDAwMDAwMjAwMDAwMDAxMDAwMDAwMDI4NjVjYzg1NjhiOWM0YzdkMzZiYjk2ZTA4NjYxOWQ4Yzg1MjE4ZDY1M2ZmNTZkMDUxMzM0ZjgzOWU1ODk3N2MzMDAwMDAwMDAyMWU2NzMxN2NiYzRiZTJhZWIwMDY3N2FkNjQ2Mjc3OGE4ZjUyMjc0YjlkNjA1ZGYyNTkxYjIzMDI3YTg3ZGZmMDAwMDAwMDUwMDAwMDNmZmI2ZGIzZjY5MDAwMDAwMDIwMDAwMDAwMTAwMDAwMDAyMDAwMDAwMDA5NTNjYzk1ZTg0ZjI5ZGM2ZWU3NTg5ZWY2YWNiMDFjOWQ1NjFjYmEzMDAwMDAwMDA2NjE2YzY3NTAwMDAwMDAwNjY1NjBlNzUwMDAwMDQ0ZTUxMjgwZTcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFjYTdhMmYyOWNhNTgwYzQyNTRlM2JlYWJjZTIwNDdlMDRlYThjM2M3YzY5YTU4MTdiNTQ2MWMyMjM5NTkzNTYxYTM4NDNiYzdjYjE0NTc2MzkwMzc4YjE0NTEzNTMwMTQ3OGZmOGNiNWE2NTFlM2QwODJmZDZjZDFlMTc3N2VkZWFiZDViMDkyNGNhNjQ4ZjM4OTBkODJlYmQ2MjU5YjNjY2EwMGUzMGZhYTI0OTQ4MmZlZjEwMjkzZjQyZTI4YWZiMTVmMGE1ZGQzZjM3ZTU1MjRjZDVkZTNmM2MyYjkwOWRmNDk4NzNiODE5NmFmNjAwMDRkM2YzYTg0YmFhNDZiYTA4ZGY3YmFmOGU0ODZiMGI3OWE5YzIwNzA5NWUxYTQzMDAwMDAwMDEyMWU2NzMxN2NiYzRiZTJhZWIwMDY3N2FkNjQ2Mjc3OGE4ZjUyMjc0YjlkNjA1ZGYyNTkxYjIzMDI3YTg3ZGZmMDAwMDAwMDcwMDAwMDQ0ZTUxMjgwZTcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM5M2NhOTNlNGNiM2I2YzEwZDE2N2Q0MWZiYWJlYjhlOTRlZDJkZWI1ZGM3ODczMjNkNzIyZmY0MGZkZmU1NjA0MGZiOThmN2FlZTIwNzVlZmY0ZGQ3YTM2OGRkYjZlZjcxMzJiZmY2OTNjYmZkOWJhMzBmMTdjMTgwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzOTNjYTkzZTRjYjNiNmMxMGQxNjdkNDFmYmFiZWI4ZTk0ZWQyZGViNWRjNzg3MzIzZDcyMmZmNDBmZGZlNTYwNDBmYjk4ZjdhZWUyMDc1ZWZmNGRkN2EzNjhkZGI2ZWY3MTMyYmZmNjkzY2JmZDliYTMwZjE3YzE4MDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzkzY2E5M2U0Y2IzYjZjMTBkMTY3ZDQxZmJhYmViOGU5NGVkMmRlYjVkYzc4NzMyM2Q3MjJmZjQwZmRmZTU2MDQwZmI5OGY3YWVlMjA3NWVmZjRkZDdhMzY4ZGRiNmVmNzEzMmJmZjY5M2NiZmQ5YmEzMGYxN2MxODAwMDA0ZTIwMDAwMDAwMDQwMDAwMDAwOTAwMDAwMDAyMDgzMDRlODg0MWFiOTYxNjllYTJiMjhkYzM1OGRmMzU5NDUyM2IzY2U4NzU5M2YxZjU3OWI1MWI3YmZiODQ0ZDQ5ZDY5MGY3MWVkYjRlNjUzMGI4ODAwNDM2YTRlZjczNTcwNDZhMjE1NWM1YjUyYzE1NDE0YWU3NmNhOTU2YzgwMDdiYmQ4ZGJlYTkwNzFjMWJmMTc4OGY4NTM0NzJlMDgzNjJiMWFmYWRjOWQwYTQ0MTJiMTNiMGVhNDNiNzAzZTAxMGRmMTIwNGQ4OGM2ZmUwNDg0MTQwYjFiYjkxZmRiZjdhMDMyZDI2MjQ3NWE0MTlmODA4Mjk0MTFhMDQxMTQwMDEwMDAwMDAwOTAwMDAwMDAyMDgzMDRlODg0MWFiOTYxNjllYTJiMjhkYzM1OGRmMzU5NDUyM2IzY2U4NzU5M2YxZjU3OWI1MWI3YmZiODQ0ZDQ5ZDY5MGY3MWVkYjRlNjUzMGI4ODAwNDM2YTRlZjczNTcwNDZhMjE1NWM1YjUyYzE1NDE0YWU3NmNhOTU2YzgwMDdiYmQ4ZGJlYTkwNzFjMWJmMTc4OGY4NTM0NzJlMDgzNjJiMWFmYWRjOWQwYTQ0MTJiMTNiMGVhNDNiNzAzZTAxMGRmMTIwNGQ4OGM2ZmUwNDg0MTQwYjFiYjkxZmRiZjdhMDMyZDI2MjQ3NWE0MTlmODA4Mjk0MTFhMDQxMTQwMDEwMDAwMDAwOTAwMDAwMDAyMDgzMDRlODg0MWFiOTYxNjllYTJiMjhkYzM1OGRmMzU5NDUyM2IzY2U4NzU5M2YxZjU3OWI1MWI3YmZiODQ0ZDQ5ZDY5MGY3MWVkYjRlNjUzMGI4ODAwNDM2YTRlZjczNTcwNDZhMjE1NWM1YjUyYzE1NDE0YWU3NmNhOTU2YzgwMDdiYmQ4ZGJlYTkwNzFjMWJmMTc4OGY4NTM0NzJlMDgzNjJiMWFmYWRjOWQwYTQ0MTJiMTNiMGVhNDNiNzAzZTAxMGRmMTIwNGQ4OGM2ZmUwNDg0MTQwYjFiYjkxZmRiZjdhMDMyZDI2MjQ3NWE0MTlmODA4Mjk0MTFhMDQxMTQwMDEwMDAwMDAwOTAwMDAwMDAyMDgzMDRlODg0MWFiOTYxNjllYTJiMjhkYzM1OGRmMzU5NDUyM2IzY2U4NzU5M2YxZjU3OWI1MWI3YmZiODQ0ZDQ5ZDY5MGY3MWVkYjRlNjUzMGI4ODAwNDM2YTRlZjczNTcwNDZhMjE1NWM1YjUyYzE1NDE0YWU3NmNhOTU2YzgwMDdiYmQ4ZGJlYTkwNzFjMWJmMTc4OGY4NTM0NzJlMDgzNjJiMWFmYWRjOWQwYTQ0MTJiMTNiMGVhNDNiNzAzZTAxMGRmMTIwNGQ4OGM2ZmUwNDg0MTQwYjFiYjkxZmRiZjdhMDMyZDI2MjQ3NWE0MTlmODA4Mjk0MTFhMDQxMTQwMDEyN2VmZWMwNCdcbiAgICAgICk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzBdLmlkLnNob3VsZC5lcXVhbCgncjhKVVVZRnY5TldjTmU1Y3hNRmRCUmpxa0w2Rlpld0RmMkd0a3R0bXhXQ2RlRkZNSzowJyk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzFdLmlkLnNob3VsZC5lcXVhbCgnMjJCN0dIN2ZEYXJCcXl3OFc3YXRDOEVEM2V1Vm5lZlRpRVdCUEJtYVNYckFoQVE0TGs6MCcpO1xuICAgICAgdHhFeHBsYWluLmlucHV0c1syXS5pZC5zaG91bGQuZXF1YWwoJzIyQjdHSDdmRGFyQnF5dzhXN2F0QzhFRDNldVZuZWZUaUVXQlBCbWFTWHJBaEFRNExrOjEnKTtcbiAgICAgIHR4RXhwbGFpbi5pbnB1dHNbM10uaWQuc2hvdWxkLmVxdWFsKCcyMkI3R0g3ZkRhckJxeXc4VzdhdEM4RUQzZXVWbmVmVGlFV0JQQm1hU1hyQWhBUTRMazoyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW5zIGEgU2lnbmVkIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHggZnJvbSByYXcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBvbGRIZXggPVxuICAgICAgICAnMHgwMDAwMDAwMDAwMTkwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwMWNiYWJjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzcwODZmYmMzNjcxN2M3YTQwN2JkYjE5OGJkNzkyNTI5NjcyN2Q2Yjk3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyYjQ3MWQ1NGU1OGU0YzVmYWRlZTYyMmFiZDY2M2JlYmFkM2FkNjM3MjAwMDAwMDAyNjRkOWI1ZWFiOGM0YTFhMjViZmE5ZTNlMWE2MGQ3OGYxYWU4OGU3MzUyZTIyZWY5MDEwNzY0OGI3MzhhMzBlMzAwMDAwMDAwM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA1MDAwMDAwMDAzYjZkMDM0MDAwMDAwMDAyMDAwMDAwMDEwMDAwMDAwMjZjY2IyYTRmZWEyODFhODczN2QzM2IyNTM1ZWUzZjcwNTE4YjM1NGM5MWYwYWRjZmFhNzBlNDU5YzRiMTg4MWMwMDAwMDAwMDNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwMWNlODgzNDAwMDAwMDAwMjAwMDAwMDAxMDAwMDAwMDIwMDAwMDAwMDEyOWEyNzFmZjQwN2IxMTAxZjM1YWVjODJhMmY3MTVjNTIzOWJkMzkwMDAwMDAwMDY2MGYxN2RlMDAwMDAwMDA2NjEwNmJiNjAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWNhZDllOTQ3NmI3MDFlZGVjODhlNTNiMWMzMTQ0NTYwNTNiM2NmODQ2YTExOTIxMTc4NzJlNDE0NTVmNDQwYzA3NGQ2ZWU4OTUzMGQ0NWU4OGY3OWFjMGVkYTA2ZjI4ODdhOTRkNjE4MmVkYmQ5NTM1MTZiMjYyZjE3NTY1YTY1ZDk4ZjU3NDE1NDljZDcwZDI0MjNhYmZmNzUwYmI0YjhkOTgyZDQ4MjM3NmIxODkxNDJmZjhhYTQ3MDU2MTVmZWUxNGJlNjE3NDYxMDg2MGU5YzAwM2FhNGFlYWE2MTNiMTczMmFiZjNjZDBjOWM0MmZhNTg1NjM0NTY0NDA2OGMwZDFmOWZhMWQ5YWYzMmUyMGIxNGZjYTAyOTgzMjYwYmMwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzcwODZmYmMzNjcxN2M3YTQwN2JkYjE5OGJkNzkyNTI5NjcyN2Q2Yjk3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyYjQ3MWQ1NGU1OGU0YzVmYWRlZTYyMmFiZDY2M2JlYmFkM2FkNjM3MjAwMDAwMDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM3MDg2ZmJjMzY3MTdjN2E0MDdiZGIxOThiZDc5MjUyOTY3MjdkNmI5NzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMmI0NzFkNTRlNThlNGM1ZmFkZWU2MjJhYmQ2NjNiZWJhZDNhZDYzNzIwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzNzA4NmZiYzM2NzE3YzdhNDA3YmRiMTk4YmQ3OTI1Mjk2NzI3ZDZiOTc1NjUyODU0MDllMjAwZmRjNjdjN2I2Mzc1OWI1YWQyOWJmMDFmYzJiNDcxZDU0ZTU4ZTRjNWZhZGVlNjIyYWJkNjYzYmViYWQzYWQ2MzcyMDAwMDRlMjAwMDAwMDAwMjAwMDAwMDA5MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3YmVjZGE5JztcbiAgICAgIGNvbnN0IHNvcnRlZEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKG9sZEhleCk7XG4gICAgICBjb25zdCBzb3J0ZWRUeCA9IGF3YWl0IHNvcnRlZEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHNvcnRlZFR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgLy8gdGhpcyB0eCBpcyBzb3J0ZWQgYW5kIGNhbiBiZSBicm9hZGNhc3RlZFxuICAgICAgY29uc3QgbmV3SGV4ID0gc29ydGVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGFzc2VydChuZXdIZXggPT09IG9sZEhleCk7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0QW1vdW50LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5taW5WYWxpZGF0b3JTdGFrZSk7XG4gICAgICB0eEV4cGxhaW4udHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKCdOb2RlSUQtMmhNcUJRZGpaTVdkSHZZdTdaUExBMkNtckFkYlR2cEdmJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeCB3aXRoIDEgaW5wdXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKFxuICAgICAgICAnMHgwMDAwMDAwMDAwMTkwMDAwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNzAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzJhMDA4Mzk1NTBmNzVlZTg4NzljYWNkOTdmZjM1MGE1MWQ0N2FlMTRkYjk0MzM1ZjJmNjY4Yjk3MDdjNzg5MDNjM2I1YWM1NGM2ZjQwNTQ3ODNjNGE2ZWNkNWIxOGZhMDc2OTJkMzVlZTRjM2Y4Yjc0ZDQyNTcyMTAwMDAwMDAxNGYxOTRkOGUwNjZiMTFkZmU5MmY1OTNjZmE1YzJmYTFhZTQ1MDkyN2VjZDViMDkzOTUyZTYxODM0ZjRkOGFhNDAwMDAwMDAwM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA1MDAwMDAwMDA3NzM1OTQwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwZTI1YzlhMDllYjljNjhkNDgwN2EzOWY5Nzg5M2ZhY2Q5YTZhN2RhMTAwMDAwMDAwNjYwZDc1MDkwMDAwMDAwMDY2MGVjNjg5MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxYzhmOTU0MjNmNzE0MmQwMGE0OGUxMDE0YTNkZThkMjg5MDdkNDIwZGMzM2IzMDUyYTZkZWUwM2EzZjI5NDFhMzkzYzIzNTFlMzU0NzA0Y2E2NmEzZmMyOTg3MDI4MmUxNTg2YTNhYjRjNDVjZmUzMWNhZTM0YzFkMDZmMjEyNDM0YWM3MWIxYmU2Y2ZlMDQ2YzgwYzE2MmUwNTc2MTRhOTRhNWJjOWYxZGVkMWE3MDI5ZGViMGJhNGNhN2M5YjcxNDExZTI5MzQzODY5MWJlNzljMmRiZjE5ZDFjYTdjM2VhZGI5Yzc1NjI0NmZjNWRlNWI3Yjg5NTExYzdkNzMwMmFlMDUxZDllMDNkNzk5MTEzODI5OWI1ZWQ2YTU3MGE5ODAwMDAwMDAxM2Q5YmRhYzBlZDFkNzYxMzMwY2Y2ODBlZmRlYjFhNDIxNTllYjM4N2Q2ZDI5NTBjOTZmN2QyOGY2MWJiZTJhYTAwMDAwMDA3MDAwMDAwMDAzYjlhY2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzMmEwMDgzOTU1MGY3NWVlODg3OWNhY2Q5N2ZmMzUwYTUxZDQ3YWUxNGRiOTQzMzVmMmY2NjhiOTcwN2M3ODkwM2MzYjVhYzU0YzZmNDA1NDc4M2M0YTZlY2Q1YjE4ZmEwNzY5MmQzNWVlNGMzZjhiNzRkNDI1NzIxMDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzJhMDA4Mzk1NTBmNzVlZTg4NzljYWNkOTdmZjM1MGE1MWQ0N2FlMTRkYjk0MzM1ZjJmNjY4Yjk3MDdjNzg5MDNjM2I1YWM1NGM2ZjQwNTQ3ODNjNGE2ZWNkNWIxOGZhMDc2OTJkMzVlZTRjM2Y4Yjc0ZDQyNTcyMTAwMDAwMDBiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDMyYTAwODM5NTUwZjc1ZWU4ODc5Y2FjZDk3ZmYzNTBhNTFkNDdhZTE0ZGI5NDMzNWYyZjY2OGI5NzA3Yzc4OTAzYzNiNWFjNTRjNmY0MDU0NzgzYzRhNmVjZDViMThmYTA3NjkyZDM1ZWU0YzNmOGI3NGQ0MjU3MjEwMDAzMGQ0MDAwMDAwMDAxMDAwMDAwMDkwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGRiOTQzMzVmMmY2NjhiOTcwN2M3ODkwM2MzYjVhYzU0YzZmNDA1NDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2M1NTQzYjAnXG4gICAgICApO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcik7XG4gICAgICB0eEV4cGxhaW4ub3V0cHV0c1swXS5hZGRyZXNzLnNob3VsZC5lcXVhbCgnTm9kZUlELU1kdGVTOVU5ODdQWTdpd0E1UGN6M3NLVnBySkFiQXZFNycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBleHBsYWlucyBhIEhhbGYgU2lnbmVkIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKFxuICAgICAgICB0ZXN0RGF0YS5BRERWQUxJREFUT1JfU0FNUExFUy5oYWxmc2lnbnR4SGV4XG4gICAgICApO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4RXhwbGFpbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubWluVmFsaWRhdG9yU3Rha2UpO1xuICAgICAgdHhFeHBsYWluLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRWYWxpZGF0b3IpO1xuICAgICAgdHhFeHBsYWluLm91dHB1dHNbMF0uYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMubm9kZUlEKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbnMgYSB1bnNpZ25lZCBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSkuZnJvbShcbiAgICAgICAgdGVzdERhdGEuQUREVkFMSURBVE9SX1NBTVBMRVMudW5zaWduZWRUeEhleFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEV4cGxhaW4gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm1pblZhbGlkYXRvclN0YWtlKTtcbiAgICAgIHR4RXhwbGFpbi50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkVmFsaWRhdG9yKTtcbiAgICAgIHR4RXhwbGFpbi5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKHRlc3REYXRhLkFERFZBTElEQVRPUl9TQU1QTEVTLm5vZGVJRCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTaWduIFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdidWlsZCBhbmQgc2lnbiBhbiBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvciB0cmFuc2FjdGlvbiBhbmQgYnJvYWRjYXN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLypcblxuICAgIGNvbnN0IGtleU1hcHBpbmc6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICBmNDVkMWM5YmY1N2QzYzAyMjk5YTcyN2Q2ZTVkOGQ0ZTc2NDk4ODQ2YjFhMjg5YjRlMzFhMmVjY2NiYzIxMmZiOiB7XG4gICAgICAgIHNvdXJjZTogJ3VzZXInLFxuICAgICAgICBlbmNvZGVkOiAnQmhqRXphWE1TRmo0YVFCaHcyN0RzbjczYjhyUjlnQ1RYJyxcbiAgICAgICAgcHViOiAnMDJhYmI0NTFjMGNjMjQwZTlhNGZiOTdhMTMwODQ2ZDkwYTg3MjQ3MjY0ZTU3MDE0ZTQxZGMyMjZlYmY0OTY1NzI0JyxcbiAgICAgICAgcHJ2OiAnZjQ1ZDFjOWJmNTdkM2MwMjI5OWE3MjdkNmU1ZDhkNGU3NjQ5ODg0NmIxYTI4OWI0ZTMxYTJlY2NjYmMyMTJmYicsXG4gICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxdzRqanM0cWZ1Z3EwbTNudTBkM2h0eDY2NjJkbHE4N3pxNW56MzMnLFxuICAgICAgfSxcbiAgICAgICcyZTBmZmU2ZWZiZmNjMjdlOWFhZjRiY2U2YWY3OGQ0YzY2ZTg5YjA5NTViODVmMDJkN2UxNTkxMGUxNmVkNGNkJzoge1xuICAgICAgICBzb3VyY2U6ICdiYWNrdXAnLFxuICAgICAgICBlbmNvZGVkOiAnQkZ6UEpOaWZxZGY2WjhIMlA3NmdURWJkOFJtQ2pNU3pMJyxcbiAgICAgICAgcHViOiAnMDI1NTIzZmE0OGE1YjBjOGVkNGE4MzQ0YWFiODM5NjA2MWZiNDJjYjRmMTY4YmE1ZDNhZTE5ZjAzNGM0ZWEyZDRkJyxcbiAgICAgICAgcHJ2OiAnMmUwZmZlNmVmYmZjYzI3ZTlhYWY0YmNlNmFmNzhkNGM2NmU4OWIwOTU1Yjg1ZjAyZDdlMTU5MTBlMTZlZDRjZCcsXG4gICAgICAgIGFkZHJlc3M6ICdQLWZ1amkxd3pyMGhzbTh6bHI2Z3BhYWt4dnQ2N2Y5OTluajA0NGV0ZTA3dXcnLFxuICAgICAgfSxcbiAgICAgICc1YTM2MGM4NDgwMjEwMjQ1MjhkZmMwMmU3OWJhNDQxZjE3MjdjNzY1YjRkMGRjZWMyODhmZmJkMjc3MmNkNDMyJzoge1xuICAgICAgICBzb3VyY2U6ICdiaXRnbycsXG4gICAgICAgIGVuY29kZWQ6ICdIVDZ6b1NlY1l5cUpYNjNIcWFqMXVzdnlxSmJybmM4aWEnLFxuICAgICAgICBwdWI6ICcwM2Q3MWNkYTNiMWMzMmVlZDA0NDg2NmVjOTZjMmFjNTRhZjQzZTdlZGI4ZjE1MzVkZjUxZjM0MWU0OTY3NGZmYWEnLFxuICAgICAgICBwcnY6ICc1YTM2MGM4NDgwMjEwMjQ1MjhkZmMwMmU3OWJhNDQxZjE3MjdjNzY1YjRkMGRjZWMyODhmZmJkMjc3MmNkNDMyJyxcbiAgICAgICAgYWRkcmVzczogJ1AtZnVqaTFrM2NhMm5qY3Vuemw0aGh4eTI0YXZjYTdodGY2NmNtamp1a2wwbicsXG4gICAgICB9LFxuICAgIH07XG4gICAgICAgKi9cbiAgICAgIGNvbnN0IHVuaXhOb3cgPSBCaWdJbnQoTWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHVuaXhOb3cgKyBCaWdJbnQoNjApO1xuICAgICAgY29uc3QgZW5kVGltZSA9IHN0YXJ0VGltZSArIEJpZ0ludCg2MCAqIDYwICogMjQgKyA2MDApOyAvLyAyNCBob3VycyArIDEwIG1pbnV0ZXNcblxuICAgICAgLy8gY29uc3QgQVZBWF9QVUJMSUNfVVJMID0gJ2h0dHBzOi8vYXBpLmF2YXgtdGVzdC5uZXR3b3JrJztcbiAgICAgIC8vIGNvbnN0IHB2bWFwaSA9IG5ldyBwdm0uUFZNQXBpKEFWQVhfUFVCTElDX1VSTCk7XG4gICAgICAvLyBjb25zdCB7IHV0eG9zIH0gPSBhd2FpdCBwdm1hcGkuZ2V0VVRYT3Moe1xuICAgICAgLy8gICBhZGRyZXNzZXM6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJpdGdvQWRkcmVzc2VzLFxuICAgICAgLy8gfSk7XG4gICAgICAvLyBjb25zb2xlLmxvZyh1dHhvcyk7XG5cbiAgICAgIGNvbnN0IHJlY292ZXJ5TW9kZSA9IGZhbHNlO1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IEF2YXhwTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0YXZheHAnKSlcbiAgICAgICAgLmdldFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5sb2NrdGltZSlcbiAgICAgICAgLnJlY292ZXJNb2RlKHJlY292ZXJ5TW9kZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYml0Z29BZGRyZXNzZXMpXG4gICAgICAgIC5zdGFydFRpbWUoc3RhcnRUaW1lLnRvU3RyaW5nKCkpXG4gICAgICAgIC5lbmRUaW1lKGVuZFRpbWUudG9TdHJpbmcoKSlcbiAgICAgICAgLnN0YWtlQW1vdW50KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnN0YWtlQW1vdW50KVxuICAgICAgICAuZGVsZWdhdGlvbkZlZVJhdGUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuZGVsZWdhdGlvbkZlZVJhdGUpXG4gICAgICAgIC5ub2RlSUQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUubm9kZUlkKVxuICAgICAgICAuYmxzUHVibGljS2V5KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJsc1B1YmxpY0tleSlcbiAgICAgICAgLmJsc1NpZ25hdHVyZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5ibHNTaWduYXR1cmUpXG4gICAgICAgIC51dHhvcyh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS51dHhvcyk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIGFzc2VydCh0eEV4cGxhaW4ub3V0cHV0QW1vdW50ID09PSB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5zdGFrZUFtb3VudCk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzBdLmlkLnNob3VsZC5lcXVhbCgnV3lqWUpIYTdZZTFLTXNCWmlROGhRSnpZN1lZeFRKVFR5TWt4Y1ZyS1JEaU55dFRZODowJyk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzFdLmlkLnNob3VsZC5lcXVhbCgnV3lqWUpIYTdZZTFLTXNCWmlROGhRSnpZN1lZeFRKVFR5TWt4Y1ZyS1JEaU55dFRZODoxJyk7XG4gICAgICB0eEV4cGxhaW4uaW5wdXRzWzJdLmlkLnNob3VsZC5lcXVhbCgnczkyU2pvWlFlbWdHOTdIb2NYOUdneUZ5NlpLbWFwZ2NncVEzeTVKMnV3UDNxV0JVeTowJyk7XG4gICAgICBhc3NlcnQodHhKc29uLm91dHB1dHNbMF0udmFsdWUgPT09IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnN0YWtlQW1vdW50KTtcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcik7XG4gICAgICBjb25zb2xlLmxvZyh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyMiA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpXG4gICAgICAgIC5mcm9tKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpXG4gICAgICAgIC5yZWNvdmVyTW9kZShmYWxzZSk7XG4gICAgICBjb25zdCB0eDIgPSBhd2FpdCB0eEJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgICB0eDIudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yKTtcbiAgICAgIC8vIFRlc3Qgc2lnbiB3aXRoIHVzZXIga2V5XG4gICAgICB0eEJ1aWxkZXIyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnVzZXJQcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3QgaGFsZlNpZ25lZCA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUeEhleCA9IGhhbGZTaWduZWQudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGFzc2VydCh0eEJ1aWxkZXJbJ19zdGFrZUFtb3VudCddID09PSB0eEJ1aWxkZXIyWydfc3Rha2VBbW91bnQnXSk7XG4gICAgICBjb25zb2xlLmxvZyhoYWxmU2lnbmVkVHhIZXgpO1xuXG4gICAgICAvLyBjb25zdCB0eEJ1aWxkZXIyID0gZmFjdG9yeS5mcm9tKGhhbGZTaWduZWRUeEhleCk7XG4gICAgICAvLyB0eEJ1aWxkZXIyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJhY2t1cFByaXZhdGVLZXkgfSk7XG4gICAgICAvLyBjb25zdCBmdWxsU2lnbmVkVHggPSBhd2FpdCB0eEJ1aWxkZXIyLmJ1aWxkKCk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhmdWxsU2lnbmVkVHgudG9Kc29uKCkpO1xuXG4gICAgICAvLyBjb25zdCByZXMgPSBhd2FpdCBwdm1hcGkuaXNzdWVUeCh7IHR4OiBmdWxsU2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSB9KTtcbiAgICAgIC8vIGNvbnN0IHR4U2lnbmVkID1cbiAgICAgIC8vICAgJzB4MDAwMDAwMDAwMDE5MDAwMDAwMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDA1YzgxYTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM3MDg2ZmJjMzY3MTdjN2E0MDdiZGIxOThiZDc5MjUyOTY3MjdkNmI5NzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMmI0NzFkNTRlNThlNGM1ZmFkZWU2MjJhYmQ2NjNiZWJhZDNhZDYzNzIwMDAwMDAwMjQ0MTFhZjlkOTg3N2M1MmMxYmUzZjc3ODI1YTc0Y2ExMTg2OTEyODQ3OGM0MTQ1OTEwZTkyNjk1YTI0YzdkODAwMDAwMDAwMTNkOWJkYWMwZWQxZDc2MTMzMGNmNjgwZWZkZWIxYTQyMTU5ZWIzODdkNmQyOTUwYzk2ZjdkMjhmNjFiYmUyYWEwMDAwMDAwNTAwMDAwMDAwM2I5YWNhMDAwMDAwMDAwMjAwMDAwMDAxMDAwMDAwMDI3MWQ4NjQ0YzkxOTllMzBiOWZlZjUzYWY1NmFlZjI0M2U1NDMxYzZiMWIwOWQ1ZjExYTY2MjJjODZkYjNmMzlkMDAwMDAwMDAzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDUwMDAwMDAwMDA1YzgxYTQwMDAwMDAwMDIwMDAwMDAwMTAwMDAwMDAyMDAwMDAwMDAxMjlhMjcxZmY0MDdiMTEwMWYzNWFlYzgyYTJmNzE1YzUyMzliZDM5MDAwMDAwMDA2NjBmNGFiNTAwMDAwMDAwNjYxMDllOGQwMDAwMDAwMDNiOWFjYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFjYWQ5ZTk0NzZiNzAxZWRlYzg4ZTUzYjFjMzE0NDU2MDUzYjNjZjg0NmExMTkyMTE3ODcyZTQxNDU1ZjQ0MGMwNzRkNmVlODk1MzBkNDVlODhmNzlhYzBlZGEwNmYyODg3YTk0ZDYxODJlZGJkOTUzNTE2YjI2MmYxNzU2NWE2NWQ5OGY1NzQxNTQ5Y2Q3MGQyNDIzYWJmZjc1MGJiNGI4ZDk4MmQ0ODIzNzZiMTg5MTQyZmY4YWE0NzA1NjE1ZmVlMTRiZTYxNzQ2MTA4NjBlOWMwMDNhYTRhZWFhNjEzYjE3MzJhYmYzY2QwYzljNDJmYTU4NTYzNDU2NDQwNjhjMGQxZjlmYTFkOWFmMzJlMjBiMTRmY2EwMjk4MzI2MGJjMDAwMDAwMDEzZDliZGFjMGVkMWQ3NjEzMzBjZjY4MGVmZGViMWE0MjE1OWViMzg3ZDZkMjk1MGM5NmY3ZDI4ZjYxYmJlMmFhMDAwMDAwMDcwMDAwMDAwMDNiOWFjYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDM3MDg2ZmJjMzY3MTdjN2E0MDdiZGIxOThiZDc5MjUyOTY3MjdkNmI5NzU2NTI4NTQwOWUyMDBmZGM2N2M3YjYzNzU5YjVhZDI5YmYwMWZjMmI0NzFkNTRlNThlNGM1ZmFkZWU2MjJhYmQ2NjNiZWJhZDNhZDYzNzIwMDAwMDAwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzNzA4NmZiYzM2NzE3YzdhNDA3YmRiMTk4YmQ3OTI1Mjk2NzI3ZDZiOTc1NjUyODU0MDllMjAwZmRjNjdjN2I2Mzc1OWI1YWQyOWJmMDFmYzJiNDcxZDU0ZTU4ZTRjNWZhZGVlNjIyYWJkNjYzYmViYWQzYWQ2MzcyMDAwMDAwMGIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMzcwODZmYmMzNjcxN2M3YTQwN2JkYjE5OGJkNzkyNTI5NjcyN2Q2Yjk3NTY1Mjg1NDA5ZTIwMGZkYzY3YzdiNjM3NTliNWFkMjliZjAxZmMyYjQ3MWQ1NGU1OGU0YzVmYWRlZTYyMmFiZDY2M2JlYmFkM2FkNjM3MjAwMDMwZDQwMDAwMDAwMDIwMDAwMDAwOTAwMDAwMDAyMjhhNTk0MjA5NzE5NTNhYTYxYjRiNGM5MGI5MzRlZjc2ZTZlOWM4YWQyNTZlOTQxN2U5YTZiNTAxN2Q4MzY4MTNiMmI1Y2FkMmE4OTBjNjZjODI5NWYxMDRkNzQxOTJjNDk2NGNmMjg5ZTJhNDVhZGI1N2E3YjA1YjVlOTUyOWUwMDRlYzJkYWU1YzQ4YmE2ZmE0ZDFlMGIxYzZiOWQ5YmJlNzljNDgxZmYxNjg0OGMxZmEzZmEzYTZlZDQ3NDMxYTEyYWY0YjJkOTc3OWJiMTkyYmIzZjI1NDQwODczMTc5OGI1MGM4ZjAzZjI1YjdlN2Q3MzEzNzM4ODkyZTcxZDY2MDEwMDAwMDAwOTAwMDAwMDAyMjhhNTk0MjA5NzE5NTNhYTYxYjRiNGM5MGI5MzRlZjc2ZTZlOWM4YWQyNTZlOTQxN2U5YTZiNTAxN2Q4MzY4MTNiMmI1Y2FkMmE4OTBjNjZjODI5NWYxMDRkNzQxOTJjNDk2NGNmMjg5ZTJhNDVhZGI1N2E3YjA1YjVlOTUyOWUwMDRlYzJkYWU1YzQ4YmE2ZmE0ZDFlMGIxYzZiOWQ5YmJlNzljNDgxZmYxNjg0OGMxZmEzZmEzYTZlZDQ3NDMxYTEyYWY0YjJkOTc3OWJiMTkyYmIzZjI1NDQwODczMTc5OGI1MGM4ZjAzZjI1YjdlN2Q3MzEzNzM4ODkyZTcxZDY2MDE1MWFhMjkxZic7XG4gICAgICAvLyBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKS5mcm9tKHR4KTtcbiAgICAgIC8vIGNvbnN0IGRlY29kZSA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgLy8gY29uc29sZS5sb2coZGVjb2RlLnRvSnNvbigpKTtcblxuICAgICAgLy8gY29uc3QgcmVzID0gYXdhaXQgcHZtYXBpLmlzc3VlVHgoeyB0eDogdHhTaWduZWQgfSk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhyZXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGFuIEFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVjb3ZlcnlNb2RlID0gZmFsc2U7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKVxuICAgICAgICAuZ2V0UGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5sb2NrdGltZSlcbiAgICAgICAgLnJlY292ZXJNb2RlKHJlY292ZXJ5TW9kZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgICAgLnN0YXJ0VGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnN0YXJ0VGltZSlcbiAgICAgICAgLmVuZFRpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5lbmRUaW1lKVxuICAgICAgICAuc3Rha2VBbW91bnQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUuZGVsZWdhdGlvbkZlZVJhdGUpXG4gICAgICAgIC5ub2RlSUQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ub2RlSWQpXG4gICAgICAgIC5ibHNQdWJsaWNLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ibHNQdWJsaWNLZXkpXG4gICAgICAgIC5ibHNTaWduYXR1cmUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ibHNTaWduYXR1cmUpXG4gICAgICAgIC51dHhvcyh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnV0eG9zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3IpO1xuXG4gICAgICAvLyBUZXN0IHNpZ24gd2l0aCB1c2VyIGtleVxuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUudXNlclByaXZhdGVLZXkgfSk7XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5iYWNrdXBQcml2YXRlS2V5IH0pO1xuICAgICAgY29uc3QgZnVsbFNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zb2xlLmxvZyhmdWxsU2lnbmVkVHgudG9Kc29uKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGFuZCBzaWduIGEgdHJhbnNhY3Rpb24gaW4gcmVjb3ZlcnkgbW9kZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY292ZXJ5TW9kZSA9IHRydWU7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKVxuICAgICAgICAuZ2V0UGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5sb2NrdGltZSlcbiAgICAgICAgLnJlY292ZXJNb2RlKHJlY292ZXJ5TW9kZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5iaXRnb0FkZHJlc3NlcylcbiAgICAgICAgLnN0YXJ0VGltZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnN0YXJ0VGltZSlcbiAgICAgICAgLmVuZFRpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5lbmRUaW1lKVxuICAgICAgICAuc3Rha2VBbW91bnQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19TQU1QTEUuZGVsZWdhdGlvbkZlZVJhdGUpXG4gICAgICAgIC5ub2RlSUQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ub2RlSWQpXG4gICAgICAgIC5ibHNQdWJsaWNLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ibHNQdWJsaWNLZXkpXG4gICAgICAgIC5ibHNTaWduYXR1cmUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5ibHNTaWduYXR1cmUpXG4gICAgICAgIC51dHhvcyh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLnV0eG9zKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGxldCB0eEhleCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICB0eEhleC5zaG91bGQuZXF1YWwodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS51bnNpZ25lZFJhd3R4UmVjb3ZlcnkpO1xuXG4gICAgICBjb25zdCBwcml2YXRlS2V5ID0gcmVjb3ZlcnlNb2RlXG4gICAgICAgID8gdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS5iYWNrdXBQcml2YXRlS2V5XG4gICAgICAgIDogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1NBTVBMRS51c2VyUHJpdmF0ZUtleTtcblxuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgICAgdHhIZXg6IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIH0sXG4gICAgICAgIHBydjogcHJpdmF0ZUtleSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGJhc2Vjb2luLnNpZ25UcmFuc2FjdGlvbihwYXJhbXMpO1xuICAgICAgdHhIZXggPSAoaGFsZlNpZ25lZFRyYW5zYWN0aW9uIGFzIEhhbGZTaWduZWRBY2NvdW50VHJhbnNhY3Rpb24pPy5oYWxmU2lnbmVkPy50eEhleDtcbiAgICAgIHR4SGV4LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfU0FNUExFLmhhbGZTaWduZWRSYXdUeFJlY292ZXJ5KTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhbmQgc2lnbiBhbiBBZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvciB0cmFuc2FjdGlvbiBhbmQgYnJvYWRjYXN0IGluIHJlY292ZXJ5IG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1bml4Tm93ID0gQmlnSW50KE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSk7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSB1bml4Tm93ICsgQmlnSW50KDYwKTtcbiAgICAgIGNvbnN0IGVuZFRpbWUgPSBzdGFydFRpbWUgKyBCaWdJbnQoNjAgKiA2MCAqIDI0ICsgNjAwKTtcblxuICAgICAgY29uc3QgcmVjb3ZlcnlNb2RlID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBBdmF4cExpYi5UcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGF2YXhwJykpXG4gICAgICAgIC5nZXRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvclR4QnVpbGRlcigpXG4gICAgICAgIC50aHJlc2hvbGQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUubG9ja3RpbWUpXG4gICAgICAgIC5yZWNvdmVyTW9kZShyZWNvdmVyeU1vZGUpXG4gICAgICAgIC5mcm9tUHViS2V5KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmJpdGdvQWRkcmVzc2VzKVxuICAgICAgICAuc3RhcnRUaW1lKHN0YXJ0VGltZS50b1N0cmluZygpKVxuICAgICAgICAuZW5kVGltZShlbmRUaW1lLnRvU3RyaW5nKCkpXG4gICAgICAgIC5zdGFrZUFtb3VudCh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5zdGFrZUFtb3VudClcbiAgICAgICAgLmRlbGVnYXRpb25GZWVSYXRlKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmRlbGVnYXRpb25GZWVSYXRlKVxuICAgICAgICAubm9kZUlEKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLm5vZGVJZClcbiAgICAgICAgLmJsc1B1YmxpY0tleSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5ibHNQdWJsaWNLZXkpXG4gICAgICAgIC5ibHNTaWduYXR1cmUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYmxzU2lnbmF0dXJlKVxuICAgICAgICAudXR4b3ModGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUudXR4b3MpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHR4LnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5BZGRQZXJtaXNzaW9ubGVzc1ZhbGlkYXRvcik7XG5cbiAgICAgIC8vIFRlc3Qgc2lnbiB3aXRoIHVzZXIga2V5XG4gICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYmFja3VwUHJpdmF0ZUtleSB9KTtcbiAgICAgIGNvbnN0IGhhbGZTaWduZWQgPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGhhbGZTaWduZWRUeEhleCA9IGhhbGZTaWduZWQudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgdHhCdWlsZGVyMiA9IGZhY3RvcnkuZnJvbShoYWxmU2lnbmVkVHhIZXgpO1xuICAgICAgdHhCdWlsZGVyMi5zaWduKHsga2V5OiB0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS51c2VyUHJpdmF0ZUtleSB9KTtcbiAgICAgIGNvbnN0IGZ1bGxTaWduZWRUeCA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxTaWduZWRUeC50b0pzb24oKSk7XG4gICAgfSk7XG4gIH0pO1xuICBpdCgnU2hvdWxkIGZhaWwgdG8gYnVpbGQgaWYgdXR4b3MgY2hhbmdlIG91dHB1dCAwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVuaXhOb3cgPSBCaWdJbnQoTWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApKTtcbiAgICBjb25zdCBzdGFydFRpbWUgPSB1bml4Tm93ICsgQmlnSW50KDYwKTtcbiAgICBjb25zdCBlbmRUaW1lID0gc3RhcnRUaW1lICsgQmlnSW50KDYwICogNjAgKiAyNCArIDYwMCk7XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBuZXcgQXZheHBMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RhdmF4cCcpKVxuICAgICAgLmdldFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHhCdWlsZGVyKClcbiAgICAgIC50aHJlc2hvbGQodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUudGhyZXNob2xkKVxuICAgICAgLmxvY2t0aW1lKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLmxvY2t0aW1lKVxuICAgICAgLnJlY292ZXJNb2RlKGZhbHNlKVxuICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYml0Z29BZGRyZXNzZXMpXG4gICAgICAuc3RhcnRUaW1lKHN0YXJ0VGltZS50b1N0cmluZygpKVxuICAgICAgLmVuZFRpbWUoZW5kVGltZS50b1N0cmluZygpKVxuICAgICAgLnN0YWtlQW1vdW50KHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLnN0YWtlQW1vdW50Tm9PdXRwdXQpXG4gICAgICAuZGVsZWdhdGlvbkZlZVJhdGUodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuZGVsZWdhdGlvbkZlZVJhdGUpXG4gICAgICAubm9kZUlEKHRlc3REYXRhLkJVSUxEX0FORF9TSUdOX0FERF9QRVJNSVNTSU9OTEVTU19WQUxJREFUT1JfU0FNUExFLm5vZGVJZClcbiAgICAgIC5ibHNQdWJsaWNLZXkodGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUuYmxzUHVibGljS2V5KVxuICAgICAgLmJsc1NpZ25hdHVyZSh0ZXN0RGF0YS5CVUlMRF9BTkRfU0lHTl9BRERfUEVSTUlTU0lPTkxFU1NfVkFMSURBVE9SX1NBTVBMRS5ibHNTaWduYXR1cmUpXG4gICAgICAudXR4b3ModGVzdERhdGEuQlVJTERfQU5EX1NJR05fQUREX1BFUk1JU1NJT05MRVNTX1ZBTElEQVRPUl9TQU1QTEUudXR4b3MpO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgY29uc3QgdHhFeHBsYWluID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgdHhKc29uLmNoYW5nZU91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICB0eEV4cGxhaW4uY2hhbmdlT3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgIHR4RXhwbGFpbi5jaGFuZ2VBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gIH0pO1xufSk7XG4iXX0=
|