@bitgo-beta/sdk-coin-starknet 0.0.1-beta.31 → 0.0.1-beta.310

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 (42) hide show
  1. package/dist/src/lib/constants.d.ts +3 -0
  2. package/dist/src/lib/constants.d.ts.map +1 -1
  3. package/dist/src/lib/constants.js +7 -2
  4. package/dist/src/lib/iface.d.ts +34 -0
  5. package/dist/src/lib/iface.d.ts.map +1 -1
  6. package/dist/src/lib/iface.js +1 -1
  7. package/dist/src/lib/index.d.ts +2 -0
  8. package/dist/src/lib/index.d.ts.map +1 -1
  9. package/dist/src/lib/index.js +6 -2
  10. package/dist/src/lib/transaction.d.ts +3 -1
  11. package/dist/src/lib/transaction.d.ts.map +1 -1
  12. package/dist/src/lib/transaction.js +59 -13
  13. package/dist/src/lib/transactionBuilderFactory.d.ts +4 -1
  14. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  15. package/dist/src/lib/transactionBuilderFactory.js +20 -4
  16. package/dist/src/lib/udcDeployBuilder.d.ts +30 -0
  17. package/dist/src/lib/udcDeployBuilder.d.ts.map +1 -0
  18. package/dist/src/lib/udcDeployBuilder.js +117 -0
  19. package/dist/src/lib/utils.d.ts +12 -1
  20. package/dist/src/lib/utils.d.ts.map +1 -1
  21. package/dist/src/lib/utils.js +76 -1
  22. package/dist/src/lib/walletInitializationBuilder.d.ts +26 -0
  23. package/dist/src/lib/walletInitializationBuilder.d.ts.map +1 -0
  24. package/dist/src/lib/walletInitializationBuilder.js +117 -0
  25. package/dist/src/starknet.d.ts +8 -1
  26. package/dist/src/starknet.d.ts.map +1 -1
  27. package/dist/src/starknet.js +17 -3
  28. package/dist/test/unit/starknet.js +42 -1
  29. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +7 -1
  30. package/dist/test/unit/transferBuilder.js +2 -2
  31. package/dist/test/unit/udcDeployBuilder.d.ts +2 -0
  32. package/dist/test/unit/udcDeployBuilder.d.ts.map +1 -0
  33. package/dist/test/unit/udcDeployBuilder.js +182 -0
  34. package/dist/test/unit/utils.d.ts +1 -1
  35. package/dist/test/unit/utils.d.ts.map +1 -1
  36. package/dist/test/unit/utils.js +94 -2
  37. package/dist/test/unit/walletInitializationBuilder.d.ts +2 -0
  38. package/dist/test/unit/walletInitializationBuilder.d.ts.map +1 -0
  39. package/dist/test/unit/walletInitializationBuilder.js +123 -0
  40. package/dist/tsconfig.tsbuildinfo +1 -1
  41. package/package.json +9 -9
  42. package/LICENSE +0 -191
