Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
500 👽
Holders
8
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000000001296 👽Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Alien
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-21 */ //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) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function allPairsLength() external view returns (uint256); function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, 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 from, address to, uint256 amount ) external returns (bool); } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function decimals() external view returns (uint8); function symbol() external view returns (string memory); } contract ERC20 is Context, IERC20, IERC20Metadata { 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 symbol() external view virtual override returns (string memory) { return _symbol; } function name() external view virtual override returns (string memory) { return _name; } function totalSupply() external view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function decimals() public view virtual override returns (uint8) { return 18; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function transfer(address to, uint256 amount) external virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } function approve(address spender, uint256 amount) external virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function transferFrom( address from, address to, uint256 amount ) external virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); } function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - 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 _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); } } contract Alien is Ownable, ERC20 { mapping(address => uint256) private _balances; uint256 private _numTokensSellToAddToSwap = 50 * (10**decimals()); bool inSwapAndLiquify; uint256 public override totalSupply; uint256 public buySellLiquidityTax = 5; uint256 public sellDevelopmentTax = 40; address public developmentWallet = 0xf0f36F9ff99d37E6Da4E4F3600efd9474e0FF513; address public constant DEAD = address(0xdead);// burn LP to dead address IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; mapping(address => bool) private _isExcludedFromFee; event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() ERC20("Alien", unicode"👽") { totalSupply = 500 * (10**decimals()); _mint(msg.sender, totalSupply); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[msg.sender] = true; _isExcludedFromFee[developmentWallet] = true; _isExcludedFromFee[address(uniswapV2Router)] = true; } function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 half = (contractTokenBalance / 2); uint256 otherHalf = (contractTokenBalance - half); uint256 initialBalance = address(this).balance; _swapTokensForEth(half); uint256 newBalance = (address(this).balance - initialBalance); _addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function excludeFromFee (address _user, bool value) external onlyOwner { _isExcludedFromFee[_user]= value; } function updateBuySellLiquidityTax(uint256 newAmount) external onlyOwner { buySellLiquidityTax = newAmount; } function updateSellDevelopmentTax(uint256 newSellAmount ) external onlyOwner { sellDevelopmentTax = newSellAmount; } function swapAndSendToMarketing (uint256 tokens) private lockTheSwap { uint256 initialBalance = address(this).balance; _swapTokensForEth(tokens); uint256 newBalance = address(this).balance - initialBalance; payable (developmentWallet).transfer(newBalance); } function _swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), (block.timestamp + 300) ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, DEAD, block.timestamp ); } 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"); require(balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance" ); uint256 transferAmount; if ( (from == uniswapV2Pair || to == uniswapV2Pair) && !inSwapAndLiquify ) { // DEX transaction if ( from != uniswapV2Pair && ((balanceOf(address(this))) >= _numTokensSellToAddToSwap) ) { uint256 totalfee = 2*(buySellLiquidityTax)+sellDevelopmentTax; _numTokensSellToAddToSwap = balanceOf(address(this)); uint256 marketingTokens = _numTokensSellToAddToSwap * sellDevelopmentTax / totalfee; swapAndSendToMarketing(marketingTokens); uint256 liquidityTokens = _numTokensSellToAddToSwap - marketingTokens; // sell transaction with threshold to swap _swapAndLiquify(liquidityTokens); } if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { // no tax on excluded account transferAmount = amount; } else { // 1% buy tax to LP, 2% sell tax (1% to LP, 1% to dev wallet) uint256 liquidityAmount = ((amount * buySellLiquidityTax) / 100); if (from == uniswapV2Pair) { // buy transaction transferAmount = amount - liquidityAmount; } else { // sell transaction uint256 developmentAmount = ((amount * sellDevelopmentTax) / 100); transferAmount = amount - liquidityAmount - developmentAmount; super._transfer(from, address(this), developmentAmount); // only on sell transaction } super._transfer(from, address(this), liquidityAmount); // on buy/sell both transactions } } else { // normal wallet transaction transferAmount = amount; } super._transfer(from, to, transferAmount); } receive() external payable {} }
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":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"},{"inputs":[],"name":"DEAD","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":"buySellLiquidityTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","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":[],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevelopmentTax","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"uint256","name":"newAmount","type":"uint256"}],"name":"updateBuySellLiquidityTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellAmount","type":"uint256"}],"name":"updateSellDevelopmentTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052620000126012600a620004fe565b6200001f90603262000516565b6007556005600a556028600b55600c80546001600160a01b03191673f0f36f9ff99d37e6da4e4f3600efd9474e0ff5131790553480156200005f57600080fd5b506040518060400160405280600581526020016420b634b2b760d91b81525060405180604001604052806004815260200163f09f91bd60e01b815250620000b5620000af620002cd60201b60201c565b620002d1565b6004620000c38382620005d5565b506005620000d28282620005d5565b50620000df915050601290565b620000ec90600a620004fe565b620000fa906101f462000516565b60098190556200010c90339062000321565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a9190620006a1565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fe9190620006a1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200024c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002729190620006a1565b6001600160a01b0390811660a0529081166080819052336000908152600d60205260408082208054600160ff199182168117909255600c549095168352818320805486168217905592825290208054909216179055620006e2565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166200037c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060036000828254620003909190620006cc565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000440578160001904821115620004245762000424620003e9565b808516156200043257918102915b93841c939080029062000404565b509250929050565b6000826200045957506001620004f8565b816200046857506000620004f8565b81600181146200048157600281146200048c57620004ac565b6001915050620004f8565b60ff841115620004a057620004a0620003e9565b50506001821b620004f8565b5060208310610133831016604e8410600b8410161715620004d1575081810a620004f8565b620004dd8383620003ff565b8060001904821115620004f457620004f4620003e9565b0290505b92915050565b60006200050f60ff84168362000448565b9392505050565b8082028115828204841417620004f857620004f8620003e9565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200055b57607f821691505b6020821081036200057c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005d057600081815260208120601f850160051c81016020861015620005ab5750805b601f850160051c820191505b81811015620005cc57828155600101620005b7565b5050505b505050565b81516001600160401b03811115620005f157620005f162000530565b620006098162000602845462000546565b8462000582565b602080601f831160018114620006415760008415620006285750858301515b600019600386901b1c1916600185901b178555620005cc565b600085815260208120601f198616915b82811015620006725788860151825594840194600190910190840162000651565b5085821015620006915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620006b457600080fd5b81516001600160a01b03811681146200050f57600080fd5b80820180821115620004f857620004f8620003e9565b60805160a05161156f620007476000396000818161029b015281816109d701528181610a1201528181610a5c0152610b980152600081816101e701528181610ee701528181610fa001528181610fcf0152818161106101526110be015261156f6000f3fe6080604052600436106101445760003560e01c806370a08231116100b6578063a9059cbb1161006f578063a9059cbb146103b3578063ad8052bb146103d3578063c04a5414146103e9578063dd62ed3e14610409578063df8408fe14610429578063f2fde38b1461044957600080fd5b806370a08231146102ff578063715018a614610335578063739822b21461034a5780638da5cb5b1461036057806395d89b411461037e578063a457c2d71461039357600080fd5b806323b872dd1161010857806323b872dd1461022d578063313ce5671461024d578063395093511461026957806349bd5a5e146102895780634dd70f99146102bd5780635661e201146102df57600080fd5b806303fd2a451461015057806306fdde0314610183578063095ea7b3146101a55780631694505e146101d557806318160ddd1461020957600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b5061016661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561018f57600080fd5b50610198610469565b60405161017a919061113c565b3480156101b157600080fd5b506101c56101c036600461119f565b6104fb565b604051901515815260200161017a565b3480156101e157600080fd5b506101667f000000000000000000000000000000000000000000000000000000000000000081565b34801561021557600080fd5b5061021f60095481565b60405190815260200161017a565b34801561023957600080fd5b506101c56102483660046111cb565b610515565b34801561025957600080fd5b506040516012815260200161017a565b34801561027557600080fd5b506101c561028436600461119f565b610539565b34801561029557600080fd5b506101667f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c957600080fd5b506102dd6102d836600461120c565b61055b565b005b3480156102eb57600080fd5b506102dd6102fa36600461120c565b610593565b34801561030b57600080fd5b5061021f61031a366004611225565b6001600160a01b031660009081526001602052604090205490565b34801561034157600080fd5b506102dd6105c2565b34801561035657600080fd5b5061021f600a5481565b34801561036c57600080fd5b506000546001600160a01b0316610166565b34801561038a57600080fd5b506101986105f8565b34801561039f57600080fd5b506101c56103ae36600461119f565b610607565b3480156103bf57600080fd5b506101c56103ce36600461119f565b610682565b3480156103df57600080fd5b5061021f600b5481565b3480156103f557600080fd5b50600c54610166906001600160a01b031681565b34801561041557600080fd5b5061021f610424366004611249565b610690565b34801561043557600080fd5b506102dd610444366004611282565b6106bb565b34801561045557600080fd5b506102dd610464366004611225565b610710565b606060048054610478906112b5565b80601f01602080910402602001604051908101604052809291908181526020018280546104a4906112b5565b80156104f15780601f106104c6576101008083540402835291602001916104f1565b820191906000526020600020905b8154815290600101906020018083116104d457829003601f168201915b5050505050905090565b6000336105098185856107ab565b60019150505b92915050565b6000336105238582856108cf565b61052e858585610949565b506001949350505050565b60003361050981858561054c8383610690565b6105569190611305565b6107ab565b6000546001600160a01b0316331461058e5760405162461bcd60e51b815260040161058590611318565b60405180910390fd5b600a55565b6000546001600160a01b031633146105bd5760405162461bcd60e51b815260040161058590611318565b600b55565b6000546001600160a01b031633146105ec5760405162461bcd60e51b815260040161058590611318565b6105f66000610c41565b565b606060058054610478906112b5565b600033816106158286610690565b9050838110156106755760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610585565b61052e82868684036107ab565b600033610509818585610949565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b031633146106e55760405162461bcd60e51b815260040161058590611318565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461073a5760405162461bcd60e51b815260040161058590611318565b6001600160a01b03811661079f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610585565b6107a881610c41565b50565b6001600160a01b03831661080d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610585565b6001600160a01b03821661086e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610585565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006108db8484610690565b9050600019811461094357818110156109365760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610585565b61094384848484036107ab565b50505050565b6001600160a01b03831661096f5760405162461bcd60e51b81526004016105859061134d565b6001600160a01b0382166109955760405162461bcd60e51b815260040161058590611392565b806109b5846001600160a01b031660009081526001602052604090205490565b10156109d35760405162461bcd60e51b8152600401610585906113d5565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480610a4657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b8015610a55575060085460ff16155b15610c33577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614158015610aad57506007543060009081526001602052604090205410155b15610b2d576000600b54600a546002610ac6919061141b565b610ad09190611305565b306000908152600160205260409020549091506007819055600b546000918391610af99161141b565b610b039190611432565b9050610b0e81610c91565b600081600754610b1e9190611454565b9050610b2981610cff565b5050505b6001600160a01b0384166000908152600d602052604090205460ff1680610b6c57506001600160a01b0383166000908152600d602052604090205460ff165b15610b78575080610c36565b60006064600a5484610b8a919061141b565b610b949190611432565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603610be057610bd98184611454565b9150610c22565b60006064600b5485610bf2919061141b565b610bfc9190611432565b905080610c098386611454565b610c139190611454565b9250610c20863083610d9d565b505b610c2d853083610d9d565b50610c36565b50805b610943848483610d9d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805460ff1916600117905547610ca882610e90565b6000610cb48247611454565b600c546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610cef573d6000803e3d6000fd5b50506008805460ff191690555050565b6008805460ff191660011790556000610d19600283611432565b90506000610d278284611454565b905047610d3383610e90565b6000610d3f8247611454565b9050610d4b838261105b565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506008805460ff19169055505050565b6001600160a01b038316610dc35760405162461bcd60e51b81526004016105859061134d565b6001600160a01b038216610de95760405162461bcd60e51b815260040161058590611392565b6001600160a01b03831660009081526001602052604090205481811015610e225760405162461bcd60e51b8152600401610585906113d5565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e829086815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610ec557610ec5611467565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f67919061147d565b81600181518110610f7a57610f7a611467565b60200260200101906001600160a01b031690816001600160a01b031681525050610fc5307f0000000000000000000000000000000000000000000000000000000000000000846107ab565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663791ac94783600084306110054261012c611305565b6040518663ffffffff1660e01b815260040161102595949392919061149a565b600060405180830381600087803b15801561103f57600080fd5b505af1158015611053573d6000803e3d6000fd5b505050505050565b611086307f0000000000000000000000000000000000000000000000000000000000000000846107ab565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611110573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611135919061150b565b5050505050565b600060208083528351808285015260005b818110156111695785810183015185820160400152820161114d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146107a857600080fd5b600080604083850312156111b257600080fd5b82356111bd8161118a565b946020939093013593505050565b6000806000606084860312156111e057600080fd5b83356111eb8161118a565b925060208401356111fb8161118a565b929592945050506040919091013590565b60006020828403121561121e57600080fd5b5035919050565b60006020828403121561123757600080fd5b81356112428161118a565b9392505050565b6000806040838503121561125c57600080fd5b82356112678161118a565b915060208301356112778161118a565b809150509250929050565b6000806040838503121561129557600080fd5b82356112a08161118a565b91506020830135801515811461127757600080fd5b600181811c908216806112c957607f821691505b6020821081036112e957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561050f5761050f6112ef565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b808202811582820484141761050f5761050f6112ef565b60008261144f57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561050f5761050f6112ef565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561148f57600080fd5b81516112428161118a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156114ea5784516001600160a01b0316835293830193918301916001016114c5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561152057600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122017904b9356651d3f5e170e9904cafdf3a63a3fb29e1ef4a2c4dcf65cdc41f10564736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101445760003560e01c806370a08231116100b6578063a9059cbb1161006f578063a9059cbb146103b3578063ad8052bb146103d3578063c04a5414146103e9578063dd62ed3e14610409578063df8408fe14610429578063f2fde38b1461044957600080fd5b806370a08231146102ff578063715018a614610335578063739822b21461034a5780638da5cb5b1461036057806395d89b411461037e578063a457c2d71461039357600080fd5b806323b872dd1161010857806323b872dd1461022d578063313ce5671461024d578063395093511461026957806349bd5a5e146102895780634dd70f99146102bd5780635661e201146102df57600080fd5b806303fd2a451461015057806306fdde0314610183578063095ea7b3146101a55780631694505e146101d557806318160ddd1461020957600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b5061016661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561018f57600080fd5b50610198610469565b60405161017a919061113c565b3480156101b157600080fd5b506101c56101c036600461119f565b6104fb565b604051901515815260200161017a565b3480156101e157600080fd5b506101667f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561021557600080fd5b5061021f60095481565b60405190815260200161017a565b34801561023957600080fd5b506101c56102483660046111cb565b610515565b34801561025957600080fd5b506040516012815260200161017a565b34801561027557600080fd5b506101c561028436600461119f565b610539565b34801561029557600080fd5b506101667f000000000000000000000000b79f05a176cfe4c1c2bfadf660885526f418194a81565b3480156102c957600080fd5b506102dd6102d836600461120c565b61055b565b005b3480156102eb57600080fd5b506102dd6102fa36600461120c565b610593565b34801561030b57600080fd5b5061021f61031a366004611225565b6001600160a01b031660009081526001602052604090205490565b34801561034157600080fd5b506102dd6105c2565b34801561035657600080fd5b5061021f600a5481565b34801561036c57600080fd5b506000546001600160a01b0316610166565b34801561038a57600080fd5b506101986105f8565b34801561039f57600080fd5b506101c56103ae36600461119f565b610607565b3480156103bf57600080fd5b506101c56103ce36600461119f565b610682565b3480156103df57600080fd5b5061021f600b5481565b3480156103f557600080fd5b50600c54610166906001600160a01b031681565b34801561041557600080fd5b5061021f610424366004611249565b610690565b34801561043557600080fd5b506102dd610444366004611282565b6106bb565b34801561045557600080fd5b506102dd610464366004611225565b610710565b606060048054610478906112b5565b80601f01602080910402602001604051908101604052809291908181526020018280546104a4906112b5565b80156104f15780601f106104c6576101008083540402835291602001916104f1565b820191906000526020600020905b8154815290600101906020018083116104d457829003601f168201915b5050505050905090565b6000336105098185856107ab565b60019150505b92915050565b6000336105238582856108cf565b61052e858585610949565b506001949350505050565b60003361050981858561054c8383610690565b6105569190611305565b6107ab565b6000546001600160a01b0316331461058e5760405162461bcd60e51b815260040161058590611318565b60405180910390fd5b600a55565b6000546001600160a01b031633146105bd5760405162461bcd60e51b815260040161058590611318565b600b55565b6000546001600160a01b031633146105ec5760405162461bcd60e51b815260040161058590611318565b6105f66000610c41565b565b606060058054610478906112b5565b600033816106158286610690565b9050838110156106755760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610585565b61052e82868684036107ab565b600033610509818585610949565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b031633146106e55760405162461bcd60e51b815260040161058590611318565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461073a5760405162461bcd60e51b815260040161058590611318565b6001600160a01b03811661079f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610585565b6107a881610c41565b50565b6001600160a01b03831661080d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610585565b6001600160a01b03821661086e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610585565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006108db8484610690565b9050600019811461094357818110156109365760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610585565b61094384848484036107ab565b50505050565b6001600160a01b03831661096f5760405162461bcd60e51b81526004016105859061134d565b6001600160a01b0382166109955760405162461bcd60e51b815260040161058590611392565b806109b5846001600160a01b031660009081526001602052604090205490565b10156109d35760405162461bcd60e51b8152600401610585906113d5565b60007f000000000000000000000000b79f05a176cfe4c1c2bfadf660885526f418194a6001600160a01b0316846001600160a01b03161480610a4657507f000000000000000000000000b79f05a176cfe4c1c2bfadf660885526f418194a6001600160a01b0316836001600160a01b0316145b8015610a55575060085460ff16155b15610c33577f000000000000000000000000b79f05a176cfe4c1c2bfadf660885526f418194a6001600160a01b0316846001600160a01b031614158015610aad57506007543060009081526001602052604090205410155b15610b2d576000600b54600a546002610ac6919061141b565b610ad09190611305565b306000908152600160205260409020549091506007819055600b546000918391610af99161141b565b610b039190611432565b9050610b0e81610c91565b600081600754610b1e9190611454565b9050610b2981610cff565b5050505b6001600160a01b0384166000908152600d602052604090205460ff1680610b6c57506001600160a01b0383166000908152600d602052604090205460ff165b15610b78575080610c36565b60006064600a5484610b8a919061141b565b610b949190611432565b90507f000000000000000000000000b79f05a176cfe4c1c2bfadf660885526f418194a6001600160a01b0316856001600160a01b031603610be057610bd98184611454565b9150610c22565b60006064600b5485610bf2919061141b565b610bfc9190611432565b905080610c098386611454565b610c139190611454565b9250610c20863083610d9d565b505b610c2d853083610d9d565b50610c36565b50805b610943848483610d9d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805460ff1916600117905547610ca882610e90565b6000610cb48247611454565b600c546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610cef573d6000803e3d6000fd5b50506008805460ff191690555050565b6008805460ff191660011790556000610d19600283611432565b90506000610d278284611454565b905047610d3383610e90565b6000610d3f8247611454565b9050610d4b838261105b565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506008805460ff19169055505050565b6001600160a01b038316610dc35760405162461bcd60e51b81526004016105859061134d565b6001600160a01b038216610de95760405162461bcd60e51b815260040161058590611392565b6001600160a01b03831660009081526001602052604090205481811015610e225760405162461bcd60e51b8152600401610585906113d5565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610e829086815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610ec557610ec5611467565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f67919061147d565b81600181518110610f7a57610f7a611467565b60200260200101906001600160a01b031690816001600160a01b031681525050610fc5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846107ab565b6001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663791ac94783600084306110054261012c611305565b6040518663ffffffff1660e01b815260040161102595949392919061149a565b600060405180830381600087803b15801561103f57600080fd5b505af1158015611053573d6000803e3d6000fd5b505050505050565b611086307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846107ab565b60405163f305d71960e01b815230600482015260248101839052600060448201819052606482015261dead60848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af1158015611110573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611135919061150b565b5050505050565b600060208083528351808285015260005b818110156111695785810183015185820160400152820161114d565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146107a857600080fd5b600080604083850312156111b257600080fd5b82356111bd8161118a565b946020939093013593505050565b6000806000606084860312156111e057600080fd5b83356111eb8161118a565b925060208401356111fb8161118a565b929592945050506040919091013590565b60006020828403121561121e57600080fd5b5035919050565b60006020828403121561123757600080fd5b81356112428161118a565b9392505050565b6000806040838503121561125c57600080fd5b82356112678161118a565b915060208301356112778161118a565b809150509250929050565b6000806040838503121561129557600080fd5b82356112a08161118a565b91506020830135801515811461127757600080fd5b600181811c908216806112c957607f821691505b6020821081036112e957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561050f5761050f6112ef565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b808202811582820484141761050f5761050f6112ef565b60008261144f57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561050f5761050f6112ef565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561148f57600080fd5b81516112428161118a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156114ea5784516001600160a01b0316835293830193918301916001016114c5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561152057600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122017904b9356651d3f5e170e9904cafdf3a63a3fb29e1ef4a2c4dcf65cdc41f10564736f6c63430008120033
Deployed Bytecode Sourcemap
17142:6164:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17554:47;;;;;;;;;;;;17594:6;17554:47;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;17554:47:0;;;;;;;;12149:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13116:244::-;;;;;;;;;;-1:-1:-1;13116:244:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;13116:244:0;1231:187:1;17640:51:0;;;;;;;;;;;;;;;17338:35;;;;;;;;;;;;;;;;;;;1803:25:1;;;1791:2;1776:18;17338:35:0;1657:177:1;13368:297:0;;;;;;;;;;-1:-1:-1;13368:297:0;;;;;:::i;:::-;;:::i;12562:93::-;;;;;;;;;;-1:-1:-1;12562:93:0;;12645:2;2442:36:1;;2430:2;2415:18;12562:93:0;2300:184:1;13673:272:0;;;;;;;;;;-1:-1:-1;13673:272:0;;;;;:::i;:::-;;:::i;17698:38::-;;;;;;;;;;;;;;;19313:123;;;;;;;;;;-1:-1:-1;19313:123:0;;;;;:::i;:::-;;:::i;:::-;;19444:130;;;;;;;;;;-1:-1:-1;19444:130:0;;;;;:::i;:::-;;:::i;12377:177::-;;;;;;;;;;-1:-1:-1;12377:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;12528:18:0;12496:7;12528:18;;;:9;:18;;;;;;;12377:177;771:103;;;;;;;;;;;;;:::i;17380:38::-;;;;;;;;;;;;;;;;548:87;;;;;;;;;;-1:-1:-1;594:7:0;621:6;-1:-1:-1;;;;;621:6:0;548:87;;12035:106;;;;;;;;;;;;;:::i;13953:507::-;;;;;;;;;;-1:-1:-1;13953:507:0;;;;;:::i;:::-;;:::i;12872:236::-;;;;;;;;;;-1:-1:-1;12872:236:0;;;;;:::i;:::-;;:::i;17425:38::-;;;;;;;;;;;;;;;;17470:77;;;;;;;;;;-1:-1:-1;17470:77:0;;;;-1:-1:-1;;;;;17470:77:0;;;12663:201;;;;;;;;;;-1:-1:-1;12663:201:0;;;;;:::i;:::-;;:::i;19183:122::-;;;;;;;;;;-1:-1:-1;19183:122:0;;;;;:::i;:::-;;:::i;882:201::-;;;;;;;;;;-1:-1:-1;882:201:0;;;;;:::i;:::-;;:::i;12149:102::-;12205:13;12238:5;12231:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12149:102;:::o;13116:244::-;13237:4;174:10;13298:32;174:10;13314:7;13323:6;13298:8;:32::i;:::-;13348:4;13341:11;;;13116:244;;;;;:::o;13368:297::-;13501:4;174:10;13559:38;13575:4;174:10;13590:6;13559:15;:38::i;:::-;13608:27;13618:4;13624:2;13628:6;13608:9;:27::i;:::-;-1:-1:-1;13653:4:0;;13368:297;-1:-1:-1;;;;13368:297:0:o;13673:272::-;13790:4;174:10;13851:64;174:10;13867:7;13904:10;13876:25;174:10;13867:7;13876:9;:25::i;:::-;:38;;;;:::i;:::-;13851:8;:64::i;19313:123::-;594:7;621:6;-1:-1:-1;;;;;621:6:0;174:10;683:23;675:68;;;;-1:-1:-1;;;675:68:0;;;;;;;:::i;:::-;;;;;;;;;19397:19:::1;:31:::0;19313:123::o;19444:130::-;594:7;621:6;-1:-1:-1;;;;;621:6:0;174:10;683:23;675:68;;;;-1:-1:-1;;;675:68:0;;;;;;;:::i;:::-;19532:18:::1;:34:::0;19444:130::o;771:103::-;594:7;621:6;-1:-1:-1;;;;;621:6:0;174:10;683:23;675:68;;;;-1:-1:-1;;;675:68:0;;;;;;;:::i;:::-;836:30:::1;863:1;836:18;:30::i;:::-;771:103::o:0;12035:106::-;12093:13;12126:7;12119:14;;;;;:::i;13953:507::-;14075:4;174:10;14075:4;14163:25;174:10;14180:7;14163:9;:25::i;:::-;14136:52;;14241:15;14221:16;:35;;14199:122;;;;-1:-1:-1;;;14199:122:0;;4950:2:1;14199:122:0;;;4932:21:1;4989:2;4969:18;;;4962:30;5028:34;5008:18;;;5001:62;-1:-1:-1;;;5079:18:1;;;5072:35;5124:19;;14199:122:0;4748:401:1;14199:122:0;14357:60;14366:5;14373:7;14401:15;14382:16;:34;14357:8;:60::i;12872:236::-;12989:4;174:10;13050:28;174:10;13067:2;13071:6;13050:9;:28::i;12663:201::-;-1:-1:-1;;;;;12829:18:0;;;12797:7;12829:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12663:201::o;19183:122::-;594:7;621:6;-1:-1:-1;;;;;621:6:0;174:10;683:23;675:68;;;;-1:-1:-1;;;675:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19265:25:0;;;::::1;;::::0;;;:18:::1;:25;::::0;;;;:32;;-1:-1:-1;;19265:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19183:122::o;882:201::-;594:7;621:6;-1:-1:-1;;;;;621:6:0;174:10;683:23;675:68;;;;-1:-1:-1;;;675:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;971:22:0;::::1;963:73;;;::::0;-1:-1:-1;;;963:73:0;;5356:2:1;963:73:0::1;::::0;::::1;5338:21:1::0;5395:2;5375:18;;;5368:30;5434:34;5414:18;;;5407:62;-1:-1:-1;;;5485:18:1;;;5478:36;5531:19;;963:73:0::1;5154:402:1::0;963:73:0::1;1047:28;1066:8;1047:18;:28::i;:::-;882:201:::0;:::o;15971:380::-;-1:-1:-1;;;;;16107:19:0;;16099:68;;;;-1:-1:-1;;;16099:68:0;;5763:2:1;16099:68:0;;;5745:21:1;5802:2;5782:18;;;5775:30;5841:34;5821:18;;;5814:62;-1:-1:-1;;;5892:18:1;;;5885:34;5936:19;;16099:68:0;5561:400:1;16099:68:0;-1:-1:-1;;;;;16186:21:0;;16178:68;;;;-1:-1:-1;;;16178:68:0;;6168:2:1;16178:68:0;;;6150:21:1;6207:2;6187:18;;;6180:30;6246:34;6226:18;;;6219:62;-1:-1:-1;;;6297:18:1;;;6290:32;6339:19;;16178:68:0;5966:398:1;16178:68:0;-1:-1:-1;;;;;16259:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16311:32;;1803:25:1;;;16311:32:0;;1776:18:1;16311:32:0;;;;;;;15971:380;;;:::o;15461:502::-;15596:24;15623:25;15633:5;15640:7;15623:9;:25::i;:::-;15596:52;;-1:-1:-1;;15663:16:0;:37;15659:297;;15763:6;15743:16;:26;;15717:117;;;;-1:-1:-1;;;15717:117:0;;6571:2:1;15717:117:0;;;6553:21:1;6610:2;6590:18;;;6583:30;6649:31;6629:18;;;6622:59;6698:18;;15717:117:0;6369:353:1;15717:117:0;15878:51;15887:5;15894:7;15922:6;15903:16;:25;15878:8;:51::i;:::-;15585:378;15461:502;;;:::o;20751:2515::-;-1:-1:-1;;;;;20883:18:0;;20875:68;;;;-1:-1:-1;;;20875:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20962:16:0;;20954:64;;;;-1:-1:-1;;;20954:64:0;;;;;;;:::i;:::-;21056:6;21037:15;21047:4;-1:-1:-1;;;;;12528:18:0;12496:7;12528:18;;;:9;:18;;;;;;;12377:177;21037:15;:25;;21029:86;;;;-1:-1:-1;;;21029:86:0;;;;;;;:::i;:::-;21128:22;21188:13;-1:-1:-1;;;;;21180:21:0;:4;-1:-1:-1;;;;;21180:21:0;;:44;;;;21211:13;-1:-1:-1;;;;;21205:19:0;:2;-1:-1:-1;;;;;21205:19:0;;21180:44;21179:67;;;;-1:-1:-1;21230:16:0;;;;21229:17;21179:67;21161:2046;;;21335:13;-1:-1:-1;;;;;21327:21:0;:4;-1:-1:-1;;;;;21327:21:0;;;:99;;;;-1:-1:-1;21400:25:0;;21389:4;12496:7;12528:18;;;:9;:18;;;;;;21370:55;;21327:99;21305:692;;;21467:16;21510:18;;21489:19;;21486:1;:23;;;;:::i;:::-;:42;;;;:::i;:::-;21597:4;12496:7;12528:18;;;:9;:18;;;;;;21467:61;;-1:-1:-1;21551:25:0;:52;;;21682:18;;21628:23;;21703:8;;21654:46;;;:::i;:::-;:57;;;;:::i;:::-;21628:83;;21734:39;21757:15;21734:22;:39::i;:::-;21799:23;21853:15;21825:25;;:43;;;;:::i;:::-;21799:69;;21949:32;21965:15;21949;:32::i;:::-;21444:553;;;21305:692;-1:-1:-1;;;;;22015:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;22043:22:0;;;;;;:18;:22;;;;;;;;22015:50;22011:1087;;;-1:-1:-1;22150:6:0;21161:2046;;22011:1087;22276:23;22357:3;22313:19;;22304:6;:28;;;;:::i;:::-;22303:57;;;;:::i;:::-;22276:85;;22392:13;-1:-1:-1;;;;;22384:21:0;:4;-1:-1:-1;;;;;22384:21:0;;22380:598;;22487:24;22496:15;22487:6;:24;:::i;:::-;22470:41;;22380:598;;;22601:25;22687:3;22640:18;;22631:6;:27;;;;:::i;:::-;22630:60;;;;:::i;:::-;22601:90;-1:-1:-1;22601:90:0;22758:49;22792:15;22758:6;:49;:::i;:::-;:94;;;;:::i;:::-;22716:136;;22875:55;22891:4;22905;22912:17;22875:15;:55::i;:::-;22537:441;22380:598;22996:53;23012:4;23026;23033:15;22996;:53::i;:::-;22178:920;21161:2046;;;-1:-1:-1;23189:6:0;21161:2046;23217:41;23233:4;23239:2;23243:14;23217:15;:41::i;1091:191::-;1165:16;1184:6;;-1:-1:-1;;;;;1201:17:0;;;-1:-1:-1;;;;;;1201:17:0;;;;;;1234:40;;1184:6;;;;;;;1234:40;;1165:16;1234:40;1154:128;1091:191;:::o;19582:301::-;17972:16;:23;;-1:-1:-1;;17972:23:0;17991:4;17972:23;;;19687:21:::1;19719:25;19737:6:::0;19719:17:::1;:25::i;:::-;19755:18;19776:38;19800:14:::0;19776:21:::1;:38;:::i;:::-;19834:17;::::0;19825:48:::1;::::0;19755:59;;-1:-1:-1;;;;;;19834:17:0::1;::::0;19825:48;::::1;;;::::0;19755:59;;19834:17:::1;19825:48:::0;19834:17;19825:48;19755:59;19834:17;19825:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18018:16:0;:24;;-1:-1:-1;;18018:24:0;;;-1:-1:-1;;19582:301:0:o;18692:483::-;17972:16;:23;;-1:-1:-1;;17972:23:0;17991:4;17972:23;;;:16;18803:24:::1;18826:1;18803:20:::0;:24:::1;:::i;:::-;18787:41:::0;-1:-1:-1;18839:17:0::1;18860:27;18787:41:::0;18860:20;:27:::1;:::i;:::-;18839:49:::0;-1:-1:-1;18926:21:0::1;18960:23;18978:4:::0;18960:17:::1;:23::i;:::-;18996:18;19018:38;19042:14:::0;19018:21:::1;:38;:::i;:::-;18996:61;;19070:36;19084:9;19095:10;19070:13;:36::i;:::-;19124:43;::::0;;8674:25:1;;;8730:2;8715:18;;8708:34;;;8758:18;;;8751:34;;;19124:43:0::1;::::0;8662:2:1;8647:18;19124:43:0::1;;;;;;;-1:-1:-1::0;;18018:16:0;:24;;-1:-1:-1;;18018:24:0;;;-1:-1:-1;;;18692:483:0:o;16359:776::-;-1:-1:-1;;;;;16490:18:0;;16482:68;;;;-1:-1:-1;;;16482:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16569:16:0;;16561:64;;;;-1:-1:-1;;;16561:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16660:15:0;;16638:19;16660:15;;;:9;:15;;;;;;16708:21;;;;16686:109;;;;-1:-1:-1;;;16686:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16831:15:0;;;;;;;:9;:15;;;;;;16849:20;;;16831:38;;17049:13;;;;;;;;;;:23;;;;;;17101:26;;;;;;16863:6;1803:25:1;;1791:2;1776:18;;1657:177;17101:26:0;;;;;;;;16471:664;16359:776;;;:::o;19891:484::-;19982:16;;;19996:1;19982:16;;;;;;;;19958:21;;19982:16;;;;;;;;;;-1:-1:-1;19982:16:0;19958:40;;20027:4;20009;20014:1;20009:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;20009:23:0;;;-1:-1:-1;;;;;20009:23:0;;;;;20053:15;-1:-1:-1;;;;;20053:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20043:4;20048:1;20043:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;20043:32:0;;;-1:-1:-1;;;;;20043:32:0;;;;;20088:62;20105:4;20120:15;20138:11;20088:8;:62::i;:::-;-1:-1:-1;;;;;20163:15:0;:66;;20244:11;20270:1;20286:4;20313;20334:21;:15;20352:3;20334:21;:::i;:::-;20163:204;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19947:428;19891:484;:::o;20383:360::-;20465:62;20482:4;20497:15;20515:11;20465:8;:62::i;:::-;20540:195;;-1:-1:-1;;;20540:195:0;;20612:4;20540:195;;;10642:34:1;10692:18;;;10685:34;;;20658:1:0;10735:18:1;;;10728:34;;;10778:18;;;10771:34;17594:6:0;10821:19:1;;;10814:44;20709:15:0;10874:19:1;;;10867:35;20540:15:0;-1:-1:-1;;;;;20540:31:0;;;;20579:9;;10576:19:1;;20540:195:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20383:360;;:::o;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;911:315;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1839:456::-;1916:6;1924;1932;1985:2;1973:9;1964:7;1960:23;1956:32;1953:52;;;2001:1;1998;1991:12;1953:52;2040:9;2027:23;2059:31;2084:5;2059:31;:::i;:::-;2109:5;-1:-1:-1;2166:2:1;2151:18;;2138:32;2179:33;2138:32;2179:33;:::i;:::-;1839:456;;2231:7;;-1:-1:-1;;;2285:2:1;2270:18;;;;2257:32;;1839:456::o;2489:180::-;2548:6;2601:2;2589:9;2580:7;2576:23;2572:32;2569:52;;;2617:1;2614;2607:12;2569:52;-1:-1:-1;2640:23:1;;2489:180;-1:-1:-1;2489:180:1:o;2674:247::-;2733:6;2786:2;2774:9;2765:7;2761:23;2757:32;2754:52;;;2802:1;2799;2792:12;2754:52;2841:9;2828:23;2860:31;2885:5;2860:31;:::i;:::-;2910:5;2674:247;-1:-1:-1;;;2674:247:1:o;2926:388::-;2994:6;3002;3055:2;3043:9;3034:7;3030:23;3026:32;3023:52;;;3071:1;3068;3061:12;3023:52;3110:9;3097:23;3129:31;3154:5;3129:31;:::i;:::-;3179:5;-1:-1:-1;3236:2:1;3221:18;;3208:32;3249:33;3208:32;3249:33;:::i;:::-;3301:7;3291:17;;;2926:388;;;;;:::o;3319:416::-;3384:6;3392;3445:2;3433:9;3424:7;3420:23;3416:32;3413:52;;;3461:1;3458;3451:12;3413:52;3500:9;3487:23;3519:31;3544:5;3519:31;:::i;:::-;3569:5;-1:-1:-1;3626:2:1;3611:18;;3598:32;3668:15;;3661:23;3649:36;;3639:64;;3699:1;3696;3689:12;3740:380;3819:1;3815:12;;;;3862;;;3883:61;;3937:4;3929:6;3925:17;3915:27;;3883:61;3990:2;3982:6;3979:14;3959:18;3956:38;3953:161;;4036:10;4031:3;4027:20;4024:1;4017:31;4071:4;4068:1;4061:15;4099:4;4096:1;4089:15;3953:161;;3740:380;;;:::o;4125:127::-;4186:10;4181:3;4177:20;4174:1;4167:31;4217:4;4214:1;4207:15;4241:4;4238:1;4231:15;4257:125;4322:9;;;4343:10;;;4340:36;;;4356:18;;:::i;4387:356::-;4589:2;4571:21;;;4608:18;;;4601:30;4667:34;4662:2;4647:18;;4640:62;4734:2;4719:18;;4387:356::o;6727:401::-;6929:2;6911:21;;;6968:2;6948:18;;;6941:30;7007:34;7002:2;6987:18;;6980:62;-1:-1:-1;;;7073:2:1;7058:18;;7051:35;7118:3;7103:19;;6727:401::o;7133:399::-;7335:2;7317:21;;;7374:2;7354:18;;;7347:30;7413:34;7408:2;7393:18;;7386:62;-1:-1:-1;;;7479:2:1;7464:18;;7457:33;7522:3;7507:19;;7133:399::o;7537:402::-;7739:2;7721:21;;;7778:2;7758:18;;;7751:30;7817:34;7812:2;7797:18;;7790:62;-1:-1:-1;;;7883:2:1;7868:18;;7861:36;7929:3;7914:19;;7537:402::o;7944:168::-;8017:9;;;8048;;8065:15;;;8059:22;;8045:37;8035:71;;8086:18;;:::i;8117:217::-;8157:1;8183;8173:132;;8227:10;8222:3;8218:20;8215:1;8208:31;8262:4;8259:1;8252:15;8290:4;8287:1;8280:15;8173:132;-1:-1:-1;8319:9:1;;8117:217::o;8339:128::-;8406:9;;;8427:11;;;8424:37;;;8441:18;;:::i;8928:127::-;8989:10;8984:3;8980:20;8977:1;8970:31;9020:4;9017:1;9010:15;9044:4;9041:1;9034:15;9060:251;9130:6;9183:2;9171:9;9162:7;9158:23;9154:32;9151:52;;;9199:1;9196;9189:12;9151:52;9231:9;9225:16;9250:31;9275:5;9250:31;:::i;9316:980::-;9578:4;9626:3;9615:9;9611:19;9657:6;9646:9;9639:25;9683:2;9721:6;9716:2;9705:9;9701:18;9694:34;9764:3;9759:2;9748:9;9744:18;9737:31;9788:6;9823;9817:13;9854:6;9846;9839:22;9892:3;9881:9;9877:19;9870:26;;9931:2;9923:6;9919:15;9905:29;;9952:1;9962:195;9976:6;9973:1;9970:13;9962:195;;;10041:13;;-1:-1:-1;;;;;10037:39:1;10025:52;;10132:15;;;;10097:12;;;;10073:1;9991:9;9962:195;;;-1:-1:-1;;;;;;;10213:32:1;;;;10208:2;10193:18;;10186:60;-1:-1:-1;;;10277:3:1;10262:19;10255:35;10174:3;9316:980;-1:-1:-1;;;9316:980:1:o;10913:306::-;11001:6;11009;11017;11070:2;11058:9;11049:7;11045:23;11041:32;11038:52;;;11086:1;11083;11076:12;11038:52;11115:9;11109:16;11099:26;;11165:2;11154:9;11150:18;11144:25;11134:35;;11209:2;11198:9;11194:18;11188:25;11178:35;;10913:306;;;;;:::o
Swarm Source
ipfs://17904b9356651d3f5e170e9904cafdf3a63a3fb29e1ef4a2c4dcf65cdc41f105
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.