ETH Price: $3,456.98 (+3.87%)

Token

Decentral ART (ART)
 

Overview

Max Total Supply

2,500,000,000 ART

Holders

71

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Fund: 0x071...5C0
Balance
10,000 ART

Value
$0.00
0x0716a17fbaee714f1e6ab0f9d59edbc5f09815c0
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:
ERC223ART

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-09
*/

pragma solidity ^0.8.0;


// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)
/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    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);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


/**
 * @title Contract that will work with ERC223 tokens.
 */
abstract contract IERC223 {

    struct ERC223TransferInfo
    {
        address token_contract;
        address sender;
        uint256 value;
        bytes   data;
    }
    
    ERC223TransferInfo private tkn;
    
/**
 * @dev Standard ERC223 function that will handle incoming token transfers.
 *
 * @param _from  Token sender address.
 * @param _value Amount of tokens.
 * @param _data  Transaction metadata.
 */
    function tokenReceived(address _from, uint _value, bytes memory _data) public virtual
    {
        /**
         * @dev Note that inside of the token transaction handler the actual sender of token transfer is accessible via the tkn.sender variable
         * (analogue of msg.sender for Ether transfers)
         * 
         * tkn.value - is the amount of transferred tokens
         * tkn.data  - is the "metadata" of token transfer
         * tkn.token_contract is most likely equal to msg.sender because the token contract typically invokes this function
        */
        tkn.token_contract = msg.sender;
        tkn.sender         = _from;
        tkn.value          = _value;
        tkn.data           = _data;
        
        // ACTUAL CODE
    }


}


contract ERC223 is ERC20, IERC223{

    constructor(string memory name_, string memory symbol_) ERC20(name_, symbol_){
    
    }

    /**
     * @dev Additional event that is fired on successful transfer and logs transfer metadata,
     *      this event is implemented to keep Transfer event compatible with ERC20.
     */
    event TransferData(bytes data);

    /**
     * @dev ERC223 tokens must explicitly return "erc223" on standard() function call.
     */
    function standard() public pure returns (string memory)
    {
        return "erc223";
    }

    /**
     * @dev Transfer the specified amount of tokens to the specified address.
     *      Invokes the `tokenFallback` function if the recipient is a contract.
     *      The token transfer fails if the recipient is a contract
     *      but does not implement the `tokenFallback` function
     *      or the fallback function to receive funds.
     *
     * @param _recipient    Receiver address.
     * @param _amount Amount of tokens that will be transferred.
     * @param _data  Transaction metadata.
     */
    function transfer(address _recipient, uint _amount, bytes memory _data) 
    public returns (bool success){
        // Standard function transfer similar to ERC20 transfer with no _data .
        // Added due to backwards compatibility reasons .
        uint codeLength;

        assembly {
            // Retrieve the size of the code on target address, this needs assembly .
            codeLength := extcodesize(_recipient)
        }

        _balances[msg.sender] = _balances[msg.sender] - _amount;
        _balances[_recipient] = _balances[_recipient] + _amount;
        if(codeLength>0) {
            IERC223 receiver = IERC223(_recipient);
            receiver.tokenReceived(msg.sender, _amount, _data);
        }
        emit Transfer(msg.sender, _recipient, _amount);
        emit TransferData(_data);
        return true;
    }

}


interface ITOKEN {
    function firstOwnner(address owner) external view returns (uint balance);
}


contract TOKEN is ITOKEN {
    function firstOwnner(address) external pure override returns (uint balance){
        return 0;
    }
}


