ETH Price: $3,594.72 (+4.89%)
 

Overview

Max Total Supply

10,000,000 FAI

Holders

51

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
44,770.00982613169062854 FAI

Value
$0.00
0xc44e25e2255c7fcf1cf470167d314f2d5bc08644
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FAI

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-12
*/

// SPDX-License-Identifier: MIT

/*
    Website: http://flashai.pro/

    Telegram: https://t.me/FlashAIpro
*/

pragma solidity ^0.8.22;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    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 private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = 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 to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
}

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

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
        function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract FAI is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private constant _router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    address public uniV2PairAddress;
    address public immutable feeRecipientAddress;

    uint256 public maxWalletSize;
    uint256 public feeThreshold;

    uint256 public swapFee;
    uint256 public swapBackFee;

    bool private _inSwap;
    mapping (address => bool) private _excludedLimits;

    constructor() ERC20("FlashAI", "FAI") payable {
        uint256 totalSupply = 10000000 * 1e18;

        maxWalletSize = totalSupply.mul(2).div(100);
        feeThreshold = totalSupply.mul(5).div(1000);

        feeRecipientAddress = 0xE66159742d53C7463BEFB4A58ccF2F939c390f55;

        swapFee = 25;
        swapBackFee = 45;

        _excludedLimits[feeRecipientAddress] = true;
        _excludedLimits[msg.sender] = true;
        _excludedLimits[tx.origin] = true;
        _excludedLimits[address(this)] = true;
        _excludedLimits[address(0xdead)] = true;

        _mint(tx.origin, totalSupply);

    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "Transfer from the zero address not allowed.");
        require(to != address(0), "Transfer to the zero address not allowed.");
        require(amount > 0, 'Transfer amount must be greater than zero.');

        bool excluded = _excludedLimits[from] || _excludedLimits[to];
        require(uniV2PairAddress != address(0) || excluded, "Liquidity pair not yet created.");

        bool isSell = to == uniV2PairAddress;
        bool isBuy = from == uniV2PairAddress;

        if (!isSell && maxWalletSize > 0 && !excluded)
            require(balanceOf(to) + amount <= maxWalletSize, "Balance exceeds max holdings amount, consider using a second wallet.");

        if (
            balanceOf(address(this)) >= feeThreshold &&
            !_inSwap &&
            isSell &&
            !excluded
        ) {
            _inSwap = true;
            swapBackTokenFee();
            _inSwap = false;
        }

        uint256 fee = isBuy ? swapFee : swapBackFee;

        if (fee > 0) {
            if (!excluded && !_inSwap && (isBuy || isSell)) {
                uint256 fees = amount.mul(fee).div(100);

                if (fees > 0)
                    super._transfer(from, address(this), fees);

                amount = amount.sub(fees);
            }
        }

        super._transfer(from, to, amount);
    }

    function swapBackTokenFee() public {
              uint256 contractBalance = balanceOf(address(this));
              if (contractBalance == 0) return;
              if (contractBalance > feeThreshold) contractBalance = feeThreshold;

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

              _approve(address(this), address(_router), contractBalance);

              _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                  contractBalance,
                  0,
                  path,
                  feeRecipientAddress,
                  block.timestamp
              );

          }

    function enableTrading() external onlyOwner {
        uniV2PairAddress = IUniswapV2Factory(_router.factory()).getPair(address(this), _router.WETH());
    }

    function updateFeeTokenThreshold(uint256 newThreshold) external onlyOwner {
        require(newThreshold >= totalSupply().mul(1).div(100000), "Swap threshold cannot be lower than 0.001% total supply.");
        require(newThreshold <= totalSupply().mul(2).div(100), "Swap threshold cannot be higher than 2% total supply.");
        feeThreshold = newThreshold;
    }

    function setFees(uint256 newBuyFee, uint256 newSellFee) external onlyOwner {
        require(newBuyFee <= 25 && newSellFee <= 45, 'Attempting to set fee higher than initial fee.'); // smaller than or equal to initial fee
        swapFee = newBuyFee;
        swapBackFee = newSellFee;
    }

    function removeHoldingLimit() external onlyOwner {
        maxWalletSize = 0;
    }

    function removeStuckETH() external onlyOwner {
        payable(feeRecipientAddress).transfer(address(this).balance);
    }

    function removeStuckERC20(IERC20 token) external onlyOwner {
        token.transfer(feeRecipientAddress, token.balanceOf(address(this)));
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRecipientAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"removeStuckERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyFee","type":"uint256"},{"internalType":"uint256","name":"newSellFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBackTokenFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniV2PairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateFeeTokenThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600781526020017f466c6173684149000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f464149000000000000000000000000000000000000000000000000000000000081525081600390816200008191906200081c565b5080600490816200009391906200081c565b505050620000b6620000aa6200034660201b60201c565b6200034d60201b60201c565b5f6a084595161401484a0000009050620000f06064620000e16002846200041060201b90919060201c565b6200042760201b90919060201c565b600781905550620001226103e8620001136005846200041060201b90919060201c565b6200042760201b90919060201c565b60088190555073e66159742d53c7463befb4a58ccf2f939c390f5573ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506019600981905550602d600a819055506001600c5f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200033f32826200043e60201b60201c565b5062000abf565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81836200041f91906200092d565b905092915050565b5f8183620004369190620009a4565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004a69062000a39565b60405180910390fd5b620004c25f8383620005ae60201b60201c565b8060025f828254620004d5919062000a59565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000529919062000a59565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200058f919062000aa4565b60405180910390a3620005aa5f8383620005b360201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200063457607f821691505b6020821081036200064a5762000649620005ef565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006ae7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000671565b620006ba868362000671565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000704620006fe620006f884620006d2565b620006db565b620006d2565b9050919050565b5f819050919050565b6200071f83620006e4565b620007376200072e826200070b565b8484546200067d565b825550505050565b5f90565b6200074d6200073f565b6200075a81848462000714565b505050565b5b818110156200078157620007755f8262000743565b60018101905062000760565b5050565b601f821115620007d0576200079a8162000650565b620007a58462000662565b81016020851015620007b5578190505b620007cd620007c48562000662565b8301826200075f565b50505b505050565b5f82821c905092915050565b5f620007f25f1984600802620007d5565b1980831691505092915050565b5f6200080c8383620007e1565b9150826002028217905092915050565b6200082782620005b8565b67ffffffffffffffff811115620008435762000842620005c2565b5b6200084f82546200061c565b6200085c82828562000785565b5f60209050601f83116001811462000892575f84156200087d578287015190505b620008898582620007ff565b865550620008f8565b601f198416620008a28662000650565b5f5b82811015620008cb57848901518255600182019150602085019450602081019050620008a4565b86831015620008eb5784890151620008e7601f891682620007e1565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200093982620006d2565b91506200094683620006d2565b92508282026200095681620006d2565b9150828204841483151762000970576200096f62000900565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620009b082620006d2565b9150620009bd83620006d2565b925082620009d057620009cf62000977565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000a21601f83620009db565b915062000a2e82620009eb565b602082019050919050565b5f6020820190508181035f83015262000a528162000a13565b9050919050565b5f62000a6582620006d2565b915062000a7283620006d2565b925082820190508082111562000a8d5762000a8c62000900565b5b92915050565b62000a9e81620006d2565b82525050565b5f60208201905062000ab95f83018462000a93565b92915050565b6080516131d362000aed5f395f818161083901528181610b68015281816111f1015261137301526131d35ff3fe60806040526004361061019f575f3560e01c8063715018a6116100eb578063a9059cbb11610089578063dd62ed3e11610063578063dd62ed3e14610574578063f1bab2ec146105b0578063f2fde38b146105da578063f442d3fb14610602576101a6565b8063a9059cbb146104e6578063c83c383714610522578063cb4e162b1461054a576101a6565b80638f3fa860116100c55780638f3fa860146104405780639049a3ce1461046a57806395d89b4114610480578063a457c2d7146104aa576101a6565b8063715018a6146103ea5780638a8c523c146104005780638da5cb5b14610416576101a6565b8063313ce5671161015857806353945d7b1161013257806353945d7b1461033057806354c35c281461035a57806354cf2aeb1461038457806370a08231146103ae576101a6565b8063313ce567146102b457806339509351146102de5780634599471d1461031a576101a6565b806306fdde03146101aa578063095ea7b3146101d45780630b78f9c0146102105780630f299cf11461023857806318160ddd1461024e57806323b872dd14610278576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101be61062a565b6040516101cb91906120f3565b60405180910390f35b3480156101df575f80fd5b506101fa60048036038101906101f591906121a4565b6106ba565b60405161020791906121fc565b60405180910390f35b34801561021b575f80fd5b5061023660048036038101906102319190612215565b6106dc565b005b348015610243575f80fd5b5061024c6107bb565b005b348015610259575f80fd5b5061026261089d565b60405161026f9190612262565b60405180910390f35b348015610283575f80fd5b5061029e6004803603810190610299919061227b565b6108a6565b6040516102ab91906121fc565b60405180910390f35b3480156102bf575f80fd5b506102c86108d4565b6040516102d591906122e6565b60405180910390f35b3480156102e9575f80fd5b5061030460048036038101906102ff91906121a4565b6108dc565b60405161031191906121fc565b60405180910390f35b348015610325575f80fd5b5061032e610981565b005b34801561033b575f80fd5b50610344610bda565b604051610351919061230e565b60405180910390f35b348015610365575f80fd5b5061036e610bff565b60405161037b9190612262565b60405180910390f35b34801561038f575f80fd5b50610398610c05565b6040516103a59190612262565b60405180910390f35b3480156103b9575f80fd5b506103d460048036038101906103cf9190612327565b610c0b565b6040516103e19190612262565b60405180910390f35b3480156103f5575f80fd5b506103fe610c50565b005b34801561040b575f80fd5b50610414610cd7565b005b348015610421575f80fd5b5061042a610f0e565b604051610437919061230e565b60405180910390f35b34801561044b575f80fd5b50610454610f36565b6040516104619190612262565b60405180910390f35b348015610475575f80fd5b5061047e610f3c565b005b34801561048b575f80fd5b50610494610fc1565b6040516104a191906120f3565b60405180910390f35b3480156104b5575f80fd5b506104d060048036038101906104cb91906121a4565b611051565b6040516104dd91906121fc565b60405180910390f35b3480156104f1575f80fd5b5061050c600480360381019061050791906121a4565b611135565b60405161051991906121fc565b60405180910390f35b34801561052d575f80fd5b506105486004803603810190610543919061238d565b611157565b005b348015610555575f80fd5b5061055e6112e9565b60405161056b9190612262565b60405180910390f35b34801561057f575f80fd5b5061059a600480360381019061059591906123b8565b6112ef565b6040516105a79190612262565b60405180910390f35b3480156105bb575f80fd5b506105c4611371565b6040516105d1919061230e565b60405180910390f35b3480156105e5575f80fd5b5061060060048036038101906105fb9190612327565b611395565b005b34801561060d575f80fd5b50610628600480360381019061062391906123f6565b61148b565b005b6060600380546106399061244e565b80601f01602080910402602001604051908101604052809291908181526020018280546106659061244e565b80156106b05780601f10610687576101008083540402835291602001916106b0565b820191905f5260205f20905b81548152906001019060200180831161069357829003601f168201915b5050505050905090565b5f806106c46115f3565b90506106d18185856115fa565b600191505092915050565b6106e46115f3565b73ffffffffffffffffffffffffffffffffffffffff16610702610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614610758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074f906124c8565b60405180910390fd5b6019821115801561076a5750602d8111155b6107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a090612556565b60405180910390fd5b8160098190555080600a819055505050565b6107c36115f3565b73ffffffffffffffffffffffffffffffffffffffff166107e1610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082e906124c8565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561089a573d5f803e3d5ffd5b50565b5f600254905090565b5f806108b06115f3565b90506108bd8582856117bd565b6108c8858585611848565b60019150509392505050565b5f6012905090565b5f806108e66115f3565b905061097681858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461097191906125a1565b6115fa565b600191505092915050565b5f61098b30610c0b565b90505f810361099a5750610bd8565b6008548111156109aa5760085490505b5f600267ffffffffffffffff8111156109c6576109c56125d4565b5b6040519080825280602002602001820160405280156109f45781602001602082028036833780820191505090505b50905030815f81518110610a0b57610a0a612601565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac69190612642565b81600181518110610ada57610ad9612601565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610b3330737a250d5630b4cf539739df2c5dacb4c659f2488d846115fa565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f847f0000000000000000000000000000000000000000000000000000000000000000426040518663ffffffff1660e01b8152600401610ba8959493929190612766565b5f604051808303815f87803b158015610bbf575f80fd5b505af1158015610bd1573d5f803e3d5ffd5b5050505050505b565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60095481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c586115f3565b73ffffffffffffffffffffffffffffffffffffffff16610c76610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc3906124c8565b60405180910390fd5b610cd55f611ce8565b565b610cdf6115f3565b73ffffffffffffffffffffffffffffffffffffffff16610cfd610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a906124c8565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610db0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd49190612642565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e719190612642565b6040518363ffffffff1660e01b8152600401610e8e9291906127be565b602060405180830381865afa158015610ea9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ecd9190612642565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075481565b610f446115f3565b73ffffffffffffffffffffffffffffffffffffffff16610f62610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614610fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faf906124c8565b60405180910390fd5b5f600781905550565b606060048054610fd09061244e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffc9061244e565b80156110475780601f1061101e57610100808354040283529160200191611047565b820191905f5260205f20905b81548152906001019060200180831161102a57829003601f168201915b5050505050905090565b5f8061105b6115f3565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508381101561111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111390612855565b60405180910390fd5b61112982868684036115fa565b60019250505092915050565b5f8061113f6115f3565b905061114c818585611848565b600191505092915050565b61115f6115f3565b73ffffffffffffffffffffffffffffffffffffffff1661117d610f0e565b73ffffffffffffffffffffffffffffffffffffffff16146111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca906124c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7f00000000000000000000000000000000000000000000000000000000000000008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611249919061230e565b602060405180830381865afa158015611264573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112889190612887565b6040518363ffffffff1660e01b81526004016112a59291906128b2565b6020604051808303815f875af11580156112c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e59190612903565b5050565b60085481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61139d6115f3565b73ffffffffffffffffffffffffffffffffffffffff166113bb610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611408906124c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361147f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114769061299e565b60405180910390fd5b61148881611ce8565b50565b6114936115f3565b73ffffffffffffffffffffffffffffffffffffffff166114b1610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906124c8565b60405180910390fd5b611537620186a0611529600161151b61089d565b611dab90919063ffffffff16565b611dc090919063ffffffff16565b811015611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157090612a2c565b60405180910390fd5b6115a76064611599600261158b61089d565b611dab90919063ffffffff16565b611dc090919063ffffffff16565b8111156115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090612aba565b60405180910390fd5b8060088190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90612b48565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90612bd6565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117b09190612262565b60405180910390a3505050565b5f6117c884846112ef565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118425781811015611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90612c3e565b60405180910390fd5b61184184848484036115fa565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90612ccc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90612d5a565b60405180910390fd5b5f8111611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195d90612de8565b60405180910390fd5b5f600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611a025750600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580611a5d5750805b611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390612e50565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905081158015611b5157505f600754115b8015611b5b575082155b15611bb95760075484611b6d87610c0b565b611b7791906125a1565b1115611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90612f04565b60405180910390fd5b5b600854611bc530610c0b565b10158015611bdf5750600b5f9054906101000a900460ff16155b8015611be85750815b8015611bf2575082155b15611c33576001600b5f6101000a81548160ff021916908315150217905550611c19610981565b5f600b5f6101000a81548160ff0219169083151502179055505b5f81611c4157600a54611c45565b6009545b90505f811115611cd45783158015611c695750600b5f9054906101000a900460ff16155b8015611c7a57508180611c795750825b5b15611cd3575f611ca66064611c988489611dab90919063ffffffff16565b611dc090919063ffffffff16565b90505f811115611cbc57611cbb883083611dd5565b5b611ccf818761204a90919063ffffffff16565b9550505b5b611cdf878787611dd5565b50505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8183611db89190612f22565b905092915050565b5f8183611dcd9190612f90565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90613030565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906130be565b60405180910390fd5b611ebc83838361205f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f369061314c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611fcd91906125a1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120319190612262565b60405180910390a3612044848484612064565b50505050565b5f8183612057919061316a565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156120a0578082015181840152602081019050612085565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6120c582612069565b6120cf8185612073565b93506120df818560208601612083565b6120e8816120ab565b840191505092915050565b5f6020820190508181035f83015261210b81846120bb565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61214082612117565b9050919050565b61215081612136565b811461215a575f80fd5b50565b5f8135905061216b81612147565b92915050565b5f819050919050565b61218381612171565b811461218d575f80fd5b50565b5f8135905061219e8161217a565b92915050565b5f80604083850312156121ba576121b9612113565b5b5f6121c78582860161215d565b92505060206121d885828601612190565b9150509250929050565b5f8115159050919050565b6121f6816121e2565b82525050565b5f60208201905061220f5f8301846121ed565b92915050565b5f806040838503121561222b5761222a612113565b5b5f61223885828601612190565b925050602061224985828601612190565b9150509250929050565b61225c81612171565b82525050565b5f6020820190506122755f830184612253565b92915050565b5f805f6060848603121561229257612291612113565b5b5f61229f8682870161215d565b93505060206122b08682870161215d565b92505060406122c186828701612190565b9150509250925092565b5f60ff82169050919050565b6122e0816122cb565b82525050565b5f6020820190506122f95f8301846122d7565b92915050565b61230881612136565b82525050565b5f6020820190506123215f8301846122ff565b92915050565b5f6020828403121561233c5761233b612113565b5b5f6123498482850161215d565b91505092915050565b5f61235c82612136565b9050919050565b61236c81612352565b8114612376575f80fd5b50565b5f8135905061238781612363565b92915050565b5f602082840312156123a2576123a1612113565b5b5f6123af84828501612379565b91505092915050565b5f80604083850312156123ce576123cd612113565b5b5f6123db8582860161215d565b92505060206123ec8582860161215d565b9150509250929050565b5f6020828403121561240b5761240a612113565b5b5f61241884828501612190565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061246557607f821691505b60208210810361247857612477612421565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6124b2602083612073565b91506124bd8261247e565b602082019050919050565b5f6020820190508181035f8301526124df816124a6565b9050919050565b7f417474656d7074696e6720746f207365742066656520686967686572207468615f8201527f6e20696e697469616c206665652e000000000000000000000000000000000000602082015250565b5f612540602e83612073565b915061254b826124e6565b604082019050919050565b5f6020820190508181035f83015261256d81612534565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6125ab82612171565b91506125b683612171565b92508282019050808211156125ce576125cd612574565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061263c81612147565b92915050565b5f6020828403121561265757612656612113565b5b5f6126648482850161262e565b91505092915050565b5f819050919050565b5f819050919050565b5f61269961269461268f8461266d565b612676565b612171565b9050919050565b6126a98161267f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6126e181612136565b82525050565b5f6126f283836126d8565b60208301905092915050565b5f602082019050919050565b5f612714826126af565b61271e81856126b9565b9350612729836126c9565b805f5b8381101561275957815161274088826126e7565b975061274b836126fe565b92505060018101905061272c565b5085935050505092915050565b5f60a0820190506127795f830188612253565b61278660208301876126a0565b8181036040830152612798818661270a565b90506127a760608301856122ff565b6127b46080830184612253565b9695505050505050565b5f6040820190506127d15f8301856122ff565b6127de60208301846122ff565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61283f602583612073565b915061284a826127e5565b604082019050919050565b5f6020820190508181035f83015261286c81612833565b9050919050565b5f815190506128818161217a565b92915050565b5f6020828403121561289c5761289b612113565b5b5f6128a984828501612873565b91505092915050565b5f6040820190506128c55f8301856122ff565b6128d26020830184612253565b9392505050565b6128e2816121e2565b81146128ec575f80fd5b50565b5f815190506128fd816128d9565b92915050565b5f6020828403121561291857612917612113565b5b5f612925848285016128ef565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612988602683612073565b91506129938261292e565b604082019050919050565b5f6020820190508181035f8301526129b58161297c565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f77657220745f8201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b5f612a16603883612073565b9150612a21826129bc565b604082019050919050565b5f6020820190508181035f830152612a4381612a0a565b9050919050565b7f53776170207468726573686f6c642063616e6e6f7420626520686967686572205f8201527f7468616e20322520746f74616c20737570706c792e0000000000000000000000602082015250565b5f612aa4603583612073565b9150612aaf82612a4a565b604082019050919050565b5f6020820190508181035f830152612ad181612a98565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612b32602483612073565b9150612b3d82612ad8565b604082019050919050565b5f6020820190508181035f830152612b5f81612b26565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612bc0602283612073565b9150612bcb82612b66565b604082019050919050565b5f6020820190508181035f830152612bed81612bb4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612c28601d83612073565b9150612c3382612bf4565b602082019050919050565b5f6020820190508181035f830152612c5581612c1c565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373206e5f8201527f6f7420616c6c6f7765642e000000000000000000000000000000000000000000602082015250565b5f612cb6602b83612073565b9150612cc182612c5c565b604082019050919050565b5f6020820190508181035f830152612ce381612caa565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373206e6f745f8201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000602082015250565b5f612d44602983612073565b9150612d4f82612cea565b604082019050919050565b5f6020820190508181035f830152612d7181612d38565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b5f612dd2602a83612073565b9150612ddd82612d78565b604082019050919050565b5f6020820190508181035f830152612dff81612dc6565b9050919050565b7f4c69717569646974792070616972206e6f742079657420637265617465642e005f82015250565b5f612e3a601f83612073565b9150612e4582612e06565b602082019050919050565b5f6020820190508181035f830152612e6781612e2e565b9050919050565b7f42616c616e63652065786365656473206d617820686f6c64696e677320616d6f5f8201527f756e742c20636f6e7369646572207573696e672061207365636f6e642077616c60208201527f6c65742e00000000000000000000000000000000000000000000000000000000604082015250565b5f612eee604483612073565b9150612ef982612e6e565b606082019050919050565b5f6020820190508181035f830152612f1b81612ee2565b9050919050565b5f612f2c82612171565b9150612f3783612171565b9250828202612f4581612171565b91508282048414831517612f5c57612f5b612574565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612f9a82612171565b9150612fa583612171565b925082612fb557612fb4612f63565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61301a602583612073565b915061302582612fc0565b604082019050919050565b5f6020820190508181035f8301526130478161300e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6130a8602383612073565b91506130b38261304e565b604082019050919050565b5f6020820190508181035f8301526130d58161309c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613136602683612073565b9150613141826130dc565b604082019050919050565b5f6020820190508181035f8301526131638161312a565b9050919050565b5f61317482612171565b915061317f83612171565b925082820390508181111561319757613196612574565b5b9291505056fea26469706673582212203967f63fa9652086e5410f241c613477cc98a6fc95fa9af59698d415c810e20e64736f6c63430008160033

Deployed Bytecode

0x60806040526004361061019f575f3560e01c8063715018a6116100eb578063a9059cbb11610089578063dd62ed3e11610063578063dd62ed3e14610574578063f1bab2ec146105b0578063f2fde38b146105da578063f442d3fb14610602576101a6565b8063a9059cbb146104e6578063c83c383714610522578063cb4e162b1461054a576101a6565b80638f3fa860116100c55780638f3fa860146104405780639049a3ce1461046a57806395d89b4114610480578063a457c2d7146104aa576101a6565b8063715018a6146103ea5780638a8c523c146104005780638da5cb5b14610416576101a6565b8063313ce5671161015857806353945d7b1161013257806353945d7b1461033057806354c35c281461035a57806354cf2aeb1461038457806370a08231146103ae576101a6565b8063313ce567146102b457806339509351146102de5780634599471d1461031a576101a6565b806306fdde03146101aa578063095ea7b3146101d45780630b78f9c0146102105780630f299cf11461023857806318160ddd1461024e57806323b872dd14610278576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101be61062a565b6040516101cb91906120f3565b60405180910390f35b3480156101df575f80fd5b506101fa60048036038101906101f591906121a4565b6106ba565b60405161020791906121fc565b60405180910390f35b34801561021b575f80fd5b5061023660048036038101906102319190612215565b6106dc565b005b348015610243575f80fd5b5061024c6107bb565b005b348015610259575f80fd5b5061026261089d565b60405161026f9190612262565b60405180910390f35b348015610283575f80fd5b5061029e6004803603810190610299919061227b565b6108a6565b6040516102ab91906121fc565b60405180910390f35b3480156102bf575f80fd5b506102c86108d4565b6040516102d591906122e6565b60405180910390f35b3480156102e9575f80fd5b5061030460048036038101906102ff91906121a4565b6108dc565b60405161031191906121fc565b60405180910390f35b348015610325575f80fd5b5061032e610981565b005b34801561033b575f80fd5b50610344610bda565b604051610351919061230e565b60405180910390f35b348015610365575f80fd5b5061036e610bff565b60405161037b9190612262565b60405180910390f35b34801561038f575f80fd5b50610398610c05565b6040516103a59190612262565b60405180910390f35b3480156103b9575f80fd5b506103d460048036038101906103cf9190612327565b610c0b565b6040516103e19190612262565b60405180910390f35b3480156103f5575f80fd5b506103fe610c50565b005b34801561040b575f80fd5b50610414610cd7565b005b348015610421575f80fd5b5061042a610f0e565b604051610437919061230e565b60405180910390f35b34801561044b575f80fd5b50610454610f36565b6040516104619190612262565b60405180910390f35b348015610475575f80fd5b5061047e610f3c565b005b34801561048b575f80fd5b50610494610fc1565b6040516104a191906120f3565b60405180910390f35b3480156104b5575f80fd5b506104d060048036038101906104cb91906121a4565b611051565b6040516104dd91906121fc565b60405180910390f35b3480156104f1575f80fd5b5061050c600480360381019061050791906121a4565b611135565b60405161051991906121fc565b60405180910390f35b34801561052d575f80fd5b506105486004803603810190610543919061238d565b611157565b005b348015610555575f80fd5b5061055e6112e9565b60405161056b9190612262565b60405180910390f35b34801561057f575f80fd5b5061059a600480360381019061059591906123b8565b6112ef565b6040516105a79190612262565b60405180910390f35b3480156105bb575f80fd5b506105c4611371565b6040516105d1919061230e565b60405180910390f35b3480156105e5575f80fd5b5061060060048036038101906105fb9190612327565b611395565b005b34801561060d575f80fd5b50610628600480360381019061062391906123f6565b61148b565b005b6060600380546106399061244e565b80601f01602080910402602001604051908101604052809291908181526020018280546106659061244e565b80156106b05780601f10610687576101008083540402835291602001916106b0565b820191905f5260205f20905b81548152906001019060200180831161069357829003601f168201915b5050505050905090565b5f806106c46115f3565b90506106d18185856115fa565b600191505092915050565b6106e46115f3565b73ffffffffffffffffffffffffffffffffffffffff16610702610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614610758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074f906124c8565b60405180910390fd5b6019821115801561076a5750602d8111155b6107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a090612556565b60405180910390fd5b8160098190555080600a819055505050565b6107c36115f3565b73ffffffffffffffffffffffffffffffffffffffff166107e1610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082e906124c8565b60405180910390fd5b7f000000000000000000000000e66159742d53c7463befb4a58ccf2f939c390f5573ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561089a573d5f803e3d5ffd5b50565b5f600254905090565b5f806108b06115f3565b90506108bd8582856117bd565b6108c8858585611848565b60019150509392505050565b5f6012905090565b5f806108e66115f3565b905061097681858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461097191906125a1565b6115fa565b600191505092915050565b5f61098b30610c0b565b90505f810361099a5750610bd8565b6008548111156109aa5760085490505b5f600267ffffffffffffffff8111156109c6576109c56125d4565b5b6040519080825280602002602001820160405280156109f45781602001602082028036833780820191505090505b50905030815f81518110610a0b57610a0a612601565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac69190612642565b81600181518110610ada57610ad9612601565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050610b3330737a250d5630b4cf539739df2c5dacb4c659f2488d846115fa565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f847f000000000000000000000000e66159742d53c7463befb4a58ccf2f939c390f55426040518663ffffffff1660e01b8152600401610ba8959493929190612766565b5f604051808303815f87803b158015610bbf575f80fd5b505af1158015610bd1573d5f803e3d5ffd5b5050505050505b565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60095481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c586115f3565b73ffffffffffffffffffffffffffffffffffffffff16610c76610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc3906124c8565b60405180910390fd5b610cd55f611ce8565b565b610cdf6115f3565b73ffffffffffffffffffffffffffffffffffffffff16610cfd610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a906124c8565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610db0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd49190612642565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e719190612642565b6040518363ffffffff1660e01b8152600401610e8e9291906127be565b602060405180830381865afa158015610ea9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ecd9190612642565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075481565b610f446115f3565b73ffffffffffffffffffffffffffffffffffffffff16610f62610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614610fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faf906124c8565b60405180910390fd5b5f600781905550565b606060048054610fd09061244e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffc9061244e565b80156110475780601f1061101e57610100808354040283529160200191611047565b820191905f5260205f20905b81548152906001019060200180831161102a57829003601f168201915b5050505050905090565b5f8061105b6115f3565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508381101561111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111390612855565b60405180910390fd5b61112982868684036115fa565b60019250505092915050565b5f8061113f6115f3565b905061114c818585611848565b600191505092915050565b61115f6115f3565b73ffffffffffffffffffffffffffffffffffffffff1661117d610f0e565b73ffffffffffffffffffffffffffffffffffffffff16146111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca906124c8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7f000000000000000000000000e66159742d53c7463befb4a58ccf2f939c390f558373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611249919061230e565b602060405180830381865afa158015611264573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112889190612887565b6040518363ffffffff1660e01b81526004016112a59291906128b2565b6020604051808303815f875af11580156112c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e59190612903565b5050565b60085481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b7f000000000000000000000000e66159742d53c7463befb4a58ccf2f939c390f5581565b61139d6115f3565b73ffffffffffffffffffffffffffffffffffffffff166113bb610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614611411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611408906124c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361147f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114769061299e565b60405180910390fd5b61148881611ce8565b50565b6114936115f3565b73ffffffffffffffffffffffffffffffffffffffff166114b1610f0e565b73ffffffffffffffffffffffffffffffffffffffff1614611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906124c8565b60405180910390fd5b611537620186a0611529600161151b61089d565b611dab90919063ffffffff16565b611dc090919063ffffffff16565b811015611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157090612a2c565b60405180910390fd5b6115a76064611599600261158b61089d565b611dab90919063ffffffff16565b611dc090919063ffffffff16565b8111156115e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e090612aba565b60405180910390fd5b8060088190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165f90612b48565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90612bd6565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117b09190612262565b60405180910390a3505050565b5f6117c884846112ef565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118425781811015611834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182b90612c3e565b60405180910390fd5b61184184848484036115fa565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad90612ccc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191b90612d5a565b60405180910390fd5b5f8111611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195d90612de8565b60405180910390fd5b5f600c5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611a025750600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580611a5d5750805b611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390612e50565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905081158015611b5157505f600754115b8015611b5b575082155b15611bb95760075484611b6d87610c0b565b611b7791906125a1565b1115611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90612f04565b60405180910390fd5b5b600854611bc530610c0b565b10158015611bdf5750600b5f9054906101000a900460ff16155b8015611be85750815b8015611bf2575082155b15611c33576001600b5f6101000a81548160ff021916908315150217905550611c19610981565b5f600b5f6101000a81548160ff0219169083151502179055505b5f81611c4157600a54611c45565b6009545b90505f811115611cd45783158015611c695750600b5f9054906101000a900460ff16155b8015611c7a57508180611c795750825b5b15611cd3575f611ca66064611c988489611dab90919063ffffffff16565b611dc090919063ffffffff16565b90505f811115611cbc57611cbb883083611dd5565b5b611ccf818761204a90919063ffffffff16565b9550505b5b611cdf878787611dd5565b50505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8183611db89190612f22565b905092915050565b5f8183611dcd9190612f90565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3a90613030565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea8906130be565b60405180910390fd5b611ebc83838361205f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f369061314c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611fcd91906125a1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120319190612262565b60405180910390a3612044848484612064565b50505050565b5f8183612057919061316a565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156120a0578082015181840152602081019050612085565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6120c582612069565b6120cf8185612073565b93506120df818560208601612083565b6120e8816120ab565b840191505092915050565b5f6020820190508181035f83015261210b81846120bb565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61214082612117565b9050919050565b61215081612136565b811461215a575f80fd5b50565b5f8135905061216b81612147565b92915050565b5f819050919050565b61218381612171565b811461218d575f80fd5b50565b5f8135905061219e8161217a565b92915050565b5f80604083850312156121ba576121b9612113565b5b5f6121c78582860161215d565b92505060206121d885828601612190565b9150509250929050565b5f8115159050919050565b6121f6816121e2565b82525050565b5f60208201905061220f5f8301846121ed565b92915050565b5f806040838503121561222b5761222a612113565b5b5f61223885828601612190565b925050602061224985828601612190565b9150509250929050565b61225c81612171565b82525050565b5f6020820190506122755f830184612253565b92915050565b5f805f6060848603121561229257612291612113565b5b5f61229f8682870161215d565b93505060206122b08682870161215d565b92505060406122c186828701612190565b9150509250925092565b5f60ff82169050919050565b6122e0816122cb565b82525050565b5f6020820190506122f95f8301846122d7565b92915050565b61230881612136565b82525050565b5f6020820190506123215f8301846122ff565b92915050565b5f6020828403121561233c5761233b612113565b5b5f6123498482850161215d565b91505092915050565b5f61235c82612136565b9050919050565b61236c81612352565b8114612376575f80fd5b50565b5f8135905061238781612363565b92915050565b5f602082840312156123a2576123a1612113565b5b5f6123af84828501612379565b91505092915050565b5f80604083850312156123ce576123cd612113565b5b5f6123db8582860161215d565b92505060206123ec8582860161215d565b9150509250929050565b5f6020828403121561240b5761240a612113565b5b5f61241884828501612190565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061246557607f821691505b60208210810361247857612477612421565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6124b2602083612073565b91506124bd8261247e565b602082019050919050565b5f6020820190508181035f8301526124df816124a6565b9050919050565b7f417474656d7074696e6720746f207365742066656520686967686572207468615f8201527f6e20696e697469616c206665652e000000000000000000000000000000000000602082015250565b5f612540602e83612073565b915061254b826124e6565b604082019050919050565b5f6020820190508181035f83015261256d81612534565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6125ab82612171565b91506125b683612171565b92508282019050808211156125ce576125cd612574565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061263c81612147565b92915050565b5f6020828403121561265757612656612113565b5b5f6126648482850161262e565b91505092915050565b5f819050919050565b5f819050919050565b5f61269961269461268f8461266d565b612676565b612171565b9050919050565b6126a98161267f565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6126e181612136565b82525050565b5f6126f283836126d8565b60208301905092915050565b5f602082019050919050565b5f612714826126af565b61271e81856126b9565b9350612729836126c9565b805f5b8381101561275957815161274088826126e7565b975061274b836126fe565b92505060018101905061272c565b5085935050505092915050565b5f60a0820190506127795f830188612253565b61278660208301876126a0565b8181036040830152612798818661270a565b90506127a760608301856122ff565b6127b46080830184612253565b9695505050505050565b5f6040820190506127d15f8301856122ff565b6127de60208301846122ff565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61283f602583612073565b915061284a826127e5565b604082019050919050565b5f6020820190508181035f83015261286c81612833565b9050919050565b5f815190506128818161217a565b92915050565b5f6020828403121561289c5761289b612113565b5b5f6128a984828501612873565b91505092915050565b5f6040820190506128c55f8301856122ff565b6128d26020830184612253565b9392505050565b6128e2816121e2565b81146128ec575f80fd5b50565b5f815190506128fd816128d9565b92915050565b5f6020828403121561291857612917612113565b5b5f612925848285016128ef565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612988602683612073565b91506129938261292e565b604082019050919050565b5f6020820190508181035f8301526129b58161297c565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f77657220745f8201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b5f612a16603883612073565b9150612a21826129bc565b604082019050919050565b5f6020820190508181035f830152612a4381612a0a565b9050919050565b7f53776170207468726573686f6c642063616e6e6f7420626520686967686572205f8201527f7468616e20322520746f74616c20737570706c792e0000000000000000000000602082015250565b5f612aa4603583612073565b9150612aaf82612a4a565b604082019050919050565b5f6020820190508181035f830152612ad181612a98565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612b32602483612073565b9150612b3d82612ad8565b604082019050919050565b5f6020820190508181035f830152612b5f81612b26565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612bc0602283612073565b9150612bcb82612b66565b604082019050919050565b5f6020820190508181035f830152612bed81612bb4565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612c28601d83612073565b9150612c3382612bf4565b602082019050919050565b5f6020820190508181035f830152612c5581612c1c565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373206e5f8201527f6f7420616c6c6f7765642e000000000000000000000000000000000000000000602082015250565b5f612cb6602b83612073565b9150612cc182612c5c565b604082019050919050565b5f6020820190508181035f830152612ce381612caa565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373206e6f745f8201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000602082015250565b5f612d44602983612073565b9150612d4f82612cea565b604082019050919050565b5f6020820190508181035f830152612d7181612d38565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b5f612dd2602a83612073565b9150612ddd82612d78565b604082019050919050565b5f6020820190508181035f830152612dff81612dc6565b9050919050565b7f4c69717569646974792070616972206e6f742079657420637265617465642e005f82015250565b5f612e3a601f83612073565b9150612e4582612e06565b602082019050919050565b5f6020820190508181035f830152612e6781612e2e565b9050919050565b7f42616c616e63652065786365656473206d617820686f6c64696e677320616d6f5f8201527f756e742c20636f6e7369646572207573696e672061207365636f6e642077616c60208201527f6c65742e00000000000000000000000000000000000000000000000000000000604082015250565b5f612eee604483612073565b9150612ef982612e6e565b606082019050919050565b5f6020820190508181035f830152612f1b81612ee2565b9050919050565b5f612f2c82612171565b9150612f3783612171565b9250828202612f4581612171565b91508282048414831517612f5c57612f5b612574565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612f9a82612171565b9150612fa583612171565b925082612fb557612fb4612f63565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61301a602583612073565b915061302582612fc0565b604082019050919050565b5f6020820190508181035f8301526130478161300e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6130a8602383612073565b91506130b38261304e565b604082019050919050565b5f6020820190508181035f8301526130d58161309c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613136602683612073565b9150613141826130dc565b604082019050919050565b5f6020820190508181035f8301526131638161312a565b9050919050565b5f61317482612171565b915061317f83612171565b925082820390508181111561319757613196612574565b5b9291505056fea26469706673582212203967f63fa9652086e5410f241c613477cc98a6fc95fa9af59698d415c810e20e64736f6c63430008160033

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.