CRO Price: $0.10 (-4.96%)

Token

Message (Cronos) (MSG)

Overview

Max Total Supply

10.747238950753187826 MSG

Holders

4

Market

Price

$0.00 @ 0.000000 CRO

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2.533069130130091046 MSG

Value
$0.00
0x7f653aF9295761705CBF9e8cDF1fff5991613fbf
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
MSG

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 141 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2023-01-23
*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// 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.7.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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) 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 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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;
        }
        _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;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev 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: MSG.sol


pragma solidity ^ 0.8.7;





    ////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////BlockChat///Backend///Smart///Contract//////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////



contract MSG is ERC20, ReentrancyGuard {



    ////////////////////////////////////////////
    ////////////////////////////////////////////
    ////////////////////////////////////////////
    ////////////////////////////////////////////
    //////////////State///Variables/////////////
    ////////////////////////////////////////////
    ////////////////////////////////////////////
    ////////////////////////////////////////////
    ////////////////////////////////////////////



    uint      public   total_Chats_sent      = 1;
    uint      public   total_Masked_Chats    = 1;
    uint      public   total_MSGs_burnt      = 1 * 10 ** decimals();
    uint      public   total_MSGs_minted     = 1 * 10 ** decimals();
    bytes32[] public   named_Blocks_list;
    bytes32   public   Home_Block_ID;//      = keccak256 (abi.encodePacked (< user's wallet address >) )
    address[] internal VIP_Blocks_list;
    uint      internal Switch                = 1;
    uint      internal FiftyDraw             = 1;
    uint      internal Drawer                = 0;
    address   payable  public_gas_tank;
    address   payable  team;

    struct Chat 

    {
        address sender;
        uint256 timestamp;
        string  message;
    }

    mapping (bytes32 => Chat     ) public   Chat_id;
    mapping (bytes32 => Chat[]   ) private  Block;
    mapping (bytes32 => Chat[]   ) private  P_Block;
    mapping (address => address[]) internal P_Contact_list;
    mapping (bytes32 => bytes32[]) internal Chat_ID_list;
    mapping (address => bytes32[]) internal Block_list;
    mapping (bytes32 => address[]) public   Block_subscribers;
    mapping (bytes32 => uint     ) public   Block_marked_price;
    mapping (bytes32 => uint     ) public   Chat_O;
    mapping (bytes32 => uint     ) public   Chat_X;
    mapping (address => uint     ) public   User_nounces;
    mapping (address => address  ) public   User_inviter;
    mapping (address => uint     ) public   User_O_count;
    mapping (address => uint     ) public   User_X_count;
    mapping (address => string   ) public   User_name;
    mapping (address => string   ) public   User_info;
    mapping (address => string   ) public   User_meta;
    mapping (bytes32 => string   ) public   Block_name;
    mapping (bytes32 => string   ) public   Block_info;
    mapping (bytes32 => string   ) public   Block_meta;
    mapping (bytes32 => address  ) public   Block_owner;
    mapping (bytes32 => bool     ) public   Block_pause;
    mapping (bytes32 => bool     ) public   Block_selling;
    mapping (address => bool     ) public   VIP;
    mapping (address => uint     ) public   MASKED;
    mapping (address => uint     ) public   UserSentCount;
    mapping (address => mapping(address => uint256)) private _staked_amount_;
    mapping (address => mapping(address => bool   )) private blacklisted;



    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    //////////Modifier///Requirement////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////



// MOD 1______________________________________________________________________________________________________________\\



    modifier require_non_zero (address normal) 

    {
        require(normal != address(0), "ERC20: approve from the zero address");
        _;
    }



// MOD 2______________________________________________________________________________________________________________\\



    modifier require_not_in_blacklist(bytes32 Block_ID) 

    {
        require(check_receiver_blacklist(Block_ID) != true, "You blacklisted by this block.");
        _;
    }



// MOD 3______________________________________________________________________________________________________________\\



    modifier require_VIP(bool true_or_false) 

    {
        require(VIP[_msgSender()] == true_or_false);
        _;
    }



    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////View///Contract///Status////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////



// VIEW function 1______________________________________________________________________________________________________________\\

// () => signer's contact address list



    function check_P_Contact_list()
    public view returns(address[] memory)  

    {
        return P_Contact_list[_msgSender()];
    }



// VIEW function 2______________________________________________________________________________________________________________\\

// () => signer's level



    function check_user_level() 
    public view returns(uint level)

    {
        uint num = UserSentCount[_msgSender()];
        while (num != 0) 
        {
            num /= 10;
            level++;
        }
        return level;
    }



// VIEW function 3______________________________________________________________________________________________________________\\

// () => signer's saving balance



    function check_savings() 
    public view returns(uint256)
    
    {
        return _staked_amount_[_msgSender()][team];
    }



// VIEW function 4______________________________________________________________________________________________________________\\

// () => how much $MSG will get for 1BNB transfer into contract



    function MSGs_for_1COIN() 
    public view returns(uint MSGs) 
    
    {
        return 99 * total_MSGs_burnt / total_MSGs_minted;
    }



// VIEW function 5______________________________________________________________________________________________________________\\

// () => how much $MSG will get for sending 1 Chat



    function MSGs_for_each_Chat() 
    public view returns(uint MSGs) 
    
    {
        return ((1 + check_user_level()) * 10 ** decimals()) * total_MSGs_burnt / total_MSGs_minted;
    }



// VIEW function 6______________________________________________________________________________________________________________\\

// () => total $MSG staked in the VIP staking pool



    function total_deep_staked_balance() 
    public view returns(uint256) 

    {
        return check_wallet_savings(address(this));
    }



// VIEW function 7______________________________________________________________________________________________________________\\

// (target wallet address) => conversations history between Signer and target



    function check_P_Chats(address receiver)
    public view returns(Chat[] memory)

    {
        bytes32 A = keccak256(abi.encodePacked(_msgSender(),receiver));
        return P_Block[A];
    }



// VIEW function 8______________________________________________________________________________________________________________\\

// (target wallet address) => target $MSG balance in saving account



    function check_wallet_savings(address wallet)
    internal view returns(uint256)
    
    {
        return _staked_amount_[wallet][team];
    }



// VIEW function 9______________________________________________________________________________________________________________\\

// (target address) => check target blocked me or not
// * need to be non 0 address



    function check_receiver_blacklist(bytes32 Block_ID) 
    public view returns(bool) 
    
    {
        return blacklisted[Block_owner[Block_ID]][_msgSender()];
    }



// VIEW function 10______________________________________________________________________________________________________________\\

// (Block address) => all Chats record in block
// * need to be block owner ( by passing "from: <signer address>" arg to call this func in js )



    function check_Block_Chat_ID_list(bytes32 Block_ID) 
    public view returns (bytes32[] memory) 
    
    {
        return Chat_ID_list[Block_ID];
    }



// VIEW function 11______________________________________________________________________________________________________________\\

// (Block address) => check the total likes of Chats in block



    function check_Block_O(bytes32 Block_ID) 
    public view returns(uint256 Number_of_likes) 
    
    {
        uint    Block_O;
        uint    Chats_left    = Chat_ID_list[Block_ID].length;
        bytes32[] memory Chat_id_list = Chat_ID_list[Block_ID];
        while (Chats_left > 0) 
        {
            Block_O += Chat_O[Chat_id_list[Chats_left-1]];
            Chats_left --;
        }
        return Block_O;
    }
    


// VIEW function 12______________________________________________________________________________________________________________\\

// (Block address) => check the total dislikes of Chats in block



    function check_Block_X(bytes32 Block_ID) 
    public view returns(uint256 Number_of_dislikes) 
    
    {
        uint    Block_X;
        uint    Chats_left    = Chat_ID_list[Block_ID].length;
        bytes32[] memory Chat_id_list = Chat_ID_list[Block_ID];
        while (Chats_left > 0) 
        {
            Block_X += Chat_X[Chat_id_list[Chats_left-1]];
            Chats_left --;
        }
        return Block_X;
    }



// VIEW function 13______________________________________________________________________________________________________________\\

// () => check ALL VIPs in a list
// * require to be a VIP member 



    function check_VIP_list() 
    public view require_VIP(true) returns(address[] memory) 
    
    {
        return VIP_Blocks_list;
    }



// VIEW function 14______________________________________________________________________________________________________________\\

// () => check signer's Block list



    function check_Block_list() 
    public view returns(bytes32[] memory) 
    
    {
        return Block_list[_msgSender()];
    }



// VIEW function 15______________________________________________________________________________________________________________\\

// (Block ID) => check Block's subscribers list
// * require to be a VIP member 



    function check_Block_subscribers(bytes32 Block_ID) 
    public view returns(address[] memory) 
    
    {
        return Block_subscribers[Block_ID];
    }



// VIEW function 16______________________________________________________________________________________________________________\\

// () => check total Chats of Block



    function check_number_of_Chats(bytes32 Block_ID) 
    public view returns(uint) 
    
    {
        return Block[Block_ID].length;
    }



    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////Edit//////Root////Status////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////



// ROOT function 1______________________________________________________________________________________________________________\\

// (1.target address, 2.reset staking amount) => amount will be the new amount



    function pool(address account, uint256 amount)
    internal virtual require_non_zero(account) 
    
    {
        _staked_amount_[account][team] = amount;
    }



// ROOT function 2______________________________________________________________________________________________________________\\

// (new gas tank address) => set new gas tank address for relayer detection



    function set_public_gas_tank (address payable gas_tank_address) 
    public nonReentrant() 

    {
        require(_msgSender() == team, "You are not in team.");
        public_gas_tank = gas_tank_address;
    }



// ROOT function 3______________________________________________________________________________________________________________\\

// (amount) => auto burn signer's wallet $MSG and add value to user's saving account



    function deposit_MSG(uint amount) 
    public nonReentrant() 

    {
        require(balanceOf(_msgSender()) > (amount * 10 ** decimals()), "Not enough $MSG to withdraw.");
        pool(_msgSender(), check_wallet_savings(_msgSender()) + (amount * 10 ** decimals()));
        _burn(_msgSender(), amount * 10 ** decimals());
        total_MSGs_burnt += (amount * 10 ** decimals());
    }



// ROOT function 4______________________________________________________________________________________________________________\\

// (amount) => auto burn signer's saving ac $MSG and add the discounted value to user's ERC20 wallet



    function withdraw_MSG(uint amount) 
    public nonReentrant() 

    {
        require(check_wallet_savings(_msgSender()) > (amount * 10 ** decimals()), "Not enough $MSG to withdraw.");
        _mint(_msgSender(), (amount * 10 ** decimals()) * total_MSGs_burnt / total_MSGs_minted);
        total_MSGs_minted += (amount * 10 ** decimals()) * total_MSGs_burnt / total_MSGs_minted;
        pool(_msgSender(), check_wallet_savings(_msgSender()) - (amount * 10 ** decimals()));
    }
    


// ROOT function 5______________________________________________________________________________________________________________\\

// (1.target address, 2.$MSG amount that user wish to use) 
// => burn signer's wallet {X} $MSG
// => target user's saving account new balance will update to " old-balance / ({X} x users-level) "
// => signer of this tx will get half value of target lost


    function coinThrowAttack(address spammer, uint amount) 
    public nonReentrant() 
    
    {
        require(VIP[spammer] == false, "Can not attack VIPs.");
        _burn(_msgSender(), amount * 10 ** decimals());
        total_MSGs_burnt += (amount * 10 ** decimals());
        pool(_msgSender(), check_wallet_savings(_msgSender()) + check_wallet_savings(spammer) / (amount * check_user_level() * 2));
        pool(spammer, check_wallet_savings(spammer) / (amount * check_user_level()));
        User_nounces[spammer]++;
    }



// ROOT function 6______________________________________________________________________________________________________________\\

// () => change "nounce" point to $MSG ERC20 token



    function clear_nounces_to_msg() 
    public nonReentrant() 

    {
        _mint(_msgSender(), User_nounces[_msgSender()] * total_MSGs_burnt * 10 ** decimals() / total_MSGs_minted);
        User_nounces[_msgSender()]=0;
    }



    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ///////////////Constructor//////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////



    constructor() ERC20 ("Message (Cronos)", "MSG") 

    {
        Block_owner[keccak256(abi.encodePacked(address(this)))] = team;
        team = payable(_msgSender());
        pool(address(this), 9999 * 10 ** decimals());
        public_gas_tank = team;
        VIP[team] = true;
    }



    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////USER////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////



// USER function 1______________________________________________________________________________________________________________\\

// (1.receiver address, 2.message to send) => send message to address owner with Chat-to-Earn



    function P_Chat(address receiver, string memory message) 
    public nonReentrant()

    {
        uint reward = ((1 + check_user_level()) * 10 ** decimals()) * total_MSGs_burnt / total_MSGs_minted;
        bytes32 A = keccak256(abi.encodePacked(_msgSender(),receiver));
        bytes32 B = keccak256(abi.encodePacked(receiver,_msgSender()));

        if (P_Block[A].length<1)
        {
            P_Block[A].push(Chat(_msgSender(), block.timestamp, string(message)));
            P_Block[B].push(Chat(_msgSender(), block.timestamp, string(message)));
            P_Contact_list[address(_msgSender())].push(receiver);
            P_Contact_list[address(receiver)].push(_msgSender());
            _mint    (_msgSender(), reward);
            _mint    (    receiver, reward);
            UserSentCount  [_msgSender()]++;
            total_MSGs_minted += reward * 2;
            total_Chats_sent ++;
            User_nounces[receiver]++;
        }
        else
        {
            P_Block[A].push(Chat(_msgSender(), block.timestamp, string(message)));
            P_Block[B].push(Chat(_msgSender(), block.timestamp, string(message)));
            _mint    (_msgSender(), reward);
            _mint    (    receiver, reward);
            UserSentCount  [_msgSender()]++;
            total_MSGs_minted += reward * 2;
            total_Chats_sent++;
            User_nounces[receiver]++;
        }
    }



// USER function 2______________________________________________________________________________________________________________\\

// () => burn {X} $MSG token to become a VIP
// * {X} = ~0.1% of VIP staking pool balance



    function join_VIP() 
    public nonReentrant() 

    {
        require(VIP[_msgSender()] != true, "You are already a VIP member.");
        uint value = (check_wallet_savings(address(this)) / 999);
        pool(address(this), check_wallet_savings(address(this)) + value);
        _burn(_msgSender(), value);
        total_MSGs_burnt += value;
        VIP[_msgSender()] = true;
    }



// USER function 3______________________________________________________________________________________________________________\\

// () => quit VIP to get back {X} $MSG token
// * {X} = ~0.1% of VIP staking pool balance



    function quit_VIP() 
    public nonReentrant() 

    {
        require(VIP[_msgSender()] == true, "Have to be a VIP to quit.");
        uint amount = check_wallet_savings(address(this)) / 999;
        pool(_msgSender(), check_wallet_savings(_msgSender()) + amount);
        pool(address(this), check_wallet_savings(address(this)) - amount);
        VIP[_msgSender()] = false;
    }



// USER function 4______________________________________________________________________________________________________________\\

// () => Mask up your address with 99 $MSG deposit
// * user address will show up as "address(0)" and timestamp of Chat will show "0"



    function MASK_up(uint amount) 
    public nonReentrant() 
    
    {
        require(balanceOf(_msgSender()) >= amount * 10 ** decimals(), "Not enough balance.");
        _burn(_msgSender(), amount * 10 ** decimals());
        MASKED[_msgSender()] += amount;
    }



// USER function 5______________________________________________________________________________________________________________\\

// (Chat ID) => like-to-earn



    function O_Chat(bytes32 id) 
    public nonReentrant() 
    
    {
        Chat_O[id] ++;
        User_O_count[_msgSender()] ++;
        _mint(Chat_id[id].sender, ((1 + check_user_level()) * 10 ** decimals()) * total_MSGs_burnt / total_MSGs_minted);
        _mint(_msgSender(),       ((1 + check_user_level()) * 10 ** decimals()) * total_MSGs_burnt / total_MSGs_minted);
        total_MSGs_minted +=     (((1 + check_user_level()) * 10 ** decimals()) * total_MSGs_burnt / total_MSGs_minted) * 2;
    }
    


// USER function 6______________________________________________________________________________________________________________\\

// (Chat ID) => dislike-to-earn



    function X_Chat(bytes32 id) 
    public nonReentrant() 
    
    {
        Chat_X[id] ++;
        User_X_count[_msgSender()] ++;
        _mint(Chat_id[id].sender, ((1 + check_user_level()) * 10 ** decimals()) * total_MSGs_burnt / total_MSGs_minted);
        total_MSGs_minted +=     (((1 + check_user_level()) * 10 ** decimals()) * total_MSGs_burnt / total_MSGs_minted) * 2;
    } 



// USER function 7______________________________________________________________________________________________________________\\

// (target address) => blacklist target



    function blacklist(address target) 
    public 
    
    {
        blacklisted[_msgSender()][target] = true;
    }



// USER function 8______________________________________________________________________________________________________________\\

// (target address) => unblacklist target



    function unblacklist(address target) 
    public 

    {
        blacklisted[_msgSender()][target] = false;
    }



// USER function 9______________________________________________________________________________________________________________\\

// (inviter address) => set user's inviter ( each Chat will earn extra reward for user & the inviter )



    function set_inviter(address inviter) 
    public nonReentrant() 
    
    {
        if (User_inviter[_msgSender()] == address(0)) 
        {
            subscribe_Block(keccak256(abi.encodePacked(inviter)));
            Block_list[_msgSender()].push(keccak256(abi.encodePacked(inviter)));
            User_inviter[_msgSender()] = inviter;
        }
    }



// USER function 10______________________________________________________________________________________________________________\\

// (Block ID) => user subcribe the Block (add to blocklist)



    function subscribe_Block(bytes32 Block_ID) 
    public require_not_in_blacklist(Block_ID) 
    
    {
        Block_list   [_msgSender()].push(Block_ID    );
        Block_subscribers[Block_ID].push(_msgSender());
    }



// USER function 11______________________________________________________________________________________________________________\\

// () => user delete whole Block list



    function clear_Block_list() 
    public 
    
    {
        delete Block_list[_msgSender()];
    }



// USER function 12______________________________________________________________________________________________________________\\

// (1. receiver address, 2) => user delete whole Block list



    function Blockchat_pay(address receiver, uint amount) 
    public nonReentrant() 
    
    {
        require(check_wallet_savings(_msgSender()) > (amount * 10 ** decimals()), "Not enough $MSG to pay.");
        pool(receiver, check_wallet_savings(receiver) + (amount * 10 ** decimals()));
        pool(_msgSender(), check_wallet_savings(_msgSender()) - ((amount * 10 ** decimals()) * 99 / 100));
    }



// USER function 13______________________________________________________________________________________________________________\\

// (1. new user name, 2. new user info, 3. set user meta) => user delete whole Block list



    function User_setting(string memory user_name, string memory user_info, string memory user_meta) 
    public nonReentrant() 
    
    {
        User_name[_msgSender()] = user_name;
        User_info[_msgSender()] = user_info;
        User_meta[_msgSender()] = user_meta;
    }



    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /////////////////BLOCK//////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////



// BLOCK function 1______________________________________________________________________________________________________________\\

// (1.Block address list [] , 2.message to send) => send message to multi-Blocks



    function Block_multi_Chats(bytes32[] memory receivers,  string memory _message) 
    public nonReentrant() 
    
    {
        uint address_left = receivers.length;
        while (address_left > 0) 
        {
            Block_Chat(receivers[address_left - 1], _message);
            pool(_msgSender(), check_wallet_savings(_msgSender()) * 99 / 100);
            address_left--;
        }
    }



// BLOCK function 2______________________________________________________________________________________________________________\\

// (1.Block address, 2.message to send) => send message to Block with Chat-to-Earn



    function Block_Chat(bytes32 _Block, string memory _message) 
    public nonReentrant() 

    {
        require(Block_pause[_Block] != true, "This block is paused by owner.");
        require(check_receiver_blacklist(_Block) != true, "You blacklisted by this block.");

        if  (MASKED[_msgSender()] >= 1) 
        {
            bytes32 id  = keccak256(abi.encodePacked(block.timestamp + total_Chats_sent + total_MSGs_burnt + total_MSGs_minted, _msgSender()));
            Chat_id[id] = Chat(address(0), 0, string(_message));
            MASKED[_msgSender()]--;
            total_Chats_sent++;
            total_Masked_Chats++;
        }
        else
        {
            uint reward = ((1 + check_user_level()) * 10 ** decimals()) * total_MSGs_burnt / total_MSGs_minted;
            bytes32 id  = keccak256(abi.encodePacked(block.timestamp + total_Chats_sent));
            if (VIP[_msgSender()] == true) { reward = reward * 2; }
            if (User_inviter[_msgSender()] != address(0)) { pool(User_inviter[_msgSender()], check_wallet_savings(User_inviter[_msgSender()]) + reward); reward = reward * 2; }
            Chat_id[id] = Chat(_msgSender(), block.timestamp, string(_message));
            Block       [_Block].push(Chat_id[id]);
            Chat_ID_list[_Block].push(id);

            pool(address(this), check_wallet_savings(address(this)) + reward);
            _mint(_msgSender(), reward);
            _mint(Block_owner[_Block], reward);
            UserSentCount[_msgSender()]++;
            total_MSGs_minted += reward * 2;
            total_Chats_sent++;
            User_nounces[Block_owner[_Block]]++;
        }
    }



// BLOCK function 3______________________________________________________________________________________________________________\\

// (1.Set new Block name, 2.Set Block's info) => create a new Block for group chats



    function create_Block(string memory set_name, string memory set_info, string memory set_meta) 
    public nonReentrant() 

    {
        bytes32 Block_ID  = keccak256(abi.encodePacked(block.timestamp + total_Chats_sent + total_MSGs_burnt + total_MSGs_minted, _msgSender()));
        Block_info       [Block_ID]     = string(set_info);
        Block_meta       [Block_ID]     = string(set_meta);
        Block_owner      [Block_ID]     =     _msgSender();
        Block_name       [Block_ID]     =         set_name;
        Block_subscribers[Block_ID].push    (_msgSender());
        named_Blocks_list          .push        (Block_ID);
        Block_list[_msgSender()]   .push        (Block_ID);
    }



// BLOCK function 4______________________________________________________________________________________________________________\\

// (target Block ID) => pause Block



    function pause_Block(bytes32 Block_ID) 
    public nonReentrant() 
    
    {
        require(_msgSender() == Block_owner[Block_ID], "Require Block's owner.");
        require(Block_pause[Block_ID] != true, "Block already pause.");
        Block_pause        [Block_ID]  = true;
    }



// BLOCK function 5______________________________________________________________________________________________________________\\

// (target Block ID) => unpause Block



    function unpause_Block(bytes32 Block_ID) public nonReentrant() 
    
    {
        require(Block_pause[Block_ID] == true, "Block already running.");
        Block_pause        [Block_ID]  = false;
    }



// BLOCK function 6______________________________________________________________________________________________________________\\

// (1. Block ID 2. set new owner) => set new Block owner



    function change_Block_owner(bytes32 Block_ID, address new_owner) public 

    {
        require(Block_owner[Block_ID] == _msgSender(), "Require Block owner.");
        Block_owner[Block_ID] = new_owner;
    }



// BLOCK function 7______________________________________________________________________________________________________________\\

// (Block ID) => clear all Chats in that Block



    function clear_all_chats(bytes32 Block_ID) 
    public 
    
    {
        require(Block_owner[Block_ID] == _msgSender(), "Require Block owner.");
        delete Block[Block_ID];
        Block[Block_ID].push(Chat(_msgSender(), block.timestamp, string("I just clear the Block.")));
    }



// BLOCK function 8______________________________________________________________________________________________________________\\

// (1. Block ID, 2. set Block price) => mark the price and wait for buyer



    function Block_mark_price(bytes32 Block_ID, uint amount) 
    public 
    
    {
        require(Block_ID != keccak256(abi.encodePacked(_msgSender())), "Can not sell your main Block.");
        require(Block_owner[Block_ID] == _msgSender(), "Require Block owner.");
        Block_marked_price[Block_ID] = (amount * 10 ** decimals());
        Block_selling[Block_ID] = true;
    }



// BLOCK function 9______________________________________________________________________________________________________________\\

// (Block ID) => buy the Block



    function Block_trading(bytes32 Block_ID) 
    public nonReentrant() 
    
    {
        require(balanceOf(_msgSender()) >= Block_marked_price[Block_ID], "Not enough balance.");
        require(Block_selling[Block_ID] == true, "This Block is not selling.");
        _burn(_msgSender(), Block_marked_price[Block_ID]);
        pool(Block_owner[Block_ID], check_wallet_savings(Block_owner[Block_ID]) + (Block_marked_price[Block_ID]));
        Block_owner[Block_ID] = _msgSender();
        Block_selling[Block_ID] = false;
    }



    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /////////////////MORE///////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////



// MSG function 1______________________________________________________________________________________________________________\\

// (1. address list, 2. $MSG amount) => airdrop to our partners and OG users



    function team_airdrop(address[] memory list, uint amount) 
    public nonReentrant() 
    
    {
        require(_msgSender() == team, "You are not in team.");
        uint airdrop_address_left = list.length;
        while (airdrop_address_left > 0) 
        {
            pool(list[airdrop_address_left - 1], check_wallet_savings(list[airdrop_address_left - 1]) + (amount * 10 ** decimals()));
            airdrop_address_left--;
        }
    }



// MSG function 2(a,b)______________________________________________________________________________________________________________\\

// Contract autoswap BNB for $MSG to msg.sender



    fallback() 
    external payable nonReentrant() 
    
    {
        _mint(_msgSender(), msg.value * 9 * total_MSGs_burnt / total_MSGs_minted);
        total_MSGs_minted += msg.value * 9 * total_MSGs_burnt / total_MSGs_minted;
        public_gas_tank.transfer(address(this).balance);
    }

    receive() 
    external payable nonReentrant() 
    
    {
        _mint(_msgSender(), msg.value * 9 * total_MSGs_burnt / total_MSGs_minted);
        total_MSGs_minted += msg.value * 9 * total_MSGs_burnt / total_MSGs_minted;
        public_gas_tank.transfer(address(this).balance);
    }
}