contract ERC223ART is ERC223{
    event AirdropPayout (address user, uint amount, uint8 airDropType);
    event DencentralAirdropPayout (address user, uint amount);


    uint presaleInphases = (250+4500+885+1775+2100+2350+3430+4430) * 10**23; 
    uint public tokenPhase = 0;
    uint[] public tokenPrice = [10, 12, 32, 42, 52, 64, 85, 290];
    uint[] public tokensInPhase = [250*10**23, 4500*10**23, 885*10**23, 1775*10**23, 2100*10**23, 2350*10**23, 3430*10**23, 4430*10**23];
    uint public decentralAirdropAmount = 1092700000000000000000000;
    uint totalBuyPresale = 0;
    mapping(address => uint) buyed;
    mapping(address => uint) public  decentralPayed;
    
    address uni;
    uint totalBuyAddresses = 0;
    uint[] public airdropBank = [1500*10**21, 750*10**21];
    uint8 airdropIndex = 0;

    struct AirDropValues {
        bool airdropPercent1;
        bool airdropPercent2;
        bool airdrop;
    }
    mapping(address => AirDropValues) public airDropUsers;

    constructor() ERC223("Decentral ART","ART"){
        _mint(address(this), presaleInphases + airdropBank[0] + airdropBank[1] + decentralAirdropAmount);
        _mint(msg.sender, (2500000+2746573)*10**20);

        uni = msg.sender;
    }


    function beforeDecentralAirdrop(address sender) public view returns(uint amount, string memory error){
        uint _buyed = TOKEN(0x7c620D582a6Eae9635E4CA4B9A2b1339F20EE1f2).firstOwnner(sender);
        uint _payed = decentralPayed[sender];
        if(_buyed == 0) return (0, "You haven't bought any tokens");
        if(_payed == _buyed) return (0, "The full reward has already been paid");
        return((_buyed * 100*10**18 - _payed), "Ok");
    }

    function decentralAirdrop() public {
        (uint amount, string memory error) = beforeDecentralAirdrop(msg.sender);
        require(amount > 0, error);
        decentralPayed[msg.sender] += amount;
        decentralAirdropAmount += amount;
        ERC223(address(this)).transfer(msg.sender, amount);
        emit DencentralAirdropPayout(msg.sender, amount);
    }   

    function fixPrice (uint phase, uint restTokens, uint input, uint price, uint tokens) 
        private view returns (bool enoughTokens, uint newPrice, uint newTokens) {
        uint priceForFullPhase = restTokens*tokenPrice[phase] / 10**6;
        uint computedTokens = input / tokenPrice[phase];
        if(priceForFullPhase >= input){
          return (
              false, 
              computedTokens * tokenPrice[phase] + price,
              computedTokens * 10**6 +tokens
          );
        } else {
          if(phase == 7){
            return (
                true,
                priceForFullPhase + price,
                restTokens + tokens
            );
          } else {
            return fixPrice(
              phase + 1,
              tokensInPhase[phase+1],
              input-priceForFullPhase,
              priceForFullPhase+price,
              restTokens+tokens
            );
          }
        }
    }


    function beforeBuyToken(uint weiAmount, bool _airdrop, address sender) public view returns(uint tokensAmount, string memory error) {
        if(weiAmount == 0){
            return (0, "Price cannot be zero");
        }
        if(_airdrop && airdropBank[1] == 0) {
            return (0, "Airdrop is over");
        }
        if(_airdrop && ((airdropBank[0] > 0 && airDropUsers[sender].airdropPercent1) || airDropUsers[sender].airdropPercent2)) {
            return (0, "You have already used this type of airdrop");
        }
        (bool enoughTokens, uint newPrice, uint newTokens) = fixPrice(tokenPhase, tokensInPhase[tokenPhase], weiAmount,0,0);
        if(enoughTokens){
            return (0, "Not enough tokens to sell");
        }
        if(newPrice == weiAmount){
            return (newTokens, "");
        }        
        return (0, "Wrong number of WEI");
    }

    function presaleInfo() public view returns (uint _totalBuyPresale, uint _totalBuyAddresses){
        return (totalBuyPresale, totalBuyAddresses);
    }


    function getAirDrop(uint want, address sender) private returns (string memory message, uint amount) {
        if(airdropBank[1] == 0){
            return ("Airdrop is over", 0);
        }
        if(airdropBank[airdropIndex] > 0) {
            (uint _amount) = sendAirdrop(airdropBank[airdropIndex], want, sender);
            if(_amount < want){
                airdropBank[airdropIndex] = 0;
            } else {
                airdropBank[airdropIndex] -= want;
            }
            if(airdropBank[airdropIndex] == 0) airdropIndex = 1;
            return ("Success", _amount);
        }
    }

    function airDrop() public returns (string memory message, uint amount) {
        if(airDropUsers[msg.sender].airdrop) {
            return ("You have already used this type of airdrop", 0);
        }
        (string memory _message, uint _amount) = getAirDrop(100*10**18, msg.sender);
        airDropUsers[msg.sender].airdrop = true;
        emit AirdropPayout(msg.sender, _amount, 0);
        return (_message, _amount);
    }

    function sendAirdrop(uint bank, uint want, address sender) private returns (uint amount){
        if(bank > want) {
            ERC223(address(this)).transfer(sender, want);
            return (want);
        } else {
            ERC223(address(this)).transfer(sender, bank);
            return (bank);
        }
    } 

    function buyTokens(bool airdrop) public payable {
        (uint tokensAmount, string memory error) = beforeBuyToken(msg.value, airdrop, msg.sender);
        require(tokensAmount > 0, error);

        payable(uni).transfer(msg.value);
        totalBuyPresale += tokensAmount;

        if(airdrop){
            if(airdropBank[0] > 0 && !airDropUsers[msg.sender].airdropPercent1){
                airDropUsers[msg.sender].airdropPercent1 = true;
            } else if(airdropBank[1] > 0 && !airDropUsers[msg.sender].airdropPercent2){
                airDropUsers[msg.sender].airdropPercent2 = true;
            }
            uint8 aType = airdropBank[0] > 0 ? 1 : 2;
            (string memory message, uint airDropAmount) = getAirDrop(tokensAmount / (airdropBank[0] > 0 ? 10 : 20), msg.sender);
            require(bytes(message).length == 7, message);
            emit AirdropPayout(msg.sender, airDropAmount, aType);
        }

        
        if(buyed[msg.sender] == 0){
            buyed[msg.sender] = 1;
            totalBuyAddresses++;
        }
        ERC223(address(this)).transfer(msg.sender, tokensAmount);
        do{
            if(tokensInPhase[tokenPhase] > tokensAmount) {
                tokensInPhase[tokenPhase] -= tokensAmount;
                tokensAmount = 0;
            } else {
                tokensAmount -= tokensInPhase[tokenPhase];
                tokensInPhase[tokenPhase] = 0;
                tokenPhase++;
            }
        } while (tokensAmount != 0);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"airDropType","type":"uint8"}],"name":"AirdropPayout","type":"event"},{"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":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DencentralAirdropPayout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransferData","type":"event"},{"inputs":[],"name":"airDrop","outputs":[{"internalType":"string","name":"message","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"airDropUsers","outputs":[{"internalType":"bool","name":"airdropPercent1","type":"bool"},{"internalType":"bool","name":"airdropPercent2","type":"bool"},{"internalType":"bool","name":"airdrop","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"airdropBank","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"},{"internalType":"bool","name":"_airdrop","type":"bool"},{"internalType":"address","name":"sender","type":"address"}],"name":"beforeBuyToken","outputs":[{"internalType":"uint256","name":"tokensAmount","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"beforeDecentralAirdrop","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"airdrop","type":"bool"}],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decentralAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decentralAirdropAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"decentralPayed","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleInfo","outputs":[{"internalType":"uint256","name":"_totalBuyPresale","type":"uint256"},{"internalType":"uint256","name":"_totalBuyAddresses","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"standard","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"tokenReceived","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensInPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","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"}]

6b065f333e3502967c340000006009556000600a90815561018060409081526080918252600c60a052602060c052602a60e05260346101005261012052605561014052610122610160526200005990600b90600862000368565b5060408051610100810182526a14adf4b7320334b900000081526b01743b34e18439b50200000060208201526a49349a9cfdd82628800000918101919091526a92d31647e316c32180000060608201526aadb53acfa41aee1200000060808201526ac2632f86d61e22cb00000060a08201526b011bb91342149262b700000060c08201526b016e70e61edc9f359b00000060e0820152620000ff90600c906008620003be565b5069e76362bcd34757f00000600d556000600e819055601255604080518082019091526a013da329b63364718000008152699ed194db19b238c0000060208201526200015090601390600262000407565b506014805460ff191690553480156200016857600080fd5b506040518060400160405280600d81526020016c111958d95b9d1c985b08105495609a1b8152506040518060400160405280600381526020016210549560ea1b81525081818160039081620001be91906200050b565b506004620001cd82826200050b565b50505050506200024b30600d546013600181548110620001f157620001f1620005d7565b90600052602060002001546013600081548110620002135762000213620005d7565b90600052602060002001546009546200022d9190620005ed565b620002399190620005ed565b620002459190620005ed565b6200027b565b62000263336b01b1fc81393889be0dd000006200027b565b601180546001600160a01b0319163317905562000615565b6001600160a01b038216620002d65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620002ea9190620005ed565b90915550506001600160a01b0382166000908152602081905260408120805483929062000319908490620005ed565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b828054828255906000526020600020908101928215620003ac579160200282015b82811115620003ac578251829061ffff1690559160200191906001019062000389565b50620003ba92915062000450565b5090565b828054828255906000526020600020908101928215620003ac579160200282015b82811115620003ac57825182906001600160601b0316905591602001919060010190620003df565b828054828255906000526020600020908101928215620003ac579160200282015b82811115620003ac57825182906001600160581b031690559160200191906001019062000428565b5b80821115620003ba576000815560010162000451565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200049257607f821691505b602082108103620004b357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200036357600081815260208120601f850160051c81016020861015620004e25750805b601f850160051c820191505b818110156200050357828155600101620004ee565b505050505050565b81516001600160401b0381111562000527576200052762000467565b6200053f816200053884546200047d565b84620004b9565b602080601f8311600181146200057757600084156200055e5750858301515b600019600386901b1c1916600185901b17855562000503565b600085815260208120601f198616915b82811015620005a85788860151825594840194600190910190840162000587565b5085821015620005c75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b808201808211156200060f57634e487b7160e01b600052601160045260246000fd5b92915050565b611f5780620006256000396000f3fe60806040526004361061019c5760003560e01c806370a08231116100ec578063be45fd621161008a578063d4ddce8a11610064578063d4ddce8a146104f9578063dd62ed3e14610519578063f5f10cf91461055f578063ff9521041461057f57600080fd5b8063be45fd6214610454578063ca5d088014610474578063d4697d7f1461049757600080fd5b806395d89b41116100c657806395d89b41146103d2578063a457c2d7146103e7578063a9059cbb14610407578063b4874b401461042757600080fd5b806370a082311461036957806371820c4b1461039f5780638943ec02146103b257600080fd5b80632edf08691161015957806351d1b1001161013357806351d1b100146102ed5780635a3b7e42146103035780635a5c1028146103325780635bf7d9c41461035257600080fd5b80632edf086914610289578063313ce567146102b157806339509351146102cd57600080fd5b806306fdde03146101a1578063095ea7b3146101cc5780630c3a8eb8146101fc5780630cf5d1a01461022a57806318160ddd1461024a57806323b872dd14610269575b600080fd5b3480156101ad57600080fd5b506101b6610595565b6040516101c391906119f4565b60405180910390f35b3480156101d857600080fd5b506101ec6101e7366004611a23565b610627565b60405190151581526020016101c3565b34801561020857600080fd5b5061021c610217366004611a4d565b61063e565b6040516101c3929190611a68565b34801561023657600080fd5b5061021c610245366004611a9a565b6107a3565b34801561025657600080fd5b506002545b6040519081526020016101c3565b34801561027557600080fd5b506101ec610284366004611ad8565b6109c9565b34801561029557600080fd5b50600e54601254604080519283526020830191909152016101c3565b3480156102bd57600080fd5b50604051601281526020016101c3565b3480156102d957600080fd5b506101ec6102e8366004611a23565b610a78565b3480156102f957600080fd5b5061025b600a5481565b34801561030f57600080fd5b5060408051808201909152600681526565726332323360d01b60208201526101b6565b34801561033e57600080fd5b5061025b61034d366004611b14565b610ab4565b34801561035e57600080fd5b50610367610ad5565b005b34801561037557600080fd5b5061025b610384366004611a4d565b6001600160a01b031660009081526020819052604090205490565b6103676103ad366004611b2d565b610bec565b3480156103be57600080fd5b506103676103cd366004611b60565b610faa565b3480156103de57600080fd5b506101b6610fea565b3480156103f357600080fd5b506101ec610402366004611a23565b610ff9565b34801561041357600080fd5b506101ec610422366004611a23565b611092565b34801561043357600080fd5b5061025b610442366004611a4d565b60106020526000908152604090205481565b34801561046057600080fd5b506101ec61046f366004611b60565b61109f565b34801561048057600080fd5b506104896111f1565b6040516101c3929190611c2b565b3480156104a357600080fd5b506104da6104b2366004611a4d565b60156020526000908152604090205460ff808216916101008104821691620100009091041683565b60408051931515845291151560208401521515908201526060016101c3565b34801561050557600080fd5b5061025b610514366004611b14565b6112b6565b34801561052557600080fd5b5061025b610534366004611c4d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561056b57600080fd5b5061025b61057a366004611b14565b6112c6565b34801561058b57600080fd5b5061025b600d5481565b6060600380546105a490611c80565b80601f01602080910402602001604051908101604052809291908181526020018280546105d090611c80565b801561061d5780601f106105f25761010080835404028352916020019161061d565b820191906000526020600020905b81548152906001019060200180831161060057829003601f168201915b5050505050905090565b60006106343384846112d6565b5060015b92915050565b604051630926a99760e11b81526001600160a01b03821660048201526000906060908290737c620d582a6eae9635e4ca4b9a2b1339f20ee1f29063124d532e90602401602060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c29190611cba565b6001600160a01b0385166000908152601060205260408120549192508290036107285760006040518060400160405280601d81526020017f596f7520686176656e277420626f7567687420616e7920746f6b656e73000000815250935093505050915091565b818103610755576000604051806060016040528060258152602001611ed360259139935093505050915091565b80610761836064611ce9565b61077390670de0b6b3a7640000611ce9565b61077d9190611d00565b604051806040016040528060028152602001614f6b60f01b815250935093505050915091565b60006060846000036107e457505060408051808201909152601481527350726963652063616e6e6f74206265207a65726f60601b60208201526000906109c1565b83801561080f5750601360018154811061080057610800611d13565b90600052602060002001546000145b1561084457505060408051808201909152600f81526e20b4b9323937b81034b99037bb32b960891b60208201526000906109c1565b8380156108ba57506000601360008154811061086257610862611d13565b906000526020600020015411801561089257506001600160a01b03831660009081526015602052604090205460ff165b806108ba57506001600160a01b038316600090815260156020526040902054610100900460ff165b156108e35760006040518060600160405280602a8152602001611ef8602a9139915091506109c1565b6000806000610917600a54600c600a548154811061090357610903611d13565b90600052602060002001548a6000806113fa565b92509250925082156109675760006040518060400160405280601981526020017f4e6f7420656e6f75676820746f6b656e7320746f2073656c6c00000000000000815250945094505050506109c1565b87820361098b578060405180602001604052806000815250945094505050506109c1565b60006040518060400160405280601381526020017257726f6e67206e756d626572206f662057454960681b815250945094505050505b935093915050565b6001600160a01b038316600090815260016020908152604080832033845290915281205482811015610a535760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610a6085338584036112d6565b610a6b85858561154c565b60019150505b9392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610634918590610aaf908690611d29565b6112d6565b60138181548110610ac457600080fd5b600091825260209091200154905081565b600080610ae13361063e565b91509150600082118190610b085760405162461bcd60e51b8152600401610a4a91906119f4565b503360009081526010602052604081208054849290610b28908490611d29565b9250508190555081600d6000828254610b419190611d29565b909155505060405163a9059cbb60e01b815233600482015260248101839052309063a9059cbb906044016020604051808303816000875af1158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190611d3c565b5060408051338152602081018490527f6a527594c3a3bb10be09482d157be87da27c2aa98a47fc05b80293c7f96f7a3f910160405180910390a15050565b600080610bfa3484336107a3565b91509150600082118190610c215760405162461bcd60e51b8152600401610a4a91906119f4565b506011546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610c5b573d6000803e3d6000fd5b5081600e6000828254610c6e9190611d29565b90915550508215610e2b5760006013600081548110610c8f57610c8f611d13565b9060005260206000200154118015610cb757503360009081526015602052604090205460ff16155b15610cdb57336000908152601560205260409020805460ff19166001179055610d40565b60006013600181548110610cf157610cf1611d13565b9060005260206000200154118015610d1e575033600090815260156020526040902054610100900460ff16155b15610d4057336000908152601560205260409020805461ff0019166101001790555b6000806013600081548110610d5757610d57611d13565b906000526020600020015411610d6e576002610d71565b60015b9050600080610dbc60006013600081548110610d8f57610d8f611d13565b906000526020600020015411610da6576014610da9565b600a5b610db69060ff1687611d59565b3361171a565b9150915081516007148290610de45760405162461bcd60e51b8152600401610a4a91906119f4565b50604080513381526020810183905260ff85168183015290517faa7c70029639873fdc04fe80f98e745789a93470d283932056440174fe0683579181900360600190a15050505b336000908152600f60205260408120549003610e6857336000908152600f60205260408120600190556012805491610e6283611d7b565b91905055505b60405163a9059cbb60e01b815233600482015260248101839052309063a9059cbb906044016020604051808303816000875af1158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed09190611d3c565b505b81600c600a5481548110610ee857610ee8611d13565b90600052602060002001541115610f375781600c600a5481548110610f0f57610f0f611d13565b906000526020600020016000828254610f289190611d00565b9091555060009250610f9d9050565b600c600a5481548110610f4c57610f4c611d13565b906000526020600020015482610f629190611d00565b91506000600c600a5481548110610f7b57610f7b611d13565b6000918252602082200191909155600a805491610f9783611d7b565b91905055505b81600003610ed257505050565b60058054336001600160a01b031991821617909155600680549091166001600160a01b03851617905560078290556008610fe48282611de2565b50505050565b6060600480546105a490611c80565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561107b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a4a565b61108833858584036112d6565b5060019392505050565b600061063433848461154c565b33600090815260208190526040812054843b906110bd908590611d00565b33600090815260208190526040808220929092556001600160a01b038716815220546110ea908590611d29565b6001600160a01b038616600090815260208190526040902055801561116f576040516344a1f60160e11b815285906001600160a01b03821690638943ec029061113b90339089908990600401611ea2565b600060405180830381600087803b15801561115557600080fd5b505af1158015611169573d6000803e3d6000fd5b50505050505b6040518481526001600160a01b0386169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a37f3ba9136826ac751de05d770d8d34fa4440ada49a5fb0e9aa1678aece66dad976836040516111de91906119f4565b60405180910390a1506001949350505050565b336000908152601560205260408120546060919062010000900460ff16156112365760006040518060600160405280602a8152602001611ef8602a9139939092509050565b60008061124c68056bc75e2d631000003361171a565b336000818152601560209081526040808320805462ff0000191662010000179055805193845290830184905282015291935091507faa7c70029639873fdc04fe80f98e745789a93470d283932056440174fe0683579060600160405180910390a190939092509050565b600b8181548110610ac457600080fd5b600c8181548110610ac457600080fd5b6001600160a01b0383166113385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a4a565b6001600160a01b0382166113995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a4a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080600080620f4240600b8a8154811061141757611417611d13565b90600052602060002001548961142d9190611ce9565b6114379190611d59565b90506000600b8a8154811061144e5761144e611d13565b9060005260206000200154886114649190611d59565b90508782106114c857600087600b8c8154811061148357611483611d13565b9060005260206000200154836114999190611ce9565b6114a39190611d29565b876114b184620f4240611ce9565b6114bb9190611d29565b9450945094505050611541565b896007036114e65760016114dc8884611d29565b6114bb888c611d29565b6114bb6114f48b6001611d29565b600c6115018d6001611d29565b8154811061151157611511611d13565b9060005260206000200154848b6115289190611d00565b6115328b87611d29565b61153c8b8f611d29565b6113fa565b955095509592505050565b6001600160a01b0383166115b05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a4a565b6001600160a01b0382166116125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a4a565b6001600160a01b0383166000908152602081905260409020548181101561168a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a4a565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906116c1908490611d29565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161170d91815260200190565b60405180910390a3610fe4565b60606000601360018154811061173257611732611d13565b906000526020600020015460000361177357505060408051808201909152600f81526e20b4b9323937b81034b99037bb32b960891b602082015260006118a4565b6014546013805460009260ff1690811061178f5761178f611d13565b906000526020600020015411156118a457601454601380546000926117d5929160ff9091169081106117c3576117c3611d13565b906000526020600020015486866118b0565b90508481101561180c576014546013805460009260ff169081106117fb576117fb611d13565b600091825260209091200155611846565b60145460138054879260ff1690811061182757611827611d13565b9060005260206000200160008282546118409190611d00565b90915550505b60145460138054909160ff1690811061186157611861611d13565b9060005260206000200154600003611881576014805460ff191660011790555b6040805180820190915260078152665375636365737360c81b6020820152925090505b9250929050565b505050565b6000828411156119345760405163a9059cbb60e01b81526001600160a01b038316600482015260248101849052309063a9059cbb906044016020604051808303816000875af1158015611907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192b9190611d3c565b50829050610a71565b60405163a9059cbb60e01b81526001600160a01b038316600482015260248101859052309063a9059cbb906044016020604051808303816000875af1158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190611d3c565b50839050610a71565b6000815180845260005b818110156119d4576020818501810151868301820152016119b8565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610a7160208301846119ae565b80356001600160a01b0381168114611a1e57600080fd5b919050565b60008060408385031215611a3657600080fd5b611a3f83611a07565b946020939093013593505050565b600060208284031215611a5f57600080fd5b610a7182611a07565b828152604060208201526000611a8160408301846119ae565b949350505050565b8015158114611a9757600080fd5b50565b600080600060608486031215611aaf57600080fd5b833592506020840135611ac181611a89565b9150611acf60408501611a07565b90509250925092565b600080600060608486031215611aed57600080fd5b611af684611a07565b9250611b0460208501611a07565b9150604084013590509250925092565b600060208284031215611b2657600080fd5b5035919050565b600060208284031215611b3f57600080fd5b8135610a7181611a89565b634e487b7160e01b600052604160045260246000fd5b600080600060608486031215611b7557600080fd5b611b7e84611a07565b925060208401359150604084013567ffffffffffffffff80821115611ba257600080fd5b818601915086601f830112611bb657600080fd5b813581811115611bc857611bc8611b4a565b604051601f8201601f19908116603f01168101908382118183101715611bf057611bf0611b4a565b81604052828152896020848701011115611c0957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b604081526000611c3e60408301856119ae565b90508260208301529392505050565b60008060408385031215611c6057600080fd5b611c6983611a07565b9150611c7760208401611a07565b90509250929050565b600181811c90821680611c9457607f821691505b602082108103611cb457634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611ccc57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761063857610638611cd3565b8181038181111561063857610638611cd3565b634e487b7160e01b600052603260045260246000fd5b8082018082111561063857610638611cd3565b600060208284031215611d4e57600080fd5b8151610a7181611a89565b600082611d7657634e487b7160e01b600052601260045260246000fd5b500490565b600060018201611d8d57611d8d611cd3565b5060010190565b601f8211156118ab57600081815260208120601f850160051c81016020861015611dbb5750805b601f850160051c820191505b81811015611dda57828155600101611dc7565b505050505050565b815167ffffffffffffffff811115611dfc57611dfc611b4a565b611e1081611e0a8454611c80565b84611d94565b602080601f831160018114611e455760008415611e2d5750858301515b600019600386901b1c1916600185901b178555611dda565b600085815260208120601f198616915b82811015611e7457888601518255948401946001909101908401611e55565b5085821015611e925787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60018060a01b0384168152826020820152606060408201526000611ec960608301846119ae565b9594505050505056fe5468652066756c6c207265776172642068617320616c7265616479206265656e2070616964596f75206861766520616c7265616479207573656420746869732074797065206f662061697264726f70a2646970667358221220c47cc2fac1fdcdfa4ff009fa048a579ace8ed2743c9e6a9683cdf76a74def51b64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061019c5760003560e01c806370a08231116100ec578063be45fd621161008a578063d4ddce8a11610064578063d4ddce8a146104f9578063dd62ed3e14610519578063f5f10cf91461055f578063ff9521041461057f57600080fd5b8063be45fd6214610454578063ca5d088014610474578063d4697d7f1461049757600080fd5b806395d89b41116100c657806395d89b41146103d2578063a457c2d7146103e7578063a9059cbb14610407578063b4874b401461042757600080fd5b806370a082311461036957806371820c4b1461039f5780638943ec02146103b257600080fd5b80632edf08691161015957806351d1b1001161013357806351d1b100146102ed5780635a3b7e42146103035780635a5c1028146103325780635bf7d9c41461035257600080fd5b80632edf086914610289578063313ce567146102b157806339509351146102cd57600080fd5b806306fdde03146101a1578063095ea7b3146101cc5780630c3a8eb8146101fc5780630cf5d1a01461022a57806318160ddd1461024a57806323b872dd14610269575b600080fd5b3480156101ad57600080fd5b506101b6610595565b6040516101c391906119f4565b60405180910390f35b3480156101d857600080fd5b506101ec6101e7366004611a23565b610627565b60405190151581526020016101c3565b34801561020857600080fd5b5061021c610217366004611a4d565b61063e565b6040516101c3929190611a68565b34801561023657600080fd5b5061021c610245366004611a9a565b6107a3565b34801561025657600080fd5b506002545b6040519081526020016101c3565b34801561027557600080fd5b506101ec610284366004611ad8565b6109c9565b34801561029557600080fd5b50600e54601254604080519283526020830191909152016101c3565b3480156102bd57600080fd5b50604051601281526020016101c3565b3480156102d957600080fd5b506101ec6102e8366004611a23565b610a78565b3480156102f957600080fd5b5061025b600a5481565b34801561030f57600080fd5b5060408051808201909152600681526565726332323360d01b60208201526101b6565b34801561033e57600080fd5b5061025b61034d366004611b14565b610ab4565b34801561035e57600080fd5b50610367610ad5565b005b34801561037557600080fd5b5061025b610384366004611a4d565b6001600160a01b031660009081526020819052604090205490565b6103676103ad366004611b2d565b610bec565b3480156103be57600080fd5b506103676103cd366004611b60565b610faa565b3480156103de57600080fd5b506101b6610fea565b3480156103f357600080fd5b506101ec610402366004611a23565b610ff9565b34801561041357600080fd5b506101ec610422366004611a23565b611092565b34801561043357600080fd5b5061025b610442366004611a4d565b60106020526000908152604090205481565b34801561046057600080fd5b506101ec61046f366004611b60565b61109f565b34801561048057600080fd5b506104896111f1565b6040516101c3929190611c2b565b3480156104a357600080fd5b506104da6104b2366004611a4d565b60156020526000908152604090205460ff808216916101008104821691620100009091041683565b60408051931515845291151560208401521515908201526060016101c3565b34801561050557600080fd5b5061025b610514366004611b14565b6112b6565b34801561052557600080fd5b5061025b610534366004611c4d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561056b57600080fd5b5061025b61057a366004611b14565b6112c6565b34801561058b57600080fd5b5061025b600d5481565b6060600380546105a490611c80565b80601f01602080910402602001604051908101604052809291908181526020018280546105d090611c80565b801561061d5780601f106105f25761010080835404028352916020019161061d565b820191906000526020600020905b81548152906001019060200180831161060057829003601f168201915b5050505050905090565b60006106343384846112d6565b5060015b92915050565b604051630926a99760e11b81526001600160a01b03821660048201526000906060908290737c620d582a6eae9635e4ca4b9a2b1339f20ee1f29063124d532e90602401602060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c29190611cba565b6001600160a01b0385166000908152601060205260408120549192508290036107285760006040518060400160405280601d81526020017f596f7520686176656e277420626f7567687420616e7920746f6b656e73000000815250935093505050915091565b818103610755576000604051806060016040528060258152602001611ed360259139935093505050915091565b80610761836064611ce9565b61077390670de0b6b3a7640000611ce9565b61077d9190611d00565b604051806040016040528060028152602001614f6b60f01b815250935093505050915091565b60006060846000036107e457505060408051808201909152601481527350726963652063616e6e6f74206265207a65726f60601b60208201526000906109c1565b83801561080f5750601360018154811061080057610800611d13565b90600052602060002001546000145b1561084457505060408051808201909152600f81526e20b4b9323937b81034b99037bb32b960891b60208201526000906109c1565b8380156108ba57506000601360008154811061086257610862611d13565b906000526020600020015411801561089257506001600160a01b03831660009081526015602052604090205460ff165b806108ba57506001600160a01b038316600090815260156020526040902054610100900460ff165b156108e35760006040518060600160405280602a8152602001611ef8602a9139915091506109c1565b6000806000610917600a54600c600a548154811061090357610903611d13565b90600052602060002001548a6000806113fa565b92509250925082156109675760006040518060400160405280601981526020017f4e6f7420656e6f75676820746f6b656e7320746f2073656c6c00000000000000815250945094505050506109c1565b87820361098b578060405180602001604052806000815250945094505050506109c1565b60006040518060400160405280601381526020017257726f6e67206e756d626572206f662057454960681b815250945094505050505b935093915050565b6001600160a01b038316600090815260016020908152604080832033845290915281205482811015610a535760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610a6085338584036112d6565b610a6b85858561154c565b60019150505b9392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610634918590610aaf908690611d29565b6112d6565b60138181548110610ac457600080fd5b600091825260209091200154905081565b600080610ae13361063e565b91509150600082118190610b085760405162461bcd60e51b8152600401610a4a91906119f4565b503360009081526010602052604081208054849290610b28908490611d29565b9250508190555081600d6000828254610b419190611d29565b909155505060405163a9059cbb60e01b815233600482015260248101839052309063a9059cbb906044016020604051808303816000875af1158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190611d3c565b5060408051338152602081018490527f6a527594c3a3bb10be09482d157be87da27c2aa98a47fc05b80293c7f96f7a3f910160405180910390a15050565b600080610bfa3484336107a3565b91509150600082118190610c215760405162461bcd60e51b8152600401610a4a91906119f4565b506011546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610c5b573d6000803e3d6000fd5b5081600e6000828254610c6e9190611d29565b90915550508215610e2b5760006013600081548110610c8f57610c8f611d13565b9060005260206000200154118015610cb757503360009081526015602052604090205460ff16155b15610cdb57336000908152601560205260409020805460ff19166001179055610d40565b60006013600181548110610cf157610cf1611d13565b9060005260206000200154118015610d1e575033600090815260156020526040902054610100900460ff16155b15610d4057336000908152601560205260409020805461ff0019166101001790555b6000806013600081548110610d5757610d57611d13565b906000526020600020015411610d6e576002610d71565b60015b9050600080610dbc60006013600081548110610d8f57610d8f611d13565b906000526020600020015411610da6576014610da9565b600a5b610db69060ff1687611d59565b3361171a565b9150915081516007148290610de45760405162461bcd60e51b8152600401610a4a91906119f4565b50604080513381526020810183905260ff85168183015290517faa7c70029639873fdc04fe80f98e745789a93470d283932056440174fe0683579181900360600190a15050505b336000908152600f60205260408120549003610e6857336000908152600f60205260408120600190556012805491610e6283611d7b565b91905055505b60405163a9059cbb60e01b815233600482015260248101839052309063a9059cbb906044016020604051808303816000875af1158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed09190611d3c565b505b81600c600a5481548110610ee857610ee8611d13565b90600052602060002001541115610f375781600c600a5481548110610f0f57610f0f611d13565b906000526020600020016000828254610f289190611d00565b9091555060009250610f9d9050565b600c600a5481548110610f4c57610f4c611d13565b906000526020600020015482610f629190611d00565b91506000600c600a5481548110610f7b57610f7b611d13565b6000918252602082200191909155600a805491610f9783611d7b565b91905055505b81600003610ed257505050565b60058054336001600160a01b031991821617909155600680549091166001600160a01b03851617905560078290556008610fe48282611de2565b50505050565b6060600480546105a490611c80565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561107b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a4a565b61108833858584036112d6565b5060019392505050565b600061063433848461154c565b33600090815260208190526040812054843b906110bd908590611d00565b33600090815260208190526040808220929092556001600160a01b038716815220546110ea908590611d29565b6001600160a01b038616600090815260208190526040902055801561116f576040516344a1f60160e11b815285906001600160a01b03821690638943ec029061113b90339089908990600401611ea2565b600060405180830381600087803b15801561115557600080fd5b505af1158015611169573d6000803e3d6000fd5b50505050505b6040518481526001600160a01b0386169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a37f3ba9136826ac751de05d770d8d34fa4440ada49a5fb0e9aa1678aece66dad976836040516111de91906119f4565b60405180910390a1506001949350505050565b336000908152601560205260408120546060919062010000900460ff16156112365760006040518060600160405280602a8152602001611ef8602a9139939092509050565b60008061124c68056bc75e2d631000003361171a565b336000818152601560209081526040808320805462ff0000191662010000179055805193845290830184905282015291935091507faa7c70029639873fdc04fe80f98e745789a93470d283932056440174fe0683579060600160405180910390a190939092509050565b600b8181548110610ac457600080fd5b600c8181548110610ac457600080fd5b6001600160a01b0383166113385760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a4a565b6001600160a01b0382166113995760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a4a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080600080620f4240600b8a8154811061141757611417611d13565b90600052602060002001548961142d9190611ce9565b6114379190611d59565b90506000600b8a8154811061144e5761144e611d13565b9060005260206000200154886114649190611d59565b90508782106114c857600087600b8c8154811061148357611483611d13565b9060005260206000200154836114999190611ce9565b6114a39190611d29565b876114b184620f4240611ce9565b6114bb9190611d29565b9450945094505050611541565b896007036114e65760016114dc8884611d29565b6114bb888c611d29565b6114bb6114f48b6001611d29565b600c6115018d6001611d29565b8154811061151157611511611d13565b9060005260206000200154848b6115289190611d00565b6115328b87611d29565b61153c8b8f611d29565b6113fa565b955095509592505050565b6001600160a01b0383166115b05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a4a565b6001600160a01b0382166116125760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a4a565b6001600160a01b0383166000908152602081905260409020548181101561168a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a4a565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906116c1908490611d29565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161170d91815260200190565b60405180910390a3610fe4565b60606000601360018154811061173257611732611d13565b906000526020600020015460000361177357505060408051808201909152600f81526e20b4b9323937b81034b99037bb32b960891b602082015260006118a4565b6014546013805460009260ff1690811061178f5761178f611d13565b906000526020600020015411156118a457601454601380546000926117d5929160ff9091169081106117c3576117c3611d13565b906000526020600020015486866118b0565b90508481101561180c576014546013805460009260ff169081106117fb576117fb611d13565b600091825260209091200155611846565b60145460138054879260ff1690811061182757611827611d13565b9060005260206000200160008282546118409190611d00565b90915550505b60145460138054909160ff1690811061186157611861611d13565b9060005260206000200154600003611881576014805460ff191660011790555b6040805180820190915260078152665375636365737360c81b6020820152925090505b9250929050565b505050565b6000828411156119345760405163a9059cbb60e01b81526001600160a01b038316600482015260248101849052309063a9059cbb906044016020604051808303816000875af1158015611907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061192b9190611d3c565b50829050610a71565b60405163a9059cbb60e01b81526001600160a01b038316600482015260248101859052309063a9059cbb906044016020604051808303816000875af1158015611981573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a59190611d3c565b50839050610a71565b6000815180845260005b818110156119d4576020818501810151868301820152016119b8565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610a7160208301846119ae565b80356001600160a01b0381168114611a1e57600080fd5b919050565b60008060408385031215611a3657600080fd5b611a3f83611a07565b946020939093013593505050565b600060208284031215611a5f57600080fd5b610a7182611a07565b828152604060208201526000611a8160408301846119ae565b949350505050565b8015158114611a9757600080fd5b50565b600080600060608486031215611aaf57600080fd5b833592506020840135611ac181611a89565b9150611acf60408501611a07565b90509250925092565b600080600060608486031215611aed57600080fd5b611af684611a07565b9250611b0460208501611a07565b9150604084013590509250925092565b600060208284031215611b2657600080fd5b5035919050565b600060208284031215611b3f57600080fd5b8135610a7181611a89565b634e487b7160e01b600052604160045260246000fd5b600080600060608486031215611b7557600080fd5b611b7e84611a07565b925060208401359150604084013567ffffffffffffffff80821115611ba257600080fd5b818601915086601f830112611bb657600080fd5b813581811115611bc857611bc8611b4a565b604051601f8201601f19908116603f01168101908382118183101715611bf057611bf0611b4a565b81604052828152896020848701011115611c0957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b604081526000611c3e60408301856119ae565b90508260208301529392505050565b60008060408385031215611c6057600080fd5b611c6983611a07565b9150611c7760208401611a07565b90509250929050565b600181811c90821680611c9457607f821691505b602082108103611cb457634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611ccc57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761063857610638611cd3565b8181038181111561063857610638611cd3565b634e487b7160e01b600052603260045260246000fd5b8082018082111561063857610638611cd3565b600060208284031215611d4e57600080fd5b8151610a7181611a89565b600082611d7657634e487b7160e01b600052601260045260246000fd5b500490565b600060018201611d8d57611d8d611cd3565b5060010190565b601f8211156118ab57600081815260208120601f850160051c81016020861015611dbb5750805b601f850160051c820191505b81811015611dda57828155600101611dc7565b505050505050565b815167ffffffffffffffff811115611dfc57611dfc611b4a565b611e1081611e0a8454611c80565b84611d94565b602080601f831160018114611e455760008415611e2d5750858301515b600019600386901b1c1916600185901b178555611dda565b600085815260208120601f198616915b82811015611e7457888601518255948401946001909101908401611e55565b5085821015611e925787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60018060a01b0384168152826020820152606060408201526000611ec960608301846119ae565b9594505050505056fe5468652066756c6c207265776172642068617320616c7265616479206265656e2070616964596f75206861766520616c7265616479207573656420746869732074797065206f662061697264726f70a2646970667358221220c47cc2fac1fdcdfa4ff009fa048a579ace8ed2743c9e6a9683cdf76a74def51b64736f6c63430008110033

Deployed Bytecode Sourcemap

19780:7088:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6288:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8455:169;;;;;;;;;;-1:-1:-1;8455:169:0;;;;;:::i;:::-;;:::i;:::-;;;1269:14:1;;1262:22;1244:41;;1232:2;1217:18;8455:169:0;1104:187:1;21046:458:0;;;;;;;;;;-1:-1:-1;21046:458:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;22868:896::-;;;;;;;;;;-1:-1:-1;22868:896:0;;;;;:::i;:::-;;:::i;7408:108::-;;;;;;;;;;-1:-1:-1;7496:12:0;;7408:108;;;2440:25:1;;;2428:2;2413:18;7408:108:0;2294:177:1;9106:492:0;;;;;;;;;;-1:-1:-1;9106:492:0;;;;;:::i;:::-;;:::i;23772:153::-;;;;;;;;;;-1:-1:-1;23882:15:0;;23899:17;;23772:153;;;2983:25:1;;;3039:2;3024:18;;3017:34;;;;2956:18;23772:153:0;2809:248:1;7250:93:0;;;;;;;;;;-1:-1:-1;7250:93:0;;7333:2;3204:36:1;;3192:2;3177:18;7250:93:0;3062:184:1;10007:215:0;;;;;;;;;;-1:-1:-1;10007:215:0;;;;;:::i;:::-;;:::i;20035:26::-;;;;;;;;;;;;;;;;18026:95;;;;;;;;;;-1:-1:-1;18098:15:0;;;;;;;;;;;;-1:-1:-1;;;18098:15:0;;;;18026:95;;20522:53;;;;;;;;;;-1:-1:-1;20522:53:0;;;;;:::i;:::-;;:::i;21512:372::-;;;;;;;;;;;;;:::i;:::-;;7579:127;;;;;;;;;;-1:-1:-1;7579:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;7680:18:0;7653:7;7680:18;;;;;;;;;;;;7579:127;25336:1529;;;;;;:::i;:::-;;:::i;16757:772::-;;;;;;;;;;-1:-1:-1;16757:772:0;;;;;:::i;:::-;;:::i;6507:104::-;;;;;;;;;;;;;:::i;10725:413::-;;;;;;;;;;-1:-1:-1;10725:413:0;;;;;:::i;:::-;;:::i;7919:175::-;;;;;;;;;;-1:-1:-1;7919:175:0;;;;;:::i;:::-;;:::i;20411:47::-;;;;;;;;;;-1:-1:-1;20411:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;18663:857;;;;;;;;;;-1:-1:-1;18663:857:0;;;;;:::i;:::-;;:::i;24558:435::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;20733:53::-;;;;;;;;;;-1:-1:-1;20733:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5387:14:1;;5380:22;5362:41;;5446:14;;5439:22;5434:2;5419:18;;5412:50;5505:14;5498:22;5478:18;;;5471:50;5350:2;5335:18;20733:53:0;5178:349:1;20068:60:0;;;;;;;;;;-1:-1:-1;20068:60:0;;;;;:::i;:::-;;:::i;8157:151::-;;;;;;;;;;-1:-1:-1;8157:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;8273:18:0;;;8246:7;8273:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8157:151;20135:132;;;;;;;;;;-1:-1:-1;20135:132:0;;;;;:::i;:::-;;:::i;20274:62::-;;;;;;;;;;;;;;;;6288:100;6342:13;6375:5;6368:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6288:100;:::o;8455:169::-;8538:4;8555:39;4115:10;8578:7;8587:6;8555:8;:39::i;:::-;-1:-1:-1;8612:4:0;8455:169;;;;;:::o;21046:458::-;21172:69;;-1:-1:-1;;;21172:69:0;;-1:-1:-1;;;;;6346:32:1;;21172:69:0;;;6328:51:1;21114:11:0;;21127:19;;21114:11;;21178:42;;21172:61;;6301:18:1;;21172:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21266:22:0;;21252:11;21266:22;;;:14;:22;;;;;;21158:83;;-1:-1:-1;21302:11:0;;;21299:59;;21323:1;21315:43;;;;;;;;;;;;;;;;;;;;;;;21046:458;;;:::o;21299:59::-;21382:6;21372;:16;21369:72;;21398:1;21390:51;;;;;;;;;;;;;;;;;;;;;;;21046:458;;;:::o;21369:72::-;21482:6;21460:12;:6;21469:3;21460:12;:::i;:::-;:19;;21473:6;21460:19;:::i;:::-;:28;;;;:::i;:::-;21452:44;;;;;;;;;;;;;-1:-1:-1;;;21452:44:0;;;;;;;;;21046:458;;;:::o;22868:896::-;22959:17;22978:19;23013:9;23026:1;23013:14;23010:79;;-1:-1:-1;;23043:34:0;;;;;;;;;;;;-1:-1:-1;;;23043:34:0;;;;23051:1;;23043:34;;23010:79;23102:8;:31;;;;;23114:11;23126:1;23114:14;;;;;;;;:::i;:::-;;;;;;;;;23132:1;23114:19;23102:31;23099:92;;;-1:-1:-1;;23150:29:0;;;;;;;;;;;;-1:-1:-1;;;23150:29:0;;;;23158:1;;23150:29;;23099:92;23204:8;:114;;;;;23235:1;23218:11;23230:1;23218:14;;;;;;;;:::i;:::-;;;;;;;;;:18;:58;;;;-1:-1:-1;;;;;;23240:20:0;;;;;;:12;:20;;;;;:36;;;23218:58;23217:100;;;-1:-1:-1;;;;;;23281:20:0;;;;;;:12;:20;;;;;:36;;;;;;23217:100;23201:202;;;23343:1;23335:56;;;;;;;;;;;;;;;;;;;;;;;23201:202;23414:17;23433:13;23448:14;23466:62;23475:10;;23487:13;23501:10;;23487:25;;;;;;;;:::i;:::-;;;;;;;;;23514:9;23524:1;23526;23466:8;:62::i;:::-;23413:115;;;;;;23542:12;23539:82;;;23578:1;23570:39;;;;;;;;;;;;;;;;;;;;;;;;;;23539:82;23646:9;23634:8;:21;23631:74;;23679:9;23671:22;;;;;;;;;;;;;;;;;;;;;23631:74;23731:1;23723:33;;;;;;;;;;;;;-1:-1:-1;;;23723:33:0;;;;;;;;;;22868:896;;;;;;;:::o;9106:492::-;-1:-1:-1;;;;;9290:19:0;;9246:4;9290:19;;;:11;:19;;;;;;;;4115:10;9290:33;;;;;;;;9342:26;;;;9334:79;;;;-1:-1:-1;;;9334:79:0;;7351:2:1;9334:79:0;;;7333:21:1;7390:2;7370:18;;;7363:30;7429:34;7409:18;;;7402:62;-1:-1:-1;;;7480:18:1;;;7473:38;7528:19;;9334:79:0;;;;;;;;;9449:57;9458:6;4115:10;9499:6;9480:16;:25;9449:8;:57::i;:::-;9530:36;9540:6;9548:9;9559:6;9530:9;:36::i;:::-;9586:4;9579:11;;;9106:492;;;;;;:::o;10007:215::-;4115:10;10095:4;10144:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10144:34:0;;;;;;;;;;10095:4;;10112:80;;10135:7;;10144:47;;10181:10;;10144:47;:::i;:::-;10112:8;:80::i;20522:53::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20522:53:0;:::o;21512:372::-;21559:11;21572:19;21595:34;21618:10;21595:22;:34::i;:::-;21558:71;;;;21657:1;21648:6;:10;21660:5;21640:26;;;;;-1:-1:-1;;;21640:26:0;;;;;;;;:::i;:::-;-1:-1:-1;21692:10:0;21677:26;;;;:14;:26;;;;;:36;;21707:6;;21677:26;:36;;21707:6;;21677:36;:::i;:::-;;;;;;;;21750:6;21724:22;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;21767:50:0;;-1:-1:-1;;;21767:50:0;;21798:10;21767:50;;;7862:51:1;7929:18;;;7922:34;;;21782:4:0;;21767:30;;7835:18:1;;21767:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21833:43:0;;;21857:10;7862:51:1;;7944:2;7929:18;;7922:34;;;21833:43:0;;7835:18:1;21833:43:0;;;;;;;21547:337;;21512:372::o;25336:1529::-;25396:17;25415:19;25438:46;25453:9;25464:7;25473:10;25438:14;:46::i;:::-;25395:89;;;;25518:1;25503:12;:16;25521:5;25495:32;;;;;-1:-1:-1;;;25495:32:0;;;;;;;;:::i;:::-;-1:-1:-1;25548:3:0;;25540:32;;-1:-1:-1;;;;;25548:3:0;;;;25562:9;25540:32;;;;;25548:3;25540:32;25548:3;25540:32;25562:9;25548:3;25540:32;;;;;;;;;;;;;;;;;;;;;25602:12;25583:15;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;25627:652:0;;;;25673:1;25656:11;25668:1;25656:14;;;;;;;;:::i;:::-;;;;;;;;;:18;:63;;;;-1:-1:-1;25692:10:0;25679:24;;;;:12;:24;;;;;:40;;;25678:41;25656:63;25653:304;;;25752:10;25739:24;;;;:12;:24;;;;;:47;;-1:-1:-1;;25739:47:0;25782:4;25739:47;;;25653:304;;;25828:1;25811:11;25823:1;25811:14;;;;;;;;:::i;:::-;;;;;;;;;:18;:63;;;;-1:-1:-1;25847:10:0;25834:24;;;;:12;:24;;;;;:40;;;;;;25833:41;25811:63;25808:149;;;25907:10;25894:24;;;;:12;:24;;;;;:47;;-1:-1:-1;;25894:47:0;;;;;25808:149;25971:11;26002:1;25985:11;25997:1;25985:14;;;;;;;;:::i;:::-;;;;;;;;;:18;:26;;26010:1;25985:26;;;26006:1;25985:26;25971:40;;26027:21;26050:18;26072:69;26116:1;26099:11;26111:1;26099:14;;;;;;;;:::i;:::-;;;;;;;;;:18;:28;;26125:2;26099:28;;;26120:2;26099:28;26083:45;;;;:12;:45;:::i;:::-;26130:10;26072;:69::i;:::-;26026:115;;;;26170:7;26164:21;26189:1;26164:26;26192:7;26156:44;;;;;-1:-1:-1;;;26156:44:0;;;;;;;;:::i;:::-;-1:-1:-1;26220:47:0;;;26234:10;8637:51:1;;8719:2;8704:18;;8697:34;;;8779:4;8767:17;;8747:18;;;8740:45;26220:47:0;;;;;;;8625:2:1;26220:47:0;;;25638:641;;;25627:652;26310:10;26304:17;;;;:5;:17;;;;;;:22;;26301:108;;26348:10;26342:17;;;;:5;:17;;;;;26362:1;26342:21;;26378:17;:19;;;;;;:::i;:::-;;;;;;26301:108;26419:56;;-1:-1:-1;;;26419:56:0;;26450:10;26419:56;;;7862:51:1;7929:18;;;7922:34;;;26434:4:0;;26419:30;;7835:18:1;;26419:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26486:372;26534:12;26506:13;26520:10;;26506:25;;;;;;;;:::i;:::-;;;;;;;;;:40;26503:317;;;26596:12;26567:13;26581:10;;26567:25;;;;;;;;:::i;:::-;;;;;;;;;:41;;;;;;;:::i;:::-;;;;-1:-1:-1;26642:1:0;;-1:-1:-1;26503:317:0;;-1:-1:-1;26503:317:0;;26700:13;26714:10;;26700:25;;;;;;;;:::i;:::-;;;;;;;;;26684:41;;;;;:::i;:::-;;;26772:1;26744:13;26758:10;;26744:25;;;;;;;;:::i;:::-;;;;;;;;;:29;;;;26792:10;:12;;;;;;:::i;:::-;;;;;;26503:317;26839:12;26855:1;26839:17;26486:372;;25384:1481;;25336:1529;:::o;16757:772::-;17344:3;:31;;17365:10;-1:-1:-1;;;;;;17344:31:0;;;;;;;17386:10;:26;;;;;-1:-1:-1;;;;;17386:26:0;;;;;17423:9;:27;;;17461:8;:26;17482:5;17461:8;:26;:::i;:::-;;16757:772;;;:::o;6507:104::-;6563:13;6596:7;6589:14;;;;;:::i;10725:413::-;4115:10;10818:4;10862:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10862:34:0;;;;;;;;;;10915:35;;;;10907:85;;;;-1:-1:-1;;;10907:85:0;;11336:2:1;10907:85:0;;;11318:21:1;11375:2;11355:18;;;11348:30;11414:34;11394:18;;;11387:62;-1:-1:-1;;;11465:18:1;;;11458:35;11510:19;;10907:85:0;11134:401:1;10907:85:0;11028:67;4115:10;11051:7;11079:15;11060:16;:34;11028:8;:67::i;:::-;-1:-1:-1;11126:4:0;;10725:413;-1:-1:-1;;;10725:413:0:o;7919:175::-;8005:4;8022:42;4115:10;8046:9;8057:6;8022:9;:42::i;18663:857::-;19154:10;18757:12;19144:21;;;;;;;;;;;19074:23;;;19144:31;;19168:7;;19144:31;:::i;:::-;19130:10;19120:9;:21;;;;;;;;;;;:55;;;;-1:-1:-1;;;;;19210:21:0;;;;;;:31;;19234:7;;19210:31;:::i;:::-;-1:-1:-1;;;;;19186:21:0;;:9;:21;;;;;;;;;;:55;19255:12;;19252:147;;19337:50;;-1:-1:-1;;;19337:50:0;;19311:10;;-1:-1:-1;;;;;19337:22:0;;;;;:50;;19360:10;;19372:7;;19381:5;;19337:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19269:130;19252:147;19414:41;;2440:25:1;;;-1:-1:-1;;;;;19414:41:0;;;19423:10;;19414:41;;2428:2:1;2413:18;19414:41:0;;;;;;;19471:19;19484:5;19471:19;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;19508:4:0;;18663:857;-1:-1:-1;;;;18663:857:0:o;24558:435::-;24656:10;24616:11;24643:24;;;:12;:24;;;;;:32;24593:21;;24616:11;24643:32;;;;;24640:120;;;24746:1;24692:56;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24558:435:0;-1:-1:-1;24558:435:0:o;24640:120::-;24771:22;24795:12;24811:34;24822:10;24834;24811;:34::i;:::-;24869:10;24856:24;;;;:12;:24;;;;;;;;:39;;-1:-1:-1;;24856:39:0;;;;;24911:37;;8637:51:1;;;8704:18;;;8697:34;;;8747:18;;8740:45;24770:75:0;;-1:-1:-1;8697:34:1;-1:-1:-1;24911:37:0;;8625:2:1;8610:18;24911:37:0;;;;;;;24967:8;;24977:7;;-1:-1:-1;24558:435:0;-1:-1:-1;24558:435:0:o;20068:60::-;;;;;;;;;;;;20135:132;;;;;;;;;;;;14409:380;-1:-1:-1;;;;;14545:19:0;;14537:68;;;;-1:-1:-1;;;14537:68:0;;12723:2:1;14537:68:0;;;12705:21:1;12762:2;12742:18;;;12735:30;12801:34;12781:18;;;12774:62;-1:-1:-1;;;12852:18:1;;;12845:34;12896:19;;14537:68:0;12521:400:1;14537:68:0;-1:-1:-1;;;;;14624:21:0;;14616:68;;;;-1:-1:-1;;;14616:68:0;;13128:2:1;14616:68:0;;;13110:21:1;13167:2;13147:18;;;13140:30;13206:34;13186:18;;;13179:62;-1:-1:-1;;;13257:18:1;;;13250:32;13299:19;;14616:68:0;12926:398:1;14616:68:0;-1:-1:-1;;;;;14697:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14749:32;;2440:25:1;;;14749:32:0;;2413:18:1;14749:32:0;;;;;;;14409:380;;;:::o;21895:963::-;22012:17;22031:13;22046:14;22073:22;22129:5;22109:10;22120:5;22109:17;;;;;;;;:::i;:::-;;;;;;;;;22098:10;:28;;;;:::i;:::-;:36;;;;:::i;:::-;22073:61;;22145:19;22175:10;22186:5;22175:17;;;;;;;;:::i;:::-;;;;;;;;;22167:5;:25;;;;:::i;:::-;22145:47;;22227:5;22206:17;:26;22203:648;;22270:5;22330;22310:10;22321:5;22310:17;;;;;;;;:::i;:::-;;;;;;;;;22293:14;:34;;;;:::i;:::-;:42;;;;:::i;:::-;22376:6;22352:22;:14;22369:5;22352:22;:::i;:::-;:30;;;;:::i;:::-;22246:149;;;;;;;;;;22203:648;22429:5;22438:1;22429:10;22426:414;;22481:4;22504:25;22524:5;22504:17;:25;:::i;:::-;22548:19;22561:6;22548:10;:19;:::i;22426:414::-;22624:202;22649:9;:5;22657:1;22649:9;:::i;:::-;22675:13;22689:7;:5;22695:1;22689:7;:::i;:::-;22675:22;;;;;;;;:::i;:::-;;;;;;;;;22720:17;22714:5;:23;;;;:::i;:::-;22754;22772:5;22754:17;:23;:::i;:::-;22794:17;22805:6;22794:10;:17;:::i;:::-;22624:8;:202::i;21895:963::-;;;;;;;;;;:::o;11628:733::-;-1:-1:-1;;;;;11768:20:0;;11760:70;;;;-1:-1:-1;;;11760:70:0;;13531:2:1;11760:70:0;;;13513:21:1;13570:2;13550:18;;;13543:30;13609:34;13589:18;;;13582:62;-1:-1:-1;;;13660:18:1;;;13653:35;13705:19;;11760:70:0;13329:401:1;11760:70:0;-1:-1:-1;;;;;11849:23:0;;11841:71;;;;-1:-1:-1;;;11841:71:0;;13937:2:1;11841:71:0;;;13919:21:1;13976:2;13956:18;;;13949:30;14015:34;13995:18;;;13988:62;-1:-1:-1;;;14066:18:1;;;14059:33;14109:19;;11841:71:0;13735:399:1;11841:71:0;-1:-1:-1;;;;;12009:17:0;;11985:21;12009:17;;;;;;;;;;;12045:23;;;;12037:74;;;;-1:-1:-1;;;12037:74:0;;14341:2:1;12037:74:0;;;14323:21:1;14380:2;14360:18;;;14353:30;14419:34;14399:18;;;14392:62;-1:-1:-1;;;14470:18:1;;;14463:36;14516:19;;12037:74:0;14139:402:1;12037:74:0;-1:-1:-1;;;;;12147:17:0;;;:9;:17;;;;;;;;;;;12167:22;;;12147:42;;12211:20;;;;;;;;:30;;12183:6;;12147:9;12211:30;;12183:6;;12211:30;:::i;:::-;;;;;;;;12276:9;-1:-1:-1;;;;;12259:35:0;12268:6;-1:-1:-1;;;;;12259:35:0;;12287:6;12259:35;;;;2440:25:1;;2428:2;2413:18;;2294:177;12259:35:0;;;;;;;;12307:46;15389:125;23935:615;23999:21;24022:11;24049;24061:1;24049:14;;;;;;;;:::i;:::-;;;;;;;;;24067:1;24049:19;24046:79;;-1:-1:-1;;24084:29:0;;;;;;;;;;;;-1:-1:-1;;;24084:29:0;;;;24111:1;24084:29;;24046:79;24150:12;;24138:11;:25;;24166:1;;24150:12;;;24138:25;;;;;;:::i;:::-;;;;;;;;;:29;24135:408;;;24225:12;;24213:11;:25;;24185:12;;24201:52;;24213:11;24225:12;;;;;24213:25;;;;;;:::i;:::-;;;;;;;;;24240:4;24246:6;24201:11;:52::i;:::-;24184:69;;24281:4;24271:7;:14;24268:156;;;24317:12;;24305:11;:25;;24333:1;;24317:12;;;24305:25;;;;;;:::i;:::-;;;;;;;;;;:29;24268:156;;;24387:12;;24375:11;:25;;24404:4;;24387:12;;;24375:25;;;;;;:::i;:::-;;;;;;;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;24268:156:0;24453:12;;24441:11;:25;;:11;;24453:12;;;24441:25;;;;;;:::i;:::-;;;;;;;;;24470:1;24441:30;24438:51;;24473:12;:16;;-1:-1:-1;;24473:16:0;24488:1;24473:16;;;24438:51;24504:27;;;;;;;;;;;;-1:-1:-1;;;24504:27:0;;;;;-1:-1:-1;24523:7:0;-1:-1:-1;24135:408:0;23935:615;;;;;:::o;15389:125::-;;;;:::o;25001:326::-;25077:11;25110:4;25103;:11;25100:220;;;25131:44;;-1:-1:-1;;;25131:44:0;;-1:-1:-1;;;;;7880:32:1;;25131:44:0;;;7862:51:1;7929:18;;;7922:34;;;25146:4:0;;25131:30;;7835:18:1;;25131:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25198:4;25190:13;;;;25100:220;25236:44;;-1:-1:-1;;;25236:44:0;;-1:-1:-1;;;;;7880:32:1;;25236:44:0;;;7862:51:1;7929:18;;;7922:34;;;25251:4:0;;25236:30;;7835:18:1;;25236:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25303:4;25295:13;;;;14:423:1;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;160:3;363:1;356:4;347:6;342:3;338:16;334:27;327:38;426:4;419:2;415:7;410:2;402:6;398:15;394:29;389:3;385:39;381:50;374:57;;;14:423;;;;:::o;442:220::-;591:2;580:9;573:21;554:4;611:45;652:2;641:9;637:18;629:6;611:45;:::i;667:173::-;735:20;;-1:-1:-1;;;;;784:31:1;;774:42;;764:70;;830:1;827;820:12;764:70;667:173;;;:::o;845:254::-;913:6;921;974:2;962:9;953:7;949:23;945:32;942:52;;;990:1;987;980:12;942:52;1013:29;1032:9;1013:29;:::i;:::-;1003:39;1089:2;1074:18;;;;1061:32;;-1:-1:-1;;;845:254:1:o;1296:186::-;1355:6;1408:2;1396:9;1387:7;1383:23;1379:32;1376:52;;;1424:1;1421;1414:12;1376:52;1447:29;1466:9;1447:29;:::i;1487:291::-;1664:6;1653:9;1646:25;1707:2;1702;1691:9;1687:18;1680:30;1627:4;1727:45;1768:2;1757:9;1753:18;1745:6;1727:45;:::i;:::-;1719:53;1487:291;-1:-1:-1;;;;1487:291:1:o;1783:118::-;1869:5;1862:13;1855:21;1848:5;1845:32;1835:60;;1891:1;1888;1881:12;1835:60;1783:118;:::o;1906:383::-;1980:6;1988;1996;2049:2;2037:9;2028:7;2024:23;2020:32;2017:52;;;2065:1;2062;2055:12;2017:52;2101:9;2088:23;2078:33;;2161:2;2150:9;2146:18;2133:32;2174:28;2196:5;2174:28;:::i;:::-;2221:5;-1:-1:-1;2245:38:1;2279:2;2264:18;;2245:38;:::i;:::-;2235:48;;1906:383;;;;;:::o;2476:328::-;2553:6;2561;2569;2622:2;2610:9;2601:7;2597:23;2593:32;2590:52;;;2638:1;2635;2628:12;2590:52;2661:29;2680:9;2661:29;:::i;:::-;2651:39;;2709:38;2743:2;2732:9;2728:18;2709:38;:::i;:::-;2699:48;;2794:2;2783:9;2779:18;2766:32;2756:42;;2476:328;;;;;:::o;3251:180::-;3310:6;3363:2;3351:9;3342:7;3338:23;3334:32;3331:52;;;3379:1;3376;3369:12;3331:52;-1:-1:-1;3402:23:1;;3251:180;-1:-1:-1;3251:180:1:o;3436:241::-;3492:6;3545:2;3533:9;3524:7;3520:23;3516:32;3513:52;;;3561:1;3558;3551:12;3513:52;3600:9;3587:23;3619:28;3641:5;3619:28;:::i;3682:127::-;3743:10;3738:3;3734:20;3731:1;3724:31;3774:4;3771:1;3764:15;3798:4;3795:1;3788:15;3814:1063;3900:6;3908;3916;3969:2;3957:9;3948:7;3944:23;3940:32;3937:52;;;3985:1;3982;3975:12;3937:52;4008:29;4027:9;4008:29;:::i;:::-;3998:39;;4084:2;4073:9;4069:18;4056:32;4046:42;;4139:2;4128:9;4124:18;4111:32;4162:18;4203:2;4195:6;4192:14;4189:34;;;4219:1;4216;4209:12;4189:34;4257:6;4246:9;4242:22;4232:32;;4302:7;4295:4;4291:2;4287:13;4283:27;4273:55;;4324:1;4321;4314:12;4273:55;4360:2;4347:16;4382:2;4378;4375:10;4372:36;;;4388:18;;:::i;:::-;4463:2;4457:9;4431:2;4517:13;;-1:-1:-1;;4513:22:1;;;4537:2;4509:31;4505:40;4493:53;;;4561:18;;;4581:22;;;4558:46;4555:72;;;4607:18;;:::i;:::-;4647:10;4643:2;4636:22;4682:2;4674:6;4667:18;4722:7;4717:2;4712;4708;4704:11;4700:20;4697:33;4694:53;;;4743:1;4740;4733:12;4694:53;4799:2;4794;4790;4786:11;4781:2;4773:6;4769:15;4756:46;4844:1;4839:2;4834;4826:6;4822:15;4818:24;4811:35;4865:6;4855:16;;;;;;;3814:1063;;;;;:::o;4882:291::-;5059:2;5048:9;5041:21;5022:4;5079:45;5120:2;5109:9;5105:18;5097:6;5079:45;:::i;:::-;5071:53;;5160:6;5155:2;5144:9;5140:18;5133:34;4882:291;;;;;:::o;5532:260::-;5600:6;5608;5661:2;5649:9;5640:7;5636:23;5632:32;5629:52;;;5677:1;5674;5667:12;5629:52;5700:29;5719:9;5700:29;:::i;:::-;5690:39;;5748:38;5782:2;5771:9;5767:18;5748:38;:::i;:::-;5738:48;;5532:260;;;;;:::o;5797:380::-;5876:1;5872:12;;;;5919;;;5940:61;;5994:4;5986:6;5982:17;5972:27;;5940:61;6047:2;6039:6;6036:14;6016:18;6013:38;6010:161;;6093:10;6088:3;6084:20;6081:1;6074:31;6128:4;6125:1;6118:15;6156:4;6153:1;6146:15;6010:161;;5797:380;;;:::o;6390:184::-;6460:6;6513:2;6501:9;6492:7;6488:23;6484:32;6481:52;;;6529:1;6526;6519:12;6481:52;-1:-1:-1;6552:16:1;;6390:184;-1:-1:-1;6390:184:1:o;6579:127::-;6640:10;6635:3;6631:20;6628:1;6621:31;6671:4;6668:1;6661:15;6695:4;6692:1;6685:15;6711:168;6784:9;;;6815;;6832:15;;;6826:22;;6812:37;6802:71;;6853:18;;:::i;6884:128::-;6951:9;;;6972:11;;;6969:37;;;6986:18;;:::i;7017:127::-;7078:10;7073:3;7069:20;7066:1;7059:31;7109:4;7106:1;7099:15;7133:4;7130:1;7123:15;7558:125;7623:9;;;7644:10;;;7641:36;;;7657:18;;:::i;7967:245::-;8034:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:52;;;8103:1;8100;8093:12;8055:52;8135:9;8129:16;8154:28;8176:5;8154:28;:::i;8217:217::-;8257:1;8283;8273:132;;8327:10;8322:3;8318:20;8315:1;8308:31;8362:4;8359:1;8352:15;8390:4;8387:1;8380:15;8273:132;-1:-1:-1;8419:9:1;;8217:217::o;8796:135::-;8835:3;8856:17;;;8853:43;;8876:18;;:::i;:::-;-1:-1:-1;8923:1:1;8912:13;;8796:135::o;9061:544::-;9162:2;9157:3;9154:11;9151:448;;;9198:1;9223:5;9219:2;9212:17;9268:4;9264:2;9254:19;9338:2;9326:10;9322:19;9319:1;9315:27;9309:4;9305:38;9374:4;9362:10;9359:20;9356:47;;;-1:-1:-1;9397:4:1;9356:47;9452:2;9447:3;9443:12;9440:1;9436:20;9430:4;9426:31;9416:41;;9507:82;9525:2;9518:5;9515:13;9507:82;;;9570:17;;;9551:1;9540:13;9507:82;;;9511:3;;;9061:544;;;:::o;9781:1348::-;9905:3;9899:10;9932:18;9924:6;9921:30;9918:56;;;9954:18;;:::i;:::-;9983:96;10072:6;10032:38;10064:4;10058:11;10032:38;:::i;:::-;10026:4;9983:96;:::i;:::-;10134:4;;10198:2;10187:14;;10215:1;10210:662;;;;10916:1;10933:6;10930:89;;;-1:-1:-1;10985:19:1;;;10979:26;10930:89;-1:-1:-1;;9738:1:1;9734:11;;;9730:24;9726:29;9716:40;9762:1;9758:11;;;9713:57;11032:81;;10180:943;;10210:662;9008:1;9001:14;;;9045:4;9032:18;;-1:-1:-1;;10246:20:1;;;10363:236;10377:7;10374:1;10371:14;10363:236;;;10466:19;;;10460:26;10445:42;;10558:27;;;;10526:1;10514:14;;;;10393:19;;10363:236;;;10367:3;10627:6;10618:7;10615:19;10612:201;;;10688:19;;;10682:26;-1:-1:-1;;10771:1:1;10767:14;;;10783:3;10763:24;10759:37;10755:42;10740:58;10725:74;;10612:201;-1:-1:-1;;;;;10859:1:1;10843:14;;;10839:22;10826:36;;-1:-1:-1;9781:1348:1:o;11540:386::-;11772:1;11768;11763:3;11759:11;11755:19;11747:6;11743:32;11732:9;11725:51;11812:6;11807:2;11796:9;11792:18;11785:34;11855:2;11850;11839:9;11835:18;11828:30;11706:4;11875:45;11916:2;11905:9;11901:18;11893:6;11875:45;:::i;:::-;11867:53;11540:386;-1:-1:-1;;;;;11540:386:1:o

Swarm Source

ipfs://c47cc2fac1fdcdfa4ff009fa048a579ace8ed2743c9e6a9683cdf76a74def51b
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.