ERC-20
Overview
Max Total Supply
100,000,000 OCEAN
Holders
123
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,063,946.816524088 OCEANValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Ocean
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
/** ---------------------------- Social Links ---------------------------- Telegram: https://t.me/OceanPortal Website: https://www.ocean.navy Docs: https://docs.ocean.navy Twitter: https://www.ocean.navy/twitter/ ---------------------------- $OCEAN Info ---------------------------- 🌊 $OCEAN is powered by a brand new smart contract. 📈 Rule 1: Taxes are derived from the $OCEAN market cap. Example: If the market cap is $25,000, the current sea creature will be the Humpack, "🐋". Because the market cap is in the Humpack range, the buy tax will be 2% and the sell tax will be 1%. 🔄 Rule 2: The token name is derived from the $OCEAN market cap. Example: If the market cap rises from $49,000 to $51,000, the token name will update from "🐋" to "🦭". 💸 Rule 3: Each wallet is assigned a sea creature based on the $OCEAN market cap during its first swap. Tip: Once a wallet has been assigned a sea creature, it can never be re-assigned. Tip: The lower you wait to buy, the better the sea creature you get will be. Example: If a wallet purchases $OCEAN at a $65,000 market cap, then that wallet's buy tax would never exceed the Seal (🦭) buy tax of 2%. 🛢️ Rule 4: Oil spills briefly override everybody's taxes each time a market cap milestone is broken. Tip: Each time the $OCEAN market cap enters the range of the next sea creature, everybody's tax becomes 0/15 for the next 120 seconds. Tip: Sells become less effective at suppressing buy volume during an oil spill. Tip: There is no limit on the amount of oil spills that can happen. ------------------------- $OCEAN Milestones ------------------------- 💡 Each sea creature has slightly different milestones and taxes: 🐳 Whale $0 MC Lifetime tax: 2/0 🐋 Humpback $20,000 MC Lifetime tax: 2/1 🦭 Seal $50,000 MC Lifetime tax: 2/2 🦈 Shark $100,000 MC Lifetime tax: 3/2 🐬 Dolphin $200,000 MC Lifetime tax: 3/3 🦑 Squid $400,000 MC Lifetime tax: 4/3 🐙 Octopus $700,000 MC Lifetime tax: 4/4 🐠 Angelfish $1,200,000 MC Lifetime tax: 5/4 🐟 Mackerel $1,800,000 MC Lifetime tax: 5/5 🐡 Blowfish $2,600,000 MC Lifetime tax: 6/5 🦞 Lobster $3,900,000 MC Lifetime tax: 6/6 🦀 Crab $5,500,000 MC Lifetime tax: 7/6 🦐 Shrimp $8,000,000 MC Lifetime tax: 7/7 🪸 Coral $12,000,000 MC Lifetime tax: 8/7 🦠 Amoeba $25,000,000 MC Lifetime tax: 8/8 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.14; import "@openzeppelin/openzeppelin-contracts/access/Ownable.sol"; import "@openzeppelin/openzeppelin-contracts/token/ERC20/IERC20.sol"; import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol"; import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol"; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; contract Ocean is Context, IERC20, Ownable { mapping(uint256 => string) internal seaCreatures; mapping(uint256 => uint256) internal milestones; mapping(uint256 => uint256) internal buyTaxGlobal; mapping(uint256 => uint256) internal sellTaxGlobal; uint256 internal lastSeaCreature; uint256 internal lastProgression; mapping(address => uint256) internal seaCreature; mapping(address => bool) internal isSeaCreature; string private _name = unicode"🐳"; string private constant _symbol = "OCEAN"; uint8 private constant _decimals = 9; mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 100000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 public constant maxBuyTax = 8; uint256 public constant maxSellTax = 8; uint256 private _taxFee = 2; address payable private _buybackWallet = payable(msg.sender); address payable private _marketingWallet = payable(msg.sender); IUniswapV2Router02 public constant uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); IUniswapV2Factory public constant uniswapV2Factory = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; IERC20 public constant weth = IERC20(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); address public immutable OCEAN; address public uniswapV2Pair; AggregatorV3Interface public constant chainlinkV3Feed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); bool private tradingOpen; bool private inTaxSwap; bool private inContractSwap; uint256 public maxSwap = _tTotal / 50; uint256 public maxWallet = _tTotal / 50; uint256 private constant _triggerSwap = 1e9; modifier lockTheSwap { inTaxSwap = true; _; inTaxSwap = false; } constructor() { OCEAN = address(this); uniswapV2Pair = uniswapV2Factory.createPair(OCEAN, WETH); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[OCEAN] = true; _isExcludedFromFee[_buybackWallet] = true; _isExcludedFromFee[_marketingWallet] = true; _approve(OCEAN, address(uniswapV2Router), MAX); _approve(owner(), address(uniswapV2Router), MAX); // 🐳 Whale $0 MC seaCreatures[0] = unicode"🐳"; milestones[0] = 0; buyTaxGlobal[0] = 2; sellTaxGlobal[0] = 0; // 🐋 Humpback $20,000 MC seaCreatures[1] = unicode"🐋"; milestones[1] = 10000; buyTaxGlobal[1] = 2; sellTaxGlobal[1] = 1; // 🦭 Seal $50,000 MC seaCreatures[2] = unicode"🦭"; milestones[2] = 20000; buyTaxGlobal[2] = 2; sellTaxGlobal[2] = 2; // 🦈 Shark $100,000 MC seaCreatures[3] = unicode"🦈"; milestones[3] = 100000; buyTaxGlobal[3] = 3; sellTaxGlobal[3] = 2; // 🐬 Dolphin $200,000 MC seaCreatures[4] = unicode"🐬"; milestones[4] = 200000; buyTaxGlobal[4] = 3; sellTaxGlobal[4] = 3; // 🦑 Squid $400,000 MC seaCreatures[5] = unicode"🦑"; milestones[5] = 400000; buyTaxGlobal[5] = 4; sellTaxGlobal[5] = 3; // 🐙 Octopus $700,000 MC seaCreatures[6] = unicode"🐙"; milestones[6] = 700000; buyTaxGlobal[6] = 4; sellTaxGlobal[6] = 4; // 🐠 Angelfish $1,200,000 MC seaCreatures[7] = unicode"🐠"; milestones[7] = 1200000; buyTaxGlobal[7] = 5; sellTaxGlobal[7] = 4; // 🐟 Mackerel $1,800,000 MC seaCreatures[8] = unicode"🐟"; milestones[8] = 1800000; buyTaxGlobal[8] = 5; sellTaxGlobal[8] = 5; // 🐡 Blowfish $2,600,000 MC seaCreatures[9] = unicode"🐡"; milestones[9] = 2600000; buyTaxGlobal[9] = 6; sellTaxGlobal[9] = 5; // 🦞 Lobster $3,900,000 MC seaCreatures[10] = unicode"🦞"; milestones[10] = 3900000; buyTaxGlobal[10] = 6; sellTaxGlobal[10] = 6; // 🦀 Crab $5,500,000 MC seaCreatures[11] = unicode"🦀"; milestones[11] = 5500000; buyTaxGlobal[11] = 7; sellTaxGlobal[11] = 6; // 🦐 Shrimp $8,000,000 MC seaCreatures[12] = unicode"🦐"; milestones[12] = 8000000; buyTaxGlobal[12] = 7; sellTaxGlobal[12] = 7; // 🪸 Coral $12,000,000 MC seaCreatures[13] = unicode"🪸"; milestones[13] = 12000000; buyTaxGlobal[13] = 8; sellTaxGlobal[13] = 7; // 🦠 Amoeba $25,000,000 MC seaCreatures[14] = unicode"🦠"; milestones[14] = 25000000; buyTaxGlobal[14] = 8; sellTaxGlobal[14] = 8; _rOwned[_msgSender()] = _rTotal; emit Transfer(address(0), _msgSender(), _tTotal); } receive() external payable {} function getETHUSDPriceFeed() external pure returns (address) { return address(chainlinkV3Feed); } function getETHUSDPrice() public view returns (uint256) { ( , int256 answer, , , ) = chainlinkV3Feed.latestRoundData(); return uint256(answer / 1e8); } function getOCEANUSDMarketCap() public view returns (uint256) { return ((weth.balanceOf(uniswapV2Pair) * getETHUSDPrice()) / 1e18) * (totalSupply() / balanceOf(uniswapV2Pair)) * 2; } function getCurrentSeaCreature() public view returns (uint256) { uint256 marketCap = getOCEANUSDMarketCap(); for (uint256 i = 14; i >= 0; i--) { if (marketCap >= milestones[i]) { return i; } } return 0; } function getCurrentSeaCreatureEmoji() public view returns (string memory) { return seaCreatures[getCurrentSeaCreature()]; } function getLastSeaCreature() external view returns (uint256) { return lastSeaCreature; } function getNextSeaCreature() public view returns (uint256) { uint256 currentSeaCreature = getCurrentSeaCreature(); return currentSeaCreature == 14 ? 14 : currentSeaCreature + 1; } function getNextSeaCreatureEmoji() external view returns (string memory) { return seaCreatures[getNextSeaCreature()]; } function hasOilSpill() public view returns (bool) { return lastProgression + 120 >= block.timestamp; } function getLastOilSpill() external view returns (uint256) { return lastProgression; } function getOilSpillTimeRemaining() external view returns (uint256) { if (hasOilSpill()) { return lastProgression + 120 - block.timestamp; } return 0; } function getGlobalMaxBuyTax() external pure returns (uint256) { return maxBuyTax; } function getGlobalMaxSellTax() external pure returns (uint256) { return maxSellTax; } function getGlobalBuyTax() public view returns (uint256) { if (hasOilSpill()) { return 0; } uint256 globalBuyTax = 14 - getCurrentSeaCreature(); return globalBuyTax > maxBuyTax ? maxBuyTax : globalBuyTax; } function getGlobalSellTax() public view returns (uint256) { if (hasOilSpill()) { return 15; } uint256 globalSellTax = getCurrentSeaCreature(); return globalSellTax > maxSellTax ? maxSellTax : globalSellTax; } function getWalletIsSeaCreature(address _wallet) external view returns (bool) { return isSeaCreature[_wallet]; } function getWalletSeaCreature(address _wallet) public view returns (uint256) { return isSeaCreature[_wallet] ? seaCreature[_wallet] : getCurrentSeaCreature(); } function getWalletSeaCreatureEmoji(address _wallet) external view returns (string memory) { return seaCreatures[getWalletSeaCreature(_wallet)]; } function getWalletBuyTax(address _wallet) public view returns (uint256) { if (hasOilSpill()) { return 0; } return isSeaCreature[_wallet] ? buyTaxGlobal[seaCreature[_wallet]] : getGlobalBuyTax(); } function getWalletMaxBuylTax(address _wallet) external view returns (uint256) { return isSeaCreature[_wallet] ? buyTaxGlobal[seaCreature[_wallet]] : maxBuyTax; } function getWalletSellTax(address _wallet) public view returns (uint256) { if (hasOilSpill()) { return 15; } return isSeaCreature[_wallet] ? sellTaxGlobal[seaCreature[_wallet]] : getGlobalSellTax(); } function getWalletMaxSellTax(address _wallet) external view returns (uint256) { return isSeaCreature[_wallet] ? seaCreature[_wallet] : maxSellTax; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); require(_allowances[sender][_msgSender()] >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount); return true; } function symbol() public pure returns (string memory) { return _symbol; } function name() public view returns (string memory) { return hasOilSpill() ? unicode"🛢️" : _name; } function decimals() public pure returns (uint8) { return _decimals; } function _removeTax() private { if (_taxFee == 0) { return; } _taxFee = 0; } function _restoreTax() private { _taxFee = 2; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "TOKEN: Transfer amount must exceed zero"); if (from != owner() && to != owner() && from != OCEAN && to != OCEAN) { if (!tradingOpen) { require(from == OCEAN, "TOKEN: This account cannot send tokens until trading is enabled"); } require(amount <= maxSwap, "TOKEN: Max Transaction Limit"); if (to != uniswapV2Pair) { require(balanceOf(to) + amount <= maxWallet, "TOKEN: Balance exceeds wallet size!"); } uint256 contractTokenBalance = balanceOf(OCEAN); if ((contractTokenBalance >= _triggerSwap) && !inTaxSwap && from != uniswapV2Pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) { inContractSwap = true; _swapOCEANForETH(contractTokenBalance >= maxSwap ? maxSwap : contractTokenBalance); inContractSwap = false; if (OCEAN.balance > 0) _sendETHToFee(OCEAN.balance); } } bool takeFee = true; bool needsRefresh; if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) { takeFee = false; } else { if (from == uniswapV2Pair && to != address(uniswapV2Router)) { if (!isSeaCreature[to]) { seaCreature[to] = getCurrentSeaCreature(); isSeaCreature[to] = true; } _taxFee = getWalletBuyTax(to); needsRefresh = true; } if (to == uniswapV2Pair && from != address(uniswapV2Router)) { if (!isSeaCreature[from]) { seaCreature[from] = getCurrentSeaCreature(); isSeaCreature[from] = true; } _taxFee = getWalletSellTax(from); needsRefresh = true; } } _tokenTransfer(from, to, amount, takeFee); if (needsRefresh) { _refresh(); } } function _refresh() private { uint256 currentSeaCreature = getCurrentSeaCreature(); if (currentSeaCreature > lastSeaCreature) { lastProgression = block.timestamp; } lastSeaCreature = currentSeaCreature; _name = getCurrentSeaCreatureEmoji(); } function _swapOCEANForETH(uint256 _amountOCEAN) private lockTheSwap returns (bool) { address[] memory path = new address[](2); path[0] = OCEAN; path[1] = WETH; uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(_amountOCEAN, 0, path, OCEAN, block.timestamp + 3600); return true; } function _sendETHToFee(uint256 _amountETH) private returns (bool) { (bool success, ) = payable(_marketingWallet).call{value: _amountETH}(""); return success; } function enableTrading() external onlyOwner { tradingOpen = true; } function removeLimits() external onlyOwner { maxSwap = _tTotal; maxWallet = _tTotal; } function swapTokensForEthManual(uint256 _contractTokenBalance) external returns (bool) { require(_msgSender() == _buybackWallet || _msgSender() == _marketingWallet); return _swapOCEANForETH(_contractTokenBalance); } function sendETHToFeeManual(uint256 _contractETHBalance) external returns (bool) { require(_msgSender() == _buybackWallet || _msgSender() == _marketingWallet); return _sendETHToFee(_contractETHBalance); } function _tokenFromReflection(uint256 rAmount) private view returns (uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); require(totalSupply() <= MAX, "Total reflections must be less than max"); return (!inContractSwap && inTaxSwap) ? totalSupply() * 1024 : rAmount / _getRate(); } function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private { if (!takeFee) _removeTax(); _transferStandard(sender, recipient, amount); if (!takeFee) _restoreTax(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { if (!inTaxSwap || inContractSwap) { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rTransferAmount; _rOwned[OCEAN] = _rOwned[OCEAN] + (tTeam * _getRate()); _rTotal = _rTotal - rFee; _tFeeTotal = _tFeeTotal + tFee; emit Transfer(sender, recipient, tTransferAmount); } else { emit Transfer(sender, recipient, tAmount); } } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(tAmount, 0, _taxFee); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tTeam, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam); } function _getTValues(uint256 tAmount, uint256 redisFee, uint256 taxFee) private pure returns (uint256, uint256, uint256) { uint256 tFee = tAmount * redisFee / 100; uint256 tTeam = tAmount * taxFee / 100; return (tAmount - tFee - tTeam, tFee, tTeam); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tTeam, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount * currentRate; uint256 rFee = tFee * currentRate; return (rAmount, rAmount - rFee - (tTeam * currentRate), rFee); } function _getRate() private view returns (uint256) { return _rTotal / _tTotal; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
pragma solidity >=0.6.2; import './IUniswapV2Router01.sol'; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData( uint80 _roundId ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
{ "remappings": [ "@chainlink/contracts/=lib/chainlink/contracts/", "@openzeppelin/openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/", "@uniswap/v2-core/contracts/=lib/v2-core/contracts/", "@uniswap/v2-periphery/contracts/=lib/v2-periphery/contracts/", "chainlink/=lib/chainlink/contracts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin/=lib/openzeppelin-contracts/contracts/", "v2-core/=lib/v2-core/contracts/", "v2-periphery/=lib/v2-periphery/contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OCEAN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainlinkV3Feed","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentSeaCreature","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSeaCreatureEmoji","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHUSDPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHUSDPriceFeed","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalMaxBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalMaxSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastOilSpill","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastSeaCreature","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextSeaCreature","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNextSeaCreatureEmoji","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOCEANUSDMarketCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOilSpillTimeRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletIsSeaCreature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletMaxBuylTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletMaxSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletSeaCreature","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletSeaCreatureEmoji","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"getWalletSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasOilSpill","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_contractETHBalance","type":"uint256"}],"name":"sendETHToFeeManual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_contractTokenBalance","type":"uint256"}],"name":"swapTokensForEthManual","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"uniswapV2Factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"weth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e0604052600460a090815263f09f90b360e01b60c05260099062000025908262001036565b506200003c67016345785d8a000060001962001118565b6200004a906000196200112f565b600e55600260105560118054336001600160a01b0319918216811790925560128054909116909117905562000089603267016345785d8a000062001157565b601455620000a1603267016345785d8a000062001157565b601555348015620000b157600080fd5b50620000bd3362000e15565b3060808190526040516364e329cb60e11b8152600481019190915273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26024820152735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9063c9c65396906044016020604051808303816000875af115801562000131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015791906200116e565b601380546001600160a01b0319166001600160a01b039283161790556000805482168152600d6020526040808220805460ff1990811660019081179092556080518086168552838520805483168417905560115486168552838520805483168417905560125490951684529190922080549091169091179055620001f390737a250d5630b4cf539739df2c5dacb4c659f2488d60001962000e65565b620002286200020a6000546001600160a01b031690565b737a250d5630b4cf539739df2c5dacb4c659f2488d60001962000e65565b604080518082019091526004815263f09f90b360e01b60208083019190915260008052600190527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49906200027d908262001036565b5060007fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b81905560027f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff557f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec819055604080518082019091526004815263f09f908b60e01b602082810191909152600192839052919091527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f9062000343908262001036565b506127107fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e05560027fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c81905560017fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05819055604080518082019091526004815263f09fa6ad60e01b60208281019190915260009390935291527fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f906200040a908262001036565b50614e207f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5560027fc3a24b0501bd2c13a7e57f2db4369ec4c223447539fc0724a9d55ac4a06ebd4d8190557f91da3fd0782e51c6b3986e9e672fd566868e71f3dbc2d6c2cd6fbb3e361af2a7556040805180820190915260048152631e13f4d160e31b6020828101919091526003600052600190527f7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b90620004ce908262001036565b50620186a07f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c35560037fcbc4e5fb02c3d1de23a9f1e014b4d2ee5aeaea9505df5e855c9210bf472495af5560027f2e174c10e159ea99b867ce3205125c24a42d128804e4070ed6fcc8cc98166aa055604080518082019091526004808252633c27e42b60e21b602083810191909152600091909152600190527fedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b5676439062000595908262001036565b5062030d407fee60d0579bcffd98e668647d59fec1ff86a7fb340ce572e844f234ae73a6918f5560037f83ec6a1f0257b830b5e016457c9cf1435391bf56cc98f369a58a54fe937724658190557f1a1e6821cde7d0159c0d293177871e09677b4e42307c7db3ba94f8648a5a050f55604080518082019091526004815263f09fa69160e01b6020828101919091526005600052600190527fe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c906200065a908262001036565b5062061a807fb98b78633099fa36ed8b8680c4f8092689e1e04080eb9cbb077ca38a14d7e3845560047f405aad32e1adbac89bb7f176e338b8fc6e994ca210c9bb7bdca249b46594225081905560037f04cde762ef08b6b6c5ded8e8c4c0b3f4e5c9ad7342c88fcc93681b4588b73f05556040805180820190915290815263f09f909960e01b6020828101919091526006600052600190527f8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a9062000720908262001036565b50620aae607f59dd4b18488d12f51eda69757a0ed42a2010c14b564330cc74a06895e60c077b5560047fc69056f16cbaa3c616b828e333ab7d3a32310765507f8f58359e99ebb7a885f38190557fc59312466997bb42aaaf719ece141047820e6b34531e1670dc1852a453648f0f81905560408051808201909152908152630784fc8560e51b6020828101919091526007600052600190527fdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e90620007e6908262001036565b5062124f807facd8ef244210bb6898e73c48bf820ed8ecc857a3bab8d79c10e4fa92b1e9ca655560057ff2c49132ed1cee2a7e75bde50d332a2f81f1d01e5456d8a19d1df09bd561dbd25560047fbeb3bad75134cb432e5707980e3245c52c5998a1125ee30f2f0dbf3925b1e5518190556040805180820190915290815263f09f909f60e01b6020828101919091526008600052600190527f4db623e5c4870b62d3fc9b4e8f893a1a77627d75ab45d9ff7e56ba19564af99b90620008ac908262001036565b50621b77407f3a5ea591190eeb3f8fcdced843c78df04ec0dfd42f5510375207515664fa0a755560057f85aaa47b6dc46495bb8824fad4583769726fea36efd831a35556690b830a8fbe8190557f2645749a946633740611cfc8178319f0958659d6922e4bf7e3a08b44789f53a455604080518082019091526004815263f09f90a160e01b6020828101919091526009600052600190527f74a5fbcb419ab7dbacbb2c92a4e163730f0da5c72b911deecf4f05a6b327d0a49062000971908262001036565b506227ac407ff85cc6ffc513dc6cf7d199ef87b7a63cf9defe62251c1c247cd12f1eec7bff295560067f8a8dc4e5242ea8b1ab1d60606dae757e6c2cca9f92a2cced9f72c19960bcb4585560057f4ad5a04d53b5856f318545bb721f67d3f6d0a5a999f25eec7e20eaeb4c47b93355604080518082019091526004815263784fd34f60e11b602082810191909152600a600052600190527f2a32391a76c35a36352b711f9152c0d0a340cd686850c8ef25fbb11c71b89e7b9062000a36908262001036565b50623b82607fd3604db978f6137b0d18816b77b2ce810487a3af08a922e0b184963be5f3adfc5560067f9dcb9783ba5cd0b54745f65f4f918525e461e91888c334e5342cb380ac558d538190557f5c6b02db8b672415ffad906d7ccee10bd53dbad7d0b29e2bc0e50c93d5f310935560408051808201909152600481526301e13f4d60e71b602082810191909152600b600052600190527ffc80cd5fe514767bc6e66ec558e68a5429ea70b50fa6caa3b53fc9278e9186329062000afb908262001036565b506253ec607fab9952baf6478d8cfb7253ce86a6c53a7b7549582c76210b1581ae682b7e556f5560077f2d72af3c1b2b2956e6f694fb741556d5ca9524373974378cdbec16afa8b841645560067f0c1469ad586d86b6976c45826d7ae56d76ee516e37a2bccffbe904b74dbae7ea556040805180820190915260048152630f09fa6960e41b602082810191909152600c600052600190527f23bf72df16f8335be9a3eddfb5ef1c739b12847d13a384ec83f578699d38eb899062000bc0908262001036565b50627a12007fbd814762a7e35d5c162a7570d14baa68bd622cabb1ad83d40dd70f8a88aa67c05560077fd56a60595ebefebed7f22dcee6c2acc61b06cf8c68e84c88677840365d1ff92b8190557f140aabff1a85df08546c9a350c79ae18341bde4a2cef5d2fd460885c0128ce26556040805180820190915260048152631e13f55760e31b602082810191909152600d600052600190527f86b3fa87ee245373978e0d2d334dbde866c9b8b039036b87c5eb2fd89bcb6bab9062000c85908262001036565b5062b71b007feb5d92aa5b18af35c2d0c0d14a538792cf1a66aa06ab9dae49d32446e9063ca15560087fa8f2d96126c6d0ad63adabaef7bf5cf47f163fb0c218a473d28f62312d197bcf5560077fa5022b2bfd144bf9103d80168549b5df7c72ab60bd51bf71a02a08d844853b4a556040805180820190915260048152630784fd3560e51b602082810191909152600e600052600190527f57aaafa65c4e563d39fff90096a5fa76d42117f53d87ef870784e64d63a8a16b9062000d4a908262001036565b5063017d78407f20de3dd312970f46a1d560f6c70f0e5bd10e638b9bb3836368f28838c607ea3e5560087fd6ebcc64c739277b117ce359e436534b234b76e914c80ad276abf5b5620789398190557feb3e677499e881fe1bdbc344a49c412138038a9f40883b6dc68f713aab48352355600e54336000818152600a6020908152604080832094909455925167016345785d8a00008152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620011a0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03831662000ecd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b03821662000f305760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000ec4565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000fbc57607f821691505b60208210810362000fdd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200103157600081815260208120601f850160051c810160208610156200100c5750805b601f850160051c820191505b818110156200102d5782815560010162001018565b5050505b505050565b81516001600160401b0381111562001052576200105262000f91565b6200106a8162001063845462000fa7565b8462000fe3565b602080601f831160018114620010a25760008415620010895750858301515b600019600386901b1c1916600185901b1785556200102d565b600085815260208120601f198616915b82811015620010d357888601518255948401946001909101908401620010b2565b5085821015620010f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b6000826200112a576200112a62001102565b500690565b818103818111156200115157634e487b7160e01b600052601160045260246000fd5b92915050565b60008262001169576200116962001102565b500490565b6000602082840312156200118157600080fd5b81516001600160a01b03811681146200119957600080fd5b9392505050565b6080516123b262001202600039600081816107eb015281816112fb01528181611339015281816113860152818161150a015281816115fe0152818161162901528181611a4501528181611af701528181611cec0152611d2f01526123b26000f3fe6080604052600436106102b25760003560e01c806390526cf211610175578063c4918b4e116100dc578063dd62ed3e11610095578063ef19dd811161006f578063ef19dd81146107d9578063f2fde38b1461080d578063f8b45b051461082d578063fdec60701461084357600080fd5b8063dd62ed3e1461075e578063de38c34e146107a4578063e7a6082e146107c457600080fd5b8063c4918b4e146106d6578063c6c934fa146106ec578063c83ccdec14610701578063c8e956ab14610662578063cc2d04aa14610716578063cd02a6d31461073657600080fd5b8063a9059cbb1161012e578063a9059cbb14610677578063ad1efb9214610697578063ad5c464814610459578063ae0b06ab146106ac578063bf45efce14610496578063bf4b1990146106c157600080fd5b806390526cf21461059b5780639399568f146105bb57806395d89b41146105f45780639c2b88d414610622578063a163123214610642578063a411209a1461066257600080fd5b80633fc8cef3116102195780635b01708a116101d25780635b01708a1461050757806370a082311461051c578063715018a61461053c578063751039fc146105535780638a8c523c146105685780638da5cb5b1461057d57600080fd5b80633fc8cef314610459578063442f0436146104815780634987dfec1461049657806349bd5a5e146104aa578063529f7676146104ca57806359d0f713146104df57600080fd5b806323b872dd1161026b57806323b872dd146103be578063255e421c146103de57806327f421d5146103f35780632a6cf5ea146104085780632e7b522814610428578063313ce5671461043d57600080fd5b80630255874f146102be57806306fdde03146102f1578063095ea7b3146103135780631207f090146103435780631694505e1461036357806318160ddd146103a357600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d9366004611f30565b61086a565b6040519081526020015b60405180910390f35b3480156102fd57600080fd5b506103066108db565b6040516102e89190611f52565b34801561031f57600080fd5b5061033361032e366004611fa0565b61099f565b60405190151581526020016102e8565b34801561034f57600080fd5b5061030661035e366004611f30565b6109b5565b34801561036f57600080fd5b5061038b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102e8565b3480156103af57600080fd5b5067016345785d8a00006102de565b3480156103ca57600080fd5b506103336103d9366004611fca565b610a62565b3480156103ea57600080fd5b506102de610b3d565b3480156103ff57600080fd5b50610306610c21565b34801561041457600080fd5b506102de610423366004611f30565b610c48565b34801561043457600080fd5b506102de610c8b565b34801561044957600080fd5b50604051600981526020016102e8565b34801561046557600080fd5b5061038b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561048d57600080fd5b506005546102de565b3480156104a257600080fd5b5060086102de565b3480156104b657600080fd5b5060135461038b906001600160a01b031681565b3480156104d657600080fd5b506102de610cce565b3480156104eb57600080fd5b5061038b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b34801561051357600080fd5b506102de610d0b565b34801561052857600080fd5b506102de610537366004611f30565b610d38565b34801561054857600080fd5b50610551610d5a565b005b34801561055f57600080fd5b50610551610d6e565b34801561057457600080fd5b50610551610d89565b34801561058957600080fd5b506000546001600160a01b031661038b565b3480156105a757600080fd5b506103336105b6366004612006565b610da6565b3480156105c757600080fd5b506103336105d6366004611f30565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561060057600080fd5b5060408051808201909152600581526427a1a2a0a760d91b6020820152610306565b34801561062e57600080fd5b506102de61063d366004611f30565b610df0565b34801561064e57600080fd5b506102de61065d366004611f30565b610e58565b34801561066e57600080fd5b506102de600881565b34801561068357600080fd5b50610333610692366004611fa0565b610e7f565b3480156106a357600080fd5b506006546102de565b3480156106b857600080fd5b50610306610e8c565b3480156106cd57600080fd5b506102de610e9a565b3480156106e257600080fd5b506102de60145481565b3480156106f857600080fd5b506102de610f29565b34801561070d57600080fd5b506102de610f48565b34801561072257600080fd5b50610333610731366004612006565b610f77565b34801561074257600080fd5b5061038b735f4ec3df9cbd43714fe2740f5e3616155c5b841981565b34801561076a57600080fd5b506102de61077936600461201f565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b3480156107b057600080fd5b506102de6107bf366004611f30565b610fc1565b3480156107d057600080fd5b50610333610fe9565b3480156107e557600080fd5b5061038b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561081957600080fd5b50610551610828366004611f30565b611002565b34801561083957600080fd5b506102de60155481565b34801561084f57600080fd5b50735f4ec3df9cbd43714fe2740f5e3616155c5b841961038b565b6000610874610fe9565b156108815750600f919050565b6001600160a01b03821660009081526008602052604090205460ff166108ae576108a9610f29565b6108d5565b6001600160a01b038216600090815260076020908152604080832054835260049091529020545b92915050565b60606108e5610fe9565b61097957600980546108f690612052565b80601f016020809104026020016040519081016040528092919081815260200182805461092290612052565b801561096f5780601f106109445761010080835404028352916020019161096f565b820191906000526020600020905b81548152906001019060200180831161095257829003601f168201915b5050505050905090565b60405180604001604052806007815260200166f09f9ba2efb88f60c81b8152505b905090565b60006109ac33848461107b565b50600192915050565b6060600160006109c484610fc1565b815260200190815260200160002080546109dd90612052565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0990612052565b8015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b50505050509050919050565b6000610a6f8484846111a0565b6001600160a01b0384166000908152600c60209081526040808320338452909152902054821115610af85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6001600160a01b0384166000908152600c6020908152604080832033808552925290912054610b33918691610b2e9086906120a2565b61107b565b5060019392505050565b601354600090610b55906001600160a01b0316610d38565b610b679067016345785d8a00006120cb565b670de0b6b3a7640000610b78610e9a565b6013546040516370a0823160e01b81526001600160a01b03909116600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa158015610bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf891906120df565b610c0291906120f8565b610c0c91906120cb565b610c1691906120f8565b61099a9060026120f8565b606060016000610c2f610d0b565b815260200190815260200160002080546108f690612052565b6001600160a01b03811660009081526008602052604081205460ff16610c6f5760086108d5565b506001600160a01b031660009081526007602052604090205490565b6000610c95610fe9565b15610ca05750600090565b6000610caa610cce565b610cb590600e6120a2565b905060088111610cc55780610cc8565b60085b91505090565b600080610cd9610b3d565b9050600e5b6000818152600260205260409020548210610cf95792915050565b80610d038161210f565b915050610cde565b600080610d16610cce565b905080600e14610d3057610d2b816001612126565b610cc8565b600e91505090565b6001600160a01b0381166000908152600a60205260408120546108d59061184d565b610d62611901565b610d6c600061195b565b565b610d76611901565b67016345785d8a00006014819055601555565b610d91611901565b6013805460ff60a01b1916600160a01b179055565b6011546000906001600160a01b0316336001600160a01b03161480610dde57506012546001600160a01b0316336001600160a01b0316145b610de757600080fd5b6108d5826119ab565b6000610dfa610fe9565b15610e0757506000919050565b6001600160a01b03821660009081526008602052604090205460ff16610e2f576108a9610c8b565b506001600160a01b03166000908152600760209081526040808320548352600390915290205490565b6001600160a01b03811660009081526008602052604081205460ff16610e2f5760086108d5565b60006109ac3384846111a0565b606060016000610c2f610cce565b600080735f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f139190612153565b5050509150506305f5e10081610cc891906121a3565b6000610f33610fe9565b15610f3e5750600f90565b6000610cb5610cce565b6000610f52610fe9565b15610f7157426006546078610f679190612126565b61099a91906120a2565b50600090565b6011546000906001600160a01b0316336001600160a01b03161480610faf57506012546001600160a01b0316336001600160a01b0316145b610fb857600080fd5b6108d582611a0b565b6001600160a01b03811660009081526008602052604081205460ff16610c6f576108a9610cce565b6000426006546078610ffb9190612126565b1015905090565b61100a611901565b6001600160a01b03811661106f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aef565b6110788161195b565b50565b6001600160a01b0383166110dd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aef565b6001600160a01b03821661113e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aef565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112045760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aef565b6001600160a01b0382166112665760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610aef565b600081116112c65760405162461bcd60e51b815260206004820152602760248201527f544f4b454e3a205472616e7366657220616d6f756e74206d75737420657863656044820152666564207a65726f60c81b6064820152608401610aef565b6000546001600160a01b038481169116148015906112f257506000546001600160a01b03838116911614155b801561133057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b801561136e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561165b57601354600160a01b900460ff1661142b577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161461142b5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610aef565b60145481111561147d5760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006044820152606401610aef565b6013546001600160a01b03838116911614611503576015548161149f84610d38565b6114a99190612126565b11156115035760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610aef565b600061152e7f0000000000000000000000000000000000000000000000000000000000000000610d38565b9050633b9aca00811015801561154e5750601354600160a81b900460ff16155b801561156857506013546001600160a01b03858116911614155b801561158d57506001600160a01b0384166000908152600d602052604090205460ff16155b80156115b257506001600160a01b0383166000908152600d602052604090205460ff16155b15611659576013805460ff60b01b1916600160b01b1790556014546115e6908210156115de5781611a0b565b601454611a0b565b506013805460ff60b01b191690556001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163115611659576116577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316316119ab565b505b505b6001600160a01b0383166000908152600d60205260408120546001919060ff168061169e57506001600160a01b0384166000908152600d602052604090205460ff165b806116d057506013546001600160a01b038681169116148015906116d057506013546001600160a01b03858116911614155b156116de576000915061182c565b6013546001600160a01b03868116911614801561171857506001600160a01b038416737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611785576001600160a01b03841660009081526008602052604090205460ff1661177557611745610cce565b6001600160a01b0385166000908152600760209081526040808320939093556008905220805460ff191660011790555b61177e84610df0565b6010555060015b6013546001600160a01b0385811691161480156117bf57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d14155b1561182c576001600160a01b03851660009081526008602052604090205460ff1661181c576117ec610cce565b6001600160a01b0386166000908152600760209081526040808320939093556008905220805460ff191660011790555b6118258561086a565b6010555060015b61183885858585611b8a565b801561184657611846611bb7565b5050505050565b6000600e548211156118b45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610aef565b601354600160b01b900460ff161580156118d75750601354600160a81b900460ff165b6118ed576118e3611bf0565b6108a990836120cb565b6108d567016345785d8a00006104006120f8565b6000546001600160a01b03163314610d6c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aef565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60125460405160009182916001600160a01b039091169084908381818185875af1925050503d80600081146119fc576040519150601f19603f3d011682016040523d82523d6000602084013e611a01565b606091505b5090949350505050565b6013805460ff60a81b1916600160a81b179055604080516002808252606082018352600092839291906020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110611a7757611a776121e7565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611abf57611abf6121e7565b6001600160a01b0390921660209283029190910190910152737a250d5630b4cf539739df2c5dacb4c659f2488d63791ac947846000847f0000000000000000000000000000000000000000000000000000000000000000611b2242610e10612126565b6040518663ffffffff1660e01b8152600401611b429594939291906121fd565b600060405180830381600087803b158015611b5c57600080fd5b505af1158015611b70573d6000803e3d6000fd5b50506013805460ff60a81b19169055506001949350505050565b80611b9757611b97611c08565b611ba2848484611c1b565b80611bb157611bb16002601055565b50505050565b6000611bc1610cce565b9050600554811115611bd257426006555b6005819055611bdf610e8c565b600990611bec90826122bc565b5050565b600067016345785d8a0000600e5461099a91906120cb565b601054600003611c1457565b6000601055565b601354600160a81b900460ff161580611c3d5750601354600160b01b900460ff165b15611dce57600080600080600080611c5487611e18565b6001600160a01b038f166000908152600a6020526040902054959b50939950919750955093509150611c879087906120a2565b6001600160a01b03808b166000908152600a602052604080822093909355908a1681522054611cb7908690612126565b6001600160a01b0389166000908152600a6020526040902055611cd8611bf0565b611ce290826120f8565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600a6020526040902054611d259190612126565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600a6020526040902055600e54611d6c9085906120a2565b600e55600f54611d7d908390612126565b600f556040518381526001600160a01b03808a1691908b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161119391815260200190565b505050565b6000806000806000806000806000611e348a6000601054611e6c565b9250925092506000806000611e528d8686611e4d611bf0565b611ec5565b919f909e50909c50959a5093985091965092945050505050565b60008080806064611e7d87896120f8565b611e8791906120cb565b905060006064611e97878a6120f8565b611ea191906120cb565b905080611eae838a6120a2565b611eb891906120a2565b9891975095509350505050565b6000808080611ed485896120f8565b90506000611ee286896120f8565b905081611eef87896120f8565b611ef983856120a2565b611f0391906120a2565b909a90995090975095505050505050565b80356001600160a01b0381168114611f2b57600080fd5b919050565b600060208284031215611f4257600080fd5b611f4b82611f14565b9392505050565b600060208083528351808285015260005b81811015611f7f57858101830151858201604001528201611f63565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611fb357600080fd5b611fbc83611f14565b946020939093013593505050565b600080600060608486031215611fdf57600080fd5b611fe884611f14565b9250611ff660208501611f14565b9150604084013590509250925092565b60006020828403121561201857600080fd5b5035919050565b6000806040838503121561203257600080fd5b61203b83611f14565b915061204960208401611f14565b90509250929050565b600181811c9082168061206657607f821691505b60208210810361208657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108d5576108d561208c565b634e487b7160e01b600052601260045260246000fd5b6000826120da576120da6120b5565b500490565b6000602082840312156120f157600080fd5b5051919050565b80820281158282048414176108d5576108d561208c565b60008161211e5761211e61208c565b506000190190565b808201808211156108d5576108d561208c565b805169ffffffffffffffffffff81168114611f2b57600080fd5b600080600080600060a0868803121561216b57600080fd5b61217486612139565b945060208601519350604086015192506060860151915061219760808701612139565b90509295509295909350565b6000826121b2576121b26120b5565b600160ff1b8214600019841416156121cc576121cc61208c565b500590565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561224d5784516001600160a01b031683529383019391830191600101612228565b50506001600160a01b03969096166060850152505050608001529392505050565b601f821115611e1357600081815260208120601f850160051c810160208610156122955750805b601f850160051c820191505b818110156122b4578281556001016122a1565b505050505050565b815167ffffffffffffffff8111156122d6576122d66121d1565b6122ea816122e48454612052565b8461226e565b602080601f83116001811461231f57600084156123075750858301515b600019600386901b1c1916600185901b1785556122b4565b600085815260208120601f198616915b8281101561234e5788860151825594840194600190910190840161232f565b508582101561236c5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220a567472fe30cd96e0ba160fb3969db66f2bb859d031b66dd3e6a58f2b5a867c164736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102b25760003560e01c806390526cf211610175578063c4918b4e116100dc578063dd62ed3e11610095578063ef19dd811161006f578063ef19dd81146107d9578063f2fde38b1461080d578063f8b45b051461082d578063fdec60701461084357600080fd5b8063dd62ed3e1461075e578063de38c34e146107a4578063e7a6082e146107c457600080fd5b8063c4918b4e146106d6578063c6c934fa146106ec578063c83ccdec14610701578063c8e956ab14610662578063cc2d04aa14610716578063cd02a6d31461073657600080fd5b8063a9059cbb1161012e578063a9059cbb14610677578063ad1efb9214610697578063ad5c464814610459578063ae0b06ab146106ac578063bf45efce14610496578063bf4b1990146106c157600080fd5b806390526cf21461059b5780639399568f146105bb57806395d89b41146105f45780639c2b88d414610622578063a163123214610642578063a411209a1461066257600080fd5b80633fc8cef3116102195780635b01708a116101d25780635b01708a1461050757806370a082311461051c578063715018a61461053c578063751039fc146105535780638a8c523c146105685780638da5cb5b1461057d57600080fd5b80633fc8cef314610459578063442f0436146104815780634987dfec1461049657806349bd5a5e146104aa578063529f7676146104ca57806359d0f713146104df57600080fd5b806323b872dd1161026b57806323b872dd146103be578063255e421c146103de57806327f421d5146103f35780632a6cf5ea146104085780632e7b522814610428578063313ce5671461043d57600080fd5b80630255874f146102be57806306fdde03146102f1578063095ea7b3146103135780631207f090146103435780631694505e1461036357806318160ddd146103a357600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d9366004611f30565b61086a565b6040519081526020015b60405180910390f35b3480156102fd57600080fd5b506103066108db565b6040516102e89190611f52565b34801561031f57600080fd5b5061033361032e366004611fa0565b61099f565b60405190151581526020016102e8565b34801561034f57600080fd5b5061030661035e366004611f30565b6109b5565b34801561036f57600080fd5b5061038b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102e8565b3480156103af57600080fd5b5067016345785d8a00006102de565b3480156103ca57600080fd5b506103336103d9366004611fca565b610a62565b3480156103ea57600080fd5b506102de610b3d565b3480156103ff57600080fd5b50610306610c21565b34801561041457600080fd5b506102de610423366004611f30565b610c48565b34801561043457600080fd5b506102de610c8b565b34801561044957600080fd5b50604051600981526020016102e8565b34801561046557600080fd5b5061038b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b34801561048d57600080fd5b506005546102de565b3480156104a257600080fd5b5060086102de565b3480156104b657600080fd5b5060135461038b906001600160a01b031681565b3480156104d657600080fd5b506102de610cce565b3480156104eb57600080fd5b5061038b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b34801561051357600080fd5b506102de610d0b565b34801561052857600080fd5b506102de610537366004611f30565b610d38565b34801561054857600080fd5b50610551610d5a565b005b34801561055f57600080fd5b50610551610d6e565b34801561057457600080fd5b50610551610d89565b34801561058957600080fd5b506000546001600160a01b031661038b565b3480156105a757600080fd5b506103336105b6366004612006565b610da6565b3480156105c757600080fd5b506103336105d6366004611f30565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561060057600080fd5b5060408051808201909152600581526427a1a2a0a760d91b6020820152610306565b34801561062e57600080fd5b506102de61063d366004611f30565b610df0565b34801561064e57600080fd5b506102de61065d366004611f30565b610e58565b34801561066e57600080fd5b506102de600881565b34801561068357600080fd5b50610333610692366004611fa0565b610e7f565b3480156106a357600080fd5b506006546102de565b3480156106b857600080fd5b50610306610e8c565b3480156106cd57600080fd5b506102de610e9a565b3480156106e257600080fd5b506102de60145481565b3480156106f857600080fd5b506102de610f29565b34801561070d57600080fd5b506102de610f48565b34801561072257600080fd5b50610333610731366004612006565b610f77565b34801561074257600080fd5b5061038b735f4ec3df9cbd43714fe2740f5e3616155c5b841981565b34801561076a57600080fd5b506102de61077936600461201f565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b3480156107b057600080fd5b506102de6107bf366004611f30565b610fc1565b3480156107d057600080fd5b50610333610fe9565b3480156107e557600080fd5b5061038b7f000000000000000000000000de392c6b4d652d13502e0837ed9965a45673c46881565b34801561081957600080fd5b50610551610828366004611f30565b611002565b34801561083957600080fd5b506102de60155481565b34801561084f57600080fd5b50735f4ec3df9cbd43714fe2740f5e3616155c5b841961038b565b6000610874610fe9565b156108815750600f919050565b6001600160a01b03821660009081526008602052604090205460ff166108ae576108a9610f29565b6108d5565b6001600160a01b038216600090815260076020908152604080832054835260049091529020545b92915050565b60606108e5610fe9565b61097957600980546108f690612052565b80601f016020809104026020016040519081016040528092919081815260200182805461092290612052565b801561096f5780601f106109445761010080835404028352916020019161096f565b820191906000526020600020905b81548152906001019060200180831161095257829003601f168201915b5050505050905090565b60405180604001604052806007815260200166f09f9ba2efb88f60c81b8152505b905090565b60006109ac33848461107b565b50600192915050565b6060600160006109c484610fc1565b815260200190815260200160002080546109dd90612052565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0990612052565b8015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b50505050509050919050565b6000610a6f8484846111a0565b6001600160a01b0384166000908152600c60209081526040808320338452909152902054821115610af85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6001600160a01b0384166000908152600c6020908152604080832033808552925290912054610b33918691610b2e9086906120a2565b61107b565b5060019392505050565b601354600090610b55906001600160a01b0316610d38565b610b679067016345785d8a00006120cb565b670de0b6b3a7640000610b78610e9a565b6013546040516370a0823160e01b81526001600160a01b03909116600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa158015610bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf891906120df565b610c0291906120f8565b610c0c91906120cb565b610c1691906120f8565b61099a9060026120f8565b606060016000610c2f610d0b565b815260200190815260200160002080546108f690612052565b6001600160a01b03811660009081526008602052604081205460ff16610c6f5760086108d5565b506001600160a01b031660009081526007602052604090205490565b6000610c95610fe9565b15610ca05750600090565b6000610caa610cce565b610cb590600e6120a2565b905060088111610cc55780610cc8565b60085b91505090565b600080610cd9610b3d565b9050600e5b6000818152600260205260409020548210610cf95792915050565b80610d038161210f565b915050610cde565b600080610d16610cce565b905080600e14610d3057610d2b816001612126565b610cc8565b600e91505090565b6001600160a01b0381166000908152600a60205260408120546108d59061184d565b610d62611901565b610d6c600061195b565b565b610d76611901565b67016345785d8a00006014819055601555565b610d91611901565b6013805460ff60a01b1916600160a01b179055565b6011546000906001600160a01b0316336001600160a01b03161480610dde57506012546001600160a01b0316336001600160a01b0316145b610de757600080fd5b6108d5826119ab565b6000610dfa610fe9565b15610e0757506000919050565b6001600160a01b03821660009081526008602052604090205460ff16610e2f576108a9610c8b565b506001600160a01b03166000908152600760209081526040808320548352600390915290205490565b6001600160a01b03811660009081526008602052604081205460ff16610e2f5760086108d5565b60006109ac3384846111a0565b606060016000610c2f610cce565b600080735f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f139190612153565b5050509150506305f5e10081610cc891906121a3565b6000610f33610fe9565b15610f3e5750600f90565b6000610cb5610cce565b6000610f52610fe9565b15610f7157426006546078610f679190612126565b61099a91906120a2565b50600090565b6011546000906001600160a01b0316336001600160a01b03161480610faf57506012546001600160a01b0316336001600160a01b0316145b610fb857600080fd5b6108d582611a0b565b6001600160a01b03811660009081526008602052604081205460ff16610c6f576108a9610cce565b6000426006546078610ffb9190612126565b1015905090565b61100a611901565b6001600160a01b03811661106f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aef565b6110788161195b565b50565b6001600160a01b0383166110dd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aef565b6001600160a01b03821661113e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aef565b6001600160a01b038381166000818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166112045760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aef565b6001600160a01b0382166112665760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610aef565b600081116112c65760405162461bcd60e51b815260206004820152602760248201527f544f4b454e3a205472616e7366657220616d6f756e74206d75737420657863656044820152666564207a65726f60c81b6064820152608401610aef565b6000546001600160a01b038481169116148015906112f257506000546001600160a01b03838116911614155b801561133057507f000000000000000000000000de392c6b4d652d13502e0837ed9965a45673c4686001600160a01b0316836001600160a01b031614155b801561136e57507f000000000000000000000000de392c6b4d652d13502e0837ed9965a45673c4686001600160a01b0316826001600160a01b031614155b1561165b57601354600160a01b900460ff1661142b577f000000000000000000000000de392c6b4d652d13502e0837ed9965a45673c4686001600160a01b0316836001600160a01b03161461142b5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610aef565b60145481111561147d5760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006044820152606401610aef565b6013546001600160a01b03838116911614611503576015548161149f84610d38565b6114a99190612126565b11156115035760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b6064820152608401610aef565b600061152e7f000000000000000000000000de392c6b4d652d13502e0837ed9965a45673c468610d38565b9050633b9aca00811015801561154e5750601354600160a81b900460ff16155b801561156857506013546001600160a01b03858116911614155b801561158d57506001600160a01b0384166000908152600d602052604090205460ff16155b80156115b257506001600160a01b0383166000908152600d602052604090205460ff16155b15611659576013805460ff60b01b1916600160b01b1790556014546115e6908210156115de5781611a0b565b601454611a0b565b506013805460ff60b01b191690556001600160a01b037f000000000000000000000000de392c6b4d652d13502e0837ed9965a45673c468163115611659576116577f000000000000000000000000de392c6b4d652d13502e0837ed9965a45673c4686001600160a01b0316316119ab565b505b505b6001600160a01b0383166000908152600d60205260408120546001919060ff168061169e57506001600160a01b0384166000908152600d602052604090205460ff165b806116d057506013546001600160a01b038681169116148015906116d057506013546001600160a01b03858116911614155b156116de576000915061182c565b6013546001600160a01b03868116911614801561171857506001600160a01b038416737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611785576001600160a01b03841660009081526008602052604090205460ff1661177557611745610cce565b6001600160a01b0385166000908152600760209081526040808320939093556008905220805460ff191660011790555b61177e84610df0565b6010555060015b6013546001600160a01b0385811691161480156117bf57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d14155b1561182c576001600160a01b03851660009081526008602052604090205460ff1661181c576117ec610cce565b6001600160a01b0386166000908152600760209081526040808320939093556008905220805460ff191660011790555b6118258561086a565b6010555060015b61183885858585611b8a565b801561184657611846611bb7565b5050505050565b6000600e548211156118b45760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610aef565b601354600160b01b900460ff161580156118d75750601354600160a81b900460ff165b6118ed576118e3611bf0565b6108a990836120cb565b6108d567016345785d8a00006104006120f8565b6000546001600160a01b03163314610d6c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aef565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60125460405160009182916001600160a01b039091169084908381818185875af1925050503d80600081146119fc576040519150601f19603f3d011682016040523d82523d6000602084013e611a01565b606091505b5090949350505050565b6013805460ff60a81b1916600160a81b179055604080516002808252606082018352600092839291906020830190803683370190505090507f000000000000000000000000de392c6b4d652d13502e0837ed9965a45673c46881600081518110611a7757611a776121e7565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611abf57611abf6121e7565b6001600160a01b0390921660209283029190910190910152737a250d5630b4cf539739df2c5dacb4c659f2488d63791ac947846000847f000000000000000000000000de392c6b4d652d13502e0837ed9965a45673c468611b2242610e10612126565b6040518663ffffffff1660e01b8152600401611b429594939291906121fd565b600060405180830381600087803b158015611b5c57600080fd5b505af1158015611b70573d6000803e3d6000fd5b50506013805460ff60a81b19169055506001949350505050565b80611b9757611b97611c08565b611ba2848484611c1b565b80611bb157611bb16002601055565b50505050565b6000611bc1610cce565b9050600554811115611bd257426006555b6005819055611bdf610e8c565b600990611bec90826122bc565b5050565b600067016345785d8a0000600e5461099a91906120cb565b601054600003611c1457565b6000601055565b601354600160a81b900460ff161580611c3d5750601354600160b01b900460ff165b15611dce57600080600080600080611c5487611e18565b6001600160a01b038f166000908152600a6020526040902054959b50939950919750955093509150611c879087906120a2565b6001600160a01b03808b166000908152600a602052604080822093909355908a1681522054611cb7908690612126565b6001600160a01b0389166000908152600a6020526040902055611cd8611bf0565b611ce290826120f8565b6001600160a01b037f000000000000000000000000de392c6b4d652d13502e0837ed9965a45673c468166000908152600a6020526040902054611d259190612126565b6001600160a01b037f000000000000000000000000de392c6b4d652d13502e0837ed9965a45673c468166000908152600a6020526040902055600e54611d6c9085906120a2565b600e55600f54611d7d908390612126565b600f556040518381526001600160a01b03808a1691908b16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050505050565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161119391815260200190565b505050565b6000806000806000806000806000611e348a6000601054611e6c565b9250925092506000806000611e528d8686611e4d611bf0565b611ec5565b919f909e50909c50959a5093985091965092945050505050565b60008080806064611e7d87896120f8565b611e8791906120cb565b905060006064611e97878a6120f8565b611ea191906120cb565b905080611eae838a6120a2565b611eb891906120a2565b9891975095509350505050565b6000808080611ed485896120f8565b90506000611ee286896120f8565b905081611eef87896120f8565b611ef983856120a2565b611f0391906120a2565b909a90995090975095505050505050565b80356001600160a01b0381168114611f2b57600080fd5b919050565b600060208284031215611f4257600080fd5b611f4b82611f14565b9392505050565b600060208083528351808285015260005b81811015611f7f57858101830151858201604001528201611f63565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215611fb357600080fd5b611fbc83611f14565b946020939093013593505050565b600080600060608486031215611fdf57600080fd5b611fe884611f14565b9250611ff660208501611f14565b9150604084013590509250925092565b60006020828403121561201857600080fd5b5035919050565b6000806040838503121561203257600080fd5b61203b83611f14565b915061204960208401611f14565b90509250929050565b600181811c9082168061206657607f821691505b60208210810361208657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108d5576108d561208c565b634e487b7160e01b600052601260045260246000fd5b6000826120da576120da6120b5565b500490565b6000602082840312156120f157600080fd5b5051919050565b80820281158282048414176108d5576108d561208c565b60008161211e5761211e61208c565b506000190190565b808201808211156108d5576108d561208c565b805169ffffffffffffffffffff81168114611f2b57600080fd5b600080600080600060a0868803121561216b57600080fd5b61217486612139565b945060208601519350604086015192506060860151915061219760808701612139565b90509295509295909350565b6000826121b2576121b26120b5565b600160ff1b8214600019841416156121cc576121cc61208c565b500590565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561224d5784516001600160a01b031683529383019391830191600101612228565b50506001600160a01b03969096166060850152505050608001529392505050565b601f821115611e1357600081815260208120601f850160051c810160208610156122955750805b601f850160051c820191505b818110156122b4578281556001016122a1565b505050505050565b815167ffffffffffffffff8111156122d6576122d66121d1565b6122ea816122e48454612052565b8461226e565b602080601f83116001811461231f57600084156123075750858301515b600019600386901b1c1916600185901b1785556122b4565b600085815260208120601f198616915b8281101561234e5788860151825594840194600190910190840161232f565b508582101561236c5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea2646970667358221220a567472fe30cd96e0ba160fb3969db66f2bb859d031b66dd3e6a58f2b5a867c164736f6c63430008130033
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.