Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Source Code
Overview
Max Total Supply
1,000,000,000 AIRAS
Holders
2
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
AIRAS
Compiler Version
v0.8.8+commit.dddeac2f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.8;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state-mutability warning without generating byte-code
return msg.data;
}
}
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);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string internal _name;
string internal _symbol;
constructor() {
/* empty constructor, do not forget to set _name and _symbol */
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
}
return true;
}
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
}
function _createInitialSupply(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, 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);
}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() external virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
interface IDexRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
function getAmountsOut(
uint amountIn,
address[] calldata path
) external view returns (uint[] memory amounts);
}
interface IDexFactory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface AggregatorV3Interface {
function latestRoundData() external view returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}
// NOTE: Everything below this point is 1:1 taken from EpicAI.sol but with placeholders so that
// the builder can customise name, symbol and contract identifier.
contract AIRAS is ERC20, Ownable {
uint256 public constant FEE_DENOMINATOR = 10_000;
string private constant __NAME = "AIRAS";
string private constant __SYMBOL = "AIRAS";
uint256 private constant __TOTAL_SUPPLY = 1_000_000_000 * 1e18;
uint256 private constant __INITIAL_BUY_FEE = FEE_DENOMINATOR * 4 / 100;
uint256 private constant __INITIAL_SELL_FEE = FEE_DENOMINATOR * 4 / 100;
// sniper bot prevention
uint256 internal constant FEE_STAGE_1_END_SECONDS = 30;
uint256 internal constant FEE_STAGE_1_BUY_FEE = FEE_DENOMINATOR * 50 / 100;
uint256 internal constant FEE_STAGE_1_SELL_FEE = FEE_DENOMINATOR * 50 / 100;
uint256 internal constant FEE_STAGE_2_END_SECONDS = 120;
uint256 internal constant FEE_STAGE_2_BUY_FEE = FEE_DENOMINATOR * 30 / 100;
uint256 internal constant FEE_STAGE_2_SELL_FEE = FEE_DENOMINATOR * 30 / 100;
uint256 public maxBuyAmount;
uint256 public maxSellAmount;
uint256 public maxWalletBalance;
function getMaxWalletBalance() external view returns (uint256) {
return maxWalletBalance;
}
function getMaxBuyAmount() external view returns (uint256) {
return maxBuyAmount;
}
IDexFactory public immutable uniswapV2Factory;
IDexRouter public immutable uniswapV2Router;
address public uniswapV2Pair;
address public immutable WETH;
bool private swapping;
uint256 public swapTokensAtAmount;
uint256 public swapTokensLastBlock;
address public treasuryAddress;
uint256 public tradingActiveBlock = 0; // 0 means trading is not active
uint256 public tradingActivatedAtTimestamp = 0;
bool public limitsInEffect;
bool public tradingActive;
bool public swapEnabled;
bool public swapFeesOncePerBlock;
address public sniperBotsGuard;
mapping(address => bool) public isSniperBot;
uint256 public buyFee;
uint256 public sellFee;
uint256 public raiseAmount;
// exclude from fees and max transaction amount
mapping (address => bool) private _isExcludedFromFees;
mapping (address => bool) public _isExcludedMaxTransactionAmount;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
mapping (address => bool) public automatedMarketMakerPairs;
// ------------------------------
// Holders enumeration extension
// ------------------------------
mapping(address => bool) private _isHolder;
mapping(address => uint256) private _holderIndex;
address[] private _holders;
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event EnabledTrading(bool tradingActive);
event RemovedLimits();
event ExcludeFromFees(address indexed account, bool isExcluded);
event UpdatedMaxBuyAmount(uint256 newAmount);
event UpdatedMaxSellAmount(uint256 newAmount);
event SetMaxWalletBalance(uint256 newAmount);
event UpdatedTreasuryAddress(address indexed newWallet);
event MaxTransactionExclusion(address _address, bool excluded);
event SwapFeeCollected(uint256 amount);
event SwapBackResult(uint256 amountIn, uint256 amountOut);
event TransferForeignToken(address token, uint256 amount);
event IsSniperBotSet(address account, bool isSniper);
event SniperBotsGuardSet(address account);
event SwapFeesOncePerBlockSet(bool newSetting);
event SetSwapThreshold(uint256 newAmount);
// ----- Holders view helpers -----
function totalHolders() external view returns (uint256) {
return _holders.length;
}
function holders() external view returns (address[] memory) {
return _holders;
}
function holderAt(uint256 index) external view returns (address) {
require(index < _holders.length, "index out of bounds");
return _holders[index];
}
// Internal: maintain holders list
function _updateHolder(address account) private {
if (account == address(0)) {
return;
}
uint256 bal = balanceOf(account);
bool holder = _isHolder[account];
if (bal > 0 && !holder) {
_isHolder[account] = true;
_holderIndex[account] = _holders.length;
_holders.push(account);
} else if (bal == 0 && holder) {
uint256 index = _holderIndex[account];
address last = _holders[_holders.length - 1];
_holders[index] = last;
_holderIndex[last] = index;
_holders.pop();
delete _isHolder[account];
delete _holderIndex[account];
}
}
function setSwapFeesOncePerBlock(bool newSetting) external {
require(
msg.sender == treasuryAddress || msg.sender == owner(),
"only treasuryAddress or owner can change swapFeesOncePerBlock");
swapFeesOncePerBlock = newSetting;
emit SwapFeesOncePerBlockSet(newSetting);
}
bool public newSniperBotDisabledForever;
event NewSniperBotDisabledForever();
function disableNewSniperBotForever() external onlyOwner {
newSniperBotDisabledForever = true;
emit NewSniperBotDisabledForever();
}
function setSniperBot(address account, bool isSniper) external {
require(
msg.sender == sniperBotsGuard || msg.sender == owner(),
"Only owner or sniperBotsGuard can set sniper bots");
if (newSniperBotDisabledForever) {
require(!isSniper, "New sniper bots are disabled forever");
}
isSniperBot[account] = isSniper;
emit IsSniperBotSet(account, isSniper);
}
function setSniperBotsGuard(address account) external {
require(
msg.sender == owner() || msg.sender == sniperBotsGuard,
"Only owner or sniperBotsGuard can set sniper bots guard");
sniperBotsGuard = account;
emit SniperBotsGuardSet(account);
}
function _getDEXRouterAddress() internal view returns (address) {
if (block.chainid == 1) {
return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // uniswap v2
} else if (block.chainid == 56) {
return 0x10ED43C718714eb63d5aA57B78B54704E256024E; // pancakeswap v2
} else {
revert("Chain ID not supported");
}
}
constructor() ERC20() {
address newOwner = msg.sender;
sniperBotsGuard = newOwner;
IDexRouter _uniswapV2Router = IDexRouter(_getDEXRouterAddress());
_excludeFromMaxTransaction(address(_uniswapV2Router), true);
uniswapV2Router = _uniswapV2Router;
uniswapV2Factory = IDexFactory(_uniswapV2Router.factory());
WETH = _uniswapV2Router.WETH();
uniswapV2Pair = uniswapV2Factory.createPair(address(this), WETH);
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
uint256 totalSupply = __TOTAL_SUPPLY;
maxBuyAmount = totalSupply;
maxSellAmount = totalSupply;
maxWalletBalance = totalSupply;
swapTokensAtAmount = totalSupply * 1 / 1_000_000; // very small amount
limitsInEffect = true;
buyFee = __INITIAL_BUY_FEE;
sellFee = __INITIAL_SELL_FEE;
_excludeFromMaxTransaction(newOwner, true);
_excludeFromMaxTransaction(address(this), true);
_excludeFromMaxTransaction(address(0xdead), true);
treasuryAddress = address(newOwner);
excludeFromFees(newOwner, true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
excludeFromFees(treasuryAddress, true);
_createInitialSupply(newOwner, totalSupply);
_updateHolder(newOwner);
transferOwnership(newOwner);
finalize();
}
function finalize() public onlyOwner {
_name = __NAME;
_symbol = __SYMBOL;
}
receive() external payable {}
function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
require(newNum >= (totalSupply() * 1 / 1000) / 1e18, "Cannot set max buy amount lower than 0.1%");
maxBuyAmount = newNum * (10**18);
emit UpdatedMaxBuyAmount(maxBuyAmount);
}
function getFees() external view returns (uint256, uint256) {
return (buyFee, sellFee);
}
bool public feesLocked = false;
event FeesLocked();
function lockFees() external onlyOwner {
feesLocked = true;
emit FeesLocked();
}
bool public feesOnlyLower = false;
event FeesOnlyLower();
function setFeesOnlyLower(bool _feesOnlyLower) external onlyOwner {
feesOnlyLower = _feesOnlyLower;
emit FeesOnlyLower();
}
function setFees(uint256 _buyFee, uint256 _sellFee) external onlyOwner {
require(!feesLocked, "Fees are locked");
require(_buyFee <= FEE_DENOMINATOR * 30 / 100, "Fees must be 30% or less");
require(_sellFee <= FEE_DENOMINATOR * 30 / 100, "Fees must be 30% or less");
if (feesOnlyLower) {
require(_buyFee <= buyFee, "Buy fee can only be lowered");
require(_sellFee <= sellFee, "Sell fee can only be lowered");
}
buyFee = _buyFee;
sellFee = _sellFee;
}
function updateMaxSellAmount(uint256 newNum) external onlyOwner {
require(newNum >= (totalSupply() * 1 / 1000) / 1e18, "Cannot set max sell amount lower than 0.1%");
maxSellAmount = newNum * (10**18);
emit UpdatedMaxSellAmount(maxSellAmount);
}
function removeLimits() external onlyOwner {
limitsInEffect = false;
emit RemovedLimits();
}
function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
_isExcludedMaxTransactionAmount[updAds] = isExcluded;
emit MaxTransactionExclusion(updAds, isExcluded);
}
function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
if(!isEx){
require(updAds != uniswapV2Pair, "Cannot remove uniswap pair from max txn");
}
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
function setMaxWalletBalanceUnits(uint256 newNum) external onlyOwner {
require(newNum >= (totalSupply() * 3 / 1000) / 1e18, "Cannot set max wallet amount lower than 0.3%");
maxWalletBalance = newNum * (10**18);
emit SetMaxWalletBalance(maxWalletBalance);
}
function setSwapThresholdUnits(uint256 newAmount) external {
require(msg.sender == treasuryAddress || msg.sender == owner(),
"only treasuryAddress or owner can change swapThreshold");
swapTokensAtAmount = newAmount * 10**18;
emit SetSwapThreshold(swapTokensAtAmount);
}
function transferForeignToken(address _token, address _to) public returns (bool _sent) {
require(_token != address(0), "_token address cannot be 0");
require(msg.sender == treasuryAddress,
"only treasuryAddress can withdraw");
uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
_sent = IERC20(_token).transfer(_to, _contractBalance);
emit TransferForeignToken(_token, _contractBalance);
}
function withdrawStuckETH() public {
bool success;
require(msg.sender == treasuryAddress, "only treasuryAddress can withdraw");
(success,) = address(msg.sender).call{value: address(this).balance}("");
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function _getBuyFee() public view returns (uint256) {
if (tradingActiveBlock == 0) {
return FEE_DENOMINATOR * 50 / 100; // sniper bots prevention
} else if (
(tradingActivatedAtTimestamp <= block.timestamp)
&&
(block.timestamp <= tradingActivatedAtTimestamp + FEE_STAGE_1_END_SECONDS)
) {
return FEE_STAGE_1_BUY_FEE; // sniper bots prevention
} else if (
(tradingActivatedAtTimestamp + FEE_STAGE_1_END_SECONDS < block.timestamp)
&&
(block.timestamp <= tradingActivatedAtTimestamp + FEE_STAGE_2_END_SECONDS)
){
return FEE_STAGE_2_BUY_FEE; // sniper bots prevention
} else {
if (raiseAmount < 500 ether) {
return buyFee;
} else if (raiseAmount < 700 ether) {
return FEE_DENOMINATOR * 3 / 100; // 5%
} else if (raiseAmount < 900 ether) {
return FEE_DENOMINATOR * 2 / 100; // 2%
} else {
return 0;
}
}
}
function _getSellFee() public view returns (uint256) {
if (tradingActiveBlock == 0) {
return FEE_DENOMINATOR * 50 / 100; // sniper bots prevention
} else if (
(tradingActivatedAtTimestamp <= block.timestamp)
&&
(block.timestamp <= tradingActivatedAtTimestamp + FEE_STAGE_1_END_SECONDS)
) {
return FEE_STAGE_1_SELL_FEE; // sniper bots prevention
} else if (
(tradingActivatedAtTimestamp + FEE_STAGE_1_END_SECONDS < block.timestamp)
&&
(block.timestamp <= tradingActivatedAtTimestamp + FEE_STAGE_2_END_SECONDS)
) {
return FEE_STAGE_2_SELL_FEE; // sniper bots prevention
} else {
if (raiseAmount < 500 ether) {
return sellFee;
} else if (raiseAmount < 700 ether) {
return FEE_DENOMINATOR * 3 / 100; // 5%
} else if (raiseAmount < 900 ether) {
return FEE_DENOMINATOR * 2 / 100; // 2%
} else {
return 0;
}
}
}
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(amount > 0, "amount must be greater than 0");
require(!isSniperBot[from] && !isSniperBot[to], "Sniper bots are not allowed");
if(limitsInEffect){
if (from != owner() && to != owner() && to != address(0) && to != address(0xdead)){
if(!tradingActive){
require(_isExcludedMaxTransactionAmount[from] || _isExcludedMaxTransactionAmount[to], "Trading is not active.");
require(from == owner(), "Trading is not enabled");
}
//when buy
if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
require(amount + balanceOf(to) <= maxWalletBalance, "Cannot Exceed max wallet");
}
//when sell
else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
}
else if (!_isExcludedMaxTransactionAmount[to] && !_isExcludedMaxTransactionAmount[from]){
require(amount + balanceOf(to) <= maxWalletBalance, "Cannot Exceed max wallet");
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if(
canSwap &&
swapEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapping = true;
_swapBack();
swapping = false;
}
bool takeFee = true;
// if any account belongs to _isExcludedFromFee account then remove the fee
if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
// only take fees on Trades, not on wallet transfers
if(takeFee && tradingActiveBlock>0 && (block.number>tradingActiveBlock)) {
uint256 fees = 0;
// on sell
if (automatedMarketMakerPairs[to] && _getSellFee() > 0) {
fees = amount * _getSellFee() / FEE_DENOMINATOR;
}
// on buy
else if(automatedMarketMakerPairs[from] && _getBuyFee() > 0) {
fees = amount * _getBuyFee() / FEE_DENOMINATOR;
}
if(fees > 0){
super._transfer(from, address(this), fees);
_updateHolder(address(this));
}
amount -= fees;
emit SwapFeeCollected(fees);
}
super._transfer(from, to, amount);
// Update holder records for sender and recipient after final transfer
_updateHolder(from);
_updateHolder(to);
}
function _swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WETH;
_approve(
address(this), address(uniswapV2Router), tokenAmount);
uint ethBalanceBeforeSwap = address(this).balance;
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
raiseAmount += address(this).balance - ethBalanceBeforeSwap;
emit SwapBackResult(tokenAmount, address(this).balance - ethBalanceBeforeSwap);
}
function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
require(pair != uniswapV2Pair,
"The pair cannot be removed from automatedMarketMakerPairs");
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
_excludeFromMaxTransaction(pair, value);
emit SetAutomatedMarketMakerPair(pair, value);
}
function createPool() public onlyOwner {
uniswapV2Pair = uniswapV2Factory.createPair(address(this), WETH);
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
}
function setTreasuryAddress(address _TreasuryAddress) external {
require(
msg.sender == treasuryAddress || msg.sender == owner(),
"only treasuryAddress or owner can change treasuryAddress"
);
require(_TreasuryAddress != address(0),
"_TreasuryAddress address cannot be 0");
treasuryAddress = payable(_TreasuryAddress);
emit UpdatedTreasuryAddress(_TreasuryAddress);
}
event SwapTokensLastBlockSet(uint256 newBlock);
event SkipSwapBecauseOfBlock();
uint256 public maxMiliEthForFeeSwap = 3000; // 3 eth
event MaxMiliEthForFeeSwapUpdated(uint256 newMaxMiliEthForFeeSwap);
function setMaxMiliEthForFeeSwap(uint256 newMaxMiliEthForFeeSwap) external onlyOwner {
require(newMaxMiliEthForFeeSwap > 0, "Max mili ETH for fee swap must be greater than 0");
maxMiliEthForFeeSwap = newMaxMiliEthForFeeSwap;
emit MaxMiliEthForFeeSwapUpdated(newMaxMiliEthForFeeSwap);
}
function _swapBack() private {
uint256 tokensToSwap = balanceOf(address(this));
if(tokensToSwap == 0) {return;}
if (swapFeesOncePerBlock && swapTokensLastBlock == block.number) {
emit SkipSwapBecauseOfBlock();
return;
}
swapTokensLastBlock = block.number;
emit SwapTokensLastBlockSet(block.number);
address[] memory _path = new address[](2);
_path[0] = WETH;
_path[1] = address(this);
// sell max X eth worth of tokens
uint256 _maxTokenAmount = uniswapV2Router.getAmountsOut(
maxMiliEthForFeeSwap * 1e18 / 1000,
_path)[1];
if (tokensToSwap > _maxTokenAmount) {
tokensToSwap = _maxTokenAmount;
}
_swapTokensForEth(tokensToSwap);
uint256 ethBalance=address(this).balance;
if (ethBalance > 0) {
bool success;
(success,) = address(treasuryAddress).call{value: ethBalance}("");
}
}
function makeManualSwap() external {
require(_msgSender() == treasuryAddress,
"Only treasuryAddress can manually swap");
uint256 tokenBalance = balanceOf(address(this));
if(tokenBalance > 0){
swapping = true;
_swapBack();
swapping = false;
}
}
// once enabled, can never be turned off
function enableTrading() external onlyOwner {
require(!tradingActive, "Cannot re enable trading");
tradingActive = true;
swapEnabled = true;
emit EnabledTrading(tradingActive);
tradingActiveBlock = block.number;
tradingActivatedAtTimestamp = block.timestamp;
}
function helperBuyFee() public view returns (uint256) { return buyFee; }
function helperMaxSellAmount() public view returns (uint256) { return maxSellAmount; }
function helperRaiseAmount() public view returns (uint256) { return raiseAmount; }
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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":false,"internalType":"bool","name":"tradingActive","type":"bool"}],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesLocked","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesOnlyLower","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isSniper","type":"bool"}],"name":"IsSniperBotSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxMiliEthForFeeSwap","type":"uint256"}],"name":"MaxMiliEthForFeeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[],"name":"NewSniperBotDisabledForever","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SetMaxWalletBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SetSwapThreshold","type":"event"},{"anonymous":false,"inputs":[],"name":"SkipSwapBecauseOfBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"SniperBotsGuardSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"SwapBackResult","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"newSetting","type":"bool"}],"name":"SwapFeesOncePerBlockSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newBlock","type":"uint256"}],"name":"SwapTokensLastBlockSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedTreasuryAddress","type":"event"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createPool","outputs":[],"stateMutability":"nonpayable","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":"disableNewSniperBotForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesOnlyLower","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"helperBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"helperMaxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"helperRaiseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"holderAt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniperBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"makeManualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMiliEthForFeeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newSniperBotDisabledForever","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raiseAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_feesOnlyLower","type":"bool"}],"name":"setFeesOnlyLower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxMiliEthForFeeSwap","type":"uint256"}],"name":"setMaxMiliEthForFeeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setMaxWalletBalanceUnits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isSniper","type":"bool"}],"name":"setSniperBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setSniperBotsGuard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newSetting","type":"bool"}],"name":"setSwapFeesOncePerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapThresholdUnits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_TreasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperBotsGuard","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapFeesOncePerBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensLastBlock","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":"totalHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActivatedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Factory","outputs":[{"internalType":"contract IDexFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e06040526000600d819055600e55601a805462ffff0019169055610bb8601b553480156200002d57600080fd5b50600580546001600160a01b03191633908117909155604051819060009060008051602062004bc0833981519152908290a350600f8054600160201b600160c01b0319163364010000000081029190911790915560006200008d620003c9565b90506200009c8160016200045e565b806001600160a01b031660a0816001600160a01b031660601b81525050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620000f357600080fd5b505afa15801562000108573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012e919062000af0565b6001600160a01b03166080816001600160a01b031660601b81525050806001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200018457600080fd5b505afa15801562000199573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bf919062000af0565b606081811b6001600160601b03191660c0526080516040516364e329cb60e11b81523060048201526001600160a01b039093166024840152901c9063c9c6539690604401602060405180830381600087803b1580156200021e57600080fd5b505af115801562000233573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000259919062000af0565b600980546001600160a01b0319166001600160a01b0392909216918217905562000285906001620004c1565b6b033b2e3c9fd0803ce8000000600681905560078190556008819055620f4240620002b282600162000b38565b620002be919062000b5a565b600a55600f805460ff191660011790556064620002df612710600462000b38565b620002eb919062000b5a565b6011556064620002ff612710600462000b38565b6200030b919062000b5a565b6012556200031b8360016200045e565b620003283060016200045e565b6200033761dead60016200045e565b600c80546001600160a01b0319166001600160a01b0385161790556200035f8360016200052d565b6200036c3060016200052d565b6200037b61dead60016200052d565b600c5462000394906001600160a01b031660016200052d565b620003a08382620005d7565b620003ab83620006bc565b620003b683620008a2565b620003c06200099f565b50505062000c1b565b60004660011415620003ee5750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b46603814156200041157507310ed43c718714eb63d5aa57b78b54704e256024e90565b60405162461bcd60e51b815260206004820152601660248201527f436861696e204944206e6f7420737570706f727465640000000000000000000060448201526064015b60405180910390fd5b6001600160a01b038216600081815260156020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601660205260409020805460ff1916821515179055620004f182826200045e565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620005785760405162461bcd60e51b8152602060048201819052602482015260008051602062004ba0833981519152604482015260640162000455565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200062f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000455565b806002600082825462000643919062000b7d565b90915550506001600160a01b038216600090815260208190526040812080548392906200067290849062000b7d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b038116620006ce5750565b6001600160a01b0381166000908152602081815260408083205460179092529091205460ff16811580159062000702575080155b156200077d5750506001600160a01b03166000818152601760209081526040808320805460ff19166001908117909155601980546018909452918420839055820181559091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0319169091179055565b81158015620007895750805b156200089d576001600160a01b03831660009081526018602052604081205460198054919291620007bd9060019062000b98565b81548110620007d057620007d062000bb2565b600091825260209091200154601980546001600160a01b03909216925082918490811062000802576200080262000bb2565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260189091526040902082905560198054806200084f576200084f62000bc8565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0387168252601781526040808320805460ff19169055601890915281205550505b505050565b6005546001600160a01b03163314620008ed5760405162461bcd60e51b8152602060048201819052602482015260008051602062004ba0833981519152604482015260640162000455565b6001600160a01b038116620009545760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000455565b6005546040516001600160a01b0380841692169060008051602062004bc083398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314620009ea5760405162461bcd60e51b8152602060048201819052602482015260008051602062004ba0833981519152604482015260640162000455565b60408051808201909152600580825264414952415360d81b602090920191825262000a189160039162000a4a565b5060408051808201909152600580825264414952415360d81b602090920191825262000a479160049162000a4a565b50565b82805462000a589062000bde565b90600052602060002090601f01602090048101928262000a7c576000855562000ac7565b82601f1062000a9757805160ff191683800117855562000ac7565b8280016001018555821562000ac7579182015b8281111562000ac757825182559160200191906001019062000aaa565b5062000ad592915062000ad9565b5090565b5b8082111562000ad5576000815560010162000ada565b60006020828403121562000b0357600080fd5b81516001600160a01b038116811462000b1b57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000b555762000b5562000b22565b500290565b60008262000b7857634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000b935762000b9362000b22565b500190565b60008282101562000bad5762000bad62000b22565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600181811c9082168062000bf357607f821691505b6020821081141562000c1557634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a05160601c60c05160601c613f1b62000c8560003960008181610a5c01528181611f490152818161312001526136f0015260008181610516015281816131aa01528181613748015261378601526000818161076d0152611f710152613f1b6000f3fe60806040526004361061044b5760003560e01c80638366e79a11610234578063bbc0c7421161012e578063db8d55f1116100b6578063e67e7c5e1161007a578063e67e7c5e14610cde578063ee40166e14610cf3578063f2fde38b14610d09578063f5648a4f14610d29578063f5dbbb3714610d3e57600080fd5b8063db8d55f114610c0a578063dc3f0d0f14610c32578063dd62ed3e14610c52578063e213511f14610c98578063e2f4560514610cc857600080fd5b8063c5f956af116100fd578063c5f956af14610b89578063ce85541314610ba9578063d09a6a1e14610bbe578063d73792a914610bde578063db638f0b14610bf457600080fd5b8063bbc0c74214610b1f578063bbde77c114610b3e578063c024666814610b54578063c43d806614610b7457600080fd5b8063a5727e78116101bc578063ae20f3e411610180578063ae20f3e414610a7e578063ae29bdd914610a9e578063b0129fad14610ab4578063b4e4e4a114610ad5578063b62496f514610aef57600080fd5b8063a5727e78146109e0578063a6ff07dc146109f5578063a9059cbb14610a15578063ab36629214610a35578063ad5c464814610a4a57600080fd5b80638e599acd116102035780638e599acd1461096157806395d89b41146109765780639a06b1131461098b5780639a7a23d6146109a0578063a457c2d7146109c057600080fd5b80638366e79a146108f857806388e765ff146109185780638a8c523c1461092e5780638da5cb5b1461094357600080fd5b806349bd5a5e116103455780636605bfda116102cd578063715018a611610291578063715018a614610864578063751039fc146108795780637571336a1461088e57806379853f5a146108ae5780638188f71c146108d657600080fd5b80636605bfda146107ce57806366d602ae146107ee5780636ddd1713146108045780636ece5e7e1461082457806370a082311461084457600080fd5b8063503ac64911610314578063503ac6491461073157806353d74fdf1461074657806359d0f7131461075b5780635a27a1f91461078f5780635fdc1fd2146107ae57600080fd5b806349bd5a5e146106c25780634a62bb65146106e25780634bb278f3146106fc5780634e0f886b1461071157600080fd5b806323b872dd116103d3578063320644cc11610397578063320644cc14610641578063395093511461066157806339cf336c1461068157806341d4cfa91461069657806347062402146106ac57600080fd5b806323b872dd146105ba5780632b14ca56146105da5780632be32b61146105f05780632c04d82d14610610578063313ce5671461062557600080fd5b80631694505e1161041a5780631694505e1461050457806318160ddd14610550578063197bc3361461056f5780631aeb8ee41461058f5780631d7636fc146105a557600080fd5b806306fdde0314610457578063095ea7b3146104825780630b78f9c0146104b257806310d5de53146104d457600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d5e565b6040516104799190613957565b60405180910390f35b34801561048e57600080fd5b506104a261049d3660046139c1565b610df0565b6040519015158152602001610479565b3480156104be57600080fd5b506104d26104cd3660046139ed565b610e06565b005b3480156104e057600080fd5b506104a26104ef366004613a0f565b60156020526000908152604090205460ff1681565b34801561051057600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610479565b34801561055c57600080fd5b506002545b604051908152602001610479565b34801561057b57600080fd5b5061053861058a366004613a33565b611009565b34801561059b57600080fd5b50610561601b5481565b3480156105b157600080fd5b50610561611081565b3480156105c657600080fd5b506104a26105d5366004613a4c565b611183565b3480156105e657600080fd5b5061056160125481565b3480156105fc57600080fd5b506104d261060b366004613a33565b61122d565b34801561061c57600080fd5b5061056161133a565b34801561063157600080fd5b5060405160128152602001610479565b34801561064d57600080fd5b506104d261065c366004613a33565b6113e3565b34801561066d57600080fd5b506104a261067c3660046139c1565b6114b8565b34801561068d57600080fd5b506104d26114f4565b3480156106a257600080fd5b50610561600e5481565b3480156106b857600080fd5b5061056160115481565b3480156106ce57600080fd5b50600954610538906001600160a01b031681565b3480156106ee57600080fd5b50600f546104a29060ff1681565b34801561070857600080fd5b506104d2611556565b34801561071d57600080fd5b506104d261072c366004613a33565b6115dc565b34801561073d57600080fd5b50600654610561565b34801561075257600080fd5b50601954610561565b34801561076757600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b34801561079b57600080fd5b50601a546104a290610100900460ff1681565b3480156107ba57600080fd5b50601a546104a29062010000900460ff1681565b3480156107da57600080fd5b506104d26107e9366004613a0f565b6116e5565b3480156107fa57600080fd5b5061056160075481565b34801561081057600080fd5b50600f546104a29062010000900460ff1681565b34801561083057600080fd5b506104d261083f366004613a9b565b611826565b34801561085057600080fd5b5061056161085f366004613a0f565b611980565b34801561087057600080fd5b506104d261199b565b34801561088557600080fd5b506104d2611a0f565b34801561089a57600080fd5b506104d26108a9366004613a9b565b611a6e565b3480156108ba57600080fd5b50600f546105389064010000000090046001600160a01b031681565b3480156108e257600080fd5b506108eb611b36565b6040516104799190613b18565b34801561090457600080fd5b506104a2610913366004613b2b565b611b97565b34801561092457600080fd5b5061056160065481565b34801561093a57600080fd5b506104d2611d65565b34801561094f57600080fd5b506005546001600160a01b0316610538565b34801561096d57600080fd5b506104d2611e43565b34801561098257600080fd5b5061046c611ef3565b34801561099757600080fd5b506104d2611f02565b3480156109ac57600080fd5b506104d26109bb366004613a9b565b612019565b3480156109cc57600080fd5b506104a26109db3660046139c1565b6120d5565b3480156109ec57600080fd5b50600854610561565b348015610a0157600080fd5b506104d2610a10366004613a33565b612177565b348015610a2157600080fd5b506104a2610a303660046139c1565b61223f565b348015610a4157600080fd5b506104d261224c565b348015610a5657600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b348015610a8a57600080fd5b506104d2610a99366004613b59565b6122b0565b348015610aaa57600080fd5b50610561600b5481565b348015610ac057600080fd5b50600f546104a2906301000000900460ff1681565b348015610ae157600080fd5b50601a546104a29060ff1681565b348015610afb57600080fd5b506104a2610b0a366004613a0f565b60166020526000908152604090205460ff1681565b348015610b2b57600080fd5b50600f546104a290610100900460ff1681565b348015610b4a57600080fd5b5061056160085481565b348015610b6057600080fd5b506104d2610b6f366004613a9b565b612392565b348015610b8057600080fd5b50601154610561565b348015610b9557600080fd5b50600c54610538906001600160a01b031681565b348015610bb557600080fd5b50600754610561565b348015610bca57600080fd5b506104d2610bd9366004613b59565b61241b565b348015610bea57600080fd5b5061056161271081565b348015610c0057600080fd5b5061056160135481565b348015610c1657600080fd5b5060115460125460408051928352602083019190915201610479565b348015610c3e57600080fd5b506104d2610c4d366004613a33565b612486565b348015610c5e57600080fd5b50610561610c6d366004613b2b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ca457600080fd5b506104a2610cb3366004613a0f565b60106020526000908152604090205460ff1681565b348015610cd457600080fd5b50610561600a5481565b348015610cea57600080fd5b50601354610561565b348015610cff57600080fd5b50610561600d5481565b348015610d1557600080fd5b506104d2610d24366004613a0f565b61258d565b348015610d3557600080fd5b506104d2612678565b348015610d4a57600080fd5b506104d2610d59366004613a0f565b6126f0565b606060038054610d6d90613b76565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9990613b76565b8015610de65780601f10610dbb57610100808354040283529160200191610de6565b820191906000526020600020905b815481529060010190602001808311610dc957829003601f168201915b5050505050905090565b6000610dfd3384846127e9565b50600192915050565b6005546001600160a01b03163314610e395760405162461bcd60e51b8152600401610e3090613bb1565b60405180910390fd5b601a54610100900460ff1615610e835760405162461bcd60e51b815260206004820152600f60248201526e1199595cc8185c99481b1bd8dad959608a1b6044820152606401610e30565b6064610e92612710601e613bfc565b610e9c9190613c1b565b821115610ee65760405162461bcd60e51b815260206004820152601860248201527746656573206d75737420626520333025206f72206c65737360401b6044820152606401610e30565b6064610ef5612710601e613bfc565b610eff9190613c1b565b811115610f495760405162461bcd60e51b815260206004820152601860248201527746656573206d75737420626520333025206f72206c65737360401b6044820152606401610e30565b601a5462010000900460ff1615610ffe57601154821115610fac5760405162461bcd60e51b815260206004820152601b60248201527f427579206665652063616e206f6e6c79206265206c6f776572656400000000006044820152606401610e30565b601254811115610ffe5760405162461bcd60e51b815260206004820152601c60248201527f53656c6c206665652063616e206f6e6c79206265206c6f7765726564000000006044820152606401610e30565b601191909155601255565b60195460009082106110535760405162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b6044820152606401610e30565b6019828154811061106657611066613c3d565b6000918252602090912001546001600160a01b031692915050565b6000600d54600014156110ac57606461109d6127106032613bfc565b6110a79190613c1b565b905090565b42600e54111580156110cc5750601e600e546110c89190613c53565b4211155b156110e057606461109d6127106032613bfc565b42601e600e546110f09190613c53565b10801561110b57506078600e546111079190613c53565b4211155b1561111f57606461109d612710601e613bfc565b681b1ae4d6e2ef5000006013541015611139575060125490565b6825f273933db5700000601354101561115b57606461109d6127106003613bfc565b6830ca024f987b900000601354101561117d57606461109d6127106002613bfc565b50600090565b600061119084848461290d565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112155760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e30565b61122285338584036127e9565b506001949350505050565b6005546001600160a01b031633146112575760405162461bcd60e51b8152600401610e3090613bb1565b670de0b6b3a76400006103e861126c60025490565b611277906001613bfc565b6112819190613c1b565b61128b9190613c1b565b8110156112ec5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610e30565b6112fe81670de0b6b3a7640000613bfc565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6000600d546000141561135657606461109d6127106032613bfc565b42600e54111580156113765750601e600e546113729190613c53565b4211155b1561138a57606461109d6127106032613bfc565b42601e600e5461139a9190613c53565b1080156113b557506078600e546113b19190613c53565b4211155b156113c957606461109d612710601e613bfc565b681b1ae4d6e2ef5000006013541015611139575060115490565b600c546001600160a01b031633148061140657506005546001600160a01b031633145b6114715760405162461bcd60e51b815260206004820152603660248201527f6f6e6c7920747265617375727941646472657373206f72206f776e65722063616044820152751b8818da185b99d9481cddd85c151a1c995cda1bdb1960521b6064820152608401610e30565b61148381670de0b6b3a7640000613bfc565b600a8190556040519081527fdd535c8a292f211fa216a760a7e5e8a29a1f222e36267d33660451d7719907a69060200161132f565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dfd9185906114ef908690613c53565b6127e9565b6005546001600160a01b0316331461151e5760405162461bcd60e51b8152600401610e3090613bb1565b601a805460ff191660011790556040517fb065dde7eb4e066090ff22ddf4310714e74b5fce3c0429839c0e6289d4e661b690600090a1565b6005546001600160a01b031633146115805760405162461bcd60e51b8152600401610e3090613bb1565b60408051808201909152600580825264414952415360d81b60209092019182526115ac916003916138be565b5060408051808201909152600580825264414952415360d81b60209092019182526115d9916004916138be565b50565b6005546001600160a01b031633146116065760405162461bcd60e51b8152600401610e3090613bb1565b670de0b6b3a76400006103e861161b60025490565b611626906003613bfc565b6116309190613c1b565b61163a9190613c1b565b81101561169e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610e30565b6116b081670de0b6b3a7640000613bfc565b60088190556040519081527f5843675a6d0f5f294eee940af985e1e166187069f75150b237995a032d62ed0a9060200161132f565b600c546001600160a01b031633148061170857506005546001600160a01b031633145b61177a5760405162461bcd60e51b815260206004820152603860248201527f6f6e6c7920747265617375727941646472657373206f72206f776e657220636160448201527f6e206368616e67652074726561737572794164647265737300000000000000006064820152608401610e30565b6001600160a01b0381166117dc5760405162461bcd60e51b8152602060048201526024808201527f5f54726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610e30565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b600f5464010000000090046001600160a01b031633148061185157506005546001600160a01b031633145b6118b75760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79206f776e6572206f7220736e69706572426f747347756172642063616044820152706e2073657420736e6970657220626f747360781b6064820152608401610e30565b601a5460ff161561191c57801561191c5760405162461bcd60e51b8152602060048201526024808201527f4e657720736e6970657220626f7473206172652064697361626c656420666f7260448201526332bb32b960e11b6064820152608401610e30565b6001600160a01b038216600081815260106020908152604091829020805460ff19168515159081179091558251938452908301527fce527251374acbd40073242991617eaf99a06736f116cca8b62c3f56b343d77591015b60405180910390a15050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146119c55760405162461bcd60e51b8152600401610e3090613bb1565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611a395760405162461bcd60e51b8152600401610e3090613bb1565b600f805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a985760405162461bcd60e51b8152600401610e3090613bb1565b80611b0b576009546001600160a01b0383811691161415611b0b5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610e30565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b60606019805480602002602001604051908101604052809291908181526020018280548015610de657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611b70575050505050905090565b60006001600160a01b038316611bef5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610e30565b600c546001600160a01b03163314611c195760405162461bcd60e51b8152600401610e3090613c6b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611c5b57600080fd5b505afa158015611c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c939190613cac565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611ce157600080fd5b505af1158015611cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d199190613cc5565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611d8f5760405162461bcd60e51b8152600401610e3090613bb1565b600f54610100900460ff1615611de75760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610e30565b600f80546201010062ffff0019909116179081905560405161010090910460ff16151581527fe8a59d3db38e5220ac9d0f72590b7ac876e0916dc8f4db3e7614e6f91fe520899060200160405180910390a143600d5542600e55565b600c546001600160a01b0316336001600160a01b031614611eb55760405162461bcd60e51b815260206004820152602660248201527f4f6e6c79207472656173757279416464726573732063616e206d616e75616c6c60448201526507920737761760d41b6064820152608401610e30565b6000611ec030611980565b905080156115d9576009805460ff60a01b1916600160a01b179055611ee3613064565b6009805460ff60a01b1916905550565b606060048054610d6d90613b76565b6005546001600160a01b03163314611f2c5760405162461bcd60e51b8152600401610e3090613bb1565b6040516364e329cb60e11b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063c9c6539690604401602060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fed9190613ce2565b600980546001600160a01b0319166001600160a01b03929092169182179055612017906001613300565b565b6005546001600160a01b031633146120435760405162461bcd60e51b8152600401610e3090613bb1565b6009546001600160a01b03838116911614156120c75760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610e30565b6120d18282613300565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054600019811461216d57828110156121605760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e30565b61216d33858584036127e9565b5060019392505050565b6005546001600160a01b031633146121a15760405162461bcd60e51b8152600401610e3090613bb1565b6000811161220a5760405162461bcd60e51b815260206004820152603060248201527f4d6178206d696c692045544820666f72206665652073776170206d757374206260448201526f0652067726561746572207468616e20360841b6064820152608401610e30565b601b8190556040518181527f8861c91aa2babbcd81e43611df3c922e285cbdbfc130048c644008f4f0026e7a9060200161132f565b6000610dfd33848461290d565b6005546001600160a01b031633146122765760405162461bcd60e51b8152600401610e3090613bb1565b601a805461ff0019166101001790556040517f8e2ddf3e3a4adecfbb403ceb7654310a3e2a1a12e0ff20b9f11b3f43dc9e53ec90600090a1565b600c546001600160a01b03163314806122d357506005546001600160a01b031633145b6123455760405162461bcd60e51b815260206004820152603d60248201527f6f6e6c7920747265617375727941646472657373206f72206f776e657220636160448201527f6e206368616e67652073776170466565734f6e6365506572426c6f636b0000006064820152608401610e30565b600f805482151563010000000263ff000000199091161790556040517f2fa5fbcffe30a751dee9af9329ea1957ba6d758d5c4a70839ceeb35419b527ff9061132f90831515815260200190565b6005546001600160a01b031633146123bc5760405162461bcd60e51b8152600401610e3090613bb1565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146124455760405162461bcd60e51b8152600401610e3090613bb1565b601a805462ff0000191662010000831515021790556040517f176352ccb4a25e1868a6d5942387e086fc33d7a3498ab4f7eaf1905d24510a7990600090a150565b6005546001600160a01b031633146124b05760405162461bcd60e51b8152600401610e3090613bb1565b670de0b6b3a76400006103e86124c560025490565b6124d0906001613bfc565b6124da9190613c1b565b6124e49190613c1b565b8110156125465760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610e30565b61255881670de0b6b3a7640000613bfc565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161132f565b6005546001600160a01b031633146125b75760405162461bcd60e51b8152600401610e3090613bb1565b6001600160a01b03811661261c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e30565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546000906001600160a01b031633146126a55760405162461bcd60e51b8152600401610e3090613c6b565b60405133904790600081818185875af1925050503d80600081146126e5576040519150601f19603f3d011682016040523d82523d6000602084013e6126ea565b606091505b50505050565b6005546001600160a01b031633148061271b5750600f5464010000000090046001600160a01b031633145b61278d5760405162461bcd60e51b815260206004820152603760248201527f4f6e6c79206f776e6572206f7220736e69706572426f7473477561726420636160448201527f6e2073657420736e6970657220626f74732067756172640000000000000000006064820152608401610e30565b600f8054640100000000600160c01b0319166401000000006001600160a01b038416908102919091179091556040519081527f7d336579c7b78abefdb31775591f73094fe64f8cc10fa89faaf23b7957acd0529060200161132f565b6001600160a01b03831661284b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e30565b6001600160a01b0382166128ac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e30565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166129335760405162461bcd60e51b8152600401610e3090613cff565b6001600160a01b0382166129595760405162461bcd60e51b8152600401610e3090613d44565b600081116129a95760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610e30565b6001600160a01b03831660009081526010602052604090205460ff161580156129eb57506001600160a01b03821660009081526010602052604090205460ff16155b612a375760405162461bcd60e51b815260206004820152601b60248201527f536e6970657220626f747320617265206e6f7420616c6c6f77656400000000006044820152606401610e30565b600f5460ff1615612de5576005546001600160a01b03848116911614801590612a6e57506005546001600160a01b03838116911614155b8015612a8257506001600160a01b03821615155b8015612a9957506001600160a01b03821661dead14155b15612de557600f54610100900460ff16612b87576001600160a01b03831660009081526015602052604090205460ff1680612aec57506001600160a01b03821660009081526015602052604090205460ff165b612b315760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610e30565b6005546001600160a01b03848116911614612b875760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610e30565b6001600160a01b03831660009081526016602052604090205460ff168015612bc857506001600160a01b03821660009081526015602052604090205460ff16155b15612c9457600654811115612c305760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610e30565b600854612c3c83611980565b612c469083613c53565b1115612c8f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610e30565b612de5565b6001600160a01b03821660009081526016602052604090205460ff168015612cd557506001600160a01b03831660009081526015602052604090205460ff16155b15612d3f57600754811115612c8f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610e30565b6001600160a01b03821660009081526015602052604090205460ff16158015612d8157506001600160a01b03831660009081526015602052604090205460ff16155b15612de557600854612d9283611980565b612d9c9083613c53565b1115612de55760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610e30565b6000612df030611980565b600a5490915081108015908190612e0f5750600f5462010000900460ff165b8015612e255750600954600160a01b900460ff16155b8015612e4a57506001600160a01b03851660009081526016602052604090205460ff16155b8015612e6f57506001600160a01b03851660009081526014602052604090205460ff16155b8015612e9457506001600160a01b03841660009081526014602052604090205460ff16155b15612ec2576009805460ff60a01b1916600160a01b179055612eb4613064565b6009805460ff60a01b191690555b6001600160a01b03851660009081526014602052604090205460019060ff1680612f0457506001600160a01b03851660009081526014602052604090205460ff165b15612f0d575060005b808015612f1c57506000600d54115b8015612f295750600d5443115b1561303f576001600160a01b03851660009081526016602052604081205460ff168015612f5d57506000612f5b611081565b115b15612f8857612710612f6d611081565b612f779087613bfc565b612f819190613c1b565b9050612fde565b6001600160a01b03871660009081526016602052604090205460ff168015612fb757506000612fb561133a565b115b15612fde57612710612fc761133a565b612fd19087613bfc565b612fdb9190613c1b565b90505b8015612ff857612fef87308361336a565b612ff8306134bf565b6130028186613d87565b94507fff9891726fac64d7faf6508ce9e13ff651decd82208eeef75b4070d78bdfbdf68160405161303591815260200190565b60405180910390a1505b61304a86868661336a565b613053866134bf565b61305c856134bf565b505050505050565b600061306f30611980565b9050806130795750565b600f546301000000900460ff168015613093575043600b54145b156130c4576040517fdf46401eb14e1af2c0c5feb3f3e452741543196d05bd8fbd21d02ea36c37c66e90600090a150565b43600b8190556040519081527f5f21bcd6e339b486d1b832e2afa5445d204e289a043a519ef679765a05b5e8659060200160405180910390a16040805160028082526060820183526000926020830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000008160008151811061315257613152613c3d565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061318657613186613c3d565b60200260200101906001600160a01b031690816001600160a01b03168152505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d06ca61f6103e8601b54670de0b6b3a76400006131f09190613bfc565b6131fa9190613c1b565b846040518363ffffffff1660e01b8152600401613218929190613db4565b60006040518083038186803b15801561323057600080fd5b505afa158015613244573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261326c9190810190613dd5565b60018151811061327e5761327e613c3d565b6020026020010151905080831115613294578092505b61329d83613699565b4780156126ea57600c546040516000916001600160a01b03169083908381818185875af1925050503d80600081146132f1576040519150601f19603f3d011682016040523d82523d6000602084013e6132f6565b606091505b5050505050505050565b6001600160a01b0382166000908152601660205260409020805460ff191682151517905561332e8282613862565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166133905760405162461bcd60e51b8152600401610e3090613cff565b6001600160a01b0382166133b65760405162461bcd60e51b8152600401610e3090613d44565b6001600160a01b0383166000908152602081905260409020548181101561342e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e30565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613465908490613c53565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134b191815260200190565b60405180910390a350505050565b6001600160a01b0381166134d05750565b60006134db82611980565b6001600160a01b03831660009081526017602052604090205490915060ff168115801590613507575080155b156135815750506001600160a01b03166000818152601760209081526040808320805460ff19166001908117909155601980546018909452918420839055820181559091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0319169091179055565b8115801561358c5750805b15613694576001600160a01b038316600090815260186020526040812054601980549192916135bd90600190613d87565b815481106135cd576135cd613c3d565b600091825260209091200154601980546001600160a01b0390921692508291849081106135fc576135fc613c3d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152601890915260409020829055601980548061364657613646613e93565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0387168252601781526040808320805460ff19169055601890915281205550505b505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106136ce576136ce613c3d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061372257613722613c3d565b60200260200101906001600160a01b031690816001600160a01b03168152505061376d307f0000000000000000000000000000000000000000000000000000000000000000846127e9565b60405163791ac94760e01b815247906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906137c4908690600090879030904290600401613ea9565b600060405180830381600087803b1580156137de57600080fd5b505af11580156137f2573d6000803e3d6000fd5b5050505080476138029190613d87565b601360008282546138139190613c53565b909155507f877973055cc76aebb6c1702046758fb56e804bca4a8bf998824b99ed02bbbafd9050836138458347613d87565b6040805192835260208301919091520160405180910390a1505050565b6001600160a01b038216600081815260156020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101611974565b8280546138ca90613b76565b90600052602060002090601f0160209004810192826138ec5760008555613932565b82601f1061390557805160ff1916838001178555613932565b82800160010185558215613932579182015b82811115613932578251825591602001919060010190613917565b5061393e929150613942565b5090565b5b8082111561393e5760008155600101613943565b600060208083528351808285015260005b8181101561398457858101830151858201604001528201613968565b81811115613996576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146115d957600080fd5b600080604083850312156139d457600080fd5b82356139df816139ac565b946020939093013593505050565b60008060408385031215613a0057600080fd5b50508035926020909101359150565b600060208284031215613a2157600080fd5b8135613a2c816139ac565b9392505050565b600060208284031215613a4557600080fd5b5035919050565b600080600060608486031215613a6157600080fd5b8335613a6c816139ac565b92506020840135613a7c816139ac565b929592945050506040919091013590565b80151581146115d957600080fd5b60008060408385031215613aae57600080fd5b8235613ab9816139ac565b91506020830135613ac981613a8d565b809150509250929050565b600081518084526020808501945080840160005b83811015613b0d5781516001600160a01b031687529582019590820190600101613ae8565b509495945050505050565b602081526000613a2c6020830184613ad4565b60008060408385031215613b3e57600080fd5b8235613b49816139ac565b91506020830135613ac9816139ac565b600060208284031215613b6b57600080fd5b8135613a2c81613a8d565b600181811c90821680613b8a57607f821691505b60208210811415613bab57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613c1657613c16613be6565b500290565b600082613c3857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60008219821115613c6657613c66613be6565b500190565b60208082526021908201527f6f6e6c79207472656173757279416464726573732063616e20776974686472616040820152607760f81b606082015260800190565b600060208284031215613cbe57600080fd5b5051919050565b600060208284031215613cd757600080fd5b8151613a2c81613a8d565b600060208284031215613cf457600080fd5b8151613a2c816139ac565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613d9957613d99613be6565b500390565b634e487b7160e01b600052604160045260246000fd5b828152604060208201526000613dcd6040830184613ad4565b949350505050565b60006020808385031215613de857600080fd5b825167ffffffffffffffff80821115613e0057600080fd5b818501915085601f830112613e1457600080fd5b815181811115613e2657613e26613d9e565b8060051b604051601f19603f83011681018181108582111715613e4b57613e4b613d9e565b604052918252848201925083810185019188831115613e6957600080fd5b938501935b82851015613e8757845184529385019392850192613e6e565b98975050505050505050565b634e487b7160e01b600052603160045260246000fd5b85815284602082015260a060408201526000613ec860a0830186613ad4565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220af4ee4537fd6e7258166940fffde176bed1689dfef202e3ad5a22394fb63c9f164736f6c634300080800334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
Deployed Bytecode
0x60806040526004361061044b5760003560e01c80638366e79a11610234578063bbc0c7421161012e578063db8d55f1116100b6578063e67e7c5e1161007a578063e67e7c5e14610cde578063ee40166e14610cf3578063f2fde38b14610d09578063f5648a4f14610d29578063f5dbbb3714610d3e57600080fd5b8063db8d55f114610c0a578063dc3f0d0f14610c32578063dd62ed3e14610c52578063e213511f14610c98578063e2f4560514610cc857600080fd5b8063c5f956af116100fd578063c5f956af14610b89578063ce85541314610ba9578063d09a6a1e14610bbe578063d73792a914610bde578063db638f0b14610bf457600080fd5b8063bbc0c74214610b1f578063bbde77c114610b3e578063c024666814610b54578063c43d806614610b7457600080fd5b8063a5727e78116101bc578063ae20f3e411610180578063ae20f3e414610a7e578063ae29bdd914610a9e578063b0129fad14610ab4578063b4e4e4a114610ad5578063b62496f514610aef57600080fd5b8063a5727e78146109e0578063a6ff07dc146109f5578063a9059cbb14610a15578063ab36629214610a35578063ad5c464814610a4a57600080fd5b80638e599acd116102035780638e599acd1461096157806395d89b41146109765780639a06b1131461098b5780639a7a23d6146109a0578063a457c2d7146109c057600080fd5b80638366e79a146108f857806388e765ff146109185780638a8c523c1461092e5780638da5cb5b1461094357600080fd5b806349bd5a5e116103455780636605bfda116102cd578063715018a611610291578063715018a614610864578063751039fc146108795780637571336a1461088e57806379853f5a146108ae5780638188f71c146108d657600080fd5b80636605bfda146107ce57806366d602ae146107ee5780636ddd1713146108045780636ece5e7e1461082457806370a082311461084457600080fd5b8063503ac64911610314578063503ac6491461073157806353d74fdf1461074657806359d0f7131461075b5780635a27a1f91461078f5780635fdc1fd2146107ae57600080fd5b806349bd5a5e146106c25780634a62bb65146106e25780634bb278f3146106fc5780634e0f886b1461071157600080fd5b806323b872dd116103d3578063320644cc11610397578063320644cc14610641578063395093511461066157806339cf336c1461068157806341d4cfa91461069657806347062402146106ac57600080fd5b806323b872dd146105ba5780632b14ca56146105da5780632be32b61146105f05780632c04d82d14610610578063313ce5671461062557600080fd5b80631694505e1161041a5780631694505e1461050457806318160ddd14610550578063197bc3361461056f5780631aeb8ee41461058f5780631d7636fc146105a557600080fd5b806306fdde0314610457578063095ea7b3146104825780630b78f9c0146104b257806310d5de53146104d457600080fd5b3661045257005b600080fd5b34801561046357600080fd5b5061046c610d5e565b6040516104799190613957565b60405180910390f35b34801561048e57600080fd5b506104a261049d3660046139c1565b610df0565b6040519015158152602001610479565b3480156104be57600080fd5b506104d26104cd3660046139ed565b610e06565b005b3480156104e057600080fd5b506104a26104ef366004613a0f565b60156020526000908152604090205460ff1681565b34801561051057600080fd5b506105387f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610479565b34801561055c57600080fd5b506002545b604051908152602001610479565b34801561057b57600080fd5b5061053861058a366004613a33565b611009565b34801561059b57600080fd5b50610561601b5481565b3480156105b157600080fd5b50610561611081565b3480156105c657600080fd5b506104a26105d5366004613a4c565b611183565b3480156105e657600080fd5b5061056160125481565b3480156105fc57600080fd5b506104d261060b366004613a33565b61122d565b34801561061c57600080fd5b5061056161133a565b34801561063157600080fd5b5060405160128152602001610479565b34801561064d57600080fd5b506104d261065c366004613a33565b6113e3565b34801561066d57600080fd5b506104a261067c3660046139c1565b6114b8565b34801561068d57600080fd5b506104d26114f4565b3480156106a257600080fd5b50610561600e5481565b3480156106b857600080fd5b5061056160115481565b3480156106ce57600080fd5b50600954610538906001600160a01b031681565b3480156106ee57600080fd5b50600f546104a29060ff1681565b34801561070857600080fd5b506104d2611556565b34801561071d57600080fd5b506104d261072c366004613a33565b6115dc565b34801561073d57600080fd5b50600654610561565b34801561075257600080fd5b50601954610561565b34801561076757600080fd5b506105387f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b34801561079b57600080fd5b50601a546104a290610100900460ff1681565b3480156107ba57600080fd5b50601a546104a29062010000900460ff1681565b3480156107da57600080fd5b506104d26107e9366004613a0f565b6116e5565b3480156107fa57600080fd5b5061056160075481565b34801561081057600080fd5b50600f546104a29062010000900460ff1681565b34801561083057600080fd5b506104d261083f366004613a9b565b611826565b34801561085057600080fd5b5061056161085f366004613a0f565b611980565b34801561087057600080fd5b506104d261199b565b34801561088557600080fd5b506104d2611a0f565b34801561089a57600080fd5b506104d26108a9366004613a9b565b611a6e565b3480156108ba57600080fd5b50600f546105389064010000000090046001600160a01b031681565b3480156108e257600080fd5b506108eb611b36565b6040516104799190613b18565b34801561090457600080fd5b506104a2610913366004613b2b565b611b97565b34801561092457600080fd5b5061056160065481565b34801561093a57600080fd5b506104d2611d65565b34801561094f57600080fd5b506005546001600160a01b0316610538565b34801561096d57600080fd5b506104d2611e43565b34801561098257600080fd5b5061046c611ef3565b34801561099757600080fd5b506104d2611f02565b3480156109ac57600080fd5b506104d26109bb366004613a9b565b612019565b3480156109cc57600080fd5b506104a26109db3660046139c1565b6120d5565b3480156109ec57600080fd5b50600854610561565b348015610a0157600080fd5b506104d2610a10366004613a33565b612177565b348015610a2157600080fd5b506104a2610a303660046139c1565b61223f565b348015610a4157600080fd5b506104d261224c565b348015610a5657600080fd5b506105387f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b348015610a8a57600080fd5b506104d2610a99366004613b59565b6122b0565b348015610aaa57600080fd5b50610561600b5481565b348015610ac057600080fd5b50600f546104a2906301000000900460ff1681565b348015610ae157600080fd5b50601a546104a29060ff1681565b348015610afb57600080fd5b506104a2610b0a366004613a0f565b60166020526000908152604090205460ff1681565b348015610b2b57600080fd5b50600f546104a290610100900460ff1681565b348015610b4a57600080fd5b5061056160085481565b348015610b6057600080fd5b506104d2610b6f366004613a9b565b612392565b348015610b8057600080fd5b50601154610561565b348015610b9557600080fd5b50600c54610538906001600160a01b031681565b348015610bb557600080fd5b50600754610561565b348015610bca57600080fd5b506104d2610bd9366004613b59565b61241b565b348015610bea57600080fd5b5061056161271081565b348015610c0057600080fd5b5061056160135481565b348015610c1657600080fd5b5060115460125460408051928352602083019190915201610479565b348015610c3e57600080fd5b506104d2610c4d366004613a33565b612486565b348015610c5e57600080fd5b50610561610c6d366004613b2b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ca457600080fd5b506104a2610cb3366004613a0f565b60106020526000908152604090205460ff1681565b348015610cd457600080fd5b50610561600a5481565b348015610cea57600080fd5b50601354610561565b348015610cff57600080fd5b50610561600d5481565b348015610d1557600080fd5b506104d2610d24366004613a0f565b61258d565b348015610d3557600080fd5b506104d2612678565b348015610d4a57600080fd5b506104d2610d59366004613a0f565b6126f0565b606060038054610d6d90613b76565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9990613b76565b8015610de65780601f10610dbb57610100808354040283529160200191610de6565b820191906000526020600020905b815481529060010190602001808311610dc957829003601f168201915b5050505050905090565b6000610dfd3384846127e9565b50600192915050565b6005546001600160a01b03163314610e395760405162461bcd60e51b8152600401610e3090613bb1565b60405180910390fd5b601a54610100900460ff1615610e835760405162461bcd60e51b815260206004820152600f60248201526e1199595cc8185c99481b1bd8dad959608a1b6044820152606401610e30565b6064610e92612710601e613bfc565b610e9c9190613c1b565b821115610ee65760405162461bcd60e51b815260206004820152601860248201527746656573206d75737420626520333025206f72206c65737360401b6044820152606401610e30565b6064610ef5612710601e613bfc565b610eff9190613c1b565b811115610f495760405162461bcd60e51b815260206004820152601860248201527746656573206d75737420626520333025206f72206c65737360401b6044820152606401610e30565b601a5462010000900460ff1615610ffe57601154821115610fac5760405162461bcd60e51b815260206004820152601b60248201527f427579206665652063616e206f6e6c79206265206c6f776572656400000000006044820152606401610e30565b601254811115610ffe5760405162461bcd60e51b815260206004820152601c60248201527f53656c6c206665652063616e206f6e6c79206265206c6f7765726564000000006044820152606401610e30565b601191909155601255565b60195460009082106110535760405162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b6044820152606401610e30565b6019828154811061106657611066613c3d565b6000918252602090912001546001600160a01b031692915050565b6000600d54600014156110ac57606461109d6127106032613bfc565b6110a79190613c1b565b905090565b42600e54111580156110cc5750601e600e546110c89190613c53565b4211155b156110e057606461109d6127106032613bfc565b42601e600e546110f09190613c53565b10801561110b57506078600e546111079190613c53565b4211155b1561111f57606461109d612710601e613bfc565b681b1ae4d6e2ef5000006013541015611139575060125490565b6825f273933db5700000601354101561115b57606461109d6127106003613bfc565b6830ca024f987b900000601354101561117d57606461109d6127106002613bfc565b50600090565b600061119084848461290d565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156112155760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e30565b61122285338584036127e9565b506001949350505050565b6005546001600160a01b031633146112575760405162461bcd60e51b8152600401610e3090613bb1565b670de0b6b3a76400006103e861126c60025490565b611277906001613bfc565b6112819190613c1b565b61128b9190613c1b565b8110156112ec5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610e30565b6112fe81670de0b6b3a7640000613bfc565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6000600d546000141561135657606461109d6127106032613bfc565b42600e54111580156113765750601e600e546113729190613c53565b4211155b1561138a57606461109d6127106032613bfc565b42601e600e5461139a9190613c53565b1080156113b557506078600e546113b19190613c53565b4211155b156113c957606461109d612710601e613bfc565b681b1ae4d6e2ef5000006013541015611139575060115490565b600c546001600160a01b031633148061140657506005546001600160a01b031633145b6114715760405162461bcd60e51b815260206004820152603660248201527f6f6e6c7920747265617375727941646472657373206f72206f776e65722063616044820152751b8818da185b99d9481cddd85c151a1c995cda1bdb1960521b6064820152608401610e30565b61148381670de0b6b3a7640000613bfc565b600a8190556040519081527fdd535c8a292f211fa216a760a7e5e8a29a1f222e36267d33660451d7719907a69060200161132f565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610dfd9185906114ef908690613c53565b6127e9565b6005546001600160a01b0316331461151e5760405162461bcd60e51b8152600401610e3090613bb1565b601a805460ff191660011790556040517fb065dde7eb4e066090ff22ddf4310714e74b5fce3c0429839c0e6289d4e661b690600090a1565b6005546001600160a01b031633146115805760405162461bcd60e51b8152600401610e3090613bb1565b60408051808201909152600580825264414952415360d81b60209092019182526115ac916003916138be565b5060408051808201909152600580825264414952415360d81b60209092019182526115d9916004916138be565b50565b6005546001600160a01b031633146116065760405162461bcd60e51b8152600401610e3090613bb1565b670de0b6b3a76400006103e861161b60025490565b611626906003613bfc565b6116309190613c1b565b61163a9190613c1b565b81101561169e5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e332560a01b6064820152608401610e30565b6116b081670de0b6b3a7640000613bfc565b60088190556040519081527f5843675a6d0f5f294eee940af985e1e166187069f75150b237995a032d62ed0a9060200161132f565b600c546001600160a01b031633148061170857506005546001600160a01b031633145b61177a5760405162461bcd60e51b815260206004820152603860248201527f6f6e6c7920747265617375727941646472657373206f72206f776e657220636160448201527f6e206368616e67652074726561737572794164647265737300000000000000006064820152608401610e30565b6001600160a01b0381166117dc5760405162461bcd60e51b8152602060048201526024808201527f5f54726561737572794164647265737320616464726573732063616e6e6f74206044820152630626520360e41b6064820152608401610e30565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f2e1e696cfb265fa16e1170d24ef04cb2262772bde00ecf34d80bae6722487b7f90600090a250565b600f5464010000000090046001600160a01b031633148061185157506005546001600160a01b031633145b6118b75760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79206f776e6572206f7220736e69706572426f747347756172642063616044820152706e2073657420736e6970657220626f747360781b6064820152608401610e30565b601a5460ff161561191c57801561191c5760405162461bcd60e51b8152602060048201526024808201527f4e657720736e6970657220626f7473206172652064697361626c656420666f7260448201526332bb32b960e11b6064820152608401610e30565b6001600160a01b038216600081815260106020908152604091829020805460ff19168515159081179091558251938452908301527fce527251374acbd40073242991617eaf99a06736f116cca8b62c3f56b343d77591015b60405180910390a15050565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146119c55760405162461bcd60e51b8152600401610e3090613bb1565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314611a395760405162461bcd60e51b8152600401610e3090613bb1565b600f805460ff191690556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314611a985760405162461bcd60e51b8152600401610e3090613bb1565b80611b0b576009546001600160a01b0383811691161415611b0b5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610e30565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b60606019805480602002602001604051908101604052809291908181526020018280548015610de657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611b70575050505050905090565b60006001600160a01b038316611bef5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610e30565b600c546001600160a01b03163314611c195760405162461bcd60e51b8152600401610e3090613c6b565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611c5b57600080fd5b505afa158015611c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c939190613cac565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611ce157600080fd5b505af1158015611cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d199190613cc5565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314611d8f5760405162461bcd60e51b8152600401610e3090613bb1565b600f54610100900460ff1615611de75760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420726520656e61626c652074726164696e6700000000000000006044820152606401610e30565b600f80546201010062ffff0019909116179081905560405161010090910460ff16151581527fe8a59d3db38e5220ac9d0f72590b7ac876e0916dc8f4db3e7614e6f91fe520899060200160405180910390a143600d5542600e55565b600c546001600160a01b0316336001600160a01b031614611eb55760405162461bcd60e51b815260206004820152602660248201527f4f6e6c79207472656173757279416464726573732063616e206d616e75616c6c60448201526507920737761760d41b6064820152608401610e30565b6000611ec030611980565b905080156115d9576009805460ff60a01b1916600160a01b179055611ee3613064565b6009805460ff60a01b1916905550565b606060048054610d6d90613b76565b6005546001600160a01b03163314611f2c5760405162461bcd60e51b8152600401610e3090613bb1565b6040516364e329cb60e11b81523060048201526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2811660248301527f0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f169063c9c6539690604401602060405180830381600087803b158015611fb557600080fd5b505af1158015611fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fed9190613ce2565b600980546001600160a01b0319166001600160a01b03929092169182179055612017906001613300565b565b6005546001600160a01b031633146120435760405162461bcd60e51b8152600401610e3090613bb1565b6009546001600160a01b03838116911614156120c75760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610e30565b6120d18282613300565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054600019811461216d57828110156121605760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e30565b61216d33858584036127e9565b5060019392505050565b6005546001600160a01b031633146121a15760405162461bcd60e51b8152600401610e3090613bb1565b6000811161220a5760405162461bcd60e51b815260206004820152603060248201527f4d6178206d696c692045544820666f72206665652073776170206d757374206260448201526f0652067726561746572207468616e20360841b6064820152608401610e30565b601b8190556040518181527f8861c91aa2babbcd81e43611df3c922e285cbdbfc130048c644008f4f0026e7a9060200161132f565b6000610dfd33848461290d565b6005546001600160a01b031633146122765760405162461bcd60e51b8152600401610e3090613bb1565b601a805461ff0019166101001790556040517f8e2ddf3e3a4adecfbb403ceb7654310a3e2a1a12e0ff20b9f11b3f43dc9e53ec90600090a1565b600c546001600160a01b03163314806122d357506005546001600160a01b031633145b6123455760405162461bcd60e51b815260206004820152603d60248201527f6f6e6c7920747265617375727941646472657373206f72206f776e657220636160448201527f6e206368616e67652073776170466565734f6e6365506572426c6f636b0000006064820152608401610e30565b600f805482151563010000000263ff000000199091161790556040517f2fa5fbcffe30a751dee9af9329ea1957ba6d758d5c4a70839ceeb35419b527ff9061132f90831515815260200190565b6005546001600160a01b031633146123bc5760405162461bcd60e51b8152600401610e3090613bb1565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146124455760405162461bcd60e51b8152600401610e3090613bb1565b601a805462ff0000191662010000831515021790556040517f176352ccb4a25e1868a6d5942387e086fc33d7a3498ab4f7eaf1905d24510a7990600090a150565b6005546001600160a01b031633146124b05760405162461bcd60e51b8152600401610e3090613bb1565b670de0b6b3a76400006103e86124c560025490565b6124d0906001613bfc565b6124da9190613c1b565b6124e49190613c1b565b8110156125465760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610e30565b61255881670de0b6b3a7640000613bfc565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161132f565b6005546001600160a01b031633146125b75760405162461bcd60e51b8152600401610e3090613bb1565b6001600160a01b03811661261c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e30565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600c546000906001600160a01b031633146126a55760405162461bcd60e51b8152600401610e3090613c6b565b60405133904790600081818185875af1925050503d80600081146126e5576040519150601f19603f3d011682016040523d82523d6000602084013e6126ea565b606091505b50505050565b6005546001600160a01b031633148061271b5750600f5464010000000090046001600160a01b031633145b61278d5760405162461bcd60e51b815260206004820152603760248201527f4f6e6c79206f776e6572206f7220736e69706572426f7473477561726420636160448201527f6e2073657420736e6970657220626f74732067756172640000000000000000006064820152608401610e30565b600f8054640100000000600160c01b0319166401000000006001600160a01b038416908102919091179091556040519081527f7d336579c7b78abefdb31775591f73094fe64f8cc10fa89faaf23b7957acd0529060200161132f565b6001600160a01b03831661284b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e30565b6001600160a01b0382166128ac5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e30565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166129335760405162461bcd60e51b8152600401610e3090613cff565b6001600160a01b0382166129595760405162461bcd60e51b8152600401610e3090613d44565b600081116129a95760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610e30565b6001600160a01b03831660009081526010602052604090205460ff161580156129eb57506001600160a01b03821660009081526010602052604090205460ff16155b612a375760405162461bcd60e51b815260206004820152601b60248201527f536e6970657220626f747320617265206e6f7420616c6c6f77656400000000006044820152606401610e30565b600f5460ff1615612de5576005546001600160a01b03848116911614801590612a6e57506005546001600160a01b03838116911614155b8015612a8257506001600160a01b03821615155b8015612a9957506001600160a01b03821661dead14155b15612de557600f54610100900460ff16612b87576001600160a01b03831660009081526015602052604090205460ff1680612aec57506001600160a01b03821660009081526015602052604090205460ff165b612b315760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610e30565b6005546001600160a01b03848116911614612b875760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b6044820152606401610e30565b6001600160a01b03831660009081526016602052604090205460ff168015612bc857506001600160a01b03821660009081526015602052604090205460ff16155b15612c9457600654811115612c305760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610e30565b600854612c3c83611980565b612c469083613c53565b1115612c8f5760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610e30565b612de5565b6001600160a01b03821660009081526016602052604090205460ff168015612cd557506001600160a01b03831660009081526015602052604090205460ff16155b15612d3f57600754811115612c8f5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610e30565b6001600160a01b03821660009081526015602052604090205460ff16158015612d8157506001600160a01b03831660009081526015602052604090205460ff16155b15612de557600854612d9283611980565b612d9c9083613c53565b1115612de55760405162461bcd60e51b815260206004820152601860248201527710d85b9b9bdd08115e18d95959081b585e081dd85b1b195d60421b6044820152606401610e30565b6000612df030611980565b600a5490915081108015908190612e0f5750600f5462010000900460ff165b8015612e255750600954600160a01b900460ff16155b8015612e4a57506001600160a01b03851660009081526016602052604090205460ff16155b8015612e6f57506001600160a01b03851660009081526014602052604090205460ff16155b8015612e9457506001600160a01b03841660009081526014602052604090205460ff16155b15612ec2576009805460ff60a01b1916600160a01b179055612eb4613064565b6009805460ff60a01b191690555b6001600160a01b03851660009081526014602052604090205460019060ff1680612f0457506001600160a01b03851660009081526014602052604090205460ff165b15612f0d575060005b808015612f1c57506000600d54115b8015612f295750600d5443115b1561303f576001600160a01b03851660009081526016602052604081205460ff168015612f5d57506000612f5b611081565b115b15612f8857612710612f6d611081565b612f779087613bfc565b612f819190613c1b565b9050612fde565b6001600160a01b03871660009081526016602052604090205460ff168015612fb757506000612fb561133a565b115b15612fde57612710612fc761133a565b612fd19087613bfc565b612fdb9190613c1b565b90505b8015612ff857612fef87308361336a565b612ff8306134bf565b6130028186613d87565b94507fff9891726fac64d7faf6508ce9e13ff651decd82208eeef75b4070d78bdfbdf68160405161303591815260200190565b60405180910390a1505b61304a86868661336a565b613053866134bf565b61305c856134bf565b505050505050565b600061306f30611980565b9050806130795750565b600f546301000000900460ff168015613093575043600b54145b156130c4576040517fdf46401eb14e1af2c0c5feb3f3e452741543196d05bd8fbd21d02ea36c37c66e90600090a150565b43600b8190556040519081527f5f21bcd6e339b486d1b832e2afa5445d204e289a043a519ef679765a05b5e8659060200160405180910390a16040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160008151811061315257613152613c3d565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061318657613186613c3d565b60200260200101906001600160a01b031690816001600160a01b03168152505060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663d06ca61f6103e8601b54670de0b6b3a76400006131f09190613bfc565b6131fa9190613c1b565b846040518363ffffffff1660e01b8152600401613218929190613db4565b60006040518083038186803b15801561323057600080fd5b505afa158015613244573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261326c9190810190613dd5565b60018151811061327e5761327e613c3d565b6020026020010151905080831115613294578092505b61329d83613699565b4780156126ea57600c546040516000916001600160a01b03169083908381818185875af1925050503d80600081146132f1576040519150601f19603f3d011682016040523d82523d6000602084013e6132f6565b606091505b5050505050505050565b6001600160a01b0382166000908152601660205260409020805460ff191682151517905561332e8282613862565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166133905760405162461bcd60e51b8152600401610e3090613cff565b6001600160a01b0382166133b65760405162461bcd60e51b8152600401610e3090613d44565b6001600160a01b0383166000908152602081905260409020548181101561342e5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e30565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290613465908490613c53565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134b191815260200190565b60405180910390a350505050565b6001600160a01b0381166134d05750565b60006134db82611980565b6001600160a01b03831660009081526017602052604090205490915060ff168115801590613507575080155b156135815750506001600160a01b03166000818152601760209081526040808320805460ff19166001908117909155601980546018909452918420839055820181559091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0319169091179055565b8115801561358c5750805b15613694576001600160a01b038316600090815260186020526040812054601980549192916135bd90600190613d87565b815481106135cd576135cd613c3d565b600091825260209091200154601980546001600160a01b0390921692508291849081106135fc576135fc613c3d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152601890915260409020829055601980548061364657613646613e93565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0387168252601781526040808320805460ff19169055601890915281205550505b505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106136ce576136ce613c3d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061372257613722613c3d565b60200260200101906001600160a01b031690816001600160a01b03168152505061376d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846127e9565b60405163791ac94760e01b815247906001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906137c4908690600090879030904290600401613ea9565b600060405180830381600087803b1580156137de57600080fd5b505af11580156137f2573d6000803e3d6000fd5b5050505080476138029190613d87565b601360008282546138139190613c53565b909155507f877973055cc76aebb6c1702046758fb56e804bca4a8bf998824b99ed02bbbafd9050836138458347613d87565b6040805192835260208301919091520160405180910390a1505050565b6001600160a01b038216600081815260156020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101611974565b8280546138ca90613b76565b90600052602060002090601f0160209004810192826138ec5760008555613932565b82601f1061390557805160ff1916838001178555613932565b82800160010185558215613932579182015b82811115613932578251825591602001919060010190613917565b5061393e929150613942565b5090565b5b8082111561393e5760008155600101613943565b600060208083528351808285015260005b8181101561398457858101830151858201604001528201613968565b81811115613996576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146115d957600080fd5b600080604083850312156139d457600080fd5b82356139df816139ac565b946020939093013593505050565b60008060408385031215613a0057600080fd5b50508035926020909101359150565b600060208284031215613a2157600080fd5b8135613a2c816139ac565b9392505050565b600060208284031215613a4557600080fd5b5035919050565b600080600060608486031215613a6157600080fd5b8335613a6c816139ac565b92506020840135613a7c816139ac565b929592945050506040919091013590565b80151581146115d957600080fd5b60008060408385031215613aae57600080fd5b8235613ab9816139ac565b91506020830135613ac981613a8d565b809150509250929050565b600081518084526020808501945080840160005b83811015613b0d5781516001600160a01b031687529582019590820190600101613ae8565b509495945050505050565b602081526000613a2c6020830184613ad4565b60008060408385031215613b3e57600080fd5b8235613b49816139ac565b91506020830135613ac9816139ac565b600060208284031215613b6b57600080fd5b8135613a2c81613a8d565b600181811c90821680613b8a57607f821691505b60208210811415613bab57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613c1657613c16613be6565b500290565b600082613c3857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60008219821115613c6657613c66613be6565b500190565b60208082526021908201527f6f6e6c79207472656173757279416464726573732063616e20776974686472616040820152607760f81b606082015260800190565b600060208284031215613cbe57600080fd5b5051919050565b600060208284031215613cd757600080fd5b8151613a2c81613a8d565b600060208284031215613cf457600080fd5b8151613a2c816139ac565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015613d9957613d99613be6565b500390565b634e487b7160e01b600052604160045260246000fd5b828152604060208201526000613dcd6040830184613ad4565b949350505050565b60006020808385031215613de857600080fd5b825167ffffffffffffffff80821115613e0057600080fd5b818501915085601f830112613e1457600080fd5b815181811115613e2657613e26613d9e565b8060051b604051601f19603f83011681018181108582111715613e4b57613e4b613d9e565b604052918252848201925083810185019188831115613e6957600080fd5b938501935b82851015613e8757845184529385019392850192613e6e565b98975050505050505050565b634e487b7160e01b600052603160045260246000fd5b85815284602082015260a060408201526000613ec860a0830186613ad4565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220af4ee4537fd6e7258166940fffde176bed1689dfef202e3ad5a22394fb63c9f164736f6c63430008080033
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.
Add Token to MetaMask (Web3)