@bitgo/sdk-coin-canton 1.23.3 → 1.25.0

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.
Files changed (69) hide show
  1. package/dist/src/canton.d.ts +2 -0
  2. package/dist/src/canton.d.ts.map +1 -1
  3. package/dist/src/canton.js +5 -1
  4. package/dist/src/lib/cantonCommandBuilder.d.ts +9 -0
  5. package/dist/src/lib/cantonCommandBuilder.d.ts.map +1 -1
  6. package/dist/src/lib/cantonCommandBuilder.js +20 -2
  7. package/dist/src/lib/clearSigning.d.ts +58 -0
  8. package/dist/src/lib/clearSigning.d.ts.map +1 -0
  9. package/dist/src/lib/clearSigning.js +66 -0
  10. package/dist/src/lib/iface.d.ts +1 -0
  11. package/dist/src/lib/iface.d.ts.map +1 -1
  12. package/dist/src/lib/iface.js +1 -1
  13. package/dist/src/lib/index.d.ts +2 -0
  14. package/dist/src/lib/index.d.ts.map +1 -1
  15. package/dist/src/lib/index.js +6 -1
  16. package/dist/src/lib/messages/cantonBaseMessage.d.ts +16 -0
  17. package/dist/src/lib/messages/cantonBaseMessage.d.ts.map +1 -0
  18. package/dist/src/lib/messages/cantonBaseMessage.js +28 -0
  19. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts +14 -0
  20. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.d.ts.map +1 -0
  21. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessage.js +23 -0
  22. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts +17 -0
  23. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.d.ts.map +1 -0
  24. package/dist/src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder.js +25 -0
  25. package/dist/src/lib/messages/cantonSignTopology/index.d.ts +3 -0
  26. package/dist/src/lib/messages/cantonSignTopology/index.d.ts.map +1 -0
  27. package/dist/src/lib/messages/cantonSignTopology/index.js +19 -0
  28. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts +13 -0
  29. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.d.ts.map +1 -0
  30. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessage.js +22 -0
  31. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts +14 -0
  32. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.d.ts.map +1 -0
  33. package/dist/src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder.js +22 -0
  34. package/dist/src/lib/messages/cantonSignTransaction/index.d.ts +3 -0
  35. package/dist/src/lib/messages/cantonSignTransaction/index.d.ts.map +1 -0
  36. package/dist/src/lib/messages/cantonSignTransaction/index.js +19 -0
  37. package/dist/src/lib/messages/index.d.ts +5 -0
  38. package/dist/src/lib/messages/index.d.ts.map +1 -0
  39. package/dist/src/lib/messages/index.js +21 -0
  40. package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
  41. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  42. package/dist/src/lib/messages/messageBuilderFactory.js +23 -0
  43. package/dist/src/lib/utils.d.ts +2 -0
  44. package/dist/src/lib/utils.d.ts.map +1 -1
  45. package/dist/src/lib/utils.js +25 -7
  46. package/dist/test/resources.d.ts +7 -0
  47. package/dist/test/resources.d.ts.map +1 -1
  48. package/dist/test/resources.js +9 -2
  49. package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.js +45 -1
  50. package/dist/test/unit/builder/cosignDelegationAccept/cosignDelegationAcceptBuilder.js +30 -1
  51. package/dist/test/unit/canton.js +17 -1
  52. package/dist/test/unit/index.d.ts +4 -0
  53. package/dist/test/unit/index.d.ts.map +1 -1
  54. package/dist/test/unit/index.js +5 -1
  55. package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts +2 -0
  56. package/dist/test/unit/messages/cantonSignTopologyMessage.d.ts.map +1 -0
  57. package/dist/test/unit/messages/cantonSignTopologyMessage.js +46 -0
  58. package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts +2 -0
  59. package/dist/test/unit/messages/cantonSignTransactionMessage.d.ts.map +1 -0
  60. package/dist/test/unit/messages/cantonSignTransactionMessage.js +48 -0
  61. package/dist/test/unit/messages/clearSigning.d.ts +2 -0
  62. package/dist/test/unit/messages/clearSigning.d.ts.map +1 -0
  63. package/dist/test/unit/messages/clearSigning.js +72 -0
  64. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  65. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  66. package/dist/test/unit/messages/messageBuilderFactory.js +52 -0
  67. package/dist/test/unit/utils.js +50 -1
  68. package/dist/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +6 -6
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const should_1 = __importDefault(require("should"));
7
+ const sdk_core_1 = require("@bitgo/sdk-core");
8
+ const messageBuilderFactory_1 = require("../../../src/lib/messages/messageBuilderFactory");
9
+ const cantonSignTransactionMessageBuilder_1 = require("../../../src/lib/messages/cantonSignTransaction/cantonSignTransactionMessageBuilder");
10
+ const cantonSignTopologyMessageBuilder_1 = require("../../../src/lib/messages/cantonSignTopology/cantonSignTopologyMessageBuilder");
11
+ describe('Canton MessageBuilderFactory', function () {
12
+ let factory;
13
+ beforeEach(function () {
14
+ factory = new messageBuilderFactory_1.MessageBuilderFactory({ name: 'canton' });
15
+ });
16
+ describe('getMessageBuilder', function () {
17
+ it('should return CantonSignTransactionMessageBuilder for CANTON_SIGN_TRANSACTION', function () {
18
+ const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.CANTON_SIGN_TRANSACTION);
19
+ should_1.default.exist(builder);
20
+ builder.should.be.instanceof(cantonSignTransactionMessageBuilder_1.CantonSignTransactionMessageBuilder);
21
+ });
22
+ it('should return CantonSignTopologyMessageBuilder for CANTON_SIGN_TOPOLOGY', function () {
23
+ const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
24
+ should_1.default.exist(builder);
25
+ builder.should.be.instanceof(cantonSignTopologyMessageBuilder_1.CantonSignTopologyMessageBuilder);
26
+ });
27
+ it('should throw for unsupported message standard types', function () {
28
+ should_1.default.throws(() => factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE), /Invalid message standard SIMPLE/);
29
+ should_1.default.throws(() => factory.getMessageBuilder(sdk_core_1.MessageStandardType.EIP191), /Invalid message standard EIP191/);
30
+ should_1.default.throws(() => factory.getMessageBuilder('UNSUPPORTED'), /Invalid message standard UNSUPPORTED/);
31
+ });
32
+ it('should build a message with CANTON_SIGN_TRANSACTION that returns correct signable payload', async function () {
33
+ const txHash = '7Ey4Q2TqWQcK1eAl6p15UT02M4mx92Tvo9ifvtzlm5o=';
34
+ const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.CANTON_SIGN_TRANSACTION);
35
+ builder.setPayload(txHash);
36
+ const message = await builder.build();
37
+ const signable = await message.getSignablePayload();
38
+ should_1.default.ok(Buffer.isBuffer(signable));
39
+ signable.should.deepEqual(Buffer.from(txHash, 'base64'));
40
+ });
41
+ it('should build a message with CANTON_SIGN_TOPOLOGY that returns correct signable payload', async function () {
42
+ const topoHash = 'EiDQky+Uxo2zEwFp+JabeazILMMd7QR639/B/u+OGR+npg==';
43
+ const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.CANTON_SIGN_TOPOLOGY);
44
+ builder.setPayload(topoHash);
45
+ const message = await builder.build();
46
+ const signable = await message.getSignablePayload();
47
+ should_1.default.ok(Buffer.isBuffer(signable));
48
+ signable.should.deepEqual(Buffer.from(topoHash, 'base64'));
49
+ });
50
+ });
51
+ });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZUJ1aWxkZXJGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L21lc3NhZ2VzL21lc3NhZ2VCdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUU1Qiw4Q0FBc0Q7QUFDdEQsMkZBQXdGO0FBQ3hGLDZJQUEwSTtBQUMxSSxvSUFBaUk7QUFFakksUUFBUSxDQUFDLDhCQUE4QixFQUFFO0lBQ3ZDLElBQUksT0FBOEIsQ0FBQztJQUVuQyxVQUFVLENBQUM7UUFDVCxPQUFPLEdBQUcsSUFBSSw2Q0FBcUIsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQWMsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG1CQUFtQixFQUFFO1FBQzVCLEVBQUUsQ0FBQywrRUFBK0UsRUFBRTtZQUNsRixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN2RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMseUVBQW1DLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5RUFBeUUsRUFBRTtZQUM1RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNwRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUVBQWdDLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRTtZQUN4RCxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztZQUM5RyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsOEJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztZQUM5RyxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsYUFBb0MsQ0FBQyxFQUNyRSxzQ0FBc0MsQ0FDdkMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJGQUEyRixFQUFFLEtBQUs7WUFDbkcsTUFBTSxNQUFNLEdBQUcsOENBQThDLENBQUM7WUFDOUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLDhCQUFtQixDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDdkYsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3BELGdCQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNwQyxRQUFtQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3RkFBd0YsRUFBRSxLQUFLO1lBQ2hHLE1BQU0sUUFBUSxHQUFHLGtEQUFrRCxDQUFDO1lBQ3BFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyw4QkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3BGLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNwRCxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDcEMsUUFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgQmFzZUNvaW4gfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBNZXNzYWdlU3RhbmRhcmRUeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvbWVzc2FnZXMvbWVzc2FnZUJ1aWxkZXJGYWN0b3J5JztcbmltcG9ydCB7IENhbnRvblNpZ25UcmFuc2FjdGlvbk1lc3NhZ2VCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9tZXNzYWdlcy9jYW50b25TaWduVHJhbnNhY3Rpb24vY2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZUJ1aWxkZXInO1xuaW1wb3J0IHsgQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZUJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL21lc3NhZ2VzL2NhbnRvblNpZ25Ub3BvbG9neS9jYW50b25TaWduVG9wb2xvZ3lNZXNzYWdlQnVpbGRlcic7XG5cbmRlc2NyaWJlKCdDYW50b24gTWVzc2FnZUJ1aWxkZXJGYWN0b3J5JywgZnVuY3Rpb24gKCkge1xuICBsZXQgZmFjdG9yeTogTWVzc2FnZUJ1aWxkZXJGYWN0b3J5O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGZhY3RvcnkgPSBuZXcgTWVzc2FnZUJ1aWxkZXJGYWN0b3J5KHsgbmFtZTogJ2NhbnRvbicgfSBhcyBCYXNlQ29pbik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRNZXNzYWdlQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBDYW50b25TaWduVHJhbnNhY3Rpb25NZXNzYWdlQnVpbGRlciBmb3IgQ0FOVE9OX1NJR05fVFJBTlNBQ1RJT04nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLkNBTlRPTl9TSUdOX1RSQU5TQUNUSU9OKTtcbiAgICAgIHNob3VsZC5leGlzdChidWlsZGVyKTtcbiAgICAgIGJ1aWxkZXIuc2hvdWxkLmJlLmluc3RhbmNlb2YoQ2FudG9uU2lnblRyYW5zYWN0aW9uTWVzc2FnZUJ1aWxkZXIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gQ2FudG9uU2lnblRvcG9sb2d5TWVzc2FnZUJ1aWxkZXIgZm9yIENBTlRPTl9TSUdOX1RPUE9MT0dZJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UT1BPTE9HWSk7XG4gICAgICBzaG91bGQuZXhpc3QoYnVpbGRlcik7XG4gICAgICBidWlsZGVyLnNob3VsZC5iZS5pbnN0YW5jZW9mKENhbnRvblNpZ25Ub3BvbG9neU1lc3NhZ2VCdWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIHVuc3VwcG9ydGVkIG1lc3NhZ2Ugc3RhbmRhcmQgdHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5TSU1QTEUpLCAvSW52YWxpZCBtZXNzYWdlIHN0YW5kYXJkIFNJTVBMRS8pO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxKSwgL0ludmFsaWQgbWVzc2FnZSBzdGFuZGFyZCBFSVAxOTEvKTtcbiAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICgpID0+IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoJ1VOU1VQUE9SVEVEJyBhcyBNZXNzYWdlU3RhbmRhcmRUeXBlKSxcbiAgICAgICAgL0ludmFsaWQgbWVzc2FnZSBzdGFuZGFyZCBVTlNVUFBPUlRFRC9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgbWVzc2FnZSB3aXRoIENBTlRPTl9TSUdOX1RSQU5TQUNUSU9OIHRoYXQgcmV0dXJucyBjb3JyZWN0IHNpZ25hYmxlIHBheWxvYWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhhc2ggPSAnN0V5NFEyVHFXUWNLMWVBbDZwMTVVVDAyTTRteDkyVHZvOWlmdnR6bG01bz0nO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5DQU5UT05fU0lHTl9UUkFOU0FDVElPTik7XG4gICAgICBidWlsZGVyLnNldFBheWxvYWQodHhIYXNoKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBzaWduYWJsZSA9IGF3YWl0IG1lc3NhZ2UuZ2V0U2lnbmFibGVQYXlsb2FkKCk7XG4gICAgICBzaG91bGQub2soQnVmZmVyLmlzQnVmZmVyKHNpZ25hYmxlKSk7XG4gICAgICAoc2lnbmFibGUgYXMgQnVmZmVyKS5zaG91bGQuZGVlcEVxdWFsKEJ1ZmZlci5mcm9tKHR4SGFzaCwgJ2Jhc2U2NCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBtZXNzYWdlIHdpdGggQ0FOVE9OX1NJR05fVE9QT0xPR1kgdGhhdCByZXR1cm5zIGNvcnJlY3Qgc2lnbmFibGUgcGF5bG9hZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRvcG9IYXNoID0gJ0VpRFFreStVeG8yekV3RnArSmFiZWF6SUxNTWQ3UVI2MzkvQi91K09HUitucGc9PSc7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLkNBTlRPTl9TSUdOX1RPUE9MT0dZKTtcbiAgICAgIGJ1aWxkZXIuc2V0UGF5bG9hZCh0b3BvSGFzaCk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qgc2lnbmFibGUgPSBhd2FpdCBtZXNzYWdlLmdldFNpZ25hYmxlUGF5bG9hZCgpO1xuICAgICAgc2hvdWxkLm9rKEJ1ZmZlci5pc0J1ZmZlcihzaWduYWJsZSkpO1xuICAgICAgKHNpZ25hYmxlIGFzIEJ1ZmZlcikuc2hvdWxkLmRlZXBFcXVhbChCdWZmZXIuZnJvbSh0b3BvSGFzaCwgJ2Jhc2U2NCcpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -379,6 +379,55 @@ describe('Canton Utils - CantonCommand helpers', function () {
379
379
  it('should throw on type mismatch', function () {
380
380
  assert_1.default.throws(() => utils_1.default.assertDeepCantonMatch({ a: 'str' }, { a: 42 }, noInject), /mismatch/);
381
381
  });
382
+ describe('ISO timestamp vs microsecond string normalisation', function () {
383
+ const isoTs = '2026-06-12T10:00:00.000Z';
384
+ const isoTsUs = String(new Date(isoTs).getTime() * 1000);
385
+ it('should pass when ISO timestamp (expected) equals microseconds (actual)', function () {
386
+ assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch(isoTs, isoTsUs, noInject));
387
+ });
388
+ it('should throw timestamp mismatch when microseconds do not correspond to the ISO value', function () {
389
+ const wrongUs = String(new Date(isoTs).getTime() * 1000 + 1000000);
390
+ assert_1.default.throws(() => utils_1.default.assertDeepCantonMatch(isoTs, wrongUs, noInject), /timestamp mismatch/);
391
+ });
392
+ it('should pass for ISO timestamp nested inside a mint-like choiceArgument object', function () {
393
+ const executeBefore = '2026-06-13T10:00:00.000Z';
394
+ const executeBeforeUs = String(new Date(executeBefore).getTime() * 1000);
395
+ const expected = {
396
+ expectedAdmin: 'registrar::1220abc',
397
+ mint: {
398
+ instrumentId: { admin: 'registrar::1220abc', id: 'STGUSD1' },
399
+ amount: '1000000.0',
400
+ holder: 'registrar::1220abc',
401
+ reference: 'mint-stgusd1-12345',
402
+ requestedAt: isoTs,
403
+ executeBefore: executeBefore,
404
+ meta: { values: {} },
405
+ },
406
+ };
407
+ const actual = {
408
+ expectedAdmin: 'registrar::1220abc',
409
+ mint: {
410
+ instrumentId: { admin: 'registrar::1220abc', id: 'STGUSD1' },
411
+ amount: '1000000.0000000000',
412
+ holder: 'registrar::1220abc',
413
+ reference: 'mint-stgusd1-12345',
414
+ requestedAt: isoTsUs,
415
+ executeBefore: executeBeforeUs,
416
+ meta: { values: {} },
417
+ },
418
+ };
419
+ assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch(expected, actual, noInject));
420
+ });
421
+ it('should throw when ISO timestamp in nested object does not match microseconds', function () {
422
+ const wrongUs = String(new Date(isoTs).getTime() * 1000 + 5000000);
423
+ const expected = { mint: { requestedAt: isoTs } };
424
+ const actual = { mint: { requestedAt: wrongUs } };
425
+ assert_1.default.throws(() => utils_1.default.assertDeepCantonMatch(expected, actual, noInject), /timestamp mismatch/);
426
+ });
427
+ it('should not treat an arbitrary non-timestamp ISO-like string as a timestamp', function () {
428
+ assert_1.default.throws(() => utils_1.default.assertDeepCantonMatch('not-a-timestamp', isoTsUs, noInject), /mismatch/);
429
+ });
430
+ });
382
431
  });
