Spend less on fees, more on crypto. Buy crypto easily with MoonPay Balance. 20M+ users trust MoonPay worldwide.
Ready to onboard to Ethereum? With MetaMask Portfolio, you're in control.
Don’t invest unless you’re prepared to lose all the money you invest.
Ready to simplify your web3 experience? Try the all-in-one web3 app trusted by millions worldwide.
No gas? No problem. MetaMask Gas Station includes gas fees directly in your quote.
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Slots, Roulette, Poker & more - Proud sponsors of UFC, Everton & StakeF1 team!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Anonymous play on awesome games - sign up now for 25 free jackpot spins - worth $100s!
100s of games, generous bonuses, 20+ years of trusted gaming. Join CryptoWins & start winning today!
Overview
ETH Balance
Eth Value
$33,969.51 (@ $3,396.95/ETH)Token Holdings
Could not find any matches!
- ERC-20 Tokens (13)1 BENDBend Token (BEND)$0.00@0.000527,200 MXMX Token (MX)$96,832.00@3.560.00005003 imBTCThe Tokenize... (imBTC)$4.94@98,729.0012.63104711 MKRMaker (MKR)$19,540.99@1,547.067,653.76537654 TUSDTrueUSD (TUSD)$7,640.93@0.99830 N0006ERC-20: NTok... (N0006)3,119.8 N0010ERC-20: NTok... (N0010)3,739.2 N0020ERC-20: NTok... (N0020)20,140 N0025ERC-20: NTok... (N0025)0 N0001NToken00011.4 TokenERC-20 TOKEN*[Suspicious]1.7 TokenERC-20 TOKEN*[Suspicious]1.5 TokenERC-20 TOKEN*[Suspicious]NFT Tokens (12)claim rewards on eth-pool.neteth-pool.netERC-1155ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]
More Info
Private Name Tags
ContractCreator
- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
- Cards New
- Info
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 37,681 transactions
Transaction Hash MethodBlockFromToTurn Out 17671703 2023-07-11 16:57:47 536 days ago 1689094667 IN 0 ETH$0.00 0.00222538 33.2862832 Turn Out 15538233 2022-09-15 9:32:59 835 days ago 1663234379 IN 0 ETH$0.00 0.00074888 12.275659 Change Block Lim... 15538227 2022-09-15 9:31:47 835 days ago 1663234307 IN 0 ETH$0.00 0.00045744 13.39646286 Send Erc Buy Eth 15538223 2022-09-15 9:30:59 835 days ago 1663234259 IN 0 ETH$0.00 0.00436319 13.41316138 Change Block Lim... 15538196 2022-09-15 9:25:35 835 days ago 1663233935 IN 0 ETH$0.00 0.0004322 12.64822144 Turn Out 15538123 2022-09-15 9:10:59 835 days ago 1663233059 IN 0 ETH$0.00 0.00076485 11.16774488 Change Block Lim... 15538105 2022-09-15 9:07:23 835 days ago 1663232843 IN 0 ETH$0.00 0.00039218 11.48527276 Send Erc Buy Eth 15538101 2022-09-15 9:06:35 835 days ago 1663232795 IN 0 ETH$0.00 0.00385116 11.49449072 Change Block Lim... 15538086 2022-09-15 9:03:35 835 days ago 1663232615 IN 0 ETH$0.00 0.00047697 13.95856015 Change Tran Addi... 15537936 2022-09-15 8:32:59 835 days ago 1663230779 IN 0 ETH$0.00 0.00082316 24.1398436 Change Tran Eth 15537936 2022-09-15 8:32:59 835 days ago 1663230779 IN 0 ETH$0.00 0.00070539 24.1398436 Change Mapping 15537932 2022-09-15 8:32:11 835 days ago 1663230731 IN 0 ETH$0.00 0.00155555 28.09894862 Turn Out 11209724 2020-11-07 10:16:00 1512 days ago 1604744160 IN 0 ETH$0.00 0.00148823 23 Turn Out 11076839 2020-10-18 0:57:30 1532 days ago 1602982650 IN 0 ETH$0.00 0.02163 103 Turn Out 11076834 2020-10-18 0:56:49 1532 days ago 1602982609 IN 0 ETH$0.00 0.003927 18.7 Turn Out 10772654 2020-09-01 2:44:00 1579 days ago 1598928240 IN 0 ETH$0.00 0.0063074 235 Turn Out 10772605 2020-09-01 2:32:33 1579 days ago 1598927553 IN 0 ETH$0.00 0.01085742 220.50000072 Offer 10772598 2020-09-01 2:31:42 1579 days ago 1598927502 IN 10.1 ETH$34,309.21 0.07546649 235 Offer 10772285 2020-09-01 1:19:01 1579 days ago 1598923141 IN 10.1 ETH$34,309.21 0.07064948 220 Offer 10772273 2020-09-01 1:15:32 1579 days ago 1598922932 IN 10.1 ETH$34,309.21 0.08638718 220 Offer 10772248 2020-09-01 1:09:27 1579 days ago 1598922567 IN 10.1 ETH$34,309.21 0.00880161 219 Offer 10772083 2020-09-01 0:34:51 1579 days ago 1598920491 IN 10.1 ETH$34,309.21 0.08560184 218.00000145 Offer 10772003 2020-09-01 0:17:23 1579 days ago 1598919443 IN 10.1 ETH$34,309.21 0.07943097 201 Offer 10768951 2020-08-31 13:23:57 1580 days ago 1598880237 IN 10.1 ETH$34,309.21 0.10317432 258.5 Offer 10768950 2020-08-31 13:23:16 1580 days ago 1598880196 IN 10.1 ETH$34,309.21 0.10186027 255.2000016 Latest 25 internal transactions (View All)
Advanced mode:Parent Transaction Hash Block FromTo17671703 2023-07-11 16:57:47 536 days ago 1689094667 10 ETH$33,969.51 15538233 2022-09-15 9:32:59 835 days ago 1663234379 10 ETH$33,969.51 15538123 2022-09-15 9:10:59 835 days ago 1663233059 10 ETH$33,969.51 11209724 2020-11-07 10:16:00 1512 days ago 1604744160 10 ETH$33,969.51 10772605 2020-09-01 2:32:33 1579 days ago 1598927553 10 ETH$33,969.51 10772273 2020-09-01 1:15:32 1579 days ago 1598922932 0.1 ETH$339.70 10772083 2020-09-01 0:34:51 1579 days ago 1598920491 0.1 ETH$339.70 10772003 2020-09-01 0:17:23 1579 days ago 1598919443 0.1 ETH$339.70 10768951 2020-08-31 13:23:57 1580 days ago 1598880237 0.1 ETH$339.70 10768950 2020-08-31 13:23:16 1580 days ago 1598880196 0.1 ETH$339.70 10768949 2020-08-31 13:23:15 1580 days ago 1598880195 0.1 ETH$339.70 10768947 2020-08-31 13:23:02 1580 days ago 1598880182 0.1 ETH$339.70 10768943 2020-08-31 13:21:52 1580 days ago 1598880112 0.1 ETH$339.70 10768941 2020-08-31 13:20:40 1580 days ago 1598880040 0.1 ETH$339.70 10768939 2020-08-31 13:20:32 1580 days ago 1598880032 0.1 ETH$339.70 10768936 2020-08-31 13:19:42 1580 days ago 1598879982 0.1 ETH$339.70 10768935 2020-08-31 13:19:29 1580 days ago 1598879969 0.1 ETH$339.70 10768933 2020-08-31 13:19:23 1580 days ago 1598879963 0.1 ETH$339.70 10768929 2020-08-31 13:19:05 1580 days ago 1598879945 0.1 ETH$339.70 10768927 2020-08-31 13:18:52 1580 days ago 1598879932 0.1 ETH$339.70 10768926 2020-08-31 13:18:38 1580 days ago 1598879918 0.1 ETH$339.70 10768925 2020-08-31 13:18:30 1580 days ago 1598879910 0.1 ETH$339.70 10768923 2020-08-31 13:18:10 1580 days ago 1598879890 0.1 ETH$339.70 10768921 2020-08-31 13:17:55 1580 days ago 1598879875 0.1 ETH$339.70 10768920 2020-08-31 13:17:44 1580 days ago 1598879864 0.1 ETH$339.70 Loading...LoadingContract Name:Nest_NToken_OfferMain
Compiler Versionv0.6.0+commit.26b70077
Contract Source Code (Solidity)
- contract Nest_NToken_OfferMain *
- - function changeMapping(address voteFa ...
- - function offer(uint256 ethAmount, uin ...
- - function createOffer(uint256 ethAmoun ...
- - function toIndex(address contractAddr ...
- - function toAddress(uint256 index)
- - function turnOut(address contractAddr ...
- - function sendEthBuyErc(uint256 ethAmo ...
- - function sendErcBuyEth(uint256 ethAmo ...
- - function oreDrawing(address ntoken)
- - function mining(uint256 blockNum, add ...
- - function comparativePrice(uint256 myE ...
- - function checkContractState(uint256 c ...
- - function repayEth(address accountAddr ...
- - function checkBlockLimit()
- - function checkTranEth()
- - function checkTranAddition()
- - function checkleastEth()
- - function checkOfferSpan()
- - function checkBlockOfferAmount(uint25 ...
- - function checkBlockMining(uint256 blo ...
- - function checkOfferMining(uint256 blo ...
- - function checkOwnerMining()
- - function checkAttenuationAmount(uint2 ...
- - function changeTranEth(uint256 num)
- - function changeBlockLimit(uint32 num)
- - function changeTranAddition(uint256 n ...
- - function changeLeastEth(uint256 num)
- - function changeOfferSpan(uint256 num)
- - function changekDeviate(uint256 num)
- - function changeDeviationFromScale(uin ...
- - function changeOwnerMining(uint256 nu ...
- - function changeAttenuationAmount(uint ...
- - function getPriceCount()
- - function getPrice(uint256 priceIndex)
- - function find(address start, uint256 ...
- - function list(uint256 offset, uint256 ...
- - function writeOfferPriceData(uint256 ...
- - function writeUInt(uint256 iv, bytes ...
- - function writeAddress(address addr, b ...
- interface Nest_3_OfferPrice
- - function addPrice(uint256 ethAmount, ...
- - function changePrice(uint256 ethAmoun ...
- - function updateAndCheckPricePrivate(a ...
- interface Nest_3_VoteFactory
- - function checkAddress(string calldata ...
- - function checkOwners(address man)
- interface Nest_NToken
- - function increaseTotal(uint256 value)
- - function checkBlockInfo()
- - function checkBidder()
- - function totalSupply()
- - function balanceOf(address account)
- - function transfer(address recipient, ...
- - function allowance(address owner, add ...
- - function approve(address spender, uin ...
- - function transferFrom(address sender, ...
- interface Nest_NToken_TokenMapping
- - function checkTokenMapping(address to ...
- interface Nest_3_Abonus
- - function switchToEth(address token)
- - function switchToEthForNTokenOffer(ad ...
- library SafeMath
- - function add(uint256 a, uint256 b)
- - function sub(uint256 a, uint256 b)
- - function sub(uint256 a, uint256 b, st ...
- - function mul(uint256 a, uint256 b)
- - function div(uint256 a, uint256 b)
- - function div(uint256 a, uint256 b, st ...
- - function mod(uint256 a, uint256 b)
- - function mod(uint256 a, uint256 b, st ...
- library address_make_payable
- - function make_payable(address x)
- library SafeERC20
- - function safeTransfer(ERC20 token, ad ...
- - function safeTransferFrom(ERC20 token ...
- - function safeApprove(ERC20 token, add ...
- - function safeIncreaseAllowance(ERC20 ...
- - function safeDecreaseAllowance(ERC20 ...
- - function callOptionalReturn(ERC20 tok ...
- interface ERC20
- - function totalSupply()
- - function balanceOf(address account)
- - function transfer(address recipient, ...
- - function allowance(address owner, add ...
- - function approve(address spender, uin ...
- - function transferFrom(address sender, ...
- library Address
- - function isContract(address account)
- - function sendValue(address payable re ...
/** *Submitted for verification at Etherscan.io on 2020-08-11 */ pragma solidity 0.6.0; /** * @title Offering contract * @dev Offering logic and mining logic */ contract Nest_NToken_OfferMain { using SafeMath for uint256; using address_make_payable for address; using SafeERC20 for ERC20; // Offering data structure struct Nest_NToken_OfferPriceData { // The unique identifier is determined by the position of the offer in the array, and is converted to each other through a fixed algorithm (toindex(), toaddress()) address owner; // Offering owner bool deviate; // Whether it deviates address tokenAddress; // The erc20 contract address of the target offer token uint256 ethAmount; // The ETH amount in the offer list uint256 tokenAmount; // The token amount in the offer list uint256 dealEthAmount; // The remaining number of tradable ETH uint256 dealTokenAmount; // The remaining number of tradable tokens uint256 blockNum; // The block number where the offer is located uint256 serviceCharge; // The fee for mining // Determine whether the asset has been collected by judging that ethamount, tokenamount, and servicecharge are all 0 } Nest_NToken_OfferPriceData [] _prices; // Array used to save offers Nest_3_VoteFactory _voteFactory; // Voting contract Nest_3_OfferPrice _offerPrice; // Price contract Nest_NToken_TokenMapping _tokenMapping; // NToken mapping contract ERC20 _nestToken; // nestToken Nest_3_Abonus _abonus; // Bonus pool uint256 _miningETH = 10; // Offering mining fee ratio uint256 _tranEth = 1; // Taker fee ratio uint256 _tranAddition = 2; // Additional transaction multiple uint256 _leastEth = 10 ether; // Minimum offer of ETH uint256 _offerSpan = 10 ether; // ETH Offering span uint256 _deviate = 10; // Price deviation - 10% uint256 _deviationFromScale = 10; // Deviation from asset scale uint256 _ownerMining = 5; // Creator ratio uint256 _afterMiningAmount = 0.4 ether; // Stable period mining amount uint32 _blockLimit = 25; // Block interval upper limit uint256 _blockAttenuation = 2400000; // Block decay interval mapping(uint256 => mapping(address => uint256)) _blockOfferAmount; // Block offer times - block number=>token address=>offer fee mapping(uint256 => mapping(address => uint256)) _blockMining; // Offering block mining amount - block number=>token address=>mining amount uint256[10] _attenuationAmount; // Mining decay list // Log token contract address event OfferTokenContractAddress(address contractAddress); // Log offering contract, token address, amount of ETH, amount of ERC20, delayed block, mining fee event OfferContractAddress(address contractAddress, address tokenAddress, uint256 ethAmount, uint256 erc20Amount, uint256 continued,uint256 mining); // Log transaction sender, transaction token, transaction amount, purchase token address, purchase token amount, transaction offering contract address, transaction user address event OfferTran(address tranSender, address tranToken, uint256 tranAmount,address otherToken, uint256 otherAmount, address tradedContract, address tradedOwner); // Log current block, current block mined amount, token address event OreDrawingLog(uint256 nowBlock, uint256 blockAmount, address tokenAddress); // Log offering block, token address, token offered times event MiningLog(uint256 blockNum, address tokenAddress, uint256 offerTimes); /** * Initialization method * @param voteFactory Voting contract address **/ constructor (address voteFactory) public { Nest_3_VoteFactory voteFactoryMap = Nest_3_VoteFactory(address(voteFactory)); _voteFactory = voteFactoryMap; _offerPrice = Nest_3_OfferPrice(address(voteFactoryMap.checkAddress("nest.v3.offerPrice"))); _nestToken = ERC20(voteFactoryMap.checkAddress("nest")); _abonus = Nest_3_Abonus(voteFactoryMap.checkAddress("nest.v3.abonus")); _tokenMapping = Nest_NToken_TokenMapping(address(voteFactoryMap.checkAddress("nest.nToken.tokenMapping"))); uint256 blockAmount = 4 ether; for (uint256 i = 0; i < 10; i ++) { _attenuationAmount[i] = blockAmount; blockAmount = blockAmount.mul(8).div(10); } } /** * Reset voting contract method * @param voteFactory Voting contract address **/ function changeMapping(address voteFactory) public onlyOwner { Nest_3_VoteFactory voteFactoryMap = Nest_3_VoteFactory(address(voteFactory)); _voteFactory = voteFactoryMap; _offerPrice = Nest_3_OfferPrice(address(voteFactoryMap.checkAddress("nest.v3.offerPrice"))); _nestToken = ERC20(voteFactoryMap.checkAddress("nest")); _abonus = Nest_3_Abonus(voteFactoryMap.checkAddress("nest.v3.abonus")); _tokenMapping = Nest_NToken_TokenMapping(address(voteFactoryMap.checkAddress("nest.nToken.tokenMapping"))); } /** * Offering method * @param ethAmount ETH amount * @param erc20Amount Erc20 token amount * @param erc20Address Erc20 token address **/ function offer(uint256 ethAmount, uint256 erc20Amount, address erc20Address) public payable { require(address(msg.sender) == address(tx.origin), "It can't be a contract"); address nTokenAddress = _tokenMapping.checkTokenMapping(erc20Address); require(nTokenAddress != address(0x0)); // Judge whether the price deviates uint256 ethMining; bool isDeviate = comparativePrice(ethAmount,erc20Amount,erc20Address); if (isDeviate) { require(ethAmount >= _leastEth.mul(_deviationFromScale), "EthAmount needs to be no less than 10 times of the minimum scale"); ethMining = _leastEth.mul(_miningETH).div(1000); } else { ethMining = ethAmount.mul(_miningETH).div(1000); } require(msg.value >= ethAmount.add(ethMining), "msg.value needs to be equal to the quoted eth quantity plus Mining handling fee"); uint256 subValue = msg.value.sub(ethAmount.add(ethMining)); if (subValue > 0) { repayEth(address(msg.sender), subValue); } // Create an offer createOffer(ethAmount, erc20Amount, erc20Address,isDeviate, ethMining); // Transfer in offer asset - erc20 to this contract ERC20(erc20Address).safeTransferFrom(address(msg.sender), address(this), erc20Amount); _abonus.switchToEthForNTokenOffer.value(ethMining)(nTokenAddress); // Mining if (_blockOfferAmount[block.number][erc20Address] == 0) { uint256 miningAmount = oreDrawing(nTokenAddress); Nest_NToken nToken = Nest_NToken(nTokenAddress); nToken.transfer(nToken.checkBidder(), miningAmount.mul(_ownerMining).div(100)); _blockMining[block.number][erc20Address] = miningAmount.sub(miningAmount.mul(_ownerMining).div(100)); } _blockOfferAmount[block.number][erc20Address] = _blockOfferAmount[block.number][erc20Address].add(ethMining); } /** * @dev Create offer * @param ethAmount Offering ETH amount * @param erc20Amount Offering erc20 amount * @param erc20Address Offering erc20 address **/ function createOffer(uint256 ethAmount, uint256 erc20Amount, address erc20Address, bool isDeviate, uint256 mining) private { // Check offer conditions require(ethAmount >= _leastEth, "Eth scale is smaller than the minimum scale"); require(ethAmount % _offerSpan == 0, "Non compliant asset span"); require(erc20Amount % (ethAmount.div(_offerSpan)) == 0, "Asset quantity is not divided"); require(erc20Amount > 0); // Create offering contract emit OfferContractAddress(toAddress(_prices.length), address(erc20Address), ethAmount, erc20Amount,_blockLimit,mining); _prices.push(Nest_NToken_OfferPriceData( msg.sender, isDeviate, erc20Address, ethAmount, erc20Amount, ethAmount, erc20Amount, block.number, mining )); // Record price _offerPrice.addPrice(ethAmount, erc20Amount, block.number.add(_blockLimit), erc20Address, address(msg.sender)); } // Convert offer address into index in offer array function toIndex(address contractAddress) public pure returns(uint256) { return uint256(contractAddress); } // Convert index in offer array into offer address function toAddress(uint256 index) public pure returns(address) { return address(index); } /** * Withdraw offer assets * @param contractAddress Offer address **/ function turnOut(address contractAddress) public { require(address(msg.sender) == address(tx.origin), "It can't be a contract"); uint256 index = toIndex(contractAddress); Nest_NToken_OfferPriceData storage offerPriceData = _prices[index]; require(checkContractState(offerPriceData.blockNum) == 1, "Offer status error"); // Withdraw ETH if (offerPriceData.ethAmount > 0) { uint256 payEth = offerPriceData.ethAmount; offerPriceData.ethAmount = 0; repayEth(offerPriceData.owner, payEth); } // Withdraw erc20 if (offerPriceData.tokenAmount > 0) { uint256 payErc = offerPriceData.tokenAmount; offerPriceData.tokenAmount = 0; ERC20(address(offerPriceData.tokenAddress)).transfer(offerPriceData.owner, payErc); } // Mining settlement if (offerPriceData.serviceCharge > 0) { mining(offerPriceData.blockNum, offerPriceData.tokenAddress, offerPriceData.serviceCharge, offerPriceData.owner); offerPriceData.serviceCharge = 0; } } /** * @dev Taker order - pay ETH and buy erc20 * @param ethAmount The amount of ETH of this offer * @param tokenAmount The amount of erc20 of this offer * @param contractAddress The target offer address * @param tranEthAmount The amount of ETH of taker order * @param tranTokenAmount The amount of erc20 of taker order * @param tranTokenAddress The erc20 address of taker order */ function sendEthBuyErc(uint256 ethAmount, uint256 tokenAmount, address contractAddress, uint256 tranEthAmount, uint256 tranTokenAmount, address tranTokenAddress) public payable { require(address(msg.sender) == address(tx.origin), "It can't be a contract"); uint256 serviceCharge = tranEthAmount.mul(_tranEth).div(1000); require(msg.value == ethAmount.add(tranEthAmount).add(serviceCharge), "msg.value needs to be equal to the quotation eth quantity plus transaction eth plus"); require(tranEthAmount % _offerSpan == 0, "Transaction size does not meet asset span"); // Get the offer data structure uint256 index = toIndex(contractAddress); Nest_NToken_OfferPriceData memory offerPriceData = _prices[index]; // Check the price, compare the current offer to the last effective price bool thisDeviate = comparativePrice(ethAmount,tokenAmount,tranTokenAddress); bool isDeviate; if (offerPriceData.deviate == true) { isDeviate = true; } else { isDeviate = thisDeviate; } // Limit the taker order only be twice the amount of the offer to prevent large-amount attacks if (offerPriceData.deviate) { // The taker order deviates x2 require(ethAmount >= tranEthAmount.mul(_tranAddition), "EthAmount needs to be no less than 2 times of transaction scale"); } else { if (isDeviate) { // If the taken offer is normal and the taker order deviates x10 require(ethAmount >= tranEthAmount.mul(_deviationFromScale), "EthAmount needs to be no less than 10 times of transaction scale"); } else { // If the taken offer is normal and the taker order is normal x2 require(ethAmount >= tranEthAmount.mul(_tranAddition), "EthAmount needs to be no less than 2 times of transaction scale"); } } // Check whether the conditions for taker order are satisfied require(checkContractState(offerPriceData.blockNum) == 0, "Offer status error"); require(offerPriceData.dealEthAmount >= tranEthAmount, "Insufficient trading eth"); require(offerPriceData.dealTokenAmount >= tranTokenAmount, "Insufficient trading token"); require(offerPriceData.tokenAddress == tranTokenAddress, "Wrong token address"); require(tranTokenAmount == offerPriceData.dealTokenAmount * tranEthAmount / offerPriceData.dealEthAmount, "Wrong token amount"); // Update the offer information offerPriceData.ethAmount = offerPriceData.ethAmount.add(tranEthAmount); offerPriceData.tokenAmount = offerPriceData.tokenAmount.sub(tranTokenAmount); offerPriceData.dealEthAmount = offerPriceData.dealEthAmount.sub(tranEthAmount); offerPriceData.dealTokenAmount = offerPriceData.dealTokenAmount.sub(tranTokenAmount); _prices[index] = offerPriceData; // Create a new offer createOffer(ethAmount, tokenAmount, tranTokenAddress, isDeviate, 0); // Transfer in erc20 + offer asset to this contract if (tokenAmount > tranTokenAmount) { ERC20(tranTokenAddress).safeTransferFrom(address(msg.sender), address(this), tokenAmount.sub(tranTokenAmount)); } else { ERC20(tranTokenAddress).safeTransfer(address(msg.sender), tranTokenAmount.sub(tokenAmount)); } // Modify price _offerPrice.changePrice(tranEthAmount, tranTokenAmount, tranTokenAddress, offerPriceData.blockNum.add(_blockLimit)); emit OfferTran(address(msg.sender), address(0x0), tranEthAmount, address(tranTokenAddress), tranTokenAmount, contractAddress, offerPriceData.owner); // Transfer fee if (serviceCharge > 0) { address nTokenAddress = _tokenMapping.checkTokenMapping(tranTokenAddress); _abonus.switchToEth.value(serviceCharge)(nTokenAddress); } } /** * @dev Taker order - pay erc20 and buy ETH * @param ethAmount The amount of ETH of this offer * @param tokenAmount The amount of erc20 of this offer * @param contractAddress The target offer address * @param tranEthAmount The amount of ETH of taker order * @param tranTokenAmount The amount of erc20 of taker order * @param tranTokenAddress The erc20 address of taker order */ function sendErcBuyEth(uint256 ethAmount, uint256 tokenAmount, address contractAddress, uint256 tranEthAmount, uint256 tranTokenAmount, address tranTokenAddress) public payable { require(address(msg.sender) == address(tx.origin), "It can't be a contract"); uint256 serviceCharge = tranEthAmount.mul(_tranEth).div(1000); require(msg.value == ethAmount.sub(tranEthAmount).add(serviceCharge), "msg.value needs to be equal to the quoted eth quantity plus transaction handling fee"); require(tranEthAmount % _offerSpan == 0, "Transaction size does not meet asset span"); // Get the offer data structure uint256 index = toIndex(contractAddress); Nest_NToken_OfferPriceData memory offerPriceData = _prices[index]; // Check the price, compare the current offer to the last effective price bool thisDeviate = comparativePrice(ethAmount,tokenAmount,tranTokenAddress); bool isDeviate; if (offerPriceData.deviate == true) { isDeviate = true; } else { isDeviate = thisDeviate; } // Limit the taker order only be twice the amount of the offer to prevent large-amount attacks if (offerPriceData.deviate) { // The taker order deviates x2 require(ethAmount >= tranEthAmount.mul(_tranAddition), "EthAmount needs to be no less than 2 times of transaction scale"); } else { if (isDeviate) { // If the taken offer is normal and the taker order deviates x10 require(ethAmount >= tranEthAmount.mul(_deviationFromScale), "EthAmount needs to be no less than 10 times of transaction scale"); } else { // If the taken offer is normal and the taker order is normal x2 require(ethAmount >= tranEthAmount.mul(_tranAddition), "EthAmount needs to be no less than 2 times of transaction scale"); } } // Check whether the conditions for taker order are satisfied require(checkContractState(offerPriceData.blockNum) == 0, "Offer status error"); require(offerPriceData.dealEthAmount >= tranEthAmount, "Insufficient trading eth"); require(offerPriceData.dealTokenAmount >= tranTokenAmount, "Insufficient trading token"); require(offerPriceData.tokenAddress == tranTokenAddress, "Wrong token address"); require(tranTokenAmount == offerPriceData.dealTokenAmount * tranEthAmount / offerPriceData.dealEthAmount, "Wrong token amount"); // Update the offer information offerPriceData.ethAmount = offerPriceData.ethAmount.sub(tranEthAmount); offerPriceData.tokenAmount = offerPriceData.tokenAmount.add(tranTokenAmount); offerPriceData.dealEthAmount = offerPriceData.dealEthAmount.sub(tranEthAmount); offerPriceData.dealTokenAmount = offerPriceData.dealTokenAmount.sub(tranTokenAmount); _prices[index] = offerPriceData; // Create a new offer createOffer(ethAmount, tokenAmount, tranTokenAddress, isDeviate, 0); // Transfer in erc20 + offer asset to this contract ERC20(tranTokenAddress).safeTransferFrom(address(msg.sender), address(this), tranTokenAmount.add(tokenAmount)); // Modify price _offerPrice.changePrice(tranEthAmount, tranTokenAmount, tranTokenAddress, offerPriceData.blockNum.add(_blockLimit)); emit OfferTran(address(msg.sender), address(tranTokenAddress), tranTokenAmount, address(0x0), tranEthAmount, contractAddress, offerPriceData.owner); // Transfer fee if (serviceCharge > 0) { address nTokenAddress = _tokenMapping.checkTokenMapping(tranTokenAddress); _abonus.switchToEth.value(serviceCharge)(nTokenAddress); } } /** * Offering mining * @param ntoken NToken address **/ function oreDrawing(address ntoken) private returns(uint256) { Nest_NToken miningToken = Nest_NToken(ntoken); (uint256 createBlock, uint256 recentlyUsedBlock) = miningToken.checkBlockInfo(); uint256 attenuationPointNow = block.number.sub(createBlock).div(_blockAttenuation); uint256 miningAmount = 0; uint256 attenuation; if (attenuationPointNow > 9) { attenuation = _afterMiningAmount; } else { attenuation = _attenuationAmount[attenuationPointNow]; } miningAmount = attenuation.mul(block.number.sub(recentlyUsedBlock)); miningToken.increaseTotal(miningAmount); emit OreDrawingLog(block.number, miningAmount, ntoken); return miningAmount; } /** * Retrieve mining * @param token Token address **/ function mining(uint256 blockNum, address token, uint256 serviceCharge, address owner) private returns(uint256) { // Block mining amount*offer fee/block offer fee uint256 miningAmount = _blockMining[blockNum][token].mul(serviceCharge).div(_blockOfferAmount[blockNum][token]); // Transfer NToken Nest_NToken nToken = Nest_NToken(address(_tokenMapping.checkTokenMapping(token))); require(nToken.transfer(address(owner), miningAmount), "Transfer failure"); emit MiningLog(blockNum, token,_blockOfferAmount[blockNum][token]); return miningAmount; } // Compare order prices function comparativePrice(uint256 myEthValue, uint256 myTokenValue, address token) private view returns(bool) { (uint256 frontEthValue, uint256 frontTokenValue) = _offerPrice.updateAndCheckPricePrivate(token); if (frontEthValue == 0 || frontTokenValue == 0) { return false; } uint256 maxTokenAmount = myEthValue.mul(frontTokenValue).mul(uint256(100).add(_deviate)).div(frontEthValue.mul(100)); if (myTokenValue <= maxTokenAmount) { uint256 minTokenAmount = myEthValue.mul(frontTokenValue).mul(uint256(100).sub(_deviate)).div(frontEthValue.mul(100)); if (myTokenValue >= minTokenAmount) { return false; } } return true; } // Check contract status function checkContractState(uint256 createBlock) public view returns (uint256) { if (block.number.sub(createBlock) > _blockLimit) { return 1; } return 0; } // Transfer ETH function repayEth(address accountAddress, uint256 asset) private { address payable addr = accountAddress.make_payable(); addr.transfer(asset); } // View the upper limit of the block interval function checkBlockLimit() public view returns(uint256) { return _blockLimit; } // View taker fee ratio function checkTranEth() public view returns (uint256) { return _tranEth; } // View additional transaction multiple function checkTranAddition() public view returns(uint256) { return _tranAddition; } // View minimum offering ETH function checkleastEth() public view returns(uint256) { return _leastEth; } // View offering ETH span function checkOfferSpan() public view returns(uint256) { return _offerSpan; } // View block offering amount function checkBlockOfferAmount(uint256 blockNum, address token) public view returns (uint256) { return _blockOfferAmount[blockNum][token]; } // View offering block mining amount function checkBlockMining(uint256 blockNum, address token) public view returns (uint256) { return _blockMining[blockNum][token]; } // View offering mining amount function checkOfferMining(uint256 blockNum, address token, uint256 serviceCharge) public view returns (uint256) { if (serviceCharge == 0) { return 0; } else { return _blockMining[blockNum][token].mul(serviceCharge).div(_blockOfferAmount[blockNum][token]); } } // View the owner allocation ratio function checkOwnerMining() public view returns(uint256) { return _ownerMining; } // View the mining decay function checkAttenuationAmount(uint256 num) public view returns(uint256) { return _attenuationAmount[num]; } // Modify taker order fee ratio function changeTranEth(uint256 num) public onlyOwner { _tranEth = num; } // Modify block interval upper limit function changeBlockLimit(uint32 num) public onlyOwner { _blockLimit = num; } // Modify additional transaction multiple function changeTranAddition(uint256 num) public onlyOwner { require(num > 0, "Parameter needs to be greater than 0"); _tranAddition = num; } // Modify minimum offering ETH function changeLeastEth(uint256 num) public onlyOwner { require(num > 0, "Parameter needs to be greater than 0"); _leastEth = num; } // Modify offering ETH span function changeOfferSpan(uint256 num) public onlyOwner { require(num > 0, "Parameter needs to be greater than 0"); _offerSpan = num; } // Modify price deviation function changekDeviate(uint256 num) public onlyOwner { _deviate = num; } // Modify the deviation from scale function changeDeviationFromScale(uint256 num) public onlyOwner { _deviationFromScale = num; } // Modify the owner allocation ratio function changeOwnerMining(uint256 num) public onlyOwner { _ownerMining = num; } // Modify the mining decay function changeAttenuationAmount(uint256 firstAmount, uint256 top, uint256 bottom) public onlyOwner { uint256 blockAmount = firstAmount; for (uint256 i = 0; i < 10; i ++) { _attenuationAmount[i] = blockAmount; blockAmount = blockAmount.mul(top).div(bottom); } } // Vote administrators only modifier onlyOwner(){ require(_voteFactory.checkOwners(msg.sender), "No authority"); _; } /** * Get the number of offers stored in the offer array * @return The number of offers stored in the offer array **/ function getPriceCount() view public returns (uint256) { return _prices.length; } /** * Get offer information according to the index * @param priceIndex Offer index * @return Offer information **/ function getPrice(uint256 priceIndex) view public returns (string memory) { // The buffer array used to generate the result string bytes memory buf = new bytes(500000); uint256 index = 0; index = writeOfferPriceData(priceIndex, _prices[priceIndex], buf, index); // Generate the result string and return bytes memory str = new bytes(index); while(index-- > 0) { str[index] = buf[index]; } return string(str); } /** * Search the contract address list of the target account (reverse order) * @param start Search forward from the index corresponding to the given contract address (not including the record corresponding to start address) * @param count Maximum number of records to return * @param maxFindCount The max index to search * @param owner Target account address * @return Separate the offer records with symbols. use , to divide fields: * uuid,owner,tokenAddress,ethAmount,tokenAmount,dealEthAmount,dealTokenAmount,blockNum,serviceCharge **/ function find(address start, uint256 count, uint256 maxFindCount, address owner) view public returns (string memory) { // Buffer array used to generate result string bytes memory buf = new bytes(500000); uint256 index = 0; // Calculate search interval i and end uint256 i = _prices.length; uint256 end = 0; if (start != address(0)) { i = toIndex(start); } if (i > maxFindCount) { end = i - maxFindCount; } // Loop search, write qualified records into buffer while (count > 0 && i-- > end) { Nest_NToken_OfferPriceData memory price = _prices[i]; if (price.owner == owner) { --count; index = writeOfferPriceData(i, price, buf, index); } } // Generate result string and return bytes memory str = new bytes(index); while(index-- > 0) { str[index] = buf[index]; } return string(str); } /** * Get the list of offers by page * @param offset Skip the first offset records * @param count Maximum number of records to return * @param order Sort rules. 0 means reverse order, non-zero means positive order * @return Separate the offer records with symbols. use , to divide fields: * uuid,owner,tokenAddress,ethAmount,tokenAmount,dealEthAmount,dealTokenAmount,blockNum,serviceCharge **/ function list(uint256 offset, uint256 count, uint256 order) view public returns (string memory) { // Buffer array used to generate result string bytes memory buf = new bytes(500000); uint256 index = 0; // Find search interval i and end uint256 i = 0; uint256 end = 0; if (order == 0) { // Reverse order, in default // Calculate search interval i and end if (offset < _prices.length) { i = _prices.length - offset; } if (count < i) { end = i - count; } // Write records in the target interval into the buffer while (i-- > end) { index = writeOfferPriceData(i, _prices[i], buf, index); } } else { // Ascending order // Calculate the search interval i and end if (offset < _prices.length) { i = offset; } else { i = _prices.length; } end = i + count; if(end > _prices.length) { end = _prices.length; } // Write the records in the target interval into the buffer while (i < end) { index = writeOfferPriceData(i, _prices[i], buf, index); ++i; } } // Generate the result string and return bytes memory str = new bytes(index); while(index-- > 0) { str[index] = buf[index]; } return string(str); } // Write the offer data into the buffer and return the buffer index function writeOfferPriceData(uint256 priceIndex, Nest_NToken_OfferPriceData memory price, bytes memory buf, uint256 index) pure private returns (uint256) { index = writeAddress(toAddress(priceIndex), buf, index); buf[index++] = byte(uint8(44)); index = writeAddress(price.owner, buf, index); buf[index++] = byte(uint8(44)); index = writeAddress(price.tokenAddress, buf, index); buf[index++] = byte(uint8(44)); index = writeUInt(price.ethAmount, buf, index); buf[index++] = byte(uint8(44)); index = writeUInt(price.tokenAmount, buf, index); buf[index++] = byte(uint8(44)); index = writeUInt(price.dealEthAmount, buf, index); buf[index++] = byte(uint8(44)); index = writeUInt(price.dealTokenAmount, buf, index); buf[index++] = byte(uint8(44)); index = writeUInt(price.blockNum, buf, index); buf[index++] = byte(uint8(44)); index = writeUInt(price.serviceCharge, buf, index); buf[index++] = byte(uint8(44)); return index; } // Convert integer to string in decimal form, write the string into the buffer, and return the buffer index function writeUInt(uint256 iv, bytes memory buf, uint256 index) pure public returns (uint256) { uint256 i = index; do { buf[index++] = byte(uint8(iv % 10 +48)); iv /= 10; } while (iv > 0); for (uint256 j = index; j > i; ++i) { byte t = buf[i]; buf[i] = buf[--j]; buf[j] = t; } return index; } // Convert the address to a hexadecimal string and write it into the buffer, and return the buffer index function writeAddress(address addr, bytes memory buf, uint256 index) pure private returns (uint256) { uint256 iv = uint256(addr); uint256 i = index + 40; do { uint256 w = iv % 16; if(w < 10) { buf[index++] = byte(uint8(w +48)); } else { buf[index++] = byte(uint8(w +87)); } iv /= 16; } while (index < i); i -= 40; for (uint256 j = index; j > i; ++i) { byte t = buf[i]; buf[i] = buf[--j]; buf[j] = t; } return index; } } // Price contract interface Nest_3_OfferPrice { // Add price data function addPrice(uint256 ethAmount, uint256 tokenAmount, uint256 endBlock, address tokenAddress, address offerOwner) external; // Modify price function changePrice(uint256 ethAmount, uint256 tokenAmount, address tokenAddress, uint256 endBlock) external; function updateAndCheckPricePrivate(address tokenAddress) external view returns(uint256 ethAmount, uint256 erc20Amount); } // Voting contract interface Nest_3_VoteFactory { // Check address function checkAddress(string calldata name) external view returns (address contractAddress); // Check whether an administrator function checkOwners(address man) external view returns (bool); } // NToken contract interface Nest_NToken { // Additional issuance function increaseTotal(uint256 value) external; // Check mining information function checkBlockInfo() external view returns(uint256 createBlock, uint256 recentlyUsedBlock); // Check creator function checkBidder() external view returns(address); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // NToken mapping contract interface Nest_NToken_TokenMapping { // Check token mapping function checkTokenMapping(address token) external view returns (address); } // Bonus pool contract interface Nest_3_Abonus { function switchToEth(address token) external payable; function switchToEthForNTokenOffer(address token) external payable; } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library address_make_payable { function make_payable(address x) internal pure returns (address payable) { return address(uint160(x)); } } library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(ERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(ERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(ERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function callOptionalReturn(ERC20 token, bytes memory data) private { require(address(token).isContract(), "SafeERC20: call to non-contract"); (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface ERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"inputs":[{"internalType":"address","name":"voteFactory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNum","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"offerTimes","type":"uint256"}],"name":"MiningLog","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"erc20Amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"continued","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mining","type":"uint256"}],"name":"OfferContractAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"OfferTokenContractAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tranSender","type":"address"},{"indexed":false,"internalType":"address","name":"tranToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"tranAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"otherToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"otherAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"tradedContract","type":"address"},{"indexed":false,"internalType":"address","name":"tradedOwner","type":"address"}],"name":"OfferTran","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nowBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"OreDrawingLog","type":"event"},{"inputs":[{"internalType":"uint256","name":"firstAmount","type":"uint256"},{"internalType":"uint256","name":"top","type":"uint256"},{"internalType":"uint256","name":"bottom","type":"uint256"}],"name":"changeAttenuationAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"num","type":"uint32"}],"name":"changeBlockLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeDeviationFromScale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeLeastEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"voteFactory","type":"address"}],"name":"changeMapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeOfferSpan","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeOwnerMining","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeTranAddition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changeTranEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"changekDeviate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"checkAttenuationAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkBlockLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNum","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"checkBlockMining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNum","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"checkBlockOfferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"createBlock","type":"uint256"}],"name":"checkContractState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNum","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"serviceCharge","type":"uint256"}],"name":"checkOfferMining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkOfferSpan","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkOwnerMining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkTranAddition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkTranEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkleastEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"start","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"maxFindCount","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"find","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceIndex","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"order","type":"uint256"}],"name":"list","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"erc20Amount","type":"uint256"},{"internalType":"address","name":"erc20Address","type":"address"}],"name":"offer","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tranEthAmount","type":"uint256"},{"internalType":"uint256","name":"tranTokenAmount","type":"uint256"},{"internalType":"address","name":"tranTokenAddress","type":"address"}],"name":"sendErcBuyEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint256","name":"tranEthAmount","type":"uint256"},{"internalType":"uint256","name":"tranTokenAmount","type":"uint256"},{"internalType":"address","name":"tranTokenAddress","type":"address"}],"name":"sendEthBuyErc","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"toAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"toIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"turnOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"iv","type":"uint256"},{"internalType":"bytes","name":"buf","type":"bytes"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"writeUInt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
6080604052600a600681905560016007556002600855678ac7230489e8000060098190558155600b819055600c556005600d5567058d15e176280000600e55600f805463ffffffff1916601917905562249f006010553480156200006257600080fd5b5060405162004ae238038062004ae2833981810160405260208110156200008857600080fd5b5051600180546001600160a01b0319166001600160a01b038316908117909155604080516347f3bf4360e11b815260206004820181905260126024830152716e6573742e76332e6f66666572507269636560701b60448301529151849392638fe77e869260648082019391829003018186803b1580156200010857600080fd5b505afa1580156200011d573d6000803e3d6000fd5b505050506040513d60208110156200013457600080fd5b5051600280546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048083018290526024830152631b995cdd60e21b6044830152915192841692638fe77e8692606480840193919291829003018186803b158015620001a657600080fd5b505afa158015620001bb573d6000803e3d6000fd5b505050506040513d6020811015620001d257600080fd5b5051600480546001600160a01b0319166001600160a01b03928316178155604080516347f3bf4360e11b81526020928101839052600e60248201526d6e6573742e76332e61626f6e757360901b6044820152905192841692638fe77e8692606480840193919291829003018186803b1580156200024e57600080fd5b505afa15801562000263573d6000803e3d6000fd5b505050506040513d60208110156200027a57600080fd5b5051600580546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048201819052601860248301527f6e6573742e6e546f6b656e2e746f6b656e4d617070696e6700000000000000006044830152915192841692638fe77e8692606480840193919291829003018186803b1580156200030657600080fd5b505afa1580156200031b573d6000803e3d6000fd5b505050506040513d60208110156200033257600080fd5b5051600380546001600160a01b0319166001600160a01b03909216919091179055673782dace9d90000060005b600a811015620003b85781601382600a81106200037857fe5b0155620003ad600a62000399846008620003c2602090811b6200333d17901c565b6200042960201b620033961790919060201c565b91506001016200035f565b505050506200051a565b600082620003d35750600062000423565b82820282848281620003e157fe5b0414620004205760405162461bcd60e51b815260040180806020018281038252602181526020018062004ac16021913960400191505060405180910390fd5b90505b92915050565b60006200042083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200047360201b60201c565b60008183620005035760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620004c7578181015183820152602001620004ad565b50505050905090810190601f168015620004f55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200051057fe5b0495945050505050565b614597806200052a6000396000f3fe6080604052600436106101e35760003560e01c8063b3e2767c11610102578063e0051aa911610095578063e9ec551d11610064578063e9ec551d146107f1578063f0bbe1ba14610824578063f6a4932f1461084e578063faee702214610880576101e3565b8063e0051aa91461072d578063e18da8bf14610773578063e5d69e3f1461079d578063e7572230146107c7576101e3565b8063cbc7ef09116100d1578063cbc7ef091461066e578063cd6d875614610683578063d900d676146106bc578063dea0799a14610703576101e3565b8063b3e2767c146105bf578063b43ea2d814610605578063b86f25581461062f578063c48c1a7114610659576101e3565b80633d9faf871161017a57806395334db21161014957806395334db2146104645780639abe81c814610497578063a16f460f146104d0578063a781e7f81461058c576101e3565b80633d9faf87146103be57806343c53364146103f45780638d7092e61461040957806391f5f9f31461041e576101e3565b806326a203cb116101b657806326a203cb1461031057806334e66f1e1461033a57806335d63d321461034f5780633aedef141461038e576101e3565b806308920330146101e8578063180d574c14610214578063187f3d981461025057806319aeb49014610265575b600080fd5b3480156101f457600080fd5b506102126004803603602081101561020b57600080fd5b5035610895565b005b34801561022057600080fd5b5061023e6004803603602081101561023757600080fd5b5035610951565b60408051918252519081900360200190f35b34801561025c57600080fd5b5061023e61096a565b34801561027157600080fd5b5061029b6004803603606081101561028857600080fd5b5080359060208101359060400135610970565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d55781810151838201526020016102bd565b50505050905090810190601f1680156103025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031c57600080fd5b506102126004803603602081101561033357600080fd5b5035610b5a565b34801561034657600080fd5b5061023e610c16565b34801561035b57600080fd5b5061023e6004803603606081101561037257600080fd5b508035906001600160a01b036020820135169060400135610c1c565b34801561039a57600080fd5b50610212600480360360208110156103b157600080fd5b503563ffffffff16610c8b565b3480156103ca57600080fd5b50610212600480360360608110156103e157600080fd5b5080359060208101359060400135610d5e565b34801561040057600080fd5b5061023e610e57565b34801561041557600080fd5b5061023e610e5d565b610212600480360360c081101561043457600080fd5b508035906020810135906001600160a01b03604082013581169160608101359160808201359160a0013516610e63565b34801561047057600080fd5b5061023e6004803603602081101561048757600080fd5b50356001600160a01b03166116af565b3480156104a357600080fd5b5061023e600480360360408110156104ba57600080fd5b50803590602001356001600160a01b03166116bb565b3480156104dc57600080fd5b5061023e600480360360608110156104f357600080fd5b8135919081019060408101602082013564010000000081111561051557600080fd5b82018360208201111561052757600080fd5b8035906020019184600183028401116401000000008311171561054957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506116e5915050565b34801561059857600080fd5b50610212600480360360208110156105af57600080fd5b50356001600160a01b03166117ca565b610212600480360360c08110156105d557600080fd5b508035906020810135906001600160a01b03604082013581169160608101359160808201359160a0013516611b42565b34801561061157600080fd5b506102126004803603602081101561062857600080fd5b503561228d565b34801561063b57600080fd5b506102126004803603602081101561065257600080fd5b5035612349565b34801561066557600080fd5b5061023e612444565b34801561067a57600080fd5b5061023e61244a565b34801561068f57600080fd5b5061023e600480360360408110156106a657600080fd5b50803590602001356001600160a01b0316612456565b3480156106c857600080fd5b5061029b600480360360808110156106df57600080fd5b506001600160a01b038135811691602081013591604082013591606001351661247e565b34801561070f57600080fd5b506102126004803603602081101561072657600080fd5b5035612641565b34801561073957600080fd5b506107576004803603602081101561075057600080fd5b50356126fd565b604080516001600160a01b039092168252519081900360200190f35b34801561077f57600080fd5b5061023e6004803603602081101561079657600080fd5b5035612700565b3480156107a957600080fd5b50610212600480360360208110156107c057600080fd5b5035612733565b3480156107d357600080fd5b5061029b600480360360208110156107ea57600080fd5b503561282e565b3480156107fd57600080fd5b506102126004803603602081101561081457600080fd5b50356001600160a01b0316612985565b34801561083057600080fd5b506102126004803603602081101561084757600080fd5b5035612b61565b6102126004803603606081101561086457600080fd5b50803590602081013590604001356001600160a01b0316612c5c565b34801561088c57600080fd5b5061023e6130fb565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d602081101561090a57600080fd5b505161094c576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600c55565b6000601382600a811061096057fe5b015490505b919050565b60085490565b604080516207a1208082526207a14082019092526060918291906020820181803883390190505090506000808085610a7f576000548810156109b55760005488900391505b818710156109c257508581035b600019820191811015610a7a57610a7382600084815481106109e057fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b038082168552600160a01b90910460ff161515948401949094526001810154909316908201526002820154606082015260038201546080820152600482015460a0820152600582015460c0820152600682015460e08201526007909101546101008201528686613101565b92506109c2565b610ad1565b600054881015610a9157879150610a97565b60005491505b5060005481870190811115610aab57506000545b80821015610ad157610ac482600084815481106109e057fe5b9250816001019150610aab565b6060836040519080825280601f01601f191660200182016040528015610afe576020820181803883390190505b5090505b60001984019315610b4c57848481518110610b1957fe5b602001015160f81c60f81b818581518110610b3057fe5b60200101906001600160f81b031916908160001a905350610b02565b9450505050505b9392505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610ba557600080fd5b505afa158015610bb9573d6000803e3d6000fd5b505050506040513d6020811015610bcf57600080fd5b5051610c11576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600755565b60075490565b600081610c2b57506000610b53565b60008481526011602090815260408083206001600160a01b0387168085529083528184205488855260128452828520918552925290912054610c849190610c78908563ffffffff61333d16565b9063ffffffff61339616565b9050610b53565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610cd657600080fd5b505afa158015610cea573d6000803e3d6000fd5b505050506040513d6020811015610d0057600080fd5b5051610d42576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600f805463ffffffff191663ffffffff92909216919091179055565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610da957600080fd5b505afa158015610dbd573d6000803e3d6000fd5b505050506040513d6020811015610dd357600080fd5b5051610e15576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b8260005b600a811015610e505781601382600a8110610e3057fe5b0155610e4683610c78848763ffffffff61333d16565b9150600101610e19565b5050505050565b600d5490565b600a5490565b333214610eb0576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610ecd6103e8610c786007548761333d90919063ffffffff16565b9050610eef81610ee3898763ffffffff6133d816565b9063ffffffff6133d816565b3414610f2c5760405162461bcd60e51b81526004018080602001828103825260538152602001806144566053913960600191505060405180910390fd5b600a548481610f3757fe5b0615610f745760405162461bcd60e51b81526004018080602001828103825260298152602001806143156029913960400191505060405180910390fd5b6000610f7f866116af565b9050610f89614289565b60008281548110610f9657fe5b60009182526020808320604080516101208101825260089490940290910180546001600160a01b038082168652600160a01b90910460ff161515938501939093526001810154909216908301526002810154606083015260038101546080830152600481015460a0830152600581015460c0830152600681015460e083015260070154610100820152915061102c8a8a87613432565b90506000826020015115156001151514156110495750600161104c565b50805b8260200151156110ad5760085461106a90899063ffffffff61333d16565b8b10156110a85760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611157565b801561110557600c546110c790899063ffffffff61333d16565b8b10156110a85760405162461bcd60e51b81526004018080602001828103825260408152602001806143c26040913960400191505060405180910390fd5b60085461111990899063ffffffff61333d16565b8b10156111575760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b6111648360e00151612700565b156111ab576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b878360a0015110156111ff576040805162461bcd60e51b8152602060048201526018602482015277092dce6eaccccd2c6d2cadce840e8e4c2c8d2dcce40cae8d60431b604482015290519081900360640190fd5b868360c001511015611258576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742074726164696e6720746f6b656e000000000000604482015290519081900360640190fd5b856001600160a01b031683604001516001600160a01b0316146112b8576040805162461bcd60e51b815260206004820152601360248201527257726f6e6720746f6b656e206164647265737360681b604482015290519081900360640190fd5b8260a00151888460c0015102816112cb57fe5b048714611314576040805162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d1bdad95b88185b5bdd5b9d60721b604482015290519081900360640190fd5b6060830151611329908963ffffffff6133d816565b60608401526080830151611343908863ffffffff61358d16565b608084015260a083015161135d908963ffffffff61358d16565b60a084015260c0830151611377908863ffffffff61358d16565b60c0840152600080548491908690811061138d57fe5b6000918252602080832084516008909302018054918501511515600160a01b0260ff60a01b196001600160a01b039485166001600160a01b03199485161716178155604085015160018201805491909416921691909117909155606083015160028201556080830151600382015560a0830151600482015560c0830151600582015560e083015160068201556101009092015160079092019190915561143a908c908c90899085906135cf565b868a11156114745761146f33306114578d8b63ffffffff61358d16565b6001600160a01b038a1692919063ffffffff6139d516565b61149f565b61149f33611488898d63ffffffff61358d16565b6001600160a01b038916919063ffffffff613a3516565b600254600f5460e08501516001600160a01b0390921691635d4d3bf7918b918b918b916114d59163ffffffff908116906133d816565b6040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050600060405180830381600087803b15801561153257600080fd5b505af1158015611546573d6000803e3d6000fd5b5050845160408051338152600060208201528082018d90526001600160a01b03808c166060830152608082018d9052808f1660a083015290921660c0830152517fb8c434e6eb8ba9594890fe8e179e5519149e23a92e13ae561bf19efd6b953db093509081900360e0019150a184156116a2576003546040805163323442c360e11b81526001600160a01b03898116600483015291516000939290921691636468858691602480820192602092909190829003018186803b15801561160a57600080fd5b505afa15801561161e573d6000803e3d6000fd5b505050506040513d602081101561163457600080fd5b505160055460408051631421854f60e31b81526001600160a01b038085166004830152915193945091169163a10c2a78918991602480830192600092919082900301818588803b15801561168757600080fd5b505af115801561169b573d6000803e3d6000fd5b5050505050505b5050505050505050505050565b6001600160a01b031690565b60008281526011602090815260408083206001600160a01b03851684529091529020545b92915050565b6000815b600a850660300160f81b84848060010195508151811061170557fe5b60200101906001600160f81b031916908160001a905350600a85049450600085116116e957825b818111156117c057600085838151811061174257fe5b602001015160f81c60f81b90508582600190039250828151811061176257fe5b602001015160f81c60f81b86848151811061177957fe5b60200101906001600160f81b031916908160001a9053508086838151811061179d57fe5b60200101906001600160f81b031916908160001a9053505081600101915061172c565b5091949350505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561181557600080fd5b505afa158015611829573d6000803e3d6000fd5b505050506040513d602081101561183f57600080fd5b5051611881576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b038316908117909155604080516347f3bf4360e11b815260206004820181905260126024830152716e6573742e76332e6f66666572507269636560701b60448301529151849392638fe77e869260648082019391829003018186803b1580156118fe57600080fd5b505afa158015611912573d6000803e3d6000fd5b505050506040513d602081101561192857600080fd5b5051600280546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048083018290526024830152631b995cdd60e21b6044830152915192841692638fe77e8692606480840193919291829003018186803b15801561199957600080fd5b505afa1580156119ad573d6000803e3d6000fd5b505050506040513d60208110156119c357600080fd5b5051600480546001600160a01b0319166001600160a01b03928316178155604080516347f3bf4360e11b81526020928101839052600e60248201526d6e6573742e76332e61626f6e757360901b6044820152905192841692638fe77e8692606480840193919291829003018186803b158015611a3e57600080fd5b505afa158015611a52573d6000803e3d6000fd5b505050506040513d6020811015611a6857600080fd5b5051600580546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048201819052601860248301527f6e6573742e6e546f6b656e2e746f6b656e4d617070696e6700000000000000006044830152915192841692638fe77e8692606480840193919291829003018186803b158015611af357600080fd5b505afa158015611b07573d6000803e3d6000fd5b505050506040513d6020811015611b1d57600080fd5b5051600380546001600160a01b0319166001600160a01b039092169190911790555050565b333214611b8f576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000611bac6103e8610c786007548761333d90919063ffffffff16565b9050611bc281610ee3898763ffffffff61358d16565b3414611bff5760405162461bcd60e51b81526004018080602001828103825260548152602001806144026054913960600191505060405180910390fd5b600a548481611c0a57fe5b0615611c475760405162461bcd60e51b81526004018080602001828103825260298152602001806143156029913960400191505060405180910390fd5b6000611c52866116af565b9050611c5c614289565b60008281548110611c6957fe5b60009182526020808320604080516101208101825260089490940290910180546001600160a01b038082168652600160a01b90910460ff161515938501939093526001810154909216908301526002810154606083015260038101546080830152600481015460a0830152600581015460c0830152600681015460e0830152600701546101008201529150611cff8a8a87613432565b9050600082602001511515600115151415611d1c57506001611d1f565b50805b826020015115611d8057600854611d3d90899063ffffffff61333d16565b8b1015611d7b5760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611e2a565b8015611dd857600c54611d9a90899063ffffffff61333d16565b8b1015611d7b5760405162461bcd60e51b81526004018080602001828103825260408152602001806143c26040913960400191505060405180910390fd5b600854611dec90899063ffffffff61333d16565b8b1015611e2a5760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611e378360e00151612700565b15611e7e576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b878360a001511015611ed2576040805162461bcd60e51b8152602060048201526018602482015277092dce6eaccccd2c6d2cadce840e8e4c2c8d2dcce40cae8d60431b604482015290519081900360640190fd5b868360c001511015611f2b576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742074726164696e6720746f6b656e000000000000604482015290519081900360640190fd5b856001600160a01b031683604001516001600160a01b031614611f8b576040805162461bcd60e51b815260206004820152601360248201527257726f6e6720746f6b656e206164647265737360681b604482015290519081900360640190fd5b8260a00151888460c001510281611f9e57fe5b048714611fe7576040805162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d1bdad95b88185b5bdd5b9d60721b604482015290519081900360640190fd5b6060830151611ffc908963ffffffff61358d16565b60608401526080830151612016908863ffffffff6133d816565b608084015260a0830151612030908963ffffffff61358d16565b60a084015260c083015161204a908863ffffffff61358d16565b60c0840152600080548491908690811061206057fe5b6000918252602080832084516008909302018054918501511515600160a01b0260ff60a01b196001600160a01b039485166001600160a01b03199485161716178155604085015160018201805491909416921691909117909155606083015160028201556080830151600382015560a0830151600482015560c0830151600582015560e083015160068201556101009092015160079092019190915561210d908c908c90899085906135cf565b61212233306114578a8e63ffffffff6133d816565b600254600f5460e08501516001600160a01b0390921691635d4d3bf7918b918b918b916121589163ffffffff908116906133d816565b6040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050600060405180830381600087803b1580156121b557600080fd5b505af11580156121c9573d6000803e3d6000fd5b50508451604080513381526001600160a01b03808c1660208301528183018d905260006060830152608082018e9052808f1660a083015290921660c0830152517fb8c434e6eb8ba9594890fe8e179e5519149e23a92e13ae561bf19efd6b953db093509081900360e0019150a184156116a2576003546040805163323442c360e11b81526001600160a01b03898116600483015291516000939290921691636468858691602480820192602092909190829003018186803b15801561160a57600080fd5b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b1580156122d857600080fd5b505afa1580156122ec573d6000803e3d6000fd5b505050506040513d602081101561230257600080fd5b5051612344576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600b55565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561239457600080fd5b505afa1580156123a8573d6000803e3d6000fd5b505050506040513d60208110156123be57600080fd5b5051612400576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b6000811161243f5760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600855565b60005490565b600f5463ffffffff1690565b60009182526012602090815260408084206001600160a01b0393909316845291905290205490565b604080516207a1208082526207a1408201909252606091829190602082018180388339019050506000805491925090816001600160a01b038916156124c9576124c6896116af565b91505b868211156124d657508581035b6000881180156124ea575060001982019181105b156125b9576124f7614289565b6000838154811061250457fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b03808216808652600160a01b90920460ff1615159585019590955260018201548516928401929092526002810154606084015260038101546080840152600481015460a0840152600581015460c0840152600681015460e08401526007015461010083015290925090881614156125b357600019909801976125b083828787613101565b93505b506124d6565b6060836040519080825280601f01601f1916602001820160405280156125e6576020820181803883390190505b5090505b600019840193156126345784848151811061260157fe5b602001015160f81c60f81b81858151811061261857fe5b60200101906001600160f81b031916908160001a9053506125ea565b9998505050505050505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561268c57600080fd5b505afa1580156126a0573d6000803e3d6000fd5b505050506040513d60208110156126b657600080fd5b50516126f8576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600d55565b90565b600f5460009063ffffffff9081169061271d904390859061358d16565b111561272b57506001610965565b506000919050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561277e57600080fd5b505afa158015612792573d6000803e3d6000fd5b505050506040513d60208110156127a857600080fd5b50516127ea576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600081116128295760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600955565b604080516207a1208082526207a14082019092526060918291906020820181803883390190505090506000809050612900846000868154811061286d57fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b038082168552600160a01b90910460ff161515948401949094526001810154909316908201526002820154606082015260038201546080820152600482015460a0820152600582015460c0820152600682015460e08201526007909101546101008201528484613101565b90506060816040519080825280601f01601f19166020018201604052801561292f576020820181803883390190505b5090505b6000198201911561297d5782828151811061294a57fe5b602001015160f81c60f81b81838151811061296157fe5b60200101906001600160f81b031916908160001a905350612933565b949350505050565b3332146129d2576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006129dd826116af565b905060008082815481106129ed57fe5b90600052602060002090600802019050612a0a8160060154612700565b600114612a53576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b600281015415612a7f5760028101805460009091558154612a7d906001600160a01b031682613a87565b505b600381015415612b2057600381018054600091829055600183015483546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519394919092169263a9059cbb926044808201936020939283900390910190829087803b158015612af257600080fd5b505af1158015612b06573d6000803e3d6000fd5b505050506040513d6020811015612b1c57600080fd5b5050505b600781015415612b5c576006810154600182015460078301548354612b5393926001600160a01b03908116929116613ad4565b50600060078201555b505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015612bac57600080fd5b505afa158015612bc0573d6000803e3d6000fd5b505050506040513d6020811015612bd657600080fd5b5051612c18576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b60008111612c575760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600a55565b333214612ca9576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6003546040805163323442c360e11b81526001600160a01b03848116600483015291516000939290921691636468858691602480820192602092909190829003018186803b158015612cfa57600080fd5b505afa158015612d0e573d6000803e3d6000fd5b505050506040513d6020811015612d2457600080fd5b505190506001600160a01b038116612d3b57600080fd5b600080612d49868686613432565b90508015612dc857600c54600954612d669163ffffffff61333d16565b861015612da45760405162461bcd60e51b81526004018080602001828103825260408152602001806145226040913960400191505060405180910390fd5b612dc16103e8610c7860065460095461333d90919063ffffffff16565b9150612de6565b612de36103e8610c786006548961333d90919063ffffffff16565b91505b612df6868363ffffffff6133d816565b341015612e345760405162461bcd60e51b815260040180806020018281038252604f8152602001806144a9604f913960600191505060405180910390fd5b6000612e56612e49888563ffffffff6133d816565b349063ffffffff61358d16565b90508015612e6857612e683382613a87565b612e7587878785876135cf565b612e906001600160a01b03861633308963ffffffff6139d516565b6005546040805163324f2f5560e11b81526001600160a01b0387811660048301529151919092169163649e5eaa91869160248082019260009290919082900301818588803b158015612ee157600080fd5b505af1158015612ef5573d6000803e3d6000fd5b50504360009081526011602090815260408083206001600160a01b038c16845290915290205415159250613095915050576000612f3185613cd5565b90506000859050806001600160a01b031663a9059cbb826001600160a01b03166328e6a33f6040518163ffffffff1660e01b815260040160206040518083038186803b158015612f8057600080fd5b505afa158015612f94573d6000803e3d6000fd5b505050506040513d6020811015612faa57600080fd5b5051600d54612fc790606490610c7890889063ffffffff61333d16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561301657600080fd5b505af115801561302a573d6000803e3d6000fd5b505050506040513d602081101561304057600080fd5b5050600d5461306e9061306190606490610c7890869063ffffffff61333d16565b839063ffffffff61358d16565b4360009081526012602090815260408083206001600160a01b038c16845290915290205550505b4360009081526011602090815260408083206001600160a01b03891684529091529020546130c9908463ffffffff6133d816565b4360009081526011602090815260408083206001600160a01b0390991683529790529590952094909455505050505050565b60095490565b600061311661310f866126fd565b8484613e65565b8351600182019350600b60fa1b918591811061312e57fe5b60200101906001600160f81b031916908160001a9053508351613152908484613e65565b8351600182019350600b60fa1b918591811061316a57fe5b60200101906001600160f81b031916908160001a90535061319084604001518484613e65565b8351600182019350600b60fa1b91859181106131a857fe5b60200101906001600160f81b031916908160001a9053506131ce846060015184846116e5565b8351600182019350600b60fa1b91859181106131e657fe5b60200101906001600160f81b031916908160001a90535061320c846080015184846116e5565b8351600182019350600b60fa1b918591811061322457fe5b60200101906001600160f81b031916908160001a90535061324a8460a0015184846116e5565b8351600182019350600b60fa1b918591811061326257fe5b60200101906001600160f81b031916908160001a9053506132888460c0015184846116e5565b8351600182019350600b60fa1b91859181106132a057fe5b60200101906001600160f81b031916908160001a9053506132c68460e0015184846116e5565b8351600182019350600b60fa1b91859181106132de57fe5b60200101906001600160f81b031916908160001a90535061330584610100015184846116e5565b8351600182019350600b60fa1b918591811061331d57fe5b60200101906001600160f81b031916908160001a90535090949350505050565b60008261334c575060006116df565b8282028284828161335957fe5b0414610b535760405162461bcd60e51b81526004018080602001828103825260218152602001806143a16021913960400191505060405180910390fd5b6000610b5383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f9c565b600082820183811015610b53576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6002546040805163207ab49360e21b81526001600160a01b03848116600483015282516000948594859493909116926381ead24c9260248083019392829003018186803b15801561348257600080fd5b505afa158015613496573d6000803e3d6000fd5b505050506040513d60408110156134ac57600080fd5b50805160209091015190925090508115806134c5575080155b156134d557600092505050610b53565b60006135206134eb84606463ffffffff61333d16565b610c78613504600b5460646133d890919063ffffffff16565b6135148b8763ffffffff61333d16565b9063ffffffff61333d16565b905080861161358057600061356861353f85606463ffffffff61333d16565b610c78613558600b54606461358d90919063ffffffff16565b6135148c8863ffffffff61333d16565b905080871061357e576000945050505050610b53565b505b5060019695505050505050565b6000610b5383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061403e565b6009548510156136105760405162461bcd60e51b815260040180806020018281038252602b8152602001806142ea602b913960400191505060405180910390fd5b600a54858161361b57fe5b061561366e576040805162461bcd60e51b815260206004820152601860248201527f4e6f6e20636f6d706c69616e74206173736574207370616e0000000000000000604482015290519081900360640190fd5b600a5461368290869063ffffffff61339616565b848161368a57fe5b06156136dd576040805162461bcd60e51b815260206004820152601d60248201527f4173736574207175616e74697479206973206e6f742064697669646564000000604482015290519081900360640190fd5b600084116136ea57600080fd5b6000547fb3ed50358b669287aff082dbd5407bd75efcac18c9267d946074dc90d8aae89890613718906126fd565b600f54604080516001600160a01b03938416815292871660208401528281018990526060830188905263ffffffff909116608083015260a08201849052519081900360c00190a16040805161012081018252338152831515602082019081526001600160a01b03868116938301938452606083018981526080840189815260a085018b815260c086018b81524360e0880181815261010089018b81526000805460018101825590805299516008909a027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563810180549a511515600160a01b0260ff60a01b199c8b166001600160a01b03199c8d16179c909c169b909b17909a5599517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5648a018054918916919099161790975593517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56588015591517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e566870155517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e567860155517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56885015591517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56984015592517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56a90920191909155600254600f549216916317ae7a5891889188916139569163ffffffff908116906133d816565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301526001600160a01b03871660648301523360848301525160a480830192600092919082900301818387803b1580156139b657600080fd5b505af11580156139ca573d6000803e3d6000fd5b505050505050505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613a2f908590614098565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612b5c908490614098565b6000613a9b836001600160a01b03166126fd565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015613a2f573d6000803e3d6000fd5b60008481526011602090815260408083206001600160a01b038716808552908352818420548885526012845282852091855292528220548291613b2191610c78908763ffffffff61333d16565b6003546040805163323442c360e11b81526001600160a01b038981166004830152915193945060009391909216916364688586916024808301926020929190829003018186803b158015613b7457600080fd5b505afa158015613b88573d6000803e3d6000fd5b505050506040513d6020811015613b9e57600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0387811660048301526024820186905291519293509083169163a9059cbb916044808201926020929091908290030181600087803b158015613bf657600080fd5b505af1158015613c0a573d6000803e3d6000fd5b505050506040513d6020811015613c2057600080fd5b5051613c66576040805162461bcd60e51b815260206004820152601060248201526f5472616e73666572206661696c75726560801b604482015290519081900360640190fd5b60008781526011602090815260408083206001600160a01b038a16808552908352928190205481518b8152928301939093528181019290925290517fd2107cf4448eaa7b67fe8ee34698459074c40ccffc5e060f86f4130f35aaa4ee9181900360600190a15095945050505050565b600080829050600080826001600160a01b03166392c088716040518163ffffffff1660e01b8152600401604080518083038186803b158015613d1657600080fd5b505afa158015613d2a573d6000803e3d6000fd5b505050506040513d6040811015613d4057600080fd5b5080516020909101516010549193509150600090613d6890610c78438663ffffffff61358d16565b90506000806009831115613d7f5750600e54613d91565b601383600a8110613d8c57fe5b015490505b613db1613da4438663ffffffff61358d16565b829063ffffffff61333d16565b9150856001600160a01b03166381fa5431836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613df957600080fd5b505af1158015613e0d573d6000803e3d6000fd5b505060408051438152602081018690526001600160a01b038c168183015290517fbf10eb38ae3fef6350212985b724124761ec1a488dc5481048f20c389099e09d9350908190036060019150a1509695505050505050565b60006001600160a01b038416602883015b600f8216600a811015613eb8578060300160f81b868680600101975081518110613e9c57fe5b60200101906001600160f81b031916908160001a905350613ee9565b8060570160f81b868680600101975081518110613ed157fe5b60200101906001600160f81b031916908160001a9053505b60108304925050808410613e765760271901835b81811115613f91576000868381518110613f1357fe5b602001015160f81c60f81b905086826001900392508281518110613f3357fe5b602001015160f81c60f81b878481518110613f4a57fe5b60200101906001600160f81b031916908160001a90535080878381518110613f6e57fe5b60200101906001600160f81b031916908160001a90535050816001019150613efd565b509295945050505050565b600081836140285760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613fed578181015183820152602001613fd5565b50505050905090810190601f16801561401a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161403457fe5b0495945050505050565b600081848411156140905760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613fed578181015183820152602001613fd5565b505050900390565b6140aa826001600160a01b0316614250565b6140fb576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106141395780518252601f19909201916020918201910161411a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461419b576040519150601f19603f3d011682016040523d82523d6000602084013e6141a0565b606091505b5091509150816141f7576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115613a2f5780806020019051602081101561421357600080fd5b5051613a2f5760405162461bcd60e51b815260040180806020018281038252602a8152602001806144f8602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061297d575050151592915050565b60405180610120016040528060006001600160a01b0316815260200160001515815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe457468207363616c6520697320736d616c6c6572207468616e20746865206d696e696d756d207363616c655472616e73616374696f6e2073697a6520646f6573206e6f74206d656574206173736574207370616e506172616d65746572206e6565647320746f2062652067726561746572207468616e2030457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e20322074696d6573206f66207472616e73616374696f6e207363616c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e2031302074696d6573206f66207472616e73616374696f6e207363616c656d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f74656420657468207175616e7469747920706c7573207472616e73616374696f6e2068616e646c696e67206665656d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f746174696f6e20657468207175616e7469747920706c7573207472616e73616374696f6e2065746820706c75736d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f74656420657468207175616e7469747920706c7573204d696e696e672068616e646c696e67206665655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e2031302074696d6573206f6620746865206d696e696d756d207363616c65a26469706673582212201abb1bbe3f8f8756f9e4b5108a0bdcb6f162e61194794f574e54f679bf0a462064736f6c63430006000033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f770000000000000000000000006cd5698e8854fb6879d6b1c694223b389b465deaDeployed Bytecode
0x6080604052600436106101e35760003560e01c8063b3e2767c11610102578063e0051aa911610095578063e9ec551d11610064578063e9ec551d146107f1578063f0bbe1ba14610824578063f6a4932f1461084e578063faee702214610880576101e3565b8063e0051aa91461072d578063e18da8bf14610773578063e5d69e3f1461079d578063e7572230146107c7576101e3565b8063cbc7ef09116100d1578063cbc7ef091461066e578063cd6d875614610683578063d900d676146106bc578063dea0799a14610703576101e3565b8063b3e2767c146105bf578063b43ea2d814610605578063b86f25581461062f578063c48c1a7114610659576101e3565b80633d9faf871161017a57806395334db21161014957806395334db2146104645780639abe81c814610497578063a16f460f146104d0578063a781e7f81461058c576101e3565b80633d9faf87146103be57806343c53364146103f45780638d7092e61461040957806391f5f9f31461041e576101e3565b806326a203cb116101b657806326a203cb1461031057806334e66f1e1461033a57806335d63d321461034f5780633aedef141461038e576101e3565b806308920330146101e8578063180d574c14610214578063187f3d981461025057806319aeb49014610265575b600080fd5b3480156101f457600080fd5b506102126004803603602081101561020b57600080fd5b5035610895565b005b34801561022057600080fd5b5061023e6004803603602081101561023757600080fd5b5035610951565b60408051918252519081900360200190f35b34801561025c57600080fd5b5061023e61096a565b34801561027157600080fd5b5061029b6004803603606081101561028857600080fd5b5080359060208101359060400135610970565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d55781810151838201526020016102bd565b50505050905090810190601f1680156103025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031c57600080fd5b506102126004803603602081101561033357600080fd5b5035610b5a565b34801561034657600080fd5b5061023e610c16565b34801561035b57600080fd5b5061023e6004803603606081101561037257600080fd5b508035906001600160a01b036020820135169060400135610c1c565b34801561039a57600080fd5b50610212600480360360208110156103b157600080fd5b503563ffffffff16610c8b565b3480156103ca57600080fd5b50610212600480360360608110156103e157600080fd5b5080359060208101359060400135610d5e565b34801561040057600080fd5b5061023e610e57565b34801561041557600080fd5b5061023e610e5d565b610212600480360360c081101561043457600080fd5b508035906020810135906001600160a01b03604082013581169160608101359160808201359160a0013516610e63565b34801561047057600080fd5b5061023e6004803603602081101561048757600080fd5b50356001600160a01b03166116af565b3480156104a357600080fd5b5061023e600480360360408110156104ba57600080fd5b50803590602001356001600160a01b03166116bb565b3480156104dc57600080fd5b5061023e600480360360608110156104f357600080fd5b8135919081019060408101602082013564010000000081111561051557600080fd5b82018360208201111561052757600080fd5b8035906020019184600183028401116401000000008311171561054957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506116e5915050565b34801561059857600080fd5b50610212600480360360208110156105af57600080fd5b50356001600160a01b03166117ca565b610212600480360360c08110156105d557600080fd5b508035906020810135906001600160a01b03604082013581169160608101359160808201359160a0013516611b42565b34801561061157600080fd5b506102126004803603602081101561062857600080fd5b503561228d565b34801561063b57600080fd5b506102126004803603602081101561065257600080fd5b5035612349565b34801561066557600080fd5b5061023e612444565b34801561067a57600080fd5b5061023e61244a565b34801561068f57600080fd5b5061023e600480360360408110156106a657600080fd5b50803590602001356001600160a01b0316612456565b3480156106c857600080fd5b5061029b600480360360808110156106df57600080fd5b506001600160a01b038135811691602081013591604082013591606001351661247e565b34801561070f57600080fd5b506102126004803603602081101561072657600080fd5b5035612641565b34801561073957600080fd5b506107576004803603602081101561075057600080fd5b50356126fd565b604080516001600160a01b039092168252519081900360200190f35b34801561077f57600080fd5b5061023e6004803603602081101561079657600080fd5b5035612700565b3480156107a957600080fd5b50610212600480360360208110156107c057600080fd5b5035612733565b3480156107d357600080fd5b5061029b600480360360208110156107ea57600080fd5b503561282e565b3480156107fd57600080fd5b506102126004803603602081101561081457600080fd5b50356001600160a01b0316612985565b34801561083057600080fd5b506102126004803603602081101561084757600080fd5b5035612b61565b6102126004803603606081101561086457600080fd5b50803590602081013590604001356001600160a01b0316612c5c565b34801561088c57600080fd5b5061023e6130fb565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b1580156108e057600080fd5b505afa1580156108f4573d6000803e3d6000fd5b505050506040513d602081101561090a57600080fd5b505161094c576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600c55565b6000601382600a811061096057fe5b015490505b919050565b60085490565b604080516207a1208082526207a14082019092526060918291906020820181803883390190505090506000808085610a7f576000548810156109b55760005488900391505b818710156109c257508581035b600019820191811015610a7a57610a7382600084815481106109e057fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b038082168552600160a01b90910460ff161515948401949094526001810154909316908201526002820154606082015260038201546080820152600482015460a0820152600582015460c0820152600682015460e08201526007909101546101008201528686613101565b92506109c2565b610ad1565b600054881015610a9157879150610a97565b60005491505b5060005481870190811115610aab57506000545b80821015610ad157610ac482600084815481106109e057fe5b9250816001019150610aab565b6060836040519080825280601f01601f191660200182016040528015610afe576020820181803883390190505b5090505b60001984019315610b4c57848481518110610b1957fe5b602001015160f81c60f81b818581518110610b3057fe5b60200101906001600160f81b031916908160001a905350610b02565b9450505050505b9392505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610ba557600080fd5b505afa158015610bb9573d6000803e3d6000fd5b505050506040513d6020811015610bcf57600080fd5b5051610c11576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600755565b60075490565b600081610c2b57506000610b53565b60008481526011602090815260408083206001600160a01b0387168085529083528184205488855260128452828520918552925290912054610c849190610c78908563ffffffff61333d16565b9063ffffffff61339616565b9050610b53565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610cd657600080fd5b505afa158015610cea573d6000803e3d6000fd5b505050506040513d6020811015610d0057600080fd5b5051610d42576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600f805463ffffffff191663ffffffff92909216919091179055565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015610da957600080fd5b505afa158015610dbd573d6000803e3d6000fd5b505050506040513d6020811015610dd357600080fd5b5051610e15576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b8260005b600a811015610e505781601382600a8110610e3057fe5b0155610e4683610c78848763ffffffff61333d16565b9150600101610e19565b5050505050565b600d5490565b600a5490565b333214610eb0576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000610ecd6103e8610c786007548761333d90919063ffffffff16565b9050610eef81610ee3898763ffffffff6133d816565b9063ffffffff6133d816565b3414610f2c5760405162461bcd60e51b81526004018080602001828103825260538152602001806144566053913960600191505060405180910390fd5b600a548481610f3757fe5b0615610f745760405162461bcd60e51b81526004018080602001828103825260298152602001806143156029913960400191505060405180910390fd5b6000610f7f866116af565b9050610f89614289565b60008281548110610f9657fe5b60009182526020808320604080516101208101825260089490940290910180546001600160a01b038082168652600160a01b90910460ff161515938501939093526001810154909216908301526002810154606083015260038101546080830152600481015460a0830152600581015460c0830152600681015460e083015260070154610100820152915061102c8a8a87613432565b90506000826020015115156001151514156110495750600161104c565b50805b8260200151156110ad5760085461106a90899063ffffffff61333d16565b8b10156110a85760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611157565b801561110557600c546110c790899063ffffffff61333d16565b8b10156110a85760405162461bcd60e51b81526004018080602001828103825260408152602001806143c26040913960400191505060405180910390fd5b60085461111990899063ffffffff61333d16565b8b10156111575760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b6111648360e00151612700565b156111ab576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b878360a0015110156111ff576040805162461bcd60e51b8152602060048201526018602482015277092dce6eaccccd2c6d2cadce840e8e4c2c8d2dcce40cae8d60431b604482015290519081900360640190fd5b868360c001511015611258576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742074726164696e6720746f6b656e000000000000604482015290519081900360640190fd5b856001600160a01b031683604001516001600160a01b0316146112b8576040805162461bcd60e51b815260206004820152601360248201527257726f6e6720746f6b656e206164647265737360681b604482015290519081900360640190fd5b8260a00151888460c0015102816112cb57fe5b048714611314576040805162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d1bdad95b88185b5bdd5b9d60721b604482015290519081900360640190fd5b6060830151611329908963ffffffff6133d816565b60608401526080830151611343908863ffffffff61358d16565b608084015260a083015161135d908963ffffffff61358d16565b60a084015260c0830151611377908863ffffffff61358d16565b60c0840152600080548491908690811061138d57fe5b6000918252602080832084516008909302018054918501511515600160a01b0260ff60a01b196001600160a01b039485166001600160a01b03199485161716178155604085015160018201805491909416921691909117909155606083015160028201556080830151600382015560a0830151600482015560c0830151600582015560e083015160068201556101009092015160079092019190915561143a908c908c90899085906135cf565b868a11156114745761146f33306114578d8b63ffffffff61358d16565b6001600160a01b038a1692919063ffffffff6139d516565b61149f565b61149f33611488898d63ffffffff61358d16565b6001600160a01b038916919063ffffffff613a3516565b600254600f5460e08501516001600160a01b0390921691635d4d3bf7918b918b918b916114d59163ffffffff908116906133d816565b6040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050600060405180830381600087803b15801561153257600080fd5b505af1158015611546573d6000803e3d6000fd5b5050845160408051338152600060208201528082018d90526001600160a01b03808c166060830152608082018d9052808f1660a083015290921660c0830152517fb8c434e6eb8ba9594890fe8e179e5519149e23a92e13ae561bf19efd6b953db093509081900360e0019150a184156116a2576003546040805163323442c360e11b81526001600160a01b03898116600483015291516000939290921691636468858691602480820192602092909190829003018186803b15801561160a57600080fd5b505afa15801561161e573d6000803e3d6000fd5b505050506040513d602081101561163457600080fd5b505160055460408051631421854f60e31b81526001600160a01b038085166004830152915193945091169163a10c2a78918991602480830192600092919082900301818588803b15801561168757600080fd5b505af115801561169b573d6000803e3d6000fd5b5050505050505b5050505050505050505050565b6001600160a01b031690565b60008281526011602090815260408083206001600160a01b03851684529091529020545b92915050565b6000815b600a850660300160f81b84848060010195508151811061170557fe5b60200101906001600160f81b031916908160001a905350600a85049450600085116116e957825b818111156117c057600085838151811061174257fe5b602001015160f81c60f81b90508582600190039250828151811061176257fe5b602001015160f81c60f81b86848151811061177957fe5b60200101906001600160f81b031916908160001a9053508086838151811061179d57fe5b60200101906001600160f81b031916908160001a9053505081600101915061172c565b5091949350505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561181557600080fd5b505afa158015611829573d6000803e3d6000fd5b505050506040513d602081101561183f57600080fd5b5051611881576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b038316908117909155604080516347f3bf4360e11b815260206004820181905260126024830152716e6573742e76332e6f66666572507269636560701b60448301529151849392638fe77e869260648082019391829003018186803b1580156118fe57600080fd5b505afa158015611912573d6000803e3d6000fd5b505050506040513d602081101561192857600080fd5b5051600280546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048083018290526024830152631b995cdd60e21b6044830152915192841692638fe77e8692606480840193919291829003018186803b15801561199957600080fd5b505afa1580156119ad573d6000803e3d6000fd5b505050506040513d60208110156119c357600080fd5b5051600480546001600160a01b0319166001600160a01b03928316178155604080516347f3bf4360e11b81526020928101839052600e60248201526d6e6573742e76332e61626f6e757360901b6044820152905192841692638fe77e8692606480840193919291829003018186803b158015611a3e57600080fd5b505afa158015611a52573d6000803e3d6000fd5b505050506040513d6020811015611a6857600080fd5b5051600580546001600160a01b0319166001600160a01b03928316179055604080516347f3bf4360e11b8152602060048201819052601860248301527f6e6573742e6e546f6b656e2e746f6b656e4d617070696e6700000000000000006044830152915192841692638fe77e8692606480840193919291829003018186803b158015611af357600080fd5b505afa158015611b07573d6000803e3d6000fd5b505050506040513d6020811015611b1d57600080fd5b5051600380546001600160a01b0319166001600160a01b039092169190911790555050565b333214611b8f576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6000611bac6103e8610c786007548761333d90919063ffffffff16565b9050611bc281610ee3898763ffffffff61358d16565b3414611bff5760405162461bcd60e51b81526004018080602001828103825260548152602001806144026054913960600191505060405180910390fd5b600a548481611c0a57fe5b0615611c475760405162461bcd60e51b81526004018080602001828103825260298152602001806143156029913960400191505060405180910390fd5b6000611c52866116af565b9050611c5c614289565b60008281548110611c6957fe5b60009182526020808320604080516101208101825260089490940290910180546001600160a01b038082168652600160a01b90910460ff161515938501939093526001810154909216908301526002810154606083015260038101546080830152600481015460a0830152600581015460c0830152600681015460e0830152600701546101008201529150611cff8a8a87613432565b9050600082602001511515600115151415611d1c57506001611d1f565b50805b826020015115611d8057600854611d3d90899063ffffffff61333d16565b8b1015611d7b5760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611e2a565b8015611dd857600c54611d9a90899063ffffffff61333d16565b8b1015611d7b5760405162461bcd60e51b81526004018080602001828103825260408152602001806143c26040913960400191505060405180910390fd5b600854611dec90899063ffffffff61333d16565b8b1015611e2a5760405162461bcd60e51b815260040180806020018281038252603f815260200180614362603f913960400191505060405180910390fd5b611e378360e00151612700565b15611e7e576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b878360a001511015611ed2576040805162461bcd60e51b8152602060048201526018602482015277092dce6eaccccd2c6d2cadce840e8e4c2c8d2dcce40cae8d60431b604482015290519081900360640190fd5b868360c001511015611f2b576040805162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e742074726164696e6720746f6b656e000000000000604482015290519081900360640190fd5b856001600160a01b031683604001516001600160a01b031614611f8b576040805162461bcd60e51b815260206004820152601360248201527257726f6e6720746f6b656e206164647265737360681b604482015290519081900360640190fd5b8260a00151888460c001510281611f9e57fe5b048714611fe7576040805162461bcd60e51b815260206004820152601260248201527115dc9bdb99c81d1bdad95b88185b5bdd5b9d60721b604482015290519081900360640190fd5b6060830151611ffc908963ffffffff61358d16565b60608401526080830151612016908863ffffffff6133d816565b608084015260a0830151612030908963ffffffff61358d16565b60a084015260c083015161204a908863ffffffff61358d16565b60c0840152600080548491908690811061206057fe5b6000918252602080832084516008909302018054918501511515600160a01b0260ff60a01b196001600160a01b039485166001600160a01b03199485161716178155604085015160018201805491909416921691909117909155606083015160028201556080830151600382015560a0830151600482015560c0830151600582015560e083015160068201556101009092015160079092019190915561210d908c908c90899085906135cf565b61212233306114578a8e63ffffffff6133d816565b600254600f5460e08501516001600160a01b0390921691635d4d3bf7918b918b918b916121589163ffffffff908116906133d816565b6040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b03168152602001828152602001945050505050600060405180830381600087803b1580156121b557600080fd5b505af11580156121c9573d6000803e3d6000fd5b50508451604080513381526001600160a01b03808c1660208301528183018d905260006060830152608082018e9052808f1660a083015290921660c0830152517fb8c434e6eb8ba9594890fe8e179e5519149e23a92e13ae561bf19efd6b953db093509081900360e0019150a184156116a2576003546040805163323442c360e11b81526001600160a01b03898116600483015291516000939290921691636468858691602480820192602092909190829003018186803b15801561160a57600080fd5b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b1580156122d857600080fd5b505afa1580156122ec573d6000803e3d6000fd5b505050506040513d602081101561230257600080fd5b5051612344576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600b55565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561239457600080fd5b505afa1580156123a8573d6000803e3d6000fd5b505050506040513d60208110156123be57600080fd5b5051612400576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b6000811161243f5760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600855565b60005490565b600f5463ffffffff1690565b60009182526012602090815260408084206001600160a01b0393909316845291905290205490565b604080516207a1208082526207a1408201909252606091829190602082018180388339019050506000805491925090816001600160a01b038916156124c9576124c6896116af565b91505b868211156124d657508581035b6000881180156124ea575060001982019181105b156125b9576124f7614289565b6000838154811061250457fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b03808216808652600160a01b90920460ff1615159585019590955260018201548516928401929092526002810154606084015260038101546080840152600481015460a0840152600581015460c0840152600681015460e08401526007015461010083015290925090881614156125b357600019909801976125b083828787613101565b93505b506124d6565b6060836040519080825280601f01601f1916602001820160405280156125e6576020820181803883390190505b5090505b600019840193156126345784848151811061260157fe5b602001015160f81c60f81b81858151811061261857fe5b60200101906001600160f81b031916908160001a9053506125ea565b9998505050505050505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561268c57600080fd5b505afa1580156126a0573d6000803e3d6000fd5b505050506040513d60208110156126b657600080fd5b50516126f8576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600d55565b90565b600f5460009063ffffffff9081169061271d904390859061358d16565b111561272b57506001610965565b506000919050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b15801561277e57600080fd5b505afa158015612792573d6000803e3d6000fd5b505050506040513d60208110156127a857600080fd5b50516127ea576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b600081116128295760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600955565b604080516207a1208082526207a14082019092526060918291906020820181803883390190505090506000809050612900846000868154811061286d57fe5b6000918252602091829020604080516101208101825260089390930290910180546001600160a01b038082168552600160a01b90910460ff161515948401949094526001810154909316908201526002820154606082015260038201546080820152600482015460a0820152600582015460c0820152600682015460e08201526007909101546101008201528484613101565b90506060816040519080825280601f01601f19166020018201604052801561292f576020820181803883390190505b5090505b6000198201911561297d5782828151811061294a57fe5b602001015160f81c60f81b81838151811061296157fe5b60200101906001600160f81b031916908160001a905350612933565b949350505050565b3332146129d2576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b60006129dd826116af565b905060008082815481106129ed57fe5b90600052602060002090600802019050612a0a8160060154612700565b600114612a53576040805162461bcd60e51b815260206004820152601260248201527127b33332b91039ba30ba3ab99032b93937b960711b604482015290519081900360640190fd5b600281015415612a7f5760028101805460009091558154612a7d906001600160a01b031682613a87565b505b600381015415612b2057600381018054600091829055600183015483546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810185905290519394919092169263a9059cbb926044808201936020939283900390910190829087803b158015612af257600080fd5b505af1158015612b06573d6000803e3d6000fd5b505050506040513d6020811015612b1c57600080fd5b5050505b600781015415612b5c576006810154600182015460078301548354612b5393926001600160a01b03908116929116613ad4565b50600060078201555b505050565b6001546040805163a3bf06f160e01b815233600482015290516001600160a01b039092169163a3bf06f191602480820192602092909190829003018186803b158015612bac57600080fd5b505afa158015612bc0573d6000803e3d6000fd5b505050506040513d6020811015612bd657600080fd5b5051612c18576040805162461bcd60e51b815260206004820152600c60248201526b4e6f20617574686f7269747960a01b604482015290519081900360640190fd5b60008111612c575760405162461bcd60e51b815260040180806020018281038252602481526020018061433e6024913960400191505060405180910390fd5b600a55565b333214612ca9576040805162461bcd60e51b8152602060048201526016602482015275125d0818d85b89dd08189948184818dbdb9d1c9858dd60521b604482015290519081900360640190fd5b6003546040805163323442c360e11b81526001600160a01b03848116600483015291516000939290921691636468858691602480820192602092909190829003018186803b158015612cfa57600080fd5b505afa158015612d0e573d6000803e3d6000fd5b505050506040513d6020811015612d2457600080fd5b505190506001600160a01b038116612d3b57600080fd5b600080612d49868686613432565b90508015612dc857600c54600954612d669163ffffffff61333d16565b861015612da45760405162461bcd60e51b81526004018080602001828103825260408152602001806145226040913960400191505060405180910390fd5b612dc16103e8610c7860065460095461333d90919063ffffffff16565b9150612de6565b612de36103e8610c786006548961333d90919063ffffffff16565b91505b612df6868363ffffffff6133d816565b341015612e345760405162461bcd60e51b815260040180806020018281038252604f8152602001806144a9604f913960600191505060405180910390fd5b6000612e56612e49888563ffffffff6133d816565b349063ffffffff61358d16565b90508015612e6857612e683382613a87565b612e7587878785876135cf565b612e906001600160a01b03861633308963ffffffff6139d516565b6005546040805163324f2f5560e11b81526001600160a01b0387811660048301529151919092169163649e5eaa91869160248082019260009290919082900301818588803b158015612ee157600080fd5b505af1158015612ef5573d6000803e3d6000fd5b50504360009081526011602090815260408083206001600160a01b038c16845290915290205415159250613095915050576000612f3185613cd5565b90506000859050806001600160a01b031663a9059cbb826001600160a01b03166328e6a33f6040518163ffffffff1660e01b815260040160206040518083038186803b158015612f8057600080fd5b505afa158015612f94573d6000803e3d6000fd5b505050506040513d6020811015612faa57600080fd5b5051600d54612fc790606490610c7890889063ffffffff61333d16565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561301657600080fd5b505af115801561302a573d6000803e3d6000fd5b505050506040513d602081101561304057600080fd5b5050600d5461306e9061306190606490610c7890869063ffffffff61333d16565b839063ffffffff61358d16565b4360009081526012602090815260408083206001600160a01b038c16845290915290205550505b4360009081526011602090815260408083206001600160a01b03891684529091529020546130c9908463ffffffff6133d816565b4360009081526011602090815260408083206001600160a01b0390991683529790529590952094909455505050505050565b60095490565b600061311661310f866126fd565b8484613e65565b8351600182019350600b60fa1b918591811061312e57fe5b60200101906001600160f81b031916908160001a9053508351613152908484613e65565b8351600182019350600b60fa1b918591811061316a57fe5b60200101906001600160f81b031916908160001a90535061319084604001518484613e65565b8351600182019350600b60fa1b91859181106131a857fe5b60200101906001600160f81b031916908160001a9053506131ce846060015184846116e5565b8351600182019350600b60fa1b91859181106131e657fe5b60200101906001600160f81b031916908160001a90535061320c846080015184846116e5565b8351600182019350600b60fa1b918591811061322457fe5b60200101906001600160f81b031916908160001a90535061324a8460a0015184846116e5565b8351600182019350600b60fa1b918591811061326257fe5b60200101906001600160f81b031916908160001a9053506132888460c0015184846116e5565b8351600182019350600b60fa1b91859181106132a057fe5b60200101906001600160f81b031916908160001a9053506132c68460e0015184846116e5565b8351600182019350600b60fa1b91859181106132de57fe5b60200101906001600160f81b031916908160001a90535061330584610100015184846116e5565b8351600182019350600b60fa1b918591811061331d57fe5b60200101906001600160f81b031916908160001a90535090949350505050565b60008261334c575060006116df565b8282028284828161335957fe5b0414610b535760405162461bcd60e51b81526004018080602001828103825260218152602001806143a16021913960400191505060405180910390fd5b6000610b5383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f9c565b600082820183811015610b53576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6002546040805163207ab49360e21b81526001600160a01b03848116600483015282516000948594859493909116926381ead24c9260248083019392829003018186803b15801561348257600080fd5b505afa158015613496573d6000803e3d6000fd5b505050506040513d60408110156134ac57600080fd5b50805160209091015190925090508115806134c5575080155b156134d557600092505050610b53565b60006135206134eb84606463ffffffff61333d16565b610c78613504600b5460646133d890919063ffffffff16565b6135148b8763ffffffff61333d16565b9063ffffffff61333d16565b905080861161358057600061356861353f85606463ffffffff61333d16565b610c78613558600b54606461358d90919063ffffffff16565b6135148c8863ffffffff61333d16565b905080871061357e576000945050505050610b53565b505b5060019695505050505050565b6000610b5383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061403e565b6009548510156136105760405162461bcd60e51b815260040180806020018281038252602b8152602001806142ea602b913960400191505060405180910390fd5b600a54858161361b57fe5b061561366e576040805162461bcd60e51b815260206004820152601860248201527f4e6f6e20636f6d706c69616e74206173736574207370616e0000000000000000604482015290519081900360640190fd5b600a5461368290869063ffffffff61339616565b848161368a57fe5b06156136dd576040805162461bcd60e51b815260206004820152601d60248201527f4173736574207175616e74697479206973206e6f742064697669646564000000604482015290519081900360640190fd5b600084116136ea57600080fd5b6000547fb3ed50358b669287aff082dbd5407bd75efcac18c9267d946074dc90d8aae89890613718906126fd565b600f54604080516001600160a01b03938416815292871660208401528281018990526060830188905263ffffffff909116608083015260a08201849052519081900360c00190a16040805161012081018252338152831515602082019081526001600160a01b03868116938301938452606083018981526080840189815260a085018b815260c086018b81524360e0880181815261010089018b81526000805460018101825590805299516008909a027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563810180549a511515600160a01b0260ff60a01b199c8b166001600160a01b03199c8d16179c909c169b909b17909a5599517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5648a018054918916919099161790975593517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56588015591517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e566870155517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e567860155517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56885015591517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56984015592517f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56a90920191909155600254600f549216916317ae7a5891889188916139569163ffffffff908116906133d816565b604080516001600160e01b031960e087901b1681526004810194909452602484019290925260448301526001600160a01b03871660648301523360848301525160a480830192600092919082900301818387803b1580156139b657600080fd5b505af11580156139ca573d6000803e3d6000fd5b505050505050505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613a2f908590614098565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612b5c908490614098565b6000613a9b836001600160a01b03166126fd565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f19350505050158015613a2f573d6000803e3d6000fd5b60008481526011602090815260408083206001600160a01b038716808552908352818420548885526012845282852091855292528220548291613b2191610c78908763ffffffff61333d16565b6003546040805163323442c360e11b81526001600160a01b038981166004830152915193945060009391909216916364688586916024808301926020929190829003018186803b158015613b7457600080fd5b505afa158015613b88573d6000803e3d6000fd5b505050506040513d6020811015613b9e57600080fd5b50516040805163a9059cbb60e01b81526001600160a01b0387811660048301526024820186905291519293509083169163a9059cbb916044808201926020929091908290030181600087803b158015613bf657600080fd5b505af1158015613c0a573d6000803e3d6000fd5b505050506040513d6020811015613c2057600080fd5b5051613c66576040805162461bcd60e51b815260206004820152601060248201526f5472616e73666572206661696c75726560801b604482015290519081900360640190fd5b60008781526011602090815260408083206001600160a01b038a16808552908352928190205481518b8152928301939093528181019290925290517fd2107cf4448eaa7b67fe8ee34698459074c40ccffc5e060f86f4130f35aaa4ee9181900360600190a15095945050505050565b600080829050600080826001600160a01b03166392c088716040518163ffffffff1660e01b8152600401604080518083038186803b158015613d1657600080fd5b505afa158015613d2a573d6000803e3d6000fd5b505050506040513d6040811015613d4057600080fd5b5080516020909101516010549193509150600090613d6890610c78438663ffffffff61358d16565b90506000806009831115613d7f5750600e54613d91565b601383600a8110613d8c57fe5b015490505b613db1613da4438663ffffffff61358d16565b829063ffffffff61333d16565b9150856001600160a01b03166381fa5431836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015613df957600080fd5b505af1158015613e0d573d6000803e3d6000fd5b505060408051438152602081018690526001600160a01b038c168183015290517fbf10eb38ae3fef6350212985b724124761ec1a488dc5481048f20c389099e09d9350908190036060019150a1509695505050505050565b60006001600160a01b038416602883015b600f8216600a811015613eb8578060300160f81b868680600101975081518110613e9c57fe5b60200101906001600160f81b031916908160001a905350613ee9565b8060570160f81b868680600101975081518110613ed157fe5b60200101906001600160f81b031916908160001a9053505b60108304925050808410613e765760271901835b81811115613f91576000868381518110613f1357fe5b602001015160f81c60f81b905086826001900392508281518110613f3357fe5b602001015160f81c60f81b878481518110613f4a57fe5b60200101906001600160f81b031916908160001a90535080878381518110613f6e57fe5b60200101906001600160f81b031916908160001a90535050816001019150613efd565b509295945050505050565b600081836140285760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613fed578181015183820152602001613fd5565b50505050905090810190601f16801561401a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161403457fe5b0495945050505050565b600081848411156140905760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613fed578181015183820152602001613fd5565b505050900390565b6140aa826001600160a01b0316614250565b6140fb576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106141395780518252601f19909201916020918201910161411a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461419b576040519150601f19603f3d011682016040523d82523d6000602084013e6141a0565b606091505b5091509150816141f7576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115613a2f5780806020019051602081101561421357600080fd5b5051613a2f5760405162461bcd60e51b815260040180806020018281038252602a8152602001806144f8602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061297d575050151592915050565b60405180610120016040528060006001600160a01b0316815260200160001515815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152509056fe457468207363616c6520697320736d616c6c6572207468616e20746865206d696e696d756d207363616c655472616e73616374696f6e2073697a6520646f6573206e6f74206d656574206173736574207370616e506172616d65746572206e6565647320746f2062652067726561746572207468616e2030457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e20322074696d6573206f66207472616e73616374696f6e207363616c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e2031302074696d6573206f66207472616e73616374696f6e207363616c656d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f74656420657468207175616e7469747920706c7573207472616e73616374696f6e2068616e646c696e67206665656d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f746174696f6e20657468207175616e7469747920706c7573207472616e73616374696f6e2065746820706c75736d73672e76616c7565206e6565647320746f20626520657175616c20746f207468652071756f74656420657468207175616e7469747920706c7573204d696e696e672068616e646c696e67206665655361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564457468416d6f756e74206e6565647320746f206265206e6f206c657373207468616e2031302074696d6573206f6620746865206d696e696d756d207363616c65a26469706673582212201abb1bbe3f8f8756f9e4b5108a0bdcb6f162e61194794f574e54f679bf0a462064736f6c63430006000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006cd5698e8854fb6879d6b1c694223b389b465dea
-----Decoded View---------------
Arg [0] : voteFactory (address): 0x6Cd5698E8854Fb6879d6B1C694223b389B465dea
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006cd5698e8854fb6879d6b1c694223b389b465deaDeployed Bytecode Sourcemap
106:34092:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26047:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26047:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26047:108:0;;:::i;:::-;;24834:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24834:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24834:123:0;;:::i;:::-;;;;;;;;;;;;;;;;23518:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23518:97:0;;;:::i;29855:1700::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29855:1700:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29855:1700:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;29855:1700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25006:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25006:86:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25006:86:0;;:::i;23373:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23373:88:0;;;:::i;24327:317::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24327:317:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24327:317:0;;;-1:-1:-1;;;;;24327:317:0;;;;;;;;;;:::i;25146:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25146:91:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25146:91:0;;;;:::i;26347:319::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26347:319:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26347:319:0;;;;;;;;;;;;:::i;24697:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24697:95:0;;;:::i;23793:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23793:91:0;;;:::i;12003:4063::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;12003:4063:0;;;;;;;;-1:-1:-1;;;;;12003:4063:0;;;;;;;;;;;;;;;;;;;;;;:::i;10008:121::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10008:121:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10008:121:0;-1:-1:-1;;;;;10008:121:0;;:::i;23927:154::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23927:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23927:154:0;;;;;;-1:-1:-1;;;;;23927:154:0;;:::i;32965:436::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32965:436:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32965:436:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;32965:436:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;32965:436:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;32965:436:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;32965:436:0;;-1:-1:-1;;32965:436:0;;;-1:-1:-1;32965:436:0;;-1:-1:-1;;32965:436:0:i;5736:677::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5736:677:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5736:677:0;-1:-1:-1;;;;;5736:677:0;;:::i;16504:3837::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;16504:3837:0;;;;;;;;-1:-1:-1;;;;;16504:3837:0;;;;;;;;;;;;;;;;;;;;;;:::i;25907:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25907:87:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25907:87:0;;:::i;25296:163::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25296:163:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25296:163:0;;:::i;26976:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26976:95:0;;;:::i;23239:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23239:93:0;;;:::i;24135:144::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24135:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24135:144:0;;;;;;-1:-1:-1;;;;;24135:144:0;;:::i;28342:1059::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28342:1059:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;28342:1059:0;;;;;;;;;;;;;;;;;;;;:::i;26209:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26209:94:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26209:94:0;;:::i;10198:103::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10198:103:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10198:103:0;;:::i;:::-;;;;-1:-1:-1;;;;;10198:103:0;;;;;;;;;;;;;;22776:200;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22776:200:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22776:200:0;;:::i;25507:155::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25507:155:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25507:155:0;;:::i;27227:509::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27227:509:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27227:509:0;;:::i;10407:1158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10407:1158:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10407:1158:0;-1:-1:-1;;;;;10407:1158:0;;:::i;25707:157::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25707:157:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25707:157:0;;:::i;6598:1985::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6598:1985:0;;;;;;;;;;;-1:-1:-1;;;;;6598:1985:0;;:::i;23661:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23661:89:0;;;:::i;26047:108::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;26122:19:::1;:25:::0;26047:108::o;24834:123::-;24899:7;24926:18;24945:3;24926:23;;;;;;;;;24919:30;;24834:123;;;;:::o;23518:97::-;23594:13;;23518:97;:::o;29855:1700::-;30048:17;;;30058:6;30048:17;;;;;;;;;29936:13;;;;30048:17;;;;21:6:-1;;104:10;30048:17:0;87:34:-1;135:17;;-1:-1;;30029:36:0;-1:-1:-1;30076:13:0;;;30221:10;30217:1117;;30356:7;:14;30347:23;;30343:91;;;30395:7;:14;:23;;;;-1:-1:-1;30343:91:0;30461:1;30453:5;:9;30449:65;;;-1:-1:-1;30489:9:0;;;30449:65;-1:-1:-1;;30618:3:0;;;:9;-1:-1:-1;30611:107:0;;;30656:46;30676:1;30679:7;30687:1;30679:10;;;;;;;;;;;;;;;;;30656:46;;;;;;;;30679:10;;;;;;;;30656:46;;-1:-1:-1;;;;;30656:46:0;;;;;-1:-1:-1;;;30656:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30691:3;30696:5;30656:19;:46::i;:::-;30648:54;;30611:107;;;30217:1117;;;30851:7;:14;30842:23;;30838:133;;;30890:6;30886:10;;30838:133;;;30941:7;:14;;-1:-1:-1;30838:133:0;-1:-1:-1;31024:7:0;:14;30991:9;;;;31018:20;;31015:80;;;-1:-1:-1;31065:7:0;:14;31015:80;31207:3;31203:1;:7;31196:127;;;31239:46;31259:1;31262:7;31270:1;31262:10;;;;;;;31239:46;31231:54;;31304:3;;;;;31196:127;;;31404:16;31433:5;31423:16;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;31423:16:0;87:34:-1;135:17;;-1:-1;31423:16:0;;31404:35;;31450:69;-1:-1:-1;;31456:7:0;;;:11;31450:69;;31497:3;31501:5;31497:10;;;;;;;;;;;;;;;;31484:3;31488:5;31484:10;;;;;;;;;;;:23;-1:-1:-1;;;;;31484:23:0;;;;;;;;;31450:69;;;31543:3;-1:-1:-1;;;;;29855:1700:0;;;;;;:::o;25006:86::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25070:8:::1;:14:::0;25006:86::o;23373:88::-;23445:8;;23373:88;:::o;24327:317::-;24430:7;24454:18;24450:187;;-1:-1:-1;24496:1:0;24489:8;;24450:187;24590:27;;;;:17;:27;;;;;;;;-1:-1:-1;;;;;24590:34:0;;;;;;;;;;;;24537:22;;;:12;:22;;;;;:29;;;;;;;;;:88;;24590:34;24537:48;;24571:13;24537:48;:33;:48;:::i;:::-;:52;:88;:52;:88;:::i;:::-;24530:95;;;;25146:91;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25212:11:::1;:17:::0;;-1:-1:-1;;25212:17:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;25146:91::o;26347:319::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;26480:11;26458:19:::1;26502:157;26526:2;26522:1;:6;26502:157;;;26575:11;26551:18;26570:1;26551:21;;;;;;;;:35:::0;26615:32:::1;26640:6:::0;26615:20:::1;:11:::0;26631:3;26615:20:::1;:15;:20;:::i;:32::-;26601:46:::0;-1:-1:-1;26530:4:0::1;;26502:157;;;;26814:1;26347:319:::0;;;:::o;24697:95::-;24772:12;;24697:95;:::o;23793:91::-;23866:10;;23793:91;:::o;12003:4063::-;12207:10;12230:9;12199:41;12191:76;;;;;-1:-1:-1;;;12191:76:0;;;;;;;;;;;;-1:-1:-1;;;12191:76:0;;;;;;;;;;;;;;;12278:21;12302:37;12334:4;12302:27;12320:8;;12302:13;:17;;:27;;;;:::i;:37::-;12278:61;-1:-1:-1;12371:47:0;12278:61;12371:28;:9;12385:13;12371:28;:13;:28;:::i;:::-;:32;:47;:32;:47;:::i;:::-;12358:9;:60;12350:156;;;;-1:-1:-1;;;12350:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12541:10;;12525:13;:26;;;;;;:31;12517:85;;;;-1:-1:-1;;;12517:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12665:13;12681:24;12689:15;12681:7;:24::i;:::-;12665:40;;12716:48;;:::i;:::-;12767:7;12775:5;12767:14;;;;;;;;;;;;;;;;12716:65;;;;;;;;12767:14;;;;;;;;12716:65;;-1:-1:-1;;;;;12716:65:0;;;;;-1:-1:-1;;;12716:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12896:56:0;12913:9;12923:11;12935:16;12896;:56::i;:::-;12877:75;;12963:14;12992;:22;;;:30;;13018:4;12992:30;;;12988:135;;;-1:-1:-1;13051:4:0;12988:135;;;-1:-1:-1;13100:11:0;12988:135;13242:14;:22;;;13238:760;;;13366:13;;13348:32;;:13;;:32;:17;:32;:::i;:::-;13335:9;:45;;13327:121;;;;-1:-1:-1;;;13327:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13238:760;;;13485:9;13481:506;;;13637:19;;13619:38;;:13;;:38;:17;:38;:::i;:::-;13606:9;:51;;13598:128;;;;-1:-1:-1;;;13598:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13481:506;13889:13;;13871:32;;:13;;:32;:17;:32;:::i;:::-;13858:9;:45;;13850:121;;;;-1:-1:-1;;;13850:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14097:43;14116:14;:23;;;14097:18;:43::i;:::-;:48;14089:79;;;;;-1:-1:-1;;;14089:79:0;;;;;;;;;;;;-1:-1:-1;;;14089:79:0;;;;;;;;;;;;;;;14219:13;14187:14;:28;;;:45;;14179:82;;;;;-1:-1:-1;;;14179:82:0;;;;;;;;;;;;-1:-1:-1;;;14179:82:0;;;;;;;;;;;;;;;14314:15;14280:14;:30;;;:49;;14272:88;;;;;-1:-1:-1;;;14272:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14410:16;-1:-1:-1;;;;;14379:47:0;:14;:27;;;-1:-1:-1;;;;;14379:47:0;;14371:79;;;;;-1:-1:-1;;;14371:79:0;;;;;;;;;;;;-1:-1:-1;;;14371:79:0;;;;;;;;;;;;;;;14537:14;:28;;;14521:13;14488:14;:30;;;:46;:77;;;;;;14469:15;:96;14461:127;;;;;-1:-1:-1;;;14461:127:0;;;;;;;;;;;;-1:-1:-1;;;14461:127:0;;;;;;;;;;;;;;;14677:24;;;;:43;;14706:13;14677:43;:28;:43;:::i;:::-;14650:24;;;:70;14760:26;;;;:47;;14791:15;14760:47;:30;:47;:::i;:::-;14731:26;;;:76;14849:28;;;;:47;;14882:13;14849:47;:32;:47;:::i;:::-;14818:28;;;:78;14940:30;;;;:51;;14975:15;14940:51;:34;:51;:::i;:::-;14907:30;;;:84;15002:7;:14;;14907;;15002:7;15010:5;;15002:14;;;;;;;;;;;;;;:31;;:14;;;;;:31;;;;;;;;-1:-1:-1;;;15002:31:0;-1:-1:-1;;;;;;;;;15002:31:0;;;-1:-1:-1;;;;;;15002:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15075:67;;15087:9;;15098:11;;15111:16;;15129:9;;15075:11;:67::i;:::-;15232:15;15218:11;:29;15214:296;;;15264:110;15313:10;15334:4;15341:32;:11;15357:15;15341:32;:15;:32;:::i;:::-;-1:-1:-1;;;;;15264:40:0;;;:110;;;:40;:110;:::i;:::-;15214:296;;;15407:91;15452:10;15465:32;:15;15485:11;15465:32;:19;:32;:::i;:::-;-1:-1:-1;;;;;15407:36:0;;;:91;;:36;:91;:::i;:::-;15547:11;;15649;;15621:23;;;;-1:-1:-1;;;;;15547:11:0;;;;:23;;15571:13;;15586:15;;15603:16;;15621:40;;15649:11;;;;;15621:27;:40;:::i;:::-;15547:115;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15547:115:0;-1:-1:-1;;;;;15547:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15547:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15799:20:0;;15678:142;;;15696:10;15678:142;;15717:3;15678:142;;;;;;;;;;-1:-1:-1;;;;;15678:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15678:142:0;;;;;;;-1:-1:-1;15678:142:0;15870:17;;15866:193;;15928:13;;:49;;;-1:-1:-1;;;15928:49:0;;-1:-1:-1;;;;;15928:49:0;;;;;;;;;15904:21;;15928:13;;;;;:31;;:49;;;;;;;;;;;;;;;:13;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;15928:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15928:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15928:49:0;15992:7;;:55;;;-1:-1:-1;;;15992:55:0;;-1:-1:-1;;;;;15992:55:0;;;;;;;;;15928:49;;-1:-1:-1;15992:7:0;;;:19;;16018:13;;15992:55;;;;;:7;;:55;;;;;;;16018:13;15992:7;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;15992:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15992:55:0;;;;;15866:193;;12003:4063;;;;;;;;;;;:::o;10008:121::-;-1:-1:-1;;;;;10097:24:0;;10008:121::o;23927:154::-;24012:7;24039:27;;;:17;:27;;;;;;;;-1:-1:-1;;;;;24039:34:0;;;;;;;;;;23927:154;;;;;:::o;32965:436::-;33050:7;33082:5;33098:108;33147:2;33142;:7;33151:2;33142:11;33131:24;;33116:3;33120:7;;;;;;33116:12;;;;;;;;;;;:39;-1:-1:-1;;;;;33116:39:0;;;;;;;;-1:-1:-1;33176:2:0;33170:8;;;;33203:1;33198:2;:6;33098:108;;33243:5;33226:135;33254:1;33250;:5;33226:135;;;33277:6;33286:3;33290:1;33286:6;;;;;;;;;;;;;;;;33277:15;;33316:3;33320;;;;;;;33316:8;;;;;;;;;;;;;;;;33307:3;33311:1;33307:6;;;;;;;;;;;:17;-1:-1:-1;;;;;33307:17:0;;;;;;;;;33348:1;33339:3;33343:1;33339:6;;;;;;;;;;;:10;-1:-1:-1;;;;;33339:10:0;;;;;;;;;33226:135;33257:3;;;;;33226:135;;;-1:-1:-1;33388:5:0;;32965:436;-1:-1:-1;;;;32965:436:0:o;5736:677::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;5895:12:::1;:29:::0;;-1:-1:-1;;;;;;5895:29:0::1;-1:-1:-1::0;;;;;5895:29:0;::::1;::::0;;::::1;::::0;;;6033:49:::1;::::0;;-1:-1:-1;;;6033:49:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;-1:-1:-1;;;6033:49:0;;;;;;5895:29;;;6033:27:::1;::::0;:49;;;;;;;;;;;5895:29;6033:49;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;6033:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6033:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;6033:49:0;5993:11:::1;:91:::0;;-1:-1:-1;;;;;;5993:91:0::1;-1:-1:-1::0;;;;;5993:91:0;;::::1;;::::0;;6120:35:::1;::::0;;-1:-1:-1;;;6120:35:0;;6033:49:::1;6120:35;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;6120:35:0;;;;;;:27;;::::1;::::0;::::1;::::0;:35;;;;;6033:49;;6120:35;;;;;;:27;:35;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;6120:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6120:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;6120:35:0;6101:10:::1;:55:::0;;-1:-1:-1;;;;;;6101:55:0::1;-1:-1:-1::0;;;;;6101:55:0;;::::1;;::::0;;6242:45:::1;::::0;;-1:-1:-1;;;6242:45:0;;6120:35:::1;6242:45:::0;;::::1;::::0;;;::::1;::::0;;;;-1:-1:-1;;;6242:45:0;;;;;;:27;;::::1;::::0;::::1;::::0;:45;;;;;6120:35;;6242:45;;;;;;:27;:45;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;6242:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6242:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;6242:45:0;6218:7:::1;:70:::0;;-1:-1:-1;;;;;;6218:70:0::1;-1:-1:-1::0;;;;;6218:70:0;;::::1;;::::0;;6348:55:::1;::::0;;-1:-1:-1;;;6348:55:0;;6242:45:::1;6348:55;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;;;;:27;;::::1;::::0;::::1;::::0;:55;;;;;6242:45;;6348:55;;;;;;:27;:55;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;6348:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6348:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;6348:55:0;6299:13:::1;:106:::0;;-1:-1:-1;;;;;;6299:106:0::1;-1:-1:-1::0;;;;;6299:106:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;5736:677:0:o;16504:3837::-;16708:10;16731:9;16700:41;16692:76;;;;;-1:-1:-1;;;16692:76:0;;;;;;;;;;;;-1:-1:-1;;;16692:76:0;;;;;;;;;;;;;;;16779:21;16803:37;16835:4;16803:27;16821:8;;16803:13;:17;;:27;;;;:::i;:37::-;16779:61;-1:-1:-1;16872:47:0;16779:61;16872:28;:9;16886:13;16872:28;:13;:28;:::i;:47::-;16859:9;:60;16851:157;;;;-1:-1:-1;;;16851:157:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17043:10;;17027:13;:26;;;;;;:31;17019:85;;;;-1:-1:-1;;;17019:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17157:13;17173:24;17181:15;17173:7;:24::i;:::-;17157:40;;17208:48;;:::i;:::-;17259:7;17267:5;17259:14;;;;;;;;;;;;;;;;17208:65;;;;;;;;17259:14;;;;;;;;17208:65;;-1:-1:-1;;;;;17208:65:0;;;;;-1:-1:-1;;;17208:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17388:56:0;17405:9;17415:11;17427:16;17388;:56::i;:::-;17369:75;;17455:14;17484;:22;;;:30;;17510:4;17484:30;;;17480:135;;;-1:-1:-1;17543:4:0;17480:135;;;-1:-1:-1;17592:11:0;17480:135;17734:14;:22;;;17730:760;;;17858:13;;17840:32;;:13;;:32;:17;:32;:::i;:::-;17827:9;:45;;17819:121;;;;-1:-1:-1;;;17819:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17730:760;;;17977:9;17973:506;;;18129:19;;18111:38;;:13;;:38;:17;:38;:::i;:::-;18098:9;:51;;18090:128;;;;-1:-1:-1;;;18090:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17973:506;18381:13;;18363:32;;:13;;:32;:17;:32;:::i;:::-;18350:9;:45;;18342:121;;;;-1:-1:-1;;;18342:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18579:43;18598:14;:23;;;18579:18;:43::i;:::-;:48;18571:79;;;;;-1:-1:-1;;;18571:79:0;;;;;;;;;;;;-1:-1:-1;;;18571:79:0;;;;;;;;;;;;;;;18701:13;18669:14;:28;;;:45;;18661:82;;;;;-1:-1:-1;;;18661:82:0;;;;;;;;;;;;-1:-1:-1;;;18661:82:0;;;;;;;;;;;;;;;18796:15;18762:14;:30;;;:49;;18754:88;;;;;-1:-1:-1;;;18754:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18892:16;-1:-1:-1;;;;;18861:47:0;:14;:27;;;-1:-1:-1;;;;;18861:47:0;;18853:79;;;;;-1:-1:-1;;;18853:79:0;;;;;;;;;;;;-1:-1:-1;;;18853:79:0;;;;;;;;;;;;;;;19019:14;:28;;;19003:13;18970:14;:30;;;:46;:77;;;;;;18951:15;:96;18943:127;;;;;-1:-1:-1;;;18943:127:0;;;;;;;;;;;;-1:-1:-1;;;18943:127:0;;;;;;;;;;;;;;;19149:24;;;;:43;;19178:13;19149:43;:28;:43;:::i;:::-;19122:24;;;:70;19232:26;;;;:47;;19263:15;19232:47;:30;:47;:::i;:::-;19203:26;;;:76;19321:28;;;;:47;;19354:13;19321:47;:32;:47;:::i;:::-;19290:28;;;:78;19412:30;;;;:51;;19447:15;19412:51;:34;:51;:::i;:::-;19379:30;;;:84;19474:7;:14;;19379;;19474:7;19482:5;;19474:14;;;;;;;;;;;;;;:31;;:14;;;;;:31;;;;;;;;-1:-1:-1;;;19474:31:0;-1:-1:-1;;;;;;;;;19474:31:0;;;-1:-1:-1;;;;;;19474:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19547:67;;19559:9;;19570:11;;19583:16;;19601:9;;19547:11;:67::i;:::-;19686:110;19735:10;19756:4;19763:32;:15;19783:11;19763:32;:19;:32;:::i;19686:110::-;19832:11;;19934;;19906:23;;;;-1:-1:-1;;;;;19832:11:0;;;;:23;;19856:13;;19871:15;;19888:16;;19906:40;;19934:11;;;;;19906:27;:40;:::i;:::-;19832:115;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19832:115:0;-1:-1:-1;;;;;19832:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19832:115:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;20084:20:0;;19963:142;;;19981:10;19963:142;;-1:-1:-1;;;;;19963:142:0;;;;;;;;;;;;;20046:3;19963:142;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19963:142:0;;;;;;;-1:-1:-1;19963:142:0;20145:17;;20141:193;;20203:13;;:49;;;-1:-1:-1;;;20203:49:0;;-1:-1:-1;;;;;20203:49:0;;;;;;;;;20179:21;;20203:13;;;;;:31;;:49;;;;;;;;;;;;;;;:13;:49;;;5:2:-1;;;;30:1;27;20:12;25907:87:0;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25972:8:::1;:14:::0;25907:87::o;25296:163::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25379:1:::1;25373:3;:7;25365:56;;;;-1:-1:-1::0;;;25365:56:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25432:13;:19:::0;25296:163::o;26976:95::-;27022:7;27049:14;26976:95;:::o;23239:93::-;23313:11;;;;23239:93;:::o;24135:144::-;24215:7;24242:22;;;:12;:22;;;;;;;;-1:-1:-1;;;;;24242:29:0;;;;;;;;;;;;;24135:144::o;28342:1059::-;28545:17;;;28555:6;28545:17;;;;;;;;;28444:13;;;;28545:17;;;;21:6:-1;;104:10;28545:17:0;87:34:-1;135:17;;-1:-1;;28573:13:0;28661:14;;28526:36;;-1:-1:-1;28573:13:0;;-1:-1:-1;;;;;28716:19:0;;;28712:70;;28756:14;28764:5;28756:7;:14::i;:::-;28752:18;;28712:70;28800:12;28796:1;:16;28792:71;;;-1:-1:-1;28835:16:0;;;28792:71;28949:1;28941:5;:9;:22;;;;-1:-1:-1;;;28954:3:0;;;:9;-1:-1:-1;28941:22:0;28934:260;;;28980:39;;:::i;:::-;29022:7;29030:1;29022:10;;;;;;;;;;;;;;;;;28980:52;;;;;;;;29022:10;;;;;;;;28980:52;;-1:-1:-1;;;;;28980:52:0;;;;;;-1:-1:-1;;;28980:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29051:20:0;;;;29047:136;;;-1:-1:-1;;29092:7:0;;;;29126:41;29146:1;29149:5;29156:3;29161:5;29126:19;:41::i;:::-;29118:49;;29047:136;28934:260;;;;29250:16;29279:5;29269:16;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;29269:16:0;87:34:-1;135:17;;-1:-1;29269:16:0;;29250:35;;29296:69;-1:-1:-1;;29302:7:0;;;:11;29296:69;;29343:3;29347:5;29343:10;;;;;;;;;;;;;;;;29330:3;29334:5;29330:10;;;;;;;;;;;:23;-1:-1:-1;;;;;29330:23:0;;;;;;;;;29296:69;;;29389:3;28342:1059;-1:-1:-1;;;;;;;;;28342:1059:0:o;26209:94::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;26277:12:::1;:18:::0;26209:94::o;10198:103::-;10287:5;10198:103::o;22776:200::-;22902:11;;22846:7;;22902:11;;;;;22870:29;;:12;;22887:11;;22870:16;:29;:::i;:::-;:43;22866:84;;;-1:-1:-1;22937:1:0;22930:8;;22866:84;-1:-1:-1;22967:1:0;22776:200;;;:::o;25507:155::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25586:1:::1;25580:3;:7;25572:56;;;;-1:-1:-1::0;;;25572:56:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25639:9;:15:::0;25507:155::o;27227:509::-;27396:17;;;27406:6;27396:17;;;;;;;;;27286:13;;;;27396:17;;;;21:6:-1;;104:10;27396:17:0;87:34:-1;135:17;;-1:-1;27396:17:0;27377:36;;27424:13;27440:1;27424:17;;27460:64;27480:10;27492:7;27500:10;27492:19;;;;;;;;;;;;;;;;;27460:64;;;;;;;;27492:19;;;;;;;;27460:64;;-1:-1:-1;;;;;27460:64:0;;;;;-1:-1:-1;;;27460:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27513:3;27518:5;27460:19;:64::i;:::-;27452:72;;27585:16;27614:5;27604:16;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;27604:16:0;87:34:-1;135:17;;-1:-1;27604:16:0;;27585:35;;27631:69;-1:-1:-1;;27637:7:0;;;:11;27631:69;;27678:3;27682:5;27678:10;;;;;;;;;;;;;;;;27665:3;27669:5;27665:10;;;;;;;;;;;:23;-1:-1:-1;;;;;27665:23:0;;;;;;;;;27631:69;;;27724:3;27227:509;-1:-1:-1;;;;27227:509:0:o;10407:1158::-;10483:10;10506:9;10475:41;10467:76;;;;;-1:-1:-1;;;10467:76:0;;;;;;;;;;;;-1:-1:-1;;;10467:76:0;;;;;;;;;;;;;;;10554:13;10570:24;10578:15;10570:7;:24::i;:::-;10554:40;;10605:49;10657:7;10665:5;10657:14;;;;;;;;;;;;;;;;;;10605:66;;10690:43;10709:14;:23;;;10690:18;:43::i;:::-;10737:1;10690:48;10682:79;;;;;-1:-1:-1;;;10682:79:0;;;;;;;;;;;;-1:-1:-1;;;10682:79:0;;;;;;;;;;;;;;;10801:24;;;;:28;10797:198;;10863:24;;;;;10846:14;10902:28;;;10954:20;;10945:38;;-1:-1:-1;;;;;10954:20:0;10863:24;10945:8;:38::i;:::-;10797:198;;11036:26;;;;:30;11032:262;;11100:26;;;;;11083:14;11141:30;;;;-1:-1:-1;11200:27:0;;;11239:20;;11186:82;;;-1:-1:-1;;;11186:82:0;;-1:-1:-1;;;;;11239:20:0;;;11186:82;;;;;;;;;;;;11100:26;;11200:27;;;;;11186:52;;:82;;;;;;;;;;;;;;;;;11200:27;11186:82;;;5:2:-1;;;;30:1;27;20:12;5:2;11186:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11186:82:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;11032:262:0;11338:28;;;;:32;11334:224;;11394:23;;;;11419:27;;;;11448:28;;;;11478:20;;11387:112;;11394:23;-1:-1:-1;;;;;11419:27:0;;;;11448:28;11478:20;11387:6;:112::i;:::-;-1:-1:-1;11545:1:0;11514:28;;;:32;11334:224;10407:1158;;;:::o;25707:157::-;26750:12;;:36;;;-1:-1:-1;;;26750:36:0;;26775:10;26750:36;;;;;;-1:-1:-1;;;;;26750:12:0;;;;:24;;:36;;;;;;;;;;;;;;;:12;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;26750:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26750:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26750:36:0;26742:61;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;-1:-1:-1;;;26742:61:0;;;;;;;;;;;;;;;25787:1:::1;25781:3;:7;25773:56;;;;-1:-1:-1::0;;;25773:56:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25840:10;:16:::0;25707:157::o;6598:1985::-;6717:10;6740:9;6709:41;6701:76;;;;;-1:-1:-1;;;6701:76:0;;;;;;;;;;;;-1:-1:-1;;;6701:76:0;;;;;;;;;;;;;;;6812:13;;:45;;;-1:-1:-1;;;6812:45:0;;-1:-1:-1;;;;;6812:45:0;;;;;;;;;6788:21;;6812:13;;;;;:31;;:45;;;;;;;;;;;;;;;:13;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;6812:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6812:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6812:45:0;;-1:-1:-1;;;;;;6876:29:0;;6868:38;;;;;;6963:17;6991:14;7008:52;7025:9;7035:11;7047:12;7008:16;:52::i;:::-;6991:69;;7075:9;7071:308;;;7136:19;;7122:9;;:34;;;:13;:34;:::i;:::-;7109:9;:47;;7101:124;;;;-1:-1:-1;;;7101:124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7252:35;7282:4;7252:25;7266:10;;7252:9;;:13;;:25;;;;:::i;:35::-;7240:47;;7071:308;;;7332:35;7362:4;7332:25;7346:10;;7332:9;:13;;:25;;;;:::i;:35::-;7320:47;;7071:308;7410:24;:9;7424;7410:24;:13;:24;:::i;:::-;7397:9;:37;;7389:129;;;;-1:-1:-1;;;7389:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7529:16;7548:39;7562:24;:9;7576;7562:24;:13;:24;:::i;:::-;7548:9;;:39;:13;:39;:::i;:::-;7529:58;-1:-1:-1;7602:12:0;;7598:84;;7631:39;7648:10;7661:8;7631;:39::i;:::-;7721:70;7733:9;7744:11;7757:12;7770:9;7781;7721:11;:70::i;:::-;7864:85;-1:-1:-1;;;;;7864:36:0;;7909:10;7930:4;7937:11;7864:85;:36;:85;:::i;:::-;7960:7;;:65;;;-1:-1:-1;;;7960:65:0;;-1:-1:-1;;;;;7960:65:0;;;;;;;;;:7;;;;;:33;;8000:9;;7960:65;;;;;:7;;:65;;;;;;;;8000:9;7960:7;:65;;;5:2:-1;;;;30:1;27;20:12;5:2;7960:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;8078:12:0;8060:31;;;;:17;:31;;;;;;;;-1:-1:-1;;;;;8060:45:0;;;;;;;;;;:50;8056:401;;-1:-1:-1;8056:401:0;;-1:-1:-1;;8056:401:0;8127:20;8150:25;8161:13;8150:10;:25::i;:::-;8127:48;;8190:18;8223:13;8190:47;;8252:6;-1:-1:-1;;;;;8252:15:0;;8268:6;-1:-1:-1;;;;;8268:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8268:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8268:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8268:20:0;8307:12;;8290:39;;8325:3;;8290:30;;:12;;:30;:16;:30;:::i;:39::-;8252:78;;;;;;;;;;;;;-1:-1:-1;;;;;8252:78:0;-1:-1:-1;;;;;8252:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8252:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8252:78:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;8422:12:0;;8388:57;;8405:39;;8440:3;;8405:30;;:12;;:30;:16;:30;:::i;:39::-;8388:12;;:57;:16;:57;:::i;:::-;8358:12;8345:26;;;;:12;:26;;;;;;;;-1:-1:-1;;;;;8345:40:0;;;;;;;;;:100;-1:-1:-1;;8056:401:0;8533:12;8515:31;;;;:17;:31;;;;;;;;-1:-1:-1;;;;;8515:45:0;;;;;;;;;;:60;;8565:9;8515:60;:49;:60;:::i;:::-;8485:12;8467:31;;;;:17;:31;;;;;;;;-1:-1:-1;;;;;8467:45:0;;;;;;;;;;;;:108;;;;-1:-1:-1;;;;;;6598:1985:0:o;23661:89::-;23733:9;;23661:89;:::o;31644:1195::-;31789:7;31827:47;31840:21;31850:10;31840:9;:21::i;:::-;31863:3;31868:5;31827:12;:47::i;:::-;31885:12;;31889:7;;;;-1:-1:-1;;;;31900:15:0;31885:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;31885:30:0;;;;;;;;-1:-1:-1;31957:11:0;;31944:37;;31970:3;31975:5;31944:12;:37::i;:::-;31992:12;;31996:7;;;;-1:-1:-1;;;;32007:15:0;31992:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;31992:30:0;;;;;;;;;32051:44;32064:5;:18;;;32084:3;32089:5;32051:12;:44::i;:::-;32106:12;;32110:7;;;;-1:-1:-1;;;;32121:15:0;32106:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32106:30:0;;;;;;;;;32165:38;32175:5;:15;;;32192:3;32197:5;32165:9;:38::i;:::-;32214:12;;32218:7;;;;-1:-1:-1;;;;32229:15:0;32214:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32214:30:0;;;;;;;;;32273:40;32283:5;:17;;;32302:3;32307:5;32273:9;:40::i;:::-;32324:12;;32328:7;;;;-1:-1:-1;;;;32339:15:0;32324:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32324:30:0;;;;;;;;;32382:42;32392:5;:19;;;32413:3;32418:5;32382:9;:42::i;:::-;32435:12;;32439:7;;;;-1:-1:-1;;;;32450:15:0;32435:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32435:30:0;;;;;;;;;32494:44;32504:5;:21;;;32527:3;32532:5;32494:9;:44::i;:::-;32549:12;;32553:7;;;;-1:-1:-1;;;;32564:15:0;32549:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32549:30:0;;;;;;;;;32608:37;32618:5;:14;;;32634:3;32639:5;32608:9;:37::i;:::-;32656:12;;32660:7;;;;-1:-1:-1;;;;32671:15:0;32656:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32656:30:0;;;;;;;;;32715:42;32725:5;:19;;;32746:3;32751:5;32715:9;:42::i;:::-;32768:12;;32772:7;;;;-1:-1:-1;;;;32783:15:0;32768:3;;:12;;;;;;;;;:30;-1:-1:-1;;;;;32768:30:0;;;;;;;;-1:-1:-1;32826:5:0;;31644:1195;-1:-1:-1;;;;31644:1195:0:o;36871:248::-;36929:7;36953:6;36949:47;;-1:-1:-1;36983:1:0;36976:8;;36949:47;37018:5;;;37022:1;37018;:5;:1;37042:5;;;;;:10;37034:56;;;;-1:-1:-1;;;37034:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37125:132;37183:7;37210:39;37214:1;37217;37210:39;;;;;;;;;;;;;;;;;:3;:39::i;36344:181::-;36402:7;36434:5;;;36458:6;;;;36450:46;;;;;-1:-1:-1;;;36450:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;21977:757;22149:11;;:45;;;-1:-1:-1;;;22149:45:0;;-1:-1:-1;;;;;22149:45:0;;;;;;;;;22081:4;;;;;;22149:11;;;;;:38;;:45;;;;;;;;;;;:11;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;22149:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22149:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22149:45:0;;;;;;;;;-1:-1:-1;22149:45:0;-1:-1:-1;22209:18:0;;;:42;;-1:-1:-1;22231:20:0;;22209:42;22205:87;;;22275:5;22268:12;;;;;;22205:87;22302:22;22327:91;22395:22;:13;22413:3;22395:22;:17;:22;:::i;:::-;22327:63;22363:26;22380:8;;22371:3;22363:16;;:26;;;;:::i;:::-;22327:31;:10;22342:15;22327:31;:14;:31;:::i;:::-;:35;:63;:35;:63;:::i;:91::-;22302:116;;22449:14;22433:12;:30;22429:276;;22480:22;22505:91;22573:22;:13;22591:3;22573:22;:17;:22;:::i;:::-;22505:63;22541:26;22558:8;;22549:3;22541:16;;:26;;;;:::i;:::-;22505:31;:10;22520:15;22505:31;:14;:31;:::i;:91::-;22480:116;;22631:14;22615:12;:30;22611:83;;22673:5;22666:12;;;;;;;;22611:83;22429:276;;-1:-1:-1;22722:4:0;;21977:757;-1:-1:-1;;;;;;21977:757:0:o;36531:136::-;36589:7;36616:43;36620:1;36623;36616:43;;;;;;;;;;;;;;;;;:3;:43::i;8785:1155::-;8975:9;;8962;:22;;8954:78;;;;-1:-1:-1;;;8954:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9112:10;;9100:9;:22;;;;;;:27;9092:64;;;;;-1:-1:-1;;;9092:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9204:10;;9190:25;;:9;;:25;:13;:25;:::i;:::-;9175:11;:41;;;;;;:46;9167:88;;;;;-1:-1:-1;;;9167:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9288:1;9274:11;:15;9266:24;;;;;;9374:7;:14;9343:113;;9364:25;;:9;:25::i;:::-;9437:11;;9343:113;;;-1:-1:-1;;;;;9343:113:0;;;;;;;;;;;;;;;;;;;;;;;;9437:11;;;;9343:113;;;;;;;;;;;;;;;;;;;9480:305;;;;;;;;9521:10;9480:305;;;;;;;;;;;-1:-1:-1;;;;;9480:305:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9741:12;9480:305;;;;;;;;;;;;9467:7;27:10:-1;;39:1;23:18;;45:23;;9467:319:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9467:319:0;-1:-1:-1;;;;9467:319:0;;;-1:-1:-1;;;;;;9467:319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9822:11;9884;;9822;;;:20;;9611:9;;9635:11;;9867:29;;9884:11;;;;;9867:16;:29;:::i;:::-;9822:110;;;-1:-1:-1;;;;;;9822:110:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9822:110:0;;;;;;9920:10;9822:110;;;;;;;;;;-1:-1:-1;;9822:110:0;;;;;;;-1:-1:-1;9822:110:0;;;;5:2:-1;;;;30:1;27;20:12;5:2;9822:110:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9822:110:0;;;;8785:1155;;;;;:::o;38199:203::-;38325:68;;;-1:-1:-1;;;;;38325:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;38325:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;38299:95:0;;38318:5;;38299:18;:95::i;:::-;38199:203;;;;:::o;38016:175::-;38124:58;;;-1:-1:-1;;;;;38124:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;38124:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;38098:85:0;;38117:5;;38098:18;:85::i;23009:167::-;23085:20;23108:29;:14;-1:-1:-1;;;;;23108:27:0;;:29::i;:::-;23148:20;;23085:52;;-1:-1:-1;;;;;;23148:13:0;;;:20;;;;;23162:5;;23148:20;;;;23162:5;23148:13;:20;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;21303:633:0;21406:7;21561:27;;;:17;:27;;;;;;;;-1:-1:-1;;;;;21561:34:0;;;;;;;;;;;;21508:22;;;:12;:22;;;;;:29;;;;;;;;21406:7;;21508:88;;:48;;21542:13;21508:48;:33;:48;:::i;:88::-;21686:13;;:38;;;-1:-1:-1;;;21686:38:0;;-1:-1:-1;;;;;21686:38:0;;;;;;;;;21485:111;;-1:-1:-1;21645:18:0;;21686:13;;;;;:31;;:38;;;;;;;;;;;;;;:13;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;21686:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21686:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21686:38:0;21745:45;;;-1:-1:-1;;;21745:45:0;;-1:-1:-1;;;;;21745:45:0;;;;;;;;;;;;;;;21686:38;;-1:-1:-1;21745:15:0;;;;;;:45;;;;;21686:38;;21745:45;;;;;;;;-1:-1:-1;21745:15:0;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;21745:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21745:45:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21745:45:0;21737:74;;;;;-1:-1:-1;;;21737:74:0;;;;;;;;;;;;-1:-1:-1;;;21737:74:0;;;;;;;;;;;;;;;21863:27;;;;:17;:27;;;;;;;;-1:-1:-1;;;;;21863:34:0;;;;;;;;;;;;;21837:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21916:12:0;21303:633;-1:-1:-1;;;;;21303:633:0:o;20433:780::-;20485:7;20505:23;20543:6;20505:45;;20562:19;20583:25;20612:11;-1:-1:-1;;;;;20612:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20612:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20612:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20612:28:0;;;;;;;20715:17;;20612:28;;-1:-1:-1;20612:28:0;-1:-1:-1;20651:27:0;;20681:52;;:29;:12;20612:28;20681:29;:16;:29;:::i;:52::-;20651:82;-1:-1:-1;20744:20:0;;20835:1;20813:23;;20809:174;;;-1:-1:-1;20867:18:0;;20809:174;;;20932:18;20951:19;20932:39;;;;;;;;;20918:53;;20809:174;21008:52;21024:35;:12;21041:17;21024:35;:16;:35;:::i;:::-;21008:11;;:52;:15;:52;:::i;:::-;20993:67;;21071:11;-1:-1:-1;;;;;21071:25:0;;21097:12;21071:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21071:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;21126:49:0;;;21140:12;21126:49;;;;;;;;-1:-1:-1;;;;;21126:49:0;;;;;;;;;;-1:-1:-1;21126:49:0;;;;;;;-1:-1:-1;21126:49:0;-1:-1:-1;21193:12:0;20433:780;-1:-1:-1;;;;;;20433:780:0:o;33519:676::-;33610:7;-1:-1:-1;;;;;33653:13:0;;33697:2;33689:10;;33710:272;33740:7;;;33769:2;33765:6;;33762:153;;;33818:1;33821:2;33818:5;33807:18;;33792:3;33796:7;;;;;;33792:12;;;;;;;;;;;:33;-1:-1:-1;;;;;33792:33:0;;;;;;;;;33762:153;;;33892:1;33895:2;33892:5;33881:18;;33866:3;33870:7;;;;;;33866:12;;;;;;;;;;;:33;-1:-1:-1;;;;;33866:33:0;;;;;;;;;33762:153;33949:2;33943:8;;;;33710:272;33979:1;33971:5;:9;33710:272;;-1:-1:-1;;34002:7:0;34037:5;34020:135;34048:1;34044;:5;34020:135;;;34071:6;34080:3;34084:1;34080:6;;;;;;;;;;;;;;;;34071:15;;34110:3;34114;;;;;;;34110:8;;;;;;;;;;;;;;;;34101:3;34105:1;34101:6;;;;;;;;;;;:17;-1:-1:-1;;;;;34101:17:0;;;;;;;;;34142:1;34133:3;34137:1;34133:6;;;;;;;;;;;:10;-1:-1:-1;;;;;34133:10:0;;;;;;;;;34020:135;34051:3;;;;;34020:135;;;-1:-1:-1;34182:5:0;;33519:676;-1:-1:-1;;;;;33519:676:0:o;37263:189::-;37349:7;37384:12;37377:5;37369:28;;;;-1:-1:-1;;;37369:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;37369:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37408:9;37424:1;37420;:5;;;;;;;37263:189;-1:-1:-1;;;;;37263:189:0:o;36673:192::-;36759:7;36795:12;36787:6;;;;36779:29;;;;-1:-1:-1;;;36779:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;36779:29:0;-1:-1:-1;;;36831:5:0;;;36673:192::o;39391:448::-;39478:27;39486:5;-1:-1:-1;;;;;39478:25:0;;:27::i;:::-;39470:71;;;;;-1:-1:-1;;;39470:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39553:12;39567:23;39602:5;-1:-1:-1;;;;;39594:19:0;39614:4;39594:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;39594:25:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;39552:67:0;;;;39638:7;39630:52;;;;;-1:-1:-1;;;39630:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39697:17;;:21;39693:139;;39754:10;39743:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39743:30:0;39735:85;;;;-1:-1:-1;;;39735:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40545:317;40605:4;40771:20;;40671:66;40811:23;;;;;;:42;;-1:-1:-1;;40838:15:0;;;40803:51;-1:-1:-1;;40545:317:0:o;106:34092::-;;;;;;;;;;-1:-1:-1;;;;;106:34092:0;;;;;;;;;;;;;-1:-1:-1;;;;;106:34092:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://1abb1bbe3f8f8756f9e4b5108a0bdcb6f162e61194794f574e54f679bf0a4620
Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingOVERVIEW
NEST nToken oracle contract address.
Loading...Loading[ Download: CSV Export ][ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to AbiReencodingHeadOverflowWithStaticArrayCleanup (medium-severity), DirtyBytesArrayToStorage (low-severity), NestedCalldataArrayAbiReencodingSizeValidation (very low-severity), ABIDecodeTwoDimensionalArrayMemory (very low-severity), KeccakCaching (medium-severity), EmptyByteArrayCopy (medium-severity), DynamicArrayCleanup (medium-severity), MissingEscapingInFormatting (very low-severity), ArraySliceDynamicallyEncodedBaseType (very low-severity), ImplicitConstructorCallvalueCheck (very low-severity), TupleAssignmentMultiStackSlotComponents (very low-severity), MemoryArrayCreationOverflow (low-severity), YulOptimizerRedundantAssignmentBreakContinue (medium-severity) Solidity Compiler Bugs.
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.SignIn
Address Cards
To use this feature, please login to your Etherscan account and return to this page.Before You Copy
Transaction Private Note
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.