UNPKG

@coolwallet/btc

Version:
57 lines (46 loc) 23.8 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports.tweak = tweak; var _cryptoUtil = require("./cryptoUtil"); var ecc = _interopRequireWildcard(require("@bitcoin-js/tiny-secp256k1-asmjs")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } var TAGS = ['BIP0340/challenge', 'BIP0340/aux', 'BIP0340/nonce', 'TapLeaf', 'TapBranch', 'TapSighash', 'TapTweak', 'KeyAgg list', 'KeyAgg coefficient']; function taggedHash(prefix, data) { var TAGGED_HASH_PREFIXES = { 'BIP0340/challenge': Buffer.from([123, 181, 45, 122, 159, 239, 88, 50, 62, 177, 191, 122, 64, 125, 179, 130, 210, 243, 242, 216, 27, 177, 34, 79, 73, 254, 81, 143, 109, 72, 211, 124, 123, 181, 45, 122, 159, 239, 88, 50, 62, 177, 191, 122, 64, 125, 179, 130, 210, 243, 242, 216, 27, 177, 34, 79, 73, 254, 81, 143, 109, 72, 211, 124]), 'BIP0340/aux': Buffer.from([241, 239, 78, 94, 192, 99, 202, 218, 109, 148, 202, 250, 157, 152, 126, 160, 105, 38, 88, 57, 236, 193, 31, 151, 45, 119, 165, 46, 216, 193, 204, 144, 241, 239, 78, 94, 192, 99, 202, 218, 109, 148, 202, 250, 157, 152, 126, 160, 105, 38, 88, 57, 236, 193, 31, 151, 45, 119, 165, 46, 216, 193, 204, 144]), 'BIP0340/nonce': Buffer.from([7, 73, 119, 52, 167, 155, 203, 53, 91, 155, 140, 125, 3, 79, 18, 28, 244, 52, 215, 62, 247, 45, 218, 25, 135, 0, 97, 251, 82, 191, 235, 47, 7, 73, 119, 52, 167, 155, 203, 53, 91, 155, 140, 125, 3, 79, 18, 28, 244, 52, 215, 62, 247, 45, 218, 25, 135, 0, 97, 251, 82, 191, 235, 47]), TapLeaf: Buffer.from([174, 234, 143, 220, 66, 8, 152, 49, 5, 115, 75, 88, 8, 29, 30, 38, 56, 211, 95, 28, 181, 64, 8, 212, 211, 87, 202, 3, 190, 120, 233, 238, 174, 234, 143, 220, 66, 8, 152, 49, 5, 115, 75, 88, 8, 29, 30, 38, 56, 211, 95, 28, 181, 64, 8, 212, 211, 87, 202, 3, 190, 120, 233, 238]), TapBranch: Buffer.from([25, 65, 161, 242, 229, 110, 185, 95, 162, 169, 241, 148, 190, 92, 1, 247, 33, 111, 51, 237, 130, 176, 145, 70, 52, 144, 208, 91, 245, 22, 160, 21, 25, 65, 161, 242, 229, 110, 185, 95, 162, 169, 241, 148, 190, 92, 1, 247, 33, 111, 51, 237, 130, 176, 145, 70, 52, 144, 208, 91, 245, 22, 160, 21]), TapSighash: Buffer.from([244, 10, 72, 223, 75, 42, 112, 200, 180, 146, 75, 242, 101, 70, 97, 237, 61, 149, 253, 102, 163, 19, 235, 135, 35, 117, 151, 198, 40, 228, 160, 49, 244, 10, 72, 223, 75, 42, 112, 200, 180, 146, 75, 242, 101, 70, 97, 237, 61, 149, 253, 102, 163, 19, 235, 135, 35, 117, 151, 198, 40, 228, 160, 49]), TapTweak: Buffer.from([232, 15, 225, 99, 156, 156, 160, 80, 227, 175, 27, 57, 193, 67, 198, 62, 66, 156, 188, 235, 21, 217, 64, 251, 181, 197, 161, 244, 175, 87, 197, 233, 232, 15, 225, 99, 156, 156, 160, 80, 227, 175, 27, 57, 193, 67, 198, 62, 66, 156, 188, 235, 21, 217, 64, 251, 181, 197, 161, 244, 175, 87, 197, 233]), 'KeyAgg list': Buffer.from([72, 28, 151, 28, 60, 11, 70, 215, 240, 178, 117, 174, 89, 141, 78, 44, 126, 215, 49, 156, 89, 74, 92, 110, 199, 158, 160, 212, 153, 2, 148, 240, 72, 28, 151, 28, 60, 11, 70, 215, 240, 178, 117, 174, 89, 141, 78, 44, 126, 215, 49, 156, 89, 74, 92, 110, 199, 158, 160, 212, 153, 2, 148, 240]), 'KeyAgg coefficient': Buffer.from([191, 201, 4, 3, 77, 28, 136, 232, 200, 14, 34, 229, 61, 36, 86, 109, 100, 130, 78, 214, 66, 114, 129, 192, 145, 0, 249, 77, 205, 82, 201, 129, 191, 201, 4, 3, 77, 28, 136, 232, 200, 14, 34, 229, 61, 36, 86, 109, 100, 130, 78, 214, 66, 114, 129, 192, 145, 0, 249, 77, 205, 82, 201, 129]) }; return (0, _cryptoUtil.sha256)(Buffer.concat([TAGGED_HASH_PREFIXES[prefix], data])); } function tapTweakHash(pubKey, h) { return taggedHash('TapTweak', Buffer.concat(h ? [pubKey, h] : [pubKey])); } function tweakKey(pubKey, h) { // if (!Buffer.isBuffer(pubKey)) return null; // react-native doesn't support is function if (pubKey.length !== 32) return null; if (h && h.length !== 32) return null; var tweakHash = tapTweakHash(pubKey, h); var res = ecc.xOnlyPointAddTweak(pubKey, tweakHash); if (!res || res.xOnlyPubkey === null) return null; return { parity: res.parity, x: Buffer.from(res.xOnlyPubkey) }; } function tweak(publicKey) { var childNodeXOnlyPubkey = Buffer.from(publicKey, 'hex').subarray(1, 33); var tweakPublicKey = tweakKey(childNodeXOnlyPubkey, null); return tweakPublicKey === null || tweakPublicKey === void 0 ? void 0 : tweakPublicKey.x.toString('hex'); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90d2Vha1V0aWwudHMiXSwibmFtZXMiOlsiVEFHUyIsInRhZ2dlZEhhc2giLCJwcmVmaXgiLCJkYXRhIiwiVEFHR0VEX0hBU0hfUFJFRklYRVMiLCJCdWZmZXIiLCJmcm9tIiwiVGFwTGVhZiIsIlRhcEJyYW5jaCIsIlRhcFNpZ2hhc2giLCJUYXBUd2VhayIsImNvbmNhdCIsInRhcFR3ZWFrSGFzaCIsInB1YktleSIsImgiLCJ0d2Vha0tleSIsImxlbmd0aCIsInR3ZWFrSGFzaCIsInJlcyIsImVjYyIsInhPbmx5UG9pbnRBZGRUd2VhayIsInhPbmx5UHVia2V5IiwicGFyaXR5IiwieCIsInR3ZWFrIiwicHVibGljS2V5IiwiY2hpbGROb2RlWE9ubHlQdWJrZXkiLCJzdWJhcnJheSIsInR3ZWFrUHVibGljS2V5IiwidG9TdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxJQUFJLEdBQUcsQ0FDWCxtQkFEVyxFQUVYLGFBRlcsRUFHWCxlQUhXLEVBSVgsU0FKVyxFQUtYLFdBTFcsRUFNWCxZQU5XLEVBT1gsVUFQVyxFQVFYLGFBUlcsRUFTWCxvQkFUVyxDQUFiOztBQWdCQSxTQUFTQyxVQUFULENBQW9CQyxNQUFwQixFQUE4Q0MsSUFBOUMsRUFBNEQ7QUFDMUQsTUFBTUMsb0JBQXdDLEdBQUc7QUFDL0MseUJBQXFCQyxNQUFNLENBQUNDLElBQVAsQ0FBWSxDQUMvQixHQUQrQixFQUMxQixHQUQwQixFQUNyQixFQURxQixFQUNqQixHQURpQixFQUNaLEdBRFksRUFDUCxHQURPLEVBQ0YsRUFERSxFQUNFLEVBREYsRUFDTSxFQUROLEVBQ1UsR0FEVixFQUNlLEdBRGYsRUFDb0IsR0FEcEIsRUFDeUIsRUFEekIsRUFDNkIsR0FEN0IsRUFDa0MsR0FEbEMsRUFDdUMsR0FEdkMsRUFDNEMsR0FENUMsRUFDaUQsR0FEakQsRUFDc0QsR0FEdEQsRUFDMkQsR0FEM0QsRUFDZ0UsRUFEaEUs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QVA7QUFDMUIsTUFBTUMsU0FBUyxHQUFHTCxZQUFZLENBQUNDLE1BQUQsRUFBU0MsQ0FBVCxDQUE5QjtBQUNBLE1BQU1JLEdBQUcsR0FBR0MsR0FBRyxDQUFDQyxrQkFBSixDQUF1QlAsTUFBdkIsRUFBK0JJLFNBQS9CLENBQVo7QUFDQSxNQUFJLENBQUNDLEdBQUQsSUFBUUEsR0FBRyxDQUFDRyxXQUFKLEtBQW9CLElBQWhDLEVBQXNDLE9BQU8sSUFBUDtBQUN0QyxTQUFPO0FBQ0xDLElBQUFBLE1BQU0sRUFBRUosR0FBRyxDQUFDSSxNQURQO0FBRUxDLElBQUFBLENBQUMsRUFBRWxCLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZWSxHQUFHLENBQUNHLFdBQWhCO0FBRkUsR0FBUDtBQUlEOztBQUVNLFNBQVNHLEtBQVQsQ0FBZUMsU0FBZixFQUEwQztBQUMvQyxNQUFNQyxvQkFBb0IsR0FBR3JCLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZbUIsU0FBWixFQUF1QixLQUF2QixFQUE4QkUsUUFBOUIsQ0FBdUMsQ0FBdkMsRUFBMEMsRUFBMUMsQ0FBN0I7QUFDQSxNQUFNQyxjQUFjLEdBQUdiLFFBQVEsQ0FBQ1csb0JBQUQsRUFBdUIsSUFBdkIsQ0FBL0I7QUFDQSxTQUFPRSxjQUFQLGFBQU9BLGNBQVAsdUJBQU9BLGNBQWMsQ0FBRUwsQ0FBaEIsQ0FBa0JNLFFBQWxCLENBQTJCLEtBQTNCLENBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNoYTI1NiB9IGZyb20gJy4vY3J5cHRvVXRpbCc7XG5pbXBvcnQgKiBhcyBlY2MgZnJvbSAnQGJpdGNvaW4tanMvdGlueS1zZWNwMjU2azEtYXNtanMnO1xuXG5jb25zdCBUQUdTID0gW1xuICAnQklQMDM0MC9jaGFsbGVuZ2UnLFxuICAnQklQMDM0MC9hdXgnLFxuICAnQklQMDM0MC9ub25jZScsXG4gICdUYXBMZWFmJyxcbiAgJ1RhcEJyYW5jaCcsXG4gICdUYXBTaWdoYXNoJyxcbiAgJ1RhcFR3ZWFrJyxcbiAgJ0tleUFnZyBsaXN0JyxcbiAgJ0tleUFnZyBjb2VmZmljaWVudCcsXG5dIGFzIGNvbnN0O1xudHlwZSBUYWdnZWRIYXNoUHJlZml4ID0gdHlwZW9mIFRBR1NbbnVtYmVyXTtcbnR5cGUgVGFnZ2VkSGFzaFByZWZpeGVzID0ge1xuICBba2V5IGluIFRhZ2dlZEhhc2hQcmVmaXhdOiBCdWZmZXI7XG59O1xuXG5mdW5jdGlvbiB0YWdnZWRIYXNoKHByZWZpeDogVGFnZ2VkSGFzaFByZWZpeCwgZGF0YTogQnVmZmVyKSB7XG4gIGNvbnN0IFRBR0dFRF9IQVNIX1BSRUZJWEVTOiBUYWdnZWRIYXNoUHJlZml4ZXMgPSB7XG4gICAgJ0JJUDAzNDAvY2hhbGxlbmdlJzogQnVmZmVyLmZyb20oW1xuICAgICAgMTIzLCAxODEsIDQ1LCAxMjIsIDE1OSwgMjM5LCA4OCwgNTAsIDYyLCAxNzcsIDE5MSwgMTIyLCA2NCwgMTI1LCAxNzksIDEzMCwgMjEwLCAyNDMsIDI0MiwgMjE2LCAyNywgMTc3LCAzNCwgNzksXG4gICAgICA3MywgMjU0LCA4MSwgMTQzLCAxMDksIDcyLCAyMTEsIDEyNCwgMTIzLCAxODEsIDQ1LCAxMjIsIDE1OSwgMjM5LCA4OCwgNTAsIDYyLCAxNzcsIDE5MSwgMTIyLCA2NCwgMTI1LCAxNzksIDEzMCxcbiAgICAgIDIxMCwgMjQzLCAyNDIsIDIxNiwgMjcsIDE3NywgMzQsIDc5LCA3MywgMjU0LCA4MSwgMTQzLCAxMDksIDcyLCAyMTEsIDEyNCxcbiAgICBdKSxcbiAgICAnQklQMDM0MC9hdXgnOiBCdWZmZXIuZnJvbShbXG4gICAgICAyNDEsIDIzOSwgNzgsIDk0LCAxOTIsIDk5LCAyMDIsIDIxOCwgMTA5LCAxNDgsIDIwMiwgMjUwLCAxNTcsIDE1MiwgMTI2LCAxNjAsIDEwNSwgMzgsIDg4LCA1NywgMjM2LCAxOTMsIDMxLCAxNTEsXG4gICAgICA0NSwgMTE5LCAxNjUsIDQ2LCAyMTYsIDE5MywgMjA0LCAxNDQsIDI0MSwgMjM5LCA3OCwgOTQsIDE5MiwgOTksIDIwMiwgMjE4LCAxMDksIDE0OCwgMjAyLCAyNTAsIDE1NywgMTUyLCAxMjYsIDE2MCxcbiAgICAgIDEwNSwgMzgsIDg4LCA1NywgMjM2LCAxOTMsIDMxLCAxNTEsIDQ1LCAxMTksIDE2NSwgNDYsIDIxNiwgMTkzLCAyMDQsIDE0NCxcbiAgICBdKSxcbiAgICAnQklQMDM0MC9ub25jZSc6IEJ1ZmZlci5mcm9tKFtcbiAgICAgIDcsIDczLCAxMTksIDUyLCAxNjcsIDE1NSwgMjAzLCA1MywgOTEsIDE1NSwgMTQwLCAxMjUsIDMsIDc5LCAxOCwgMjgsIDI0NCwgNTIsIDIxNSwgNjIsIDI0NywgNDUsIDIxOCwgMjUsIDEzNSwgMCxcbiAgICAgIDk3LCAyNTEsIDgyLCAxOTEsIDIzNSwgNDcsIDcsIDczLCAxMTksIDUyLCAxNjcsIDE1NSwgMjAzLCA1MywgOTEsIDE1NSwgMTQwLCAxMjUsIDMsIDc5LCAxOCwgMjgsIDI0NCwgNTIsIDIxNSwgNjIsXG4gICAgICAyNDcsIDQ1LCAyMTgsIDI1LCAxMzUsIDAsIDk3LCAyNTEsIDgyLCAxOTEsIDIzNSwgNDcsXG4gICAgXSksXG4gICAgVGFwTGVhZjogQnVmZmVyLmZyb20oW1xuICAgICAgMTc0LCAyMzQsIDE0MywgMjIwLCA2NiwgOCwgMTUyLCA0OSwgNSwgMTE1LCA3NSwgODgsIDgsIDI5LCAzMCwgMzgsIDU2LCAyMTEsIDk1LCAyOCwgMTgxLCA2NCwgOCwgMjEyLCAyMTEsIDg3LCAyMDIsXG4gICAgICAzLCAxOTAsIDEyMCwgMjMzLCAyMzgsIDE3NCwgMjM0LCAxNDMsIDIyMCwgNjYsIDgsIDE1MiwgNDksIDUsIDExNSwgNzUsIDg4LCA4LCAyOSwgMzAsIDM4LCA1NiwgMjExLCA5NSwgMjgsIDE4MSxcbiAgICAgIDY0LCA4LCAyMTIsIDIxMSwgODcsIDIwMiwgMywgMTkwLCAxMjAsIDIzMywgMjM4LFxuICAgIF0pLFxuICAgIFRhcEJyYW5jaDogQnVmZmVyLmZyb20oW1xuICAgICAgMjUsIDY1LCAxNjEsIDI0MiwgMjI5LCAxMTAsIDE4NSwgOTUsIDE2MiwgMTY5LCAyNDEsIDE0OCwgMTkwLCA5MiwgMSwgMjQ3LCAzMywgMTExLCA1MSwgMjM3LCAxMzAsIDE3NiwgMTQ1LCA3MCwgNTIsXG4gICAgICAxNDQsIDIwOCwgOTEsIDI0NSwgMjIsIDE2MCwgMjEsIDI1LCA2NSwgMTYxLCAyNDIsIDIyOSwgMTEwLCAxODUsIDk1LCAxNjIsIDE2OSwgMjQxLCAxNDgsIDE5MCwgOTIsIDEsIDI0NywgMzMsIDExMSxcbiAgICAgIDUxLCAyMzcsIDEzMCwgMTc2LCAxNDUsIDcwLCA1MiwgMTQ0LCAyMDgsIDkxLCAyNDUsIDIyLCAxNjAsIDIxLFxuICAgIF0pLFxuICAgIFRhcFNpZ2hhc2g6IEJ1ZmZlci5mcm9tKFtcbiAgICAgIDI0NCwgMTAsIDcyLCAyMjMsIDc1LCA0MiwgMTEyLCAyMDAsIDE4MCwgMTQ2LCA3NSwgMjQyLCAxMDEsIDcwLCA5NywgMjM3LCA2MSwgMTQ5LCAyNTMsIDEwMiwgMTYzLCAxOSwgMjM1LCAxMzUsIDM1LFxuICAgICAgMTE3LCAxNTEsIDE5OCwgNDAsIDIyOCwgMTYwLCA0OSwgMjQ0LCAxMCwgNzIsIDIyMywgNzUsIDQyLCAxMTIsIDIwMCwgMTgwLCAxNDYsIDc1LCAyNDIsIDEwMSwgNzAsIDk3LCAyMzcsIDYxLCAxNDksXG4gICAgICAyNTMsIDEwMiwgMTYzLCAxOSwgMjM1LCAxMzUsIDM1LCAxMTcsIDE1MSwgMTk4LCA0MCwgMjI4LCAxNjAsIDQ5LFxuICAgIF0pLFxuICAgIFRhcFR3ZWFrOiBCdWZmZXIuZnJvbShbXG4gICAgICAyMzIsIDE1LCAyMjUsIDk5LCAxNTYsIDE1NiwgMTYwLCA4MCwgMjI3LCAxNzUsIDI3LCA1NywgMTkzLCA2NywgMTk4LCA2MiwgNjYsIDE1NiwgMTg4LCAyMzUsIDIxLCAyMTcsIDY0LCAyNTEsIDE4MSxcbiAgICAgIDE5NywgMTYxLCAyNDQsIDE3NSwgODcsIDE5NywgMjMzLCAyMzIsIDE1LCAyMjUsIDk5LCAxNTYsIDE1NiwgMTYwLCA4MCwgMjI3LCAxNzUsIDI3LCA1NywgMTkzLCA2NywgMTk4LCA2MiwgNjYsXG4gICAgICAxNTYsIDE4OCwgMjM1LCAyMSwgMjE3LCA2NCwgMjUxLCAxODEsIDE5NywgMTYxLCAyNDQsIDE3NSwgODcsIDE5NywgMjMzLFxuICAgIF0pLFxuICAgICdLZXlBZ2cgbGlzdCc6IEJ1ZmZlci5mcm9tKFtcbiAgICAgIDcyLCAyOCwgMTUxLCAyOCwgNjAsIDExLCA3MCwgMjE1LCAyNDAsIDE3OCwgMTE3LCAxNzQsIDg5LCAxNDEsIDc4LCA0NCwgMTI2LCAyMTUsIDQ5LCAxNTYsIDg5LCA3NCwgOTIsIDExMCwgMTk5LFxuICAgICAgMTU4LCAxNjAsIDIxMiwgMTUzLCAyLCAxNDgsIDI0MCwgNzIsIDI4LCAxNTEsIDI4LCA2MCwgMTEsIDcwLCAyMTUsIDI0MCwgMTc4LCAxMTcsIDE3NCwgODksIDE0MSwgNzgsIDQ0LCAxMjYsIDIxNSxcbiAgICAgIDQ5LCAxNTYsIDg5LCA3NCwgOTIsIDExMCwgMTk5LCAxNTgsIDE2MCwgMjEyLCAxNTMsIDIsIDE0OCwgMjQwLFxuICAgIF0pLFxuICAgICdLZXlBZ2cgY29lZmZpY2llbnQnOiBCdWZmZXIuZnJvbShbXG4gICAgICAxOTEsIDIwMSwgNCwgMywgNzcsIDI4LCAxMzYsIDIzMiwgMjAwLCAxNCwgMzQsIDIyOSwgNjEsIDM2LCA4NiwgMTA5LCAxMDAsIDEzMCwgNzgsIDIxNCwgNjYsIDExNCwgMTI5LCAxOTIsIDE0NSwgMCxcbiAgICAgIDI0OSwgNzcsIDIwNSwgODIsIDIwMSwgMTI5LCAxOTEsIDIwMSwgNCwgMywgNzcsIDI4LCAxMzYsIDIzMiwgMjAwLCAxNCwgMzQsIDIyOSwgNjEsIDM2LCA4NiwgMTA5LCAxMDAsIDEzMCwgNzgsXG4gICAgICAyMTQsIDY2LCAxMTQsIDEyOSwgMTkyLCAxNDUsIDAsIDI0OSwgNzcsIDIwNSwgODIsIDIwMSwgMTI5LFxuICAgIF0pLFxuICB9O1xuICByZXR1cm4gc2hhMjU2KEJ1ZmZlci5jb25jYXQoW1RBR0dFRF9IQVNIX1BSRUZJWEVTW3ByZWZpeF0sIGRhdGFdKSk7XG59XG5mdW5jdGlvbiB0YXBUd2Vha0hhc2gocHViS2V5OiBCdWZmZXIsIGg6IEJ1ZmZlciB8IG51bGwpIHtcbiAgcmV0dXJuIHRhZ2dlZEhhc2goJ1RhcFR3ZWFrJywgQnVmZmVyLmNvbmNhdChoID8gW3B1YktleSwgaF0gOiBbcHViS2V5XSkpO1xufVxuXG5mdW5jdGlvbiB0d2Vha0tleShwdWJLZXk6IEJ1ZmZlciwgaDogQnVmZmVyIHwgbnVsbCkge1xuICAvLyAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHB1YktleSkpIHJldHVybiBudWxsOyAvLyByZWFjdC1uYXRpdmUgZG9lc24ndCBzdXBwb3J0IGlzIGZ1bmN0aW9uXG4gIGlmIChwdWJLZXkubGVuZ3RoICE9PSAzMikgcmV0dXJuIG51bGw7XG4gIGlmIChoICYmIGgubGVuZ3RoICE9PSAzMikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHR3ZWFrSGFzaCA9IHRhcFR3ZWFrSGFzaChwdWJLZXksIGgpO1xuICBjb25zdCByZXMgPSBlY2MueE9ubHlQb2ludEFkZFR3ZWFrKHB1YktleSwgdHdlYWtIYXNoKTtcbiAgaWYgKCFyZXMgfHwgcmVzLnhPbmx5UHVia2V5ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBwYXJpdHk6IHJlcy5wYXJpdHksXG4gICAgeDogQnVmZmVyLmZyb20ocmVzLnhPbmx5UHVia2V5KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR3ZWFrKHB1YmxpY0tleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY2hpbGROb2RlWE9ubHlQdWJrZXkgPSBCdWZmZXIuZnJvbShwdWJsaWNLZXksICdoZXgnKS5zdWJhcnJheSgxLCAzMyk7XG4gIGNvbnN0IHR3ZWFrUHVibGljS2V5ID0gdHdlYWtLZXkoY2hpbGROb2RlWE9ubHlQdWJrZXksIG51bGwpO1xuICByZXR1cm4gdHdlYWtQdWJsaWNLZXk/LngudG9TdHJpbmcoJ2hleCcpIGFzIHN0cmluZztcbn1cbiJdfQ==