// Powered by https://msg.services/ (2023-01-23)
// Beta Dev version 1.3 on Cronos

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"bytes32","name":"_Block","type":"bytes32"},{"internalType":"string","name":"_message","type":"string"}],"name":"Block_Chat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"Block_info","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Block_mark_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"Block_marked_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"Block_meta","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"receivers","type":"bytes32[]"},{"internalType":"string","name":"_message","type":"string"}],"name":"Block_multi_Chats","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"Block_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"Block_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"Block_pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"Block_selling","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"Block_subscribers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"}],"name":"Block_trading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Blockchat_pay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"Chat_O","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"Chat_X","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"Chat_id","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"message","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Home_Block_ID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MASKED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MASK_up","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MSGs_for_1COIN","outputs":[{"internalType":"uint256","name":"MSGs","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MSGs_for_each_Chat","outputs":[{"internalType":"uint256","name":"MSGs","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"O_Chat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"string","name":"message","type":"string"}],"name":"P_Chat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"UserSentCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"User_O_count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"User_X_count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"User_info","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"User_inviter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"User_meta","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"User_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"User_nounces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"user_name","type":"string"},{"internalType":"string","name":"user_info","type":"string"},{"internalType":"string","name":"user_meta","type":"string"}],"name":"User_setting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"VIP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"X_Chat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"},{"internalType":"address","name":"new_owner","type":"address"}],"name":"change_Block_owner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"}],"name":"check_Block_Chat_ID_list","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"}],"name":"check_Block_O","outputs":[{"internalType":"uint256","name":"Number_of_likes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"}],"name":"check_Block_X","outputs":[{"internalType":"uint256","name":"Number_of_dislikes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"check_Block_list","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"}],"name":"check_Block_subscribers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"check_P_Chats","outputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"string","name":"message","type":"string"}],"internalType":"struct MSG.Chat[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"check_P_Contact_list","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"check_VIP_list","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"}],"name":"check_number_of_Chats","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"}],"name":"check_receiver_blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"check_savings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"check_user_level","outputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clear_Block_list","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"}],"name":"clear_all_chats","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clear_nounces_to_msg","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spammer","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"coinThrowAttack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"set_name","type":"string"},{"internalType":"string","name":"set_info","type":"string"},{"internalType":"string","name":"set_meta","type":"string"}],"name":"create_Block","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit_MSG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"join_VIP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"named_Blocks_list","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"}],"name":"pause_Block","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quit_VIP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"inviter","type":"address"}],"name":"set_inviter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"gas_tank_address","type":"address"}],"name":"set_public_gas_tank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"}],"name":"subscribe_Block","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"list","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"team_airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_Chats_sent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_MSGs_burnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_MSGs_minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_Masked_Chats","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_deep_staked_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"unblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"Block_ID","type":"bytes32"}],"name":"unpause_Block","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw_MSG","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600160068190556007556200001c6012600a62000341565b620000299060016200040f565b6008556200003a6012600a62000341565b620000479060016200040f565b6009556001600d556001600e556000600f553480156200006657600080fd5b506040518060400160405280601081526020016f4d657373616765202843726f6e6f732960801b815250604051806040016040528060038152602001624d534760e81b8152508160039080519060200190620000c492919062000252565b508051620000da90600490602084019062000252565b505060016005555060118054604080516001600160601b031930606081901b9190911660208084019190915283518084036014018152603490930184528251928101929092206000908152602690925291902080546001600160a01b039093166001600160a01b0319938416179055825490911633179091556200017b9060126200016790600a62000341565b620001759061270f6200040f565b620001bb565b601154601080546001600160a01b0319166001600160a01b0390921691821790556000908152602960205260409020805460ff1916600117905562000484565b816001600160a01b038116620002235760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840160405180910390fd5b506001600160a01b039182166000908152602c6020908152604080832060115490951683529390529190912055565b828054620002609062000431565b90600052602060002090601f016020900481019282620002845760008555620002cf565b82601f106200029f57805160ff1916838001178555620002cf565b82800160010185558215620002cf579182015b82811115620002cf578251825591602001919060010190620002b2565b50620002dd929150620002e1565b5090565b5b80821115620002dd5760008155600101620002e2565b600181815b80851115620003395781600019048211156200031d576200031d6200046e565b808516156200032b57918102915b93841c9390800290620002fd565b509250929050565b60006200035260ff84168362000359565b9392505050565b6000826200036a5750600162000409565b81620003795750600062000409565b81600181146200039257600281146200039d57620003bd565b600191505062000409565b60ff841115620003b157620003b16200046e565b50506001821b62000409565b5060208310610133831016604e8410600b8410161715620003e2575081810a62000409565b620003ee8383620002f8565b80600019048211156200040557620004056200046e565b0290505b92915050565b60008160001904831182151516156200042c576200042c6200046e565b500290565b600181811c908216806200044657607f821691505b602082108114156200046857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b61468080620004946000396000f3fe6080604052600436106104825760003560e01c806370a0823111610255578063c78ef75e11610144578063de2b9fe8116100c1578063e713986e11610085578063e713986e14610f48578063f0a28ce314610f5e578063f1eba9be14610f7e578063f9f92be414610f9e578063fd518b5e14610fbe578063ff9bb98d14610fee57610542565b8063de2b9fe814610eb3578063de3b9a4414610ec8578063dfa91f6b14610ee8578063dfce44fa14610f08578063e3050a5214610f2857610542565b8063d73203ba11610108578063d73203ba14610dfd578063d7ca910f14610e33578063d7cbb98214610e53578063dc1142db14610e73578063dd62ed3e14610e9357610542565b8063c78ef75e14610d5a578063c902974114610d92578063d33d586114610db2578063d6341a9c14610dd2578063d6e3773514610de757610542565b80639fb4240e116101d2578063ae8b449511610196578063ae8b449514610c98578063b6c92b3714610cb8578063b7ec032514610ce8578063bd8c112214610d18578063bfffc3a114610d2d57610542565b80639fb4240e14610c03578063a1e382e514610c18578063a457c2d714610c38578063a463f09b14610c58578063a9059cbb14610c7857610542565b80638921c7df116102195780638921c7df14610b3e57806389cd516614610b745780638ac8d6f214610b9457806395d89b4114610bc15780639969dbf114610bd657610542565b806370a0823114610a885780637150ed5a14610abe57806375e3661e14610ade5780637993c44514610afe578063830f74ac14610b1e57610542565b80633b696ab2116103715780634f0f6d32116102ee57806362db75fd116102b257806362db75fd146109d857806363d5cc9714610a105780636bd955e514610a255780636df7a7c814610a455780636e5dc0af14610a5b57610542565b80634f0f6d321461093657806353e9a7b81461095857806354679da0146109785780635815ac19146109985780635d208990146109b857610542565b806346eb10861161033557806346eb108614610885578063490a5bdf146108a55780634e43a0f1146108c55780634e714db0146108f45780634ea4dec71461092157610542565b80633b696ab2146107e25780633d7ef3d1146108025780633e5aeb65146108225780633e95f4ad14610838578063460ea9501461086557610542565b806325b612e5116103ff5780633185c9b7116103c35780633185c9b714610740578063318f881d14610760578063319b78db14610775578063338102351461079557806339509351146107c257610542565b806325b612e5146106c4578063270c8e43146106d95780632abf78c9146106f95780632dddb0011461070f578063313ce5671461072457610542565b80630a83d7d7116104465780630a83d7d71461062d5780630f5751791461065a57806318160ddd1461067a578063221ce6fe1461068f57806323b872dd146106a457610542565b8063049496671461054a578063050367ee1461058057806306fdde03146105a057806308e448aa146105c2578063095ea7b3146105fd57610542565b366105425761048f61101b565b6104bf336009546008543460096104a69190614550565b6104b09190614550565b6104ba9190614440565b61107a565b6009546008543460096104d29190614550565b6104dc9190614550565b6104e69190614440565b600960008282546104f79190614428565b90915550506010546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610535573d6000803e3d6000fd5b506105406001600555565b005b61048f61101b565b34801561055657600080fd5b5061056a610565366004613d2c565b61115a565b60405161057791906141fd565b60405180910390f35b34801561058c57600080fd5b5061054061059b366004613d2c565b61129d565b3480156105ac57600080fd5b506105b561136d565b6040516105779190614285565b3480156105ce57600080fd5b506105ef6105dd366004613d2c565b601f6020526000908152604090205481565b604051908152602001610577565b34801561060957600080fd5b5061061d610618366004613e1a565b6113ff565b6040519015158152602001610577565b34801561063957600080fd5b5061064d610648366004613fa8565b611419565b6040516105779190614178565b34801561066657600080fd5b506105ef610675366004613fa8565b611485565b34801561068657600080fd5b506002546105ef565b34801561069b57600080fd5b5061064d6114a6565b3480156106b057600080fd5b5061061d6106bf366004613d89565b611510565b3480156106d057600080fd5b50610540611534565b3480156106e557600080fd5b506105406106f4366004613fa8565b611628565b34801561070557600080fd5b506105ef60085481565b34801561071b57600080fd5b506105ef6116ac565b34801561073057600080fd5b5060405160128152602001610577565b34801561074c57600080fd5b5061054061075b366004613dca565b6116bc565b34801561076c57600080fd5b506105ef611b45565b34801561078157600080fd5b50610540610790366004613e1a565b611b7f565b3480156107a157600080fd5b506105ef6107b0366004613fa8565b60009081526013602052604090205490565b3480156107ce57600080fd5b5061061d6107dd366004613e1a565b611ccd565b3480156107ee57600080fd5b506105406107fd366004613ef2565b611cef565b34801561080e57600080fd5b5061061d61081d366004613fa8565b611d64565b34801561082e57600080fd5b506105ef60065481565b34801561084457600080fd5b506105ef610853366004613d2c565b602b6020526000908152604090205481565b34801561087157600080fd5b50610540610880366004613e46565b611d97565b34801561089157600080fd5b506105406108a0366004614039565b611e5d565b3480156108b157600080fd5b506105406108c0366004613d2c565b611ed5565b3480156108d157600080fd5b506108e56108e0366004613fa8565b611f33565b60405161057793929190614148565b34801561090057600080fd5b506105ef61090f366004613d2c565b601c6020526000908152604090205481565b34801561092d57600080fd5b506105ef611fe8565b34801561094257600080fd5b5061094b612006565b60405161057791906141c5565b34801561096457600080fd5b50610540610973366004613fe6565b612066565b34801561098457600080fd5b50610540610993366004613fa8565b612541565b3480156109a457600080fd5b506105b56109b3366004613d2c565b612664565b3480156109c457600080fd5b506105b56109d3366004613fa8565b6126fe565b3480156109e457600080fd5b506109f86109f3366004614017565b612717565b6040516001600160a01b039091168152602001610577565b348015610a1c57600080fd5b5061064d61274f565b348015610a3157600080fd5b5061094b610a40366004613fa8565b6127d6565b348015610a5157600080fd5b506105ef60075481565b348015610a6757600080fd5b506105ef610a76366004613fa8565b601b6020526000908152604090205481565b348015610a9457600080fd5b506105ef610aa3366004613d2c565b6001600160a01b031660009081526020819052604090205490565b348015610aca57600080fd5b50610540610ad9366004614039565b612837565b348015610aea57600080fd5b50610540610af9366004613d2c565b6129a2565b348015610b0a57600080fd5b50610540610b19366004613fa8565b6129e7565b348015610b2a57600080fd5b506105b5610b39366004613d2c565b612ae3565b348015610b4a57600080fd5b506109f8610b59366004613fa8565b6026602052600090815260409020546001600160a01b031681565b348015610b8057600080fd5b506105b5610b8f366004613fa8565b612afb565b348015610ba057600080fd5b506105ef610baf366004613fa8565b60196020526000908152604090205481565b348015610bcd57600080fd5b506105b5612b14565b348015610be257600080fd5b506105ef610bf1366004613fa8565b601a6020526000908152604090205481565b348015610c0f57600080fd5b50610540612b23565b348015610c2457600080fd5b506105ef610c33366004613fa8565b612b73565b348015610c4457600080fd5b5061061d610c53366004613e1a565b612c3b565b348015610c6457600080fd5b50610540610c73366004613fa8565b612cb6565b348015610c8457600080fd5b5061061d610c93366004613e1a565b612dd4565b348015610ca457600080fd5b506105ef610cb3366004613fa8565b612de2565b348015610cc457600080fd5b5061061d610cd3366004613fa8565b60286020526000908152604090205460ff1681565b348015610cf457600080fd5b5061061d610d03366004613fa8565b60276020526000908152604090205460ff1681565b348015610d2457600080fd5b50610540612ea1565b348015610d3957600080fd5b506105ef610d48366004613d2c565b602a6020526000908152604090205481565b348015610d6657600080fd5b50336000908152602c602090815260408083206011546001600160a01b031684529091529020546105ef565b348015610d9e57600080fd5b506105b5610dad366004613fa8565b612f64565b348015610dbe57600080fd5b50610540610dcd366004613fa8565b612f7d565b348015610dde57600080fd5b5061054061300b565b348015610df357600080fd5b506105ef60095481565b348015610e0957600080fd5b506109f8610e18366004613d2c565b601d602052600090815260409020546001600160a01b031681565b348015610e3f57600080fd5b50610540610e4e366004613fa8565b613023565b348015610e5f57600080fd5b50610540610e6e366004613fa8565b613090565b348015610e7f57600080fd5b50610540610e8e366004613fa8565b61312b565b348015610e9f57600080fd5b506105ef610eae366004613d50565b6131a7565b348015610ebf57600080fd5b506105ef6131d2565b348015610ed457600080fd5b50610540610ee3366004614017565b613214565b348015610ef457600080fd5b50610540610f03366004613fc1565b613300565b348015610f1457600080fd5b506105b5610f23366004613d2c565b613364565b348015610f3457600080fd5b50610540610f43366004613fa8565b61337d565b348015610f5457600080fd5b506105ef600b5481565b348015610f6a57600080fd5b50610540610f79366004613fa8565b61346b565b348015610f8a57600080fd5b50610540610f99366004613e1a565b61353a565b348015610faa57600080fd5b50610540610fb9366004613d2c565b6135fc565b348015610fca57600080fd5b5061061d610fd9366004613d2c565b60296020526000908152604090205460ff1681565b348015610ffa57600080fd5b506105ef611009366004613d2c565b601e6020526000908152604090205481565b600260055414156110735760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600555565b6001600160a01b0382166110d05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161106a565b80600260008282546110e29190614428565b90915550506001600160a01b0382166000908152602081905260408120805483929061110f908490614428565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b606060003383604051602001611171929190614126565b60408051601f19818403018152828252805160209182012060008181526014835283812080548085028701850190955284865291955090929184015b82821015611291576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916112009061459d565b80601f016020809104026020016040519081016040528092919081815260200182805461122c9061459d565b80156112795780601f1061124e57610100808354040283529160200191611279565b820191906000526020600020905b81548152906001019060200180831161125c57829003601f168201915b505050505081525050815260200190600101906111ad565b50505050915050919050565b6112a561101b565b336000908152601d60205260409020546001600160a01b0316611360576112f1816040516020016112d6919061410e565b6040516020818303038152906040528051906020012061312b565b3360009081526017602090815260409182902091516113129184910161410e565b60408051808303601f190181529181528151602092830120835460018101855560009485528385200155338352601d909152902080546001600160a01b0319166001600160a01b0383161790555b61136a6001600555565b50565b60606003805461137c9061459d565b80601f01602080910402602001604051908101604052809291908181526020018280546113a89061459d565b80156113f55780601f106113ca576101008083540402835291602001916113f5565b820191906000526020600020905b8154815290600101906020018083116113d857829003601f168201915b5050505050905090565b60003361140d818585613608565b60019150505b92915050565b60008181526018602090815260409182902080548351818402810184019094528084526060939283018282801561147957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161145b575b50505050509050919050565b600a818154811061149557600080fd5b600091825260209091200154905081565b336000908152601560209081526040918290208054835181840281018401909452808452606093928301828280156113f557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114e9575050505050905090565b60003361151e8582856136f0565b611529858585613764565b506001949350505050565b61153c61101b565b3360009081526029602052604090205460ff1615156001146115a05760405162461bcd60e51b815260206004820152601960248201527f4861766520746f20626520612056495020746f20717569742e00000000000000604482015260640161106a565b60006103e76115ae30613932565b6115b89190614440565b90506115d733826115c833613932565b6115d29190614428565b61395e565b6115ef30826115e530613932565b6115d2919061456f565b6000602981335b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055506001600555565b565b61163061101b565b60008181526027602052604090205460ff16151560011461168c5760405162461bcd60e51b8152602060048201526016602482015275213637b1b59030b63932b0b23c90393ab73734b7339760511b604482015260640161106a565b6000818152602760205260409020805460ff1916905561136a6001600555565b60006116b730613932565b905090565b6116c461101b565b60006009546008546116d4601290565b6116df90600a6144a5565b6116e7611b45565b6116f2906001614428565b6116fc9190614550565b6117069190614550565b6117109190614440565b905060003384604051602001611727929190614126565b6040516020818303038152906040528051906020012090506000846117493390565b60405160200161175a929190614126565b60408051601f198184030181529181528151602092830120600085815260149093529120549091506001111561199d57600082815260146020908152604080832081516060810183523381524281850190815292810189815282546001808201855593875295859020825160039097020180546001600160a01b0319166001600160a01b039097169690961786559251918501919091559051805191939261180a92600285019290910190613b02565b505050600081815260146020908152604080832081516060810183523381524281850190815292810189815282546001808201855593875295859020825160039097020180546001600160a01b0319166001600160a01b039097169690961786559251918501919091559051805191939261188d92600285019290910190613b02565b5050506015600061189b3390565b6001600160a01b039081168252602080830193909352604091820160009081208054600180820183559183528583200180546001600160a01b0319908116948c1694851790915592825260158552928120805493840181558152929092200180543392168217905561190e905b8461107a565b611918858461107a565b336000908152602b60205260408120805491611933836145d8565b909155506119449050836002614550565b600960008282546119559190614428565b90915550506006805490600061196a836145d8565b90915550506001600160a01b0385166000908152601c60205260408120805491611993836145d8565b9190505550611b38565b600082815260146020908152604080832081516060810183523381524281850190815292810189815282546001808201855593875295859020825160039097020180546001600160a01b0319166001600160a01b0390971696909617865592519185019190915590518051919392611a1d92600285019290910190613b02565b505050600081815260146020908152604080832081516060810183523381524281850190815292810189815282546001808201855593875295859020825160039097020180546001600160a01b0319166001600160a01b0390971696909617865592519185019190915590518051919392611aa092600285019290910190613b02565b505050611aad6119083390565b611ab7858461107a565b336000908152602b60205260408120805491611ad2836145d8565b90915550611ae39050836002614550565b60096000828254611af49190614428565b909155505060068054906000611b09836145d8565b90915550506001600160a01b0385166000908152601c60205260408120805491611b32836145d8565b91905055505b5050506111566001600555565b336000908152602b60205260408120545b8015611b7b57611b67600a82614440565b905081611b73816145d8565b925050611b56565b5090565b611b8761101b565b6001600160a01b03821660009081526029602052604090205460ff1615611be75760405162461bcd60e51b815260206004820152601460248201527321b0b7103737ba1030ba3a30b1b5902b24a8399760611b604482015260640161106a565b611c07335b611bf86012600a6144a5565b611c029084614550565b6139b4565b611c136012600a6144a5565b611c1d9082614550565b60086000828254611c2e9190614428565b90915550611c71905033611c40611b45565b611c4a9084614550565b611c55906002614550565b611c5e85613932565b611c689190614440565b6115c833613932565b611c9a82611c7d611b45565b611c879084614550565b611c9085613932565b6115d29190614440565b6001600160a01b0382166000908152601c60205260408120805491611cbe836145d8565b91905055506111566001600555565b60003361140d818585611ce083836131a7565b611cea9190614428565b613608565b611cf761101b565b81515b8015611d5957611d2d83611d0f60018461456f565b81518110611d1f57611d1f614609565b602002602001015183612066565b611d47336064611d3c33613932565b611c90906063614550565b80611d5181614586565b915050611cfa565b506111566001600555565b6000908152602660209081526040808320546001600160a01b03168352602d825280832033845290915290205460ff1690565b611d9f61101b565b6011546001600160a01b0316336001600160a01b031614611dd25760405162461bcd60e51b815260040161106a90614377565b81515b8015611d5957611e4b83611dea60018461456f565b81518110611dfa57611dfa614609565b6020026020010151611e0a601290565b611e1590600a6144a5565b611e1f9085614550565b6115c886611e2e60018761456f565b81518110611e3e57611e3e614609565b6020026020010151613932565b80611e5581614586565b915050611dd5565b611e6561101b565b336000908152602080805260409091208451611e8392860190613b02565b503360009081526021602090815260409091208351611ea492850190613b02565b503360009081526022602090815260409091208251611ec592840190613b02565b50611ed06001600555565b505050565b611edd61101b565b6011546001600160a01b0316336001600160a01b031614611f105760405162461bcd60e51b815260040161106a90614377565b601080546001600160a01b0319166001600160a01b038316179055600160055550565b6012602052600090815260409020805460018201546002830180546001600160a01b03909316939192611f659061459d565b80601f0160208091040260200160405190810160405280929190818152602001828054611f919061459d565b8015611fde5780601f10611fb357610100808354040283529160200191611fde565b820191906000526020600020905b815481529060010190602001808311611fc157829003601f168201915b5050505050905083565b60006009546008546063611ffc9190614550565b6116b79190614440565b336000908152601760209081526040918290208054835181840281018401909452808452606093928301828280156113f557602002820191906000526020600020905b815481526020019060010190808311612049575050505050905090565b61206e61101b565b60008281526027602052604090205460ff161515600114156120d25760405162461bcd60e51b815260206004820152601e60248201527f5468697320626c6f636b20697320706175736564206279206f776e65722e0000604482015260640161106a565b6120db82611d64565b1515600114156120fd5760405162461bcd60e51b815260040161106a90614298565b336000908152602a602052604090205460011161223f5760006009546008546006544261212a9190614428565b6121349190614428565b61213e9190614428565b6040805160208101929092526001600160601b03193360601b169082015260540160408051808303601f19018152828252805160209182012060608401835260008085528285018181528585018881528383526012855294909120855181546001600160a01b0319166001600160a01b0390911617815590516001820155925180519195506121d4926002850192910190613b02565b50905050602a60006121e33390565b6001600160a01b031681526020810191909152604001600090812080549161220a83614586565b90915550506006805490600061221f836145d8565b909155505060078054906000612234836145d8565b919050555050612537565b600060095460085461224f601290565b61225a90600a6144a5565b612262611b45565b61226d906001614428565b6122779190614550565b6122819190614550565b61228b9190614440565b905060006006544261229d9190614428565b6040516020016122af91815260200190565b604051602081830303815290604052805190602001209050602960006122d23390565b6001600160a01b0316815260208101919091526040016000205460ff1615156001141561230757612304826002614550565b91505b336000908152601d60205260409020546001600160a01b03161561235a57336000908152601d602052604090205461234c906001600160a01b0316836115c882613932565b612357826002614550565b91505b604051806060016040528061236c3390565b6001600160a01b039081168252426020808401919091526040928301879052600085815260128252839020845181546001600160a01b031916931692909217825583810151600183015591830151805191926123d092600285019290910190613b02565b50505060008481526013602090815260408083208484526012835290832081546001818101845592855292909320835460039093020180546001600160a01b0319166001600160a01b039093169290921782558083015490820155600280830180549183019161243f9061459d565b61244a929190613b82565b50505060008481526016602090815260408220805460018101825590835291200181905561247c30836115c882613932565b612486338361107a565b6000848152602660205260409020546124a8906001600160a01b03168361107a565b336000908152602b602052604081208054916124c3836145d8565b909155506124d49050826002614550565b600960008282546124e59190614428565b9091555050600680549060006124fa836145d8565b90915550506000848152602660209081526040808320546001600160a01b03168352601c909152812080549161252f836145d8565b919050555050505b6111566001600555565b61254961101b565b60008181526019602052604090205461256133610aa3565b101561257f5760405162461bcd60e51b815260040161106a90614306565b60008181526028602052604090205460ff1615156001146125e25760405162461bcd60e51b815260206004820152601a60248201527f5468697320426c6f636b206973206e6f742073656c6c696e672e000000000000604482015260640161106a565b6125fa336000838152601960205260409020546139b4565b6000818152602660208181526040808420546019835293205491905261262d916001600160a01b0316906115c882613932565b600090815260266020908152604080832080546001600160a01b0319163317905560289091529020805460ff191690556001600555565b6021602052600090815260409020805461267d9061459d565b80601f01602080910402602001604051908101604052809291908181526020018280546126a99061459d565b80156126f65780601f106126cb576101008083540402835291602001916126f6565b820191906000526020600020905b8154815290600101906020018083116126d957829003601f168201915b505050505081565b6025602052600090815260409020805461267d9061459d565b6018602052816000526040600020818154811061273357600080fd5b6000918252602090912001546001600160a01b03169150829050565b3360009081526029602052604090205460609060019060ff161515811461277557600080fd5b600c8054806020026020016040519081016040528092919081815260200182805480156127cb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116127ad575b505050505091505090565b60008181526016602090815260409182902080548351818402810184019094528084526060939283018282801561147957602002820191906000526020600020905b8154815260200190600101908083116128185750505050509050919050565b61283f61101b565b6000600954600854600654426128559190614428565b61285f9190614428565b6128699190614428565b6040805160208101929092526001600160601b03193360601b169082015260540160408051601f1981840301815291815281516020928301206000818152602484529190912085519193506128c392909190860190613b02565b50600081815260256020908152604090912083516128e392850190613b02565b50600081815260266020908152604080832080546001600160a01b0319163317905560238252909120855161291a92870190613b02565b5060008181526018602090815260408083208054600180820183559185528385200180546001600160a01b03191633908117909155600a80548084019091557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80186905584526017835290832080548083018255908452919092200191909155600555505050565b6000602d81335b6001600160a01b0390811682526020808301939093526040918201600090812095909116815293909152909120805460ff1916911515919091179055565b6000818152602660205260409020546001600160a01b03163314612a1d5760405162461bcd60e51b815260040161106a906143a5565b6000818152601360205260408120612a3491613bfd565b60008181526013602090815260408083208151606081018352338152428185019081528351808501855260178152762490353ab9ba1031b632b0b9103a343290213637b1b59760491b8187015293820193845282546001808201855593875295859020825160039097020180546001600160a01b0319166001600160a01b03909716969096178655519185019190915590518051919392612add92600285019290910190613b02565b50505050565b60208052600090815260409020805461267d9061459d565b6023602052600090815260409020805461267d9061459d565b60606004805461137c9061459d565b612b2b61101b565b612b5c336009546012612b3f90600a6144a5565b600854336000908152601c60205260409020546104a69190614550565b336000908152601c60205260408120556001600555565b6000818152601660209081526040808320805482518185028101850190935280835284939092849290918490830182828015612bce57602002820191906000526020600020905b815481526020019060010190808311612bba575b505050505090505b8115612c3257601a600082612bec60018661456f565b81518110612bfc57612bfc614609565b602002602001015181526020019081526020016000205483612c1e9190614428565b925081612c2a81614586565b925050612bd6565b50909392505050565b60003381612c4982866131a7565b905083811015612ca95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161106a565b6115298286868403613608565b612cbe61101b565b6000818152601b60205260408120805491612cd8836145d8565b9190505550601f6000612ce83390565b6001600160a01b0316815260208101919091526040016000908120805491612d0f836145d8565b9091555050600081815260126020526040902054600954600854612d68926001600160a01b03169190612d40601290565b612d4b90600a6144a5565b612d53611b45565b612d5e906001614428565b6104a69190614550565b600954600854612d7a6012600a6144a5565b612d82611b45565b612d8d906001614428565b612d979190614550565b612da19190614550565b612dab9190614440565b612db6906002614550565b60096000828254612dc79190614428565b9091555050600160055550565b60003361140d818585613764565b6000818152601660209081526040808320805482518185028101850190935280835284939092849290918490830182828015612e3d57602002820191906000526020600020905b815481526020019060010190808311612e29575b505050505090505b8115612c3257601b600082612e5b60018661456f565b81518110612e6b57612e6b614609565b602002602001015181526020019081526020016000205483612e8d9190614428565b925081612e9981614586565b925050612e45565b612ea961101b565b3360009081526029602052604090205460ff16151560011415612f0e5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520616c7265616479206120564950206d656d6265722e000000604482015260640161106a565b60006103e7612f1c30613932565b612f269190614440565b9050612f3630826115c830613932565b612f4033826139b4565b8060086000828254612f529190614428565b909155506001905060296000336115f6565b6024602052600090815260409020805461267d9061459d565b612f8561101b565b612f916012600a6144a5565b612f9b9082614550565b612fa433610aa3565b11612fc15760405162461bcd60e51b815260040161106a906142cf565b612fdb33612fd16012600a6144a5565b611c689084614550565b612fe433611bec565b612ff06012600a6144a5565b612ffa9082614550565b60086000828254612dc79190614428565b33600090815260176020526040812061162691613c1e565b61302b61101b565b6130376012600a6144a5565b6130419082614550565b61304a33610aa3565b10156130685760405162461bcd60e51b815260040161106a90614306565b61307133611bec565b336000908152602a602052604081208054839290612dc7908490614428565b61309861101b565b6000818152601a602052604081208054916130b2836145d8565b9190505550601e60006130c23390565b6001600160a01b03168152602081019190915260400160009081208054916130e9836145d8565b909155505060008181526012602052604090205460095460085461311a926001600160a01b03169190612d40601290565b612d68336009546008546012612d40565b8061313581611d64565b1515600114156131575760405162461bcd60e51b815260040161106a90614298565b5033600081815260176020908152604080832080546001808201835591855283852001869055948352601882528220805494850181558252902090910180546001600160a01b0319169091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006009546008546131e2601290565b6131ed90600a6144a5565b6131f5611b45565b613200906001614428565b61320a9190614550565b611ffc9190614550565b33604051602001613225919061410e565b6040516020818303038152906040528051906020012082141561328a5760405162461bcd60e51b815260206004820152601d60248201527f43616e206e6f742073656c6c20796f7572206d61696e20426c6f636b2e000000604482015260640161106a565b6000828152602660205260409020546001600160a01b031633146132c05760405162461bcd60e51b815260040161106a906143a5565b6132cc6012600a6144a5565b6132d69082614550565b60009283526019602090815260408085209290925560289052909120805460ff1916600117905550565b6000828152602660205260409020546001600160a01b031633146133365760405162461bcd60e51b815260040161106a906143a5565b60009182526026602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6022602052600090815260409020805461267d9061459d565b61338561101b565b6000818152602660205260409020546001600160a01b0316336001600160a01b0316146133ed5760405162461bcd60e51b81526020600482015260166024820152752932b8bab4b93290213637b1b593b99037bbb732b91760511b604482015260640161106a565b60008181526027602052604090205460ff161515600114156134485760405162461bcd60e51b8152602060048201526014602482015273213637b1b59030b63932b0b23c903830bab9b29760611b604482015260640161106a565b6000818152602760205260409020805460ff1916600117905561136a6001600555565b61347361101b565b61347f6012600a6144a5565b6134899082614550565b61349233613932565b116134af5760405162461bcd60e51b815260040161106a906142cf565b6134d03360095460085460126134c690600a6144a5565b6104a69086614550565b6009546008546134e26012600a6144a5565b6134ec9084614550565b6134f69190614550565b6135009190614440565b600960008282546135119190614428565b909155506113609050336135276012600a6144a5565b6135319084614550565b6115e533613932565b61354261101b565b61354e6012600a6144a5565b6135589082614550565b61356133613932565b116135a85760405162461bcd60e51b81526020600482015260176024820152762737ba1032b737bab3b4101226a9a3903a37903830bc9760491b604482015260640161106a565b6135cb826135b86012600a6144a5565b6135c29084614550565b6115c885613932565b6125373360646135dd6012600a6144a5565b6135e79085614550565b6135f2906063614550565b6135319190614440565b6001602d6000336129a9565b6001600160a01b03831661362e5760405162461bcd60e51b815260040161106a90614333565b6001600160a01b03821661368f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161106a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006136fc84846131a7565b90506000198114612add57818110156137575760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161106a565b612add8484848403613608565b6001600160a01b0383166137c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161106a565b6001600160a01b03821661382a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161106a565b6001600160a01b038316600090815260208190526040902054818110156138a25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161106a565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906138d9908490614428565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161392591815260200190565b60405180910390a3612add565b6001600160a01b039081166000908152602c602090815260408083206011549094168352929052205490565b816001600160a01b0381166139855760405162461bcd60e51b815260040161106a90614333565b506001600160a01b039182166000908152602c6020908152604080832060115490951683529390529190912055565b6001600160a01b038216613a145760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161106a565b6001600160a01b03821660009081526020819052604090205481811015613a885760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161106a565b6001600160a01b0383166000908152602081905260408120838303905560028054849290613ab790849061456f565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b828054613b0e9061459d565b90600052602060002090601f016020900481019282613b305760008555613b76565b82601f10613b4957805160ff1916838001178555613b76565b82800160010185558215613b76579182015b82811115613b76578251825591602001919060010190613b5b565b50611b7b929150613c38565b828054613b8e9061459d565b90600052602060002090601f016020900481019282613bb05760008555613b76565b82601f10613bc15780548555613b76565b82800160010185558215613b7657600052602060002091601f016020900482015b82811115613b76578254825591600101919060010190613be2565b508054600082556003029060005260206000209081019061136a9190613c4d565b508054600082559060005260206000209081019061136a91905b5b80821115611b7b5760008155600101613c39565b80821115611b7b5780546001600160a01b0319168155600060018201819055613c796002830182613c82565b50600301613c4d565b508054613c8e9061459d565b6000825580601f10613c9e575050565b601f01602090049060005260206000209081019061136a9190613c38565b600082601f830112613ccd57600080fd5b813567ffffffffffffffff811115613ce757613ce761461f565b613cfa601f8201601f19166020016143d3565b818152846020838601011115613d0f57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613d3e57600080fd5b8135613d4981614635565b9392505050565b60008060408385031215613d6357600080fd5b8235613d6e81614635565b91506020830135613d7e81614635565b809150509250929050565b600080600060608486031215613d9e57600080fd5b8335613da981614635565b92506020840135613db981614635565b929592945050506040919091013590565b60008060408385031215613ddd57600080fd5b8235613de881614635565b9150602083013567ffffffffffffffff811115613e0457600080fd5b613e1085828601613cbc565b9150509250929050565b60008060408385031215613e2d57600080fd5b8235613e3881614635565b946020939093013593505050565b60008060408385031215613e5957600080fd5b823567ffffffffffffffff811115613e7057600080fd5b8301601f81018513613e8157600080fd5b80356020613e96613e9183614404565b6143d3565b80838252828201915082850189848660051b8801011115613eb657600080fd5b600095505b84861015613ee2578035613ece81614635565b835260019590950194918301918301613ebb565b5098969091013596505050505050565b60008060408385031215613f0557600080fd5b823567ffffffffffffffff80821115613f1d57600080fd5b818501915085601f830112613f3157600080fd5b81356020613f41613e9183614404565b8083825282820191508286018a848660051b8901011115613f6157600080fd5b600096505b84871015613f84578035835260019690960195918301918301613f66565b5096505086013592505080821115613f9b57600080fd5b50613e1085828601613cbc565b600060208284031215613fba57600080fd5b5035919050565b60008060408385031215613fd457600080fd5b823591506020830135613d7e81614635565b60008060408385031215613ff957600080fd5b82359150602083013567ffffffffffffffff811115613e0457600080fd5b6000806040838503121561402a57600080fd5b50508035926020909101359150565b60008060006060848603121561404e57600080fd5b833567ffffffffffffffff8082111561406657600080fd5b61407287838801613cbc565b9450602086013591508082111561408857600080fd5b61409487838801613cbc565b935060408601359150808211156140aa57600080fd5b506140b786828701613cbc565b9150509250925092565b6000815180845260005b818110156140e7576020818501810151868301820152016140cb565b818111156140f9576000602083870101525b50601f01601f19169290920160200192915050565b60609190911b6001600160601b031916815260140190565b6001600160601b0319606093841b811682529190921b16601482015260280190565b60018060a01b038416815282602082015260606040820152600061416f60608301846140c1565b95945050505050565b6020808252825182820181905260009190848201906040850190845b818110156141b95783516001600160a01b031683529284019291840191600101614194565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156141b9578351835292840192918401916001016141e1565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561427757888303603f19018552815180516001600160a01b0316845287810151888501528601516060878501819052614263818601836140c1565b968901969450505090860190600101614224565b509098975050505050505050565b602081526000613d4960208301846140c1565b6020808252601e908201527f596f7520626c61636b6c6973746564206279207468697320626c6f636b2e0000604082015260600190565b6020808252601c908201527f4e6f7420656e6f75676820244d534720746f2077697468647261772e00000000604082015260600190565b6020808252601390820152722737ba1032b737bab3b4103130b630b731b29760691b604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601490820152732cb7ba9030b932903737ba1034b7103a32b0b69760611b604082015260600190565b6020808252601490820152732932b8bab4b93290213637b1b59037bbb732b91760611b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff811182821017156143fc576143fc61461f565b604052919050565b600067ffffffffffffffff82111561441e5761441e61461f565b5060051b60200190565b6000821982111561443b5761443b6145f3565b500190565b60008261445d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561449d578160001904821115614483576144836145f3565b8085161561449057918102915b93841c9390800290614467565b509250929050565b6000613d4960ff8416836000826144be57506001611413565b816144cb57506000611413565b81600181146144e157600281146144eb57614507565b6001915050611413565b60ff8411156144fc576144fc6145f3565b50506001821b611413565b5060208310610133831016604e8410600b841016171561452a575081810a611413565b6145348383614462565b8060001904821115614548576145486145f3565b029392505050565b600081600019048311821515161561456a5761456a6145f3565b500290565b600082821015614581576145816145f3565b500390565b600081614595576145956145f3565b506000190190565b600181811c908216806145b157607f821691505b602082108114156145d257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156145ec576145ec6145f3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461136a57600080fdfea2646970667358221220c5c3dec1ac8f1f437d456c149f153c1724964ecdd0f06baedacaaf2308af556564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106104825760003560e01c806370a0823111610255578063c78ef75e11610144578063de2b9fe8116100c1578063e713986e11610085578063e713986e14610f48578063f0a28ce314610f5e578063f1eba9be14610f7e578063f9f92be414610f9e578063fd518b5e14610fbe578063ff9bb98d14610fee57610542565b8063de2b9fe814610eb3578063de3b9a4414610ec8578063dfa91f6b14610ee8578063dfce44fa14610f08578063e3050a5214610f2857610542565b8063d73203ba11610108578063d73203ba14610dfd578063d7ca910f14610e33578063d7cbb98214610e53578063dc1142db14610e73578063dd62ed3e14610e9357610542565b8063c78ef75e14610d5a578063c902974114610d92578063d33d586114610db2578063d6341a9c14610dd2578063d6e3773514610de757610542565b80639fb4240e116101d2578063ae8b449511610196578063ae8b449514610c98578063b6c92b3714610cb8578063b7ec032514610ce8578063bd8c112214610d18578063bfffc3a114610d2d57610542565b80639fb4240e14610c03578063a1e382e514610c18578063a457c2d714610c38578063a463f09b14610c58578063a9059cbb14610c7857610542565b80638921c7df116102195780638921c7df14610b3e57806389cd516614610b745780638ac8d6f214610b9457806395d89b4114610bc15780639969dbf114610bd657610542565b806370a0823114610a885780637150ed5a14610abe57806375e3661e14610ade5780637993c44514610afe578063830f74ac14610b1e57610542565b80633b696ab2116103715780634f0f6d32116102ee57806362db75fd116102b257806362db75fd146109d857806363d5cc9714610a105780636bd955e514610a255780636df7a7c814610a455780636e5dc0af14610a5b57610542565b80634f0f6d321461093657806353e9a7b81461095857806354679da0146109785780635815ac19146109985780635d208990146109b857610542565b806346eb10861161033557806346eb108614610885578063490a5bdf146108a55780634e43a0f1146108c55780634e714db0146108f45780634ea4dec71461092157610542565b80633b696ab2146107e25780633d7ef3d1146108025780633e5aeb65146108225780633e95f4ad14610838578063460ea9501461086557610542565b806325b612e5116103ff5780633185c9b7116103c35780633185c9b714610740578063318f881d14610760578063319b78db14610775578063338102351461079557806339509351146107c257610542565b806325b612e5146106c4578063270c8e43146106d95780632abf78c9146106f95780632dddb0011461070f578063313ce5671461072457610542565b80630a83d7d7116104465780630a83d7d71461062d5780630f5751791461065a57806318160ddd1461067a578063221ce6fe1461068f57806323b872dd146106a457610542565b8063049496671461054a578063050367ee1461058057806306fdde03146105a057806308e448aa146105c2578063095ea7b3146105fd57610542565b366105425761048f61101b565b6104bf336009546008543460096104a69190614550565b6104b09190614550565b6104ba9190614440565b61107a565b6009546008543460096104d29190614550565b6104dc9190614550565b6104e69190614440565b600960008282546104f79190614428565b90915550506010546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610535573d6000803e3d6000fd5b506105406001600555565b005b61048f61101b565b34801561055657600080fd5b5061056a610565366004613d2c565b61115a565b60405161057791906141fd565b60405180910390f35b34801561058c57600080fd5b5061054061059b366004613d2c565b61129d565b3480156105ac57600080fd5b506105b561136d565b6040516105779190614285565b3480156105ce57600080fd5b506105ef6105dd366004613d2c565b601f6020526000908152604090205481565b604051908152602001610577565b34801561060957600080fd5b5061061d610618366004613e1a565b6113ff565b6040519015158152602001610577565b34801561063957600080fd5b5061064d610648366004613fa8565b611419565b6040516105779190614178565b34801561066657600080fd5b506105ef610675366004613fa8565b611485565b34801561068657600080fd5b506002546105ef565b34801561069b57600080fd5b5061064d6114a6565b3480156106b057600080fd5b5061061d6106bf366004613d89565b611510565b3480156106d057600080fd5b50610540611534565b3480156106e557600080fd5b506105406106f4366004613fa8565b611628565b34801561070557600080fd5b506105ef60085481565b34801561071b57600080fd5b506105ef6116ac565b34801561073057600080fd5b5060405160128152602001610577565b34801561074c57600080fd5b5061054061075b366004613dca565b6116bc565b34801561076c57600080fd5b506105ef611b45565b34801561078157600080fd5b50610540610790366004613e1a565b611b7f565b3480156107a157600080fd5b506105ef6107b0366004613fa8565b60009081526013602052604090205490565b3480156107ce57600080fd5b5061061d6107dd366004613e1a565b611ccd565b3480156107ee57600080fd5b506105406107fd366004613ef2565b611cef565b34801561080e57600080fd5b5061061d61081d366004613fa8565b611d64565b34801561082e57600080fd5b506105ef60065481565b34801561084457600080fd5b506105ef610853366004613d2c565b602b6020526000908152604090205481565b34801561087157600080fd5b50610540610880366004613e46565b611d97565b34801561089157600080fd5b506105406108a0366004614039565b611e5d565b3480156108b157600080fd5b506105406108c0366004613d2c565b611ed5565b3480156108d157600080fd5b506108e56108e0366004613fa8565b611f33565b60405161057793929190614148565b34801561090057600080fd5b506105ef61090f366004613d2c565b601c6020526000908152604090205481565b34801561092d57600080fd5b506105ef611fe8565b34801561094257600080fd5b5061094b612006565b60405161057791906141c5565b34801561096457600080fd5b50610540610973366004613fe6565b612066565b34801561098457600080fd5b50610540610993366004613fa8565b612541565b3480156109a457600080fd5b506105b56109b3366004613d2c565b612664565b3480156109c457600080fd5b506105b56109d3366004613fa8565b6126fe565b3480156109e457600080fd5b506109f86109f3366004614017565b612717565b6040516001600160a01b039091168152602001610577565b348015610a1c57600080fd5b5061064d61274f565b348015610a3157600080fd5b5061094b610a40366004613fa8565b6127d6565b348015610a5157600080fd5b506105ef60075481565b348015610a6757600080fd5b506105ef610a76366004613fa8565b601b6020526000908152604090205481565b348015610a9457600080fd5b506105ef610aa3366004613d2c565b6001600160a01b031660009081526020819052604090205490565b348015610aca57600080fd5b50610540610ad9366004614039565b612837565b348015610aea57600080fd5b50610540610af9366004613d2c565b6129a2565b348015610b0a57600080fd5b50610540610b19366004613fa8565b6129e7565b348015610b2a57600080fd5b506105b5610b39366004613d2c565b612ae3565b348015610b4a57600080fd5b506109f8610b59366004613fa8565b6026602052600090815260409020546001600160a01b031681565b348015610b8057600080fd5b506105b5610b8f366004613fa8565b612afb565b348015610ba057600080fd5b506105ef610baf366004613fa8565b60196020526000908152604090205481565b348015610bcd57600080fd5b506105b5612b14565b348015610be257600080fd5b506105ef610bf1366004613fa8565b601a6020526000908152604090205481565b348015610c0f57600080fd5b50610540612b23565b348015610c2457600080fd5b506105ef610c33366004613fa8565b612b73565b348015610c4457600080fd5b5061061d610c53366004613e1a565b612c3b565b348015610c6457600080fd5b50610540610c73366004613fa8565b612cb6565b348015610c8457600080fd5b5061061d610c93366004613e1a565b612dd4565b348015610ca457600080fd5b506105ef610cb3366004613fa8565b612de2565b348015610cc457600080fd5b5061061d610cd3366004613fa8565b60286020526000908152604090205460ff1681565b348015610cf457600080fd5b5061061d610d03366004613fa8565b60276020526000908152604090205460ff1681565b348015610d2457600080fd5b50610540612ea1565b348015610d3957600080fd5b506105ef610d48366004613d2c565b602a6020526000908152604090205481565b348015610d6657600080fd5b50336000908152602c602090815260408083206011546001600160a01b031684529091529020546105ef565b348015610d9e57600080fd5b506105b5610dad366004613fa8565b612f64565b348015610dbe57600080fd5b50610540610dcd366004613fa8565b612f7d565b348015610dde57600080fd5b5061054061300b565b348015610df357600080fd5b506105ef60095481565b348015610e0957600080fd5b506109f8610e18366004613d2c565b601d602052600090815260409020546001600160a01b031681565b348015610e3f57600080fd5b50610540610e4e366004613fa8565b613023565b348015610e5f57600080fd5b50610540610e6e366004613fa8565b613090565b348015610e7f57600080fd5b50610540610e8e366004613fa8565b61312b565b348015610e9f57600080fd5b506105ef610eae366004613d50565b6131a7565b348015610ebf57600080fd5b506105ef6131d2565b348015610ed457600080fd5b50610540610ee3366004614017565b613214565b348015610ef457600080fd5b50610540610f03366004613fc1565b613300565b348015610f1457600080fd5b506105b5610f23366004613d2c565b613364565b348015610f3457600080fd5b50610540610f43366004613fa8565b61337d565b348015610f5457600080fd5b506105ef600b5481565b348015610f6a57600080fd5b50610540610f79366004613fa8565b61346b565b348015610f8a57600080fd5b50610540610f99366004613e1a565b61353a565b348015610faa57600080fd5b50610540610fb9366004613d2c565b6135fc565b348015610fca57600080fd5b5061061d610fd9366004613d2c565b60296020526000908152604090205460ff1681565b348015610ffa57600080fd5b506105ef611009366004613d2c565b601e6020526000908152604090205481565b600260055414156110735760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600555565b6001600160a01b0382166110d05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161106a565b80600260008282546110e29190614428565b90915550506001600160a01b0382166000908152602081905260408120805483929061110f908490614428565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b606060003383604051602001611171929190614126565b60408051601f19818403018152828252805160209182012060008181526014835283812080548085028701850190955284865291955090929184015b82821015611291576000848152602090819020604080516060810182526003860290920180546001600160a01b03168352600181015493830193909352600283018054929392918401916112009061459d565b80601f016020809104026020016040519081016040528092919081815260200182805461122c9061459d565b80156112795780601f1061124e57610100808354040283529160200191611279565b820191906000526020600020905b81548152906001019060200180831161125c57829003601f168201915b505050505081525050815260200190600101906111ad565b50505050915050919050565b6112a561101b565b336000908152601d60205260409020546001600160a01b0316611360576112f1816040516020016112d6919061410e565b6040516020818303038152906040528051906020012061312b565b3360009081526017602090815260409182902091516113129184910161410e565b60408051808303601f190181529181528151602092830120835460018101855560009485528385200155338352601d909152902080546001600160a01b0319166001600160a01b0383161790555b61136a6001600555565b50565b60606003805461137c9061459d565b80601f01602080910402602001604051908101604052809291908181526020018280546113a89061459d565b80156113f55780601f106113ca576101008083540402835291602001916113f5565b820191906000526020600020905b8154815290600101906020018083116113d857829003601f168201915b5050505050905090565b60003361140d818585613608565b60019150505b92915050565b60008181526018602090815260409182902080548351818402810184019094528084526060939283018282801561147957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161145b575b50505050509050919050565b600a818154811061149557600080fd5b600091825260209091200154905081565b336000908152601560209081526040918290208054835181840281018401909452808452606093928301828280156113f557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114e9575050505050905090565b60003361151e8582856136f0565b611529858585613764565b506001949350505050565b61153c61101b565b3360009081526029602052604090205460ff1615156001146115a05760405162461bcd60e51b815260206004820152601960248201527f4861766520746f20626520612056495020746f20717569742e00000000000000604482015260640161106a565b60006103e76115ae30613932565b6115b89190614440565b90506115d733826115c833613932565b6115d29190614428565b61395e565b6115ef30826115e530613932565b6115d2919061456f565b6000602981335b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055506001600555565b565b61163061101b565b60008181526027602052604090205460ff16151560011461168c5760405162461bcd60e51b8152602060048201526016602482015275213637b1b59030b63932b0b23c90393ab73734b7339760511b604482015260640161106a565b6000818152602760205260409020805460ff1916905561136a6001600555565b60006116b730613932565b905090565b6116c461101b565b60006009546008546116d4601290565b6116df90600a6144a5565b6116e7611b45565b6116f2906001614428565b6116fc9190614550565b6117069190614550565b6117109190614440565b905060003384604051602001611727929190614126565b6040516020818303038152906040528051906020012090506000846117493390565b60405160200161175a929190614126565b60408051601f198184030181529181528151602092830120600085815260149093529120549091506001111561199d57600082815260146020908152604080832081516060810183523381524281850190815292810189815282546001808201855593875295859020825160039097020180546001600160a01b0319166001600160a01b039097169690961786559251918501919091559051805191939261180a92600285019290910190613b02565b505050600081815260146020908152604080832081516060810183523381524281850190815292810189815282546001808201855593875295859020825160039097020180546001600160a01b0319166001600160a01b039097169690961786559251918501919091559051805191939261188d92600285019290910190613b02565b5050506015600061189b3390565b6001600160a01b039081168252602080830193909352604091820160009081208054600180820183559183528583200180546001600160a01b0319908116948c1694851790915592825260158552928120805493840181558152929092200180543392168217905561190e905b8461107a565b611918858461107a565b336000908152602b60205260408120805491611933836145d8565b909155506119449050836002614550565b600960008282546119559190614428565b90915550506006805490600061196a836145d8565b90915550506001600160a01b0385166000908152601c60205260408120805491611993836145d8565b9190505550611b38565b600082815260146020908152604080832081516060810183523381524281850190815292810189815282546001808201855593875295859020825160039097020180546001600160a01b0319166001600160a01b0390971696909617865592519185019190915590518051919392611a1d92600285019290910190613b02565b505050600081815260146020908152604080832081516060810183523381524281850190815292810189815282546001808201855593875295859020825160039097020180546001600160a01b0319166001600160a01b0390971696909617865592519185019190915590518051919392611aa092600285019290910190613b02565b505050611aad6119083390565b611ab7858461107a565b336000908152602b60205260408120805491611ad2836145d8565b90915550611ae39050836002614550565b60096000828254611af49190614428565b909155505060068054906000611b09836145d8565b90915550506001600160a01b0385166000908152601c60205260408120805491611b32836145d8565b91905055505b5050506111566001600555565b336000908152602b60205260408120545b8015611b7b57611b67600a82614440565b905081611b73816145d8565b925050611b56565b5090565b611b8761101b565b6001600160a01b03821660009081526029602052604090205460ff1615611be75760405162461bcd60e51b815260206004820152601460248201527321b0b7103737ba1030ba3a30b1b5902b24a8399760611b604482015260640161106a565b611c07335b611bf86012600a6144a5565b611c029084614550565b6139b4565b611c136012600a6144a5565b611c1d9082614550565b60086000828254611c2e9190614428565b90915550611c71905033611c40611b45565b611c4a9084614550565b611c55906002614550565b611c5e85613932565b611c689190614440565b6115c833613932565b611c9a82611c7d611b45565b611c879084614550565b611c9085613932565b6115d29190614440565b6001600160a01b0382166000908152601c60205260408120805491611cbe836145d8565b91905055506111566001600555565b60003361140d818585611ce083836131a7565b611cea9190614428565b613608565b611cf761101b565b81515b8015611d5957611d2d83611d0f60018461456f565b81518110611d1f57611d1f614609565b602002602001015183612066565b611d47336064611d3c33613932565b611c90906063614550565b80611d5181614586565b915050611cfa565b506111566001600555565b6000908152602660209081526040808320546001600160a01b03168352602d825280832033845290915290205460ff1690565b611d9f61101b565b6011546001600160a01b0316336001600160a01b031614611dd25760405162461bcd60e51b815260040161106a90614377565b81515b8015611d5957611e4b83611dea60018461456f565b81518110611dfa57611dfa614609565b6020026020010151611e0a601290565b611e1590600a6144a5565b611e1f9085614550565b6115c886611e2e60018761456f565b81518110611e3e57611e3e614609565b6020026020010151613932565b80611e5581614586565b915050611dd5565b611e6561101b565b336000908152602080805260409091208451611e8392860190613b02565b503360009081526021602090815260409091208351611ea492850190613b02565b503360009081526022602090815260409091208251611ec592840190613b02565b50611ed06001600555565b505050565b611edd61101b565b6011546001600160a01b0316336001600160a01b031614611f105760405162461bcd60e51b815260040161106a90614377565b601080546001600160a01b0319166001600160a01b038316179055600160055550565b6012602052600090815260409020805460018201546002830180546001600160a01b03909316939192611f659061459d565b80601f0160208091040260200160405190810160405280929190818152602001828054611f919061459d565b8015611fde5780601f10611fb357610100808354040283529160200191611fde565b820191906000526020600020905b815481529060010190602001808311611fc157829003601f168201915b5050505050905083565b60006009546008546063611ffc9190614550565b6116b79190614440565b336000908152601760209081526040918290208054835181840281018401909452808452606093928301828280156113f557602002820191906000526020600020905b815481526020019060010190808311612049575050505050905090565b61206e61101b565b60008281526027602052604090205460ff161515600114156120d25760405162461bcd60e51b815260206004820152601e60248201527f5468697320626c6f636b20697320706175736564206279206f776e65722e0000604482015260640161106a565b6120db82611d64565b1515600114156120fd5760405162461bcd60e51b815260040161106a90614298565b336000908152602a602052604090205460011161223f5760006009546008546006544261212a9190614428565b6121349190614428565b61213e9190614428565b6040805160208101929092526001600160601b03193360601b169082015260540160408051808303601f19018152828252805160209182012060608401835260008085528285018181528585018881528383526012855294909120855181546001600160a01b0319166001600160a01b0390911617815590516001820155925180519195506121d4926002850192910190613b02565b50905050602a60006121e33390565b6001600160a01b031681526020810191909152604001600090812080549161220a83614586565b90915550506006805490600061221f836145d8565b909155505060078054906000612234836145d8565b919050555050612537565b600060095460085461224f601290565b61225a90600a6144a5565b612262611b45565b61226d906001614428565b6122779190614550565b6122819190614550565b61228b9190614440565b905060006006544261229d9190614428565b6040516020016122af91815260200190565b604051602081830303815290604052805190602001209050602960006122d23390565b6001600160a01b0316815260208101919091526040016000205460ff1615156001141561230757612304826002614550565b91505b336000908152601d60205260409020546001600160a01b03161561235a57336000908152601d602052604090205461234c906001600160a01b0316836115c882613932565b612357826002614550565b91505b604051806060016040528061236c3390565b6001600160a01b039081168252426020808401919091526040928301879052600085815260128252839020845181546001600160a01b031916931692909217825583810151600183015591830151805191926123d092600285019290910190613b02565b50505060008481526013602090815260408083208484526012835290832081546001818101845592855292909320835460039093020180546001600160a01b0319166001600160a01b039093169290921782558083015490820155600280830180549183019161243f9061459d565b61244a929190613b82565b50505060008481526016602090815260408220805460018101825590835291200181905561247c30836115c882613932565b612486338361107a565b6000848152602660205260409020546124a8906001600160a01b03168361107a565b336000908152602b602052604081208054916124c3836145d8565b909155506124d49050826002614550565b600960008282546124e59190614428565b9091555050600680549060006124fa836145d8565b90915550506000848152602660209081526040808320546001600160a01b03168352601c909152812080549161252f836145d8565b919050555050505b6111566001600555565b61254961101b565b60008181526019602052604090205461256133610aa3565b101561257f5760405162461bcd60e51b815260040161106a90614306565b60008181526028602052604090205460ff1615156001146125e25760405162461bcd60e51b815260206004820152601a60248201527f5468697320426c6f636b206973206e6f742073656c6c696e672e000000000000604482015260640161106a565b6125fa336000838152601960205260409020546139b4565b6000818152602660208181526040808420546019835293205491905261262d916001600160a01b0316906115c882613932565b600090815260266020908152604080832080546001600160a01b0319163317905560289091529020805460ff191690556001600555565b6021602052600090815260409020805461267d9061459d565b80601f01602080910402602001604051908101604052809291908181526020018280546126a99061459d565b80156126f65780601f106126cb576101008083540402835291602001916126f6565b820191906000526020600020905b8154815290600101906020018083116126d957829003601f168201915b505050505081565b6025602052600090815260409020805461267d9061459d565b6018602052816000526040600020818154811061273357600080fd5b6000918252602090912001546001600160a01b03169150829050565b3360009081526029602052604090205460609060019060ff161515811461277557600080fd5b600c8054806020026020016040519081016040528092919081815260200182805480156127cb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116127ad575b505050505091505090565b60008181526016602090815260409182902080548351818402810184019094528084526060939283018282801561147957602002820191906000526020600020905b8154815260200190600101908083116128185750505050509050919050565b61283f61101b565b6000600954600854600654426128559190614428565b61285f9190614428565b6128699190614428565b6040805160208101929092526001600160601b03193360601b169082015260540160408051601f1981840301815291815281516020928301206000818152602484529190912085519193506128c392909190860190613b02565b50600081815260256020908152604090912083516128e392850190613b02565b50600081815260266020908152604080832080546001600160a01b0319163317905560238252909120855161291a92870190613b02565b5060008181526018602090815260408083208054600180820183559185528385200180546001600160a01b03191633908117909155600a80548084019091557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80186905584526017835290832080548083018255908452919092200191909155600555505050565b6000602d81335b6001600160a01b0390811682526020808301939093526040918201600090812095909116815293909152909120805460ff1916911515919091179055565b6000818152602660205260409020546001600160a01b03163314612a1d5760405162461bcd60e51b815260040161106a906143a5565b6000818152601360205260408120612a3491613bfd565b60008181526013602090815260408083208151606081018352338152428185019081528351808501855260178152762490353ab9ba1031b632b0b9103a343290213637b1b59760491b8187015293820193845282546001808201855593875295859020825160039097020180546001600160a01b0319166001600160a01b03909716969096178655519185019190915590518051919392612add92600285019290910190613b02565b50505050565b60208052600090815260409020805461267d9061459d565b6023602052600090815260409020805461267d9061459d565b60606004805461137c9061459d565b612b2b61101b565b612b5c336009546012612b3f90600a6144a5565b600854336000908152601c60205260409020546104a69190614550565b336000908152601c60205260408120556001600555565b6000818152601660209081526040808320805482518185028101850190935280835284939092849290918490830182828015612bce57602002820191906000526020600020905b815481526020019060010190808311612bba575b505050505090505b8115612c3257601a600082612bec60018661456f565b81518110612bfc57612bfc614609565b602002602001015181526020019081526020016000205483612c1e9190614428565b925081612c2a81614586565b925050612bd6565b50909392505050565b60003381612c4982866131a7565b905083811015612ca95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161106a565b6115298286868403613608565b612cbe61101b565b6000818152601b60205260408120805491612cd8836145d8565b9190505550601f6000612ce83390565b6001600160a01b0316815260208101919091526040016000908120805491612d0f836145d8565b9091555050600081815260126020526040902054600954600854612d68926001600160a01b03169190612d40601290565b612d4b90600a6144a5565b612d53611b45565b612d5e906001614428565b6104a69190614550565b600954600854612d7a6012600a6144a5565b612d82611b45565b612d8d906001614428565b612d979190614550565b612da19190614550565b612dab9190614440565b612db6906002614550565b60096000828254612dc79190614428565b9091555050600160055550565b60003361140d818585613764565b6000818152601660209081526040808320805482518185028101850190935280835284939092849290918490830182828015612e3d57602002820191906000526020600020905b815481526020019060010190808311612e29575b505050505090505b8115612c3257601b600082612e5b60018661456f565b81518110612e6b57612e6b614609565b602002602001015181526020019081526020016000205483612e8d9190614428565b925081612e9981614586565b925050612e45565b612ea961101b565b3360009081526029602052604090205460ff16151560011415612f0e5760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520616c7265616479206120564950206d656d6265722e000000604482015260640161106a565b60006103e7612f1c30613932565b612f269190614440565b9050612f3630826115c830613932565b612f4033826139b4565b8060086000828254612f529190614428565b909155506001905060296000336115f6565b6024602052600090815260409020805461267d9061459d565b612f8561101b565b612f916012600a6144a5565b612f9b9082614550565b612fa433610aa3565b11612fc15760405162461bcd60e51b815260040161106a906142cf565b612fdb33612fd16012600a6144a5565b611c689084614550565b612fe433611bec565b612ff06012600a6144a5565b612ffa9082614550565b60086000828254612dc79190614428565b33600090815260176020526040812061162691613c1e565b61302b61101b565b6130376012600a6144a5565b6130419082614550565b61304a33610aa3565b10156130685760405162461bcd60e51b815260040161106a90614306565b61307133611bec565b336000908152602a602052604081208054839290612dc7908490614428565b61309861101b565b6000818152601a602052604081208054916130b2836145d8565b9190505550601e60006130c23390565b6001600160a01b03168152602081019190915260400160009081208054916130e9836145d8565b909155505060008181526012602052604090205460095460085461311a926001600160a01b03169190612d40601290565b612d68336009546008546012612d40565b8061313581611d64565b1515600114156131575760405162461bcd60e51b815260040161106a90614298565b5033600081815260176020908152604080832080546001808201835591855283852001869055948352601882528220805494850181558252902090910180546001600160a01b0319169091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60006009546008546131e2601290565b6131ed90600a6144a5565b6131f5611b45565b613200906001614428565b61320a9190614550565b611ffc9190614550565b33604051602001613225919061410e565b6040516020818303038152906040528051906020012082141561328a5760405162461bcd60e51b815260206004820152601d60248201527f43616e206e6f742073656c6c20796f7572206d61696e20426c6f636b2e000000604482015260640161106a565b6000828152602660205260409020546001600160a01b031633146132c05760405162461bcd60e51b815260040161106a906143a5565b6132cc6012600a6144a5565b6132d69082614550565b60009283526019602090815260408085209290925560289052909120805460ff1916600117905550565b6000828152602660205260409020546001600160a01b031633146133365760405162461bcd60e51b815260040161106a906143a5565b60009182526026602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6022602052600090815260409020805461267d9061459d565b61338561101b565b6000818152602660205260409020546001600160a01b0316336001600160a01b0316146133ed5760405162461bcd60e51b81526020600482015260166024820152752932b8bab4b93290213637b1b593b99037bbb732b91760511b604482015260640161106a565b60008181526027602052604090205460ff161515600114156134485760405162461bcd60e51b8152602060048201526014602482015273213637b1b59030b63932b0b23c903830bab9b29760611b604482015260640161106a565b6000818152602760205260409020805460ff1916600117905561136a6001600555565b61347361101b565b61347f6012600a6144a5565b6134899082614550565b61349233613932565b116134af5760405162461bcd60e51b815260040161106a906142cf565b6134d03360095460085460126134c690600a6144a5565b6104a69086614550565b6009546008546134e26012600a6144a5565b6134ec9084614550565b6134f69190614550565b6135009190614440565b600960008282546135119190614428565b909155506113609050336135276012600a6144a5565b6135319084614550565b6115e533613932565b61354261101b565b61354e6012600a6144a5565b6135589082614550565b61356133613932565b116135a85760405162461bcd60e51b81526020600482015260176024820152762737ba1032b737bab3b4101226a9a3903a37903830bc9760491b604482015260640161106a565b6135cb826135b86012600a6144a5565b6135c29084614550565b6115c885613932565b6125373360646135dd6012600a6144a5565b6135e79085614550565b6135f2906063614550565b6135319190614440565b6001602d6000336129a9565b6001600160a01b03831661362e5760405162461bcd60e51b815260040161106a90614333565b6001600160a01b03821661368f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161106a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006136fc84846131a7565b90506000198114612add57818110156137575760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161106a565b612add8484848403613608565b6001600160a01b0383166137c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161106a565b6001600160a01b03821661382a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161106a565b6001600160a01b038316600090815260208190526040902054818110156138a25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161106a565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906138d9908490614428565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161392591815260200190565b60405180910390a3612add565b6001600160a01b039081166000908152602c602090815260408083206011549094168352929052205490565b816001600160a01b0381166139855760405162461bcd60e51b815260040161106a90614333565b506001600160a01b039182166000908152602c6020908152604080832060115490951683529390529190912055565b6001600160a01b038216613a145760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161106a565b6001600160a01b03821660009081526020819052604090205481811015613a885760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161106a565b6001600160a01b0383166000908152602081905260408120838303905560028054849290613ab790849061456f565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b828054613b0e9061459d565b90600052602060002090601f016020900481019282613b305760008555613b76565b82601f10613b4957805160ff1916838001178555613b76565b82800160010185558215613b76579182015b82811115613b76578251825591602001919060010190613b5b565b50611b7b929150613c38565b828054613b8e9061459d565b90600052602060002090601f016020900481019282613bb05760008555613b76565b82601f10613bc15780548555613b76565b82800160010185558215613b7657600052602060002091601f016020900482015b82811115613b76578254825591600101919060010190613be2565b508054600082556003029060005260206000209081019061136a9190613c4d565b508054600082559060005260206000209081019061136a91905b5b80821115611b7b5760008155600101613c39565b80821115611b7b5780546001600160a01b0319168155600060018201819055613c796002830182613c82565b50600301613c4d565b508054613c8e9061459d565b6000825580601f10613c9e575050565b601f01602090049060005260206000209081019061136a9190613c38565b600082601f830112613ccd57600080fd5b813567ffffffffffffffff811115613ce757613ce761461f565b613cfa601f8201601f19166020016143d3565b818152846020838601011115613d0f57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613d3e57600080fd5b8135613d4981614635565b9392505050565b60008060408385031215613d6357600080fd5b8235613d6e81614635565b91506020830135613d7e81614635565b809150509250929050565b600080600060608486031215613d9e57600080fd5b8335613da981614635565b92506020840135613db981614635565b929592945050506040919091013590565b60008060408385031215613ddd57600080fd5b8235613de881614635565b9150602083013567ffffffffffffffff811115613e0457600080fd5b613e1085828601613cbc565b9150509250929050565b60008060408385031215613e2d57600080fd5b8235613e3881614635565b946020939093013593505050565b60008060408385031215613e5957600080fd5b823567ffffffffffffffff811115613e7057600080fd5b8301601f81018513613e8157600080fd5b80356020613e96613e9183614404565b6143d3565b80838252828201915082850189848660051b8801011115613eb657600080fd5b600095505b84861015613ee2578035613ece81614635565b835260019590950194918301918301613ebb565b5098969091013596505050505050565b60008060408385031215613f0557600080fd5b823567ffffffffffffffff80821115613f1d57600080fd5b818501915085601f830112613f3157600080fd5b81356020613f41613e9183614404565b8083825282820191508286018a848660051b8901011115613f6157600080fd5b600096505b84871015613f84578035835260019690960195918301918301613f66565b5096505086013592505080821115613f9b57600080fd5b50613e1085828601613cbc565b600060208284031215613fba57600080fd5b5035919050565b60008060408385031215613fd457600080fd5b823591506020830135613d7e81614635565b60008060408385031215613ff957600080fd5b82359150602083013567ffffffffffffffff811115613e0457600080fd5b6000806040838503121561402a57600080fd5b50508035926020909101359150565b60008060006060848603121561404e57600080fd5b833567ffffffffffffffff8082111561406657600080fd5b61407287838801613cbc565b9450602086013591508082111561408857600080fd5b61409487838801613cbc565b935060408601359150808211156140aa57600080fd5b506140b786828701613cbc565b9150509250925092565b6000815180845260005b818110156140e7576020818501810151868301820152016140cb565b818111156140f9576000602083870101525b50601f01601f19169290920160200192915050565b60609190911b6001600160601b031916815260140190565b6001600160601b0319606093841b811682529190921b16601482015260280190565b60018060a01b038416815282602082015260606040820152600061416f60608301846140c1565b95945050505050565b6020808252825182820181905260009190848201906040850190845b818110156141b95783516001600160a01b031683529284019291840191600101614194565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156141b9578351835292840192918401916001016141e1565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561427757888303603f19018552815180516001600160a01b0316845287810151888501528601516060878501819052614263818601836140c1565b968901969450505090860190600101614224565b509098975050505050505050565b602081526000613d4960208301846140c1565b6020808252601e908201527f596f7520626c61636b6c6973746564206279207468697320626c6f636b2e0000604082015260600190565b6020808252601c908201527f4e6f7420656e6f75676820244d534720746f2077697468647261772e00000000604082015260600190565b6020808252601390820152722737ba1032b737bab3b4103130b630b731b29760691b604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601490820152732cb7ba9030b932903737ba1034b7103a32b0b69760611b604082015260600190565b6020808252601490820152732932b8bab4b93290213637b1b59037bbb732b91760611b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff811182821017156143fc576143fc61461f565b604052919050565b600067ffffffffffffffff82111561441e5761441e61461f565b5060051b60200190565b6000821982111561443b5761443b6145f3565b500190565b60008261445d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561449d578160001904821115614483576144836145f3565b8085161561449057918102915b93841c9390800290614467565b509250929050565b6000613d4960ff8416836000826144be57506001611413565b816144cb57506000611413565b81600181146144e157600281146144eb57614507565b6001915050611413565b60ff8411156144fc576144fc6145f3565b50506001821b611413565b5060208310610133831016604e8410600b841016171561452a575081810a611413565b6145348383614462565b8060001904821115614548576145486145f3565b029392505050565b600081600019048311821515161561456a5761456a6145f3565b500290565b600082821015614581576145816145f3565b500390565b600081614595576145956145f3565b506000190190565b600181811c908216806145b157607f821691505b602082108114156145d257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156145ec576145ec6145f3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461136a57600080fdfea2646970667358221220c5c3dec1ac8f1f437d456c149f153c1724964ecdd0f06baedacaaf2308af556564736f6c63430008070033

Deployed Bytecode Sourcemap

21571:33212:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2345:21;:19;:21::i;:::-;54557:73:::1;3705:10:::0;54612:17:::1;;54593:16;;54577:9;54589:1;54577:13;;;;:::i;:::-;:32;;;;:::i;:::-;:52;;;;:::i;:::-;54557:5;:73::i;:::-;54697:17;;54678:16;;54662:9;54674:1;54662:13;;;;:::i;:::-;:32;;;;:::i;:::-;:52;;;;:::i;:::-;54641:17;;:73;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;54725:15:0::1;::::0;:47:::1;::::0;-1:-1:-1;;;;;54725:15:0;;::::1;::::0;54750:21:::1;54725:47:::0;::::1;;;::::0;:15:::1;:47:::0;:15;:47;54750:21;54725:15;:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;2389:20:::0;1783:1;2909:7;:22;2726:213;2389:20;21571:33212;;2345:21;:19;:21::i;28597:197::-;;;;;;;;;;-1:-1:-1;28597:197:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43573:365;;;;;;;;;;-1:-1:-1;43573:365:0;;;;;:::i;:::-;;:::i;9599:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23601:52::-;;;;;;;;;;-1:-1:-1;23601:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11873:25:1;;;11861:2;11846:18;23601:52:0;11727:177:1;11950:201:0;;;;;;;;;;-1:-1:-1;11950:201:0;;;;;:::i;:::-;;:::i;:::-;;;11700:14:1;;11693:22;11675:41;;11663:2;11648:18;11950:201:0;11535:187:1;32261:160:0;;;;;;;;;;-1:-1:-1;32261:160:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22321:36::-;;;;;;;;;;-1:-1:-1;22321:36:0;;;;;:::i;:::-;;:::i;10719:108::-;;;;;;;;;;-1:-1:-1;10807:12:0;;10719:108;;26388:138;;;;;;;;;;;;;:::i;12731:295::-;;;;;;;;;;-1:-1:-1;12731:295:0;;;;;:::i;:::-;;:::i;40473:390::-;;;;;;;;;;;;;:::i;50414:207::-;;;;;;;;;;-1:-1:-1;50414:207:0;;;;;:::i;:::-;;:::i;22181:63::-;;;;;;;;;;;;;;;;28225:141;;;;;;;;;;;;;:::i;10561:93::-;;;;;;;;;;-1:-1:-1;10561:93:0;;10644:2;22070:36:1;;22058:2;22043:18;10561:93:0;21928:184:1;38161:1432:0;;;;;;;;;;-1:-1:-1;38161:1432:0;;;;;:::i;:::-;;:::i;26703:248::-;;;;;;;;;;;;;:::i;35799:537::-;;;;;;;;;;-1:-1:-1;35799:537:0;;;;;:::i;:::-;;:::i;32611:141::-;;;;;;;;;;-1:-1:-1;32611:141:0;;;;;:::i;:::-;32686:4;32722:15;;;:5;:15;;;;;:22;;32611:141;13435:238;;;;;;;;;;-1:-1:-1;13435:238:0;;;;;:::i;:::-;;:::i;46476:405::-;;;;;;;;;;-1:-1:-1;46476:405:0;;;;;:::i;:::-;;:::i;29401:170::-;;;;;;;;;;-1:-1:-1;29401:170:0;;;;;:::i;:::-;;:::i;22079:44::-;;;;;;;;;;;;;;;;24278:53;;;;;;;;;;-1:-1:-1;24278:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;53521:457;;;;;;;;;;-1:-1:-1;53521:457:0;;;;;:::i;:::-;;:::i;45538:283::-;;;;;;;;;;-1:-1:-1;45538:283:0;;;;;:::i;:::-;;:::i;33798:217::-;;;;;;;;;;-1:-1:-1;33798:217:0;;;;;:::i;:::-;;:::i;22852:47::-;;;;;;;;;;-1:-1:-1;22852:47:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;23424:52::-;;;;;;;;;;-1:-1:-1;23424:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;27486:142;;;;;;;;;;;;;:::i;31891:134::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;47118:1673::-;;;;;;;;;;-1:-1:-1;47118:1673:0;;;;;:::i;:::-;;:::i;52339:533::-;;;;;;;;;;-1:-1:-1;52339:533:0;;;;;:::i;:::-;;:::i;23716:49::-;;;;;;;;;;-1:-1:-1;23716:49:0;;;;;:::i;:::-;;:::i;23942:50::-;;;;;;;;;;-1:-1:-1;23942:50:0;;;;;:::i;:::-;;:::i;23189:57::-;;;;;;;;;;-1:-1:-1;23189:57:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8665:32:1;;;8647:51;;8635:2;8620:18;23189:57:0;8501:203:1;31561:141:0;;;;;;;;;;;;;:::i;29870:157::-;;;;;;;;;;-1:-1:-1;29870:157:0;;;;;:::i;:::-;;:::i;22130:44::-;;;;;;;;;;;;;;;;23371:46;;;;;;;;;;-1:-1:-1;23371:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;10890:127;;;;;;;;;;-1:-1:-1;10890:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;10991:18:0;10964:7;10991:18;;;;;;;;;;;;10890:127;49029:712;;;;;;;;;;-1:-1:-1;49029:712:0;;;;;:::i;:::-;;:::i;43199:118::-;;;;;;;;;;-1:-1:-1;43199:118:0;;;;;:::i;:::-;;:::i;51246:293::-;;;;;;;;;;-1:-1:-1;51246:293:0;;;;;:::i;:::-;;:::i;23660:49::-;;;;;;;;;;-1:-1:-1;23660:49:0;;;;;:::i;:::-;;:::i;23999:51::-;;;;;;;;;;-1:-1:-1;23999:51:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;23999:51:0;;;23828:50;;;;;;;;;;-1:-1:-1;23828:50:0;;;;;:::i;:::-;;:::i;23253:58::-;;;;;;;;;;-1:-1:-1;23253:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;9818:104;;;;;;;;;;;;;:::i;23318:46::-;;;;;;;;;;-1:-1:-1;23318:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;36540:231;;;;;;;;;;;;;:::i;30243:435::-;;;;;;;;;;-1:-1:-1;30243:435:0;;;;;:::i;:::-;;:::i;14176:436::-;;;;;;;;;;-1:-1:-1;14176:436:0;;;;;:::i;:::-;;:::i;42303:388::-;;;;;;;;;;-1:-1:-1;42303:388:0;;;;;:::i;:::-;;:::i;11223:193::-;;;;;;;;;;-1:-1:-1;11223:193:0;;;;;:::i;:::-;;:::i;30901:438::-;;;;;;;;;;-1:-1:-1;30901:438:0;;;;;:::i;:::-;;:::i;24115:53::-;;;;;;;;;;-1:-1:-1;24115:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24057:51;;;;;;;;;;-1:-1:-1;24057:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39837:392;;;;;;;;;;;;;:::i;24225:46::-;;;;;;;;;;-1:-1:-1;24225:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;27137:132;;;;;;;;;;-1:-1:-1;3705:10:0;27188:7;27226:29;;;:15;:29;;;;;;;;27256:4;;-1:-1:-1;;;;;27256:4:0;27226:35;;;;;;;;27137:132;;23885:50;;;;;;;;;;-1:-1:-1;23885:50:0;;;;;:::i;:::-;;:::i;34253:393::-;;;;;;;;;;-1:-1:-1;34253:393:0;;;;;:::i;:::-;;:::i;44569:103::-;;;;;;;;;;;;;:::i;22251:63::-;;;;;;;;;;;;;;;;23483:52;;;;;;;;;;-1:-1:-1;23483:52:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;23483:52:0;;;41151:271;;;;;;;;;;-1:-1:-1;41151:271:0;;;;;:::i;:::-;;:::i;41604:510::-;;;;;;;;;;-1:-1:-1;41604:510:0;;;;;:::i;:::-;;:::i;44152:225::-;;;;;;;;;;-1:-1:-1;44152:225:0;;;;;:::i;:::-;;:::i;11479:151::-;;;;;;;;;;-1:-1:-1;11479:151:0;;;;;:::i;:::-;;:::i;27832:189::-;;;;;;;;;;;;;:::i;51767:387::-;;;;;;;;;;-1:-1:-1;51767:387:0;;;;;:::i;:::-;;:::i;50832:213::-;;;;;;;;;;-1:-1:-1;50832:213:0;;;;;:::i;:::-;;:::i;23772:49::-;;;;;;;;;;-1:-1:-1;23772:49:0;;;;;:::i;:::-;;:::i;49931:291::-;;;;;;;;;;-1:-1:-1;49931:291:0;;;;;:::i;:::-;;:::i;22364:32::-;;;;;;;;;;;;;;;;34900:486;;;;;;;;;;-1:-1:-1;34900:486:0;;;;;:::i;:::-;;:::i;44886:408::-;;;;;;;;;;-1:-1:-1;44886:408:0;;;;;:::i;:::-;;:::i;42885:119::-;;;;;;;;;;-1:-1:-1;42885:119:0;;;;;:::i;:::-;;:::i;24175:43::-;;;;;;;;;;-1:-1:-1;24175:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23542:52;;;;;;;;;;-1:-1:-1;23542:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;2425:293;1827:1;2559:7;;:19;;2551:63;;;;-1:-1:-1;;;2551:63:0;;20124:2:1;2551:63:0;;;20106:21:1;20163:2;20143:18;;;20136:30;20202:33;20182:18;;;20175:61;20253:18;;2551:63:0;;;;;;;;;1827:1;2692:7;:18;2425:293::o;16040:399::-;-1:-1:-1;;;;;16124:21:0;;16116:65;;;;-1:-1:-1;;;16116:65:0;;21588:2:1;16116:65:0;;;21570:21:1;21627:2;21607:18;;;21600:30;21666:33;21646:18;;;21639:61;21717:18;;16116:65:0;21386:355:1;16116:65:0;16272:6;16256:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;16289:18:0;;:9;:18;;;;;;;;;;:28;;16311:6;;16289:9;:28;;16311:6;;16289:28;:::i;:::-;;;;-1:-1:-1;;16333:37:0;;11873:25:1;;;-1:-1:-1;;;;;16333:37:0;;;16350:1;;16333:37;;11861:2:1;11846:18;16333:37:0;;;;;;;16383:48;16040:399;;:::o;28597:197::-;28663:13;28696:9;3705:10;28748:8;28718:39;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;28718:39:0;;;;;;;;;28708:50;;28718:39;28708:50;;;;28776:10;;;;:7;:10;;;;;28769:17;;;;;;;;;;;;;;;28708:50;;-1:-1:-1;28776:10:0;;28769:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28769:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28597:197;;;:::o;43573:365::-;2345:21;:19;:21::i;:::-;3705:10;43704:1:::1;43666:26:::0;;;:12:::1;:26;::::0;;;;;-1:-1:-1;;;;;43666:26:0::1;43662:269;;43733:53;43776:7;43759:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;43749:36;;;;;;43733:15;:53::i;:::-;3705:10:::0;43801:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;;;43841:25;;::::1;::::0;43858:7;;43841:25:::1;;:::i;:::-;;::::0;;;;::::1;-1:-1:-1::0;;43841:25:0;;;;;;43831:36;;43841:25:::1;43831:36:::0;;::::1;::::0;43801:67;;::::1;::::0;::::1;::::0;;-1:-1:-1;43801:67:0;;;;;;::::1;::::0;3705:10;43883:26;;:12:::1;:26:::0;;;;;:36;;-1:-1:-1;;;;;;43883:36:0::1;-1:-1:-1::0;;;;;43883:36:0;::::1;;::::0;;43662:269:::1;2389:20:::0;1783:1;2909:7;:22;2726:213;2389:20;43573:365;:::o;9599:100::-;9653:13;9686:5;9679:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9599:100;:::o;11950:201::-;12033:4;3705:10;12089:32;3705:10;12105:7;12114:6;12089:8;:32::i;:::-;12139:4;12132:11;;;11950:201;;;;;:::o;32261:160::-;32386:27;;;;:17;:27;;;;;;;;;32379:34;;;;;;;;;;;;;;;;;32338:16;;32379:34;;;32386:27;32379:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32379:34:0;;;;;;;;;;;;;;;;;;;;;;;32261:160;;;:::o;22321:36::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22321:36:0;:::o;26388:138::-;3705:10;26490:28;;;;:14;:28;;;;;;;;;26483:35;;;;;;;;;;;;;;;;;26445:16;;26483:35;;;26490:28;26483:35;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26483:35:0;;;;;;;;;;;;;;;;;;;;;;26388:138;:::o;12731:295::-;12862:4;3705:10;12920:38;12936:4;3705:10;12951:6;12920:15;:38::i;:::-;12969:27;12979:4;12985:2;12989:6;12969:9;:27::i;:::-;-1:-1:-1;13014:4:0;;12731:295;-1:-1:-1;;;;12731:295:0:o;40473:390::-;2345:21;:19;:21::i;:::-;3705:10;40548:17:::1;::::0;;;:3:::1;:17;::::0;;;;;::::1;;:25;;:17:::0;:25:::1;40540:63;;;::::0;-1:-1:-1;;;40540:63:0;;15370:2:1;40540:63:0::1;::::0;::::1;15352:21:1::0;15409:2;15389:18;;;15382:30;15448:27;15428:18;;;15421:55;15493:18;;40540:63:0::1;15168:349:1::0;40540:63:0::1;40614:11;40666:3;40628:35;40657:4;40628:20;:35::i;:::-;:41;;;;:::i;:::-;40614:55:::0;-1:-1:-1;40680:63:0::1;3705:10:::0;40736:6;40699:34:::1;3705:10:::0;40699:20:::1;:34::i;:::-;:43;;;;:::i;:::-;40680:4;:63::i;:::-;40754:65;40767:4;40812:6;40774:35;40803:4;40774:20;:35::i;:::-;:44;;;;:::i;40754:65::-;40850:5;40830:3;40850:5:::0;3705:10;40834:12:::1;-1:-1:-1::0;;;;;40830:17:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;40830:17:0;:25;;-1:-1:-1;;40830:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;2909:7:0;:22;40473:390::o;2389:20::-;40473:390::o;50414:207::-;2345:21;:19;:21::i;:::-;50508::::1;::::0;;;:11:::1;:21;::::0;;;;;::::1;;:29;;:21:::0;:29:::1;50500:64;;;::::0;-1:-1:-1;;;50500:64:0;;13895:2:1;50500:64:0::1;::::0;::::1;13877:21:1::0;13934:2;13914:18;;;13907:30;-1:-1:-1;;;13953:18:1;;;13946:52;14015:18;;50500:64:0::1;13693:346:1::0;50500:64:0::1;50608:5;50575:29:::0;;;:11:::1;:29;::::0;;;;:38;;-1:-1:-1;;50575:38:0::1;::::0;;2389:20;1783:1;2909:7;:22;2726:213;28225:141;28288:7;28323:35;28352:4;28323:20;:35::i;:::-;28316:42;;28225:141;:::o;38161:1432::-;2345:21;:19;:21::i;:::-;38264:11:::1;38345:17;;38326:16;;38312:10;10644:2:::0;;10561:93;38312:10:::1;38306:16;::::0;:2:::1;:16;:::i;:::-;38284:18;:16;:18::i;:::-;38280:22;::::0;:1:::1;:22;:::i;:::-;38279:43;;;;:::i;:::-;38278:64;;;;:::i;:::-;:84;;;;:::i;:::-;38264:98:::0;-1:-1:-1;38373:9:0::1;3705:10:::0;38425:8:::1;38395:39;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38385:50;;;;;;38373:62;;38446:9;38485:8;38494:12;3705:10:::0;;3625:98;38494:12:::1;38468:39;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;38468:39:0;;::::1;::::0;;;;;;38458:50;;38468:39:::1;38458:50:::0;;::::1;::::0;38525:10:::1;::::0;;;:7:::1;:10:::0;;;;;:17;38458:50;;-1:-1:-1;38543:1:0::1;-1:-1:-1::0;38521:1065:0::1;;;38570:10;::::0;;;:7:::1;:10;::::0;;;;;;;38586:52;;::::1;::::0;::::1;::::0;;3705:10;38586:52;;38605:15:::1;38586:52:::0;;::::1;::::0;;;;;;;;;38570:69;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;38570:69:0::1;-1:-1:-1::0;;;;;38570:69:0;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;38586:52;;38570:69;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;38654:10:0::1;::::0;;;:7:::1;:10;::::0;;;;;;;38670:52;;::::1;::::0;::::1;::::0;;3705:10;38670:52;;38689:15:::1;38670:52:::0;;::::1;::::0;;;;;;;;;38654:69;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;38654:69:0::1;-1:-1:-1::0;;;;;38654:69:0;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;38670:52;;38654:69;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;;38738:14;:37;38761:12;3705:10:::0;;3625:98;38761:12:::1;-1:-1:-1::0;;;;;38738:37:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;38738:37:0;;;:52;;::::1;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;38738:52:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;38805:33;;;:14:::1;:33:::0;;;;;:52;;;;::::1;::::0;;;;;;;;::::1;::::0;;3705:10;38805:52;::::1;::::0;::::1;::::0;;38872:31:::1;::::0;38882:12:::1;38896:6;38872:5;:31::i;:::-;38918;38932:8;38942:6;38918:5;:31::i;:::-;3705:10:::0;38964:29:::1;::::0;;;:13:::1;:29;::::0;;;;:31;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;39031:10:0::1;::::0;-1:-1:-1;39031:6:0;39040:1:::1;39031:10;:::i;:::-;39010:17;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;39056:16:0::1;:19:::0;;;:16:::1;:19;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;39090:22:0;::::1;;::::0;;;:12:::1;:22;::::0;;;;:24;;;::::1;::::0;::::1;:::i;:::-;;;;;;38521:1065;;;39165:10;::::0;;;:7:::1;:10;::::0;;;;;;;39181:52;;::::1;::::0;::::1;::::0;;3705:10;39181:52;;39200:15:::1;39181:52:::0;;::::1;::::0;;;;;;;;;39165:69;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;39165:69:0::1;-1:-1:-1::0;;;;;39165:69:0;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;39181:52;;39165:69;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;39249:10:0::1;::::0;;;:7:::1;:10;::::0;;;;;;;39265:52;;::::1;::::0;::::1;::::0;;3705:10;39265:52;;39284:15:::1;39265:52:::0;;::::1;::::0;;;;;;;;;39249:69;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;39249:69:0::1;-1:-1:-1::0;;;;;39249:69:0;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;39265:52;;39249:69;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;;39333:31;39343:12;3705:10:::0;;3625:98;39333:31:::1;39379;39393:8;39403:6;39379:5;:31::i;:::-;3705:10:::0;39425:29:::1;::::0;;;:13:::1;:29;::::0;;;;:31;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;39492:10:0::1;::::0;-1:-1:-1;39492:6:0;39501:1:::1;39492:10;:::i;:::-;39471:17;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;39517:16:0::1;:18:::0;;;:16:::1;:18;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;39550:22:0;::::1;;::::0;;;:12:::1;:22;::::0;;;;:24;;;::::1;::::0;::::1;:::i;:::-;;;;;;38521:1065;38253:1340;;;2389:20:::0;1783:1;2909:7;:22;2726:213;26703:248;3705:10;26757;26798:27;;;:13;:27;;;;;;26836:85;26843:8;;26836:85;;26878:9;26885:2;26878:9;;:::i;:::-;;-1:-1:-1;26902:7:0;;;;:::i;:::-;;;;26836:85;;;26931:12;26703:248;:::o;35799:537::-;2345:21;:19;:21::i;:::-;-1:-1:-1;;;;;35913:12:0;::::1;;::::0;;;:3:::1;:12;::::0;;;;;::::1;;:21;35905:54;;;::::0;-1:-1:-1;;;35905:54:0;;21239:2:1;35905:54:0::1;::::0;::::1;21221:21:1::0;21278:2;21258:18;;;21251:30;-1:-1:-1;;;21297:18:1;;;21290:50;21357:18;;35905:54:0::1;21037:344:1::0;35905:54:0::1;35970:46;3705:10:::0;35976:12:::1;35999:16;10644:2:::0;35999::::1;:16;:::i;:::-;35990:25;::::0;:6;:25:::1;:::i;:::-;35970:5;:46::i;:::-;36057:16;10644:2:::0;36057::::1;:16;:::i;:::-;36048:25;::::0;:6;:25:::1;:::i;:::-;36027:16;;:47;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;36085:122:0::1;::::0;-1:-1:-1;3705:10:0;36183:18:::1;:16;:18::i;:::-;36174:27;::::0;:6;:27:::1;:::i;:::-;:31;::::0;36204:1:::1;36174:31;:::i;:::-;36141:29;36162:7;36141:20;:29::i;:::-;:65;;;;:::i;:::-;36104:34;3705:10:::0;40699:20:::1;:34::i;36085:122::-;36218:76;36223:7;36274:18;:16;:18::i;:::-;36265:27;::::0;:6;:27:::1;:::i;:::-;36232:29;36253:7;36232:20;:29::i;:::-;:61;;;;:::i;36218:76::-;-1:-1:-1::0;;;;;36305:21:0;::::1;;::::0;;;:12:::1;:21;::::0;;;;:23;;;::::1;::::0;::::1;:::i;:::-;;;;;;2389:20:::0;1783:1;2909:7;:22;2726:213;13435:238;13523:4;3705:10;13579:64;3705:10;13595:7;13632:10;13604:25;3705:10;13595:7;13604:9;:25::i;:::-;:38;;;;:::i;:::-;13579:8;:64::i;46476:405::-;2345:21;:19;:21::i;:::-;46627:16;;46654:220:::1;46661:16:::0;;46654:220:::1;;46704:49;46715:9:::0;46725:16:::1;46740:1;46725:12:::0;:16:::1;:::i;:::-;46715:27;;;;;;;;:::i;:::-;;;;;;;46744:8;46704:10;:49::i;:::-;46768:65;3705:10:::0;46829:3:::1;46787:34;3705:10:::0;40699:20:::1;:34::i;46787:::-;:39;::::0;46824:2:::1;46787:39;:::i;46768:65::-;46848:14:::0;::::1;::::0;::::1;:::i;:::-;;;;46654:220;;;46596:285;2389:20:::0;1783:1;2909:7;:22;2726:213;29401:170;29479:4;29527:21;;;:11;:21;;;;;;;;;-1:-1:-1;;;;;29527:21:0;29515:34;;:11;:34;;;;;3705:10;29515:48;;;;;;;;;;;29401:170::o;53521:457::-;2345:21;:19;:21::i;:::-;53654:4:::1;::::0;-1:-1:-1;;;;;53654:4:0::1;3705:10:::0;-1:-1:-1;;;;;53638:20:0::1;;53630:53;;;;-1:-1:-1::0;;;53630:53:0::1;;;;;;;:::i;:::-;53722:11:::0;;53744:227:::1;53751:24:::0;;53744:227:::1;;53802:120;53807:4:::0;53812:24:::1;53835:1;53812:20:::0;:24:::1;:::i;:::-;53807:30;;;;;;;;:::i;:::-;;;;;;;53910:10;10644:2:::0;;10561:93;53910:10:::1;53904:16;::::0;:2:::1;:16;:::i;:::-;53895:25;::::0;:6;:25:::1;:::i;:::-;53839:52;53860:4:::0;53865:24:::1;53888:1;53865:20:::0;:24:::1;:::i;:::-;53860:30;;;;;;;;:::i;:::-;;;;;;;53839:20;:52::i;53802:120::-;53937:22:::0;::::1;::::0;::::1;:::i;:::-;;;;53744:227;;45538:283:::0;2345:21;:19;:21::i;:::-;3705:10;45686:23:::1;::::0;;;:9:::1;:23:::0;;;;;;;:35;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;3705:10:0;45732:23:::1;::::0;;;:9:::1;:23;::::0;;;;;;;:35;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;3705:10:0;45778:23:::1;::::0;;;:9:::1;:23;::::0;;;;;;;:35;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;2389:20:::0;1783:1;2909:7;:22;2726:213;2389:20;45538:283;;;:::o;33798:217::-;2345:21;:19;:21::i;:::-;33933:4:::1;::::0;-1:-1:-1;;;;;33933:4:0::1;3705:10:::0;-1:-1:-1;;;;;33917:20:0::1;;33909:53;;;;-1:-1:-1::0;;;33909:53:0::1;;;;;;;:::i;:::-;33973:15;:34:::0;;-1:-1:-1;;;;;;33973:34:0::1;-1:-1:-1::0;;;;;33973:34:0;::::1;;::::0;;-1:-1:-1;2909:7:0;:22;43573:365;:::o;22852:47::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22852:47:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27486:142::-;27538:9;27603:17;;27584:16;;27579:2;:21;;;;:::i;:::-;:41;;;;:::i;31891:134::-;3705:10;31993:24;;;;:10;:24;;;;;;;;;31986:31;;;;;;;;;;;;;;;;;31945:16;;31986:31;;;31993:24;31986:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31891:134;:::o;47118:1673::-;2345:21;:19;:21::i;:::-;47233:19:::1;::::0;;;:11:::1;:19;::::0;;;;;::::1;;:27;;:19:::0;:27:::1;;47225:70;;;::::0;-1:-1:-1;;;47225:70:0;;17142:2:1;47225:70:0::1;::::0;::::1;17124:21:1::0;17181:2;17161:18;;;17154:30;17220:32;17200:18;;;17193:60;17270:18;;47225:70:0::1;16940:354:1::0;47225:70:0::1;47314:32;47339:6;47314:24;:32::i;:::-;:40;;47350:4;47314:40;;47306:83;;;;-1:-1:-1::0;;;47306:83:0::1;;;;;;;:::i;:::-;3705:10:::0;47407:20:::1;::::0;;;:6:::1;:20;::::0;;;;;47431:1:::1;-1:-1:-1::0;47402:1382:0::1;;47459:10;47556:17;;47537:16;;47518;;47500:15;:34;;;;:::i;:::-;:53;;;;:::i;:::-;:73;;;;:::i;:::-;47483:105;::::0;;::::1;::::0;::::1;8359:19:1::0;;;;-1:-1:-1;;;;;;3705:10:0;8416:2:1;8412:15;8408:53;8394:12;;;8387:75;8478:12;;47483:105:0::1;::::0;;;;::::1;-1:-1:-1::0;;47483:105:0;;;;;;47473:116;;47483:105:::1;47473:116:::0;;::::1;::::0;47618:37:::1;::::0;::::1;::::0;;-1:-1:-1;47618:37:0;;;;;::::1;::::0;;;;;;;;;47604:11;;;:7:::1;:11:::0;;;;;;:51;;;;-1:-1:-1;;;;;;47604:51:0::1;-1:-1:-1::0;;;;;47604:51:0;;::::1;;::::0;;;;-1:-1:-1;47604:51:0;::::1;::::0;;;;;47473:116;;-1:-1:-1;47604:51:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;;;47670:6;:20;47677:12;3705:10:::0;;3625:98;47677:12:::1;-1:-1:-1::0;;;;;47670:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;47670:20:0;;;:22;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;47707:16:0::1;:18:::0;;;:16:::1;:18;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;47740:18:0::1;:20:::0;;;:18:::1;:20;::::0;::::1;:::i;:::-;;;;;;47444:328;47402:1382;;;47811:11;47892:17;;47873:16;;47859:10;10644:2:::0;;10561:93;47859:10:::1;47853:16;::::0;:2:::1;:16;:::i;:::-;47831:18;:16;:18::i;:::-;47827:22;::::0;:1:::1;:22;:::i;:::-;47826:43;;;;:::i;:::-;47825:64;;;;:::i;:::-;:84;;;;:::i;:::-;47811:98;;47924:10;47983:16;;47965:15;:34;;;;:::i;:::-;47948:52;;;;;;8144:19:1::0;;8188:2;8179:12;;8015:182;47948:52:0::1;;;;;;;;;;;;;47938:63;;;;;;47924:77;;48020:3;:17;48024:12;3705:10:::0;;3625:98;48024:12:::1;-1:-1:-1::0;;;;;48020:17:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;48020:17:0;;::::1;;:25;;:17:::0;:25:::1;48016:55;;;48058:10;:6:::0;48067:1:::1;48058:10;:::i;:::-;48049:19;;48016:55;3705:10:::0;48127:1:::1;48089:26:::0;;;:12:::1;:26;::::0;;;;;-1:-1:-1;;;;;48089:26:0::1;:40:::0;48085:163:::1;;3705:10:::0;48138:26:::1;::::0;;;:12:::1;:26;::::0;;;;;48133:91:::1;::::0;-1:-1:-1;;;;;48138:26:0::1;48217:6:::0;48166:48:::1;48138:26:::0;48166:20:::1;:48::i;48133:91::-;48235:10;:6:::0;48244:1:::1;48235:10;:::i;:::-;48226:19;;48085:163;48276:53;;;;;;;;48281:12;3705:10:::0;;3625:98;48281:12:::1;-1:-1:-1::0;;;;;48276:53:0;;::::1;::::0;;48295:15:::1;48276:53;::::0;;::::1;::::0;;;;;;;;;;;-1:-1:-1;48262:11:0;;;:7:::1;:11:::0;;;;;:67;;;;-1:-1:-1;;;;;;48262:67:0::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;-1:-1:-1;48262:67:0;::::1;::::0;;;::::1;::::0;;;:11;;:67:::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;48344:20:0::1;::::0;;;:5:::1;:20;::::0;;;;;;;48370:11;;;:7:::1;:11:::0;;;;;48344:38;;::::1;::::0;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;48344:38:0::1;-1:-1:-1::0;;;;;48344:38:0;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;:::i;:::-;-1:-1:-1::0;;;48397:20:0::1;::::0;;;:12:::1;:20;::::0;;;;;;:29;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;;48443:65:::1;48456:4;48501:6:::0;48463:35:::1;48456:4:::0;48463:20:::1;:35::i;48443:65::-;48523:27;3705:10:::0;48543:6:::1;48523:5;:27::i;:::-;48571:19;::::0;;;:11:::1;:19;::::0;;;;;48565:34:::1;::::0;-1:-1:-1;;;;;48571:19:0::1;48592:6:::0;48565:5:::1;:34::i;:::-;3705:10:::0;48614:27:::1;::::0;;;:13:::1;:27;::::0;;;;:29;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;48679:10:0::1;::::0;-1:-1:-1;48679:6:0;48688:1:::1;48679:10;:::i;:::-;48658:17;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;48704:16:0::1;:18:::0;;;:16:::1;:18;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;48737:33:0::1;48750:19:::0;;;:11:::1;:19;::::0;;;;;;;;-1:-1:-1;;;;;48750:19:0::1;48737:33:::0;;:12:::1;:33:::0;;;;;:35;;;::::1;::::0;::::1;:::i;:::-;;;;;;47796:988;;47402:1382;2389:20:::0;1783:1;2909:7;:22;2726:213;52339:533;2345:21;:19;:21::i;:::-;52466:28:::1;::::0;;;:18:::1;:28;::::0;;;;;52439:23:::1;3705:10:::0;10890:127;:::i;52439:23::-:1;:55;;52431:87;;;;-1:-1:-1::0;;;52431:87:0::1;;;;;;;:::i;:::-;52537:23;::::0;;;:13:::1;:23;::::0;;;;;::::1;;:31;;:23:::0;:31:::1;52529:70;;;::::0;-1:-1:-1;;;52529:70:0;;18251:2:1;52529:70:0::1;::::0;::::1;18233:21:1::0;18290:2;18270:18;;;18263:30;18329:28;18309:18;;;18302:56;18375:18;;52529:70:0::1;18049:350:1::0;52529:70:0::1;52610:49;3705:10:::0;52630:28:::1;::::0;;;:18:::1;:28;::::0;;;;;52610:5:::1;:49::i;:::-;52675:21;::::0;;;:11:::1;:21;::::0;;;;;;;;52745:18:::1;:28:::0;;;;;52719:21;;;52670:105:::1;::::0;-1:-1:-1;;;;;52675:21:0::1;::::0;52698:43:::1;52675:21:::0;52698:20:::1;:43::i;52670:105::-;52786:21;::::0;;;:11:::1;:21;::::0;;;;;;;:36;;-1:-1:-1;;;;;;52786:36:0::1;3705:10:::0;52786:36:::1;::::0;;52833:13:::1;:23:::0;;;;;:31;;-1:-1:-1;;52833:31:0::1;::::0;;-1:-1:-1;2909:7:0;:22;43573:365::o;23716:49::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23942:50::-;;;;;;;;;;;;;;;;:::i;23189:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23189:57:0;;-1:-1:-1;23189:57:0;;-1:-1:-1;23189:57:0:o;31561:141::-;3705:10;25721:34;:17;;;:3;:17;;;;;;31631:16;;31617:4;;25721:17;;:34;;;;25713:43;;;;;;31679:15:::1;31672:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;31672:22:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;;;31561:141:::0;;:::o;29870:157::-;29997:22;;;;:12;:22;;;;;;;;;29990:29;;;;;;;;;;;;;;;;;29949:16;;29990:29;;;29997:22;29990:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29870:157;;;:::o;49029:712::-;2345:21;:19;:21::i;:::-;49170:16:::1;49273:17;;49254:16;;49235;;49217:15;:34;;;;:::i;:::-;:53;;;;:::i;:::-;:73;;;;:::i;:::-;49200:105;::::0;;::::1;::::0;::::1;8359:19:1::0;;;;-1:-1:-1;;;;;;3705:10:0;8416:2:1;8412:15;8408:53;8394:12;;;8387:75;8478:12;;49200:105:0::1;::::0;;-1:-1:-1;;49200:105:0;;::::1;::::0;;;;;;49190:116;;49200:105:::1;49190:116:::0;;::::1;::::0;49317:27:::1;::::0;;;:10:::1;:27:::0;;;;;;:50;;49190:116;;-1:-1:-1;49317:50:0::1;::::0;:27;;:50;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;49378:27:0::1;::::0;;;:10:::1;:27;::::0;;;;;;;:50;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;49439:27:0::1;::::0;;;:11:::1;:27;::::0;;;;;;;:50;;-1:-1:-1;;;;;;49439:50:0::1;3705:10:::0;49439:50:::1;::::0;;49500:10:::1;:27:::0;;;;;:50;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;49561:27:0::1;::::0;;;:17:::1;:27;::::0;;;;;;;:50;;::::1;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;49561:50:0::1;3705:10:::0;49561:50;;::::1;::::0;;;49622:17:::1;:50:::0;;;;::::1;::::0;;;;::::1;::::0;;;49683:24;;:10:::1;:24:::0;;;;;:50;;;;::::1;::::0;;;;;;;;;::::1;::::0;;;;2909:7;:22;45538:283;;;:::o;43199:118::-;43304:5;43268:11;43304:5;3705:10;43280:12;-1:-1:-1;;;;;43268:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;43268:25:0;;;:33;;;;;;;;;;;;;:41;;-1:-1:-1;;43268:41:0;;;;;;;;;;43199:118::o;51246:293::-;51333:21;;;;:11;:21;;;;;;-1:-1:-1;;;;;51333:21:0;3705:10;51333:37;51325:70;;;;-1:-1:-1;;;51325:70:0;;;;;;;:::i;:::-;51413:15;;;;:5;:15;;;;;51406:22;;;:::i;:::-;51439:15;;;;:5;:15;;;;;;;;51460:70;;;;;;;3705:10;51460:70;;51479:15;51460:70;;;;;;51496:33;;;;;;;;;;-1:-1:-1;;;51496:33:0;;;;51460:70;;;;;;51439:92;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;51439:92:0;-1:-1:-1;;;;;51439:92:0;;;;;;;;;;;;;;;;;;;;;51460:70;;51439:92;;;;;;;;;;;;:::i;:::-;;;;51246:293;:::o;23660:49::-;;;;;;;;;;;;;;;;:::i;23828:50::-;;;;;;;;;;;;;;;;:::i;9818:104::-;9874:13;9907:7;9900:14;;;;;:::i;36540:231::-;2345:21;:19;:21::i;:::-;36619:105:::1;3705:10:::0;36706:17:::1;::::0;10644:2;36687:16:::1;::::0;:2:::1;:16;:::i;:::-;36668;::::0;3705:10;36639:26:::1;::::0;;;:12:::1;:26;::::0;;;;;:45:::1;::::0;36668:16;36639:45:::1;:::i;36619:105::-;3705:10:::0;36762:1:::1;36735:26:::0;;;:12:::1;:26;::::0;;;;:28;1783:1;2909:7;:22;40473:390::o;30243:435::-;30310:23;30408:22;;;:12;:22;;;;;;;;:29;;30448:54;;;;;;;;;;;;;;;30310:23;;30408:29;;30310:23;;30448:54;;30408:29;;30448:54;;30408:22;:29;30448:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30513:133;30520:14;;30513:133;;30572:6;:34;30579:12;30592;30603:1;30592:10;:12;:::i;:::-;30579:26;;;;;;;;:::i;:::-;;;;;;;30572:34;;;;;;;;;;;;30561:45;;;;;:::i;:::-;;-1:-1:-1;30621:13:0;;;;:::i;:::-;;;;30513:133;;;-1:-1:-1;30663:7:0;;30243:435;-1:-1:-1;;;30243:435:0:o;14176:436::-;14269:4;3705:10;14269:4;14352:25;3705:10;14369:7;14352:9;:25::i;:::-;14325:52;;14416:15;14396:16;:35;;14388:85;;;;-1:-1:-1;;;14388:85:0;;20833:2:1;14388:85:0;;;20815:21:1;20872:2;20852:18;;;20845:30;20911:34;20891:18;;;20884:62;-1:-1:-1;;;20962:18:1;;;20955:35;21007:19;;14388:85:0;20631:401:1;14388:85:0;14509:60;14518:5;14525:7;14553:15;14534:16;:34;14509:8;:60::i;42303:388::-;2345:21;:19;:21::i;:::-;42382:10:::1;::::0;;;:6:::1;:10;::::0;;;;:13;;;::::1;::::0;::::1;:::i;:::-;;;;;;42406:12;:26;42419:12;3705:10:::0;;3625:98;42419:12:::1;-1:-1:-1::0;;;;;42406:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;42406:26:0;;;:29;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;42452:11:0::1;::::0;;;:7:::1;:11;::::0;;;;:18;42539:17:::1;::::0;42520:16:::1;::::0;42446:111:::1;::::0;-1:-1:-1;;;;;42452:18:0::1;::::0;42539:17;42506:10:::1;10644:2:::0;;10561:93;42506:10:::1;42500:16;::::0;:2:::1;:16;:::i;:::-;42478:18;:16;:18::i;:::-;42474:22;::::0;:1:::1;:22;:::i;:::-;42473:43;;;;:::i;42446:111::-;42661:17;::::0;42642:16:::1;::::0;42622::::1;10644:2:::0;42622::::1;:16;:::i;:::-;42600:18;:16;:18::i;:::-;42596:22;::::0;:1:::1;:22;:::i;:::-;42595:43;;;;:::i;:::-;42594:64;;;;:::i;:::-;:84;;;;:::i;:::-;42593:90;::::0;42682:1:::1;42593:90;:::i;:::-;42568:17;;:115;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;1783:1:0;2909:7;:22;43573:365;:::o;11223:193::-;11302:4;3705:10;11358:28;3705:10;11375:2;11379:6;11358:9;:28::i;30901:438::-;30968:26;31069:22;;;:12;:22;;;;;;;;:29;;31109:54;;;;;;;;;;;;;;;30968:26;;31069:29;;30968:26;;31109:54;;31069:29;;31109:54;;31069:22;:29;31109:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31174:133;31181:14;;31174:133;;31233:6;:34;31240:12;31253;31264:1;31253:10;:12;:::i;:::-;31240:26;;;;;;;;:::i;:::-;;;;;;;31233:34;;;;;;;;;;;;31222:45;;;;;:::i;:::-;;-1:-1:-1;31282:13:0;;;;:::i;:::-;;;;31174:133;;39837:392;2345:21;:19;:21::i;:::-;3705:10;39912:17:::1;::::0;;;:3:::1;:17;::::0;;;;;::::1;;:25;;:17:::0;:25:::1;;39904:67;;;::::0;-1:-1:-1;;;39904:67:0;;16784:2:1;39904:67:0::1;::::0;::::1;16766:21:1::0;16823:2;16803:18;;;16796:30;16862:31;16842:18;;;16835:59;16911:18;;39904:67:0::1;16582:353:1::0;39904:67:0::1;39982:10;40034:3;39996:35;40025:4;39996:20;:35::i;:::-;:41;;;;:::i;:::-;39982:56;;40049:64;40062:4;40107:5;40069:35;40098:4;40069:20;:35::i;40049:64::-;40124:26;3705:10:::0;40144:5:::1;40124;:26::i;:::-;40181:5;40161:16;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;40217:4:0::1;::::0;-1:-1:-1;40197:3:0::1;:17;3705:10:::0;40201:12:::1;3625:98:::0;23885:50;;;;;;;;;;;;;;;;:::i;34253:393::-;2345:21;:19;:21::i;:::-;34378:16:::1;10644:2:::0;34378::::1;:16;:::i;:::-;34369:25;::::0;:6;:25:::1;:::i;:::-;34342:23;3705:10:::0;10890:127;:::i;34342:23::-:1;:53;34334:94;;;;-1:-1:-1::0;;;34334:94:0::1;;;;;;;:::i;:::-;34439:84;3705:10:::0;34505:16:::1;10644:2:::0;34505::::1;:16;:::i;:::-;34496:25;::::0;:6;:25:::1;:::i;34439:84::-;34534:46;3705:10:::0;34540:12:::1;3625:98:::0;34534:46:::1;34621:16;10644:2:::0;34621::::1;:16;:::i;:::-;34612:25;::::0;:6;:25:::1;:::i;:::-;34591:16;;:47;;;;;;;:::i;44569:103::-:0;3705:10;44640:24;;;;:10;:24;;;;;44633:31;;;:::i;41151:271::-;2345:21;:19;:21::i;:::-;41276:16:::1;10644:2:::0;41276::::1;:16;:::i;:::-;41267:25;::::0;:6;:25:::1;:::i;:::-;41240:23;3705:10:::0;10890:127;:::i;41240:23::-:1;:52;;41232:84;;;;-1:-1:-1::0;;;41232:84:0::1;;;;;;;:::i;:::-;41327:46;3705:10:::0;41333:12:::1;3625:98:::0;41327:46:::1;3705:10:::0;41384:20:::1;::::0;;;:6:::1;:20;::::0;;;;:30;;41408:6;;41384:20;:30:::1;::::0;41408:6;;41384:30:::1;:::i;41604:510::-:0;2345:21;:19;:21::i;:::-;41683:10:::1;::::0;;;:6:::1;:10;::::0;;;;:13;;;::::1;::::0;::::1;:::i;:::-;;;;;;41707:12;:26;41720:12;3705:10:::0;;3625:98;41720:12:::1;-1:-1:-1::0;;;;;41707:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;41707:26:0;;;:29;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;41753:11:0::1;::::0;;;:7:::1;:11;::::0;;;;:18;41840:17:::1;::::0;41821:16:::1;::::0;41747:111:::1;::::0;-1:-1:-1;;;;;41753:18:0::1;::::0;41840:17;41807:10:::1;10644:2:::0;;10561:93;41747:111:::1;41869;3705:10:::0;41962:17:::1;::::0;41943:16:::1;::::0;10644:2;41929:10:::1;10561:93:::0;44152:225;44233:8;25416:34;25441:8;25416:24;:34::i;:::-;:42;;25454:4;25416:42;;25408:85;;;;-1:-1:-1;;;25408:85:0;;;;;;;:::i;:::-;-1:-1:-1;3705:10:0;44266:27:::1;::::0;;;:10:::1;:27;::::0;;;;;;;:46;;::::1;::::0;;::::1;::::0;;;;;;;;::::1;::::0;;;44323:27;;;:17:::1;:27:::0;;;;:46;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;44323:46:0::1;::::0;;::::1;::::0;;44152:225::o;11479:151::-;-1:-1:-1;;;;;11595:18:0;;;11568:7;11595:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11479:151::o;27832:189::-;27888:9;27996:17;;27977:16;;27963:10;10644:2;;10561:93;27963:10;27957:16;;:2;:16;:::i;:::-;27935:18;:16;:18::i;:::-;27931:22;;:1;:22;:::i;:::-;27930:43;;;;:::i;:::-;27929:64;;;;:::i;51767:387::-;3705:10;51890:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;51880:41;;;;;;51868:8;:53;;51860:95;;;;-1:-1:-1;;;51860:95:0;;19766:2:1;51860:95:0;;;19748:21:1;19805:2;19785:18;;;19778:30;19844:31;19824:18;;;19817:59;19893:18;;51860:95:0;19564:353:1;51860:95:0;51974:21;;;;:11;:21;;;;;;-1:-1:-1;;;;;51974:21:0;3705:10;51974:37;51966:70;;;;-1:-1:-1;;;51966:70:0;;;;;;;:::i;:::-;52088:16;10644:2;52088;:16;:::i;:::-;52079:25;;:6;:25;:::i;:::-;52047:28;;;;:18;:28;;;;;;;;:58;;;;52116:13;:23;;;;;:30;;-1:-1:-1;;52116:30:0;52142:4;52116:30;;;-1:-1:-1;51767:387:0:o;50832:213::-;50931:21;;;;:11;:21;;;;;;-1:-1:-1;;;;;50931:21:0;3705:10;50931:37;50923:70;;;;-1:-1:-1;;;50923:70:0;;;;;;;:::i;:::-;51004:21;;;;:11;:21;;;;;;:33;;-1:-1:-1;;;;;;51004:33:0;-1:-1:-1;;;;;51004:33:0;;;;;;;;;50832:213::o;23772:49::-;;;;;;;;;;;;;;;;:::i;49931:291::-;2345:21;:19;:21::i;:::-;50045::::1;::::0;;;:11:::1;:21;::::0;;;;;-1:-1:-1;;;;;50045:21:0::1;3705:10:::0;-1:-1:-1;;;;;50029:37:0::1;;50021:72;;;::::0;-1:-1:-1;;;50021:72:0;;16433:2:1;50021:72:0::1;::::0;::::1;16415:21:1::0;16472:2;16452:18;;;16445:30;-1:-1:-1;;;16491:18:1;;;16484:52;16553:18;;50021:72:0::1;16231:346:1::0;50021:72:0::1;50112:21;::::0;;;:11:::1;:21;::::0;;;;;::::1;;:29;;:21:::0;:29:::1;;50104:62;;;::::0;-1:-1:-1;;;50104:62:0;;12336:2:1;50104:62:0::1;::::0;::::1;12318:21:1::0;12375:2;12355:18;;;12348:30;-1:-1:-1;;;12394:18:1;;;12387:50;12454:18;;50104:62:0::1;12134:344:1::0;50104:62:0::1;50177:29;::::0;;;:11:::1;:29;::::0;;;;:37;;-1:-1:-1;;50177:37:0::1;50210:4;50177:37;::::0;;2389:20;1783:1;2909:7;:22;2726:213;34900:486;2345:21;:19;:21::i;:::-;35037:16:::1;10644:2:::0;35037::::1;:16;:::i;:::-;35028:25;::::0;:6;:25:::1;:::i;:::-;34990:34;3705:10:::0;40699:20:::1;:34::i;34990:::-;:64;34982:105;;;;-1:-1:-1::0;;;34982:105:0::1;;;;;;;:::i;:::-;35098:87;3705:10:::0;35167:17:::1;::::0;35148:16:::1;::::0;10644:2;35128:16:::1;::::0;:2:::1;:16;:::i;:::-;35119:25;::::0;:6;:25:::1;:::i;35098:87::-;35266:17;::::0;35247:16:::1;::::0;35227::::1;10644:2:::0;35227::::1;:16;:::i;:::-;35218:25;::::0;:6;:25:::1;:::i;:::-;35217:46;;;;:::i;:::-;:66;;;;:::i;:::-;35196:17;;:87;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;35294:84:0::1;::::0;-1:-1:-1;3705:10:0;35360:16:::1;10644:2:::0;35360::::1;:16;:::i;:::-;35351:25;::::0;:6;:25:::1;:::i;:::-;35313:34;3705:10:::0;40699:20:::1;:34::i;44886:408::-:0;2345:21;:19;:21::i;:::-;45046:16:::1;10644:2:::0;45046::::1;:16;:::i;:::-;45037:25;::::0;:6;:25:::1;:::i;:::-;44999:34;3705:10:::0;40699:20:::1;:34::i;44999:::-;:64;44991:100;;;::::0;-1:-1:-1;;;44991:100:0;;15724:2:1;44991:100:0::1;::::0;::::1;15706:21:1::0;15763:2;15743:18;;;15736:30;-1:-1:-1;;;15782:18:1;;;15775:53;15845:18;;44991:100:0::1;15522:347:1::0;44991:100:0::1;45102:76;45107:8:::0;45160:16:::1;10644:2:::0;45160::::1;:16;:::i;:::-;45151:25;::::0;:6;:25:::1;:::i;:::-;45117:30;45138:8;45117:20;:30::i;45102:76::-;45189:97;3705:10:::0;45281:3:::1;45256:16;10644:2:::0;45256::::1;:16;:::i;:::-;45247:25;::::0;:6;:25:::1;:::i;:::-;45246:32;::::0;45276:2:::1;45246:32;:::i;:::-;:38;;;;:::i;42885:119::-:0;42992:4;42956:11;:25;3705:10;42968:12;3625:98;17801:380;-1:-1:-1;;;;;17937:19:0;;17929:68;;;;-1:-1:-1;;;17929:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18016:21:0;;18008:68;;;;-1:-1:-1;;;18008:68:0;;13492:2:1;18008:68:0;;;13474:21:1;13531:2;13511:18;;;13504:30;13570:34;13550:18;;;13543:62;-1:-1:-1;;;13621:18:1;;;13614:32;13663:19;;18008:68:0;13290:398:1;18008:68:0;-1:-1:-1;;;;;18089:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18141:32;;11873:25:1;;;18141:32:0;;11846:18:1;18141:32:0;;;;;;;17801:380;;;:::o;18472:453::-;18607:24;18634:25;18644:5;18651:7;18634:9;:25::i;:::-;18607:52;;-1:-1:-1;;18674:16:0;:37;18670:248;;18756:6;18736:16;:26;;18728:68;;;;-1:-1:-1;;;18728:68:0;;14605:2:1;18728:68:0;;;14587:21:1;14644:2;14624:18;;;14617:30;14683:31;14663:18;;;14656:59;14732:18;;18728:68:0;14403:353:1;18728:68:0;18840:51;18849:5;18856:7;18884:6;18865:16;:25;18840:8;:51::i;15082:671::-;-1:-1:-1;;;;;15213:18:0;;15205:68;;;;-1:-1:-1;;;15205:68:0;;18606:2:1;15205:68:0;;;18588:21:1;18645:2;18625:18;;;18618:30;18684:34;18664:18;;;18657:62;-1:-1:-1;;;18735:18:1;;;18728:35;18780:19;;15205:68:0;18404:401:1;15205:68:0;-1:-1:-1;;;;;15292:16:0;;15284:64;;;;-1:-1:-1;;;15284:64:0;;12685:2:1;15284:64:0;;;12667:21:1;12724:2;12704:18;;;12697:30;12763:34;12743:18;;;12736:62;-1:-1:-1;;;12814:18:1;;;12807:33;12857:19;;15284:64:0;12483:399:1;15284:64:0;-1:-1:-1;;;;;15434:15:0;;15412:19;15434:15;;;;;;;;;;;15468:21;;;;15460:72;;;;-1:-1:-1;;;15460:72:0;;14963:2:1;15460:72:0;;;14945:21:1;15002:2;14982:18;;;14975:30;15041:34;15021:18;;;15014:62;-1:-1:-1;;;15092:18:1;;;15085:36;15138:19;;15460:72:0;14761:402:1;15460:72:0;-1:-1:-1;;;;;15568:15:0;;;:9;:15;;;;;;;;;;;15586:20;;;15568:38;;15628:13;;;;;;;;:23;;15600:6;;15568:9;15628:23;;15600:6;;15628:23;:::i;:::-;;;;;;;;15684:2;-1:-1:-1;;;;;15669:26:0;15678:4;-1:-1:-1;;;;;15669:26:0;;15688:6;15669:26;;;;11873:25:1;;11861:2;11846:18;;11727:177;15669:26:0;;;;;;;;15708:37;45538:283;29015:148;-1:-1:-1;;;;;29126:23:0;;;29088:7;29126:23;;;:15;:23;;;;;;;;29150:4;;;;;29126:29;;;;;;;;29015:148::o;33404:165::-;33490:7;-1:-1:-1;;;;;25116:20:0;;25108:69;;;;-1:-1:-1;;;25108:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;33522:24:0;;::::1;;::::0;;;:15:::1;:24;::::0;;;;;;;33547:4:::1;::::0;;;::::1;33522:30:::0;;;;;;;;;:39;33404:165::o;16772:591::-;-1:-1:-1;;;;;16856:21:0;;16848:67;;;;-1:-1:-1;;;16848:67:0;;17849:2:1;16848:67:0;;;17831:21:1;17888:2;17868:18;;;17861:30;17927:34;17907:18;;;17900:62;-1:-1:-1;;;17978:18:1;;;17971:31;18019:19;;16848:67:0;17647:397:1;16848:67:0;-1:-1:-1;;;;;17015:18:0;;16990:22;17015:18;;;;;;;;;;;17052:24;;;;17044:71;;;;-1:-1:-1;;;17044:71:0;;13089:2:1;17044:71:0;;;13071:21:1;13128:2;13108:18;;;13101:30;13167:34;13147:18;;;13140:62;-1:-1:-1;;;13218:18:1;;;13211:32;13260:19;;17044:71:0;12887:398:1;17044:71:0;-1:-1:-1;;;;;17151:18:0;;:9;:18;;;;;;;;;;17172:23;;;17151:44;;17217:12;:22;;17189:6;;17151:9;17217:22;;17189:6;;17217:22;:::i;:::-;;;;-1:-1:-1;;17257:37:0;;11873:25:1;;;17283:1:0;;-1:-1:-1;;;;;17257:37:0;;;;;11861:2:1;11846:18;17257:37:0;;;;;;;45538:283;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;14:531:1:-;57:5;110:3;103:4;95:6;91:17;87:27;77:55;;128:1;125;118:12;77:55;164:6;151:20;190:18;186:2;183:26;180:52;;;212:18;;:::i;:::-;256:55;299:2;280:13;;-1:-1:-1;;276:27:1;305:4;272:38;256:55;:::i;:::-;336:2;327:7;320:19;382:3;375:4;370:2;362:6;358:15;354:26;351:35;348:55;;;399:1;396;389:12;348:55;464:2;457:4;449:6;445:17;438:4;429:7;425:18;412:55;512:1;487:16;;;505:4;483:27;476:38;;;;491:7;14:531;-1:-1:-1;;;14:531:1:o;550:247::-;609:6;662:2;650:9;641:7;637:23;633:32;630:52;;;678:1;675;668:12;630:52;717:9;704:23;736:31;761:5;736:31;:::i;:::-;786:5;550:247;-1:-1:-1;;;550:247:1:o;1062:388::-;1130:6;1138;1191:2;1179:9;1170:7;1166:23;1162:32;1159:52;;;1207:1;1204;1197:12;1159:52;1246:9;1233:23;1265:31;1290:5;1265:31;:::i;:::-;1315:5;-1:-1:-1;1372:2:1;1357:18;;1344:32;1385:33;1344:32;1385:33;:::i;:::-;1437:7;1427:17;;;1062:388;;;;;:::o;1455:456::-;1532:6;1540;1548;1601:2;1589:9;1580:7;1576:23;1572:32;1569:52;;;1617:1;1614;1607:12;1569:52;1656:9;1643:23;1675:31;1700:5;1675:31;:::i;:::-;1725:5;-1:-1:-1;1782:2:1;1767:18;;1754:32;1795:33;1754:32;1795:33;:::i;:::-;1455:456;;1847:7;;-1:-1:-1;;;1901:2:1;1886:18;;;;1873:32;;1455:456::o;1916:457::-;1994:6;2002;2055:2;2043:9;2034:7;2030:23;2026:32;2023:52;;;2071:1;2068;2061:12;2023:52;2110:9;2097:23;2129:31;2154:5;2129:31;:::i;:::-;2179:5;-1:-1:-1;2235:2:1;2220:18;;2207:32;2262:18;2251:30;;2248:50;;;2294:1;2291;2284:12;2248:50;2317;2359:7;2350:6;2339:9;2335:22;2317:50;:::i;:::-;2307:60;;;1916:457;;;;;:::o;2378:315::-;2446:6;2454;2507:2;2495:9;2486:7;2482:23;2478:32;2475:52;;;2523:1;2520;2513:12;2475:52;2562:9;2549:23;2581:31;2606:5;2581:31;:::i;:::-;2631:5;2683:2;2668:18;;;;2655:32;;-1:-1:-1;;;2378:315:1:o;2698:1047::-;2791:6;2799;2852:2;2840:9;2831:7;2827:23;2823:32;2820:52;;;2868:1;2865;2858:12;2820:52;2908:9;2895:23;2941:18;2933:6;2930:30;2927:50;;;2973:1;2970;2963:12;2927:50;2996:22;;3049:4;3041:13;;3037:27;-1:-1:-1;3027:55:1;;3078:1;3075;3068:12;3027:55;3114:2;3101:16;3136:4;3160:60;3176:43;3216:2;3176:43;:::i;:::-;3160:60;:::i;:::-;3242:3;3266:2;3261:3;3254:15;3294:2;3289:3;3285:12;3278:19;;3325:2;3321;3317:11;3373:7;3368:2;3362;3359:1;3355:10;3351:2;3347:19;3343:28;3340:41;3337:61;;;3394:1;3391;3384:12;3337:61;3416:1;3407:10;;3426:238;3440:2;3437:1;3434:9;3426:238;;;3511:3;3498:17;3528:31;3553:5;3528:31;:::i;:::-;3572:18;;3458:1;3451:9;;;;;3610:12;;;;3642;;3426:238;;;-1:-1:-1;3683:5:1;3720:18;;;;3707:32;;-1:-1:-1;;;;;;2698:1047:1:o;3750:1125::-;3853:6;3861;3914:2;3902:9;3893:7;3889:23;3885:32;3882:52;;;3930:1;3927;3920:12;3882:52;3970:9;3957:23;3999:18;4040:2;4032:6;4029:14;4026:34;;;4056:1;4053;4046:12;4026:34;4094:6;4083:9;4079:22;4069:32;;4139:7;4132:4;4128:2;4124:13;4120:27;4110:55;;4161:1;4158;4151:12;4110:55;4197:2;4184:16;4219:4;4243:60;4259:43;4299:2;4259:43;:::i;4243:60::-;4325:3;4349:2;4344:3;4337:15;4377:2;4372:3;4368:12;4361:19;;4408:2;4404;4400:11;4456:7;4451:2;4445;4442:1;4438:10;4434:2;4430:19;4426:28;4423:41;4420:61;;;4477:1;4474;4467:12;4420:61;4499:1;4490:10;;4509:163;4523:2;4520:1;4517:9;4509:163;;;4580:17;;4568:30;;4541:1;4534:9;;;;;4618:12;;;;4650;;4509:163;;;-1:-1:-1;4691:5:1;-1:-1:-1;;4734:18:1;;4721:32;;-1:-1:-1;;4765:16:1;;;4762:36;;;4794:1;4791;4784:12;4762:36;;4817:52;4861:7;4850:8;4839:9;4835:24;4817:52;:::i;4880:180::-;4939:6;4992:2;4980:9;4971:7;4967:23;4963:32;4960:52;;;5008:1;5005;4998:12;4960:52;-1:-1:-1;5031:23:1;;4880:180;-1:-1:-1;4880:180:1:o;5065:315::-;5133:6;5141;5194:2;5182:9;5173:7;5169:23;5165:32;5162:52;;;5210:1;5207;5200:12;5162:52;5246:9;5233:23;5223:33;;5306:2;5295:9;5291:18;5278:32;5319:31;5344:5;5319:31;:::i;5385:390::-;5463:6;5471;5524:2;5512:9;5503:7;5499:23;5495:32;5492:52;;;5540:1;5537;5530:12;5492:52;5576:9;5563:23;5553:33;;5637:2;5626:9;5622:18;5609:32;5664:18;5656:6;5653:30;5650:50;;;5696:1;5693;5686:12;5780:248;5848:6;5856;5909:2;5897:9;5888:7;5884:23;5880:32;5877:52;;;5925:1;5922;5915:12;5877:52;-1:-1:-1;;5948:23:1;;;6018:2;6003:18;;;5990:32;;-1:-1:-1;5780:248:1:o;6033:743::-;6140:6;6148;6156;6209:2;6197:9;6188:7;6184:23;6180:32;6177:52;;;6225:1;6222;6215:12;6177:52;6265:9;6252:23;6294:18;6335:2;6327:6;6324:14;6321:34;;;6351:1;6348;6341:12;6321:34;6374:50;6416:7;6407:6;6396:9;6392:22;6374:50;:::i;:::-;6364:60;;6477:2;6466:9;6462:18;6449:32;6433:48;;6506:2;6496:8;6493:16;6490:36;;;6522:1;6519;6512:12;6490:36;6545:52;6589:7;6578:8;6567:9;6563:24;6545:52;:::i;:::-;6535:62;;6650:2;6639:9;6635:18;6622:32;6606:48;;6679:2;6669:8;6666:16;6663:36;;;6695:1;6692;6685:12;6663:36;;6718:52;6762:7;6751:8;6740:9;6736:24;6718:52;:::i;:::-;6708:62;;;6033:743;;;;;:::o;6966:472::-;7008:3;7046:5;7040:12;7073:6;7068:3;7061:19;7098:1;7108:162;7122:6;7119:1;7116:13;7108:162;;;7184:4;7240:13;;;7236:22;;7230:29;7212:11;;;7208:20;;7201:59;7137:12;7108:162;;;7288:6;7285:1;7282:13;7279:87;;;7354:1;7347:4;7338:6;7333:3;7329:16;7325:27;7318:38;7279:87;-1:-1:-1;7420:2:1;7399:15;-1:-1:-1;;7395:29:1;7386:39;;;;7427:4;7382:50;;6966:472;-1:-1:-1;;6966:472:1:o;7443:229::-;7592:2;7588:15;;;;-1:-1:-1;;;;;;7584:53:1;7572:66;;7663:2;7654:12;;7443:229::o;7677:333::-;-1:-1:-1;;;;;;7904:2:1;7900:15;;;7896:24;;7884:37;;7955:15;;;;7951:24;7946:2;7937:12;;7930:46;8001:2;7992:12;;7677:333::o;8709:388::-;8943:1;8939;8934:3;8930:11;8926:19;8918:6;8914:32;8903:9;8896:51;8983:6;8978:2;8967:9;8963:18;8956:34;9026:2;9021;9010:9;9006:18;8999:30;8877:4;9046:45;9087:2;9076:9;9072:18;9064:6;9046:45;:::i;:::-;9038:53;8709:388;-1:-1:-1;;;;;8709:388:1:o;9102:658::-;9273:2;9325:21;;;9395:13;;9298:18;;;9417:22;;;9244:4;;9273:2;9496:15;;;;9470:2;9455:18;;;9244:4;9539:195;9553:6;9550:1;9547:13;9539:195;;;9618:13;;-1:-1:-1;;;;;9614:39:1;9602:52;;9709:15;;;;9674:12;;;;9650:1;9568:9;9539:195;;;-1:-1:-1;9751:3:1;;9102:658;-1:-1:-1;;;;;;9102:658:1:o;9765:632::-;9936:2;9988:21;;;10058:13;;9961:18;;;10080:22;;;9907:4;;9936:2;10159:15;;;;10133:2;10118:18;;;9907:4;10202:169;10216:6;10213:1;10210:13;10202:169;;;10277:13;;10265:26;;10346:15;;;;10311:12;;;;10238:1;10231:9;10202:169;;10402:1128;10586:4;10615:2;10655;10644:9;10640:18;10685:2;10674:9;10667:21;10708:6;10743;10737:13;10774:6;10766;10759:22;10800:2;10790:12;;10833:2;10822:9;10818:18;10811:25;;10895:2;10885:6;10882:1;10878:14;10867:9;10863:30;10859:39;10933:2;10925:6;10921:15;10954:1;10964:537;10978:6;10975:1;10972:13;10964:537;;;11043:22;;;-1:-1:-1;;11039:36:1;11027:49;;11099:13;;11171:9;;-1:-1:-1;;;;;11167:35:1;11152:51;;11246:11;;;11240:18;11223:15;;;11216:43;11298:11;;11292:18;11135:4;11330:15;;;11323:27;;;11373:48;11405:15;;;11292:18;11373:48;:::i;:::-;11479:12;;;;11363:58;-1:-1:-1;;;11444:15:1;;;;11000:1;10993:9;10964:537;;;-1:-1:-1;11518:6:1;;10402:1128;-1:-1:-1;;;;;;;;10402:1128:1:o;11909:220::-;12058:2;12047:9;12040:21;12021:4;12078:45;12119:2;12108:9;12104:18;12096:6;12078:45;:::i;14044:354::-;14246:2;14228:21;;;14285:2;14265:18;;;14258:30;14324:32;14319:2;14304:18;;14297:60;14389:2;14374:18;;14044:354::o;15874:352::-;16076:2;16058:21;;;16115:2;16095:18;;;16088:30;16154;16149:2;16134:18;;16127:58;16217:2;16202:18;;15874:352::o;17299:343::-;17501:2;17483:21;;;17540:2;17520:18;;;17513:30;-1:-1:-1;;;17574:2:1;17559:18;;17552:49;17633:2;17618:18;;17299:343::o;18810:400::-;19012:2;18994:21;;;19051:2;19031:18;;;19024:30;19090:34;19085:2;19070:18;;19063:62;-1:-1:-1;;;19156:2:1;19141:18;;19134:34;19200:3;19185:19;;18810:400::o;19215:344::-;19417:2;19399:21;;;19456:2;19436:18;;;19429:30;-1:-1:-1;;;19490:2:1;19475:18;;19468:50;19550:2;19535:18;;19215:344::o;20282:::-;20484:2;20466:21;;;20523:2;20503:18;;;20496:30;-1:-1:-1;;;20557:2:1;20542:18;;20535:50;20617:2;20602:18;;20282:344::o;22117:275::-;22188:2;22182:9;22253:2;22234:13;;-1:-1:-1;;22230:27:1;22218:40;;22288:18;22273:34;;22309:22;;;22270:62;22267:88;;;22335:18;;:::i;:::-;22371:2;22364:22;22117:275;;-1:-1:-1;22117:275:1:o;22397:183::-;22457:4;22490:18;22482:6;22479:30;22476:56;;;22512:18;;:::i;:::-;-1:-1:-1;22557:1:1;22553:14;22569:4;22549:25;;22397:183::o;22585:128::-;22625:3;22656:1;22652:6;22649:1;22646:13;22643:39;;;22662:18;;:::i;:::-;-1:-1:-1;22698:9:1;;22585:128::o;22718:217::-;22758:1;22784;22774:132;;22828:10;22823:3;22819:20;22816:1;22809:31;22863:4;22860:1;22853:15;22891:4;22888:1;22881:15;22774:132;-1:-1:-1;22920:9:1;;22718:217::o;22940:422::-;23029:1;23072:5;23029:1;23086:270;23107:7;23097:8;23094:21;23086:270;;;23166:4;23162:1;23158:6;23154:17;23148:4;23145:27;23142:53;;;23175:18;;:::i;:::-;23225:7;23215:8;23211:22;23208:55;;;23245:16;;;;23208:55;23324:22;;;;23284:15;;;;23086:270;;;23090:3;22940:422;;;;;:::o;23367:140::-;23425:5;23454:47;23495:4;23485:8;23481:19;23475:4;23561:5;23591:8;23581:80;;-1:-1:-1;23632:1:1;23646:5;;23581:80;23680:4;23670:76;;-1:-1:-1;23717:1:1;23731:5;;23670:76;23762:4;23780:1;23775:59;;;;23848:1;23843:130;;;;23755:218;;23775:59;23805:1;23796:10;;23819:5;;;23843:130;23880:3;23870:8;23867:17;23864:43;;;23887:18;;:::i;:::-;-1:-1:-1;;23943:1:1;23929:16;;23958:5;;23755:218;;24057:2;24047:8;24044:16;24038:3;24032:4;24029:13;24025:36;24019:2;24009:8;24006:16;24001:2;23995:4;23992:12;23988:35;23985:77;23982:159;;;-1:-1:-1;24094:19:1;;;24126:5;;23982:159;24173:34;24198:8;24192:4;24173:34;:::i;:::-;24243:6;24239:1;24235:6;24231:19;24222:7;24219:32;24216:58;;;24254:18;;:::i;:::-;24292:20;;23512:806;-1:-1:-1;;;23512:806:1:o;24323:168::-;24363:7;24429:1;24425;24421:6;24417:14;24414:1;24411:21;24406:1;24399:9;24392:17;24388:45;24385:71;;;24436:18;;:::i;:::-;-1:-1:-1;24476:9:1;;24323:168::o;24496:125::-;24536:4;24564:1;24561;24558:8;24555:34;;;24569:18;;:::i;:::-;-1:-1:-1;24606:9:1;;24496:125::o;24626:136::-;24665:3;24693:5;24683:39;;24702:18;;:::i;:::-;-1:-1:-1;;;24738:18:1;;24626:136::o;24767:380::-;24846:1;24842:12;;;;24889;;;24910:61;;24964:4;24956:6;24952:17;24942:27;;24910:61;25017:2;25009:6;25006:14;24986:18;24983:38;24980:161;;;25063:10;25058:3;25054:20;25051:1;25044:31;25098:4;25095:1;25088:15;25126:4;25123:1;25116:15;24980:161;;24767:380;;;:::o;25152:135::-;25191:3;-1:-1:-1;;25212:17:1;;25209:43;;;25232:18;;:::i;:::-;-1:-1:-1;25279:1:1;25268:13;;25152:135::o;25292:127::-;25353:10;25348:3;25344:20;25341:1;25334:31;25384:4;25381:1;25374:15;25408:4;25405:1;25398:15;25424:127;25485:10;25480:3;25476:20;25473:1;25466:31;25516:4;25513:1;25506:15;25540:4;25537:1;25530:15;25556:127;25617:10;25612:3;25608:20;25605:1;25598:31;25648:4;25645:1;25638:15;25672:4;25669:1;25662:15;25688:131;-1:-1:-1;;;;;25763:31:1;;25753:42;;25743:70;;25809:1;25806;25799:12

Swarm Source

ipfs://c5c3dec1ac8f1f437d456c149f153c1724964ecdd0f06baedacaaf2308af5565
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.