Mumbai Testnet

Token

joy of online life (JOY)
ERC-20

Overview

Max Total Supply

0 JOY

Holders

4,923

Market

Price

$0.00 @ 0.000000 MATIC

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
0 JOY
0xfa9da51631268a30ec3ddd1ccbf46c65fad99251
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
joyonlinelife

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at mumbai.polygonscan.com on 2023-04-22
*/

// SPDX-License-Identifier: MIT

// File: joyboy_ICO-master/contracts/Referral.sol



pragma solidity ^0.8.9;


contract refer {
    
struct User {
    bool referred;
    address referred_by;
}

struct Referal_levels {
    uint256 level_1;
    uint256 level_2;
}

mapping(address => Referal_levels) public refer_info;
mapping(address => User) public user_info;

function referee(address ref_add) public {
        require(user_info[msg.sender].referred == false, " Already referred ");
        require(ref_add != msg.sender, " You cannot refer yourself ");

        user_info[msg.sender].referred_by = ref_add;
        user_info[msg.sender].referred = true;

        address level1 = user_info[msg.sender].referred_by;
        address level2 = user_info[level1].referred_by;

        if ((level1 != msg.sender) && (level1 != address(0))) {
            refer_info[level1].level_1 += 1;
        }
        if ((level2 != msg.sender) && (level2 != address(0))) {
            refer_info[level2].level_2 += 1;
        }
        
       
}
}


// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @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;
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @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);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @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.openzeppelin.com/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) private _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 8;
    }

    /**
     * @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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    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;
    }

    /**
     * @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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    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;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    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);
            }
        }
    }

    /**
     * @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 {}
}

// File: joyboy_ICO-master/contracts/joyonlinelife.sol


pragma solidity ^0.8.9;




// if ico fails there owner's will get 95% of their matic back since 5% will be charges including gas fees and ICO processing fees
contract joyonlinelife is ERC20 {
    address public admin;
    address payable public depositAddress;

    // if ICO is successfull only then the tokens will be transfered to the owner wallet
    // else matic's will be reversed back to the owner
    mapping(address => uint) public joyBalance;

    // keeps a record of matic invested by every wallet address
    mapping(address => uint) public investedAmt;

    // 8220 matic to find if ICO was a success or not
    uint256 public hardCap = 100000000000000000;

    // tracks the raisedAmount
    uint256 public raisedAmount;

    // ICO sale starts immediately as the contract is deployed
    uint256 public saleStart = block.timestamp;
    // ICO sale ends after 6 months
    uint256 public saleEnd = block.timestamp + 14515200;

    // max investment is 300 matic
    uint256 public maxInvestment = 3000000;
    // min investment is 30 matic
    uint256 public minInvestment = 300000;

    uint256 public tokensMinted;

    uint256 public preSaleAmt = 10000000000 * 10 ** decimals();
    uint256 public seedSaleAmt = 200000000 * 10 ** decimals();
    uint256 public finalSaleAmt = 10000000000 * 10 ** decimals();

    uint256 public preTokens = 10000000000 * 10 ** decimals();
    uint256 public seedTokens = 0;
    uint256 public finalTokens = 10000000000 * 10 ** decimals();

    // enum to track the state of the contract
    enum IcoState { 
        beforeStart,
        running, 
        afterEnd, 
        halted }
    IcoState public icoState;

    // enum to track the sale of the contract
    enum SaleState { 
        pre_Sale, 
        seed_Sale, 
        final_Sale, 
        Sale_END 
    }
    SaleState public saleState;

    modifier onlyAdmin() {
        require(msg.sender == admin, "Sender must be an admin");
        _;
    }

    constructor(
        address payable _deposit
    ) ERC20("joy of online life", "JOY"){
        depositAddress = _deposit;
        admin = msg.sender;
        icoState = IcoState.beforeStart;
        _mint(admin, 1000000000000 * 10 ** decimals());
        joyBalance[admin] = 1000000000000 * 10 ** decimals();
    }

    // emergency stop for joyonlinelife
    function haltICO() public onlyAdmin {
        icoState = IcoState.halted;
    }

    // resuming joyonlinelife
    function resumeICO() public onlyAdmin {
        icoState = IcoState.running;
    }

    // function to change deposit address in case the original one got issues
    function changeDepositAddress(
        address payable _newDeposit
    ) public onlyAdmin {
        depositAddress = _newDeposit;
    }

    // fetch the current state of joyonlinelife
    function getCurrentICOState() public payable returns(IcoState) {
        if (icoState == IcoState.halted) {
            return IcoState.halted;
        } else if (block.timestamp < saleStart) {
            return IcoState.beforeStart;
        } else if (block.timestamp >= saleStart && block.timestamp <= saleEnd) {
            return IcoState.running;
        } else {
            return IcoState.afterEnd;
        }
    }

    // function to check the raised amount of matic
    function checkRaisedAmt() internal view returns(uint256) {
        return raisedAmount;
    }

    // investing function
    function invest() public payable returns(bool) {
        
        icoState = getCurrentICOState();
        // investment only possible if IcoState is running
        require(icoState == IcoState.running, "joyonlinelife is not in running state");

        // address must not have invested previously        
        require(joyBalance[msg.sender] == 0, "User must invest only once according to our policy");
                
        require(msg.value >= minInvestment && msg.value <= maxInvestment, "Investment amount must be more than 0.05 matic and less than 5 matic");

        // hardcap not reached
        require(raisedAmount + msg.value <= hardCap, "hardCap reached");
        raisedAmount += msg.value;

        // tokens calculation
        uint256 tokens = buyTokens(msg.value);

        // add tokens to investor balance from founder balance
        joyBalance[msg.sender] += tokens;
        joyBalance[admin] -= tokens;

        investedAmt[msg.sender] += msg.value;
        
        return true;          
    }

    // function to buyTokens 
    function buyTokens(
        uint256 msgValue
    ) internal returns(uint256) {
        if(saleState == SaleState.pre_Sale) {
            uint256 _tokens = preSale(msgValue);
            return _tokens;
        } else if (saleState == SaleState.seed_Sale) {
            uint256 _tokens = seedSale(msgValue);
            return _tokens;
        } else {
            uint256 _tokens = finalSale(msgValue);
            return _tokens;
        }
    }

    // calculate tokens provided the sale is preSale
    function preSale(
        uint _msgValue
    ) internal returns(uint256 tokens) {
        uint256 _tokens = 0;
        // calculated considering matic value as 1$
        _tokens = _msgValue * 1 * 10 ** 3;
        if((preTokens + _tokens) >= preSaleAmt){
            // find the amount required to fill up the pre sale amount
            // newValue is the value of tokens needed to fill the rest of the presale
            uint256 newValue = (preSaleAmt - preTokens)/(1 * 10 ** 3);
            
            // update the preTokens 
            preTokens = preSaleAmt;
            // update the ico State
            saleState = SaleState.seed_Sale; 

            // call seed Sale
            return seedSale(_msgValue-newValue);
        } else {
            preTokens += _tokens;
            return _tokens;
        }
    }

    // calculate tokens provided the sale is seed Sale
    function seedSale(
        uint256 _msgValue
    ) internal returns(uint256 tokens) {
        uint256 _tokens = 0;
        // calculated considering matic value as 1$
        _tokens = _msgValue * 20 * 10 ** 1;
        if((seedTokens + _tokens) >= seedSaleAmt){
            // find the amount required to fill up the seed sale amount
            uint256 newValue = (seedSaleAmt - seedTokens)/(20 * 10 ** 1);
            
            // update the seedTokens 
            seedTokens = seedSaleAmt;
            // update the ico State
            saleState = SaleState.final_Sale; 

            // call seed Sale
            return finalSale(_msgValue-newValue);
        } else {
            seedTokens += _tokens;
            return _tokens;
        }
    }

    // calculate tokens provided the sale is final Sale
    function finalSale(
        uint256 _msgValue
    ) internal returns(uint256 tokens) {
        uint256 _tokens = 0;
        // calculated considering matic value as 2500$ and 1 token = 1$ for final sale
        _tokens = _msgValue * 25 * 10 ** 2;
        if((finalTokens + _tokens) >= finalSaleAmt){
            // find the amount required to fill up the final sale amount
            // uint256 newValue = (finalSaleAmt - finalTokens)/(25 * 10 ** 2);
            
            // update the finalTokens 
            finalTokens = finalSaleAmt;
            // update the ico State
            saleState = SaleState.Sale_END; 
        } else {
            finalTokens += _tokens;
            return _tokens;
        }
    }

    // function to check if the ico was a success
    function successCheck() public view returns(bool) {
        require(block.timestamp >= saleEnd, "joyonlinelife hasn't expired yet, Try after saleEnd!");

        if(checkRaisedAmt() >= hardCap) {
            return true;
        } else {
            return false;
        }        
    }
    
    function withdraw() public payable {
        require(block.timestamp >= saleEnd);

        // if it was a success then transfer all the matic received to the deposit address and transfer JOY tokens to their wallet
        if(successCheck() == true) {         
            // transfer JOY tokens to their owners wallet
            _transfer(admin, msg.sender, joyBalance[msg.sender]);
            joyBalance[msg.sender] = 0;

        }
        // if not then revert the matic to the concerned authority and empty their joyBalances
        else {
            payable(msg.sender).transfer(investedAmt[msg.sender]);
            investedAmt[msg.sender] = 0;
        }
    }

    // only applicable if the joyonlinelife is success and the sale has ended
    function transfermatic() public payable onlyAdmin {
        require(block.timestamp >= saleEnd, "joyonlinelife hasn't expired yet, Try after saleEnd!");
        require(successCheck() == true, "joyonlinelife was not a success");

        // transfer all the matic received to the deposit address
        payable(depositAddress).transfer(raisedAmount);
    }
}

// calculation:
/*
To purchase all 1 million tokens, you need to calculate the total amount in US dollars and matic for each sale.

For the pre-sale tokens:
The total amount in US dollars would be $0.01 x 100 million = $1,000,000
The total amount in matic would be $,1,000,000 / $1 (1 matic = $1) = 1,000,000 matic


*/

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"_deposit","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address payable","name":"_newDeposit","type":"address"}],"name":"changeDepositAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalSaleAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentICOState","outputs":[{"internalType":"enum joyonlinelife.IcoState","name":"","type":"uint8"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"haltICO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hardCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"icoState","outputs":[{"internalType":"enum joyonlinelife.IcoState","name":"","type":"uint8"}],"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":"invest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"investedAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"joyBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxInvestment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minInvestment","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":"preSaleAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raisedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resumeICO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"enum joyonlinelife.SaleState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seedSaleAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"seedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"successCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","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":"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":[],"name":"transfermatic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405267016345785d8a000060095542600b5562dd7c004262000025919062000625565b600c55622dc6c0600d55620493e0600e5562000046620003bb60201b60201c565b600a620000549190620007e3565b6402540be40062000066919062000834565b60105562000079620003bb60201b60201c565b600a620000879190620007e3565b630bebc20062000098919062000834565b601155620000ab620003bb60201b60201c565b600a620000b99190620007e3565b6402540be400620000cb919062000834565b601255620000de620003bb60201b60201c565b600a620000ec9190620007e3565b6402540be400620000fe919062000834565b601355600060145562000116620003bb60201b60201c565b600a620001249190620007e3565b6402540be40062000136919062000834565b6015553480156200014657600080fd5b50604051620036e6380380620036e683398181016040528101906200016c9190620008ff565b6040518060400160405280601281526020017f6a6f79206f66206f6e6c696e65206c69666500000000000000000000000000008152506040518060400160405280600381526020017f4a4f5900000000000000000000000000000000000000000000000000000000008152508160039080519060200190620001f09291906200053c565b508060049080519060200190620002099291906200053c565b50505080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601660006101000a81548160ff02191690836003811115620002b757620002b662000931565b5b02179055506200031f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620002f3620003bb60201b60201c565b600a620003019190620007e3565b64e8d4a5100062000313919062000834565b620003c460201b60201c565b6200032f620003bb60201b60201c565b600a6200033d9190620007e3565b64e8d4a510006200034f919062000834565b60076000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505062000a76565b60006008905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000437576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042e90620009c1565b60405180910390fd5b6200044b600083836200053260201b60201c565b80600260008282546200045f919062000625565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005129190620009f4565b60405180910390a36200052e600083836200053760201b60201c565b5050565b505050565b505050565b8280546200054a9062000a40565b90600052602060002090601f0160209004810192826200056e5760008555620005ba565b82601f106200058957805160ff1916838001178555620005ba565b82800160010185558215620005ba579182015b82811115620005b95782518255916020019190600101906200059c565b5b509050620005c99190620005cd565b5090565b5b80821115620005e8576000816000905550600101620005ce565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200063282620005ec565b91506200063f83620005ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620006775762000676620005f6565b5b828201905092915050565b60008160011c9050919050565b6000808291508390505b6001851115620006e157808604811115620006b957620006b8620005f6565b5b6001851615620006c95780820291505b8081029050620006d98562000682565b945062000699565b94509492505050565b600082620006fc5760019050620007cf565b816200070c5760009050620007cf565b8160018114620007255760028114620007305762000766565b6001915050620007cf565b60ff841115620007455762000744620005f6565b5b8360020a9150848211156200075f576200075e620005f6565b5b50620007cf565b5060208310610133831016604e8410600b8410161715620007a05782820a9050838111156200079a5762000799620005f6565b5b620007cf565b620007af84848460016200068f565b92509050818404811115620007c957620007c8620005f6565b5b81810290505b9392505050565b600060ff82169050919050565b6000620007f082620005ec565b9150620007fd83620007d6565b92506200082c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620006ea565b905092915050565b60006200084182620005ec565b91506200084e83620005ec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200088a5762000889620005f6565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008c7826200089a565b9050919050565b620008d981620008ba565b8114620008e557600080fd5b50565b600081519050620008f981620008ce565b92915050565b60006020828403121562000918576200091762000895565b5b60006200092884828501620008e8565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620009a9601f8362000960565b9150620009b68262000971565b602082019050919050565b60006020820190508181036000830152620009dc816200099a565b9050919050565b620009ee81620005ec565b82525050565b600060208201905062000a0b6000830184620009e3565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a5957607f821691505b6020821081141562000a705762000a6f62000a11565b5b50919050565b612c608062000a866000396000f3fe6080604052600436106102245760003560e01c806370a0823111610123578063c10b9358116100ab578063e64d1f611161006f578063e64d1f61146107dd578063e8b5e51f14610808578063f851a44014610826578063fa29897c14610851578063fb86a4041461087c57610224565b8063c10b935814610701578063c55956a61461072c578063c59ee1dc14610757578063d6adefd914610782578063dd62ed3e146107a057610224565b80639cbd7da5116100f25780639cbd7da514610608578063a457c2d71461061f578063a9059cbb1461065c578063ab0bcc4114610699578063b3f3027b146106c457610224565b806370a082311461056b5780638ac2c680146105a857806395d89b41146105d357806397a836d3146105fe57610224565b8063313ce567116101b15780635783aefd116101755780635783aefd146104845780635d81fcd4146104c1578063603f4d52146104ec5780636d58c88f146105175780636de9f32b1461054057610224565b8063313ce567146103bc57806339509351146103e75780633ccfd60b1461042457806342cef5df1461042e57806344f387561461045957610224565b8063129caa18116101f8578063129caa18146102e757806318160ddd146102fe57806323b872dd1461032957806328f833b7146103665780632f6cf7881461039157610224565b80622e131614610229578063052d52ff1461025457806306fdde031461027f578063095ea7b3146102aa575b600080fd5b34801561023557600080fd5b5061023e6108a7565b60405161024b9190611e46565b60405180910390f35b34801561026057600080fd5b506102696108ad565b6040516102769190611e7c565b60405180910390f35b34801561028b57600080fd5b50610294610915565b6040516102a19190611f30565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190611fe1565b6109a7565b6040516102de9190611e7c565b60405180910390f35b3480156102f357600080fd5b506102fc6109ca565b005b34801561030a57600080fd5b50610313610a87565b6040516103209190611e46565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190612021565b610a91565b60405161035d9190611e7c565b60405180910390f35b34801561037257600080fd5b5061037b610ac0565b6040516103889190612095565b60405180910390f35b34801561039d57600080fd5b506103a6610ae6565b6040516103b39190611e46565b60405180910390f35b3480156103c857600080fd5b506103d1610aec565b6040516103de91906120cc565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190611fe1565b610af5565b60405161041b9190611e7c565b60405180910390f35b61042c610b2c565b005b34801561043a57600080fd5b50610443610cd3565b6040516104509190611e46565b60405180910390f35b34801561046557600080fd5b5061046e610cd9565b60405161047b919061215e565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190612179565b610cec565b6040516104b89190611e46565b60405180910390f35b3480156104cd57600080fd5b506104d6610d04565b6040516104e39190611e46565b60405180910390f35b3480156104f857600080fd5b50610501610d0a565b60405161050e91906121ee565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190612235565b610d1d565b005b34801561054c57600080fd5b50610555610df1565b6040516105629190611e46565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190612179565b610df7565b60405161059f9190611e46565b60405180910390f35b3480156105b457600080fd5b506105bd610e3f565b6040516105ca9190611e46565b60405180910390f35b3480156105df57600080fd5b506105e8610e45565b6040516105f59190611f30565b60405180910390f35b610606610ed7565b005b34801561061457600080fd5b5061061d611067565b005b34801561062b57600080fd5b5061064660048036038101906106419190611fe1565b611124565b6040516106539190611e7c565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190611fe1565b61119b565b6040516106909190611e7c565b60405180910390f35b3480156106a557600080fd5b506106ae6111be565b6040516106bb9190611e46565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190612179565b6111c4565b6040516106f89190611e46565b60405180910390f35b34801561070d57600080fd5b506107166111dc565b6040516107239190611e46565b60405180910390f35b34801561073857600080fd5b506107416111e2565b60405161074e9190611e46565b60405180910390f35b34801561076357600080fd5b5061076c6111e8565b6040516107799190611e46565b60405180910390f35b61078a6111ee565b604051610797919061215e565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190612262565b611271565b6040516107d49190611e46565b60405180910390f35b3480156107e957600080fd5b506107f26112f8565b6040516107ff9190611e46565b60405180910390f35b6108106112fe565b60405161081d9190611e7c565b60405180910390f35b34801561083257600080fd5b5061083b611620565b60405161084891906122b1565b60405180910390f35b34801561085d57600080fd5b50610866611646565b6040516108739190611e46565b60405180910390f35b34801561088857600080fd5b5061089161164c565b60405161089e9190611e46565b60405180910390f35b600d5481565b6000600c544210156108f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108eb9061233e565b60405180910390fd5b6009546108ff611652565b1061090d5760019050610912565b600090505b90565b6060600380546109249061238d565b80601f01602080910402602001604051908101604052809291908181526020018280546109509061238d565b801561099d5780601f106109725761010080835404028352916020019161099d565b820191906000526020600020905b81548152906001019060200180831161098057829003601f168201915b5050505050905090565b6000806109b261165c565b90506109bf818585611664565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a519061240b565b60405180910390fd5b6003601660006101000a81548160ff02191690836003811115610a8057610a7f6120e7565b5b0217905550565b6000600254905090565b600080610a9c61165c565b9050610aa985828561182f565b610ab48585856118bb565b60019150509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b60006008905090565b600080610b0061165c565b9050610b21818585610b128589611271565b610b1c919061245a565b611664565b600191505092915050565b600c54421015610b3b57600080fd5b60011515610b476108ad565b15151415610c0557610bbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118bb565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cd1565b3373ffffffffffffffffffffffffffffffffffffffff166108fc600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549081150290604051600060405180830381858888f19350505050158015610c8a573d6000803e3d6000fd5b506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b565b60115481565b601660009054906101000a900460ff1681565b60086020528060005260406000206000915090505481565b60155481565b601660019054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da49061240b565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b606060048054610e549061238d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e809061238d565b8015610ecd5780601f10610ea257610100808354040283529160200191610ecd565b820191906000526020600020905b815481529060010190602001808311610eb057829003601f168201915b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e9061240b565b60405180910390fd5b600c54421015610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa39061233e565b60405180910390fd5b60011515610fb86108ad565b151514610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906124fc565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a549081150290604051600060405180830381858888f19350505050158015611064573d6000803e3d6000fd5b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee9061240b565b60405180910390fd5b6001601660006101000a81548160ff0219169083600381111561111d5761111c6120e7565b5b0217905550565b60008061112f61165c565b9050600061113d8286611271565b905083811015611182576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111799061258e565b60405180910390fd5b61118f8286868403611664565b60019250505092915050565b6000806111a661165c565b90506111b38185856118bb565b600191505092915050565b600b5481565b60076020528060005260406000206000915090505481565b600c5481565b60135481565b600a5481565b6000600380811115611203576112026120e7565b5b601660009054906101000a900460ff166003811115611225576112246120e7565b5b1415611234576003905061126e565b600b54421015611247576000905061126e565b600b54421015801561125b5750600c544211155b15611269576001905061126e565b600290505b90565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60006113086111ee565b601660006101000a81548160ff0219169083600381111561132c5761132b6120e7565b5b021790555060016003811115611345576113446120e7565b5b601660009054906101000a900460ff166003811115611367576113666120e7565b5b146113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90612620565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611420906126b2565b60405180910390fd5b600e54341015801561143d5750600d543411155b61147c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114739061276a565b60405180910390fd5b60095434600a5461148d919061245a565b11156114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c5906127d6565b60405180910390fd5b34600a60008282546114e0919061245a565b9250508190555060006114f234611b33565b905080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611543919061245a565b925050819055508060076000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115bb91906127f6565b9250508190555034600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611611919061245a565b92505081905550600191505090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b60095481565b6000600a54905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb9061289c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b9061292e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118229190611e46565b60405180910390a3505050565b600061183b8484611271565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118b557818110156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e9061299a565b60405180910390fd5b6118b48484848403611664565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561192b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192290612a2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290612abe565b60405180910390fd5b6119a6838383611bef565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2390612b50565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b1a9190611e46565b60405180910390a3611b2d848484611bf4565b50505050565b6000806003811115611b4857611b476120e7565b5b601660019054906101000a900460ff166003811115611b6a57611b696120e7565b5b1415611b86576000611b7b83611bf9565b905080915050611bea565b60016003811115611b9a57611b996120e7565b5b601660019054906101000a900460ff166003811115611bbc57611bbb6120e7565b5b1415611bd8576000611bcd83611cc7565b905080915050611bea565b6000611be383611d93565b9050809150505b919050565b505050565b505050565b600080600090506103e8600184611c109190612b70565b611c1a9190612b70565b905060105481601354611c2d919061245a565b10611ca45760006103e8601354601054611c4791906127f6565b611c519190612bf9565b90506010546013819055506001601660016101000a81548160ff02191690836003811115611c8257611c816120e7565b5b0217905550611c9b8185611c9691906127f6565b611cc7565b92505050611cc2565b8060136000828254611cb6919061245a565b92505081905550809150505b919050565b60008060009050600a601484611cdd9190612b70565b611ce79190612b70565b905060115481601454611cfa919061245a565b10611d7057600060c8601454601154611d1391906127f6565b611d1d9190612bf9565b90506011546014819055506002601660016101000a81548160ff02191690836003811115611d4e57611d4d6120e7565b5b0217905550611d678185611d6291906127f6565b611d93565b92505050611d8e565b8060146000828254611d82919061245a565b92505081905550809150505b919050565b600080600090506064601984611da99190612b70565b611db39190612b70565b905060125481601554611dc6919061245a565b10611e04576012546015819055506003601660016101000a81548160ff02191690836003811115611dfa57611df96120e7565b5b0217905550611e26565b8060156000828254611e16919061245a565b9250508190555080915050611e28565b505b919050565b6000819050919050565b611e4081611e2d565b82525050565b6000602082019050611e5b6000830184611e37565b92915050565b60008115159050919050565b611e7681611e61565b82525050565b6000602082019050611e916000830184611e6d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ed1578082015181840152602081019050611eb6565b83811115611ee0576000848401525b50505050565b6000601f19601f8301169050919050565b6000611f0282611e97565b611f0c8185611ea2565b9350611f1c818560208601611eb3565b611f2581611ee6565b840191505092915050565b60006020820190508181036000830152611f4a8184611ef7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f8282611f57565b9050919050565b611f9281611f77565b8114611f9d57600080fd5b50565b600081359050611faf81611f89565b92915050565b611fbe81611e2d565b8114611fc957600080fd5b50565b600081359050611fdb81611fb5565b92915050565b60008060408385031215611ff857611ff7611f52565b5b600061200685828601611fa0565b925050602061201785828601611fcc565b9150509250929050565b60008060006060848603121561203a57612039611f52565b5b600061204886828701611fa0565b935050602061205986828701611fa0565b925050604061206a86828701611fcc565b9150509250925092565b600061207f82611f57565b9050919050565b61208f81612074565b82525050565b60006020820190506120aa6000830184612086565b92915050565b600060ff82169050919050565b6120c6816120b0565b82525050565b60006020820190506120e160008301846120bd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612127576121266120e7565b5b50565b600081905061213882612116565b919050565b60006121488261212a565b9050919050565b6121588161213d565b82525050565b6000602082019050612173600083018461214f565b92915050565b60006020828403121561218f5761218e611f52565b5b600061219d84828501611fa0565b91505092915050565b600481106121b7576121b66120e7565b5b50565b60008190506121c8826121a6565b919050565b60006121d8826121ba565b9050919050565b6121e8816121cd565b82525050565b600060208201905061220360008301846121df565b92915050565b61221281612074565b811461221d57600080fd5b50565b60008135905061222f81612209565b92915050565b60006020828403121561224b5761224a611f52565b5b600061225984828501612220565b91505092915050565b6000806040838503121561227957612278611f52565b5b600061228785828601611fa0565b925050602061229885828601611fa0565b9150509250929050565b6122ab81611f77565b82525050565b60006020820190506122c660008301846122a2565b92915050565b7f6a6f796f6e6c696e656c696665206861736e277420657870697265642079657460008201527f2c205472792061667465722073616c65456e6421000000000000000000000000602082015250565b6000612328603483611ea2565b9150612333826122cc565b604082019050919050565b600060208201905081810360008301526123578161231b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806123a557607f821691505b602082108114156123b9576123b861235e565b5b50919050565b7f53656e646572206d75737420626520616e2061646d696e000000000000000000600082015250565b60006123f5601783611ea2565b9150612400826123bf565b602082019050919050565b60006020820190508181036000830152612424816123e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061246582611e2d565b915061247083611e2d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156124a5576124a461242b565b5b828201905092915050565b7f6a6f796f6e6c696e656c69666520776173206e6f742061207375636365737300600082015250565b60006124e6601f83611ea2565b91506124f1826124b0565b602082019050919050565b60006020820190508181036000830152612515816124d9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612578602583611ea2565b91506125838261251c565b604082019050919050565b600060208201905081810360008301526125a78161256b565b9050919050565b7f6a6f796f6e6c696e656c696665206973206e6f7420696e2072756e6e696e672060008201527f7374617465000000000000000000000000000000000000000000000000000000602082015250565b600061260a602583611ea2565b9150612615826125ae565b604082019050919050565b60006020820190508181036000830152612639816125fd565b9050919050565b7f55736572206d75737420696e76657374206f6e6c79206f6e6365206163636f7260008201527f64696e6720746f206f757220706f6c6963790000000000000000000000000000602082015250565b600061269c603283611ea2565b91506126a782612640565b604082019050919050565b600060208201905081810360008301526126cb8161268f565b9050919050565b7f496e766573746d656e7420616d6f756e74206d757374206265206d6f7265207460008201527f68616e20302e3035206d6174696320616e64206c657373207468616e2035206d60208201527f6174696300000000000000000000000000000000000000000000000000000000604082015250565b6000612754604483611ea2565b915061275f826126d2565b606082019050919050565b6000602082019050818103600083015261278381612747565b9050919050565b7f6861726443617020726561636865640000000000000000000000000000000000600082015250565b60006127c0600f83611ea2565b91506127cb8261278a565b602082019050919050565b600060208201905081810360008301526127ef816127b3565b9050919050565b600061280182611e2d565b915061280c83611e2d565b92508282101561281f5761281e61242b565b5b828203905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612886602483611ea2565b91506128918261282a565b604082019050919050565b600060208201905081810360008301526128b581612879565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612918602283611ea2565b9150612923826128bc565b604082019050919050565b600060208201905081810360008301526129478161290b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612984601d83611ea2565b915061298f8261294e565b602082019050919050565b600060208201905081810360008301526129b381612977565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a16602583611ea2565b9150612a21826129ba565b604082019050919050565b60006020820190508181036000830152612a4581612a09565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612aa8602383611ea2565b9150612ab382612a4c565b604082019050919050565b60006020820190508181036000830152612ad781612a9b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b3a602683611ea2565b9150612b4582612ade565b604082019050919050565b60006020820190508181036000830152612b6981612b2d565b9050919050565b6000612b7b82611e2d565b9150612b8683611e2d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bbf57612bbe61242b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c0482611e2d565b9150612c0f83611e2d565b925082612c1f57612c1e612bca565b5b82820490509291505056fea26469706673582212209392e9ff739ac0a464d777ac481ebbf6558e87869b308c912d44b0f64942511764736f6c63430008090033000000000000000000000000b2a79bfe2b11bc85ddaab250a8230e5a4cd3dc15

Deployed Bytecode

0x6080604052600436106102245760003560e01c806370a0823111610123578063c10b9358116100ab578063e64d1f611161006f578063e64d1f61146107dd578063e8b5e51f14610808578063f851a44014610826578063fa29897c14610851578063fb86a4041461087c57610224565b8063c10b935814610701578063c55956a61461072c578063c59ee1dc14610757578063d6adefd914610782578063dd62ed3e146107a057610224565b80639cbd7da5116100f25780639cbd7da514610608578063a457c2d71461061f578063a9059cbb1461065c578063ab0bcc4114610699578063b3f3027b146106c457610224565b806370a082311461056b5780638ac2c680146105a857806395d89b41146105d357806397a836d3146105fe57610224565b8063313ce567116101b15780635783aefd116101755780635783aefd146104845780635d81fcd4146104c1578063603f4d52146104ec5780636d58c88f146105175780636de9f32b1461054057610224565b8063313ce567146103bc57806339509351146103e75780633ccfd60b1461042457806342cef5df1461042e57806344f387561461045957610224565b8063129caa18116101f8578063129caa18146102e757806318160ddd146102fe57806323b872dd1461032957806328f833b7146103665780632f6cf7881461039157610224565b80622e131614610229578063052d52ff1461025457806306fdde031461027f578063095ea7b3146102aa575b600080fd5b34801561023557600080fd5b5061023e6108a7565b60405161024b9190611e46565b60405180910390f35b34801561026057600080fd5b506102696108ad565b6040516102769190611e7c565b60405180910390f35b34801561028b57600080fd5b50610294610915565b6040516102a19190611f30565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190611fe1565b6109a7565b6040516102de9190611e7c565b60405180910390f35b3480156102f357600080fd5b506102fc6109ca565b005b34801561030a57600080fd5b50610313610a87565b6040516103209190611e46565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b9190612021565b610a91565b60405161035d9190611e7c565b60405180910390f35b34801561037257600080fd5b5061037b610ac0565b6040516103889190612095565b60405180910390f35b34801561039d57600080fd5b506103a6610ae6565b6040516103b39190611e46565b60405180910390f35b3480156103c857600080fd5b506103d1610aec565b6040516103de91906120cc565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190611fe1565b610af5565b60405161041b9190611e7c565b60405180910390f35b61042c610b2c565b005b34801561043a57600080fd5b50610443610cd3565b6040516104509190611e46565b60405180910390f35b34801561046557600080fd5b5061046e610cd9565b60405161047b919061215e565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190612179565b610cec565b6040516104b89190611e46565b60405180910390f35b3480156104cd57600080fd5b506104d6610d04565b6040516104e39190611e46565b60405180910390f35b3480156104f857600080fd5b50610501610d0a565b60405161050e91906121ee565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190612235565b610d1d565b005b34801561054c57600080fd5b50610555610df1565b6040516105629190611e46565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190612179565b610df7565b60405161059f9190611e46565b60405180910390f35b3480156105b457600080fd5b506105bd610e3f565b6040516105ca9190611e46565b60405180910390f35b3480156105df57600080fd5b506105e8610e45565b6040516105f59190611f30565b60405180910390f35b610606610ed7565b005b34801561061457600080fd5b5061061d611067565b005b34801561062b57600080fd5b5061064660048036038101906106419190611fe1565b611124565b6040516106539190611e7c565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190611fe1565b61119b565b6040516106909190611e7c565b60405180910390f35b3480156106a557600080fd5b506106ae6111be565b6040516106bb9190611e46565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190612179565b6111c4565b6040516106f89190611e46565b60405180910390f35b34801561070d57600080fd5b506107166111dc565b6040516107239190611e46565b60405180910390f35b34801561073857600080fd5b506107416111e2565b60405161074e9190611e46565b60405180910390f35b34801561076357600080fd5b5061076c6111e8565b6040516107799190611e46565b60405180910390f35b61078a6111ee565b604051610797919061215e565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190612262565b611271565b6040516107d49190611e46565b60405180910390f35b3480156107e957600080fd5b506107f26112f8565b6040516107ff9190611e46565b60405180910390f35b6108106112fe565b60405161081d9190611e7c565b60405180910390f35b34801561083257600080fd5b5061083b611620565b60405161084891906122b1565b60405180910390f35b34801561085d57600080fd5b50610866611646565b6040516108739190611e46565b60405180910390f35b34801561088857600080fd5b5061089161164c565b60405161089e9190611e46565b60405180910390f35b600d5481565b6000600c544210156108f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108eb9061233e565b60405180910390fd5b6009546108ff611652565b1061090d5760019050610912565b600090505b90565b6060600380546109249061238d565b80601f01602080910402602001604051908101604052809291908181526020018280546109509061238d565b801561099d5780601f106109725761010080835404028352916020019161099d565b820191906000526020600020905b81548152906001019060200180831161098057829003601f168201915b5050505050905090565b6000806109b261165c565b90506109bf818585611664565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a519061240b565b60405180910390fd5b6003601660006101000a81548160ff02191690836003811115610a8057610a7f6120e7565b5b0217905550565b6000600254905090565b600080610a9c61165c565b9050610aa985828561182f565b610ab48585856118bb565b60019150509392505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b60006008905090565b600080610b0061165c565b9050610b21818585610b128589611271565b610b1c919061245a565b611664565b600191505092915050565b600c54421015610b3b57600080fd5b60011515610b476108ad565b15151415610c0557610bbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118bb565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610cd1565b3373ffffffffffffffffffffffffffffffffffffffff166108fc600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549081150290604051600060405180830381858888f19350505050158015610c8a573d6000803e3d6000fd5b506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b565b60115481565b601660009054906101000a900460ff1681565b60086020528060005260406000206000915090505481565b60155481565b601660019054906101000a900460ff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da49061240b565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b606060048054610e549061238d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e809061238d565b8015610ecd5780601f10610ea257610100808354040283529160200191610ecd565b820191906000526020600020905b815481529060010190602001808311610eb057829003601f168201915b5050505050905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e9061240b565b60405180910390fd5b600c54421015610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa39061233e565b60405180910390fd5b60011515610fb86108ad565b151514610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906124fc565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a549081150290604051600060405180830381858888f19350505050158015611064573d6000803e3d6000fd5b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee9061240b565b60405180910390fd5b6001601660006101000a81548160ff0219169083600381111561111d5761111c6120e7565b5b0217905550565b60008061112f61165c565b9050600061113d8286611271565b905083811015611182576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111799061258e565b60405180910390fd5b61118f8286868403611664565b60019250505092915050565b6000806111a661165c565b90506111b38185856118bb565b600191505092915050565b600b5481565b60076020528060005260406000206000915090505481565b600c5481565b60135481565b600a5481565b6000600380811115611203576112026120e7565b5b601660009054906101000a900460ff166003811115611225576112246120e7565b5b1415611234576003905061126e565b600b54421015611247576000905061126e565b600b54421015801561125b5750600c544211155b15611269576001905061126e565b600290505b90565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60006113086111ee565b601660006101000a81548160ff0219169083600381111561132c5761132b6120e7565b5b021790555060016003811115611345576113446120e7565b5b601660009054906101000a900460ff166003811115611367576113666120e7565b5b146113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90612620565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611429576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611420906126b2565b60405180910390fd5b600e54341015801561143d5750600d543411155b61147c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114739061276a565b60405180910390fd5b60095434600a5461148d919061245a565b11156114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c5906127d6565b60405180910390fd5b34600a60008282546114e0919061245a565b9250508190555060006114f234611b33565b905080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611543919061245a565b925050819055508060076000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115bb91906127f6565b9250508190555034600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611611919061245a565b92505081905550600191505090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b60095481565b6000600a54905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb9061289c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b9061292e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118229190611e46565b60405180910390a3505050565b600061183b8484611271565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118b557818110156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e9061299a565b60405180910390fd5b6118b48484848403611664565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561192b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192290612a2c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561199b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199290612abe565b60405180910390fd5b6119a6838383611bef565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2390612b50565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b1a9190611e46565b60405180910390a3611b2d848484611bf4565b50505050565b6000806003811115611b4857611b476120e7565b5b601660019054906101000a900460ff166003811115611b6a57611b696120e7565b5b1415611b86576000611b7b83611bf9565b905080915050611bea565b60016003811115611b9a57611b996120e7565b5b601660019054906101000a900460ff166003811115611bbc57611bbb6120e7565b5b1415611bd8576000611bcd83611cc7565b905080915050611bea565b6000611be383611d93565b9050809150505b919050565b505050565b505050565b600080600090506103e8600184611c109190612b70565b611c1a9190612b70565b905060105481601354611c2d919061245a565b10611ca45760006103e8601354601054611c4791906127f6565b611c519190612bf9565b90506010546013819055506001601660016101000a81548160ff02191690836003811115611c8257611c816120e7565b5b0217905550611c9b8185611c9691906127f6565b611cc7565b92505050611cc2565b8060136000828254611cb6919061245a565b92505081905550809150505b919050565b60008060009050600a601484611cdd9190612b70565b611ce79190612b70565b905060115481601454611cfa919061245a565b10611d7057600060c8601454601154611d1391906127f6565b611d1d9190612bf9565b90506011546014819055506002601660016101000a81548160ff02191690836003811115611d4e57611d4d6120e7565b5b0217905550611d678185611d6291906127f6565b611d93565b92505050611d8e565b8060146000828254611d82919061245a565b92505081905550809150505b919050565b600080600090506064601984611da99190612b70565b611db39190612b70565b905060125481601554611dc6919061245a565b10611e04576012546015819055506003601660016101000a81548160ff02191690836003811115611dfa57611df96120e7565b5b0217905550611e26565b8060156000828254611e16919061245a565b9250508190555080915050611e28565b505b919050565b6000819050919050565b611e4081611e2d565b82525050565b6000602082019050611e5b6000830184611e37565b92915050565b60008115159050919050565b611e7681611e61565b82525050565b6000602082019050611e916000830184611e6d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ed1578082015181840152602081019050611eb6565b83811115611ee0576000848401525b50505050565b6000601f19601f8301169050919050565b6000611f0282611e97565b611f0c8185611ea2565b9350611f1c818560208601611eb3565b611f2581611ee6565b840191505092915050565b60006020820190508181036000830152611f4a8184611ef7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f8282611f57565b9050919050565b611f9281611f77565b8114611f9d57600080fd5b50565b600081359050611faf81611f89565b92915050565b611fbe81611e2d565b8114611fc957600080fd5b50565b600081359050611fdb81611fb5565b92915050565b60008060408385031215611ff857611ff7611f52565b5b600061200685828601611fa0565b925050602061201785828601611fcc565b9150509250929050565b60008060006060848603121561203a57612039611f52565b5b600061204886828701611fa0565b935050602061205986828701611fa0565b925050604061206a86828701611fcc565b9150509250925092565b600061207f82611f57565b9050919050565b61208f81612074565b82525050565b60006020820190506120aa6000830184612086565b92915050565b600060ff82169050919050565b6120c6816120b0565b82525050565b60006020820190506120e160008301846120bd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612127576121266120e7565b5b50565b600081905061213882612116565b919050565b60006121488261212a565b9050919050565b6121588161213d565b82525050565b6000602082019050612173600083018461214f565b92915050565b60006020828403121561218f5761218e611f52565b5b600061219d84828501611fa0565b91505092915050565b600481106121b7576121b66120e7565b5b50565b60008190506121c8826121a6565b919050565b60006121d8826121ba565b9050919050565b6121e8816121cd565b82525050565b600060208201905061220360008301846121df565b92915050565b61221281612074565b811461221d57600080fd5b50565b60008135905061222f81612209565b92915050565b60006020828403121561224b5761224a611f52565b5b600061225984828501612220565b91505092915050565b6000806040838503121561227957612278611f52565b5b600061228785828601611fa0565b925050602061229885828601611fa0565b9150509250929050565b6122ab81611f77565b82525050565b60006020820190506122c660008301846122a2565b92915050565b7f6a6f796f6e6c696e656c696665206861736e277420657870697265642079657460008201527f2c205472792061667465722073616c65456e6421000000000000000000000000602082015250565b6000612328603483611ea2565b9150612333826122cc565b604082019050919050565b600060208201905081810360008301526123578161231b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806123a557607f821691505b602082108114156123b9576123b861235e565b5b50919050565b7f53656e646572206d75737420626520616e2061646d696e000000000000000000600082015250565b60006123f5601783611ea2565b9150612400826123bf565b602082019050919050565b60006020820190508181036000830152612424816123e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061246582611e2d565b915061247083611e2d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156124a5576124a461242b565b5b828201905092915050565b7f6a6f796f6e6c696e656c69666520776173206e6f742061207375636365737300600082015250565b60006124e6601f83611ea2565b91506124f1826124b0565b602082019050919050565b60006020820190508181036000830152612515816124d9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612578602583611ea2565b91506125838261251c565b604082019050919050565b600060208201905081810360008301526125a78161256b565b9050919050565b7f6a6f796f6e6c696e656c696665206973206e6f7420696e2072756e6e696e672060008201527f7374617465000000000000000000000000000000000000000000000000000000602082015250565b600061260a602583611ea2565b9150612615826125ae565b604082019050919050565b60006020820190508181036000830152612639816125fd565b9050919050565b7f55736572206d75737420696e76657374206f6e6c79206f6e6365206163636f7260008201527f64696e6720746f206f757220706f6c6963790000000000000000000000000000602082015250565b600061269c603283611ea2565b91506126a782612640565b604082019050919050565b600060208201905081810360008301526126cb8161268f565b9050919050565b7f496e766573746d656e7420616d6f756e74206d757374206265206d6f7265207460008201527f68616e20302e3035206d6174696320616e64206c657373207468616e2035206d60208201527f6174696300000000000000000000000000000000000000000000000000000000604082015250565b6000612754604483611ea2565b915061275f826126d2565b606082019050919050565b6000602082019050818103600083015261278381612747565b9050919050565b7f6861726443617020726561636865640000000000000000000000000000000000600082015250565b60006127c0600f83611ea2565b91506127cb8261278a565b602082019050919050565b600060208201905081810360008301526127ef816127b3565b9050919050565b600061280182611e2d565b915061280c83611e2d565b92508282101561281f5761281e61242b565b5b828203905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612886602483611ea2565b91506128918261282a565b604082019050919050565b600060208201905081810360008301526128b581612879565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612918602283611ea2565b9150612923826128bc565b604082019050919050565b600060208201905081810360008301526129478161290b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612984601d83611ea2565b915061298f8261294e565b602082019050919050565b600060208201905081810360008301526129b381612977565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612a16602583611ea2565b9150612a21826129ba565b604082019050919050565b60006020820190508181036000830152612a4581612a09565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612aa8602383611ea2565b9150612ab382612a4c565b604082019050919050565b60006020820190508181036000830152612ad781612a9b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612b3a602683611ea2565b9150612b4582612ade565b604082019050919050565b60006020820190508181036000830152612b6981612b2d565b9050919050565b6000612b7b82611e2d565b9150612b8683611e2d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bbf57612bbe61242b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c0482611e2d565b9150612c0f83611e2d565b925082612c1f57612c1e612bca565b5b82820490509291505056fea26469706673582212209392e9ff739ac0a464d777ac481ebbf6558e87869b308c912d44b0f64942511764736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000b2a79bfe2b11bc85ddaab250a8230e5a4cd3dc15

-----Decoded View---------------
Arg [0] : _deposit (address): 0xb2a79bfe2B11BC85DDAaB250A8230e5a4Cd3DC15

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b2a79bfe2b11bc85ddaab250a8230e5a4cd3dc15


Deployed Bytecode Sourcemap

19145:8953:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19992:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26655:295;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7733:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10083:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21383:81;;;;;;;;;;;;;:::i;:::-;;8852:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10864:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19211:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20283:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8695:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11568:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26962:683;;;:::i;:::-;;20219:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20669:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19519:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20452:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20861:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21674:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20118:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9023:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20072:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7952:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27732:363;;;:::i;:::-;;21503:84;;;;;;;;;;;;;:::i;:::-;;12309:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9356:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19810:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19896:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20352:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19710:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21870:433;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9612:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20154:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22494:1050;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19184:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20416:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19626:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19992:38;;;;:::o;26655:295::-;26699:4;26743:7;;26724:15;:26;;26716:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;26843:7;;26823:16;:14;:16::i;:::-;:27;26820:115;;26874:4;26867:11;;;;26820:115;26918:5;26911:12;;26655:295;;:::o;7733:100::-;7787:13;7820:5;7813:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7733:100;:::o;10083:201::-;10166:4;10183:13;10199:12;:10;:12::i;:::-;10183:28;;10222:32;10231:5;10238:7;10247:6;10222:8;:32::i;:::-;10272:4;10265:11;;;10083:201;;;;:::o;21383:81::-;20950:5;;;;;;;;;;;20936:19;;:10;:19;;;20928:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21441:15:::1;21430:8;;:26;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;21383:81::o:0;8852:108::-;8913:7;8940:12;;8933:19;;8852:108;:::o;10864:295::-;10995:4;11012:15;11030:12;:10;:12::i;:::-;11012:30;;11053:38;11069:4;11075:7;11084:6;11053:15;:38::i;:::-;11102:27;11112:4;11118:2;11122:6;11102:9;:27::i;:::-;11147:4;11140:11;;;10864:295;;;;;:::o;19211:37::-;;;;;;;;;;;;;:::o;20283:60::-;;;;:::o;8695:92::-;8753:5;8778:1;8771:8;;8695:92;:::o;11568:238::-;11656:4;11673:13;11689:12;:10;:12::i;:::-;11673:28;;11712:64;11721:5;11728:7;11765:10;11737:25;11747:5;11754:7;11737:9;:25::i;:::-;:38;;;;:::i;:::-;11712:8;:64::i;:::-;11794:4;11787:11;;;11568:238;;;;:::o;26962:683::-;27035:7;;27016:15;:26;;27008:35;;;;;;27209:4;27191:22;;:14;:12;:14::i;:::-;:22;;;27188:450;;;27298:52;27308:5;;;;;;;;;;;27315:10;27327;:22;27338:10;27327:22;;;;;;;;;;;;;;;;27298:9;:52::i;:::-;27390:1;27365:10;:22;27376:10;27365:22;;;;;;;;;;;;;;;:26;;;;27188:450;;;27539:10;27531:28;;:53;27560:11;:23;27572:10;27560:23;;;;;;;;;;;;;;;;27531:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27625:1;27599:11;:23;27611:10;27599:23;;;;;;;;;;;;;;;:27;;;;27188:450;26962:683::o;20219:57::-;;;;:::o;20669:24::-;;;;;;;;;;;;;:::o;19519:43::-;;;;;;;;;;;;;;;;;:::o;20452:59::-;;;;:::o;20861:26::-;;;;;;;;;;;;;:::o;21674:139::-;20950:5;;;;;;;;;;;20936:19;;:10;:19;;;20928:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21794:11:::1;21777:14;;:28;;;;;;;;;;;;;;;;;;21674:139:::0;:::o;20118:27::-;;;;:::o;9023:127::-;9097:7;9124:9;:18;9134:7;9124:18;;;;;;;;;;;;;;;;9117:25;;9023:127;;;:::o;20072:37::-;;;;:::o;7952:104::-;8008:13;8041:7;8034:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7952:104;:::o;27732:363::-;20950:5;;;;;;;;;;;20936:19;;:10;:19;;;20928:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;27820:7:::1;;27801:15;:26;;27793:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;27921:4;27903:22;;:14;:12;:14::i;:::-;:22;;;27895:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28049:14;;;;;;;;;;;28041:32;;:46;28074:12;;28041:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27732:363::o:0;21503:84::-;20950:5;;;;;;;;;;;20936:19;;:10;:19;;;20928:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21563:16:::1;21552:8;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;21503:84::o:0;12309:436::-;12402:4;12419:13;12435:12;:10;:12::i;:::-;12419:28;;12458:24;12485:25;12495:5;12502:7;12485:9;:25::i;:::-;12458:52;;12549:15;12529:16;:35;;12521:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;12642:60;12651:5;12658:7;12686:15;12667:16;:34;12642:8;:60::i;:::-;12733:4;12726:11;;;;12309:436;;;;:::o;9356:193::-;9435:4;9452:13;9468:12;:10;:12::i;:::-;9452:28;;9491;9501:5;9508:2;9512:6;9491:9;:28::i;:::-;9537:4;9530:11;;;9356:193;;;;:::o;19810:42::-;;;;:::o;19403:::-;;;;;;;;;;;;;;;;;:::o;19896:51::-;;;;:::o;20352:57::-;;;;:::o;19710:27::-;;;;:::o;21870:433::-;21923:8;21960:15;21948:27;;;;;;;;:::i;:::-;;:8;;;;;;;;;;;:27;;;;;;;;:::i;:::-;;;21944:352;;;21999:15;21992:22;;;;21944:352;22054:9;;22036:15;:27;22032:264;;;22087:20;22080:27;;;;22032:264;22148:9;;22129:15;:28;;:58;;;;;22180:7;;22161:15;:26;;22129:58;22125:171;;;22211:16;22204:23;;;;22125:171;22267:17;22260:24;;21870:433;;:::o;9612:151::-;9701:7;9728:11;:18;9740:5;9728:18;;;;;;;;;;;;;;;:27;9747:7;9728:27;;;;;;;;;;;;;;;;9721:34;;9612:151;;;;:::o;20154:58::-;;;;:::o;22494:1050::-;22535:4;22573:20;:18;:20::i;:::-;22562:8;;:31;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;22684:16;22672:28;;;;;;;;:::i;:::-;;:8;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;22664:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;22851:1;22825:10;:22;22836:10;22825:22;;;;;;;;;;;;;;;;:27;22817:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;22957:13;;22944:9;:26;;:56;;;;;22987:13;;22974:9;:26;;22944:56;22936:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;23154:7;;23141:9;23126:12;;:24;;;;:::i;:::-;:35;;23118:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23208:9;23192:12;;:25;;;;;;;:::i;:::-;;;;;;;;23261:14;23278:20;23288:9;23278;:20::i;:::-;23261:37;;23401:6;23375:10;:22;23386:10;23375:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;23439:6;23418:10;:17;23429:5;;;;;;;;;;;23418:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;23485:9;23458:11;:23;23470:10;23458:23;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;23522:4;23515:11;;;22494:1050;:::o;19184:20::-;;;;;;;;;;;;;:::o;20416:29::-;;;;:::o;19626:43::-;;;;:::o;22364:95::-;22412:7;22439:12;;22432:19;;22364:95;:::o;1761:98::-;1814:7;1841:10;1834:17;;1761:98;:::o;16336:380::-;16489:1;16472:19;;:5;:19;;;;16464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16570:1;16551:21;;:7;:21;;;;16543:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16654:6;16624:11;:18;16636:5;16624:18;;;;;;;;;;;;;;;:27;16643:7;16624:27;;;;;;;;;;;;;;;:36;;;;16692:7;16676:32;;16685:5;16676:32;;;16701:6;16676:32;;;;;;:::i;:::-;;;;;;;;16336:380;;;:::o;17007:453::-;17142:24;17169:25;17179:5;17186:7;17169:9;:25::i;:::-;17142:52;;17229:17;17209:16;:37;17205:248;;17291:6;17271:16;:26;;17263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17375:51;17384:5;17391:7;17419:6;17400:16;:25;17375:8;:51::i;:::-;17205:248;17131:329;17007:453;;;:::o;13215:840::-;13362:1;13346:18;;:4;:18;;;;13338:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13439:1;13425:16;;:2;:16;;;;13417:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;13494:38;13515:4;13521:2;13525:6;13494:20;:38::i;:::-;13545:19;13567:9;:15;13577:4;13567:15;;;;;;;;;;;;;;;;13545:37;;13616:6;13601:11;:21;;13593:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;13733:6;13719:11;:20;13701:9;:15;13711:4;13701:15;;;;;;;;;;;;;;;:38;;;;13936:6;13919:9;:13;13929:2;13919:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;13986:2;13971:26;;13980:4;13971:26;;;13990:6;13971:26;;;;;;:::i;:::-;;;;;;;;14010:37;14030:4;14036:2;14040:6;14010:19;:37::i;:::-;13327:728;13215:840;;;:::o;23583:459::-;23653:7;23689:18;23676:31;;;;;;;;:::i;:::-;;:9;;;;;;;;;;;:31;;;;;;;;:::i;:::-;;;23673:362;;;23724:15;23742:17;23750:8;23742:7;:17::i;:::-;23724:35;;23781:7;23774:14;;;;;23673:362;23823:19;23810:32;;;;;;;;:::i;:::-;;:9;;;;;;;;;;;:32;;;;;;;;:::i;:::-;;;23806:229;;;23859:15;23877:18;23886:8;23877;:18::i;:::-;23859:36;;23917:7;23910:14;;;;;23806:229;23957:15;23975:19;23985:8;23975:9;:19::i;:::-;23957:37;;24016:7;24009:14;;;23583:459;;;;:::o;18060:125::-;;;;:::o;18789:124::-;;;;:::o;24104:847::-;24170:14;24197:15;24215:1;24197:19;;24306:7;24302:1;24290:9;:13;;;;:::i;:::-;:23;;;;:::i;:::-;24280:33;;24352:10;;24340:7;24328:9;;:19;;;;:::i;:::-;24327:35;24324:620;;24537:16;24582:11;24570:9;;24557:10;;:22;;;;:::i;:::-;24556:38;;;;:::i;:::-;24537:57;;24673:10;;24661:9;:22;;;;24747:19;24735:9;;:31;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;24822:28;24841:8;24831:9;:18;;;;:::i;:::-;24822:8;:28::i;:::-;24815:35;;;;;;24324:620;24896:7;24883:9;;:20;;;;;;;:::i;:::-;;;;;;;;24925:7;24918:14;;;24104:847;;;;:::o;25015:777::-;25085:14;25112:15;25130:1;25112:19;;25222:7;25217:2;25205:9;:14;;;;:::i;:::-;:24;;;;:::i;:::-;25195:34;;25269:11;;25257:7;25244:10;;:20;;;;:::i;:::-;25243:37;25240:545;;25369:16;25416:12;25403:10;;25389:11;;:24;;;;:::i;:::-;25388:41;;;;:::i;:::-;25369:60;;25510:11;;25497:10;:24;;;;25585:20;25573:9;;:32;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;25661:29;25681:8;25671:9;:18;;;;:::i;:::-;25661:9;:29::i;:::-;25654:36;;;;;;25240:545;25737:7;25723:10;;:21;;;;;;;:::i;:::-;;;;;;;;25766:7;25759:14;;;25015:777;;;;:::o;25857:739::-;25928:14;25955:15;25973:1;25955:19;;26100:7;26095:2;26083:9;:14;;;;:::i;:::-;:24;;;;:::i;:::-;26073:34;;26148:12;;26136:7;26122:11;;:21;;;;:::i;:::-;26121:39;26118:471;;26398:12;;26384:11;:26;;;;26474:18;26462:9;;:30;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;26118:471;;;26541:7;26526:11;;:22;;;;;;;:::i;:::-;;;;;;;;26570:7;26563:14;;;;;26118:471;25944:652;25857:739;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:90::-;476:7;519:5;512:13;505:21;494:32;;442:90;;;:::o;538:109::-;619:21;634:5;619:21;:::i;:::-;614:3;607:34;538:109;;:::o;653:210::-;740:4;778:2;767:9;763:18;755:26;;791:65;853:1;842:9;838:17;829:6;791:65;:::i;:::-;653:210;;;;:::o;869:99::-;921:6;955:5;949:12;939:22;;869:99;;;:::o;974:169::-;1058:11;1092:6;1087:3;1080:19;1132:4;1127:3;1123:14;1108:29;;974:169;;;;:::o;1149:307::-;1217:1;1227:113;1241:6;1238:1;1235:13;1227:113;;;1326:1;1321:3;1317:11;1311:18;1307:1;1302:3;1298:11;1291:39;1263:2;1260:1;1256:10;1251:15;;1227:113;;;1358:6;1355:1;1352:13;1349:101;;;1438:1;1429:6;1424:3;1420:16;1413:27;1349:101;1198:258;1149:307;;;:::o;1462:102::-;1503:6;1554:2;1550:7;1545:2;1538:5;1534:14;1530:28;1520:38;;1462:102;;;:::o;1570:364::-;1658:3;1686:39;1719:5;1686:39;:::i;:::-;1741:71;1805:6;1800:3;1741:71;:::i;:::-;1734:78;;1821:52;1866:6;1861:3;1854:4;1847:5;1843:16;1821:52;:::i;:::-;1898:29;1920:6;1898:29;:::i;:::-;1893:3;1889:39;1882:46;;1662:272;1570:364;;;;:::o;1940:313::-;2053:4;2091:2;2080:9;2076:18;2068:26;;2140:9;2134:4;2130:20;2126:1;2115:9;2111:17;2104:47;2168:78;2241:4;2232:6;2168:78;:::i;:::-;2160:86;;1940:313;;;;:::o;2340:117::-;2449:1;2446;2439:12;2586:126;2623:7;2663:42;2656:5;2652:54;2641:65;;2586:126;;;:::o;2718:96::-;2755:7;2784:24;2802:5;2784:24;:::i;:::-;2773:35;;2718:96;;;:::o;2820:122::-;2893:24;2911:5;2893:24;:::i;:::-;2886:5;2883:35;2873:63;;2932:1;2929;2922:12;2873:63;2820:122;:::o;2948:139::-;2994:5;3032:6;3019:20;3010:29;;3048:33;3075:5;3048:33;:::i;:::-;2948:139;;;;:::o;3093:122::-;3166:24;3184:5;3166:24;:::i;:::-;3159:5;3156:35;3146:63;;3205:1;3202;3195:12;3146:63;3093:122;:::o;3221:139::-;3267:5;3305:6;3292:20;3283:29;;3321:33;3348:5;3321:33;:::i;:::-;3221:139;;;;:::o;3366:474::-;3434:6;3442;3491:2;3479:9;3470:7;3466:23;3462:32;3459:119;;;3497:79;;:::i;:::-;3459:119;3617:1;3642:53;3687:7;3678:6;3667:9;3663:22;3642:53;:::i;:::-;3632:63;;3588:117;3744:2;3770:53;3815:7;3806:6;3795:9;3791:22;3770:53;:::i;:::-;3760:63;;3715:118;3366:474;;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:104::-;4516:7;4545:24;4563:5;4545:24;:::i;:::-;4534:35;;4471:104;;;:::o;4581:142::-;4684:32;4710:5;4684:32;:::i;:::-;4679:3;4672:45;4581:142;;:::o;4729:254::-;4838:4;4876:2;4865:9;4861:18;4853:26;;4889:87;4973:1;4962:9;4958:17;4949:6;4889:87;:::i;:::-;4729:254;;;;:::o;4989:86::-;5024:7;5064:4;5057:5;5053:16;5042:27;;4989:86;;;:::o;5081:112::-;5164:22;5180:5;5164:22;:::i;:::-;5159:3;5152:35;5081:112;;:::o;5199:214::-;5288:4;5326:2;5315:9;5311:18;5303:26;;5339:67;5403:1;5392:9;5388:17;5379:6;5339:67;:::i;:::-;5199:214;;;;:::o;5419:180::-;5467:77;5464:1;5457:88;5564:4;5561:1;5554:15;5588:4;5585:1;5578:15;5605:117;5690:1;5683:5;5680:12;5670:46;;5696:18;;:::i;:::-;5670:46;5605:117;:::o;5728:135::-;5777:7;5806:5;5795:16;;5812:45;5851:5;5812:45;:::i;:::-;5728:135;;;:::o;5869:::-;5929:9;5962:36;5992:5;5962:36;:::i;:::-;5949:49;;5869:135;;;:::o;6010:151::-;6107:47;6148:5;6107:47;:::i;:::-;6102:3;6095:60;6010:151;;:::o;6167:242::-;6270:4;6308:2;6297:9;6293:18;6285:26;;6321:81;6399:1;6388:9;6384:17;6375:6;6321:81;:::i;:::-;6167:242;;;;:::o;6415:329::-;6474:6;6523:2;6511:9;6502:7;6498:23;6494:32;6491:119;;;6529:79;;:::i;:::-;6491:119;6649:1;6674:53;6719:7;6710:6;6699:9;6695:22;6674:53;:::i;:::-;6664:63;;6620:117;6415:329;;;;:::o;6750:118::-;6836:1;6829:5;6826:12;6816:46;;6842:18;;:::i;:::-;6816:46;6750:118;:::o;6874:137::-;6924:7;6953:5;6942:16;;6959:46;6999:5;6959:46;:::i;:::-;6874:137;;;:::o;7017:::-;7078:9;7111:37;7142:5;7111:37;:::i;:::-;7098:50;;7017:137;;;:::o;7160:153::-;7258:48;7300:5;7258:48;:::i;:::-;7253:3;7246:61;7160:153;;:::o;7319:244::-;7423:4;7461:2;7450:9;7446:18;7438:26;;7474:82;7553:1;7542:9;7538:17;7529:6;7474:82;:::i;:::-;7319:244;;;;:::o;7569:138::-;7650:32;7676:5;7650:32;:::i;:::-;7643:5;7640:43;7630:71;;7697:1;7694;7687:12;7630:71;7569:138;:::o;7713:155::-;7767:5;7805:6;7792:20;7783:29;;7821:41;7856:5;7821:41;:::i;:::-;7713:155;;;;:::o;7874:345::-;7941:6;7990:2;7978:9;7969:7;7965:23;7961:32;7958:119;;;7996:79;;:::i;:::-;7958:119;8116:1;8141:61;8194:7;8185:6;8174:9;8170:22;8141:61;:::i;:::-;8131:71;;8087:125;7874:345;;;;:::o;8225:474::-;8293:6;8301;8350:2;8338:9;8329:7;8325:23;8321:32;8318:119;;;8356:79;;:::i;:::-;8318:119;8476:1;8501:53;8546:7;8537:6;8526:9;8522:22;8501:53;:::i;:::-;8491:63;;8447:117;8603:2;8629:53;8674:7;8665:6;8654:9;8650:22;8629:53;:::i;:::-;8619:63;;8574:118;8225:474;;;;;:::o;8705:118::-;8792:24;8810:5;8792:24;:::i;:::-;8787:3;8780:37;8705:118;;:::o;8829:222::-;8922:4;8960:2;8949:9;8945:18;8937:26;;8973:71;9041:1;9030:9;9026:17;9017:6;8973:71;:::i;:::-;8829:222;;;;:::o;9057:239::-;9197:34;9193:1;9185:6;9181:14;9174:58;9266:22;9261:2;9253:6;9249:15;9242:47;9057:239;:::o;9302:366::-;9444:3;9465:67;9529:2;9524:3;9465:67;:::i;:::-;9458:74;;9541:93;9630:3;9541:93;:::i;:::-;9659:2;9654:3;9650:12;9643:19;;9302:366;;;:::o;9674:419::-;9840:4;9878:2;9867:9;9863:18;9855:26;;9927:9;9921:4;9917:20;9913:1;9902:9;9898:17;9891:47;9955:131;10081:4;9955:131;:::i;:::-;9947:139;;9674:419;;;:::o;10099:180::-;10147:77;10144:1;10137:88;10244:4;10241:1;10234:15;10268:4;10265:1;10258:15;10285:320;10329:6;10366:1;10360:4;10356:12;10346:22;;10413:1;10407:4;10403:12;10434:18;10424:81;;10490:4;10482:6;10478:17;10468:27;;10424:81;10552:2;10544:6;10541:14;10521:18;10518:38;10515:84;;;10571:18;;:::i;:::-;10515:84;10336:269;10285:320;;;:::o;10611:173::-;10751:25;10747:1;10739:6;10735:14;10728:49;10611:173;:::o;10790:366::-;10932:3;10953:67;11017:2;11012:3;10953:67;:::i;:::-;10946:74;;11029:93;11118:3;11029:93;:::i;:::-;11147:2;11142:3;11138:12;11131:19;;10790:366;;;:::o;11162:419::-;11328:4;11366:2;11355:9;11351:18;11343:26;;11415:9;11409:4;11405:20;11401:1;11390:9;11386:17;11379:47;11443:131;11569:4;11443:131;:::i;:::-;11435:139;;11162:419;;;:::o;11587:180::-;11635:77;11632:1;11625:88;11732:4;11729:1;11722:15;11756:4;11753:1;11746:15;11773:305;11813:3;11832:20;11850:1;11832:20;:::i;:::-;11827:25;;11866:20;11884:1;11866:20;:::i;:::-;11861:25;;12020:1;11952:66;11948:74;11945:1;11942:81;11939:107;;;12026:18;;:::i;:::-;11939:107;12070:1;12067;12063:9;12056:16;;11773:305;;;;:::o;12084:181::-;12224:33;12220:1;12212:6;12208:14;12201:57;12084:181;:::o;12271:366::-;12413:3;12434:67;12498:2;12493:3;12434:67;:::i;:::-;12427:74;;12510:93;12599:3;12510:93;:::i;:::-;12628:2;12623:3;12619:12;12612:19;;12271:366;;;:::o;12643:419::-;12809:4;12847:2;12836:9;12832:18;12824:26;;12896:9;12890:4;12886:20;12882:1;12871:9;12867:17;12860:47;12924:131;13050:4;12924:131;:::i;:::-;12916:139;;12643:419;;;:::o;13068:224::-;13208:34;13204:1;13196:6;13192:14;13185:58;13277:7;13272:2;13264:6;13260:15;13253:32;13068:224;:::o;13298:366::-;13440:3;13461:67;13525:2;13520:3;13461:67;:::i;:::-;13454:74;;13537:93;13626:3;13537:93;:::i;:::-;13655:2;13650:3;13646:12;13639:19;;13298:366;;;:::o;13670:419::-;13836:4;13874:2;13863:9;13859:18;13851:26;;13923:9;13917:4;13913:20;13909:1;13898:9;13894:17;13887:47;13951:131;14077:4;13951:131;:::i;:::-;13943:139;;13670:419;;;:::o;14095:224::-;14235:34;14231:1;14223:6;14219:14;14212:58;14304:7;14299:2;14291:6;14287:15;14280:32;14095:224;:::o;14325:366::-;14467:3;14488:67;14552:2;14547:3;14488:67;:::i;:::-;14481:74;;14564:93;14653:3;14564:93;:::i;:::-;14682:2;14677:3;14673:12;14666:19;;14325:366;;;:::o;14697:419::-;14863:4;14901:2;14890:9;14886:18;14878:26;;14950:9;14944:4;14940:20;14936:1;14925:9;14921:17;14914:47;14978:131;15104:4;14978:131;:::i;:::-;14970:139;;14697:419;;;:::o;15122:237::-;15262:34;15258:1;15250:6;15246:14;15239:58;15331:20;15326:2;15318:6;15314:15;15307:45;15122:237;:::o;15365:366::-;15507:3;15528:67;15592:2;15587:3;15528:67;:::i;:::-;15521:74;;15604:93;15693:3;15604:93;:::i;:::-;15722:2;15717:3;15713:12;15706:19;;15365:366;;;:::o;15737:419::-;15903:4;15941:2;15930:9;15926:18;15918:26;;15990:9;15984:4;15980:20;15976:1;15965:9;15961:17;15954:47;16018:131;16144:4;16018:131;:::i;:::-;16010:139;;15737:419;;;:::o;16162:292::-;16302:34;16298:1;16290:6;16286:14;16279:58;16371:34;16366:2;16358:6;16354:15;16347:59;16440:6;16435:2;16427:6;16423:15;16416:31;16162:292;:::o;16460:366::-;16602:3;16623:67;16687:2;16682:3;16623:67;:::i;:::-;16616:74;;16699:93;16788:3;16699:93;:::i;:::-;16817:2;16812:3;16808:12;16801:19;;16460:366;;;:::o;16832:419::-;16998:4;17036:2;17025:9;17021:18;17013:26;;17085:9;17079:4;17075:20;17071:1;17060:9;17056:17;17049:47;17113:131;17239:4;17113:131;:::i;:::-;17105:139;;16832:419;;;:::o;17257:165::-;17397:17;17393:1;17385:6;17381:14;17374:41;17257:165;:::o;17428:366::-;17570:3;17591:67;17655:2;17650:3;17591:67;:::i;:::-;17584:74;;17667:93;17756:3;17667:93;:::i;:::-;17785:2;17780:3;17776:12;17769:19;;17428:366;;;:::o;17800:419::-;17966:4;18004:2;17993:9;17989:18;17981:26;;18053:9;18047:4;18043:20;18039:1;18028:9;18024:17;18017:47;18081:131;18207:4;18081:131;:::i;:::-;18073:139;;17800:419;;;:::o;18225:191::-;18265:4;18285:20;18303:1;18285:20;:::i;:::-;18280:25;;18319:20;18337:1;18319:20;:::i;:::-;18314:25;;18358:1;18355;18352:8;18349:34;;;18363:18;;:::i;:::-;18349:34;18408:1;18405;18401:9;18393:17;;18225:191;;;;:::o;18422:223::-;18562:34;18558:1;18550:6;18546:14;18539:58;18631:6;18626:2;18618:6;18614:15;18607:31;18422:223;:::o;18651:366::-;18793:3;18814:67;18878:2;18873:3;18814:67;:::i;:::-;18807:74;;18890:93;18979:3;18890:93;:::i;:::-;19008:2;19003:3;18999:12;18992:19;;18651:366;;;:::o;19023:419::-;19189:4;19227:2;19216:9;19212:18;19204:26;;19276:9;19270:4;19266:20;19262:1;19251:9;19247:17;19240:47;19304:131;19430:4;19304:131;:::i;:::-;19296:139;;19023:419;;;:::o;19448:221::-;19588:34;19584:1;19576:6;19572:14;19565:58;19657:4;19652:2;19644:6;19640:15;19633:29;19448:221;:::o;19675:366::-;19817:3;19838:67;19902:2;19897:3;19838:67;:::i;:::-;19831:74;;19914:93;20003:3;19914:93;:::i;:::-;20032:2;20027:3;20023:12;20016:19;;19675:366;;;:::o;20047:419::-;20213:4;20251:2;20240:9;20236:18;20228:26;;20300:9;20294:4;20290:20;20286:1;20275:9;20271:17;20264:47;20328:131;20454:4;20328:131;:::i;:::-;20320:139;;20047:419;;;:::o;20472:179::-;20612:31;20608:1;20600:6;20596:14;20589:55;20472:179;:::o;20657:366::-;20799:3;20820:67;20884:2;20879:3;20820:67;:::i;:::-;20813:74;;20896:93;20985:3;20896:93;:::i;:::-;21014:2;21009:3;21005:12;20998:19;;20657:366;;;:::o;21029:419::-;21195:4;21233:2;21222:9;21218:18;21210:26;;21282:9;21276:4;21272:20;21268:1;21257:9;21253:17;21246:47;21310:131;21436:4;21310:131;:::i;:::-;21302:139;;21029:419;;;:::o;21454:224::-;21594:34;21590:1;21582:6;21578:14;21571:58;21663:7;21658:2;21650:6;21646:15;21639:32;21454:224;:::o;21684:366::-;21826:3;21847:67;21911:2;21906:3;21847:67;:::i;:::-;21840:74;;21923:93;22012:3;21923:93;:::i;:::-;22041:2;22036:3;22032:12;22025:19;;21684:366;;;:::o;22056:419::-;22222:4;22260:2;22249:9;22245:18;22237:26;;22309:9;22303:4;22299:20;22295:1;22284:9;22280:17;22273:47;22337:131;22463:4;22337:131;:::i;:::-;22329:139;;22056:419;;;:::o;22481:222::-;22621:34;22617:1;22609:6;22605:14;22598:58;22690:5;22685:2;22677:6;22673:15;22666:30;22481:222;:::o;22709:366::-;22851:3;22872:67;22936:2;22931:3;22872:67;:::i;:::-;22865:74;;22948:93;23037:3;22948:93;:::i;:::-;23066:2;23061:3;23057:12;23050:19;;22709:366;;;:::o;23081:419::-;23247:4;23285:2;23274:9;23270:18;23262:26;;23334:9;23328:4;23324:20;23320:1;23309:9;23305:17;23298:47;23362:131;23488:4;23362:131;:::i;:::-;23354:139;;23081:419;;;:::o;23506:225::-;23646:34;23642:1;23634:6;23630:14;23623:58;23715:8;23710:2;23702:6;23698:15;23691:33;23506:225;:::o;23737:366::-;23879:3;23900:67;23964:2;23959:3;23900:67;:::i;:::-;23893:74;;23976:93;24065:3;23976:93;:::i;:::-;24094:2;24089:3;24085:12;24078:19;;23737:366;;;:::o;24109:419::-;24275:4;24313:2;24302:9;24298:18;24290:26;;24362:9;24356:4;24352:20;24348:1;24337:9;24333:17;24326:47;24390:131;24516:4;24390:131;:::i;:::-;24382:139;;24109:419;;;:::o;24534:348::-;24574:7;24597:20;24615:1;24597:20;:::i;:::-;24592:25;;24631:20;24649:1;24631:20;:::i;:::-;24626:25;;24819:1;24751:66;24747:74;24744:1;24741:81;24736:1;24729:9;24722:17;24718:105;24715:131;;;24826:18;;:::i;:::-;24715:131;24874:1;24871;24867:9;24856:20;;24534:348;;;;:::o;24888:180::-;24936:77;24933:1;24926:88;25033:4;25030:1;25023:15;25057:4;25054:1;25047:15;25074:185;25114:1;25131:20;25149:1;25131:20;:::i;:::-;25126:25;;25165:20;25183:1;25165:20;:::i;:::-;25160:25;;25204:1;25194:35;;25209:18;;:::i;:::-;25194:35;25251:1;25248;25244:9;25239:14;;25074:185;;;;:::o

Swarm Source

ipfs://9392e9ff739ac0a464d777ac481ebbf6558e87869b308c912d44b0f649425117
[ 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.