@@ -0,0 +1,182 @@
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 statics_1 = require("@bitgo-beta/statics");
8
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
9
+ const transactionBuilderFactory_1 = require("../../src/lib/transactionBuilderFactory");
10
+ const udcDeployBuilder_1 = require("../../src/lib/udcDeployBuilder");
11
+ const starknet_1 = require("../resources/starknet");
12
+ const constants_1 = require("../../src/lib/constants");
13
+ const utils_1 = __importDefault(require("../../src/lib/utils"));
14
+ const iface_1 = require("../../src/lib/iface");
15
+ describe('Starknet UdcDeployBuilder', () => {
16
+ const coinConfig = statics_1.coins.get('starknet');
17
+ const master = starknet_1.Accounts.account1;
18
+ const target = starknet_1.Accounts.account2;
19
+ const getBuilder = () => new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig).getUdcDeployBuilder();
20
+ function buildUdcRawHex(overrides = {}) {
21
+ const derived = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(target.publicKey));
22
+ const ctor = overrides.constructorCalldata ?? derived.constructorCalldata;
23
+ const calldata = overrides.omitCtor
24
+ ? [constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, derived.salt, overrides.unique ?? '0x0', overrides.ctorLen ?? '0x99']
25
+ : [
26
+ constants_1.OZ_ETH_ACCOUNT_CLASS_HASH,
27
+ derived.salt,
28
+ overrides.unique ?? '0x0',
29
+ overrides.ctorLen ?? '0x' + BigInt(ctor.length).toString(16),
30
+ ...ctor,
31
+ ];
32
+ return Buffer.from(JSON.stringify({
33
+ senderAddress: master.address,
34
+ calls: [
35
+ {
36
+ contractAddress: constants_1.UDC_ADDRESS,
37
+ entrypoint: constants_1.UDC_DEPLOY_ENTRYPOINT,
38
+ calldata,
39
+ },
40
+ ],
41
+ nonce: '0x0',
42
+ chainId: starknet_1.SandboxTransferData.chainId,
43
+ transactionType: iface_1.StarknetTransactionType.INVOKE,
44
+ }), 'utf-8').toString('hex');
45
+ }
46
+ describe('Build UDC deploy transaction', () => {
47
+ it('should build from target public key and produce a transactionHash', async () => {
48
+ const builder = getBuilder();
49
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
50
+ const expected = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(target.publicKey));
51
+ builder.getTargetAddress().should.equal(expected.address);
52
+ utils_1.default.normalizeAddress(builder.getTargetAddress()).should.equal(utils_1.default.normalizeAddress(target.address));
53
+ const tx = (await builder.build());
54
+ const data = tx.starknetTransactionData;
55
+ should_1.default.exist(data.transactionHash);
56
+ data.transactionHash.should.startWith('0x');
57
+ data.calls.length.should.equal(1);
58
+ data.calls[0].contractAddress.should.equal(constants_1.UDC_ADDRESS);
59
+ data.calls[0].entrypoint.should.equal(constants_1.UDC_DEPLOY_ENTRYPOINT);
60
+ data.calls[0].calldata[0].should.equal(constants_1.OZ_ETH_ACCOUNT_CLASS_HASH);
61
+ data.calls[0].calldata[2].should.equal('0x0'); // unique=false
62
+ data.calls[0].calldata[3].should.equal('0x4'); // EthAccount ctor len
63
+ data.calls[0].calldata.slice(4).should.deepEqual(expected.constructorCalldata);
64
+ });
65
+ it('should keep derived address consistent with computeStarknetAddress', async () => {
66
+ const builder = getBuilder();
67
+ builder.fromPublicKey(target.publicKey);
68
+ const derived = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(target.publicKey));
69
+ builder.getTargetAddress().should.equal(derived.address);
70
+ derived.salt.should.equal(utils_1.default.parseUdcDeployCall({
71
+ contractAddress: constants_1.UDC_ADDRESS,
72
+ entrypoint: constants_1.UDC_DEPLOY_ENTRYPOINT,
73
+ calldata: [constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, derived.salt, '0x0', '0x4', ...derived.constructorCalldata],
74
+ }).salt);
75
+ });
76
+ it('should include compiledCalldata with a single UDC call', async () => {
77
+ const builder = getBuilder();
78
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
79
+ const tx = (await builder.build());
80
+ const compiled = tx.starknetTransactionData.compiledCalldata;
81
+ compiled[0].should.equal('0x1');
82
+ utils_1.default.normalizeAddress(compiled[1]).should.equal(utils_1.default.normalizeAddress(constants_1.UDC_ADDRESS));
83
+ });
84
+ it('should round-trip through toInternalHex and from()', async () => {
85
+ const builder = getBuilder();
86
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
87
+ const tx = (await builder.build());
88
+ const internalHex = tx.toInternalHex();
89
+ const builder2 = await new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig).from(internalHex);
90
+ builder2.should.be.instanceof(udcDeployBuilder_1.UdcDeployBuilder);
91
+ const tx2 = (await builder2.build());
92
+ tx2.signableHex.should.equal(tx.signableHex);
93
+ tx2.id.should.equal(tx.id);
94
+ builder2.getTargetAddress().should.equal(target.address);
95
+ const parsed = utils_1.default.parseUdcDeployCall(tx2.starknetTransactionData.calls[0]);
96
+ should_1.default.exist(parsed);
97
+ parsed.unique.should.equal(false);
98
+ utils_1.default
99
+ .normalizeAddress(utils_1.default.calculateContractAddressFromHash(parsed.salt, parsed.classHash, parsed.constructorCalldata, 0))
100
+ .should.equal(utils_1.default.normalizeAddress(target.address));
101
+ });
102
+ it('toBroadcastFormat should return Starknet RPC-ready INVOKE JSON', async () => {
103
+ const builder = getBuilder();
104
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
105
+ const tx = (await builder.build());
106
+ const parsed = JSON.parse(tx.toBroadcastFormat());
107
+ parsed.type.should.equal('INVOKE');
108
+ parsed.version.should.equal('0x3');
109
+ parsed.sender_address.should.equal(master.address);
110
+ parsed.calldata.should.be.Array();
111
+ parsed.calldata[0].should.equal('0x1');
112
+ });
113
+ it('should accept explicit deployParams', async () => {
114
+ const derived = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(target.publicKey));
115
+ const builder = getBuilder();
116
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).deployParams({
117
+ classHash: constants_1.OZ_ETH_ACCOUNT_CLASS_HASH,
118
+ salt: derived.salt,
119
+ constructorCalldata: derived.constructorCalldata,
120
+ });
121
+ builder.getTargetAddress().should.equal(derived.address);
122
+ const tx = (await builder.build());
123
+ should_1.default.exist(tx.starknetTransactionData.transactionHash);
124
+ });
125
+ it('toJson/explainTransaction should expose target address with amount 0', async () => {
126
+ const builder = getBuilder();
127
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
128
+ const tx = (await builder.build());
129
+ const json = tx.toJson();
130
+ json.type.should.equal(sdk_core_1.TransactionType.ContractCall);
131
+ json.sender.should.equal(master.address);
132
+ utils_1.default.normalizeAddress(json.recipient).should.equal(utils_1.default.normalizeAddress(target.address));
133
+ json.amount.should.equal('0');
134
+ const explained = tx.explainTransaction();
135
+ explained.outputs.length.should.equal(1);
136
+ utils_1.default.normalizeAddress(explained.outputs[0].address).should.equal(utils_1.default.normalizeAddress(target.address));
137
+ explained.outputs[0].amount.should.equal('0');
138
+ explained.type.should.equal(sdk_core_1.TransactionType.ContractCall);
139
+ });
140
+ });
141
+ describe('Validation', () => {
142
+ it('should reject build without sender', async () => {
143
+ const builder = getBuilder();
144
+ builder.nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId).fromPublicKey(target.publicKey);
145
+ await builder.build().should.be.rejectedWith(/[Ss]ender/);
146
+ });
147
+ it('should reject build without deploy params', async () => {
148
+ const builder = getBuilder();
149
+ builder.sender(master.address).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId);
150
+ await builder.build().should.be.rejectedWith(/UDC deploy requires/);
151
+ });
152
+ it('should reject invalid target public key', () => {
153
+ const builder = getBuilder();
154
+ (() => builder.fromPublicKey('invalid')).should.throw(/[Ii]nvalid/);
155
+ });
156
+ it('should reject empty constructor calldata in deployParams', () => {
157
+ const builder = getBuilder();
158
+ (() => builder.deployParams({
159
+ classHash: constants_1.OZ_ETH_ACCOUNT_CLASS_HASH,
160
+ salt: '0x1',
161
+ constructorCalldata: [],
162
+ })).should.throw(/Constructor calldata/);
163
+ });
164
+ it('should reject salt 0x0', () => {
165
+ const builder = getBuilder();
166
+ (() => builder.deployParams({
167
+ classHash: constants_1.OZ_ETH_ACCOUNT_CLASS_HASH,
168
+ salt: '0x0',
169
+ constructorCalldata: ['0x1', '0x2', '0x3', '0x4'],
170
+ })).should.throw(/Invalid salt/);
171
+ });
172
+ it('should reject unique=true on rehydration via from()', async () => {
173
+ const hex = buildUdcRawHex({ unique: '0x1' });
174
+ await new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig).from(hex).should.be.rejectedWith(/unique=true/);
175
+ });
176
+ it('should reject malformed UDC calldata (bad ctor_len) on from()', async () => {
177
+ const hex = buildUdcRawHex({ omitCtor: true, ctorLen: '0x99' });
178
+ await new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig).from(hex).should.be.rejectedWith(/Invalid UDC deploy calldata/);
179
+ });
180
+ });
181
+ });
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWRjRGVwbG95QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC91ZGNEZXBsb3lCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLGlEQUE0QztBQUM1QyxtREFBdUQ7QUFDdkQsdUZBQW9GO0FBRXBGLHFFQUFrRTtBQUNsRSxvREFBc0U7QUFDdEUsdURBQXdHO0FBQ3hHLGdFQUF3QztBQUN4QywrQ0FBOEQ7QUFFOUQsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRTtJQUN6QyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLG1CQUFRLENBQUMsUUFBUSxDQUFDO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLG1CQUFRLENBQUMsUUFBUSxDQUFDO0lBRWpDLE1BQU0sVUFBVSxHQUFHLEdBQXFCLEVBQUUsQ0FBQyxJQUFJLHFEQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFFM0csU0FBUyxjQUFjLENBQ3JCLFlBS0ksRUFBRTtRQUVOLE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxzQkFBc0IsQ0FBQyxlQUFLLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDL0YsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztRQUMxRSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUTtZQUNqQyxDQUFDLENBQUMsQ0FBQyxxQ0FBeUIsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDO1lBQ25HLENBQUMsQ0FBQztnQkFDRSxxQ0FBeUI7Z0JBQ3pCLE9BQU8s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Q0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ25FLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sSUFBSSxxREFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEcsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDN0UsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNoRSxNQUFNLElBQUkscURBQXlCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDbEgsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFVkY0RlcGxveUJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL3VkY0RlcGxveUJ1aWxkZXInO1xuaW1wb3J0IHsgQWNjb3VudHMsIFNhbmRib3hUcmFuc2ZlckRhdGEgfSBmcm9tICcuLi9yZXNvdXJjZXMvc3RhcmtuZXQnO1xuaW1wb3J0IHsgT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCwgVURDX0FERFJFU1MsIFVEQ19ERVBMT1lfRU5UUllQT0lOVCB9IGZyb20gJy4uLy4uL3NyYy9saWIvY29uc3RhbnRzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5cbmRlc2NyaWJlKCdTdGFya25ldCBVZGNEZXBsb3lCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCdzdGFya25ldCcpO1xuICBjb25zdCBtYXN0ZXIgPSBBY2NvdW50cy5hY2NvdW50MTtcbiAgY29uc3QgdGFyZ2V0ID0gQWNjb3VudHMuYWNjb3VudDI7XG5cbiAgY29uc3QgZ2V0QnVpbGRlciA9ICgpOiBVZGNEZXBsb3lCdWlsZGVyID0+IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpLmdldFVkY0RlcGxveUJ1aWxkZXIoKTtcblxuICBmdW5jdGlvbiBidWlsZFVkY1Jhd0hleChcbiAgICBvdmVycmlkZXM6IHtcbiAgICAgIHVuaXF1ZT86IHN0cmluZztcbiAgICAgIGN0b3JMZW4/OiBzdHJpbmc7XG4gICAgICBjb25zdHJ1Y3RvckNhbGxkYXRhPzogc3RyaW5nW107XG4gICAgICBvbWl0Q3Rvcj86IGJvb2xlYW47XG4gICAgfSA9IHt9XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVyaXZlZCA9IHV0aWxzLmNvbXB1dGVTdGFya25ldEFkZHJlc3ModXRpbHMuZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KHRhcmdldC5wdWJsaWNLZXkpKTtcbiAgICBjb25zdCBjdG9yID0gb3ZlcnJpZGVzLmNvbnN0cnVjdG9yQ2FsbGRhdGEgPz8gZGVyaXZlZC5jb25zdHJ1Y3RvckNhbGxkYXRhO1xuICAgIGNvbnN0IGNhbGxkYXRhID0gb3ZlcnJpZGVzLm9taXRDdG9yXG4gICAgICA/IFtPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILCBkZXJpdmVkLnNhbHQsIG92ZXJyaWRlcy51bmlxdWUgPz8gJzB4MCcsIG92ZXJyaWRlcy5jdG9yTGVuID8/ICcweDk5J11cbiAgICAgIDogW1xuICAgICAgICAgIE9aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsXG4gICAgICAgICAgZGVyaXZlZC5zYWx0LFxuICAgICAgICAgIG92ZXJyaWRlcy51bmlxdWUgPz8gJzB4MCcsXG4gICAgICAgICAgb3ZlcnJpZGVzLmN0b3JMZW4gPz8gJzB4JyArIEJpZ0ludChjdG9yLmxlbmd0aCkudG9TdHJpbmcoMTYpLFxuICAgICAgICAgIC4uLmN0b3IsXG4gICAgICAgIF07XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBtYXN0ZXIuYWRkcmVzcyxcbiAgICAgICAgY2FsbHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250cmFjdEFkZHJlc3M6IFVEQ19BRERSRVNTLFxuICAgICAgICAgICAgZW50cnlwb2ludDogVURDX0RFUExPWV9FTlRSWVBPSU5ULFxuICAgICAgICAgICAgY2FsbGRhdGEsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICBjaGFpbklkOiBTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQsXG4gICAgICAgIHRyYW5zYWN0aW9uVHlwZTogU3RhcmtuZXRUcmFuc2FjdGlvblR5cGUuSU5WT0tFLFxuICAgICAgfSksXG4gICAgICAndXRmLTgnXG4gICAgKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICBkZXNjcmliZSgnQnVpbGQgVURDIGRlcGxveSB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGZyb20gdGFyZ2V0IHB1YmxpYyBrZXkgYW5kIHByb2R1Y2UgYSB0cmFuc2FjdGlvbkhhc2gnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5zZW5kZXIobWFzdGVyLmFkZHJlc3MpLm5vbmNlKCcweDAnKS5jaGFpbklkKFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCkuZnJvbVB1YmxpY0tleSh0YXJnZXQucHVibGljS2V5KTtcblxuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB1dGlscy5jb21wdXRlU3RhcmtuZXRBZGRyZXNzKHV0aWxzLmdldFVuY29tcHJlc3NlZFB1YmxpY0tleSh0YXJnZXQucHVibGljS2V5KSk7XG4gICAgICBidWlsZGVyLmdldFRhcmdldEFkZHJlc3MoKSEuc2hvdWxkLmVxdWFsKGV4cGVjdGVkLmFkZHJlc3MpO1xuICAgICAgdXRpbHMubm9ybWFsaXplQWRkcmVzcyhidWlsZGVyLmdldFRhcmdldEFkZHJlc3MoKSEpLnNob3VsZC5lcXVhbCh1dGlscy5ub3JtYWxpemVBZGRyZXNzKHRhcmdldC5hZGRyZXNzKSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBkYXRhID0gdHguc3RhcmtuZXRUcmFuc2FjdGlvbkRhdGE7XG5cbiAgICAgIHNob3VsZC5leGlzdChkYXRhLnRyYW5zYWN0aW9uSGFzaCk7XG4gICAgICAoZGF0YS50cmFuc2FjdGlvbkhhc2ggYXMgc3RyaW5nKS5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgICAgZGF0YS5jYWxscy5sZW5ndGguc2hvdWxkLmVxdWFsKDEpO1xuICAgICAgZGF0YS5jYWxsc1swXS5jb250cmFjdEFkZHJlc3Muc2hvdWxkLmVxdWFsKFVEQ19BRERSRVNTKTtcbiAgICAgIGRhdGEuY2FsbHNbMF0uZW50cnlwb2ludC5zaG91bGQuZXF1YWwoVURDX0RFUExPWV9FTlRSWVBPSU5UKTtcbiAgICAgIGRhdGEuY2FsbHNbMF0uY2FsbGRhdGFbMF0uc2hvdWxkLmVxdWFsKE9aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gpO1xuICAgICAgZGF0YS5jYWxsc1swXS5jYWxsZGF0YVsyXS5zaG91bGQuZXF1YWwoJzB4MCcpOyAvLyB1bmlxdWU9ZmFsc2VcbiAgICAgIGRhdGEuY2FsbHNbMF0uY2FsbGRhdGFbM10uc2hvdWxkLmVxdWFsKCcweDQnKTsgLy8gRXRoQWNjb3VudCBjdG9yIGxlblxuICAgICAgZGF0YS5jYWxsc1swXS5jYWxsZGF0YS5zbGljZSg0KS5zaG91bGQuZGVlcEVxdWFsKGV4cGVjdGVkLmNvbnN0cnVjdG9yQ2FsbGRhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBrZWVwIGRlcml2ZWQgYWRkcmVzcyBjb25zaXN0ZW50IHdpdGggY29tcHV0ZVN0YXJrbmV0QWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXRCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmZyb21QdWJsaWNLZXkodGFyZ2V0LnB1YmxpY0tleSk7XG4gICAgICBjb25zdCBkZXJpdmVkID0gdXRpbHMuY29tcHV0ZVN0YXJrbmV0QWRkcmVzcyh1dGlscy5nZXRVbmNvbXByZXNzZWRQdWJsaWNLZXkodGFyZ2V0LnB1YmxpY0tleSkpO1xuICAgICAgYnVpbGRlci5nZXRUYXJnZXRBZGRyZXNzKCkhLnNob3VsZC5lcXVhbChkZXJpdmVkLmFkZHJlc3MpO1xuICAgICAgZGVyaXZlZC5zYWx0LnNob3VsZC5lcXVhbChcbiAgICAgICAgdXRpbHMucGFyc2VVZGNEZXBsb3lDYWxsKHtcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3M6IFVEQ19BRERSRVNTLFxuICAgICAgICAgIGVudHJ5cG9pbnQ6IFVEQ19ERVBMT1lfRU5UUllQT0lOVCxcbiAgICAgICAgICBjYWxsZGF0YTogW09aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsIGRlcml2ZWQuc2FsdCwgJzB4MCcsICcweDQnLCAuLi5kZXJpdmVkLmNvbnN0cnVjdG9yQ2FsbGRhdGFdLFxuICAgICAgICB9KSEuc2FsdFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5jbHVkZSBjb21waWxlZENhbGxkYXRhIHdpdGggYSBzaW5nbGUgVURDIGNhbGwnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5zZW5kZXIobWFzdGVyLmFkZHJlc3MpLm5vbmNlKCcweDAnKS5jaGFpbklkKFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCkuZnJvbVB1YmxpY0tleSh0YXJnZXQucHVibGljS2V5KTtcblxuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IGNvbXBpbGVkID0gdHguc3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEuY29tcGlsZWRDYWxsZGF0YSBhcyBzdHJpbmdbXTtcbiAgICAgIGNvbXBpbGVkWzBdLnNob3VsZC5lcXVhbCgnMHgxJyk7XG4gICAgICB1dGlscy5ub3JtYWxpemVBZGRyZXNzKGNvbXBpbGVkWzFdKS5zaG91bGQuZXF1YWwodXRpbHMubm9ybWFsaXplQWRkcmVzcyhVRENfQUREUkVTUykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByb3VuZC10cmlwIHRocm91Z2ggdG9JbnRlcm5hbEhleCBhbmQgZnJvbSgpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuc2VuZGVyKG1hc3Rlci5hZGRyZXNzKS5ub25jZSgnMHgwJykuY2hhaW5JZChTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQpLmZyb21QdWJsaWNLZXkodGFyZ2V0LnB1YmxpY0tleSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBpbnRlcm5hbEhleCA9IHR4LnRvSW50ZXJuYWxIZXgoKTtcblxuICAgICAgY29uc3QgYnVpbGRlcjIgPSBhd2FpdCBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKS5mcm9tKGludGVybmFsSGV4KTtcbiAgICAgIGJ1aWxkZXIyLnNob3VsZC5iZS5pbnN0YW5jZW9mKFVkY0RlcGxveUJ1aWxkZXIpO1xuICAgICAgY29uc3QgdHgyID0gKGF3YWl0IGJ1aWxkZXIyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICB0eDIuc2lnbmFibGVIZXguc2hvdWxkLmVxdWFsKHR4LnNpZ25hYmxlSGV4KTtcbiAgICAgIHR4Mi5pZC5zaG91bGQuZXF1YWwodHguaWQpO1xuICAgICAgKGJ1aWxkZXIyIGFzIFVkY0RlcGxveUJ1aWxkZXIpLmdldFRhcmdldEFkZHJlc3MoKSEuc2hvdWxkLmVxdWFsKHRhcmdldC5hZGRyZXNzKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHV0aWxzLnBhcnNlVWRjRGVwbG95Q2FsbCh0eDIuc3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEuY2FsbHNbMF0pO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZCk7XG4gICAgICBwYXJzZWQhLnVuaXF1ZS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgdXRpbHNcbiAgICAgICAgLm5vcm1hbGl6ZUFkZHJlc3MoXG4gICAgICAgICAgdXRpbHMuY2FsY3VsYXRlQ29udHJhY3RBZGRyZXNzRnJvbUhhc2gocGFyc2VkIS5zYWx0LCBwYXJzZWQhLmNsYXNzSGFzaCwgcGFyc2VkIS5jb25zdHJ1Y3RvckNhbGxkYXRhLCAwKVxuICAgICAgICApXG4gICAgICAgIC5zaG91bGQuZXF1YWwodXRpbHMubm9ybWFsaXplQWRkcmVzcyh0YXJnZXQuYWRkcmVzcykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RvQnJvYWRjYXN0Rm9ybWF0IHNob3VsZCByZXR1cm4gU3RhcmtuZXQgUlBDLXJlYWR5IElOVk9LRSBKU09OJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuc2VuZGVyKG1hc3Rlci5hZGRyZXNzKS5ub25jZSgnMHgwJykuY2hhaW5JZChTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQpLmZyb21QdWJsaWNLZXkodGFyZ2V0LnB1YmxpY0tleSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgICBwYXJzZWQudHlwZS5zaG91bGQuZXF1YWwoJ0lOVk9LRScpO1xuICAgICAgcGFyc2VkLnZlcnNpb24uc2hvdWxkLmVxdWFsKCcweDMnKTtcbiAgICAgIHBhcnNlZC5zZW5kZXJfYWRkcmVzcy5zaG91bGQuZXF1YWwobWFzdGVyLmFkZHJlc3MpO1xuICAgICAgcGFyc2VkLmNhbGxkYXRhLnNob3VsZC5iZS5BcnJheSgpO1xuICAgICAgcGFyc2VkLmNhbGxkYXRhWzBdLnNob3VsZC5lcXVhbCgnMHgxJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBleHBsaWNpdCBkZXBsb3lQYXJhbXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBkZXJpdmVkID0gdXRpbHMuY29tcHV0ZVN0YXJrbmV0QWRkcmVzcyh1dGlscy5nZXRVbmNvbXByZXNzZWRQdWJsaWNLZXkodGFyZ2V0LnB1YmxpY0tleSkpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuc2VuZGVyKG1hc3Rlci5hZGRyZXNzKS5ub25jZSgnMHgwJykuY2hhaW5JZChTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQpLmRlcGxveVBhcmFtcyh7XG4gICAgICAgIGNsYXNzSGFzaDogT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCxcbiAgICAgICAgc2FsdDogZGVyaXZlZC5zYWx0LFxuICAgICAgICBjb25zdHJ1Y3RvckNhbGxkYXRhOiBkZXJpdmVkLmNvbnN0cnVjdG9yQ2FsbGRhdGEsXG4gICAgICB9KTtcblxuICAgICAgYnVpbGRlci5nZXRUYXJnZXRBZGRyZXNzKCkhLnNob3VsZC5lcXVhbChkZXJpdmVkLmFkZHJlc3MpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIHNob3VsZC5leGlzdCh0eC5zdGFya25ldFRyYW5zYWN0aW9uRGF0YS50cmFuc2FjdGlvbkhhc2gpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RvSnNvbi9leHBsYWluVHJhbnNhY3Rpb24gc2hvdWxkIGV4cG9zZSB0YXJnZXQgYWRkcmVzcyB3aXRoIGFtb3VudCAwJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuc2VuZGVyKG1hc3Rlci5hZGRyZXNzKS5ub25jZSgnMHgwJykuY2hhaW5JZChTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQpLmZyb21QdWJsaWNLZXkodGFyZ2V0LnB1YmxpY0tleSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBqc29uLnR5cGUuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgICAganNvbi5zZW5kZXIuc2hvdWxkLmVxdWFsKG1hc3Rlci5hZGRyZXNzKTtcbiAgICAgIHV0aWxzLm5vcm1hbGl6ZUFkZHJlc3MoanNvbi5yZWNpcGllbnQhKS5zaG91bGQuZXF1YWwodXRpbHMubm9ybWFsaXplQWRkcmVzcyh0YXJnZXQuYWRkcmVzcykpO1xuICAgICAganNvbi5hbW91bnQhLnNob3VsZC5lcXVhbCgnMCcpO1xuXG4gICAgICBjb25zdCBleHBsYWluZWQgPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIGV4cGxhaW5lZC5vdXRwdXRzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICB1dGlscy5ub3JtYWxpemVBZGRyZXNzKGV4cGxhaW5lZC5vdXRwdXRzWzBdLmFkZHJlc3MpLnNob3VsZC5lcXVhbCh1dGlscy5ub3JtYWxpemVBZGRyZXNzKHRhcmdldC5hZGRyZXNzKSk7XG4gICAgICBleHBsYWluZWQub3V0cHV0c1swXS5hbW91bnQuc2hvdWxkLmVxdWFsKCcwJyk7XG4gICAgICBleHBsYWluZWQudHlwZSEuc2hvdWxkLmVxdWFsKFRyYW5zYWN0aW9uVHlwZS5Db250cmFjdENhbGwpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlamVjdCBidWlsZCB3aXRob3V0IHNlbmRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXRCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLm5vbmNlKCcweDAnKS5jaGFpbklkKFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCkuZnJvbVB1YmxpY0tleSh0YXJnZXQucHVibGljS2V5KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9bU3NdZW5kZXIvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGJ1aWxkIHdpdGhvdXQgZGVwbG95IHBhcmFtcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXRCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnNlbmRlcihtYXN0ZXIuYWRkcmVzcykubm9uY2UoJzB4MCcpLmNoYWluSWQoU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkKTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9VREMgZGVwbG95IHJlcXVpcmVzLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBpbnZhbGlkIHRhcmdldCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IGdldEJ1aWxkZXIoKTtcbiAgICAgICgoKSA9PiBidWlsZGVyLmZyb21QdWJsaWNLZXkoJ2ludmFsaWQnKSkuc2hvdWxkLnRocm93KC9bSWldbnZhbGlkLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBlbXB0eSBjb25zdHJ1Y3RvciBjYWxsZGF0YSBpbiBkZXBsb3lQYXJhbXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZ2V0QnVpbGRlcigpO1xuICAgICAgKCgpID0+XG4gICAgICAgIGJ1aWxkZXIuZGVwbG95UGFyYW1zKHtcbiAgICAgICAgICBjbGFzc0hhc2g6IE9aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsXG4gICAgICAgICAgc2FsdDogJzB4MScsXG4gICAgICAgICAgY29uc3RydWN0b3JDYWxsZGF0YTogW10sXG4gICAgICAgIH0pKS5zaG91bGQudGhyb3coL0NvbnN0cnVjdG9yIGNhbGxkYXRhLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBzYWx0IDB4MCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBnZXRCdWlsZGVyKCk7XG4gICAgICAoKCkgPT5cbiAgICAgICAgYnVpbGRlci5kZXBsb3lQYXJhbXMoe1xuICAgICAgICAgIGNsYXNzSGFzaDogT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCxcbiAgICAgICAgICBzYWx0OiAnMHgwJyxcbiAgICAgICAgICBjb25zdHJ1Y3RvckNhbGxkYXRhOiBbJzB4MScsICcweDInLCAnMHgzJywgJzB4NCddLFxuICAgICAgICB9KSkuc2hvdWxkLnRocm93KC9JbnZhbGlkIHNhbHQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHVuaXF1ZT10cnVlIG9uIHJlaHlkcmF0aW9uIHZpYSBmcm9tKCknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBoZXggPSBidWlsZFVkY1Jhd0hleCh7IHVuaXF1ZTogJzB4MScgfSk7XG4gICAgICBhd2FpdCBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKS5mcm9tKGhleCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvdW5pcXVlPXRydWUvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG1hbGZvcm1lZCBVREMgY2FsbGRhdGEgKGJhZCBjdG9yX2xlbikgb24gZnJvbSgpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaGV4ID0gYnVpbGRVZGNSYXdIZXgoeyBvbWl0Q3RvcjogdHJ1ZSwgY3RvckxlbjogJzB4OTknIH0pO1xuICAgICAgYXdhaXQgbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZykuZnJvbShoZXgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0ludmFsaWQgVURDIGRlcGxveSBjYWxsZGF0YS8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -1,2 +1,2 @@
1
- import 'should';
1
+ export {};
2
2
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":"AAQA,OAAO,QAAQ,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
@@ -32,11 +32,16 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
39
  const utils_1 = __importStar(require("../../src/lib/utils"));
