POL Price: $0.219526 (+4.08%)
 

Overview

Max Total Supply

0 PlanetIX

Holders

33,673

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0x488C1C3C4d3a564eB8df29d5ff0C750fa69cd94e
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
ERC1155

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at polygonscan.com on 2024-01-07
*/

/**
 *Submitted for verification at PolygonScan.com on 2023-07-12
*/

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

abstract contract Ownable {
    error NotOwner(); // 0x30cd7471

    address private _owner;

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

    modifier onlyOwner() {
        if (_owner != msg.sender) revert NotOwner();
        _;
    }

    constructor() {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256 id,
        uint256 value
    );

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(
        address indexed account,
        address indexed operator,
        bool approved
    );

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(
        address account,
        uint256 id
    ) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(
        address[] calldata accounts,
        uint256[] calldata ids
    ) external view returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(
        address account,
        address operator
    ) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

library Math {
    /**
     * @dev Return the log in base 10, rounded down, of a positive value.
     * Returns 0 if given 0.
     */
    function log10(uint256 value) internal pure returns (uint256) {
        uint256 result = 0;
        unchecked {
            if (value >= 10 ** 64) {
                value /= 10 ** 64;
                result += 64;
            }
            if (value >= 10 ** 32) {
                value /= 10 ** 32;
                result += 32;
            }
            if (value >= 10 ** 16) {
                value /= 10 ** 16;
                result += 16;
            }
            if (value >= 10 ** 8) {
                value /= 10 ** 8;
                result += 8;
            }
            if (value >= 10 ** 4) {
                value /= 10 ** 4;
                result += 4;
            }
            if (value >= 10 ** 2) {
                value /= 10 ** 2;
                result += 2;
            }
            if (value >= 10 ** 1) {
                result += 1;
            }
        }
        return result;
    }
}

library Strings {
    bytes16 private constant _SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {
        unchecked {
            uint256 length = Math.log10(value) + 1;
            string memory buffer = new string(length);
            uint256 ptr;
            /// @solidity memory-safe-assembly
            assembly {
                ptr := add(buffer, add(32, length))
            }
            while (true) {
                ptr--;
                /// @solidity memory-safe-assembly
                assembly {
                    mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
                }
                value /= 10;
                if (value == 0) break;
            }
            return buffer;
        }
    }
}

contract ERC1155 is Ownable, IERC165, IERC1155, IERC1155MetadataURI {
    using Strings for uint256;

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

    string private constant _name = "Planet IX - Retrodrop Pass";
    string private constant _symbol = "PlanetIX";

    string private _URI;

    error NotTokenOwnerOrApproved();
    error InsufficientBalance();
    error SelfApproval();
    error ERC1155ReceiverRejected();
    error NotERC1155Receiver();

    constructor() payable {}

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function supportsInterface(
        bytes4 interfaceId
    ) external pure returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            interfaceId == type(IERC165).interfaceId;
    }

    function uri(uint256 id) external view override returns (string memory) {
        return
            bytes(_URI).length > 0
                ? string(abi.encodePacked(_URI, id.toString(), ".json"))
                : "";
    }

    function balanceOf(
        address account,
        uint256 id
    ) external view override returns (uint256) {
        return _balances[id][account];
    }

    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory ids
    ) external view override returns (uint256[] memory) {
        uint256[] memory batchBalances = new uint256[](accounts.length);
        for (uint256 i; i < accounts.length; ++i) {
            batchBalances[i] = _balances[ids[i]][accounts[i]];
        }
        return batchBalances;
    }

    function setApprovalForAll(
        address operator,
        bool approved
    ) external override {
        _setApprovalForAll(msg.sender, operator, approved);
    }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) external override {
        if (from != msg.sender && !_operatorApprovals[from][msg.sender])
            revert NotTokenOwnerOrApproved();

        _safeTransferFrom(from, to, id, amount, data);
    }

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) external override {
        if (from != msg.sender && !_operatorApprovals[from][msg.sender])
            revert NotTokenOwnerOrApproved();

        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (amount > _balances[id][from]) revert InsufficientBalance();
        unchecked {
            _balances[id][from] -= amount;
        }
        _balances[id][to] += amount;
        emit TransferSingle(msg.sender, from, to, id, amount);
        _doSafeTransferAcceptanceCheck(msg.sender, from, to, id, amount, data);
    }

    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        for (uint256 i; i < ids.length; ++i) {
            if (amounts[i] > _balances[ids[i]][from])
                revert InsufficientBalance();
            unchecked {
                _balances[ids[i]][from] -= amounts[i];
            }
            _balances[ids[i]][to] += amounts[i];
        }
        emit TransferBatch(msg.sender, from, to, ids, amounts);
        _doSafeBatchTransferAcceptanceCheck(
            msg.sender,
            from,
            to,
            ids,
            amounts,
            data
        );
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) private {
        if (owner == operator) revert SelfApproval();
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.code.length > 0) {
            try
                IERC1155Receiver(to).onERC1155Received(
                    operator,
                    from,
                    id,
                    amount,
                    data
                )
            returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert ERC1155ReceiverRejected();
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert NotERC1155Receiver();
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.code.length > 0) {
            try
                IERC1155Receiver(to).onERC1155BatchReceived(
                    operator,
                    from,
                    ids,
                    amounts,
                    data
                )
            returns (bytes4 response) {
                if (
                    response != IERC1155Receiver.onERC1155BatchReceived.selector
                ) {
                    revert ERC1155ReceiverRejected();
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert NotERC1155Receiver();
            }
        }
    }

    function updateUri(string calldata _uri) external onlyOwner {
        _URI = _uri;
    }

    function Airdrop(
        address[] calldata users
    ) external onlyOwner {
        for (uint128 i; i < users.length; i++) {
            _balances[1][users[i]]++;
            emit TransferSingle(msg.sender, address(0), users[i], 1, 1);
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"ERC1155ReceiverRejected","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"NotERC1155Receiver","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"NotTokenOwnerOrApproved","type":"error"},{"inputs":[],"name":"SelfApproval","type":"error"},{"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":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"Airdrop","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":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"updateUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

6080604052335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3612ad8806100aa5f395ff3fe608060405234801561000f575f80fd5b50600436106100e7575f3560e01c80638da5cb5b1161008a578063e985e9c511610064578063e985e9c514610259578063ece8c31c14610289578063f242432a146102a5578063f2fde38b146102c1576100e7565b80638da5cb5b1461020157806395d89b411461021f578063a22cb4651461023d576100e7565b80630e89341c116100c65780630e89341c146101695780632eb2c2d6146101995780634e1273f4146101b5578063570b3c6a146101e5576100e7565b8062fdd58e146100eb57806301ffc9a71461011b57806306fdde031461014b575b5f80fd5b61010560048036038101906101009190611901565b6102dd565b604051610112919061194e565b60405180910390f35b610135600480360381019061013091906119bc565b610333565b6040516101429190611a01565b60405180910390f35b61015361046c565b6040516101609190611aa4565b60405180910390f35b610183600480360381019061017e9190611ac4565b6104a9565b6040516101909190611aa4565b60405180910390f35b6101b360048036038101906101ae9190611cdf565b610507565b005b6101cf60048036038101906101ca9190611e6a565b610610565b6040516101dc9190611f97565b60405180910390f35b6101ff60048036038101906101fa9190612010565b610720565b005b6102096107ba565b604051610216919061206a565b60405180910390f35b6102276107e1565b6040516102349190611aa4565b60405180910390f35b610257600480360381019061025291906120ad565b61081e565b005b610273600480360381019061026e91906120eb565b61082d565b6040516102809190611a01565b60405180910390f35b6102a3600480360381019061029e919061217e565b6108bb565b005b6102bf60048036038101906102ba91906121c9565b610ac9565b005b6102db60048036038101906102d6919061225c565b610bd2565b005b5f60015f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103fd57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606040518060400160405280601a81526020017f506c616e6574204958202d20526574726f64726f702050617373000000000000815250905090565b60605f600380546104b9906122b4565b9050116104d45760405180602001604052805f815250610500565b60036104df83610d11565b6040516020016104f09291906123fa565b6040516020818303038152906040525b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156105c5575060025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156105fc576040517f99b2a73600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106098585858585610ddb565b5050505050565b60605f835167ffffffffffffffff81111561062e5761062d611af3565b5b60405190808252806020026020018201604052801561065c5781602001602082028036833780820191505090505b5090505f5b84518110156107155760015f8583815181106106805761067f612428565b5b602002602001015181526020019081526020015f205f8683815181106106a9576106a8612428565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548282815181106106fe576106fd612428565b5b602002602001018181525050806001019050610661565b508091505092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107a4576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181600391826107b59291906125ea565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f506c616e65744958000000000000000000000000000000000000000000000000815250905090565b610829338383611062565b5050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461093f576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b82829050816fffffffffffffffffffffffffffffffff161015610ac45760015f600181526020019081526020015f205f8484846fffffffffffffffffffffffffffffffff1681811061099657610995612428565b5b90506020020160208101906109ab919061225c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154809291906109f4906126e4565b91905055508282826fffffffffffffffffffffffffffffffff16818110610a1e57610a1d612428565b5b9050602002016020810190610a33919061225c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62600180604051610aa9929190612764565b60405180910390a48080610abc906127a6565b915050610941565b505050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610b87575060025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610bbe576040517f99b2a73600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bcb85858585856111c0565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c56576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f6001610d1f84611394565b0190505f8167ffffffffffffffff811115610d3d57610d3c611af3565b5b6040519080825280601f01601f191660200182016040528015610d6f5781602001600182028036833780820191505090505b5090505f82602001820190505b600115610dd0578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610dc557610dc46127dd565b5b0494505f8503610d7c575b819350505050919050565b5f5b8351811015610fce5760015f858381518110610dfc57610dfb612428565b5b602002602001015181526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054838281518110610e6057610e5f612428565b5b60200260200101511115610ea0576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828181518110610eb357610eb2612428565b5b602002602001015160015f868481518110610ed157610ed0612428565b5b602002602001015181526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540392505081905550828181518110610f4057610f3f612428565b5b602002602001015160015f868481518110610f5e57610f5d612428565b5b602002602001015181526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610fbc919061280a565b92505081905550806001019050610ddd565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161104592919061283d565b60405180910390a461105b3386868686866114e5565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110c7576040517f3cf0df2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111b39190611a01565b60405180910390a3505050565b60015f8481526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115611246576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160015f8581526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055508160015f8581526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546112fa919061280a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051611377929190612872565b60405180910390a461138d3386868686866116a4565b5050505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106113f0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816113e6576113e56127dd565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061142d576d04ee2d6d415b85acef81000000008381611423576114226127dd565b5b0492506020810190505b662386f26fc10000831061145c57662386f26fc100008381611452576114516127dd565b5b0492506010810190505b6305f5e1008310611485576305f5e100838161147b5761147a6127dd565b5b0492506008810190505b61271083106114aa5761271083816114a05761149f6127dd565b5b0492506004810190505b606483106114cd57606483816114c3576114c26127dd565b5b0492506002810190505b600a83106114dc576001810190505b80915050919050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561169c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016115459594939291906128eb565b6020604051808303815f875af192505050801561158057506040513d601f19601f8201168201806040525081019061157d9190612965565b60015b61161c5761158c61299c565b806308c379a0036115e857506115a06129bb565b806115ab57506115ea565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df9190611aa4565b60405180910390fd5b505b6040517fc14a9c6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461169a576040517f086d127300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561185b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611704959493929190612a4a565b6020604051808303815f875af192505050801561173f57506040513d601f19601f8201168201806040525081019061173c9190612965565b60015b6117db5761174b61299c565b806308c379a0036117a7575061175f6129bb565b8061176a57506117a9565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e9190611aa4565b60405180910390fd5b505b6040517fc14a9c6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611859576040517f086d127300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61189d82611874565b9050919050565b6118ad81611893565b81146118b7575f80fd5b50565b5f813590506118c8816118a4565b92915050565b5f819050919050565b6118e0816118ce565b81146118ea575f80fd5b50565b5f813590506118fb816118d7565b92915050565b5f80604083850312156119175761191661186c565b5b5f611924858286016118ba565b9250506020611935858286016118ed565b9150509250929050565b611948816118ce565b82525050565b5f6020820190506119615f83018461193f565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61199b81611967565b81146119a5575f80fd5b50565b5f813590506119b681611992565b92915050565b5f602082840312156119d1576119d061186c565b5b5f6119de848285016119a8565b91505092915050565b5f8115159050919050565b6119fb816119e7565b82525050565b5f602082019050611a145f8301846119f2565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a51578082015181840152602081019050611a36565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a7682611a1a565b611a808185611a24565b9350611a90818560208601611a34565b611a9981611a5c565b840191505092915050565b5f6020820190508181035f830152611abc8184611a6c565b905092915050565b5f60208284031215611ad957611ad861186c565b5b5f611ae6848285016118ed565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611b2982611a5c565b810181811067ffffffffffffffff82111715611b4857611b47611af3565b5b80604052505050565b5f611b5a611863565b9050611b668282611b20565b919050565b5f67ffffffffffffffff821115611b8557611b84611af3565b5b602082029050602081019050919050565b5f80fd5b5f611bac611ba784611b6b565b611b51565b90508083825260208201905060208402830185811115611bcf57611bce611b96565b5b835b81811015611bf85780611be488826118ed565b845260208401935050602081019050611bd1565b5050509392505050565b5f82601f830112611c1657611c15611aef565b5b8135611c26848260208601611b9a565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115611c4d57611c4c611af3565b5b611c5682611a5c565b9050602081019050919050565b828183375f83830152505050565b5f611c83611c7e84611c33565b611b51565b905082815260208101848484011115611c9f57611c9e611c2f565b5b611caa848285611c63565b509392505050565b5f82601f830112611cc657611cc5611aef565b5b8135611cd6848260208601611c71565b91505092915050565b5f805f805f60a08688031215611cf857611cf761186c565b5b5f611d05888289016118ba565b9550506020611d16888289016118ba565b945050604086013567ffffffffffffffff811115611d3757611d36611870565b5b611d4388828901611c02565b935050606086013567ffffffffffffffff811115611d6457611d63611870565b5b611d7088828901611c02565b925050608086013567ffffffffffffffff811115611d9157611d90611870565b5b611d9d88828901611cb2565b9150509295509295909350565b5f67ffffffffffffffff821115611dc457611dc3611af3565b5b602082029050602081019050919050565b5f611de7611de284611daa565b611b51565b90508083825260208201905060208402830185811115611e0a57611e09611b96565b5b835b81811015611e335780611e1f88826118ba565b845260208401935050602081019050611e0c565b5050509392505050565b5f82601f830112611e5157611e50611aef565b5b8135611e61848260208601611dd5565b91505092915050565b5f8060408385031215611e8057611e7f61186c565b5b5f83013567ffffffffffffffff811115611e9d57611e9c611870565b5b611ea985828601611e3d565b925050602083013567ffffffffffffffff811115611eca57611ec9611870565b5b611ed685828601611c02565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611f12816118ce565b82525050565b5f611f238383611f09565b60208301905092915050565b5f602082019050919050565b5f611f4582611ee0565b611f4f8185611eea565b9350611f5a83611efa565b805f5b83811015611f8a578151611f718882611f18565b9750611f7c83611f2f565b925050600181019050611f5d565b5085935050505092915050565b5f6020820190508181035f830152611faf8184611f3b565b905092915050565b5f80fd5b5f8083601f840112611fd057611fcf611aef565b5b8235905067ffffffffffffffff811115611fed57611fec611fb7565b5b60208301915083600182028301111561200957612008611b96565b5b9250929050565b5f80602083850312156120265761202561186c565b5b5f83013567ffffffffffffffff81111561204357612042611870565b5b61204f85828601611fbb565b92509250509250929050565b61206481611893565b82525050565b5f60208201905061207d5f83018461205b565b92915050565b61208c816119e7565b8114612096575f80fd5b50565b5f813590506120a781612083565b92915050565b5f80604083850312156120c3576120c261186c565b5b5f6120d0858286016118ba565b92505060206120e185828601612099565b9150509250929050565b5f80604083850312156121015761210061186c565b5b5f61210e858286016118ba565b925050602061211f858286016118ba565b9150509250929050565b5f8083601f84011261213e5761213d611aef565b5b8235905067ffffffffffffffff81111561215b5761215a611fb7565b5b60208301915083602082028301111561217757612176611b96565b5b9250929050565b5f80602083850312156121945761219361186c565b5b5f83013567ffffffffffffffff8111156121b1576121b0611870565b5b6121bd85828601612129565b92509250509250929050565b5f805f805f60a086880312156121e2576121e161186c565b5b5f6121ef888289016118ba565b9550506020612200888289016118ba565b9450506040612211888289016118ed565b9350506060612222888289016118ed565b925050608086013567ffffffffffffffff81111561224357612242611870565b5b61224f88828901611cb2565b9150509295509295909350565b5f602082840312156122715761227061186c565b5b5f61227e848285016118ba565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806122cb57607f821691505b6020821081036122de576122dd612287565b5b50919050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f815461230c816122b4565b61231681866122e4565b9450600182165f8114612330576001811461234557612377565b60ff1983168652811515820286019350612377565b61234e856122ee565b5f5b8381101561236f57815481890152600182019150602081019050612350565b838801955050505b50505092915050565b5f61238a82611a1a565b61239481856122e4565b93506123a4818560208601611a34565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6123e46005836122e4565b91506123ef826123b0565b600582019050919050565b5f6124058285612300565b91506124118284612380565b915061241c826123d8565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82905092915050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026124a97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261246e565b6124b3868361246e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6124ee6124e96124e4846118ce565b6124cb565b6118ce565b9050919050565b5f819050919050565b612507836124d4565b61251b612513826124f5565b84845461247a565b825550505050565b5f90565b61252f612523565b61253a8184846124fe565b505050565b5b8181101561255d576125525f82612527565b600181019050612540565b5050565b601f8211156125a257612573816122ee565b61257c8461245f565b8101602085101561258b578190505b61259f6125978561245f565b83018261253f565b50505b505050565b5f82821c905092915050565b5f6125c25f19846008026125a7565b1980831691505092915050565b5f6125da83836125b3565b9150826002028217905092915050565b6125f48383612455565b67ffffffffffffffff81111561260d5761260c611af3565b5b61261782546122b4565b612622828285612561565b5f601f83116001811461264f575f841561263d578287013590505b61264785826125cf565b8655506126ae565b601f19841661265d866122ee565b5f5b828110156126845784890135825560018201915060208501945060208101905061265f565b868310156126a1578489013561269d601f8916826125b3565b8355505b6001600288020188555050505b50505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126ee826118ce565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127205761271f6126b7565b5b600182019050919050565b5f819050919050565b5f61274e6127496127448461272b565b6124cb565b6118ce565b9050919050565b61275e81612734565b82525050565b5f6040820190506127775f830185612755565b6127846020830184612755565b9392505050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b5f6127b08261278b565b91506fffffffffffffffffffffffffffffffff82036127d2576127d16126b7565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612814826118ce565b915061281f836118ce565b9250828201905080821115612837576128366126b7565b5b92915050565b5f6040820190508181035f8301526128558185611f3b565b905081810360208301526128698184611f3b565b90509392505050565b5f6040820190506128855f83018561193f565b612892602083018461193f565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f6128bd82612899565b6128c781856128a3565b93506128d7818560208601611a34565b6128e081611a5c565b840191505092915050565b5f60a0820190506128fe5f83018861205b565b61290b602083018761205b565b818103604083015261291d8186611f3b565b905081810360608301526129318185611f3b565b9050818103608083015261294581846128b3565b90509695505050505050565b5f8151905061295f81611992565b92915050565b5f6020828403121561297a5761297961186c565b5b5f61298784828501612951565b91505092915050565b5f8160e01c9050919050565b5f60033d11156129b85760045f803e6129b55f51612990565b90505b90565b5f60443d10612a47576129cc611863565b60043d036004823e80513d602482011167ffffffffffffffff821117156129f4575050612a47565b808201805167ffffffffffffffff811115612a125750505050612a47565b80602083010160043d038501811115612a2f575050505050612a47565b612a3e82602001850186611b20565b82955050505050505b90565b5f60a082019050612a5d5f83018861205b565b612a6a602083018761205b565b612a77604083018661193f565b612a84606083018561193f565b8181036080830152612a9681846128b3565b9050969550505050505056fea2646970667358221220c8da75d9564547421346964037b3c22e547d01b53ef898011ee65ccf08a2e57b64736f6c63430008160033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100e7575f3560e01c80638da5cb5b1161008a578063e985e9c511610064578063e985e9c514610259578063ece8c31c14610289578063f242432a146102a5578063f2fde38b146102c1576100e7565b80638da5cb5b1461020157806395d89b411461021f578063a22cb4651461023d576100e7565b80630e89341c116100c65780630e89341c146101695780632eb2c2d6146101995780634e1273f4146101b5578063570b3c6a146101e5576100e7565b8062fdd58e146100eb57806301ffc9a71461011b57806306fdde031461014b575b5f80fd5b61010560048036038101906101009190611901565b6102dd565b604051610112919061194e565b60405180910390f35b610135600480360381019061013091906119bc565b610333565b6040516101429190611a01565b60405180910390f35b61015361046c565b6040516101609190611aa4565b60405180910390f35b610183600480360381019061017e9190611ac4565b6104a9565b6040516101909190611aa4565b60405180910390f35b6101b360048036038101906101ae9190611cdf565b610507565b005b6101cf60048036038101906101ca9190611e6a565b610610565b6040516101dc9190611f97565b60405180910390f35b6101ff60048036038101906101fa9190612010565b610720565b005b6102096107ba565b604051610216919061206a565b60405180910390f35b6102276107e1565b6040516102349190611aa4565b60405180910390f35b610257600480360381019061025291906120ad565b61081e565b005b610273600480360381019061026e91906120eb565b61082d565b6040516102809190611a01565b60405180910390f35b6102a3600480360381019061029e919061217e565b6108bb565b005b6102bf60048036038101906102ba91906121c9565b610ac9565b005b6102db60048036038101906102d6919061225c565b610bd2565b005b5f60015f8381526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f7fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103fd57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061046557507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606040518060400160405280601a81526020017f506c616e6574204958202d20526574726f64726f702050617373000000000000815250905090565b60605f600380546104b9906122b4565b9050116104d45760405180602001604052805f815250610500565b60036104df83610d11565b6040516020016104f09291906123fa565b6040516020818303038152906040525b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156105c5575060025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156105fc576040517f99b2a73600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106098585858585610ddb565b5050505050565b60605f835167ffffffffffffffff81111561062e5761062d611af3565b5b60405190808252806020026020018201604052801561065c5781602001602082028036833780820191505090505b5090505f5b84518110156107155760015f8583815181106106805761067f612428565b5b602002602001015181526020019081526020015f205f8683815181106106a9576106a8612428565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548282815181106106fe576106fd612428565b5b602002602001018181525050806001019050610661565b508091505092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146107a4576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181600391826107b59291906125ea565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f506c616e65744958000000000000000000000000000000000000000000000000815250905090565b610829338383611062565b5050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461093f576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b82829050816fffffffffffffffffffffffffffffffff161015610ac45760015f600181526020019081526020015f205f8484846fffffffffffffffffffffffffffffffff1681811061099657610995612428565b5b90506020020160208101906109ab919061225c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154809291906109f4906126e4565b91905055508282826fffffffffffffffffffffffffffffffff16818110610a1e57610a1d612428565b5b9050602002016020810190610a33919061225c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62600180604051610aa9929190612764565b60405180910390a48080610abc906127a6565b915050610941565b505050565b3373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610b87575060025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610bbe576040517f99b2a73600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bcb85858585856111c0565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c56576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60605f6001610d1f84611394565b0190505f8167ffffffffffffffff811115610d3d57610d3c611af3565b5b6040519080825280601f01601f191660200182016040528015610d6f5781602001600182028036833780820191505090505b5090505f82602001820190505b600115610dd0578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610dc557610dc46127dd565b5b0494505f8503610d7c575b819350505050919050565b5f5b8351811015610fce5760015f858381518110610dfc57610dfb612428565b5b602002602001015181526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054838281518110610e6057610e5f612428565b5b60200260200101511115610ea0576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828181518110610eb357610eb2612428565b5b602002602001015160015f868481518110610ed157610ed0612428565b5b602002602001015181526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282540392505081905550828181518110610f4057610f3f612428565b5b602002602001015160015f868481518110610f5e57610f5d612428565b5b602002602001015181526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610fbc919061280a565b92505081905550806001019050610ddd565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161104592919061283d565b60405180910390a461105b3386868686866114e5565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110c7576040517f3cf0df2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111b39190611a01565b60405180910390a3505050565b60015f8481526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115611246576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160015f8581526020019081526020015f205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055508160015f8581526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546112fa919061280a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051611377929190612872565b60405180910390a461138d3386868686866116a4565b5050505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106113f0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816113e6576113e56127dd565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061142d576d04ee2d6d415b85acef81000000008381611423576114226127dd565b5b0492506020810190505b662386f26fc10000831061145c57662386f26fc100008381611452576114516127dd565b5b0492506010810190505b6305f5e1008310611485576305f5e100838161147b5761147a6127dd565b5b0492506008810190505b61271083106114aa5761271083816114a05761149f6127dd565b5b0492506004810190505b606483106114cd57606483816114c3576114c26127dd565b5b0492506002810190505b600a83106114dc576001810190505b80915050919050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561169c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016115459594939291906128eb565b6020604051808303815f875af192505050801561158057506040513d601f19601f8201168201806040525081019061157d9190612965565b60015b61161c5761158c61299c565b806308c379a0036115e857506115a06129bb565b806115ab57506115ea565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df9190611aa4565b60405180910390fd5b505b6040517fc14a9c6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461169a576040517f086d127300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b505050505050565b5f8473ffffffffffffffffffffffffffffffffffffffff163b111561185b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611704959493929190612a4a565b6020604051808303815f875af192505050801561173f57506040513d601f19601f8201168201806040525081019061173c9190612965565b60015b6117db5761174b61299c565b806308c379a0036117a7575061175f6129bb565b8061176a57506117a9565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e9190611aa4565b60405180910390fd5b505b6040517fc14a9c6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611859576040517f086d127300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b505050505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61189d82611874565b9050919050565b6118ad81611893565b81146118b7575f80fd5b50565b5f813590506118c8816118a4565b92915050565b5f819050919050565b6118e0816118ce565b81146118ea575f80fd5b50565b5f813590506118fb816118d7565b92915050565b5f80604083850312156119175761191661186c565b5b5f611924858286016118ba565b9250506020611935858286016118ed565b9150509250929050565b611948816118ce565b82525050565b5f6020820190506119615f83018461193f565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61199b81611967565b81146119a5575f80fd5b50565b5f813590506119b681611992565b92915050565b5f602082840312156119d1576119d061186c565b5b5f6119de848285016119a8565b91505092915050565b5f8115159050919050565b6119fb816119e7565b82525050565b5f602082019050611a145f8301846119f2565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611a51578082015181840152602081019050611a36565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a7682611a1a565b611a808185611a24565b9350611a90818560208601611a34565b611a9981611a5c565b840191505092915050565b5f6020820190508181035f830152611abc8184611a6c565b905092915050565b5f60208284031215611ad957611ad861186c565b5b5f611ae6848285016118ed565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611b2982611a5c565b810181811067ffffffffffffffff82111715611b4857611b47611af3565b5b80604052505050565b5f611b5a611863565b9050611b668282611b20565b919050565b5f67ffffffffffffffff821115611b8557611b84611af3565b5b602082029050602081019050919050565b5f80fd5b5f611bac611ba784611b6b565b611b51565b90508083825260208201905060208402830185811115611bcf57611bce611b96565b5b835b81811015611bf85780611be488826118ed565b845260208401935050602081019050611bd1565b5050509392505050565b5f82601f830112611c1657611c15611aef565b5b8135611c26848260208601611b9a565b91505092915050565b5f80fd5b5f67ffffffffffffffff821115611c4d57611c4c611af3565b5b611c5682611a5c565b9050602081019050919050565b828183375f83830152505050565b5f611c83611c7e84611c33565b611b51565b905082815260208101848484011115611c9f57611c9e611c2f565b5b611caa848285611c63565b509392505050565b5f82601f830112611cc657611cc5611aef565b5b8135611cd6848260208601611c71565b91505092915050565b5f805f805f60a08688031215611cf857611cf761186c565b5b5f611d05888289016118ba565b9550506020611d16888289016118ba565b945050604086013567ffffffffffffffff811115611d3757611d36611870565b5b611d4388828901611c02565b935050606086013567ffffffffffffffff811115611d6457611d63611870565b5b611d7088828901611c02565b925050608086013567ffffffffffffffff811115611d9157611d90611870565b5b611d9d88828901611cb2565b9150509295509295909350565b5f67ffffffffffffffff821115611dc457611dc3611af3565b5b602082029050602081019050919050565b5f611de7611de284611daa565b611b51565b90508083825260208201905060208402830185811115611e0a57611e09611b96565b5b835b81811015611e335780611e1f88826118ba565b845260208401935050602081019050611e0c565b5050509392505050565b5f82601f830112611e5157611e50611aef565b5b8135611e61848260208601611dd5565b91505092915050565b5f8060408385031215611e8057611e7f61186c565b5b5f83013567ffffffffffffffff811115611e9d57611e9c611870565b5b611ea985828601611e3d565b925050602083013567ffffffffffffffff811115611eca57611ec9611870565b5b611ed685828601611c02565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611f12816118ce565b82525050565b5f611f238383611f09565b60208301905092915050565b5f602082019050919050565b5f611f4582611ee0565b611f4f8185611eea565b9350611f5a83611efa565b805f5b83811015611f8a578151611f718882611f18565b9750611f7c83611f2f565b925050600181019050611f5d565b5085935050505092915050565b5f6020820190508181035f830152611faf8184611f3b565b905092915050565b5f80fd5b5f8083601f840112611fd057611fcf611aef565b5b8235905067ffffffffffffffff811115611fed57611fec611fb7565b5b60208301915083600182028301111561200957612008611b96565b5b9250929050565b5f80602083850312156120265761202561186c565b5b5f83013567ffffffffffffffff81111561204357612042611870565b5b61204f85828601611fbb565b92509250509250929050565b61206481611893565b82525050565b5f60208201905061207d5f83018461205b565b92915050565b61208c816119e7565b8114612096575f80fd5b50565b5f813590506120a781612083565b92915050565b5f80604083850312156120c3576120c261186c565b5b5f6120d0858286016118ba565b92505060206120e185828601612099565b9150509250929050565b5f80604083850312156121015761210061186c565b5b5f61210e858286016118ba565b925050602061211f858286016118ba565b9150509250929050565b5f8083601f84011261213e5761213d611aef565b5b8235905067ffffffffffffffff81111561215b5761215a611fb7565b5b60208301915083602082028301111561217757612176611b96565b5b9250929050565b5f80602083850312156121945761219361186c565b5b5f83013567ffffffffffffffff8111156121b1576121b0611870565b5b6121bd85828601612129565b92509250509250929050565b5f805f805f60a086880312156121e2576121e161186c565b5b5f6121ef888289016118ba565b9550506020612200888289016118ba565b9450506040612211888289016118ed565b9350506060612222888289016118ed565b925050608086013567ffffffffffffffff81111561224357612242611870565b5b61224f88828901611cb2565b9150509295509295909350565b5f602082840312156122715761227061186c565b5b5f61227e848285016118ba565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806122cb57607f821691505b6020821081036122de576122dd612287565b5b50919050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f815461230c816122b4565b61231681866122e4565b9450600182165f8114612330576001811461234557612377565b60ff1983168652811515820286019350612377565b61234e856122ee565b5f5b8381101561236f57815481890152600182019150602081019050612350565b838801955050505b50505092915050565b5f61238a82611a1a565b61239481856122e4565b93506123a4818560208601611a34565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6123e46005836122e4565b91506123ef826123b0565b600582019050919050565b5f6124058285612300565b91506124118284612380565b915061241c826123d8565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82905092915050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026124a97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261246e565b6124b3868361246e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6124ee6124e96124e4846118ce565b6124cb565b6118ce565b9050919050565b5f819050919050565b612507836124d4565b61251b612513826124f5565b84845461247a565b825550505050565b5f90565b61252f612523565b61253a8184846124fe565b505050565b5b8181101561255d576125525f82612527565b600181019050612540565b5050565b601f8211156125a257612573816122ee565b61257c8461245f565b8101602085101561258b578190505b61259f6125978561245f565b83018261253f565b50505b505050565b5f82821c905092915050565b5f6125c25f19846008026125a7565b1980831691505092915050565b5f6125da83836125b3565b9150826002028217905092915050565b6125f48383612455565b67ffffffffffffffff81111561260d5761260c611af3565b5b61261782546122b4565b612622828285612561565b5f601f83116001811461264f575f841561263d578287013590505b61264785826125cf565b8655506126ae565b601f19841661265d866122ee565b5f5b828110156126845784890135825560018201915060208501945060208101905061265f565b868310156126a1578489013561269d601f8916826125b3565b8355505b6001600288020188555050505b50505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126ee826118ce565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127205761271f6126b7565b5b600182019050919050565b5f819050919050565b5f61274e6127496127448461272b565b6124cb565b6118ce565b9050919050565b61275e81612734565b82525050565b5f6040820190506127775f830185612755565b6127846020830184612755565b9392505050565b5f6fffffffffffffffffffffffffffffffff82169050919050565b5f6127b08261278b565b91506fffffffffffffffffffffffffffffffff82036127d2576127d16126b7565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612814826118ce565b915061281f836118ce565b9250828201905080821115612837576128366126b7565b5b92915050565b5f6040820190508181035f8301526128558185611f3b565b905081810360208301526128698184611f3b565b90509392505050565b5f6040820190506128855f83018561193f565b612892602083018461193f565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f6128bd82612899565b6128c781856128a3565b93506128d7818560208601611a34565b6128e081611a5c565b840191505092915050565b5f60a0820190506128fe5f83018861205b565b61290b602083018761205b565b818103604083015261291d8186611f3b565b905081810360608301526129318185611f3b565b9050818103608083015261294581846128b3565b90509695505050505050565b5f8151905061295f81611992565b92915050565b5f6020828403121561297a5761297961186c565b5b5f61298784828501612951565b91505092915050565b5f8160e01c9050919050565b5f60033d11156129b85760045f803e6129b55f51612990565b90505b90565b5f60443d10612a47576129cc611863565b60043d036004823e80513d602482011167ffffffffffffffff821117156129f4575050612a47565b808201805167ffffffffffffffff811115612a125750505050612a47565b80602083010160043d038501811115612a2f575050505050612a47565b612a3e82602001850186611b20565b82955050505050505b90565b5f60a082019050612a5d5f83018861205b565b612a6a602083018761205b565b612a77604083018661193f565b612a84606083018561193f565b8181036080830152612a9681846128b3565b9050969550505050505056fea2646970667358221220c8da75d9564547421346964037b3c22e547d01b53ef898011ee65ccf08a2e57b64736f6c63430008160033

Deployed Bytecode Sourcemap

10526:6759:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11872:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11329:298;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11139:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11635:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13178:388;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12042:389;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16924:90;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;577:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11232:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12439:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12619:187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17022:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12814:356;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;672:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11872:162;11977:7;12004:9;:13;12014:2;12004:13;;;;;;;;;;;:22;12018:7;12004:22;;;;;;;;;;;;;;;;11997:29;;11872:162;;;;:::o;11329:298::-;11415:4;11467:26;11452:41;;;:11;:41;;;;:110;;;;11525:37;11510:52;;;:11;:52;;;;11452:110;:167;;;;11594:25;11579:40;;;:11;:40;;;;11452:167;11432:187;;11329:298;;;:::o;11139:85::-;11178:13;11211:5;;;;;;;;;;;;;;;;;11204:12;;11139:85;:::o;11635:229::-;11692:13;11759:1;11744:4;11738:18;;;;;:::i;:::-;;;:22;:118;;;;;;;;;;;;;;;;;11804:4;11810:13;:2;:11;:13::i;:::-;11787:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11738:118;11718:138;;11635:229;;;:::o;13178:388::-;13395:10;13387:18;;:4;:18;;;;:59;;;;;13410:18;:24;13429:4;13410:24;;;;;;;;;;;;;;;:36;13435:10;13410:36;;;;;;;;;;;;;;;;;;;;;;;;;13409:37;13387:59;13383:110;;;13468:25;;;;;;;;;;;;;;13383:110;13506:52;13529:4;13535:2;13539:3;13544:7;13553:4;13506:22;:52::i;:::-;13178:388;;;;;:::o;12042:389::-;12172:16;12201:30;12248:8;:15;12234:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12201:63;;12280:9;12275:118;12295:8;:15;12291:1;:19;12275:118;;;12351:9;:17;12361:3;12365:1;12361:6;;;;;;;;:::i;:::-;;;;;;;;12351:17;;;;;;;;;;;:30;12369:8;12378:1;12369:11;;;;;;;;:::i;:::-;;;;;;;;12351:30;;;;;;;;;;;;;;;;12332:13;12346:1;12332:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;12312:3;;;;;12275:118;;;;12410:13;12403:20;;;12042:389;;;;:::o;16924:90::-;400:10;390:20;;:6;;;;;;;;;;:20;;;386:43;;419:10;;;;;;;;;;;;;;386:43;17002:4:::1;;16995;:11;;;;;;;:::i;:::-;;16924:90:::0;;:::o;577:87::-;623:7;650:6;;;;;;;;;;;643:13;;577:87;:::o;11232:89::-;11273:13;11306:7;;;;;;;;;;;;;;;;;11299:14;;11232:89;:::o;12439:172::-;12553:50;12572:10;12584:8;12594;12553:18;:50::i;:::-;12439:172;;:::o;12619:187::-;12737:4;12761:18;:27;12780:7;12761:27;;;;;;;;;;;;;;;:37;12789:8;12761:37;;;;;;;;;;;;;;;;;;;;;;;;;12754:44;;12619:187;;;;:::o;17022:260::-;400:10;390:20;;:6;;;;;;;;;;:20;;;386:43;;419:10;;;;;;;;;;;;;;386:43;17116:9:::1;17111:164;17131:5;;:12;;17127:1;:16;;;17111:164;;;17165:9;:12;17175:1;17165:12;;;;;;;;;;;:22;17178:5;;17184:1;17178:8;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;17165:22;;;;;;;;;;;;;;;;:24;;;;;;;;;:::i;:::-;;;;;;17248:5;;17254:1;17248:8;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;17209:54;;17244:1;17209:54;;17224:10;17209:54;;;17258:1;17261::::0;17209:54:::1;;;;;;;:::i;:::-;;;;;;;;17145:3;;;;;:::i;:::-;;;;17111:164;;;;17022:260:::0;;:::o;12814:356::-;13006:10;12998:18;;:4;:18;;;;:59;;;;;13021:18;:24;13040:4;13021:24;;;;;;;;;;;;;;;:36;13046:10;13021:36;;;;;;;;;;;;;;;;;;;;;;;;;13020:37;12998:59;12994:110;;;13079:25;;;;;;;;;;;;;;12994:110;13117:45;13135:4;13141:2;13145;13149:6;13157:4;13117:17;:45::i;:::-;12814:356;;;;;:::o;672:160::-;400:10;390:20;;:6;;;;;;;;;;:20;;;386:43;;419:10;;;;;;;;;;;;;;386:43;787:8:::1;758:38;;779:6;::::0;::::1;;;;;;;;758:38;;;;;;;;;;;;816:8;807:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;672:160:::0;:::o;9803:716::-;9859:13;9910:14;9947:1;9927:17;9938:5;9927:10;:17::i;:::-;:21;9910:38;;9963:20;9997:6;9986:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9963:41;;10019:11;10148:6;10144:2;10140:15;10132:6;10128:28;10121:35;;10185:288;10192:4;10185:288;;;10217:5;;;;;;;;10359:8;10354:2;10347:5;10343:14;10338:30;10333:3;10325:44;10415:2;10406:11;;;;;;:::i;:::-;;;;;10449:1;10440:5;:10;10185:288;10436:21;10185:288;10494:6;10487:13;;;;;9803:716;;;:::o;14082:742::-;14283:9;14278:297;14298:3;:10;14294:1;:14;14278:297;;;14347:9;:17;14357:3;14361:1;14357:6;;;;;;;;:::i;:::-;;;;;;;;14347:17;;;;;;;;;;;:23;14365:4;14347:23;;;;;;;;;;;;;;;;14334:7;14342:1;14334:10;;;;;;;;:::i;:::-;;;;;;;;:36;14330:87;;;14396:21;;;;;;;;;;;;;;14330:87;14488:7;14496:1;14488:10;;;;;;;;:::i;:::-;;;;;;;;14461:9;:17;14471:3;14475:1;14471:6;;;;;;;;:::i;:::-;;;;;;;;14461:17;;;;;;;;;;;:23;14479:4;14461:23;;;;;;;;;;;;;;;;:37;;;;;;;;;;;14553:7;14561:1;14553:10;;;;;;;;:::i;:::-;;;;;;;;14528:9;:17;14538:3;14542:1;14538:6;;;;;;;;:::i;:::-;;;;;;;;14528:17;;;;;;;;;;;:21;14546:2;14528:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;14310:3;;;;;14278:297;;;;14622:2;14590:49;;14616:4;14590:49;;14604:10;14590:49;;;14626:3;14631:7;14590:49;;;;;;;:::i;:::-;;;;;;;;14650:166;14700:10;14725:4;14744:2;14761:3;14779:7;14801:4;14650:35;:166::i;:::-;14082:742;;;;;:::o;14832:295::-;14974:8;14965:17;;:5;:17;;;14961:44;;14991:14;;;;;;;;;;;;;;14961:44;15054:8;15016:18;:25;15035:5;15016:25;;;;;;;;;;;;;;;:35;15042:8;15016:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;15100:8;15078:41;;15093:5;15078:41;;;15110:8;15078:41;;;;;;:::i;:::-;;;;;;;;14832:295;;;:::o;13574:500::-;13758:9;:13;13768:2;13758:13;;;;;;;;;;;:19;13772:4;13758:19;;;;;;;;;;;;;;;;13749:6;:28;13745:62;;;13786:21;;;;;;;;;;;;;;13745:62;13866:6;13843:9;:13;13853:2;13843:13;;;;;;;;;;;:19;13857:4;13843:19;;;;;;;;;;;;;;;;:29;;;;;;;;;;;13915:6;13894:9;:13;13904:2;13894:13;;;;;;;;;;;:17;13908:2;13894:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;13970:2;13937:48;;13964:4;13937:48;;13952:10;13937:48;;;13974:2;13978:6;13937:48;;;;;;;:::i;:::-;;;;;;;;13996:70;14027:10;14039:4;14045:2;14049;14053:6;14061:4;13996:30;:70::i;:::-;13574:500;;;;;:::o;8762:948::-;8815:7;8835:14;8852:1;8835:18;;8902:8;8893:5;:17;8889:106;;8940:8;8931:17;;;;;;:::i;:::-;;;;;8977:2;8967:12;;;;8889:106;9022:8;9013:5;:17;9009:106;;9060:8;9051:17;;;;;;:::i;:::-;;;;;9097:2;9087:12;;;;9009:106;9142:8;9133:5;:17;9129:106;;9180:8;9171:17;;;;;;:::i;:::-;;;;;9217:2;9207:12;;;;9129:106;9262:7;9253:5;:16;9249:103;;9299:7;9290:16;;;;;;:::i;:::-;;;;;9335:1;9325:11;;;;9249:103;9379:7;9370:5;:16;9366:103;;9416:7;9407:16;;;;;;:::i;:::-;;;;;9452:1;9442:11;;;;9366:103;9496:7;9487:5;:16;9483:103;;9533:7;9524:16;;;;;;:::i;:::-;;;;;9569:1;9559:11;;;;9483:103;9613:7;9604:5;:16;9600:68;;9651:1;9641:11;;;;9600:68;9696:6;9689:13;;;8762:948;;;:::o;15991:925::-;16248:1;16231:2;:14;;;:18;16227:682;;;16304:2;16287:43;;;16353:8;16384:4;16411:3;16437:7;16467:4;16287:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16266:632;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16806:6;16799:14;;;;;;;;;;;:::i;:::-;;;;;;;;16266:632;;;16862:20;;;;;;;;;;;;;;16266:632;16587:48;;;16575:60;;;:8;:60;;;;16549:181;;16685:25;;;;;;;;;;;;;;16549:181;16504:241;16227:682;15991:925;;;;;;:::o;15135:848::-;15367:1;15350:2;:14;;;:18;15346:630;;;15423:2;15406:38;;;15467:8;15498:4;15525:2;15550:6;15579:4;15406:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15385:580;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15873:6;15866:14;;;;;;;;;;;:::i;:::-;;;;;;;;15385:580;;;15929:20;;;;;;;;;;;;;;15385:580;15677:43;;;15665:55;;;:8;:55;;;;15661:136;;15752:25;;;;;;;;;;;;;;15661:136;15616:196;15346:630;15135:848;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:180;5061:77;5058:1;5051:88;5158:4;5155:1;5148:15;5182:4;5179:1;5172:15;5199:281;5282:27;5304:4;5282:27;:::i;:::-;5274:6;5270:40;5412:6;5400:10;5397:22;5376:18;5364:10;5361:34;5358:62;5355:88;;;5423:18;;:::i;:::-;5355:88;5463:10;5459:2;5452:22;5242:238;5199:281;;:::o;5486:129::-;5520:6;5547:20;;:::i;:::-;5537:30;;5576:33;5604:4;5596:6;5576:33;:::i;:::-;5486:129;;;:::o;5621:311::-;5698:4;5788:18;5780:6;5777:30;5774:56;;;5810:18;;:::i;:::-;5774:56;5860:4;5852:6;5848:17;5840:25;;5920:4;5914;5910:15;5902:23;;5621:311;;;:::o;5938:117::-;6047:1;6044;6037:12;6078:710;6174:5;6199:81;6215:64;6272:6;6215:64;:::i;:::-;6199:81;:::i;:::-;6190:90;;6300:5;6329:6;6322:5;6315:21;6363:4;6356:5;6352:16;6345:23;;6416:4;6408:6;6404:17;6396:6;6392:30;6445:3;6437:6;6434:15;6431:122;;;6464:79;;:::i;:::-;6431:122;6579:6;6562:220;6596:6;6591:3;6588:15;6562:220;;;6671:3;6700:37;6733:3;6721:10;6700:37;:::i;:::-;6695:3;6688:50;6767:4;6762:3;6758:14;6751:21;;6638:144;6622:4;6617:3;6613:14;6606:21;;6562:220;;;6566:21;6180:608;;6078:710;;;;;:::o;6811:370::-;6882:5;6931:3;6924:4;6916:6;6912:17;6908:27;6898:122;;6939:79;;:::i;:::-;6898:122;7056:6;7043:20;7081:94;7171:3;7163:6;7156:4;7148:6;7144:17;7081:94;:::i;:::-;7072:103;;6888:293;6811:370;;;;:::o;7187:117::-;7296:1;7293;7286:12;7310:307;7371:4;7461:18;7453:6;7450:30;7447:56;;;7483:18;;:::i;:::-;7447:56;7521:29;7543:6;7521:29;:::i;:::-;7513:37;;7605:4;7599;7595:15;7587:23;;7310:307;;;:::o;7623:146::-;7720:6;7715:3;7710;7697:30;7761:1;7752:6;7747:3;7743:16;7736:27;7623:146;;;:::o;7775:423::-;7852:5;7877:65;7893:48;7934:6;7893:48;:::i;:::-;7877:65;:::i;:::-;7868:74;;7965:6;7958:5;7951:21;8003:4;7996:5;7992:16;8041:3;8032:6;8027:3;8023:16;8020:25;8017:112;;;8048:79;;:::i;:::-;8017:112;8138:54;8185:6;8180:3;8175;8138:54;:::i;:::-;7858:340;7775:423;;;;;:::o;8217:338::-;8272:5;8321:3;8314:4;8306:6;8302:17;8298:27;8288:122;;8329:79;;:::i;:::-;8288:122;8446:6;8433:20;8471:78;8545:3;8537:6;8530:4;8522:6;8518:17;8471:78;:::i;:::-;8462:87;;8278:277;8217:338;;;;:::o;8561:1509::-;8715:6;8723;8731;8739;8747;8796:3;8784:9;8775:7;8771:23;8767:33;8764:120;;;8803:79;;:::i;:::-;8764:120;8923:1;8948:53;8993:7;8984:6;8973:9;8969:22;8948:53;:::i;:::-;8938:63;;8894:117;9050:2;9076:53;9121:7;9112:6;9101:9;9097:22;9076:53;:::i;:::-;9066:63;;9021:118;9206:2;9195:9;9191:18;9178:32;9237:18;9229:6;9226:30;9223:117;;;9259:79;;:::i;:::-;9223:117;9364:78;9434:7;9425:6;9414:9;9410:22;9364:78;:::i;:::-;9354:88;;9149:303;9519:2;9508:9;9504:18;9491:32;9550:18;9542:6;9539:30;9536:117;;;9572:79;;:::i;:::-;9536:117;9677:78;9747:7;9738:6;9727:9;9723:22;9677:78;:::i;:::-;9667:88;;9462:303;9832:3;9821:9;9817:19;9804:33;9864:18;9856:6;9853:30;9850:117;;;9886:79;;:::i;:::-;9850:117;9991:62;10045:7;10036:6;10025:9;10021:22;9991:62;:::i;:::-;9981:72;;9775:288;8561:1509;;;;;;;;:::o;10076:311::-;10153:4;10243:18;10235:6;10232:30;10229:56;;;10265:18;;:::i;:::-;10229:56;10315:4;10307:6;10303:17;10295:25;;10375:4;10369;10365:15;10357:23;;10076:311;;;:::o;10410:710::-;10506:5;10531:81;10547:64;10604:6;10547:64;:::i;:::-;10531:81;:::i;:::-;10522:90;;10632:5;10661:6;10654:5;10647:21;10695:4;10688:5;10684:16;10677:23;;10748:4;10740:6;10736:17;10728:6;10724:30;10777:3;10769:6;10766:15;10763:122;;;10796:79;;:::i;:::-;10763:122;10911:6;10894:220;10928:6;10923:3;10920:15;10894:220;;;11003:3;11032:37;11065:3;11053:10;11032:37;:::i;:::-;11027:3;11020:50;11099:4;11094:3;11090:14;11083:21;;10970:144;10954:4;10949:3;10945:14;10938:21;;10894:220;;;10898:21;10512:608;;10410:710;;;;;:::o;11143:370::-;11214:5;11263:3;11256:4;11248:6;11244:17;11240:27;11230:122;;11271:79;;:::i;:::-;11230:122;11388:6;11375:20;11413:94;11503:3;11495:6;11488:4;11480:6;11476:17;11413:94;:::i;:::-;11404:103;;11220:293;11143:370;;;;:::o;11519:894::-;11637:6;11645;11694:2;11682:9;11673:7;11669:23;11665:32;11662:119;;;11700:79;;:::i;:::-;11662:119;11848:1;11837:9;11833:17;11820:31;11878:18;11870:6;11867:30;11864:117;;;11900:79;;:::i;:::-;11864:117;12005:78;12075:7;12066:6;12055:9;12051:22;12005:78;:::i;:::-;11995:88;;11791:302;12160:2;12149:9;12145:18;12132:32;12191:18;12183:6;12180:30;12177:117;;;12213:79;;:::i;:::-;12177:117;12318:78;12388:7;12379:6;12368:9;12364:22;12318:78;:::i;:::-;12308:88;;12103:303;11519:894;;;;;:::o;12419:114::-;12486:6;12520:5;12514:12;12504:22;;12419:114;;;:::o;12539:184::-;12638:11;12672:6;12667:3;12660:19;12712:4;12707:3;12703:14;12688:29;;12539:184;;;;:::o;12729:132::-;12796:4;12819:3;12811:11;;12849:4;12844:3;12840:14;12832:22;;12729:132;;;:::o;12867:108::-;12944:24;12962:5;12944:24;:::i;:::-;12939:3;12932:37;12867:108;;:::o;12981:179::-;13050:10;13071:46;13113:3;13105:6;13071:46;:::i;:::-;13149:4;13144:3;13140:14;13126:28;;12981:179;;;;:::o;13166:113::-;13236:4;13268;13263:3;13259:14;13251:22;;13166:113;;;:::o;13315:732::-;13434:3;13463:54;13511:5;13463:54;:::i;:::-;13533:86;13612:6;13607:3;13533:86;:::i;:::-;13526:93;;13643:56;13693:5;13643:56;:::i;:::-;13722:7;13753:1;13738:284;13763:6;13760:1;13757:13;13738:284;;;13839:6;13833:13;13866:63;13925:3;13910:13;13866:63;:::i;:::-;13859:70;;13952:60;14005:6;13952:60;:::i;:::-;13942:70;;13798:224;13785:1;13782;13778:9;13773:14;;13738:284;;;13742:14;14038:3;14031:10;;13439:608;;;13315:732;;;;:::o;14053:373::-;14196:4;14234:2;14223:9;14219:18;14211:26;;14283:9;14277:4;14273:20;14269:1;14258:9;14254:17;14247:47;14311:108;14414:4;14405:6;14311:108;:::i;:::-;14303:116;;14053:373;;;;:::o;14432:117::-;14541:1;14538;14531:12;14569:553;14627:8;14637:6;14687:3;14680:4;14672:6;14668:17;14664:27;14654:122;;14695:79;;:::i;:::-;14654:122;14808:6;14795:20;14785:30;;14838:18;14830:6;14827:30;14824:117;;;14860:79;;:::i;:::-;14824:117;14974:4;14966:6;14962:17;14950:29;;15028:3;15020:4;15012:6;15008:17;14998:8;14994:32;14991:41;14988:128;;;15035:79;;:::i;:::-;14988:128;14569:553;;;;;:::o;15128:529::-;15199:6;15207;15256:2;15244:9;15235:7;15231:23;15227:32;15224:119;;;15262:79;;:::i;:::-;15224:119;15410:1;15399:9;15395:17;15382:31;15440:18;15432:6;15429:30;15426:117;;;15462:79;;:::i;:::-;15426:117;15575:65;15632:7;15623:6;15612:9;15608:22;15575:65;:::i;:::-;15557:83;;;;15353:297;15128:529;;;;;:::o;15663:118::-;15750:24;15768:5;15750:24;:::i;:::-;15745:3;15738:37;15663:118;;:::o;15787:222::-;15880:4;15918:2;15907:9;15903:18;15895:26;;15931:71;15999:1;15988:9;15984:17;15975:6;15931:71;:::i;:::-;15787:222;;;;:::o;16015:116::-;16085:21;16100:5;16085:21;:::i;:::-;16078:5;16075:32;16065:60;;16121:1;16118;16111:12;16065:60;16015:116;:::o;16137:133::-;16180:5;16218:6;16205:20;16196:29;;16234:30;16258:5;16234:30;:::i;:::-;16137:133;;;;:::o;16276:468::-;16341:6;16349;16398:2;16386:9;16377:7;16373:23;16369:32;16366:119;;;16404:79;;:::i;:::-;16366:119;16524:1;16549:53;16594:7;16585:6;16574:9;16570:22;16549:53;:::i;:::-;16539:63;;16495:117;16651:2;16677:50;16719:7;16710:6;16699:9;16695:22;16677:50;:::i;:::-;16667:60;;16622:115;16276:468;;;;;:::o;16750:474::-;16818:6;16826;16875:2;16863:9;16854:7;16850:23;16846:32;16843:119;;;16881:79;;:::i;:::-;16843:119;17001:1;17026:53;17071:7;17062:6;17051:9;17047:22;17026:53;:::i;:::-;17016:63;;16972:117;17128:2;17154:53;17199:7;17190:6;17179:9;17175:22;17154:53;:::i;:::-;17144:63;;17099:118;16750:474;;;;;:::o;17247:568::-;17320:8;17330:6;17380:3;17373:4;17365:6;17361:17;17357:27;17347:122;;17388:79;;:::i;:::-;17347:122;17501:6;17488:20;17478:30;;17531:18;17523:6;17520:30;17517:117;;;17553:79;;:::i;:::-;17517:117;17667:4;17659:6;17655:17;17643:29;;17721:3;17713:4;17705:6;17701:17;17691:8;17687:32;17684:41;17681:128;;;17728:79;;:::i;:::-;17681:128;17247:568;;;;;:::o;17821:559::-;17907:6;17915;17964:2;17952:9;17943:7;17939:23;17935:32;17932:119;;;17970:79;;:::i;:::-;17932:119;18118:1;18107:9;18103:17;18090:31;18148:18;18140:6;18137:30;18134:117;;;18170:79;;:::i;:::-;18134:117;18283:80;18355:7;18346:6;18335:9;18331:22;18283:80;:::i;:::-;18265:98;;;;18061:312;17821:559;;;;;:::o;18386:1089::-;18490:6;18498;18506;18514;18522;18571:3;18559:9;18550:7;18546:23;18542:33;18539:120;;;18578:79;;:::i;:::-;18539:120;18698:1;18723:53;18768:7;18759:6;18748:9;18744:22;18723:53;:::i;:::-;18713:63;;18669:117;18825:2;18851:53;18896:7;18887:6;18876:9;18872:22;18851:53;:::i;:::-;18841:63;;18796:118;18953:2;18979:53;19024:7;19015:6;19004:9;19000:22;18979:53;:::i;:::-;18969:63;;18924:118;19081:2;19107:53;19152:7;19143:6;19132:9;19128:22;19107:53;:::i;:::-;19097:63;;19052:118;19237:3;19226:9;19222:19;19209:33;19269:18;19261:6;19258:30;19255:117;;;19291:79;;:::i;:::-;19255:117;19396:62;19450:7;19441:6;19430:9;19426:22;19396:62;:::i;:::-;19386:72;;19180:288;18386:1089;;;;;;;;:::o;19481:329::-;19540:6;19589:2;19577:9;19568:7;19564:23;19560:32;19557:119;;;19595:79;;:::i;:::-;19557:119;19715:1;19740:53;19785:7;19776:6;19765:9;19761:22;19740:53;:::i;:::-;19730:63;;19686:117;19481:329;;;;:::o;19816:180::-;19864:77;19861:1;19854:88;19961:4;19958:1;19951:15;19985:4;19982:1;19975:15;20002:320;20046:6;20083:1;20077:4;20073:12;20063:22;;20130:1;20124:4;20120:12;20151:18;20141:81;;20207:4;20199:6;20195:17;20185:27;;20141:81;20269:2;20261:6;20258:14;20238:18;20235:38;20232:84;;20288:18;;:::i;:::-;20232:84;20053:269;20002:320;;;:::o;20328:148::-;20430:11;20467:3;20452:18;;20328:148;;;;:::o;20482:141::-;20531:4;20554:3;20546:11;;20577:3;20574:1;20567:14;20611:4;20608:1;20598:18;20590:26;;20482:141;;;:::o;20653:874::-;20756:3;20793:5;20787:12;20822:36;20848:9;20822:36;:::i;:::-;20874:89;20956:6;20951:3;20874:89;:::i;:::-;20867:96;;20994:1;20983:9;20979:17;21010:1;21005:166;;;;21185:1;21180:341;;;;20972:549;;21005:166;21089:4;21085:9;21074;21070:25;21065:3;21058:38;21151:6;21144:14;21137:22;21129:6;21125:35;21120:3;21116:45;21109:52;;21005:166;;21180:341;21247:38;21279:5;21247:38;:::i;:::-;21307:1;21321:154;21335:6;21332:1;21329:13;21321:154;;;21409:7;21403:14;21399:1;21394:3;21390:11;21383:35;21459:1;21450:7;21446:15;21435:26;;21357:4;21354:1;21350:12;21345:17;;21321:154;;;21504:6;21499:3;21495:16;21488:23;;21187:334;;20972:549;;20760:767;;20653:874;;;;:::o;21533:390::-;21639:3;21667:39;21700:5;21667:39;:::i;:::-;21722:89;21804:6;21799:3;21722:89;:::i;:::-;21715:96;;21820:65;21878:6;21873:3;21866:4;21859:5;21855:16;21820:65;:::i;:::-;21910:6;21905:3;21901:16;21894:23;;21643:280;21533:390;;;;:::o;21929:155::-;22069:7;22065:1;22057:6;22053:14;22046:31;21929:155;:::o;22090:400::-;22250:3;22271:84;22353:1;22348:3;22271:84;:::i;:::-;22264:91;;22364:93;22453:3;22364:93;:::i;:::-;22482:1;22477:3;22473:11;22466:18;;22090:400;;;:::o;22496:695::-;22774:3;22796:92;22884:3;22875:6;22796:92;:::i;:::-;22789:99;;22905:95;22996:3;22987:6;22905:95;:::i;:::-;22898:102;;23017:148;23161:3;23017:148;:::i;:::-;23010:155;;23182:3;23175:10;;22496:695;;;;;:::o;23197:180::-;23245:77;23242:1;23235:88;23342:4;23339:1;23332:15;23366:4;23363:1;23356:15;23383:97;23442:6;23470:3;23460:13;;23383:97;;;;:::o;23486:93::-;23523:6;23570:2;23565;23558:5;23554:14;23550:23;23540:33;;23486:93;;;:::o;23585:107::-;23629:8;23679:5;23673:4;23669:16;23648:37;;23585:107;;;;:::o;23698:393::-;23767:6;23817:1;23805:10;23801:18;23840:97;23870:66;23859:9;23840:97;:::i;:::-;23958:39;23988:8;23977:9;23958:39;:::i;:::-;23946:51;;24030:4;24026:9;24019:5;24015:21;24006:30;;24079:4;24069:8;24065:19;24058:5;24055:30;24045:40;;23774:317;;23698:393;;;;;:::o;24097:60::-;24125:3;24146:5;24139:12;;24097:60;;;:::o;24163:142::-;24213:9;24246:53;24264:34;24273:24;24291:5;24273:24;:::i;:::-;24264:34;:::i;:::-;24246:53;:::i;:::-;24233:66;;24163:142;;;:::o;24311:75::-;24354:3;24375:5;24368:12;;24311:75;;;:::o;24392:269::-;24502:39;24533:7;24502:39;:::i;:::-;24563:91;24612:41;24636:16;24612:41;:::i;:::-;24604:6;24597:4;24591:11;24563:91;:::i;:::-;24557:4;24550:105;24468:193;24392:269;;;:::o;24667:73::-;24712:3;24667:73;:::o;24746:189::-;24823:32;;:::i;:::-;24864:65;24922:6;24914;24908:4;24864:65;:::i;:::-;24799:136;24746:189;;:::o;24941:186::-;25001:120;25018:3;25011:5;25008:14;25001:120;;;25072:39;25109:1;25102:5;25072:39;:::i;:::-;25045:1;25038:5;25034:13;25025:22;;25001:120;;;24941:186;;:::o;25133:543::-;25234:2;25229:3;25226:11;25223:446;;;25268:38;25300:5;25268:38;:::i;:::-;25352:29;25370:10;25352:29;:::i;:::-;25342:8;25338:44;25535:2;25523:10;25520:18;25517:49;;;25556:8;25541:23;;25517:49;25579:80;25635:22;25653:3;25635:22;:::i;:::-;25625:8;25621:37;25608:11;25579:80;:::i;:::-;25238:431;;25223:446;25133:543;;;:::o;25682:117::-;25736:8;25786:5;25780:4;25776:16;25755:37;;25682:117;;;;:::o;25805:169::-;25849:6;25882:51;25930:1;25926:6;25918:5;25915:1;25911:13;25882:51;:::i;:::-;25878:56;25963:4;25957;25953:15;25943:25;;25856:118;25805:169;;;;:::o;25979:295::-;26055:4;26201:29;26226:3;26220:4;26201:29;:::i;:::-;26193:37;;26263:3;26260:1;26256:11;26250:4;26247:21;26239:29;;25979:295;;;;:::o;26279:1403::-;26403:44;26443:3;26438;26403:44;:::i;:::-;26512:18;26504:6;26501:30;26498:56;;;26534:18;;:::i;:::-;26498:56;26578:38;26610:4;26604:11;26578:38;:::i;:::-;26663:67;26723:6;26715;26709:4;26663:67;:::i;:::-;26757:1;26786:2;26778:6;26775:14;26803:1;26798:632;;;;27474:1;27491:6;27488:84;;;27547:9;27542:3;27538:19;27525:33;27516:42;;27488:84;27598:67;27658:6;27651:5;27598:67;:::i;:::-;27592:4;27585:81;27447:229;26768:908;;26798:632;26850:4;26846:9;26838:6;26834:22;26884:37;26916:4;26884:37;:::i;:::-;26943:1;26957:215;26971:7;26968:1;26965:14;26957:215;;;27057:9;27052:3;27048:19;27035:33;27027:6;27020:49;27108:1;27100:6;27096:14;27086:24;;27155:2;27144:9;27140:18;27127:31;;26994:4;26991:1;26987:12;26982:17;;26957:215;;;27200:6;27191:7;27188:19;27185:186;;;27265:9;27260:3;27256:19;27243:33;27308:48;27350:4;27342:6;27338:17;27327:9;27308:48;:::i;:::-;27300:6;27293:64;27208:163;27185:186;27417:1;27413;27405:6;27401:14;27397:22;27391:4;27384:36;26805:625;;;26768:908;;26378:1304;;;26279:1403;;;:::o;27688:180::-;27736:77;27733:1;27726:88;27833:4;27830:1;27823:15;27857:4;27854:1;27847:15;27874:233;27913:3;27936:24;27954:5;27936:24;:::i;:::-;27927:33;;27982:66;27975:5;27972:77;27969:103;;28052:18;;:::i;:::-;27969:103;28099:1;28092:5;28088:13;28081:20;;27874:233;;;:::o;28113:85::-;28158:7;28187:5;28176:16;;28113:85;;;:::o;28204:158::-;28262:9;28295:61;28313:42;28322:32;28348:5;28322:32;:::i;:::-;28313:42;:::i;:::-;28295:61;:::i;:::-;28282:74;;28204:158;;;:::o;28368:147::-;28463:45;28502:5;28463:45;:::i;:::-;28458:3;28451:58;28368:147;;:::o;28521:364::-;28658:4;28696:2;28685:9;28681:18;28673:26;;28709:79;28785:1;28774:9;28770:17;28761:6;28709:79;:::i;:::-;28798:80;28874:2;28863:9;28859:18;28850:6;28798:80;:::i;:::-;28521:364;;;;;:::o;28891:118::-;28928:7;28968:34;28961:5;28957:46;28946:57;;28891:118;;;:::o;29015:201::-;29054:3;29077:24;29095:5;29077:24;:::i;:::-;29068:33;;29123:34;29116:5;29113:45;29110:71;;29161:18;;:::i;:::-;29110:71;29208:1;29201:5;29197:13;29190:20;;29015:201;;;:::o;29222:180::-;29270:77;29267:1;29260:88;29367:4;29364:1;29357:15;29391:4;29388:1;29381:15;29408:191;29448:3;29467:20;29485:1;29467:20;:::i;:::-;29462:25;;29501:20;29519:1;29501:20;:::i;:::-;29496:25;;29544:1;29541;29537:9;29530:16;;29565:3;29562:1;29559:10;29556:36;;;29572:18;;:::i;:::-;29556:36;29408:191;;;;:::o;29605:634::-;29826:4;29864:2;29853:9;29849:18;29841:26;;29913:9;29907:4;29903:20;29899:1;29888:9;29884:17;29877:47;29941:108;30044:4;30035:6;29941:108;:::i;:::-;29933:116;;30096:9;30090:4;30086:20;30081:2;30070:9;30066:18;30059:48;30124:108;30227:4;30218:6;30124:108;:::i;:::-;30116:116;;29605:634;;;;;:::o;30245:332::-;30366:4;30404:2;30393:9;30389:18;30381:26;;30417:71;30485:1;30474:9;30470:17;30461:6;30417:71;:::i;:::-;30498:72;30566:2;30555:9;30551:18;30542:6;30498:72;:::i;:::-;30245:332;;;;;:::o;30583:98::-;30634:6;30668:5;30662:12;30652:22;;30583:98;;;:::o;30687:168::-;30770:11;30804:6;30799:3;30792:19;30844:4;30839:3;30835:14;30820:29;;30687:168;;;;:::o;30861:373::-;30947:3;30975:38;31007:5;30975:38;:::i;:::-;31029:70;31092:6;31087:3;31029:70;:::i;:::-;31022:77;;31108:65;31166:6;31161:3;31154:4;31147:5;31143:16;31108:65;:::i;:::-;31198:29;31220:6;31198:29;:::i;:::-;31193:3;31189:39;31182:46;;30951:283;30861:373;;;;:::o;31240:1053::-;31563:4;31601:3;31590:9;31586:19;31578:27;;31615:71;31683:1;31672:9;31668:17;31659:6;31615:71;:::i;:::-;31696:72;31764:2;31753:9;31749:18;31740:6;31696:72;:::i;:::-;31815:9;31809:4;31805:20;31800:2;31789:9;31785:18;31778:48;31843:108;31946:4;31937:6;31843:108;:::i;:::-;31835:116;;31998:9;31992:4;31988:20;31983:2;31972:9;31968:18;31961:48;32026:108;32129:4;32120:6;32026:108;:::i;:::-;32018:116;;32182:9;32176:4;32172:20;32166:3;32155:9;32151:19;32144:49;32210:76;32281:4;32272:6;32210:76;:::i;:::-;32202:84;;31240:1053;;;;;;;;:::o;32299:141::-;32355:5;32386:6;32380:13;32371:22;;32402:32;32428:5;32402:32;:::i;:::-;32299:141;;;;:::o;32446:349::-;32515:6;32564:2;32552:9;32543:7;32539:23;32535:32;32532:119;;;32570:79;;:::i;:::-;32532:119;32690:1;32715:63;32770:7;32761:6;32750:9;32746:22;32715:63;:::i;:::-;32705:73;;32661:127;32446:349;;;;:::o;32801:106::-;32845:8;32894:5;32889:3;32885:15;32864:36;;32801:106;;;:::o;32913:183::-;32948:3;32986:1;32968:16;32965:23;32962:128;;;33024:1;33021;33018;33003:23;33046:34;33077:1;33071:8;33046:34;:::i;:::-;33039:41;;32962:128;32913:183;:::o;33102:711::-;33141:3;33179:4;33161:16;33158:26;33187:5;33155:39;33216:20;;:::i;:::-;33291:1;33273:16;33269:24;33266:1;33260:4;33245:49;33324:4;33318:11;33423:16;33416:4;33408:6;33404:17;33401:39;33368:18;33360:6;33357:30;33341:113;33338:146;;;33469:5;;;;33338:146;33515:6;33509:4;33505:17;33551:3;33545:10;33578:18;33570:6;33567:30;33564:43;;;33600:5;;;;;;33564:43;33648:6;33641:4;33636:3;33632:14;33628:27;33707:1;33689:16;33685:24;33679:4;33675:35;33670:3;33667:44;33664:57;;;33714:5;;;;;;;33664:57;33731;33779:6;33773:4;33769:17;33761:6;33757:30;33751:4;33731:57;:::i;:::-;33804:3;33797:10;;33145:668;;;;;33102:711;;:::o;33819:751::-;34042:4;34080:3;34069:9;34065:19;34057:27;;34094:71;34162:1;34151:9;34147:17;34138:6;34094:71;:::i;:::-;34175:72;34243:2;34232:9;34228:18;34219:6;34175:72;:::i;:::-;34257;34325:2;34314:9;34310:18;34301:6;34257:72;:::i;:::-;34339;34407:2;34396:9;34392:18;34383:6;34339:72;:::i;:::-;34459:9;34453:4;34449:20;34443:3;34432:9;34428:19;34421:49;34487:76;34558:4;34549:6;34487:76;:::i;:::-;34479:84;;33819:751;;;;;;;;:::o

Swarm Source

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