383
432
  });
384
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBRTVCLDhDQUFrRDtBQUVsRCxnRUFBd0M7QUFFeEMsNENBY3NCO0FBRXRCLFFBQVEsQ0FBQyxhQUFhLEVBQUU7SUFDdEIsUUFBUSxDQUFDLHdCQUF3QixFQUFFO1FBQ2pDLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLDZCQUE2QixDQUFDLHNDQUEwQixFQUFFLDBCQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSw2RUFBNkUsQ0FBQyxDQUFDO1lBQy9HLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsNkVBQTZFLENBQUMsQ0FBQztZQUNqSCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFO1lBQzdELE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyw2QkFBNkIsQ0FBQyx1Q0FBMkIsRUFBRSwwQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFHLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pCLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsNkVBQTZFLENBQUMsQ0FBQztZQUMvRyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLDZFQUE2RSxDQUFDLENBQUM7WUFDakgsZ0JBQU0sQ0FB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QUFDLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUN4RyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrRUFBa0UsRUFBRTtZQUNyRSxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxlQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQ2xGLGVBQWUsQ0FDaEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFO1lBQ2xDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQUssQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IFZhbHVlIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9yZXNvdXJjZXNJbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQ0FOVE9OX0FERFJFU1NFUyxcbiAgQ0FOVE9OX0JMT0NLX0hFSUdIVCxcbiAgQ2FudG9uQWxsb2NhdGlvbkFsbG9jYXRlUHJlcGFyZVJlc3BvbnNlLFxuICBDYW50b25FeGVyY2lzZUNvbW1hbmRQcmVwYXJlUmVzcG9uc2UsXG4gIEdlbmVyYXRlVG9wb2xvZ3lSZXNwb25zZSxcbiAgT25lU3RlcFByZUFwcHJvdmFsUHJlcGFyZVJlc3BvbnNlLFxuICBQcmVwYXJlZFRyYW5zYWN0aW9uUmF3RGF0YSxcbiAgUHJlcGFyZWRUcmFuc2FjdGlvbldpdGhNZW1vLFxuICBQcmVwYXJlZFR4bjFTdGVwUmVjZWl2ZXIsXG4gIFByZXBhcmVkVHhuMlN0ZXBSZWNlaXZlcixcbiAgUHJlcGFyZVN1Ym1pc3Npb25SZXNwb25zZSxcbiAgVHJhbnNmZXJBY2NlcHRhbmNlUHJlcGFyZVJlc3BvbnNlLFxuICBUcmFuc2ZlclJlamVjdGlvblByZXBhcmVSZXNwb25zZSxcbn0gZnJvbSAnLi4vcmVzb3VyY2VzJztcblxuZGVzY3JpYmUoJ0NhbnRvbiBVdGlsJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnUmF3IHRyYW5zYWN0aW9uIHBhcnNlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIHRoZSBwcmVwYXJlZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShQcmVwYXJlZFRyYW5zYWN0aW9uUmF3RGF0YSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZERhdGEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuc2VuZGVyLCAnYWJjLTE6OjEyMjAwYzFlZTIyNmZiZGY5ZmJhMzQ2MWMyYzBjNzMzMzFiNjlkM2M2ZmQ4Y2ZjZTI4Y2RmODY0MTQxMTQxY2M2NTZkJyk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5yZWNlaXZlciwgJ2FiYy0yOjoxMjIwN2U5NmFkYTE4YTg0NWFkZjRkYzAxNDEwMjY1NjMzZDUyNjZkY2E5YmIyODBjOThlMzVjMzY5MmRiODdkM2UzNScpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuYW1vdW50LCAnMjAwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIHRoZSBwcmVwYXJlZCB0cmFuc2FjdGlvbiB3aXRoIG1lbW8gaWQgZmllbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gdXRpbHMucGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEoUHJlcGFyZWRUcmFuc2FjdGlvbldpdGhNZW1vLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkRGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5zZW5kZXIsICcxMjIwYjo6MTIyMGJhYjZlZjNlZWMzN2IxYjM4MTYwOTliZWZlNzJiNDNiZjZjMTM4MDA3N2Q2MzQ5MjU0YzQxZmZiN2Y3NzUzYmInKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnJlY2VpdmVyLCAnMTIyMGE6OjEyMjBhZGU2MDMwMGNmN2QwYjE4ZmZhYTJmZmU0ZjQ5MmFkMWFkNjAxY2ZjMTYyYjIwZjc3ZWM5OWQxNmMyYzJmMTU4Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5hbW91bnQsICcxMDAwMDAwMDAwJyk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5tZW1vSWQsICcxMScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBjb3JyZWN0bHkgd2hlbiByZWNlaXZlciBpcyBvbiAyLXN0ZXAnLCAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gdXRpbHMucGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEoUHJlcGFyZWRUeG4yU3RlcFJlY2VpdmVyLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkRGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5zZW5kZXIsICcxMjIwYTo6MTIyMGFkZTYwMzAwY2Y3ZDBiMThmZmFhMmZmZTRmNDkyYWQxYWQ2MDFjZmMxNjJiMjBmNzdlYzk5ZDE2YzJjMmYxNTgnKTtcbiAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAgcGFyc2VkRGF0YS5yZWNlaXZlcixcbiAgICAgICAgJ3JhdmktdGVzdC1wYXJ0eS0xOjoxMjIwOTJlN2QzM2FjMTBjMGYzZDU1OTc2MzQyZjM3NTU1ZGYwNWRhNWI3NDI5NTZkNTZhNjJhZTIzNjc3NjkwNzlkMidcbiAgICAgICk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5hbW91bnQsICcyMDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBjb3JyZWN0bHkgMScsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShQcmVwYXJlZFR4bjFTdGVwUmVjZWl2ZXIsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIHNob3VsZC5leGlzdChwYXJzZWREYXRhKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnNlbmRlciwgJzEyMjBhOjoxMjIwYWRlNjAzMDBjZjdkMGIxOGZmYWEyZmZlNGY0OTJhZDFhZDYwMWNmYzE2MmIyMGY3N2VjOTlkMTZjMmMyZjE1OCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgICBwYXJzZWREYXRhLnJlY2VpdmVyLFxuICAgICAgICAncmF2aS1kZW1vLXBhcnR5LXR4bi0wMS10YXBwZXI6OjEyMjBlYTdhYjVhNzIzZjhhNmIyMDc4ZTYxN2U2YzU4Y2I3ZTc4ZTQ5OTQ3ZGRjMjM5ZTFhOTQxYWE1NmU2YmEwOGI0J1xuICAgICAgKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLmFtb3VudCwgJzIwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIHRoZSBhY2NlcHRhbmNlIHByZXBhcmVkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IHV0aWxzLnBhcnNlUmF3Q2FudG9uVHJhbnNhY3Rpb25EYXRhKFxuICAgICAgICBUcmFuc2ZlckFjY2VwdGFuY2VQcmVwYXJlUmVzcG9uc2UucHJlcGFyZWRUcmFuc2FjdGlvbixcbiAgICAgICAgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyQWNjZXB0XG4gICAgICApO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZERhdGEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuc2VuZGVyLCAnRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYScpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEucmVjZWl2ZXIsICdhYmNkZTo6MTIyMDViNGUzNTM3YTk1MTI2ZDkwNjA0NTkyMzQ0ZDhhZDNjM2RkY2NkYTRmNzk5MDE5NTQyODBlZTE5YzU3NjcxNGQnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLmFtb3VudCwgJzUwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIHRoZSByZWplY3Rpb24gcHJlcGFyZWQgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gdXRpbHMucGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEoXG4gICAgICAgIFRyYW5zZmVyUmVqZWN0aW9uUHJlcGFyZVJlc3BvbnNlLnByZXBhcmVkVHJhbnNhY3Rpb24sXG4gICAgICAgIFRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlclJlamVjdFxuICAgICAgKTtcbiAgICAgIHNob3VsZC5leGlzdChwYXJzZWREYXRhKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnNlbmRlciwgJ0RTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnJlY2VpdmVyLCAnMTIyMDE6OjEyMjAzODQwMmNmMTY1MDg3NmQyOTIwZDYwNDdiMTFhNGFhZjBkZTdiNDI4ZTk5MTYwMDljYmEyYTIyYjFhZTIyYzFhJyk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5hbW91bnQsICc1MDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB0aGUgb25lLXN0ZXAgcHJlYXBwcm92YWwgcHJlcGFyZWQgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gdXRpbHMucGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEoXG4gICAgICAgIE9uZVN0ZXBQcmVBcHByb3ZhbFByZXBhcmVSZXNwb25zZS5wcmVwYXJlZFRyYW5zYWN0aW9uLFxuICAgICAgICBUcmFuc2FjdGlvblR5cGUuT25lU3RlcFByZUFwcHJvdmFsXG4gICAgICApO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZERhdGEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgICBwYXJzZWREYXRhLnNlbmRlcixcbiAgICAgICAgJ0JpdGdvLWRldm5ldC12YWxpZGF0b3ItMTo6MTIyMGEwYTBmNjBiMGU2MmI1ZDc1MGM0ODRiMThjMDkxZGJhMjMwODBjMTMzZDk0NDYxNGJhNzVhNTg1OGNiYTMwNDUnXG4gICAgICApO1xuICAgICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgICBwYXJzZWREYXRhLnJlY2VpdmVyLFxuICAgICAgICAncmF2aS10ZXN0LXBhcnR5LTE6OjEyMjA1YjRlMzUzN2E5NTEyNmQ5MDYwNDU5MjM0NGQ4YWQzYzNkZGNjZGE0Zjc5OTAxOTU0MjgwZWUxOWM1NzY3MTRkJ1xuICAgICAgKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLmFtb3VudCwgJzAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIGFsbG9jYXRpb24gYWxsb2NhdGUgcHJlcGFyZWQgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gdXRpbHMucGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEoXG4gICAgICAgIENhbnRvbkFsbG9jYXRpb25BbGxvY2F0ZVByZXBhcmVSZXNwb25zZS5wcmVwYXJlZFRyYW5zYWN0aW9uLFxuICAgICAgICBUcmFuc2FjdGlvblR5cGUuQWxsb2NhdGlvbkFsbG9jYXRlXG4gICAgICApO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZERhdGEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgICBwYXJzZWREYXRhLnNlbmRlcixcbiAgICAgICAgJ3JhdmktMi1zdGVwLXBhcnR5OjoxMjIwOTJlN2QzM2FjMTBjMGYzZDU1OTc2MzQyZjM3NTU1ZGYwNWRhNWI3NDI5NTZkNTZhNjJhZTIzNjc3NjkwNzlkMidcbiAgICAgICk7XG4gICAgICAvLyByZWNlaXZlciA9IHRyYW5zZmVyTGVnLnJlY2VpdmVyIGZyb20gRHZwTGVnQWxsb2NhdGlvbiDigJQgdGhlIGFjdHVhbCBzZXR0bGVtZW50IGNvdW50ZXJwYXJ0eVxuICAgICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgICBwYXJzZWREYXRhLnJlY2VpdmVyLFxuICAgICAgICAncmF2aS0yLXN0ZXAtcGFydHktbmV3OjoxMjIwOTJlN2QzM2FjMTBjMGYzZDU1OTc2MzQyZjM3NTU1ZGYwNWRhNWI3NDI5NTZkNTZhNjJhZTIzNjc3NjkwNzlkMidcbiAgICAgICk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5hbW91bnQsICc1MDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnV2FsbGV0IGluaXQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBsb2NhbGx5IGdlbmVyYXRlIGFuZCB2YWxpZGF0ZSB0aGUgaGFzaCBmb3IgdG9wb2xvZ3kgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb21wdXRlZEhhc2ggPSB1dGlscy5jb21wdXRlSGFzaEZyb21DcmVhdGVQYXJ0eVJlc3BvbnNlKEdlbmVyYXRlVG9wb2xvZ3lSZXNwb25zZS50b3BvbG9neVRyYW5zYWN0aW9ucyk7XG4gICAgICBzaG91bGQuZXhpc3QoY29tcHV0ZWRIYXNoKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb21wdXRlZEhhc2gsIEdlbmVyYXRlVG9wb2xvZ3lSZXNwb25zZS5tdWx0aUhhc2gpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUHJlcGFyZSBzdWJtaXNzaW9uIHJlc3BvbnNlIHZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBsb2NhbGx5IGdlbmVyYXRlIGFuZCB2YWxpZGF0ZSB0aGUgaGFzaCBmb3IgcHJlcGFyZSBzdWJtaXNzaW9uIHJlc3BvbnNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29tcHV0ZWRIYXNoID0gYXdhaXQgdXRpbHMuY29tcHV0ZUhhc2hGcm9tUHJlcGFyZVN1Ym1pc3Npb25SZXNwb25zZShcbiAgICAgICAgUHJlcGFyZVN1Ym1pc3Npb25SZXNwb25zZS5wcmVwYXJlZFRyYW5zYWN0aW9uXG4gICAgICApO1xuICAgICAgc2hvdWxkLmV4aXN0KGNvbXB1dGVkSGFzaCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY29tcHV0ZWRIYXNoLCBQcmVwYXJlU3VibWlzc2lvblJlc3BvbnNlLnByZXBhcmVkVHJhbnNhY3Rpb25IYXNoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYWRkcmVzcyBpcyB2YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQWRkcmVzcyhDQU5UT05fQUREUkVTU0VTLlZBTElEX0FERFJFU1MpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXJ0eSBoaW50IGlzIGludmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEFkZHJlc3MoQ0FOVE9OX0FERFJFU1NFUy5WQUxJRF9QQVJUWV9ISU5UKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gZmluZ2VycHJpbnQgaXMgaW52YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQWRkcmVzcyhDQU5UT05fQUREUkVTU0VTLklOVkFMSURfRklOR0VSUFJJTlQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFydHkgaGludCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRBZGRyZXNzKENBTlRPTl9BRERSRVNTRVMuTUlTU0lOR19QQVJUWV9ISU5UKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGZpbmdlcnByaW50IGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEFkZHJlc3MoQ0FOVE9OX0FERFJFU1NFUy5NSVNTSU5HX0ZJTkdFUlBSSU5UKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gbWVtbyBpZCBpcyB2YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQWRkcmVzcyhDQU5UT05fQUREUkVTU0VTLlZBTElEX01FTU9fSUQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ2hlY2sgaWYgYmxvY2sgaGFzaCBpcyB2YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGJsb2NrIGhhc2ggaXMgdmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEJsb2NrSWQoQ0FOVE9OX0JMT0NLX0hFSUdIVC5WQUxJRF9IQVNIKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYmxvY2sgaGFzaCBoYXMgdmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQmxvY2tJZChDQU5UT05fQkxPQ0tfSEVJR0hULlZBTElEX0hBU0hfV0lUSF9WRVJTSU9OKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGJsb2NrIGhhc2ggaXMgbm90IGEgbnVtYmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRCbG9ja0lkKENBTlRPTl9CTE9DS19IRUlHSFQuSU5WQUxJRF9CTE9DS19IQVNIKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBibG9jayBoYXNoIGlzIG5lZ2F0aXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRCbG9ja0lkKENBTlRPTl9CTE9DS19IRUlHSFQuTkVHQVRJVkVfQkxPQ0tfSEFTSCk7XG4gICAgICBzaG91bGQuZXhpc3QoaXNWYWxpZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZCwgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnQ2FudG9uIFV0aWxzIC0gQ2FudG9uQ29tbWFuZCBoZWxwZXJzJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgncGFyc2VDYW50b25UZW1wbGF0ZUlkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcGFyc2UgdmFsaWQgXCJQa2c6TW9kdWxlOkVudGl0eVwiIGZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLnBhcnNlQ2FudG9uVGVtcGxhdGVJZChcbiAgICAgICAgJ2FiYzEyMzpVdGlsaXR5LlJlZ2lzdHJ5LkFwcC5WMC5TZXJ2aWNlLkFsbG9jYXRpb25GYWN0b3J5OkFsbG9jYXRpb25GYWN0b3J5J1xuICAgICAgKTtcbiAgICAgIHNob3VsZC5leGlzdChyZXN1bHQpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCEucGtnLCAnYWJjMTIzJyk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0IS5tb2R1bGVOYW1lLCAnVXRpbGl0eS5SZWdpc3RyeS5BcHAuVjAuU2VydmljZS5BbGxvY2F0aW9uRmFjdG9yeScpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCEuZW50aXR5TmFtZSwgJ0FsbG9jYXRpb25GYWN0b3J5Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIG5vbi1zdHJpbmcgaW5wdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5wYXJzZUNhbnRvblRlbXBsYXRlSWQoMTIzIGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIHdyb25nIG51bWJlciBvZiBwYXJ0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLnBhcnNlQ2FudG9uVGVtcGxhdGVJZCgnUGtnT25seScpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgZW1wdHkgcGFydHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5wYXJzZUNhbnRvblRlbXBsYXRlSWQoJzpNb2R1bGU6RW50aXR5Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBzdHJpbmcgd2l0aCBvbmx5IDIgcGFydHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5wYXJzZUNhbnRvblRlbXBsYXRlSWQoJ1BrZzpNb2R1bGUnKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkYW1sVmFsdWVUb0pzb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciB1bmRlZmluZWQgaW5wdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5kYW1sVmFsdWVUb0pzb24odW5kZWZpbmVkKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgdW5pdCB0byBudWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHsgc3VtOiB7IG9uZW9mS2luZDogJ3VuaXQnLCB1bml0OiB7fSB9IH07XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksIG51bGwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGJvb2wgY29ycmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHsgc3VtOiB7IG9uZW9mS2luZDogJ2Jvb2wnLCBib29sOiB0cnVlIH0gfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgdGV4dCBjb3JyZWN0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0geyBzdW06IHsgb25lb2ZLaW5kOiAndGV4dCcsIHRleHQ6ICdoZWxsbycgfSB9O1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLmRhbWxWYWx1ZVRvSnNvbih2YWwpLCAnaGVsbG8nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBjb250cmFjdElkIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbDogVmFsdWUgPSB7IHN1bTogeyBvbmVvZktpbmQ6ICdjb250cmFjdElkJywgY29udHJhY3RJZDogJzAwYWJjJyB9IH07XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksICcwMGFiYycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IHBhcnR5IGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbDogVmFsdWUgPSB7IHN1bTogeyBvbmVvZktpbmQ6ICdwYXJ0eScsIHBhcnR5OiAnQWxpY2U6OjEyMzQnIH0gfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgJ0FsaWNlOjoxMjM0Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgbnVtZXJpYyBjb3JyZWN0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0geyBzdW06IHsgb25lb2ZLaW5kOiAnbnVtZXJpYycsIG51bWVyaWM6ICcxMDAuMDAwMDAwMDAwMCcgfSB9O1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLmRhbWxWYWx1ZVRvSnNvbih2YWwpLCAnMTAwLjAwMDAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBvcHRpb25hbCB3aXRoIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHtcbiAgICAgICAgc3VtOiB7XG4gICAgICAgICAgb25lb2ZLaW5kOiAnb3B0aW9uYWwnLFxuICAgICAgICAgIG9wdGlvbmFsOiB7IHZhbHVlOiB7IHN1bTogeyBvbmVvZktpbmQ6ICd0ZXh0JywgdGV4dDogJ2lubmVyJyB9IH0gfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksICdpbm5lcicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IG9wdGlvbmFsIHdpdGhvdXQgdmFsdWUgdG8gbnVsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbDogVmFsdWUgPSB7IHN1bTogeyBvbmVvZktpbmQ6ICdvcHRpb25hbCcsIG9wdGlvbmFsOiB7fSB9IH07XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksIG51bGwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGxpc3QgdG8gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0ge1xuICAgICAgICBzdW06IHtcbiAgICAgICAgICBvbmVvZktpbmQ6ICdsaXN0JyxcbiAgICAgICAgICBsaXN0OiB7XG4gICAgICAgICAgICBlbGVtZW50czogW3sgc3VtOiB7IG9uZW9mS2luZDogJ3RleHQnLCB0ZXh0OiAnYScgfSB9LCB7IHN1bTogeyBvbmVvZktpbmQ6ICd0ZXh0JywgdGV4dDogJ2InIH0gfV0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKHV0aWxzLmRhbWxWYWx1ZVRvSnNvbih2YWwpLCBbJ2EnLCAnYiddKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCB0ZXh0TWFwIHRvIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbDogVmFsdWUgPSB7XG4gICAgICAgIHN1bToge1xuICAgICAgICAgIG9uZW9mS2luZDogJ3RleHRNYXAnLFxuICAgICAgICAgIHRleHRNYXA6IHtcbiAgICAgICAgICAgIGVudHJpZXM6IFtcbiAgICAgICAgICAgICAgeyBrZXk6ICdrMScsIHZhbHVlOiB7IHN1bTogeyBvbmVvZktpbmQ6ICd0ZXh0JywgdGV4dDogJ3YxJyB9IH0gfSxcbiAgICAgICAgICAgICAgeyBrZXk6ICdrMicsIHZhbHVlOiB7IHN1bTogeyBvbmVvZktpbmQ6ICdib29sJywgYm9vbDogZmFsc2UgfSB9IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgeyBrMTogJ3YxJywgazI6IGZhbHNlIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IHJlY29yZCB0byBvYmplY3Qgd2l0aCBsYWJlbCBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHtcbiAgICAgICAgc3VtOiB7XG4gICAgICAgICAgb25lb2ZLaW5kOiAncmVjb3JkJyxcbiAgICAgICAgICByZWNvcmQ6IHtcbiAgICAgICAgICAgIGZpZWxkczogW1xuICAgICAgICAgICAgICB7IGxhYmVsOiAnbmFtZScsIHZhbHVlOiB7IHN1bTogeyBvbmVvZktpbmQ6ICd0ZXh0JywgdGV4dDogJ0FsaWNlJyB9IH0gfSxcbiAgICAgICAgICAgICAgeyBsYWJlbDogJ2FnZScsIHZhbHVlOiB7IHN1bTogeyBvbmVvZktpbmQ6ICdpbnQ2NCcsIGludDY0OiAnMzAnIH0gfSB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksIHsgbmFtZTogJ0FsaWNlJywgYWdlOiAnMzAnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IHZhcmlhbnQgdG8ga2V5ZWQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHtcbiAgICAgICAgc3VtOiB7XG4gICAgICAgICAgb25lb2ZLaW5kOiAndmFyaWFudCcsXG4gICAgICAgICAgdmFyaWFudDoge1xuICAgICAgICAgICAgY29uc3RydWN0b3I6ICdTb21lJyxcbiAgICAgICAgICAgIHZhbHVlOiB7IHN1bTogeyBvbmVvZktpbmQ6ICd0ZXh0JywgdGV4dDogJ3YnIH0gfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksIHsgU29tZTogJ3YnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGVudW0gdG8gc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHtcbiAgICAgICAgc3VtOiB7XG4gICAgICAgICAgb25lb2ZLaW5kOiAnZW51bScsXG4gICAgICAgICAgZW51bTogeyBjb25zdHJ1Y3RvcjogJ0FjdGl2ZScgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksICdBY3RpdmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2V4dHJhY3RTdWJtaXR0ZXJBY3RBcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGV4dHJhY3QgYWN0QXMgZnJvbSByZWFsIFByZXBhcmVkVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhY3RBcyA9IHV0aWxzLmV4dHJhY3RTdWJtaXR0ZXJBY3RBcyhDYW50b25FeGVyY2lzZUNvbW1hbmRQcmVwYXJlUmVzcG9uc2UucHJlcGFyZWRUcmFuc2FjdGlvbik7XG4gICAgICBzaG91bGQuZXhpc3QoYWN0QXMpO1xuICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkoYWN0QXMpKTtcbiAgICAgIGFzc2VydC5lcXVhbChhY3RBcy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGFjdEFzWzBdLCAnUmVnUmVnaXN0cmFyOjoxMjIwNTA4ZTU0ZmI3MDlkY2IxYTliNDA5NjQwOGFkNDE1ZDIyMTdkODg4MWFkOTAzNGE5ODUwNzUyOTMzYmE4OGFkNScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZXh0cmFjdENhbnRvbkNvbW1hbmRJbmZvJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZXh0cmFjdCBFeGVyY2lzZUNvbW1hbmQgaW5mbyBjb3JyZWN0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbmZvID0gdXRpbHMuZXh0cmFjdENhbnRvbkNvbW1hbmRJbmZvKENhbnRvbkV4ZXJjaXNlQ29tbWFuZFByZXBhcmVSZXNwb25zZS5wcmVwYXJlZFRyYW5zYWN0aW9uKTtcbiAgICAgIHNob3VsZC5leGlzdChpbmZvKTtcbiAgICAgIGFzc2VydC5lcXVhbChpbmZvLmtpbmQsICdFeGVyY2lzZUNvbW1hbmQnKTtcbiAgICAgIGFzc2VydC5lcXVhbChpbmZvLnRlbXBsYXRlSWQubW9kdWxlTmFtZSwgJ1V0aWxpdHkuUmVnaXN0cnkuQXBwLlYwLlNlcnZpY2UuQWxsb2NhdGlvbkZhY3RvcnknKTtcbiAgICAgIGFzc2VydC5lcXVhbChpbmZvLnRlbXBsYXRlSWQuZW50aXR5TmFtZSwgJ0FsbG9jYXRpb25GYWN0b3J5Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwoaW5mby5jaG9pY2UsICdBbGxvY2F0aW9uRmFjdG9yeV9PZmZlck1pbnQnKTtcbiAgICAgIHNob3VsZC5leGlzdChpbmZvLmNvbnRyYWN0SWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGluZm8uYWN0aW5nUGFydGllcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzYW1lRWxlbWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgaWRlbnRpY2FsIGFycmF5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5zYW1lRWxlbWVudHMoWydhJywgJ2InLCAnYyddLCBbJ2EnLCAnYicsICdjJ10pLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIHNhbWUgZWxlbWVudHMgaW4gZGlmZmVyZW50IG9yZGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLnNhbWVFbGVtZW50cyhbJ2MnLCAnYScsICdiJ10sIFsnYScsICdiJywgJ2MnXSksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGRpZmZlcmVudCBsZW5ndGhzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLnNhbWVFbGVtZW50cyhbJ2EnLCAnYiddLCBbJ2EnLCAnYicsICdjJ10pLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgZGlmZmVyZW50IGVsZW1lbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLnNhbWVFbGVtZW50cyhbJ2EnLCAnYicsICd4J10sIFsnYScsICdiJywgJ2MnXSksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGVtcHR5IGFycmF5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5zYW1lRWxlbWVudHMoW10sIFtdKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG9uZSBhcnJheSBoYXMgZHVwbGljYXRlcyB0aGUgb3RoZXIgZG9lcyBub3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuc2FtZUVsZW1lbnRzKFsneCcsICd4J10sIFsneCcsICd5J10pLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdub3JtYWxpemVJbmplY3RBcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHN0cmlwIFwiY29tbWFuZC5cIiBwcmVmaXggZnJvbSBpbmplY3RBcyBwYXRocycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNwZWNzID0gW3sgaW5qZWN0QXM6ICdjb21tYW5kLkV4ZXJjaXNlQ29tbWFuZC5jb250cmFjdElkJyB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLm5vcm1hbGl6ZUluamVjdEFzKHNwZWNzKTtcbiAgICAgIGFzc2VydC5vayhyZXN1bHQuaGFzKCdFeGVyY2lzZUNvbW1hbmQuY29udHJhY3RJZCcpKTtcbiAgICAgIGFzc2VydC5vayghcmVzdWx0LmhhcygnY29tbWFuZC5FeGVyY2lzZUNvbW1hbmQuY29udHJhY3RJZCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHNwZWNzIHdpdGggZW1wdHkgaW5qZWN0QXMgZmllbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5ub3JtYWxpemVJbmplY3RBcyhbeyBpbmplY3RBczogJycgfV0pO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC5zaXplLCAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGVtcHR5IHNwZWNzIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMubm9ybWFsaXplSW5qZWN0QXMoW10pO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC5zaXplLCAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHVuZGVmaW5lZCBzcGVjcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLm5vcm1hbGl6ZUluamVjdEFzKHVuZGVmaW5lZCk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnNpemUsIDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcmVzZXJ2ZSBwYXRocyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoIFwiY29tbWFuZC5cIicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNwZWNzID0gW3sgaW5qZWN0QXM6ICdFeGVyY2lzZUNvbW1hbmQuY29udHJhY3RJZCcgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5ub3JtYWxpemVJbmplY3RBcyhzcGVjcyk7XG4gICAgICBhc3NlcnQub2socmVzdWx0LmhhcygnRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWQnKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhc3NlcnREZWVwQ2FudG9uTWF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgbm9JbmplY3QgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyBmb3IgbWF0Y2hpbmcgcHJpbWl0aXZlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKCdoZWxsbycsICdoZWxsbycsIG5vSW5qZWN0KSk7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCg0MiwgNDIsIG5vSW5qZWN0KSk7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCh0cnVlLCB0cnVlLCBub0luamVjdCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIGZvciBtYXRjaGluZyBvYmplY3RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PlxuICAgICAgICB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goeyBhOiAneCcsIGI6ICd5JyB9LCB7IGE6ICd4JywgYjogJ3knLCBleHRyYTogJ3onIH0sIG5vSW5qZWN0KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxsb3cgZXh0cmEgZmllbGRzIGluIGFjdHVhbCB0aGF0IHVzZXIgZGlkIG5vdCBzcGVjaWZ5JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PlxuICAgICAgICB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goXG4gICAgICAgICAgeyBuYW1lOiAnQWxpY2UnIH0sXG4gICAgICAgICAgeyBuYW1lOiAnQWxpY2UnLCB0aW1lc3RhbXA6ICcyMDI0LTAxLTAxJywgaGFzaDogJ2FiYycgfSxcbiAgICAgICAgICBub0luamVjdFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIGZvciBtYXRjaGluZyBhcnJheXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaChbJ2EnLCAnYiddLCBbJ2EnLCAnYiddLCBub0luamVjdCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBza2lwIHBhdGhzIGluIGluamVjdEFzUGF0aHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbmplY3RQYXRocyA9IG5ldyBTZXQoWydFeGVyY2lzZUNvbW1hbmQuY29udHJhY3RJZCddKTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT5cbiAgICAgICAgdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKFxuICAgICAgICAgIHsgRXhlcmNpc2VDb21tYW5kOiB7IGNvbnRyYWN0SWQ6IHVuZGVmaW5lZCwgY2hvaWNlOiAnRm9vJyB9IH0sXG4gICAgICAgICAgeyBFeGVyY2lzZUNvbW1hbmQ6IHsgY29udHJhY3RJZDogJzAwYWJjJywgY2hvaWNlOiAnRm9vJyB9IH0sXG4gICAgICAgICAgaW5qZWN0UGF0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2tpcCB1bmRlZmluZWQgZXhwZWN0ZWQgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2godW5kZWZpbmVkLCAnYW55dGhpbmcnLCBub0luamVjdCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgZW1wdHkgb2JqZWN0IHt9IGFnYWluc3QgYWN0dWFsIChub3Qgc2tpcCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCh7fSwge30sIG5vSW5qZWN0KSk7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCh7fSwgeyBleHRyYTogJ2ZpZWxkJyB9LCBub0luamVjdCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgZW1wdHkgYXJyYXkgW10gYWdhaW5zdCBhY3R1YWwgKG5vdCBza2lwKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKFtdLCBbXSwgbm9JbmplY3QpKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKFtdLCBbJ2EnXSwgbm9JbmplY3QpLCAvbGlzdC1sZW5ndGggbWlzbWF0Y2gvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29tcGFyZSBudW1lcmljIHN0cmluZ3Mgd2l0aCBCaWdOdW1iZXIgZXF1aXZhbGVuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCgnMTAwJywgJzEwMC4wMDAwMDAwMDAwJywgbm9JbmplY3QpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gcHJpbWl0aXZlIG1pc21hdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goJ2hlbGxvJywgJ3dvcmxkJywgbm9JbmplY3QpLCAvbWlzbWF0Y2gvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gYXJyYXkgbGVuZ3RoIG1pc21hdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goWydhJywgJ2InXSwgWydhJ10sIG5vSW5qZWN0KSwgL2xpc3QtbGVuZ3RoIG1pc21hdGNoLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIG1pc3NpbmcgZmllbGQgKHVzZXIgc3BlY2lmaWVkIGJ1dCBub3QgaW4gYWN0dWFsKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCh7IHJlcXVpcmVkOiAndmFsJyB9LCB7IG90aGVyOiAndmFsJyB9LCBub0luamVjdCksXG4gICAgICAgIC9taXNzaW5nIGZpZWxkL1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gdHlwZSBtaXNtYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKHsgYTogJ3N0cicgfSwgeyBhOiA0MiB9LCBub0luamVjdCksIC9taXNtYXRjaC8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
433
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBRTVCLDhDQUFrRDtBQUVsRCxnRUFBd0M7QUFFeEMsNENBY3NCO0FBRXRCLFFBQVEsQ0FBQyxhQUFhLEVBQUU7SUFDdEIsUUFBUSxDQUFDLHdCQUF3QixFQUFFO1FBQ2pDLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLDZCQUE2QixDQUFDLHNDQUEwQixFQUFFLDBCQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSw2RUFBNkUsQ0FBQyxDQUFDO1lBQy9HLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsNkVBQTZFLENBQUMsQ0FBQztZQUNqSCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFO1lBQzdELE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyw2QkFBNkIsQ0FBQyx1Q0FBMkIsRUFBRSwwQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFHLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pCLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsNkVBQTZFLENBQUMsQ0FBQztZQUMvRyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLDZFQUE2RSxDQUFDLENBQUM7WUFDakgsZ0JBQU0sQ0FB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QUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyRixDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw4RUFBOEUsRUFBRTtnQkFDakYsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksR0FBRyxPQUFTLENBQUMsQ0FBQztnQkFFckUsTUFBTSxRQUFRLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFFbEQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztZQUNyRyxDQUFDLENBQUMsQ0FBQztZQUVILEVBQUUsQ0FBQyw0RUFBNEUsRUFBRTtnQkFDL0UsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNyRyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcblxuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgVmFsdWUgfSBmcm9tICcuLi8uLi9zcmMvbGliL3Jlc291cmNlc0ludGVyZmFjZSc7XG5pbXBvcnQge1xuICBDQU5UT05fQUREUkVTU0VTLFxuICBDQU5UT05fQkxPQ0tfSEVJR0hULFxuICBDYW50b25BbGxvY2F0aW9uQWxsb2NhdGVQcmVwYXJlUmVzcG9uc2UsXG4gIENhbnRvbkV4ZXJjaXNlQ29tbWFuZFByZXBhcmVSZXNwb25zZSxcbiAgR2VuZXJhdGVUb3BvbG9neVJlc3BvbnNlLFxuICBPbmVTdGVwUHJlQXBwcm92YWxQcmVwYXJlUmVzcG9uc2UsXG4gIFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhLFxuICBQcmVwYXJlZFRyYW5zYWN0aW9uV2l0aE1lbW8sXG4gIFByZXBhcmVkVHhuMVN0ZXBSZWNlaXZlcixcbiAgUHJlcGFyZWRUeG4yU3RlcFJlY2VpdmVyLFxuICBQcmVwYXJlU3VibWlzc2lvblJlc3BvbnNlLFxuICBUcmFuc2ZlckFjY2VwdGFuY2VQcmVwYXJlUmVzcG9uc2UsXG4gIFRyYW5zZmVyUmVqZWN0aW9uUHJlcGFyZVJlc3BvbnNlLFxufSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuXG5kZXNjcmliZSgnQ2FudG9uIFV0aWwnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdSYXcgdHJhbnNhY3Rpb24gcGFyc2VyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIHByZXBhcmVkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IHV0aWxzLnBhcnNlUmF3Q2FudG9uVHJhbnNhY3Rpb25EYXRhKFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkRGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5zZW5kZXIsICdhYmMtMTo6MTIyMDBjMWVlMjI2ZmJkZjlmYmEzNDYxYzJjMGM3MzMzMWI2OWQzYzZmZDhjZmNlMjhjZGY4NjQxNDExNDFjYzY1NmQnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnJlY2VpdmVyLCAnYWJjLTI6OjEyMjA3ZTk2YWRhMThhODQ1YWRmNGRjMDE0MTAyNjU2MzNkNTI2NmRjYTliYjI4MGM5OGUzNWMzNjkyZGI4N2QzZTM1Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5hbW91bnQsICcyMDAwMDAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIHByZXBhcmVkIHRyYW5zYWN0aW9uIHdpdGggbWVtbyBpZCBmaWVsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShQcmVwYXJlZFRyYW5zYWN0aW9uV2l0aE1lbW8sIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIHNob3VsZC5leGlzdChwYXJzZWREYXRhKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnNlbmRlciwgJzEyMjBiOjoxMjIwYmFiNmVmM2VlYzM3YjFiMzgxNjA5OWJlZmU3MmI0M2JmNmMxMzgwMDc3ZDYzNDkyNTRjNDFmZmI3Zjc3NTNiYicpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEucmVjZWl2ZXIsICcxMjIwYTo6MTIyMGFkZTYwMzAwY2Y3ZDBiMThmZmFhMmZmZTRmNDkyYWQxYWQ2MDFjZmMxNjJiMjBmNzdlYzk5ZDE2YzJjMmYxNTgnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLmFtb3VudCwgJzEwMDAwMDAwMDAnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLm1lbW9JZCwgJzExJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIGNvcnJlY3RseSB3aGVuIHJlY2VpdmVyIGlzIG9uIDItc3RlcCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShQcmVwYXJlZFR4bjJTdGVwUmVjZWl2ZXIsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIHNob3VsZC5leGlzdChwYXJzZWREYXRhKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnNlbmRlciwgJzEyMjBhOjoxMjIwYWRlNjAzMDBjZjdkMGIxOGZmYWEyZmZlNGY0OTJhZDFhZDYwMWNmYzE2MmIyMGY3N2VjOTlkMTZjMmMyZjE1OCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgICBwYXJzZWREYXRhLnJlY2VpdmVyLFxuICAgICAgICAncmF2aS10ZXN0LXBhcnR5LTE6OjEyMjA5MmU3ZDMzYWMxMGMwZjNkNTU5NzYzNDJmMzc1NTVkZjA1ZGE1Yjc0Mjk1NmQ1NmE2MmFlMjM2Nzc2OTA3OWQyJ1xuICAgICAgKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLmFtb3VudCwgJzIwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIGNvcnJlY3RseSAxJywgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IHV0aWxzLnBhcnNlUmF3Q2FudG9uVHJhbnNhY3Rpb25EYXRhKFByZXBhcmVkVHhuMVN0ZXBSZWNlaXZlciwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZERhdGEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuc2VuZGVyLCAnMTIyMGE6OjEyMjBhZGU2MDMwMGNmN2QwYjE4ZmZhYTJmZmU0ZjQ5MmFkMWFkNjAxY2ZjMTYyYjIwZjc3ZWM5OWQxNmMyYzJmMTU4Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIHBhcnNlZERhdGEucmVjZWl2ZXIsXG4gICAgICAgICdyYXZpLWRlbW8tcGFydHktdHhuLTAxLXRhcHBlcjo6MTIyMGVhN2FiNWE3MjNmOGE2YjIwNzhlNjE3ZTZjNThjYjdlNzhlNDk5NDdkZGMyMzllMWE5NDFhYTU2ZTZiYTA4YjQnXG4gICAgICApO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuYW1vdW50LCAnMjAwMDAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIGFjY2VwdGFuY2UgcHJlcGFyZWQgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gdXRpbHMucGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEoXG4gICAgICAgIFRyYW5zZmVyQWNjZXB0YW5jZVByZXBhcmVSZXNwb25zZS5wcmVwYXJlZFRyYW5zYWN0aW9uLFxuICAgICAgICBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJBY2NlcHRcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkRGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5zZW5kZXIsICdEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhJyk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5yZWNlaXZlciwgJ2FiY2RlOjoxMjIwNWI0ZTM1MzdhOTUxMjZkOTA2MDQ1OTIzNDRkOGFkM2MzZGRjY2RhNGY3OTkwMTk1NDI4MGVlMTljNTc2NzE0ZCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuYW1vdW50LCAnNTAwMDAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIHJlamVjdGlvbiBwcmVwYXJlZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShcbiAgICAgICAgVHJhbnNmZXJSZWplY3Rpb25QcmVwYXJlUmVzcG9uc2UucHJlcGFyZWRUcmFuc2FjdGlvbixcbiAgICAgICAgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyUmVqZWN0XG4gICAgICApO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZERhdGEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuc2VuZGVyLCAnRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYScpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEucmVjZWl2ZXIsICcxMjIwMTo6MTIyMDM4NDAyY2YxNjUwODc2ZDI5MjBkNjA0N2IxMWE0YWFmMGRlN2I0MjhlOTkxNjAwOWNiYTJhMjJiMWFlMjJjMWEnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLmFtb3VudCwgJzUwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIHRoZSBvbmUtc3RlcCBwcmVhcHByb3ZhbCBwcmVwYXJlZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShcbiAgICAgICAgT25lU3RlcFByZUFwcHJvdmFsUHJlcGFyZVJlc3BvbnNlLnByZXBhcmVkVHJhbnNhY3Rpb24sXG4gICAgICAgIFRyYW5zYWN0aW9uVHlwZS5PbmVTdGVwUHJlQXBwcm92YWxcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkRGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIHBhcnNlZERhdGEuc2VuZGVyLFxuICAgICAgICAnQml0Z28tZGV2bmV0LXZhbGlkYXRvci0xOjoxMjIwYTBhMGY2MGIwZTYyYjVkNzUwYzQ4NGIxOGMwOTFkYmEyMzA4MGMxMzNkOTQ0NjE0YmE3NWE1ODU4Y2JhMzA0NSdcbiAgICAgICk7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIHBhcnNlZERhdGEucmVjZWl2ZXIsXG4gICAgICAgICdyYXZpLXRlc3QtcGFydHktMTo6MTIyMDViNGUzNTM3YTk1MTI2ZDkwNjA0NTkyMzQ0ZDhhZDNjM2RkY2NkYTRmNzk5MDE5NTQyODBlZTE5YzU3NjcxNGQnXG4gICAgICApO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuYW1vdW50LCAnMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB0aGUgYWxsb2NhdGlvbiBhbGxvY2F0ZSBwcmVwYXJlZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShcbiAgICAgICAgQ2FudG9uQWxsb2NhdGlvbkFsbG9jYXRlUHJlcGFyZVJlc3BvbnNlLnByZXBhcmVkVHJhbnNhY3Rpb24sXG4gICAgICAgIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uQWxsb2NhdGVcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkRGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIHBhcnNlZERhdGEuc2VuZGVyLFxuICAgICAgICAncmF2aS0yLXN0ZXAtcGFydHk6OjEyMjA5MmU3ZDMzYWMxMGMwZjNkNTU5NzYzNDJmMzc1NTVkZjA1ZGE1Yjc0Mjk1NmQ1NmE2MmFlMjM2Nzc2OTA3OWQyJ1xuICAgICAgKTtcbiAgICAgIC8vIHJlY2VpdmVyID0gdHJhbnNmZXJMZWcucmVjZWl2ZXIgZnJvbSBEdnBMZWdBbGxvY2F0aW9uIOKAlCB0aGUgYWN0dWFsIHNldHRsZW1lbnQgY291bnRlcnBhcnR5XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIHBhcnNlZERhdGEucmVjZWl2ZXIsXG4gICAgICAgICdyYXZpLTItc3RlcC1wYXJ0eS1uZXc6OjEyMjA5MmU3ZDMzYWMxMGMwZjNkNTU5NzYzNDJmMzc1NTVkZjA1ZGE1Yjc0Mjk1NmQ1NmE2MmFlMjM2Nzc2OTA3OWQyJ1xuICAgICAgKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLmFtb3VudCwgJzUwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdXYWxsZXQgaW5pdCB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGxvY2FsbHkgZ2VuZXJhdGUgYW5kIHZhbGlkYXRlIHRoZSBoYXNoIGZvciB0b3BvbG9neSB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkSGFzaCA9IHV0aWxzLmNvbXB1dGVIYXNoRnJvbUNyZWF0ZVBhcnR5UmVzcG9uc2UoR2VuZXJhdGVUb3BvbG9neVJlc3BvbnNlLnRvcG9sb2d5VHJhbnNhY3Rpb25zKTtcbiAgICAgIHNob3VsZC5leGlzdChjb21wdXRlZEhhc2gpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbXB1dGVkSGFzaCwgR2VuZXJhdGVUb3BvbG9neVJlc3BvbnNlLm11bHRpSGFzaCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQcmVwYXJlIHN1Ym1pc3Npb24gcmVzcG9uc2UgdmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGxvY2FsbHkgZ2VuZXJhdGUgYW5kIHZhbGlkYXRlIHRoZSBoYXNoIGZvciBwcmVwYXJlIHN1Ym1pc3Npb24gcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb21wdXRlZEhhc2ggPSBhd2FpdCB1dGlscy5jb21wdXRlSGFzaEZyb21QcmVwYXJlU3VibWlzc2lvblJlc3BvbnNlKFxuICAgICAgICBQcmVwYXJlU3VibWlzc2lvblJlc3BvbnNlLnByZXBhcmVkVHJhbnNhY3Rpb25cbiAgICAgICk7XG4gICAgICBzaG91bGQuZXhpc3QoY29tcHV0ZWRIYXNoKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb21wdXRlZEhhc2gsIFByZXBhcmVTdWJtaXNzaW9uUmVzcG9uc2UucHJlcGFyZWRUcmFuc2FjdGlvbkhhc2gpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ2hlY2sgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhZGRyZXNzIGlzIHZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRBZGRyZXNzKENBTlRPTl9BRERSRVNTRVMuVkFMSURfQUREUkVTUyk7XG4gICAgICBzaG91bGQuZXhpc3QoaXNWYWxpZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhcnR5IGhpbnQgaXMgaW52YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQWRkcmVzcyhDQU5UT05fQUREUkVTU0VTLlZBTElEX1BBUlRZX0hJTlQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBmaW5nZXJwcmludCBpcyBpbnZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRBZGRyZXNzKENBTlRPTl9BRERSRVNTRVMuSU5WQUxJRF9GSU5HRVJQUklOVCk7XG4gICAgICBzaG91bGQuZXhpc3QoaXNWYWxpZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZCwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXJ0eSBoaW50IGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEFkZHJlc3MoQ0FOVE9OX0FERFJFU1NFUy5NSVNTSU5HX1BBUlRZX0hJTlQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gZmluZ2VycHJpbnQgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQWRkcmVzcyhDQU5UT05fQUREUkVTU0VTLk1JU1NJTkdfRklOR0VSUFJJTlQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBtZW1vIGlkIGlzIHZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRBZGRyZXNzKENBTlRPTl9BRERSRVNTRVMuVkFMSURfTUVNT19JRCk7XG4gICAgICBzaG91bGQuZXhpc3QoaXNWYWxpZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZCwgdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDaGVjayBpZiBibG9jayBoYXNoIGlzIHZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYmxvY2sgaGFzaCBpcyB2YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQmxvY2tJZChDQU5UT05fQkxPQ0tfSEVJR0hULlZBTElEX0hBU0gpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBibG9jayBoYXNoIGhhcyB2ZXJzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRCbG9ja0lkKENBTlRPTl9CTE9DS19IRUlHSFQuVkFMSURfSEFTSF9XSVRIX1ZFUlNJT04pO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgYmxvY2sgaGFzaCBpcyBub3QgYSBudW1iZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEJsb2NrSWQoQ0FOVE9OX0JMT0NLX0hFSUdIVC5JTlZBTElEX0JMT0NLX0hBU0gpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGJsb2NrIGhhc2ggaXMgbmVnYXRpdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEJsb2NrSWQoQ0FOVE9OX0JMT0NLX0hFSUdIVC5ORUdBVElWRV9CTE9DS19IQVNIKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdDYW50b24gVXRpbHMgLSBDYW50b25Db21tYW5kIGhlbHBlcnMnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdwYXJzZUNhbnRvblRlbXBsYXRlSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB2YWxpZCBcIlBrZzpNb2R1bGU6RW50aXR5XCIgZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMucGFyc2VDYW50b25UZW1wbGF0ZUlkKFxuICAgICAgICAnYWJjMTIzOlV0aWxpdHkuUmVnaXN0cnkuQXBwLlYwLlNlcnZpY2UuQWxsb2NhdGlvbkZhY3Rvcnk6QWxsb2NhdGlvbkZhY3RvcnknXG4gICAgICApO1xuICAgICAgc2hvdWxkLmV4aXN0KHJlc3VsdCk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0IS5wa2csICdhYmMxMjMnKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQhLm1vZHVsZU5hbWUsICdVdGlsaXR5LlJlZ2lzdHJ5LkFwcC5WMC5TZXJ2aWNlLkFsbG9jYXRpb25GYWN0b3J5Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0IS5lbnRpdHlOYW1lLCAnQWxsb2NhdGlvbkZhY3RvcnknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3Igbm9uLXN0cmluZyBpbnB1dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLnBhcnNlQ2FudG9uVGVtcGxhdGVJZCgxMjMgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3Igd3JvbmcgbnVtYmVyIG9mIHBhcnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMucGFyc2VDYW50b25UZW1wbGF0ZUlkKCdQa2dPbmx5Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBlbXB0eSBwYXJ0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLnBhcnNlQ2FudG9uVGVtcGxhdGVJZCgnOk1vZHVsZTpFbnRpdHknKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIHN0cmluZyB3aXRoIG9ubHkgMiBwYXJ0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLnBhcnNlQ2FudG9uVGVtcGxhdGVJZCgnUGtnOk1vZHVsZScpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RhbWxWYWx1ZVRvSnNvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIHVuZGVmaW5lZCBpbnB1dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLmRhbWxWYWx1ZVRvSnNvbih1bmRlZmluZWQpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCB1bml0IHRvIG51bGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0geyBzdW06IHsgb25lb2ZLaW5kOiAndW5pdCcsIHVuaXQ6IHt9IH0gfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgbnVsbCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYm9vbCBjb3JyZWN0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0geyBzdW06IHsgb25lb2ZLaW5kOiAnYm9vbCcsIGJvb2w6IHRydWUgfSB9O1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLmRhbWxWYWx1ZVRvSnNvbih2YWwpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCB0ZXh0IGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbDogVmFsdWUgPSB7IHN1bTogeyBvbmVvZktpbmQ6ICd0ZXh0JywgdGV4dDogJ2hlbGxvJyB9IH07XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksICdoZWxsbycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGNvbnRyYWN0SWQgY29ycmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHsgc3VtOiB7IG9uZW9mS2luZDogJ2NvbnRyYWN0SWQnLCBjb250cmFjdElkOiAnMDBhYmMnIH0gfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgJzAwYWJjJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgcGFydHkgY29ycmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHsgc3VtOiB7IG9uZW9mS2luZDogJ3BhcnR5JywgcGFydHk6ICdBbGljZTo6MTIzNCcgfSB9O1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLmRhbWxWYWx1ZVRvSnNvbih2YWwpLCAnQWxpY2U6OjEyMzQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBudW1lcmljIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbDogVmFsdWUgPSB7IHN1bTogeyBvbmVvZktpbmQ6ICdudW1lcmljJywgbnVtZXJpYzogJzEwMC4wMDAwMDAwMDAwJyB9IH07XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksICcxMDAuMDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IG9wdGlvbmFsIHdpdGggdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0ge1xuICAgICAgICBzdW06IHtcbiAgICAgICAgICBvbmVvZktpbmQ6ICdvcHRpb25hbCcsXG4gICAgICAgICAgb3B0aW9uYWw6IHsgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ3RleHQnLCB0ZXh0OiAnaW5uZXInIH0gfSB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgJ2lubmVyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgb3B0aW9uYWwgd2l0aG91dCB2YWx1ZSB0byBudWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHsgc3VtOiB7IG9uZW9mS2luZDogJ29wdGlvbmFsJywgb3B0aW9uYWw6IHt9IH0gfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgbnVsbCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgbGlzdCB0byBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbDogVmFsdWUgPSB7XG4gICAgICAgIHN1bToge1xuICAgICAgICAgIG9uZW9mS2luZDogJ2xpc3QnLFxuICAgICAgICAgIGxpc3Q6IHtcbiAgICAgICAgICAgIGVsZW1lbnRzOiBbeyBzdW06IHsgb25lb2ZLaW5kOiAndGV4dCcsIHRleHQ6ICdhJyB9IH0sIHsgc3VtOiB7IG9uZW9mS2luZDogJ3RleHQnLCB0ZXh0OiAnYicgfSB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksIFsnYScsICdiJ10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IHRleHRNYXAgdG8gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHtcbiAgICAgICAgc3VtOiB7XG4gICAgICAgICAgb25lb2ZLaW5kOiAndGV4dE1hcCcsXG4gICAgICAgICAgdGV4dE1hcDoge1xuICAgICAgICAgICAgZW50cmllczogW1xuICAgICAgICAgICAgICB7IGtleTogJ2sxJywgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ3RleHQnLCB0ZXh0OiAndjEnIH0gfSB9LFxuICAgICAgICAgICAgICB7IGtleTogJ2syJywgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ2Jvb2wnLCBib29sOiBmYWxzZSB9IH0gfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKHV0aWxzLmRhbWxWYWx1ZVRvSnNvbih2YWwpLCB7IGsxOiAndjEnLCBrMjogZmFsc2UgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgcmVjb3JkIHRvIG9iamVjdCB3aXRoIGxhYmVsIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0ge1xuICAgICAgICBzdW06IHtcbiAgICAgICAgICBvbmVvZktpbmQ6ICdyZWNvcmQnLFxuICAgICAgICAgIHJlY29yZDoge1xuICAgICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICduYW1lJywgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ3RleHQnLCB0ZXh0OiAnQWxpY2UnIH0gfSB9LFxuICAgICAgICAgICAgICB7IGxhYmVsOiAnYWdlJywgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ2ludDY0JywgaW50NjQ6ICczMCcgfSB9IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgeyBuYW1lOiAnQWxpY2UnLCBhZ2U6ICczMCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgdmFyaWFudCB0byBrZXllZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0ge1xuICAgICAgICBzdW06IHtcbiAgICAgICAgICBvbmVvZktpbmQ6ICd2YXJpYW50JyxcbiAgICAgICAgICB2YXJpYW50OiB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcjogJ1NvbWUnLFxuICAgICAgICAgICAgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ3RleHQnLCB0ZXh0OiAndicgfSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgeyBTb21lOiAndicgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgZW51bSB0byBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0ge1xuICAgICAgICBzdW06IHtcbiAgICAgICAgICBvbmVvZktpbmQ6ICdlbnVtJyxcbiAgICAgICAgICBlbnVtOiB7IGNvbnN0cnVjdG9yOiAnQWN0aXZlJyB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgJ0FjdGl2ZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZXh0cmFjdFN1Ym1pdHRlckFjdEFzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZXh0cmFjdCBhY3RBcyBmcm9tIHJlYWwgUHJlcGFyZWRUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFjdEFzID0gdXRpbHMuZXh0cmFjdFN1Ym1pdHRlckFjdEFzKENhbnRvbkV4ZXJjaXNlQ29tbWFuZFByZXBhcmVSZXNwb25zZS5wcmVwYXJlZFRyYW5zYWN0aW9uKTtcbiAgICAgIHNob3VsZC5leGlzdChhY3RBcyk7XG4gICAgICBhc3NlcnQub2soQXJyYXkuaXNBcnJheShhY3RBcykpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGFjdEFzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuZXF1YWwoYWN0QXNbMF0sICdSZWdSZWdpc3RyYXI6OjEyMjA1MDhlNTRmYjcwOWRjYjFhOWI0MDk2NDA4YWQ0MTVkMjIxN2Q4ODgxYWQ5MDM0YTk4NTA3NTI5MzNiYTg4YWQ1Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHRyYWN0Q2FudG9uQ29tbWFuZEluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHRyYWN0IEV4ZXJjaXNlQ29tbWFuZCBpbmZvIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGluZm8gPSB1dGlscy5leHRyYWN0Q2FudG9uQ29tbWFuZEluZm8oQ2FudG9uRXhlcmNpc2VDb21tYW5kUHJlcGFyZVJlc3BvbnNlLnByZXBhcmVkVHJhbnNhY3Rpb24pO1xuICAgICAgc2hvdWxkLmV4aXN0KGluZm8pO1xuICAgICAgYXNzZXJ0LmVxdWFsKGluZm8ua2luZCwgJ0V4ZXJjaXNlQ29tbWFuZCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGluZm8udGVtcGxhdGVJZC5tb2R1bGVOYW1lLCAnVXRpbGl0eS5SZWdpc3RyeS5BcHAuVjAuU2VydmljZS5BbGxvY2F0aW9uRmFjdG9yeScpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGluZm8udGVtcGxhdGVJZC5lbnRpdHlOYW1lLCAnQWxsb2NhdGlvbkZhY3RvcnknKTtcbiAgICAgIGFzc2VydC5lcXVhbChpbmZvLmNob2ljZSwgJ0FsbG9jYXRpb25GYWN0b3J5X09mZmVyTWludCcpO1xuICAgICAgc2hvdWxkLmV4aXN0KGluZm8uY29udHJhY3RJZCk7XG4gICAgICBzaG91bGQuZXhpc3QoaW5mby5hY3RpbmdQYXJ0aWVzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NhbWVFbGVtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpZGVudGljYWwgYXJyYXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLnNhbWVFbGVtZW50cyhbJ2EnLCAnYicsICdjJ10sIFsnYScsICdiJywgJ2MnXSksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3Igc2FtZSBlbGVtZW50cyBpbiBkaWZmZXJlbnQgb3JkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuc2FtZUVsZW1lbnRzKFsnYycsICdhJywgJ2InXSwgWydhJywgJ2InLCAnYyddKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgZGlmZmVyZW50IGxlbmd0aHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuc2FtZUVsZW1lbnRzKFsnYScsICdiJ10sIFsnYScsICdiJywgJ2MnXSksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBkaWZmZXJlbnQgZWxlbWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuc2FtZUVsZW1lbnRzKFsnYScsICdiJywgJ3gnXSwgWydhJywgJ2InLCAnYyddKSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgZW1wdHkgYXJyYXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLnNhbWVFbGVtZW50cyhbXSwgW10pLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gb25lIGFycmF5IGhhcyBkdXBsaWNhdGVzIHRoZSBvdGhlciBkb2VzIG5vdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5zYW1lRWxlbWVudHMoWyd4JywgJ3gnXSwgWyd4JywgJ3knXSksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ25vcm1hbGl6ZUluamVjdEFzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3RyaXAgXCJjb21tYW5kLlwiIHByZWZpeCBmcm9tIGluamVjdEFzIHBhdGhzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3BlY3MgPSBbeyBpbmplY3RBczogJ2NvbW1hbmQuRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWQnIH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMubm9ybWFsaXplSW5qZWN0QXMoc3BlY3MpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5oYXMoJ0V4ZXJjaXNlQ29tbWFuZC5jb250cmFjdElkJykpO1xuICAgICAgYXNzZXJ0Lm9rKCFyZXN1bHQuaGFzKCdjb21tYW5kLkV4ZXJjaXNlQ29tbWFuZC5jb250cmFjdElkJykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc3BlY3Mgd2l0aCBlbXB0eSBpbmplY3RBcyBmaWVsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLm5vcm1hbGl6ZUluamVjdEFzKFt7IGluamVjdEFzOiAnJyB9XSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnNpemUsIDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgc3BlY3MgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5ub3JtYWxpemVJbmplY3RBcyhbXSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnNpemUsIDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdW5kZWZpbmVkIHNwZWNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMubm9ybWFsaXplSW5qZWN0QXModW5kZWZpbmVkKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQuc2l6ZSwgMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIHBhdGhzIHRoYXQgZG8gbm90IHN0YXJ0IHdpdGggXCJjb21tYW5kLlwiJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3BlY3MgPSBbeyBpbmplY3RBczogJ0V4ZXJjaXNlQ29tbWFuZC5jb250cmFjdElkJyB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLm5vcm1hbGl6ZUluamVjdEFzKHNwZWNzKTtcbiAgICAgIGFzc2VydC5vayhyZXN1bHQuaGFzKCdFeGVyY2lzZUNvbW1hbmQuY29udHJhY3RJZCcpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Fzc2VydERlZXBDYW50b25NYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBub0luamVjdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIGZvciBtYXRjaGluZyBwcmltaXRpdmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goJ2hlbGxvJywgJ2hlbGxvJywgbm9JbmplY3QpKTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKDQyLCA0Miwgbm9JbmplY3QpKTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKHRydWUsIHRydWUsIG5vSW5qZWN0KSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgZm9yIG1hdGNoaW5nIG9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCh7IGE6ICd4JywgYjogJ3knIH0sIHsgYTogJ3gnLCBiOiAneScsIGV4dHJhOiAneicgfSwgbm9JbmplY3QpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBleHRyYSBmaWVsZHMgaW4gYWN0dWFsIHRoYXQgdXNlciBkaWQgbm90IHNwZWNpZnknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaChcbiAgICAgICAgICB7IG5hbWU6ICdBbGljZScgfSxcbiAgICAgICAgICB7IG5hbWU6ICdBbGljZScsIHRpbWVzdGFtcDogJzIwMjQtMDEtMDEnLCBoYXNoOiAnYWJjJyB9LFxuICAgICAgICAgIG5vSW5qZWN0XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgZm9yIG1hdGNoaW5nIGFycmF5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKFsnYScsICdiJ10sIFsnYScsICdiJ10sIG5vSW5qZWN0KSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNraXAgcGF0aHMgaW4gaW5qZWN0QXNQYXRocycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGluamVjdFBhdGhzID0gbmV3IFNldChbJ0V4ZXJjaXNlQ29tbWFuZC5jb250cmFjdElkJ10pO1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PlxuICAgICAgICB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goXG4gICAgICAgICAgeyBFeGVyY2lzZUNvbW1hbmQ6IHsgY29udHJhY3RJZDogdW5kZWZpbmVkLCBjaG9pY2U6ICdGb28nIH0gfSxcbiAgICAgICAgICB7IEV4ZXJjaXNlQ29tbWFuZDogeyBjb250cmFjdElkOiAnMDBhYmMnLCBjaG9pY2U6ICdGb28nIH0gfSxcbiAgICAgICAgICBpbmplY3RQYXRoc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBza2lwIHVuZGVmaW5lZCBleHBlY3RlZCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCh1bmRlZmluZWQsICdhbnl0aGluZycsIG5vSW5qZWN0KSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBlbXB0eSBvYmplY3Qge30gYWdhaW5zdCBhY3R1YWwgKG5vdCBza2lwKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKHt9LCB7fSwgbm9JbmplY3QpKTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKHt9LCB7IGV4dHJhOiAnZmllbGQnIH0sIG5vSW5qZWN0KSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBlbXB0eSBhcnJheSBbXSBhZ2FpbnN0IGFjdHVhbCAobm90IHNraXApJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goW10sIFtdLCBub0luamVjdCkpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goW10sIFsnYSddLCBub0luamVjdCksIC9saXN0LWxlbmd0aCBtaXNtYXRjaC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb21wYXJlIG51bWVyaWMgc3RyaW5ncyB3aXRoIEJpZ051bWJlciBlcXVpdmFsZW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKCcxMDAnLCAnMTAwLjAwMDAwMDAwMDAnLCBub0luamVjdCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBwcmltaXRpdmUgbWlzbWF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCgnaGVsbG8nLCAnd29ybGQnLCBub0luamVjdCksIC9taXNtYXRjaC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBhcnJheSBsZW5ndGggbWlzbWF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaChbJ2EnLCAnYiddLCBbJ2EnXSwgbm9JbmplY3QpLCAvbGlzdC1sZW5ndGggbWlzbWF0Y2gvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gbWlzc2luZyBmaWVsZCAodXNlciBzcGVjaWZpZWQgYnV0IG5vdCBpbiBhY3R1YWwpJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKHsgcmVxdWlyZWQ6ICd2YWwnIH0sIHsgb3RoZXI6ICd2YWwnIH0sIG5vSW5qZWN0KSxcbiAgICAgICAgL21pc3NpbmcgZmllbGQvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiB0eXBlIG1pc21hdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goeyBhOiAnc3RyJyB9LCB7IGE6IDQyIH0sIG5vSW5qZWN0KSwgL21pc21hdGNoLyk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSVNPIHRpbWVzdGFtcCB2cyBtaWNyb3NlY29uZCBzdHJpbmcgbm9ybWFsaXNhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzb1RzID0gJzIwMjYtMDYtMTJUMTA6MDA6MDAuMDAwWic7XG4gICAgICBjb25zdCBpc29Uc1VzID0gU3RyaW5nKG5ldyBEYXRlKGlzb1RzKS5nZXRUaW1lKCkgKiAxMDAwKTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXNzIHdoZW4gSVNPIHRpbWVzdGFtcCAoZXhwZWN0ZWQpIGVxdWFscyBtaWNyb3NlY29uZHMgKGFjdHVhbCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKGlzb1RzLCBpc29Uc1VzLCBub0luamVjdCkpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgdGhyb3cgdGltZXN0YW1wIG1pc21hdGNoIHdoZW4gbWljcm9zZWNvbmRzIGRvIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBJU08gdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdyb25nVXMgPSBTdHJpbmcobmV3IERhdGUoaXNvVHMpLmdldFRpbWUoKSAqIDEwMDAgKyAxXzAwMF8wMDApO1xuICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaChpc29Ucywgd3JvbmdVcywgbm9JbmplY3QpLCAvdGltZXN0YW1wIG1pc21hdGNoLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBwYXNzIGZvciBJU08gdGltZXN0YW1wIG5lc3RlZCBpbnNpZGUgYSBtaW50LWxpa2UgY2hvaWNlQXJndW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBleGVjdXRlQmVmb3JlID0gJzIwMjYtMDYtMTNUMTA6MDA6MDAuMDAwWic7XG4gICAgICAgIGNvbnN0IGV4ZWN1dGVCZWZvcmVVcyA9IFN0cmluZyhuZXcgRGF0ZShleGVjdXRlQmVmb3JlKS5nZXRUaW1lKCkgKiAxMDAwKTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZCA9IHtcbiAgICAgICAgICBleHBlY3RlZEFkbWluOiAncmVnaXN0cmFyOjoxMjIwYWJjJyxcbiAgICAgICAgICBtaW50OiB7XG4gICAgICAgICAgICBpbnN0cnVtZW50SWQ6IHsgYWRtaW46ICdyZWdpc3RyYXI6OjEyMjBhYmMnLCBpZDogJ1NUR1VTRDEnIH0sXG4gICAgICAgICAgICBhbW91bnQ6ICcxMDAwMDAwLjAnLFxuICAgICAgICAgICAgaG9sZGVyOiAncmVnaXN0cmFyOjoxMjIwYWJjJyxcbiAgICAgICAgICAgIHJlZmVyZW5jZTogJ21pbnQtc3RndXNkMS0xMjM0NScsXG4gICAgICAgICAgICByZXF1ZXN0ZWRBdDogaXNvVHMsXG4gICAgICAgICAgICBleGVjdXRlQmVmb3JlOiBleGVjdXRlQmVmb3JlLFxuICAgICAgICAgICAgbWV0YTogeyB2YWx1ZXM6IHt9IH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBhY3R1YWwgPSB7XG4gICAgICAgICAgZXhwZWN0ZWRBZG1pbjogJ3JlZ2lzdHJhcjo6MTIyMGFiYycsXG4gICAgICAgICAgbWludDoge1xuICAgICAgICAgICAgaW5zdHJ1bWVudElkOiB7IGFkbWluOiAncmVnaXN0cmFyOjoxMjIwYWJjJywgaWQ6ICdTVEdVU0QxJyB9LFxuICAgICAgICAgICAgYW1vdW50OiAnMTAwMDAwMC4wMDAwMDAwMDAwJyxcbiAgICAgICAgICAgIGhvbGRlcjogJ3JlZ2lzdHJhcjo6MTIyMGFiYycsXG4gICAgICAgICAgICByZWZlcmVuY2U6ICdtaW50LXN0Z3VzZDEtMTIzNDUnLFxuICAgICAgICAgICAgcmVxdWVzdGVkQXQ6IGlzb1RzVXMsXG4gICAgICAgICAgICBleGVjdXRlQmVmb3JlOiBleGVjdXRlQmVmb3JlVXMsXG4gICAgICAgICAgICBtZXRhOiB7IHZhbHVlczoge30gfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKGV4cGVjdGVkLCBhY3R1YWwsIG5vSW5qZWN0KSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIElTTyB0aW1lc3RhbXAgaW4gbmVzdGVkIG9iamVjdCBkb2VzIG5vdCBtYXRjaCBtaWNyb3NlY29uZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHdyb25nVXMgPSBTdHJpbmcobmV3IERhdGUoaXNvVHMpLmdldFRpbWUoKSAqIDEwMDAgKyA1XzAwMF8wMDApO1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBtaW50OiB7IHJlcXVlc3RlZEF0OiBpc29UcyB9IH07XG4gICAgICAgIGNvbnN0IGFjdHVhbCA9IHsgbWludDogeyByZXF1ZXN0ZWRBdDogd3JvbmdVcyB9IH07XG5cbiAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goZXhwZWN0ZWQsIGFjdHVhbCwgbm9JbmplY3QpLCAvdGltZXN0YW1wIG1pc21hdGNoLyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBub3QgdHJlYXQgYW4gYXJiaXRyYXJ5IG5vbi10aW1lc3RhbXAgSVNPLWxpa2Ugc3RyaW5nIGFzIGEgdGltZXN0YW1wJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCgnbm90LWEtdGltZXN0YW1wJywgaXNvVHNVcywgbm9JbmplY3QpLCAvbWlzbWF0Y2gvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19