ERC-20
Overview
Max Total Supply
986,179,328.033888056262771448 CREEM
Holders
385
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,352.945042 CREEMValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CREEM
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 1 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./DividendPayingToken.sol"; import "./SafeMath.sol"; import "./IterableMapping.sol"; import "./Ownable.sol"; import "./IUniswapV2Pair.sol"; import "./IUniswapV2Factory.sol"; import "./IUniswapV2Router.sol"; import "./CREEMDividendTracker.sol"; contract CREEM is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private swapping; CREEMDividendTracker public dividendTracker; address public peechToken; address public liquidityWallet; address public devWallet; address public rewardsWallet; address public immutable deadAddress = address(0x000000000000000000000000000000000000dEaD); uint256 public constant maxSellTransactionAmount = 10**7 * (10**18); // 10M uint256 public constant maxBuyTransactionAmount = 2 * 10**6 * (10**18); // 2M uint256 public constant swapTokensAtAmount = 2 * 10**6 * (10**18); //2M uint256 public constant devFee = 2; uint256 public constant rewardsFee = 4; uint256 public constant buybackFee = 4; uint256 public constant liquidityFee = 2; uint256 public constant burnFee = 2; uint256 public totalFees; // it can only be activated, once activated, it can't be disabled bool public isTradingEnabled; // it can only be disactivated once after the presale; bool public buyLimit = true; // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; // addresses that can make transfers before presale is over mapping (address => bool) private canTransferBeforeTradingIsEnabled; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateDividendTracker(address indexed newAddress, address indexed oldAddress); event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeFromDividends(address indexed account); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event ExcludeMultipleAccountsFromDividends(address[7] accounts); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet); event DevWalletUpdated(address indexed newDevWallet, address indexed oldDevWallet); event RewardsWalletUpdated(address indexed newRewardsWallet, address indexed oldRewardsWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SendDividends( uint256 tokensSwapped, uint256 amount ); event burnTokens( uint256 tokensSwapped ); event DepositEthSendDividends( uint256 amount ); event ProcessedDividendTracker( uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor ); constructor(address _peechToken, address _liquidityWallet, address _devWallet, address _rewardsWallet) ERC20("CREEM", "CREEM") { peechToken = _peechToken; liquidityWallet = _liquidityWallet; devWallet = _devWallet; rewardsWallet = _rewardsWallet; totalFees = rewardsFee.add(liquidityFee).add(devFee).add(burnFee).add(buybackFee); dividendTracker = new CREEMDividendTracker(); _mint(owner(), 10**9 * 10**uint(decimals())); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; dividendTracker.setPair(_uniswapV2Pair); _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from receiving dividends excludeFromDividends(address(dividendTracker)); excludeFromDividends(address(this)); excludeFromDividends(owner()); excludeFromDividends(address(_uniswapV2Router)); excludeFromDividends(devWallet); excludeFromDividends(rewardsWallet); excludeFromDividends(liquidityWallet); // // exclude from paying fees or having max transaction amount excludeFromFees(liquidityWallet, true); excludeFromFees(devWallet, true); excludeFromFees(rewardsWallet, true); excludeFromFees(address(this), true); excludeFromFees(owner(), true); // // enable owner and fixed-sale wallet to send tokens before presales are over canTransferBeforeTradingIsEnabled[owner()] = true; canTransferBeforeTradingIsEnabled[0xF99baEc9220b02C6E34845259bA558E2f55576C5] = true; } receive() external payable { } function updateDividendTracker(address newAddress) public onlyOwner { require(newAddress != address(dividendTracker), "CREEM: The dividend tracker already has that address"); CREEMDividendTracker newDividendTracker = CREEMDividendTracker(payable(newAddress)); require(newDividendTracker.owner() == address(this), "CREEM: The new dividend tracker must be owned by the CREEM token contract"); newDividendTracker.excludeFromDividends(address(newDividendTracker)); newDividendTracker.excludeFromDividends(address(this)); newDividendTracker.excludeFromDividends(owner()); newDividendTracker.excludeFromDividends(address(uniswapV2Router)); newDividendTracker.excludeFromDividends(devWallet); newDividendTracker.excludeFromDividends(rewardsWallet); newDividendTracker.excludeFromDividends(liquidityWallet); emit UpdateDividendTracker(newAddress, address(dividendTracker)); dividendTracker = newDividendTracker; } function updateUniswapV2Router(address newAddress) public onlyOwner { require(newAddress != address(uniswapV2Router), "CREEM: The router already has that address"); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "CREEM: Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function excludeFromDividends(address account) public onlyOwner { require(!dividendTracker.isExcludedFromDividends(account), "CREEM: Account is already excluded from dividends"); dividendTracker.excludeFromDividends(account); emit ExcludeFromDividends(account); } function setPeech(address _newAddress) external onlyOwner { require(peechToken != _newAddress,"CREEM: peechToken has similar address!"); peechToken = _newAddress; } function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner { for(uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "CREEM: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "CREEM: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; if(value) { dividendTracker.excludeFromDividends(pair); } emit SetAutomatedMarketMakerPair(pair, value); } function updateLiquidityWallet(address newLiquidityWallet) public onlyOwner { require(newLiquidityWallet != liquidityWallet, "CREEM: The liquidity wallet is already this address"); excludeFromFees(newLiquidityWallet, true); emit LiquidityWalletUpdated(newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } function updateDevWallet(address newDevWallet) public onlyOwner { require(newDevWallet != devWallet, "CREEM: The development wallet is already this address"); excludeFromFees(newDevWallet, true); emit DevWalletUpdated(newDevWallet, devWallet); devWallet = newDevWallet; } function updateRewardsWallet(address newRewardsWallet) public onlyOwner { require(newRewardsWallet != rewardsWallet, "CREEM: The development wallet is already this address"); excludeFromFees(newRewardsWallet, true); emit RewardsWalletUpdated(newRewardsWallet, rewardsWallet); rewardsWallet = newRewardsWallet; } function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function isExcludedFromDividends(address account) public view returns(bool) { return dividendTracker.isExcludedFromDividends(account); } function withdrawnDividendOf(address account) public view returns(uint256) { return dividendTracker.withdrawnDividendOf(account); } function dividendTokenBalanceOf(address account) public view returns (uint256) { return dividendTracker.balanceOf(account); } function getAccountDividendsInfo(address account) external view returns ( address, int256, uint8, uint256) { return dividendTracker.getAccount(account); } function getAccountDividendsInfoAtIndex(uint256 index) external view returns ( address, int256, uint8, uint256) { return dividendTracker.getAccountAtIndex(index); } function minimumValueTier(uint8 _tier) public view returns(uint){ return dividendTracker.minimumValueTier(_tier); } function minimumTier(uint8 _tier) public view returns(uint){ return dividendTracker.minimumTier(_tier); } function minimumRewards(uint8 _tier) public view returns(uint){ return dividendTracker.minimumRewards(_tier); } function getNumberOfDividendTokenHolders() external view returns(uint256) { return dividendTracker.getNumberOfTokenHolders(); } function activateTrading() external onlyOwner { require(!isTradingEnabled,"CREEM: trading has already been activated"); isTradingEnabled = true; } function disableBuyLimit() external onlyOwner{ require(buyLimit,"CREEM: buy limit already disactivated"); buyLimit = false; } function shuffle() external onlyOwner{ dividendTracker.shuffle(); } // make sure that values are in wei function setTierRewards(uint tier1, uint tier2, uint tier3, uint tier4) external onlyOwner{ dividendTracker.setTierRewards(tier1,tier2,tier3,tier4); } // make sure that values are in wei function setTierThreshold(uint tier1, uint tier2, uint tier3, uint tier4) external onlyOwner{ dividendTracker.setTierThreshold(tier1,tier2,tier3,tier4); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(!isTradingEnabled) { require(canTransferBeforeTradingIsEnabled[from], "CREEM: This account cannot send tokens until trading is enabled"); } if(amount == 0) { super._transfer(from, to, 0); return; } if( !swapping && isTradingEnabled && automatedMarketMakerPairs[to] && // sells only by detecting transfer to automated market maker pair from != address(uniswapV2Router) && //router -> pair is removing liquidity which shouldn't have max !_isExcludedFromFees[to] //no max for those excluded from fees ) { require(amount <= maxSellTransactionAmount, "CREEM: Sell transfer amount exceeds the maxSellTransactionAmount."); } if( buyLimit && !swapping && isTradingEnabled && automatedMarketMakerPairs[from] && // buy only by detecting transfer from automated market maker pair to != address(uniswapV2Router) && //router -> pair is adding liquidity which shouldn't have max !_isExcludedFromFees[to] //no max for those excluded from fees ) { require(amount <= maxBuyTransactionAmount, "CREEM: Buy transfer amount exceeds the maxBuyTransactionAmount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( isTradingEnabled && canSwap && !swapping && !automatedMarketMakerPairs[from] && from != liquidityWallet && to != liquidityWallet ) { swapping = true; uint256 swapLiquidityTokens = contractTokenBalance.mul(liquidityFee).div(totalFees); swapAndLiquify(swapLiquidityTokens); uint256 swapDevTokens = contractTokenBalance.mul(devFee).div(totalFees); swapAndSend(devWallet,swapDevTokens); uint256 swapBuybackTokens = contractTokenBalance.mul(buybackFee).div(totalFees); swapAndBurn(swapBuybackTokens); uint256 swapBurnTokens = contractTokenBalance.mul(burnFee).div(totalFees); _burn(address(this),swapBurnTokens); uint256 swapDividendTokens = balanceOf(address(this)); swapAndSend(rewardsWallet,swapDividendTokens); swapping = false; } bool takeFee = isTradingEnabled && !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } if(takeFee && (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to])) { uint256 fees = amount.mul(totalFees).div(100); amount = amount.sub(fees); super._transfer(from, address(this), fees); } super._transfer(from, to, amount); try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} } function swapAndLiquify(uint256 tokens) private { // split the contract balance into halves uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); 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.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, 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] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function swapTokensAndBurn(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](3); path[0] = address(this); path[1] = uniswapV2Router.WETH(); path[2] = peechToken; _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, deadAddress, block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, liquidityWallet, block.timestamp ); } function swapAndSend(address wallet, uint256 tokens) private { swapTokensForEth(tokens); uint256 dividends = address(this).balance; (bool success,) = wallet.call{value: dividends}(""); if(success) { emit SendDividends(tokens, dividends); } } function swapAndBurn(uint256 tokens) private { swapTokensAndBurn(tokens); emit burnTokens(tokens); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./DividendPayingToken.sol"; import "./Ownable.sol"; import "./SafeMathUint8.sol"; import "./IterableMapping.sol"; import "./IUniswapV2Pair.sol"; import "./IERC20Metadata.sol"; contract CREEMDividendTracker is DividendPayingToken, Ownable { using SafeMath for uint256; using SafeMathUint8 for uint8; using IterableMapping for IterableMapping.Map; event ExcludeFromDividends(address indexed account); uint[] public minTiers = [100,500,1000,2000]; uint[] public tiersRewards = [0.1 ether, 0.5 ether, 1 ether, 2 ether]; IterableMapping.Map private tokenHoldersMap; // to be edited IUniswapV2Pair USDTPair = IUniswapV2Pair(0x0d4a11d5EEaaC28EC3F61d100daF4d40471f1852); address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; IUniswapV2Pair public CreemPair; mapping (address => bool) public excludedFromDividends; constructor() DividendPayingToken("CREEM Dividends", "CREEM_D") { } function setPair(address _pair) external onlyOwner { CreemPair = IUniswapV2Pair(_pair); } // make sure that values are in wei function setTierRewards(uint tier1, uint tier2, uint tier3, uint tier4) external onlyOwner{ require(tier1>0 && tier2>tier1 && tier3>tier2 && tier4>tier3, "CREEM_D: tiers are not in order"); tiersRewards[0] = tier1; tiersRewards[1] = tier2; tiersRewards[2] = tier3; tiersRewards[3] = tier4; } // make sure that values are natural numbers which represent the dollar value needed function setTierThreshold(uint tier1, uint tier2, uint tier3, uint tier4) external onlyOwner{ require(tier1>0 && tier2>tier1 && tier3>tier2 && tier4>tier3, "CREEM_D: tiers are not in order"); minTiers[0] = tier1; minTiers[1] = tier2; minTiers[2] = tier3; minTiers[3] = tier4; } function excludeFromDividends(address account) external onlyOwner { require(!excludedFromDividends[account],"CREEM_D: Address already excluded from dividends"); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); tokenHoldersMap.setTier(account, IterableMapping.Tier.DEFAULT); emit ExcludeFromDividends(account); } function setBalance(address payable account, uint256 newBalance) public onlyOwner { if(excludedFromDividends[account]) return; if(newBalance > minimumForDividends(minTiers[0])) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); if(newBalance > minimumForDividends(minTiers[3])){ tokenHoldersMap.setTier(account,IterableMapping.Tier.TIER4); }else if(newBalance > minimumForDividends(minTiers[2])){ tokenHoldersMap.setTier(account,IterableMapping.Tier.TIER3); }else if(newBalance > minimumForDividends(minTiers[1])){ tokenHoldersMap.setTier(account,IterableMapping.Tier.TIER2); }else{ tokenHoldersMap.setTier(account,IterableMapping.Tier.TIER1); } } else { _setBalance(account, 0); tokenHoldersMap.setTier(account,IterableMapping.Tier.DEFAULT); tokenHoldersMap.remove(account); } } function shuffle() public onlyOwner{ uint len = tokenHoldersMap.keys.length; require(len > 0,"CREEM_D: there must be a minimum of 1 dividneds holders"); uint256 amount = getBalance(); require(amount > 0, "CREEM_D: insufficient balance!"); uint size = sizeCalc(amount,tiersRewards[0]); address[] memory addr = new address[](size); uint i = randomIndex(len); for(uint j = 0;j<size;j++){ if(i==len) i = 0; (address account,,,) = getAccountAtIndex(i); uint reward = getTierReward(account); if(amount > reward){ amount.sub(reward); addr[j] = account; }else{ amount = 0; addr[j] = account; break; } i++; } address[] memory addrs = sort(addr); amount = getBalance(); for(uint j = 0 ; j < addrs.length; j++){ address account = addrs[j]; uint reward = getTierReward(account); if(amount > reward){ amount = amount.sub(reward); processAccount(payable(account),reward); }else{ processAccount(payable(account),amount); break; } } } function processAccount(address payable account,uint amount) internal returns (bool) { uint256 _amount = _withdrawDividendOfUser(account,amount); return _amount > 0; } function getBalance() internal view returns(uint){ return address(this).balance; } function getTierReward(address addr) internal view returns(uint){ return tiersRewards[uint(tokenHoldersMap.getTier(addr)).sub(1)]; } function _transfer(address, address, uint256) internal pure override { require(false, "CREEM_D: No transfers allowed"); } function sort(address[] memory arr) internal view returns(address[] memory addr){ uint size = arr.length; addr = new address[](size); uint i = 0; while(size > i){ uint higher = greatest(arr); addr[i] = arr[higher]; delete arr[higher]; i++; } } function greatest(address[] memory arr) internal view returns(uint){ uint num = 0; for(uint i=1;i<arr.length;i++){ if(balanceOf(arr[i]) > balanceOf(arr[num])){ num = i; } } return num; } function isExcludedFromDividends(address account) public view returns(bool) { return excludedFromDividends[account]; } function getNumberOfTokenHolders() public view returns(uint256) { return tokenHoldersMap.keys.length; } function getAccount(address _account) public view returns ( address account, int256 index, uint8 tier, uint256 totalDividends) { account = _account; index = tokenHoldersMap.getIndexOfKey(account); tier = uint8(tokenHoldersMap.getTier(_account)); totalDividends = withdrawnDividendOf(account); } function getAccountAtIndex(uint256 index) public view returns ( address, int256, uint8, uint256) { if(index >= tokenHoldersMap.size()) return (0x0000000000000000000000000000000000000000, -1, 0, 0); address account = tokenHoldersMap.getKeyAtIndex(index); return getAccount(account); } function getReservesOnOrder(IUniswapV2Pair pairAddress) internal view returns(uint, uint){ address addr1 = pairAddress.token1(); (uint Res0, uint Res1,) = pairAddress.getReserves(); return (addr1 == WETH) ? (Res0,Res1) : (Res1,Res0); } function getTokenPrice(IUniswapV2Pair pairAddress, uint amount, bool isEth) internal view returns(uint){ // isEth check is the amount in is Eth or not (uint Res0, uint Res1) = getReservesOnOrder(pairAddress); return isEth ? ((amount*Res0)/Res1) : ((amount*Res1)/Res0); } function minimumForDividends(uint min) internal view returns(uint){ address token1 = USDTPair.token0(); uint ethAmount = getTokenPrice(USDTPair,min * 10** IERC20Metadata(token1).decimals(),false); return getTokenPrice(CreemPair,ethAmount,true); } function randomIndex(uint len) internal view returns (uint256) { return uint(keccak256(abi.encodePacked(msg.sender, block.difficulty, block.timestamp))) % len; } function minimumValueTier(uint8 _tier) public view returns(uint){ require(_tier >= 1 && _tier <= 4,"CREEM_D: invalid tier"); return minimumForDividends(minTiers[_tier.sub(1)]).mul(80).div(100 * 1 ether); } function minimumTier(uint8 _tier) public view returns(uint){ require(_tier >= 1 && _tier <= 4,"CREEM_D: invalid tier"); return minTiers[_tier-1]; } function minimumRewards(uint8 _tier) public view returns(uint){ require(_tier >= 1 && _tier <= 4,"CREEM_D: invalid tier"); return tiersRewards[_tier-1]; } function sizeCalc(uint256 amount, uint256 parameter) internal pure returns(uint){ if(amount < parameter){ return 1; }else{ uint256 remainder = amount.mod(parameter) == 0 ? 0 : 1; return amount.div(parameter).add(remainder); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC20.sol"; import "./SafeMath.sol"; import "./DividendPayingTokenInterface.sol"; import "./DividendPayingTokenOptionalInterface.sol"; contract DividendPayingToken is ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; mapping(address => uint256) internal withdrawnDividends; uint256 public totalDividendsDistributed; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} /// @dev Distributes dividends whenever ether is paid to this contract. receive() external payable { distributeDividends(); } /// @notice Distributes ether to token holders as dividends. function distributeDividends() public override payable { require(totalSupply() > 0,"dividened totalsupply error"); if (msg.value > 0) { emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add(msg.value); } } /// @notice Withdraws the ether distributed to the sender. /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0. function _withdrawDividendOfUser(address payable user, uint256 amount) internal returns (uint256) { if (amount > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(amount); (bool success,) = user.call{value: amount}(""); if(!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(amount); return 0; } return amount; } return 0; } /// @notice View the amount of dividend in wei that an address has withdrawn. /// @param _owner The address of a token holder. /// @return The amount of dividend in wei that `_owner` has withdrawn. function withdrawnDividendOf(address _owner) public view override returns(uint256) { return withdrawnDividends[_owner]; } function _mint(address account, uint256 value) internal override { super._mint(account, value); } function _burn(address account, uint256 value) internal override { super._burn(account, value); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if(newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if(newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @title Dividend-Paying Token Interface /// @author Roger Wu (https://github.com/roger-wu) /// @dev An interface for a dividend-paying token contract. interface DividendPayingTokenInterface { function distributeDividends() external payable; event DividendsDistributed( address indexed from, uint256 weiAmount ); event DividendWithdrawn( address indexed to, uint256 weiAmount ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @title Dividend-Paying Token Optional Interface /// @author Roger Wu (https://github.com/roger-wu) /// @dev OPTIONAL functions for a dividend-paying token contract. interface DividendPayingTokenOptionalInterface { function withdrawnDividendOf(address _owner) external view returns(uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./Context.sol"; import "./SafeMath.sol"; contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function burn(uint256 amount) external { _burn(msg.sender,amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } 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 _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.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; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; 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); } // pragma solidity >=0.6.2; 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 pragma solidity ^0.8.0; library IterableMapping { // Iterable mapping from address to uint; enum Tier{ DEFAULT,TIER1,TIER2,TIER3,TIER4 } struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; mapping(address => Tier) tier; } function get(Map storage map, address key) public view returns (uint) { return map.values[key]; } function getTier(Map storage map, address key) public view returns (Tier) { return map.tier[key]; } function setTier(Map storage map, address key, Tier val) public { map.tier[key] = val; } function getIndexOfKey(Map storage map, address key) public view returns (int) { if(!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } }
pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT License import "./Context.sol"; contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library SafeMathUint8 { function sub(uint8 a, uint8 b) internal pure returns (uint8) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint8 a, uint8 b, string memory errorMessage) internal pure returns (uint8) { require(b <= a, errorMessage); uint8 c = a - b; return c; } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 1 }, "evmVersion": "istanbul", "libraries": { "/C/Users/Public/CREEM/contracts/IterableMapping.sol": { "IterableMapping": "0x64e324E4e48af3281b961dA1e514eCf196319bb9" } }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_peechToken","type":"address"},{"internalType":"address","name":"_liquidityWallet","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_rewardsWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositEthSendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newDevWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldDevWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[7]","name":"accounts","type":"address[7]"}],"name":"ExcludeMultipleAccountsFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","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":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newRewardsWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldRewardsWallet","type":"address"}],"name":"RewardsWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"burnTokens","type":"event"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract CREEMDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tier","type":"uint8"}],"name":"minimumRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tier","type":"uint8"}],"name":"minimumTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_tier","type":"uint8"}],"name":"minimumValueTier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"peechToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"setPeech","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier1","type":"uint256"},{"internalType":"uint256","name":"tier2","type":"uint256"},{"internalType":"uint256","name":"tier3","type":"uint256"},{"internalType":"uint256","name":"tier4","type":"uint256"}],"name":"setTierRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier1","type":"uint256"},{"internalType":"uint256","name":"tier2","type":"uint256"},{"internalType":"uint256","name":"tier3","type":"uint256"},{"internalType":"uint256","name":"tier4","type":"uint256"}],"name":"setTierThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shuffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRewardsWallet","type":"address"}],"name":"updateRewardsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040526ddead000000000000000000000000608052600e805461ff0019166101001790553480156200003257600080fd5b5060405162007e0c38038062007e0c833981016040819052620000559162000b66565b604080518082018252600580825264435245454d60d81b602080840182815285518087019096529285528401528151919291620000959160039162000a78565b508051620000ab90600490602084019062000a78565b5050506000620000c0620005c660201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600980546001600160a01b03199081166001600160a01b0387811691909117909255600a80548216868416179055600b80548216858416179055600c80549091169183169190911790556200018f60046200017b60028181818582620005ca602090811b62001e7717901c565b620005ca60201b62001e771790919060201c565b600d55604051620001a09062000b07565b604051809103906000f080158015620001bd573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b03929092169190911790556200021c620001ec6200060e565b620001f66200061d565b620002069060ff16600a62000e30565b6200021690633b9aca0062000f18565b62000622565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027157600080fd5b505afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac919062000b49565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f557600080fd5b505afa1580156200030a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000330919062000b49565b6040518363ffffffff1660e01b81526004016200034f92919062000bf8565b602060405180830381600087803b1580156200036a57600080fd5b505af11580156200037f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a5919062000b49565b600680546001600160a01b038086166001600160a01b0319928316179092556007805483851692169190911790556008546040516340c3fa8b60e11b81529293501690638187f51690620003fe90849060040162000be4565b600060405180830381600087803b1580156200041957600080fd5b505af11580156200042e573d6000803e3d6000fd5b50505050620004458160016200070560201b60201c565b6008546200045c906001600160a01b031662000818565b620004673062000818565b6200047b620004756200060e565b62000818565b620004868262000818565b600b546200049d906001600160a01b031662000818565b600c54620004b4906001600160a01b031662000818565b600a54620004cb906001600160a01b031662000818565b600a54620004e4906001600160a01b0316600162000995565b600b54620004fd906001600160a01b0316600162000995565b600c5462000516906001600160a01b0316600162000995565b6200052330600162000995565b62000539620005316200060e565b600162000995565b600160106000620005496200060e565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905573f99baec9220b02c6e34845259ba558e2f55576c59052601090527fa83ec88e855b90efd3d53321424b6a2706f82c599b4d4f5da76727c809cb9ec6805490911660011790555062000f8d945050505050565b3390565b600080620005d9838562000dc8565b905083811015620006075760405162461bcd60e51b8152600401620005fe9062000c6e565b60405180910390fd5b9392505050565b6005546001600160a01b031690565b601290565b6001600160a01b0382166200064b5760405162461bcd60e51b8152600401620005fe9062000d88565b620006596000838362000a73565b6200067581600254620005ca60201b62001e771790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620006a891839062001e77620005ca821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620006f990859062000dbf565b60405180910390a35050565b6001600160a01b03821660009081526011602052604090205460ff1615158115151415620007475760405162461bcd60e51b8152600401620005fe9062000d2b565b6001600160a01b0382166000908152601160205260409020805460ff19168215801591909117909155620007dc5760085460405163031e79db60e41b81526001600160a01b03909116906331e79db090620007a790859060040162000be4565b600060405180830381600087803b158015620007c257600080fd5b505af1158015620007d7573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b62000822620005c6565b6005546001600160a01b03908116911614620008525760405162461bcd60e51b8152600401620005fe9062000ca5565b60085460405163c705c56960e01b81526001600160a01b039091169063c705c569906200088490849060040162000be4565b60206040518083038186803b1580156200089d57600080fd5b505afa158015620008b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008d8919062000bc2565b15620008f85760405162461bcd60e51b8152600401620005fe9062000c1d565b60085460405163031e79db60e41b81526001600160a01b03909116906331e79db0906200092a90849060040162000be4565b600060405180830381600087803b1580156200094557600080fd5b505af11580156200095a573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b6200099f620005c6565b6005546001600160a01b03908116911614620009cf5760405162461bcd60e51b8152600401620005fe9062000ca5565b6001600160a01b0382166000908152600f602052604090205460ff161515811515141562000a115760405162461bcd60e51b8152600401620005fe9062000cda565b6001600160a01b0382166000818152600f602052604090819020805460ff1916841515179055517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79062000a6790849062000c12565b60405180910390a25050565b505050565b82805462000a869062000f3a565b90600052602060002090601f01602090048101928262000aaa576000855562000af5565b82601f1062000ac557805160ff191683800117855562000af5565b8280016001018555821562000af5579182015b8281111562000af557825182559160200191906001019062000ad8565b5062000b0392915062000b15565b5090565b61323f8062004bcd83390190565b5b8082111562000b03576000815560010162000b16565b80516001600160a01b038116811462000b4457600080fd5b919050565b60006020828403121562000b5b578081fd5b620006078262000b2c565b6000806000806080858703121562000b7c578283fd5b62000b878562000b2c565b935062000b976020860162000b2c565b925062000ba76040860162000b2c565b915062000bb76060860162000b2c565b905092959194509250565b60006020828403121562000bd4578081fd5b8151801515811462000607578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479206578636c756460408201527065642066726f6d206469766964656e647360781b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b6020808252603f908201527f435245454d3a204175746f6d61746564206d61726b6574206d616b657220706160408201527f697220697320616c72656164792073657420746f20746861742076616c756500606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6000821982111562000dde5762000dde62000f77565b500190565b80825b600180861162000df7575062000e27565b81870482111562000e0c5762000e0c62000f77565b8086161562000e1a57918102915b9490941c93800262000de6565b94509492505050565b600062000607600019848460008262000e4c5750600162000607565b8162000e5b5750600062000607565b816001811462000e74576002811462000e7f5762000eb3565b600191505062000607565b60ff84111562000e935762000e9362000f77565b6001841b91508482111562000eac5762000eac62000f77565b5062000607565b5060208310610133831016604e8410600b841016171562000eeb575081810a8381111562000ee55762000ee562000f77565b62000607565b62000efa848484600162000de3565b80860482111562000f0f5762000f0f62000f77565b02949350505050565b600081600019048311821515161562000f355762000f3562000f77565b500290565b60028104600182168062000f4f57607f821691505b6020821081141562000f7157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60805160601c613c1a62000fb360003960008181610cd50152612df80152613c1a6000f3fe6080604052600436106102aa5760003560e01c8062b61a57146102b657806302259e9e146102e1578063064a59d01461030357806306fdde0314610325578063095ea7b3146103475780630bd05b691461036757806313114a9d1461037e5780631694505e1461039357806318160ddd146103a85780631816467f146103bd5780631a377e4f146103dd57806323b872dd146103fd5780632520bf041461041d57806327c8f835146104325780632bb14e1d146104475780632c1f52161461045c57806330bb4cff14610471578063313ce5671461048657806331e79db0146104a857806339509351146104c85780633b2d081c1461044757806342966c68146104e857806343658c6c1461050857806349bd5a5e146105285780634fbee1931461053d578063548ba67a1461055d578063589210d91461057d5780635aa821a9146105925780635b35f9c9146105a75780635d54e86a146105bc57806364b0f653146105dc57806365b8dbc0146105f15780636827e764146106115780636843cd841461062657806370a082311461064657806388bdd9be146106665780638da5cb5b146106865780638ea5220f1461069b57806395d89b41146106b057806398118cb4146106115780639a7a23d6146106c5578063a31dc2cd146106e5578063a457c2d714610705578063a9059cbb14610725578063aafd847a14610745578063ad56c13c14610765578063b62496f514610795578063c0246668146107b5578063c492f046146107d5578063c705c569146107f5578063cfc0d02414610815578063d469801614610835578063dd62ed3e1461084a578063df47c9de1461086a578063e2f4560514610592578063e37ba8f91461088a578063f27fd254146108aa578063f2fde38b146108ca578063f4cb7a57146108ea578063fce589d814610611576102b1565b366102b157005b600080fd5b3480156102c257600080fd5b506102cb6108ff565b6040516102d891906130ba565b60405180910390f35b3480156102ed57600080fd5b506102f661090e565b6040516102d8919061395d565b34801561030f57600080fd5b5061031861091d565b6040516102d891906131a4565b34801561033157600080fd5b5061033a610926565b6040516102d891906131af565b34801561035357600080fd5b50610318610362366004612f47565b6109b8565b34801561037357600080fd5b5061037c6109d6565b005b34801561038a57600080fd5b506102f6610a46565b34801561039f57600080fd5b506102cb610a4c565b3480156103b457600080fd5b506102f6610a5b565b3480156103c957600080fd5b5061037c6103d8366004612e22565b610a61565b3480156103e957600080fd5b506102f66103f836600461309b565b610b2c565b34801561040957600080fd5b50610318610418366004612e92565b610bad565b34801561042957600080fd5b5061037c610c34565b34801561043e57600080fd5b506102cb610cd3565b34801561045357600080fd5b506102f6610cf7565b34801561046857600080fd5b506102cb610cfc565b34801561047d57600080fd5b506102f6610d0b565b34801561049257600080fd5b5061049b610d8d565b6040516102d89190613a15565b3480156104b457600080fd5b5061037c6104c3366004612e22565b610d92565b3480156104d457600080fd5b506103186104e3366004612f47565b610efd565b3480156104f457600080fd5b5061037c61050336600461300d565b610f4b565b34801561051457600080fd5b5061037c61052336600461306a565b610f58565b34801561053457600080fd5b506102cb610ffb565b34801561054957600080fd5b50610318610558366004612e22565b61100a565b34801561056957600080fd5b5061037c610578366004612e22565b611028565b34801561058957600080fd5b506103186110ad565b34801561059e57600080fd5b506102f66110bb565b3480156105b357600080fd5b506102cb6110c9565b3480156105c857600080fd5b506102f66105d736600461309b565b6110d8565b3480156105e857600080fd5b506102f6611109565b3480156105fd57600080fd5b5061037c61060c366004612e22565b61114e565b34801561061d57600080fd5b506102f661120e565b34801561063257600080fd5b506102f6610641366004612e22565b611213565b34801561065257600080fd5b506102f6610661366004612e22565b611244565b34801561067257600080fd5b5061037c610681366004612e22565b61125f565b34801561069257600080fd5b506102cb611670565b3480156106a757600080fd5b506102cb61167f565b3480156106bc57600080fd5b5061033a61168e565b3480156106d157600080fd5b5061037c6106e0366004612ed2565b61169d565b3480156106f157600080fd5b506102f661070036600461309b565b61170e565b34801561071157600080fd5b50610318610720366004612f47565b61173f565b34801561073157600080fd5b50610318610740366004612f47565b6117a7565b34801561075157600080fd5b506102f6610760366004612e22565b6117bb565b34801561077157600080fd5b50610785610780366004612e22565b6117ec565b6040516102d894939291906130e7565b3480156107a157600080fd5b506103186107b0366004612e22565b611884565b3480156107c157600080fd5b5061037c6107d0366004612ed2565b611899565b3480156107e157600080fd5b5061037c6107f0366004612f72565b61196d565b34801561080157600080fd5b50610318610810366004612e22565b611a62565b34801561082157600080fd5b5061037c610830366004612e22565b611ae3565b34801561084157600080fd5b506102cb611bae565b34801561085657600080fd5b506102f6610865366004612e5a565b611bbd565b34801561087657600080fd5b5061037c61088536600461306a565b611be8565b34801561089657600080fd5b5061037c6108a5366004612e22565b611c53565b3480156108b657600080fd5b506107856108c536600461300d565b611d1e565b3480156108d657600080fd5b5061037c6108e5366004612e22565b611d57565b3480156108f657600080fd5b5061037c611e0e565b6009546001600160a01b031681565b6a084595161401484a00000081565b600e5460ff1681565b60606003805461093590613a91565b80601f016020809104026020016040519081016040528092919081815260200182805461096190613a91565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611ead565b8484611eb1565b5060015b92915050565b6109de611ead565b6005546001600160a01b03908116911614610a145760405162461bcd60e51b8152600401610a0b90613663565b60405180910390fd5b600e5460ff1615610a375760405162461bcd60e51b8152600401610a0b90613914565b600e805460ff19166001179055565b600d5481565b6006546001600160a01b031681565b60025490565b610a69611ead565b6005546001600160a01b03908116911614610a965760405162461bcd60e51b8152600401610a0b90613663565b600b546001600160a01b0382811691161415610ac45760405162461bcd60e51b8152600401610a0b9061342c565b610acf816001611899565b600b546040516001600160a01b03918216918316907f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87190600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600854604051631a377e4f60e01b81526000916001600160a01b031690631a377e4f90610b5d908590600401613a15565b60206040518083038186803b158015610b7557600080fd5b505afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190613025565b6000610bba848484611f65565b610c2a84610bc6611ead565b610c2585604051806060016040528060288152602001613b78602891396001600160a01b038a16600090815260016020526040812090610c04611ead565b6001600160a01b0316815260208101919091526040016000205491906124c2565b611eb1565b5060019392505050565b610c3c611ead565b6005546001600160a01b03908116911614610c695760405162461bcd60e51b8152600401610a0b90613663565b600860009054906101000a90046001600160a01b03166001600160a01b0316632520bf046040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cb957600080fd5b505af1158015610ccd573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600481565b6008546001600160a01b031681565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015610d5057600080fd5b505afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190613025565b905090565b601290565b610d9a611ead565b6005546001600160a01b03908116911614610dc75760405162461bcd60e51b8152600401610a0b90613663565b60085460405163c705c56960e01b81526001600160a01b039091169063c705c56990610df79084906004016130ba565b60206040518083038186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e479190612ff1565b15610e645760405162461bcd60e51b8152600401610a0b90613245565b60085460405163031e79db60e41b81526001600160a01b03909116906331e79db090610e949084906004016130ba565b600060405180830381600087803b158015610eae57600080fd5b505af1158015610ec2573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b60006109cc610f0a611ead565b84610c258560016000610f1b611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611e77565b610f5533826124fc565b50565b610f60611ead565b6005546001600160a01b03908116911614610f8d5760405162461bcd60e51b8152600401610a0b90613663565b6008546040516310d9631b60e21b81526001600160a01b03909116906343658c6c90610fc39087908790879087906004016139fa565b600060405180830381600087803b158015610fdd57600080fd5b505af1158015610ff1573d6000803e3d6000fd5b5050505050505050565b6007546001600160a01b031681565b6001600160a01b03166000908152600f602052604090205460ff1690565b611030611ead565b6005546001600160a01b0390811691161461105d5760405162461bcd60e51b8152600401610a0b90613663565b6009546001600160a01b038281169116141561108b5760405162461bcd60e51b8152600401610a0b9061353a565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600e54610100900460ff1681565b66d3c21bcecceda160191b81565b600c546001600160a01b031681565b600854604051632eaa743560e11b81526000916001600160a01b031690635d54e86a90610b5d908590600401613a15565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015610d5057600080fd5b611156611ead565b6005546001600160a01b039081169116146111835760405162461bcd60e51b8152600401610a0b90613663565b6006546001600160a01b03828116911614156111b15760405162461bcd60e51b8152600401610a0b906134f0565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600281565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610b5d9085906004016130ba565b6001600160a01b031660009081526020819052604090205490565b611267611ead565b6005546001600160a01b039081169116146112945760405162461bcd60e51b8152600401610a0b90613663565b6008546001600160a01b03828116911614156112c25760405162461bcd60e51b8152600401610a0b9061376f565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561130a57600080fd5b505afa15801561131e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113429190612e3e565b6001600160a01b0316146113685760405162461bcd60e51b8152600401610a0b90613481565b60405163031e79db60e41b81526001600160a01b038216906331e79db0906113949084906004016130ba565b600060405180830381600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505060405163031e79db60e41b81526001600160a01b03841692506331e79db091506113f29030906004016130ba565b600060405180830381600087803b15801561140c57600080fd5b505af1158015611420573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db061143b611670565b6040518263ffffffff1660e01b815260040161145791906130ba565b600060405180830381600087803b15801561147157600080fd5b505af1158015611485573d6000803e3d6000fd5b505060065460405163031e79db60e41b81526001600160a01b0380861694506331e79db093506114b99216906004016130ba565b600060405180830381600087803b1580156114d357600080fd5b505af11580156114e7573d6000803e3d6000fd5b5050600b5460405163031e79db60e41b81526001600160a01b0380861694506331e79db0935061151b9216906004016130ba565b600060405180830381600087803b15801561153557600080fd5b505af1158015611549573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b81526001600160a01b0380861694506331e79db0935061157d9216906004016130ba565b600060405180830381600087803b15801561159757600080fd5b505af11580156115ab573d6000803e3d6000fd5b5050600a5460405163031e79db60e41b81526001600160a01b0380861694506331e79db093506115df9216906004016130ba565b600060405180830381600087803b1580156115f957600080fd5b505af115801561160d573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b6005546001600160a01b031690565b600b546001600160a01b031681565b60606004805461093590613a91565b6116a5611ead565b6005546001600160a01b039081169116146116d25760405162461bcd60e51b8152600401610a0b90613663565b6007546001600160a01b03838116911614156117005760405162461bcd60e51b8152600401610a0b90613385565b61170a82826125cc565b5050565b60085460405163a31dc2cd60e01b81526000916001600160a01b03169063a31dc2cd90610b5d908590600401613a15565b60006109cc61174c611ead565b84610c2585604051806060016040528060258152602001613bc06025913960016000611776611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906124c2565b60006109cc6117b4611ead565b8484611f65565b60085460405163557ec23d60e11b81526000916001600160a01b03169063aafd847a90610b5d9085906004016130ba565b60085460405163fbcbc0f160e01b81526000918291829182916001600160a01b039091169063fbcbc0f1906118259088906004016130ba565b60806040518083038186803b15801561183d57600080fd5b505afa158015611851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118759190612eff565b93509350935093509193509193565b60116020526000908152604090205460ff1681565b6118a1611ead565b6005546001600160a01b039081169116146118ce5760405162461bcd60e51b8152600401610a0b90613663565b6001600160a01b0382166000908152600f602052604090205460ff161515811515141561190d5760405162461bcd60e51b8152600401610a0b906136d9565b6001600160a01b0382166000818152600f602052604090819020805460ff1916841515179055517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7906119619084906131a4565b60405180910390a25050565b611975611ead565b6005546001600160a01b039081169116146119a25760405162461bcd60e51b8152600401610a0b90613663565b60005b82811015611a215781600f60008686858181106119d257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119e79190612e22565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611a1981613acc565b9150506119a5565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611a559392919061314b565b60405180910390a1505050565b60085460405163c705c56960e01b81526000916001600160a01b03169063c705c56990611a939085906004016130ba565b60206040518083038186803b158015611aab57600080fd5b505afa158015611abf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190612ff1565b611aeb611ead565b6005546001600160a01b03908116911614611b185760405162461bcd60e51b8152600401610a0b90613663565b600c546001600160a01b0382811691161415611b465760405162461bcd60e51b8152600401610a0b9061342c565b611b51816001611899565b600c546040516001600160a01b03918216918316907f85710b1053f40e0d492d81001a623cd191d251fed32881e7bb80fc1b66a6e46390600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611bf0611ead565b6005546001600160a01b03908116911614611c1d5760405162461bcd60e51b8152600401610a0b90613663565b600854604051636fa3e4ef60e11b81526001600160a01b039091169063df47c9de90610fc39087908790879087906004016139fa565b611c5b611ead565b6005546001600160a01b03908116911614611c885760405162461bcd60e51b8152600401610a0b90613663565b600a546001600160a01b0382811691161415611cb65760405162461bcd60e51b8152600401610a0b906138c1565b611cc1816001611899565b600a546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600854604051635183d6fd60e01b81526000918291829182916001600160a01b0390911690635183d6fd9061182590889060040161395d565b611d5f611ead565b6005546001600160a01b03908116911614611d8c5760405162461bcd60e51b8152600401610a0b90613663565b6001600160a01b038116611db25760405162461bcd60e51b8152600401610a0b906132fd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b611e16611ead565b6005546001600160a01b03908116911614611e435760405162461bcd60e51b8152600401610a0b90613663565b600e54610100900460ff16611e6a5760405162461bcd60e51b8152600401610a0b90613580565b600e805461ff0019169055565b600080611e848385613a23565b905083811015611ea65760405162461bcd60e51b8152600401610a0b906133f7565b9392505050565b3390565b6001600160a01b038316611ed75760405162461bcd60e51b8152600401610a0b90613820565b6001600160a01b038216611efd5760405162461bcd60e51b8152600401610a0b90613343565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611f5890859061395d565b60405180910390a3505050565b6001600160a01b038316611f8b5760405162461bcd60e51b8152600401610a0b9061372a565b6001600160a01b038216611fb15760405162461bcd60e51b8152600401610a0b90613202565b600e5460ff16611ff3576001600160a01b03831660009081526010602052604090205460ff16611ff35760405162461bcd60e51b8152600401610a0b906135c5565b8061200957612004838360006126d7565b6124bd565b600754600160a01b900460ff161580156120255750600e5460ff165b801561204957506001600160a01b03821660009081526011602052604090205460ff165b801561206357506006546001600160a01b03848116911614155b801561208857506001600160a01b0382166000908152600f602052604090205460ff16155b156120b8576a084595161401484a0000008111156120b85760405162461bcd60e51b8152600401610a0b90613296565b600e54610100900460ff1680156120d95750600754600160a01b900460ff16155b80156120e75750600e5460ff165b801561210b57506001600160a01b03831660009081526011602052604090205460ff165b801561212557506006546001600160a01b03838116911614155b801561214a57506001600160a01b0382166000908152600f602052604090205460ff16155b156121795766d3c21bcecceda160191b8111156121795760405162461bcd60e51b8152600401610a0b906137c3565b600061218430611244565b600e5490915066d3c21bcecceda160191b8210159060ff1680156121a55750805b80156121bb5750600754600160a01b900460ff16155b80156121e057506001600160a01b03851660009081526011602052604090205460ff16155b80156121fa5750600a546001600160a01b03868116911614155b80156122145750600a546001600160a01b03858116911614155b156122f8576007805460ff60a01b1916600160a01b179055600d54600090612247906122418560026127da565b9061281f565b90506122528161285e565b600d54600090612267906122418660026127da565b600b54909150612280906001600160a01b0316826128df565b600d54600090612295906122418760046127da565b90506122a081612991565b600d546000906122b5906122418860026127da565b90506122c130826124fc565b60006122cc30611244565b600c549091506122e5906001600160a01b0316826128df565b50506007805460ff60a01b191690555050505b600e5460009060ff1680156123175750600754600160a01b900460ff16155b6001600160a01b0387166000908152600f602052604090205490915060ff168061235957506001600160a01b0385166000908152600f602052604090205460ff165b15612362575060005b8080156123a957506001600160a01b03861660009081526011602052604090205460ff16806123a957506001600160a01b03851660009081526011602052604090205460ff165b156123e55760006123ca6064612241600d54886127da90919063ffffffff16565b90506123d685826129d4565b94506123e38730836126d7565b505b6123f08686866126d7565b6008546001600160a01b031663e30443bc8761240b81611244565b6040518363ffffffff1660e01b81526004016124289291906130ce565b600060405180830381600087803b15801561244257600080fd5b505af1925050508015612453575060015b506008546001600160a01b031663e30443bc8661246f81611244565b6040518363ffffffff1660e01b815260040161248c9291906130ce565b600060405180830381600087803b1580156124a657600080fd5b505af19250505080156124b7575060015b505b5050505b505050565b600081848411156124e65760405162461bcd60e51b8152600401610a0b91906131af565b5060006124f38486613a7a565b95945050505050565b6001600160a01b0382166125225760405162461bcd60e51b8152600401610a0b90613698565b61252e826000836124bd565b61256b81604051806060016040528060228152602001613b30602291396001600160a01b03851660009081526020819052604090205491906124c2565b6001600160a01b03831660009081526020819052604090205560025461259190826129d4565b6002556040516000906001600160a01b03841690600080516020613ba0833981519152906125c090859061395d565b60405180910390a35050565b6001600160a01b03821660009081526011602052604090205460ff161515811515141561260b5760405162461bcd60e51b8152600401610a0b90613864565b6001600160a01b0382166000908152601160205260409020805460ff1916821580159190911790915561269b5760085460405163031e79db60e41b81526001600160a01b03909116906331e79db0906126689085906004016130ba565b600060405180830381600087803b15801561268257600080fd5b505af1158015612696573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166126fd5760405162461bcd60e51b8152600401610a0b9061372a565b6001600160a01b0382166127235760405162461bcd60e51b8152600401610a0b90613202565b61272e8383836124bd565b61276b81604051806060016040528060268152602001613b52602691396001600160a01b03861660009081526020819052604090205491906124c2565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461279a9082611e77565b6001600160a01b038084166000818152602081905260409081902093909355915190851690600080516020613ba083398151915290611f5890859061395d565b6000826127e9575060006109d0565b60006127f58385613a5b565b9050826128028583613a3b565b14611ea65760405162461bcd60e51b8152600401610a0b90613622565b6000611ea683836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250612a16565b600061286b82600261281f565b9050600061287983836129d4565b90504761288583612a44565b600061289147836129d4565b905061289d8382612bc1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516128d0939291906139e4565b60405180910390a15050505050565b6128e881612a44565b60004790506000836001600160a01b031682604051612906906130b7565b60006040518083038185875af1925050503d8060008114612943576040519150601f19603f3d011682016040523d82523d6000602084013e612948565b606091505b505090508015610ccd577f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc383836040516129839291906139d6565b60405180910390a150505050565b61299a81612c72565b7f6d1b229dafadcd720d5a60a73409508ab97a09a020cffe742460e5a58f790b61816040516129c9919061395d565b60405180910390a150565b6000611ea683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124c2565b60008183612a375760405162461bcd60e51b8152600401610a0b91906131af565b5060006124f38486613a3b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a8757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612adb57600080fd5b505afa158015612aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b139190612e3e565b81600181518110612b3457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612b5a9130911684611eb1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b93908590600090869030904290600401613966565b600060405180830381600087803b158015612bad57600080fd5b505af11580156124b9573d6000803e3d6000fd5b600654612bd99030906001600160a01b031684611eb1565b600654600a5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612c199230928992600092839216904290600401613110565b6060604051808303818588803b158015612c3257600080fd5b505af1158015612c46573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c6b919061303d565b5050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110612cb757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d0b57600080fd5b505afa158015612d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d439190612e3e565b81600181518110612d6457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600954825191169082906002908110612da357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612dc99130911684611eb1565b600654604051635c11d79560e01b81526001600160a01b0390911690635c11d79590612b9390859060009086907f0000000000000000000000000000000000000000000000000000000000000000904290600401613966565b600060208284031215612e33578081fd5b8135611ea681613afd565b600060208284031215612e4f578081fd5b8151611ea681613afd565b60008060408385031215612e6c578081fd5b8235612e7781613afd565b91506020830135612e8781613afd565b809150509250929050565b600080600060608486031215612ea6578081fd5b8335612eb181613afd565b92506020840135612ec181613afd565b929592945050506040919091013590565b60008060408385031215612ee4578182fd5b8235612eef81613afd565b91506020830135612e8781613b12565b60008060008060808587031215612f14578081fd5b8451612f1f81613afd565b602086015160408701519195509350612f3781613b20565b6060959095015193969295505050565b60008060408385031215612f59578182fd5b8235612f6481613afd565b946020939093013593505050565b600080600060408486031215612f86578283fd5b83356001600160401b0380821115612f9c578485fd5b818601915086601f830112612faf578485fd5b813581811115612fbd578586fd5b8760208083028501011115612fd0578586fd5b60209283019550935050840135612fe681613b12565b809150509250925092565b600060208284031215613002578081fd5b8151611ea681613b12565b60006020828403121561301e578081fd5b5035919050565b600060208284031215613036578081fd5b5051919050565b600080600060608486031215613051578283fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561307f578384fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156130ac578081fd5b8135611ea681613b20565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03949094168452602084019290925260ff166040830152606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6040808252810183905260008460608301825b8681101561318e57823561317181613afd565b6001600160a01b031682526020928301929091019060010161315e565b5080925050508215156020830152949350505050565b901515815260200190565b6000602080835283518082850152825b818110156131db578581018301518582016040015282016131bf565b818111156131ec5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479206578636c756460408201527065642066726f6d206469766964656e647360781b606082015260800190565b60208082526041908201527f435245454d3a2053656c6c207472616e7366657220616d6f756e74206578636560408201527f65647320746865206d617853656c6c5472616e73616374696f6e416d6f756e746060820152601760f91b608082015260a00190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252604c908201527f435245454d3a205468652050616e63616b655377617020706169722063616e6e60408201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60608201526b65744d616b6572506169727360a01b608082015260a00190565b6020808252601b908201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604082015260600190565b60208082526035908201527f435245454d3a2054686520646576656c6f706d656e742077616c6c657420697360408201527420616c72656164792074686973206164647265737360581b606082015260800190565b60208082526049908201527f435245454d3a20546865206e6577206469766964656e6420747261636b65722060408201527f6d757374206265206f776e65642062792074686520435245454d20746f6b656e6060820152680818dbdb9d1c9858dd60ba1b608082015260a00190565b6020808252602a908201527f435245454d3a2054686520726f7574657220616c7265616479206861732074686040820152696174206164647265737360b01b606082015260800190565b60208082526026908201527f435245454d3a207065656368546f6b656e206861732073696d696c617220616460408201526564726573732160d01b606082015260800190565b60208082526025908201527f435245454d3a20627579206c696d697420616c726561647920646973616374696040820152641d985d195960da1b606082015260800190565b6020808252603f908201527f435245454d3a2054686973206163636f756e742063616e6e6f742073656e642060408201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526034908201527f435245454d3a20546865206469766964656e6420747261636b657220616c7265604082015273616479206861732074686174206164647265737360601b606082015260800190565b6020808252603f908201527f435245454d3a20427579207472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61784275795472616e73616374696f6e416d6f756e742e00606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252603f908201527f435245454d3a204175746f6d61746564206d61726b6574206d616b657220706160408201527f697220697320616c72656164792073657420746f20746861742076616c756500606082015260800190565b60208082526033908201527f435245454d3a20546865206c69717569646974792077616c6c657420697320616040820152726c72656164792074686973206164647265737360681b606082015260800190565b60208082526029908201527f435245454d3a2074726164696e672068617320616c7265616479206265656e206040820152681858dd1a5d985d195960ba1b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156139b55784516001600160a01b031683529383019391830191600101613990565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60008219821115613a3657613a36613ae7565b500190565b600082613a5657634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613a7557613a75613ae7565b500290565b600082821015613a8c57613a8c613ae7565b500390565b600281046001821680613aa557607f821691505b60208210811415613ac657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613ae057613ae0613ae7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610f5557600080fd5b8015158114610f5557600080fd5b60ff81168114610f5557600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207071881857866ada73695c7033cf2730d15c4d551b0042ec44bfd4f820c6d5dd64736f6c63430008000033610100604052606460809081526101f460a0526103e860c0526107d060e0526200002e906008906004620001b6565b506040805160808101825267016345785d8a000081526706f05b59d3b200006020820152670de0b6b3a764000091810191909152671bc16d674ec800006060820152620000809060099060046200020c565b50600f80546001600160a01b0319908116730d4a11d5eeaac28ec3f61d100daf4d40471f1852179091556010805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2179055348015620000d657600080fd5b50604080518082018252600f81526e435245454d204469766964656e647360881b60208083019182528351808501909452600784526610d491515357d160ca1b90840152815191929183918391620001319160039162000255565b5080516200014790600490602084019062000255565b505050505060006200015e620001b260201b60201c565b600780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000326565b3390565b828054828255906000526020600020908101928215620001fa579160200282015b82811115620001fa578251829061ffff16905591602001919060010190620001d7565b5062000208929150620002d2565b5090565b828054828255906000526020600020908101928215620001fa579160200282015b82811115620001fa57825182906001600160401b03169055916020019190600101906200022d565b8280546200026390620002e9565b90600052602060002090601f016020900481019282620002875760008555620001fa565b82601f10620002a257805160ff1916838001178555620001fa565b82800160010185558215620001fa579182015b82811115620001fa578251825591602001919060010190620002b5565b5b80821115620002085760008155600101620002d3565b600281046001821680620002fe57607f821691505b602082108114156200032057634e487b7160e01b600052602260045260246000fd5b50919050565b612f0980620003366000396000f3fe60806040526004361061018d5760003560e01c806303c83302146101a157806306fdde03146101a9578063095ea7b3146101d457806309bbedde1461020157806318160ddd146102235780631a377e4f1461023857806323b872dd146102585780632520bf0414610278578063313ce5671461028d57806331e79db0146102af57806339509351146102cf57806342966c68146102ef57806343658c6c1461030f5780634e7b827f1461032f57806350228f581461034f5780635183d6fd146103715780635d54e86a146103a157806370a08231146103c15780637e7a64c4146103e15780638187f5161461040157806385a6b3ae146104215780638da5cb5b1461043657806395d89b411461044b578063a31dc2cd14610460578063a457c2d714610480578063a9059cbb146104a0578063aafd847a146104c0578063c705c569146104e0578063dd62ed3e14610500578063df47c9de14610520578063e30443bc14610540578063e96a851b14610560578063f2fde38b14610580578063fbcbc0f1146105a05761019c565b3661019c5761019a6105c0565b005b600080fd5b61019a6105c0565b3480156101b557600080fd5b506101be61064a565b6040516101cb919061275e565b60405180910390f35b3480156101e057600080fd5b506101f46101ef3660046125b4565b6106dc565b6040516101cb9190612753565b34801561020d57600080fd5b506102166106fa565b6040516101cb9190612b50565b34801561022f57600080fd5b50610216610700565b34801561024457600080fd5b50610216610253366004612694565b610706565b34801561026457600080fd5b506101f4610273366004612574565b61077d565b34801561028457600080fd5b5061019a610805565b34801561029957600080fd5b506102a2610ace565b6040516101cb9190612bc0565b3480156102bb57600080fd5b5061019a6102ca3660046124d9565b610ad3565b3480156102db57600080fd5b506101f46102ea3660046125b4565b610c7d565b3480156102fb57600080fd5b5061019a61030a36600461264b565b610ccb565b34801561031b57600080fd5b5061019a61032a366004612663565b610cd8565b34801561033b57600080fd5b506101f461034a3660046124d9565b610e16565b34801561035b57600080fd5b50610364610e2b565b6040516101cb9190612716565b34801561037d57600080fd5b5061039161038c36600461264b565b610e3a565b6040516101cb949392919061272a565b3480156103ad57600080fd5b506102166103bc366004612694565b610f8c565b3480156103cd57600080fd5b506102166103dc3660046124d9565b611024565b3480156103ed57600080fd5b506102166103fc36600461264b565b61103f565b34801561040d57600080fd5b5061019a61041c3660046124d9565b611060565b34801561042d57600080fd5b506102166110b7565b34801561044257600080fd5b506103646110bd565b34801561045757600080fd5b506101be6110cc565b34801561046c57600080fd5b5061021661047b366004612694565b6110db565b34801561048c57600080fd5b506101f461049b3660046125b4565b61111e565b3480156104ac57600080fd5b506101f46104bb3660046125b4565b611186565b3480156104cc57600080fd5b506102166104db3660046124d9565b61119a565b3480156104ec57600080fd5b506101f46104fb3660046124d9565b6111b5565b34801561050c57600080fd5b5061021661051b36600461253c565b6111d3565b34801561052c57600080fd5b5061019a61053b366004612663565b6111fe565b34801561054c57600080fd5b5061019a61055b366004612511565b61132a565b34801561056c57600080fd5b5061021661057b36600461264b565b6116f0565b34801561058c57600080fd5b5061019a61059b3660046124d9565b611700565b3480156105ac57600080fd5b506103916105bb3660046124d9565b6117b7565b60006105ca610700565b116105f05760405162461bcd60e51b81526004016105e7906128fc565b60405180910390fd5b341561064857336001600160a01b03167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165113460405161062f9190612b50565b60405180910390a2600654610644903461190a565b6006555b565b60606003805461065990612d6a565b80601f016020809104026020016040519081016040528092919081815260200182805461068590612d6a565b80156106d25780601f106106a7576101008083540402835291602001916106d2565b820191906000526020600020905b8154815290600101906020018083116106b557829003601f168201915b5050505050905090565b60006106f06106e9611939565b848461193d565b5060015b92915050565b600a5490565b60025490565b600060018260ff1610158015610720575060048260ff1611155b61073c5760405162461bcd60e51b81526004016105e7906129a7565b6009610749600184612d47565b60ff168154811061076a57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490505b919050565b600061078a8484846119f1565b6107fa84610796611939565b6107f585604051806060016040528060288152602001612e47602891396001600160a01b038a166000908152600160205260408120906107d4611939565b6001600160a01b031681526020810191909152604001600020549190611a0e565b61193d565b5060015b9392505050565b61080d611939565b6007546001600160a01b0390811691161461083a5760405162461bcd60e51b81526004016105e790612972565b600a548061085a5760405162461bcd60e51b81526004016105e7906127b1565b6000610864611a48565b9050600081116108865760405162461bcd60e51b81526004016105e790612a17565b60006108be8260096000815481106108ae57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154611a4c565b90506000816001600160401b038111156108e857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610911578160200160208202803683370190505b509050600061091f85611a9a565b905060005b83811015610a1d578582141561093957600091505b600061094483610e3a565b5050509050600061095482611ad5565b9050808711156109af576109688782611bad565b508185848151811061098a57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506109fb565b60009650818584815181106109d457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250505050610a1d565b83610a0581612da5565b94505050508080610a1590612da5565b915050610924565b506000610a2983611bdd565b9050610a33611a48565b945060005b8151811015610ac5576000828281518110610a6357634e487b7160e01b600052603260045260246000fd5b602002602001015190506000610a7882611ad5565b905080881115610a9e57610a8c8882611bad565b9750610a988282611cfb565b50610ab0565b610aa88289611cfb565b505050610ac5565b50508080610abd90612da5565b915050610a38565b50505050505050565b601290565b610adb611939565b6007546001600160a01b03908116911614610b085760405162461bcd60e51b81526004016105e790612972565b6001600160a01b03811660009081526012602052604090205460ff1615610b415760405162461bcd60e51b81526004016105e790612a92565b6001600160a01b0381166000908152601260205260408120805460ff19166001179055610b6f908290611d12565b60405163131836e760e21b81527364e324e4e48af3281b961da1e514ecf196319bb990634c60db9c90610ba990600a908590600401612b59565b60006040518083038186803b158015610bc157600080fd5b505af4158015610bd5573d6000803e3d6000fd5b5050604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb99250632510da739150610c1690600a908590600090600401612b70565b60006040518083038186803b158015610c2e57600080fd5b505af4158015610c42573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b60006106f0610c8a611939565b846107f58560016000610c9b611939565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061190a565b610cd53382611d6b565b50565b610ce0611939565b6007546001600160a01b03908116911614610d0d5760405162461bcd60e51b81526004016105e790612972565b600084118015610d1c57508383115b8015610d2757508282115b8015610d3257508181115b610d4e5760405162461bcd60e51b81526004016105e790612ae2565b836009600081548110610d7157634e487b7160e01b600052603260045260246000fd5b9060005260206000200181905550826009600181548110610da257634e487b7160e01b600052603260045260246000fd5b9060005260206000200181905550816009600281548110610dd357634e487b7160e01b600052603260045260246000fd5b9060005260206000200181905550806009600381548110610e0457634e487b7160e01b600052603260045260246000fd5b60009182526020909120015550505050565b60126020526000908152604090205460ff1681565b6011546001600160a01b031681565b600080600080600a7364e324e4e48af3281b961da1e514ecf196319bb963deb3d89690916040518263ffffffff1660e01b8152600401610e7a9190612b50565b60206040518083038186803b158015610e9257600080fd5b505af4158015610ea6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eca91906125e5565b8510610ee3575060009250600019915082905080610f85565b6040516368d54f3f60e11b81526000907364e324e4e48af3281b961da1e514ecf196319bb99063d1aa9e7e90610f2090600a908a90600401612bb2565b60206040518083038186803b158015610f3857600080fd5b505af4158015610f4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7091906124f5565b9050610f7b816117b7565b9450945094509450505b9193509193565b600060018260ff1610158015610fa6575060048260ff1611155b610fc25760405162461bcd60e51b81526004016105e7906129a7565b6106f468056bc75e2d6310000061101e60506110186008610fe760ff89166001611d75565b60ff168154811061100857634e487b7160e01b600052603260045260246000fd5b9060005260206000200154611da5565b90611efb565b90611f40565b6001600160a01b031660009081526020819052604090205490565b6008818154811061104f57600080fd5b600091825260209091200154905081565b611068611939565b6007546001600160a01b039081169116146110955760405162461bcd60e51b81526004016105e790612972565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b60065481565b6007546001600160a01b031690565b60606004805461065990612d6a565b600060018260ff16101580156110f5575060048260ff1611155b6111115760405162461bcd60e51b81526004016105e7906129a7565b6008610749600184612d47565b60006106f061112b611939565b846107f585604051806060016040528060258152602001612eaf6025913960016000611155611939565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611a0e565b60006106f0611193611939565b84846119f1565b6001600160a01b031660009081526005602052604090205490565b6001600160a01b031660009081526012602052604090205460ff1690565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611206611939565b6007546001600160a01b039081169116146112335760405162461bcd60e51b81526004016105e790612972565b60008411801561124257508383115b801561124d57508282115b801561125857508181115b6112745760405162461bcd60e51b81526004016105e790612ae2565b83600860008154811061129757634e487b7160e01b600052603260045260246000fd5b90600052602060002001819055508260086001815481106112c857634e487b7160e01b600052603260045260246000fd5b90600052602060002001819055508160086002815481106112f957634e487b7160e01b600052603260045260246000fd5b9060005260206000200181905550806008600381548110610e0457634e487b7160e01b600052603260045260246000fd5b611332611939565b6007546001600160a01b0390811691161461135f5760405162461bcd60e51b81526004016105e790612972565b6001600160a01b03821660009081526012602052604090205460ff1615611385576116ec565b6113aa600860008154811061100857634e487b7160e01b600052603260045260246000fd5b811115611609576113bb8282611d12565b604051632f0ad01760e21b81527364e324e4e48af3281b961da1e514ecf196319bb99063bc2b405c906113f790600a9086908690600401612b93565b60006040518083038186803b15801561140f57600080fd5b505af4158015611423573d6000803e3d6000fd5b5050505061144c600860038154811061100857634e487b7160e01b600052603260045260246000fd5b8111156114c457604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb990632510da739061148f90600a9086906004908101612b70565b60006040518083038186803b1580156114a757600080fd5b505af41580156114bb573d6000803e3d6000fd5b50505050611604565b6114e9600860028154811061100857634e487b7160e01b600052603260045260246000fd5b81111561152d57604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb990632510da739061148f90600a908690600390600401612b70565b611552600860018154811061100857634e487b7160e01b600052603260045260246000fd5b81111561159657604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb990632510da739061148f90600a908690600290600401612b70565b604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb990632510da73906115d390600a908690600190600401612b70565b60006040518083038186803b1580156115eb57600080fd5b505af41580156115ff573d6000803e3d6000fd5b505050505b6116ec565b611614826000611d12565b604051632510da7360e01b81527364e324e4e48af3281b961da1e514ecf196319bb990632510da739061165190600a908690600090600401612b70565b60006040518083038186803b15801561166957600080fd5b505af415801561167d573d6000803e3d6000fd5b505060405163131836e760e21b81527364e324e4e48af3281b961da1e514ecf196319bb99250634c60db9c91506116bb90600a908690600401612b59565b60006040518083038186803b1580156116d357600080fd5b505af41580156116e7573d6000803e3d6000fd5b505050505b5050565b6009818154811061104f57600080fd5b611708611939565b6007546001600160a01b039081169116146117355760405162461bcd60e51b81526004016105e790612972565b6001600160a01b03811661175b5760405162461bcd60e51b81526004016105e79061283f565b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6040516317e142d160e01b81528190600090819081907364e324e4e48af3281b961da1e514ecf196319bb9906317e142d1906117fa90600a908890600401612b59565b60206040518083038186803b15801561181257600080fd5b505af4158015611826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184a91906125e5565b60405163a753cb6360e01b81529093507364e324e4e48af3281b961da1e514ecf196319bb99063a753cb639061188790600a908990600401612b59565b60206040518083038186803b15801561189f57600080fd5b505af41580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d791906125c6565b60048111156118f657634e487b7160e01b600052602160045260246000fd5b91506119018461119a565b90509193509193565b6000806119178385612bce565b9050838110156107fe5760405162461bcd60e51b81526004016105e7906128c7565b3390565b6001600160a01b0383166119635760405162461bcd60e51b81526004016105e790612a4e565b6001600160a01b0382166119895760405162461bcd60e51b81526004016105e790612885565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906119e4908590612b50565b60405180910390a3505050565b60405162461bcd60e51b81526004016105e790612808565b505050565b60008184841115611a325760405162461bcd60e51b81526004016105e7919061275e565b506000611a3f8486612d30565b95945050505050565b4790565b600081831015611a5e575060016106f4565b6000611a6a8484611f7f565b15611a76576001611a79565b60005b60ff169050611a9281611a8c8686611f40565b9061190a565b9150506106f4565b600081334442604051602001611ab2939291906126ee565b6040516020818303038152906040528051906020012060001c6106f49190612dc0565b60006009611b8f6001600a7364e324e4e48af3281b961da1e514ecf196319bb963a753cb639091876040518363ffffffff1660e01b8152600401611b1a929190612b59565b60206040518083038186803b158015611b3257600080fd5b505af4158015611b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6a91906125c6565b6004811115611b8957634e487b7160e01b600052602160045260246000fd5b90611bad565b8154811061076a57634e487b7160e01b600052603260045260246000fd5b60006107fe83836040518060400160405280601e8152602001600080516020612e8f833981519152815250611a0e565b8051606090806001600160401b03811115611c0857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c31578160200160208202803683370190505b50915060005b80821115611cf4576000611c4a85611fbc565b9050848181518110611c6c57634e487b7160e01b600052603260045260246000fd5b6020026020010151848381518110611c9457634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050848181518110611cd457634e487b7160e01b600052603260045260246000fd5b6000602091820292909201015281611ceb81612da5565b92505050611c37565b5050919050565b600080611d088484612041565b1515949350505050565b6000611d1d83611024565b905080821115611d45576000611d338383611bad565b9050611d3f848261213b565b50611a09565b80821015611a09576000611d598284611bad565b9050611d658482611d6b565b50505050565b6116ec8282612145565b60006107fe83836040518060400160405280601e8152602001600080516020612e8f833981519152815250612215565b600080600f60009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611df657600080fd5b505afa158015611e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2e91906124f5565b90506000611ed8600f60009054906101000a90046001600160a01b0316836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611e8457600080fd5b505afa158015611e98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebc91906126b0565b611ec790600a612c40565b611ed19087612d11565b600061224d565b601154909150611ef3906001600160a01b031682600161224d565b949350505050565b600082611f0a575060006106f4565b6000611f168385612d11565b905082611f238583612be6565b146107fe5760405162461bcd60e51b81526004016105e790612931565b60006107fe83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b81525061229d565b60006107fe838360405180604001604052806018815260200177536166654d6174683a206d6f64756c6f206279207a65726f60401b8152506122cb565b60008060015b835181101561203a57611ffb848381518110611fee57634e487b7160e01b600052603260045260246000fd5b6020026020010151611024565b61201e858381518110611fee57634e487b7160e01b600052603260045260246000fd5b1115612028578091505b8061203281612da5565b915050611fc2565b5092915050565b60008115612132576001600160a01b03831660009081526005602052604090205461206c908361190a565b6001600160a01b038416600081815260056020526040808220939093559151849061209690612713565b60006040518083038185875af1925050503d80600081146120d3576040519150601f19603f3d011682016040523d82523d6000602084013e6120d8565b606091505b5050905080612129576001600160a01b0384166000908152600560205260409020546121049084611bad565b6001600160a01b03851660009081526005602052604081209190915591506106f49050565b829150506106f4565b50600092915050565b6116ec82826122f7565b6001600160a01b03821661216b5760405162461bcd60e51b81526004016105e7906129d6565b61217782600083611a09565b6121b481604051806060016040528060228152602001612e25602291396001600160a01b0385166000908152602081905260409020549190611a0e565b6001600160a01b0383166000908152602081905260409020556002546121da9082611bad565b6002556040516000906001600160a01b03841690600080516020612e6f83398151915290612209908590612b50565b60405180910390a35050565b60008360ff168360ff16111582906122405760405162461bcd60e51b81526004016105e7919061275e565b506000611a3f8486612d47565b600080600061225b86612399565b915091508361227e578161226f8287612d11565b6122799190612be6565b612293565b806122898387612d11565b6122939190612be6565b9695505050505050565b600081836122be5760405162461bcd60e51b81526004016105e7919061275e565b506000611a3f8486612be6565b600081836122ec5760405162461bcd60e51b81526004016105e7919061275e565b50611ef38385612dc0565b6001600160a01b03821661231d5760405162461bcd60e51b81526004016105e790612b19565b61232960008383611a09565b600254612336908261190a565b6002556001600160a01b03821660009081526020819052604090205461235c908261190a565b6001600160a01b038316600081815260208190526040808220939093559151909190600080516020612e6f83398151915290612209908590612b50565b6000806000836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156123d757600080fd5b505afa1580156123eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240f91906124f5565b9050600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561244d57600080fd5b505afa158015612461573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248591906125fd565b506010546001600160701b039283169450911691506001600160a01b038481169116146124b35780826124b6565b81815b94509450505050915091565b80516001600160701b038116811461077857600080fd5b6000602082840312156124ea578081fd5b81356107fe81612e00565b600060208284031215612506578081fd5b81516107fe81612e00565b60008060408385031215612523578081fd5b823561252e81612e00565b946020939093013593505050565b6000806040838503121561254e578182fd5b823561255981612e00565b9150602083013561256981612e00565b809150509250929050565b600080600060608486031215612588578081fd5b833561259381612e00565b925060208401356125a381612e00565b929592945050506040919091013590565b60008060408385031215612523578182fd5b6000602082840312156125d7578081fd5b8151600581106107fe578182fd5b6000602082840312156125f6578081fd5b5051919050565b600080600060608486031215612611578283fd5b61261a846124c2565b9250612628602085016124c2565b9150604084015163ffffffff81168114612640578182fd5b809150509250925092565b60006020828403121561265c578081fd5b5035919050565b60008060008060808587031215612678578081fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156126a5578081fd5b81356107fe81612e15565b6000602082840312156126c1578081fd5b81516107fe81612e15565b600581106126ea57634e487b7160e01b600052602160045260246000fd5b9052565b60609390931b6001600160601b03191683526014830191909152603482015260540190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03949094168452602084019290925260ff166040830152606082015260800190565b901515815260200190565b6000602080835283518082850152825b8181101561278a5785810183015185820160400152820161276e565b8181111561279b5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526037908201527f435245454d5f443a207468657265206d7573742062652061206d696e696d756d604082015276206f6620312064697669646e65647320686f6c6465727360481b606082015260800190565b6020808252601d908201527f435245454d5f443a204e6f207472616e736665727320616c6c6f776564000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604082015260600190565b6020808252601b908201527a3234bb34b232b732b2103a37ba30b639bab838363c9032b93937b960291b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526015908201527421a922a2a6afa21d1034b73b30b634b2103a34b2b960591b604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252601e908201527f435245454d5f443a20696e73756666696369656e742062616c616e6365210000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526030908201527f435245454d5f443a204164647265737320616c7265616479206578636c75646560408201526f642066726f6d206469766964656e647360801b606082015260800190565b6020808252601f908201527f435245454d5f443a20746965727320617265206e6f7420696e206f7264657200604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b9182526001600160a01b0316602082015260400190565b8381526001600160a01b038316602082015260608101611ef360408301846126cc565b9283526001600160a01b03919091166020830152604082015260600190565b918252602082015260400190565b60ff91909116815260200190565b60008219821115612be157612be1612dd4565b500190565b600082612bf557612bf5612dea565b500490565b80825b6001808611612c0c5750612c37565b818704821115612c1e57612c1e612dd4565b80861615612c2b57918102915b9490941c938002612bfd565b94509492505050565b60006107fe60001960ff851684600082612c5c575060016107fe565b81612c69575060006107fe565b8160018114612c7f5760028114612c8957612cb6565b60019150506107fe565b60ff841115612c9a57612c9a612dd4565b6001841b915084821115612cb057612cb0612dd4565b506107fe565b5060208310610133831016604e8410600b8410161715612ce9575081810a83811115612ce457612ce4612dd4565b6107fe565b612cf68484846001612bfa565b808604821115612d0857612d08612dd4565b02949350505050565b6000816000190483118215151615612d2b57612d2b612dd4565b500290565b600082821015612d4257612d42612dd4565b500390565b600060ff821660ff841680821015612d6157612d61612dd4565b90039392505050565b600281046001821680612d7e57607f821691505b60208210811415612d9f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612db957612db9612dd4565b5060010190565b600082612dcf57612dcf612dea565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b0381168114610cd557600080fd5b60ff81168114610cd557600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef536166654d6174683a207375627472616374696f6e206f766572666c6f77000045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122064277f8dde258ed1f712e34ceb1e292d0a2e92bea69c5d01864dc0d96c94c7f664736f6c6343000800003300000000000000000000000031d939dc09a6bb55642fcbf9d56166ebc0bdec9a00000000000000000000000066f6d7958049bfded399cd68aff49e0f2a9dcd4f000000000000000000000000240c42b59185ca2b1de9bf2fd54043b00fd774040000000000000000000000003beaae2f6972521f7d3e627ec4448d27207c7a47
Deployed Bytecode
0x6080604052600436106102aa5760003560e01c8062b61a57146102b657806302259e9e146102e1578063064a59d01461030357806306fdde0314610325578063095ea7b3146103475780630bd05b691461036757806313114a9d1461037e5780631694505e1461039357806318160ddd146103a85780631816467f146103bd5780631a377e4f146103dd57806323b872dd146103fd5780632520bf041461041d57806327c8f835146104325780632bb14e1d146104475780632c1f52161461045c57806330bb4cff14610471578063313ce5671461048657806331e79db0146104a857806339509351146104c85780633b2d081c1461044757806342966c68146104e857806343658c6c1461050857806349bd5a5e146105285780634fbee1931461053d578063548ba67a1461055d578063589210d91461057d5780635aa821a9146105925780635b35f9c9146105a75780635d54e86a146105bc57806364b0f653146105dc57806365b8dbc0146105f15780636827e764146106115780636843cd841461062657806370a082311461064657806388bdd9be146106665780638da5cb5b146106865780638ea5220f1461069b57806395d89b41146106b057806398118cb4146106115780639a7a23d6146106c5578063a31dc2cd146106e5578063a457c2d714610705578063a9059cbb14610725578063aafd847a14610745578063ad56c13c14610765578063b62496f514610795578063c0246668146107b5578063c492f046146107d5578063c705c569146107f5578063cfc0d02414610815578063d469801614610835578063dd62ed3e1461084a578063df47c9de1461086a578063e2f4560514610592578063e37ba8f91461088a578063f27fd254146108aa578063f2fde38b146108ca578063f4cb7a57146108ea578063fce589d814610611576102b1565b366102b157005b600080fd5b3480156102c257600080fd5b506102cb6108ff565b6040516102d891906130ba565b60405180910390f35b3480156102ed57600080fd5b506102f661090e565b6040516102d8919061395d565b34801561030f57600080fd5b5061031861091d565b6040516102d891906131a4565b34801561033157600080fd5b5061033a610926565b6040516102d891906131af565b34801561035357600080fd5b50610318610362366004612f47565b6109b8565b34801561037357600080fd5b5061037c6109d6565b005b34801561038a57600080fd5b506102f6610a46565b34801561039f57600080fd5b506102cb610a4c565b3480156103b457600080fd5b506102f6610a5b565b3480156103c957600080fd5b5061037c6103d8366004612e22565b610a61565b3480156103e957600080fd5b506102f66103f836600461309b565b610b2c565b34801561040957600080fd5b50610318610418366004612e92565b610bad565b34801561042957600080fd5b5061037c610c34565b34801561043e57600080fd5b506102cb610cd3565b34801561045357600080fd5b506102f6610cf7565b34801561046857600080fd5b506102cb610cfc565b34801561047d57600080fd5b506102f6610d0b565b34801561049257600080fd5b5061049b610d8d565b6040516102d89190613a15565b3480156104b457600080fd5b5061037c6104c3366004612e22565b610d92565b3480156104d457600080fd5b506103186104e3366004612f47565b610efd565b3480156104f457600080fd5b5061037c61050336600461300d565b610f4b565b34801561051457600080fd5b5061037c61052336600461306a565b610f58565b34801561053457600080fd5b506102cb610ffb565b34801561054957600080fd5b50610318610558366004612e22565b61100a565b34801561056957600080fd5b5061037c610578366004612e22565b611028565b34801561058957600080fd5b506103186110ad565b34801561059e57600080fd5b506102f66110bb565b3480156105b357600080fd5b506102cb6110c9565b3480156105c857600080fd5b506102f66105d736600461309b565b6110d8565b3480156105e857600080fd5b506102f6611109565b3480156105fd57600080fd5b5061037c61060c366004612e22565b61114e565b34801561061d57600080fd5b506102f661120e565b34801561063257600080fd5b506102f6610641366004612e22565b611213565b34801561065257600080fd5b506102f6610661366004612e22565b611244565b34801561067257600080fd5b5061037c610681366004612e22565b61125f565b34801561069257600080fd5b506102cb611670565b3480156106a757600080fd5b506102cb61167f565b3480156106bc57600080fd5b5061033a61168e565b3480156106d157600080fd5b5061037c6106e0366004612ed2565b61169d565b3480156106f157600080fd5b506102f661070036600461309b565b61170e565b34801561071157600080fd5b50610318610720366004612f47565b61173f565b34801561073157600080fd5b50610318610740366004612f47565b6117a7565b34801561075157600080fd5b506102f6610760366004612e22565b6117bb565b34801561077157600080fd5b50610785610780366004612e22565b6117ec565b6040516102d894939291906130e7565b3480156107a157600080fd5b506103186107b0366004612e22565b611884565b3480156107c157600080fd5b5061037c6107d0366004612ed2565b611899565b3480156107e157600080fd5b5061037c6107f0366004612f72565b61196d565b34801561080157600080fd5b50610318610810366004612e22565b611a62565b34801561082157600080fd5b5061037c610830366004612e22565b611ae3565b34801561084157600080fd5b506102cb611bae565b34801561085657600080fd5b506102f6610865366004612e5a565b611bbd565b34801561087657600080fd5b5061037c61088536600461306a565b611be8565b34801561089657600080fd5b5061037c6108a5366004612e22565b611c53565b3480156108b657600080fd5b506107856108c536600461300d565b611d1e565b3480156108d657600080fd5b5061037c6108e5366004612e22565b611d57565b3480156108f657600080fd5b5061037c611e0e565b6009546001600160a01b031681565b6a084595161401484a00000081565b600e5460ff1681565b60606003805461093590613a91565b80601f016020809104026020016040519081016040528092919081815260200182805461096190613a91565b80156109ae5780601f10610983576101008083540402835291602001916109ae565b820191906000526020600020905b81548152906001019060200180831161099157829003601f168201915b5050505050905090565b60006109cc6109c5611ead565b8484611eb1565b5060015b92915050565b6109de611ead565b6005546001600160a01b03908116911614610a145760405162461bcd60e51b8152600401610a0b90613663565b60405180910390fd5b600e5460ff1615610a375760405162461bcd60e51b8152600401610a0b90613914565b600e805460ff19166001179055565b600d5481565b6006546001600160a01b031681565b60025490565b610a69611ead565b6005546001600160a01b03908116911614610a965760405162461bcd60e51b8152600401610a0b90613663565b600b546001600160a01b0382811691161415610ac45760405162461bcd60e51b8152600401610a0b9061342c565b610acf816001611899565b600b546040516001600160a01b03918216918316907f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87190600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600854604051631a377e4f60e01b81526000916001600160a01b031690631a377e4f90610b5d908590600401613a15565b60206040518083038186803b158015610b7557600080fd5b505afa158015610b89573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190613025565b6000610bba848484611f65565b610c2a84610bc6611ead565b610c2585604051806060016040528060288152602001613b78602891396001600160a01b038a16600090815260016020526040812090610c04611ead565b6001600160a01b0316815260208101919091526040016000205491906124c2565b611eb1565b5060019392505050565b610c3c611ead565b6005546001600160a01b03908116911614610c695760405162461bcd60e51b8152600401610a0b90613663565b600860009054906101000a90046001600160a01b03166001600160a01b0316632520bf046040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cb957600080fd5b505af1158015610ccd573d6000803e3d6000fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b600481565b6008546001600160a01b031681565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015610d5057600080fd5b505afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190613025565b905090565b601290565b610d9a611ead565b6005546001600160a01b03908116911614610dc75760405162461bcd60e51b8152600401610a0b90613663565b60085460405163c705c56960e01b81526001600160a01b039091169063c705c56990610df79084906004016130ba565b60206040518083038186803b158015610e0f57600080fd5b505afa158015610e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e479190612ff1565b15610e645760405162461bcd60e51b8152600401610a0b90613245565b60085460405163031e79db60e41b81526001600160a01b03909116906331e79db090610e949084906004016130ba565b600060405180830381600087803b158015610eae57600080fd5b505af1158015610ec2573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b60006109cc610f0a611ead565b84610c258560016000610f1b611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611e77565b610f5533826124fc565b50565b610f60611ead565b6005546001600160a01b03908116911614610f8d5760405162461bcd60e51b8152600401610a0b90613663565b6008546040516310d9631b60e21b81526001600160a01b03909116906343658c6c90610fc39087908790879087906004016139fa565b600060405180830381600087803b158015610fdd57600080fd5b505af1158015610ff1573d6000803e3d6000fd5b5050505050505050565b6007546001600160a01b031681565b6001600160a01b03166000908152600f602052604090205460ff1690565b611030611ead565b6005546001600160a01b0390811691161461105d5760405162461bcd60e51b8152600401610a0b90613663565b6009546001600160a01b038281169116141561108b5760405162461bcd60e51b8152600401610a0b9061353a565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600e54610100900460ff1681565b66d3c21bcecceda160191b81565b600c546001600160a01b031681565b600854604051632eaa743560e11b81526000916001600160a01b031690635d54e86a90610b5d908590600401613a15565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015610d5057600080fd5b611156611ead565b6005546001600160a01b039081169116146111835760405162461bcd60e51b8152600401610a0b90613663565b6006546001600160a01b03828116911614156111b15760405162461bcd60e51b8152600401610a0b906134f0565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600281565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610b5d9085906004016130ba565b6001600160a01b031660009081526020819052604090205490565b611267611ead565b6005546001600160a01b039081169116146112945760405162461bcd60e51b8152600401610a0b90613663565b6008546001600160a01b03828116911614156112c25760405162461bcd60e51b8152600401610a0b9061376f565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561130a57600080fd5b505afa15801561131e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113429190612e3e565b6001600160a01b0316146113685760405162461bcd60e51b8152600401610a0b90613481565b60405163031e79db60e41b81526001600160a01b038216906331e79db0906113949084906004016130ba565b600060405180830381600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505060405163031e79db60e41b81526001600160a01b03841692506331e79db091506113f29030906004016130ba565b600060405180830381600087803b15801561140c57600080fd5b505af1158015611420573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db061143b611670565b6040518263ffffffff1660e01b815260040161145791906130ba565b600060405180830381600087803b15801561147157600080fd5b505af1158015611485573d6000803e3d6000fd5b505060065460405163031e79db60e41b81526001600160a01b0380861694506331e79db093506114b99216906004016130ba565b600060405180830381600087803b1580156114d357600080fd5b505af11580156114e7573d6000803e3d6000fd5b5050600b5460405163031e79db60e41b81526001600160a01b0380861694506331e79db0935061151b9216906004016130ba565b600060405180830381600087803b15801561153557600080fd5b505af1158015611549573d6000803e3d6000fd5b5050600c5460405163031e79db60e41b81526001600160a01b0380861694506331e79db0935061157d9216906004016130ba565b600060405180830381600087803b15801561159757600080fd5b505af11580156115ab573d6000803e3d6000fd5b5050600a5460405163031e79db60e41b81526001600160a01b0380861694506331e79db093506115df9216906004016130ba565b600060405180830381600087803b1580156115f957600080fd5b505af115801561160d573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b6005546001600160a01b031690565b600b546001600160a01b031681565b60606004805461093590613a91565b6116a5611ead565b6005546001600160a01b039081169116146116d25760405162461bcd60e51b8152600401610a0b90613663565b6007546001600160a01b03838116911614156117005760405162461bcd60e51b8152600401610a0b90613385565b61170a82826125cc565b5050565b60085460405163a31dc2cd60e01b81526000916001600160a01b03169063a31dc2cd90610b5d908590600401613a15565b60006109cc61174c611ead565b84610c2585604051806060016040528060258152602001613bc06025913960016000611776611ead565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906124c2565b60006109cc6117b4611ead565b8484611f65565b60085460405163557ec23d60e11b81526000916001600160a01b03169063aafd847a90610b5d9085906004016130ba565b60085460405163fbcbc0f160e01b81526000918291829182916001600160a01b039091169063fbcbc0f1906118259088906004016130ba565b60806040518083038186803b15801561183d57600080fd5b505afa158015611851573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118759190612eff565b93509350935093509193509193565b60116020526000908152604090205460ff1681565b6118a1611ead565b6005546001600160a01b039081169116146118ce5760405162461bcd60e51b8152600401610a0b90613663565b6001600160a01b0382166000908152600f602052604090205460ff161515811515141561190d5760405162461bcd60e51b8152600401610a0b906136d9565b6001600160a01b0382166000818152600f602052604090819020805460ff1916841515179055517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7906119619084906131a4565b60405180910390a25050565b611975611ead565b6005546001600160a01b039081169116146119a25760405162461bcd60e51b8152600401610a0b90613663565b60005b82811015611a215781600f60008686858181106119d257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119e79190612e22565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580611a1981613acc565b9150506119a5565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611a559392919061314b565b60405180910390a1505050565b60085460405163c705c56960e01b81526000916001600160a01b03169063c705c56990611a939085906004016130ba565b60206040518083038186803b158015611aab57600080fd5b505afa158015611abf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190612ff1565b611aeb611ead565b6005546001600160a01b03908116911614611b185760405162461bcd60e51b8152600401610a0b90613663565b600c546001600160a01b0382811691161415611b465760405162461bcd60e51b8152600401610a0b9061342c565b611b51816001611899565b600c546040516001600160a01b03918216918316907f85710b1053f40e0d492d81001a623cd191d251fed32881e7bb80fc1b66a6e46390600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611bf0611ead565b6005546001600160a01b03908116911614611c1d5760405162461bcd60e51b8152600401610a0b90613663565b600854604051636fa3e4ef60e11b81526001600160a01b039091169063df47c9de90610fc39087908790879087906004016139fa565b611c5b611ead565b6005546001600160a01b03908116911614611c885760405162461bcd60e51b8152600401610a0b90613663565b600a546001600160a01b0382811691161415611cb65760405162461bcd60e51b8152600401610a0b906138c1565b611cc1816001611899565b600a546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600854604051635183d6fd60e01b81526000918291829182916001600160a01b0390911690635183d6fd9061182590889060040161395d565b611d5f611ead565b6005546001600160a01b03908116911614611d8c5760405162461bcd60e51b8152600401610a0b90613663565b6001600160a01b038116611db25760405162461bcd60e51b8152600401610a0b906132fd565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b611e16611ead565b6005546001600160a01b03908116911614611e435760405162461bcd60e51b8152600401610a0b90613663565b600e54610100900460ff16611e6a5760405162461bcd60e51b8152600401610a0b90613580565b600e805461ff0019169055565b600080611e848385613a23565b905083811015611ea65760405162461bcd60e51b8152600401610a0b906133f7565b9392505050565b3390565b6001600160a01b038316611ed75760405162461bcd60e51b8152600401610a0b90613820565b6001600160a01b038216611efd5760405162461bcd60e51b8152600401610a0b90613343565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611f5890859061395d565b60405180910390a3505050565b6001600160a01b038316611f8b5760405162461bcd60e51b8152600401610a0b9061372a565b6001600160a01b038216611fb15760405162461bcd60e51b8152600401610a0b90613202565b600e5460ff16611ff3576001600160a01b03831660009081526010602052604090205460ff16611ff35760405162461bcd60e51b8152600401610a0b906135c5565b8061200957612004838360006126d7565b6124bd565b600754600160a01b900460ff161580156120255750600e5460ff165b801561204957506001600160a01b03821660009081526011602052604090205460ff165b801561206357506006546001600160a01b03848116911614155b801561208857506001600160a01b0382166000908152600f602052604090205460ff16155b156120b8576a084595161401484a0000008111156120b85760405162461bcd60e51b8152600401610a0b90613296565b600e54610100900460ff1680156120d95750600754600160a01b900460ff16155b80156120e75750600e5460ff165b801561210b57506001600160a01b03831660009081526011602052604090205460ff165b801561212557506006546001600160a01b03838116911614155b801561214a57506001600160a01b0382166000908152600f602052604090205460ff16155b156121795766d3c21bcecceda160191b8111156121795760405162461bcd60e51b8152600401610a0b906137c3565b600061218430611244565b600e5490915066d3c21bcecceda160191b8210159060ff1680156121a55750805b80156121bb5750600754600160a01b900460ff16155b80156121e057506001600160a01b03851660009081526011602052604090205460ff16155b80156121fa5750600a546001600160a01b03868116911614155b80156122145750600a546001600160a01b03858116911614155b156122f8576007805460ff60a01b1916600160a01b179055600d54600090612247906122418560026127da565b9061281f565b90506122528161285e565b600d54600090612267906122418660026127da565b600b54909150612280906001600160a01b0316826128df565b600d54600090612295906122418760046127da565b90506122a081612991565b600d546000906122b5906122418860026127da565b90506122c130826124fc565b60006122cc30611244565b600c549091506122e5906001600160a01b0316826128df565b50506007805460ff60a01b191690555050505b600e5460009060ff1680156123175750600754600160a01b900460ff16155b6001600160a01b0387166000908152600f602052604090205490915060ff168061235957506001600160a01b0385166000908152600f602052604090205460ff165b15612362575060005b8080156123a957506001600160a01b03861660009081526011602052604090205460ff16806123a957506001600160a01b03851660009081526011602052604090205460ff165b156123e55760006123ca6064612241600d54886127da90919063ffffffff16565b90506123d685826129d4565b94506123e38730836126d7565b505b6123f08686866126d7565b6008546001600160a01b031663e30443bc8761240b81611244565b6040518363ffffffff1660e01b81526004016124289291906130ce565b600060405180830381600087803b15801561244257600080fd5b505af1925050508015612453575060015b506008546001600160a01b031663e30443bc8661246f81611244565b6040518363ffffffff1660e01b815260040161248c9291906130ce565b600060405180830381600087803b1580156124a657600080fd5b505af19250505080156124b7575060015b505b5050505b505050565b600081848411156124e65760405162461bcd60e51b8152600401610a0b91906131af565b5060006124f38486613a7a565b95945050505050565b6001600160a01b0382166125225760405162461bcd60e51b8152600401610a0b90613698565b61252e826000836124bd565b61256b81604051806060016040528060228152602001613b30602291396001600160a01b03851660009081526020819052604090205491906124c2565b6001600160a01b03831660009081526020819052604090205560025461259190826129d4565b6002556040516000906001600160a01b03841690600080516020613ba0833981519152906125c090859061395d565b60405180910390a35050565b6001600160a01b03821660009081526011602052604090205460ff161515811515141561260b5760405162461bcd60e51b8152600401610a0b90613864565b6001600160a01b0382166000908152601160205260409020805460ff1916821580159190911790915561269b5760085460405163031e79db60e41b81526001600160a01b03909116906331e79db0906126689085906004016130ba565b600060405180830381600087803b15801561268257600080fd5b505af1158015612696573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166126fd5760405162461bcd60e51b8152600401610a0b9061372a565b6001600160a01b0382166127235760405162461bcd60e51b8152600401610a0b90613202565b61272e8383836124bd565b61276b81604051806060016040528060268152602001613b52602691396001600160a01b03861660009081526020819052604090205491906124c2565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461279a9082611e77565b6001600160a01b038084166000818152602081905260409081902093909355915190851690600080516020613ba083398151915290611f5890859061395d565b6000826127e9575060006109d0565b60006127f58385613a5b565b9050826128028583613a3b565b14611ea65760405162461bcd60e51b8152600401610a0b90613622565b6000611ea683836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250612a16565b600061286b82600261281f565b9050600061287983836129d4565b90504761288583612a44565b600061289147836129d4565b905061289d8382612bc1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516128d0939291906139e4565b60405180910390a15050505050565b6128e881612a44565b60004790506000836001600160a01b031682604051612906906130b7565b60006040518083038185875af1925050503d8060008114612943576040519150601f19603f3d011682016040523d82523d6000602084013e612948565b606091505b505090508015610ccd577f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc383836040516129839291906139d6565b60405180910390a150505050565b61299a81612c72565b7f6d1b229dafadcd720d5a60a73409508ab97a09a020cffe742460e5a58f790b61816040516129c9919061395d565b60405180910390a150565b6000611ea683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124c2565b60008183612a375760405162461bcd60e51b8152600401610a0b91906131af565b5060006124f38486613a3b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612a8757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612adb57600080fd5b505afa158015612aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b139190612e3e565b81600181518110612b3457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612b5a9130911684611eb1565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612b93908590600090869030904290600401613966565b600060405180830381600087803b158015612bad57600080fd5b505af11580156124b9573d6000803e3d6000fd5b600654612bd99030906001600160a01b031684611eb1565b600654600a5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612c199230928992600092839216904290600401613110565b6060604051808303818588803b158015612c3257600080fd5b505af1158015612c46573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c6b919061303d565b5050505050565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110612cb757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612d0b57600080fd5b505afa158015612d1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d439190612e3e565b81600181518110612d6457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600954825191169082906002908110612da357634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600654612dc99130911684611eb1565b600654604051635c11d79560e01b81526001600160a01b0390911690635c11d79590612b9390859060009086907f000000000000000000000000000000000000000000000000000000000000dead904290600401613966565b600060208284031215612e33578081fd5b8135611ea681613afd565b600060208284031215612e4f578081fd5b8151611ea681613afd565b60008060408385031215612e6c578081fd5b8235612e7781613afd565b91506020830135612e8781613afd565b809150509250929050565b600080600060608486031215612ea6578081fd5b8335612eb181613afd565b92506020840135612ec181613afd565b929592945050506040919091013590565b60008060408385031215612ee4578182fd5b8235612eef81613afd565b91506020830135612e8781613b12565b60008060008060808587031215612f14578081fd5b8451612f1f81613afd565b602086015160408701519195509350612f3781613b20565b6060959095015193969295505050565b60008060408385031215612f59578182fd5b8235612f6481613afd565b946020939093013593505050565b600080600060408486031215612f86578283fd5b83356001600160401b0380821115612f9c578485fd5b818601915086601f830112612faf578485fd5b813581811115612fbd578586fd5b8760208083028501011115612fd0578586fd5b60209283019550935050840135612fe681613b12565b809150509250925092565b600060208284031215613002578081fd5b8151611ea681613b12565b60006020828403121561301e578081fd5b5035919050565b600060208284031215613036578081fd5b5051919050565b600080600060608486031215613051578283fd5b8351925060208401519150604084015190509250925092565b6000806000806080858703121561307f578384fd5b5050823594602084013594506040840135936060013592509050565b6000602082840312156130ac578081fd5b8135611ea681613b20565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b03949094168452602084019290925260ff166040830152606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6040808252810183905260008460608301825b8681101561318e57823561317181613afd565b6001600160a01b031682526020928301929091019060010161315e565b5080925050508215156020830152949350505050565b901515815260200190565b6000602080835283518082850152825b818110156131db578581018301518582016040015282016131bf565b818111156131ec5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479206578636c756460408201527065642066726f6d206469766964656e647360781b606082015260800190565b60208082526041908201527f435245454d3a2053656c6c207472616e7366657220616d6f756e74206578636560408201527f65647320746865206d617853656c6c5472616e73616374696f6e416d6f756e746060820152601760f91b608082015260a00190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252604c908201527f435245454d3a205468652050616e63616b655377617020706169722063616e6e60408201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60608201526b65744d616b6572506169727360a01b608082015260a00190565b6020808252601b908201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604082015260600190565b60208082526035908201527f435245454d3a2054686520646576656c6f706d656e742077616c6c657420697360408201527420616c72656164792074686973206164647265737360581b606082015260800190565b60208082526049908201527f435245454d3a20546865206e6577206469766964656e6420747261636b65722060408201527f6d757374206265206f776e65642062792074686520435245454d20746f6b656e6060820152680818dbdb9d1c9858dd60ba1b608082015260a00190565b6020808252602a908201527f435245454d3a2054686520726f7574657220616c7265616479206861732074686040820152696174206164647265737360b01b606082015260800190565b60208082526026908201527f435245454d3a207065656368546f6b656e206861732073696d696c617220616460408201526564726573732160d01b606082015260800190565b60208082526025908201527f435245454d3a20627579206c696d697420616c726561647920646973616374696040820152641d985d195960da1b606082015260800190565b6020808252603f908201527f435245454d3a2054686973206163636f756e742063616e6e6f742073656e642060408201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526031908201527f435245454d3a204163636f756e7420697320616c7265616479207468652076616040820152706c7565206f6620276578636c756465642760781b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526034908201527f435245454d3a20546865206469766964656e6420747261636b657220616c7265604082015273616479206861732074686174206164647265737360601b606082015260800190565b6020808252603f908201527f435245454d3a20427579207472616e7366657220616d6f756e7420657863656560408201527f647320746865206d61784275795472616e73616374696f6e416d6f756e742e00606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252603f908201527f435245454d3a204175746f6d61746564206d61726b6574206d616b657220706160408201527f697220697320616c72656164792073657420746f20746861742076616c756500606082015260800190565b60208082526033908201527f435245454d3a20546865206c69717569646974792077616c6c657420697320616040820152726c72656164792074686973206164647265737360681b606082015260800190565b60208082526029908201527f435245454d3a2074726164696e672068617320616c7265616479206265656e206040820152681858dd1a5d985d195960ba1b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156139b55784516001600160a01b031683529383019391830191600101613990565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60008219821115613a3657613a36613ae7565b500190565b600082613a5657634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613a7557613a75613ae7565b500290565b600082821015613a8c57613a8c613ae7565b500390565b600281046001821680613aa557607f821691505b60208210811415613ac657634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613ae057613ae0613ae7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114610f5557600080fd5b8015158114610f5557600080fd5b60ff81168114610f5557600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207071881857866ada73695c7033cf2730d15c4d551b0042ec44bfd4f820c6d5dd64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000031d939dc09a6bb55642fcbf9d56166ebc0bdec9a00000000000000000000000066f6d7958049bfded399cd68aff49e0f2a9dcd4f000000000000000000000000240c42b59185ca2b1de9bf2fd54043b00fd774040000000000000000000000003beaae2f6972521f7d3e627ec4448d27207c7a47
-----Decoded View---------------
Arg [0] : _peechToken (address): 0x31d939dC09A6bB55642fCBF9d56166EbC0BDeC9a
Arg [1] : _liquidityWallet (address): 0x66F6d7958049bfDEd399CD68aff49E0F2a9DCd4F
Arg [2] : _devWallet (address): 0x240c42B59185cA2B1DE9BF2Fd54043B00Fd77404
Arg [3] : _rewardsWallet (address): 0x3beaAe2F6972521F7d3E627Ec4448D27207c7A47
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000031d939dc09a6bb55642fcbf9d56166ebc0bdec9a
Arg [1] : 00000000000000000000000066f6d7958049bfded399cd68aff49e0f2a9dcd4f
Arg [2] : 000000000000000000000000240c42b59185ca2b1de9bf2fd54043b00fd77404
Arg [3] : 0000000000000000000000003beaae2f6972521f7d3e627ec4448d27207c7a47
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.