ERC-20
Overview
Max Total Supply
100,000,000,000 $EARN
Holders
194
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
52,669,167.863351931 $EARNValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EARN
Compiler Version
v0.8.14+commit.80d49f37
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.14; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol"; import "./DividendDistributor.sol"; contract EARN is IERC20, Ownable { address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; address public REWARD = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; // USDC string constant _name = "EARN"; string constant _symbol = "$EARN"; uint8 constant _decimals = 9; uint256 _totalSupply = 100000000000 * (10**_decimals); // One hundred billions mapping(address => uint256) _balances; mapping(address => mapping(address => uint256)) _allowances; mapping(address => bool) public isFeeExempt; mapping(address => bool) public isDividendExempt; mapping(address => bool) public isBlacklisted; mapping(address => bool) public isMaxBuyLimitExcluded; mapping(address => bool) public isMaxSellLimitExcluded; mapping(address => bool) public isAuthorized; address public marketingWallet; address public buyBackWallet; address public lpReceiver; // Fees uint256 public rewardFee = 11; uint256 public buyLiquidityFee = 1; uint256 public buyBuyBackFee = 1; uint256 public buyMarketingFee = 2; uint256 public buyTotalFee = 15; uint256 public sellLiquidityFee = 1; uint256 public sellBuyBackFee = 1; uint256 public sellMarketingFee = 2; uint256 public sellTotalFee = 15; uint256 public swapLiquidityFee = 1; uint256 public swapBuyBackFee = 1; uint256 public swapMarketingFee = 2; uint256 public swapTotalFee = 15; IUniswapV2Router02 public router; address public pair; DividendDistributor public dividendTracker; uint256 distributorGas = 500000; uint256 public maxSellLimit = 0; uint256 public maxBuyLimit = 0; bool public isSellCoolDownEnabled = true; uint256 public sellCoolDownTime = 15 minutes; uint256 public lastSwapTime; uint256 public swapThreshold = (_totalSupply * 1) / 10000; // 0.001% of supply bool public contractSwapEnabled = true; bool public isTradeEnabled = false; bool inContractSwap; modifier swapping() { inContractSwap = true; _; inContractSwap = false; } event SetIsDividendExempt(address holder, bool status); event SetIsFeeExempt(address holder, bool status); event AddAuthorizedWallet(address holder, bool status); event SetDoContractSwap(bool status); event DoContractSwap(uint256 amount, uint256 time); event ChangeDistributionCriteria( uint256 minPeriod, uint256 minDistribution ); event AutoLiquify(uint256 amountBNB, uint256 amountBOG); constructor() { router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); pair = IUniswapV2Factory(router.factory()).createPair( router.WETH(), address(this) ); _allowances[address(this)][address(router)] = type(uint256).max; dividendTracker = new DividendDistributor(REWARD); marketingWallet = 0xBA3944d8f9057e4fA32c80039385d21b1A689e59; buyBackWallet = 0x3193669b46F25a63ed6D32024C1409b12a26563E; lpReceiver = 0x91b1DC8443848314FA9B1f3F16497521A16b59ca; address deployer = 0x4958122d53756655616262168867B4AaB7496BA8; isFeeExempt[deployer] = true; isFeeExempt[address(this)] = true; isFeeExempt[marketingWallet] = true; isFeeExempt[buyBackWallet] = true; isFeeExempt[lpReceiver] = true; isDividendExempt[deployer] = true; isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[ZERO] = true; isDividendExempt[DEAD] = true; isDividendExempt[lpReceiver] = true; isDividendExempt[buyBackWallet] = true; isDividendExempt[marketingWallet] = true; isAuthorized[deployer] = true; isAuthorized[pair] = true; isAuthorized[address(this)] = true; isAuthorized[ZERO] = true; isAuthorized[DEAD] = true; isAuthorized[lpReceiver] = true; isAuthorized[buyBackWallet] = true; isAuthorized[marketingWallet] = true; isMaxBuyLimitExcluded[deployer] = true; isMaxSellLimitExcluded[deployer] = true; _balances[deployer] = _totalSupply; emit Transfer(address(0), deployer, _totalSupply); } receive() external payable {} function totalSupply() external view override returns (uint256) { return _totalSupply; } 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 balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function getHolderDetails(address holder) public view returns ( uint256, uint256, uint256, uint256 ) { return dividendTracker.getHolderDetails(holder); } function getLastProcessedIndex() public view returns (uint256) { return dividendTracker.getLastProcessedIndex(); } function getNumberOfTokenHolders() public view returns (uint256) { return dividendTracker.getNumberOfTokenHolders(); } function totalDistributedRewards() public view returns (uint256) { return dividendTracker.totalDistributedRewards(); } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function _approve( address owner, address spender, uint256 amount ) internal virtual { 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 approveMax(address spender) external returns (bool) { return approve(spender, type(uint256).max); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { if (_allowances[sender][msg.sender] != type(uint256).max) { require( _allowances[sender][msg.sender] >= amount, "Insufficient Allowance" ); _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount; } return _transferFrom(sender, recipient, amount); } function _transferFrom( address sender, address recipient, uint256 amount ) internal returns (bool) { require( !isBlacklisted[sender] && !isBlacklisted[recipient], "Blacklisted users" ); if (!isTradeEnabled) require(isAuthorized[sender], "Trading disabled"); if (inContractSwap) { return _basicTransfer(sender, recipient, amount); } if (shouldDoContractSwap()) { doContractSwap(); } { if ( sender == pair && !isMaxBuyLimitExcluded[recipient] && maxBuyLimit != 0 ) require(amount <= maxBuyLimit, "Max buy limit exceeded"); if ( recipient == pair && !isMaxSellLimitExcluded[sender] && maxSellLimit != 0 ) require(amount <= maxSellLimit, "Max sell limit exceeded"); } require(_balances[sender] >= amount, "Insufficient Balance"); _balances[sender] = _balances[sender] - amount; uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient] + amountReceived; if (!isDividendExempt[sender]) { try dividendTracker.setShare(sender, _balances[sender]) {} catch {} } if (!isDividendExempt[recipient]) { try dividendTracker.setShare(recipient, _balances[recipient]) {} catch {} } try dividendTracker.process(distributorGas) {} catch {} emit Transfer(sender, recipient, amountReceived); return true; } function takeFee( address sender, address recipient, uint256 amount ) internal returns (uint256) { uint256 feeToken; if (recipient == pair) feeToken = (amount * sellTotalFee) / 100; else feeToken = (amount * buyTotalFee) / 100; _balances[address(this)] = _balances[address(this)] + feeToken; emit Transfer(sender, address(this), feeToken); return (amount - feeToken); } function _basicTransfer( address sender, address recipient, uint256 amount ) internal returns (bool) { require(_balances[sender] >= amount, "Insufficient Balance"); _balances[sender] = _balances[sender] - amount; _balances[recipient] = _balances[recipient] + amount; emit Transfer(sender, recipient, amount); return true; } function shouldTakeFee(address sender, address to) internal view returns (bool) { if (isFeeExempt[sender] || isFeeExempt[to]) { return false; } else { return true; } } function shouldDoContractSwap() internal view returns (bool) { return (msg.sender != pair && !inContractSwap && contractSwapEnabled && (lastSwapTime + sellCoolDownTime) <= block.timestamp && _balances[address(this)] >= swapThreshold); } // Claim manually function ___claimRewards(bool tryAll) public { dividendTracker.claimDividend(); if (tryAll) { try dividendTracker.process(distributorGas) {} catch {} } } // Clear the queue manually function claimProcess() public { try dividendTracker.process(distributorGas) {} catch {} } function isRewardExcluded(address _wallet) public view returns (bool) { return isDividendExempt[_wallet]; } function isFeeExcluded(address _wallet) public view returns (bool) { return isFeeExempt[_wallet]; } function doContractSwap() internal swapping { uint256 contractTokenBalance = _balances[address(this)]; uint256 tokensToLp = (contractTokenBalance * swapLiquidityFee) / swapTotalFee; uint256 tokensToReward = (contractTokenBalance * rewardFee) / swapTotalFee; uint256 buyBackAndMarketingFee = swapBuyBackFee + swapMarketingFee; uint256 tokensToSwap = contractTokenBalance - tokensToLp - tokensToReward; if (tokensToReward > 0) { swapTokensForTokens(tokensToReward, REWARD); uint256 swappedRewardTokens = IERC20(REWARD).balanceOf( address(this) ); IERC20(REWARD).transfer( address(dividendTracker), swappedRewardTokens ); try dividendTracker.deposit(swappedRewardTokens) {} catch {} } if (tokensToSwap > 0 && buyBackAndMarketingFee > 0) { swapTokensForEth(tokensToSwap); uint256 swappedTokens = address(this).balance; uint256 tokensForMarketing = (swappedTokens * swapMarketingFee) / buyBackAndMarketingFee; uint256 tokensForBuyBack = swappedTokens - tokensForMarketing; if (tokensForMarketing > 0) payable(marketingWallet).transfer(tokensForMarketing); if (tokensForBuyBack > 0) payable(buyBackWallet).transfer(tokensForBuyBack); } if (tokensToLp > 0) swapAndLiquify(tokensToLp); lastSwapTime = block.timestamp; } // All tax wallets receive BUSD instead of BNB function swapTokensForTokens(uint256 tokenAmount, address tokenToSwap) private { address[] memory path = new address[](3); path[0] = address(this); path[1] = router.WETH(); path[2] = tokenToSwap; _approve(address(this), address(router), tokenAmount); router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of tokens path, address(this), block.timestamp ); } function swapAndLiquify(uint256 tokens) private { // split the contract balance into halves uint256 half = tokens / 2; uint256 otherHalf = tokens - half; // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance - initialBalance; // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit AutoLiquify(newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokenAmount); // make the swap router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private { _approve(address(this), address(router), tokenAmount); // add the liquidity router.addLiquidityETH{value: bnbAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable lpReceiver, block.timestamp ); } function setIsDividendExempt(address holder, bool exempt) external onlyOwner { require( holder != address(this) && holder != pair, "can not add pair and token address as share holder" ); isDividendExempt[holder] = exempt; if (exempt) { dividendTracker.setShare(holder, 0); } else { dividendTracker.setShare(holder, _balances[holder]); } emit SetIsDividendExempt(holder, exempt); } function setIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; emit SetIsFeeExempt(holder, exempt); } function setDoContractSwap(bool _enabled) external onlyOwner { contractSwapEnabled = _enabled; emit SetDoContractSwap(_enabled); } function blackListWallets(address _wallet, bool _status) external onlyOwner { isBlacklisted[_wallet] = _status; } function setDistributionCriteria( uint256 _minPeriod, uint256 _minDistribution ) external onlyOwner { dividendTracker.setDistributionCriteria(_minPeriod, _minDistribution); emit ChangeDistributionCriteria(_minPeriod, _minDistribution); } function setDistributorSettings(uint256 gas) external onlyOwner { require(gas < 750000); distributorGas = gas; } function changeMarketingWallet(address _wallet) external onlyOwner { marketingWallet = _wallet; } function changeBuyBackWallet(address _wallet) external onlyOwner { buyBackWallet = _wallet; } function changeLPWallet(address _wallet) external onlyOwner { lpReceiver = _wallet; } function changeBuyFees( uint256 _liquidityFee, uint256 _buyBackFee, uint256 _marketingFee ) external onlyOwner { buyLiquidityFee = _liquidityFee; buyBuyBackFee = _buyBackFee; buyMarketingFee = _marketingFee; buyTotalFee = rewardFee + _liquidityFee + _buyBackFee + _marketingFee; require(buyTotalFee <= 15, "Total fees can not greater than 15%"); } function changeSellFees( uint256 _liquidityFee, uint256 _buyBackFee, uint256 _marketingFee ) external onlyOwner { sellLiquidityFee = _liquidityFee; sellBuyBackFee = _buyBackFee; sellMarketingFee = _marketingFee; sellTotalFee = rewardFee + _liquidityFee + _buyBackFee + _marketingFee; require(sellTotalFee <= 15, "Total fees can not greater than 15%"); } function changeSwapFees( uint256 _liquidityFee, uint256 _buyBackFee, uint256 _marketingFee ) external onlyOwner { swapLiquidityFee = _liquidityFee; swapBuyBackFee = _buyBackFee; swapMarketingFee = _marketingFee; swapTotalFee = rewardFee + _liquidityFee + _buyBackFee + _marketingFee; require(swapTotalFee <= 15, "Total fees can not greater than 15%"); } function setSellCollDown(bool _status, uint256 _coolDownTime) external onlyOwner { isSellCoolDownEnabled = _status; sellCoolDownTime = _coolDownTime; } function changeSellLimit(uint256 _limit) external onlyOwner { if (_limit > 0) require( _limit >= 100 * 10**6 * 10**_decimals, "Limit can not less than 250 million" ); maxSellLimit = _limit; } function changeBuyLimit(uint256 _limit) external onlyOwner { if (_limit > 0) require( _limit >= 100 * 10**6 * 10**_decimals, "Limit can not less than 250 million" ); maxBuyLimit = _limit; } function excludeFromMaxSell(address _wallet, bool _status) external onlyOwner { isMaxSellLimitExcluded[_wallet] = _status; } function excludeFromMaxBuy(address _wallet, bool _status) external onlyOwner { isMaxBuyLimitExcluded[_wallet] = _status; } function enableTrading() external onlyOwner { isTradeEnabled = true; } function setAuthorizedWallets(address _wallet, bool _status) external onlyOwner { isAuthorized[_wallet] = _status; } function rescueEth() external onlyOwner { uint256 balance = address(this).balance; require(balance > 0, "No enough ETH to transfer"); payable(msg.sender).transfer(balance); } function purgeBeforeSwitch() public onlyOwner { dividendTracker.purge(msg.sender); } function depositRewards(uint256 _rewardAmount) external onlyOwner { IERC20(REWARD).transferFrom( msg.sender, address(dividendTracker), _rewardAmount ); try dividendTracker.deposit(_rewardAmount) {} catch {} } }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IDividendDistributor { function setDistributionCriteria( uint256 _minPeriod, uint256 _minDistribution ) external; function setShare(address shareholder, uint256 amount) external; function deposit(uint256 amount) external; function process(uint256 gas) external; function purge(address receiver) external; } contract DividendDistributor is IDividendDistributor { address public _token; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } IERC20 public REWARD; address[] shareholders; mapping(address => uint256) shareholderIndexes; mapping(address => uint256) shareholderClaims; mapping(address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10**36; uint256 public minPeriod = 1 * 60; uint256 public minDistribution = 1 * (10**3); uint256 currentIndex; bool initialized; modifier onlyToken() { require(msg.sender == _token); _; } constructor(address rewardToken) { _token = msg.sender; REWARD = IERC20(rewardToken); } receive() external payable {} function setDistributionCriteria( uint256 _minPeriod, uint256 _minDistribution ) external override onlyToken { minPeriod = _minPeriod; minDistribution = _minDistribution; } function purge(address receiver) external override onlyToken { uint256 balance = REWARD.balanceOf(address(this)); REWARD.transfer(receiver, balance); } function setShare(address shareholder, uint256 amount) external override onlyToken { if (shares[shareholder].amount > 0) { distributeDividend(shareholder); } if (amount > 0 && shares[shareholder].amount == 0) { addShareholder(shareholder); } else if (amount == 0 && shares[shareholder].amount > 0) { removeShareholder(shareholder); } totalShares = (totalShares - (shares[shareholder].amount)) + amount; shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends( shares[shareholder].amount ); } function deposit(uint256 amount) external override onlyToken { totalDividends = totalDividends + amount; dividendsPerShare = dividendsPerShare + ((dividendsPerShareAccuracyFactor * amount) / totalShares); } function process(uint256 gas) external override onlyToken { 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 + (gasLeft - gasleft()); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function distributeDividend(address shareholder) internal { if (shares[shareholder].amount == 0) { return; } uint256 amount = getUnpaidEarnings(shareholder); if (amount > 0) { totalDistributed = totalDistributed + amount; REWARD.transfer(shareholder, amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised + amount; shares[shareholder].totalExcluded = getCumulativeDividends( shares[shareholder].amount ); } } function claimDividend() external { distributeDividend(msg.sender); } 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 - shareholderTotalExcluded; } function getHolderDetails(address holder) public view returns ( uint256 lastClaim, uint256 unpaidEarning, uint256 totalReward, uint256 holderIndex ) { lastClaim = shareholderClaims[holder]; unpaidEarning = getUnpaidEarnings(holder); totalReward = shares[holder].totalRealised; holderIndex = shareholderIndexes[holder]; } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return (share * dividendsPerShare) / (dividendsPerShareAccuracyFactor); } function getLastProcessedIndex() external view returns (uint256) { return currentIndex; } function getNumberOfTokenHolders() external view returns (uint256) { return shareholders.length; } function getShareHoldersList() external view returns (address[] memory) { return shareholders; } function totalDistributedRewards() external view returns (uint256) { return totalDistributed; } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[ shareholders.length - 1 ]; shareholderIndexes[ shareholders[shareholders.length - 1] ] = shareholderIndexes[shareholder]; shareholders.pop(); delete shareholderIndexes[shareholder]; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; 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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); 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 removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"AddAuthorizedWallet","type":"event"},{"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":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minDistribution","type":"uint256"}],"name":"ChangeDistributionCriteria","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"DoContractSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetDoContractSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetIsDividendExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetIsFeeExempt","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":[],"name":"REWARD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"tryAll","type":"bool"}],"name":"___claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"blackListWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeBuyBackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"changeBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"changeBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"changeSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"changeSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"changeSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardAmount","type":"uint256"}],"name":"depositRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"getHolderDetails","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","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":"_wallet","type":"address"}],"name":"isFeeExcluded","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":"","type":"address"}],"name":"isMaxBuyLimitExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxSellLimitExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"isRewardExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSellCoolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"purgeBeforeSwitch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellCoolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAuthorizedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setDoContractSwap","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":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_coolDownTime","type":"uint256"}],"name":"setSellCollDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","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":"totalDistributedRewards","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600180546001600160a01b031990811661dead1790915560028054821690556003805490911673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48179055620000506009600a620007b6565b620000619064174876e800620007ce565b600455600b601055600160115560016012556002601355600f601455600160155560016016556002601755600f60185560016019556001601a556002601b55600f601c556207a120602055600060215560006022556001602360006101000a81548160ff0219169083151502179055506103846024556127106004546001620000eb9190620007ce565b620000f79190620007f0565b6026556027805461ffff191660011790553480156200011557600080fd5b50620001213362000643565b601d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000186573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ac919062000813565b6001600160a01b031663c9c65396601d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000813565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a7919062000813565b601e80546001600160a01b0319166001600160a01b03928316179055306000908152600660209081526040808320601d54851684529091529081902060001990556003549051911690620002fb9062000693565b6001600160a01b039091168152602001604051809103906000f08015801562000328573d6000803e3d6000fd5b50601f80546001600160a01b039283166001600160a01b031991821617909155600d8054821673ba3944d8f9057e4fa32c80039385d21b1a689e59178155600e80548316733193669b46f25a63ed6d32024c1409b12a26563e178155600f80549093167391b1dc8443848314fa9b1f3f16497521a16b59ca178355600760209081527ff406092f32bf869a1d66a4c68992dc734d9f8ef4a1a51ad2b331cb281879f96d805460ff1990811660019081179092553060008181526040808220805485168617905587548a168252808220805485168617905586548a168252808220805485168617905588548a1682528082208054851686179055600886527fc159e6bb79f514482ebdb5587f70c94e0ecf953ff6f230fca1b979b7f678d3288054851686179055601e80548b16835281832080548616871790558383528183208054861687179055600280548c168452828420805487168817905586548c16845282842080548716881790558a548c168452828420805487168817905588548c168452828420805487168817905589548c1684528284208054871688179055600c88527fd782961308313fbc8881a3a64bd6972be468edbb0cd29929b8eb2bbe56340352805487168817905590548b168352818320805486168717905592825280822080548516861790559154891681528181208054841685179055835489168152818120805484168517905596548816875280872080548316841790559354871686528386208054821683179055935490951684528184208054841686179055734958122d53756655616262168867b4aab7496ba88085527f48449c58c9d3b09953f275237df8e06c83e680bc469a3eda424c8e95c08f8e6b80548516871790557f5e19a205444aa46ea06831ef8ffed3b0d740a934610d2b945b456983e0441f35805490941690951790925560045460059092527fea25dddb4b131eb3012aac2a7a0b12d0edad43a38c83f7646ed1d3b1acf965ac829055518392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200063491815260200190565b60405180910390a3506200083e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610eff80620039d383390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006f8578160001904821115620006dc57620006dc620006a1565b80851615620006ea57918102915b93841c9390800290620006bc565b509250929050565b6000826200071157506001620007b0565b816200072057506000620007b0565b8160018114620007395760028114620007445762000764565b6001915050620007b0565b60ff841115620007585762000758620006a1565b50506001821b620007b0565b5060208310610133831016604e8410600b841016171562000789575081810a620007b0565b620007958383620006b7565b8060001904821115620007ac57620007ac620006a1565b0290505b92915050565b6000620007c760ff84168362000700565b9392505050565b6000816000190483118215151615620007eb57620007eb620006a1565b500290565b6000826200080e57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200082657600080fd5b81516001600160a01b0381168114620007c757600080fd5b613185806200084e6000396000f3fe6080604052600436106104555760003560e01c80638b4242671161023f578063ce31a06b11610139578063eaaa848b116100b6578063f708a64f1161007a578063f708a64f14610d6c578063f887ea4014610d8c578063fdb78c0e14610dac578063fe575a8714610dc6578063fe9fbb8014610df657600080fd5b8063eaaa848b14610cf4578063f0327afc14610d0a578063f11a24d314610d20578063f2fde38b14610d36578063f637434214610d5657600080fd5b8063dd62ed3e116100fd578063dd62ed3e14610c43578063e04192ce14610c89578063e53c30b014610ca9578063e7841ec014610cbf578063e94668dc14610cd457600080fd5b8063ce31a06b14610bb9578063ce54149414610bce578063d47b654d14610bee578063d559230614610c0e578063d695bb2714610c2e57600080fd5b8063a7418106116101c7578063bb85c6d11161018b578063bb85c6d114610b06578063bca238aa14610b26578063c1987bac14610b5f578063cab34c0814610b79578063cd7b33ab14610b9957600080fd5b8063a741810614610a71578063a7cfaa5214610a91578063a87df83214610ab1578063a8aa1b3114610ac6578063a9059cbb14610ae657600080fd5b80638da5cb5b1161020e5780638da5cb5b146109cf57806392136913146109ed57806395d89b4114610a035780639d1944f514610a31578063a3d14e7214610a5157600080fd5b80638b4242671461095a5780638bdf67f2146109705780638c52c6c8146109905780638d38a127146109b057600080fd5b80632d48e896116103505780635fe4bea8116102d8578063715018a61161029c578063715018a6146108e457806375f0a874146108f95780637bce5a04146109195780637c9e770e1461092f5780638a8c523c1461094557600080fd5b80635fe4bea81461084d578063652e2f0414610862578063658d4b7f146108785780636aa5b37f1461089857806370a08231146108ae57600080fd5b8063399bec451161031f578063399bec451461077d5780633f4218e0146107ad5780634355855a146107dd57806351c7d0471461080d578063571ac8b01461082d57600080fd5b80632d48e8961461070b578063313ce5671461072b5780633683685a146107475780633705b3921461076757600080fd5b806318160ddd116103de5780631fe70a98116103a25780631fe70a981461067f57806323b872dd14610695578063276a0630146106b55780632c1f5216146106cb5780632c256f7d146106eb57600080fd5b806318160ddd146105c35780631a221dbb146105d85780631cd348c0146105ee5780631de5a11f146106265780631f0c57fc1461065f57600080fd5b8063095ea7b311610425578063095ea7b31461051657806309bbedde146105365780630a05cd011461054b5780630dd871571461058b5780630eda7275146105a157600080fd5b8062afb325146104615780630445b6671461048a57806306fdde03146104a0578063072bc7db146104d657600080fd5b3661045c57005b600080fd5b34801561046d57600080fd5b5061047760185481565b6040519081526020015b60405180910390f35b34801561049657600080fd5b5061047760265481565b3480156104ac57600080fd5b5060408051808201909152600481526322a0a92760e11b60208201525b6040516104819190612c07565b3480156104e257600080fd5b506105066104f1366004612c71565b600a6020526000908152604090205460ff1681565b6040519015158152602001610481565b34801561052257600080fd5b50610506610531366004612c8e565b610e26565b34801561054257600080fd5b50610477610e93565b34801561055757600080fd5b5061056b610566366004612c71565b610f06565b604080519485526020850193909352918301526060820152608001610481565b34801561059757600080fd5b5061047760255481565b3480156105ad57600080fd5b506105c16105bc366004612cba565b610f8a565b005b3480156105cf57600080fd5b50600454610477565b3480156105e457600080fd5b5061047760165481565b3480156105fa57600080fd5b50600e5461060e906001600160a01b031681565b6040516001600160a01b039091168152602001610481565b34801561063257600080fd5b50610506610641366004612c71565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561066b57600080fd5b50600f5461060e906001600160a01b031681565b34801561068b57600080fd5b5061047760125481565b3480156106a157600080fd5b506105066106b0366004612cd3565b610fdf565b3480156106c157600080fd5b5061047760195481565b3480156106d757600080fd5b50601f5461060e906001600160a01b031681565b3480156106f757600080fd5b506105c1610706366004612d14565b6110e0565b34801561071757600080fd5b506105c1610726366004612d40565b611147565b34801561073757600080fd5b5060405160098152602001610481565b34801561075357600080fd5b506105c1610762366004612d70565b6111f3565b34801561077357600080fd5b5061047760145481565b34801561078957600080fd5b50610506610798366004612c71565b600b6020526000908152604090205460ff1681565b3480156107b957600080fd5b506105066107c8366004612c71565b60076020526000908152604090205460ff1681565b3480156107e957600080fd5b506105066107f8366004612c71565b60086020526000908152604090205460ff1681565b34801561081957600080fd5b506105c1610828366004612da9565b611226565b34801561083957600080fd5b50610506610848366004612c71565b611245565b34801561085957600080fd5b506105c1611253565b34801561086e57600080fd5b5061047760215481565b34801561088457600080fd5b506105c1610893366004612d70565b6112ba565b3480156108a457600080fd5b5061047760225481565b3480156108ba57600080fd5b506104776108c9366004612c71565b6001600160a01b031660009081526005602052604090205490565b3480156108f057600080fd5b506105c161131e565b34801561090557600080fd5b50600d5461060e906001600160a01b031681565b34801561092557600080fd5b5061047760135481565b34801561093b57600080fd5b50610477601b5481565b34801561095157600080fd5b506105c1611332565b34801561096657600080fd5b5061047760105481565b34801561097c57600080fd5b506105c161098b366004612cba565b61134b565b34801561099c57600080fd5b506105c16109ab366004612d70565b611430565b3480156109bc57600080fd5b5060275461050690610100900460ff1681565b3480156109db57600080fd5b506000546001600160a01b031661060e565b3480156109f957600080fd5b5061047760175481565b348015610a0f57600080fd5b506040805180820190915260058152641222a0a92760d91b60208201526104c9565b348015610a3d57600080fd5b506105c1610a4c366004612cba565b611463565b348015610a5d57600080fd5b506105c1610a6c366004612d14565b61147f565b348015610a7d57600080fd5b506105c1610a8c366004612c71565b6114e1565b348015610a9d57600080fd5b506105c1610aac366004612dc7565b61150b565b348015610abd57600080fd5b506104776115b1565b348015610ad257600080fd5b50601e5461060e906001600160a01b031681565b348015610af257600080fd5b50610506610b01366004612c8e565b6115fb565b348015610b1257600080fd5b506105c1610b21366004612c71565b611608565b348015610b3257600080fd5b50610506610b41366004612c71565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610b6b57600080fd5b506023546105069060ff1681565b348015610b8557600080fd5b5060035461060e906001600160a01b031681565b348015610ba557600080fd5b506105c1610bb4366004612d14565b611632565b348015610bc557600080fd5b506105c1611694565b348015610bda57600080fd5b506105c1610be9366004612dc7565b611717565b348015610bfa57600080fd5b506105c1610c09366004612d70565b611766565b348015610c1a57600080fd5b506105c1610c29366004612d70565b611799565b348015610c3a57600080fd5b506105c16117cc565b348015610c4f57600080fd5b50610477610c5e366004612de4565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c9557600080fd5b506105c1610ca4366004612c71565b611836565b348015610cb557600080fd5b50610477601c5481565b348015610ccb57600080fd5b50610477611860565b348015610ce057600080fd5b506105c1610cef366004612cba565b6118aa565b348015610d0057600080fd5b50610477601a5481565b348015610d1657600080fd5b5061047760245481565b348015610d2c57600080fd5b5061047760115481565b348015610d4257600080fd5b506105c1610d51366004612c71565b6118f6565b348015610d6257600080fd5b5061047760155481565b348015610d7857600080fd5b506105c1610d87366004612d70565b61196c565b348015610d9857600080fd5b50601d5461060e906001600160a01b031681565b348015610db857600080fd5b506027546105069060ff1681565b348015610dd257600080fd5b50610506610de1366004612c71565b60096020526000908152604090205460ff1681565b348015610e0257600080fd5b50610506610e11366004612c71565b600c6020526000908152604090205460ff1681565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e819086815260200190565b60405180910390a35060015b92915050565b601f54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f019190612e12565b905090565b601f54604051630a05cd0160e01b81526001600160a01b0383811660048301526000928392839283921690630a05cd0190602401608060405180830381865afa158015610f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7b9190612e2b565b93509350935093509193509193565b610f92611b51565b8015610fda57610fa46009600a612f5b565b610fb2906305f5e100612f6a565b811015610fda5760405162461bcd60e51b8152600401610fd190612f89565b60405180910390fd5b602155565b6001600160a01b0383166000908152600660209081526040808320338452909152812054600019146110cb576001600160a01b03841660009081526006602090815260408083203384529091529020548211156110775760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610fd1565b6001600160a01b03841660009081526006602090815260408083203384529091529020546110a6908390612fcc565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b6110d6848484611bab565b90505b9392505050565b6110e8611b51565b6019839055601a829055601b81905560105481908390611109908690612fe3565b6111139190612fe3565b61111d9190612fe3565b601c819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b505050565b61114f611b51565b601f546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b15801561119c57600080fd5b505af11580156111b0573d6000803e3d6000fd5b505060408051858152602081018590527ff422aed0b19de56e7aa427c6fd0d5706c88ab222f9058aaa4ffaa0e279b46fc693500190505b60405180910390a15050565b6111fb611b51565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b61122e611b51565b6023805460ff191692151592909217909155602455565b6000610e8d82600019610e26565b61125b611b51565b601f5460405163a6871bc360e01b81523360048201526001600160a01b039091169063a6871bc390602401600060405180830381600087803b1580156112a057600080fd5b505af11580156112b4573d6000803e3d6000fd5b50505050565b6112c2611b51565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f1b92447bfc74f86a82293c184341926a5888220bc498dde33efabf7c3d796d6991016111e7565b611326611b51565b61133060006120d2565b565b61133a611b51565b6027805461ff001916610100179055565b611353611b51565b600354601f546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018490529116906323b872dd906064016020604051808303816000875af11580156113ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d2919061303e565b50601f5460405163b6b55f2560e01b8152600481018390526001600160a01b039091169063b6b55f25906024015b600060405180830381600087803b15801561141a57600080fd5b505af192505050801561142b575060015b505b50565b611438611b51565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61146b611b51565b620b71b0811061147a57600080fd5b602055565b611487611b51565b601583905560168290556017819055601054819083906114a8908690612fe3565b6114b29190612fe3565b6114bc9190612fe3565b6018819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b6114e9611b51565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b601f60009054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b50505050801561142d57601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916114009160040190815260200190565b601f546040805163543efc1960e11b815290516000926001600160a01b03169163a87df8329160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b60006110d9338484611bab565b611610611b51565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b61163a611b51565b6011839055601282905560138190556010548190839061165b908690612fe3565b6116659190612fe3565b61166f9190612fe3565b6014819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b61169c611b51565b47806116ea5760405162461bcd60e51b815260206004820152601960248201527f4e6f20656e6f7567682045544820746f207472616e73666572000000000000006044820152606401610fd1565b604051339082156108fc029083906000818181858888f1935050505015801561142b573d6000803e3d6000fd5b61171f611b51565b6027805460ff19168215159081179091556040519081527f0d537fcb73bb9654441eb9bd03c28d4b833e5a2da1f53bf422424cb01bc80fc79060200160405180910390a150565b61176e611b51565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6117a1611b51565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916118049160040190815260200190565b600060405180830381600087803b15801561181e57600080fd5b505af192505050801561182f575060015b1561133057565b61183e611b51565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b601f546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b6118b2611b51565b80156118f1576118c46009600a612f5b565b6118d2906305f5e100612f6a565b8110156118f15760405162461bcd60e51b8152600401610fd190612f89565b602255565b6118fe611b51565b6001600160a01b0381166119635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fd1565b61142d816120d2565b611974611b51565b6001600160a01b038216301480159061199b5750601e546001600160a01b03838116911614155b611a025760405162461bcd60e51b815260206004820152603260248201527f63616e206e6f7420616464207061697220616e6420746f6b656e20616464726560448201527139b99030b99039b430b932903437b63232b960711b6064820152608401610fd1565b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611a9a57601f54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401600060405180830381600087803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b50505050611b11565b601f546001600160a01b0383811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611af857600080fd5b505af1158015611b0c573d6000803e3d6000fd5b505050505b604080516001600160a01b038416815282151560208201527fad3666dd545175260bd4a82a50e0b189b968d227adfefd0df46a3e2fa2d5eafe91016111e7565b6000546001600160a01b031633146113305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fd1565b6001600160a01b03831660009081526009602052604081205460ff16158015611bed57506001600160a01b03831660009081526009602052604090205460ff16155b611c2d5760405162461bcd60e51b8152602060048201526011602482015270426c61636b6c697374656420757365727360781b6044820152606401610fd1565b602754610100900460ff16611c97576001600160a01b0384166000908152600c602052604090205460ff16611c975760405162461bcd60e51b815260206004820152601060248201526f151c98591a5b99c8191a5cd8589b195960821b6044820152606401610fd1565b60275462010000900460ff1615611cba57611cb3848484612122565b90506110d9565b611cc261223b565b15611ccf57611ccf6122ab565b601e546001600160a01b038581169116148015611d0557506001600160a01b0383166000908152600a602052604090205460ff16155b8015611d12575060225415155b15611d6257602254821115611d625760405162461bcd60e51b815260206004820152601660248201527513585e08189d5e481b1a5b5a5d08195e18d95959195960521b6044820152606401610fd1565b601e546001600160a01b038481169116148015611d9857506001600160a01b0384166000908152600b602052604090205460ff16155b8015611da5575060215415155b15611dfc57602154821115611dfc5760405162461bcd60e51b815260206004820152601760248201527f4d61782073656c6c206c696d69742065786365656465640000000000000000006044820152606401610fd1565b6001600160a01b038416600090815260056020526040902054821115611e5b5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610fd1565b6001600160a01b038416600090815260056020526040902054611e7f908390612fcc565b6001600160a01b038516600090815260056020526040812091909155611ea58585612591565b611eaf5782611eba565b611eba8585856125e5565b6001600160a01b038516600090815260056020526040902054909150611ee1908290612fe3565b6001600160a01b0380861660009081526005602090815260408083209490945591881681526008909152205460ff16611f8557601f546001600160a01b0386811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611f7257600080fd5b505af1925050508015611f83575060015b505b6001600160a01b03841660009081526008602052604090205460ff1661201657601f546001600160a01b0385811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561200357600080fd5b505af1925050508015612014575060015b505b601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c4799161204e9160040190815260200190565b600060405180830381600087803b15801561206857600080fd5b505af1925050508015612079575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120bf91815260200190565b60405180910390a3506001949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600560205260408120548211156121815760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610fd1565b6001600160a01b0384166000908152600560205260409020546121a5908390612fcc565b6001600160a01b0380861660009081526005602052604080822093909355908516815220546121d5908390612fe3565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122299086815260200190565b60405180910390a35060019392505050565b601e546000906001600160a01b03163314801590612262575060275462010000900460ff16155b8015612270575060275460ff165b801561228b5750426024546025546122889190612fe3565b11155b8015610f0157505060265430600090815260056020526040902054101590565b6027805462ff000019166201000017905530600090815260056020526040812054601c546019549192916122df9084612f6a565b6122e9919061305b565b90506000601c54601054846122fe9190612f6a565b612308919061305b565b90506000601b54601a5461231c9190612fe3565b905060008261232b8587612fcc565b6123359190612fcc565b90508215612497576003546123549084906001600160a01b03166126c5565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561239d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c19190612e12565b600354601f5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044016020604051808303816000875af1158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c919061303e565b50601f5460405163b6b55f2560e01b8152600481018390526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b15801561248357600080fd5b505af1925050508015612494575060015b50505b6000811180156124a75750600082115b1561256b576124b581612856565b601b54479060009084906124c99084612f6a565b6124d3919061305b565b905060006124e18284612fcc565b9050811561252557600d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612523573d6000803e3d6000fd5b505b801561256757600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612565573d6000803e3d6000fd5b505b5050505b831561257a5761257a846129b0565b50504260255550506027805462ff00001916905550565b6001600160a01b03821660009081526007602052604081205460ff16806125d057506001600160a01b03821660009081526007602052604090205460ff165b156125dd57506000610e8d565b506001610e8d565b601e5460009081906001600160a01b0390811690851603612621576064601854846126109190612f6a565b61261a919061305b565b905061263e565b6064601454846126319190612f6a565b61263b919061305b565b90505b30600090815260056020526040902054612659908290612fe3565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126aa9085815260200190565b60405180910390a36126bc8184612fcc565b95945050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106126fc576126fc61307d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127799190613093565b8160018151811061278c5761278c61307d565b60200260200101906001600160a01b031690816001600160a01b03168152505081816002815181106127c0576127c061307d565b6001600160a01b039283166020918202929092010152601d546127e69130911685612a2f565b601d54604051635c11d79560e01b81526001600160a01b0390911690635c11d7959061281f9086906000908690309042906004016130b0565b600060405180830381600087803b15801561283957600080fd5b505af115801561284d573d6000803e3d6000fd5b50505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061288b5761288b61307d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129089190613093565b8160018151811061291b5761291b61307d565b6001600160a01b039283166020918202929092010152601d546129419130911684612a2f565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061297a9085906000908690309042906004016130b0565b600060405180830381600087803b15801561299457600080fd5b505af11580156129a8573d6000803e3d6000fd5b505050505050565b60006129bd60028361305b565b905060006129cb8284612fcc565b9050476129d783612856565b60006129e38247612fcc565b90506129ef8382612b53565b60408051828152602081018590527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a15050505050565b6001600160a01b038316612a915760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610fd1565b6001600160a01b038216612af25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610fd1565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601d54612b6b9030906001600160a01b031684612a2f565b601d54600f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612bdb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c009190613121565b5050505050565b600060208083528351808285015260005b81811015612c3457858101830151858201604001528201612c18565b81811115612c46576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461142d57600080fd5b600060208284031215612c8357600080fd5b81356110d981612c5c565b60008060408385031215612ca157600080fd5b8235612cac81612c5c565b946020939093013593505050565b600060208284031215612ccc57600080fd5b5035919050565b600080600060608486031215612ce857600080fd5b8335612cf381612c5c565b92506020840135612d0381612c5c565b929592945050506040919091013590565b600080600060608486031215612d2957600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612d5357600080fd5b50508035926020909101359150565b801515811461142d57600080fd5b60008060408385031215612d8357600080fd5b8235612d8e81612c5c565b91506020830135612d9e81612d62565b809150509250929050565b60008060408385031215612dbc57600080fd5b8235612cac81612d62565b600060208284031215612dd957600080fd5b81356110d981612d62565b60008060408385031215612df757600080fd5b8235612e0281612c5c565b91506020830135612d9e81612c5c565b600060208284031215612e2457600080fd5b5051919050565b60008060008060808587031215612e4157600080fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612eb2578160001904821115612e9857612e98612e61565b80851615612ea557918102915b93841c9390800290612e7c565b509250929050565b600082612ec957506001610e8d565b81612ed657506000610e8d565b8160018114612eec5760028114612ef657612f12565b6001915050610e8d565b60ff841115612f0757612f07612e61565b50506001821b610e8d565b5060208310610133831016604e8410600b8410161715612f35575081810a610e8d565b612f3f8383612e77565b8060001904821115612f5357612f53612e61565b029392505050565b60006110d960ff841683612eba565b6000816000190483118215151615612f8457612f84612e61565b500290565b60208082526023908201527f4c696d69742063616e206e6f74206c657373207468616e20323530206d696c6c60408201526234b7b760e91b606082015260800190565b600082821015612fde57612fde612e61565b500390565b60008219821115612ff657612ff6612e61565b500190565b60208082526023908201527f546f74616c20666565732063616e206e6f742067726561746572207468616e2060408201526231352560e81b606082015260800190565b60006020828403121561305057600080fd5b81516110d981612d62565b60008261307857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156130a557600080fd5b81516110d981612c5c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131005784516001600160a01b0316835293830193918301916001016130db565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561313657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204866cdb0e99d0605bb6cd17a353331ec683149142a565ee50b51fb3de1b838f664736f6c634300080e003360806040526ec097ce7bc90715b34b9f1000000000600a55603c600b556103e8600c5534801561002e57600080fd5b50604051610eff380380610eff83398101604081905261004d91610080565b60008054336001600160a01b031991821617909155600180549091166001600160a01b03929092169190911790556100b0565b60006020828403121561009257600080fd5b81516001600160a01b03811681146100a957600080fd5b9392505050565b610e40806100bf6000396000f3fe6080604052600436106101395760003560e01c8063a87df832116100ab578063e7841ec01161006f578063e7841ec01461037f578063ecd0c0c314610394578063efca2eed146103b4578063f0fc6bca146103ca578063ffb2c479146103df578063ffd49c84146103ff57600080fd5b8063a87df832146102a5578063b6b55f25146102ba578063cab34c08146102da578063ce7c2ac214610312578063e2d2e2191461036957600080fd5b80632d48e896116100fd5780632d48e896146102015780633a98ef39146102215780634fab0ae81461023757806360379e131461024d578063997664d71461026f578063a6871bc31461028557600080fd5b806309bbedde146101455780630a05cd011461016957806311ce023d146101a957806314b6ca96146101bf57806328fd3198146101e157600080fd5b3661014057005b600080fd5b34801561015157600080fd5b506002545b6040519081526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004610c30565b610415565b604080519485526020850193909352918301526060820152608001610160565b3480156101b557600080fd5b50610156600a5481565b3480156101cb57600080fd5b506101df6101da366004610c52565b61046e565b005b3480156101ed57600080fd5b506101566101fc366004610c30565b6105e6565b34801561020d57600080fd5b506101df61021c366004610c7c565b610671565b34801561022d57600080fd5b5061015660065481565b34801561024357600080fd5b50610156600c5481565b34801561025957600080fd5b50610262610693565b6040516101609190610c9e565b34801561027b57600080fd5b5061015660075481565b34801561029157600080fd5b506101df6102a0366004610c30565b6106f5565b3480156102b157600080fd5b50600854610156565b3480156102c657600080fd5b506101df6102d5366004610ceb565b6107f7565b3480156102e657600080fd5b506001546102fa906001600160a01b031681565b6040516001600160a01b039091168152602001610160565b34801561031e57600080fd5b5061034e61032d366004610c30565b60056020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610160565b34801561037557600080fd5b5061015660095481565b34801561038b57600080fd5b50600d54610156565b3480156103a057600080fd5b506000546102fa906001600160a01b031681565b3480156103c057600080fd5b5061015660085481565b3480156103d657600080fd5b506101df61084d565b3480156103eb57600080fd5b506101df6103fa366004610ceb565b610858565b34801561040b57600080fd5b50610156600b5481565b6001600160a01b03811660009081526004602052604081205490808061043a856105e6565b6001600160a01b03909516600090815260056020908152604080832060020154600390925290912054949690949350915050565b6000546001600160a01b0316331461048557600080fd5b6001600160a01b038216600090815260056020526040902054156104ac576104ac8261095c565b6000811180156104d257506001600160a01b038216600090815260056020526040902054155b1561053857600280546001600160a01b0384166000818152600360205260408120839055600183018455929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b031916909117905561056b565b8015801561055d57506001600160a01b03821660009081526005602052604090205415155b1561056b5761056b82610a7c565b6001600160a01b038216600090815260056020526040902054600654829161059291610d1a565b61059c9190610d31565b6006556001600160a01b03821660009081526005602052604090208190556105c381610bac565b6001600160a01b0390921660009081526005602052604090206001019190915550565b6001600160a01b038116600090815260056020526040812054810361060d57506000919050565b6001600160a01b03821660009081526005602052604081205461062f90610bac565b6001600160a01b03841660009081526005602052604090206001015490915080821161065f575060009392505050565b6106698183610d1a565b949350505050565b6000546001600160a01b0316331461068857600080fd5b600b91909155600c55565b606060028054806020026020016040519081016040528092919081815260200182805480156106eb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106cd575b5050505050905090565b6000546001600160a01b0316331461070c57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107799190610d49565b60015460405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905292935091169063a9059cbb906044016020604051808303816000875af11580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f29190610d62565b505050565b6000546001600160a01b0316331461080e57600080fd5b8060075461081c9190610d31565b600755600654600a54610830908390610d84565b61083a9190610da3565b6009546108479190610d31565b60095550565b6108563361095c565b565b6000546001600160a01b0316331461086f57600080fd5b600254600081900361087f575050565b6000805a905060005b848310801561089657508381105b156109555783600d54106108aa576000600d555b6108dc6002600d54815481106108c2576108c2610dc5565b6000918252602090912001546001600160a01b0316610bcf565b15610913576109136002600d54815481106108f9576108f9610dc5565b6000918252602090912001546001600160a01b031661095c565b5a61091e9083610d1a565b6109289084610d31565b92505a600d8054919350600061093d83610ddb565b9190505550808061094d90610ddb565b915050610888565b5050505050565b6001600160a01b038116600090815260056020526040812054900361097e5750565b6000610989826105e6565b90508015610a78578060085461099f9190610d31565b60085560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190610d62565b506001600160a01b03821660009081526004602090815260408083204290556005909152902060020154610a4e908290610d31565b6001600160a01b03831660009081526005602052604090206002810191909155546105c390610bac565b5050565b60028054610a8c90600190610d1a565b81548110610a9c57610a9c610dc5565b60009182526020808320909101546001600160a01b0384811684526003909252604090922054600280549290931692918110610ada57610ada610dc5565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260039182905260408120546002805491939291610b2690600190610d1a565b81548110610b3657610b36610dc5565b60009182526020808320909101546001600160a01b031683528201929092526040019020556002805480610b6c57610b6c610df4565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0392909216815260039091526040812055565b6000600a5460095483610bbf9190610d84565b610bc99190610da3565b92915050565b600b546001600160a01b03821660009081526004602052604081205490914291610bf99190610d31565b108015610bc95750600c54610c0d836105e6565b1192915050565b80356001600160a01b0381168114610c2b57600080fd5b919050565b600060208284031215610c4257600080fd5b610c4b82610c14565b9392505050565b60008060408385031215610c6557600080fd5b610c6e83610c14565b946020939093013593505050565b60008060408385031215610c8f57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015610cdf5783516001600160a01b031683529284019291840191600101610cba565b50909695505050505050565b600060208284031215610cfd57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610d2c57610d2c610d04565b500390565b60008219821115610d4457610d44610d04565b500190565b600060208284031215610d5b57600080fd5b5051919050565b600060208284031215610d7457600080fd5b81518015158114610c4b57600080fd5b6000816000190483118215151615610d9e57610d9e610d04565b500290565b600082610dc057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201610ded57610ded610d04565b5060010190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220b1277c073340b4469d17c445913f407ae9ff28e04aece609c70fb325ca5fb32364736f6c634300080e0033
Deployed Bytecode
0x6080604052600436106104555760003560e01c80638b4242671161023f578063ce31a06b11610139578063eaaa848b116100b6578063f708a64f1161007a578063f708a64f14610d6c578063f887ea4014610d8c578063fdb78c0e14610dac578063fe575a8714610dc6578063fe9fbb8014610df657600080fd5b8063eaaa848b14610cf4578063f0327afc14610d0a578063f11a24d314610d20578063f2fde38b14610d36578063f637434214610d5657600080fd5b8063dd62ed3e116100fd578063dd62ed3e14610c43578063e04192ce14610c89578063e53c30b014610ca9578063e7841ec014610cbf578063e94668dc14610cd457600080fd5b8063ce31a06b14610bb9578063ce54149414610bce578063d47b654d14610bee578063d559230614610c0e578063d695bb2714610c2e57600080fd5b8063a7418106116101c7578063bb85c6d11161018b578063bb85c6d114610b06578063bca238aa14610b26578063c1987bac14610b5f578063cab34c0814610b79578063cd7b33ab14610b9957600080fd5b8063a741810614610a71578063a7cfaa5214610a91578063a87df83214610ab1578063a8aa1b3114610ac6578063a9059cbb14610ae657600080fd5b80638da5cb5b1161020e5780638da5cb5b146109cf57806392136913146109ed57806395d89b4114610a035780639d1944f514610a31578063a3d14e7214610a5157600080fd5b80638b4242671461095a5780638bdf67f2146109705780638c52c6c8146109905780638d38a127146109b057600080fd5b80632d48e896116103505780635fe4bea8116102d8578063715018a61161029c578063715018a6146108e457806375f0a874146108f95780637bce5a04146109195780637c9e770e1461092f5780638a8c523c1461094557600080fd5b80635fe4bea81461084d578063652e2f0414610862578063658d4b7f146108785780636aa5b37f1461089857806370a08231146108ae57600080fd5b8063399bec451161031f578063399bec451461077d5780633f4218e0146107ad5780634355855a146107dd57806351c7d0471461080d578063571ac8b01461082d57600080fd5b80632d48e8961461070b578063313ce5671461072b5780633683685a146107475780633705b3921461076757600080fd5b806318160ddd116103de5780631fe70a98116103a25780631fe70a981461067f57806323b872dd14610695578063276a0630146106b55780632c1f5216146106cb5780632c256f7d146106eb57600080fd5b806318160ddd146105c35780631a221dbb146105d85780631cd348c0146105ee5780631de5a11f146106265780631f0c57fc1461065f57600080fd5b8063095ea7b311610425578063095ea7b31461051657806309bbedde146105365780630a05cd011461054b5780630dd871571461058b5780630eda7275146105a157600080fd5b8062afb325146104615780630445b6671461048a57806306fdde03146104a0578063072bc7db146104d657600080fd5b3661045c57005b600080fd5b34801561046d57600080fd5b5061047760185481565b6040519081526020015b60405180910390f35b34801561049657600080fd5b5061047760265481565b3480156104ac57600080fd5b5060408051808201909152600481526322a0a92760e11b60208201525b6040516104819190612c07565b3480156104e257600080fd5b506105066104f1366004612c71565b600a6020526000908152604090205460ff1681565b6040519015158152602001610481565b34801561052257600080fd5b50610506610531366004612c8e565b610e26565b34801561054257600080fd5b50610477610e93565b34801561055757600080fd5b5061056b610566366004612c71565b610f06565b604080519485526020850193909352918301526060820152608001610481565b34801561059757600080fd5b5061047760255481565b3480156105ad57600080fd5b506105c16105bc366004612cba565b610f8a565b005b3480156105cf57600080fd5b50600454610477565b3480156105e457600080fd5b5061047760165481565b3480156105fa57600080fd5b50600e5461060e906001600160a01b031681565b6040516001600160a01b039091168152602001610481565b34801561063257600080fd5b50610506610641366004612c71565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561066b57600080fd5b50600f5461060e906001600160a01b031681565b34801561068b57600080fd5b5061047760125481565b3480156106a157600080fd5b506105066106b0366004612cd3565b610fdf565b3480156106c157600080fd5b5061047760195481565b3480156106d757600080fd5b50601f5461060e906001600160a01b031681565b3480156106f757600080fd5b506105c1610706366004612d14565b6110e0565b34801561071757600080fd5b506105c1610726366004612d40565b611147565b34801561073757600080fd5b5060405160098152602001610481565b34801561075357600080fd5b506105c1610762366004612d70565b6111f3565b34801561077357600080fd5b5061047760145481565b34801561078957600080fd5b50610506610798366004612c71565b600b6020526000908152604090205460ff1681565b3480156107b957600080fd5b506105066107c8366004612c71565b60076020526000908152604090205460ff1681565b3480156107e957600080fd5b506105066107f8366004612c71565b60086020526000908152604090205460ff1681565b34801561081957600080fd5b506105c1610828366004612da9565b611226565b34801561083957600080fd5b50610506610848366004612c71565b611245565b34801561085957600080fd5b506105c1611253565b34801561086e57600080fd5b5061047760215481565b34801561088457600080fd5b506105c1610893366004612d70565b6112ba565b3480156108a457600080fd5b5061047760225481565b3480156108ba57600080fd5b506104776108c9366004612c71565b6001600160a01b031660009081526005602052604090205490565b3480156108f057600080fd5b506105c161131e565b34801561090557600080fd5b50600d5461060e906001600160a01b031681565b34801561092557600080fd5b5061047760135481565b34801561093b57600080fd5b50610477601b5481565b34801561095157600080fd5b506105c1611332565b34801561096657600080fd5b5061047760105481565b34801561097c57600080fd5b506105c161098b366004612cba565b61134b565b34801561099c57600080fd5b506105c16109ab366004612d70565b611430565b3480156109bc57600080fd5b5060275461050690610100900460ff1681565b3480156109db57600080fd5b506000546001600160a01b031661060e565b3480156109f957600080fd5b5061047760175481565b348015610a0f57600080fd5b506040805180820190915260058152641222a0a92760d91b60208201526104c9565b348015610a3d57600080fd5b506105c1610a4c366004612cba565b611463565b348015610a5d57600080fd5b506105c1610a6c366004612d14565b61147f565b348015610a7d57600080fd5b506105c1610a8c366004612c71565b6114e1565b348015610a9d57600080fd5b506105c1610aac366004612dc7565b61150b565b348015610abd57600080fd5b506104776115b1565b348015610ad257600080fd5b50601e5461060e906001600160a01b031681565b348015610af257600080fd5b50610506610b01366004612c8e565b6115fb565b348015610b1257600080fd5b506105c1610b21366004612c71565b611608565b348015610b3257600080fd5b50610506610b41366004612c71565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610b6b57600080fd5b506023546105069060ff1681565b348015610b8557600080fd5b5060035461060e906001600160a01b031681565b348015610ba557600080fd5b506105c1610bb4366004612d14565b611632565b348015610bc557600080fd5b506105c1611694565b348015610bda57600080fd5b506105c1610be9366004612dc7565b611717565b348015610bfa57600080fd5b506105c1610c09366004612d70565b611766565b348015610c1a57600080fd5b506105c1610c29366004612d70565b611799565b348015610c3a57600080fd5b506105c16117cc565b348015610c4f57600080fd5b50610477610c5e366004612de4565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c9557600080fd5b506105c1610ca4366004612c71565b611836565b348015610cb557600080fd5b50610477601c5481565b348015610ccb57600080fd5b50610477611860565b348015610ce057600080fd5b506105c1610cef366004612cba565b6118aa565b348015610d0057600080fd5b50610477601a5481565b348015610d1657600080fd5b5061047760245481565b348015610d2c57600080fd5b5061047760115481565b348015610d4257600080fd5b506105c1610d51366004612c71565b6118f6565b348015610d6257600080fd5b5061047760155481565b348015610d7857600080fd5b506105c1610d87366004612d70565b61196c565b348015610d9857600080fd5b50601d5461060e906001600160a01b031681565b348015610db857600080fd5b506027546105069060ff1681565b348015610dd257600080fd5b50610506610de1366004612c71565b60096020526000908152604090205460ff1681565b348015610e0257600080fd5b50610506610e11366004612c71565b600c6020526000908152604090205460ff1681565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e819086815260200190565b60405180910390a35060015b92915050565b601f54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f019190612e12565b905090565b601f54604051630a05cd0160e01b81526001600160a01b0383811660048301526000928392839283921690630a05cd0190602401608060405180830381865afa158015610f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7b9190612e2b565b93509350935093509193509193565b610f92611b51565b8015610fda57610fa46009600a612f5b565b610fb2906305f5e100612f6a565b811015610fda5760405162461bcd60e51b8152600401610fd190612f89565b60405180910390fd5b602155565b6001600160a01b0383166000908152600660209081526040808320338452909152812054600019146110cb576001600160a01b03841660009081526006602090815260408083203384529091529020548211156110775760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610fd1565b6001600160a01b03841660009081526006602090815260408083203384529091529020546110a6908390612fcc565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b6110d6848484611bab565b90505b9392505050565b6110e8611b51565b6019839055601a829055601b81905560105481908390611109908690612fe3565b6111139190612fe3565b61111d9190612fe3565b601c819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b505050565b61114f611b51565b601f546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b15801561119c57600080fd5b505af11580156111b0573d6000803e3d6000fd5b505060408051858152602081018590527ff422aed0b19de56e7aa427c6fd0d5706c88ab222f9058aaa4ffaa0e279b46fc693500190505b60405180910390a15050565b6111fb611b51565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b61122e611b51565b6023805460ff191692151592909217909155602455565b6000610e8d82600019610e26565b61125b611b51565b601f5460405163a6871bc360e01b81523360048201526001600160a01b039091169063a6871bc390602401600060405180830381600087803b1580156112a057600080fd5b505af11580156112b4573d6000803e3d6000fd5b50505050565b6112c2611b51565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f1b92447bfc74f86a82293c184341926a5888220bc498dde33efabf7c3d796d6991016111e7565b611326611b51565b61133060006120d2565b565b61133a611b51565b6027805461ff001916610100179055565b611353611b51565b600354601f546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018490529116906323b872dd906064016020604051808303816000875af11580156113ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d2919061303e565b50601f5460405163b6b55f2560e01b8152600481018390526001600160a01b039091169063b6b55f25906024015b600060405180830381600087803b15801561141a57600080fd5b505af192505050801561142b575060015b505b50565b611438611b51565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61146b611b51565b620b71b0811061147a57600080fd5b602055565b611487611b51565b601583905560168290556017819055601054819083906114a8908690612fe3565b6114b29190612fe3565b6114bc9190612fe3565b6018819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b6114e9611b51565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b601f60009054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b50505050801561142d57601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916114009160040190815260200190565b601f546040805163543efc1960e11b815290516000926001600160a01b03169163a87df8329160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b60006110d9338484611bab565b611610611b51565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b61163a611b51565b6011839055601282905560138190556010548190839061165b908690612fe3565b6116659190612fe3565b61166f9190612fe3565b6014819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b61169c611b51565b47806116ea5760405162461bcd60e51b815260206004820152601960248201527f4e6f20656e6f7567682045544820746f207472616e73666572000000000000006044820152606401610fd1565b604051339082156108fc029083906000818181858888f1935050505015801561142b573d6000803e3d6000fd5b61171f611b51565b6027805460ff19168215159081179091556040519081527f0d537fcb73bb9654441eb9bd03c28d4b833e5a2da1f53bf422424cb01bc80fc79060200160405180910390a150565b61176e611b51565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6117a1611b51565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916118049160040190815260200190565b600060405180830381600087803b15801561181e57600080fd5b505af192505050801561182f575060015b1561133057565b61183e611b51565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b601f546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b6118b2611b51565b80156118f1576118c46009600a612f5b565b6118d2906305f5e100612f6a565b8110156118f15760405162461bcd60e51b8152600401610fd190612f89565b602255565b6118fe611b51565b6001600160a01b0381166119635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fd1565b61142d816120d2565b611974611b51565b6001600160a01b038216301480159061199b5750601e546001600160a01b03838116911614155b611a025760405162461bcd60e51b815260206004820152603260248201527f63616e206e6f7420616464207061697220616e6420746f6b656e20616464726560448201527139b99030b99039b430b932903437b63232b960711b6064820152608401610fd1565b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611a9a57601f54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401600060405180830381600087803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b50505050611b11565b601f546001600160a01b0383811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611af857600080fd5b505af1158015611b0c573d6000803e3d6000fd5b505050505b604080516001600160a01b038416815282151560208201527fad3666dd545175260bd4a82a50e0b189b968d227adfefd0df46a3e2fa2d5eafe91016111e7565b6000546001600160a01b031633146113305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fd1565b6001600160a01b03831660009081526009602052604081205460ff16158015611bed57506001600160a01b03831660009081526009602052604090205460ff16155b611c2d5760405162461bcd60e51b8152602060048201526011602482015270426c61636b6c697374656420757365727360781b6044820152606401610fd1565b602754610100900460ff16611c97576001600160a01b0384166000908152600c602052604090205460ff16611c975760405162461bcd60e51b815260206004820152601060248201526f151c98591a5b99c8191a5cd8589b195960821b6044820152606401610fd1565b60275462010000900460ff1615611cba57611cb3848484612122565b90506110d9565b611cc261223b565b15611ccf57611ccf6122ab565b601e546001600160a01b038581169116148015611d0557506001600160a01b0383166000908152600a602052604090205460ff16155b8015611d12575060225415155b15611d6257602254821115611d625760405162461bcd60e51b815260206004820152601660248201527513585e08189d5e481b1a5b5a5d08195e18d95959195960521b6044820152606401610fd1565b601e546001600160a01b038481169116148015611d9857506001600160a01b0384166000908152600b602052604090205460ff16155b8015611da5575060215415155b15611dfc57602154821115611dfc5760405162461bcd60e51b815260206004820152601760248201527f4d61782073656c6c206c696d69742065786365656465640000000000000000006044820152606401610fd1565b6001600160a01b038416600090815260056020526040902054821115611e5b5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610fd1565b6001600160a01b038416600090815260056020526040902054611e7f908390612fcc565b6001600160a01b038516600090815260056020526040812091909155611ea58585612591565b611eaf5782611eba565b611eba8585856125e5565b6001600160a01b038516600090815260056020526040902054909150611ee1908290612fe3565b6001600160a01b0380861660009081526005602090815260408083209490945591881681526008909152205460ff16611f8557601f546001600160a01b0386811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611f7257600080fd5b505af1925050508015611f83575060015b505b6001600160a01b03841660009081526008602052604090205460ff1661201657601f546001600160a01b0385811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561200357600080fd5b505af1925050508015612014575060015b505b601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c4799161204e9160040190815260200190565b600060405180830381600087803b15801561206857600080fd5b505af1925050508015612079575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120bf91815260200190565b60405180910390a3506001949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600560205260408120548211156121815760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610fd1565b6001600160a01b0384166000908152600560205260409020546121a5908390612fcc565b6001600160a01b0380861660009081526005602052604080822093909355908516815220546121d5908390612fe3565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122299086815260200190565b60405180910390a35060019392505050565b601e546000906001600160a01b03163314801590612262575060275462010000900460ff16155b8015612270575060275460ff165b801561228b5750426024546025546122889190612fe3565b11155b8015610f0157505060265430600090815260056020526040902054101590565b6027805462ff000019166201000017905530600090815260056020526040812054601c546019549192916122df9084612f6a565b6122e9919061305b565b90506000601c54601054846122fe9190612f6a565b612308919061305b565b90506000601b54601a5461231c9190612fe3565b905060008261232b8587612fcc565b6123359190612fcc565b90508215612497576003546123549084906001600160a01b03166126c5565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561239d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c19190612e12565b600354601f5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044016020604051808303816000875af1158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c919061303e565b50601f5460405163b6b55f2560e01b8152600481018390526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b15801561248357600080fd5b505af1925050508015612494575060015b50505b6000811180156124a75750600082115b1561256b576124b581612856565b601b54479060009084906124c99084612f6a565b6124d3919061305b565b905060006124e18284612fcc565b9050811561252557600d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612523573d6000803e3d6000fd5b505b801561256757600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612565573d6000803e3d6000fd5b505b5050505b831561257a5761257a846129b0565b50504260255550506027805462ff00001916905550565b6001600160a01b03821660009081526007602052604081205460ff16806125d057506001600160a01b03821660009081526007602052604090205460ff165b156125dd57506000610e8d565b506001610e8d565b601e5460009081906001600160a01b0390811690851603612621576064601854846126109190612f6a565b61261a919061305b565b905061263e565b6064601454846126319190612f6a565b61263b919061305b565b90505b30600090815260056020526040902054612659908290612fe3565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126aa9085815260200190565b60405180910390a36126bc8184612fcc565b95945050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106126fc576126fc61307d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127799190613093565b8160018151811061278c5761278c61307d565b60200260200101906001600160a01b031690816001600160a01b03168152505081816002815181106127c0576127c061307d565b6001600160a01b039283166020918202929092010152601d546127e69130911685612a2f565b601d54604051635c11d79560e01b81526001600160a01b0390911690635c11d7959061281f9086906000908690309042906004016130b0565b600060405180830381600087803b15801561283957600080fd5b505af115801561284d573d6000803e3d6000fd5b50505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061288b5761288b61307d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129089190613093565b8160018151811061291b5761291b61307d565b6001600160a01b039283166020918202929092010152601d546129419130911684612a2f565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061297a9085906000908690309042906004016130b0565b600060405180830381600087803b15801561299457600080fd5b505af11580156129a8573d6000803e3d6000fd5b505050505050565b60006129bd60028361305b565b905060006129cb8284612fcc565b9050476129d783612856565b60006129e38247612fcc565b90506129ef8382612b53565b60408051828152602081018590527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a15050505050565b6001600160a01b038316612a915760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610fd1565b6001600160a01b038216612af25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610fd1565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601d54612b6b9030906001600160a01b031684612a2f565b601d54600f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612bdb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c009190613121565b5050505050565b600060208083528351808285015260005b81811015612c3457858101830151858201604001528201612c18565b81811115612c46576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461142d57600080fd5b600060208284031215612c8357600080fd5b81356110d981612c5c565b60008060408385031215612ca157600080fd5b8235612cac81612c5c565b946020939093013593505050565b600060208284031215612ccc57600080fd5b5035919050565b600080600060608486031215612ce857600080fd5b8335612cf381612c5c565b92506020840135612d0381612c5c565b929592945050506040919091013590565b600080600060608486031215612d2957600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612d5357600080fd5b50508035926020909101359150565b801515811461142d57600080fd5b60008060408385031215612d8357600080fd5b8235612d8e81612c5c565b91506020830135612d9e81612d62565b809150509250929050565b60008060408385031215612dbc57600080fd5b8235612cac81612d62565b600060208284031215612dd957600080fd5b81356110d981612d62565b60008060408385031215612df757600080fd5b8235612e0281612c5c565b91506020830135612d9e81612c5c565b600060208284031215612e2457600080fd5b5051919050565b60008060008060808587031215612e4157600080fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612eb2578160001904821115612e9857612e98612e61565b80851615612ea557918102915b93841c9390800290612e7c565b509250929050565b600082612ec957506001610e8d565b81612ed657506000610e8d565b8160018114612eec5760028114612ef657612f12565b6001915050610e8d565b60ff841115612f0757612f07612e61565b50506001821b610e8d565b5060208310610133831016604e8410600b8410161715612f35575081810a610e8d565b612f3f8383612e77565b8060001904821115612f5357612f53612e61565b029392505050565b60006110d960ff841683612eba565b6000816000190483118215151615612f8457612f84612e61565b500290565b60208082526023908201527f4c696d69742063616e206e6f74206c657373207468616e20323530206d696c6c60408201526234b7b760e91b606082015260800190565b600082821015612fde57612fde612e61565b500390565b60008219821115612ff657612ff6612e61565b500190565b60208082526023908201527f546f74616c20666565732063616e206e6f742067726561746572207468616e2060408201526231352560e81b606082015260800190565b60006020828403121561305057600080fd5b81516110d981612d62565b60008261307857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156130a557600080fd5b81516110d981612c5c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131005784516001600160a01b0316835293830193918301916001016130db565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561313657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204866cdb0e99d0605bb6cd17a353331ec683149142a565ee50b51fb3de1b838f664736f6c634300080e0033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.