Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
5,000,000 JARL
Holders
78
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.737987026803275598 JARLValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Jarl
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity Standard Json-Input format)
/***************************************************************************************************** ██ █████ ██████ ██ ██ █████ ██████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ███████ ██████ ██ ██ ███████ ██████ ███████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████ ██ ██ ██ ██ ███████ ███████ ██ ██ ██████ ███████ v2: token extended anti-bot measures and transfer fees v1: plain ERC-20 used for LBP launch ******************************************************************************************************/ pragma solidity ^0.8.16; import {IUniswapV2Factory, IUniswapV2Pair, IUniswapV2Router02} from "Uniswap.sol"; import {IERC20} from "IERC20.sol"; contract Jarl is IERC20 { string public constant symbol = "JARL"; string public constant name = "JARL LABS"; uint256 public constant decimals = 18; uint256 public constant totalSupply = 5_000_000 * (10 ** decimals); mapping(address => uint256) balances; mapping(address => mapping(address => uint256)) allowed; address payable owner; /* States of the contract: AIRDROP: no Uniswap liquidity yet, but deployer can send tokens around ANTIBOT: anyone buying in the first few blocks after liquidity added gets rekt SLOW: only allow buying up to 50k tokens at a time (max 100k) for the first 10 minutes NORMAL: normal operations */ enum State {AIRDROP, ANTIBOT, SLOW, NORMAL} // start in airdrop mode, only transfers allowed // until liquidity added State public currentState = State.AIRDROP; /******************************************************** * * ADDRESSES * ********************************************************/ address public constant UNISWAP_V2_ROUTER_ADDRESS = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; /******************************************************** * * DATA FOR BOTS & AMMs * ********************************************************/ // if any address tries to snipe the liquidity add or buy+sell in the same block, // prevent any further txns from them mapping(address => bool) public isBot; IUniswapV2Router02 public immutable uniswapV2Router; IUniswapV2Pair public immutable uniswapV2Pair; mapping(address => bool) isAMM; // honestly using this ritualistically since I'm not sure // what the possibilities are for reentrancy during a Uniswap // swap bool inSwap = false; /******************************************************** * * TRACKING BLOCK NUMBERS & TIMESTEMPS * ********************************************************/ // track last block of buys and sells to catch sandwich bots mapping(address => uint256) lastBuy; mapping(address => uint256) lastSell; // set this to true when sending tokens to Uniswap bool public liquidityAdded = false; // timestamp from liquidity getting added // for the first time uint256 public liquidityAddedTimestamp; /******************************************************** * * PARAMETERS * ********************************************************/ // try to trap sniper bots for first 20s uint256 constant public honeypotDurationSeconds = 20; // limit warmup period to just 5m uint256 constant public warmupDurationSeconds = 60 * 10; // maximum number of tokens you can buy in the first 10 minutes per txn uint256 constant public maxBuyDuringWarmup = 25_000 * (10 ** decimals); // balance of any one wallet can't exceed this amount during warmup period uint256 constant public maxBalanceDuringWarmup = 100_000 * (10 ** decimals); // max amount to let bots trade so they think they can buy // and sell freely in the same transaction (~0.2% of float) uint256 constant botTokenLimit = 10_000 * 10 ** decimals; /******************************************************** * * FEES & RELATED PARAMS * ********************************************************/ uint256 public buyFeePerThousand = 25; uint256 public sellFeePerThousand = 25; // address which don't pay fees on transfer mapping(address => bool) public excludeFromFees; // minimum tokens to accumulate on the contract before swapping // them for ETH uint256 public minTokensForETHSwap = 2_000 * 10 ** decimals; address public feeRecipient; function mustPayFees(address addr) public view returns (bool) { return ( (addr != owner) && (addr != feeRecipient) && (addr != address(this)) && !excludeFromFees[addr] && !isAMM[addr]); } /******************************************************** * * SETTERS * ********************************************************/ function setFeeRecipient(address newRecipient) public { require( owner == msg.sender || feeRecipient == msg.sender, "Only owner or fee recipient allowed to call setFeeRecipient"); feeRecipient = newRecipient; } function setBuyFee(uint256 _buyFeePerThousand) public { require( owner == msg.sender || feeRecipient == msg.sender, "Only owner or fee recipient allowed to call setBuyFee"); buyFeePerThousand = _buyFeePerThousand; } function setSellFee(uint256 _sellFeePerThousand) public { require( owner == msg.sender || feeRecipient == msg.sender, "Only owner or fee recipient allowed to call setSellFee"); sellFeePerThousand = _sellFeePerThousand; } function disableFeesForAddress(address addr) public { require( owner == msg.sender || feeRecipient == msg.sender, "Only owner or fee recipient allowed to call disableFeesForAddress"); excludeFromFees[addr] = true; } function enableFeesForAddress(address addr) public { require( owner == msg.sender || feeRecipient == msg.sender, "Only owner or fee recipient allowed to call enableFeesForAddress"); excludeFromFees[addr] = false; } function setMinTokensToETHSwap(uint256 numTokens) public { require( owner == msg.sender || feeRecipient == msg.sender, "Only owner or fee recipient allowed to call setMinTokensToETHSwap"); minTokensForETHSwap = numTokens; } /******************************************************** * * CONSTRUCTOR * ********************************************************/ constructor() { // remember which address deployed the JARL contract owner = payable(msg.sender); feeRecipient = owner; // move all 5M tokens to deployer account so it // can be split between LBP, Uniswap, &c balances[owner] = totalSupply; emit Transfer(address(0), owner, totalSupply); /* Use the Uniswap V2 router to find the RUG/WETH pair and register it as an AMM so we can figure out which txns are buys/sells vs. just transfers */ uniswapV2Router = IUniswapV2Router02(UNISWAP_V2_ROUTER_ADDRESS); IUniswapV2Factory factory = IUniswapV2Factory(uniswapV2Router.factory()); uniswapV2Pair = IUniswapV2Pair( factory.createPair(address(this), uniswapV2Router.WETH())); isAMM[address(uniswapV2Pair)] = true; isAMM[address(uniswapV2Router)] = true; } // let this contract receive ETH receive() external payable { } /******************************************************** * * EVENTS * ********************************************************/ // emitted for trapped bots event FellInHoney(address indexed bot, uint256 value); // use the same event signature as openzeppelin-contracts/contracts/access/Ownable.sol event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /******************************************************** * * STANDARD ERC-20 * ********************************************************/ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } function allowance(address _owner, address _spender) public view returns (uint256) { // pre-approve the uniswap router to save on number of approvals required if (_spender == address(uniswapV2Router)) { return balances[_owner]; } else { return allowed[_owner][_spender]; } } function _approve(address _owner, address _spender, uint256 _value) internal { allowed[_owner][_spender] = _value; emit Approval(_owner, _spender, _value); } function approve(address _spender, uint256 _value) public returns (bool) { _approve(msg.sender, _spender, _value); return true; } function transfer(address _to, uint256 _value) public returns (bool) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { if (_from != msg.sender && msg.sender != address(uniswapV2Router)) { require(allowed[_from][msg.sender] >= _value, "Insufficient allowance"); allowed[_from][msg.sender] -= _value; } _transfer(_from, _to, _value); return true; } function transferOwnership(address payable newOwner) public { // change contract owner require(msg.sender == owner, "Must be owner"); address payable prevOwner = owner; owner = payable(newOwner); emit OwnershipTransferred(prevOwner, newOwner); } function rescueETH() public { // withdraw ETH which may be accidentally sent to this contract require(msg.sender == owner || msg.sender == feeRecipient, "Must be owner or fee recipient"); payable(msg.sender).transfer(address(this).balance); } function rescueTokens() public { // move tokens from this contract to the owner require(msg.sender == owner || msg.sender == feeRecipient, "Must be owner or fee recipient"); uint256 trappedTokens = balances[address(this)]; if (trappedTokens > 0) { _transfer(address(this), msg.sender, trappedTokens); } } function _burn(address from, uint256 numTokens) internal { require(balances[from] >= numTokens, "Not enough tokens"); _transfer(from, address(0), numTokens); } function burn(uint256 numTokens) public { _burn(msg.sender, numTokens); } function addLiquidity(uint256 numTokens) public payable { require(msg.sender == owner || msg.sender == feeRecipient, "Only owner or fee recipient can call addLiquidity"); require(numTokens > 0, "No tokens for liquidity!"); require(msg.value > 0, "No ETH for liquidity!"); _transfer(msg.sender, address(this), numTokens); _approve(address(this), address(uniswapV2Router), numTokens); uniswapV2Router.addLiquidityETH{value: msg.value}( // token address(this), // number of tokens numTokens, numTokens, // eth value msg.value, // LP token recipient msg.sender, block.timestamp + 15); require( IERC20(uniswapV2Router.WETH()).balanceOf(address(uniswapV2Pair)) >= msg.value, "ETH didn't get to the pair contract"); liquidityAdded = true; // moving tokens to a Uniswap pool looks like selling in the airdrop period but // it's actually the liquidity add event! liquidityAddedTimestamp = block.timestamp; // transition from AIRDROP to catching sniper bots currentState = State.ANTIBOT; } /******************************************************** * * CORE LOGIC (TRANSFER) * ********************************************************/ function isTradingOpen() public view returns (bool) { return (currentState == State.SLOW || currentState == State.NORMAL); } function _whoGetsETH() internal view returns (address) { return (feeRecipient != address(0)) ? feeRecipient : owner; } function tryToConvertFeeTokensToETH() public { // if we have accumulated enough tokens on the contract, sell them for ETH // anyone can call this but the ETH only goes to the feeRecipient address uint256 ethReceived = 0; if (isTradingOpen() && (balances[address(this)] >= minTokensForETHSwap)) { ethReceived = _swapTokensForEth(balances[address(this)]); } if (ethReceived > 0) { payable(_whoGetsETH()).transfer(address(this).balance); } } function _complex_transfer(address _from, address _to, uint256 _value) internal { // transfer logic outside of contrat interactions with Uniswap bool selling = isAMM[_to]; bool buying = isAMM[_from]; /* manage state transitions first */ if (currentState == State.AIRDROP) { require((_from == owner) || (_from == address(this)), "Only deployer and contract can move tokens now"); } else if (currentState == State.ANTIBOT) { if (secondsSinceLiquidityAdded() > honeypotDurationSeconds) { currentState = State.SLOW; } else if (selling) { require(_value < botTokenLimit, "Can't sell more"); } else if (buying) { // if you're trying to buy in the first few blocks then you're // going to have a bad time bool addedBotInHoneypot = _addBotAndOrigin(_to); if (addedBotInHoneypot) { emit FellInHoney(_to, _value); } } } if (currentState == State.SLOW) { if (secondsSinceLiquidityAdded() > warmupDurationSeconds) { currentState = State.NORMAL; } else if (buying) { require(_value <= maxBuyDuringWarmup, "Only small buys during warmup period"); } } // see if we have enough tokens accumulated on the contract to sell some for ETH if (isTradingOpen() && selling) { tryToConvertFeeTokensToETH(); } // subtract tokens from source address before modifying value through // fees or anti-bot tricks balances[_from] -= _value; // compute buy/sell taxes and subtract them from the total uint256 feeValue = 0; if (!inSwap && currentState != State.AIRDROP) { // compute fees if (buying && mustPayFees(_to)) { feeValue = _value * buyFeePerThousand / 1000; } else if (selling && mustPayFees(_from)) { feeValue = _value * sellFeePerThousand / 1000; } } if (feeValue > 0) { _value -= feeValue; balances[address(this)] += feeValue; emit Transfer(_from, address(this), feeValue); } // discourage sandwich bots by burning all their tokens uint256 toBurn = 0; if (!inSwap && currentState != State.AIRDROP) { // try to catch sandwich bots if (buying) { // check if this is a sandwich bot buying after selling // in the same block if (lastSell[_to] == block.number) { bool caughtSandiwchBotBuying = _addBotAndOrigin(_to); if (caughtSandiwchBotBuying) { // burn 99% of their tokens toBurn = _value * 99 / 100; } } } else if (selling) { // check if this is a sandwich bot selling after // buying the same block if (lastBuy[_from] == block.number) { bool caughtSandwichBotSelling = _addBotAndOrigin(_from); if (caughtSandwichBotSelling) { toBurn = _value * 99 / 100; } } } } if (toBurn > 0) { require(toBurn < _value, "Can't burn more than original"); _value -= toBurn; balances[address(0)] += toBurn; emit Transfer(_from, address(0), _value); } // finally give the receiver whatever tokens are left over balances[_to] += _value; emit Transfer(_from, _to, _value); if (currentState == State.SLOW && buying) { require(balances[_to] <= maxBalanceDuringWarmup, "Balance too large for warmup period"); } // record block numbers and timestamps of any buy/sell txns if (buying) { lastBuy[_to] = block.number; } else if (selling) { lastSell[_from] = block.number; } } function _simple_transfer(address _from, address _to, uint256 _value) internal { balances[_from] -= _value; balances[_to] += _value; emit Transfer(_from, _to, _value); } function _transfer(address _from, address _to, uint256 _value) internal { require(balances[_from] >= _value, "Insufficient balance"); require(!isBot[_from] || currentState == State.ANTIBOT, "Sorry bot, can't let you out"); if (inSwap || _from == address(this) || _to == address(this) || ((currentState == State.AIRDROP) && (_from == owner || _from == feeRecipient))) { _simple_transfer(_from, _to, _value); } else { _complex_transfer(_from, _to, _value); } } /******************************************************** * * TIME VIEWS * ********************************************************/ function secondsSinceLiquidityAdded() public view returns (uint256) { if (liquidityAdded) { return block.timestamp - liquidityAddedTimestamp; } else { return 0; } } /******************************************************** * * BOT FUNCTIONS * ********************************************************/ function isSpecialAddress(address addr) public view returns (bool) { return (addr == address(this) || addr == address(0) || addr == owner || addr == feeRecipient || excludeFromFees[addr] || isAMM[addr]); } function _addBot(address addr) internal returns (bool) { // if we already added it then skip the rest of this logic if (isBot[addr]) { return true; } // make sure we don't accidentally blacklist the deployer, contract, or AMM pool if (isSpecialAddress(addr)) { return false; } isBot[addr] = true; return true; } function _addBotAndOrigin(address addr) internal returns (bool) { // add a destination address and the transaction origin address bool successAddr = _addBot(addr); if (successAddr) { _addBot(tx.origin); } return successAddr; } function addBot(address addr) public returns (bool) { require(msg.sender == owner, "Only owner can call addBot"); return _addBot(addr); } function removeBot(address addr) public returns (bool) { // just in case our wacky bot trap logic makes a mistake, add a manual // override require(msg.sender == owner, "Can only be called by owner"); isBot[addr] = false; return true; } /******************************************************** * * AMM FUNCTIONS * ********************************************************/ function addAMM(address addr) public returns (bool) { require(msg.sender == owner, "Can only be called by owner"); isAMM[addr] = true; return true; } function removeAMM(address addr) public returns (bool) { // just in case we add an AMM pair address by accident, remove it using this method require(msg.sender == owner, "Can only be called by owner"); isAMM[addr] = false; return true; } /******************************************************** * * UNISWAP INTERACTIONS * ********************************************************/ function _swapTokensForEth(uint256 numTokens) internal returns (uint256 ethReceived) { uint256 oldETHBalance = address(this).balance; // set this flag so when Uniswap calls back into the contract // we choose paths through the core logic that don't call // into Uniswap again inSwap = true; // generate the uniswap pair path of $SUDORUG -> WETH address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), numTokens); // make the swap // Arguments: // - uint amountIn // - uint amountOutMin // - address[] calldata path // - address to // - uint deadline uniswapV2Router.swapExactTokensForETH( numTokens, 0, // accept any amount of ETH path, address(this), block.timestamp ); inSwap = false; ethReceived = address(this).balance > oldETHBalance ? (address(this).balance - oldETHBalance) : 0; } }
pragma solidity ^0.8.7; 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; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } 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); } 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; }
pragma solidity ^0.8.7; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); }
{ "evmVersion": "istanbul", "optimizer": { "enabled": true, "runs": 200 }, "libraries": { "JARL.sol": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bot","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"FellInHoney","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":"UNISWAP_V2_ROUTER_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","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":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFeePerThousand","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentState","outputs":[{"internalType":"enum Jarl.State","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"disableFeesForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"enableFeesForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"honeypotDurationSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSpecialAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddedTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalanceDuringWarmup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyDuringWarmup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensForETHSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"mustPayFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"secondsSinceLiquidityAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeePerThousand","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFeePerThousand","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setMinTokensToETHSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFeePerThousand","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","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":"_value","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":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tryToConvertFeeTokensToETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"warmupDurationSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526002805460ff60a01b191690556005805460ff199081169091556008805490911690556019600a818155600b919091556200004290601290620003dc565b62000050906107d0620003f1565b600d553480156200006057600080fd5b5060028054336001600160a01b03199182168117909255600e80549091169091179055620000916012600a620003dc565b620000a090624c4b40620003f1565b600280546001600160a01b03908116600090815260208190526040812093909355905416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620000f46012600a620003dc565b6200010390624c4b40620003f1565b60405190815260200160405180910390a3737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa1580156200016d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000193919062000413565b9050806001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020c919062000413565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200025a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000280919062000413565b6001600160a01b0390811660a08190526000908152600460205260408082208054600160ff199182168117909255608051909416835291208054909216179055506200043e565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200031e578160001904821115620003025762000302620002c7565b808516156200031057918102915b93841c9390800290620002e2565b509250929050565b6000826200033757506001620003d6565b816200034657506000620003d6565b81600181146200035f57600281146200036a576200038a565b6001915050620003d6565b60ff8411156200037e576200037e620002c7565b50506001821b620003d6565b5060208310610133831016604e8410600b8410161715620003af575081810a620003d6565b620003bb8383620002dd565b8060001904821115620003d257620003d2620002c7565b0290505b92915050565b6000620003ea838362000326565b9392505050565b60008160001904831182151516156200040e576200040e620002c7565b500290565b6000602082840312156200042657600080fd5b81516001600160a01b0381168114620003ea57600080fd5b60805160a051612948620004a3600039600081816105090152610fec0152600081816103c301528181610af701528181610e5801528181610e8701528181610f55015281816113f3015281816119c501528181611a7e0152611aba01526129486000f3fe6080604052600436106102765760003560e01c806370a082311161014f578063d60f5e66116100c1578063e74b981b1161007a578063e74b981b146107ab578063eec368ac146107cb578063f2fde38b146107e1578063f54d474414610801578063f80f1ace14610821578063ffecf5161461083657600080fd5b8063d60f5e66146106f6578063d944392314610716578063dd62ed3e14610730578063dd8c2e0f14610750578063e18c0e1c14610765578063e57f14e11461077b57600080fd5b806395d89b411161011357806395d89b4114610633578063a284632314610663578063a3a1018b1461068b578063a9059cbb146106a0578063adce4cbf146106c0578063be022c02146106e057600080fd5b806370a08231146105935780637a7b0abb146105c95780637a7c8902146105de5780637bf6f794146105f35780638b4cee081461061357600080fd5b80632481b065116101e857806347ab24f0116101ac57806347ab24f0146104e257806349bd5a5e146104f75780635152d5751461052b57806351c6590a1461054b57806356a060a21461055e5780635fecd9261461057357600080fd5b80632481b06514610447578063313ce5671461045d5780633bbac5791461047257806342966c68146104a257806346904840146104c257600080fd5b80630cc835a31161023a5780630cc835a31461036f57806314bc2e48146103915780631694505e146103b157806318160ddd146103fd57806320800a001461041257806323b872dd1461042757600080fd5b806306fdde03146102825780630919a64f146102cd578063095ea7b3146102f15780630b13ace2146103215780630c3f6acf1461034157600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506102b7604051806040016040528060098152602001684a41524c204c41425360b81b81525081565b6040516102c491906123eb565b60405180910390f35b3480156102d957600080fd5b506102e3600a5481565b6040519081526020016102c4565b3480156102fd57600080fd5b5061031161030c36600461244e565b610856565b60405190151581526020016102c4565b34801561032d57600080fd5b5061031161033c36600461247a565b61086d565b34801561034d57600080fd5b5060025461036290600160a01b900460ff1681565b6040516102c491906124b4565b34801561037b57600080fd5b5061038f61038a3660046124dc565b610905565b005b34801561039d57600080fd5b5061038f6103ac3660046124dc565b61098a565b3480156103bd57600080fd5b506103e57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102c4565b34801561040957600080fd5b506102e3610a1c565b34801561041e57600080fd5b5061038f610a38565b34801561043357600080fd5b506103116104423660046124f5565b610ad6565b34801561045357600080fd5b506102e361025881565b34801561046957600080fd5b506102e3601281565b34801561047e57600080fd5b5061031161048d36600461247a565b60036020526000908152604090205460ff1681565b3480156104ae57600080fd5b5061038f6104bd3660046124dc565b610bd9565b3480156104ce57600080fd5b50600e546103e5906001600160a01b031681565b3480156104ee57600080fd5b5061038f610be3565b34801561050357600080fd5b506103e57f000000000000000000000000000000000000000000000000000000000000000081565b34801561053757600080fd5b5061038f61054636600461247a565b610c75565b61038f6105593660046124dc565b610d26565b34801561056a57600080fd5b506103116110e2565b34801561057f57600080fd5b5061031161058e36600461247a565b611131565b34801561059f57600080fd5b506102e36105ae36600461247a565b6001600160a01b031660009081526020819052604090205490565b3480156105d557600080fd5b506102e3611183565b3480156105ea57600080fd5b506102e36111a4565b3480156105ff57600080fd5b5061038f61060e36600461247a565b6111bd565b34801561061f57600080fd5b5061038f61062e3660046124dc565b611263565b34801561063f57600080fd5b506102b7604051806040016040528060048152602001631290549360e21b81525081565b34801561066f57600080fd5b506103e5737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561069757600080fd5b506102e36112e4565b3480156106ac57600080fd5b506103116106bb36600461244e565b6112fc565b3480156106cc57600080fd5b506103116106db36600461247a565b611309565b3480156106ec57600080fd5b506102e3600d5481565b34801561070257600080fd5b5061031161071136600461247a565b61135f565b34801561072257600080fd5b506008546103119060ff1681565b34801561073c57600080fd5b506102e361074b366004612536565b6113ef565b34801561075c57600080fd5b5061038f611475565b34801561077157600080fd5b506102e3600b5481565b34801561078757600080fd5b5061031161079636600461247a565b600c6020526000908152604090205460ff1681565b3480156107b757600080fd5b5061038f6107c636600461247a565b611505565b3480156107d757600080fd5b506102e360095481565b3480156107ed57600080fd5b5061038f6107fc36600461247a565b6115aa565b34801561080d57600080fd5b5061031161081c36600461247a565b611646565b34801561082d57600080fd5b506102e3601481565b34801561084257600080fd5b5061031161085136600461247a565b611698565b60006108633384846116fe565b5060015b92915050565b60006001600160a01b03821630148061088d57506001600160a01b038216155b806108a557506002546001600160a01b038381169116145b806108bd5750600e546001600160a01b038381169116145b806108e057506001600160a01b0382166000908152600c602052604090205460ff165b806108675750506001600160a01b031660009081526004602052604090205460ff1690565b6002546001600160a01b03163314806109285750600e546001600160a01b031633145b6109855760405162461bcd60e51b815260206004820152603560248201526000805160206128d383398151915260448201527477656420746f2063616c6c2073657442757946656560581b60648201526084015b60405180910390fd5b600a55565b6002546001600160a01b03163314806109ad5750600e546001600160a01b031633145b610a175760405162461bcd60e51b815260206004820152604160248201526000805160206128d383398151915260448201527f77656420746f2063616c6c207365744d696e546f6b656e73546f4554485377616064820152600760fc1b608482015260a40161097c565b600d55565b610a286012600a612669565b610a3590624c4b40612675565b81565b6002546001600160a01b0316331480610a5b5750600e546001600160a01b031633145b610aa75760405162461bcd60e51b815260206004820152601e60248201527f4d757374206265206f776e6572206f722066656520726563697069656e740000604482015260640161097c565b60405133904780156108fc02916000818181858888f19350505050158015610ad3573d6000803e3d6000fd5b50565b60006001600160a01b0384163314801590610b1a5750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b15610bc4576001600160a01b0384166000908152600160209081526040808320338452909152902054821115610b8b5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b604482015260640161097c565b6001600160a01b038416600090815260016020908152604080832033845290915281208054849290610bbe908490612694565b90915550505b610bcf848484611760565b5060019392505050565b610ad333826118f3565b6000610bed6110e2565b8015610c0a5750600d543060009081526020819052604090205410155b15610c2b5730600090815260208190526040902054610c289061195b565b90505b8015610ad357610c39611b6a565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015610c71573d6000803e3d6000fd5b5050565b6002546001600160a01b0316331480610c985750600e546001600160a01b031633145b610d025760405162461bcd60e51b815260206004820152604160248201526000805160206128d383398151915260448201527f77656420746f2063616c6c2064697361626c6546656573466f724164647265736064820152607360f81b608482015260a40161097c565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6002546001600160a01b0316331480610d495750600e546001600160a01b031633145b610daf5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79206f776e6572206f722066656520726563697069656e742063616e2060448201527063616c6c206164644c697175696469747960781b606482015260840161097c565b60008111610dff5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320666f72206c6971756964697479210000000000000000604482015260640161097c565b60003411610e475760405162461bcd60e51b81526020600482015260156024820152744e6f2045544820666f72206c69717569646974792160581b604482015260640161097c565b610e52333083611760565b610e7d307f0000000000000000000000000000000000000000000000000000000000000000836116fe565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663f305d719343084808333610ebd42600f6126a7565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015610f2a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f4f91906126ba565b505050347f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd591906126e8565b6040516370a0823160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015291909116906370a0823190602401602060405180830381865afa15801561103d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110619190612705565b10156110bb5760405162461bcd60e51b815260206004820152602360248201527f455448206469646e27742067657420746f20746865207061697220636f6e74726044820152621858dd60ea1b606482015260840161097c565b506008805460ff19166001179055426009556002805460ff60a01b1916600160a01b179055565b600060028054600160a01b900460ff1660038111156111035761110361249e565b148061112c57506003600254600160a01b900460ff16600381111561112a5761112a61249e565b145b905090565b6002546000906001600160a01b0316331461115e5760405162461bcd60e51b815260040161097c9061271e565b506001600160a01b03166000908152600360205260409020805460ff19169055600190565b60085460009060ff161561119e5760095461112c9042612694565b50600090565b6111b06012600a612669565b610a3590620186a0612675565b6002546001600160a01b03163314806111e05750600e546001600160a01b031633145b611242576040805162461bcd60e51b81526020600482015260248101919091526000805160206128d383398151915260448201527f77656420746f2063616c6c20656e61626c6546656573466f7241646472657373606482015260840161097c565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6002546001600160a01b03163314806112865750600e546001600160a01b031633145b6112df5760405162461bcd60e51b815260206004820152603660248201526000805160206128d383398151915260448201527577656420746f2063616c6c2073657453656c6c46656560501b606482015260840161097c565b600b55565b6112f06012600a612669565b610a35906161a8612675565b6000610863338484611760565b6002546000906001600160a01b031633146113365760405162461bcd60e51b815260040161097c9061271e565b506001600160a01b03166000908152600460205260409020805460ff1916600190811790915590565b6002546000906001600160a01b0383811691161480159061138e5750600e546001600160a01b03838116911614155b80156113a357506001600160a01b0382163014155b80156113c857506001600160a01b0382166000908152600c602052604090205460ff16155b80156108675750506001600160a01b031660009081526004602052604090205460ff161590565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361144957506001600160a01b038216600090815260208190526040902054610867565b506001600160a01b03808316600090815260016020908152604080832093851683529290522054610867565b6002546001600160a01b03163314806114985750600e546001600160a01b031633145b6114e45760405162461bcd60e51b815260206004820152601e60248201527f4d757374206265206f776e6572206f722066656520726563697069656e740000604482015260640161097c565b306000908152602081905260409020548015610ad357610ad3303383611760565b6002546001600160a01b03163314806115285750600e546001600160a01b031633145b6115885760405162461bcd60e51b815260206004820152603b60248201526000805160206128d383398151915260448201527f77656420746f2063616c6c20736574466565526563697069656e740000000000606482015260840161097c565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146115f45760405162461bcd60e51b815260206004820152600d60248201526c26bab9ba1031329037bbb732b960991b604482015260640161097c565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002546000906001600160a01b031633146116735760405162461bcd60e51b815260040161097c9061271e565b506001600160a01b03166000908152600460205260409020805460ff19169055600190565b6002546000906001600160a01b031633146116f55760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c79206f776e65722063616e2063616c6c20616464426f74000000000000604482015260640161097c565b61086782611b9d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166000908152602081905260409020548111156117bf5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161097c565b6001600160a01b03831660009081526003602052604090205460ff16158061180457506001600254600160a01b900460ff1660038111156118025761180261249e565b145b6118505760405162461bcd60e51b815260206004820152601c60248201527f536f72727920626f742c2063616e2774206c657420796f75206f757400000000604482015260640161097c565b60055460ff168061186957506001600160a01b03831630145b8061187c57506001600160a01b03821630145b806118d357506000600254600160a01b900460ff1660038111156118a2576118a261249e565b1480156118d357506002546001600160a01b03848116911614806118d35750600e546001600160a01b038481169116145b156118e8576118e3838383611c05565b505050565b6118e3838383611c94565b6001600160a01b03821660009081526020819052604090205481111561194f5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b604482015260640161097c565b610c7182600083611760565b6005805460ff1916600117905560408051600280825260608201835260009247928492909160208301908036833701905050905030816000815181106119a3576119a361276b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4591906126e8565b81600181518110611a5857611a5861276b565b60200260200101906001600160a01b031690816001600160a01b031681525050611aa3307f0000000000000000000000000000000000000000000000000000000000000000866116fe565b6040516318cbafe560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906318cbafe590611af8908790600090869030904290600401612781565b6000604051808303816000875af1158015611b17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b3f91908101906127f2565b506005805460ff19169055478210611b58576000611b62565b611b628247612694565b949350505050565b600e546000906001600160a01b0316611b8d57506002546001600160a01b031690565b50600e546001600160a01b031690565b6001600160a01b03811660009081526003602052604081205460ff1615611bc657506001919050565b611bcf8261086d565b15611bdc57506000919050565b506001600160a01b03166000908152600360205260409020805460ff1916600190811790915590565b6001600160a01b03831660009081526020819052604081208054839290611c2d908490612694565b90915550506001600160a01b03821660009081526020819052604081208054839290611c5a9084906126a7565b92505081905550816001600160a01b0316836001600160a01b03166000805160206128f38339815191528360405161175391815260200190565b6001600160a01b0380831660009081526004602052604080822054928616825281205460ff928316921690600254600160a01b900460ff166003811115611cdd57611cdd61249e565b03611d6e576002546001600160a01b0386811691161480611d0657506001600160a01b03851630145b611d695760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206465706c6f79657220616e6420636f6e74726163742063616e206d60448201526d6f766520746f6b656e73206e6f7760901b606482015260840161097c565b611e78565b6001600254600160a01b900460ff166003811115611d8e57611d8e61249e565b03611e78576014611d9d611183565b1115611dbb576002805460ff60a01b1916600160a11b179055611e78565b8115611e1957611dcd6012600a612669565b611dd990612710612675565b8310611d695760405162461bcd60e51b815260206004820152600f60248201526e43616e27742073656c6c206d6f726560881b604482015260640161097c565b8015611e78576000611e2a856123c7565b90508015611e7657846001600160a01b03167f83efabacf9f7cf6e679b0fd9de0113ad1e05f72b1955dedadf0e01422a52234a85604051611e6d91815260200190565b60405180910390a25b505b60028054600160a01b900460ff166003811115611e9757611e9761249e565b03611f3e57610258611ea7611183565b1115611ec5576002805460ff60a01b1916600360a01b179055611f3e565b8015611f3e57611ed76012600a612669565b611ee3906161a8612675565b831115611f3e5760405162461bcd60e51b8152602060048201526024808201527f4f6e6c7920736d616c6c206275797320647572696e67207761726d75702070656044820152631c9a5bd960e21b606482015260840161097c565b611f466110e2565b8015611f4f5750815b15611f5c57611f5c610be3565b6001600160a01b03851660009081526020819052604081208054859290611f84908490612694565b909155505060055460009060ff16158015611fbd57506000600254600160a01b900460ff166003811115611fba57611fba61249e565b14155b1561202e57818015611fd35750611fd38561135f565b15611ffa576103e8600a5485611fe99190612675565b611ff391906128b0565b905061202e565b82801561200b575061200b8661135f565b1561202e576103e8600b54856120219190612675565b61202b91906128b0565b90505b80156120965761203e8185612694565b306000908152602081905260408120805492965083929091906120629084906126a7565b909155505060405181815230906001600160a01b038816906000805160206128f38339815191529060200160405180910390a35b60055460009060ff161580156120ca57506000600254600160a01b900460ff1660038111156120c7576120c761249e565b14155b1561217e578215612129576001600160a01b038616600090815260076020526040902054439003612124576000612100876123c7565b90508015612122576064612115876063612675565b61211f91906128b0565b91505b505b61217e565b831561217e576001600160a01b03871660009081526006602052604090205443900361217e57600061215a886123c7565b9050801561217c57606461216f876063612675565b61217991906128b0565b91505b505b8015612252578481106121d35760405162461bcd60e51b815260206004820152601d60248201527f43616e2774206275726e206d6f7265207468616e206f726967696e616c000000604482015260640161097c565b6121dd8186612694565b600080805260208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58054929750839290919061221d9084906126a7565b90915550506040518581526000906001600160a01b038916906000805160206128f38339815191529060200160405180910390a35b6001600160a01b0386166000908152602081905260408120805487929061227a9084906126a7565b92505081905550856001600160a01b0316876001600160a01b03166000805160206128f3833981519152876040516122b491815260200190565b60405180910390a360028054600160a01b900460ff1660038111156122db576122db61249e565b1480156122e55750825b15612376576122f66012600a612669565b61230390620186a0612675565b6001600160a01b03871660009081526020819052604090205411156123765760405162461bcd60e51b815260206004820152602360248201527f42616c616e636520746f6f206c6172676520666f72207761726d7570207065726044820152621a5bd960ea1b606482015260840161097c565b821561239c576001600160a01b03861660009081526006602052604090204390556123be565b83156123be576001600160a01b03871660009081526007602052604090204390555b50505050505050565b6000806123d383611b9d565b90508015610867576123e432611b9d565b5092915050565b600060208083528351808285015260005b81811015612418578581018301518582016040015282016123fc565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610ad357600080fd5b6000806040838503121561246157600080fd5b823561246c81612439565b946020939093013593505050565b60006020828403121561248c57600080fd5b813561249781612439565b9392505050565b634e487b7160e01b600052602160045260246000fd5b60208101600483106124d657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156124ee57600080fd5b5035919050565b60008060006060848603121561250a57600080fd5b833561251581612439565b9250602084013561252581612439565b929592945050506040919091013590565b6000806040838503121561254957600080fd5b823561255481612439565b9150602083013561256481612439565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156125c05781600019048211156125a6576125a661256f565b808516156125b357918102915b93841c939080029061258a565b509250929050565b6000826125d757506001610867565b816125e457506000610867565b81600181146125fa576002811461260457612620565b6001915050610867565b60ff8411156126155761261561256f565b50506001821b610867565b5060208310610133831016604e8410600b8410161715612643575081810a610867565b61264d8383612585565b80600019048211156126615761266161256f565b029392505050565b600061249783836125c8565b600081600019048311821515161561268f5761268f61256f565b500290565b818103818111156108675761086761256f565b808201808211156108675761086761256f565b6000806000606084860312156126cf57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156126fa57600080fd5b815161249781612439565b60006020828403121561271757600080fd5b5051919050565b6020808252601b908201527f43616e206f6e6c792062652063616c6c6564206279206f776e65720000000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127d15784516001600160a01b0316835293830193918301916001016127ac565b50506001600160a01b03969096166060850152505050608001529392505050565b6000602080838503121561280557600080fd5b825167ffffffffffffffff8082111561281d57600080fd5b818501915085601f83011261283157600080fd5b81518181111561284357612843612755565b8060051b604051601f19603f8301168101818110858211171561286857612868612755565b60405291825284820192508381018501918883111561288657600080fd5b938501935b828510156128a45784518452938501939285019261288b565b98975050505050505050565b6000826128cd57634e487b7160e01b600052601260045260246000fd5b50049056fe4f6e6c79206f776e6572206f722066656520726563697069656e7420616c6c6fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220280bb6b499640f16b81805a9e02bcded5e2dead6d3848369d1f0ca495eec13c564736f6c63430008100033
Deployed Bytecode
0x6080604052600436106102765760003560e01c806370a082311161014f578063d60f5e66116100c1578063e74b981b1161007a578063e74b981b146107ab578063eec368ac146107cb578063f2fde38b146107e1578063f54d474414610801578063f80f1ace14610821578063ffecf5161461083657600080fd5b8063d60f5e66146106f6578063d944392314610716578063dd62ed3e14610730578063dd8c2e0f14610750578063e18c0e1c14610765578063e57f14e11461077b57600080fd5b806395d89b411161011357806395d89b4114610633578063a284632314610663578063a3a1018b1461068b578063a9059cbb146106a0578063adce4cbf146106c0578063be022c02146106e057600080fd5b806370a08231146105935780637a7b0abb146105c95780637a7c8902146105de5780637bf6f794146105f35780638b4cee081461061357600080fd5b80632481b065116101e857806347ab24f0116101ac57806347ab24f0146104e257806349bd5a5e146104f75780635152d5751461052b57806351c6590a1461054b57806356a060a21461055e5780635fecd9261461057357600080fd5b80632481b06514610447578063313ce5671461045d5780633bbac5791461047257806342966c68146104a257806346904840146104c257600080fd5b80630cc835a31161023a5780630cc835a31461036f57806314bc2e48146103915780631694505e146103b157806318160ddd146103fd57806320800a001461041257806323b872dd1461042757600080fd5b806306fdde03146102825780630919a64f146102cd578063095ea7b3146102f15780630b13ace2146103215780630c3f6acf1461034157600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506102b7604051806040016040528060098152602001684a41524c204c41425360b81b81525081565b6040516102c491906123eb565b60405180910390f35b3480156102d957600080fd5b506102e3600a5481565b6040519081526020016102c4565b3480156102fd57600080fd5b5061031161030c36600461244e565b610856565b60405190151581526020016102c4565b34801561032d57600080fd5b5061031161033c36600461247a565b61086d565b34801561034d57600080fd5b5060025461036290600160a01b900460ff1681565b6040516102c491906124b4565b34801561037b57600080fd5b5061038f61038a3660046124dc565b610905565b005b34801561039d57600080fd5b5061038f6103ac3660046124dc565b61098a565b3480156103bd57600080fd5b506103e57f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102c4565b34801561040957600080fd5b506102e3610a1c565b34801561041e57600080fd5b5061038f610a38565b34801561043357600080fd5b506103116104423660046124f5565b610ad6565b34801561045357600080fd5b506102e361025881565b34801561046957600080fd5b506102e3601281565b34801561047e57600080fd5b5061031161048d36600461247a565b60036020526000908152604090205460ff1681565b3480156104ae57600080fd5b5061038f6104bd3660046124dc565b610bd9565b3480156104ce57600080fd5b50600e546103e5906001600160a01b031681565b3480156104ee57600080fd5b5061038f610be3565b34801561050357600080fd5b506103e57f000000000000000000000000ea1c0f67deead492ff0561e69b298d43f5af153e81565b34801561053757600080fd5b5061038f61054636600461247a565b610c75565b61038f6105593660046124dc565b610d26565b34801561056a57600080fd5b506103116110e2565b34801561057f57600080fd5b5061031161058e36600461247a565b611131565b34801561059f57600080fd5b506102e36105ae36600461247a565b6001600160a01b031660009081526020819052604090205490565b3480156105d557600080fd5b506102e3611183565b3480156105ea57600080fd5b506102e36111a4565b3480156105ff57600080fd5b5061038f61060e36600461247a565b6111bd565b34801561061f57600080fd5b5061038f61062e3660046124dc565b611263565b34801561063f57600080fd5b506102b7604051806040016040528060048152602001631290549360e21b81525081565b34801561066f57600080fd5b506103e5737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561069757600080fd5b506102e36112e4565b3480156106ac57600080fd5b506103116106bb36600461244e565b6112fc565b3480156106cc57600080fd5b506103116106db36600461247a565b611309565b3480156106ec57600080fd5b506102e3600d5481565b34801561070257600080fd5b5061031161071136600461247a565b61135f565b34801561072257600080fd5b506008546103119060ff1681565b34801561073c57600080fd5b506102e361074b366004612536565b6113ef565b34801561075c57600080fd5b5061038f611475565b34801561077157600080fd5b506102e3600b5481565b34801561078757600080fd5b5061031161079636600461247a565b600c6020526000908152604090205460ff1681565b3480156107b757600080fd5b5061038f6107c636600461247a565b611505565b3480156107d757600080fd5b506102e360095481565b3480156107ed57600080fd5b5061038f6107fc36600461247a565b6115aa565b34801561080d57600080fd5b5061031161081c36600461247a565b611646565b34801561082d57600080fd5b506102e3601481565b34801561084257600080fd5b5061031161085136600461247a565b611698565b60006108633384846116fe565b5060015b92915050565b60006001600160a01b03821630148061088d57506001600160a01b038216155b806108a557506002546001600160a01b038381169116145b806108bd5750600e546001600160a01b038381169116145b806108e057506001600160a01b0382166000908152600c602052604090205460ff165b806108675750506001600160a01b031660009081526004602052604090205460ff1690565b6002546001600160a01b03163314806109285750600e546001600160a01b031633145b6109855760405162461bcd60e51b815260206004820152603560248201526000805160206128d383398151915260448201527477656420746f2063616c6c2073657442757946656560581b60648201526084015b60405180910390fd5b600a55565b6002546001600160a01b03163314806109ad5750600e546001600160a01b031633145b610a175760405162461bcd60e51b815260206004820152604160248201526000805160206128d383398151915260448201527f77656420746f2063616c6c207365744d696e546f6b656e73546f4554485377616064820152600760fc1b608482015260a40161097c565b600d55565b610a286012600a612669565b610a3590624c4b40612675565b81565b6002546001600160a01b0316331480610a5b5750600e546001600160a01b031633145b610aa75760405162461bcd60e51b815260206004820152601e60248201527f4d757374206265206f776e6572206f722066656520726563697069656e740000604482015260640161097c565b60405133904780156108fc02916000818181858888f19350505050158015610ad3573d6000803e3d6000fd5b50565b60006001600160a01b0384163314801590610b1a5750336001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1614155b15610bc4576001600160a01b0384166000908152600160209081526040808320338452909152902054821115610b8b5760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420616c6c6f77616e636560501b604482015260640161097c565b6001600160a01b038416600090815260016020908152604080832033845290915281208054849290610bbe908490612694565b90915550505b610bcf848484611760565b5060019392505050565b610ad333826118f3565b6000610bed6110e2565b8015610c0a5750600d543060009081526020819052604090205410155b15610c2b5730600090815260208190526040902054610c289061195b565b90505b8015610ad357610c39611b6a565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015610c71573d6000803e3d6000fd5b5050565b6002546001600160a01b0316331480610c985750600e546001600160a01b031633145b610d025760405162461bcd60e51b815260206004820152604160248201526000805160206128d383398151915260448201527f77656420746f2063616c6c2064697361626c6546656573466f724164647265736064820152607360f81b608482015260a40161097c565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6002546001600160a01b0316331480610d495750600e546001600160a01b031633145b610daf5760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79206f776e6572206f722066656520726563697069656e742063616e2060448201527063616c6c206164644c697175696469747960781b606482015260840161097c565b60008111610dff5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320666f72206c6971756964697479210000000000000000604482015260640161097c565b60003411610e475760405162461bcd60e51b81526020600482015260156024820152744e6f2045544820666f72206c69717569646974792160581b604482015260640161097c565b610e52333083611760565b610e7d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d836116fe565b6001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1663f305d719343084808333610ebd42600f6126a7565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015610f2a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610f4f91906126ba565b505050347f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd591906126e8565b6040516370a0823160e01b81526001600160a01b037f000000000000000000000000ea1c0f67deead492ff0561e69b298d43f5af153e8116600483015291909116906370a0823190602401602060405180830381865afa15801561103d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110619190612705565b10156110bb5760405162461bcd60e51b815260206004820152602360248201527f455448206469646e27742067657420746f20746865207061697220636f6e74726044820152621858dd60ea1b606482015260840161097c565b506008805460ff19166001179055426009556002805460ff60a01b1916600160a01b179055565b600060028054600160a01b900460ff1660038111156111035761110361249e565b148061112c57506003600254600160a01b900460ff16600381111561112a5761112a61249e565b145b905090565b6002546000906001600160a01b0316331461115e5760405162461bcd60e51b815260040161097c9061271e565b506001600160a01b03166000908152600360205260409020805460ff19169055600190565b60085460009060ff161561119e5760095461112c9042612694565b50600090565b6111b06012600a612669565b610a3590620186a0612675565b6002546001600160a01b03163314806111e05750600e546001600160a01b031633145b611242576040805162461bcd60e51b81526020600482015260248101919091526000805160206128d383398151915260448201527f77656420746f2063616c6c20656e61626c6546656573466f7241646472657373606482015260840161097c565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6002546001600160a01b03163314806112865750600e546001600160a01b031633145b6112df5760405162461bcd60e51b815260206004820152603660248201526000805160206128d383398151915260448201527577656420746f2063616c6c2073657453656c6c46656560501b606482015260840161097c565b600b55565b6112f06012600a612669565b610a35906161a8612675565b6000610863338484611760565b6002546000906001600160a01b031633146113365760405162461bcd60e51b815260040161097c9061271e565b506001600160a01b03166000908152600460205260409020805460ff1916600190811790915590565b6002546000906001600160a01b0383811691161480159061138e5750600e546001600160a01b03838116911614155b80156113a357506001600160a01b0382163014155b80156113c857506001600160a01b0382166000908152600c602052604090205460ff16155b80156108675750506001600160a01b031660009081526004602052604090205460ff161590565b60007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b03160361144957506001600160a01b038216600090815260208190526040902054610867565b506001600160a01b03808316600090815260016020908152604080832093851683529290522054610867565b6002546001600160a01b03163314806114985750600e546001600160a01b031633145b6114e45760405162461bcd60e51b815260206004820152601e60248201527f4d757374206265206f776e6572206f722066656520726563697069656e740000604482015260640161097c565b306000908152602081905260409020548015610ad357610ad3303383611760565b6002546001600160a01b03163314806115285750600e546001600160a01b031633145b6115885760405162461bcd60e51b815260206004820152603b60248201526000805160206128d383398151915260448201527f77656420746f2063616c6c20736574466565526563697069656e740000000000606482015260840161097c565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146115f45760405162461bcd60e51b815260206004820152600d60248201526c26bab9ba1031329037bbb732b960991b604482015260640161097c565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002546000906001600160a01b031633146116735760405162461bcd60e51b815260040161097c9061271e565b506001600160a01b03166000908152600460205260409020805460ff19169055600190565b6002546000906001600160a01b031633146116f55760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c79206f776e65722063616e2063616c6c20616464426f74000000000000604482015260640161097c565b61086782611b9d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166000908152602081905260409020548111156117bf5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161097c565b6001600160a01b03831660009081526003602052604090205460ff16158061180457506001600254600160a01b900460ff1660038111156118025761180261249e565b145b6118505760405162461bcd60e51b815260206004820152601c60248201527f536f72727920626f742c2063616e2774206c657420796f75206f757400000000604482015260640161097c565b60055460ff168061186957506001600160a01b03831630145b8061187c57506001600160a01b03821630145b806118d357506000600254600160a01b900460ff1660038111156118a2576118a261249e565b1480156118d357506002546001600160a01b03848116911614806118d35750600e546001600160a01b038481169116145b156118e8576118e3838383611c05565b505050565b6118e3838383611c94565b6001600160a01b03821660009081526020819052604090205481111561194f5760405162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b604482015260640161097c565b610c7182600083611760565b6005805460ff1916600117905560408051600280825260608201835260009247928492909160208301908036833701905050905030816000815181106119a3576119a361276b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4591906126e8565b81600181518110611a5857611a5861276b565b60200260200101906001600160a01b031690816001600160a01b031681525050611aa3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d866116fe565b6040516318cbafe560e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d16906318cbafe590611af8908790600090869030904290600401612781565b6000604051808303816000875af1158015611b17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b3f91908101906127f2565b506005805460ff19169055478210611b58576000611b62565b611b628247612694565b949350505050565b600e546000906001600160a01b0316611b8d57506002546001600160a01b031690565b50600e546001600160a01b031690565b6001600160a01b03811660009081526003602052604081205460ff1615611bc657506001919050565b611bcf8261086d565b15611bdc57506000919050565b506001600160a01b03166000908152600360205260409020805460ff1916600190811790915590565b6001600160a01b03831660009081526020819052604081208054839290611c2d908490612694565b90915550506001600160a01b03821660009081526020819052604081208054839290611c5a9084906126a7565b92505081905550816001600160a01b0316836001600160a01b03166000805160206128f38339815191528360405161175391815260200190565b6001600160a01b0380831660009081526004602052604080822054928616825281205460ff928316921690600254600160a01b900460ff166003811115611cdd57611cdd61249e565b03611d6e576002546001600160a01b0386811691161480611d0657506001600160a01b03851630145b611d695760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79206465706c6f79657220616e6420636f6e74726163742063616e206d60448201526d6f766520746f6b656e73206e6f7760901b606482015260840161097c565b611e78565b6001600254600160a01b900460ff166003811115611d8e57611d8e61249e565b03611e78576014611d9d611183565b1115611dbb576002805460ff60a01b1916600160a11b179055611e78565b8115611e1957611dcd6012600a612669565b611dd990612710612675565b8310611d695760405162461bcd60e51b815260206004820152600f60248201526e43616e27742073656c6c206d6f726560881b604482015260640161097c565b8015611e78576000611e2a856123c7565b90508015611e7657846001600160a01b03167f83efabacf9f7cf6e679b0fd9de0113ad1e05f72b1955dedadf0e01422a52234a85604051611e6d91815260200190565b60405180910390a25b505b60028054600160a01b900460ff166003811115611e9757611e9761249e565b03611f3e57610258611ea7611183565b1115611ec5576002805460ff60a01b1916600360a01b179055611f3e565b8015611f3e57611ed76012600a612669565b611ee3906161a8612675565b831115611f3e5760405162461bcd60e51b8152602060048201526024808201527f4f6e6c7920736d616c6c206275797320647572696e67207761726d75702070656044820152631c9a5bd960e21b606482015260840161097c565b611f466110e2565b8015611f4f5750815b15611f5c57611f5c610be3565b6001600160a01b03851660009081526020819052604081208054859290611f84908490612694565b909155505060055460009060ff16158015611fbd57506000600254600160a01b900460ff166003811115611fba57611fba61249e565b14155b1561202e57818015611fd35750611fd38561135f565b15611ffa576103e8600a5485611fe99190612675565b611ff391906128b0565b905061202e565b82801561200b575061200b8661135f565b1561202e576103e8600b54856120219190612675565b61202b91906128b0565b90505b80156120965761203e8185612694565b306000908152602081905260408120805492965083929091906120629084906126a7565b909155505060405181815230906001600160a01b038816906000805160206128f38339815191529060200160405180910390a35b60055460009060ff161580156120ca57506000600254600160a01b900460ff1660038111156120c7576120c761249e565b14155b1561217e578215612129576001600160a01b038616600090815260076020526040902054439003612124576000612100876123c7565b90508015612122576064612115876063612675565b61211f91906128b0565b91505b505b61217e565b831561217e576001600160a01b03871660009081526006602052604090205443900361217e57600061215a886123c7565b9050801561217c57606461216f876063612675565b61217991906128b0565b91505b505b8015612252578481106121d35760405162461bcd60e51b815260206004820152601d60248201527f43616e2774206275726e206d6f7265207468616e206f726967696e616c000000604482015260640161097c565b6121dd8186612694565b600080805260208190527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb58054929750839290919061221d9084906126a7565b90915550506040518581526000906001600160a01b038916906000805160206128f38339815191529060200160405180910390a35b6001600160a01b0386166000908152602081905260408120805487929061227a9084906126a7565b92505081905550856001600160a01b0316876001600160a01b03166000805160206128f3833981519152876040516122b491815260200190565b60405180910390a360028054600160a01b900460ff1660038111156122db576122db61249e565b1480156122e55750825b15612376576122f66012600a612669565b61230390620186a0612675565b6001600160a01b03871660009081526020819052604090205411156123765760405162461bcd60e51b815260206004820152602360248201527f42616c616e636520746f6f206c6172676520666f72207761726d7570207065726044820152621a5bd960ea1b606482015260840161097c565b821561239c576001600160a01b03861660009081526006602052604090204390556123be565b83156123be576001600160a01b03871660009081526007602052604090204390555b50505050505050565b6000806123d383611b9d565b90508015610867576123e432611b9d565b5092915050565b600060208083528351808285015260005b81811015612418578581018301518582016040015282016123fc565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610ad357600080fd5b6000806040838503121561246157600080fd5b823561246c81612439565b946020939093013593505050565b60006020828403121561248c57600080fd5b813561249781612439565b9392505050565b634e487b7160e01b600052602160045260246000fd5b60208101600483106124d657634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156124ee57600080fd5b5035919050565b60008060006060848603121561250a57600080fd5b833561251581612439565b9250602084013561252581612439565b929592945050506040919091013590565b6000806040838503121561254957600080fd5b823561255481612439565b9150602083013561256481612439565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156125c05781600019048211156125a6576125a661256f565b808516156125b357918102915b93841c939080029061258a565b509250929050565b6000826125d757506001610867565b816125e457506000610867565b81600181146125fa576002811461260457612620565b6001915050610867565b60ff8411156126155761261561256f565b50506001821b610867565b5060208310610133831016604e8410600b8410161715612643575081810a610867565b61264d8383612585565b80600019048211156126615761266161256f565b029392505050565b600061249783836125c8565b600081600019048311821515161561268f5761268f61256f565b500290565b818103818111156108675761086761256f565b808201808211156108675761086761256f565b6000806000606084860312156126cf57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156126fa57600080fd5b815161249781612439565b60006020828403121561271757600080fd5b5051919050565b6020808252601b908201527f43616e206f6e6c792062652063616c6c6564206279206f776e65720000000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127d15784516001600160a01b0316835293830193918301916001016127ac565b50506001600160a01b03969096166060850152505050608001529392505050565b6000602080838503121561280557600080fd5b825167ffffffffffffffff8082111561281d57600080fd5b818501915085601f83011261283157600080fd5b81518181111561284357612843612755565b8060051b604051601f19603f8301168101818110858211171561286857612868612755565b60405291825284820192508381018501918883111561288657600080fd5b938501935b828510156128a45784518452938501939285019261288b565b98975050505050505050565b6000826128cd57634e487b7160e01b600052601260045260246000fd5b50049056fe4f6e6c79206f776e6572206f722066656520726563697069656e7420616c6c6fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220280bb6b499640f16b81805a9e02bcded5e2dead6d3848369d1f0ca495eec13c564736f6c63430008100033
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.