More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 131 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20587056 | 77 days ago | IN | 0 ETH | 0.00004889 | ||||
Approve | 20030794 | 155 days ago | IN | 0 ETH | 0.00038719 | ||||
Approve | 20030765 | 155 days ago | IN | 0 ETH | 0.00043544 | ||||
Approve | 20028249 | 155 days ago | IN | 0 ETH | 0.00107846 | ||||
Approve | 20028216 | 155 days ago | IN | 0 ETH | 0.00107629 | ||||
Transfer Ownersh... | 20028141 | 155 days ago | IN | 0 ETH | 0.00070547 | ||||
Set Parameters | 20028131 | 155 days ago | IN | 0 ETH | 0.00086436 | ||||
Approve | 20028099 | 155 days ago | IN | 0 ETH | 0.00177539 | ||||
Approve | 20028099 | 155 days ago | IN | 0 ETH | 0.00186868 | ||||
Approve | 20028097 | 155 days ago | IN | 0 ETH | 0.00329559 | ||||
Approve | 20028097 | 155 days ago | IN | 0 ETH | 0.00329559 | ||||
Approve | 20028097 | 155 days ago | IN | 0 ETH | 0.00329559 | ||||
Approve | 20028096 | 155 days ago | IN | 0 ETH | 0.00169807 | ||||
Approve | 20028096 | 155 days ago | IN | 0 ETH | 0.00186133 | ||||
Approve | 20028095 | 155 days ago | IN | 0 ETH | 0.00173893 | ||||
Approve | 20028095 | 155 days ago | IN | 0 ETH | 0.00229867 | ||||
Approve | 20028095 | 155 days ago | IN | 0 ETH | 0.00229867 | ||||
Approve | 20028094 | 155 days ago | IN | 0 ETH | 0.00171073 | ||||
Approve | 20028094 | 155 days ago | IN | 0 ETH | 0.00187393 | ||||
Approve | 20028093 | 155 days ago | IN | 0 ETH | 0.00166129 | ||||
Approve | 20028093 | 155 days ago | IN | 0 ETH | 0.00166129 | ||||
Approve | 20028093 | 155 days ago | IN | 0 ETH | 0.00173126 | ||||
Approve | 20028093 | 155 days ago | IN | 0 ETH | 0.00182455 | ||||
Approve | 20028093 | 155 days ago | IN | 0 ETH | 0.00182455 | ||||
Approve | 20028092 | 155 days ago | IN | 0 ETH | 0.00177935 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20240459 | 125 days ago | 0.00138643 ETH | ||||
20240459 | 125 days ago | 0.00138643 ETH | ||||
20117696 | 142 days ago | 0.0018943 ETH | ||||
20117696 | 142 days ago | 0.0018943 ETH | ||||
20031314 | 154 days ago | 0.00633352 ETH | ||||
20031314 | 154 days ago | 0.00633352 ETH | ||||
20030542 | 155 days ago | 0.00389615 ETH | ||||
20030542 | 155 days ago | 0.00389615 ETH | ||||
20028130 | 155 days ago | 0.00570816 ETH | ||||
20028130 | 155 days ago | 0.00570816 ETH | ||||
20028111 | 155 days ago | 0.00798165 ETH | ||||
20028111 | 155 days ago | 0.00798165 ETH | ||||
20028106 | 155 days ago | 0.00702316 ETH | ||||
20028106 | 155 days ago | 0.00702316 ETH | ||||
20028105 | 155 days ago | 0.0106021 ETH | ||||
20028105 | 155 days ago | 0.0106021 ETH | ||||
20028102 | 155 days ago | 0.01657245 ETH | ||||
20028102 | 155 days ago | 0.01657245 ETH | ||||
20028098 | 155 days ago | 0.01370518 ETH | ||||
20028098 | 155 days ago | 0.01370518 ETH | ||||
20028094 | 155 days ago | 0.0154919 ETH | ||||
20028094 | 155 days ago | 0.0154919 ETH | ||||
20028092 | 155 days ago | 0.01620618 ETH | ||||
20028092 | 155 days ago | 0.01620618 ETH | ||||
20028090 | 155 days ago | 0.01651707 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
IIFTT
Compiler Version
v0.8.25+commit.b61c2a91
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// _ _ _ _ // | | |_____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____ _____| | | // |_|_| | | | | |_ _| | __| | __ | |_ _| | | __| |_ _| __| | | |_|_| // |- -| | | | |- -| | | | __| | | -| | | | | __| | | | __| --| | // |_____|_|___| |_____| |_| |__| |_____|__|__| |_| |__|__|_____| |_| |_____|_____|__|__| // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%@@@@@@@@@@@@@@@@@@@@@@@@%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@%%@@@@#%@@@@@@@@@@@%#@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@#@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@%%@@@@@@@@@@@@@%@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@%%@#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@ // @@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@@@@@#@@@@@@@%@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@ // @@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@%@@@@%@@@@@@@%@@@@@@@%@@@@@@@@@@@@@@@@@@@%*%@%@@@@@@@@@@ // @@@@@@@@%@@@@@@@@@@@%@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@%%@@@@@@@@ // @@@@@@@%@@@@@@@@@@@@@%@@@@@@@@@@@@@@%@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@%%%@@@@@@@@@@%@@@@@@@ // @@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@%@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@%@@@@@@ // @@@@@%@@@@@%@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%###%%%%%%%%%%%%%%%%@@%@@@@@ // @@@@%@@@@@@%%@@@@@@@#%#*#%@@@@@+=--:::::::::::::::-=%@@@@*+=----------------------=#%%@@@@ // @@@#@@@@@@@@%**@@@@%+--=*@@@@#=-:....==---:::::::::----------:...................::-#@#@@@ // @@%@@@@@@@#+-==@@*=::.:=*@@@*=-:......--:...................:-:.::::........:::::::-=+%%@@ // @@%@@@@%*-:.:-=@#=-...:=*@%+=-:...::----=-:..................:---=+=-:....:-+++++++++++%@@ // @#@@@@@=-:...-=@%-:...:=*%#==:....#%%@@@*====---:....:---===-===+=%@=-:..:-=@@@@@@@@@@@@%@ // @#@@@@@=-....-=@%-:...:=#@#==:....%@@@@@@@@@@@@*-:...--%@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@#@ // %%@@@@@=-....-=@%-:...:-#@#==:....+********#@@@*=:...--@@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@%@ // #@@@@@@=-....-=@%-:...:-#@#==:...........:-#@@@*=:...--@@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@@% // #@@@@@@=-....-=@%-:...:-#@#==:...........=@@@@@*=:...--@@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@@% // #@@@@@@=-....-=@#-:...:-#@#=-:.....:----*@@@@@@*=:...--@@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@@# // #@@@@@@=-....-=@%=:...:-#@#=-:....#%#%%%@@@@@@@*=:...--@@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@@% // #@@@@@@=-....-=@%=:...:-#@#=-:....@@@@@@@@@@@@@*=:...--@@@@@%@@@@@@@=-:..:-=%@@@@@@@@@@@@% // %%@@@@@=-....-=@%=:...:-#@*=-:....@@@@@@@@@@@@@*=:...--%@@@@%@@@@@@@=-:..:-=@@@@@@@@@@@@%% // @#@@@@@=-....-=@%=:...:-#@*=-:....%@@@@@@@@@@@@*=:...--@@%@@@@@@@@@@=-:..:-=@@@%@@@@@@@@#@ // @#@@@@@=-....-=@#=:...:-#@*=-:...:@@@@@@@@@@@@@*=:...--%@@@@@@@@%@@@=-:..:-=@@@%%@@@@@@@%@ // @@%@@@@=-....-=%#=:...:=#@*==-::::%@@@@@@@@@@@@*=:...--@@@@@@@@@@%@@=-:..:-=@@@@@@@@@@@%@@ // @@%@@@@=-....-=@%=:.:-=*%@%*******@@@@@@@@@@@@@*=:...--@@@@@@@@@@@@@#+=-::-=@@@@@@@@@@@%@@ // @@@#@@@=-..:-+*@%===+*%@@@@@@@@@@@@@@@@@@%@@@%%#+=:::--@@@@@@@@@@@@@@@%*====%@@@@@@@@@%@@@ // @@@@%@*==-=+#@@@%+*#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+=-=-@@@@@@@@@%@@@@#@@%#+=@%@@@@@@@%@@@@ // @@@@@%@+**#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%*+=@@@@@@@@@@@@@@@@@@@@@@@%@@@@@%@@@@@ // @@@@@@%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@ // @@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@%@@@@@@@@@@@@@%@@@@@@@ // @@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@ // @@@@@@@@@@%@@#@@@@@@@@@@@@@@@@@@@@%@@@@@@@%@@@@@@@%@@@@%@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@ // @@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@%@@@@@@@#@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@ // @@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#@%@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@%@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@#@@@@@@@%@@@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@%%@@@@@@@@@@@@@@@@@@@@@@@@@%#@@@@@@@@@@@@%@@@@%%@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%@@@@@@@@@@@@@@@@@@@@@@%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // Website: https://www.initforthetech.xyz/ // TG: https://t.me/iifttoneth // Twitter: https://twitter.com/init4dtech // Docs:https://whitepaper.initforthetech.xyz/ // SPDX-License-Identifier: MIT pragma solidity 0.8.25; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { function totalSupply() external view returns (uint256); function circulatingSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); 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 ); } abstract contract Ownable { address internal owner; constructor(address _owner) { owner = _owner; } modifier onlyOwner() { require(isOwner(msg.sender), "!OWNER"); _; } function isOwner(address account) public view returns (bool) { return account == owner; } function transferOwnership(address payable adr) public onlyOwner { owner = adr; emit OwnershipTransferred(adr); } event OwnershipTransferred(address owner); } interface IFactory { function createPair( address tokenA, address tokenB ) external returns (address pair); function getPair( address tokenA, address tokenB ) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract IIFTT is IERC20, Ownable { using SafeMath for uint256; string private constant _name = "In it for the tech"; string private constant _symbol = "IIFTT"; uint8 private constant _decimals = 18; uint256 private _totalSupply = 100_000_000_000 * (10 ** _decimals); uint256 private _maxWalletToken = (_totalSupply * 100) / 10000; mapping(address => uint256) _balances; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) public isFeeExempt; mapping(address => bool) public isDividendExempt; mapping(address => bool) public isExemptFromLimits; mapping(address => bool) public isContractDividendAllowed; bool private tradingOpen = false; uint256 private startTime = 0; uint256 private deltaEnd = 10 minutes; IRouter router; address public pair; uint256 private buyFee = 500; uint256 private sellFee = 500; uint256 private initFee = 2500; uint256 private transferFee = 0; uint256 private denominator = 10000; uint256 public swapCounterTrigger = 5; bool private swapEnabled = true; uint256 public swapTimes; bool private swapping; uint256 public excessDividends; uint256 private swapThreshold = (_totalSupply * 100) / 100000; uint256 private _minTokenAmount = (_totalSupply * 10) / 100000; modifier lockTheSwap() { swapping = true; _; swapping = false; } bool public autoRewards = true; bool public blacklistRevoked = false; bool public saveEthRevoked = false; uint256 public totalShares; uint256 public totalDividends; uint256 public currentDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36; address[] shareholders; mapping(address => uint256) shareholderIndexes; mapping(address => uint256) shareholderClaims; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } mapping(address => Share) public shares; mapping(address => bool) public blacklist; uint256 internal currentIndex; uint256 public minPeriod = 12 hours; // min time for eth reward uint256 public minDistribution = 1 * (10 ** 9); uint256 public distributorGas = 500000; address internal constant DEAD = 0x000000000000000000000000000000000000dEaD; address public marketingWallet = 0x0B2e30f0b8F92ec8faA9b99ab97cE27DA31fdD54; constructor() Ownable(msg.sender) { IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _pair = IFactory(_router.factory()).createPair( address(this), _router.WETH() ); router = _router; pair = _pair; isFeeExempt[address(this)] = true; isFeeExempt[msg.sender] = true; isDividendExempt[address(pair)] = true; isDividendExempt[address(msg.sender)] = true; isDividendExempt[address(this)] = true; isDividendExempt[address(DEAD)] = true; isDividendExempt[address(0)] = true; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } receive() external payable {} function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function getOwner() external view override returns (address) { return owner; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer( address recipient, uint256 amount ) public override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance( address owner, address spender ) public view override returns (uint256) { return _allowances[owner][spender]; } function isContract(address addr) internal view returns (bool) { uint size; assembly { size := extcodesize(addr) } return size > 0; } function setisExempt(address _address, bool _enabled) external onlyOwner { isFeeExempt[_address] = _enabled; } function approve( address spender, uint256 amount ) public override returns (bool) { _approve(msg.sender, spender, amount); return true; } function circulatingSupply() public view override returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0))); } function preTxCheck( address sender, address recipient, uint256 amount ) internal view { require(blacklist[sender] == false && blacklist[recipient] == false ,"User is blacklisted"); require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require( amount > uint256(0), "Transfer amount must be greater than zero" ); require( amount <= balanceOf(sender), "You are trying to transfer more than your balance" ); } function _transfer( address sender, address recipient, uint256 amount ) private { preTxCheck(sender, recipient, amount); checkMaxWallet(sender, recipient, amount); checkTradingAllowed(sender, recipient); distributeDividend(msg.sender); swapbackCounters(sender, recipient); swapBack(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount); uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); emit Transfer(sender, recipient, amountReceived); processShares(sender, recipient); } function setStructure( uint256 _buy, uint256 _sell, uint256 _trans ) external onlyOwner { buyFee = _buy; sellFee = _sell; transferFee = _trans; require( buyFee <= denominator.div(5) && sellFee <= denominator.div(8) && transferFee <= denominator.div(8), "buyFee and sellFee cannot be more than 20%" ); } function processShares(address sender, address recipient) internal { if (shares[recipient].amount > 0 && autoRewards) { distributeDividend(recipient); } if (!isDividendExempt[sender] && recipient == pair && shares[sender].amount > 0) { distributeDividend(sender); } if (!isDividendExempt[sender]) { setShare(sender, balanceOf(sender)); } if (!isDividendExempt[recipient]) { setShare(recipient, balanceOf(recipient)); } if (isContract(sender) && !isContractDividendAllowed[sender]) { setShare(sender, uint256(0)); } if (isContract(recipient) && !isContractDividendAllowed[recipient]) { setShare(recipient, uint256(0)); } if (autoRewards) { process(distributorGas); } } function manuallyProcessReward() external onlyOwner { process(distributorGas.mul(uint256(2))); } function setParameters( uint256 _buy, uint256 _trans, bool _removeLimit ) external onlyOwner { if (_removeLimit) { _maxWalletToken = totalSupply(); // Set max wallet to total supply } else { uint256 newTx = (totalSupply() * _buy) / 10000; uint256 newTransfer = (totalSupply() * _trans) / 10000; uint256 limit = totalSupply().mul(5).div(1000); require( newTx >= limit && newTransfer >= limit, "Max TXs cannot be less than 0.5%" ); } } function checkMaxWallet( address sender, address recipient, uint256 amount ) internal view { if ( block.timestamp - startTime <= 10 minutes && !isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD) && !isExemptFromLimits[recipient] ) { require( (_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount." ); } } function swapbackCounters(address sender, address recipient) internal { if (recipient == pair && !isFeeExempt[sender]) { swapTimes += uint256(1); } } function swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function shouldSwapBack( address sender, address recipient, uint256 amount ) internal view returns (bool) { bool aboveMin = amount >= _minTokenAmount; bool aboveThreshold = balanceOf(address(this)) >= swapThreshold; return !swapping && swapEnabled && aboveMin && !isFeeExempt[sender] && recipient == pair && swapTimes >= swapCounterTrigger && aboveThreshold; } function swapAndSendToMarketing(uint256 tokenAmount) private { uint256 initialBalance = address(this).balance; swapTokensForETH(tokenAmount); uint256 deltaBalance = address(this).balance.sub(initialBalance); if (deltaBalance > 0) { payable(marketingWallet).transfer(deltaBalance); } } function swapBack( address sender, address recipient, uint256 amount ) internal { if (shouldSwapBack(sender, recipient, amount)) { uint256 bal = balanceOf(address(this)); if (bal >= (_totalSupply * 1) / 100) { bal = (_totalSupply * 1) / 100; } swapAndSendToMarketing(bal); // Swap and send tokens to marketing wallet as ETH swapTimes = uint256(0); } } function shouldTakeFee( address sender, address recipient ) internal view returns (bool) { return !isFeeExempt[sender] && !isFeeExempt[recipient]; } function takeFee( address sender, address recipient, uint256 amount ) internal returns (uint256) { uint256 totalFee = getTotalFee(sender, recipient); if (totalFee > 0) { uint256 buyTaxAmount = 0; uint256 sellTaxAmount = 0; if (recipient == pair) { buyTaxAmount = amount.mul(buyFee).div(denominator); } else if (sender == pair) { sellTaxAmount = amount.mul(sellFee).div(denominator); } // Send buy tax to marketing wallet if (buyTaxAmount > 0) { _balances[address(this)] = _balances[address(this)].add(buyTaxAmount); emit Transfer(sender, address(this), buyTaxAmount); } // Add sell tax to dividends if (sellTaxAmount > 0) { excessDividends = excessDividends.add(sellTaxAmount); } uint256 remainingAmount = amount.sub(buyTaxAmount).sub(sellTaxAmount); return remainingAmount; } return amount; } function getTotalFee( address sender, address recipient ) public view returns (uint256) { uint256 endTime = startTime + deltaEnd ; if (endTime >= block.timestamp) { return initFee; } else { if (recipient == pair) { return sellFee; } if (sender == pair) { return buyFee; } } return transferFee; } function transferFrom( address sender, address recipient, uint256 amount ) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, msg.sender, _allowances[sender][msg.sender].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function setSwapCounterTrigger( uint256 _swapCounterTrigger ) external onlyOwner { swapCounterTrigger = _swapCounterTrigger; } function setExcess() external { payable(owner).transfer(excessDividends); currentDividends = currentDividends.sub(excessDividends); excessDividends = uint256(0); } function setisDividendExempt( address holder, bool exempt ) external onlyOwner { isDividendExempt[holder] = exempt; if (exempt) { setShare(holder, 0); } else { setShare(holder, balanceOf(holder)); } } /* function resetLimits() external onlyOwner { _maxWalletToken = _totalSupply; } */ function setisContractDividendAllowed( address holder, bool allowed ) external onlyOwner { isContractDividendAllowed[holder] = allowed; if (!allowed) { setShare(holder, 0); } else { setShare(holder, balanceOf(holder)); } } function setShare(address shareholder, uint256 amount) internal { if (amount > 0 && shares[shareholder].amount == 0) { addShareholder(shareholder); } else if (amount == 0 && shares[shareholder].amount > 0) { removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends( shares[shareholder].amount ); } function deposit(uint256 amountETH) internal { currentDividends += amountETH; totalDividends += amountETH; dividendsPerShare = dividendsPerShare.add( dividendsPerShareAccuracyFactor.mul(amountETH).div(totalShares) ); } function process(uint256 gas) internal { uint256 shareholderCount = shareholders.length; if (shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; while (gasUsed < gas && iterations < shareholderCount) { if (currentIndex >= shareholderCount) { currentIndex = 0; } if (shouldDistribute(shareholders[currentIndex])) { distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function rescueERC20(address _address, uint256 _amount) external onlyOwner { IERC20(_address).transfer(msg.sender, _amount); } function startTrading() external onlyOwner { require(!tradingOpen, "Trading already enabled"); tradingOpen = true; startTime = block.timestamp; } function checkTradingAllowed( address sender, address recipient ) public view { if (!isFeeExempt[sender] && !isFeeExempt[recipient]) { require(tradingOpen, "ERC20: Trading is not allowed"); require(sender == pair || recipient == pair || block.timestamp - startTime >= 1 minutes,"transfers not allowed"); } } function shouldDistribute( address shareholder ) public view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function totalRewardsDistributed( address _wallet ) external view returns (uint256) { address shareholder = _wallet; return uint256(shares[shareholder].totalRealised); } function viewShares(address shareholder) external view returns (uint256) { return shares[shareholder].amount; } function distributeDividend(address shareholder) internal { if (shares[shareholder].amount == 0) { return; } uint256 amount = getUnpaidEarnings(shareholder); if (amount > 0) { totalDistributed = totalDistributed.add(amount); payable(shareholder).transfer(amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder] .totalRealised .add(amount); shares[shareholder].totalExcluded = getCumulativeDividends( shares[shareholder].amount ); currentDividends -= amount; } } function distributeDividendsFromExcess() internal { if (excessDividends > 0) { for (uint256 i = 0; i < shareholders.length; i++) { distributeDividend(shareholders[i]); } excessDividends = 0; } } function getUnpaidEarnings( address shareholder ) public view returns (uint256) { if (shares[shareholder].amount == 0) { return 0; } uint256 shareholderTotalDividends = getCumulativeDividends( shares[shareholder].amount ); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if (shareholderTotalDividends <= shareholderTotalExcluded) { return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends( uint256 share ) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function addBlacklist(address _address, bool _set) public onlyOwner { require(!blacklistRevoked,"blacklist has been revoked"); blacklist[_address] = _set; } function saveEth() public onlyOwner { require(!saveEthRevoked,"saveEth has been revoked"); payable(msg.sender).transfer(address(this).balance); } function revokeBlacklist() public onlyOwner { require(!blacklistRevoked, "already revoked"); blacklistRevoked = true; } function revokeSaveEth() public onlyOwner { require(!saveEthRevoked, "already revoked"); saveEthRevoked = true; } function airdrop(address [] memory _addressList, uint256 [] memory _inputList ) public onlyOwner { for(uint256 i = 0; i < _addressList.length; i++){ transfer(_addressList[i], _inputList[i]); } } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[ shareholders.length - 1 ]; shareholderIndexes[ shareholders[shareholders.length - 1] ] = shareholderIndexes[shareholder]; shareholders.pop(); } function setExemptFromLimits(address _address, bool _exempt) external onlyOwner { isExemptFromLimits[_address] = _exempt; } function setDistributionCriteria( uint256 _minPeriod, uint256 _minDistribution, uint256 _distributorGas ) external onlyOwner { minPeriod = _minPeriod; minDistribution = _minDistribution; distributorGas = _distributorGas; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_set","type":"bool"}],"name":"addBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addressList","type":"address[]"},{"internalType":"uint256[]","name":"_inputList","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistRevoked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"checkTradingAllowed","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"excessDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isContractDividendAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manuallyProcessReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revokeSaveEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saveEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saveEthRevoked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setExcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_exempt","type":"bool"}],"name":"setExemptFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"bool","name":"_removeLimit","type":"bool"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapCounterTrigger","type":"uint256"}],"name":"setSwapCounterTrigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setisContractDividendAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"shouldDistribute","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapCounterTrigger","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"viewShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526100106012600a6104b9565b61001f9064174876e8006104ce565b600155612710600154606461003491906104ce565b61003e91906104e5565b6002556009805460ff199081169091555f600a819055610258600b556101f4600e819055600f556109c4601055601155612710601255600560135560148054909116600190811790915554620186a0906100999060646104ce565b6100a391906104e5565b601855620186a0600154600a6100b991906104ce565b6100c391906104e5565b601955601a805462ffffff191660011790556ec097ce7bc90715b34b9f100000000060205561a8c0602755633b9aca006028556207a120602955602a80546001600160a01b031916730b2e30f0b8f92ec8faa9b99ab97ce27da31fdd5417905534801561012e575f80fd5b505f80546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015610192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b69190610504565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610201573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102259190610504565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561026f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102939190610504565b600c80546001600160a01b038581166001600160a01b031992831617909255600d80548484169216919091178155305f818152600560209081526040808320805460ff19908116600190811790925533808652838620805483168417905596549097168452600683528184208054881682179055858452818420805488168217905593835280832080548716851790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548716851790557f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f88054909616841790955591548382526003835284822081905593519384529394509092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505061052a565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561041157815f19048211156103f7576103f76103c3565b8085161561040457918102915b93841c93908002906103dc565b509250929050565b5f82610427575060016104b3565b8161043357505f6104b3565b816001811461044957600281146104535761046f565b60019150506104b3565b60ff841115610464576104646103c3565b50506001821b6104b3565b5060208310610133831016604e8410600b8410161715610492575081810a6104b3565b61049c83836103d7565b805f19048211156104af576104af6103c3565b0290505b92915050565b5f6104c760ff841683610419565b9392505050565b80820281158282048414176104b3576104b36103c3565b5f826104ff57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610514575f80fd5b81516001600160a01b03811681146104c7575f80fd5b612c43806105375f395ff3fe608060405260043610610374575f3560e01c8063893d20e8116101c8578063c0cbdea4116100fd578063e2d2e2191161009d578063efca2eed1161006d578063efca2eed14610a8e578063f2fde38b14610aa3578063f9f92be414610ac2578063ffd49c8414610af0575f80fd5b8063e2d2e21914610a07578063e3a61e0f14610a1c578063e46e238014610a50578063ef43b02b14610a6f575f80fd5b8063ce7c2ac2116100d8578063ce7c2ac214610931578063d2d55dde14610986578063dd62ed3e146109a5578063e27ab62e146109e9575f80fd5b8063c0cbdea4146108ad578063ca89b899146108cc578063cd2c6a9914610903575f80fd5b8063a13d1a2b11610168578063ac3f0b8c11610143578063ac3f0b8c14610850578063aef9098814610864578063b1ba841114610883578063c0c4939414610898575f80fd5b8063a13d1a2b146107f3578063a8aa1b3114610812578063a9059cbb14610831575f80fd5b80639358928b116101a35780639358928b146107895780639528432b1461079d57806395d89b41146107b1578063997664d7146107de575f80fd5b8063893d20e81461072f5780638c21cd521461074b5780638cd4426d1461076a575f80fd5b8063313ce567116102a95780634fab0ae81161024957806369d814681161021957806369d81468146106a157806370a08231146106ba57806375f0a874146106d957806376a9cb7d14610710575f80fd5b80634fab0ae81461064457806353d821721461065957806360e719621461066d5780636724348214610682575f80fd5b80633f4218e0116102845780633f4218e0146105b557806340c7f727146105e35780634355855a146105f757806348ff2b8b14610625575f80fd5b8063313ce567146105715780633773eafb1461058c5780633a98ef39146105a0575f80fd5b80631de3585c1161031457806328fd3198116102ef57806328fd3198146104fc578063293230b81461051b5780632f54bf6e1461052f57806330488a551461055c575f80fd5b80631de3585c1461049057806323b872dd146104af57806325e30cc9146104ce575f80fd5b80630ca61cb11161034f5780630ca61cb11461041d578063178f30161461043e57806317ca2e411461045d57806318160ddd1461047c575f80fd5b806306fdde031461037f57806308e20e1f146103cb578063095ea7b3146103ee575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b50604080518082019091526012815271092dc40d2e840ccdee440e8d0ca40e8cac6d60731b60208201525b6040516103c2919061272c565b60405180910390f35b3480156103d6575f80fd5b506103e0601d5481565b6040519081526020016103c2565b3480156103f9575f80fd5b5061040d610408366004612775565b610b05565b60405190151581526020016103c2565b348015610428575f80fd5b5061043c61043736600461279f565b610b1b565b005b348015610449575f80fd5b50601a5461040d9062010000900460ff1681565b348015610468575f80fd5b5061043c6104773660046127d5565b610b5b565b348015610487575f80fd5b506001546103e0565b34801561049b575f80fd5b5061043c6104aa3660046127d5565b610c06565b3480156104ba575f80fd5b5061040d6104c936600461280c565b610c77565b3480156104d9575f80fd5b5061040d6104e836600461284a565b60086020525f908152604090205460ff1681565b348015610507575f80fd5b506103e061051636600461284a565b610cdf565b348015610526575f80fd5b5061043c610d65565b34801561053a575f80fd5b5061040d61054936600461284a565b5f546001600160a01b0391821691161490565b348015610567575f80fd5b506103e060155481565b34801561057c575f80fd5b50604051601281526020016103c2565b348015610597575f80fd5b5061043c610df4565b3480156105ab575f80fd5b506103e0601b5481565b3480156105c0575f80fd5b5061040d6105cf36600461284a565b60056020525f908152604090205460ff1681565b3480156105ee575f80fd5b5061043c610e45565b348015610602575f80fd5b5061040d61061136600461284a565b60066020525f908152604090205460ff1681565b348015610630575f80fd5b5061043c61063f3660046127d5565b610ec9565b34801561064f575f80fd5b506103e060285481565b348015610664575f80fd5b5061043c610f1c565b348015610678575f80fd5b506103e060295481565b34801561068d575f80fd5b5061043c61069c366004612939565b610fa3565b3480156106ac575f80fd5b50601a5461040d9060ff1681565b3480156106c5575f80fd5b506103e06106d436600461284a565b611021565b3480156106e4575f80fd5b50602a546106f8906001600160a01b031681565b6040516001600160a01b0390911681526020016103c2565b34801561071b575f80fd5b5061043c61072a3660046129f5565b61103b565b34801561073a575f80fd5b505f546001600160a01b03166106f8565b348015610756575f80fd5b5061040d61076536600461284a565b611069565b348015610775575f80fd5b5061043c610784366004612775565b6110ad565b348015610794575f80fd5b506103e0611144565b3480156107a8575f80fd5b5061043c611173565b3480156107bc575f80fd5b50604080518082019091526005815264125251951560da1b60208201526103b5565b3480156107e9575f80fd5b506103e0601c5481565b3480156107fe575f80fd5b5061043c61080d3660046127d5565b611221565b34801561081d575f80fd5b50600d546106f8906001600160a01b031681565b34801561083c575f80fd5b5061040d61084b366004612775565b611274565b34801561085b575f80fd5b5061043c611280565b34801561086f575f80fd5b5061043c61087e366004612a0c565b6112c2565b34801561088e575f80fd5b506103e060135481565b3480156108a3575f80fd5b506103e060175481565b3480156108b8575f80fd5b5061043c6108c736600461279f565b6113df565b3480156108d7575f80fd5b506103e06108e636600461284a565b6001600160a01b03165f9081526024602052604090206002015490565b34801561090e575f80fd5b5061040d61091d36600461284a565b60076020525f908152604090205460ff1681565b34801561093c575f80fd5b5061096b61094b36600461284a565b60246020525f908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103c2565b348015610991575f80fd5b506103e06109a0366004612a0c565b6114bf565b3480156109b0575f80fd5b506103e06109bf366004612a0c565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156109f4575f80fd5b50601a5461040d90610100900460ff1681565b348015610a12575f80fd5b506103e0601f5481565b348015610a27575f80fd5b506103e0610a3636600461284a565b6001600160a01b03165f9081526024602052604090205490565b348015610a5b575f80fd5b5061043c610a6a366004612a38565b61152f565b348015610a7a575f80fd5b5061043c610a893660046127d5565b611638565b348015610a99575f80fd5b506103e0601e5481565b348015610aae575f80fd5b5061043c610abd36600461284a565b611697565b348015610acd575f80fd5b5061040d610adc36600461284a565b60256020525f908152604090205460ff1681565b348015610afb575f80fd5b506103e060275481565b5f610b11338484611713565b5060015b92915050565b5f546001600160a01b03163314610b4d5760405162461bcd60e51b8152600401610b4490612a6e565b60405180910390fd5b602792909255602855602955565b5f546001600160a01b03163314610b845760405162461bcd60e51b8152600401610b4490612a6e565b601a54610100900460ff1615610bdc5760405162461bcd60e51b815260206004820152601a60248201527f626c61636b6c69737420686173206265656e207265766f6b65640000000000006044820152606401610b44565b6001600160a01b03919091165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610c2f5760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b0382165f908152600860205260409020805460ff191682151517905580610c6557610c61825f611836565b5050565b610c6182610c7284611021565b611836565b5f610c83848484611969565b610cd48433610ccf85604051806060016040528060288152602001612be6602891396001600160a01b038a165f9081526004602090815260408083203384529091529020549190611a93565b611713565b5060015b9392505050565b6001600160a01b0381165f908152602460205260408120548103610d0457505f919050565b6001600160a01b0382165f90815260246020526040812054610d2590611abe565b6001600160a01b0384165f90815260246020526040902060010154909150808211610d5357505f9392505050565b610d5d8282611ada565b949350505050565b5f546001600160a01b03163314610d8e5760405162461bcd60e51b8152600401610b4490612a6e565b60095460ff1615610de15760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610b44565b6009805460ff1916600117905542600a55565b5f80546017546040516001600160a01b039092169281156108fc029290818181858888f19350505050158015610e2c573d5f803e3d5ffd5b50601754601d54610e3c91611ada565b601d555f601755565b5f546001600160a01b03163314610e6e5760405162461bcd60e51b8152600401610b4490612a6e565b601a54610100900460ff1615610eb85760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995d9bdad959608a1b6044820152606401610b44565b601a805461ff001916610100179055565b5f546001600160a01b03163314610ef25760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f455760405162461bcd60e51b8152600401610b4490612a6e565b601a5462010000900460ff1615610f905760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995d9bdad959608a1b6044820152606401610b44565b601a805462ff0000191662010000179055565b5f546001600160a01b03163314610fcc5760405162461bcd60e51b8152600401610b4490612a6e565b5f5b825181101561101c57611013838281518110610fec57610fec612a8e565b602002602001015183838151811061100657611006612a8e565b6020026020010151611274565b50600101610fce565b505050565b6001600160a01b03165f9081526003602052604090205490565b5f546001600160a01b031633146110645760405162461bcd60e51b8152600401610b4490612a6e565b601355565b6027546001600160a01b0382165f90815260236020526040812054909142916110929190612ab6565b108015610b1557506028546110a683610cdf565b1192915050565b5f546001600160a01b031633146110d65760405162461bcd60e51b8152600401610b4490612a6e565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015611120573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101c9190612ac9565b5f61116e6111515f611021565b61116861115f61dead611021565b60015490611ada565b90611ada565b905090565b5f546001600160a01b0316331461119c5760405162461bcd60e51b8152600401610b4490612a6e565b601a5462010000900460ff16156111f55760405162461bcd60e51b815260206004820152601860248201527f7361766545746820686173206265656e207265766f6b656400000000000000006044820152606401610b44565b60405133904780156108fc02915f818181858888f1935050505015801561121e573d5f803e3d5ffd5b50565b5f546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b5f610b11338484611969565b5f546001600160a01b031633146112a95760405162461bcd60e51b8152600401610b4490612a6e565b6029546112c0906112bb906002611ae5565b611af0565b565b6001600160a01b0382165f9081526005602052604090205460ff1615801561130257506001600160a01b0381165f9081526005602052604090205460ff16155b15610c615760095460ff166113595760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b44565b600d546001600160a01b03838116911614806113825750600d546001600160a01b038281169116145b8061139b5750603c600a54426113989190612ae4565b10155b610c615760405162461bcd60e51b81526020600482015260156024820152741d1c985b9cd9995c9cc81b9bdd08185b1b1bddd959605a1b6044820152606401610b44565b5f546001600160a01b031633146114085760405162461bcd60e51b8152600401610b4490612a6e565b600e839055600f8290556011819055601254611425906005611bd6565b600e5411158015611445575060125461143f906008611bd6565b600f5411155b8015611460575060125461145a906008611bd6565b60115411155b61101c5760405162461bcd60e51b815260206004820152602a60248201527f62757946656520616e642073656c6c4665652063616e6e6f74206265206d6f7260448201526965207468616e2032302560b01b6064820152608401610b44565b5f80600b54600a546114d19190612ab6565b90504281106114e4575050601054610b15565b600d546001600160a01b0390811690841603611504575050600f54610b15565b600d546001600160a01b0390811690851603611524575050600e54610b15565b505060115492915050565b5f546001600160a01b031633146115585760405162461bcd60e51b8152600401610b4490612a6e565b801561156957600154600255505050565b5f6127108461157760015490565b6115819190612af7565b61158b9190612b0e565b90505f6127108461159b60015490565b6115a59190612af7565b6115af9190612b0e565b90505f6115d26103e86115cc60056115c660015490565b90611ae5565b90611bd6565b90508083101580156115e45750808210155b6116305760405162461bcd60e51b815260206004820181905260248201527f4d6178205458732063616e6e6f74206265206c657373207468616e20302e35256044820152606401610b44565b505050505050565b5f546001600160a01b031633146116615760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b0382165f908152600660205260409020805460ff19168215801591909117909155610c6557610c61825f611836565b5f546001600160a01b031633146116c05760405162461bcd60e51b8152600401610b4490612a6e565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166117755760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b44565b6001600160a01b0382166117d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b44565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8111801561185a57506001600160a01b0382165f90815260246020526040902054155b156118bf57602180546001600160a01b0384165f818152602260205260408120839055600183018455929092527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b03191690911790556118f1565b801580156118e357506001600160a01b0382165f9081526024602052604090205415155b156118f1576118f182611be1565b6001600160a01b0382165f90815260246020526040902054601b5461192191839161191b91611ada565b90611cf1565b601b556001600160a01b0382165f90815260246020526040902081905561194781611abe565b6001600160a01b039092165f9081526024602052604090206001019190915550565b611974838383611cfc565b61197f838383611f17565b61198983836112c2565b6119923361203f565b61199c838361214a565b6119a7838383612196565b6001600160a01b0383165f908152600360205260409020546119c99082611ada565b6001600160a01b0384165f908152600360205260408120919091556119ee8484612204565b6119f85781611a03565b611a03848484612248565b6001600160a01b0384165f90815260036020526040902054909150611a289082611cf1565b6001600160a01b038085165f8181526003602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a7b9085815260200190565b60405180910390a3611a8d848461237f565b50505050565b5f8184841115611ab65760405162461bcd60e51b8152600401610b44919061272c565b505050900390565b5f610b156020546115cc601f5485611ae590919063ffffffff16565b5f610cd88284612ae4565b5f610cd88284612af7565b6021545f819003611aff575050565b5f805a90505f5b8483108015611b1457508381105b15611bcf578360265410611b27575f6026555b611b58602160265481548110611b3f57611b3f612a8e565b5f918252602090912001546001600160a01b0316611069565b15611b8e57611b8e602160265481548110611b7557611b75612a8e565b5f918252602090912001546001600160a01b031661203f565b611ba3611b9c5a8490611ada565b8490611cf1565b92505a602680549193505f611bb783612b2d565b91905055508080611bc790612b2d565b915050611b06565b5050505050565b5f610cd88284612b0e565b60218054611bf190600190612ae4565b81548110611c0157611c01612a8e565b5f9182526020808320909101546001600160a01b0384811684526022909252604090922054602180549290931692918110611c3e57611c3e612a8e565b5f91825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260229182905260408120546021805491939291611c8990600190612ae4565b81548110611c9957611c99612a8e565b5f9182526020808320909101546001600160a01b031683528201929092526040019020556021805480611cce57611cce612b45565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f610cd88284612ab6565b6001600160a01b0383165f9081526025602052604090205460ff16158015611d3c57506001600160a01b0382165f9081526025602052604090205460ff16155b611d7e5760405162461bcd60e51b8152602060048201526013602482015272155cd95c881a5cc8189b1858dadb1a5cdd1959606a1b6044820152606401610b44565b6001600160a01b038316611de25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b44565b6001600160a01b038216611e445760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b44565b5f8111611ea55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b44565b611eae83611021565b81111561101c5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b44565b610258600a5442611f289190612ae4565b11158015611f4e57506001600160a01b0383165f9081526005602052604090205460ff16155b8015611f7257506001600160a01b0382165f9081526005602052604090205460ff16155b8015611f8c5750600d546001600160a01b03838116911614155b8015611fa357506001600160a01b03821661dead14155b8015611fc757506001600160a01b0382165f9081526007602052604090205460ff16155b1561101c576002546001600160a01b0383165f90815260036020526040902054611ff19083611cf1565b111561101c5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b44565b6001600160a01b0381165f9081526024602052604081205490036120605750565b5f61206a82610cdf565b90508015610c6157601e5461207f9082611cf1565b601e556040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156120b5573d5f803e3d5ffd5b506001600160a01b0382165f90815260236020908152604080832042905560249091529020600201546120e89082611cf1565b6001600160a01b0383165f90815260246020526040902060028101919091555461211190611abe565b6001600160a01b0383165f90815260246020526040812060010191909155601d8054839290612141908490612ae4565b90915550505050565b600d546001600160a01b03828116911614801561217f57506001600160a01b0382165f9081526005602052604090205460ff16155b15610c6157600160155f8282546121419190612ab6565b6121a18383836124f6565b1561101c575f6121b030611021565b9050606460015460016121c39190612af7565b6121cd9190612b0e565b81106121f157606460015460016121e49190612af7565b6121ee9190612b0e565b90505b6121fa81612590565b505f601555505050565b6001600160a01b0382165f9081526005602052604081205460ff16158015610cd85750506001600160a01b03165f9081526005602052604090205460ff1615919050565b5f8061225485856114bf565b9050801561237657600d545f9081906001600160a01b0390811690871603612298576122916012546115cc600e5488611ae590919063ffffffff16565b91506122cc565b600d546001600160a01b03908116908816036122cc576122c96012546115cc600f5488611ae590919063ffffffff16565b90505b811561234457305f908152600360205260409020546122eb9083611cf1565b305f81815260036020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061233b9086815260200190565b60405180910390a35b801561235b576017546123579082611cf1565b6017555b5f61236a826111688886611ada565b9450610cd89350505050565b50909392505050565b6001600160a01b0381165f90815260246020526040902054158015906123a75750601a5460ff165b156123b5576123b58161203f565b6001600160a01b0382165f9081526006602052604090205460ff161580156123ea5750600d546001600160a01b038281169116145b801561240c57506001600160a01b0382165f9081526024602052604090205415155b1561241a5761241a8261203f565b6001600160a01b0382165f9081526006602052604090205460ff166124465761244682610c7284611021565b6001600160a01b0381165f9081526006602052604090205460ff166124725761247281610c7283611021565b813b1515801561249a57506001600160a01b0382165f9081526008602052604090205460ff16155b156124a9576124a9825f611836565b803b151580156124d157506001600160a01b0381165f9081526008602052604090205460ff16155b156124e0576124e0815f611836565b601a5460ff1615610c6157610c61602954611af0565b5f8060195483101590505f60185461250d30611021565b601654911115915060ff16158015612527575060145460ff165b80156125305750815b801561255457506001600160a01b0386165f9081526005602052604090205460ff16155b801561256d5750600d546001600160a01b038681169116145b801561257d575060135460155410155b80156125865750805b9695505050505050565b4761259a826125e4565b5f6125a54783611ada565b9050801561101c57602a546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611a8d573d5f803e3d5ffd5b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061261757612617612a8e565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561266e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126929190612b59565b816001815181106126a5576126a5612a8e565b6001600160a01b039283166020918202929092010152600c546126cb9130911684611713565b600c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906127039085905f90869030904290600401612b74565b5f604051808303815f87803b15801561271a575f80fd5b505af1158015611630573d5f803e3d5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461121e575f80fd5b5f8060408385031215612786575f80fd5b823561279181612761565b946020939093013593505050565b5f805f606084860312156127b1575f80fd5b505081359360208301359350604090920135919050565b801515811461121e575f80fd5b5f80604083850312156127e6575f80fd5b82356127f181612761565b91506020830135612801816127c8565b809150509250929050565b5f805f6060848603121561281e575f80fd5b833561282981612761565b9250602084013561283981612761565b929592945050506040919091013590565b5f6020828403121561285a575f80fd5b8135610cd881612761565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128a2576128a2612865565b604052919050565b5f67ffffffffffffffff8211156128c3576128c3612865565b5060051b60200190565b5f82601f8301126128dc575f80fd5b813560206128f16128ec836128aa565b612879565b8083825260208201915060208460051b870101935086841115612912575f80fd5b602086015b8481101561292e5780358352918301918301612917565b509695505050505050565b5f806040838503121561294a575f80fd5b823567ffffffffffffffff80821115612961575f80fd5b818501915085601f830112612974575f80fd5b813560206129846128ec836128aa565b82815260059290921b840181019181810190898411156129a2575f80fd5b948201945b838610156129c95785356129ba81612761565b825294820194908201906129a7565b965050860135925050808211156129de575f80fd5b506129eb858286016128cd565b9150509250929050565b5f60208284031215612a05575f80fd5b5035919050565b5f8060408385031215612a1d575f80fd5b8235612a2881612761565b9150602083013561280181612761565b5f805f60608486031215612a4a575f80fd5b83359250602084013591506040840135612a63816127c8565b809150509250925092565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b1557610b15612aa2565b5f60208284031215612ad9575f80fd5b8151610cd8816127c8565b81810381811115610b1557610b15612aa2565b8082028115828204841417610b1557610b15612aa2565b5f82612b2857634e487b7160e01b5f52601260045260245ffd5b500490565b5f60018201612b3e57612b3e612aa2565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215612b69575f80fd5b8151610cd881612761565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612bc45784516001600160a01b031683529383019391830191600101612b9f565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220fe64b0ac62fa8d65ea8f7b7235cc3eb2d7f53e54cdfdabc7e504fbe15369751b64736f6c63430008190033
Deployed Bytecode
0x608060405260043610610374575f3560e01c8063893d20e8116101c8578063c0cbdea4116100fd578063e2d2e2191161009d578063efca2eed1161006d578063efca2eed14610a8e578063f2fde38b14610aa3578063f9f92be414610ac2578063ffd49c8414610af0575f80fd5b8063e2d2e21914610a07578063e3a61e0f14610a1c578063e46e238014610a50578063ef43b02b14610a6f575f80fd5b8063ce7c2ac2116100d8578063ce7c2ac214610931578063d2d55dde14610986578063dd62ed3e146109a5578063e27ab62e146109e9575f80fd5b8063c0cbdea4146108ad578063ca89b899146108cc578063cd2c6a9914610903575f80fd5b8063a13d1a2b11610168578063ac3f0b8c11610143578063ac3f0b8c14610850578063aef9098814610864578063b1ba841114610883578063c0c4939414610898575f80fd5b8063a13d1a2b146107f3578063a8aa1b3114610812578063a9059cbb14610831575f80fd5b80639358928b116101a35780639358928b146107895780639528432b1461079d57806395d89b41146107b1578063997664d7146107de575f80fd5b8063893d20e81461072f5780638c21cd521461074b5780638cd4426d1461076a575f80fd5b8063313ce567116102a95780634fab0ae81161024957806369d814681161021957806369d81468146106a157806370a08231146106ba57806375f0a874146106d957806376a9cb7d14610710575f80fd5b80634fab0ae81461064457806353d821721461065957806360e719621461066d5780636724348214610682575f80fd5b80633f4218e0116102845780633f4218e0146105b557806340c7f727146105e35780634355855a146105f757806348ff2b8b14610625575f80fd5b8063313ce567146105715780633773eafb1461058c5780633a98ef39146105a0575f80fd5b80631de3585c1161031457806328fd3198116102ef57806328fd3198146104fc578063293230b81461051b5780632f54bf6e1461052f57806330488a551461055c575f80fd5b80631de3585c1461049057806323b872dd146104af57806325e30cc9146104ce575f80fd5b80630ca61cb11161034f5780630ca61cb11461041d578063178f30161461043e57806317ca2e411461045d57806318160ddd1461047c575f80fd5b806306fdde031461037f57806308e20e1f146103cb578063095ea7b3146103ee575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b50604080518082019091526012815271092dc40d2e840ccdee440e8d0ca40e8cac6d60731b60208201525b6040516103c2919061272c565b60405180910390f35b3480156103d6575f80fd5b506103e0601d5481565b6040519081526020016103c2565b3480156103f9575f80fd5b5061040d610408366004612775565b610b05565b60405190151581526020016103c2565b348015610428575f80fd5b5061043c61043736600461279f565b610b1b565b005b348015610449575f80fd5b50601a5461040d9062010000900460ff1681565b348015610468575f80fd5b5061043c6104773660046127d5565b610b5b565b348015610487575f80fd5b506001546103e0565b34801561049b575f80fd5b5061043c6104aa3660046127d5565b610c06565b3480156104ba575f80fd5b5061040d6104c936600461280c565b610c77565b3480156104d9575f80fd5b5061040d6104e836600461284a565b60086020525f908152604090205460ff1681565b348015610507575f80fd5b506103e061051636600461284a565b610cdf565b348015610526575f80fd5b5061043c610d65565b34801561053a575f80fd5b5061040d61054936600461284a565b5f546001600160a01b0391821691161490565b348015610567575f80fd5b506103e060155481565b34801561057c575f80fd5b50604051601281526020016103c2565b348015610597575f80fd5b5061043c610df4565b3480156105ab575f80fd5b506103e0601b5481565b3480156105c0575f80fd5b5061040d6105cf36600461284a565b60056020525f908152604090205460ff1681565b3480156105ee575f80fd5b5061043c610e45565b348015610602575f80fd5b5061040d61061136600461284a565b60066020525f908152604090205460ff1681565b348015610630575f80fd5b5061043c61063f3660046127d5565b610ec9565b34801561064f575f80fd5b506103e060285481565b348015610664575f80fd5b5061043c610f1c565b348015610678575f80fd5b506103e060295481565b34801561068d575f80fd5b5061043c61069c366004612939565b610fa3565b3480156106ac575f80fd5b50601a5461040d9060ff1681565b3480156106c5575f80fd5b506103e06106d436600461284a565b611021565b3480156106e4575f80fd5b50602a546106f8906001600160a01b031681565b6040516001600160a01b0390911681526020016103c2565b34801561071b575f80fd5b5061043c61072a3660046129f5565b61103b565b34801561073a575f80fd5b505f546001600160a01b03166106f8565b348015610756575f80fd5b5061040d61076536600461284a565b611069565b348015610775575f80fd5b5061043c610784366004612775565b6110ad565b348015610794575f80fd5b506103e0611144565b3480156107a8575f80fd5b5061043c611173565b3480156107bc575f80fd5b50604080518082019091526005815264125251951560da1b60208201526103b5565b3480156107e9575f80fd5b506103e0601c5481565b3480156107fe575f80fd5b5061043c61080d3660046127d5565b611221565b34801561081d575f80fd5b50600d546106f8906001600160a01b031681565b34801561083c575f80fd5b5061040d61084b366004612775565b611274565b34801561085b575f80fd5b5061043c611280565b34801561086f575f80fd5b5061043c61087e366004612a0c565b6112c2565b34801561088e575f80fd5b506103e060135481565b3480156108a3575f80fd5b506103e060175481565b3480156108b8575f80fd5b5061043c6108c736600461279f565b6113df565b3480156108d7575f80fd5b506103e06108e636600461284a565b6001600160a01b03165f9081526024602052604090206002015490565b34801561090e575f80fd5b5061040d61091d36600461284a565b60076020525f908152604090205460ff1681565b34801561093c575f80fd5b5061096b61094b36600461284a565b60246020525f908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103c2565b348015610991575f80fd5b506103e06109a0366004612a0c565b6114bf565b3480156109b0575f80fd5b506103e06109bf366004612a0c565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156109f4575f80fd5b50601a5461040d90610100900460ff1681565b348015610a12575f80fd5b506103e0601f5481565b348015610a27575f80fd5b506103e0610a3636600461284a565b6001600160a01b03165f9081526024602052604090205490565b348015610a5b575f80fd5b5061043c610a6a366004612a38565b61152f565b348015610a7a575f80fd5b5061043c610a893660046127d5565b611638565b348015610a99575f80fd5b506103e0601e5481565b348015610aae575f80fd5b5061043c610abd36600461284a565b611697565b348015610acd575f80fd5b5061040d610adc36600461284a565b60256020525f908152604090205460ff1681565b348015610afb575f80fd5b506103e060275481565b5f610b11338484611713565b5060015b92915050565b5f546001600160a01b03163314610b4d5760405162461bcd60e51b8152600401610b4490612a6e565b60405180910390fd5b602792909255602855602955565b5f546001600160a01b03163314610b845760405162461bcd60e51b8152600401610b4490612a6e565b601a54610100900460ff1615610bdc5760405162461bcd60e51b815260206004820152601a60248201527f626c61636b6c69737420686173206265656e207265766f6b65640000000000006044820152606401610b44565b6001600160a01b03919091165f908152602560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610c2f5760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b0382165f908152600860205260409020805460ff191682151517905580610c6557610c61825f611836565b5050565b610c6182610c7284611021565b611836565b5f610c83848484611969565b610cd48433610ccf85604051806060016040528060288152602001612be6602891396001600160a01b038a165f9081526004602090815260408083203384529091529020549190611a93565b611713565b5060015b9392505050565b6001600160a01b0381165f908152602460205260408120548103610d0457505f919050565b6001600160a01b0382165f90815260246020526040812054610d2590611abe565b6001600160a01b0384165f90815260246020526040902060010154909150808211610d5357505f9392505050565b610d5d8282611ada565b949350505050565b5f546001600160a01b03163314610d8e5760405162461bcd60e51b8152600401610b4490612a6e565b60095460ff1615610de15760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152606401610b44565b6009805460ff1916600117905542600a55565b5f80546017546040516001600160a01b039092169281156108fc029290818181858888f19350505050158015610e2c573d5f803e3d5ffd5b50601754601d54610e3c91611ada565b601d555f601755565b5f546001600160a01b03163314610e6e5760405162461bcd60e51b8152600401610b4490612a6e565b601a54610100900460ff1615610eb85760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995d9bdad959608a1b6044820152606401610b44565b601a805461ff001916610100179055565b5f546001600160a01b03163314610ef25760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b03919091165f908152600560205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610f455760405162461bcd60e51b8152600401610b4490612a6e565b601a5462010000900460ff1615610f905760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995d9bdad959608a1b6044820152606401610b44565b601a805462ff0000191662010000179055565b5f546001600160a01b03163314610fcc5760405162461bcd60e51b8152600401610b4490612a6e565b5f5b825181101561101c57611013838281518110610fec57610fec612a8e565b602002602001015183838151811061100657611006612a8e565b6020026020010151611274565b50600101610fce565b505050565b6001600160a01b03165f9081526003602052604090205490565b5f546001600160a01b031633146110645760405162461bcd60e51b8152600401610b4490612a6e565b601355565b6027546001600160a01b0382165f90815260236020526040812054909142916110929190612ab6565b108015610b1557506028546110a683610cdf565b1192915050565b5f546001600160a01b031633146110d65760405162461bcd60e51b8152600401610b4490612a6e565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303815f875af1158015611120573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101c9190612ac9565b5f61116e6111515f611021565b61116861115f61dead611021565b60015490611ada565b90611ada565b905090565b5f546001600160a01b0316331461119c5760405162461bcd60e51b8152600401610b4490612a6e565b601a5462010000900460ff16156111f55760405162461bcd60e51b815260206004820152601860248201527f7361766545746820686173206265656e207265766f6b656400000000000000006044820152606401610b44565b60405133904780156108fc02915f818181858888f1935050505015801561121e573d5f803e3d5ffd5b50565b5f546001600160a01b0316331461124a5760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b03919091165f908152600760205260409020805460ff1916911515919091179055565b5f610b11338484611969565b5f546001600160a01b031633146112a95760405162461bcd60e51b8152600401610b4490612a6e565b6029546112c0906112bb906002611ae5565b611af0565b565b6001600160a01b0382165f9081526005602052604090205460ff1615801561130257506001600160a01b0381165f9081526005602052604090205460ff16155b15610c615760095460ff166113595760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b44565b600d546001600160a01b03838116911614806113825750600d546001600160a01b038281169116145b8061139b5750603c600a54426113989190612ae4565b10155b610c615760405162461bcd60e51b81526020600482015260156024820152741d1c985b9cd9995c9cc81b9bdd08185b1b1bddd959605a1b6044820152606401610b44565b5f546001600160a01b031633146114085760405162461bcd60e51b8152600401610b4490612a6e565b600e839055600f8290556011819055601254611425906005611bd6565b600e5411158015611445575060125461143f906008611bd6565b600f5411155b8015611460575060125461145a906008611bd6565b60115411155b61101c5760405162461bcd60e51b815260206004820152602a60248201527f62757946656520616e642073656c6c4665652063616e6e6f74206265206d6f7260448201526965207468616e2032302560b01b6064820152608401610b44565b5f80600b54600a546114d19190612ab6565b90504281106114e4575050601054610b15565b600d546001600160a01b0390811690841603611504575050600f54610b15565b600d546001600160a01b0390811690851603611524575050600e54610b15565b505060115492915050565b5f546001600160a01b031633146115585760405162461bcd60e51b8152600401610b4490612a6e565b801561156957600154600255505050565b5f6127108461157760015490565b6115819190612af7565b61158b9190612b0e565b90505f6127108461159b60015490565b6115a59190612af7565b6115af9190612b0e565b90505f6115d26103e86115cc60056115c660015490565b90611ae5565b90611bd6565b90508083101580156115e45750808210155b6116305760405162461bcd60e51b815260206004820181905260248201527f4d6178205458732063616e6e6f74206265206c657373207468616e20302e35256044820152606401610b44565b505050505050565b5f546001600160a01b031633146116615760405162461bcd60e51b8152600401610b4490612a6e565b6001600160a01b0382165f908152600660205260409020805460ff19168215801591909117909155610c6557610c61825f611836565b5f546001600160a01b031633146116c05760405162461bcd60e51b8152600401610b4490612a6e565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166117755760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b44565b6001600160a01b0382166117d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b44565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f8111801561185a57506001600160a01b0382165f90815260246020526040902054155b156118bf57602180546001600160a01b0384165f818152602260205260408120839055600183018455929092527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b03191690911790556118f1565b801580156118e357506001600160a01b0382165f9081526024602052604090205415155b156118f1576118f182611be1565b6001600160a01b0382165f90815260246020526040902054601b5461192191839161191b91611ada565b90611cf1565b601b556001600160a01b0382165f90815260246020526040902081905561194781611abe565b6001600160a01b039092165f9081526024602052604090206001019190915550565b611974838383611cfc565b61197f838383611f17565b61198983836112c2565b6119923361203f565b61199c838361214a565b6119a7838383612196565b6001600160a01b0383165f908152600360205260409020546119c99082611ada565b6001600160a01b0384165f908152600360205260408120919091556119ee8484612204565b6119f85781611a03565b611a03848484612248565b6001600160a01b0384165f90815260036020526040902054909150611a289082611cf1565b6001600160a01b038085165f8181526003602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611a7b9085815260200190565b60405180910390a3611a8d848461237f565b50505050565b5f8184841115611ab65760405162461bcd60e51b8152600401610b44919061272c565b505050900390565b5f610b156020546115cc601f5485611ae590919063ffffffff16565b5f610cd88284612ae4565b5f610cd88284612af7565b6021545f819003611aff575050565b5f805a90505f5b8483108015611b1457508381105b15611bcf578360265410611b27575f6026555b611b58602160265481548110611b3f57611b3f612a8e565b5f918252602090912001546001600160a01b0316611069565b15611b8e57611b8e602160265481548110611b7557611b75612a8e565b5f918252602090912001546001600160a01b031661203f565b611ba3611b9c5a8490611ada565b8490611cf1565b92505a602680549193505f611bb783612b2d565b91905055508080611bc790612b2d565b915050611b06565b5050505050565b5f610cd88284612b0e565b60218054611bf190600190612ae4565b81548110611c0157611c01612a8e565b5f9182526020808320909101546001600160a01b0384811684526022909252604090922054602180549290931692918110611c3e57611c3e612a8e565b5f91825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260229182905260408120546021805491939291611c8990600190612ae4565b81548110611c9957611c99612a8e565b5f9182526020808320909101546001600160a01b031683528201929092526040019020556021805480611cce57611cce612b45565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f610cd88284612ab6565b6001600160a01b0383165f9081526025602052604090205460ff16158015611d3c57506001600160a01b0382165f9081526025602052604090205460ff16155b611d7e5760405162461bcd60e51b8152602060048201526013602482015272155cd95c881a5cc8189b1858dadb1a5cdd1959606a1b6044820152606401610b44565b6001600160a01b038316611de25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b44565b6001600160a01b038216611e445760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b44565b5f8111611ea55760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b44565b611eae83611021565b81111561101c5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b44565b610258600a5442611f289190612ae4565b11158015611f4e57506001600160a01b0383165f9081526005602052604090205460ff16155b8015611f7257506001600160a01b0382165f9081526005602052604090205460ff16155b8015611f8c5750600d546001600160a01b03838116911614155b8015611fa357506001600160a01b03821661dead14155b8015611fc757506001600160a01b0382165f9081526007602052604090205460ff16155b1561101c576002546001600160a01b0383165f90815260036020526040902054611ff19083611cf1565b111561101c5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b44565b6001600160a01b0381165f9081526024602052604081205490036120605750565b5f61206a82610cdf565b90508015610c6157601e5461207f9082611cf1565b601e556040516001600160a01b0383169082156108fc029083905f818181858888f193505050501580156120b5573d5f803e3d5ffd5b506001600160a01b0382165f90815260236020908152604080832042905560249091529020600201546120e89082611cf1565b6001600160a01b0383165f90815260246020526040902060028101919091555461211190611abe565b6001600160a01b0383165f90815260246020526040812060010191909155601d8054839290612141908490612ae4565b90915550505050565b600d546001600160a01b03828116911614801561217f57506001600160a01b0382165f9081526005602052604090205460ff16155b15610c6157600160155f8282546121419190612ab6565b6121a18383836124f6565b1561101c575f6121b030611021565b9050606460015460016121c39190612af7565b6121cd9190612b0e565b81106121f157606460015460016121e49190612af7565b6121ee9190612b0e565b90505b6121fa81612590565b505f601555505050565b6001600160a01b0382165f9081526005602052604081205460ff16158015610cd85750506001600160a01b03165f9081526005602052604090205460ff1615919050565b5f8061225485856114bf565b9050801561237657600d545f9081906001600160a01b0390811690871603612298576122916012546115cc600e5488611ae590919063ffffffff16565b91506122cc565b600d546001600160a01b03908116908816036122cc576122c96012546115cc600f5488611ae590919063ffffffff16565b90505b811561234457305f908152600360205260409020546122eb9083611cf1565b305f81815260036020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061233b9086815260200190565b60405180910390a35b801561235b576017546123579082611cf1565b6017555b5f61236a826111688886611ada565b9450610cd89350505050565b50909392505050565b6001600160a01b0381165f90815260246020526040902054158015906123a75750601a5460ff165b156123b5576123b58161203f565b6001600160a01b0382165f9081526006602052604090205460ff161580156123ea5750600d546001600160a01b038281169116145b801561240c57506001600160a01b0382165f9081526024602052604090205415155b1561241a5761241a8261203f565b6001600160a01b0382165f9081526006602052604090205460ff166124465761244682610c7284611021565b6001600160a01b0381165f9081526006602052604090205460ff166124725761247281610c7283611021565b813b1515801561249a57506001600160a01b0382165f9081526008602052604090205460ff16155b156124a9576124a9825f611836565b803b151580156124d157506001600160a01b0381165f9081526008602052604090205460ff16155b156124e0576124e0815f611836565b601a5460ff1615610c6157610c61602954611af0565b5f8060195483101590505f60185461250d30611021565b601654911115915060ff16158015612527575060145460ff165b80156125305750815b801561255457506001600160a01b0386165f9081526005602052604090205460ff16155b801561256d5750600d546001600160a01b038681169116145b801561257d575060135460155410155b80156125865750805b9695505050505050565b4761259a826125e4565b5f6125a54783611ada565b9050801561101c57602a546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611a8d573d5f803e3d5ffd5b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061261757612617612a8e565b6001600160a01b03928316602091820292909201810191909152600c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561266e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126929190612b59565b816001815181106126a5576126a5612a8e565b6001600160a01b039283166020918202929092010152600c546126cb9130911684611713565b600c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906127039085905f90869030904290600401612b74565b5f604051808303815f87803b15801561271a575f80fd5b505af1158015611630573d5f803e3d5ffd5b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b038116811461121e575f80fd5b5f8060408385031215612786575f80fd5b823561279181612761565b946020939093013593505050565b5f805f606084860312156127b1575f80fd5b505081359360208301359350604090920135919050565b801515811461121e575f80fd5b5f80604083850312156127e6575f80fd5b82356127f181612761565b91506020830135612801816127c8565b809150509250929050565b5f805f6060848603121561281e575f80fd5b833561282981612761565b9250602084013561283981612761565b929592945050506040919091013590565b5f6020828403121561285a575f80fd5b8135610cd881612761565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128a2576128a2612865565b604052919050565b5f67ffffffffffffffff8211156128c3576128c3612865565b5060051b60200190565b5f82601f8301126128dc575f80fd5b813560206128f16128ec836128aa565b612879565b8083825260208201915060208460051b870101935086841115612912575f80fd5b602086015b8481101561292e5780358352918301918301612917565b509695505050505050565b5f806040838503121561294a575f80fd5b823567ffffffffffffffff80821115612961575f80fd5b818501915085601f830112612974575f80fd5b813560206129846128ec836128aa565b82815260059290921b840181019181810190898411156129a2575f80fd5b948201945b838610156129c95785356129ba81612761565b825294820194908201906129a7565b965050860135925050808211156129de575f80fd5b506129eb858286016128cd565b9150509250929050565b5f60208284031215612a05575f80fd5b5035919050565b5f8060408385031215612a1d575f80fd5b8235612a2881612761565b9150602083013561280181612761565b5f805f60608486031215612a4a575f80fd5b83359250602084013591506040840135612a63816127c8565b809150509250925092565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610b1557610b15612aa2565b5f60208284031215612ad9575f80fd5b8151610cd8816127c8565b81810381811115610b1557610b15612aa2565b8082028115828204841417610b1557610b15612aa2565b5f82612b2857634e487b7160e01b5f52601260045260245ffd5b500490565b5f60018201612b3e57612b3e612aa2565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215612b69575f80fd5b8151610cd881612761565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612bc45784516001600160a01b031683529383019391830191600101612b9f565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220fe64b0ac62fa8d65ea8f7b7235cc3eb2d7f53e54cdfdabc7e504fbe15369751b64736f6c63430008190033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.