ETH Price: $2,569.77 (+0.72%)

Token

Pinnacle (PINN)
 

Overview

Max Total Supply

1,000,000,000 PINN

Holders

585

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x798335D1...29f033046
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Pinnacle

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : pinnacle.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.21;
pragma experimental ABIEncoderV2;

abstract contract Ownable {
    address private _owner;

    constructor() {
        _owner = msg.sender;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _owner = address(0);
    }
}

library SafeERC20 {
    function safeTransfer(address token, address to, uint256 value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: INTERNAL TRANSFER_FAILED');
    }
}

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 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);
}

contract Pinnacle is Ownable {
    string private constant _name = unicode"Pinnacle";
    string private constant _symbol = unicode"PINN";
    uint256 private constant _totalSupply = 1_000_000_000 * 1e18;

    uint256 public maxTransactionAmount = 500_000 * 1e18; // ~0.05% 
    uint256 public maxWallet = 15_000_000 * 1e18;         // ~1.00% 
    uint256 public swapTokensAtAmount =  200_000 * 1e18;  // ~0.02%

    address private revWallet = 0xff5474EA021C43b9FEae3e298249f456ee96D921;
    address private treasuryWallet = 0xd215B27898bEf8D4F91DDB7D1717cb43192156a5;
    address private teamWallet = 0x21095e003816a91e1D8Ede82C6D30EBAa6bB9a86;


    address private constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    uint8 public buyTotalFees = 10;
    uint8 public sellTotalFees = 10;

    uint8 public revFee = 50;
    uint8 public treasuryFee = 50;
  

    bool private swapping;
    bool public limitsInEffect = true;
    bool private launched;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;
    mapping(address => bool) private automatedMarketMakerPairs;

    event SwapAndLiquify(uint256 tokensSwapped, uint256 revETH, uint256 TreasuryETH);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    IUniswapV2Router02 public constant uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public immutable uniswapV2Pair;

    constructor() {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), WETH);
        automatedMarketMakerPairs[uniswapV2Pair] = true;

        address airdropWallet = 0x8Baddc5A65d39F090Ce0b527a4344304c127F8E2;

        setExcludedFromFees(owner(), true);
        setExcludedFromFees(address(0xdead), true);
        setExcludedFromFees(revWallet, true);

        setExcludedFromMaxTransaction(owner(), true);
        setExcludedFromMaxTransaction(address(uniswapV2Router), true);
        setExcludedFromMaxTransaction(address(0xdead), true);
        setExcludedFromMaxTransaction(address(uniswapV2Pair), true);
        setExcludedFromMaxTransaction(revWallet, true);

        // Treasury
        setExcludedFromFees(treasuryWallet, true);
        setExcludedFromMaxTransaction(treasuryWallet, true);
        _balances[treasuryWallet] = 50_000_000 * 1e18;
        emit Transfer(address(0), treasuryWallet, _balances[treasuryWallet]);

        // Team
        setExcludedFromFees(teamWallet, true);
        setExcludedFromMaxTransaction(teamWallet, true);
        _balances[teamWallet] =  50_000_000 * 1e18;
        emit Transfer(address(0), teamWallet, _balances[teamWallet]);


        // Airdrop
        setExcludedFromFees(airdropWallet, true);
        setExcludedFromMaxTransaction(airdropWallet, true);
        _balances[airdropWallet] = 25_000_000 * 1e18;
        emit Transfer(address(0), airdropWallet, _balances[airdropWallet]);


        // LP
        setExcludedFromFees(address(this), true);
        setExcludedFromMaxTransaction(address(this), true);
        _balances[address(this)] = 850_000_000 * 1e18; // ~85
        emit Transfer(address(0), address(this), _balances[address(this)]);

        _approve(address(this), address(uniswapV2Router), type(uint256).max);
    }

    receive() external payable {}

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return 18;
    }

    function totalSupply() public pure returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) external returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function transfer(address recipient, uint256 amount) external returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool) {
        uint256 currentAllowance = _allowances[sender][msg.sender];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, msg.sender, currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (!launched && (from != owner() && from != address(this) && to != owner())) {
            revert("Trading not enabled");
        }

        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping) {
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTx");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                } else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount,"Sell transfer amount exceeds the maxTx");
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

        bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;

        if (canSwap && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 senderBalance = _balances[from];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");

        uint256 fees = 0;
        if (takeFee) {
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = (amount * sellTotalFees) / 100;
            } else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = (amount * buyTotalFees) / 100;
            }

            if (fees > 0) {
                unchecked {
                    amount = amount - fees;
                    _balances[from] -= fees;
                    _balances[address(this)] += fees;
                }
                emit Transfer(from, address(this), fees);
            }
        }
        unchecked {
            _balances[from] -= amount;
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

    function setDistributionFees(uint8 _RevFee, uint8 _TreasuryFee) external onlyOwner {
        revFee = _RevFee;
        treasuryFee = _TreasuryFee;

        require((revFee + treasuryFee) == 100, "Distribution have to be equal to 100%");
    }

    function setFees(uint8 _buyTotalFees, uint8 _sellTotalFees) external onlyOwner {

        buyTotalFees = _buyTotalFees;
        sellTotalFees = _sellTotalFees;
    }

    function setExcludedFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }

    function setExcludedFromMaxTransaction(address account, bool excluded) public onlyOwner {
        _isExcludedMaxTransactionAmount[account] = excluded;
    }

    function airdropWallets(address[] memory addresses, uint256[] memory amounts) external onlyOwner {
        require(!launched, "Already launched");
        for (uint256 i = 0; i < addresses.length; i++) {
            require(_balances[msg.sender] >= amounts[i], "ERC20: transfer amount exceeds balance");
            _balances[addresses[i]] += amounts[i];
            _balances[msg.sender] -= amounts[i];
            emit Transfer(msg.sender, addresses[i], amounts[i]);
        }
    }

    function openTrade() external onlyOwner {
        require(!launched, "Already launched");
        launched = true;
    }

    function Launch() external payable onlyOwner {
        require(!launched, "Already launched");
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            _balances[address(this)],
            0,
            0,
            teamWallet,
            block.timestamp
        );
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed");
        automatedMarketMakerPairs[pair] = value;
    }

    function setSwapAtAmount(uint256 newSwapAmount) external onlyOwner {
        require(newSwapAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% of the supply");
        require(newSwapAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% of the supply");
        swapTokensAtAmount = newSwapAmount;
    }

    function setMaxTxnAmount(uint256 newMaxTx) external onlyOwner {
        require(newMaxTx >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set max transaction lower than 0.1%");
        maxTransactionAmount = newMaxTx * (10**18);
    }

    function setMaxWalletAmount(uint256 newMaxWallet) external onlyOwner {
        require(newMaxWallet >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set max wallet lower than 0.1%");
        maxWallet = newMaxWallet * (10**18);
    }

    function updateRevWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Address cannot be zero");
        revWallet = newAddress;
    }

    function updateTreasuryWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Address cannot be zero");
        treasuryWallet = newAddress;
    }

    function updateTeamWallet(address newAddress) external onlyOwner {
        require(newAddress != address(0), "Address cannot be zero");
        teamWallet = newAddress;
    }

    function excludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function withdrawStuckToken(address token, address to) external onlyOwner {
        uint256 _contractBalance = IERC20(token).balanceOf(address(this));
        SafeERC20.safeTransfer(token, to, _contractBalance);
    }

    function withdrawStuckETH(address addr) external onlyOwner {
        require(addr != address(0), "Invalid address");

        (bool success, ) = addr.call{value: address(this).balance}("");
        require(success, "Withdrawal failed");
    }

    function swapBack() private {
        uint256 swapThreshold = swapTokensAtAmount;
        bool success;

        if (balanceOf(address(this)) > swapTokensAtAmount * 20) {
            swapThreshold = swapTokensAtAmount * 20;
        }

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(swapThreshold, 0, path, address(this), block.timestamp);

        uint256 ethBalance = address(this).balance;
        if (ethBalance > 0) {
            uint256 ethForRev = (ethBalance * revFee) / 100;

            uint256 ethForTreasury = ethBalance - ethForRev;

            (success, ) = address(treasuryWallet).call{value: ethForTreasury}("");
            (success, ) = address(revWallet).call{value: ethForRev}("");

            emit SwapAndLiquify(swapThreshold, ethForRev, ethForTreasury);
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"revETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TreasuryETH","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludedFromFee","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":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"uint8","name":"_RevFee","type":"uint8"},{"internalType":"uint8","name":"_TreasuryFee","type":"uint8"}],"name":"setDistributionFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_buyTotalFees","type":"uint8"},{"internalType":"uint8","name":"_sellTotalFees","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTx","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapAmount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526969e10de76676d08000006001556a0c685fa11e01ec6f000000600255692a5a058fc295ed000000600355600480546001600160a01b031990811673ff5474ea021c43b9feae3e298249f456ee96d921179091556005805490911673d215b27898bef8d4f91ddb7d1717cb43192156a51790556006805479010032320a0a21095e003816a91e1d8ede82c6d30ebaa6bb9a86600161ff0160c01b0319909116179055348015620000b2575f80fd5b505f80546001600160a01b031916331790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163c45a01559160048083019260209291908290030181865afa15801562000113573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001399190620006f1565b6040516364e329cb60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260248201526001600160a01b03919091169063c9c65396906044016020604051808303815f875af115801562000199573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001bf9190620006f1565b6001600160a01b031660808190525f908152600b60205260409020805460ff19166001179055738baddc5a65d39f090ce0b527a4344304c127f8e262000218620002105f546001600160a01b031690565b6001620004c0565b6200022761dead6001620004c0565b60045462000240906001600160a01b03166001620004c0565b6200025e620002565f546001600160a01b031690565b600162000547565b6200027f737a250d5630b4cf539739df2c5dacb4c659f2488d600162000547565b6200028e61dead600162000547565b6080516200029e90600162000547565b600454620002b7906001600160a01b0316600162000547565b600554620002d0906001600160a01b03166001620004c0565b600554620002e9906001600160a01b0316600162000547565b600580546001600160a01b039081165f908152600760205260408082206a295be96e640669720000009055925490911680825282822054925190925f8051602062002f31833981519152916200034191815260200190565b60405180910390a360065462000362906001600160a01b03166001620004c0565b6006546200037b906001600160a01b0316600162000547565b600680546001600160a01b039081165f908152600760205260408082206a295be96e640669720000009055925490911680825282822054925190925f8051602062002f3183398151915291620003d391815260200190565b60405180910390a3620003e8816001620004c0565b620003f581600162000547565b6001600160a01b0381165f8181526007602090815260408083206a14adf4b7320334b90000009081905590519081525f8051602062002f31833981519152910160405180910390a36200044a306001620004c0565b6200045730600162000547565b305f8181526007602090815260408083206b02bf1a8054a46d00920000009081905590519081525f8051602062002f31833981519152910160405180910390a3620004b930737a250d5630b4cf539739df2c5dacb4c659f2488d5f19620005ca565b5062000720565b33620004d35f546001600160a01b031690565b6001600160a01b0316146200051d5760405162461bcd60e51b815260206004820181905260248201525f8051602062002f1183398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b336200055a5f546001600160a01b031690565b6001600160a01b031614620005a05760405162461bcd60e51b815260206004820181905260248201525f8051602062002f11833981519152604482015260640162000514565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b6001600160a01b0383166200062e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000514565b6001600160a01b038216620006915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000514565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6020828403121562000702575f80fd5b81516001600160a01b038116811462000719575f80fd5b9392505050565b6080516127d1620007405f395f81816103ac0152610f7e01526127d15ff3fe60806040526004361061022b575f3560e01c8063751039fc11610129578063c8c8ebe4116100a8578063e2f456051161006d578063e2f45605146106f6578063e71079471461070b578063f5ec72341461072a578063f8b45b0514610749578063fb201b1d1461075e575f80fd5b8063c8c8ebe41461063e578063cc32d17614610653578063d201b01e14610673578063d85ba06314610692578063dd62ed3e146106b2575f80fd5b806395d89b41116100ee57806395d89b41146105965780639a7a23d6146105c2578063a9059cbb146105e1578063adfa29e514610600578063bc205ad31461061f575f80fd5b8063751039fc146104f15780637cb332bb14610505578063809d458d1461052457806385ecafd7146105435780638da5cb5b1461057a575f80fd5b806349bd5a5e116101b557806366650dae1161017a57806366650dae1461044b5780636a486a8e1461046a57806370a082311461048a578063715018a6146104be57806374010ece146104d2575f80fd5b806349bd5a5e1461039b5780634a62bb65146103ce5780634fcd2446146103ee578063590ffdce1461040d5780636402511e1461042c575f80fd5b806318160ddd116101fb57806318160ddd146102f057806321d37e391461031857806323b872dd1461034a57806327a14fc214610369578063313ce56714610388575f80fd5b806302ac81681461023657806306fdde0314610240578063095ea7b3146102825780631694505e146102b1575f80fd5b3661023257005b5f80fd5b61023e610772565b005b34801561024b575f80fd5b5060408051808201909152600881526750696e6e61636c6560c01b60208201525b604051610279919061221f565b60405180910390f35b34801561028d575f80fd5b506102a161029c36600461226c565b610893565b6040519015158152602001610279565b3480156102bc575f80fd5b506102d8737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610279565b3480156102fb575f80fd5b506b033b2e3c9fd0803ce80000005b604051908152602001610279565b348015610323575f80fd5b5060065461033890600160b01b900460ff1681565b60405160ff9091168152602001610279565b348015610355575f80fd5b506102a1610364366004612294565b6108a9565b348015610374575f80fd5b5061023e6103833660046122cd565b610958565b348015610393575f80fd5b506012610338565b3480156103a6575f80fd5b506102d87f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d9575f80fd5b506006546102a190600160c81b900460ff1681565b3480156103f9575f80fd5b5061023e6104083660046122f4565b610a3c565b348015610418575f80fd5b5061023e610427366004612335565b610aa8565b348015610437575f80fd5b5061023e6104463660046122cd565b610b0a565b348015610456575f80fd5b5061023e610465366004612335565b610c69565b348015610475575f80fd5b5060065461033890600160a81b900460ff1681565b348015610495575f80fd5b5061030a6104a436600461236a565b6001600160a01b03165f9081526007602052604090205490565b3480156104c9575f80fd5b5061023e610ccb565b3480156104dd575f80fd5b5061023e6104ec3660046122cd565b610d14565b3480156104fc575f80fd5b5061023e610dfd565b348015610510575f80fd5b5061023e61051f36600461236a565b610e44565b34801561052f575f80fd5b5061023e61053e36600461236a565b610ec4565b34801561054e575f80fd5b506102a161055d36600461236a565b6001600160a01b03165f9081526009602052604090205460ff1690565b348015610585575f80fd5b505f546001600160a01b03166102d8565b3480156105a1575f80fd5b506040805180820190915260048152632824a72760e11b602082015261026c565b3480156105cd575f80fd5b5061023e6105dc366004612335565b610f44565b3480156105ec575f80fd5b506102a16105fb36600461226c565b611027565b34801561060b575f80fd5b5061023e61061a36600461236a565b611033565b34801561062a575f80fd5b5061023e61063936600461238a565b6110b3565b348015610649575f80fd5b5061030a60015481565b34801561065e575f80fd5b5060065461033890600160b81b900460ff1681565b34801561067e575f80fd5b5061023e61068d36600461236a565b611160565b34801561069d575f80fd5b5060065461033890600160a01b900460ff1681565b3480156106bd575f80fd5b5061030a6106cc36600461238a565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b348015610701575f80fd5b5061030a60035481565b348015610716575f80fd5b5061023e610725366004612486565b611277565b348015610735575f80fd5b5061023e6107443660046122f4565b611484565b348015610754575f80fd5b5061030a60025481565b348015610769575f80fd5b5061023e611564565b336107845f546001600160a01b031690565b6001600160a01b0316146107b35760405162461bcd60e51b81526004016107aa90612540565b60405180910390fd5b600654600160d01b900460ff16156107dd5760405162461bcd60e51b81526004016107aa90612575565b305f8181526007602052604080822054600654915163f305d71960e01b8152600481019490945260248401526044830182905260648301919091526001600160a01b031660848201524260a4820152737a250d5630b4cf539739df2c5dacb4c659f2488d9063f305d71990349060c40160606040518083038185885af1158015610869573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061088e919061259f565b505050565b5f61089f3384846115db565b5060015b92915050565b6001600160a01b0383165f9081526008602090815260408083203384529091528120545f19811461094257828110156109355760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016107aa565b61094285338584036115db565b61094d8585856116fe565b506001949350505050565b3361096a5f546001600160a01b031690565b6001600160a01b0316146109905760405162461bcd60e51b81526004016107aa90612540565b670de0b6b3a76400006103e86109b36b033b2e3c9fd0803ce800000060016125de565b6109bd91906125f5565b6109c791906125f5565b811015610a245760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574206d61782077616c6c6574206c6f776572207468616e60448201526420302e312560d81b60648201526084016107aa565b610a3681670de0b6b3a76400006125de565b60025550565b33610a4e5f546001600160a01b031690565b6001600160a01b031614610a745760405162461bcd60e51b81526004016107aa90612540565b6006805461ffff60a01b1916600160a01b60ff9485160260ff60a81b191617600160a81b9290931691909102919091179055565b33610aba5f546001600160a01b031690565b6001600160a01b031614610ae05760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b33610b1c5f546001600160a01b031690565b6001600160a01b031614610b425760405162461bcd60e51b81526004016107aa90612540565b620186a0610b5d6b033b2e3c9fd0803ce800000060016125de565b610b6791906125f5565b811015610bd45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527420302e30303125206f662074686520737570706c7960581b60648201526084016107aa565b6103e8610bee6b033b2e3c9fd0803ce800000060056125de565b610bf891906125f5565b811115610c645760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f7420626520686967686572207468616044820152736e20302e3525206f662074686520737570706c7960601b60648201526084016107aa565b600355565b33610c7b5f546001600160a01b031690565b6001600160a01b031614610ca15760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b33610cdd5f546001600160a01b031690565b6001600160a01b031614610d035760405162461bcd60e51b81526004016107aa90612540565b5f80546001600160a01b0319169055565b33610d265f546001600160a01b031690565b6001600160a01b031614610d4c5760405162461bcd60e51b81526004016107aa90612540565b670de0b6b3a76400006103e8610d6f6b033b2e3c9fd0803ce800000060016125de565b610d7991906125f5565b610d8391906125f5565b811015610de55760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d6178207472616e73616374696f6e206c6f776572604482015269207468616e20302e312560b01b60648201526084016107aa565b610df781670de0b6b3a76400006125de565b60015550565b33610e0f5f546001600160a01b031690565b6001600160a01b031614610e355760405162461bcd60e51b81526004016107aa90612540565b6006805460ff60c81b19169055565b33610e565f546001600160a01b031690565b6001600160a01b031614610e7c5760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b038116610ea25760405162461bcd60e51b81526004016107aa90612614565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b33610ed65f546001600160a01b031690565b6001600160a01b031614610efc5760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b038116610f225760405162461bcd60e51b81526004016107aa90612614565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b33610f565f546001600160a01b031690565b6001600160a01b031614610f7c5760405162461bcd60e51b81526004016107aa90612540565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610ffd5760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f76656400000000000060448201526064016107aa565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f61089f3384846116fe565b336110455f546001600160a01b031690565b6001600160a01b03161461106b5760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b0381166110915760405162461bcd60e51b81526004016107aa90612614565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b336110c55f546001600160a01b031690565b6001600160a01b0316146110eb5760405162461bcd60e51b81526004016107aa90612540565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561112f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111539190612644565b905061088e838383611e75565b336111725f546001600160a01b031690565b6001600160a01b0316146111985760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b0381166111e05760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016107aa565b5f816001600160a01b0316476040515f6040518083038185875af1925050503d805f8114611229576040519150601f19603f3d011682016040523d82523d5f602084013e61122e565b606091505b50509050806112735760405162461bcd60e51b815260206004820152601160248201527015da5d1a191c985dd85b0819985a5b1959607a1b60448201526064016107aa565b5050565b336112895f546001600160a01b031690565b6001600160a01b0316146112af5760405162461bcd60e51b81526004016107aa90612540565b600654600160d01b900460ff16156112d95760405162461bcd60e51b81526004016107aa90612575565b5f5b825181101561088e578181815181106112f6576112f661265b565b602002602001015160075f336001600160a01b03166001600160a01b031681526020019081526020015f205410156113405760405162461bcd60e51b81526004016107aa9061266f565b8181815181106113525761135261265b565b602002602001015160075f85848151811061136f5761136f61265b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f8282546113a491906126b5565b925050819055508181815181106113bd576113bd61265b565b602002602001015160075f336001600160a01b03166001600160a01b031681526020019081526020015f205f8282546113f691906126c8565b9250508190555082818151811061140f5761140f61265b565b60200260200101516001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848151811061145d5761145d61265b565b602002602001015160405161147491815260200190565b60405180910390a36001016112db565b336114965f546001600160a01b031690565b6001600160a01b0316146114bc5760405162461bcd60e51b81526004016107aa90612540565b6006805461ffff60b01b1916600160b01b60ff858116820260ff60b81b191692909217600160b81b8584168102919091179384905561150493908104831692919004166126db565b60ff166064146112735760405162461bcd60e51b815260206004820152602560248201527f446973747269627574696f6e206861766520746f20626520657175616c20746f604482015264203130302560d81b60648201526084016107aa565b336115765f546001600160a01b031690565b6001600160a01b03161461159c5760405162461bcd60e51b81526004016107aa90612540565b600654600160d01b900460ff16156115c65760405162461bcd60e51b81526004016107aa90612575565b6006805460ff60d01b1916600160d01b179055565b6001600160a01b03831661163d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107aa565b6001600160a01b03821661169e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107aa565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117625760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107aa565b6001600160a01b0382166117c45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107aa565b5f81116118255760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107aa565b600654600160d01b900460ff1615801561187957505f546001600160a01b0384811691161480159061186057506001600160a01b0383163014155b801561187957505f546001600160a01b03838116911614155b156118bc5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b60448201526064016107aa565b600654600160c81b900460ff1615611b7d575f546001600160a01b038481169116148015906118f857505f546001600160a01b03838116911614155b801561190c57506001600160a01b03821615155b801561192357506001600160a01b03821661dead14155b80156119395750600654600160c01b900460ff16155b15611b7d576001600160a01b0383165f908152600b602052604090205460ff16801561197d57506001600160a01b0382165f908152600a602052604090205460ff16155b15611a50576001548111156119e25760405162461bcd60e51b815260206004820152602560248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152640dac2f0a8f60db1b60648201526084016107aa565b6002546001600160a01b0383165f90815260076020526040902054611a0790836126b5565b1115611a4b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107aa565b611b7d565b6001600160a01b0382165f908152600b602052604090205460ff168015611a8f57506001600160a01b0383165f908152600a602052604090205460ff16155b15611af557600154811115611a4b5760405162461bcd60e51b815260206004820152602660248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015265040dac2f0a8f60d31b60648201526084016107aa565b6001600160a01b0382165f908152600a602052604090205460ff16611b7d576002546001600160a01b0383165f90815260076020526040902054611b3990836126b5565b1115611b7d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107aa565b600354305f90815260076020526040902054108015908190611ba95750600654600160c01b900460ff16155b8015611bcd57506001600160a01b0384165f908152600b602052604090205460ff16155b8015611bf157506001600160a01b0384165f9081526009602052604090205460ff16155b8015611c1557506001600160a01b0383165f9081526009602052604090205460ff16155b15611c43576006805460ff60c01b1916600160c01b179055611c35611f9c565b6006805460ff60c01b191690555b6006546001600160a01b0385165f9081526009602052604090205460ff600160c01b909204821615911680611c8f57506001600160a01b0384165f9081526009602052604090205460ff165b15611c9757505f5b6001600160a01b0385165f9081526007602052604090205483811015611ccf5760405162461bcd60e51b81526004016107aa9061266f565b5f8215611e03576001600160a01b0386165f908152600b602052604090205460ff168015611d085750600654600160a81b900460ff1615155b15611d3857600654606490611d2790600160a81b900460ff16876125de565b611d3191906125f5565b9050611d96565b6001600160a01b0387165f908152600b602052604090205460ff168015611d6a5750600654600160a01b900460ff1615155b15611d9657600654606490611d8990600160a01b900460ff16876125de565b611d9391906125f5565b90505b8015611e03576001600160a01b0387165f8181526007602090815260408083208054869003905530808452928190208054860190555184815297849003979192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b6001600160a01b038088165f8181526007602052604080822080548a900390559289168082529083902080548901905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e649089815260200190565b60405180910390a350505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f92839290871691611ed091906126f4565b5f604051808303815f865af19150503d805f8114611f09576040519150601f19603f3d011682016040523d82523d5f602084013e611f0e565b606091505b5091509150818015611f38575080511580611f38575080806020019051810190611f38919061270f565b611f955760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657248656c7065723a20494e5445524e414c205452414e5346456044820152671497d1905253115160c21b60648201526084016107aa565b5050505050565b6003545f611fab8260146125de565b305f908152600760205260409020541115611fd157600354611fce9060146125de565b91505b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106120045761200461265b565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061204c5761204c61265b565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac947906120a39086905f9086903090429060040161272a565b5f604051808303815f87803b1580156120ba575f80fd5b505af11580156120cc573d5f803e3d5ffd5b5047925050811590506121f7576006545f906064906120f590600160b01b900460ff16846125de565b6120ff91906125f5565b90505f61210c82846126c8565b6005546040519192506001600160a01b03169082905f81818185875af1925050503d805f8114612157576040519150601f19603f3d011682016040523d82523d5f602084013e61215c565b606091505b50506004546040519196506001600160a01b03169083905f81818185875af1925050503d805f81146121a9576040519150601f19603f3d011682016040523d82523d5f602084013e6121ae565b606091505b505060408051888152602081018590529081018390529095507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150505b50505050565b5f5b838110156122175781810151838201526020016121ff565b50505f910152565b602081525f825180602084015261223d8160408501602087016121fd565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114612267575f80fd5b919050565b5f806040838503121561227d575f80fd5b61228683612251565b946020939093013593505050565b5f805f606084860312156122a6575f80fd5b6122af84612251565b92506122bd60208501612251565b9150604084013590509250925092565b5f602082840312156122dd575f80fd5b5035919050565b803560ff81168114612267575f80fd5b5f8060408385031215612305575f80fd5b61230e836122e4565b915061231c602084016122e4565b90509250929050565b8015158114612332575f80fd5b50565b5f8060408385031215612346575f80fd5b61234f83612251565b9150602083013561235f81612325565b809150509250929050565b5f6020828403121561237a575f80fd5b61238382612251565b9392505050565b5f806040838503121561239b575f80fd5b6123a483612251565b915061231c60208401612251565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156123ef576123ef6123b2565b604052919050565b5f67ffffffffffffffff821115612410576124106123b2565b5060051b60200190565b5f82601f830112612429575f80fd5b8135602061243e612439836123f7565b6123c6565b8083825260208201915060208460051b87010193508684111561245f575f80fd5b602086015b8481101561247b5780358352918301918301612464565b509695505050505050565b5f8060408385031215612497575f80fd5b823567ffffffffffffffff808211156124ae575f80fd5b818501915085601f8301126124c1575f80fd5b813560206124d1612439836123f7565b82815260059290921b840181019181810190898411156124ef575f80fd5b948201945b838610156125145761250586612251565b825294820194908201906124f4565b96505086013592505080821115612529575f80fd5b506125368582860161241a565b9150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f105b1c9958591e481b185d5b98da195960821b604082015260600190565b5f805f606084860312156125b1575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176108a3576108a36125ca565b5f8261260f57634e487b7160e01b5f52601260045260245ffd5b500490565b602080825260169082015275416464726573732063616e6e6f74206265207a65726f60501b604082015260600190565b5f60208284031215612654575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b808201808211156108a3576108a36125ca565b818103818111156108a3576108a36125ca565b60ff81811683821601908111156108a3576108a36125ca565b5f82516127058184602087016121fd565b9190910192915050565b5f6020828403121561271f575f80fd5b815161238381612325565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561277a5784516001600160a01b031683529383019391830191600101612755565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220a9e1e71cedce8a3148c1f55f0fb426338babb14fdf0e7862100f53bc0a9511e264736f6c634300081600334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x60806040526004361061022b575f3560e01c8063751039fc11610129578063c8c8ebe4116100a8578063e2f456051161006d578063e2f45605146106f6578063e71079471461070b578063f5ec72341461072a578063f8b45b0514610749578063fb201b1d1461075e575f80fd5b8063c8c8ebe41461063e578063cc32d17614610653578063d201b01e14610673578063d85ba06314610692578063dd62ed3e146106b2575f80fd5b806395d89b41116100ee57806395d89b41146105965780639a7a23d6146105c2578063a9059cbb146105e1578063adfa29e514610600578063bc205ad31461061f575f80fd5b8063751039fc146104f15780637cb332bb14610505578063809d458d1461052457806385ecafd7146105435780638da5cb5b1461057a575f80fd5b806349bd5a5e116101b557806366650dae1161017a57806366650dae1461044b5780636a486a8e1461046a57806370a082311461048a578063715018a6146104be57806374010ece146104d2575f80fd5b806349bd5a5e1461039b5780634a62bb65146103ce5780634fcd2446146103ee578063590ffdce1461040d5780636402511e1461042c575f80fd5b806318160ddd116101fb57806318160ddd146102f057806321d37e391461031857806323b872dd1461034a57806327a14fc214610369578063313ce56714610388575f80fd5b806302ac81681461023657806306fdde0314610240578063095ea7b3146102825780631694505e146102b1575f80fd5b3661023257005b5f80fd5b61023e610772565b005b34801561024b575f80fd5b5060408051808201909152600881526750696e6e61636c6560c01b60208201525b604051610279919061221f565b60405180910390f35b34801561028d575f80fd5b506102a161029c36600461226c565b610893565b6040519015158152602001610279565b3480156102bc575f80fd5b506102d8737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610279565b3480156102fb575f80fd5b506b033b2e3c9fd0803ce80000005b604051908152602001610279565b348015610323575f80fd5b5060065461033890600160b01b900460ff1681565b60405160ff9091168152602001610279565b348015610355575f80fd5b506102a1610364366004612294565b6108a9565b348015610374575f80fd5b5061023e6103833660046122cd565b610958565b348015610393575f80fd5b506012610338565b3480156103a6575f80fd5b506102d87f0000000000000000000000008777fed257c59a5e5ff92cfbd92d3beef15942b881565b3480156103d9575f80fd5b506006546102a190600160c81b900460ff1681565b3480156103f9575f80fd5b5061023e6104083660046122f4565b610a3c565b348015610418575f80fd5b5061023e610427366004612335565b610aa8565b348015610437575f80fd5b5061023e6104463660046122cd565b610b0a565b348015610456575f80fd5b5061023e610465366004612335565b610c69565b348015610475575f80fd5b5060065461033890600160a81b900460ff1681565b348015610495575f80fd5b5061030a6104a436600461236a565b6001600160a01b03165f9081526007602052604090205490565b3480156104c9575f80fd5b5061023e610ccb565b3480156104dd575f80fd5b5061023e6104ec3660046122cd565b610d14565b3480156104fc575f80fd5b5061023e610dfd565b348015610510575f80fd5b5061023e61051f36600461236a565b610e44565b34801561052f575f80fd5b5061023e61053e36600461236a565b610ec4565b34801561054e575f80fd5b506102a161055d36600461236a565b6001600160a01b03165f9081526009602052604090205460ff1690565b348015610585575f80fd5b505f546001600160a01b03166102d8565b3480156105a1575f80fd5b506040805180820190915260048152632824a72760e11b602082015261026c565b3480156105cd575f80fd5b5061023e6105dc366004612335565b610f44565b3480156105ec575f80fd5b506102a16105fb36600461226c565b611027565b34801561060b575f80fd5b5061023e61061a36600461236a565b611033565b34801561062a575f80fd5b5061023e61063936600461238a565b6110b3565b348015610649575f80fd5b5061030a60015481565b34801561065e575f80fd5b5060065461033890600160b81b900460ff1681565b34801561067e575f80fd5b5061023e61068d36600461236a565b611160565b34801561069d575f80fd5b5060065461033890600160a01b900460ff1681565b3480156106bd575f80fd5b5061030a6106cc36600461238a565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205490565b348015610701575f80fd5b5061030a60035481565b348015610716575f80fd5b5061023e610725366004612486565b611277565b348015610735575f80fd5b5061023e6107443660046122f4565b611484565b348015610754575f80fd5b5061030a60025481565b348015610769575f80fd5b5061023e611564565b336107845f546001600160a01b031690565b6001600160a01b0316146107b35760405162461bcd60e51b81526004016107aa90612540565b60405180910390fd5b600654600160d01b900460ff16156107dd5760405162461bcd60e51b81526004016107aa90612575565b305f8181526007602052604080822054600654915163f305d71960e01b8152600481019490945260248401526044830182905260648301919091526001600160a01b031660848201524260a4820152737a250d5630b4cf539739df2c5dacb4c659f2488d9063f305d71990349060c40160606040518083038185885af1158015610869573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061088e919061259f565b505050565b5f61089f3384846115db565b5060015b92915050565b6001600160a01b0383165f9081526008602090815260408083203384529091528120545f19811461094257828110156109355760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016107aa565b61094285338584036115db565b61094d8585856116fe565b506001949350505050565b3361096a5f546001600160a01b031690565b6001600160a01b0316146109905760405162461bcd60e51b81526004016107aa90612540565b670de0b6b3a76400006103e86109b36b033b2e3c9fd0803ce800000060016125de565b6109bd91906125f5565b6109c791906125f5565b811015610a245760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420736574206d61782077616c6c6574206c6f776572207468616e60448201526420302e312560d81b60648201526084016107aa565b610a3681670de0b6b3a76400006125de565b60025550565b33610a4e5f546001600160a01b031690565b6001600160a01b031614610a745760405162461bcd60e51b81526004016107aa90612540565b6006805461ffff60a01b1916600160a01b60ff9485160260ff60a81b191617600160a81b9290931691909102919091179055565b33610aba5f546001600160a01b031690565b6001600160a01b031614610ae05760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b33610b1c5f546001600160a01b031690565b6001600160a01b031614610b425760405162461bcd60e51b81526004016107aa90612540565b620186a0610b5d6b033b2e3c9fd0803ce800000060016125de565b610b6791906125f5565b811015610bd45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527420302e30303125206f662074686520737570706c7960581b60648201526084016107aa565b6103e8610bee6b033b2e3c9fd0803ce800000060056125de565b610bf891906125f5565b811115610c645760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f7420626520686967686572207468616044820152736e20302e3525206f662074686520737570706c7960601b60648201526084016107aa565b600355565b33610c7b5f546001600160a01b031690565b6001600160a01b031614610ca15760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b33610cdd5f546001600160a01b031690565b6001600160a01b031614610d035760405162461bcd60e51b81526004016107aa90612540565b5f80546001600160a01b0319169055565b33610d265f546001600160a01b031690565b6001600160a01b031614610d4c5760405162461bcd60e51b81526004016107aa90612540565b670de0b6b3a76400006103e8610d6f6b033b2e3c9fd0803ce800000060016125de565b610d7991906125f5565b610d8391906125f5565b811015610de55760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d6178207472616e73616374696f6e206c6f776572604482015269207468616e20302e312560b01b60648201526084016107aa565b610df781670de0b6b3a76400006125de565b60015550565b33610e0f5f546001600160a01b031690565b6001600160a01b031614610e355760405162461bcd60e51b81526004016107aa90612540565b6006805460ff60c81b19169055565b33610e565f546001600160a01b031690565b6001600160a01b031614610e7c5760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b038116610ea25760405162461bcd60e51b81526004016107aa90612614565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b33610ed65f546001600160a01b031690565b6001600160a01b031614610efc5760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b038116610f225760405162461bcd60e51b81526004016107aa90612614565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b33610f565f546001600160a01b031690565b6001600160a01b031614610f7c5760405162461bcd60e51b81526004016107aa90612540565b7f0000000000000000000000008777fed257c59a5e5ff92cfbd92d3beef15942b86001600160a01b0316826001600160a01b031603610ffd5760405162461bcd60e51b815260206004820152601a60248201527f54686520706169722063616e6e6f742062652072656d6f76656400000000000060448201526064016107aa565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b5f61089f3384846116fe565b336110455f546001600160a01b031690565b6001600160a01b03161461106b5760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b0381166110915760405162461bcd60e51b81526004016107aa90612614565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b336110c55f546001600160a01b031690565b6001600160a01b0316146110eb5760405162461bcd60e51b81526004016107aa90612540565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561112f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111539190612644565b905061088e838383611e75565b336111725f546001600160a01b031690565b6001600160a01b0316146111985760405162461bcd60e51b81526004016107aa90612540565b6001600160a01b0381166111e05760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016107aa565b5f816001600160a01b0316476040515f6040518083038185875af1925050503d805f8114611229576040519150601f19603f3d011682016040523d82523d5f602084013e61122e565b606091505b50509050806112735760405162461bcd60e51b815260206004820152601160248201527015da5d1a191c985dd85b0819985a5b1959607a1b60448201526064016107aa565b5050565b336112895f546001600160a01b031690565b6001600160a01b0316146112af5760405162461bcd60e51b81526004016107aa90612540565b600654600160d01b900460ff16156112d95760405162461bcd60e51b81526004016107aa90612575565b5f5b825181101561088e578181815181106112f6576112f661265b565b602002602001015160075f336001600160a01b03166001600160a01b031681526020019081526020015f205410156113405760405162461bcd60e51b81526004016107aa9061266f565b8181815181106113525761135261265b565b602002602001015160075f85848151811061136f5761136f61265b565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f8282546113a491906126b5565b925050819055508181815181106113bd576113bd61265b565b602002602001015160075f336001600160a01b03166001600160a01b031681526020019081526020015f205f8282546113f691906126c8565b9250508190555082818151811061140f5761140f61265b565b60200260200101516001600160a01b0316336001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84848151811061145d5761145d61265b565b602002602001015160405161147491815260200190565b60405180910390a36001016112db565b336114965f546001600160a01b031690565b6001600160a01b0316146114bc5760405162461bcd60e51b81526004016107aa90612540565b6006805461ffff60b01b1916600160b01b60ff858116820260ff60b81b191692909217600160b81b8584168102919091179384905561150493908104831692919004166126db565b60ff166064146112735760405162461bcd60e51b815260206004820152602560248201527f446973747269627574696f6e206861766520746f20626520657175616c20746f604482015264203130302560d81b60648201526084016107aa565b336115765f546001600160a01b031690565b6001600160a01b03161461159c5760405162461bcd60e51b81526004016107aa90612540565b600654600160d01b900460ff16156115c65760405162461bcd60e51b81526004016107aa90612575565b6006805460ff60d01b1916600160d01b179055565b6001600160a01b03831661163d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107aa565b6001600160a01b03821661169e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107aa565b6001600160a01b038381165f8181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117625760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107aa565b6001600160a01b0382166117c45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107aa565b5f81116118255760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107aa565b600654600160d01b900460ff1615801561187957505f546001600160a01b0384811691161480159061186057506001600160a01b0383163014155b801561187957505f546001600160a01b03838116911614155b156118bc5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b60448201526064016107aa565b600654600160c81b900460ff1615611b7d575f546001600160a01b038481169116148015906118f857505f546001600160a01b03838116911614155b801561190c57506001600160a01b03821615155b801561192357506001600160a01b03821661dead14155b80156119395750600654600160c01b900460ff16155b15611b7d576001600160a01b0383165f908152600b602052604090205460ff16801561197d57506001600160a01b0382165f908152600a602052604090205460ff16155b15611a50576001548111156119e25760405162461bcd60e51b815260206004820152602560248201527f427579207472616e7366657220616d6f756e74206578636565647320746865206044820152640dac2f0a8f60db1b60648201526084016107aa565b6002546001600160a01b0383165f90815260076020526040902054611a0790836126b5565b1115611a4b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107aa565b611b7d565b6001600160a01b0382165f908152600b602052604090205460ff168015611a8f57506001600160a01b0383165f908152600a602052604090205460ff16155b15611af557600154811115611a4b5760405162461bcd60e51b815260206004820152602660248201527f53656c6c207472616e7366657220616d6f756e74206578636565647320746865604482015265040dac2f0a8f60d31b60648201526084016107aa565b6001600160a01b0382165f908152600a602052604090205460ff16611b7d576002546001600160a01b0383165f90815260076020526040902054611b3990836126b5565b1115611b7d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016107aa565b600354305f90815260076020526040902054108015908190611ba95750600654600160c01b900460ff16155b8015611bcd57506001600160a01b0384165f908152600b602052604090205460ff16155b8015611bf157506001600160a01b0384165f9081526009602052604090205460ff16155b8015611c1557506001600160a01b0383165f9081526009602052604090205460ff16155b15611c43576006805460ff60c01b1916600160c01b179055611c35611f9c565b6006805460ff60c01b191690555b6006546001600160a01b0385165f9081526009602052604090205460ff600160c01b909204821615911680611c8f57506001600160a01b0384165f9081526009602052604090205460ff165b15611c9757505f5b6001600160a01b0385165f9081526007602052604090205483811015611ccf5760405162461bcd60e51b81526004016107aa9061266f565b5f8215611e03576001600160a01b0386165f908152600b602052604090205460ff168015611d085750600654600160a81b900460ff1615155b15611d3857600654606490611d2790600160a81b900460ff16876125de565b611d3191906125f5565b9050611d96565b6001600160a01b0387165f908152600b602052604090205460ff168015611d6a5750600654600160a01b900460ff1615155b15611d9657600654606490611d8990600160a01b900460ff16876125de565b611d9391906125f5565b90505b8015611e03576001600160a01b0387165f8181526007602090815260408083208054869003905530808452928190208054860190555184815297849003979192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b6001600160a01b038088165f8181526007602052604080822080548a900390559289168082529083902080548901905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e649089815260200190565b60405180910390a350505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f92839290871691611ed091906126f4565b5f604051808303815f865af19150503d805f8114611f09576040519150601f19603f3d011682016040523d82523d5f602084013e611f0e565b606091505b5091509150818015611f38575080511580611f38575080806020019051810190611f38919061270f565b611f955760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657248656c7065723a20494e5445524e414c205452414e5346456044820152671497d1905253115160c21b60648201526084016107aa565b5050505050565b6003545f611fab8260146125de565b305f908152600760205260409020541115611fd157600354611fce9060146125de565b91505b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106120045761200461265b565b60200260200101906001600160a01b031690816001600160a01b03168152505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28160018151811061204c5761204c61265b565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac947906120a39086905f9086903090429060040161272a565b5f604051808303815f87803b1580156120ba575f80fd5b505af11580156120cc573d5f803e3d5ffd5b5047925050811590506121f7576006545f906064906120f590600160b01b900460ff16846125de565b6120ff91906125f5565b90505f61210c82846126c8565b6005546040519192506001600160a01b03169082905f81818185875af1925050503d805f8114612157576040519150601f19603f3d011682016040523d82523d5f602084013e61215c565b606091505b50506004546040519196506001600160a01b03169083905f81818185875af1925050503d805f81146121a9576040519150601f19603f3d011682016040523d82523d5f602084013e6121ae565b606091505b505060408051888152602081018590529081018390529095507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150505b50505050565b5f5b838110156122175781810151838201526020016121ff565b50505f910152565b602081525f825180602084015261223d8160408501602087016121fd565b601f01601f19169190910160400192915050565b80356001600160a01b0381168114612267575f80fd5b919050565b5f806040838503121561227d575f80fd5b61228683612251565b946020939093013593505050565b5f805f606084860312156122a6575f80fd5b6122af84612251565b92506122bd60208501612251565b9150604084013590509250925092565b5f602082840312156122dd575f80fd5b5035919050565b803560ff81168114612267575f80fd5b5f8060408385031215612305575f80fd5b61230e836122e4565b915061231c602084016122e4565b90509250929050565b8015158114612332575f80fd5b50565b5f8060408385031215612346575f80fd5b61234f83612251565b9150602083013561235f81612325565b809150509250929050565b5f6020828403121561237a575f80fd5b61238382612251565b9392505050565b5f806040838503121561239b575f80fd5b6123a483612251565b915061231c60208401612251565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156123ef576123ef6123b2565b604052919050565b5f67ffffffffffffffff821115612410576124106123b2565b5060051b60200190565b5f82601f830112612429575f80fd5b8135602061243e612439836123f7565b6123c6565b8083825260208201915060208460051b87010193508684111561245f575f80fd5b602086015b8481101561247b5780358352918301918301612464565b509695505050505050565b5f8060408385031215612497575f80fd5b823567ffffffffffffffff808211156124ae575f80fd5b818501915085601f8301126124c1575f80fd5b813560206124d1612439836123f7565b82815260059290921b840181019181810190898411156124ef575f80fd5b948201945b838610156125145761250586612251565b825294820194908201906124f4565b96505086013592505080821115612529575f80fd5b506125368582860161241a565b9150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526010908201526f105b1c9958591e481b185d5b98da195960821b604082015260600190565b5f805f606084860312156125b1575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176108a3576108a36125ca565b5f8261260f57634e487b7160e01b5f52601260045260245ffd5b500490565b602080825260169082015275416464726573732063616e6e6f74206265207a65726f60501b604082015260600190565b5f60208284031215612654575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b808201808211156108a3576108a36125ca565b818103818111156108a3576108a36125ca565b60ff81811683821601908111156108a3576108a36125ca565b5f82516127058184602087016121fd565b9190910192915050565b5f6020828403121561271f575f80fd5b815161238381612325565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561277a5784516001600160a01b031683529383019391830191600101612755565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220a9e1e71cedce8a3148c1f55f0fb426338babb14fdf0e7862100f53bc0a9511e264736f6c63430008160033

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.