@bitgo-beta/sdk-coin-sol 7.6.4-beta.790 → 7.6.4-beta.792

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 (33) hide show
  1. package/dist/cjs/src/lib/constants.d.ts +8 -0
  2. package/dist/cjs/src/lib/constants.d.ts.map +1 -1
  3. package/dist/cjs/src/lib/constants.js +13 -2
  4. package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -1
  5. package/dist/cjs/src/lib/explainTransactionWasm.js +26 -8
  6. package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -1
  7. package/dist/cjs/src/lib/instructionParamsFactory.js +13 -1
  8. package/dist/cjs/src/lib/utils.d.ts +12 -1
  9. package/dist/cjs/src/lib/utils.d.ts.map +1 -1
  10. package/dist/cjs/src/lib/utils.js +55 -3
  11. package/dist/cjs/src/sol.d.ts.map +1 -1
  12. package/dist/cjs/src/sol.js +9 -1
  13. package/dist/cjs/test/resources/sol.d.ts +1 -1
  14. package/dist/cjs/test/resources/sol.d.ts.map +1 -1
  15. package/dist/cjs/test/resources/sol.js +2 -2
  16. package/dist/cjs/test/unit/explainTransactionWasm.js +82 -1
  17. package/dist/cjs/test/unit/instructionParamsFactory.staking.js +14 -38
  18. package/dist/cjs/test/unit/sol.js +63 -1
  19. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.js +2 -2
  20. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  21. package/dist/esm/lib/constants.d.ts +8 -0
  22. package/dist/esm/lib/constants.d.ts.map +1 -1
  23. package/dist/esm/lib/constants.js +12 -1
  24. package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -1
  25. package/dist/esm/lib/explainTransactionWasm.js +26 -8
  26. package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -1
  27. package/dist/esm/lib/instructionParamsFactory.js +13 -1
  28. package/dist/esm/lib/utils.d.ts +12 -1
  29. package/dist/esm/lib/utils.d.ts.map +1 -1
  30. package/dist/esm/lib/utils.js +53 -4
  31. package/dist/esm/sol.d.ts.map +1 -1
  32. package/dist/esm/sol.js +10 -2
  33. package/package.json +8 -8
@@ -1,11 +1,92 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  /**
4
37
  * Tests for explainTransactionWasm (WASM-based Solana transaction explanation).
5
38
  */
6
39
  require("should");
7
40
  const explainTransactionWasm_1 = require("../../src/lib/explainTransactionWasm");