40
+ const statics_1 = require("@bitgo-beta/statics");
41
+ const transactionBuilderFactory_1 = require("../../src/lib/transactionBuilderFactory");
37
42
  const starknet_1 = require("../resources/starknet");
38
43
  const constants_1 = require("../../src/lib/constants");
39
- require("should");
44
+ const should_1 = __importDefault(require("should"));
40
45
  describe('Starknet Utils', () => {
41
46
  describe('isValidAddress', () => {
42
47
  it('should accept a valid Starknet address', () => {
@@ -54,6 +59,9 @@ describe('Starknet Utils', () => {
54
59
  it('should reject address without 0x prefix', () => {
55
60
  utils_1.default.isValidAddress('04a1f29b8b8e3d3c9f6c9b7a8d2e1f0c5b4a3d2e1f0c5b4a3d2e1f0c5b4a3d2e').should.equal(false);
56
61
  });
62
+ it('should reject zero (addresses must be non-zero)', () => {
63
+ utils_1.default.isValidAddress('0x0').should.equal(false);
64
+ });
57
65
  });
58
66
  describe('isValidPublicKey', () => {
59
67
  it('should accept a valid uncompressed public key', () => {
@@ -256,5 +264,89 @@ describe('Starknet Utils', () => {
256
264
  hash.should.equal(tv.expectedTxHash);
257
265
  });
258
266
  });
267
+ describe('calculateDeployAccountTransactionHash', () => {
268
+ it('should be deterministic for the same deploy inputs', () => {
269
+ const fullPub = utils_1.default.getUncompressedPublicKey(starknet_1.Accounts.account1.publicKey);
270
+ const { address, constructorCalldata, salt } = utils_1.default.computeStarknetAddress(fullPub);
271
+ const params = {
272
+ contractAddress: address,
273
+ classHash: '0x3940bc18abf1df6bc540cabadb1cad9486c6803b95801e57b6153ae21abfe06',
274
+ constructorCalldata,
275
+ contractAddressSalt: salt,
276
+ chainId: starknet_1.SandboxTransferData.chainId,
277
+ nonce: '0x0',
278
+ resourceBounds: starknet_1.SandboxTransferData.resourceBounds,
279
+ tip: '0x0',
280
+ };
281
+ const hash1 = (0, utils_1.calculateDeployAccountTransactionHash)(params);
282
+ const hash2 = (0, utils_1.calculateDeployAccountTransactionHash)(params);
283
+ hash1.should.equal(hash2);
284
+ hash1.should.startWith('0x');
285
+ });
286
+ it('should match hash from WalletInitializationBuilder build', async () => {
287
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('starknet'));
288
+ const builder = factory.getWalletInitializationBuilder();
289
+ builder.fromPublicKey(starknet_1.Accounts.account1.publicKey).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId);
290
+ const tx = (await builder.build());
291
+ const fullPub = utils_1.default.getUncompressedPublicKey(starknet_1.Accounts.account1.publicKey);
292
+ const { address, constructorCalldata, salt } = utils_1.default.computeStarknetAddress(fullPub);
293
+ const hash = (0, utils_1.calculateDeployAccountTransactionHash)({
294
+ contractAddress: address,
295
+ classHash: '0x3940bc18abf1df6bc540cabadb1cad9486c6803b95801e57b6153ae21abfe06',
296
+ constructorCalldata,
297
+ contractAddressSalt: salt,
298
+ chainId: starknet_1.SandboxTransferData.chainId,
299
+ nonce: '0x0',
300
+ resourceBounds: starknet_1.SandboxTransferData.resourceBounds,
301
+ });
302
+ hash.should.equal(tx.starknetTransactionData.transactionHash);
303
+ });
304
+ });
305
+ describe('parseUdcDeployCall / isUdcDeployCall', () => {
306
+ it('should parse a valid UDC deploy call', () => {
307
+ const derived = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(starknet_1.Accounts.account2.publicKey));
308
+ const call = {
309
+ contractAddress: constants_1.UDC_ADDRESS,
310
+ entrypoint: constants_1.UDC_DEPLOY_ENTRYPOINT,
311
+ calldata: [constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, derived.salt, '0x0', '0x4', ...derived.constructorCalldata],
312
+ };
313
+ (0, utils_1.isUdcDeployCall)(call).should.equal(true);
314
+ const parsed = (0, utils_1.parseUdcDeployCall)(call);
315
+ should_1.default.exist(parsed);
316
+ parsed.unique.should.equal(false);
317
+ parsed.classHash.should.equal(constants_1.OZ_ETH_ACCOUNT_CLASS_HASH);
318
+ parsed.salt.should.equal(derived.salt);
319
+ parsed.constructorCalldata.should.deepEqual(derived.constructorCalldata);
320
+ });
321
+ it('should reject a transfer call', () => {
322
+ const call = {
323
+ contractAddress: starknet_1.SandboxTransferData.tokenContract,
324
+ entrypoint: 'transfer',
325
+ calldata: [starknet_1.Accounts.account2.address, '0x1', '0x0'],
326
+ };
327
+ (0, utils_1.isUdcDeployCall)(call).should.equal(false);
328
+ should_1.default.equal((0, utils_1.parseUdcDeployCall)(call), undefined);
329
+ });
330
+ it('should parse unique=true but leave unique flag set', () => {
331
+ const derived = utils_1.default.computeStarknetAddress(utils_1.default.getUncompressedPublicKey(starknet_1.Accounts.account2.publicKey));
332
+ const call = {
333
+ contractAddress: constants_1.UDC_ADDRESS,
334
+ entrypoint: constants_1.UDC_DEPLOY_ENTRYPOINT,
335
+ calldata: [constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, derived.salt, '0x1', '0x4', ...derived.constructorCalldata],
336
+ };
337
+ const parsed = (0, utils_1.parseUdcDeployCall)(call);
338
+ should_1.default.exist(parsed);
339
+ parsed.unique.should.equal(true);
340
+ });
341
+ it('should return undefined when ctor_len exceeds remaining calldata', () => {
342
+ const call = {
343
+ contractAddress: constants_1.UDC_ADDRESS,
344
+ entrypoint: constants_1.UDC_DEPLOY_ENTRYPOINT,
345
+ calldata: [constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, '0x1', '0x0', '0x99'],
346
+ };
347
+ (0, utils_1.isUdcDeployCall)(call).should.equal(true);
348
+ should_1.default.equal((0, utils_1.parseUdcDeployCall)(call), undefined);
349
+ });
350
+ });
259
351
  });
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2REFLNkI7QUFDN0Isb0RBQXlGO0FBQ3pGLHVEQUFtRDtBQUNuRCxrQkFBZ0I7QUFFaEIsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtJQUM5QixRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1FBQzlCLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7WUFDaEQsZUFBSyxDQUFDLGNBQWMsQ0FBQyxtQkFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxlQUFLLENBQUMsY0FBYyxDQUFDLG1CQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO1lBQzFDLGVBQUssQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxlQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO1lBQ2pELGVB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QUFDLGFBQWE7Z0JBQy9CLGdCQUFnQjtnQkFDaEIsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPO2dCQUNuQixLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUs7Z0JBQ2YsY0FBYyxFQUFFLEVBQUUsQ0FBQyxjQUFjO2dCQUNqQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUc7YUFDWixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHV0aWxzLCB7XG4gIGVuY29kZVNob3J0U3RyaW5nLFxuICBnZXRTZWxlY3RvckZyb21OYW1lLFxuICBjb21waWxlRXhlY3V0ZUNhbGxkYXRhLFxuICBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2gsXG59IGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgQWNjb3VudHMsIFNhbmRib3hUcmFuc2ZlckRhdGEsIEtub3duR29vZEludm9rZVR4IH0gZnJvbSAnLi4vcmVzb3VyY2VzL3N0YXJrbmV0JztcbmltcG9ydCB7IE1BU0tfMTI4IH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0ICdzaG91bGQnO1xuXG5kZXNjcmliZSgnU3RhcmtuZXQgVXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdpc1ZhbGlkQWRkcmVzcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHZhbGlkIFN0YXJrbmV0IGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHNlY29uZCB2YWxpZCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoJ25vdF9hbl9hZGRyZXNzJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYWRkcmVzcyB3aXRob3V0IDB4IHByZWZpeCcsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcwNGExZjI5YjhiOGUzZDNjOWY2YzliN2E4ZDJlMWYwYzViNGEzZDJlMWYwYzViNGEzZDJlMWYwYzViNGEzZDJlJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRQdWJsaWNLZXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYSB2YWxpZCB1bmNvbXByZXNzZWQgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhbiBpbnZhbGlkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHVibGljS2V5KCdub3RfYV9rZXknKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZFB1YmxpY0tleSgnJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRQcml2YXRlS2V5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYWNjZXB0IGEgdmFsaWQgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5hY2NvdW50MS5zZWNyZXRLZXkpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleSgnbm90X2Ffa2V5Jykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIDEyOCBoZXggY2hhcnMgZnJvbSB1bmNvbXByZXNzZWQga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMuZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICByZXN1bHQubGVuZ3RoLnNob3VsZC5lcXVhbCgxMjgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGZvcm1hdCBzaWduYXR1cmUgYXMgNSBmZWx0MjUyIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSAnYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCc7XG4gICAgICBjb25zdCBzID0gJzEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMuZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZShyLCBzLCAwKTtcbiAgICAgIHJlc3VsdC5sZW5ndGguc2hvdWxkLmVxdWFsKDUpO1xuICAgICAgcmVzdWx0LmZvckVhY2goKHZhbCkgPT4gdmFsLnNob3VsZC5zdGFydFdpdGgoJzB4JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmVjaWQgMCBhbmQgMScsICgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSAnYWFhYSc7XG4gICAgICBjb25zdCBzID0gJ2JiYmInO1xuICAgICAgY29uc3Qgc2lnMCA9IHV0aWxzLmZvcm1hdEV0aEFjY291bnRTaWduYXR1cmUociwgcywgMCk7XG4gICAgICBjb25zdCBzaWcxID0gdXRpbHMuZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZShyLCBzLCAxKTtcbiAgICAgIHNpZzBbNF0uc2hvdWxkLmVxdWFsKCcweDAnKTtcbiAgICAgIHNpZzFbNF0uc2hvdWxkLmVxdWFsKCcweDEnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VuY29kZVNob3J0U3RyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZW5jb2RlIFwiaW52b2tlXCIgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgZW5jb2RlU2hvcnRTdHJpbmcoJ2ludm9rZScpLnNob3VsZC5lcXVhbCgweDY5NmU3NjZmNmI2NW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgXCJMMV9HQVNcIiBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBlbmNvZGVTaG9ydFN0cmluZygnTDFfR0FTJykuc2hvdWxkLmVxdWFsKDB4NGMzMTVmNDc0MTUzbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVuY29kZSBcIkwyX0dBU1wiIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGVuY29kZVNob3J0U3RyaW5nKCdMMl9HQVMnKS5zaG91bGQuZXF1YWwoMHg0YzMyNWY0NzQxNTNuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZW5jb2RlIFwiTDFfREFUQVwiIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGVuY29kZVNob3J0U3RyaW5nKCdMMV9EQVRBJykuc2hvdWxkLmVxdWFsKDB4NGMzMTVmNDQ0MTU0NDFuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHN0cmluZ3MgbG9uZ2VyIHRoYW4gMzEgY2hhcnMnLCAoKSA9PiB7XG4gICAgICAoKCkgPT4gZW5jb2RlU2hvcnRTdHJpbmcoJ2EnLnJlcGVhdCgzMikpKS5zaG91bGQudGhyb3coL3RvbyBsb25nLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTZWxlY3RvckZyb21OYW1lJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY29tcHV0ZSBzZWxlY3RvciBmb3IgXCJ0cmFuc2ZlclwiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21OYW1lKCd0cmFuc2ZlcicpO1xuICAgICAgKHR5cGVvZiBzZWxlY3Rvcikuc2hvdWxkLmVxdWFsKCdiaWdpbnQnKTtcbiAgICAgIChzZWxlY3RvciA+IDBuKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAoc2VsZWN0b3IgPCAxbiA8PCAyNTBuKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGRldGVybWluaXN0aWMnLCAoKSA9PiB7XG4gICAgICBnZXRTZWxlY3RvckZyb21OYW1lKCd0cmFuc2ZlcicpLnNob3VsZC5lcXVhbChnZXRTZWxlY3RvckZyb21OYW1lKCd0cmFuc2ZlcicpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvbXBpbGVFeGVjdXRlQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb21waWxlIGEgc2luZ2xlIHRyYW5zZmVyIGNhbGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxscyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0LFxuICAgICAgICAgIGVudHJ5cG9pbnQ6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgY2FsbGRhdGE6IFtcbiAgICAgICAgICAgIFNhbmRib3hUcmFuc2ZlckRhdGEucmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICAgICAgJzB4JyArIChCaWdJbnQoU2FuZGJveFRyYW5zZmVyRGF0YS5hbW91bnQpICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICcweCcgKyAoQmlnSW50KFNhbmRib3hUcmFuc2ZlckRhdGEuYW1vdW50KSA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBjb21waWxlZCA9IGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEoY2FsbHMpO1xuICAgICAgY29tcGlsZWRbMF0uc2hvdWxkLmVxdWFsKCcweDEnKTsgLy8gbnVtX2NhbGxzID0gMVxuICAgICAgY29tcGlsZWRbMV0uc2hvdWxkLmVxdWFsKFNhbmRib3hUcmFuc2ZlckRhdGEudG9rZW5Db250cmFjdCk7IC8vIHRvXG4gICAgICBjb21waWxlZC5sZW5ndGguc2hvdWxkLmVxdWFsKDEgKyAxICsgMSArIDEgKyAzKTsgLy8gbnVtX2NhbGxzICsgdG8gKyBzZWxlY3RvciArIGRhdGFfbGVuICsgMyBjYWxsZGF0YVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIGRldGVybWluaXN0aWMgaGFzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3QsXG4gICAgICAgICAgZW50cnlwb2ludDogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBjYWxsZGF0YTogW1xuICAgICAgICAgICAgU2FuZGJveFRyYW5zZmVyRGF0YS5yZWNlaXZlckFkZHJlc3MsXG4gICAgICAgICAgICAnMHgnICsgKEJpZ0ludChTYW5kYm94VHJhbnNmZXJEYXRhLmFtb3VudCkgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgJzB4JyArIChCaWdJbnQoU2FuZGJveFRyYW5zZmVyRGF0YS5hbW91bnQpID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvbXBpbGVkQ2FsbGRhdGEgPSBjb21waWxlRXhlY3V0ZUNhbGxkYXRhKGNhbGxzKTtcblxuICAgICAgY29uc3QgaGFzaDEgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBoYXNoMiA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG5cbiAgICAgIGhhc2gxLnNob3VsZC5lcXVhbChoYXNoMik7XG4gICAgICBoYXNoMS5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIGRpZmZlcmVudCBoYXNoZXMgZm9yIGRpZmZlcmVudCBub25jZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxscyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0LFxuICAgICAgICAgIGVudHJ5cG9pbnQ6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgY2FsbGRhdGE6IFtTYW5kYm94VHJhbnNmZXJEYXRhLnJlY2VpdmVyQWRkcmVzcywgJzB4ZGUwYjZiM2E3NjQwMDAwJywgJzB4MCddLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvbXBpbGVkQ2FsbGRhdGEgPSBjb21waWxlRXhlY3V0ZUNhbGxkYXRhKGNhbGxzKTtcblxuICAgICAgY29uc3QgaGFzaDEgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBoYXNoMiA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MScsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG5cbiAgICAgIGhhc2gxLnNob3VsZC5ub3QuZXF1YWwoaGFzaDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgaW5jbHVkZSBwcm9vZl9mYWN0cyB3aGVuIGFic2VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3QsXG4gICAgICAgICAgZW50cnlwb2ludDogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBjYWxsZGF0YTogW1NhbmRib3hUcmFuc2ZlckRhdGEucmVjZWl2ZXJBZGRyZXNzLCAnMHhkZTBiNmIzYTc2NDAwMDAnLCAnMHgwJ10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgY29tcGlsZWRDYWxsZGF0YSA9IGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEoY2FsbHMpO1xuXG4gICAgICBjb25zdCBoYXNoV2l0aG91dCA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhhc2hXaXRoRW1wdHkgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgICAgcHJvb2ZGYWN0czogW10sXG4gICAgICB9KTtcblxuICAgICAgLy8gRW1wdHkgcHJvb2ZGYWN0cyBzaG91bGQgYmUgb21pdHRlZCwgcHJvZHVjaW5nIHNhbWUgaGFzaCBhcyBhYnNlbnRcbiAgICAgIGhhc2hXaXRob3V0LnNob3VsZC5lcXVhbChoYXNoV2l0aEVtcHR5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2gga25vd24tZ29vZCBzYW5kYm94IHR4IGhhc2ggKDB4NzM5YTcyOC4uLiknLCAoKSA9PiB7XG4gICAgICBjb25zdCB0diA9IEtub3duR29vZEludm9rZVR4O1xuICAgICAgY29uc3QgYW1vdW50QmlnID0gQmlnSW50KHR2LmFtb3VudCk7XG4gICAgICBjb25zdCBjYWxscyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogdHYudG9rZW5Db250cmFjdCxcbiAgICAgICAgICBlbnRyeXBvaW50OiAndHJhbnNmZXInLFxuICAgICAgICAgIGNhbGxkYXRhOiBbXG4gICAgICAgICAgICB0di5yZWNlaXZlckFkZHJlc3MsXG4gICAgICAgICAgICAnMHgnICsgKGFtb3VudEJpZyAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgICAgICAgICAnMHgnICsgKGFtb3VudEJpZyA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBjb21waWxlZENhbGxkYXRhID0gY29tcGlsZUV4ZWN1dGVDYWxsZGF0YShjYWxscyk7XG5cbiAgICAgIGNvbnN0IGhhc2ggPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiB0di5zZW5kZXJBZGRyZXNzLFxuICAgICAgICBjb21waWxlZENhbGxkYXRhLFxuICAgICAgICBjaGFpbklkOiB0di5jaGFpbklkLFxuICAgICAgICBub25jZTogdHYubm9uY2UsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiB0di5yZXNvdXJjZUJvdW5kcyxcbiAgICAgICAgdGlwOiB0di50aXAsXG4gICAgICB9KTtcblxuICAgICAgaGFzaC5zaG91bGQuZXF1YWwodHYuZXhwZWN0ZWRUeEhhc2gpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2REFRNkI7QUFDN0IsaURBQTRDO0FBQzVDLHVGQUFvRjtBQUNwRixvREFBeUY7QUFDekYsdURBQWtIO0FBQ2xILG9EQUE0QjtBQUU1QixRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO0lBQzlCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxlQUFLLENBQUMsY0FBYyxDQUFDLG1CQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1lBQzlDLGVBQUssQ0FBQyxjQUFjLENBQUMsbUJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLGVBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5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LE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtZQUMxRSxNQUFNLElBQUksR0FBRztnQkFDWCxlQUFlLEVBQUUsdUJBQVc7Z0JBQzVCLFVBQVUsRUFBRSxpQ0FBcUI7Z0JBQ2pDLFFBQVEsRUFBRSxDQUFDLHFDQUF5QixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDO2FBQzVELENBQUM7WUFDRixJQUFBLHVCQUFlLEVBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFBLDBCQUFrQixFQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1dGlscywge1xuICBlbmNvZGVTaG9ydFN0cmluZyxcbiAgZ2V0U2VsZWN0b3JGcm9tTmFtZSxcbiAgY29tcGlsZUV4ZWN1dGVDYWxsZGF0YSxcbiAgY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoLFxuICBjYWxjdWxhdGVEZXBsb3lBY2NvdW50VHJhbnNhY3Rpb25IYXNoLFxuICBwYXJzZVVkY0RlcGxveUNhbGwsXG4gIGlzVWRjRGVwbG95Q2FsbCxcbn0gZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBBY2NvdW50cywgU2FuZGJveFRyYW5zZmVyRGF0YSwgS25vd25Hb29kSW52b2tlVHggfSBmcm9tICcuLi9yZXNvdXJjZXMvc3RhcmtuZXQnO1xuaW1wb3J0IHsgTUFTS18xMjgsIE9aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsIFVEQ19BRERSRVNTLCBVRENfREVQTE9ZX0VOVFJZUE9JTlQgfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmRlc2NyaWJlKCdTdGFya25ldCBVdGlscycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2lzVmFsaWRBZGRyZXNzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYWNjZXB0IGEgdmFsaWQgU3RhcmtuZXQgYWRkcmVzcycsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKEFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWNjZXB0IGEgc2Vjb25kIHZhbGlkIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhbiBpbnZhbGlkIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkQWRkcmVzcygnbm90X2FuX2FkZHJlc3MnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoJycpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhZGRyZXNzIHdpdGhvdXQgMHggcHJlZml4JywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoJzA0YTFmMjliOGI4ZTNkM2M5ZjZjOWI3YThkMmUxZjBjNWI0YTNkMmUxZjBjNWI0YTNkMmUxZjBjNWI0YTNkMmUnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgemVybyAoYWRkcmVzc2VzIG11c3QgYmUgbm9uLXplcm8pJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoJzB4MCcpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkUHVibGljS2V5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYWNjZXB0IGEgdmFsaWQgdW5jb21wcmVzc2VkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZFB1YmxpY0tleSgnbm90X2Ffa2V5Jykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoJycpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkUHJpdmF0ZUtleScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHZhbGlkIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoQWNjb3VudHMuYWNjb3VudDEuc2VjcmV0S2V5KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhbiBpbnZhbGlkIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZFByaXZhdGVLZXkoJ25vdF9hX2tleScpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleSgnJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFVuY29tcHJlc3NlZFB1YmxpY0tleScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiAxMjggaGV4IGNoYXJzIGZyb20gdW5jb21wcmVzc2VkIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLmdldFVuY29tcHJlc3NlZFB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpO1xuICAgICAgcmVzdWx0Lmxlbmd0aC5zaG91bGQuZXF1YWwoMTI4KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Zvcm1hdEV0aEFjY291bnRTaWduYXR1cmUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBmb3JtYXQgc2lnbmF0dXJlIGFzIDUgZmVsdDI1MiB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCByID0gJ2FiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTAnO1xuICAgICAgY29uc3QgcyA9ICcxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLmZvcm1hdEV0aEFjY291bnRTaWduYXR1cmUociwgcywgMCk7XG4gICAgICByZXN1bHQubGVuZ3RoLnNob3VsZC5lcXVhbCg1KTtcbiAgICAgIHJlc3VsdC5mb3JFYWNoKCh2YWwpID0+IHZhbC5zaG91bGQuc3RhcnRXaXRoKCcweCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHJlY2lkIDAgYW5kIDEnLCAoKSA9PiB7XG4gICAgICBjb25zdCByID0gJ2FhYWEnO1xuICAgICAgY29uc3QgcyA9ICdiYmJiJztcbiAgICAgIGNvbnN0IHNpZzAgPSB1dGlscy5mb3JtYXRFdGhBY2NvdW50U2lnbmF0dXJlKHIsIHMsIDApO1xuICAgICAgY29uc3Qgc2lnMSA9IHV0aWxzLmZvcm1hdEV0aEFjY291bnRTaWduYXR1cmUociwgcywgMSk7XG4gICAgICBzaWcwWzRdLnNob3VsZC5lcXVhbCgnMHgwJyk7XG4gICAgICBzaWcxWzRdLnNob3VsZC5lcXVhbCgnMHgxJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdlbmNvZGVTaG9ydFN0cmluZycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGVuY29kZSBcImludm9rZVwiIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGVuY29kZVNob3J0U3RyaW5nKCdpbnZva2UnKS5zaG91bGQuZXF1YWwoMHg2OTZlNzY2ZjZiNjVuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZW5jb2RlIFwiTDFfR0FTXCIgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgZW5jb2RlU2hvcnRTdHJpbmcoJ0wxX0dBUycpLnNob3VsZC5lcXVhbCgweDRjMzE1ZjQ3NDE1M24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgXCJMMl9HQVNcIiBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBlbmNvZGVTaG9ydFN0cmluZygnTDJfR0FTJykuc2hvdWxkLmVxdWFsKDB4NGMzMjVmNDc0MTUzbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVuY29kZSBcIkwxX0RBVEFcIiBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBlbmNvZGVTaG9ydFN0cmluZygnTDFfREFUQScpLnNob3VsZC5lcXVhbCgweDRjMzE1ZjQ0NDE1NDQxbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBzdHJpbmdzIGxvbmdlciB0aGFuIDMxIGNoYXJzJywgKCkgPT4ge1xuICAgICAgKCgpID0+IGVuY29kZVNob3J0U3RyaW5nKCdhJy5yZXBlYXQoMzIpKSkuc2hvdWxkLnRocm93KC90b28gbG9uZy8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2VsZWN0b3JGcm9tTmFtZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGNvbXB1dGUgc2VsZWN0b3IgZm9yIFwidHJhbnNmZXJcIicsICgpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3JGcm9tTmFtZSgndHJhbnNmZXInKTtcbiAgICAgICh0eXBlb2Ygc2VsZWN0b3IpLnNob3VsZC5lcXVhbCgnYmlnaW50Jyk7XG4gICAgICAoc2VsZWN0b3IgPiAwbikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgKHNlbGVjdG9yIDwgMW4gPDwgMjUwbikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBiZSBkZXRlcm1pbmlzdGljJywgKCkgPT4ge1xuICAgICAgZ2V0U2VsZWN0b3JGcm9tTmFtZSgndHJhbnNmZXInKS5zaG91bGQuZXF1YWwoZ2V0U2VsZWN0b3JGcm9tTmFtZSgndHJhbnNmZXInKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb21waWxlRXhlY3V0ZUNhbGxkYXRhJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY29tcGlsZSBhIHNpbmdsZSB0cmFuc2ZlciBjYWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEudG9rZW5Db250cmFjdCxcbiAgICAgICAgICBlbnRyeXBvaW50OiAndHJhbnNmZXInLFxuICAgICAgICAgIGNhbGxkYXRhOiBbXG4gICAgICAgICAgICBTYW5kYm94VHJhbnNmZXJEYXRhLnJlY2VpdmVyQWRkcmVzcyxcbiAgICAgICAgICAgICcweCcgKyAoQmlnSW50KFNhbmRib3hUcmFuc2ZlckRhdGEuYW1vdW50KSAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgICAgICAgICAnMHgnICsgKEJpZ0ludChTYW5kYm94VHJhbnNmZXJEYXRhLmFtb3VudCkgPj4gMTI4bikudG9TdHJpbmcoMTYpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgY29tcGlsZWQgPSBjb21waWxlRXhlY3V0ZUNhbGxkYXRhKGNhbGxzKTtcbiAgICAgIGNvbXBpbGVkWzBdLnNob3VsZC5lcXVhbCgnMHgxJyk7IC8vIG51bV9jYWxscyA9IDFcbiAgICAgIGNvbXBpbGVkWzFdLnNob3VsZC5lcXVhbChTYW5kYm94VHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3QpOyAvLyB0b1xuICAgICAgY29tcGlsZWQubGVuZ3RoLnNob3VsZC5lcXVhbCgxICsgMSArIDEgKyAxICsgMyk7IC8vIG51bV9jYWxscyArIHRvICsgc2VsZWN0b3IgKyBkYXRhX2xlbiArIDMgY2FsbGRhdGFcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHByb2R1Y2UgYSBkZXRlcm1pbmlzdGljIGhhc2gnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxscyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0LFxuICAgICAgICAgIGVudHJ5cG9pbnQ6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgY2FsbGRhdGE6IFtcbiAgICAgICAgICAgIFNhbmRib3hUcmFuc2ZlckRhdGEucmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICAgICAgJzB4JyArIChCaWdJbnQoU2FuZGJveFRyYW5zZmVyRGF0YS5hbW91bnQpICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICcweCcgKyAoQmlnSW50KFNhbmRib3hUcmFuc2ZlckRhdGEuYW1vdW50KSA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBjb21waWxlZENhbGxkYXRhID0gY29tcGlsZUV4ZWN1dGVDYWxsZGF0YShjYWxscyk7XG5cbiAgICAgIGNvbnN0IGhhc2gxID0gY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoKHtcbiAgICAgICAgc2VuZGVyQWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS5zZW5kZXJBZGRyZXNzLFxuICAgICAgICBjb21waWxlZENhbGxkYXRhLFxuICAgICAgICBjaGFpbklkOiBTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQsXG4gICAgICAgIG5vbmNlOiAnMHgwJyxcbiAgICAgICAgcmVzb3VyY2VCb3VuZHM6IFNhbmRib3hUcmFuc2ZlckRhdGEucmVzb3VyY2VCb3VuZHMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaGFzaDIgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgIH0pO1xuXG4gICAgICBoYXNoMS5zaG91bGQuZXF1YWwoaGFzaDIpO1xuICAgICAgaGFzaDEuc2hvdWxkLnN0YXJ0V2l0aCgnMHgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBkaWZmZXJlbnQgaGFzaGVzIGZvciBkaWZmZXJlbnQgbm9uY2VzJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEudG9rZW5Db250cmFjdCxcbiAgICAgICAgICBlbnRyeXBvaW50OiAndHJhbnNmZXInLFxuICAgICAgICAgIGNhbGxkYXRhOiBbU2FuZGJveFRyYW5zZmVyRGF0YS5yZWNlaXZlckFkZHJlc3MsICcweGRlMGI2YjNhNzY0MDAwMCcsICcweDAnXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBjb21waWxlZENhbGxkYXRhID0gY29tcGlsZUV4ZWN1dGVDYWxsZGF0YShjYWxscyk7XG5cbiAgICAgIGNvbnN0IGhhc2gxID0gY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoKHtcbiAgICAgICAgc2VuZGVyQWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS5zZW5kZXJBZGRyZXNzLFxuICAgICAgICBjb21waWxlZENhbGxkYXRhLFxuICAgICAgICBjaGFpbklkOiBTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQsXG4gICAgICAgIG5vbmNlOiAnMHgwJyxcbiAgICAgICAgcmVzb3VyY2VCb3VuZHM6IFNhbmRib3hUcmFuc2ZlckRhdGEucmVzb3VyY2VCb3VuZHMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgaGFzaDIgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDEnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgIH0pO1xuXG4gICAgICBoYXNoMS5zaG91bGQubm90LmVxdWFsKGhhc2gyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGluY2x1ZGUgcHJvb2ZfZmFjdHMgd2hlbiBhYnNlbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxscyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0LFxuICAgICAgICAgIGVudHJ5cG9pbnQ6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgY2FsbGRhdGE6IFtTYW5kYm94VHJhbnNmZXJEYXRhLnJlY2VpdmVyQWRkcmVzcywgJzB4ZGUwYjZiM2E3NjQwMDAwJywgJzB4MCddLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvbXBpbGVkQ2FsbGRhdGEgPSBjb21waWxlRXhlY3V0ZUNhbGxkYXRhKGNhbGxzKTtcblxuICAgICAgY29uc3QgaGFzaFdpdGhvdXQgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBoYXNoV2l0aEVtcHR5ID0gY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoKHtcbiAgICAgICAgc2VuZGVyQWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS5zZW5kZXJBZGRyZXNzLFxuICAgICAgICBjb21waWxlZENhbGxkYXRhLFxuICAgICAgICBjaGFpbklkOiBTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQsXG4gICAgICAgIG5vbmNlOiAnMHgwJyxcbiAgICAgICAgcmVzb3VyY2VCb3VuZHM6IFNhbmRib3hUcmFuc2ZlckRhdGEucmVzb3VyY2VCb3VuZHMsXG4gICAgICAgIHByb29mRmFjdHM6IFtdLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEVtcHR5IHByb29mRmFjdHMgc2hvdWxkIGJlIG9taXR0ZWQsIHByb2R1Y2luZyBzYW1lIGhhc2ggYXMgYWJzZW50XG4gICAgICBoYXNoV2l0aG91dC5zaG91bGQuZXF1YWwoaGFzaFdpdGhFbXB0eSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG1hdGNoIGtub3duLWdvb2Qgc2FuZGJveCB0eCBoYXNoICgweDczOWE3MjguLi4pJywgKCkgPT4ge1xuICAgICAgY29uc3QgdHYgPSBLbm93bkdvb2RJbnZva2VUeDtcbiAgICAgIGNvbnN0IGFtb3VudEJpZyA9IEJpZ0ludCh0di5hbW91bnQpO1xuICAgICAgY29uc3QgY2FsbHMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb250cmFjdEFkZHJlc3M6IHR2LnRva2VuQ29udHJhY3QsXG4gICAgICAgICAgZW50cnlwb2ludDogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBjYWxsZGF0YTogW1xuICAgICAgICAgICAgdHYucmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICAgICAgJzB4JyArIChhbW91bnRCaWcgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgJzB4JyArIChhbW91bnRCaWcgPj4gMTI4bikudG9TdHJpbmcoMTYpLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgY29tcGlsZWRDYWxsZGF0YSA9IGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEoY2FsbHMpO1xuXG4gICAgICBjb25zdCBoYXNoID0gY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoKHtcbiAgICAgICAgc2VuZGVyQWRkcmVzczogdHYuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogdHYuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6IHR2Lm5vbmNlLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogdHYucmVzb3VyY2VCb3VuZHMsXG4gICAgICAgIHRpcDogdHYudGlwLFxuICAgICAgfSk7XG5cbiAgICAgIGhhc2guc2hvdWxkLmVxdWFsKHR2LmV4cGVjdGVkVHhIYXNoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NhbGN1bGF0ZURlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2gnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBiZSBkZXRlcm1pbmlzdGljIGZvciB0aGUgc2FtZSBkZXBsb3kgaW5wdXRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZnVsbFB1YiA9IHV0aWxzLmdldFVuY29tcHJlc3NlZFB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpO1xuICAgICAgY29uc3QgeyBhZGRyZXNzLCBjb25zdHJ1Y3RvckNhbGxkYXRhLCBzYWx0IH0gPSB1dGlscy5jb21wdXRlU3RhcmtuZXRBZGRyZXNzKGZ1bGxQdWIpO1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBjb250cmFjdEFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIGNsYXNzSGFzaDogJzB4Mzk0MGJjMThhYmYxZGY2YmM1NDBjYWJhZGIxY2FkOTQ4NmM2ODAzYjk1ODAxZTU3YjYxNTNhZTIxYWJmZTA2JyxcbiAgICAgICAgY29uc3RydWN0b3JDYWxsZGF0YSxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzU2FsdDogc2FsdCxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgICB0aXA6ICcweDAnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGhhc2gxID0gY2FsY3VsYXRlRGVwbG95QWNjb3VudFRyYW5zYWN0aW9uSGFzaChwYXJhbXMpO1xuICAgICAgY29uc3QgaGFzaDIgPSBjYWxjdWxhdGVEZXBsb3lBY2NvdW50VHJhbnNhY3Rpb25IYXNoKHBhcmFtcyk7XG4gICAgICBoYXNoMS5zaG91bGQuZXF1YWwoaGFzaDIpO1xuICAgICAgaGFzaDEuc2hvdWxkLnN0YXJ0V2l0aCgnMHgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2ggaGFzaCBmcm9tIFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlciBidWlsZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3N0YXJrbmV0JykpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLmZyb21QdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KS5ub25jZSgnMHgwJykuY2hhaW5JZChTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQpO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBpbXBvcnQoJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nKS5UcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IGZ1bGxQdWIgPSB1dGlscy5nZXRVbmNvbXByZXNzZWRQdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KTtcbiAgICAgIGNvbnN0IHsgYWRkcmVzcywgY29uc3RydWN0b3JDYWxsZGF0YSwgc2FsdCB9ID0gdXRpbHMuY29tcHV0ZVN0YXJrbmV0QWRkcmVzcyhmdWxsUHViKTtcbiAgICAgIGNvbnN0IGhhc2ggPSBjYWxjdWxhdGVEZXBsb3lBY2NvdW50VHJhbnNhY3Rpb25IYXNoKHtcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICBjbGFzc0hhc2g6ICcweDM5NDBiYzE4YWJmMWRmNmJjNTQwY2FiYWRiMWNhZDk0ODZjNjgwM2I5NTgwMWU1N2I2MTUzYWUyMWFiZmUwNicsXG4gICAgICAgIGNvbnN0cnVjdG9yQ2FsbGRhdGEsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzc1NhbHQ6IHNhbHQsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgIH0pO1xuICAgICAgaGFzaC5zaG91bGQuZXF1YWwodHguc3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEudHJhbnNhY3Rpb25IYXNoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3BhcnNlVWRjRGVwbG95Q2FsbCAvIGlzVWRjRGVwbG95Q2FsbCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIGEgdmFsaWQgVURDIGRlcGxveSBjYWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZCA9IHV0aWxzLmNvbXB1dGVTdGFya25ldEFkZHJlc3ModXRpbHMuZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQyLnB1YmxpY0tleSkpO1xuICAgICAgY29uc3QgY2FsbCA9IHtcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBVRENfQUREUkVTUyxcbiAgICAgICAgZW50cnlwb2ludDogVURDX0RFUExPWV9FTlRSWVBPSU5ULFxuICAgICAgICBjYWxsZGF0YTogW09aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsIGRlcml2ZWQuc2FsdCwgJzB4MCcsICcweDQnLCAuLi5kZXJpdmVkLmNvbnN0cnVjdG9yQ2FsbGRhdGFdLFxuICAgICAgfTtcbiAgICAgIGlzVWRjRGVwbG95Q2FsbChjYWxsKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVVkY0RlcGxveUNhbGwoY2FsbCk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkKTtcbiAgICAgIHBhcnNlZCEudW5pcXVlLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBwYXJzZWQhLmNsYXNzSGFzaC5zaG91bGQuZXF1YWwoT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCk7XG4gICAgICBwYXJzZWQhLnNhbHQuc2hvdWxkLmVxdWFsKGRlcml2ZWQuc2FsdCk7XG4gICAgICBwYXJzZWQhLmNvbnN0cnVjdG9yQ2FsbGRhdGEuc2hvdWxkLmRlZXBFcXVhbChkZXJpdmVkLmNvbnN0cnVjdG9yQ2FsbGRhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYSB0cmFuc2ZlciBjYWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbCA9IHtcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3QsXG4gICAgICAgIGVudHJ5cG9pbnQ6ICd0cmFuc2ZlcicsXG4gICAgICAgIGNhbGxkYXRhOiBbQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcywgJzB4MScsICcweDAnXSxcbiAgICAgIH07XG4gICAgICBpc1VkY0RlcGxveUNhbGwoY2FsbCkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZVVkY0RlcGxveUNhbGwoY2FsbCksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIHVuaXF1ZT10cnVlIGJ1dCBsZWF2ZSB1bmlxdWUgZmxhZyBzZXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZXJpdmVkID0gdXRpbHMuY29tcHV0ZVN0YXJrbmV0QWRkcmVzcyh1dGlscy5nZXRVbmNvbXByZXNzZWRQdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDIucHVibGljS2V5KSk7XG4gICAgICBjb25zdCBjYWxsID0ge1xuICAgICAgICBjb250cmFjdEFkZHJlc3M6IFVEQ19BRERSRVNTLFxuICAgICAgICBlbnRyeXBvaW50OiBVRENfREVQTE9ZX0VOVFJZUE9JTlQsXG4gICAgICAgIGNhbGxkYXRhOiBbT1pfRVRIX0FDQ09VTlRfQ0xBU1NfSEFTSCwgZGVyaXZlZC5zYWx0LCAnMHgxJywgJzB4NCcsIC4uLmRlcml2ZWQuY29uc3RydWN0b3JDYWxsZGF0YV0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VVZGNEZXBsb3lDYWxsKGNhbGwpO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZCk7XG4gICAgICBwYXJzZWQhLnVuaXF1ZS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgd2hlbiBjdG9yX2xlbiBleGNlZWRzIHJlbWFpbmluZyBjYWxsZGF0YScsICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGwgPSB7XG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogVURDX0FERFJFU1MsXG4gICAgICAgIGVudHJ5cG9pbnQ6IFVEQ19ERVBMT1lfRU5UUllQT0lOVCxcbiAgICAgICAgY2FsbGRhdGE6IFtPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILCAnMHgxJywgJzB4MCcsICcweDk5J10sXG4gICAgICB9O1xuICAgICAgaXNVZGNEZXBsb3lDYWxsKGNhbGwpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIHNob3VsZC5lcXVhbChwYXJzZVVkY0RlcGxveUNhbGwoY2FsbCksIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=walletInitializationBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walletInitializationBuilder.d.ts","sourceRoot":"","sources":["../../../test/unit/walletInitializationBuilder.ts"],"names":[],"mappings":""}