diff --git a/unpackage/dist/dev/app-plus/app-service.js b/unpackage/dist/dev/app-plus/app-service.js index a7a119d..cdf7b45 100644 --- a/unpackage/dist/dev/app-plus/app-service.js +++ b/unpackage/dist/dev/app-plus/app-service.js @@ -91318,7 +91318,7 @@ eval("Object.defineProperty(exports, \"__esModule\", { value: true });exports.de /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__f__) {Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _regenerator = _interopRequireDefault(__webpack_require__(/*! ./node_modules/@babel/runtime/regenerator */ 44));var _TokenUtil = _interopRequireDefault(__webpack_require__(/*! ./TokenUtil.js */ 38));\nvar _BtcUtil = _interopRequireDefault(__webpack_require__(/*! ./BtcUtil.js */ 963));\nvar _TronUtil = _interopRequireDefault(__webpack_require__(/*! ./TronUtil.js */ 964));\nvar _EthUtil = _interopRequireDefault(__webpack_require__(/*! ./EthUtil.js */ 965));\nvar _api = _interopRequireDefault(__webpack_require__(/*! ./api.js */ 582));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {try {var info = gen[key](arg);var value = info.value;} catch (error) {reject(error);return;}if (info.done) {resolve(value);} else {Promise.resolve(value).then(_next, _throw);}}function _asyncToGenerator(fn) {return function () {var self = this,args = arguments;return new Promise(function (resolve, reject) {var gen = fn.apply(self, args);function _next(value) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);}function _throw(err) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);}_next(undefined);});};}\n\nvar fullWallet = {\n \"BTC\": [{\n balance: 0,\n name: \"BTC\",\n type: 'BTC',\n coinList: [{\n name: \"BTC\",\n xname: 'Bitcoin',\n balance: 0,\n icon: __webpack_require__(/*! @/static/tongyonh/bye.png */ 518) }] }],\n\n\n \"ETH\": [{\n balance: 0,\n name: \"ETH\",\n type: 'ETH',\n coinList: [{\n name: \"ETH\",\n xname: 'Ethereum',\n balance: 0,\n icon: __webpack_require__(/*! @/static/tongyonh/Frame3299.png */ 519) },\n\n {\n name: \"USDT\",\n xname: 'Tether USD',\n balance: 0,\n contractAddress: '0xdac17f958d2ee523a2206206994597c13d831ec7',\n icon: __webpack_require__(/*! @/static/tongyonh/img500.png */ 520) }] }],\n\n\n\n \"TRX\": [{\n balance: 0,\n name: \"TRX\",\n type: 'TRX',\n coinList: [{\n name: \"TRX\",\n xname: 'TRON',\n balance: 0,\n icon: __webpack_require__(/*! @/static/tongyonh/tron1.png */ 521) },\n\n {\n name: \"USDT\",\n xname: 'Tether USD',\n balance: 0,\n contractAddress: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',\n icon: __webpack_require__(/*! @/static/tongyonh/tether_usd.png */ 522) }] }] };\n\n\n\n\n\nvar WalletUtil = {\n //初次创建钱包\n initialWallet: function initialWallet(mnemonic, password) {\n __f__(\"log\", password, 'password', \" at utils/WalletUtil.js:62\");\n var walletInfo = fullWallet;\n var btc = _TokenUtil.default.generateBtc(mnemonic);\n walletInfo.BTC[0].password = password;\n walletInfo.BTC[0].mnemonic = mnemonic;\n walletInfo.BTC[0].privateKey = btc.privateKey;\n walletInfo.BTC[0].address = btc.address;\n walletInfo.BTC[0].ellipsisAddress = walletInfo.BTC[0].address.substring(0, 6) + '...' + walletInfo.BTC[\n 0].address.substring(walletInfo.BTC[0].address.length - 6,\n walletInfo.BTC[0].address.length);\n var eth = _TokenUtil.default.generateEth(mnemonic);\n walletInfo.ETH[0].password = password;\n walletInfo.ETH[0].mnemonic = mnemonic;\n walletInfo.ETH[0].privateKey = eth.privateKey;\n walletInfo.ETH[0].address = eth.address;\n var tron = _TokenUtil.default.generateTron(mnemonic);\n walletInfo.TRX[0].mnemonic = mnemonic;\n walletInfo.TRX[0].password = password;\n walletInfo.TRX[0].privateKey = tron.privateKey;\n walletInfo.TRX[0].address = tron.address;\n var wallet = walletInfo.BTC[0];\n uni.setStorageSync('walletInfo', walletInfo);\n uni.setStorageSync('wallet', wallet);\n this.updateBalance();\n },\n //修改钱包名称\n updateWalletName: function updateWalletName(type, address, name) {\n var walletInfo = uni.getStorageSync('walletInfo');\n var walletList = walletInfo[type];\n var wallet = uni.getStorageSync('wallet');\n for (var k = 0, length = walletList.length; k < length; k++) {\n if (walletList[k].address === address) {\n walletList[k].name = name;\n if (wallet.address == walletList[k].address) {\n wallet.name = name;\n uni.setStorageSync('wallet', wallet);\n }\n break;\n }\n }\n uni.setStorageSync('walletInfo', walletInfo);\n },\n //助记词新建\n mnemonicEstablishWallet: function mnemonicEstablishWallet(type, mnemonic, password) {\n var walletInfo = uni.getStorageSync('walletInfo');\n __f__(\"log\", password, 'password', type, \" at utils/WalletUtil.js:107\");\n var walletdec;\n switch (type) {\n case 'BTC':\n walletdec = _TokenUtil.default.generateBtc(mnemonic);\n if (uni.getStorageSync('walletInfo')) {\n uni.setStorageSync('walleti', walletdec.address);\n }\n\n break;\n case 'ETH':\n walletdec = _TokenUtil.default.generateEth(mnemonic);\n if (uni.getStorageSync('walletInfo')) {\n uni.setStorageSync('walleti', walletdec.address);\n }\n\n break;\n case 'TRX':\n\n walletdec = _TokenUtil.default.generateTron(mnemonic);\n if (uni.getStorageSync('walletInfo')) {\n uni.setStorageSync('walleti', walletdec.address);\n }\n\n break;}\n\n var wallet = fullWallet[type][0];\n wallet.password = password;\n wallet.privateKey = walletdec.privateKey;\n wallet.mnemonic = mnemonic;\n wallet.address = walletdec.address;\n __f__(\"log\", wallet, \" at utils/WalletUtil.js:138\");\n walletInfo[type].push(wallet);\n __f__(\"log\", walletInfo, 1111111, \" at utils/WalletUtil.js:140\");\n uni.setStorageSync('walletInfo', walletInfo);\n uni.setStorageSync('wallet', wallet);\n uni.setStorageSync('walleti', wallet.address);\n\n },\n //私钥新建\n privateKeyEstablishWallet: function privateKeyEstablishWallet(type, privateKey, password) {\n var walletInfo = uni.getStorageSync('walletInfo');\n __f__(\"log\", type, \" at utils/WalletUtil.js:149\");\n __f__(\"log\", password, 'password', \" at utils/WalletUtil.js:150\");\n var walletdec;\n switch (type) {\n case 'BTC':\n walletdec = _TokenUtil.default.importBtcPrivateKey(privateKey);\n break;\n case 'ETH':\n walletdec = _TokenUtil.default.importEthPrivateKey(privateKey);\n break;\n case 'TRX':\n walletdec = _TokenUtil.default.importTronPrivateKey(privateKey);\n break;}\n\n var wallet = fullWallet[type][0];\n wallet.password = password;\n wallet.privateKey = walletdec.privateKey;\n wallet.address = walletdec.address;\n wallet.ellipsisAddress = wallet.address.substring(0, 6) + '...' + wallet.address.substring(\n wallet.address.length - 6,\n wallet.address.length);\n walletInfo[type].push(wallet);\n __f__(\"log\", walletInfo, '当前私钥建的', \" at utils/WalletUtil.js:171\");\n uni.setStorageSync('walletInfo', walletInfo);\n uni.setStorageSync('wallet', wallet);\n uni.setStorageSync('walleti', wallet.address);\n },\n //获取钱包列表\n getWalletList: function getWalletList(type) {\n var walletInfo = uni.getStorageSync('walletInfo');\n var walletList = [];\n if (type) {\n walletList = walletInfo[type];\n for (var k = 0, length = walletList.length; k < length; k++) {\n var address = walletList[k].address;\n walletList[k].ellipsisAddress = address.substring(0, 6) + '...' + address.substring(address.length - 6,\n address.length);\n }\n } else {\n for (var obj in walletInfo) {\n for (var k = 0, length = walletInfo[obj].length; k < length; k++) {\n var _address = walletInfo[obj][k].address;\n\n walletInfo[obj][k].ellipsisAddress = _address.substring(0, 6) + '...' + _address.substring(\n _address.length - 6,\n _address.length);\n walletInfo[obj][k].type = obj;\n walletList.push(walletInfo[obj][k]);\n }\n }\n }\n return walletList;\n },\n selectWallet: function selectWallet(type, address) {\n __f__(\"log\", '选择钱包', \" at utils/WalletUtil.js:203\");\n uni.setStorageSync('walleti', address);\n var walletInfo = uni.getStorageSync('walletInfo');\n var walletList = walletInfo[type];\n __f__(\"log\", \" at utils/WalletUtil.js:207\");\n for (var k = 0, length = walletList.length; k < length; k++) {\n if (walletList[k].address == address) {\n walletList[k].ellipsisAddress = address.substring(0, 6) + '...' + address.substring(address.length - 6,\n address.length);\n uni.setStorageSync('wallet', walletList[k]);\n break;\n }\n\n }\n },\n updateBalance: function () {var _updateBalance = _asyncToGenerator( /*#__PURE__*/_regenerator.default.mark(function _callee(success) {var wallet, params, mainCoinP, usdtU, i, tronCoin, newList, _i, coin, walletInfo, k, length;return _regenerator.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0:\n uni.setStorageSync('isWallet', true);\n wallet = uni.getStorageSync('wallet');\n params = {\n coinName: wallet.type };_context.next = 5;return (\n\n _api.default.getCoinRate(params));case 5:mainCoinP = _context.sent;\n params.coinName = 'USDT';_context.next = 9;return (\n _api.default.getCoinRate(params));case 9:usdtU = _context.sent;\n wallet.totalBalancePrice = 0;\n wallet.totalBalanceCnyPrice = 0;\n __f__(\"log\", usdtU, 8888, \" at utils/WalletUtil.js:229\");_context.t0 =\n wallet.type;_context.next = _context.t0 ===\n 'BTC' ? 16 : _context.t0 ===\n\n\n\n 'ETH' ? 21 : _context.t0 ===\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n 'TRX' ? 40 : 55;break;case 16:__f__(\"log\", \"进来BTC\", \" at utils/WalletUtil.js:232\");_context.next = 19;return _BtcUtil.default.getBalance(wallet.address);case 19:wallet.balance = _context.sent;return _context.abrupt(\"break\", 55);case 21:__f__(\"log\", \"进来ETH\", wallet.balance, \" at utils/WalletUtil.js:236\");_context.next = 24;return _EthUtil.default.getBalance(wallet.addresss);case 24:wallet.balance = _context.sent;__f__(\"log\", \"进来ETH\", wallet.balance, \" at utils/WalletUtil.js:238\");i = 1;case 27:if (!(i < wallet.coinList.length)) {_context.next = 35;break;}_context.next = 30;return _EthUtil.default.getTokenBalance(wallet.address, wallet.coinList[i].contractAddress);case 30:wallet.coinList[i].balance = _context.sent;__f__(\"log\", \"进来ETH\", wallet.coinList[i].balance, \" at utils/WalletUtil.js:241\");case 32:i++;_context.next = 27;break;case 35:wallet.totalBalancePrice = wallet.coinList[1].balancePrice ? wallet.coinList[1].balancePrice : 0;wallet.totalBalanceCnyPrice = wallet.coinList[1].balanceCnyPrice ? wallet.coinList[1].balanceCnyPrice : 0;wallet.coinList[1].balancePrice = (wallet.coinList[1].balance * usdtU.data.priceInUsd).toFixed(2);wallet.coinList[1].balanceCnyPrice = (wallet.coinList[1].balance * usdtU.data.priceCny).toFixed(2);return _context.abrupt(\"break\", 55);case 40:\n __f__(\"log\", \"进来TRX\", \" at utils/WalletUtil.js:252\");_context.next = 43;return (\n _TronUtil.default.getTronBalance(wallet.address));case 43:wallet.balance = _context.sent;\n params.address = wallet.address;\n params.chainName = wallet.type;_context.next = 48;return (\n _api.default.getBalance(params));case 48:tronCoin = _context.sent;\n newList = [];\n newList.push(wallet.coinList[0]);\n newList.push(wallet.coinList[1]);\n for (_i = 1; _i < tronCoin.data.length; _i++) {\n if (tronCoin.data[_i].tokenAbbr === 'USDT') {\n newList[1].balance = Number(tronCoin.data[_i].balance) / Math.pow(10, tronCoin.\n data[_i].tokenDecimal);\n newList[1].balanceCnyPrice = (newList[1].balance * usdtU.data.priceCny).toFixed(2);\n newList[1].balancePrice = (newList[1].balance * usdtU.data.priceInUsd).toFixed(2);\n wallet.totalBalancePrice = newList[1].balancePrice;\n wallet.totalBalanceCnyPrice = newList[1].balanceCnyPrice;\n } else {\n __f__(\"log\", Number(tronCoin.data[_i].balance) / Math.pow(10, tronCoin.data[_i].\n tokenDecimal), \" at utils/WalletUtil.js:269\");\n coin = {\n name: tronCoin.data[_i].tokenAbbr,\n xname: tronCoin.data[_i].tokenName,\n balance: Number(tronCoin.data[_i].balance) / Math.pow(10, tronCoin.data[_i].\n tokenDecimal),\n icon: tronCoin.data[_i].tokenLogo };\n\n\n if (tronCoin.data[_i].tokenType === 'trc20') {\n coin.contractAddress = tronCoin.data[_i].tokenId;\n } else {\n coin.contractAddress = tronCoin.data[_i].owner_address;\n }\n newList.push(coin);\n }\n\n\n }\n wallet.coinList = newList;return _context.abrupt(\"break\", 55);case 55:\n\n\n\n\n wallet.ellipsisAddress = wallet.address.substring(0, 6) + '...' + wallet.address.substring(\n wallet.address.length - 6,\n wallet.address.length);\n wallet.balancePrice = (wallet.balance * mainCoinP.data.priceInUsd).toFixed(2);\n wallet.balanceCnyPrice = (wallet.balance * mainCoinP.data.priceCny).toFixed(2);\n wallet.totalBalancePrice = (Number(wallet.totalBalancePrice) + Number(wallet.balancePrice)).toFixed(2);\n wallet.totalBalanceCnyPrice = (Number(wallet.totalBalanceCnyPrice) + Number(wallet.balanceCnyPrice)).toFixed(2);\n __f__(\"log\", \"wallet.balancePrice\", Number(wallet.totalBalancePrice), \" at utils/WalletUtil.js:301\");\n __f__(\"log\", \"wallet.balanceCnyPrice\", wallet.totalBalancePrice, \" at utils/WalletUtil.js:302\");\n wallet.coinList[0].balance = wallet.balance;\n wallet.coinList[0].balancePrice = wallet.balancePrice;\n wallet.coinList[0].balanceCnyPrice = wallet.balanceCnyPrice;\n uni.setStorageSync('wallet', wallet);\n walletInfo = uni.getStorageSync('walletInfo');\n k = 0, length = walletInfo[wallet.type].length;case 68:if (!(k < length)) {_context.next = 75;break;}if (!(\n walletInfo[wallet.type][k].address === wallet.address)) {_context.next = 72;break;}\n walletInfo[wallet.type][k] = wallet;return _context.abrupt(\"break\", 75);case 72:k++;_context.next = 68;break;case 75:\n\n\n\n uni.setStorageSync('walletInfo', walletInfo);\n uni.setStorageSync('isWallet', false);return _context.abrupt(\"return\",\n wallet);case 78:case \"end\":return _context.stop();}}}, _callee);}));function updateBalance(_x) {return _updateBalance.apply(this, arguments);}return updateBalance;}(),\n\n\n // 封装地址方法\n updateAddress: function updateAddress(type, value, bigAddress, addressName) {\n var that = this;\n switch (wallet.type) {\n case 'BTC':\n\n break;\n case 'ETH':\n\n\n break;\n case 'TRX':\n if (value == 'ETH') {\n var gai = uni.getStorageSync('ETHAddressInfo');\n var gai2 = uni.getStorageSync('TRXAddressInfo');\n var index = uni.getStorageSync('editIndex');\n var eth = new Object();\n eth.address = bigAddress;\n eth.name = addressName;\n eth.coinList = [{\n name: \"ETH\",\n name2: \"ETH\",\n xname: 'Ethereum',\n icon: __webpack_require__(/*! @/static/tongyonh/Frame3299.png */ 519) }];\n\n gai2.splice(index, 1);\n uni.setStorageSync('TRXAddressInfo', gai2);\n gai.push(eth);\n uni.setStorageSync('ETHAddressInfo', gai);\n uni.showToast({\n title: 'Successfully',\n icon: 'success',\n duration: 1500 });\n\n uni.navigateTo({\n url: '../address/index' });\n\n }\n\n break;}\n\n\n\n },\n // 指纹识别\n finger: function finger() {\n\n if (!plus.fingerprint.isSupport()) {\n this.result = '此设备不支持指纹识别';\n this.disabled = true;\n } else if (!plus.fingerprint.isKeyguardSecure()) {\n this.result = '此设备未设置密码锁屏,无法使用指纹识别';\n this.disabled = true;\n } else if (!plus.fingerprint.isEnrolledFingerprints()) {\n this.result = '此设备未录入指纹,请到设置中开启';\n this.disabled = true;\n } else {\n this.result = '此设备支持指纹识别';\n this.disabled = false;\n }\n\n\n\n\n\n\n\n\n },\n\n fingerprint: function fingerprint(sett) {\n var bltype = true;\n\n if (!plus.fingerprint.isSupport()) {\n uni.showToast({\n title: 'This device does not support fingerprint identification',\n icon: 'none',\n duration: 1500 });\n\n // this.disabled = true;\n } else if (!plus.fingerprint.isKeyguardSecure()) {\n uni.showToast({\n title: 'This device is not equipped with a password lock screen and cannot use fingerprint identification',\n icon: 'none',\n duration: 1500 });\n\n\n } else if (!plus.fingerprint.isEnrolledFingerprints()) {\n uni.showToast({\n title: 'There is no fingerprint entered in this device. Please turn it on in the setting',\n icon: 'none',\n duration: 1500 });\n\n // this.disabled = true;\n } else {\n // this.result = '此设备支持指纹识别';\n // // this.disabled = false;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n var that = this;\n var forSett = true;\n\n plus.fingerprint.authenticate(function () {\n plus.nativeUI.closeWaiting(); //兼容Android平台关闭等待框\t\n // uni.showToast({\n // \ttitle: 'Fingerprint identification succeeded',\n // \ticon: 'none',\n // \tduration: 1500,\n // \t\t})\n // 存储设置里开启指纹后的状态,隐藏使用密码\n __f__(\"log\", forSett, 12121, \" at utils/WalletUtil.js:444\");\n if (sett) {\n uni.setStorageSync('fingerPass', true);\n __f__(\"log\", forSett, 12121, \" at utils/WalletUtil.js:447\");\n\n }\n //plus.nativeUI.alert('Fingerprint identification succeeded');\n }, function (e) {\n switch (e.code) {\n case e.AUTHENTICATE_MISMATCH:\n plus.nativeUI.toast('Fingerprint matching failed, please re-enter');\n break;\n case e.AUTHENTICATE_OVERLIMIT:\n plus.nativeUI.closeWaiting(); //兼容Android平台关闭等待框\n plus.nativeUI.alert(\n 'The number of fingerprint identification failures exceeds the limit. Please use other methods for authentication');\n\n break;\n case e.CANCEL:\n plus.nativeUI.toast('Recognition has been cancelled');\n break;\n default:\n plus.nativeUI.closeWaiting(); //兼容Android平台关闭等待框\n plus.nativeUI.alert('Fingerprint identification failed, please try again');\n break;}\n\n });\n // Android平台手动弹出等待提示框 \n if ('Android' == plus.os.name) {\n this.show = true;\n /* plus.nativeUI.showWaiting('指纹识别中...').onclose = function() {\r\n \tplus.fingerprint.cancel();\r\n } */\n }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n }\n\n\n\n },\n printCancel: function printCancel() {\n plus.fingerprint.cancel();\n // this.result=\"停止指纹识别\"\n } };var _default =\n\nWalletUtil;exports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 28)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vdXRpbHMvV2FsbGV0VXRpbC5qcyJdLCJuYW1lcyI6WyJmdWxsV2FsbGV0IiwiYmFsYW5jZSIsIm5hbWUiLCJ0eXBlIiwiY29pbkxpc3QiLCJ4bmFtZSIsImljb24iLCJyZXF1aXJlIiwiY29udHJhY3RBZGRyZXNzIiwiV2FsbGV0VXRpbCIsImluaXRpYWxXYWxsZXQiLCJtbmVtb25pYyIsInBhc3N3b3JkIiwid2FsbGV0SW5mbyIsImJ0YyIsIlRva2VuVXRpbCIsImdlbmVyYXRlQnRjIiwiQlRDIiwicHJpdmF0ZUtleSIsImFkZHJlc3MiLCJlbGxpcHNpc0FkZHJlc3MiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJldGgiLCJnZW5lcmF0ZUV0aCIsIkVUSCIsInRyb24iLCJnZW5lcmF0ZVRyb24iLCJUUlgiLCJ3YWxsZXQiLCJ1bmkiLCJzZXRTdG9yYWdlU3luYyIsInVwZGF0ZUJhbGFuY2UiLCJ1cGRhdGVXYWxsZXROYW1lIiwiZ2V0U3RvcmFnZVN5bmMiLCJ3YWxsZXRMaXN0IiwiayIsIm1uZW1vbmljRXN0YWJsaXNoV2FsbGV0Iiwid2FsbGV0ZGVjIiwicHVzaCIsInByaXZhdGVLZXlFc3RhYmxpc2hXYWxsZXQiLCJpbXBvcnRCdGNQcml2YXRlS2V5IiwiaW1wb3J0RXRoUHJpdmF0ZUtleSIsImltcG9ydFRyb25Qcml2YXRlS2V5IiwiZ2V0V2FsbGV0TGlzdCIsIm9iaiIsInNlbGVjdFdhbGxldCIsInN1Y2Nlc3MiLCJwYXJhbXMiLCJjb2luTmFtZSIsImFwaSIsImdldENvaW5SYXRlIiwibWFpbkNvaW5QIiwidXNkdFUiLCJ0b3RhbEJhbGFuY2VQcmljZSIsInRvdGFsQmFsYW5jZUNueVByaWNlIiwiQnRjVXRpbCIsImdldEJhbGFuY2UiLCJFdGhVdGlsIiwiYWRkcmVzc3MiLCJpIiwiZ2V0VG9rZW5CYWxhbmNlIiwiYmFsYW5jZVByaWNlIiwiYmFsYW5jZUNueVByaWNlIiwiZGF0YSIsInByaWNlSW5Vc2QiLCJ0b0ZpeGVkIiwicHJpY2VDbnkiLCJUcm9uVXRpbCIsImdldFRyb25CYWxhbmNlIiwiY2hhaW5OYW1lIiwidHJvbkNvaW4iLCJuZXdMaXN0IiwidG9rZW5BYmJyIiwiTnVtYmVyIiwiTWF0aCIsInBvdyIsInRva2VuRGVjaW1hbCIsImNvaW4iLCJ0b2tlbk5hbWUiLCJ0b2tlbkxvZ28iLCJ0b2tlblR5cGUiLCJ0b2tlbklkIiwib3duZXJfYWRkcmVzcyIsInVwZGF0ZUFkZHJlc3MiLCJ2YWx1ZSIsImJpZ0FkZHJlc3MiLCJhZGRyZXNzTmFtZSIsInRoYXQiLCJnYWkiLCJnYWkyIiwiaW5kZXgiLCJPYmplY3QiLCJuYW1lMiIsInNwbGljZSIsInNob3dUb2FzdCIsInRpdGxlIiwiZHVyYXRpb24iLCJuYXZpZ2F0ZVRvIiwidXJsIiwiZmluZ2VyIiwicGx1cyIsImZpbmdlcnByaW50IiwiaXNTdXBwb3J0IiwicmVzdWx0IiwiZGlzYWJsZWQiLCJpc0tleWd1YXJkU2VjdXJlIiwiaXNFbnJvbGxlZEZpbmdlcnByaW50cyIsInNldHQiLCJibHR5cGUiLCJmb3JTZXR0IiwiYXV0aGVudGljYXRlIiwibmF0aXZlVUkiLCJjbG9zZVdhaXRpbmciLCJlIiwiY29kZSIsIkFVVEhFTlRJQ0FURV9NSVNNQVRDSCIsInRvYXN0IiwiQVVUSEVOVElDQVRFX09WRVJMSU1JVCIsImFsZXJ0IiwiQ0FOQ0VMIiwib3MiLCJzaG93IiwicHJpbnRDYW5jZWwiLCJjYW5jZWwiXSwibWFwcGluZ3MiOiJ3UEFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRFOztBQUVBLElBQUlBLFVBQVUsR0FBRztBQUNoQixTQUFPLENBQUM7QUFDUEMsV0FBTyxFQUFFLENBREY7QUFFUEMsUUFBSSxFQUFFLEtBRkM7QUFHUEMsUUFBSSxFQUFFLEtBSEM7QUFJUEMsWUFBUSxFQUFFLENBQUM7QUFDVkYsVUFBSSxFQUFFLEtBREk7QUFFVkcsV0FBSyxFQUFFLFNBRkc7QUFHVkosYUFBTyxFQUFFLENBSEM7QUFJVkssVUFBSSxFQUFFQyxtQkFBTyxDQUFDLG9DQUFELENBSkgs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LFFBQUwsQ0FBY0ssS0FBZCxDQUFvQiw4Q0FBcEI7QUFDQTtBQUNELGVBQUtILENBQUMsQ0FBQ0ksc0JBQVA7QUFDQ2pCLGdCQUFJLENBQUNXLFFBQUwsQ0FBY0MsWUFBZCxHQURELENBQytCO0FBQzlCWixnQkFBSSxDQUFDVyxRQUFMLENBQWNPLEtBQWQ7QUFDQyw4SEFERDs7QUFHQTtBQUNELGVBQUtMLENBQUMsQ0FBQ00sTUFBUDtBQUNDbkIsZ0JBQUksQ0FBQ1csUUFBTCxDQUFjSyxLQUFkLENBQW9CLGdDQUFwQjtBQUNBO0FBQ0Q7QUFDQ2hCLGdCQUFJLENBQUNXLFFBQUwsQ0FBY0MsWUFBZCxHQURELENBQytCO0FBQzlCWixnQkFBSSxDQUFDVyxRQUFMLENBQWNPLEtBQWQsQ0FBb0IscURBQXBCO0FBQ0Esa0JBaEJGOztBQWtCQSxPQWxDRDtBQW1DQTtBQUNBLFVBQUksYUFBYWxCLElBQUksQ0FBQ29CLEVBQUwsQ0FBUXZILElBQXpCLEVBQStCO0FBQzlCLGFBQUt3SCxJQUFMLEdBQVksSUFBWjtBQUNBOzs7QUFHQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkQ7Ozs7QUFJRCxHQXZiZTtBQXdiaEJDLGFBQVcsRUFBRSx1QkFBVztBQUN2QnRCLFFBQUksQ0FBQ0MsV0FBTCxDQUFpQnNCLE1BQWpCO0FBQ0E7QUFDQSxHQTNiZSxFQUFqQixDOztBQTZiZW5ILFUiLCJmaWxlIjoiOTYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRva2VuVXRpbCBmcm9tICcuL1Rva2VuVXRpbC5qcydcclxuaW1wb3J0IEJ0Y1V0aWwgZnJvbSAnLi9CdGNVdGlsLmpzJ1xyXG5pbXBvcnQgVHJvblV0aWwgZnJvbSAnLi9Ucm9uVXRpbC5qcydcclxuaW1wb3J0IEV0aFV0aWwgZnJvbSAnLi9FdGhVdGlsLmpzJ1xyXG5pbXBvcnQgYXBpIGZyb20gJy4vYXBpLmpzJ1xyXG5cclxubGV0IGZ1bGxXYWxsZXQgPSB7XHJcblx0XCJCVENcIjogW3tcclxuXHRcdGJhbGFuY2U6IDAsXHJcblx0XHRuYW1lOiBcIkJUQ1wiLFxyXG5cdFx0dHlwZTogJ0JUQycsXHJcblx0XHRjb2luTGlzdDogW3tcclxuXHRcdFx0bmFtZTogXCJCVENcIixcclxuXHRcdFx0eG5hbWU6ICdCaXRjb2luJyxcclxuXHRcdFx0YmFsYW5jZTogMCxcclxuXHRcdFx0aWNvbjogcmVxdWlyZSgnQC9zdGF0aWMvdG9uZ3lvbmgvYnllLnBuZycpXHJcblx0XHR9XVxyXG5cdH1dLFxyXG5cdFwiRVRIXCI6IFt7XHJcblx0XHRiYWxhbmNlOiAwLFxyXG5cdFx0bmFtZTogXCJFVEhcIixcclxuXHRcdHR5cGU6ICdFVEgnLFxyXG5cdFx0Y29pbkxpc3Q6IFt7XHJcblx0XHRcdFx0bmFtZTogXCJFVEhcIixcclxuXHRcdFx0XHR4bmFtZTogJ0V0aGVyZXVtJyxcclxuXHRcdFx0XHRiYWxhbmNlOiAwLFxyXG5cdFx0XHRcdGljb246IHJlcXVpcmUoJ0Avc3RhdGljL3Rvbmd5b25oL0ZyYW1lMzI5OS5wbmcnKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bmFtZTogXCJVU0RUXCIsXHJcblx0XHRcdFx0eG5hbWU6ICdUZXRoZXIgVVNEJyxcclxuXHRcdFx0XHRiYWxhbmNlOiAwLFxyXG5cdFx0XHRcdGNvbnRyYWN0QWRkcmVzczogJzB4ZGFjMTdmOTU4ZDJlZTUyM2EyMjA2MjA2OTk0NTk3YzEzZDgzMWVjNycsXHJcblx0XHRcdFx0aWNvbjogcmVxdWlyZSgnQC9zdGF0aWMvdG9uZ3lvbmgvaW1nNTAwLnBuZycpXHJcblx0XHRcdH1cclxuXHRcdF1cclxuXHR9XSxcclxuXHRcIlRSWFwiOiBbe1xyXG5cdFx0YmFsYW5jZTogMCxcclxuXHRcdG5hbWU6IFwiVFJYXCIsXHJcblx0XHR0eXBlOiAnVFJYJyxcclxuXHRcdGNvaW5MaXN0OiBbe1xyXG5cdFx0XHRcdG5hbWU6IFwiVFJYXCIsXHJcblx0XHRcdFx0eG5hbWU6ICdUUk9OJyxcclxuXHRcdFx0XHRiYWxhbmNlOiAwLFxyXG5cdFx0XHRcdGljb246IHJlcXVpcmUoJ0Avc3RhdGljL3Rvbmd5b25oL3Ryb24xLnBuZycpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiBcIlVTRFRcIixcclxuXHRcdFx0XHR4bmFtZTogJ1RldGhlciBVU0QnLFxyXG5cdFx0XHRcdGJhbGFuY2U6IDAsXHJcblx0XHRcdFx0Y29udHJhY3RBZGRyZXNzOiAnVFI3TkhxamVLUXhHVENpOHE4Wlk0cEw4b3RTemdqTGo2dCcsXHJcblx0XHRcdFx0aWNvbjogcmVxdWlyZSgnQC9zdGF0aWMvdG9uZ3lvbmgvdGV0aGVyX3VzZC5wbmcnKVxyXG5cdFx0XHR9XHJcblx0XHRdXHJcblx0fV1cclxufVxyXG5cclxubGV0IFdhbGxldFV0aWwgPSB7XHJcblx0Ly/liJ3mrKHliJvlu7rpkrHljIVcclxuXHRpbml0aWFsV2FsbGV0OiBmdW5jdGlvbihtbmVtb25pYywgcGFzc3dvcmQpIHtcclxuXHRcdGNvbnNvbGUubG9nKHBhc3N3b3JkLCAncGFzc3dvcmQnKVxyXG5cdFx0bGV0IHdhbGxldEluZm8gPSBmdWxsV2FsbGV0O1xyXG5cdFx0bGV0IGJ0YyA9IFRva2VuVXRpbC5nZW5lcmF0ZUJ0YyhtbmVtb25pYyk7XHJcblx0XHR3YWxsZXRJbmZvLkJUQ1swXS5wYXNzd29yZCA9IHBhc3N3b3JkO1xyXG5cdFx0d2FsbGV0SW5mby5CVENbMF0ubW5lbW9uaWMgPSBtbmVtb25pYztcclxuXHRcdHdhbGxldEluZm8uQlRDWzBdLnByaXZhdGVLZXkgPSBidGMucHJpdmF0ZUtleTtcclxuXHRcdHdhbGxldEluZm8uQlRDWzBdLmFkZHJlc3MgPSBidGMuYWRkcmVzcztcclxuXHRcdHdhbGxldEluZm8uQlRDWzBdLmVsbGlwc2lzQWRkcmVzcyA9IHdhbGxldEluZm8uQlRDWzBdLmFkZHJlc3Muc3Vic3RyaW5nKDAsIDYpICsgJy4uLicgKyB3YWxsZXRJbmZvLkJUQ1tcclxuXHRcdFx0MF0uYWRkcmVzcy5zdWJzdHJpbmcod2FsbGV0SW5mby5CVENbMF0uYWRkcmVzcy5sZW5ndGgtNixcclxuXHRcdFx0d2FsbGV0SW5mby5CVENbMF0uYWRkcmVzcy5sZW5ndGgpXHJcblx0XHRsZXQgZXRoID0gVG9rZW5VdGlsLmdlbmVyYXRlRXRoKG1uZW1vbmljKVxyXG5cdFx0d2FsbGV0SW5mby5FVEhbMF0ucGFzc3dvcmQgPSBwYXNzd29yZDtcclxuXHRcdHdhbGxldEluZm8uRVRIWzBdLm1uZW1vbmljID0gbW5lbW9uaWM7XHJcblx0XHR3YWxsZXRJbmZvLkVUSFswXS5wcml2YXRlS2V5ID0gZXRoLnByaXZhdGVLZXk7XHJcblx0XHR3YWxsZXRJbmZvLkVUSFswXS5hZGRyZXNzID0gZXRoLmFkZHJlc3M7XHJcblx0XHRsZXQgdHJvbiA9IFRva2VuVXRpbC5nZW5lcmF0ZVRyb24obW5lbW9uaWMpO1xyXG5cdFx0d2FsbGV0SW5mby5UUlhbMF0ubW5lbW9uaWMgPSBtbmVtb25pYztcclxuXHRcdHdhbGxldEluZm8uVFJYWzBdLnBhc3N3b3JkID0gcGFzc3dvcmQ7XHJcblx0XHR3YWxsZXRJbmZvLlRSWFswXS5wcml2YXRlS2V5ID0gdHJvbi5wcml2YXRlS2V5O1xyXG5cdFx0d2FsbGV0SW5mby5UUlhbMF0uYWRkcmVzcyA9IHRyb24uYWRkcmVzcztcclxuXHRcdGxldCB3YWxsZXQgPSB3YWxsZXRJbmZvLkJUQ1swXTtcclxuXHRcdHVuaS5zZXRTdG9yYWdlU3luYygnd2FsbGV0SW5mbycsIHdhbGxldEluZm8pO1xyXG5cdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXQnLCB3YWxsZXQpO1xyXG5cdFx0dGhpcy51cGRhdGVCYWxhbmNlKCk7XHJcblx0fSxcclxuXHQvL+S/ruaUuemSseWMheWQjeensFxyXG5cdHVwZGF0ZVdhbGxldE5hbWU6IGZ1bmN0aW9uKHR5cGUsIGFkZHJlc3MsIG5hbWUpIHtcclxuXHRcdGxldCB3YWxsZXRJbmZvID0gdW5pLmdldFN0b3JhZ2VTeW5jKCd3YWxsZXRJbmZvJyk7XHJcblx0XHRsZXQgd2FsbGV0TGlzdCA9IHdhbGxldEluZm9bdHlwZV07XHJcblx0XHRsZXQgd2FsbGV0ID11bmkuZ2V0U3RvcmFnZVN5bmMoJ3dhbGxldCcpO1xyXG5cdFx0Zm9yICh2YXIgayA9IDAsIGxlbmd0aCA9IHdhbGxldExpc3QubGVuZ3RoOyBrIDwgbGVuZ3RoOyBrKyspIHtcclxuXHRcdFx0aWYgKHdhbGxldExpc3Rba10uYWRkcmVzcyA9PT0gYWRkcmVzcykge1xyXG5cdFx0XHRcdHdhbGxldExpc3Rba10ubmFtZSA9IG5hbWVcclxuXHRcdFx0XHQgaWYod2FsbGV0LmFkZHJlc3M9PXdhbGxldExpc3Rba10uYWRkcmVzcyl7XHJcblx0XHRcdFx0XHQgd2FsbGV0Lm5hbWU9bmFtZVxyXG5cdFx0XHRcdFx0IHVuaS5zZXRTdG9yYWdlU3luYygnd2FsbGV0Jyx3YWxsZXQpO1xyXG5cdFx0XHRcdCB9XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHVuaS5zZXRTdG9yYWdlU3luYygnd2FsbGV0SW5mbycsIHdhbGxldEluZm8pO1xyXG5cdH0sXHJcblx0Ly/liqnorrDor43mlrDlu7pcclxuXHRtbmVtb25pY0VzdGFibGlzaFdhbGxldDogZnVuY3Rpb24odHlwZSwgbW5lbW9uaWMsIHBhc3N3b3JkKSB7XHJcblx0XHRsZXQgd2FsbGV0SW5mbyA9IHVuaS5nZXRTdG9yYWdlU3luYygnd2FsbGV0SW5mbycpO1xyXG5cdFx0Y29uc29sZS5sb2cocGFzc3dvcmQsICdwYXNzd29yZCcsIHR5cGUpXHJcblx0XHRsZXQgd2FsbGV0ZGVjO1xyXG5cdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdGNhc2UgJ0JUQyc6XHJcblx0XHRcdFx0d2FsbGV0ZGVjID0gVG9rZW5VdGlsLmdlbmVyYXRlQnRjKG1uZW1vbmljKTtcclxuXHRcdFx0XHRpZiAodW5pLmdldFN0b3JhZ2VTeW5jKCd3YWxsZXRJbmZvJykpIHtcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnd2FsbGV0aScsIHdhbGxldGRlYy5hZGRyZXNzKVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ0VUSCc6XHJcblx0XHRcdFx0d2FsbGV0ZGVjID0gVG9rZW5VdGlsLmdlbmVyYXRlRXRoKG1uZW1vbmljKTtcclxuXHRcdFx0XHRpZiAodW5pLmdldFN0b3JhZ2VTeW5jKCd3YWxsZXRJbmZvJykpIHtcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnd2FsbGV0aScsIHdhbGxldGRlYy5hZGRyZXNzKVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ1RSWCc6XHJcblxyXG5cdFx0XHRcdHdhbGxldGRlYyA9IFRva2VuVXRpbC5nZW5lcmF0ZVRyb24obW5lbW9uaWMpO1xyXG5cdFx0XHRcdGlmICh1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dhbGxldEluZm8nKSkge1xyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXRpJywgd2FsbGV0ZGVjLmFkZHJlc3MpXHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHRcdGxldCB3YWxsZXQgPSBmdWxsV2FsbGV0W3R5cGVdWzBdO1xyXG5cdFx0d2FsbGV0LnBhc3N3b3JkID0gcGFzc3dvcmQ7XHJcblx0XHR3YWxsZXQucHJpdmF0ZUtleSA9IHdhbGxldGRlYy5wcml2YXRlS2V5O1xyXG5cdFx0d2FsbGV0Lm1uZW1vbmljID0gbW5lbW9uaWM7XHJcblx0XHR3YWxsZXQuYWRkcmVzcyA9IHdhbGxldGRlYy5hZGRyZXNzO1xyXG5cdFx0Y29uc29sZS5sb2cod2FsbGV0KVxyXG5cdFx0d2FsbGV0SW5mb1t0eXBlXS5wdXNoKHdhbGxldCk7XHJcblx0XHRjb25zb2xlLmxvZyh3YWxsZXRJbmZvLCAxMTExMTExKVxyXG5cdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXRJbmZvJywgd2FsbGV0SW5mbyk7XHJcblx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3dhbGxldCcsIHdhbGxldCk7XHJcblx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3dhbGxldGknLCB3YWxsZXQuYWRkcmVzcyk7XHJcblxyXG5cdH0sXHJcblx0Ly/np4HpkqXmlrDlu7pcclxuXHRwcml2YXRlS2V5RXN0YWJsaXNoV2FsbGV0OiBmdW5jdGlvbih0eXBlLCBwcml2YXRlS2V5LCBwYXNzd29yZCkge1xyXG5cdFx0bGV0IHdhbGxldEluZm8gPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dhbGxldEluZm8nKTtcclxuXHRcdGNvbnNvbGUubG9nKHR5cGUpXHJcblx0XHRjb25zb2xlLmxvZyhwYXNzd29yZCwgJ3Bhc3N3b3JkJylcclxuXHRcdGxldCB3YWxsZXRkZWM7XHJcblx0XHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnQlRDJzpcclxuXHRcdFx0XHR3YWxsZXRkZWMgPSBUb2tlblV0aWwuaW1wb3J0QnRjUHJpdmF0ZUtleShwcml2YXRlS2V5KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnRVRIJzpcclxuXHRcdFx0XHR3YWxsZXRkZWMgPSBUb2tlblV0aWwuaW1wb3J0RXRoUHJpdmF0ZUtleShwcml2YXRlS2V5KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnVFJYJzpcclxuXHRcdFx0XHR3YWxsZXRkZWMgPSBUb2tlblV0aWwuaW1wb3J0VHJvblByaXZhdGVLZXkocHJpdmF0ZUtleSk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0XHRsZXQgd2FsbGV0ID0gZnVsbFdhbGxldFt0eXBlXVswXTtcclxuXHRcdHdhbGxldC5wYXNzd29yZCA9IHBhc3N3b3JkO1xyXG5cdFx0d2FsbGV0LnByaXZhdGVLZXkgPSB3YWxsZXRkZWMucHJpdmF0ZUtleTtcclxuXHRcdHdhbGxldC5hZGRyZXNzID0gd2FsbGV0ZGVjLmFkZHJlc3M7XHJcblx0XHRcdHdhbGxldC5lbGxpcHNpc0FkZHJlc3MgPSB3YWxsZXQuYWRkcmVzcy5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyArIHdhbGxldC5hZGRyZXNzLnN1YnN0cmluZyhcclxuXHRcdFx0d2FsbGV0LmFkZHJlc3MubGVuZ3RoIC0gNixcclxuXHRcdFx0d2FsbGV0LmFkZHJlc3MubGVuZ3RoKTtcclxuXHRcdHdhbGxldEluZm9bdHlwZV0ucHVzaCh3YWxsZXQpO1xyXG5cdFx0Y29uc29sZS5sb2cod2FsbGV0SW5mbywgJ+W9k+WJjeengemSpeW7uueahCcpXHJcblx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3dhbGxldEluZm8nLCB3YWxsZXRJbmZvKTtcclxuXHRcdHVuaS5zZXRTdG9yYWdlU3luYygnd2FsbGV0Jywgd2FsbGV0KTtcclxuXHRcdHVuaS5zZXRTdG9yYWdlU3luYygnd2FsbGV0aScsIHdhbGxldC5hZGRyZXNzKTtcclxuXHR9LFxyXG5cdC8v6I635Y+W6ZKx5YyF5YiX6KGoXHJcblx0Z2V0V2FsbGV0TGlzdDogZnVuY3Rpb24odHlwZSkge1xyXG5cdFx0bGV0IHdhbGxldEluZm8gPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dhbGxldEluZm8nKTtcclxuXHRcdGxldCB3YWxsZXRMaXN0ID0gW107XHJcblx0XHRpZiAodHlwZSkge1xyXG5cdFx0XHR3YWxsZXRMaXN0ID0gd2FsbGV0SW5mb1t0eXBlXVxyXG5cdFx0XHRmb3IgKHZhciBrID0gMCwgbGVuZ3RoID0gd2FsbGV0TGlzdC5sZW5ndGg7IGsgPCBsZW5ndGg7IGsrKykge1xyXG5cdFx0XHRcdGxldCBhZGRyZXNzID0gd2FsbGV0TGlzdFtrXS5hZGRyZXNzO1xyXG5cdFx0XHRcdHdhbGxldExpc3Rba10uZWxsaXBzaXNBZGRyZXNzID0gYWRkcmVzcy5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyArIGFkZHJlc3Muc3Vic3RyaW5nKGFkZHJlc3MubGVuZ3RoIC0gNixcclxuXHRcdFx0XHRcdGFkZHJlc3MubGVuZ3RoKVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmb3IgKGxldCBvYmogaW4gd2FsbGV0SW5mbykge1xyXG5cdFx0XHRcdGZvciAodmFyIGsgPSAwLCBsZW5ndGggPSB3YWxsZXRJbmZvW29ial0ubGVuZ3RoOyBrIDwgbGVuZ3RoOyBrKyspIHtcclxuXHRcdFx0XHRcdGxldCBhZGRyZXNzID0gd2FsbGV0SW5mb1tvYmpdW2tdLmFkZHJlc3M7XHJcblxyXG5cdFx0XHRcdFx0d2FsbGV0SW5mb1tvYmpdW2tdLmVsbGlwc2lzQWRkcmVzcyA9IGFkZHJlc3Muc3Vic3RyaW5nKDAsIDYpICsgJy4uLicgKyBhZGRyZXNzLnN1YnN0cmluZyhcclxuXHRcdFx0XHRcdFx0YWRkcmVzcy5sZW5ndGggLSA2LFxyXG5cdFx0XHRcdFx0XHRhZGRyZXNzLmxlbmd0aCk7XHJcblx0XHRcdFx0XHR3YWxsZXRJbmZvW29ial1ba10udHlwZSA9IG9iajtcclxuXHRcdFx0XHRcdHdhbGxldExpc3QucHVzaCh3YWxsZXRJbmZvW29ial1ba10pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHdhbGxldExpc3Q7XHJcblx0fSxcclxuXHRzZWxlY3RXYWxsZXQ6IGZ1bmN0aW9uKHR5cGUsIGFkZHJlc3MpIHtcclxuXHRcdGNvbnNvbGUubG9nKCfpgInmi6npkrHljIUnKVxyXG5cdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXRpJywgYWRkcmVzcyk7XHJcblx0XHRsZXQgd2FsbGV0SW5mbyA9IHVuaS5nZXRTdG9yYWdlU3luYygnd2FsbGV0SW5mbycpO1xyXG5cdFx0bGV0IHdhbGxldExpc3QgPSB3YWxsZXRJbmZvW3R5cGVdO1xyXG5cdFx0Y29uc29sZS5sb2coKVxyXG5cdFx0Zm9yICh2YXIgayA9IDAsIGxlbmd0aCA9IHdhbGxldExpc3QubGVuZ3RoOyBrIDwgbGVuZ3RoOyBrKyspIHtcclxuXHRcdFx0aWYgKHdhbGxldExpc3Rba10uYWRkcmVzcyA9PSBhZGRyZXNzKSB7XHJcblx0XHRcdFx0d2FsbGV0TGlzdFtrXS5lbGxpcHNpc0FkZHJlc3MgPSBhZGRyZXNzLnN1YnN0cmluZygwLCA2KSArICcuLi4nICsgYWRkcmVzcy5zdWJzdHJpbmcoYWRkcmVzcy5sZW5ndGggLSA2LFxyXG5cdFx0XHRcdFx0YWRkcmVzcy5sZW5ndGgpXHJcblx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXQnLCB3YWxsZXRMaXN0W2tdKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cclxuXHRcdH1cclxuXHR9LFxyXG5cdHVwZGF0ZUJhbGFuY2U6IGFzeW5jIGZ1bmN0aW9uKHN1Y2Nlc3MpIHtcclxuXHRcdHVuaS5zZXRTdG9yYWdlU3luYygnaXNXYWxsZXQnLCB0cnVlKTtcclxuXHRcdGNvbnN0IHdhbGxldCA9IHVuaS5nZXRTdG9yYWdlU3luYygnd2FsbGV0Jyk7XHJcblx0XHRsZXQgcGFyYW1zID0ge1xyXG5cdFx0XHRjb2luTmFtZTogd2FsbGV0LnR5cGVcclxuXHRcdH1cclxuXHRcdGNvbnN0IG1haW5Db2luUCA9IGF3YWl0IGFwaS5nZXRDb2luUmF0ZShwYXJhbXMpO1xyXG5cdFx0cGFyYW1zLmNvaW5OYW1lID0gJ1VTRFQnO1xyXG5cdFx0Y29uc3QgdXNkdFUgPSBhd2FpdCBhcGkuZ2V0Q29pblJhdGUocGFyYW1zKTtcclxuXHRcdHdhbGxldC50b3RhbEJhbGFuY2VQcmljZSA9IDBcclxuXHRcdHdhbGxldC50b3RhbEJhbGFuY2VDbnlQcmljZT0wXHJcblx0XHRjb25zb2xlLmxvZyh1c2R0VSwgODg4OClcclxuXHRcdHN3aXRjaCAod2FsbGV0LnR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnQlRDJzpcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhcIui/m+adpUJUQ1wiKVxyXG5cdFx0XHRcdHdhbGxldC5iYWxhbmNlID0gYXdhaXQgQnRjVXRpbC5nZXRCYWxhbmNlKHdhbGxldC5hZGRyZXNzKVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdFVEgnOlxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKFwi6L+b5p2lRVRIXCIsd2FsbGV0LmJhbGFuY2UgKVxyXG5cdFx0XHRcdHdhbGxldC5iYWxhbmNlID0gYXdhaXQgRXRoVXRpbC5nZXRCYWxhbmNlKHdhbGxldC5hZGRyZXNzcyk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coXCLov5vmnaVFVEhcIix3YWxsZXQuYmFsYW5jZSApXHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCB3YWxsZXQuY29pbkxpc3QubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdHdhbGxldC5jb2luTGlzdFtpXS5iYWxhbmNlID0gYXdhaXQgRXRoVXRpbC5nZXRUb2tlbkJhbGFuY2Uod2FsbGV0LmFkZHJlc3MsIHdhbGxldC5jb2luTGlzdFtpXS5jb250cmFjdEFkZHJlc3MpO1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIui/m+adpUVUSFwiLHdhbGxldC5jb2luTGlzdFtpXS5iYWxhbmNlKVxyXG5cdFx0XHRcdFx0XHRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0d2FsbGV0LnRvdGFsQmFsYW5jZVByaWNlID0gd2FsbGV0LmNvaW5MaXN0WzFdLmJhbGFuY2VQcmljZT93YWxsZXQuY29pbkxpc3RbMV0uYmFsYW5jZVByaWNlOjA7XHJcblx0XHRcdFx0d2FsbGV0LnRvdGFsQmFsYW5jZUNueVByaWNlPXdhbGxldC5jb2luTGlzdFsxXS5iYWxhbmNlQ255UHJpY2U/d2FsbGV0LmNvaW5MaXN0WzFdLmJhbGFuY2VDbnlQcmljZTowO1xyXG5cdFx0XHRcdHdhbGxldC5jb2luTGlzdFsxXS5iYWxhbmNlUHJpY2UgPSAod2FsbGV0XHJcblx0XHRcdFx0XHQuY29pbkxpc3RbMV0uYmFsYW5jZSAqIHVzZHRVLmRhdGEucHJpY2VJblVzZCkudG9GaXhlZCgyKTtcclxuXHRcdFx0XHR3YWxsZXQuY29pbkxpc3RbMV0uYmFsYW5jZUNueVByaWNlID0gKHdhbGxldFxyXG5cdFx0XHRcdFx0LmNvaW5MaXN0WzFdLmJhbGFuY2UgKiB1c2R0VS5kYXRhLnByaWNlQ255KS50b0ZpeGVkKDIpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdUUlgnOlxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKFwi6L+b5p2lVFJYXCIpXHJcblx0XHRcdFx0d2FsbGV0LmJhbGFuY2UgPSBhd2FpdCBUcm9uVXRpbC5nZXRUcm9uQmFsYW5jZSh3YWxsZXQuYWRkcmVzcyk7XHJcblx0XHRcdFx0cGFyYW1zLmFkZHJlc3MgPSB3YWxsZXQuYWRkcmVzcztcclxuXHRcdFx0XHRwYXJhbXMuY2hhaW5OYW1lID0gd2FsbGV0LnR5cGU7XHJcblx0XHRcdFx0Y29uc3QgdHJvbkNvaW4gPSBhd2FpdCBhcGkuZ2V0QmFsYW5jZShwYXJhbXMpO1xyXG5cdFx0XHRcdHZhciBuZXdMaXN0PVtdO1xyXG5cdFx0XHRcdG5ld0xpc3QucHVzaCh3YWxsZXQuY29pbkxpc3RbMF0pXHJcblx0XHRcdFx0bmV3TGlzdC5wdXNoKHdhbGxldC5jb2luTGlzdFsxXSlcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHRyb25Db2luLmRhdGEubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGlmICh0cm9uQ29pbi5kYXRhW2ldLnRva2VuQWJiciA9PT0gJ1VTRFQnKSB7XHJcblx0XHRcdFx0XHRcdG5ld0xpc3RbMV0uYmFsYW5jZSA9IChOdW1iZXIodHJvbkNvaW4uZGF0YVtpXS5iYWxhbmNlKSAvIE1hdGgucG93KDEwLCB0cm9uQ29pblxyXG5cdFx0XHRcdFx0XHRcdC5kYXRhW2ldLnRva2VuRGVjaW1hbCkpO1xyXG5cdFx0XHRcdFx0XHRuZXdMaXN0WzFdLmJhbGFuY2VDbnlQcmljZSA9IChuZXdMaXN0WzFdLmJhbGFuY2UgKiB1c2R0VS5kYXRhLnByaWNlQ255KS50b0ZpeGVkKDIpO1xyXG5cdFx0XHRcdFx0XHRuZXdMaXN0WzFdLmJhbGFuY2VQcmljZSA9IChuZXdMaXN0WzFdLmJhbGFuY2UgKiB1c2R0VS5kYXRhLnByaWNlSW5Vc2QpLnRvRml4ZWQoMik7XHJcblx0XHRcdFx0XHRcdHdhbGxldC50b3RhbEJhbGFuY2VQcmljZSA9IG5ld0xpc3RbMV0uYmFsYW5jZVByaWNlXHJcblx0XHRcdFx0XHRcdHdhbGxldC50b3RhbEJhbGFuY2VDbnlQcmljZT1uZXdMaXN0WzFdLmJhbGFuY2VDbnlQcmljZVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coTnVtYmVyKHRyb25Db2luLmRhdGFbaV0uYmFsYW5jZSkgLyBNYXRoLnBvdygxMCwgdHJvbkNvaW4uZGF0YVtpXVxyXG5cdFx0XHRcdFx0XHRcdC50b2tlbkRlY2ltYWwpKVxyXG5cdFx0XHRcdFx0XHR2YXIgY29pbiA9IHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiB0cm9uQ29pbi5kYXRhW2ldLnRva2VuQWJicixcclxuXHRcdFx0XHRcdFx0XHR4bmFtZTogdHJvbkNvaW4uZGF0YVtpXS50b2tlbk5hbWUsXHJcblx0XHRcdFx0XHRcdFx0YmFsYW5jZTogKE51bWJlcih0cm9uQ29pbi5kYXRhW2ldLmJhbGFuY2UpIC8gTWF0aC5wb3coMTAsIHRyb25Db2luLmRhdGFbaV1cclxuXHRcdFx0XHRcdFx0XHRcdC50b2tlbkRlY2ltYWwpKSxcclxuXHRcdFx0XHRcdFx0XHRpY29uOiB0cm9uQ29pbi5kYXRhW2ldLnRva2VuTG9nbyxcclxuXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKHRyb25Db2luLmRhdGFbaV0udG9rZW5UeXBlID09PSAndHJjMjAnKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29pbi5jb250cmFjdEFkZHJlc3MgPSB0cm9uQ29pbi5kYXRhW2ldLnRva2VuSWRcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRjb2luLmNvbnRyYWN0QWRkcmVzcyA9IHRyb25Db2luLmRhdGFbaV0ub3duZXJfYWRkcmVzc1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdG5ld0xpc3QucHVzaChjb2luKVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHdhbGxldC5jb2luTGlzdD1uZXdMaXN0O1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdH1cclxuXHJcblx0XHR3YWxsZXQuZWxsaXBzaXNBZGRyZXNzPXdhbGxldC5hZGRyZXNzLnN1YnN0cmluZygwLCA2KSArICcuLi4nICsgd2FsbGV0LmFkZHJlc3Muc3Vic3RyaW5nKFxyXG5cdFx0XHRcdFx0XHR3YWxsZXQuYWRkcmVzcy5sZW5ndGggLSA2LFxyXG5cdFx0XHRcdFx0XHR3YWxsZXQuYWRkcmVzcy5sZW5ndGgpO1xyXG5cdFx0d2FsbGV0LmJhbGFuY2VQcmljZSA9ICh3YWxsZXQuYmFsYW5jZSAqIG1haW5Db2luUC5kYXRhLnByaWNlSW5Vc2QpLnRvRml4ZWQoMik7XHJcblx0XHR3YWxsZXQuYmFsYW5jZUNueVByaWNlID0gKHdhbGxldC5iYWxhbmNlICogbWFpbkNvaW5QLmRhdGEucHJpY2VDbnkpLnRvRml4ZWQoMik7XHJcblx0XHR3YWxsZXQudG90YWxCYWxhbmNlUHJpY2U9KE51bWJlcih3YWxsZXQudG90YWxCYWxhbmNlUHJpY2UpK051bWJlcih3YWxsZXQuYmFsYW5jZVByaWNlKSkudG9GaXhlZCgyKTtcclxuXHRcdHdhbGxldC50b3RhbEJhbGFuY2VDbnlQcmljZT0oTnVtYmVyKHdhbGxldC50b3RhbEJhbGFuY2VDbnlQcmljZSkrTnVtYmVyKHdhbGxldC5iYWxhbmNlQ255UHJpY2UpKS50b0ZpeGVkKDIpO1xyXG5cdFx0Y29uc29sZS5sb2coXCJ3YWxsZXQuYmFsYW5jZVByaWNlXCIsTnVtYmVyKHdhbGxldC50b3RhbEJhbGFuY2VQcmljZSkpXHJcblx0XHRjb25zb2xlLmxvZyhcIndhbGxldC5iYWxhbmNlQ255UHJpY2VcIix3YWxsZXQudG90YWxCYWxhbmNlUHJpY2UpXHJcblx0XHR3YWxsZXQuY29pbkxpc3RbMF0uYmFsYW5jZSA9IHdhbGxldC5iYWxhbmNlXHJcblx0XHR3YWxsZXQuY29pbkxpc3RbMF0uYmFsYW5jZVByaWNlID0gd2FsbGV0LmJhbGFuY2VQcmljZVxyXG5cdFx0d2FsbGV0LmNvaW5MaXN0WzBdLmJhbGFuY2VDbnlQcmljZSA9IHdhbGxldC5iYWxhbmNlQ255UHJpY2VcclxuXHRcdHVuaS5zZXRTdG9yYWdlU3luYygnd2FsbGV0Jyx3YWxsZXQpO1xyXG5cdFx0Y29uc3Qgd2FsbGV0SW5mbyA9IHVuaS5nZXRTdG9yYWdlU3luYygnd2FsbGV0SW5mbycpO1xyXG5cdFx0Zm9yICh2YXIgayA9IDAsIGxlbmd0aCA9IHdhbGxldEluZm9bd2FsbGV0LnR5cGVdLmxlbmd0aDsgayA8IGxlbmd0aDsgaysrKSB7XHJcblx0XHRcdGlmICh3YWxsZXRJbmZvW3dhbGxldC50eXBlXVtrXS5hZGRyZXNzID09PSB3YWxsZXQuYWRkcmVzcykge1xyXG5cdFx0XHRcdHdhbGxldEluZm9bd2FsbGV0LnR5cGVdW2tdID0gd2FsbGV0O1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3dhbGxldEluZm8nLCB3YWxsZXRJbmZvKTtcclxuXHRcdHVuaS5zZXRTdG9yYWdlU3luYygnaXNXYWxsZXQnLCBmYWxzZSk7XHJcblx0XHRyZXR1cm4gd2FsbGV0O1xyXG5cdH0sXHJcblxyXG5cdC8vIOWwgeijheWcsOWdgOaWueazlVxyXG5cdHVwZGF0ZUFkZHJlc3M6IGZ1bmN0aW9uKHR5cGUsIHZhbHVlLCBiaWdBZGRyZXNzLCBhZGRyZXNzTmFtZSkge1xyXG5cdFx0bGV0IHRoYXQgPSB0aGlzXHJcblx0XHRzd2l0Y2ggKHdhbGxldC50eXBlKSB7XHJcblx0XHRcdGNhc2UgJ0JUQyc6XHJcblxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdFVEgnOlxyXG5cclxuXHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ1RSWCc6XHJcblx0XHRcdFx0aWYgKHZhbHVlID09ICdFVEgnKSB7XHJcblx0XHRcdFx0XHRjb25zdCBnYWkgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ0VUSEFkZHJlc3NJbmZvJylcclxuXHRcdFx0XHRcdGNvbnN0IGdhaTIgPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ1RSWEFkZHJlc3NJbmZvJylcclxuXHRcdFx0XHRcdGNvbnN0IGluZGV4ID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdlZGl0SW5kZXgnKVxyXG5cdFx0XHRcdFx0bGV0IGV0aCA9IG5ldyBPYmplY3Q7XHJcblx0XHRcdFx0XHRldGguYWRkcmVzcyA9IGJpZ0FkZHJlc3M7XHJcblx0XHRcdFx0XHRldGgubmFtZSA9IGFkZHJlc3NOYW1lXHJcblx0XHRcdFx0XHRldGguY29pbkxpc3QgPSBbe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBcIkVUSFwiLFxyXG5cdFx0XHRcdFx0XHRuYW1lMjogXCJFVEhcIixcclxuXHRcdFx0XHRcdFx0eG5hbWU6ICdFdGhlcmV1bScsXHJcblx0XHRcdFx0XHRcdGljb246IHJlcXVpcmUoJ0Avc3RhdGljL3Rvbmd5b25oL0ZyYW1lMzI5OS5wbmcnKVxyXG5cdFx0XHRcdFx0fV07XHJcblx0XHRcdFx0XHRnYWkyLnNwbGljZShpbmRleCwgMSlcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnVFJYQWRkcmVzc0luZm8nLCBnYWkyKVxyXG5cdFx0XHRcdFx0Z2FpLnB1c2goZXRoKTtcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnRVRIQWRkcmVzc0luZm8nLCBnYWkpXHJcblx0XHRcdFx0XHR1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6ICdTdWNjZXNzZnVsbHknLFxyXG5cdFx0XHRcdFx0XHRpY29uOiAnc3VjY2VzcycsXHJcblx0XHRcdFx0XHRcdGR1cmF0aW9uOiAxNTAwXHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0dW5pLm5hdmlnYXRlVG8oe1xyXG5cdFx0XHRcdFx0XHR1cmw6ICcuLi9hZGRyZXNzL2luZGV4J1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdH1cclxuXHJcblx0fSxcclxuXHQvLyDmjIfnurnor4bliKtcclxuXHRmaW5nZXIoKSB7XHJcblxyXG5cdFx0aWYgKCFwbHVzLmZpbmdlcnByaW50LmlzU3VwcG9ydCgpKSB7XHJcblx0XHRcdHRoaXMucmVzdWx0ID0gJ+atpOiuvuWkh+S4jeaUr+aMgeaMh+e6ueivhuWIqyc7XHJcblx0XHRcdHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xyXG5cdFx0fSBlbHNlIGlmICghcGx1cy5maW5nZXJwcmludC5pc0tleWd1YXJkU2VjdXJlKCkpIHtcclxuXHRcdFx0dGhpcy5yZXN1bHQgPSAn5q2k6K6+5aSH5pyq6K6+572u5a+G56CB6ZSB5bGP77yM5peg5rOV5L2/55So5oyH57q56K+G5YirJztcclxuXHRcdFx0dGhpcy5kaXNhYmxlZCA9IHRydWU7XHJcblx0XHR9IGVsc2UgaWYgKCFwbHVzLmZpbmdlcnByaW50LmlzRW5yb2xsZWRGaW5nZXJwcmludHMoKSkge1xyXG5cdFx0XHR0aGlzLnJlc3VsdCA9ICfmraTorr7lpIfmnKrlvZXlhaXmjIfnurnvvIzor7fliLDorr7nva7kuK3lvIDlkK8nO1xyXG5cdFx0XHR0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMucmVzdWx0ID0gJ+atpOiuvuWkh+aUr+aMgeaMh+e6ueivhuWIqyc7XHJcblx0XHRcdHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcclxuXHRcdH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cdH0sXHJcblxyXG5cdGZpbmdlcnByaW50OiBmdW5jdGlvbihzZXR0KSB7XHJcblx0XHRsZXQgYmx0eXBlID0gdHJ1ZTtcclxuXHJcblx0XHRpZiAoIXBsdXMuZmluZ2VycHJpbnQuaXNTdXBwb3J0KCkpIHtcclxuXHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0dGl0bGU6ICdUaGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGZpbmdlcnByaW50IGlkZW50aWZpY2F0aW9uJyxcclxuXHRcdFx0XHRpY29uOiAnbm9uZScsXHJcblx0XHRcdFx0ZHVyYXRpb246IDE1MDBcclxuXHRcdFx0fSlcclxuXHRcdFx0Ly8gdGhpcy5kaXNhYmxlZCA9IHRydWU7XHJcblx0XHR9IGVsc2UgaWYgKCFwbHVzLmZpbmdlcnByaW50LmlzS2V5Z3VhcmRTZWN1cmUoKSkge1xyXG5cdFx0XHR1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0XHR0aXRsZTogJ1RoaXMgZGV2aWNlIGlzIG5vdCBlcXVpcHBlZCB3aXRoIGEgcGFzc3dvcmQgbG9jayBzY3JlZW4gYW5kIGNhbm5vdCB1c2UgZmluZ2VycHJpbnQgaWRlbnRpZmljYXRpb24nLFxyXG5cdFx0XHRcdGljb246ICdub25lJyxcclxuXHRcdFx0XHRkdXJhdGlvbjogMTUwMFxyXG5cdFx0XHR9KVxyXG5cclxuXHRcdH0gZWxzZSBpZiAoIXBsdXMuZmluZ2VycHJpbnQuaXNFbnJvbGxlZEZpbmdlcnByaW50cygpKSB7XHJcblx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdHRpdGxlOiAnVGhlcmUgaXMgbm8gZmluZ2VycHJpbnQgZW50ZXJlZCBpbiB0aGlzIGRldmljZS4gUGxlYXNlIHR1cm4gaXQgb24gaW4gdGhlIHNldHRpbmcnLFxyXG5cdFx0XHRcdGljb246ICdub25lJyxcclxuXHRcdFx0XHRkdXJhdGlvbjogMTUwMFxyXG5cdFx0XHR9KVxyXG5cdFx0XHQvLyB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIHRoaXMucmVzdWx0ID0gJ+atpOiuvuWkh+aUr+aMgeaMh+e6ueivhuWIqyc7XHJcblx0XHRcdC8vIC8vIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cdFx0XHRsZXQgdGhhdCA9IHRoaXM7XHJcblx0XHRcdGxldCBmb3JTZXR0ID0gdHJ1ZTtcclxuXHJcblx0XHRcdHBsdXMuZmluZ2VycHJpbnQuYXV0aGVudGljYXRlKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHBsdXMubmF0aXZlVUkuY2xvc2VXYWl0aW5nKCk7IC8v5YW85a65QW5kcm9pZOW5s+WPsOWFs+mXreetieW+heahhlx0XHJcblx0XHRcdFx0Ly8gdW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0Ly8gXHR0aXRsZTogJ0ZpbmdlcnByaW50IGlkZW50aWZpY2F0aW9uIHN1Y2NlZWRlZCcsXHJcblx0XHRcdFx0Ly8gXHRpY29uOiAnbm9uZScsXHJcblx0XHRcdFx0Ly8gXHRkdXJhdGlvbjogMTUwMCxcclxuXHRcdFx0XHQvLyBcdFx0fSlcclxuXHRcdFx0XHQvLyDlrZjlgqjorr7nva7ph4zlvIDlkK/mjIfnurnlkI7nmoTnirbmgIHvvIzpmpDol4/kvb/nlKjlr4bnoIFcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhmb3JTZXR0LCAxMjEyMSlcclxuXHRcdFx0XHRpZiAoc2V0dCkge1xyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdmaW5nZXJQYXNzJywgdHJ1ZSlcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGZvclNldHQsIDEyMTIxKVxyXG5cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly9wbHVzLm5hdGl2ZVVJLmFsZXJ0KCdGaW5nZXJwcmludCBpZGVudGlmaWNhdGlvbiBzdWNjZWVkZWQnKTtcclxuXHRcdFx0fSwgZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRcdHN3aXRjaCAoZS5jb2RlKSB7XHJcblx0XHRcdFx0XHRjYXNlIGUuQVVUSEVOVElDQVRFX01JU01BVENIOlxyXG5cdFx0XHRcdFx0XHRwbHVzLm5hdGl2ZVVJLnRvYXN0KCdGaW5nZXJwcmludCBtYXRjaGluZyBmYWlsZWQsIHBsZWFzZSByZS1lbnRlcicpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgZS5BVVRIRU5USUNBVEVfT1ZFUkxJTUlUOlxyXG5cdFx0XHRcdFx0XHRwbHVzLm5hdGl2ZVVJLmNsb3NlV2FpdGluZygpOyAvL+WFvOWuuUFuZHJvaWTlubPlj7DlhbPpl63nrYnlvoXmoYZcclxuXHRcdFx0XHRcdFx0cGx1cy5uYXRpdmVVSS5hbGVydChcclxuXHRcdFx0XHRcdFx0XHQnVGhlIG51bWJlciBvZiBmaW5nZXJwcmludCBpZGVudGlmaWNhdGlvbiBmYWlsdXJlcyBleGNlZWRzIHRoZSBsaW1pdC4gUGxlYXNlIHVzZSBvdGhlciBtZXRob2RzIGZvciBhdXRoZW50aWNhdGlvbidcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIGUuQ0FOQ0VMOlxyXG5cdFx0XHRcdFx0XHRwbHVzLm5hdGl2ZVVJLnRvYXN0KCdSZWNvZ25pdGlvbiBoYXMgYmVlbiBjYW5jZWxsZWQnKTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRwbHVzLm5hdGl2ZVVJLmNsb3NlV2FpdGluZygpOyAvL+WFvOWuuUFuZHJvaWTlubPlj7DlhbPpl63nrYnlvoXmoYZcclxuXHRcdFx0XHRcdFx0cGx1cy5uYXRpdmVVSS5hbGVydCgnRmluZ2VycHJpbnQgaWRlbnRpZmljYXRpb24gZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluJyk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdC8vIEFuZHJvaWTlubPlj7DmiYvliqjlvLnlh7rnrYnlvoXmj5DnpLrmoYYgXHJcblx0XHRcdGlmICgnQW5kcm9pZCcgPT0gcGx1cy5vcy5uYW1lKSB7XHJcblx0XHRcdFx0dGhpcy5zaG93ID0gdHJ1ZTtcclxuXHRcdFx0XHQvKiBwbHVzLm5hdGl2ZVVJLnNob3dXYWl0aW5nKCfmjIfnurnor4bliKvkuK0uLi4nKS5vbmNsb3NlID0gZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0XHRwbHVzLmZpbmdlcnByaW50LmNhbmNlbCgpO1xyXG5cdFx0XHRcdH0gKi9cclxuXHRcdFx0fVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHRcdH1cclxuXHJcblxyXG5cclxuXHR9LFxyXG5cdHByaW50Q2FuY2VsOiBmdW5jdGlvbigpIHtcclxuXHRcdHBsdXMuZmluZ2VycHJpbnQuY2FuY2VsKCk7XHJcblx0XHQvLyB0aGlzLnJlc3VsdD1cIuWBnOatouaMh+e6ueivhuWIq1wiXHJcblx0fSxcclxufVxyXG5leHBvcnQgZGVmYXVsdCBXYWxsZXRVdGlsXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///962\n"); +eval("/* WEBPACK VAR INJECTION */(function(__f__) {Object.defineProperty(exports, \"__esModule\", { value: true });exports.default = void 0;var _regenerator = _interopRequireDefault(__webpack_require__(/*! ./node_modules/@babel/runtime/regenerator */ 44));var _TokenUtil = _interopRequireDefault(__webpack_require__(/*! ./TokenUtil.js */ 38));\nvar _BtcUtil = _interopRequireDefault(__webpack_require__(/*! ./BtcUtil.js */ 963));\nvar _TronUtil = _interopRequireDefault(__webpack_require__(/*! ./TronUtil.js */ 964));\nvar _EthUtil = _interopRequireDefault(__webpack_require__(/*! ./EthUtil.js */ 965));\nvar _api = _interopRequireDefault(__webpack_require__(/*! ./api.js */ 582));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {try {var info = gen[key](arg);var value = info.value;} catch (error) {reject(error);return;}if (info.done) {resolve(value);} else {Promise.resolve(value).then(_next, _throw);}}function _asyncToGenerator(fn) {return function () {var self = this,args = arguments;return new Promise(function (resolve, reject) {var gen = fn.apply(self, args);function _next(value) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);}function _throw(err) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);}_next(undefined);});};}\n\nvar fullWallet = {\n \"BTC\": [{\n balance: 0,\n name: \"BTC\",\n type: 'BTC',\n coinList: [{\n name: \"BTC\",\n xname: 'Bitcoin',\n balance: 0,\n icon: __webpack_require__(/*! @/static/tongyonh/bye.png */ 518) }] }],\n\n\n \"ETH\": [{\n balance: 0,\n name: \"ETH\",\n type: 'ETH',\n coinList: [{\n name: \"ETH\",\n xname: 'Ethereum',\n balance: 0,\n icon: __webpack_require__(/*! @/static/tongyonh/Frame3299.png */ 519) },\n\n {\n name: \"USDT\",\n xname: 'Tether USD',\n balance: 0,\n contractAddress: '0xdac17f958d2ee523a2206206994597c13d831ec7',\n icon: __webpack_require__(/*! @/static/tongyonh/img500.png */ 520) }] }],\n\n\n\n \"TRX\": [{\n balance: 0,\n name: \"TRX\",\n type: 'TRX',\n coinList: [{\n name: \"TRX\",\n xname: 'TRON',\n balance: 0,\n icon: __webpack_require__(/*! @/static/tongyonh/tron1.png */ 521) },\n\n {\n name: \"USDT\",\n xname: 'Tether USD',\n balance: 0,\n contractAddress: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',\n icon: __webpack_require__(/*! @/static/tongyonh/tether_usd.png */ 522) }] }] };\n\n\n\n\n\nvar WalletUtil = {\n //初次创建钱包\n initialWallet: function initialWallet(mnemonic, password) {\n __f__(\"log\", password, 'password', \" at utils/WalletUtil.js:62\");\n var walletInfo = fullWallet;\n var btc = _TokenUtil.default.generateBtc(mnemonic);\n walletInfo.BTC[0].password = password;\n walletInfo.BTC[0].mnemonic = mnemonic;\n walletInfo.BTC[0].privateKey = btc.privateKey;\n walletInfo.BTC[0].address = btc.address;\n walletInfo.BTC[0].ellipsisAddress = walletInfo.BTC[0].address.substring(0, 6) + '...' + walletInfo.BTC[\n 0].address.substring(walletInfo.BTC[0].address.length - 6,\n walletInfo.BTC[0].address.length);\n var eth = _TokenUtil.default.generateEth(mnemonic);\n walletInfo.ETH[0].password = password;\n walletInfo.ETH[0].mnemonic = mnemonic;\n walletInfo.ETH[0].privateKey = eth.privateKey;\n walletInfo.ETH[0].address = eth.address;\n var tron = _TokenUtil.default.generateTron(mnemonic);\n walletInfo.TRX[0].mnemonic = mnemonic;\n walletInfo.TRX[0].password = password;\n walletInfo.TRX[0].privateKey = tron.privateKey;\n walletInfo.TRX[0].address = tron.address;\n var wallet = walletInfo.BTC[0];\n uni.setStorageSync('walletInfo', walletInfo);\n uni.setStorageSync('wallet', wallet);\n this.updateBalance();\n },\n //修改钱包名称\n updateWalletName: function updateWalletName(type, address, name) {\n var walletInfo = uni.getStorageSync('walletInfo');\n var walletList = walletInfo[type];\n var wallet = uni.getStorageSync('wallet');\n for (var k = 0, length = walletList.length; k < length; k++) {\n if (walletList[k].address === address) {\n walletList[k].name = name;\n if (wallet.address == walletList[k].address) {\n wallet.name = name;\n uni.setStorageSync('wallet', wallet);\n }\n break;\n }\n }\n uni.setStorageSync('walletInfo', walletInfo);\n },\n //助记词新建\n mnemonicEstablishWallet: function mnemonicEstablishWallet(type, mnemonic, password) {\n var walletInfo = uni.getStorageSync('walletInfo');\n __f__(\"log\", password, 'password', type, \" at utils/WalletUtil.js:107\");\n var walletdec;\n switch (type) {\n case 'BTC':\n walletdec = _TokenUtil.default.generateBtc(mnemonic);\n if (uni.getStorageSync('walletInfo')) {\n uni.setStorageSync('walleti', walletdec.address);\n }\n\n break;\n case 'ETH':\n walletdec = _TokenUtil.default.generateEth(mnemonic);\n if (uni.getStorageSync('walletInfo')) {\n uni.setStorageSync('walleti', walletdec.address);\n }\n\n break;\n case 'TRX':\n\n walletdec = _TokenUtil.default.generateTron(mnemonic);\n if (uni.getStorageSync('walletInfo')) {\n uni.setStorageSync('walleti', walletdec.address);\n }\n\n break;}\n\n var wallet = fullWallet[type][0];\n wallet.password = password;\n wallet.privateKey = walletdec.privateKey;\n wallet.mnemonic = mnemonic;\n wallet.address = walletdec.address;\n __f__(\"log\", wallet, \" at utils/WalletUtil.js:138\");\n walletInfo[type].push(wallet);\n __f__(\"log\", walletInfo, 1111111, \" at utils/WalletUtil.js:140\");\n uni.setStorageSync('walletInfo', walletInfo);\n uni.setStorageSync('wallet', wallet);\n uni.setStorageSync('walleti', wallet.address);\n\n },\n //私钥新建\n privateKeyEstablishWallet: function privateKeyEstablishWallet(type, privateKey, password) {\n var walletInfo = uni.getStorageSync('walletInfo');\n __f__(\"log\", type, \" at utils/WalletUtil.js:149\");\n __f__(\"log\", password, 'password', \" at utils/WalletUtil.js:150\");\n var walletdec;\n switch (type) {\n case 'BTC':\n walletdec = _TokenUtil.default.importBtcPrivateKey(privateKey);\n break;\n case 'ETH':\n walletdec = _TokenUtil.default.importEthPrivateKey(privateKey);\n break;\n case 'TRX':\n walletdec = _TokenUtil.default.importTronPrivateKey(privateKey);\n break;}\n\n var wallet = fullWallet[type][0];\n wallet.password = password;\n wallet.privateKey = walletdec.privateKey;\n wallet.address = walletdec.address;\n wallet.ellipsisAddress = wallet.address.substring(0, 6) + '...' + wallet.address.substring(\n wallet.address.length - 6,\n wallet.address.length);\n walletInfo[type].push(wallet);\n __f__(\"log\", walletInfo, '当前私钥建的', \" at utils/WalletUtil.js:171\");\n uni.setStorageSync('walletInfo', walletInfo);\n uni.setStorageSync('wallet', wallet);\n uni.setStorageSync('walleti', wallet.address);\n },\n //获取钱包列表\n getWalletList: function getWalletList(type) {\n var walletInfo = uni.getStorageSync('walletInfo');\n var walletList = [];\n if (type) {\n walletList = walletInfo[type];\n for (var k = 0, length = walletList.length; k < length; k++) {\n var address = walletList[k].address;\n walletList[k].ellipsisAddress = address.substring(0, 6) + '...' + address.substring(address.length - 6,\n address.length);\n }\n } else {\n for (var obj in walletInfo) {\n for (var k = 0, length = walletInfo[obj].length; k < length; k++) {\n var _address = walletInfo[obj][k].address;\n\n walletInfo[obj][k].ellipsisAddress = _address.substring(0, 6) + '...' + _address.substring(\n _address.length - 6,\n _address.length);\n walletInfo[obj][k].type = obj;\n walletList.push(walletInfo[obj][k]);\n }\n }\n }\n return walletList;\n },\n selectWallet: function selectWallet(type, address) {\n __f__(\"log\", '选择钱包', \" at utils/WalletUtil.js:203\");\n uni.setStorageSync('walleti', address);\n var walletInfo = uni.getStorageSync('walletInfo');\n var walletList = walletInfo[type];\n __f__(\"log\", \" at utils/WalletUtil.js:207\");\n for (var k = 0, length = walletList.length; k < length; k++) {\n if (walletList[k].address == address) {\n walletList[k].ellipsisAddress = address.substring(0, 6) + '...' + address.substring(address.length - 6,\n address.length);\n uni.setStorageSync('wallet', walletList[k]);\n break;\n }\n\n }\n },\n updateBalance: function () {var _updateBalance = _asyncToGenerator( /*#__PURE__*/_regenerator.default.mark(function _callee(success) {var wallet, params, mainCoinP, usdtU, i, tronCoin, newList, _i, coin, walletInfo, k, length;return _regenerator.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0:\n uni.setStorageSync('isWallet', true);\n wallet = uni.getStorageSync('wallet');\n params = {\n coinName: wallet.type };_context.next = 5;return (\n\n _api.default.getCoinRate(params));case 5:mainCoinP = _context.sent;\n params.coinName = 'USDT';_context.next = 9;return (\n _api.default.getCoinRate(params));case 9:usdtU = _context.sent;\n wallet.totalBalancePrice = 0;\n wallet.totalBalanceCnyPrice = 0;\n __f__(\"log\", usdtU, 8888, \" at utils/WalletUtil.js:229\");_context.t0 =\n wallet.type;_context.next = _context.t0 ===\n 'BTC' ? 16 : _context.t0 ===\n\n\n\n 'ETH' ? 21 : _context.t0 ===\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n 'TRX' ? 40 : 55;break;case 16:__f__(\"log\", \"进来BTC\", \" at utils/WalletUtil.js:232\");_context.next = 19;return _BtcUtil.default.getBalance(wallet.address);case 19:wallet.balance = _context.sent;return _context.abrupt(\"break\", 55);case 21:__f__(\"log\", \"进来ETH\", wallet.balance, \" at utils/WalletUtil.js:236\");_context.next = 24;return _EthUtil.default.getBalance(wallet.address);case 24:wallet.balance = _context.sent;__f__(\"log\", \"进来ETH\", wallet.balance, \" at utils/WalletUtil.js:238\");i = 1;case 27:if (!(i < wallet.coinList.length)) {_context.next = 35;break;}_context.next = 30;return _EthUtil.default.getTokenBalance(wallet.address, wallet.coinList[i].contractAddress);case 30:wallet.coinList[i].balance = _context.sent;__f__(\"log\", \"进来ETH\", wallet.coinList[i].balance, \" at utils/WalletUtil.js:241\");case 32:i++;_context.next = 27;break;case 35:wallet.totalBalancePrice = wallet.coinList[1].balancePrice ? wallet.coinList[1].balancePrice : 0;wallet.totalBalanceCnyPrice = wallet.coinList[1].balanceCnyPrice ? wallet.coinList[1].balanceCnyPrice : 0;wallet.coinList[1].balancePrice = (wallet.coinList[1].balance * usdtU.data.priceInUsd).toFixed(2);wallet.coinList[1].balanceCnyPrice = (wallet.coinList[1].balance * usdtU.data.priceCny).toFixed(2);return _context.abrupt(\"break\", 55);case 40:\n __f__(\"log\", \"进来TRX\", \" at utils/WalletUtil.js:252\");_context.next = 43;return (\n _TronUtil.default.getTronBalance(wallet.address));case 43:wallet.balance = _context.sent;\n params.address = wallet.address;\n params.chainName = wallet.type;_context.next = 48;return (\n _api.default.getBalance(params));case 48:tronCoin = _context.sent;\n newList = [];\n newList.push(wallet.coinList[0]);\n newList.push(wallet.coinList[1]);\n for (_i = 1; _i < tronCoin.data.length; _i++) {\n if (tronCoin.data[_i].tokenAbbr === 'USDT') {\n newList[1].balance = Number(tronCoin.data[_i].balance) / Math.pow(10, tronCoin.\n data[_i].tokenDecimal);\n newList[1].balanceCnyPrice = (newList[1].balance * usdtU.data.priceCny).toFixed(2);\n newList[1].balancePrice = (newList[1].balance * usdtU.data.priceInUsd).toFixed(2);\n wallet.totalBalancePrice = newList[1].balancePrice;\n wallet.totalBalanceCnyPrice = newList[1].balanceCnyPrice;\n } else {\n __f__(\"log\", Number(tronCoin.data[_i].balance) / Math.pow(10, tronCoin.data[_i].\n tokenDecimal), \" at utils/WalletUtil.js:269\");\n coin = {\n name: tronCoin.data[_i].tokenAbbr,\n xname: tronCoin.data[_i].tokenName,\n balance: Number(tronCoin.data[_i].balance) / Math.pow(10, tronCoin.data[_i].\n tokenDecimal),\n icon: tronCoin.data[_i].tokenLogo };\n\n\n if (tronCoin.data[_i].tokenType === 'trc20') {\n coin.contractAddress = tronCoin.data[_i].tokenId;\n } else {\n coin.contractAddress = tronCoin.data[_i].owner_address;\n }\n newList.push(coin);\n }\n\n\n }\n wallet.coinList = newList;return _context.abrupt(\"break\", 55);case 55:\n\n\n\n\n wallet.ellipsisAddress = wallet.address.substring(0, 6) + '...' + wallet.address.substring(\n wallet.address.length - 6,\n wallet.address.length);\n wallet.balancePrice = (wallet.balance * mainCoinP.data.priceInUsd).toFixed(2);\n wallet.balanceCnyPrice = (wallet.balance * mainCoinP.data.priceCny).toFixed(2);\n wallet.totalBalancePrice = (Number(wallet.totalBalancePrice) + Number(wallet.balancePrice)).toFixed(2);\n wallet.totalBalanceCnyPrice = (Number(wallet.totalBalanceCnyPrice) + Number(wallet.balanceCnyPrice)).toFixed(2);\n __f__(\"log\", \"wallet.balancePrice\", Number(wallet.totalBalancePrice), \" at utils/WalletUtil.js:301\");\n __f__(\"log\", \"wallet.balanceCnyPrice\", wallet.totalBalancePrice, \" at utils/WalletUtil.js:302\");\n wallet.coinList[0].balance = wallet.balance;\n wallet.coinList[0].balancePrice = wallet.balancePrice;\n wallet.coinList[0].balanceCnyPrice = wallet.balanceCnyPrice;\n uni.setStorageSync('wallet', wallet);\n walletInfo = uni.getStorageSync('walletInfo');\n k = 0, length = walletInfo[wallet.type].length;case 68:if (!(k < length)) {_context.next = 75;break;}if (!(\n walletInfo[wallet.type][k].address === wallet.address)) {_context.next = 72;break;}\n walletInfo[wallet.type][k] = wallet;return _context.abrupt(\"break\", 75);case 72:k++;_context.next = 68;break;case 75:\n\n\n\n uni.setStorageSync('walletInfo', walletInfo);\n uni.setStorageSync('isWallet', false);return _context.abrupt(\"return\",\n wallet);case 78:case \"end\":return _context.stop();}}}, _callee);}));function updateBalance(_x) {return _updateBalance.apply(this, arguments);}return updateBalance;}(),\n\n\n // 封装地址方法\n updateAddress: function updateAddress(type, value, bigAddress, addressName) {\n var that = this;\n switch (wallet.type) {\n case 'BTC':\n\n break;\n case 'ETH':\n\n\n break;\n case 'TRX':\n if (value == 'ETH') {\n var gai = uni.getStorageSync('ETHAddressInfo');\n var gai2 = uni.getStorageSync('TRXAddressInfo');\n var index = uni.getStorageSync('editIndex');\n var eth = new Object();\n eth.address = bigAddress;\n eth.name = addressName;\n eth.coinList = [{\n name: \"ETH\",\n name2: \"ETH\",\n xname: 'Ethereum',\n icon: __webpack_require__(/*! @/static/tongyonh/Frame3299.png */ 519) }];\n\n gai2.splice(index, 1);\n uni.setStorageSync('TRXAddressInfo', gai2);\n gai.push(eth);\n uni.setStorageSync('ETHAddressInfo', gai);\n uni.showToast({\n title: 'Successfully',\n icon: 'success',\n duration: 1500 });\n\n uni.navigateTo({\n url: '../address/index' });\n\n }\n\n break;}\n\n\n\n },\n // 指纹识别\n finger: function finger() {\n\n if (!plus.fingerprint.isSupport()) {\n this.result = '此设备不支持指纹识别';\n this.disabled = true;\n } else if (!plus.fingerprint.isKeyguardSecure()) {\n this.result = '此设备未设置密码锁屏,无法使用指纹识别';\n this.disabled = true;\n } else if (!plus.fingerprint.isEnrolledFingerprints()) {\n this.result = '此设备未录入指纹,请到设置中开启';\n this.disabled = true;\n } else {\n this.result = '此设备支持指纹识别';\n this.disabled = false;\n }\n\n\n\n\n\n\n\n\n },\n\n fingerprint: function fingerprint(sett) {\n var bltype = true;\n\n if (!plus.fingerprint.isSupport()) {\n uni.showToast({\n title: 'This device does not support fingerprint identification',\n icon: 'none',\n duration: 1500 });\n\n // this.disabled = true;\n } else if (!plus.fingerprint.isKeyguardSecure()) {\n uni.showToast({\n title: 'This device is not equipped with a password lock screen and cannot use fingerprint identification',\n icon: 'none',\n duration: 1500 });\n\n\n } else if (!plus.fingerprint.isEnrolledFingerprints()) {\n uni.showToast({\n title: 'There is no fingerprint entered in this device. Please turn it on in the setting',\n icon: 'none',\n duration: 1500 });\n\n // this.disabled = true;\n } else {\n // this.result = '此设备支持指纹识别';\n // // this.disabled = false;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n var that = this;\n var forSett = true;\n\n plus.fingerprint.authenticate(function () {\n plus.nativeUI.closeWaiting(); //兼容Android平台关闭等待框\t\n // uni.showToast({\n // \ttitle: 'Fingerprint identification succeeded',\n // \ticon: 'none',\n // \tduration: 1500,\n // \t\t})\n // 存储设置里开启指纹后的状态,隐藏使用密码\n __f__(\"log\", forSett, 12121, \" at utils/WalletUtil.js:444\");\n if (sett) {\n uni.setStorageSync('fingerPass', true);\n __f__(\"log\", forSett, 12121, \" at utils/WalletUtil.js:447\");\n\n }\n //plus.nativeUI.alert('Fingerprint identification succeeded');\n }, function (e) {\n switch (e.code) {\n case e.AUTHENTICATE_MISMATCH:\n plus.nativeUI.toast('Fingerprint matching failed, please re-enter');\n break;\n case e.AUTHENTICATE_OVERLIMIT:\n plus.nativeUI.closeWaiting(); //兼容Android平台关闭等待框\n plus.nativeUI.alert(\n 'The number of fingerprint identification failures exceeds the limit. Please use other methods for authentication');\n\n break;\n case e.CANCEL:\n plus.nativeUI.toast('Recognition has been cancelled');\n break;\n default:\n plus.nativeUI.closeWaiting(); //兼容Android平台关闭等待框\n plus.nativeUI.alert('Fingerprint identification failed, please try again');\n break;}\n\n });\n // Android平台手动弹出等待提示框 \n if ('Android' == plus.os.name) {\n this.show = true;\n /* plus.nativeUI.showWaiting('指纹识别中...').onclose = function() {\r\n \tplus.fingerprint.cancel();\r\n } */\n }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n }\n\n\n\n },\n printCancel: function printCancel() {\n plus.fingerprint.cancel();\n // this.result=\"停止指纹识别\"\n } };var _default =\n\nWalletUtil;exports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 28)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vdXRpbHMvV2FsbGV0VXRpbC5qcyJdLCJuYW1lcyI6WyJmdWxsV2FsbGV0IiwiYmFsYW5jZSIsIm5hbWUiLCJ0eXBlIiwiY29pbkxpc3QiLCJ4bmFtZSIsImljb24iLCJyZXF1aXJlIiwiY29udHJhY3RBZGRyZXNzIiwiV2FsbGV0VXRpbCIsImluaXRpYWxXYWxsZXQiLCJtbmVtb25pYyIsInBhc3N3b3JkIiwid2FsbGV0SW5mbyIsImJ0YyIsIlRva2VuVXRpbCIsImdlbmVyYXRlQnRjIiwiQlRDIiwicHJpdmF0ZUtleSIsImFkZHJlc3MiLCJlbGxpcHNpc0FkZHJlc3MiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJldGgiLCJnZW5lcmF0ZUV0aCIsIkVUSCIsInRyb24iLCJnZW5lcmF0ZVRyb24iLCJUUlgiLCJ3YWxsZXQiLCJ1bmkiLCJzZXRTdG9yYWdlU3luYyIsInVwZGF0ZUJhbGFuY2UiLCJ1cGRhdGVXYWxsZXROYW1lIiwiZ2V0U3RvcmFnZVN5bmMiLCJ3YWxsZXRMaXN0IiwiayIsIm1uZW1vbmljRXN0YWJsaXNoV2FsbGV0Iiwid2FsbGV0ZGVjIiwicHVzaCIsInByaXZhdGVLZXlFc3RhYmxpc2hXYWxsZXQiLCJpbXBvcnRCdGNQcml2YXRlS2V5IiwiaW1wb3J0RXRoUHJpdmF0ZUtleSIsImltcG9ydFRyb25Qcml2YXRlS2V5IiwiZ2V0V2FsbGV0TGlzdCIsIm9iaiIsInNlbGVjdFdhbGxldCIsInN1Y2Nlc3MiLCJwYXJhbXMiLCJjb2luTmFtZSIsImFwaSIsImdldENvaW5SYXRlIiwibWFpbkNvaW5QIiwidXNkdFUiLCJ0b3RhbEJhbGFuY2VQcmljZSIsInRvdGFsQmFsYW5jZUNueVByaWNlIiwiQnRjVXRpbCIsImdldEJhbGFuY2UiLCJFdGhVdGlsIiwiaSIsImdldFRva2VuQmFsYW5jZSIsImJhbGFuY2VQcmljZSIsImJhbGFuY2VDbnlQcmljZSIsImRhdGEiLCJwcmljZUluVXNkIiwidG9GaXhlZCIsInByaWNlQ255IiwiVHJvblV0aWwiLCJnZXRUcm9uQmFsYW5jZSIsImNoYWluTmFtZSIsInRyb25Db2luIiwibmV3TGlzdCIsInRva2VuQWJiciIsIk51bWJlciIsIk1hdGgiLCJwb3ciLCJ0b2tlbkRlY2ltYWwiLCJjb2luIiwidG9rZW5OYW1lIiwidG9rZW5Mb2dvIiwidG9rZW5UeXBlIiwidG9rZW5JZCIsIm93bmVyX2FkZHJlc3MiLCJ1cGRhdGVBZGRyZXNzIiwidmFsdWUiLCJiaWdBZGRyZXNzIiwiYWRkcmVzc05hbWUiLCJ0aGF0IiwiZ2FpIiwiZ2FpMiIsImluZGV4IiwiT2JqZWN0IiwibmFtZTIiLCJzcGxpY2UiLCJzaG93VG9hc3QiLCJ0aXRsZSIsImR1cmF0aW9uIiwibmF2aWdhdGVUbyIsInVybCIsImZpbmdlciIsInBsdXMiLCJmaW5nZXJwcmludCIsImlzU3VwcG9ydCIsInJlc3VsdCIsImRpc2FibGVkIiwiaXNLZXlndWFyZFNlY3VyZSIsImlzRW5yb2xsZWRGaW5nZXJwcmludHMiLCJzZXR0IiwiYmx0eXBlIiwiZm9yU2V0dCIsImF1dGhlbnRpY2F0ZSIsIm5hdGl2ZVVJIiwiY2xvc2VXYWl0aW5nIiwiZSIsImNvZGUiLCJBVVRIRU5USUNBVEVfTUlTTUFUQ0giLCJ0b2FzdCIsIkFVVEhFTlRJQ0FURV9PVkVSTElNSVQiLCJhbGVydCIsIkNBTkNFTCIsIm9zIiwic2hvdyIsInByaW50Q2FuY2VsIiwiY2FuY2VsIl0sIm1hcHBpbmdzIjoid1BBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RTs7QUFFQSxJQUFJQSxVQUFVLEdBQUc7QUFDaEIsU0FBTyxDQUFDO0FBQ1BDLFdBQU8sRUFBRSxDQURGO0FBRVBDLFFBQUksRUFBRSxLQUZDO0FBR1BDLFFBQUksRUFBRSxLQUhDO0FBSVBDLFlBQVEsRUFBRSxDQUFDO0FBQ1ZGLFVBQUksRUFBRSxLQURJO0FBRVZHLFdBQUssRUFBRSxTQUZHO0FBR1ZKLGFBQU8sRUFBRSxDQUhDO0FBSVZLLFVBQUksRUFBRUMsbUJBQU8sQ0FBQyxvQ0FBRCxDQUpILEVBQUQsQ0FKSCxF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QUFkLENBQW9CLDhDQUFwQjtBQUNBO0FBQ0QsZUFBS0gsQ0FBQyxDQUFDSSxzQkFBUDtBQUNDakIsZ0JBQUksQ0FBQ1csUUFBTCxDQUFjQyxZQUFkLEdBREQsQ0FDK0I7QUFDOUJaLGdCQUFJLENBQUNXLFFBQUwsQ0FBY08sS0FBZDtBQUNDLDhIQUREOztBQUdBO0FBQ0QsZUFBS0wsQ0FBQyxDQUFDTSxNQUFQO0FBQ0NuQixnQkFBSSxDQUFDVyxRQUFMLENBQWNLLEtBQWQsQ0FBb0IsZ0NBQXBCO0FBQ0E7QUFDRDtBQUNDaEIsZ0JBQUksQ0FBQ1csUUFBTCxDQUFjQyxZQUFkLEdBREQsQ0FDK0I7QUFDOUJaLGdCQUFJLENBQUNXLFFBQUwsQ0FBY08sS0FBZCxDQUFvQixxREFBcEI7QUFDQSxrQkFoQkY7O0FBa0JBLE9BbENEO0FBbUNBO0FBQ0EsVUFBSSxhQUFhbEIsSUFBSSxDQUFDb0IsRUFBTCxDQUFRdEgsSUFBekIsRUFBK0I7QUFDOUIsYUFBS3VILElBQUwsR0FBWSxJQUFaO0FBQ0E7OztBQUdBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWlCRDs7OztBQUlELEdBdmJlO0FBd2JoQkMsYUFBVyxFQUFFLHVCQUFXO0FBQ3ZCdEIsUUFBSSxDQUFDQyxXQUFMLENBQWlCc0IsTUFBakI7QUFDQTtBQUNBLEdBM2JlLEVBQWpCLEM7O0FBNmJlbEgsVSIsImZpbGUiOiI5NjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9rZW5VdGlsIGZyb20gJy4vVG9rZW5VdGlsLmpzJ1xyXG5pbXBvcnQgQnRjVXRpbCBmcm9tICcuL0J0Y1V0aWwuanMnXHJcbmltcG9ydCBUcm9uVXRpbCBmcm9tICcuL1Ryb25VdGlsLmpzJ1xyXG5pbXBvcnQgRXRoVXRpbCBmcm9tICcuL0V0aFV0aWwuanMnXHJcbmltcG9ydCBhcGkgZnJvbSAnLi9hcGkuanMnXHJcblxyXG5sZXQgZnVsbFdhbGxldCA9IHtcclxuXHRcIkJUQ1wiOiBbe1xyXG5cdFx0YmFsYW5jZTogMCxcclxuXHRcdG5hbWU6IFwiQlRDXCIsXHJcblx0XHR0eXBlOiAnQlRDJyxcclxuXHRcdGNvaW5MaXN0OiBbe1xyXG5cdFx0XHRuYW1lOiBcIkJUQ1wiLFxyXG5cdFx0XHR4bmFtZTogJ0JpdGNvaW4nLFxyXG5cdFx0XHRiYWxhbmNlOiAwLFxyXG5cdFx0XHRpY29uOiByZXF1aXJlKCdAL3N0YXRpYy90b25neW9uaC9ieWUucG5nJylcclxuXHRcdH1dXHJcblx0fV0sXHJcblx0XCJFVEhcIjogW3tcclxuXHRcdGJhbGFuY2U6IDAsXHJcblx0XHRuYW1lOiBcIkVUSFwiLFxyXG5cdFx0dHlwZTogJ0VUSCcsXHJcblx0XHRjb2luTGlzdDogW3tcclxuXHRcdFx0XHRuYW1lOiBcIkVUSFwiLFxyXG5cdFx0XHRcdHhuYW1lOiAnRXRoZXJldW0nLFxyXG5cdFx0XHRcdGJhbGFuY2U6IDAsXHJcblx0XHRcdFx0aWNvbjogcmVxdWlyZSgnQC9zdGF0aWMvdG9uZ3lvbmgvRnJhbWUzMjk5LnBuZycpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRuYW1lOiBcIlVTRFRcIixcclxuXHRcdFx0XHR4bmFtZTogJ1RldGhlciBVU0QnLFxyXG5cdFx0XHRcdGJhbGFuY2U6IDAsXHJcblx0XHRcdFx0Y29udHJhY3RBZGRyZXNzOiAnMHhkYWMxN2Y5NThkMmVlNTIzYTIyMDYyMDY5OTQ1OTdjMTNkODMxZWM3JyxcclxuXHRcdFx0XHRpY29uOiByZXF1aXJlKCdAL3N0YXRpYy90b25neW9uaC9pbWc1MDAucG5nJylcclxuXHRcdFx0fVxyXG5cdFx0XVxyXG5cdH1dLFxyXG5cdFwiVFJYXCI6IFt7XHJcblx0XHRiYWxhbmNlOiAwLFxyXG5cdFx0bmFtZTogXCJUUlhcIixcclxuXHRcdHR5cGU6ICdUUlgnLFxyXG5cdFx0Y29pbkxpc3Q6IFt7XHJcblx0XHRcdFx0bmFtZTogXCJUUlhcIixcclxuXHRcdFx0XHR4bmFtZTogJ1RST04nLFxyXG5cdFx0XHRcdGJhbGFuY2U6IDAsXHJcblx0XHRcdFx0aWNvbjogcmVxdWlyZSgnQC9zdGF0aWMvdG9uZ3lvbmgvdHJvbjEucG5nJylcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdG5hbWU6IFwiVVNEVFwiLFxyXG5cdFx0XHRcdHhuYW1lOiAnVGV0aGVyIFVTRCcsXHJcblx0XHRcdFx0YmFsYW5jZTogMCxcclxuXHRcdFx0XHRjb250cmFjdEFkZHJlc3M6ICdUUjdOSHFqZUtReEdUQ2k4cThaWTRwTDhvdFN6Z2pMajZ0JyxcclxuXHRcdFx0XHRpY29uOiByZXF1aXJlKCdAL3N0YXRpYy90b25neW9uaC90ZXRoZXJfdXNkLnBuZycpXHJcblx0XHRcdH1cclxuXHRcdF1cclxuXHR9XVxyXG59XHJcblxyXG5sZXQgV2FsbGV0VXRpbCA9IHtcclxuXHQvL+WIneasoeWIm+W7uumSseWMhVxyXG5cdGluaXRpYWxXYWxsZXQ6IGZ1bmN0aW9uKG1uZW1vbmljLCBwYXNzd29yZCkge1xyXG5cdFx0Y29uc29sZS5sb2cocGFzc3dvcmQsICdwYXNzd29yZCcpXHJcblx0XHRsZXQgd2FsbGV0SW5mbyA9IGZ1bGxXYWxsZXQ7XHJcblx0XHRsZXQgYnRjID0gVG9rZW5VdGlsLmdlbmVyYXRlQnRjKG1uZW1vbmljKTtcclxuXHRcdHdhbGxldEluZm8uQlRDWzBdLnBhc3N3b3JkID0gcGFzc3dvcmQ7XHJcblx0XHR3YWxsZXRJbmZvLkJUQ1swXS5tbmVtb25pYyA9IG1uZW1vbmljO1xyXG5cdFx0d2FsbGV0SW5mby5CVENbMF0ucHJpdmF0ZUtleSA9IGJ0Yy5wcml2YXRlS2V5O1xyXG5cdFx0d2FsbGV0SW5mby5CVENbMF0uYWRkcmVzcyA9IGJ0Yy5hZGRyZXNzO1xyXG5cdFx0d2FsbGV0SW5mby5CVENbMF0uZWxsaXBzaXNBZGRyZXNzID0gd2FsbGV0SW5mby5CVENbMF0uYWRkcmVzcy5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyArIHdhbGxldEluZm8uQlRDW1xyXG5cdFx0XHQwXS5hZGRyZXNzLnN1YnN0cmluZyh3YWxsZXRJbmZvLkJUQ1swXS5hZGRyZXNzLmxlbmd0aC02LFxyXG5cdFx0XHR3YWxsZXRJbmZvLkJUQ1swXS5hZGRyZXNzLmxlbmd0aClcclxuXHRcdGxldCBldGggPSBUb2tlblV0aWwuZ2VuZXJhdGVFdGgobW5lbW9uaWMpXHJcblx0XHR3YWxsZXRJbmZvLkVUSFswXS5wYXNzd29yZCA9IHBhc3N3b3JkO1xyXG5cdFx0d2FsbGV0SW5mby5FVEhbMF0ubW5lbW9uaWMgPSBtbmVtb25pYztcclxuXHRcdHdhbGxldEluZm8uRVRIWzBdLnByaXZhdGVLZXkgPSBldGgucHJpdmF0ZUtleTtcclxuXHRcdHdhbGxldEluZm8uRVRIWzBdLmFkZHJlc3MgPSBldGguYWRkcmVzcztcclxuXHRcdGxldCB0cm9uID0gVG9rZW5VdGlsLmdlbmVyYXRlVHJvbihtbmVtb25pYyk7XHJcblx0XHR3YWxsZXRJbmZvLlRSWFswXS5tbmVtb25pYyA9IG1uZW1vbmljO1xyXG5cdFx0d2FsbGV0SW5mby5UUlhbMF0ucGFzc3dvcmQgPSBwYXNzd29yZDtcclxuXHRcdHdhbGxldEluZm8uVFJYWzBdLnByaXZhdGVLZXkgPSB0cm9uLnByaXZhdGVLZXk7XHJcblx0XHR3YWxsZXRJbmZvLlRSWFswXS5hZGRyZXNzID0gdHJvbi5hZGRyZXNzO1xyXG5cdFx0bGV0IHdhbGxldCA9IHdhbGxldEluZm8uQlRDWzBdO1xyXG5cdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXRJbmZvJywgd2FsbGV0SW5mbyk7XHJcblx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3dhbGxldCcsIHdhbGxldCk7XHJcblx0XHR0aGlzLnVwZGF0ZUJhbGFuY2UoKTtcclxuXHR9LFxyXG5cdC8v5L+u5pS56ZKx5YyF5ZCN56ewXHJcblx0dXBkYXRlV2FsbGV0TmFtZTogZnVuY3Rpb24odHlwZSwgYWRkcmVzcywgbmFtZSkge1xyXG5cdFx0bGV0IHdhbGxldEluZm8gPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dhbGxldEluZm8nKTtcclxuXHRcdGxldCB3YWxsZXRMaXN0ID0gd2FsbGV0SW5mb1t0eXBlXTtcclxuXHRcdGxldCB3YWxsZXQgPXVuaS5nZXRTdG9yYWdlU3luYygnd2FsbGV0Jyk7XHJcblx0XHRmb3IgKHZhciBrID0gMCwgbGVuZ3RoID0gd2FsbGV0TGlzdC5sZW5ndGg7IGsgPCBsZW5ndGg7IGsrKykge1xyXG5cdFx0XHRpZiAod2FsbGV0TGlzdFtrXS5hZGRyZXNzID09PSBhZGRyZXNzKSB7XHJcblx0XHRcdFx0d2FsbGV0TGlzdFtrXS5uYW1lID0gbmFtZVxyXG5cdFx0XHRcdCBpZih3YWxsZXQuYWRkcmVzcz09d2FsbGV0TGlzdFtrXS5hZGRyZXNzKXtcclxuXHRcdFx0XHRcdCB3YWxsZXQubmFtZT1uYW1lXHJcblx0XHRcdFx0XHQgdW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXQnLHdhbGxldCk7XHJcblx0XHRcdFx0IH1cclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXRJbmZvJywgd2FsbGV0SW5mbyk7XHJcblx0fSxcclxuXHQvL+WKqeiusOivjeaWsOW7ulxyXG5cdG1uZW1vbmljRXN0YWJsaXNoV2FsbGV0OiBmdW5jdGlvbih0eXBlLCBtbmVtb25pYywgcGFzc3dvcmQpIHtcclxuXHRcdGxldCB3YWxsZXRJbmZvID0gdW5pLmdldFN0b3JhZ2VTeW5jKCd3YWxsZXRJbmZvJyk7XHJcblx0XHRjb25zb2xlLmxvZyhwYXNzd29yZCwgJ3Bhc3N3b3JkJywgdHlwZSlcclxuXHRcdGxldCB3YWxsZXRkZWM7XHJcblx0XHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdFx0Y2FzZSAnQlRDJzpcclxuXHRcdFx0XHR3YWxsZXRkZWMgPSBUb2tlblV0aWwuZ2VuZXJhdGVCdGMobW5lbW9uaWMpO1xyXG5cdFx0XHRcdGlmICh1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dhbGxldEluZm8nKSkge1xyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXRpJywgd2FsbGV0ZGVjLmFkZHJlc3MpXHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnRVRIJzpcclxuXHRcdFx0XHR3YWxsZXRkZWMgPSBUb2tlblV0aWwuZ2VuZXJhdGVFdGgobW5lbW9uaWMpO1xyXG5cdFx0XHRcdGlmICh1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dhbGxldEluZm8nKSkge1xyXG5cdFx0XHRcdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXRpJywgd2FsbGV0ZGVjLmFkZHJlc3MpXHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnVFJYJzpcclxuXHJcblx0XHRcdFx0d2FsbGV0ZGVjID0gVG9rZW5VdGlsLmdlbmVyYXRlVHJvbihtbmVtb25pYyk7XHJcblx0XHRcdFx0aWYgKHVuaS5nZXRTdG9yYWdlU3luYygnd2FsbGV0SW5mbycpKSB7XHJcblx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3dhbGxldGknLCB3YWxsZXRkZWMuYWRkcmVzcylcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHdhbGxldCA9IGZ1bGxXYWxsZXRbdHlwZV1bMF07XHJcblx0XHR3YWxsZXQucGFzc3dvcmQgPSBwYXNzd29yZDtcclxuXHRcdHdhbGxldC5wcml2YXRlS2V5ID0gd2FsbGV0ZGVjLnByaXZhdGVLZXk7XHJcblx0XHR3YWxsZXQubW5lbW9uaWMgPSBtbmVtb25pYztcclxuXHRcdHdhbGxldC5hZGRyZXNzID0gd2FsbGV0ZGVjLmFkZHJlc3M7XHJcblx0XHRjb25zb2xlLmxvZyh3YWxsZXQpXHJcblx0XHR3YWxsZXRJbmZvW3R5cGVdLnB1c2god2FsbGV0KTtcclxuXHRcdGNvbnNvbGUubG9nKHdhbGxldEluZm8sIDExMTExMTEpXHJcblx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3dhbGxldEluZm8nLCB3YWxsZXRJbmZvKTtcclxuXHRcdHVuaS5zZXRTdG9yYWdlU3luYygnd2FsbGV0Jywgd2FsbGV0KTtcclxuXHRcdHVuaS5zZXRTdG9yYWdlU3luYygnd2FsbGV0aScsIHdhbGxldC5hZGRyZXNzKTtcclxuXHJcblx0fSxcclxuXHQvL+engemSpeaWsOW7ulxyXG5cdHByaXZhdGVLZXlFc3RhYmxpc2hXYWxsZXQ6IGZ1bmN0aW9uKHR5cGUsIHByaXZhdGVLZXksIHBhc3N3b3JkKSB7XHJcblx0XHRsZXQgd2FsbGV0SW5mbyA9IHVuaS5nZXRTdG9yYWdlU3luYygnd2FsbGV0SW5mbycpO1xyXG5cdFx0Y29uc29sZS5sb2codHlwZSlcclxuXHRcdGNvbnNvbGUubG9nKHBhc3N3b3JkLCAncGFzc3dvcmQnKVxyXG5cdFx0bGV0IHdhbGxldGRlYztcclxuXHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRjYXNlICdCVEMnOlxyXG5cdFx0XHRcdHdhbGxldGRlYyA9IFRva2VuVXRpbC5pbXBvcnRCdGNQcml2YXRlS2V5KHByaXZhdGVLZXkpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdFVEgnOlxyXG5cdFx0XHRcdHdhbGxldGRlYyA9IFRva2VuVXRpbC5pbXBvcnRFdGhQcml2YXRlS2V5KHByaXZhdGVLZXkpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdUUlgnOlxyXG5cdFx0XHRcdHdhbGxldGRlYyA9IFRva2VuVXRpbC5pbXBvcnRUcm9uUHJpdmF0ZUtleShwcml2YXRlS2V5KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHRcdGxldCB3YWxsZXQgPSBmdWxsV2FsbGV0W3R5cGVdWzBdO1xyXG5cdFx0d2FsbGV0LnBhc3N3b3JkID0gcGFzc3dvcmQ7XHJcblx0XHR3YWxsZXQucHJpdmF0ZUtleSA9IHdhbGxldGRlYy5wcml2YXRlS2V5O1xyXG5cdFx0d2FsbGV0LmFkZHJlc3MgPSB3YWxsZXRkZWMuYWRkcmVzcztcclxuXHRcdFx0d2FsbGV0LmVsbGlwc2lzQWRkcmVzcyA9IHdhbGxldC5hZGRyZXNzLnN1YnN0cmluZygwLCA2KSArICcuLi4nICsgd2FsbGV0LmFkZHJlc3Muc3Vic3RyaW5nKFxyXG5cdFx0XHR3YWxsZXQuYWRkcmVzcy5sZW5ndGggLSA2LFxyXG5cdFx0XHR3YWxsZXQuYWRkcmVzcy5sZW5ndGgpO1xyXG5cdFx0d2FsbGV0SW5mb1t0eXBlXS5wdXNoKHdhbGxldCk7XHJcblx0XHRjb25zb2xlLmxvZyh3YWxsZXRJbmZvLCAn5b2T5YmN56eB6ZKl5bu655qEJylcclxuXHRcdHVuaS5zZXRTdG9yYWdlU3luYygnd2FsbGV0SW5mbycsIHdhbGxldEluZm8pO1xyXG5cdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXQnLCB3YWxsZXQpO1xyXG5cdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXRpJywgd2FsbGV0LmFkZHJlc3MpO1xyXG5cdH0sXHJcblx0Ly/ojrflj5bpkrHljIXliJfooahcclxuXHRnZXRXYWxsZXRMaXN0OiBmdW5jdGlvbih0eXBlKSB7XHJcblx0XHRsZXQgd2FsbGV0SW5mbyA9IHVuaS5nZXRTdG9yYWdlU3luYygnd2FsbGV0SW5mbycpO1xyXG5cdFx0bGV0IHdhbGxldExpc3QgPSBbXTtcclxuXHRcdGlmICh0eXBlKSB7XHJcblx0XHRcdHdhbGxldExpc3QgPSB3YWxsZXRJbmZvW3R5cGVdXHJcblx0XHRcdGZvciAodmFyIGsgPSAwLCBsZW5ndGggPSB3YWxsZXRMaXN0Lmxlbmd0aDsgayA8IGxlbmd0aDsgaysrKSB7XHJcblx0XHRcdFx0bGV0IGFkZHJlc3MgPSB3YWxsZXRMaXN0W2tdLmFkZHJlc3M7XHJcblx0XHRcdFx0d2FsbGV0TGlzdFtrXS5lbGxpcHNpc0FkZHJlc3MgPSBhZGRyZXNzLnN1YnN0cmluZygwLCA2KSArICcuLi4nICsgYWRkcmVzcy5zdWJzdHJpbmcoYWRkcmVzcy5sZW5ndGggLSA2LFxyXG5cdFx0XHRcdFx0YWRkcmVzcy5sZW5ndGgpXHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZvciAobGV0IG9iaiBpbiB3YWxsZXRJbmZvKSB7XHJcblx0XHRcdFx0Zm9yICh2YXIgayA9IDAsIGxlbmd0aCA9IHdhbGxldEluZm9bb2JqXS5sZW5ndGg7IGsgPCBsZW5ndGg7IGsrKykge1xyXG5cdFx0XHRcdFx0bGV0IGFkZHJlc3MgPSB3YWxsZXRJbmZvW29ial1ba10uYWRkcmVzcztcclxuXHJcblx0XHRcdFx0XHR3YWxsZXRJbmZvW29ial1ba10uZWxsaXBzaXNBZGRyZXNzID0gYWRkcmVzcy5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyArIGFkZHJlc3Muc3Vic3RyaW5nKFxyXG5cdFx0XHRcdFx0XHRhZGRyZXNzLmxlbmd0aCAtIDYsXHJcblx0XHRcdFx0XHRcdGFkZHJlc3MubGVuZ3RoKTtcclxuXHRcdFx0XHRcdHdhbGxldEluZm9bb2JqXVtrXS50eXBlID0gb2JqO1xyXG5cdFx0XHRcdFx0d2FsbGV0TGlzdC5wdXNoKHdhbGxldEluZm9bb2JqXVtrXSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gd2FsbGV0TGlzdDtcclxuXHR9LFxyXG5cdHNlbGVjdFdhbGxldDogZnVuY3Rpb24odHlwZSwgYWRkcmVzcykge1xyXG5cdFx0Y29uc29sZS5sb2coJ+mAieaLqemSseWMhScpXHJcblx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3dhbGxldGknLCBhZGRyZXNzKTtcclxuXHRcdGxldCB3YWxsZXRJbmZvID0gdW5pLmdldFN0b3JhZ2VTeW5jKCd3YWxsZXRJbmZvJyk7XHJcblx0XHRsZXQgd2FsbGV0TGlzdCA9IHdhbGxldEluZm9bdHlwZV07XHJcblx0XHRjb25zb2xlLmxvZygpXHJcblx0XHRmb3IgKHZhciBrID0gMCwgbGVuZ3RoID0gd2FsbGV0TGlzdC5sZW5ndGg7IGsgPCBsZW5ndGg7IGsrKykge1xyXG5cdFx0XHRpZiAod2FsbGV0TGlzdFtrXS5hZGRyZXNzID09IGFkZHJlc3MpIHtcclxuXHRcdFx0XHR3YWxsZXRMaXN0W2tdLmVsbGlwc2lzQWRkcmVzcyA9IGFkZHJlc3Muc3Vic3RyaW5nKDAsIDYpICsgJy4uLicgKyBhZGRyZXNzLnN1YnN0cmluZyhhZGRyZXNzLmxlbmd0aCAtIDYsXHJcblx0XHRcdFx0XHRhZGRyZXNzLmxlbmd0aClcclxuXHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3dhbGxldCcsIHdhbGxldExpc3Rba10pO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0fVxyXG5cdH0sXHJcblx0dXBkYXRlQmFsYW5jZTogYXN5bmMgZnVuY3Rpb24oc3VjY2Vzcykge1xyXG5cdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCdpc1dhbGxldCcsIHRydWUpO1xyXG5cdFx0Y29uc3Qgd2FsbGV0ID0gdW5pLmdldFN0b3JhZ2VTeW5jKCd3YWxsZXQnKTtcclxuXHRcdGxldCBwYXJhbXMgPSB7XHJcblx0XHRcdGNvaW5OYW1lOiB3YWxsZXQudHlwZVxyXG5cdFx0fVxyXG5cdFx0Y29uc3QgbWFpbkNvaW5QID0gYXdhaXQgYXBpLmdldENvaW5SYXRlKHBhcmFtcyk7XHJcblx0XHRwYXJhbXMuY29pbk5hbWUgPSAnVVNEVCc7XHJcblx0XHRjb25zdCB1c2R0VSA9IGF3YWl0IGFwaS5nZXRDb2luUmF0ZShwYXJhbXMpO1xyXG5cdFx0d2FsbGV0LnRvdGFsQmFsYW5jZVByaWNlID0gMFxyXG5cdFx0d2FsbGV0LnRvdGFsQmFsYW5jZUNueVByaWNlPTBcclxuXHRcdGNvbnNvbGUubG9nKHVzZHRVLCA4ODg4KVxyXG5cdFx0c3dpdGNoICh3YWxsZXQudHlwZSkge1xyXG5cdFx0XHRjYXNlICdCVEMnOlxyXG5cdFx0XHRcdGNvbnNvbGUubG9nKFwi6L+b5p2lQlRDXCIpXHJcblx0XHRcdFx0d2FsbGV0LmJhbGFuY2UgPSBhd2FpdCBCdGNVdGlsLmdldEJhbGFuY2Uod2FsbGV0LmFkZHJlc3MpXHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ0VUSCc6XHJcblx0XHRcdFx0Y29uc29sZS5sb2coXCLov5vmnaVFVEhcIix3YWxsZXQuYmFsYW5jZSApXHJcblx0XHRcdFx0d2FsbGV0LmJhbGFuY2UgPSBhd2FpdCBFdGhVdGlsLmdldEJhbGFuY2Uod2FsbGV0LmFkZHJlc3MpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKFwi6L+b5p2lRVRIXCIsd2FsbGV0LmJhbGFuY2UgKVxyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgd2FsbGV0LmNvaW5MaXN0Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHR3YWxsZXQuY29pbkxpc3RbaV0uYmFsYW5jZSA9IGF3YWl0IEV0aFV0aWwuZ2V0VG9rZW5CYWxhbmNlKHdhbGxldC5hZGRyZXNzLCB3YWxsZXQuY29pbkxpc3RbaV0uY29udHJhY3RBZGRyZXNzKTtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCLov5vmnaVFVEhcIix3YWxsZXQuY29pbkxpc3RbaV0uYmFsYW5jZSlcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHdhbGxldC50b3RhbEJhbGFuY2VQcmljZSA9IHdhbGxldC5jb2luTGlzdFsxXS5iYWxhbmNlUHJpY2U/d2FsbGV0LmNvaW5MaXN0WzFdLmJhbGFuY2VQcmljZTowO1xyXG5cdFx0XHRcdHdhbGxldC50b3RhbEJhbGFuY2VDbnlQcmljZT13YWxsZXQuY29pbkxpc3RbMV0uYmFsYW5jZUNueVByaWNlP3dhbGxldC5jb2luTGlzdFsxXS5iYWxhbmNlQ255UHJpY2U6MDtcclxuXHRcdFx0XHR3YWxsZXQuY29pbkxpc3RbMV0uYmFsYW5jZVByaWNlID0gKHdhbGxldFxyXG5cdFx0XHRcdFx0LmNvaW5MaXN0WzFdLmJhbGFuY2UgKiB1c2R0VS5kYXRhLnByaWNlSW5Vc2QpLnRvRml4ZWQoMik7XHJcblx0XHRcdFx0d2FsbGV0LmNvaW5MaXN0WzFdLmJhbGFuY2VDbnlQcmljZSA9ICh3YWxsZXRcclxuXHRcdFx0XHRcdC5jb2luTGlzdFsxXS5iYWxhbmNlICogdXNkdFUuZGF0YS5wcmljZUNueSkudG9GaXhlZCgyKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnVFJYJzpcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhcIui/m+adpVRSWFwiKVxyXG5cdFx0XHRcdHdhbGxldC5iYWxhbmNlID0gYXdhaXQgVHJvblV0aWwuZ2V0VHJvbkJhbGFuY2Uod2FsbGV0LmFkZHJlc3MpO1xyXG5cdFx0XHRcdHBhcmFtcy5hZGRyZXNzID0gd2FsbGV0LmFkZHJlc3M7XHJcblx0XHRcdFx0cGFyYW1zLmNoYWluTmFtZSA9IHdhbGxldC50eXBlO1xyXG5cdFx0XHRcdGNvbnN0IHRyb25Db2luID0gYXdhaXQgYXBpLmdldEJhbGFuY2UocGFyYW1zKTtcclxuXHRcdFx0XHR2YXIgbmV3TGlzdD1bXTtcclxuXHRcdFx0XHRuZXdMaXN0LnB1c2god2FsbGV0LmNvaW5MaXN0WzBdKVxyXG5cdFx0XHRcdG5ld0xpc3QucHVzaCh3YWxsZXQuY29pbkxpc3RbMV0pXHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCB0cm9uQ29pbi5kYXRhLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRpZiAodHJvbkNvaW4uZGF0YVtpXS50b2tlbkFiYnIgPT09ICdVU0RUJykge1xyXG5cdFx0XHRcdFx0XHRuZXdMaXN0WzFdLmJhbGFuY2UgPSAoTnVtYmVyKHRyb25Db2luLmRhdGFbaV0uYmFsYW5jZSkgLyBNYXRoLnBvdygxMCwgdHJvbkNvaW5cclxuXHRcdFx0XHRcdFx0XHQuZGF0YVtpXS50b2tlbkRlY2ltYWwpKTtcclxuXHRcdFx0XHRcdFx0bmV3TGlzdFsxXS5iYWxhbmNlQ255UHJpY2UgPSAobmV3TGlzdFsxXS5iYWxhbmNlICogdXNkdFUuZGF0YS5wcmljZUNueSkudG9GaXhlZCgyKTtcclxuXHRcdFx0XHRcdFx0bmV3TGlzdFsxXS5iYWxhbmNlUHJpY2UgPSAobmV3TGlzdFsxXS5iYWxhbmNlICogdXNkdFUuZGF0YS5wcmljZUluVXNkKS50b0ZpeGVkKDIpO1xyXG5cdFx0XHRcdFx0XHR3YWxsZXQudG90YWxCYWxhbmNlUHJpY2UgPSBuZXdMaXN0WzFdLmJhbGFuY2VQcmljZVxyXG5cdFx0XHRcdFx0XHR3YWxsZXQudG90YWxCYWxhbmNlQ255UHJpY2U9bmV3TGlzdFsxXS5iYWxhbmNlQ255UHJpY2VcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKE51bWJlcih0cm9uQ29pbi5kYXRhW2ldLmJhbGFuY2UpIC8gTWF0aC5wb3coMTAsIHRyb25Db2luLmRhdGFbaV1cclxuXHRcdFx0XHRcdFx0XHQudG9rZW5EZWNpbWFsKSlcclxuXHRcdFx0XHRcdFx0dmFyIGNvaW4gPSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZTogdHJvbkNvaW4uZGF0YVtpXS50b2tlbkFiYnIsXHJcblx0XHRcdFx0XHRcdFx0eG5hbWU6IHRyb25Db2luLmRhdGFbaV0udG9rZW5OYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGJhbGFuY2U6IChOdW1iZXIodHJvbkNvaW4uZGF0YVtpXS5iYWxhbmNlKSAvIE1hdGgucG93KDEwLCB0cm9uQ29pbi5kYXRhW2ldXHJcblx0XHRcdFx0XHRcdFx0XHQudG9rZW5EZWNpbWFsKSksXHJcblx0XHRcdFx0XHRcdFx0aWNvbjogdHJvbkNvaW4uZGF0YVtpXS50b2tlbkxvZ28sXHJcblxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmICh0cm9uQ29pbi5kYXRhW2ldLnRva2VuVHlwZSA9PT0gJ3RyYzIwJykge1xyXG5cdFx0XHRcdFx0XHRcdGNvaW4uY29udHJhY3RBZGRyZXNzID0gdHJvbkNvaW4uZGF0YVtpXS50b2tlbklkXHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Y29pbi5jb250cmFjdEFkZHJlc3MgPSB0cm9uQ29pbi5kYXRhW2ldLm93bmVyX2FkZHJlc3NcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRuZXdMaXN0LnB1c2goY29pbilcclxuXHRcdFx0XHRcdH1cclxuXHJcblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR3YWxsZXQuY29pbkxpc3Q9bmV3TGlzdDtcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHR9XHJcblxyXG5cdFx0d2FsbGV0LmVsbGlwc2lzQWRkcmVzcz13YWxsZXQuYWRkcmVzcy5zdWJzdHJpbmcoMCwgNikgKyAnLi4uJyArIHdhbGxldC5hZGRyZXNzLnN1YnN0cmluZyhcclxuXHRcdFx0XHRcdFx0d2FsbGV0LmFkZHJlc3MubGVuZ3RoIC0gNixcclxuXHRcdFx0XHRcdFx0d2FsbGV0LmFkZHJlc3MubGVuZ3RoKTtcclxuXHRcdHdhbGxldC5iYWxhbmNlUHJpY2UgPSAod2FsbGV0LmJhbGFuY2UgKiBtYWluQ29pblAuZGF0YS5wcmljZUluVXNkKS50b0ZpeGVkKDIpO1xyXG5cdFx0d2FsbGV0LmJhbGFuY2VDbnlQcmljZSA9ICh3YWxsZXQuYmFsYW5jZSAqIG1haW5Db2luUC5kYXRhLnByaWNlQ255KS50b0ZpeGVkKDIpO1xyXG5cdFx0d2FsbGV0LnRvdGFsQmFsYW5jZVByaWNlPShOdW1iZXIod2FsbGV0LnRvdGFsQmFsYW5jZVByaWNlKStOdW1iZXIod2FsbGV0LmJhbGFuY2VQcmljZSkpLnRvRml4ZWQoMik7XHJcblx0XHR3YWxsZXQudG90YWxCYWxhbmNlQ255UHJpY2U9KE51bWJlcih3YWxsZXQudG90YWxCYWxhbmNlQ255UHJpY2UpK051bWJlcih3YWxsZXQuYmFsYW5jZUNueVByaWNlKSkudG9GaXhlZCgyKTtcclxuXHRcdGNvbnNvbGUubG9nKFwid2FsbGV0LmJhbGFuY2VQcmljZVwiLE51bWJlcih3YWxsZXQudG90YWxCYWxhbmNlUHJpY2UpKVxyXG5cdFx0Y29uc29sZS5sb2coXCJ3YWxsZXQuYmFsYW5jZUNueVByaWNlXCIsd2FsbGV0LnRvdGFsQmFsYW5jZVByaWNlKVxyXG5cdFx0d2FsbGV0LmNvaW5MaXN0WzBdLmJhbGFuY2UgPSB3YWxsZXQuYmFsYW5jZVxyXG5cdFx0d2FsbGV0LmNvaW5MaXN0WzBdLmJhbGFuY2VQcmljZSA9IHdhbGxldC5iYWxhbmNlUHJpY2VcclxuXHRcdHdhbGxldC5jb2luTGlzdFswXS5iYWxhbmNlQ255UHJpY2UgPSB3YWxsZXQuYmFsYW5jZUNueVByaWNlXHJcblx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3dhbGxldCcsd2FsbGV0KTtcclxuXHRcdGNvbnN0IHdhbGxldEluZm8gPSB1bmkuZ2V0U3RvcmFnZVN5bmMoJ3dhbGxldEluZm8nKTtcclxuXHRcdGZvciAodmFyIGsgPSAwLCBsZW5ndGggPSB3YWxsZXRJbmZvW3dhbGxldC50eXBlXS5sZW5ndGg7IGsgPCBsZW5ndGg7IGsrKykge1xyXG5cdFx0XHRpZiAod2FsbGV0SW5mb1t3YWxsZXQudHlwZV1ba10uYWRkcmVzcyA9PT0gd2FsbGV0LmFkZHJlc3MpIHtcclxuXHRcdFx0XHR3YWxsZXRJbmZvW3dhbGxldC50eXBlXVtrXSA9IHdhbGxldDtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dW5pLnNldFN0b3JhZ2VTeW5jKCd3YWxsZXRJbmZvJywgd2FsbGV0SW5mbyk7XHJcblx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ2lzV2FsbGV0JywgZmFsc2UpO1xyXG5cdFx0cmV0dXJuIHdhbGxldDtcclxuXHR9LFxyXG5cclxuXHQvLyDlsIHoo4XlnLDlnYDmlrnms5VcclxuXHR1cGRhdGVBZGRyZXNzOiBmdW5jdGlvbih0eXBlLCB2YWx1ZSwgYmlnQWRkcmVzcywgYWRkcmVzc05hbWUpIHtcclxuXHRcdGxldCB0aGF0ID0gdGhpc1xyXG5cdFx0c3dpdGNoICh3YWxsZXQudHlwZSkge1xyXG5cdFx0XHRjYXNlICdCVEMnOlxyXG5cclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnRVRIJzpcclxuXHJcblxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlICdUUlgnOlxyXG5cdFx0XHRcdGlmICh2YWx1ZSA9PSAnRVRIJykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZ2FpID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdFVEhBZGRyZXNzSW5mbycpXHJcblx0XHRcdFx0XHRjb25zdCBnYWkyID0gdW5pLmdldFN0b3JhZ2VTeW5jKCdUUlhBZGRyZXNzSW5mbycpXHJcblx0XHRcdFx0XHRjb25zdCBpbmRleCA9IHVuaS5nZXRTdG9yYWdlU3luYygnZWRpdEluZGV4JylcclxuXHRcdFx0XHRcdGxldCBldGggPSBuZXcgT2JqZWN0O1xyXG5cdFx0XHRcdFx0ZXRoLmFkZHJlc3MgPSBiaWdBZGRyZXNzO1xyXG5cdFx0XHRcdFx0ZXRoLm5hbWUgPSBhZGRyZXNzTmFtZVxyXG5cdFx0XHRcdFx0ZXRoLmNvaW5MaXN0ID0gW3tcclxuXHRcdFx0XHRcdFx0bmFtZTogXCJFVEhcIixcclxuXHRcdFx0XHRcdFx0bmFtZTI6IFwiRVRIXCIsXHJcblx0XHRcdFx0XHRcdHhuYW1lOiAnRXRoZXJldW0nLFxyXG5cdFx0XHRcdFx0XHRpY29uOiByZXF1aXJlKCdAL3N0YXRpYy90b25neW9uaC9GcmFtZTMyOTkucG5nJylcclxuXHRcdFx0XHRcdH1dO1xyXG5cdFx0XHRcdFx0Z2FpMi5zcGxpY2UoaW5kZXgsIDEpXHJcblx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ1RSWEFkZHJlc3NJbmZvJywgZ2FpMilcclxuXHRcdFx0XHRcdGdhaS5wdXNoKGV0aCk7XHJcblx0XHRcdFx0XHR1bmkuc2V0U3RvcmFnZVN5bmMoJ0VUSEFkZHJlc3NJbmZvJywgZ2FpKVxyXG5cdFx0XHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiAnU3VjY2Vzc2Z1bGx5JyxcclxuXHRcdFx0XHRcdFx0aWNvbjogJ3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRkdXJhdGlvbjogMTUwMFxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0XHRcdFx0dXJsOiAnLi4vYWRkcmVzcy9pbmRleCdcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHR9XHJcblxyXG5cdH0sXHJcblx0Ly8g5oyH57q56K+G5YirXHJcblx0ZmluZ2VyKCkge1xyXG5cclxuXHRcdGlmICghcGx1cy5maW5nZXJwcmludC5pc1N1cHBvcnQoKSkge1xyXG5cdFx0XHR0aGlzLnJlc3VsdCA9ICfmraTorr7lpIfkuI3mlK/mjIHmjIfnurnor4bliKsnO1xyXG5cdFx0XHR0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSBpZiAoIXBsdXMuZmluZ2VycHJpbnQuaXNLZXlndWFyZFNlY3VyZSgpKSB7XHJcblx0XHRcdHRoaXMucmVzdWx0ID0gJ+atpOiuvuWkh+acquiuvue9ruWvhueggemUgeWxj++8jOaXoOazleS9v+eUqOaMh+e6ueivhuWIqyc7XHJcblx0XHRcdHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xyXG5cdFx0fSBlbHNlIGlmICghcGx1cy5maW5nZXJwcmludC5pc0Vucm9sbGVkRmluZ2VycHJpbnRzKCkpIHtcclxuXHRcdFx0dGhpcy5yZXN1bHQgPSAn5q2k6K6+5aSH5pyq5b2V5YWl5oyH57q577yM6K+35Yiw6K6+572u5Lit5byA5ZCvJztcclxuXHRcdFx0dGhpcy5kaXNhYmxlZCA9IHRydWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnJlc3VsdCA9ICfmraTorr7lpIfmlK/mjIHmjIfnurnor4bliKsnO1xyXG5cdFx0XHR0aGlzLmRpc2FibGVkID0gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHR9LFxyXG5cclxuXHRmaW5nZXJwcmludDogZnVuY3Rpb24oc2V0dCkge1xyXG5cdFx0bGV0IGJsdHlwZSA9IHRydWU7XHJcblxyXG5cdFx0aWYgKCFwbHVzLmZpbmdlcnByaW50LmlzU3VwcG9ydCgpKSB7XHJcblx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdHRpdGxlOiAnVGhpcyBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBmaW5nZXJwcmludCBpZGVudGlmaWNhdGlvbicsXHJcblx0XHRcdFx0aWNvbjogJ25vbmUnLFxyXG5cdFx0XHRcdGR1cmF0aW9uOiAxNTAwXHJcblx0XHRcdH0pXHJcblx0XHRcdC8vIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xyXG5cdFx0fSBlbHNlIGlmICghcGx1cy5maW5nZXJwcmludC5pc0tleWd1YXJkU2VjdXJlKCkpIHtcclxuXHRcdFx0dW5pLnNob3dUb2FzdCh7XHJcblx0XHRcdFx0dGl0bGU6ICdUaGlzIGRldmljZSBpcyBub3QgZXF1aXBwZWQgd2l0aCBhIHBhc3N3b3JkIGxvY2sgc2NyZWVuIGFuZCBjYW5ub3QgdXNlIGZpbmdlcnByaW50IGlkZW50aWZpY2F0aW9uJyxcclxuXHRcdFx0XHRpY29uOiAnbm9uZScsXHJcblx0XHRcdFx0ZHVyYXRpb246IDE1MDBcclxuXHRcdFx0fSlcclxuXHJcblx0XHR9IGVsc2UgaWYgKCFwbHVzLmZpbmdlcnByaW50LmlzRW5yb2xsZWRGaW5nZXJwcmludHMoKSkge1xyXG5cdFx0XHR1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0XHR0aXRsZTogJ1RoZXJlIGlzIG5vIGZpbmdlcnByaW50IGVudGVyZWQgaW4gdGhpcyBkZXZpY2UuIFBsZWFzZSB0dXJuIGl0IG9uIGluIHRoZSBzZXR0aW5nJyxcclxuXHRcdFx0XHRpY29uOiAnbm9uZScsXHJcblx0XHRcdFx0ZHVyYXRpb246IDE1MDBcclxuXHRcdFx0fSlcclxuXHRcdFx0Ly8gdGhpcy5kaXNhYmxlZCA9IHRydWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyB0aGlzLnJlc3VsdCA9ICfmraTorr7lpIfmlK/mjIHmjIfnurnor4bliKsnO1xyXG5cdFx0XHQvLyAvLyB0aGlzLmRpc2FibGVkID0gZmFsc2U7XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHRcdFx0bGV0IHRoYXQgPSB0aGlzO1xyXG5cdFx0XHRsZXQgZm9yU2V0dCA9IHRydWU7XHJcblxyXG5cdFx0XHRwbHVzLmZpbmdlcnByaW50LmF1dGhlbnRpY2F0ZShmdW5jdGlvbigpIHtcclxuXHRcdFx0XHRwbHVzLm5hdGl2ZVVJLmNsb3NlV2FpdGluZygpOyAvL+WFvOWuuUFuZHJvaWTlubPlj7DlhbPpl63nrYnlvoXmoYZcdFxyXG5cdFx0XHRcdC8vIHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdC8vIFx0dGl0bGU6ICdGaW5nZXJwcmludCBpZGVudGlmaWNhdGlvbiBzdWNjZWVkZWQnLFxyXG5cdFx0XHRcdC8vIFx0aWNvbjogJ25vbmUnLFxyXG5cdFx0XHRcdC8vIFx0ZHVyYXRpb246IDE1MDAsXHJcblx0XHRcdFx0Ly8gXHRcdH0pXHJcblx0XHRcdFx0Ly8g5a2Y5YKo6K6+572u6YeM5byA5ZCv5oyH57q55ZCO55qE54q25oCB77yM6ZqQ6JeP5L2/55So5a+G56CBXHJcblx0XHRcdFx0Y29uc29sZS5sb2coZm9yU2V0dCwgMTIxMjEpXHJcblx0XHRcdFx0aWYgKHNldHQpIHtcclxuXHRcdFx0XHRcdHVuaS5zZXRTdG9yYWdlU3luYygnZmluZ2VyUGFzcycsIHRydWUpXHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhmb3JTZXR0LCAxMjEyMSlcclxuXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vcGx1cy5uYXRpdmVVSS5hbGVydCgnRmluZ2VycHJpbnQgaWRlbnRpZmljYXRpb24gc3VjY2VlZGVkJyk7XHJcblx0XHRcdH0sIGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0XHRzd2l0Y2ggKGUuY29kZSkge1xyXG5cdFx0XHRcdFx0Y2FzZSBlLkFVVEhFTlRJQ0FURV9NSVNNQVRDSDpcclxuXHRcdFx0XHRcdFx0cGx1cy5uYXRpdmVVSS50b2FzdCgnRmluZ2VycHJpbnQgbWF0Y2hpbmcgZmFpbGVkLCBwbGVhc2UgcmUtZW50ZXInKTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIGUuQVVUSEVOVElDQVRFX09WRVJMSU1JVDpcclxuXHRcdFx0XHRcdFx0cGx1cy5uYXRpdmVVSS5jbG9zZVdhaXRpbmcoKTsgLy/lhbzlrrlBbmRyb2lk5bmz5Y+w5YWz6Zet562J5b6F5qGGXHJcblx0XHRcdFx0XHRcdHBsdXMubmF0aXZlVUkuYWxlcnQoXHJcblx0XHRcdFx0XHRcdFx0J1RoZSBudW1iZXIgb2YgZmluZ2VycHJpbnQgaWRlbnRpZmljYXRpb24gZmFpbHVyZXMgZXhjZWVkcyB0aGUgbGltaXQuIFBsZWFzZSB1c2Ugb3RoZXIgbWV0aG9kcyBmb3IgYXV0aGVudGljYXRpb24nXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBlLkNBTkNFTDpcclxuXHRcdFx0XHRcdFx0cGx1cy5uYXRpdmVVSS50b2FzdCgnUmVjb2duaXRpb24gaGFzIGJlZW4gY2FuY2VsbGVkJyk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0cGx1cy5uYXRpdmVVSS5jbG9zZVdhaXRpbmcoKTsgLy/lhbzlrrlBbmRyb2lk5bmz5Y+w5YWz6Zet562J5b6F5qGGXHJcblx0XHRcdFx0XHRcdHBsdXMubmF0aXZlVUkuYWxlcnQoJ0ZpbmdlcnByaW50IGlkZW50aWZpY2F0aW9uIGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbicpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHQvLyBBbmRyb2lk5bmz5Y+w5omL5Yqo5by55Ye6562J5b6F5o+Q56S65qGGIFxyXG5cdFx0XHRpZiAoJ0FuZHJvaWQnID09IHBsdXMub3MubmFtZSkge1xyXG5cdFx0XHRcdHRoaXMuc2hvdyA9IHRydWU7XHJcblx0XHRcdFx0LyogcGx1cy5uYXRpdmVVSS5zaG93V2FpdGluZygn5oyH57q56K+G5Yir5LitLi4uJykub25jbG9zZSA9IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdFx0cGx1cy5maW5nZXJwcmludC5jYW5jZWwoKTtcclxuXHRcdFx0XHR9ICovXHJcblx0XHRcdH1cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblx0XHR9XHJcblxyXG5cclxuXHJcblx0fSxcclxuXHRwcmludENhbmNlbDogZnVuY3Rpb24oKSB7XHJcblx0XHRwbHVzLmZpbmdlcnByaW50LmNhbmNlbCgpO1xyXG5cdFx0Ly8gdGhpcy5yZXN1bHQ9XCLlgZzmraLmjIfnurnor4bliKtcIlxyXG5cdH0sXHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgV2FsbGV0VXRpbFxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///962\n"); /***/ }), /* 963 */ diff --git a/utils/WalletUtil.js b/utils/WalletUtil.js index 9c56fe5..11a11b1 100644 --- a/utils/WalletUtil.js +++ b/utils/WalletUtil.js @@ -234,7 +234,7 @@ let WalletUtil = { break; case 'ETH': console.log("进来ETH",wallet.balance ) - wallet.balance = await EthUtil.getBalance(wallet.addresss); + wallet.balance = await EthUtil.getBalance(wallet.address); console.log("进来ETH",wallet.balance ) for (let i = 1; i < wallet.coinList.length; i++) { wallet.coinList[i].balance = await EthUtil.getTokenBalance(wallet.address, wallet.coinList[i].contractAddress);