41
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
42
+ const src_1 = require("../../src");
43
+ const testData = __importStar(require("../resources/sol"));
44
+ const getBuilderFactory_1 = require("./getBuilderFactory");
8
45
  describe('explainTransactionWasm', function () {
46
+ describe('PrepareForRevoke memo', function () {
47
+ const factory = (0, getBuilderFactory_1.getBuilderFactory)('tsol');
48
+ const sender = new src_1.KeyPair(testData.authAccount).getKeys().pub;
49
+ const attacker = 'CP5Dpaa42RtJmMuKqCQsLwma5Yh3knuvKsYDFX85F41S';
50
+ const marinadeOrder = 'opNS8ENpEMWdXcJUgJCsJTDp7arTXayoBEeBUg6UezP';
51
+ const blockhash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
52
+ const validMemo = `{"PrepareForRevoke":{"user":"${sender}","amount":"500000000000"}}`;
53
+ const buildTransfer = async (to, amount, memo) => {
54
+ const builder = factory.getTransferBuilder();
55
+ builder.sender(sender).nonce(blockhash).send({ address: to, amount });
56
+ builder.memo(memo);
57
+ return (await builder.build()).toBroadcastFormat();
58
+ };
59
+ // The legacy path derives the type when parsing a raw tx, so rebuild it from raw like verifyTransaction does.
60
+ const explainBoth = async (rawTx) => {
61
+ const wasm = (0, explainTransactionWasm_1.explainSolTransaction)({ txBase64: rawTx, feeInfo: { fee: '5000' }, coinName: 'tsol' });
62
+ const legacyTx = await factory.from(rawTx).build();
63
+ return { wasm, legacy: legacyTx.explainTransaction(), legacyType: legacyTx.type };
64
+ };
65
+ it('should classify a memo-tagged transfer to an arbitrary address as Send and keep its output', async function () {
66
+ const { wasm, legacy, legacyType } = await explainBoth(await buildTransfer(attacker, '1000', validMemo));
67
+ wasm.type.should.equal('Send');
68
+ wasm.outputs.should.deepEqual([{ address: attacker, amount: '1000' }]);
69
+ legacyType.should.equal(sdk_core_1.TransactionType.Send);
70
+ legacy.outputs.should.deepEqual([{ address: attacker, amount: '1000' }]);
71
+ });
72
+ it('should classify a Marinade-address transfer with the wrong amount as Send', async function () {
73
+ const { wasm, legacyType } = await explainBoth(await buildTransfer(marinadeOrder, '3000000', validMemo));
74
+ wasm.type.should.equal('Send');
75
+ legacyType.should.equal(sdk_core_1.TransactionType.Send);
76
+ });
77
+ it('should classify a Marinade-address transfer with a malformed PrepareForRevoke memo as Send', async function () {
78
+ const { wasm, legacyType } = await explainBoth(await buildTransfer(marinadeOrder, '2300000', 'PrepareForRevoke'));
79
+ wasm.type.should.equal('Send');
80
+ legacyType.should.equal(sdk_core_1.TransactionType.Send);
81
+ });
82
+ it('should still classify a genuine Marinade unstake as StakingDeactivate with no outputs', async function () {
83
+ const { wasm, legacy, legacyType } = await explainBoth(testData.MARINADE_STAKING_DEACTIVATE_SIGNED_TX);
84
+ wasm.type.should.equal('StakingDeactivate');
85
+ wasm.outputs.length.should.equal(0);
86
+ legacyType.should.equal(sdk_core_1.TransactionType.StakingDeactivate);
87
+ legacy.outputs.length.should.equal(0);
88
+ });
89
+ });
9
90
  describe('deriveTransactionType', function () {
10
91
  it('should classify boilerplate-only transaction as CustomTx', function () {
11
92
  // Transaction with only NonceAdvance + Memo instructions (no Transfer or TokenTransfer).
@@ -63,4 +144,4 @@ describe('explainTransactionWasm', function () {
63
144
  });
64
145
  });
65
146
  });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uV2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9leHBsYWluVHJhbnNhY3Rpb25XYXNtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7O0dBRUc7QUFDSCxrQkFBZ0I7QUFDaEIsaUZBQTZFO0FBRTdFLFFBQVEsQ0FBQyx3QkFBd0IsRUFBRTtJQUNqQyxRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsRUFBRSxDQUFDLDBEQUEwRCxFQUFFO1lBQzdELHlGQUF5RjtZQUN6Riw0REFBNEQ7WUFDNUQsTUFBTSwwQkFBMEIsR0FDOUIsa21CQUFrbUIsQ0FBQztZQUVybUIsTUFBTSxTQUFTLEdBQUcsSUFBQSw4Q0FBcUIsRUFBQztnQkFDdEMsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtnQkFDeEIsUUFBUSxFQUFFLE1BQU07YUFDakIsQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxSEFBcUgsRUFBRTtZQUN4SCw0RkFBNEY7WUFDNUYsOEVBQThFO1lBQzlFLDJGQUEyRjtZQUMzRiw0RkFBNEY7WUFDNUYsZ0ZBQWdGO1lBQ2hGLGlFQUFpRTtZQUNqRSxNQUFNLG1DQUFtQyxHQUN2QyxzaUJBQXNpQixDQUFDO1lBRXppQixNQUFNLFNBQVMsR0FBRyxJQUFBLDhDQUFxQixFQUFDO2dCQUN0QyxRQUFRLEVBQUUsbUNBQW1DO2dCQUM3QyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO2dCQUN4QixRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUM7WUFFSCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUNwRSxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkQsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUN6RyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwRUFBMEUsRUFBRTtZQUM3RSxrRkFBa0Y7WUFDbEYsc0ZBQXNGO1lBQ3RGLE1BQU0sOEJBQThCLEdBQ2xDLDBVQUEwVSxDQUFDO1lBRTdVLE1BQU0sU0FBUyxHQUFHLElBQUEsOENBQXFCLEVBQUM7Z0JBQ3RDLFFBQVEsRUFBRSw4QkFBOEI7Z0JBQ3hDLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7Z0JBQ3hCLFFBQVEsRUFBRSxNQUFNO2FBQ2pCLENBQUMsQ0FBQztZQUVILFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyRUFBMkUsRUFBRTtZQUM5RSwyRkFBMkY7WUFDM0Ysc0ZBQXNGO1lBQ3RGLGtDQUFrQztZQUNsQyxNQUFNLG1DQUFtQyxHQUN2QyxzZ0JBQXNnQixDQUFDO1lBRXpnQixNQUFNLFNBQVMsR0FBRyxJQUFBLDhDQUFxQixFQUFDO2dCQUN0QyxRQUFRLEVBQUUsbUNBQW1DO2dCQUM3QyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO2dCQUN4QixRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDLENBQUM7WUFFSCxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUZXN0cyBmb3IgZXhwbGFpblRyYW5zYWN0aW9uV2FzbSAoV0FTTS1iYXNlZCBTb2xhbmEgdHJhbnNhY3Rpb24gZXhwbGFuYXRpb24pLlxuICovXG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBleHBsYWluU29sVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL2V4cGxhaW5UcmFuc2FjdGlvbldhc20nO1xuXG5kZXNjcmliZSgnZXhwbGFpblRyYW5zYWN0aW9uV2FzbScsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2Rlcml2ZVRyYW5zYWN0aW9uVHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGNsYXNzaWZ5IGJvaWxlcnBsYXRlLW9ubHkgdHJhbnNhY3Rpb24gYXMgQ3VzdG9tVHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUcmFuc2FjdGlvbiB3aXRoIG9ubHkgTm9uY2VBZHZhbmNlICsgTWVtbyBpbnN0cnVjdGlvbnMgKG5vIFRyYW5zZmVyIG9yIFRva2VuVHJhbnNmZXIpLlxuICAgICAgLy8gUHJldmlvdXNseSB0aGlzIHdvdWxkIGluY29ycmVjdGx5IGZhbGwgdGhyb3VnaCB0byAnU2VuZCcuXG4gICAgICBjb25zdCBCT0lMRVJQTEFURV9PTkxZX1RYX0JBU0U2NCA9XG4gICAgICAgICdBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURFM2FESzlubUVjY09tUUo0Y3JaelB1VG5SVmEzd29GU2pLekUyaGNzRmJOa3B2QThMbmo3Q1ZlSisvVWZYd0xJNWcyMjNEMDJtNCtSRVVmUGM1MFFDQWdFRUI4T3BvWCtZYnEvajh4aTgwRGhGdGo4QVVWSFByamhLMUUzRG5UNUJteDM0NmlVdFlRS01NQm9sSUFPNlBtZkpoM3c3aHVGY1ljR05PQjhzZ1hOMzhXZzZacldBTk5KZmI2NHE4QjI0MnFmUmlUN2RmZmI4MEgyT29YR1EwYXEwbEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCVXBUV3BrcElRWk5KT2h4WU5vNGZIdzF0ZDI4a3J1QjVCK29RRUVGUkkwR3A5VVhHTWQweVNoV1k1aHBIVjYyaTE2NG81dExiVnh6VlZzaEFBQUFBQWFuMVJjWkxGYU80SXFFWDNQU2w0alBBMXd4UmJJYXMwVFlCaTZwUUFBQUVIUHF0R1lPampxVmZIZ2cxUzMyTTRxTWUyQVFPL2tEeTErQ0VZUXdraXNEQXdNQ0JnRUVCQUFBQUFRQ0FBVUpTR1ZzYkc4Z1FWQkpCQUFuUVZCSklFbHVkR1ZuY21GMGFXOXVJSFJsYzNRZ1kzVnpkRzl0SUhSeVlXNXpZV04wYVc5dSc7XG5cbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IGV4cGxhaW5Tb2xUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4QmFzZTY0OiBCT0lMRVJQTEFURV9PTkxZX1RYX0JBU0U2NCxcbiAgICAgICAgZmVlSW5mbzogeyBmZWU6ICc1MDAwJyB9LFxuICAgICAgICBjb2luTmFtZTogJ3Rzb2wnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGxhaW5lZC50eXBlLnNob3VsZC5lcXVhbCgnQ3VzdG9tVHgnKTtcbiAgICAgIGV4cGxhaW5lZC5vdXRwdXRBbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICBleHBsYWluZWQub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgICAgKHR5cGVvZiBleHBsYWluZWQubWVtbykuc2hvdWxkLmVxdWFsKCdzdHJpbmcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2xhc3NpZnkgdG9rZW4gZW5hYmxlbWVudCAoQVRBIGluaXQgKyBUb2tlbiBBQ0wgcGVybWlzc2lvbmxlc3MgdGhhdykgYXMgQXNzb2NpYXRlZFRva2VuQWNjb3VudEluaXRpYWxpemF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVG9rZW4tMjAyMiBtaW50IChUcmFuc2Zlckhvb2sgKyBEZWZhdWx0QWNjb3VudFN0YXRlIGZyb3plbiwgc1JGQy0zNyBUb2tlbiBBQ0wgZ2F0aW5nIHdpdGhcbiAgICAgIC8vIHBlcm1pc3Npb25sZXNzIHRoYXcgZW5hYmxlZCkuIFRoZSBlbmFibGVtZW50IHByZWJ1aWxkIGFwcGVuZHMgdGhlIFRva2VuIEFDTFxuICAgICAgLy8gVGhhd1Blcm1pc3Npb25sZXNzSWRlbXBvdGVudCBpbnN0cnVjdGlvbiAocHJvZ3JhbSBUQUNMa1U2Li4uLCBkaXNjcmltaW5hdG9yIDkpIGFmdGVyIHRoZVxuICAgICAgLy8gaWRlbXBvdGVudCBBVEEtaW5pdC4gVGhlIHdhc20gcGFyc2VyIGRvZXMgbm90IGtub3cgdGhlIFRva2VuIEFDTCBwcm9ncmFtLCBzbyBpdCBwYXJzZXMgYXNcbiAgICAgIC8vIFVua25vd24g4oCUIHRoaXMgcHJldmlvdXNseSBtaXNjbGFzc2lmaWVkIHRoZSBlbmFibGVtZW50IGFzIEN1c3RvbVR4IGFuZCBmYWlsZWRcbiAgICAgIC8vIHZlcmlmeVR4VHlwZSAoXCJJbnZhbGlkIHRyYW5zYWN0aW9uIHR5cGUgb24gdG9rZW4gZW5hYmxlbWVudFwiKS5cbiAgICAgIGNvbnN0IEFUQV9JTklUX1dJVEhfVE9LRU5fQUNMX1RIQVdfQkFTRTY0ID1cbiAgICAgICAgJ0FRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQVlKVWhDRjlMSG83S2lHN0hERHRDUWJiSUFKRzJ1aW5NbElnNUpieTdMaUdDVWs5ZEJhQ0VtVDBlUG5QWWg0RS8zTGI3alM3Y1pHeW9QS3h4UEdkQWJQdFFaNktJS1JCOWhlNSs0WU1DNno2U25JNHAyVXZpRXh4dFE2M003eXlOektBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBb3hyZXdYNVZBMkZsSHBueHV4ZWppU0VTVlpJMXl6R09IQjR1VjVUbUNQQ1R4WitHSExQVmJ0M1IrdWw4NGVoeFZBZ3FNM3JtenRmRkxXOG0vby80MWpKY2xqMDRraWZHN1BSQXBGSTROZ3d0YUU1bmEveENFQkk1NzJOdnArRmtHczMrYWNQUUc2amJUS2ZXVXBSWUZsZy95NFRjWFd5N2FBR2JLTWpwcnpnYmQ5dUh1ZFkvZUdFSmR2T1JzemRxMkd2eE5nN2tOSi82OStTallvWXY4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNCZ1lBQWdBRkF3Z0JBUWNHQUFJRkFBRUVBUWs9JztcblxuICAgICAgY29uc3QgZXhwbGFpbmVkID0gZXhwbGFpblNvbFRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhCYXNlNjQ6IEFUQV9JTklUX1dJVEhfVE9LRU5fQUNMX1RIQVdfQkFTRTY0LFxuICAgICAgICBmZWVJbmZvOiB7IGZlZTogJzUwMDAnIH0sXG4gICAgICAgIGNvaW5OYW1lOiAndHNvbCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwbGFpbmVkLnR5cGUuc2hvdWxkLmVxdWFsKCdBc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb24nKTtcbiAgICAgIGV4cGxhaW5lZC50b2tlbkVuYWJsZW1lbnRzPy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgZXhwbGFpbmVkLnRva2VuRW5hYmxlbWVudHM/LlswXS50b2tlbk5hbWUuc2hvdWxkLmVxdWFsKCczVkRCSldnelJVc2NqUXp6QXA1Mm5hMWREcXVFeFptRDFQa0N2SDlzdkdGNicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjbGFzc2lmeSBhIFRva2VuLTIwMjIgQnVybkNoZWNrZWQgdW5rbm93biBpbnN0cnVjdGlvbiBhcyBDdXN0b21UeCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEJ1cm5DaGVja2VkIGlzIG5vdCBkZWNvZGVkIGJ5IHRoZSBXQVNNIHBhcnNlciwgc28gaXQgaXMgZW1pdHRlZCBhcyBVbmtub3duIHdpdGhcbiAgICAgIC8vIGJhc2U2NC1lbmNvZGVkIGRhdGEuIFRoaXMgbXVzdCBub3QgdGhyb3cgd2hpbGUgY2hlY2tpbmcgZm9yIGNvbmZpZGVudGlhbCB0cmFuc2ZlcnMuXG4gICAgICBjb25zdCBUT0tFTl8yMDIyX0JVUk5fQ0hFQ0tFRF9CQVNFNjQgPVxuICAgICAgICAnQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBSUVkNFZ1YnJ0WEFMSUg3NjZJcHUvRnZoMjZGeXZPUGpwQk1rWUJlM1VPMzBTRk41bHU1aCtxYmlmbHczRG5vSkdzZEowMzVkMFd0YXpjVmtJb0U1RmhPZ2svSUJ6cHNTZnYyZktjZGhUSUhGRVFLTkJpMTB6ckx0VUlhY3VzRk50UUJ0MzI0ZTUxajk0WVFsMjg1R3pOMnJZYS9FMkR1UTBuL3IzNUtOaWhpL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRURBd0VDQUFvS1FFSVBBQUFBQUFBRyc7XG5cbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IGV4cGxhaW5Tb2xUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4QmFzZTY0OiBUT0tFTl8yMDIyX0JVUk5fQ0hFQ0tFRF9CQVNFNjQsXG4gICAgICAgIGZlZUluZm86IHsgZmVlOiAnNTAwMCcgfSxcbiAgICAgICAgY29pbk5hbWU6ICd0c29sJyxcbiAgICAgIH0pO1xuXG4gICAgICBleHBsYWluZWQudHlwZS5zaG91bGQuZXF1YWwoJ0N1c3RvbVR4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNsYXNzaWZ5IHRva2VuIHRyYW5zZmVyIHdpdGggVG9rZW4gQUNMIHBlcm1pc3Npb25sZXNzIHRoYXcgYXMgU2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRva2VuVHJhbnNmZXIgKHRyYW5zZmVyQ2hlY2tlZCwgVG9rZW4tMjAyMikgKyBUb2tlbiBBQ0wgVGhhd1Blcm1pc3Npb25sZXNzSWRlbXBvdGVudCBmb3JcbiAgICAgIC8vIHRoZSBkZXN0aW5hdGlvbiBBVEEuIFRoZSBVbmtub3duIHRoYXcgaW5zdHJ1Y3Rpb24gcHJldmlvdXNseSB0cmlnZ2VyZWQgdGhlIEN1c3RvbVR4XG4gICAgICAvLyBmYWxsYmFjayBiZWZvcmUgdGhlIFNlbmQgY2hlY2suXG4gICAgICBjb25zdCBUUkFOU0ZFUl9XSVRIX1RPS0VOX0FDTF9USEFXX0JBU0U2NCA9XG4gICAgICAgICdBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFRSVVoQ0Y5TEhvN0tpRzdIRER0Q1FiYklBSkcydWluTWxJZzVKYnk3TGlHQ1ZsTjh4Q0Z1TFdXcURVYTd6ZE1zY1J6SEpTaEZtUTRhdllVazVyOTVxaHFyTVVTWmNhbjVQUXpTb29NWEg2aG9abmdzZTQyVG91MXVON2FGRFZETFN0Qm5vb2dwRUgyRjduN2hnd0xyUHBLY2ppblpTK0lUSEcxRHJjenZMSTNNb294cmV3WDVWQTJGbEhwbnh1eGVqaVNFU1ZaSTF5ekdPSEI0dVY1VG1DUENUeForR0hMUFZidDNSK3VsODRlaHhWQWdxTTNybXp0ZkZMVzhtL28vNDFCck4vbW5EMEJ1bzIweW4xbEtVV0JaWVA4dUUzRjFzdTJnQm15akk2YTg0RzNmYmg3bldQM2hoQ1hiemtiTTNhdGhyOFRZTzVEU2YrdmZrbzJLR0wvQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnY0VBd1VCQUFvTUFRQUFBQUFBQUFBSkJnWUFBUVVBQWdRQkNRPT0nO1xuXG4gICAgICBjb25zdCBleHBsYWluZWQgPSBleHBsYWluU29sVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEJhc2U2NDogVFJBTlNGRVJfV0lUSF9UT0tFTl9BQ0xfVEhBV19CQVNFNjQsXG4gICAgICAgIGZlZUluZm86IHsgZmVlOiAnNTAwMCcgfSxcbiAgICAgICAgY29pbk5hbWU6ICd0c29sJyxcbiAgICAgIH0pO1xuXG4gICAgICBleHBsYWluZWQudHlwZS5zaG91bGQuZXF1YWwoJ1NlbmQnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uV2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9leHBsYWluVHJhbnNhY3Rpb25XYXNtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxrQkFBZ0I7QUFDaEIsaUZBQTZFO0FBQzdFLG1EQUF1RDtBQUN2RCxtQ0FBb0M7QUFDcEMsMkRBQTZDO0FBQzdDLDJEQUF3RDtBQUV4RCxRQUFRLENBQUMsd0JBQXdCLEVBQUU7SUFDakMsUUFBUSxDQUFDLHVCQUF1QixFQUFFO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUEscUNBQWlCLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxhQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUMvRCxNQUFNLFFBQVEsR0FBRyw4Q0FBOEMsQ0FBQztRQUNoRSxNQUFNLGFBQWEsR0FBRyw2Q0FBNkMsQ0FBQztRQUNwRSxNQUFNLFNBQVMsR0FBRyw4Q0FBOEMsQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBRyxnQ0FBZ0MsTUFBTSw2QkFBNkIsQ0FBQztRQUV0RixNQUFNLGFBQWEsR0FBRyxLQUFLLEVBQUUsRUFBVSxFQUFFLE1BQWMsRUFBRSxJQUFZLEVBQUUsRUFBRTtZQUN2RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3QyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdEUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixPQUFPLENB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QVEsRUFBRSxNQUFNO2FBQ2pCLENBQUMsQ0FBQztZQUVILFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlc3RzIGZvciBleHBsYWluVHJhbnNhY3Rpb25XYXNtIChXQVNNLWJhc2VkIFNvbGFuYSB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbikuXG4gKi9cbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IGV4cGxhaW5Tb2xUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvZXhwbGFpblRyYW5zYWN0aW9uV2FzbSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL3Jlc291cmNlcy9zb2wnO1xuaW1wb3J0IHsgZ2V0QnVpbGRlckZhY3RvcnkgfSBmcm9tICcuL2dldEJ1aWxkZXJGYWN0b3J5JztcblxuZGVzY3JpYmUoJ2V4cGxhaW5UcmFuc2FjdGlvbldhc20nLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdQcmVwYXJlRm9yUmV2b2tlIG1lbW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCd0c29sJyk7XG4gICAgY29uc3Qgc2VuZGVyID0gbmV3IEtleVBhaXIodGVzdERhdGEuYXV0aEFjY291bnQpLmdldEtleXMoKS5wdWI7XG4gICAgY29uc3QgYXR0YWNrZXIgPSAnQ1A1RHBhYTQyUnRKbU11S3FDUXNMd21hNVloM2tudXZLc1lERlg4NUY0MVMnO1xuICAgIGNvbnN0IG1hcmluYWRlT3JkZXIgPSAnb3BOUzhFTnBFTVdkWGNKVWdKQ3NKVERwN2FyVFhheW9CRWVCVWc2VWV6UCc7XG4gICAgY29uc3QgYmxvY2toYXNoID0gJ0dIdFhRQnNvWkhWbk5GYTlZZXZBekZyMTdESmpnSFhrM3ljVEtENXhEM1ppJztcbiAgICBjb25zdCB2YWxpZE1lbW8gPSBge1wiUHJlcGFyZUZvclJldm9rZVwiOntcInVzZXJcIjpcIiR7c2VuZGVyfVwiLFwiYW1vdW50XCI6XCI1MDAwMDAwMDAwMDBcIn19YDtcblxuICAgIGNvbnN0IGJ1aWxkVHJhbnNmZXIgPSBhc3luYyAodG86IHN0cmluZywgYW1vdW50OiBzdHJpbmcsIG1lbW86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnNlbmRlcihzZW5kZXIpLm5vbmNlKGJsb2NraGFzaCkuc2VuZCh7IGFkZHJlc3M6IHRvLCBhbW91bnQgfSk7XG4gICAgICBidWlsZGVyLm1lbW8obWVtbyk7XG4gICAgICByZXR1cm4gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICB9O1xuXG4gICAgLy8gVGhlIGxlZ2FjeSBwYXRoIGRlcml2ZXMgdGhlIHR5cGUgd2hlbiBwYXJzaW5nIGEgcmF3IHR4LCBzbyByZWJ1aWxkIGl0IGZyb20gcmF3IGxpa2UgdmVyaWZ5VHJhbnNhY3Rpb24gZG9lcy5cbiAgICBjb25zdCBleHBsYWluQm90aCA9IGFzeW5jIChyYXdUeDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB3YXNtID0gZXhwbGFpblNvbFRyYW5zYWN0aW9uKHsgdHhCYXNlNjQ6IHJhd1R4LCBmZWVJbmZvOiB7IGZlZTogJzUwMDAnIH0sIGNvaW5OYW1lOiAndHNvbCcgfSk7XG4gICAgICBjb25zdCBsZWdhY3lUeCA9IGF3YWl0IGZhY3RvcnkuZnJvbShyYXdUeCkuYnVpbGQoKTtcbiAgICAgIHJldHVybiB7IHdhc20sIGxlZ2FjeTogbGVnYWN5VHguZXhwbGFpblRyYW5zYWN0aW9uKCksIGxlZ2FjeVR5cGU6IGxlZ2FjeVR4LnR5cGUgfTtcbiAgICB9O1xuXG4gICAgaXQoJ3Nob3VsZCBjbGFzc2lmeSBhIG1lbW8tdGFnZ2VkIHRyYW5zZmVyIHRvIGFuIGFyYml0cmFyeSBhZGRyZXNzIGFzIFNlbmQgYW5kIGtlZXAgaXRzIG91dHB1dCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHsgd2FzbSwgbGVnYWN5LCBsZWdhY3lUeXBlIH0gPSBhd2FpdCBleHBsYWluQm90aChhd2FpdCBidWlsZFRyYW5zZmVyKGF0dGFja2VyLCAnMTAwMCcsIHZhbGlkTWVtbykpO1xuICAgICAgd2FzbS50eXBlLnNob3VsZC5lcXVhbCgnU2VuZCcpO1xuICAgICAgd2FzbS5vdXRwdXRzLnNob3VsZC5kZWVwRXF1YWwoW3sgYWRkcmVzczogYXR0YWNrZXIsIGFtb3VudDogJzEwMDAnIH1dKTtcbiAgICAgIGxlZ2FjeVR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIGxlZ2FjeS5vdXRwdXRzLnNob3VsZC5kZWVwRXF1YWwoW3sgYWRkcmVzczogYXR0YWNrZXIsIGFtb3VudDogJzEwMDAnIH1dKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2xhc3NpZnkgYSBNYXJpbmFkZS1hZGRyZXNzIHRyYW5zZmVyIHdpdGggdGhlIHdyb25nIGFtb3VudCBhcyBTZW5kJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgeyB3YXNtLCBsZWdhY3lUeXBlIH0gPSBhd2FpdCBleHBsYWluQm90aChhd2FpdCBidWlsZFRyYW5zZmVyKG1hcmluYWRlT3JkZXIsICczMDAwMDAwJywgdmFsaWRNZW1vKSk7XG4gICAgICB3YXNtLnR5cGUuc2hvdWxkLmVxdWFsKCdTZW5kJyk7XG4gICAgICBsZWdhY3lUeXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNsYXNzaWZ5IGEgTWFyaW5hZGUtYWRkcmVzcyB0cmFuc2ZlciB3aXRoIGEgbWFsZm9ybWVkIFByZXBhcmVGb3JSZXZva2UgbWVtbyBhcyBTZW5kJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgeyB3YXNtLCBsZWdhY3lUeXBlIH0gPSBhd2FpdCBleHBsYWluQm90aChhd2FpdCBidWlsZFRyYW5zZmVyKG1hcmluYWRlT3JkZXIsICcyMzAwMDAwJywgJ1ByZXBhcmVGb3JSZXZva2UnKSk7XG4gICAgICB3YXNtLnR5cGUuc2hvdWxkLmVxdWFsKCdTZW5kJyk7XG4gICAgICBsZWdhY3lUeXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN0aWxsIGNsYXNzaWZ5IGEgZ2VudWluZSBNYXJpbmFkZSB1bnN0YWtlIGFzIFN0YWtpbmdEZWFjdGl2YXRlIHdpdGggbm8gb3V0cHV0cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHsgd2FzbSwgbGVnYWN5LCBsZWdhY3lUeXBlIH0gPSBhd2FpdCBleHBsYWluQm90aCh0ZXN0RGF0YS5NQVJJTkFERV9TVEFLSU5HX0RFQUNUSVZBVEVfU0lHTkVEX1RYKTtcbiAgICAgIHdhc20udHlwZS5zaG91bGQuZXF1YWwoJ1N0YWtpbmdEZWFjdGl2YXRlJyk7XG4gICAgICB3YXNtLm91dHB1dHMubGVuZ3RoLnNob3VsZC5lcXVhbCgwKTtcbiAgICAgIGxlZ2FjeVR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nRGVhY3RpdmF0ZSk7XG4gICAgICBsZWdhY3kub3V0cHV0cy5sZW5ndGguc2hvdWxkLmVxdWFsKDApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZGVyaXZlVHJhbnNhY3Rpb25UeXBlJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY2xhc3NpZnkgYm9pbGVycGxhdGUtb25seSB0cmFuc2FjdGlvbiBhcyBDdXN0b21UeCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRyYW5zYWN0aW9uIHdpdGggb25seSBOb25jZUFkdmFuY2UgKyBNZW1vIGluc3RydWN0aW9ucyAobm8gVHJhbnNmZXIgb3IgVG9rZW5UcmFuc2ZlcikuXG4gICAgICAvLyBQcmV2aW91c2x5IHRoaXMgd291bGQgaW5jb3JyZWN0bHkgZmFsbCB0aHJvdWdoIHRvICdTZW5kJy5cbiAgICAgIGNvbnN0IEJPSUxFUlBMQVRFX09OTFlfVFhfQkFTRTY0ID1cbiAgICAgICAgJ0FnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBREUzYURLOW5tRWNjT21RSjRjclp6UHVUblJWYTN3b0ZTakt6RTJoY3NGYk5rcHZBOExuajdDVmVKKy9VZlh3TEk1ZzIyM0QwMm00K1JFVWZQYzUwUUNBZ0VFQjhPcG9YK1licS9qOHhpODBEaEZ0ajhBVVZIUHJqaEsxRTNEblQ1Qm14MzQ2aVV0WVFLTU1Cb2xJQU82UG1mSmgzdzdodUZjWWNHTk9COHNnWE4zOFdnNlpyV0FOTkpmYjY0cThCMjQycWZSaVQ3ZGZmYjgwSDJPb1hHUTBhcTBsQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJVcFRXcGtwSVFaTkpPaHhZTm80Zkh3MXRkMjhrcnVCNUIrb1FFRUZSSTBHcDlVWEdNZDB5U2hXWTVocEhWNjJpMTY0bzV0TGJWeHpWVnNoQUFBQUFBYW4xUmNaTEZhTzRJcUVYM1BTbDRqUEExd3hSYklhczBUWUJpNnBRQUFBRUhQcXRHWU9qanFWZkhnZzFTMzJNNHFNZTJBUU8va0R5MStDRVlRd2tpc0RBd01DQmdFRUJBQUFBQVFDQUFVSlNHVnNiRzhnUVZCSkJBQW5RVkJKSUVsdWRHVm5jbUYwYVc5dUlIUmxjM1FnWTNWemRHOXRJSFJ5WVc1ellXTjBhVzl1JztcblxuICAgICAgY29uc3QgZXhwbGFpbmVkID0gZXhwbGFpblNvbFRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhCYXNlNjQ6IEJPSUxFUlBMQVRFX09OTFlfVFhfQkFTRTY0LFxuICAgICAgICBmZWVJbmZvOiB7IGZlZTogJzUwMDAnIH0sXG4gICAgICAgIGNvaW5OYW1lOiAndHNvbCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwbGFpbmVkLnR5cGUuc2hvdWxkLmVxdWFsKCdDdXN0b21UeCcpO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dEFtb3VudC5zaG91bGQuZXF1YWwoJzAnKTtcbiAgICAgIGV4cGxhaW5lZC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMCk7XG4gICAgICAodHlwZW9mIGV4cGxhaW5lZC5tZW1vKS5zaG91bGQuZXF1YWwoJ3N0cmluZycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjbGFzc2lmeSB0b2tlbiBlbmFibGVtZW50IChBVEEgaW5pdCArIFRva2VuIEFDTCBwZXJtaXNzaW9ubGVzcyB0aGF3KSBhcyBBc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUb2tlbi0yMDIyIG1pbnQgKFRyYW5zZmVySG9vayArIERlZmF1bHRBY2NvdW50U3RhdGUgZnJvemVuLCBzUkZDLTM3IFRva2VuIEFDTCBnYXRpbmcgd2l0aFxuICAgICAgLy8gcGVybWlzc2lvbmxlc3MgdGhhdyBlbmFibGVkKS4gVGhlIGVuYWJsZW1lbnQgcHJlYnVpbGQgYXBwZW5kcyB0aGUgVG9rZW4gQUNMXG4gICAgICAvLyBUaGF3UGVybWlzc2lvbmxlc3NJZGVtcG90ZW50IGluc3RydWN0aW9uIChwcm9ncmFtIFRBQ0xrVTYuLi4sIGRpc2NyaW1pbmF0b3IgOSkgYWZ0ZXIgdGhlXG4gICAgICAvLyBpZGVtcG90ZW50IEFUQS1pbml0LiBUaGUgd2FzbSBwYXJzZXIgZG9lcyBub3Qga25vdyB0aGUgVG9rZW4gQUNMIHByb2dyYW0sIHNvIGl0IHBhcnNlcyBhc1xuICAgICAgLy8gVW5rbm93biDigJQgdGhpcyBwcmV2aW91c2x5IG1pc2NsYXNzaWZpZWQgdGhlIGVuYWJsZW1lbnQgYXMgQ3VzdG9tVHggYW5kIGZhaWxlZFxuICAgICAgLy8gdmVyaWZ5VHhUeXBlIChcIkludmFsaWQgdHJhbnNhY3Rpb24gdHlwZSBvbiB0b2tlbiBlbmFibGVtZW50XCIpLlxuICAgICAgY29uc3QgQVRBX0lOSVRfV0lUSF9UT0tFTl9BQ0xfVEhBV19CQVNFNjQgPVxuICAgICAgICAnQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBWUpVaENGOUxIbzdLaUc3SEREdENRYmJJQUpHMnVpbk1sSWc1SmJ5N0xpR0NVazlkQmFDRW1UMGVQblBZaDRFLzNMYjdqUzdjWkd5b1BLeHhQR2RBYlB0UVo2S0lLUkI5aGU1KzRZTUM2ejZTbkk0cDJVdmlFeHh0UTYzTTd5eU56S0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFveHJld1g1VkEyRmxIcG54dXhlamlTRVNWWkkxeXpHT0hCNHVWNVRtQ1BDVHhaK0dITFBWYnQzUit1bDg0ZWh4VkFncU0zcm16dGZGTFc4bS9vLzQxakpjbGowNGtpZkc3UFJBcEZJNE5nd3RhRTVuYS94Q0VCSTU3Mk52cCtGa0dzMythY1BRRzZqYlRLZldVcFJZRmxnL3k0VGNYV3k3YUFHYktNanByemdiZDl1SHVkWS9lR0VKZHZPUnN6ZHEyR3Z4Tmc3a05KLzY5K1NqWW9ZdjhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0JnWUFBZ0FGQXdnQkFRY0dBQUlGQUFFRUFRaz0nO1xuXG4gICAgICBjb25zdCBleHBsYWluZWQgPSBleHBsYWluU29sVHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEJhc2U2NDogQVRBX0lOSVRfV0lUSF9UT0tFTl9BQ0xfVEhBV19CQVNFNjQsXG4gICAgICAgIGZlZUluZm86IHsgZmVlOiAnNTAwMCcgfSxcbiAgICAgICAgY29pbk5hbWU6ICd0c29sJyxcbiAgICAgIH0pO1xuXG4gICAgICBleHBsYWluZWQudHlwZS5zaG91bGQuZXF1YWwoJ0Fzc29jaWF0ZWRUb2tlbkFjY291bnRJbml0aWFsaXphdGlvbicpO1xuICAgICAgZXhwbGFpbmVkLnRva2VuRW5hYmxlbWVudHM/Lmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBleHBsYWluZWQudG9rZW5FbmFibGVtZW50cz8uWzBdLnRva2VuTmFtZS5zaG91bGQuZXF1YWwoJzNWREJKV2d6UlVzY2pRenpBcDUybmExZERxdUV4Wm1EMVBrQ3ZIOXN2R0Y2Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNsYXNzaWZ5IGEgVG9rZW4tMjAyMiBCdXJuQ2hlY2tlZCB1bmtub3duIGluc3RydWN0aW9uIGFzIEN1c3RvbVR4JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQnVybkNoZWNrZWQgaXMgbm90IGRlY29kZWQgYnkgdGhlIFdBU00gcGFyc2VyLCBzbyBpdCBpcyBlbWl0dGVkIGFzIFVua25vd24gd2l0aFxuICAgICAgLy8gYmFzZTY0LWVuY29kZWQgZGF0YS4gVGhpcyBtdXN0IG5vdCB0aHJvdyB3aGlsZSBjaGVja2luZyBmb3IgY29uZmlkZW50aWFsIHRyYW5zZmVycy5cbiAgICAgIGNvbnN0IFRPS0VOXzIwMjJfQlVSTl9DSEVDS0VEX0JBU0U2NCA9XG4gICAgICAgICdBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFJRWQ0VnVicnRYQUxJSDc2NklwdS9GdmgyNkZ5dk9QanBCTWtZQmUzVU8zMFNGTjVsdTVoK3FiaWZsdzNEbm9KR3NkSjAzNWQwV3RhemNWa0lvRTVGaE9nay9JQnpwc1NmdjJmS2NkaFRJSEZFUUtOQmkxMHpyTHRVSWFjdXNGTnRRQnQzMjRlNTFqOTRZUWwyODVHek4ycllhL0UyRHVRMG4vcjM1S05paGkvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFREF3RUNBQW9LUUVJUEFBQUFBQUFHJztcblxuICAgICAgY29uc3QgZXhwbGFpbmVkID0gZXhwbGFpblNvbFRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhCYXNlNjQ6IFRPS0VOXzIwMjJfQlVSTl9DSEVDS0VEX0JBU0U2NCxcbiAgICAgICAgZmVlSW5mbzogeyBmZWU6ICc1MDAwJyB9LFxuICAgICAgICBjb2luTmFtZTogJ3Rzb2wnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGxhaW5lZC50eXBlLnNob3VsZC5lcXVhbCgnQ3VzdG9tVHgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY2xhc3NpZnkgdG9rZW4gdHJhbnNmZXIgd2l0aCBUb2tlbiBBQ0wgcGVybWlzc2lvbmxlc3MgdGhhdyBhcyBTZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVG9rZW5UcmFuc2ZlciAodHJhbnNmZXJDaGVja2VkLCBUb2tlbi0yMDIyKSArIFRva2VuIEFDTCBUaGF3UGVybWlzc2lvbmxlc3NJZGVtcG90ZW50IGZvclxuICAgICAgLy8gdGhlIGRlc3RpbmF0aW9uIEFUQS4gVGhlIFVua25vd24gdGhhdyBpbnN0cnVjdGlvbiBwcmV2aW91c2x5IHRyaWdnZXJlZCB0aGUgQ3VzdG9tVHhcbiAgICAgIC8vIGZhbGxiYWNrIGJlZm9yZSB0aGUgU2VuZCBjaGVjay5cbiAgICAgIGNvbnN0IFRSQU5TRkVSX1dJVEhfVE9LRU5fQUNMX1RIQVdfQkFTRTY0ID1cbiAgICAgICAgJ0FRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQVFJVWhDRjlMSG83S2lHN0hERHRDUWJiSUFKRzJ1aW5NbElnNUpieTdMaUdDVmxOOHhDRnVMV1dxRFVhN3pkTXNjUnpISlNoRm1RNGF2WVVrNXI5NXFocXJNVVNaY2FuNVBRelNvb01YSDZob1puZ3NlNDJUb3UxdU43YUZEVkRMU3RCbm9vZ3BFSDJGN243aGd3THJQcEtjamluWlMrSVRIRzFEcmN6dkxJM01vb3hyZXdYNVZBMkZsSHBueHV4ZWppU0VTVlpJMXl6R09IQjR1VjVUbUNQQ1R4WitHSExQVmJ0M1IrdWw4NGVoeFZBZ3FNM3JtenRmRkxXOG0vby80MUJyTi9tbkQwQnVvMjB5bjFsS1VXQlpZUDh1RTNGMXN1MmdCbXlqSTZhODRHM2ZiaDduV1AzaGhDWGJ6a2JNM2F0aHI4VFlPNURTZit2ZmtvMktHTC9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdjRUF3VUJBQW9NQVFBQUFBQUFBQUFKQmdZQUFRVUFBZ1FCQ1E9PSc7XG5cbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IGV4cGxhaW5Tb2xUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4QmFzZTY0OiBUUkFOU0ZFUl9XSVRIX1RPS0VOX0FDTF9USEFXX0JBU0U2NCxcbiAgICAgICAgZmVlSW5mbzogeyBmZWU6ICc1MDAwJyB9LFxuICAgICAgICBjb2luTmFtZTogJ3Rzb2wnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGxhaW5lZC50eXBlLnNob3VsZC5lcXVhbCgnU2VuZCcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19