@bitgo/sdk-coin-starknet 1.3.4 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -34,6 +34,8 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const utils_1 = __importStar(require("../../src/lib/utils"));
37
+ const statics_1 = require("@bitgo/statics");
38
+ const transactionBuilderFactory_1 = require("../../src/lib/transactionBuilderFactory");
37
39
  const starknet_1 = require("../resources/starknet");
38
40
  const constants_1 = require("../../src/lib/constants");
39
41
  require("should");
@@ -256,5 +258,43 @@ describe('Starknet Utils', () => {
256
258
  hash.should.equal(tv.expectedTxHash);
257
259
  });
258
260
  });
261
+ describe('calculateDeployAccountTransactionHash', () => {
262
+ it('should be deterministic for the same deploy inputs', () => {
263
+ const fullPub = utils_1.default.getUncompressedPublicKey(starknet_1.Accounts.account1.publicKey);
264
+ const { address, constructorCalldata, salt } = utils_1.default.computeStarknetAddress(fullPub);
265
+ const params = {
266
+ contractAddress: address,
267
+ classHash: '0x3940bc18abf1df6bc540cabadb1cad9486c6803b95801e57b6153ae21abfe06',
268
+ constructorCalldata,
269
+ contractAddressSalt: salt,
270
+ chainId: starknet_1.SandboxTransferData.chainId,
271
+ nonce: '0x0',
272
+ resourceBounds: starknet_1.SandboxTransferData.resourceBounds,
273
+ tip: '0x0',
274
+ };
275
+ const hash1 = (0, utils_1.calculateDeployAccountTransactionHash)(params);
276
+ const hash2 = (0, utils_1.calculateDeployAccountTransactionHash)(params);
277
+ hash1.should.equal(hash2);
278
+ hash1.should.startWith('0x');
279
+ });
280
+ it('should match hash from WalletInitializationBuilder build', async () => {
281
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('starknet'));
282
+ const builder = factory.getWalletInitializationBuilder();
283
+ builder.fromPublicKey(starknet_1.Accounts.account1.publicKey).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId);
284
+ const tx = (await builder.build());
285
+ const fullPub = utils_1.default.getUncompressedPublicKey(starknet_1.Accounts.account1.publicKey);
286
+ const { address, constructorCalldata, salt } = utils_1.default.computeStarknetAddress(fullPub);
287
+ const hash = (0, utils_1.calculateDeployAccountTransactionHash)({
288
+ contractAddress: address,
289
+ classHash: '0x3940bc18abf1df6bc540cabadb1cad9486c6803b95801e57b6153ae21abfe06',
290
+ constructorCalldata,
291
+ contractAddressSalt: salt,
292
+ chainId: starknet_1.SandboxTransferData.chainId,
293
+ nonce: '0x0',
294
+ resourceBounds: starknet_1.SandboxTransferData.resourceBounds,
295
+ });
296
+ hash.should.equal(tx.starknetTransactionData.transactionHash);
297
+ });
298
+ });
259
299
  });
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
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2REFNNkI7QUFDN0IsNENBQXVDO0FBQ3ZDLHVGQUFvRjtBQUNwRixvREFBeUY7QUFDekYsdURBQW1EO0FBQ25ELGtCQUFnQjtBQUVoQixRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO0lBQzlCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxlQUFLLENBQUMsY0FBYyxDQUFDLG1CQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1lBQzlDLGVBQUssQ0FBQyxjQUFjLENBQUMsbUJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsZUFBSyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLGVBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5Q0FB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LENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdXRpbHMsIHtcbiAgZW5jb2RlU2hvcnRTdHJpbmcsXG4gIGdldFNlbGVjdG9yRnJvbU5hbWUsXG4gIGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEsXG4gIGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCxcbiAgY2FsY3VsYXRlRGVwbG95QWNjb3VudFRyYW5zYWN0aW9uSGFzaCxcbn0gZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgQWNjb3VudHMsIFNhbmRib3hUcmFuc2ZlckRhdGEsIEtub3duR29vZEludm9rZVR4IH0gZnJvbSAnLi4vcmVzb3VyY2VzL3N0YXJrbmV0JztcbmltcG9ydCB7IE1BU0tfMTI4IH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0ICdzaG91bGQnO1xuXG5kZXNjcmliZSgnU3RhcmtuZXQgVXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdpc1ZhbGlkQWRkcmVzcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHZhbGlkIFN0YXJrbmV0IGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkQWRkcmVzcyhBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCBhIHNlY29uZCB2YWxpZCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoQWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcykuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZEFkZHJlc3MoJ25vdF9hbl9hZGRyZXNzJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYWRkcmVzcyB3aXRob3V0IDB4IHByZWZpeCcsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRBZGRyZXNzKCcwNGExZjI5YjhiOGUzZDNjOWY2YzliN2E4ZDJlMWYwYzViNGEzZDJlMWYwYzViNGEzZDJlMWYwYzViNGEzZDJlJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRQdWJsaWNLZXknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgYSB2YWxpZCB1bmNvbXByZXNzZWQgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBhbiBpbnZhbGlkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHVibGljS2V5KCdub3RfYV9rZXknKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgdXRpbHMuaXNWYWxpZFB1YmxpY0tleSgnJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRQcml2YXRlS2V5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYWNjZXB0IGEgdmFsaWQgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShBY2NvdW50cy5hY2NvdW50MS5zZWNyZXRLZXkpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICB1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleSgnbm90X2Ffa2V5Jykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIHV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIDEyOCBoZXggY2hhcnMgZnJvbSB1bmNvbXByZXNzZWQga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMuZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICByZXN1bHQubGVuZ3RoLnNob3VsZC5lcXVhbCgxMjgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGZvcm1hdCBzaWduYXR1cmUgYXMgNSBmZWx0MjUyIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSAnYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MCc7XG4gICAgICBjb25zdCBzID0gJzEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMuZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZShyLCBzLCAwKTtcbiAgICAgIHJlc3VsdC5sZW5ndGguc2hvdWxkLmVxdWFsKDUpO1xuICAgICAgcmVzdWx0LmZvckVhY2goKHZhbCkgPT4gdmFsLnNob3VsZC5zdGFydFdpdGgoJzB4JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgcmVjaWQgMCBhbmQgMScsICgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSAnYWFhYSc7XG4gICAgICBjb25zdCBzID0gJ2JiYmInO1xuICAgICAgY29uc3Qgc2lnMCA9IHV0aWxzLmZvcm1hdEV0aEFjY291bnRTaWduYXR1cmUociwgcywgMCk7XG4gICAgICBjb25zdCBzaWcxID0gdXRpbHMuZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZShyLCBzLCAxKTtcbiAgICAgIHNpZzBbNF0uc2hvdWxkLmVxdWFsKCcweDAnKTtcbiAgICAgIHNpZzFbNF0uc2hvdWxkLmVxdWFsKCcweDEnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VuY29kZVNob3J0U3RyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZW5jb2RlIFwiaW52b2tlXCIgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgICAgZW5jb2RlU2hvcnRTdHJpbmcoJ2ludm9rZScpLnNob3VsZC5lcXVhbCgweDY5NmU3NjZmNmI2NW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgXCJMMV9HQVNcIiBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgICBlbmNvZGVTaG9ydFN0cmluZygnTDFfR0FTJykuc2hvdWxkLmVxdWFsKDB4NGMzMTVmNDc0MTUzbik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVuY29kZSBcIkwyX0dBU1wiIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGVuY29kZVNob3J0U3RyaW5nKCdMMl9HQVMnKS5zaG91bGQuZXF1YWwoMHg0YzMyNWY0NzQxNTNuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZW5jb2RlIFwiTDFfREFUQVwiIGNvcnJlY3RseScsICgpID0+IHtcbiAgICAgIGVuY29kZVNob3J0U3RyaW5nKCdMMV9EQVRBJykuc2hvdWxkLmVxdWFsKDB4NGMzMTVmNDQ0MTU0NDFuKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHN0cmluZ3MgbG9uZ2VyIHRoYW4gMzEgY2hhcnMnLCAoKSA9PiB7XG4gICAgICAoKCkgPT4gZW5jb2RlU2hvcnRTdHJpbmcoJ2EnLnJlcGVhdCgzMikpKS5zaG91bGQudGhyb3coL3RvbyBsb25nLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRTZWxlY3RvckZyb21OYW1lJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY29tcHV0ZSBzZWxlY3RvciBmb3IgXCJ0cmFuc2ZlclwiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21OYW1lKCd0cmFuc2ZlcicpO1xuICAgICAgKHR5cGVvZiBzZWxlY3Rvcikuc2hvdWxkLmVxdWFsKCdiaWdpbnQnKTtcbiAgICAgIChzZWxlY3RvciA+IDBuKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICAoc2VsZWN0b3IgPCAxbiA8PCAyNTBuKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGRldGVybWluaXN0aWMnLCAoKSA9PiB7XG4gICAgICBnZXRTZWxlY3RvckZyb21OYW1lKCd0cmFuc2ZlcicpLnNob3VsZC5lcXVhbChnZXRTZWxlY3RvckZyb21OYW1lKCd0cmFuc2ZlcicpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvbXBpbGVFeGVjdXRlQ2FsbGRhdGEnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb21waWxlIGEgc2luZ2xlIHRyYW5zZmVyIGNhbGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxscyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0LFxuICAgICAgICAgIGVudHJ5cG9pbnQ6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgY2FsbGRhdGE6IFtcbiAgICAgICAgICAgIFNhbmRib3hUcmFuc2ZlckRhdGEucmVjZWl2ZXJBZGRyZXNzLFxuICAgICAgICAgICAgJzB4JyArIChCaWdJbnQoU2FuZGJveFRyYW5zZmVyRGF0YS5hbW91bnQpICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICAgICcweCcgKyAoQmlnSW50KFNhbmRib3hUcmFuc2ZlckRhdGEuYW1vdW50KSA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBjb21waWxlZCA9IGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEoY2FsbHMpO1xuICAgICAgY29tcGlsZWRbMF0uc2hvdWxkLmVxdWFsKCcweDEnKTsgLy8gbnVtX2NhbGxzID0gMVxuICAgICAgY29tcGlsZWRbMV0uc2hvdWxkLmVxdWFsKFNhbmRib3hUcmFuc2ZlckRhdGEudG9rZW5Db250cmFjdCk7IC8vIHRvXG4gICAgICBjb21waWxlZC5sZW5ndGguc2hvdWxkLmVxdWFsKDEgKyAxICsgMSArIDEgKyAzKTsgLy8gbnVtX2NhbGxzICsgdG8gKyBzZWxlY3RvciArIGRhdGFfbGVuICsgMyBjYWxsZGF0YVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIGRldGVybWluaXN0aWMgaGFzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3QsXG4gICAgICAgICAgZW50cnlwb2ludDogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBjYWxsZGF0YTogW1xuICAgICAgICAgICAgU2FuZGJveFRyYW5zZmVyRGF0YS5yZWNlaXZlckFkZHJlc3MsXG4gICAgICAgICAgICAnMHgnICsgKEJpZ0ludChTYW5kYm94VHJhbnNmZXJEYXRhLmFtb3VudCkgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgJzB4JyArIChCaWdJbnQoU2FuZGJveFRyYW5zZmVyRGF0YS5hbW91bnQpID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvbXBpbGVkQ2FsbGRhdGEgPSBjb21waWxlRXhlY3V0ZUNhbGxkYXRhKGNhbGxzKTtcblxuICAgICAgY29uc3QgaGFzaDEgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBoYXNoMiA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG5cbiAgICAgIGhhc2gxLnNob3VsZC5lcXVhbChoYXNoMik7XG4gICAgICBoYXNoMS5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIGRpZmZlcmVudCBoYXNoZXMgZm9yIGRpZmZlcmVudCBub25jZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxscyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogU2FuZGJveFRyYW5zZmVyRGF0YS50b2tlbkNvbnRyYWN0LFxuICAgICAgICAgIGVudHJ5cG9pbnQ6ICd0cmFuc2ZlcicsXG4gICAgICAgICAgY2FsbGRhdGE6IFtTYW5kYm94VHJhbnNmZXJEYXRhLnJlY2VpdmVyQWRkcmVzcywgJzB4ZGUwYjZiM2E3NjQwMDAwJywgJzB4MCddLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGNvbXBpbGVkQ2FsbGRhdGEgPSBjb21waWxlRXhlY3V0ZUNhbGxkYXRhKGNhbGxzKTtcblxuICAgICAgY29uc3QgaGFzaDEgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBoYXNoMiA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MScsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG5cbiAgICAgIGhhc2gxLnNob3VsZC5ub3QuZXF1YWwoaGFzaDIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgaW5jbHVkZSBwcm9vZl9mYWN0cyB3aGVuIGFic2VudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgY29udHJhY3RBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnRva2VuQ29udHJhY3QsXG4gICAgICAgICAgZW50cnlwb2ludDogJ3RyYW5zZmVyJyxcbiAgICAgICAgICBjYWxsZGF0YTogW1NhbmRib3hUcmFuc2ZlckRhdGEucmVjZWl2ZXJBZGRyZXNzLCAnMHhkZTBiNmIzYTc2NDAwMDAnLCAnMHgwJ10sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgY29tcGlsZWRDYWxsZGF0YSA9IGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEoY2FsbHMpO1xuXG4gICAgICBjb25zdCBoYXNoV2l0aG91dCA9IGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaCh7XG4gICAgICAgIHNlbmRlckFkZHJlc3M6IFNhbmRib3hUcmFuc2ZlckRhdGEuc2VuZGVyQWRkcmVzcyxcbiAgICAgICAgY29tcGlsZWRDYWxsZGF0YSxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGhhc2hXaXRoRW1wdHkgPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnNlbmRlckFkZHJlc3MsXG4gICAgICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgICAgIGNoYWluSWQ6IFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCxcbiAgICAgICAgbm9uY2U6ICcweDAnLFxuICAgICAgICByZXNvdXJjZUJvdW5kczogU2FuZGJveFRyYW5zZmVyRGF0YS5yZXNvdXJjZUJvdW5kcyxcbiAgICAgICAgcHJvb2ZGYWN0czogW10sXG4gICAgICB9KTtcblxuICAgICAgLy8gRW1wdHkgcHJvb2ZGYWN0cyBzaG91bGQgYmUgb21pdHRlZCwgcHJvZHVjaW5nIHNhbWUgaGFzaCBhcyBhYnNlbnRcbiAgICAgIGhhc2hXaXRob3V0LnNob3VsZC5lcXVhbChoYXNoV2l0aEVtcHR5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWF0Y2gga25vd24tZ29vZCBzYW5kYm94IHR4IGhhc2ggKDB4NzM5YTcyOC4uLiknLCAoKSA9PiB7XG4gICAgICBjb25zdCB0diA9IEtub3duR29vZEludm9rZVR4O1xuICAgICAgY29uc3QgYW1vdW50QmlnID0gQmlnSW50KHR2LmFtb3VudCk7XG4gICAgICBjb25zdCBjYWxscyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRyYWN0QWRkcmVzczogdHYudG9rZW5Db250cmFjdCxcbiAgICAgICAgICBlbnRyeXBvaW50OiAndHJhbnNmZXInLFxuICAgICAgICAgIGNhbGxkYXRhOiBbXG4gICAgICAgICAgICB0di5yZWNlaXZlckFkZHJlc3MsXG4gICAgICAgICAgICAnMHgnICsgKGFtb3VudEJpZyAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgICAgICAgICAnMHgnICsgKGFtb3VudEJpZyA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBjb21waWxlZENhbGxkYXRhID0gY29tcGlsZUV4ZWN1dGVDYWxsZGF0YShjYWxscyk7XG5cbiAgICAgIGNvbnN0IGhhc2ggPSBjYWxjdWxhdGVJbnZva2VUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBzZW5kZXJBZGRyZXNzOiB0di5zZW5kZXJBZGRyZXNzLFxuICAgICAgICBjb21waWxlZENhbGxkYXRhLFxuICAgICAgICBjaGFpbklkOiB0di5jaGFpbklkLFxuICAgICAgICBub25jZTogdHYubm9uY2UsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiB0di5yZXNvdXJjZUJvdW5kcyxcbiAgICAgICAgdGlwOiB0di50aXAsXG4gICAgICB9KTtcblxuICAgICAgaGFzaC5zaG91bGQuZXF1YWwodHYuZXhwZWN0ZWRUeEhhc2gpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2FsY3VsYXRlRGVwbG95QWNjb3VudFRyYW5zYWN0aW9uSGFzaCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJlIGRldGVybWluaXN0aWMgZm9yIHRoZSBzYW1lIGRlcGxveSBpbnB1dHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmdWxsUHViID0gdXRpbHMuZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSk7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvbnN0cnVjdG9yQ2FsbGRhdGEsIHNhbHQgfSA9IHV0aWxzLmNvbXB1dGVTdGFya25ldEFkZHJlc3MoZnVsbFB1Yik7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgY2xhc3NIYXNoOiAnMHgzOTQwYmMxOGFiZjFkZjZiYzU0MGNhYmFkYjFjYWQ5NDg2YzY4MDNiOTU4MDFlNTdiNjE1M2FlMjFhYmZlMDYnLFxuICAgICAgICBjb25zdHJ1Y3RvckNhbGxkYXRhLFxuICAgICAgICBjb250cmFjdEFkZHJlc3NTYWx0OiBzYWx0LFxuICAgICAgICBjaGFpbklkOiBTYW5kYm94VHJhbnNmZXJEYXRhLmNoYWluSWQsXG4gICAgICAgIG5vbmNlOiAnMHgwJyxcbiAgICAgICAgcmVzb3VyY2VCb3VuZHM6IFNhbmRib3hUcmFuc2ZlckRhdGEucmVzb3VyY2VCb3VuZHMsXG4gICAgICAgIHRpcDogJzB4MCcsXG4gICAgICB9O1xuICAgICAgY29uc3QgaGFzaDEgPSBjYWxjdWxhdGVEZXBsb3lBY2NvdW50VHJhbnNhY3Rpb25IYXNoKHBhcmFtcyk7XG4gICAgICBjb25zdCBoYXNoMiA9IGNhbGN1bGF0ZURlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2gocGFyYW1zKTtcbiAgICAgIGhhc2gxLnNob3VsZC5lcXVhbChoYXNoMik7XG4gICAgICBoYXNoMS5zaG91bGQuc3RhcnRXaXRoKCcweCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYXRjaCBoYXNoIGZyb20gV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyIGJ1aWxkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgnc3RhcmtuZXQnKSk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuZnJvbVB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpLm5vbmNlKCcweDAnKS5jaGFpbklkKFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIGltcG9ydCgnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbicpLlRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgZnVsbFB1YiA9IHV0aWxzLmdldFVuY29tcHJlc3NlZFB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpO1xuICAgICAgY29uc3QgeyBhZGRyZXNzLCBjb25zdHJ1Y3RvckNhbGxkYXRhLCBzYWx0IH0gPSB1dGlscy5jb21wdXRlU3RhcmtuZXRBZGRyZXNzKGZ1bGxQdWIpO1xuICAgICAgY29uc3QgaGFzaCA9IGNhbGN1bGF0ZURlcGxveUFjY291bnRUcmFuc2FjdGlvbkhhc2goe1xuICAgICAgICBjb250cmFjdEFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIGNsYXNzSGFzaDogJzB4Mzk0MGJjMThhYmYxZGY2YmM1NDBjYWJhZGIxY2FkOTQ4NmM2ODAzYjk1ODAxZTU3YjYxNTNhZTIxYWJmZTA2JyxcbiAgICAgICAgY29uc3RydWN0b3JDYWxsZGF0YSxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzU2FsdDogc2FsdCxcbiAgICAgICAgY2hhaW5JZDogU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkLFxuICAgICAgICBub25jZTogJzB4MCcsXG4gICAgICAgIHJlc291cmNlQm91bmRzOiBTYW5kYm94VHJhbnNmZXJEYXRhLnJlc291cmNlQm91bmRzLFxuICAgICAgfSk7XG4gICAgICBoYXNoLnNob3VsZC5lcXVhbCh0eC5zdGFya25ldFRyYW5zYWN0aW9uRGF0YS50cmFuc2FjdGlvbkhhc2gpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -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":""}
@@ -0,0 +1,123 @@
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/statics");
8
+ const transactionBuilderFactory_1 = require("../../src/lib/transactionBuilderFactory");
9
+ const iface_1 = require("../../src/lib/iface");
10
+ const starknet_1 = require("../resources/starknet");
11
+ const constants_1 = require("../../src/lib/constants");
12
+ describe('Starknet WalletInitializationBuilder', () => {
13
+ const coinConfig = statics_1.coins.get('starknet');
14
+ const chainId = starknet_1.SandboxTransferData.chainId;
15
+ describe('Build deploy account transaction', () => {
16
+ it('should build DEPLOY_ACCOUNT and produce a transactionHash', async () => {
17
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig);
18
+ const builder = factory.getWalletInitializationBuilder();
19
+ builder.fromPublicKey(starknet_1.Accounts.account1.publicKey).nonce('0x0').chainId(chainId);
20
+ const tx = (await builder.build());
21
+ const data = tx.starknetTransactionData;
22
+ data.transactionType.should.equal(iface_1.StarknetTransactionType.DEPLOY_ACCOUNT);
23
+ should_1.default.exist(data.transactionHash);
24
+ data.transactionHash.should.startWith('0x');
25
+ data.senderAddress.should.equal(starknet_1.Accounts.account1.address);
26
+ data.classHash.should.equal(constants_1.OZ_ETH_ACCOUNT_CLASS_HASH);
27
+ should_1.default.exist(data.constructorCalldata);
28
+ should_1.default.exist(data.contractAddressSalt);
29
+ data.calls.should.have.length(0);
30
+ });
31
+ it('should set signableHex from the Poseidon deploy hash', async () => {
32
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig);
33
+ const builder = factory.getWalletInitializationBuilder();
34
+ builder.fromPublicKey(starknet_1.Accounts.account1.publicKey).nonce('0x0').chainId(chainId);
35
+ const tx = (await builder.build());
36
+ tx.signableHex.should.equal(tx.starknetTransactionData.transactionHash);
37
+ tx.id.should.equal(tx.starknetTransactionData.transactionHash);
38
+ });
39
+ it('should produce different hashes for different accounts', async () => {
40
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig);
41
+ const builder1 = factory.getWalletInitializationBuilder();
42
+ builder1.fromPublicKey(starknet_1.Accounts.account1.publicKey).nonce('0x0').chainId(chainId);
43
+ const tx1 = (await builder1.build());
44
+ const builder2 = factory.getWalletInitializationBuilder();
45
+ builder2.fromPublicKey(starknet_1.Accounts.account2.publicKey).nonce('0x0').chainId(chainId);
46
+ const tx2 = (await builder2.build());
47
+ tx1.signableHex.should.not.equal(tx2.signableHex);
48
+ });
49
+ it('should round-trip through toInternalHex and factory.from', async () => {
50
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig);
51
+ const builder = factory.getWalletInitializationBuilder();
52
+ builder.fromPublicKey(starknet_1.Accounts.account1.publicKey).nonce('0x0').chainId(chainId);
53
+ const tx = (await builder.build());
54
+ const internalHex = tx.toInternalHex();
55
+ const factory2 = new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig);
56
+ const builder2 = await factory2.from(internalHex);
57
+ const tx2 = (await builder2.build());
58
+ tx2.signableHex.should.equal(tx.signableHex);
59
+ tx2.starknetTransactionData.transactionType.should.equal(iface_1.StarknetTransactionType.DEPLOY_ACCOUNT);
60
+ });
61
+ it('toBroadcastFormat should return DEPLOY_ACCOUNT RPC JSON', async () => {
62
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig);
63
+ const builder = factory.getWalletInitializationBuilder();
64
+ builder.fromPublicKey(starknet_1.Accounts.account1.publicKey).nonce('0x0').chainId(chainId);
65
+ const tx = (await builder.build());
66
+ const broadcast = tx.toBroadcastFormat();
67
+ const parsed = JSON.parse(broadcast);
68
+ parsed.type.should.equal('DEPLOY_ACCOUNT');
69
+ parsed.version.should.equal('0x3');
70
+ parsed.sender_address.should.equal(starknet_1.Accounts.account1.address);
71
+ parsed.class_hash.should.equal(constants_1.OZ_ETH_ACCOUNT_CLASS_HASH);
72
+ parsed.constructor_calldata.should.be.Array().and.not.empty();
73
+ parsed.contract_address_salt.should.startWith('0x');
74
+ parsed.nonce.should.equal('0x0');
75
+ parsed.resource_bounds.should.have.property('l2_gas');
76
+ parsed.nonce_data_availability_mode.should.equal('L1');
77
+ parsed.fee_data_availability_mode.should.equal('L1');
78
+ parsed.should.not.have.property('calldata');
79
+ parsed.should.not.have.property('account_deployment_data');
80
+ });
81
+ });
82
+ describe('Validation', () => {
83
+ it('should reject build without public key or deploy fields', async () => {
84
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig);
85
+ const builder = factory.getWalletInitializationBuilder();
86
+ builder.sender(starknet_1.Accounts.account1.address).nonce('0x0').chainId(chainId);
87
+ await builder.build().should.be.rejectedWith(/public key|constructor calldata/i);
88
+ });
89
+ it('should reject mismatched address and public key', () => {
90
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coinConfig);
91
+ const builder = factory.getWalletInitializationBuilder();
92
+ (() => builder
93
+ .fromPublicKey(starknet_1.Accounts.account1.publicKey)
94
+ .sender(starknet_1.Accounts.account2.address, starknet_1.Accounts.account1.publicKey)).should.throw(/[Aa]ddress/);
95
+ });
96
+ });
97
+ });
98
+ describe('Starknet deploy account RPC wire format (live Sepolia)', () => {
99
+ it('should reach node validation (not param parse error) for unsigned deploy', async function () {
100
+ this.timeout(15000);
101
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get('starknet'));
102
+ const builder = factory.getWalletInitializationBuilder();
103
+ builder.fromPublicKey(starknet_1.Accounts.account1.publicKey).nonce('0x0').chainId(starknet_1.SandboxTransferData.chainId);
104
+ const tx = (await builder.build());
105
+ const body = {
106
+ jsonrpc: '2.0',
107
+ method: 'starknet_addDeployAccountTransaction',
108
+ params: [JSON.parse(tx.toBroadcastFormat())],
109
+ id: 1,
110
+ };
111
+ const response = await fetch('https://api.cartridge.gg/x/starknet/sepolia', {
112
+ method: 'POST',
113
+ headers: { 'Content-Type': 'application/json' },
114
+ body: JSON.stringify(body),
115
+ });
116
+ const json = (await response.json());
117
+ should_1.default.exist(json.error);
118
+ const msg = json.error?.message || '';
119
+ msg.should.not.match(/parsing params|EOF/i);
120
+ msg.should.match(/signature|Validate|nonce|fee|resource|Invalid params/i);
121
+ });
122
+ });
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3dhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG9EQUE0QjtBQUM1Qiw0Q0FBdUM7QUFDdkMsdUZBQW9GO0FBRXBGLCtDQUE4RDtBQUM5RCxvREFBc0U7QUFDdEUsdURBQW9FO0FBRXBFLFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7SUFDcEQsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyw4QkFBbUIsQ0FBQyxPQUFPLENBQUM7SUFFNUMsUUFBUSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxFQUFFLENBQUMsMkRBQTJELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDekUsTUFBTSxPQUFPLEdBQUcsSUFBSSxxREFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsOEJBQThCLEVBQUUsQ0FBQztZQUV6RCxPQUFPLENBQUMsYUFBYSxDQUFDLG1CQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFakYsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBZ0IsQ0FBQztZQUNsRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUM7WUFFeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLCtCQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzFFLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZ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Q0FBQyxDQUFDO0lBQzVFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5pbXBvcnQgeyBBY2NvdW50cywgU2FuZGJveFRyYW5zZmVyRGF0YSB9IGZyb20gJy4uL3Jlc291cmNlcy9zdGFya25ldCc7XG5pbXBvcnQgeyBPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNIIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9jb25zdGFudHMnO1xuXG5kZXNjcmliZSgnU3RhcmtuZXQgV2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCdzdGFya25ldCcpO1xuICBjb25zdCBjaGFpbklkID0gU2FuZGJveFRyYW5zZmVyRGF0YS5jaGFpbklkO1xuXG4gIGRlc2NyaWJlKCdCdWlsZCBkZXBsb3kgYWNjb3VudCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIERFUExPWV9BQ0NPVU5UIGFuZCBwcm9kdWNlIGEgdHJhbnNhY3Rpb25IYXNoJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG5cbiAgICAgIGJ1aWxkZXIuZnJvbVB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpLm5vbmNlKCcweDAnKS5jaGFpbklkKGNoYWluSWQpO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgZGF0YSA9IHR4LnN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhO1xuXG4gICAgICBkYXRhLnRyYW5zYWN0aW9uVHlwZS5zaG91bGQuZXF1YWwoU3RhcmtuZXRUcmFuc2FjdGlvblR5cGUuREVQTE9ZX0FDQ09VTlQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGRhdGEudHJhbnNhY3Rpb25IYXNoKTtcbiAgICAgIChkYXRhLnRyYW5zYWN0aW9uSGFzaCBhcyBzdHJpbmcpLnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG4gICAgICBkYXRhLnNlbmRlckFkZHJlc3Muc2hvdWxkLmVxdWFsKEFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgKGRhdGEuY2xhc3NIYXNoIGFzIHN0cmluZykuc2hvdWxkLmVxdWFsKE9aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gpO1xuICAgICAgc2hvdWxkLmV4aXN0KGRhdGEuY29uc3RydWN0b3JDYWxsZGF0YSk7XG4gICAgICBzaG91bGQuZXhpc3QoZGF0YS5jb250cmFjdEFkZHJlc3NTYWx0KTtcbiAgICAgIGRhdGEuY2FsbHMuc2hvdWxkLmhhdmUubGVuZ3RoKDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZXQgc2lnbmFibGVIZXggZnJvbSB0aGUgUG9zZWlkb24gZGVwbG95IGhhc2gnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZyk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcblxuICAgICAgYnVpbGRlci5mcm9tUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSkubm9uY2UoJzB4MCcpLmNoYWluSWQoY2hhaW5JZCk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICB0eC5zaWduYWJsZUhleC5zaG91bGQuZXF1YWwodHguc3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEudHJhbnNhY3Rpb25IYXNoKTtcbiAgICAgIHR4LmlkLnNob3VsZC5lcXVhbCh0eC5zdGFya25ldFRyYW5zYWN0aW9uRGF0YS50cmFuc2FjdGlvbkhhc2gpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIGRpZmZlcmVudCBoYXNoZXMgZm9yIGRpZmZlcmVudCBhY2NvdW50cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcblxuICAgICAgY29uc3QgYnVpbGRlcjEgPSBmYWN0b3J5LmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgYnVpbGRlcjEuZnJvbVB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpLm5vbmNlKCcweDAnKS5jaGFpbklkKGNoYWluSWQpO1xuICAgICAgY29uc3QgdHgxID0gKGF3YWl0IGJ1aWxkZXIxLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICBjb25zdCBidWlsZGVyMiA9IGZhY3RvcnkuZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICBidWlsZGVyMi5mcm9tUHVibGljS2V5KEFjY291bnRzLmFjY291bnQyLnB1YmxpY0tleSkubm9uY2UoJzB4MCcpLmNoYWluSWQoY2hhaW5JZCk7XG4gICAgICBjb25zdCB0eDIgPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgIHR4MS5zaWduYWJsZUhleC5zaG91bGQubm90LmVxdWFsKHR4Mi5zaWduYWJsZUhleCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJvdW5kLXRyaXAgdGhyb3VnaCB0b0ludGVybmFsSGV4IGFuZCBmYWN0b3J5LmZyb20nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZyk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcblxuICAgICAgYnVpbGRlci5mcm9tUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSkubm9uY2UoJzB4MCcpLmNoYWluSWQoY2hhaW5JZCk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBpbnRlcm5hbEhleCA9IHR4LnRvSW50ZXJuYWxIZXgoKTtcblxuICAgICAgY29uc3QgZmFjdG9yeTIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIyID0gYXdhaXQgZmFjdG9yeTIuZnJvbShpbnRlcm5hbEhleCk7XG4gICAgICBjb25zdCB0eDIgPSAoYXdhaXQgYnVpbGRlcjIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgIHR4Mi5zaWduYWJsZUhleC5zaG91bGQuZXF1YWwodHguc2lnbmFibGVIZXgpO1xuICAgICAgdHgyLnN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhLnRyYW5zYWN0aW9uVHlwZS5zaG91bGQuZXF1YWwoU3RhcmtuZXRUcmFuc2FjdGlvblR5cGUuREVQTE9ZX0FDQ09VTlQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RvQnJvYWRjYXN0Rm9ybWF0IHNob3VsZCByZXR1cm4gREVQTE9ZX0FDQ09VTlQgUlBDIEpTT04nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZyk7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRXYWxsZXRJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcblxuICAgICAgYnVpbGRlci5mcm9tUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSkubm9uY2UoJzB4MCcpLmNoYWluSWQoY2hhaW5JZCk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBicm9hZGNhc3QgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShicm9hZGNhc3QpO1xuXG4gICAgICBwYXJzZWQudHlwZS5zaG91bGQuZXF1YWwoJ0RFUExPWV9BQ0NPVU5UJyk7XG4gICAgICBwYXJzZWQudmVyc2lvbi5zaG91bGQuZXF1YWwoJzB4MycpO1xuICAgICAgcGFyc2VkLnNlbmRlcl9hZGRyZXNzLnNob3VsZC5lcXVhbChBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIHBhcnNlZC5jbGFzc19oYXNoLnNob3VsZC5lcXVhbChPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNIKTtcbiAgICAgIHBhcnNlZC5jb25zdHJ1Y3Rvcl9jYWxsZGF0YS5zaG91bGQuYmUuQXJyYXkoKS5hbmQubm90LmVtcHR5KCk7XG4gICAgICBwYXJzZWQuY29udHJhY3RfYWRkcmVzc19zYWx0LnNob3VsZC5zdGFydFdpdGgoJzB4Jyk7XG4gICAgICBwYXJzZWQubm9uY2Uuc2hvdWxkLmVxdWFsKCcweDAnKTtcbiAgICAgIHBhcnNlZC5yZXNvdXJjZV9ib3VuZHMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2wyX2dhcycpO1xuICAgICAgcGFyc2VkLm5vbmNlX2RhdGFfYXZhaWxhYmlsaXR5X21vZGUuc2hvdWxkLmVxdWFsKCdMMScpO1xuICAgICAgcGFyc2VkLmZlZV9kYXRhX2F2YWlsYWJpbGl0eV9tb2RlLnNob3VsZC5lcXVhbCgnTDEnKTtcbiAgICAgIHBhcnNlZC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ2NhbGxkYXRhJyk7XG4gICAgICBwYXJzZWQuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdhY2NvdW50X2RlcGxveW1lbnRfZGF0YScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlamVjdCBidWlsZCB3aXRob3V0IHB1YmxpYyBrZXkgb3IgZGVwbG95IGZpZWxkcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5zZW5kZXIoQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcykubm9uY2UoJzB4MCcpLmNoYWluSWQoY2hhaW5JZCk7XG5cbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9wdWJsaWMga2V5fGNvbnN0cnVjdG9yIGNhbGxkYXRhL2kpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgbWlzbWF0Y2hlZCBhZGRyZXNzIGFuZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICAoKCkgPT5cbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5mcm9tUHVibGljS2V5KEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSlcbiAgICAgICAgICAuc2VuZGVyKEFjY291bnRzLmFjY291bnQyLmFkZHJlc3MsIEFjY291bnRzLmFjY291bnQxLnB1YmxpY0tleSkpLnNob3VsZC50aHJvdygvW0FhXWRkcmVzcy8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnU3RhcmtuZXQgZGVwbG95IGFjY291bnQgUlBDIHdpcmUgZm9ybWF0IChsaXZlIFNlcG9saWEpJywgKCkgPT4ge1xuICBpdCgnc2hvdWxkIHJlYWNoIG5vZGUgdmFsaWRhdGlvbiAobm90IHBhcmFtIHBhcnNlIGVycm9yKSBmb3IgdW5zaWduZWQgZGVwbG95JywgYXN5bmMgZnVuY3Rpb24gKHRoaXM6IE1vY2hhLkNvbnRleHQpIHtcbiAgICB0aGlzLnRpbWVvdXQoMTUwMDApO1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3N0YXJrbmV0JykpO1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldFdhbGxldEluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgIGJ1aWxkZXIuZnJvbVB1YmxpY0tleShBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpLm5vbmNlKCcweDAnKS5jaGFpbklkKFNhbmRib3hUcmFuc2ZlckRhdGEuY2hhaW5JZCk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAganNvbnJwYzogJzIuMCcsXG4gICAgICBtZXRob2Q6ICdzdGFya25ldF9hZGREZXBsb3lBY2NvdW50VHJhbnNhY3Rpb24nLFxuICAgICAgcGFyYW1zOiBbSlNPTi5wYXJzZSh0eC50b0Jyb2FkY2FzdEZvcm1hdCgpKV0sXG4gICAgICBpZDogMSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuY2FydHJpZGdlLmdnL3gvc3RhcmtuZXQvc2Vwb2xpYScsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICB9KTtcbiAgICBjb25zdCBqc29uID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgeyBlcnJvcj86IHsgbWVzc2FnZT86IHN0cmluZyB9IH07XG5cbiAgICBzaG91bGQuZXhpc3QoanNvbi5lcnJvcik7XG4gICAgY29uc3QgbXNnID0ganNvbi5lcnJvcj8ubWVzc2FnZSB8fCAnJztcbiAgICBtc2cuc2hvdWxkLm5vdC5tYXRjaCgvcGFyc2luZyBwYXJhbXN8RU9GL2kpO1xuICAgIG1zZy5zaG91bGQubWF0Y2goL3NpZ25hdHVyZXxWYWxpZGF0ZXxub25jZXxmZWV8cmVzb3VyY2V8SW52YWxpZCBwYXJhbXMvaSk7XG4gIH0pO1xufSk7XG4iXX0=