ETH Price: $2,835.07 (+9.69%)
Gas: 7.85 Gwei
 

Overview

Max Total Supply

2,325

Holders

758

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
doombaby.eth
0x15757b1c18c074078d27dae02d8f870f15862395
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

ALL-STAR Collection (ERC-1155) is part of M101 Shelter Metaverse. Our artist created M101 tributes to famous artists and celebrities that you can mint for free if you’re M101 NFT holder.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
M101Allstars

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-10
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC165 {

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IERC1155Receiver is IERC165 {

    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

interface IERC1155 is IERC165 {

    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    event URI(string value, uint256 indexed id);

    function balanceOf(address account, uint256 id) external view returns (uint256);

    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    function setApprovalForAll(address operator, bool approved) external;

    function isApprovedForAll(address account, address operator) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

interface IERC1155MetadataURI is IERC1155 {

    function uri(uint256 id) external view returns (string memory);
}

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

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

    mapping(address => mapping(address => bool)) private _operatorApprovals;

    string private _uri;

    constructor(string memory uri_) {
        _setURI(uri_);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not an owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not an owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

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

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

contract M101Allstars is ERC1155, Ownable {

    uint constant MAX_ALLSTARS = 50;
    struct Allstar{
        uint common_price;
        uint holders_price;
        uint max_supply;
        uint total_supply;
        string uri;
        bool active;
    }
    mapping (uint => Allstar) private allstars;

    M101 public constant M101CONTRACT = M101(0x10A0cF0Fd3B9b2d575D78130B29d61252313423E);

    constructor() public ERC1155("") {
        
    }

    function addAllstar(uint _id, uint _common_price, uint _holders_price, uint _max_supply, string memory _uri) public onlyOwner {
        require(_id < MAX_ALLSTARS, "Quantity limit reached");
        require(getMaxSupply(_id) == 0, "Token is already exist");
        allstars[_id].common_price = _common_price;
        allstars[_id].holders_price = _holders_price;
        allstars[_id].max_supply = _max_supply;
        allstars[_id].uri = _uri;
    }

    function active(uint _id, bool _active) public onlyOwner {
        require(getMaxSupply(_id) != 0, "Token does not exist");
        allstars[_id].active = _active;
    }

    function getPrice(uint _id, address _to) public view returns(uint256){
        require(getMaxSupply(_id) != 0, "Token does not exist");
        uint256 _price;
        if (M101CONTRACT.balanceOf(_to) != 0){
            _price = allstars[_id].holders_price;
        } else {
            _price = allstars[_id].common_price;
        }
        return _price;
    }

    function getMaxSupply(uint _id) public view returns(uint256){
        return allstars[_id].max_supply;
    }

    function getTotalSupply(uint _id) public view returns(uint256){
        require(getMaxSupply(_id) != 0, "Token does not exist");
        return allstars[_id].total_supply;
    }

    function isActive(uint _id) public view returns(bool){
        require(getMaxSupply(_id) != 0, "Token does not exist");
        return allstars[_id].active;
    }

    function mint(address _to, uint _count, uint _id) public payable {
        require(getTotalSupply(_id) + _count <= getMaxSupply(_id), "Total supply limit reached or token does not exist");
        if (msg.sender != owner()){
            require(isActive(_id), "Sale has not started");
            require(balanceOf(_to, _id) == 0, "Address already hold this token");
            require(_count == 1, "Max 1 token");
            require(msg.value == getPrice(_id, _to) * _count, "the Value is lower then the Price");
        }
        _mint(_to, _id, _count, "");
        allstars[_id].total_supply += _count;
    }

    function uri(uint256 _id) public view virtual override returns (string memory) {
        return allstars[_id].uri;
    }

    function withdrawAll() public payable onlyOwner {
        require(payable(msg.sender).send(address(this).balance));
    }

}

interface M101{
    function balanceOf(address owner) external view returns (uint256 balance);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"M101CONTRACT","outputs":[{"internalType":"contract M101","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_active","type":"bool"}],"name":"active","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_common_price","type":"uint256"},{"internalType":"uint256","name":"_holders_price","type":"uint256"},{"internalType":"uint256","name":"_max_supply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"addAllstar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60806040523480156200001157600080fd5b506040805160208101909152600081526200002c816200003e565b50620000383362000057565b6200018c565b805162000053906002906020840190620000a9565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000b7906200014f565b90600052602060002090601f016020900481019282620000db576000855562000126565b82601f10620000f657805160ff191683800117855562000126565b8280016001018555821562000126579182015b828111156200012657825182559160200191906001019062000109565b506200013492915062000138565b5090565b5b8082111562000134576000815560010162000139565b600181811c908216806200016457607f821691505b602082108114156200018657634e487b7160e01b600052602260045260246000fd5b50919050565b61204d806200019c6000396000f3fe60806040526004361061011e5760003560e01c8063853828b6116100a0578063daa2a43511610064578063daa2a4351461033c578063e985e9c51461035c578063f242432a146103a5578063f2fde38b146103c5578063faf5f6cc146103e557600080fd5b8063853828b61461029a5780638da5cb5b146102a257806392ab723e146102d4578063a22cb465146102f4578063bdf6ce611461031457600080fd5b80632eb2c2d6116100e75780632eb2c2d6146101e85780634e1273f4146102085780635e495d7414610235578063715018a61461026557806382afd23b1461027a57600080fd5b8062fdd58e1461012357806301ffc9a7146101565780630e89341c14610186578063156e29f6146101b35780632b57cfbb146101c8575b600080fd5b34801561012f57600080fd5b5061014361013e366004611937565b610405565b6040519081526020015b60405180910390f35b34801561016257600080fd5b50610176610171366004611a65565b61049c565b604051901515815260200161014d565b34801561019257600080fd5b506101a66101a1366004611a9f565b6104ee565b60405161014d9190611cee565b6101c66101c1366004611961565b610596565b005b3480156101d457600080fd5b506101436101e3366004611ad1565b6107cb565b3480156101f457600080fd5b506101c66102033660046117fe565b6108bc565b34801561021457600080fd5b50610228610223366004611994565b610956565b60405161014d9190611cad565b34801561024157600080fd5b50610143610250366004611a9f565b60009081526004602052604090206002015490565b34801561027157600080fd5b506101c6610a80565b34801561028657600080fd5b50610176610295366004611a9f565b610ab6565b6101c6610afd565b3480156102ae57600080fd5b506003546001600160a01b03165b6040516001600160a01b03909116815260200161014d565b3480156102e057600080fd5b506101436102ef366004611a9f565b610b4b565b34801561030057600080fd5b506101c661030f36600461190d565b610b8f565b34801561032057600080fd5b506102bc7310a0cf0fd3b9b2d575d78130b29d61252313423e81565b34801561034857600080fd5b506101c6610357366004611af4565b610b9e565b34801561036857600080fd5b506101766103773660046117cb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156103b157600080fd5b506101c66103c03660046118a8565b610c19565b3480156103d157600080fd5b506101c66103e03660046117b0565b610ca3565b3480156103f157600080fd5b506101c6610400366004611b17565b610d3e565b60006001600160a01b0383166104765760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806104cd57506001600160e01b031982166303a24d0760e21b145b806104e857506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060046000838152602001908152602001600020600401805461051190611e96565b80601f016020809104026020016040519081016040528092919081815260200182805461053d90611e96565b801561058a5780601f1061055f5761010080835404028352916020019161058a565b820191906000526020600020905b81548152906001019060200180831161056d57829003601f168201915b50505050509050919050565b600081815260046020526040902060020154826105b283610b4b565b6105bc9190611e5f565b11156106255760405162461bcd60e51b815260206004820152603260248201527f546f74616c20737570706c79206c696d69742072656163686564206f7220746f6044820152711ad95b88191bd95cc81b9bdd08195e1a5cdd60721b606482015260840161046d565b6003546001600160a01b031633146107855761064081610ab6565b6106835760405162461bcd60e51b815260206004820152601460248201527314d85b19481a185cc81b9bdd081cdd185c9d195960621b604482015260640161046d565b61068d8382610405565b156106da5760405162461bcd60e51b815260206004820152601f60248201527f4164647265737320616c726561647920686f6c64207468697320746f6b656e00604482015260640161046d565b816001146107185760405162461bcd60e51b815260206004820152600b60248201526a26b0bc1018903a37b5b2b760a91b604482015260640161046d565b8161072382856107cb565b61072d9190611e77565b34146107855760405162461bcd60e51b815260206004820152602160248201527f7468652056616c7565206973206c6f776572207468656e2074686520507269636044820152606560f81b606482015260840161046d565b6107a083828460405180602001604052806000815250610e47565b600081815260046020526040812060030180548492906107c1908490611e5f565b9091555050505050565b6000828152600460205260408120600201546107f95760405162461bcd60e51b815260040161046d90611d49565b6040516370a0823160e01b81526001600160a01b03831660048201526000907310a0cf0fd3b9b2d575d78130b29d61252313423e906370a082319060240160206040518083038186803b15801561084f57600080fd5b505afa158015610863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190611ab8565b156108a457506000838152600460205260409020600101546108b5565b506000838152600460205260409020545b9392505050565b6001600160a01b0385163314806108d857506108d88533610377565b6109425760405162461bcd60e51b815260206004820152603560248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604482015274185b881bdddb995c881b9bdc88185c1c1c9bdd9959605a1b606482015260840161046d565b61094f8585858585610f51565b5050505050565b606081518351146109bb5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161046d565b6000835167ffffffffffffffff8111156109d7576109d7611f45565b604051908082528060200260200182016040528015610a00578160200160208202803683370190505b50905060005b8451811015610a7857610a4b858281518110610a2457610a24611f2f565b6020026020010151858381518110610a3e57610a3e611f2f565b6020026020010151610405565b828281518110610a5d57610a5d611f2f565b6020908102919091010152610a7181611efe565b9050610a06565b509392505050565b6003546001600160a01b03163314610aaa5760405162461bcd60e51b815260040161046d90611e06565b610ab46000611126565b565b600081815260046020526040812060020154610ae45760405162461bcd60e51b815260040161046d90611d49565b5060009081526004602052604090206005015460ff1690565b6003546001600160a01b03163314610b275760405162461bcd60e51b815260040161046d90611e06565b60405133904780156108fc02916000818181858888f19350505050610ab457600080fd5b600081815260046020526040812060020154610b795760405162461bcd60e51b815260040161046d90611d49565b5060009081526004602052604090206003015490565b610b9a338383611178565b5050565b6003546001600160a01b03163314610bc85760405162461bcd60e51b815260040161046d90611e06565b600082815260046020526040902060020154610bf65760405162461bcd60e51b815260040161046d90611d49565b600091825260046020526040909120600501805460ff1916911515919091179055565b6001600160a01b038516331480610c355750610c358533610377565b610c965760405162461bcd60e51b815260206004820152602c60248201527f455243313135353a2063616c6c6572206973206e6f7420616e206f776e65722060448201526b1b9bdc88185c1c1c9bdd995960a21b606482015260840161046d565b61094f8585858585611259565b6003546001600160a01b03163314610ccd5760405162461bcd60e51b815260040161046d90611e06565b6001600160a01b038116610d325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161046d565b610d3b81611126565b50565b6003546001600160a01b03163314610d685760405162461bcd60e51b815260040161046d90611e06565b60328510610db15760405162461bcd60e51b8152602060048201526016602482015275145d585b9d1a5d1e481b1a5b5a5d081c995858da195960521b604482015260640161046d565b60008581526004602052604090206002015415610e095760405162461bcd60e51b8152602060048201526016602482015275151bdad95b881a5cc8185b1c9958591e48195e1a5cdd60521b604482015260640161046d565b600085815260046020818152604090922086815560018101869055600281018590558351610e3f939190920191908401906115f6565b505050505050565b6001600160a01b038416610ea75760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161046d565b33610ec181600087610eb888611376565b61094f88611376565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610ef1908490611e5f565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461094f816000878787876113c1565b8151835114610fb35760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161046d565b6001600160a01b038416610fd95760405162461bcd60e51b815260040161046d90611d77565b3360005b84518110156110c0576000858281518110610ffa57610ffa611f2f565b60200260200101519050600085838151811061101857611018611f2f565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156110685760405162461bcd60e51b815260040161046d90611dbc565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906110a5908490611e5f565b92505081905550505050806110b990611efe565b9050610fdd565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611110929190611cc0565b60405180910390a4610e3f81878787878761152c565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156111ec5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161046d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661127f5760405162461bcd60e51b815260040161046d90611d77565b3361128f818787610eb888611376565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156112d05760405162461bcd60e51b815260040161046d90611dbc565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061130d908490611e5f565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461136d8288888888886113c1565b50505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106113b0576113b0611f2f565b602090810291909101015292915050565b6001600160a01b0384163b15610e3f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906114059089908990889088908890600401611c68565b602060405180830381600087803b15801561141f57600080fd5b505af192505050801561144f575060408051601f3d908101601f1916820190925261144c91810190611a82565b60015b6114fc5761145b611f5b565b806308c379a014156114955750611470611f77565b8061147b5750611497565b8060405162461bcd60e51b815260040161046d9190611cee565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161046d565b6001600160e01b0319811663f23a6e6160e01b1461136d5760405162461bcd60e51b815260040161046d90611d01565b6001600160a01b0384163b15610e3f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906115709089908990889088908890600401611c0a565b602060405180830381600087803b15801561158a57600080fd5b505af19250505080156115ba575060408051601f3d908101601f191682019092526115b791810190611a82565b60015b6115c65761145b611f5b565b6001600160e01b0319811663bc197c8160e01b1461136d5760405162461bcd60e51b815260040161046d90611d01565b82805461160290611e96565b90600052602060002090601f016020900481019282611624576000855561166a565b82601f1061163d57805160ff191683800117855561166a565b8280016001018555821561166a579182015b8281111561166a57825182559160200191906001019061164f565b5061167692915061167a565b5090565b5b80821115611676576000815560010161167b565b600067ffffffffffffffff8311156116a9576116a9611f45565b6040516116c0601f8501601f191660200182611ed1565b8091508381528484840111156116d557600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461170457600080fd5b919050565b600082601f83011261171a57600080fd5b8135602061172782611e3b565b6040516117348282611ed1565b8381528281019150858301600585901b8701840188101561175457600080fd5b60005b8581101561177357813584529284019290840190600101611757565b5090979650505050505050565b8035801515811461170457600080fd5b600082601f8301126117a157600080fd5b6108b58383356020850161168f565b6000602082840312156117c257600080fd5b6108b5826116ed565b600080604083850312156117de57600080fd5b6117e7836116ed565b91506117f5602084016116ed565b90509250929050565b600080600080600060a0868803121561181657600080fd5b61181f866116ed565b945061182d602087016116ed565b9350604086013567ffffffffffffffff8082111561184a57600080fd5b61185689838a01611709565b9450606088013591508082111561186c57600080fd5b61187889838a01611709565b9350608088013591508082111561188e57600080fd5b5061189b88828901611790565b9150509295509295909350565b600080600080600060a086880312156118c057600080fd5b6118c9866116ed565b94506118d7602087016116ed565b93506040860135925060608601359150608086013567ffffffffffffffff81111561190157600080fd5b61189b88828901611790565b6000806040838503121561192057600080fd5b611929836116ed565b91506117f560208401611780565b6000806040838503121561194a57600080fd5b611953836116ed565b946020939093013593505050565b60008060006060848603121561197657600080fd5b61197f846116ed565b95602085013595506040909401359392505050565b600080604083850312156119a757600080fd5b823567ffffffffffffffff808211156119bf57600080fd5b818501915085601f8301126119d357600080fd5b813560206119e082611e3b565b6040516119ed8282611ed1565b8381528281019150858301600585901b870184018b1015611a0d57600080fd5b600096505b84871015611a3757611a23816116ed565b835260019690960195918301918301611a12565b5096505086013592505080821115611a4e57600080fd5b50611a5b85828601611709565b9150509250929050565b600060208284031215611a7757600080fd5b81356108b581612001565b600060208284031215611a9457600080fd5b81516108b581612001565b600060208284031215611ab157600080fd5b5035919050565b600060208284031215611aca57600080fd5b5051919050565b60008060408385031215611ae457600080fd5b823591506117f5602084016116ed565b60008060408385031215611b0757600080fd5b823591506117f560208401611780565b600080600080600060a08688031215611b2f57600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115611b6257600080fd5b8601601f81018813611b7357600080fd5b61189b8882356020840161168f565b600081518084526020808501945080840160005b83811015611bb257815187529582019590820190600101611b96565b509495945050505050565b6000815180845260005b81811015611be357602081850181015186830182015201611bc7565b81811115611bf5576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611c3690830186611b82565b8281036060840152611c488186611b82565b90508281036080840152611c5c8185611bbd565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611ca290830184611bbd565b979650505050505050565b6020815260006108b56020830184611b82565b604081526000611cd36040830185611b82565b8281036020840152611ce58185611b82565b95945050505050565b6020815260006108b56020830184611bbd565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b602080825260149082015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600067ffffffffffffffff821115611e5557611e55611f45565b5060051b60200190565b60008219821115611e7257611e72611f19565b500190565b6000816000190483118215151615611e9157611e91611f19565b500290565b600181811c90821680611eaa57607f821691505b60208210811415611ecb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611ef757611ef7611f45565b6040525050565b6000600019821415611f1257611f12611f19565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611f745760046000803e5060005160e01c5b90565b600060443d1015611f855790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611fb557505050505090565b8285019150815181811115611fcd5750505050505090565b843d8701016020828501011115611fe75750505050505090565b611ff660208286010187611ed1565b509095945050505050565b6001600160e01b031981168114610d3b57600080fdfea2646970667358221220cc4a9543132e1cca839c77b2ad942ec9881eeebd06136a83230aa1e77b98e9c864736f6c63430008070033

Deployed Bytecode

0x60806040526004361061011e5760003560e01c8063853828b6116100a0578063daa2a43511610064578063daa2a4351461033c578063e985e9c51461035c578063f242432a146103a5578063f2fde38b146103c5578063faf5f6cc146103e557600080fd5b8063853828b61461029a5780638da5cb5b146102a257806392ab723e146102d4578063a22cb465146102f4578063bdf6ce611461031457600080fd5b80632eb2c2d6116100e75780632eb2c2d6146101e85780634e1273f4146102085780635e495d7414610235578063715018a61461026557806382afd23b1461027a57600080fd5b8062fdd58e1461012357806301ffc9a7146101565780630e89341c14610186578063156e29f6146101b35780632b57cfbb146101c8575b600080fd5b34801561012f57600080fd5b5061014361013e366004611937565b610405565b6040519081526020015b60405180910390f35b34801561016257600080fd5b50610176610171366004611a65565b61049c565b604051901515815260200161014d565b34801561019257600080fd5b506101a66101a1366004611a9f565b6104ee565b60405161014d9190611cee565b6101c66101c1366004611961565b610596565b005b3480156101d457600080fd5b506101436101e3366004611ad1565b6107cb565b3480156101f457600080fd5b506101c66102033660046117fe565b6108bc565b34801561021457600080fd5b50610228610223366004611994565b610956565b60405161014d9190611cad565b34801561024157600080fd5b50610143610250366004611a9f565b60009081526004602052604090206002015490565b34801561027157600080fd5b506101c6610a80565b34801561028657600080fd5b50610176610295366004611a9f565b610ab6565b6101c6610afd565b3480156102ae57600080fd5b506003546001600160a01b03165b6040516001600160a01b03909116815260200161014d565b3480156102e057600080fd5b506101436102ef366004611a9f565b610b4b565b34801561030057600080fd5b506101c661030f36600461190d565b610b8f565b34801561032057600080fd5b506102bc7310a0cf0fd3b9b2d575d78130b29d61252313423e81565b34801561034857600080fd5b506101c6610357366004611af4565b610b9e565b34801561036857600080fd5b506101766103773660046117cb565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156103b157600080fd5b506101c66103c03660046118a8565b610c19565b3480156103d157600080fd5b506101c66103e03660046117b0565b610ca3565b3480156103f157600080fd5b506101c6610400366004611b17565b610d3e565b60006001600160a01b0383166104765760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806104cd57506001600160e01b031982166303a24d0760e21b145b806104e857506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060046000838152602001908152602001600020600401805461051190611e96565b80601f016020809104026020016040519081016040528092919081815260200182805461053d90611e96565b801561058a5780601f1061055f5761010080835404028352916020019161058a565b820191906000526020600020905b81548152906001019060200180831161056d57829003601f168201915b50505050509050919050565b600081815260046020526040902060020154826105b283610b4b565b6105bc9190611e5f565b11156106255760405162461bcd60e51b815260206004820152603260248201527f546f74616c20737570706c79206c696d69742072656163686564206f7220746f6044820152711ad95b88191bd95cc81b9bdd08195e1a5cdd60721b606482015260840161046d565b6003546001600160a01b031633146107855761064081610ab6565b6106835760405162461bcd60e51b815260206004820152601460248201527314d85b19481a185cc81b9bdd081cdd185c9d195960621b604482015260640161046d565b61068d8382610405565b156106da5760405162461bcd60e51b815260206004820152601f60248201527f4164647265737320616c726561647920686f6c64207468697320746f6b656e00604482015260640161046d565b816001146107185760405162461bcd60e51b815260206004820152600b60248201526a26b0bc1018903a37b5b2b760a91b604482015260640161046d565b8161072382856107cb565b61072d9190611e77565b34146107855760405162461bcd60e51b815260206004820152602160248201527f7468652056616c7565206973206c6f776572207468656e2074686520507269636044820152606560f81b606482015260840161046d565b6107a083828460405180602001604052806000815250610e47565b600081815260046020526040812060030180548492906107c1908490611e5f565b9091555050505050565b6000828152600460205260408120600201546107f95760405162461bcd60e51b815260040161046d90611d49565b6040516370a0823160e01b81526001600160a01b03831660048201526000907310a0cf0fd3b9b2d575d78130b29d61252313423e906370a082319060240160206040518083038186803b15801561084f57600080fd5b505afa158015610863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108879190611ab8565b156108a457506000838152600460205260409020600101546108b5565b506000838152600460205260409020545b9392505050565b6001600160a01b0385163314806108d857506108d88533610377565b6109425760405162461bcd60e51b815260206004820152603560248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604482015274185b881bdddb995c881b9bdc88185c1c1c9bdd9959605a1b606482015260840161046d565b61094f8585858585610f51565b5050505050565b606081518351146109bb5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161046d565b6000835167ffffffffffffffff8111156109d7576109d7611f45565b604051908082528060200260200182016040528015610a00578160200160208202803683370190505b50905060005b8451811015610a7857610a4b858281518110610a2457610a24611f2f565b6020026020010151858381518110610a3e57610a3e611f2f565b6020026020010151610405565b828281518110610a5d57610a5d611f2f565b6020908102919091010152610a7181611efe565b9050610a06565b509392505050565b6003546001600160a01b03163314610aaa5760405162461bcd60e51b815260040161046d90611e06565b610ab46000611126565b565b600081815260046020526040812060020154610ae45760405162461bcd60e51b815260040161046d90611d49565b5060009081526004602052604090206005015460ff1690565b6003546001600160a01b03163314610b275760405162461bcd60e51b815260040161046d90611e06565b60405133904780156108fc02916000818181858888f19350505050610ab457600080fd5b600081815260046020526040812060020154610b795760405162461bcd60e51b815260040161046d90611d49565b5060009081526004602052604090206003015490565b610b9a338383611178565b5050565b6003546001600160a01b03163314610bc85760405162461bcd60e51b815260040161046d90611e06565b600082815260046020526040902060020154610bf65760405162461bcd60e51b815260040161046d90611d49565b600091825260046020526040909120600501805460ff1916911515919091179055565b6001600160a01b038516331480610c355750610c358533610377565b610c965760405162461bcd60e51b815260206004820152602c60248201527f455243313135353a2063616c6c6572206973206e6f7420616e206f776e65722060448201526b1b9bdc88185c1c1c9bdd995960a21b606482015260840161046d565b61094f8585858585611259565b6003546001600160a01b03163314610ccd5760405162461bcd60e51b815260040161046d90611e06565b6001600160a01b038116610d325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161046d565b610d3b81611126565b50565b6003546001600160a01b03163314610d685760405162461bcd60e51b815260040161046d90611e06565b60328510610db15760405162461bcd60e51b8152602060048201526016602482015275145d585b9d1a5d1e481b1a5b5a5d081c995858da195960521b604482015260640161046d565b60008581526004602052604090206002015415610e095760405162461bcd60e51b8152602060048201526016602482015275151bdad95b881a5cc8185b1c9958591e48195e1a5cdd60521b604482015260640161046d565b600085815260046020818152604090922086815560018101869055600281018590558351610e3f939190920191908401906115f6565b505050505050565b6001600160a01b038416610ea75760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161046d565b33610ec181600087610eb888611376565b61094f88611376565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610ef1908490611e5f565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461094f816000878787876113c1565b8151835114610fb35760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161046d565b6001600160a01b038416610fd95760405162461bcd60e51b815260040161046d90611d77565b3360005b84518110156110c0576000858281518110610ffa57610ffa611f2f565b60200260200101519050600085838151811061101857611018611f2f565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156110685760405162461bcd60e51b815260040161046d90611dbc565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906110a5908490611e5f565b92505081905550505050806110b990611efe565b9050610fdd565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611110929190611cc0565b60405180910390a4610e3f81878787878761152c565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156111ec5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161046d565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b03841661127f5760405162461bcd60e51b815260040161046d90611d77565b3361128f818787610eb888611376565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156112d05760405162461bcd60e51b815260040161046d90611dbc565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061130d908490611e5f565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461136d8288888888886113c1565b50505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106113b0576113b0611f2f565b602090810291909101015292915050565b6001600160a01b0384163b15610e3f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906114059089908990889088908890600401611c68565b602060405180830381600087803b15801561141f57600080fd5b505af192505050801561144f575060408051601f3d908101601f1916820190925261144c91810190611a82565b60015b6114fc5761145b611f5b565b806308c379a014156114955750611470611f77565b8061147b5750611497565b8060405162461bcd60e51b815260040161046d9190611cee565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161046d565b6001600160e01b0319811663f23a6e6160e01b1461136d5760405162461bcd60e51b815260040161046d90611d01565b6001600160a01b0384163b15610e3f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906115709089908990889088908890600401611c0a565b602060405180830381600087803b15801561158a57600080fd5b505af19250505080156115ba575060408051601f3d908101601f191682019092526115b791810190611a82565b60015b6115c65761145b611f5b565b6001600160e01b0319811663bc197c8160e01b1461136d5760405162461bcd60e51b815260040161046d90611d01565b82805461160290611e96565b90600052602060002090601f016020900481019282611624576000855561166a565b82601f1061163d57805160ff191683800117855561166a565b8280016001018555821561166a579182015b8281111561166a57825182559160200191906001019061164f565b5061167692915061167a565b5090565b5b80821115611676576000815560010161167b565b600067ffffffffffffffff8311156116a9576116a9611f45565b6040516116c0601f8501601f191660200182611ed1565b8091508381528484840111156116d557600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461170457600080fd5b919050565b600082601f83011261171a57600080fd5b8135602061172782611e3b565b6040516117348282611ed1565b8381528281019150858301600585901b8701840188101561175457600080fd5b60005b8581101561177357813584529284019290840190600101611757565b5090979650505050505050565b8035801515811461170457600080fd5b600082601f8301126117a157600080fd5b6108b58383356020850161168f565b6000602082840312156117c257600080fd5b6108b5826116ed565b600080604083850312156117de57600080fd5b6117e7836116ed565b91506117f5602084016116ed565b90509250929050565b600080600080600060a0868803121561181657600080fd5b61181f866116ed565b945061182d602087016116ed565b9350604086013567ffffffffffffffff8082111561184a57600080fd5b61185689838a01611709565b9450606088013591508082111561186c57600080fd5b61187889838a01611709565b9350608088013591508082111561188e57600080fd5b5061189b88828901611790565b9150509295509295909350565b600080600080600060a086880312156118c057600080fd5b6118c9866116ed565b94506118d7602087016116ed565b93506040860135925060608601359150608086013567ffffffffffffffff81111561190157600080fd5b61189b88828901611790565b6000806040838503121561192057600080fd5b611929836116ed565b91506117f560208401611780565b6000806040838503121561194a57600080fd5b611953836116ed565b946020939093013593505050565b60008060006060848603121561197657600080fd5b61197f846116ed565b95602085013595506040909401359392505050565b600080604083850312156119a757600080fd5b823567ffffffffffffffff808211156119bf57600080fd5b818501915085601f8301126119d357600080fd5b813560206119e082611e3b565b6040516119ed8282611ed1565b8381528281019150858301600585901b870184018b1015611a0d57600080fd5b600096505b84871015611a3757611a23816116ed565b835260019690960195918301918301611a12565b5096505086013592505080821115611a4e57600080fd5b50611a5b85828601611709565b9150509250929050565b600060208284031215611a7757600080fd5b81356108b581612001565b600060208284031215611a9457600080fd5b81516108b581612001565b600060208284031215611ab157600080fd5b5035919050565b600060208284031215611aca57600080fd5b5051919050565b60008060408385031215611ae457600080fd5b823591506117f5602084016116ed565b60008060408385031215611b0757600080fd5b823591506117f560208401611780565b600080600080600060a08688031215611b2f57600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115611b6257600080fd5b8601601f81018813611b7357600080fd5b61189b8882356020840161168f565b600081518084526020808501945080840160005b83811015611bb257815187529582019590820190600101611b96565b509495945050505050565b6000815180845260005b81811015611be357602081850181015186830182015201611bc7565b81811115611bf5576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611c3690830186611b82565b8281036060840152611c488186611b82565b90508281036080840152611c5c8185611bbd565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611ca290830184611bbd565b979650505050505050565b6020815260006108b56020830184611b82565b604081526000611cd36040830185611b82565b8281036020840152611ce58185611b82565b95945050505050565b6020815260006108b56020830184611bbd565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b602080825260149082015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600067ffffffffffffffff821115611e5557611e55611f45565b5060051b60200190565b60008219821115611e7257611e72611f19565b500190565b6000816000190483118215151615611e9157611e91611f19565b500290565b600181811c90821680611eaa57607f821691505b60208210811415611ecb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611ef757611ef7611f45565b6040525050565b6000600019821415611f1257611f12611f19565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611f745760046000803e5060005160e01c5b90565b600060443d1015611f855790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611fb557505050505090565b8285019150815181811115611fcd5750505050505090565b843d8701016020828501011115611fe75750505050505090565b611ff660208286010187611ed1565b509095945050505050565b6001600160e01b031981168114610d3b57600080fdfea2646970667358221220cc4a9543132e1cca839c77b2ad942ec9881eeebd06136a83230aa1e77b98e9c864736f6c63430008070033

Deployed Bytecode Sourcemap

16955:2867:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7753:231;;;;;;;;;;-1:-1:-1;7753:231:0;;;;;:::i;:::-;;:::i;:::-;;;20251:25:1;;;20239:2;20224:18;7753:231:0;;;;;;;;7322:310;;;;;;;;;;-1:-1:-1;7322:310:0;;;;;:::i;:::-;;:::i;:::-;;;11419:14:1;;11412:22;11394:41;;11382:2;11367:18;7322:310:0;11254:187:1;19564:122:0;;;;;;;;;;-1:-1:-1;19564:122:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;18932:624::-;;;;;;:::i;:::-;;:::i;:::-;;18075:370;;;;;;;;;;-1:-1:-1;18075:370:0;;;;;:::i;:::-;;:::i;9275:445::-;;;;;;;;;;-1:-1:-1;9275:445:0;;;;;:::i;:::-;;:::i;7992:524::-;;;;;;;;;;-1:-1:-1;7992:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;18453:110::-;;;;;;;;;;-1:-1:-1;18453:110:0;;;;;:::i;:::-;18505:7;18531:13;;;:8;:13;;;;;:24;;;;18453:110;761:94;;;;;;;;;;;;;:::i;18759:165::-;;;;;;;;;;-1:-1:-1;18759:165:0;;;;;:::i;:::-;;:::i;19694:123::-;;;:::i;538:87::-;;;;;;;;;;-1:-1:-1;611:6:0;;-1:-1:-1;;;;;611:6:0;538:87;;;-1:-1:-1;;;;;9078:32:1;;;9060:51;;9048:2;9033:18;538:87:0;8914:203:1;18571:180:0;;;;;;;;;;-1:-1:-1;18571:180:0;;;;;:::i;:::-;;:::i;8524:155::-;;;;;;;;;;-1:-1:-1;8524:155:0;;;;;:::i;:::-;;:::i;17277:84::-;;;;;;;;;;;;17318:42;17277:84;;17895:172;;;;;;;;;;-1:-1:-1;17895:172:0;;;;;:::i;:::-;;:::i;8687:168::-;;;;;;;;;;-1:-1:-1;8687:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;8810:27:0;;;8786:4;8810:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;8687:168;8863:404;;;;;;;;;;-1:-1:-1;8863:404:0;;;;;:::i;:::-;;:::i;863:192::-;;;;;;;;;;-1:-1:-1;863:192:0;;;;;:::i;:::-;;:::i;17429:458::-;;;;;;;;;;-1:-1:-1;17429:458:0;;;;;:::i;:::-;;:::i;7753:231::-;7839:7;-1:-1:-1;;;;;7867:21:0;;7859:77;;;;-1:-1:-1;;;7859:77:0;;13274:2:1;7859:77:0;;;13256:21:1;13313:2;13293:18;;;13286:30;13352:34;13332:18;;;13325:62;-1:-1:-1;;;13403:18:1;;;13396:41;13454:19;;7859:77:0;;;;;;;;;-1:-1:-1;7954:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;7954:22:0;;;;;;;;;;;;7753:231::o;7322:310::-;7424:4;-1:-1:-1;;;;;;7461:41:0;;-1:-1:-1;;;7461:41:0;;:110;;-1:-1:-1;;;;;;;7519:52:0;;-1:-1:-1;;;7519:52:0;7461:110;:163;;;-1:-1:-1;;;;;;;;;;5048:40:0;;;7588:36;7441:183;7322:310;-1:-1:-1;;7322:310:0:o;19564:122::-;19628:13;19661:8;:13;19670:3;19661:13;;;;;;;;;;;:17;;19654:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19564:122;;;:::o;18932:624::-;18505:7;18531:13;;;:8;:13;;;;;:24;;;19038:6;19016:19;19031:3;19016:14;:19::i;:::-;:28;;;;:::i;:::-;:49;;19008:112;;;;-1:-1:-1;;;19008:112:0;;17908:2:1;19008:112:0;;;17890:21:1;17947:2;17927:18;;;17920:30;17986:34;17966:18;;;17959:62;-1:-1:-1;;;18037:18:1;;;18030:48;18095:19;;19008:112:0;17706:414:1;19008:112:0;611:6;;-1:-1:-1;;;;;611:6:0;19135:10;:21;19131:333;;19180:13;19189:3;19180:8;:13::i;:::-;19172:46;;;;-1:-1:-1;;;19172:46:0;;19556:2:1;19172:46:0;;;19538:21:1;19595:2;19575:18;;;19568:30;-1:-1:-1;;;19614:18:1;;;19607:50;19674:18;;19172:46:0;19354:344:1;19172:46:0;19241:19;19251:3;19256;19241:9;:19::i;:::-;:24;19233:68;;;;-1:-1:-1;;;19233:68:0;;14093:2:1;19233:68:0;;;14075:21:1;14132:2;14112:18;;;14105:30;14171:33;14151:18;;;14144:61;14222:18;;19233:68:0;13891:355:1;19233:68:0;19324:6;19334:1;19324:11;19316:35;;;;-1:-1:-1;;;19316:35:0;;16021:2:1;19316:35:0;;;16003:21:1;16060:2;16040:18;;;16033:30;-1:-1:-1;;;16079:18:1;;;16072:41;16130:18;;19316:35:0;15819:335:1;19316:35:0;19408:6;19387:18;19396:3;19401;19387:8;:18::i;:::-;:27;;;;:::i;:::-;19374:9;:40;19366:86;;;;-1:-1:-1;;;19366:86:0;;15208:2:1;19366:86:0;;;15190:21:1;15247:2;15227:18;;;15220:30;15286:34;15266:18;;;15259:62;-1:-1:-1;;;15337:18:1;;;15330:31;15378:19;;19366:86:0;15006:397:1;19366:86:0;19474:27;19480:3;19485;19490:6;19474:27;;;;;;;;;;;;:5;:27::i;:::-;19512:13;;;;:8;:13;;;;;:26;;:36;;19542:6;;19512:13;:36;;19542:6;;19512:36;:::i;:::-;;;;-1:-1:-1;;;;;18932:624:0:o;18075:370::-;18136:7;18531:13;;;:8;:13;;;;;:24;;;18155:55;;;;-1:-1:-1;;;18155:55:0;;;;;;;:::i;:::-;18250:27;;-1:-1:-1;;;18250:27:0;;-1:-1:-1;;;;;9078:32:1;;18250:27:0;;;9060:51:1;18221:14:0;;17318:42;;18250:22;;9033:18:1;;18250:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;18246:168;;-1:-1:-1;18307:13:0;;;;:8;:13;;;;;:27;;;18246:168;;;-1:-1:-1;18376:13:0;;;;:8;:13;;;;;:26;18246:168;18431:6;18075:370;-1:-1:-1;;;18075:370:0:o;9275:445::-;-1:-1:-1;;;;;9508:20:0;;173:10;9508:20;;:60;;-1:-1:-1;9532:36:0;9549:4;173:10;8687:168;:::i;9532:36::-;9486:163;;;;-1:-1:-1;;;9486:163:0;;17486:2:1;9486:163:0;;;17468:21:1;17525:2;17505:18;;;17498:30;17564:34;17544:18;;;17537:62;-1:-1:-1;;;17615:18:1;;;17608:51;17676:19;;9486:163:0;17284:417:1;9486:163:0;9660:52;9683:4;9689:2;9693:3;9698:7;9707:4;9660:22;:52::i;:::-;9275:445;;;;;:::o;7992:524::-;8148:16;8209:3;:10;8190:8;:15;:29;8182:83;;;;-1:-1:-1;;;8182:83:0;;18737:2:1;8182:83:0;;;18719:21:1;18776:2;18756:18;;;18749:30;18815:34;18795:18;;;18788:62;-1:-1:-1;;;18866:18:1;;;18859:39;18915:19;;8182:83:0;18535:405:1;8182:83:0;8278:30;8325:8;:15;8311:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8311:30:0;;8278:63;;8359:9;8354:122;8378:8;:15;8374:1;:19;8354:122;;;8434:30;8444:8;8453:1;8444:11;;;;;;;;:::i;:::-;;;;;;;8457:3;8461:1;8457:6;;;;;;;;:::i;:::-;;;;;;;8434:9;:30::i;:::-;8415:13;8429:1;8415:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;8395:3;;;:::i;:::-;;;8354:122;;;-1:-1:-1;8495:13:0;7992:524;-1:-1:-1;;;7992:524:0:o;761:94::-;611:6;;-1:-1:-1;;;;;611:6:0;173:10;673:23;665:68;;;;-1:-1:-1;;;665:68:0;;;;;;;:::i;:::-;826:21:::1;844:1;826:9;:21::i;:::-;761:94::o:0;18759:165::-;18807:4;18531:13;;;:8;:13;;;;;:24;;;18823:55;;;;-1:-1:-1;;;18823:55:0;;;;;;;:::i;:::-;-1:-1:-1;18896:13:0;;;;:8;:13;;;;;:20;;;;;;18759:165::o;19694:123::-;611:6;;-1:-1:-1;;;;;611:6:0;173:10;673:23;665:68;;;;-1:-1:-1;;;665:68:0;;;;;;;:::i;:::-;19761:47:::1;::::0;19769:10:::1;::::0;19786:21:::1;19761:47:::0;::::1;;;::::0;::::1;::::0;;;19786:21;19769:10;19761:47;::::1;;;;;;19753:56;;;::::0;::::1;18571:180:::0;18625:7;18531:13;;;:8;:13;;;;;:24;;;18644:55;;;;-1:-1:-1;;;18644:55:0;;;;;;;:::i;:::-;-1:-1:-1;18717:13:0;;;;:8;:13;;;;;:26;;;;18571:180::o;8524:155::-;8619:52;173:10;8652:8;8662;8619:18;:52::i;:::-;8524:155;;:::o;17895:172::-;611:6;;-1:-1:-1;;;;;611:6:0;173:10;673:23;665:68;;;;-1:-1:-1;;;665:68:0;;;;;;;:::i;:::-;18505:7;18531:13;;;:8;:13;;;;;:24;;;17963:55:::1;;;;-1:-1:-1::0;;;17963:55:0::1;;;;;;;:::i;:::-;18029:13;::::0;;;:8:::1;:13;::::0;;;;;:20:::1;;:30:::0;;-1:-1:-1;;18029:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17895:172::o;8863:404::-;-1:-1:-1;;;;;9071:20:0;;173:10;9071:20;;:60;;-1:-1:-1;9095:36:0;9112:4;173:10;8687:168;:::i;9095:36::-;9049:154;;;;-1:-1:-1;;;9049:154:0;;17073:2:1;9049:154:0;;;17055:21:1;17112:2;17092:18;;;17085:30;17151:34;17131:18;;;17124:62;-1:-1:-1;;;17202:18:1;;;17195:42;17254:19;;9049:154:0;16871:408:1;9049:154:0;9214:45;9232:4;9238:2;9242;9246:6;9254:4;9214:17;:45::i;863:192::-;611:6;;-1:-1:-1;;;;;611:6:0;173:10;673:23;665:68;;;;-1:-1:-1;;;665:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;952:22:0;::::1;944:73;;;::::0;-1:-1:-1;;;944:73:0;;13686:2:1;944:73:0::1;::::0;::::1;13668:21:1::0;13725:2;13705:18;;;13698:30;13764:34;13744:18;;;13737:62;-1:-1:-1;;;13815:18:1;;;13808:36;13861:19;;944:73:0::1;13484:402:1::0;944:73:0::1;1028:19;1038:8;1028:9;:19::i;:::-;863:192:::0;:::o;17429:458::-;611:6;;-1:-1:-1;;;;;611:6:0;173:10;673:23;665:68;;;;-1:-1:-1;;;665:68:0;;;;;;;:::i;:::-;17035:2:::1;17574:3;:18;17566:53;;;::::0;-1:-1:-1;;;17566:53:0;;16361:2:1;17566:53:0::1;::::0;::::1;16343:21:1::0;16400:2;16380:18;;;16373:30;-1:-1:-1;;;16419:18:1;;;16412:52;16481:18;;17566:53:0::1;16159:346:1::0;17566:53:0::1;18505:7:::0;18531:13;;;:8;:13;;;;;:24;;;17638:22;17630:57:::1;;;::::0;-1:-1:-1;;;17630:57:0;;12923:2:1;17630:57:0::1;::::0;::::1;12905:21:1::0;12962:2;12942:18;;;12935:30;-1:-1:-1;;;12981:18:1;;;12974:52;13043:18;;17630:57:0::1;12721:346:1::0;17630:57:0::1;17698:13;::::0;;;:8:::1;:13;::::0;;;;;;;:42;;;17751:27:::1;::::0;::::1;:44:::0;;;17806:24:::1;::::0;::::1;:38:::0;;;17855:24;;::::1;::::0;:17;;;::::1;::::0;:24;;::::1;::::0;::::1;:::i;:::-;;17429:458:::0;;;;;:::o;11734:569::-;-1:-1:-1;;;;;11887:16:0;;11879:62;;;;-1:-1:-1;;;11879:62:0;;19905:2:1;11879:62:0;;;19887:21:1;19944:2;19924:18;;;19917:30;19983:34;19963:18;;;19956:62;-1:-1:-1;;;20034:18:1;;;20027:31;20075:19;;11879:62:0;19703:397:1;11879:62:0;173:10;11998:102;173:10;11954:16;12041:2;12045:21;12063:2;12045:17;:21::i;:::-;12068:25;12086:6;12068:17;:25::i;11998:102::-;12113:9;:13;;;;;;;;;;;-1:-1:-1;;;;;12113:17:0;;;;;;;;;:27;;12134:6;;12113:9;:27;;12134:6;;12113:27;:::i;:::-;;;;-1:-1:-1;;12156:52:0;;;20461:25:1;;;20517:2;20502:18;;20495:34;;;-1:-1:-1;;;;;12156:52:0;;;;12189:1;;12156:52;;;;;;20434:18:1;12156:52:0;;;;;;;12221:74;12252:8;12270:1;12274:2;12278;12282:6;12290:4;12221:30;:74::i;10556:1074::-;10783:7;:14;10769:3;:10;:28;10761:81;;;;-1:-1:-1;;;10761:81:0;;19147:2:1;10761:81:0;;;19129:21:1;19186:2;19166:18;;;19159:30;19225:34;19205:18;;;19198:62;-1:-1:-1;;;19276:18:1;;;19269:38;19324:19;;10761:81:0;18945:404:1;10761:81:0;-1:-1:-1;;;;;10861:16:0;;10853:66;;;;-1:-1:-1;;;10853:66:0;;;;;;;:::i;:::-;173:10;10932:16;11049:421;11073:3;:10;11069:1;:14;11049:421;;;11105:10;11118:3;11122:1;11118:6;;;;;;;;:::i;:::-;;;;;;;11105:19;;11139:14;11156:7;11164:1;11156:10;;;;;;;;:::i;:::-;;;;;;;;;;;;11183:19;11205:13;;;;;;;;;;-1:-1:-1;;;;;11205:19:0;;;;;;;;;;;;11156:10;;-1:-1:-1;11247:21:0;;;;11239:76;;;;-1:-1:-1;;;11239:76:0;;;;;;;:::i;:::-;11359:9;:13;;;;;;;;;;;-1:-1:-1;;;;;11359:19:0;;;;;;;;;;11381:20;;;11359:42;;11431:17;;;;;;;:27;;11381:20;;11359:9;11431:27;;11381:20;;11431:27;:::i;:::-;;;;;;;;11090:380;;;11085:3;;;;:::i;:::-;;;11049:421;;;;11517:2;-1:-1:-1;;;;;11487:47:0;11511:4;-1:-1:-1;;;;;11487:47:0;11501:8;-1:-1:-1;;;;;11487:47:0;;11521:3;11526:7;11487:47;;;;;;;:::i;:::-;;;;;;;;11547:75;11583:8;11593:4;11599:2;11603:3;11608:7;11617:4;11547:35;:75::i;1063:173::-;1138:6;;;-1:-1:-1;;;;;1155:17:0;;;-1:-1:-1;;;;;;1155:17:0;;;;;;;1188:40;;1138:6;;;1155:17;1138:6;;1188:40;;1119:16;;1188:40;1108:128;1063:173;:::o;14609:331::-;14764:8;-1:-1:-1;;;;;14755:17:0;:5;-1:-1:-1;;;;;14755:17:0;;;14747:71;;;;-1:-1:-1;;;14747:71:0;;18327:2:1;14747:71:0;;;18309:21:1;18366:2;18346:18;;;18339:30;18405:34;18385:18;;;18378:62;-1:-1:-1;;;18456:18:1;;;18449:39;18505:19;;14747:71:0;18125:405:1;14747:71:0;-1:-1:-1;;;;;14829:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;14829:46:0;;;;;;;;;;14891:41;;11394::1;;;14891::0;;11367:18:1;14891:41:0;;;;;;;14609:331;;;:::o;9728:820::-;-1:-1:-1;;;;;9916:16:0;;9908:66;;;;-1:-1:-1;;;9908:66:0;;;;;;;:::i;:::-;173:10;10031:96;173:10;10062:4;10068:2;10072:21;10090:2;10072:17;:21::i;10031:96::-;10140:19;10162:13;;;;;;;;;;;-1:-1:-1;;;;;10162:19:0;;;;;;;;;;10200:21;;;;10192:76;;;;-1:-1:-1;;;10192:76:0;;;;;;;:::i;:::-;10304:9;:13;;;;;;;;;;;-1:-1:-1;;;;;10304:19:0;;;;;;;;;;10326:20;;;10304:42;;10368:17;;;;;;;:27;;10326:20;;10304:9;10368:27;;10326:20;;10368:27;:::i;:::-;;;;-1:-1:-1;;10413:46:0;;;20461:25:1;;;20517:2;20502:18;;20495:34;;;-1:-1:-1;;;;;10413:46:0;;;;;;;;;;;;;;20434:18:1;10413:46:0;;;;;;;10472:68;10503:8;10513:4;10519:2;10523;10527:6;10535:4;10472:30;:68::i;:::-;9897:651;;9728:820;;;;;:::o;16750:198::-;16870:16;;;16884:1;16870:16;;;;;;;;;16816;;16845:22;;16870:16;;;;;;;;;;;;-1:-1:-1;16870:16:0;16845:41;;16908:7;16897:5;16903:1;16897:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;16935:5;16750:198;-1:-1:-1;;16750:198:0:o;15177:744::-;-1:-1:-1;;;;;15392:13:0;;1402:20;1450:8;15388:526;;15428:72;;-1:-1:-1;;;15428:72:0;;-1:-1:-1;;;;;15428:38:0;;;;;:72;;15467:8;;15477:4;;15483:2;;15487:6;;15495:4;;15428:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15428:72:0;;;;;;;;-1:-1:-1;;15428:72:0;;;;;;;;;;;;:::i;:::-;;;15424:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;15776:6;15769:14;;-1:-1:-1;;;15769:14:0;;;;;;;;:::i;15424:479::-;;;15825:62;;-1:-1:-1;;;15825:62:0;;12093:2:1;15825:62:0;;;12075:21:1;12132:2;12112:18;;;12105:30;12171:34;12151:18;;;12144:62;-1:-1:-1;;;12222:18:1;;;12215:50;12282:19;;15825:62:0;11891:416:1;15424:479:0;-1:-1:-1;;;;;;15550:55:0;;-1:-1:-1;;;15550:55:0;15546:154;;15630:50;;-1:-1:-1;;;15630:50:0;;;;;;;:::i;15929:813::-;-1:-1:-1;;;;;16169:13:0;;1402:20;1450:8;16165:570;;16205:79;;-1:-1:-1;;;16205:79:0;;-1:-1:-1;;;;;16205:43:0;;;;;:79;;16249:8;;16259:4;;16265:3;;16270:7;;16279:4;;16205:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16205:79:0;;;;;;;;-1:-1:-1;;16205:79:0;;;;;;;;;;;;:::i;:::-;;;16201:523;;;;:::i;:::-;-1:-1:-1;;;;;;16366:60:0;;-1:-1:-1;;;16366:60:0;16362:159;;16451:50;;-1:-1:-1;;;16451:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:735::-;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:1;;;1175:1;1172;1165:12;1118:61;1197:1;1207:163;1221:2;1218:1;1215:9;1207:163;;;1278:17;;1266:30;;1316:12;;;;1348;;;;1239:1;1232:9;1207:163;;;-1:-1:-1;1388:6:1;;665:735;-1:-1:-1;;;;;;;665:735:1:o;1405:160::-;1470:20;;1526:13;;1519:21;1509:32;;1499:60;;1555:1;1552;1545:12;1570:220;1612:5;1665:3;1658:4;1650:6;1646:17;1642:27;1632:55;;1683:1;1680;1673:12;1632:55;1705:79;1780:3;1771:6;1758:20;1751:4;1743:6;1739:17;1705:79;:::i;1795:186::-;1854:6;1907:2;1895:9;1886:7;1882:23;1878:32;1875:52;;;1923:1;1920;1913:12;1875:52;1946:29;1965:9;1946:29;:::i;1986:260::-;2054:6;2062;2115:2;2103:9;2094:7;2090:23;2086:32;2083:52;;;2131:1;2128;2121:12;2083:52;2154:29;2173:9;2154:29;:::i;:::-;2144:39;;2202:38;2236:2;2225:9;2221:18;2202:38;:::i;:::-;2192:48;;1986:260;;;;;:::o;2251:943::-;2405:6;2413;2421;2429;2437;2490:3;2478:9;2469:7;2465:23;2461:33;2458:53;;;2507:1;2504;2497:12;2458:53;2530:29;2549:9;2530:29;:::i;:::-;2520:39;;2578:38;2612:2;2601:9;2597:18;2578:38;:::i;:::-;2568:48;;2667:2;2656:9;2652:18;2639:32;2690:18;2731:2;2723:6;2720:14;2717:34;;;2747:1;2744;2737:12;2717:34;2770:61;2823:7;2814:6;2803:9;2799:22;2770:61;:::i;:::-;2760:71;;2884:2;2873:9;2869:18;2856:32;2840:48;;2913:2;2903:8;2900:16;2897:36;;;2929:1;2926;2919:12;2897:36;2952:63;3007:7;2996:8;2985:9;2981:24;2952:63;:::i;:::-;2942:73;;3068:3;3057:9;3053:19;3040:33;3024:49;;3098:2;3088:8;3085:16;3082:36;;;3114:1;3111;3104:12;3082:36;;3137:51;3180:7;3169:8;3158:9;3154:24;3137:51;:::i;:::-;3127:61;;;2251:943;;;;;;;;:::o;3199:606::-;3303:6;3311;3319;3327;3335;3388:3;3376:9;3367:7;3363:23;3359:33;3356:53;;;3405:1;3402;3395:12;3356:53;3428:29;3447:9;3428:29;:::i;:::-;3418:39;;3476:38;3510:2;3499:9;3495:18;3476:38;:::i;:::-;3466:48;;3561:2;3550:9;3546:18;3533:32;3523:42;;3612:2;3601:9;3597:18;3584:32;3574:42;;3667:3;3656:9;3652:19;3639:33;3695:18;3687:6;3684:30;3681:50;;;3727:1;3724;3717:12;3681:50;3750:49;3791:7;3782:6;3771:9;3767:22;3750:49;:::i;3810:254::-;3875:6;3883;3936:2;3924:9;3915:7;3911:23;3907:32;3904:52;;;3952:1;3949;3942:12;3904:52;3975:29;3994:9;3975:29;:::i;:::-;3965:39;;4023:35;4054:2;4043:9;4039:18;4023:35;:::i;4069:254::-;4137:6;4145;4198:2;4186:9;4177:7;4173:23;4169:32;4166:52;;;4214:1;4211;4204:12;4166:52;4237:29;4256:9;4237:29;:::i;:::-;4227:39;4313:2;4298:18;;;;4285:32;;-1:-1:-1;;;4069:254:1:o;4328:322::-;4405:6;4413;4421;4474:2;4462:9;4453:7;4449:23;4445:32;4442:52;;;4490:1;4487;4480:12;4442:52;4513:29;4532:9;4513:29;:::i;:::-;4503:39;4589:2;4574:18;;4561:32;;-1:-1:-1;4640:2:1;4625:18;;;4612:32;;4328:322;-1:-1:-1;;;4328:322:1:o;4655:1219::-;4773:6;4781;4834:2;4822:9;4813:7;4809:23;4805:32;4802:52;;;4850:1;4847;4840:12;4802:52;4890:9;4877:23;4919:18;4960:2;4952:6;4949:14;4946:34;;;4976:1;4973;4966:12;4946:34;5014:6;5003:9;4999:22;4989:32;;5059:7;5052:4;5048:2;5044:13;5040:27;5030:55;;5081:1;5078;5071:12;5030:55;5117:2;5104:16;5139:4;5162:43;5202:2;5162:43;:::i;:::-;5234:2;5228:9;5246:31;5274:2;5266:6;5246:31;:::i;:::-;5312:18;;;5346:15;;;;-1:-1:-1;5381:11:1;;;5423:1;5419:10;;;5411:19;;5407:28;;5404:41;-1:-1:-1;5401:61:1;;;5458:1;5455;5448:12;5401:61;5480:1;5471:10;;5490:169;5504:2;5501:1;5498:9;5490:169;;;5561:23;5580:3;5561:23;:::i;:::-;5549:36;;5522:1;5515:9;;;;;5605:12;;;;5637;;5490:169;;;-1:-1:-1;5678:6:1;-1:-1:-1;;5722:18:1;;5709:32;;-1:-1:-1;;5753:16:1;;;5750:36;;;5782:1;5779;5772:12;5750:36;;5805:63;5860:7;5849:8;5838:9;5834:24;5805:63;:::i;:::-;5795:73;;;4655:1219;;;;;:::o;5879:245::-;5937:6;5990:2;5978:9;5969:7;5965:23;5961:32;5958:52;;;6006:1;6003;5996:12;5958:52;6045:9;6032:23;6064:30;6088:5;6064:30;:::i;6129:249::-;6198:6;6251:2;6239:9;6230:7;6226:23;6222:32;6219:52;;;6267:1;6264;6257:12;6219:52;6299:9;6293:16;6318:30;6342:5;6318:30;:::i;6383:180::-;6442:6;6495:2;6483:9;6474:7;6470:23;6466:32;6463:52;;;6511:1;6508;6501:12;6463:52;-1:-1:-1;6534:23:1;;6383:180;-1:-1:-1;6383:180:1:o;6568:184::-;6638:6;6691:2;6679:9;6670:7;6666:23;6662:32;6659:52;;;6707:1;6704;6697:12;6659:52;-1:-1:-1;6730:16:1;;6568:184;-1:-1:-1;6568:184:1:o;6757:254::-;6825:6;6833;6886:2;6874:9;6865:7;6861:23;6857:32;6854:52;;;6902:1;6899;6892:12;6854:52;6938:9;6925:23;6915:33;;6967:38;7001:2;6990:9;6986:18;6967:38;:::i;7016:248::-;7081:6;7089;7142:2;7130:9;7121:7;7117:23;7113:32;7110:52;;;7158:1;7155;7148:12;7110:52;7194:9;7181:23;7171:33;;7223:35;7254:2;7243:9;7239:18;7223:35;:::i;7269:724::-;7374:6;7382;7390;7398;7406;7459:3;7447:9;7438:7;7434:23;7430:33;7427:53;;;7476:1;7473;7466:12;7427:53;7512:9;7499:23;7489:33;;7569:2;7558:9;7554:18;7541:32;7531:42;;7620:2;7609:9;7605:18;7592:32;7582:42;;7671:2;7660:9;7656:18;7643:32;7633:42;;7726:3;7715:9;7711:19;7698:33;7754:18;7746:6;7743:30;7740:50;;;7786:1;7783;7776:12;7740:50;7809:22;;7862:4;7854:13;;7850:27;-1:-1:-1;7840:55:1;;7891:1;7888;7881:12;7840:55;7914:73;7979:7;7974:2;7961:16;7956:2;7952;7948:11;7914:73;:::i;7998:435::-;8051:3;8089:5;8083:12;8116:6;8111:3;8104:19;8142:4;8171:2;8166:3;8162:12;8155:19;;8208:2;8201:5;8197:14;8229:1;8239:169;8253:6;8250:1;8247:13;8239:169;;;8314:13;;8302:26;;8348:12;;;;8383:15;;;;8275:1;8268:9;8239:169;;;-1:-1:-1;8424:3:1;;7998:435;-1:-1:-1;;;;;7998:435:1:o;8438:471::-;8479:3;8517:5;8511:12;8544:6;8539:3;8532:19;8569:1;8579:162;8593:6;8590:1;8587:13;8579:162;;;8655:4;8711:13;;;8707:22;;8701:29;8683:11;;;8679:20;;8672:59;8608:12;8579:162;;;8759:6;8756:1;8753:13;8750:87;;;8825:1;8818:4;8809:6;8804:3;8800:16;8796:27;8789:38;8750:87;-1:-1:-1;8891:2:1;8870:15;-1:-1:-1;;8866:29:1;8857:39;;;;8898:4;8853:50;;8438:471;-1:-1:-1;;8438:471:1:o;9122:826::-;-1:-1:-1;;;;;9519:15:1;;;9501:34;;9571:15;;9566:2;9551:18;;9544:43;9481:3;9618:2;9603:18;;9596:31;;;9444:4;;9650:57;;9687:19;;9679:6;9650:57;:::i;:::-;9755:9;9747:6;9743:22;9738:2;9727:9;9723:18;9716:50;9789:44;9826:6;9818;9789:44;:::i;:::-;9775:58;;9882:9;9874:6;9870:22;9864:3;9853:9;9849:19;9842:51;9910:32;9935:6;9927;9910:32;:::i;:::-;9902:40;9122:826;-1:-1:-1;;;;;;;;9122:826:1:o;9953:560::-;-1:-1:-1;;;;;10250:15:1;;;10232:34;;10302:15;;10297:2;10282:18;;10275:43;10349:2;10334:18;;10327:34;;;10392:2;10377:18;;10370:34;;;10212:3;10435;10420:19;;10413:32;;;10175:4;;10462:45;;10487:19;;10479:6;10462:45;:::i;:::-;10454:53;9953:560;-1:-1:-1;;;;;;;9953:560:1:o;10518:261::-;10697:2;10686:9;10679:21;10660:4;10717:56;10769:2;10758:9;10754:18;10746:6;10717:56;:::i;10784:465::-;11041:2;11030:9;11023:21;11004:4;11067:56;11119:2;11108:9;11104:18;11096:6;11067:56;:::i;:::-;11171:9;11163:6;11159:22;11154:2;11143:9;11139:18;11132:50;11199:44;11236:6;11228;11199:44;:::i;:::-;11191:52;10784:465;-1:-1:-1;;;;;10784:465:1:o;11667:219::-;11816:2;11805:9;11798:21;11779:4;11836:44;11876:2;11865:9;11861:18;11853:6;11836:44;:::i;12312:404::-;12514:2;12496:21;;;12553:2;12533:18;;;12526:30;12592:34;12587:2;12572:18;;12565:62;-1:-1:-1;;;12658:2:1;12643:18;;12636:38;12706:3;12691:19;;12312:404::o;14251:344::-;14453:2;14435:21;;;14492:2;14472:18;;;14465:30;-1:-1:-1;;;14526:2:1;14511:18;;14504:50;14586:2;14571:18;;14251:344::o;14600:401::-;14802:2;14784:21;;;14841:2;14821:18;;;14814:30;14880:34;14875:2;14860:18;;14853:62;-1:-1:-1;;;14946:2:1;14931:18;;14924:35;14991:3;14976:19;;14600:401::o;15408:406::-;15610:2;15592:21;;;15649:2;15629:18;;;15622:30;15688:34;15683:2;15668:18;;15661:62;-1:-1:-1;;;15754:2:1;15739:18;;15732:40;15804:3;15789:19;;15408:406::o;16510:356::-;16712:2;16694:21;;;16731:18;;;16724:30;16790:34;16785:2;16770:18;;16763:62;16857:2;16842:18;;16510:356::o;20540:183::-;20600:4;20633:18;20625:6;20622:30;20619:56;;;20655:18;;:::i;:::-;-1:-1:-1;20700:1:1;20696:14;20712:4;20692:25;;20540:183::o;20728:128::-;20768:3;20799:1;20795:6;20792:1;20789:13;20786:39;;;20805:18;;:::i;:::-;-1:-1:-1;20841:9:1;;20728:128::o;20861:168::-;20901:7;20967:1;20963;20959:6;20955:14;20952:1;20949:21;20944:1;20937:9;20930:17;20926:45;20923:71;;;20974:18;;:::i;:::-;-1:-1:-1;21014:9:1;;20861:168::o;21034:380::-;21113:1;21109:12;;;;21156;;;21177:61;;21231:4;21223:6;21219:17;21209:27;;21177:61;21284:2;21276:6;21273:14;21253:18;21250:38;21247:161;;;21330:10;21325:3;21321:20;21318:1;21311:31;21365:4;21362:1;21355:15;21393:4;21390:1;21383:15;21247:161;;21034:380;;;:::o;21419:249::-;21529:2;21510:13;;-1:-1:-1;;21506:27:1;21494:40;;21564:18;21549:34;;21585:22;;;21546:62;21543:88;;;21611:18;;:::i;:::-;21647:2;21640:22;-1:-1:-1;;21419:249:1:o;21673:135::-;21712:3;-1:-1:-1;;21733:17:1;;21730:43;;;21753:18;;:::i;:::-;-1:-1:-1;21800:1:1;21789:13;;21673:135::o;21813:127::-;21874:10;21869:3;21865:20;21862:1;21855:31;21905:4;21902:1;21895:15;21929:4;21926:1;21919:15;21945:127;22006:10;22001:3;21997:20;21994:1;21987:31;22037:4;22034:1;22027:15;22061:4;22058:1;22051:15;22077:127;22138:10;22133:3;22129:20;22126:1;22119:31;22169:4;22166:1;22159:15;22193:4;22190:1;22183:15;22209:179;22244:3;22286:1;22268:16;22265:23;22262:120;;;22332:1;22329;22326;22311:23;-1:-1:-1;22369:1:1;22363:8;22358:3;22354:18;22262:120;22209:179;:::o;22393:671::-;22432:3;22474:4;22456:16;22453:26;22450:39;;;22393:671;:::o;22450:39::-;22516:2;22510:9;-1:-1:-1;;22581:16:1;22577:25;;22574:1;22510:9;22553:50;22632:4;22626:11;22656:16;22691:18;22762:2;22755:4;22747:6;22743:17;22740:25;22735:2;22727:6;22724:14;22721:45;22718:58;;;22769:5;;;;;22393:671;:::o;22718:58::-;22806:6;22800:4;22796:17;22785:28;;22842:3;22836:10;22869:2;22861:6;22858:14;22855:27;;;22875:5;;;;;;22393:671;:::o;22855:27::-;22959:2;22940:16;22934:4;22930:27;22926:36;22919:4;22910:6;22905:3;22901:16;22897:27;22894:69;22891:82;;;22966:5;;;;;;22393:671;:::o;22891:82::-;22982:57;23033:4;23024:6;23016;23012:19;23008:30;23002:4;22982:57;:::i;:::-;-1:-1:-1;23055:3:1;;22393:671;-1:-1:-1;;;;;22393:671:1:o;23069:131::-;-1:-1:-1;;;;;;23143:32:1;;23133:43;;23123:71;;23190:1;23187;23180:12

Swarm Source

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

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