ETH Price: $2,361.71 (+0.38%)

Token

HappyHipposNFTs ()
 

Overview

Max Total Supply

1,761

Holders

112

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0xedf576df2c28edc4e674aee1c5266a210fc2b71f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
HappyHipposNFTs

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-13
*/

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol



pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

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

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



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

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

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol



pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol



pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol



pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol



pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

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

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

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

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

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `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 memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

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

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

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - 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[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

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

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

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

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

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

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

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

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * 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 _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

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

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

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

    /**
     * @dev Destroys `amount` tokens of token type `id` from `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

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

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

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

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

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

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

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

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

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

        return array;
    }
}

// File: contracts/HappyHipposNFTs.sol

// contracts/HappyHipposNFTs.sol

pragma solidity ^0.8.0;




contract HappyHipposNFTs is ERC1155, Pausable, Ownable {
    
    mapping(uint256=>bool) private tokenCheck;
    
    constructor() ERC1155("https://infinity8.io/upload/hippos_metadata/{id}.json") {}
    
    // Single Address - Multiple Tokens _mintBatch
    function mintSingleToMultipleBatch(address to, uint256[] memory ids, bytes memory data) public onlyOwner {
        uint256 _length= ids.length;
        uint256[] memory amounts = new uint256[](_length);
        for (uint256 i = 0; i < ids.length; i++) {
            require(!tokenCheck[ids[i]], "Token with this ID already exists");
        }
        for (uint256 i = 0; i < ids.length; i++) {
            tokenCheck[ids[i]] = true;
            amounts[i]= 1;
        }
        _mintBatch(to, ids, amounts, data);
    }
    
    // Single Address - Multiple Tokens
    function mintSingleToMultiple(address account, uint256[] memory ids) public onlyOwner {
        for (uint256 i = 0; i < ids.length; i++) {
            require(!tokenCheck[ids[i]], "Token with this ID already exists");
            _mint(account, ids[i], 1, "");
            tokenCheck[ids[i]] = true;
        }
    }

    // One by One
	function tokenMint(address account,uint256 newItemId, uint256 amount)
	  public onlyOwner
	  {   
	     require(!tokenCheck[newItemId],"TokenID already exists");
		_mint(account,newItemId,amount,'');
		tokenCheck[newItemId] = true;
      }
    
    function tokenBurn(address account,uint256 id, uint256 amount) public onlyOwner returns (bool){   
		_burn(account,id,amount);
		return true;
    }
    
    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }
    
    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        whenNotPaused
        override
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"mintSingleToMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintSingleToMultipleBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokenBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"newItemId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokenMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405180606001604052806035815260200162004283603591396200003d816200007f60201b60201c565b506000600360006101000a81548160ff021916908315150217905550620000796200006d6200009b60201b60201c565b620000a360201b60201c565b6200027e565b80600290805190602001906200009792919062000169565b5050565b600033905090565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001779062000219565b90600052602060002090601f0160209004810192826200019b5760008555620001e7565b82601f10620001b657805160ff1916838001178555620001e7565b82800160010185558215620001e7579182015b82811115620001e6578251825591602001919060010190620001c9565b5b509050620001f69190620001fa565b5090565b5b8082111562000215576000816000905550600101620001fb565b5090565b600060028204905060018216806200023257607f821691505b602082108114156200024957620002486200024f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613ff5806200028e6000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c80635c975abb116100ad578063cf7633c711610071578063cf7633c7146102cb578063cfd3b81e146102e7578063e985e9c514610317578063f242432a14610347578063f2fde38b1461036357610120565b80635c975abb1461025f578063715018a61461027d5780638456cb59146102875780638da5cb5b14610291578063a22cb465146102af57610120565b80632eb2c2d6116100f45780632eb2c2d6146101d15780632ee91301146101ed5780633f4ba83a146102095780634e1273f414610213578063598e96341461024357610120565b8062fdd58e1461012557806301ffc9a71461015557806302fe5305146101855780630e89341c146101a1575b600080fd5b61013f600480360381019061013a9190612bbc565b61037f565b60405161014c9190613527565b60405180910390f35b61016f600480360381019061016a9190612cc7565b610448565b60405161017c919061328a565b60405180910390f35b61019f600480360381019061019a9190612d21565b61052a565b005b6101bb60048036038101906101b69190612d6a565b6105b2565b6040516101c891906132a5565b60405180910390f35b6101eb60048036038101906101e6919061292f565b610646565b005b61020760048036038101906102029190612bfc565b6106e7565b005b610211610810565b005b61022d60048036038101906102289190612c4f565b610896565b60405161023a9190613231565b60405180910390f35b61025d60048036038101906102589190612af1565b6109af565b005b610267610bb3565b604051610274919061328a565b60405180910390f35b610285610bca565b005b61028f610c52565b005b610299610cd8565b6040516102a69190613154565b60405180910390f35b6102c960048036038101906102c49190612b7c565b610d02565b005b6102e560048036038101906102e09190612a95565b610e83565b005b61030160048036038101906102fc9190612bfc565b61101a565b60405161030e919061328a565b60405180910390f35b610331600480360381019061032c91906128ef565b6110ae565b60405161033e919061328a565b60405180910390f35b610361600480360381019061035c91906129fe565b611142565b005b61037d600480360381019061037891906128c2565b6111e3565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e790613327565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061051357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105235750610522826112db565b5b9050919050565b610532611345565b73ffffffffffffffffffffffffffffffffffffffff16610550610cd8565b73ffffffffffffffffffffffffffffffffffffffff16146105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059d90613487565b60405180910390fd5b6105af8161134d565b50565b6060600280546105c1906137c7565b80601f01602080910402602001604051908101604052809291908181526020018280546105ed906137c7565b801561063a5780601f1061060f5761010080835404028352916020019161063a565b820191906000526020600020905b81548152906001019060200180831161061d57829003601f168201915b50505050509050919050565b61064e611345565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061069457506106938561068e611345565b6110ae565b5b6106d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ca90613407565b60405180910390fd5b6106e08585858585611367565b5050505050565b6106ef611345565b73ffffffffffffffffffffffffffffffffffffffff1661070d610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614610763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075a90613487565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900460ff16156107c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bb90613347565b60405180910390fd5b6107df8383836040518060200160405280600081525061167b565b60016004600084815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b610818611345565b73ffffffffffffffffffffffffffffffffffffffff16610836610cd8565b73ffffffffffffffffffffffffffffffffffffffff161461088c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088390613487565b60405180910390fd5b610894611811565b565b606081518351146108dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d3906134c7565b60405180910390fd5b6000835167ffffffffffffffff8111156108f9576108f8613900565b5b6040519080825280602002602001820160405280156109275781602001602082028036833780820191505090505b50905060005b84518110156109a45761097485828151811061094c5761094b6138d1565b5b6020026020010151858381518110610967576109666138d1565b5b602002602001015161037f565b828281518110610987576109866138d1565b5b6020026020010181815250508061099d9061382a565b905061092d565b508091505092915050565b6109b7611345565b73ffffffffffffffffffffffffffffffffffffffff166109d5610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614610a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2290613487565b60405180910390fd5b60008251905060008167ffffffffffffffff811115610a4d57610a4c613900565b5b604051908082528060200260200182016040528015610a7b5781602001602082028036833780820191505090505b50905060005b8451811015610b185760046000868381518110610aa157610aa06138d1565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc90613427565b60405180910390fd5b8080610b109061382a565b915050610a81565b5060005b8451811015610b9f57600160046000878481518110610b3e57610b3d6138d1565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506001828281518110610b8057610b7f6138d1565b5b6020026020010181815250508080610b979061382a565b915050610b1c565b50610bac858583866118b3565b5050505050565b6000600360009054906101000a900460ff16905090565b610bd2611345565b73ffffffffffffffffffffffffffffffffffffffff16610bf0610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90613487565b60405180910390fd5b610c506000611ad1565b565b610c5a611345565b73ffffffffffffffffffffffffffffffffffffffff16610c78610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613487565b60405180910390fd5b610cd6611b97565b565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff16610d21611345565b73ffffffffffffffffffffffffffffffffffffffff161415610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f906134a7565b60405180910390fd5b8060016000610d85611345565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e32611345565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e77919061328a565b60405180910390a35050565b610e8b611345565b73ffffffffffffffffffffffffffffffffffffffff16610ea9610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690613487565b60405180910390fd5b60005b81518110156110155760046000838381518110610f2257610f216138d1565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90613427565b60405180910390fd5b610fbc83838381518110610f9d57610f9c6138d1565b5b602002602001015160016040518060200160405280600081525061167b565b600160046000848481518110610fd557610fd46138d1565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550808061100d9061382a565b915050610f02565b505050565b6000611024611345565b73ffffffffffffffffffffffffffffffffffffffff16611042610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613487565b60405180910390fd5b6110a3848484611c3a565b600190509392505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61114a611345565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611190575061118f8561118a611345565b6110ae565b5b6111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c6906133a7565b60405180910390fd5b6111dc8585858585611e57565b5050505050565b6111eb611345565b73ffffffffffffffffffffffffffffffffffffffff16611209610cd8565b73ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613487565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690613367565b60405180910390fd5b6112d881611ad1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061136392919061259a565b5050565b81518351146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a2906134e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561141b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611412906133e7565b60405180910390fd5b6000611425611345565b90506114358187878787876120d9565b60005b84518110156115e6576000858281518110611456576114556138d1565b5b602002602001015190506000858381518110611475576114746138d1565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613467565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115cb91906136bb565b92505081905550505050806115df9061382a565b9050611438565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161165d929190613253565b60405180910390a4611673818787878787612137565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290613507565b60405180910390fd5b60006116f5611345565b9050611716816000876117078861231e565b6117108861231e565b876120d9565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461177591906136bb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516117f3929190613542565b60405180910390a461180a81600087878787612398565b5050505050565b611819610bb3565b611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90613307565b60405180910390fd5b6000600360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61189c611345565b6040516118a99190613154565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90613507565b60405180910390fd5b8151835114611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e906134e7565b60405180910390fd5b6000611971611345565b9050611982816000878787876120d9565b60005b8451811015611a3b578381815181106119a1576119a06138d1565b5b60200260200101516000808784815181106119bf576119be6138d1565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a2191906136bb565b925050819055508080611a339061382a565b915050611985565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ab3929190613253565b60405180910390a4611aca81600087878787612137565b5050505050565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b9f610bb3565b15611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd6906133c7565b60405180910390fd5b6001600360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c23611345565b604051611c309190613154565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca190613447565b60405180910390fd5b6000611cb4611345565b9050611ce481856000611cc68761231e565b611ccf8761231e565b604051806020016040528060008152506120d9565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7290613387565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611e48929190613542565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe906133e7565b60405180910390fd5b6000611ed1611345565b9050611ef1818787611ee28861231e565b611eeb8861231e565b876120d9565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90613467565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203d91906136bb565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516120ba929190613542565b60405180910390a46120d0828888888888612398565b50505050505050565b6120e1610bb3565b15612121576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612118906133c7565b60405180910390fd5b61212f86868686868661257f565b505050505050565b6121568473ffffffffffffffffffffffffffffffffffffffff16612587565b15612316578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161219c95949392919061316f565b602060405180830381600087803b1580156121b657600080fd5b505af19250505080156121e757506040513d601f19601f820116820180604052508101906121e49190612cf4565b60015b61228d576121f361392f565b806308c379a014156122505750612208613ecd565b806122135750612252565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224791906132a5565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612284906132c7565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b906132e7565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561233d5761233c613900565b5b60405190808252806020026020018201604052801561236b5781602001602082028036833780820191505090505b5090508281600081518110612383576123826138d1565b5b60200260200101818152505080915050919050565b6123b78473ffffffffffffffffffffffffffffffffffffffff16612587565b15612577578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123fd9594939291906131d7565b602060405180830381600087803b15801561241757600080fd5b505af192505050801561244857506040513d601f19601f820116820180604052508101906124459190612cf4565b60015b6124ee5761245461392f565b806308c379a014156124b15750612469613ecd565b8061247457506124b3565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a891906132a5565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e5906132c7565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256c906132e7565b60405180910390fd5b505b505050505050565b505050505050565b600080823b905060008111915050919050565b8280546125a6906137c7565b90600052602060002090601f0160209004810192826125c8576000855561260f565b82601f106125e157805160ff191683800117855561260f565b8280016001018555821561260f579182015b8281111561260e5782518255916020019190600101906125f3565b5b50905061261c9190612620565b5090565b5b80821115612639576000816000905550600101612621565b5090565b600061265061264b84613590565b61356b565b9050808382526020820190508285602086028201111561267357612672613956565b5b60005b858110156126a3578161268988826127a1565b845260208401935060208301925050600181019050612676565b5050509392505050565b60006126c06126bb846135bc565b61356b565b905080838252602082019050828560208602820111156126e3576126e2613956565b5b60005b8581101561271357816126f988826128ad565b8452602084019350602083019250506001810190506126e6565b5050509392505050565b600061273061272b846135e8565b61356b565b90508281526020810184848401111561274c5761274b61395b565b5b612757848285613785565b509392505050565b600061277261276d84613619565b61356b565b90508281526020810184848401111561278e5761278d61395b565b5b612799848285613785565b509392505050565b6000813590506127b081613f63565b92915050565b600082601f8301126127cb576127ca613951565b5b81356127db84826020860161263d565b91505092915050565b600082601f8301126127f9576127f8613951565b5b81356128098482602086016126ad565b91505092915050565b60008135905061282181613f7a565b92915050565b60008135905061283681613f91565b92915050565b60008151905061284b81613f91565b92915050565b600082601f83011261286657612865613951565b5b813561287684826020860161271d565b91505092915050565b600082601f83011261289457612893613951565b5b81356128a484826020860161275f565b91505092915050565b6000813590506128bc81613fa8565b92915050565b6000602082840312156128d8576128d7613965565b5b60006128e6848285016127a1565b91505092915050565b6000806040838503121561290657612905613965565b5b6000612914858286016127a1565b9250506020612925858286016127a1565b9150509250929050565b600080600080600060a0868803121561294b5761294a613965565b5b6000612959888289016127a1565b955050602061296a888289016127a1565b945050604086013567ffffffffffffffff81111561298b5761298a613960565b5b612997888289016127e4565b935050606086013567ffffffffffffffff8111156129b8576129b7613960565b5b6129c4888289016127e4565b925050608086013567ffffffffffffffff8111156129e5576129e4613960565b5b6129f188828901612851565b9150509295509295909350565b600080600080600060a08688031215612a1a57612a19613965565b5b6000612a28888289016127a1565b9550506020612a39888289016127a1565b9450506040612a4a888289016128ad565b9350506060612a5b888289016128ad565b925050608086013567ffffffffffffffff811115612a7c57612a7b613960565b5b612a8888828901612851565b9150509295509295909350565b60008060408385031215612aac57612aab613965565b5b6000612aba858286016127a1565b925050602083013567ffffffffffffffff811115612adb57612ada613960565b5b612ae7858286016127e4565b9150509250929050565b600080600060608486031215612b0a57612b09613965565b5b6000612b18868287016127a1565b935050602084013567ffffffffffffffff811115612b3957612b38613960565b5b612b45868287016127e4565b925050604084013567ffffffffffffffff811115612b6657612b65613960565b5b612b7286828701612851565b9150509250925092565b60008060408385031215612b9357612b92613965565b5b6000612ba1858286016127a1565b9250506020612bb285828601612812565b9150509250929050565b60008060408385031215612bd357612bd2613965565b5b6000612be1858286016127a1565b9250506020612bf2858286016128ad565b9150509250929050565b600080600060608486031215612c1557612c14613965565b5b6000612c23868287016127a1565b9350506020612c34868287016128ad565b9250506040612c45868287016128ad565b9150509250925092565b60008060408385031215612c6657612c65613965565b5b600083013567ffffffffffffffff811115612c8457612c83613960565b5b612c90858286016127b6565b925050602083013567ffffffffffffffff811115612cb157612cb0613960565b5b612cbd858286016127e4565b9150509250929050565b600060208284031215612cdd57612cdc613965565b5b6000612ceb84828501612827565b91505092915050565b600060208284031215612d0a57612d09613965565b5b6000612d188482850161283c565b91505092915050565b600060208284031215612d3757612d36613965565b5b600082013567ffffffffffffffff811115612d5557612d54613960565b5b612d618482850161287f565b91505092915050565b600060208284031215612d8057612d7f613965565b5b6000612d8e848285016128ad565b91505092915050565b6000612da38383613136565b60208301905092915050565b612db881613711565b82525050565b6000612dc98261365a565b612dd38185613688565b9350612dde8361364a565b8060005b83811015612e0f578151612df68882612d97565b9750612e018361367b565b925050600181019050612de2565b5085935050505092915050565b612e2581613723565b82525050565b6000612e3682613665565b612e408185613699565b9350612e50818560208601613794565b612e598161396a565b840191505092915050565b6000612e6f82613670565b612e7981856136aa565b9350612e89818560208601613794565b612e928161396a565b840191505092915050565b6000612eaa6034836136aa565b9150612eb582613988565b604082019050919050565b6000612ecd6028836136aa565b9150612ed8826139d7565b604082019050919050565b6000612ef06014836136aa565b9150612efb82613a26565b602082019050919050565b6000612f13602b836136aa565b9150612f1e82613a4f565b604082019050919050565b6000612f366016836136aa565b9150612f4182613a9e565b602082019050919050565b6000612f596026836136aa565b9150612f6482613ac7565b604082019050919050565b6000612f7c6024836136aa565b9150612f8782613b16565b604082019050919050565b6000612f9f6029836136aa565b9150612faa82613b65565b604082019050919050565b6000612fc26010836136aa565b9150612fcd82613bb4565b602082019050919050565b6000612fe56025836136aa565b9150612ff082613bdd565b604082019050919050565b60006130086032836136aa565b915061301382613c2c565b604082019050919050565b600061302b6021836136aa565b915061303682613c7b565b604082019050919050565b600061304e6023836136aa565b915061305982613cca565b604082019050919050565b6000613071602a836136aa565b915061307c82613d19565b604082019050919050565b60006130946020836136aa565b915061309f82613d68565b602082019050919050565b60006130b76029836136aa565b91506130c282613d91565b604082019050919050565b60006130da6029836136aa565b91506130e582613de0565b604082019050919050565b60006130fd6028836136aa565b915061310882613e2f565b604082019050919050565b60006131206021836136aa565b915061312b82613e7e565b604082019050919050565b61313f8161377b565b82525050565b61314e8161377b565b82525050565b60006020820190506131696000830184612daf565b92915050565b600060a0820190506131846000830188612daf565b6131916020830187612daf565b81810360408301526131a38186612dbe565b905081810360608301526131b78185612dbe565b905081810360808301526131cb8184612e2b565b90509695505050505050565b600060a0820190506131ec6000830188612daf565b6131f96020830187612daf565b6132066040830186613145565b6132136060830185613145565b81810360808301526132258184612e2b565b90509695505050505050565b6000602082019050818103600083015261324b8184612dbe565b905092915050565b6000604082019050818103600083015261326d8185612dbe565b905081810360208301526132818184612dbe565b90509392505050565b600060208201905061329f6000830184612e1c565b92915050565b600060208201905081810360008301526132bf8184612e64565b905092915050565b600060208201905081810360008301526132e081612e9d565b9050919050565b6000602082019050818103600083015261330081612ec0565b9050919050565b6000602082019050818103600083015261332081612ee3565b9050919050565b6000602082019050818103600083015261334081612f06565b9050919050565b6000602082019050818103600083015261336081612f29565b9050919050565b6000602082019050818103600083015261338081612f4c565b9050919050565b600060208201905081810360008301526133a081612f6f565b9050919050565b600060208201905081810360008301526133c081612f92565b9050919050565b600060208201905081810360008301526133e081612fb5565b9050919050565b6000602082019050818103600083015261340081612fd8565b9050919050565b6000602082019050818103600083015261342081612ffb565b9050919050565b600060208201905081810360008301526134408161301e565b9050919050565b6000602082019050818103600083015261346081613041565b9050919050565b6000602082019050818103600083015261348081613064565b9050919050565b600060208201905081810360008301526134a081613087565b9050919050565b600060208201905081810360008301526134c0816130aa565b9050919050565b600060208201905081810360008301526134e0816130cd565b9050919050565b60006020820190508181036000830152613500816130f0565b9050919050565b6000602082019050818103600083015261352081613113565b9050919050565b600060208201905061353c6000830184613145565b92915050565b60006040820190506135576000830185613145565b6135646020830184613145565b9392505050565b6000613575613586565b905061358182826137f9565b919050565b6000604051905090565b600067ffffffffffffffff8211156135ab576135aa613900565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135d7576135d6613900565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561360357613602613900565b5b61360c8261396a565b9050602081019050919050565b600067ffffffffffffffff82111561363457613633613900565b5b61363d8261396a565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136c68261377b565b91506136d18361377b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561370657613705613873565b5b828201905092915050565b600061371c8261375b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137b2578082015181840152602081019050613797565b838111156137c1576000848401525b50505050565b600060028204905060018216806137df57607f821691505b602082108114156137f3576137f26138a2565b5b50919050565b6138028261396a565b810181811067ffffffffffffffff8211171561382157613820613900565b5b80604052505050565b60006138358261377b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561386857613867613873565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561394e5760046000803e61394b60005161397b565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f546f6b656e494420616c72656164792065786973747300000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f546f6b656e2077697468207468697320494420616c726561647920657869737460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613edd57613f60565b613ee5613586565b60043d036004823e80513d602482011167ffffffffffffffff82111715613f0d575050613f60565b808201805167ffffffffffffffff811115613f2b5750505050613f60565b80602083010160043d038501811115613f48575050505050613f60565b613f57826020018501866137f9565b82955050505050505b90565b613f6c81613711565b8114613f7757600080fd5b50565b613f8381613723565b8114613f8e57600080fd5b50565b613f9a8161372f565b8114613fa557600080fd5b50565b613fb18161377b565b8114613fbc57600080fd5b5056fea26469706673582212203265bae4e8e7e692fd4b0ad1cbc3ba990283bb3c6dd062796d351dcec6bac0bd64736f6c6343000807003368747470733a2f2f696e66696e697479382e696f2f75706c6f61642f686970706f735f6d657461646174612f7b69647d2e6a736f6e

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101205760003560e01c80635c975abb116100ad578063cf7633c711610071578063cf7633c7146102cb578063cfd3b81e146102e7578063e985e9c514610317578063f242432a14610347578063f2fde38b1461036357610120565b80635c975abb1461025f578063715018a61461027d5780638456cb59146102875780638da5cb5b14610291578063a22cb465146102af57610120565b80632eb2c2d6116100f45780632eb2c2d6146101d15780632ee91301146101ed5780633f4ba83a146102095780634e1273f414610213578063598e96341461024357610120565b8062fdd58e1461012557806301ffc9a71461015557806302fe5305146101855780630e89341c146101a1575b600080fd5b61013f600480360381019061013a9190612bbc565b61037f565b60405161014c9190613527565b60405180910390f35b61016f600480360381019061016a9190612cc7565b610448565b60405161017c919061328a565b60405180910390f35b61019f600480360381019061019a9190612d21565b61052a565b005b6101bb60048036038101906101b69190612d6a565b6105b2565b6040516101c891906132a5565b60405180910390f35b6101eb60048036038101906101e6919061292f565b610646565b005b61020760048036038101906102029190612bfc565b6106e7565b005b610211610810565b005b61022d60048036038101906102289190612c4f565b610896565b60405161023a9190613231565b60405180910390f35b61025d60048036038101906102589190612af1565b6109af565b005b610267610bb3565b604051610274919061328a565b60405180910390f35b610285610bca565b005b61028f610c52565b005b610299610cd8565b6040516102a69190613154565b60405180910390f35b6102c960048036038101906102c49190612b7c565b610d02565b005b6102e560048036038101906102e09190612a95565b610e83565b005b61030160048036038101906102fc9190612bfc565b61101a565b60405161030e919061328a565b60405180910390f35b610331600480360381019061032c91906128ef565b6110ae565b60405161033e919061328a565b60405180910390f35b610361600480360381019061035c91906129fe565b611142565b005b61037d600480360381019061037891906128c2565b6111e3565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156103f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e790613327565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061051357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105235750610522826112db565b5b9050919050565b610532611345565b73ffffffffffffffffffffffffffffffffffffffff16610550610cd8565b73ffffffffffffffffffffffffffffffffffffffff16146105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059d90613487565b60405180910390fd5b6105af8161134d565b50565b6060600280546105c1906137c7565b80601f01602080910402602001604051908101604052809291908181526020018280546105ed906137c7565b801561063a5780601f1061060f5761010080835404028352916020019161063a565b820191906000526020600020905b81548152906001019060200180831161061d57829003601f168201915b50505050509050919050565b61064e611345565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061069457506106938561068e611345565b6110ae565b5b6106d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ca90613407565b60405180910390fd5b6106e08585858585611367565b5050505050565b6106ef611345565b73ffffffffffffffffffffffffffffffffffffffff1661070d610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614610763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075a90613487565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900460ff16156107c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bb90613347565b60405180910390fd5b6107df8383836040518060200160405280600081525061167b565b60016004600084815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b610818611345565b73ffffffffffffffffffffffffffffffffffffffff16610836610cd8565b73ffffffffffffffffffffffffffffffffffffffff161461088c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088390613487565b60405180910390fd5b610894611811565b565b606081518351146108dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d3906134c7565b60405180910390fd5b6000835167ffffffffffffffff8111156108f9576108f8613900565b5b6040519080825280602002602001820160405280156109275781602001602082028036833780820191505090505b50905060005b84518110156109a45761097485828151811061094c5761094b6138d1565b5b6020026020010151858381518110610967576109666138d1565b5b602002602001015161037f565b828281518110610987576109866138d1565b5b6020026020010181815250508061099d9061382a565b905061092d565b508091505092915050565b6109b7611345565b73ffffffffffffffffffffffffffffffffffffffff166109d5610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614610a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2290613487565b60405180910390fd5b60008251905060008167ffffffffffffffff811115610a4d57610a4c613900565b5b604051908082528060200260200182016040528015610a7b5781602001602082028036833780820191505090505b50905060005b8451811015610b185760046000868381518110610aa157610aa06138d1565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc90613427565b60405180910390fd5b8080610b109061382a565b915050610a81565b5060005b8451811015610b9f57600160046000878481518110610b3e57610b3d6138d1565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506001828281518110610b8057610b7f6138d1565b5b6020026020010181815250508080610b979061382a565b915050610b1c565b50610bac858583866118b3565b5050505050565b6000600360009054906101000a900460ff16905090565b610bd2611345565b73ffffffffffffffffffffffffffffffffffffffff16610bf0610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d90613487565b60405180910390fd5b610c506000611ad1565b565b610c5a611345565b73ffffffffffffffffffffffffffffffffffffffff16610c78610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613487565b60405180910390fd5b610cd6611b97565b565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8173ffffffffffffffffffffffffffffffffffffffff16610d21611345565b73ffffffffffffffffffffffffffffffffffffffff161415610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f906134a7565b60405180910390fd5b8060016000610d85611345565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e32611345565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e77919061328a565b60405180910390a35050565b610e8b611345565b73ffffffffffffffffffffffffffffffffffffffff16610ea9610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690613487565b60405180910390fd5b60005b81518110156110155760046000838381518110610f2257610f216138d1565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90613427565b60405180910390fd5b610fbc83838381518110610f9d57610f9c6138d1565b5b602002602001015160016040518060200160405280600081525061167b565b600160046000848481518110610fd557610fd46138d1565b5b6020026020010151815260200190815260200160002060006101000a81548160ff021916908315150217905550808061100d9061382a565b915050610f02565b505050565b6000611024611345565b73ffffffffffffffffffffffffffffffffffffffff16611042610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613487565b60405180910390fd5b6110a3848484611c3a565b600190509392505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61114a611345565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611190575061118f8561118a611345565b6110ae565b5b6111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c6906133a7565b60405180910390fd5b6111dc8585858585611e57565b5050505050565b6111eb611345565b73ffffffffffffffffffffffffffffffffffffffff16611209610cd8565b73ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613487565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c690613367565b60405180910390fd5b6112d881611ad1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061136392919061259a565b5050565b81518351146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a2906134e7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561141b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611412906133e7565b60405180910390fd5b6000611425611345565b90506114358187878787876120d9565b60005b84518110156115e6576000858281518110611456576114556138d1565b5b602002602001015190506000858381518110611475576114746138d1565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613467565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115cb91906136bb565b92505081905550505050806115df9061382a565b9050611438565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161165d929190613253565b60405180910390a4611673818787878787612137565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290613507565b60405180910390fd5b60006116f5611345565b9050611716816000876117078861231e565b6117108861231e565b876120d9565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461177591906136bb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516117f3929190613542565b60405180910390a461180a81600087878787612398565b5050505050565b611819610bb3565b611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184f90613307565b60405180910390fd5b6000600360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61189c611345565b6040516118a99190613154565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90613507565b60405180910390fd5b8151835114611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e906134e7565b60405180910390fd5b6000611971611345565b9050611982816000878787876120d9565b60005b8451811015611a3b578381815181106119a1576119a06138d1565b5b60200260200101516000808784815181106119bf576119be6138d1565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a2191906136bb565b925050819055508080611a339061382a565b915050611985565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ab3929190613253565b60405180910390a4611aca81600087878787612137565b5050505050565b6000600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611b9f610bb3565b15611bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd6906133c7565b60405180910390fd5b6001600360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c23611345565b604051611c309190613154565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca190613447565b60405180910390fd5b6000611cb4611345565b9050611ce481856000611cc68761231e565b611ccf8761231e565b604051806020016040528060008152506120d9565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7290613387565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611e48929190613542565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebe906133e7565b60405180910390fd5b6000611ed1611345565b9050611ef1818787611ee28861231e565b611eeb8861231e565b876120d9565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f90613467565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461203d91906136bb565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516120ba929190613542565b60405180910390a46120d0828888888888612398565b50505050505050565b6120e1610bb3565b15612121576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612118906133c7565b60405180910390fd5b61212f86868686868661257f565b505050505050565b6121568473ffffffffffffffffffffffffffffffffffffffff16612587565b15612316578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161219c95949392919061316f565b602060405180830381600087803b1580156121b657600080fd5b505af19250505080156121e757506040513d601f19601f820116820180604052508101906121e49190612cf4565b60015b61228d576121f361392f565b806308c379a014156122505750612208613ecd565b806122135750612252565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224791906132a5565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612284906132c7565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230b906132e7565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561233d5761233c613900565b5b60405190808252806020026020018201604052801561236b5781602001602082028036833780820191505090505b5090508281600081518110612383576123826138d1565b5b60200260200101818152505080915050919050565b6123b78473ffffffffffffffffffffffffffffffffffffffff16612587565b15612577578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016123fd9594939291906131d7565b602060405180830381600087803b15801561241757600080fd5b505af192505050801561244857506040513d601f19601f820116820180604052508101906124459190612cf4565b60015b6124ee5761245461392f565b806308c379a014156124b15750612469613ecd565b8061247457506124b3565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a891906132a5565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e5906132c7565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256c906132e7565b60405180910390fd5b505b505050505050565b505050505050565b600080823b905060008111915050919050565b8280546125a6906137c7565b90600052602060002090601f0160209004810192826125c8576000855561260f565b82601f106125e157805160ff191683800117855561260f565b8280016001018555821561260f579182015b8281111561260e5782518255916020019190600101906125f3565b5b50905061261c9190612620565b5090565b5b80821115612639576000816000905550600101612621565b5090565b600061265061264b84613590565b61356b565b9050808382526020820190508285602086028201111561267357612672613956565b5b60005b858110156126a3578161268988826127a1565b845260208401935060208301925050600181019050612676565b5050509392505050565b60006126c06126bb846135bc565b61356b565b905080838252602082019050828560208602820111156126e3576126e2613956565b5b60005b8581101561271357816126f988826128ad565b8452602084019350602083019250506001810190506126e6565b5050509392505050565b600061273061272b846135e8565b61356b565b90508281526020810184848401111561274c5761274b61395b565b5b612757848285613785565b509392505050565b600061277261276d84613619565b61356b565b90508281526020810184848401111561278e5761278d61395b565b5b612799848285613785565b509392505050565b6000813590506127b081613f63565b92915050565b600082601f8301126127cb576127ca613951565b5b81356127db84826020860161263d565b91505092915050565b600082601f8301126127f9576127f8613951565b5b81356128098482602086016126ad565b91505092915050565b60008135905061282181613f7a565b92915050565b60008135905061283681613f91565b92915050565b60008151905061284b81613f91565b92915050565b600082601f83011261286657612865613951565b5b813561287684826020860161271d565b91505092915050565b600082601f83011261289457612893613951565b5b81356128a484826020860161275f565b91505092915050565b6000813590506128bc81613fa8565b92915050565b6000602082840312156128d8576128d7613965565b5b60006128e6848285016127a1565b91505092915050565b6000806040838503121561290657612905613965565b5b6000612914858286016127a1565b9250506020612925858286016127a1565b9150509250929050565b600080600080600060a0868803121561294b5761294a613965565b5b6000612959888289016127a1565b955050602061296a888289016127a1565b945050604086013567ffffffffffffffff81111561298b5761298a613960565b5b612997888289016127e4565b935050606086013567ffffffffffffffff8111156129b8576129b7613960565b5b6129c4888289016127e4565b925050608086013567ffffffffffffffff8111156129e5576129e4613960565b5b6129f188828901612851565b9150509295509295909350565b600080600080600060a08688031215612a1a57612a19613965565b5b6000612a28888289016127a1565b9550506020612a39888289016127a1565b9450506040612a4a888289016128ad565b9350506060612a5b888289016128ad565b925050608086013567ffffffffffffffff811115612a7c57612a7b613960565b5b612a8888828901612851565b9150509295509295909350565b60008060408385031215612aac57612aab613965565b5b6000612aba858286016127a1565b925050602083013567ffffffffffffffff811115612adb57612ada613960565b5b612ae7858286016127e4565b9150509250929050565b600080600060608486031215612b0a57612b09613965565b5b6000612b18868287016127a1565b935050602084013567ffffffffffffffff811115612b3957612b38613960565b5b612b45868287016127e4565b925050604084013567ffffffffffffffff811115612b6657612b65613960565b5b612b7286828701612851565b9150509250925092565b60008060408385031215612b9357612b92613965565b5b6000612ba1858286016127a1565b9250506020612bb285828601612812565b9150509250929050565b60008060408385031215612bd357612bd2613965565b5b6000612be1858286016127a1565b9250506020612bf2858286016128ad565b9150509250929050565b600080600060608486031215612c1557612c14613965565b5b6000612c23868287016127a1565b9350506020612c34868287016128ad565b9250506040612c45868287016128ad565b9150509250925092565b60008060408385031215612c6657612c65613965565b5b600083013567ffffffffffffffff811115612c8457612c83613960565b5b612c90858286016127b6565b925050602083013567ffffffffffffffff811115612cb157612cb0613960565b5b612cbd858286016127e4565b9150509250929050565b600060208284031215612cdd57612cdc613965565b5b6000612ceb84828501612827565b91505092915050565b600060208284031215612d0a57612d09613965565b5b6000612d188482850161283c565b91505092915050565b600060208284031215612d3757612d36613965565b5b600082013567ffffffffffffffff811115612d5557612d54613960565b5b612d618482850161287f565b91505092915050565b600060208284031215612d8057612d7f613965565b5b6000612d8e848285016128ad565b91505092915050565b6000612da38383613136565b60208301905092915050565b612db881613711565b82525050565b6000612dc98261365a565b612dd38185613688565b9350612dde8361364a565b8060005b83811015612e0f578151612df68882612d97565b9750612e018361367b565b925050600181019050612de2565b5085935050505092915050565b612e2581613723565b82525050565b6000612e3682613665565b612e408185613699565b9350612e50818560208601613794565b612e598161396a565b840191505092915050565b6000612e6f82613670565b612e7981856136aa565b9350612e89818560208601613794565b612e928161396a565b840191505092915050565b6000612eaa6034836136aa565b9150612eb582613988565b604082019050919050565b6000612ecd6028836136aa565b9150612ed8826139d7565b604082019050919050565b6000612ef06014836136aa565b9150612efb82613a26565b602082019050919050565b6000612f13602b836136aa565b9150612f1e82613a4f565b604082019050919050565b6000612f366016836136aa565b9150612f4182613a9e565b602082019050919050565b6000612f596026836136aa565b9150612f6482613ac7565b604082019050919050565b6000612f7c6024836136aa565b9150612f8782613b16565b604082019050919050565b6000612f9f6029836136aa565b9150612faa82613b65565b604082019050919050565b6000612fc26010836136aa565b9150612fcd82613bb4565b602082019050919050565b6000612fe56025836136aa565b9150612ff082613bdd565b604082019050919050565b60006130086032836136aa565b915061301382613c2c565b604082019050919050565b600061302b6021836136aa565b915061303682613c7b565b604082019050919050565b600061304e6023836136aa565b915061305982613cca565b604082019050919050565b6000613071602a836136aa565b915061307c82613d19565b604082019050919050565b60006130946020836136aa565b915061309f82613d68565b602082019050919050565b60006130b76029836136aa565b91506130c282613d91565b604082019050919050565b60006130da6029836136aa565b91506130e582613de0565b604082019050919050565b60006130fd6028836136aa565b915061310882613e2f565b604082019050919050565b60006131206021836136aa565b915061312b82613e7e565b604082019050919050565b61313f8161377b565b82525050565b61314e8161377b565b82525050565b60006020820190506131696000830184612daf565b92915050565b600060a0820190506131846000830188612daf565b6131916020830187612daf565b81810360408301526131a38186612dbe565b905081810360608301526131b78185612dbe565b905081810360808301526131cb8184612e2b565b90509695505050505050565b600060a0820190506131ec6000830188612daf565b6131f96020830187612daf565b6132066040830186613145565b6132136060830185613145565b81810360808301526132258184612e2b565b90509695505050505050565b6000602082019050818103600083015261324b8184612dbe565b905092915050565b6000604082019050818103600083015261326d8185612dbe565b905081810360208301526132818184612dbe565b90509392505050565b600060208201905061329f6000830184612e1c565b92915050565b600060208201905081810360008301526132bf8184612e64565b905092915050565b600060208201905081810360008301526132e081612e9d565b9050919050565b6000602082019050818103600083015261330081612ec0565b9050919050565b6000602082019050818103600083015261332081612ee3565b9050919050565b6000602082019050818103600083015261334081612f06565b9050919050565b6000602082019050818103600083015261336081612f29565b9050919050565b6000602082019050818103600083015261338081612f4c565b9050919050565b600060208201905081810360008301526133a081612f6f565b9050919050565b600060208201905081810360008301526133c081612f92565b9050919050565b600060208201905081810360008301526133e081612fb5565b9050919050565b6000602082019050818103600083015261340081612fd8565b9050919050565b6000602082019050818103600083015261342081612ffb565b9050919050565b600060208201905081810360008301526134408161301e565b9050919050565b6000602082019050818103600083015261346081613041565b9050919050565b6000602082019050818103600083015261348081613064565b9050919050565b600060208201905081810360008301526134a081613087565b9050919050565b600060208201905081810360008301526134c0816130aa565b9050919050565b600060208201905081810360008301526134e0816130cd565b9050919050565b60006020820190508181036000830152613500816130f0565b9050919050565b6000602082019050818103600083015261352081613113565b9050919050565b600060208201905061353c6000830184613145565b92915050565b60006040820190506135576000830185613145565b6135646020830184613145565b9392505050565b6000613575613586565b905061358182826137f9565b919050565b6000604051905090565b600067ffffffffffffffff8211156135ab576135aa613900565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156135d7576135d6613900565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561360357613602613900565b5b61360c8261396a565b9050602081019050919050565b600067ffffffffffffffff82111561363457613633613900565b5b61363d8261396a565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136c68261377b565b91506136d18361377b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561370657613705613873565b5b828201905092915050565b600061371c8261375b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156137b2578082015181840152602081019050613797565b838111156137c1576000848401525b50505050565b600060028204905060018216806137df57607f821691505b602082108114156137f3576137f26138a2565b5b50919050565b6138028261396a565b810181811067ffffffffffffffff8211171561382157613820613900565b5b80604052505050565b60006138358261377b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561386857613867613873565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561394e5760046000803e61394b60005161397b565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f546f6b656e494420616c72656164792065786973747300000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f546f6b656e2077697468207468697320494420616c726561647920657869737460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613edd57613f60565b613ee5613586565b60043d036004823e80513d602482011167ffffffffffffffff82111715613f0d575050613f60565b808201805167ffffffffffffffff811115613f2b5750505050613f60565b80602083010160043d038501811115613f48575050505050613f60565b613f57826020018501866137f9565b82955050505050505b90565b613f6c81613711565b8114613f7757600080fd5b50565b613f8381613723565b8114613f8e57600080fd5b50565b613f9a8161372f565b8114613fa557600080fd5b50565b613fb18161377b565b8114613fbc57600080fd5b5056fea26469706673582212203265bae4e8e7e692fd4b0ad1cbc3ba990283bb3c6dd062796d351dcec6bac0bd64736f6c63430008070033

Deployed Bytecode Sourcemap

37867:2150:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24462:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23485:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39481:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24206:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26557:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39062:245;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39651:65;;;:::i;:::-;;24859:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38134:530;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1913:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4748:94;;;:::i;:::-;;39582:61;;;:::i;:::-;;4097:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25456:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38717:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39319:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25839:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26079:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4997:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24462:231;24548:7;24595:1;24576:21;;:7;:21;;;;24568:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24663:9;:13;24673:2;24663:13;;;;;;;;;;;:22;24677:7;24663:22;;;;;;;;;;;;;;;;24656:29;;24462:231;;;;:::o;23485:310::-;23587:4;23639:26;23624:41;;;:11;:41;;;;:110;;;;23697:37;23682:52;;;:11;:52;;;;23624:110;:163;;;;23751:36;23775:11;23751:23;:36::i;:::-;23624:163;23604:183;;23485:310;;;:::o;39481:89::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39547:15:::1;39555:6;39547:7;:15::i;:::-;39481:89:::0;:::o;24206:105::-;24266:13;24299:4;24292:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24206:105;;;:::o;26557:442::-;26798:12;:10;:12::i;:::-;26790:20;;:4;:20;;;:60;;;;26814:36;26831:4;26837:12;:10;:12::i;:::-;26814:16;:36::i;:::-;26790:60;26768:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26939:52;26962:4;26968:2;26972:3;26977:7;26986:4;26939:22;:52::i;:::-;26557:442;;;;;:::o;39062:245::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39178:10:::1;:21;39189:9;39178:21;;;;;;;;;;;;;;;;;;;;;39177:22;39169:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;39230:34;39236:7;39244:9;39254:6;39230:34;;;;;;;;;;;::::0;:5:::1;:34::i;:::-;39293:4;39269:10;:21;39280:9;39269:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;39062:245:::0;;;:::o;39651:65::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39698:10:::1;:8;:10::i;:::-;39651:65::o:0;24859:524::-;25015:16;25076:3;:10;25057:8;:15;:29;25049:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25145:30;25192:8;:15;25178:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25145:63;;25226:9;25221:122;25245:8;:15;25241:1;:19;25221:122;;;25301:30;25311:8;25320:1;25311:11;;;;;;;;:::i;:::-;;;;;;;;25324:3;25328:1;25324:6;;;;;;;;:::i;:::-;;;;;;;;25301:9;:30::i;:::-;25282:13;25296:1;25282:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25262:3;;;;:::i;:::-;;;25221:122;;;;25362:13;25355:20;;;24859:524;;;;:::o;38134:530::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38250:15:::1;38267:3;:10;38250:27;;38288:24;38329:7;38315:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38288:49;;38353:9;38348:133;38372:3;:10;38368:1;:14;38348:133;;;38413:10;:18;38424:3;38428:1;38424:6;;;;;;;;:::i;:::-;;;;;;;;38413:18;;;;;;;;;;;;;;;;;;;;;38412:19;38404:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38384:3;;;;;:::i;:::-;;;;38348:133;;;;38496:9;38491:121;38515:3;:10;38511:1;:14;38491:121;;;38568:4;38547:10;:18;38558:3;38562:1;38558:6;;;;;;;;:::i;:::-;;;;;;;;38547:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;38599:1;38587:7;38595:1;38587:10;;;;;;;;:::i;:::-;;;;;;;:13;;;::::0;::::1;38527:3;;;;;:::i;:::-;;;;38491:121;;;;38622:34;38633:2;38637:3;38642:7;38651:4;38622:10;:34::i;:::-;38239:425;;38134:530:::0;;;:::o;1913:86::-;1960:4;1984:7;;;;;;;;;;;1977:14;;1913:86;:::o;4748:94::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4813:21:::1;4831:1;4813:9;:21::i;:::-;4748:94::o:0;39582:61::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39627:8:::1;:6;:8::i;:::-;39582:61::o:0;4097:87::-;4143:7;4170:6;;;;;;;;;;;4163:13;;4097:87;:::o;25456:311::-;25575:8;25559:24;;:12;:10;:12::i;:::-;:24;;;;25551:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;25687:8;25642:18;:32;25661:12;:10;:12::i;:::-;25642:32;;;;;;;;;;;;;;;:42;25675:8;25642:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25740:8;25711:48;;25726:12;:10;:12::i;:::-;25711:48;;;25750:8;25711:48;;;;;;:::i;:::-;;;;;;;;25456:311;;:::o;38717:321::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38819:9:::1;38814:217;38838:3;:10;38834:1;:14;38814:217;;;38879:10;:18;38890:3;38894:1;38890:6;;;;;;;;:::i;:::-;;;;;;;;38879:18;;;;;;;;;;;;;;;;;;;;;38878:19;38870:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38950:29;38956:7;38965:3;38969:1;38965:6;;;;;;;;:::i;:::-;;;;;;;;38973:1;38950:29;;;;;;;;;;;::::0;:5:::1;:29::i;:::-;39015:4;38994:10;:18;39005:3;39009:1;39005:6;;;;;;;;:::i;:::-;;;;;;;;38994:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;38850:3;;;;;:::i;:::-;;;;38814:217;;;;38717:321:::0;;:::o;39319:150::-;39408:4;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39421:24:::1;39427:7;39435:2;39438:6;39421:5;:24::i;:::-;39457:4;39450:11;;39319:150:::0;;;;;:::o;25839:168::-;25938:4;25962:18;:27;25981:7;25962:27;;;;;;;;;;;;;;;:37;25990:8;25962:37;;;;;;;;;;;;;;;;;;;;;;;;;25955:44;;25839:168;;;;:::o;26079:401::-;26295:12;:10;:12::i;:::-;26287:20;;:4;:20;;;:60;;;;26311:36;26328:4;26334:12;:10;:12::i;:::-;26311:16;:36::i;:::-;26287:60;26265:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26427:45;26445:4;26451:2;26455;26459:6;26467:4;26427:17;:45::i;:::-;26079:401;;;;;:::o;4997:192::-;4328:12;:10;:12::i;:::-;4317:23;;:7;:5;:7::i;:::-;:23;;;4309:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5106:1:::1;5086:22;;:8;:22;;;;5078:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5162:19;5172:8;5162:9;:19::i;:::-;4997:192:::0;:::o;15121:157::-;15206:4;15245:25;15230:40;;;:11;:40;;;;15223:47;;15121:157;;;:::o;625:98::-;678:7;705:10;698:17;;625:98;:::o;30559:88::-;30633:6;30626:4;:13;;;;;;;;;;;;:::i;:::-;;30559:88;:::o;28641:1074::-;28868:7;:14;28854:3;:10;:28;28846:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28960:1;28946:16;;:2;:16;;;;28938:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29017:16;29036:12;:10;:12::i;:::-;29017:31;;29061:60;29082:8;29092:4;29098:2;29102:3;29107:7;29116:4;29061:20;:60::i;:::-;29139:9;29134:421;29158:3;:10;29154:1;:14;29134:421;;;29190:10;29203:3;29207:1;29203:6;;;;;;;;:::i;:::-;;;;;;;;29190:19;;29224:14;29241:7;29249:1;29241:10;;;;;;;;:::i;:::-;;;;;;;;29224:27;;29268:19;29290:9;:13;29300:2;29290:13;;;;;;;;;;;:19;29304:4;29290:19;;;;;;;;;;;;;;;;29268:41;;29347:6;29332:11;:21;;29324:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29480:6;29466:11;:20;29444:9;:13;29454:2;29444:13;;;;;;;;;;;:19;29458:4;29444:19;;;;;;;;;;;;;;;:42;;;;29537:6;29516:9;:13;29526:2;29516:13;;;;;;;;;;;:17;29530:2;29516:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29175:380;;;29170:3;;;;:::i;:::-;;;29134:421;;;;29602:2;29572:47;;29596:4;29572:47;;29586:8;29572:47;;;29606:3;29611:7;29572:47;;;;;;;:::i;:::-;;;;;;;;29632:75;29668:8;29678:4;29684:2;29688:3;29693:7;29702:4;29632:35;:75::i;:::-;28835:880;28641:1074;;;;;:::o;31048:599::-;31225:1;31206:21;;:7;:21;;;;31198:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31278:16;31297:12;:10;:12::i;:::-;31278:31;;31322:107;31343:8;31361:1;31365:7;31374:21;31392:2;31374:17;:21::i;:::-;31397:25;31415:6;31397:17;:25::i;:::-;31424:4;31322:20;:107::i;:::-;31468:6;31442:9;:13;31452:2;31442:13;;;;;;;;;;;:22;31456:7;31442:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;31527:7;31490:57;;31523:1;31490:57;;31505:8;31490:57;;;31536:2;31540:6;31490:57;;;;;;;:::i;:::-;;;;;;;;31560:79;31591:8;31609:1;31613:7;31622:2;31626:6;31634:4;31560:30;:79::i;:::-;31187:460;31048:599;;;;:::o;2972:120::-;2516:8;:6;:8::i;:::-;2508:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;3041:5:::1;3031:7;;:15;;;;;;;;;;;;;;;;;;3062:22;3071:12;:10;:12::i;:::-;3062:22;;;;;;:::i;:::-;;;;;;;;2972:120::o:0;32003:735::-;32195:1;32181:16;;:2;:16;;;;32173:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32268:7;:14;32254:3;:10;:28;32246:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32340:16;32359:12;:10;:12::i;:::-;32340:31;;32384:66;32405:8;32423:1;32427:2;32431:3;32436:7;32445:4;32384:20;:66::i;:::-;32468:9;32463:103;32487:3;:10;32483:1;:14;32463:103;;;32544:7;32552:1;32544:10;;;;;;;;:::i;:::-;;;;;;;;32519:9;:17;32529:3;32533:1;32529:6;;;;;;;;:::i;:::-;;;;;;;;32519:17;;;;;;;;;;;:21;32537:2;32519:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32499:3;;;;;:::i;:::-;;;;32463:103;;;;32619:2;32583:53;;32615:1;32583:53;;32597:8;32583:53;;;32623:3;32628:7;32583:53;;;;;;;:::i;:::-;;;;;;;;32649:81;32685:8;32703:1;32707:2;32711:3;32716:7;32725:4;32649:35;:81::i;:::-;32162:576;32003:735;;;;:::o;5197:173::-;5253:16;5272:6;;;;;;;;;;;5253:25;;5298:8;5289:6;;:17;;;;;;;;;;;;;;;;;;5353:8;5322:40;;5343:8;5322:40;;;;;;;;;;;;5242:128;5197:173;:::o;2713:118::-;2239:8;:6;:8::i;:::-;2238:9;2230:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2783:4:::1;2773:7;;:14;;;;;;;;;;;;;;;;;;2803:20;2810:12;:10;:12::i;:::-;2803:20;;;;;;:::i;:::-;;;;;;;;2713:118::o:0;32997:675::-;33146:1;33127:21;;:7;:21;;;;33119:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33201:16;33220:12;:10;:12::i;:::-;33201:31;;33245:105;33266:8;33276:7;33293:1;33297:21;33315:2;33297:17;:21::i;:::-;33320:25;33338:6;33320:17;:25::i;:::-;33245:105;;;;;;;;;;;;:20;:105::i;:::-;33363:22;33388:9;:13;33398:2;33388:13;;;;;;;;;;;:22;33402:7;33388:22;;;;;;;;;;;;;;;;33363:47;;33447:6;33429:14;:24;;33421:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33572:6;33555:14;:23;33530:9;:13;33540:2;33530:13;;;;;;;;;;;:22;33544:7;33530:22;;;;;;;;;;;;;;;:48;;;;33649:1;33607:57;;33632:7;33607:57;;33622:8;33607:57;;;33653:2;33657:6;33607:57;;;;;;;:::i;:::-;;;;;;;;33108:564;;32997:675;;;:::o;27463:820::-;27665:1;27651:16;;:2;:16;;;;27643:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27722:16;27741:12;:10;:12::i;:::-;27722:31;;27766:96;27787:8;27797:4;27803:2;27807:21;27825:2;27807:17;:21::i;:::-;27830:25;27848:6;27830:17;:25::i;:::-;27857:4;27766:20;:96::i;:::-;27875:19;27897:9;:13;27907:2;27897:13;;;;;;;;;;;:19;27911:4;27897:19;;;;;;;;;;;;;;;;27875:41;;27950:6;27935:11;:21;;27927:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28075:6;28061:11;:20;28039:9;:13;28049:2;28039:13;;;;;;;;;;;:19;28053:4;28039:19;;;;;;;;;;;;;;;:42;;;;28124:6;28103:9;:13;28113:2;28103:13;;;;;;;;;;;:17;28117:2;28103:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28179:2;28148:46;;28173:4;28148:46;;28163:8;28148:46;;;28183:2;28187:6;28148:46;;;;;;;:::i;:::-;;;;;;;;28207:68;28238:8;28248:4;28254:2;28258;28262:6;28270:4;28207:30;:68::i;:::-;27632:651;;27463:820;;;;;:::o;39724:290::-;2239:8;:6;:8::i;:::-;2238:9;2230:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39940:66:::1;39967:8;39977:4;39983:2;39987:3;39992:7;40001:4;39940:26;:66::i;:::-;39724:290:::0;;;;;;:::o;36730:813::-;36970:15;:2;:13;;;:15::i;:::-;36966:570;;;37023:2;37006:43;;;37050:8;37060:4;37066:3;37071:7;37080:4;37006:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37002:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37398:6;37391:14;;;;;;;;;;;:::i;:::-;;;;;;;;37002:523;;;37447:62;;;;;;;;;;:::i;:::-;;;;;;;;37002:523;37179:48;;;37167:60;;;:8;:60;;;;37163:159;;37252:50;;;;;;;;;;:::i;:::-;;;;;;;;37163:159;37086:251;36966:570;36730:813;;;;;;:::o;37551:198::-;37617:16;37646:22;37685:1;37671:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37646:41;;37709:7;37698:5;37704:1;37698:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;37736:5;37729:12;;;37551:198;;;:::o;35978:744::-;36193:15;:2;:13;;;:15::i;:::-;36189:526;;;36246:2;36229:38;;;36268:8;36278:4;36284:2;36288:6;36296:4;36229:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36225:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36577:6;36570:14;;;;;;;;;;;:::i;:::-;;;;;;;;36225:479;;;36626:62;;;;;;;;;;:::i;:::-;;;;;;;;36225:479;36363:43;;;36351:55;;;:8;:55;;;;36347:154;;36431:50;;;;;;;;;;:::i;:::-;;;;;;;;36347:154;36302:214;36189:526;35978:744;;;;;;:::o;35749:221::-;;;;;;;:::o;6143:387::-;6203:4;6411:12;6478:7;6466:20;6458:28;;6521:1;6514:4;:8;6507:15;;;6143:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:684::-;8071:6;8079;8128:2;8116:9;8107:7;8103:23;8099:32;8096:119;;;8134:79;;:::i;:::-;8096:119;8254:1;8279:53;8324:7;8315:6;8304:9;8300:22;8279:53;:::i;:::-;8269:63;;8225:117;8409:2;8398:9;8394:18;8381:32;8440:18;8432:6;8429:30;8426:117;;;8462:79;;:::i;:::-;8426:117;8567:78;8637:7;8628:6;8617:9;8613:22;8567:78;:::i;:::-;8557:88;;8352:303;7978:684;;;;;:::o;8668:1007::-;8779:6;8787;8795;8844:2;8832:9;8823:7;8819:23;8815:32;8812:119;;;8850:79;;:::i;:::-;8812:119;8970:1;8995:53;9040:7;9031:6;9020:9;9016:22;8995:53;:::i;:::-;8985:63;;8941:117;9125:2;9114:9;9110:18;9097:32;9156:18;9148:6;9145:30;9142:117;;;9178:79;;:::i;:::-;9142:117;9283:78;9353:7;9344:6;9333:9;9329:22;9283:78;:::i;:::-;9273:88;;9068:303;9438:2;9427:9;9423:18;9410:32;9469:18;9461:6;9458:30;9455:117;;;9491:79;;:::i;:::-;9455:117;9596:62;9650:7;9641:6;9630:9;9626:22;9596:62;:::i;:::-;9586:72;;9381:287;8668:1007;;;;;:::o;9681:468::-;9746:6;9754;9803:2;9791:9;9782:7;9778:23;9774:32;9771:119;;;9809:79;;:::i;:::-;9771:119;9929:1;9954:53;9999:7;9990:6;9979:9;9975:22;9954:53;:::i;:::-;9944:63;;9900:117;10056:2;10082:50;10124:7;10115:6;10104:9;10100:22;10082:50;:::i;:::-;10072:60;;10027:115;9681:468;;;;;:::o;10155:474::-;10223:6;10231;10280:2;10268:9;10259:7;10255:23;10251:32;10248:119;;;10286:79;;:::i;:::-;10248:119;10406:1;10431:53;10476:7;10467:6;10456:9;10452:22;10431:53;:::i;:::-;10421:63;;10377:117;10533:2;10559:53;10604:7;10595:6;10584:9;10580:22;10559:53;:::i;:::-;10549:63;;10504:118;10155:474;;;;;:::o;10635:619::-;10712:6;10720;10728;10777:2;10765:9;10756:7;10752:23;10748:32;10745:119;;;10783:79;;:::i;:::-;10745:119;10903:1;10928:53;10973:7;10964:6;10953:9;10949:22;10928:53;:::i;:::-;10918:63;;10874:117;11030:2;11056:53;11101:7;11092:6;11081:9;11077:22;11056:53;:::i;:::-;11046:63;;11001:118;11158:2;11184:53;11229:7;11220:6;11209:9;11205:22;11184:53;:::i;:::-;11174:63;;11129:118;10635:619;;;;;:::o;11260:894::-;11378:6;11386;11435:2;11423:9;11414:7;11410:23;11406:32;11403:119;;;11441:79;;:::i;:::-;11403:119;11589:1;11578:9;11574:17;11561:31;11619:18;11611:6;11608:30;11605:117;;;11641:79;;:::i;:::-;11605:117;11746:78;11816:7;11807:6;11796:9;11792:22;11746:78;:::i;:::-;11736:88;;11532:302;11901:2;11890:9;11886:18;11873:32;11932:18;11924:6;11921:30;11918:117;;;11954:79;;:::i;:::-;11918:117;12059:78;12129:7;12120:6;12109:9;12105:22;12059:78;:::i;:::-;12049:88;;11844:303;11260:894;;;;;:::o;12160:327::-;12218:6;12267:2;12255:9;12246:7;12242:23;12238:32;12235:119;;;12273:79;;:::i;:::-;12235:119;12393:1;12418:52;12462:7;12453:6;12442:9;12438:22;12418:52;:::i;:::-;12408:62;;12364:116;12160:327;;;;:::o;12493:349::-;12562:6;12611:2;12599:9;12590:7;12586:23;12582:32;12579:119;;;12617:79;;:::i;:::-;12579:119;12737:1;12762:63;12817:7;12808:6;12797:9;12793:22;12762:63;:::i;:::-;12752:73;;12708:127;12493:349;;;;:::o;12848:509::-;12917:6;12966:2;12954:9;12945:7;12941:23;12937:32;12934:119;;;12972:79;;:::i;:::-;12934:119;13120:1;13109:9;13105:17;13092:31;13150:18;13142:6;13139:30;13136:117;;;13172:79;;:::i;:::-;13136:117;13277:63;13332:7;13323:6;13312:9;13308:22;13277:63;:::i;:::-;13267:73;;13063:287;12848:509;;;;:::o;13363:329::-;13422:6;13471:2;13459:9;13450:7;13446:23;13442:32;13439:119;;;13477:79;;:::i;:::-;13439:119;13597:1;13622:53;13667:7;13658:6;13647:9;13643:22;13622:53;:::i;:::-;13612:63;;13568:117;13363:329;;;;:::o;13698:179::-;13767:10;13788:46;13830:3;13822:6;13788:46;:::i;:::-;13866:4;13861:3;13857:14;13843:28;;13698:179;;;;:::o;13883:118::-;13970:24;13988:5;13970:24;:::i;:::-;13965:3;13958:37;13883:118;;:::o;14037:732::-;14156:3;14185:54;14233:5;14185:54;:::i;:::-;14255:86;14334:6;14329:3;14255:86;:::i;:::-;14248:93;;14365:56;14415:5;14365:56;:::i;:::-;14444:7;14475:1;14460:284;14485:6;14482:1;14479:13;14460:284;;;14561:6;14555:13;14588:63;14647:3;14632:13;14588:63;:::i;:::-;14581:70;;14674:60;14727:6;14674:60;:::i;:::-;14664:70;;14520:224;14507:1;14504;14500:9;14495:14;;14460:284;;;14464:14;14760:3;14753:10;;14161:608;;;14037:732;;;;:::o;14775:109::-;14856:21;14871:5;14856:21;:::i;:::-;14851:3;14844:34;14775:109;;:::o;14890:360::-;14976:3;15004:38;15036:5;15004:38;:::i;:::-;15058:70;15121:6;15116:3;15058:70;:::i;:::-;15051:77;;15137:52;15182:6;15177:3;15170:4;15163:5;15159:16;15137:52;:::i;:::-;15214:29;15236:6;15214:29;:::i;:::-;15209:3;15205:39;15198:46;;14980:270;14890:360;;;;:::o;15256:364::-;15344:3;15372:39;15405:5;15372:39;:::i;:::-;15427:71;15491:6;15486:3;15427:71;:::i;:::-;15420:78;;15507:52;15552:6;15547:3;15540:4;15533:5;15529:16;15507:52;:::i;:::-;15584:29;15606:6;15584:29;:::i;:::-;15579:3;15575:39;15568:46;;15348:272;15256:364;;;;:::o;15626:366::-;15768:3;15789:67;15853:2;15848:3;15789:67;:::i;:::-;15782:74;;15865:93;15954:3;15865:93;:::i;:::-;15983:2;15978:3;15974:12;15967:19;;15626:366;;;:::o;15998:::-;16140:3;16161:67;16225:2;16220:3;16161:67;:::i;:::-;16154:74;;16237:93;16326:3;16237:93;:::i;:::-;16355:2;16350:3;16346:12;16339:19;;15998:366;;;:::o;16370:::-;16512:3;16533:67;16597:2;16592:3;16533:67;:::i;:::-;16526:74;;16609:93;16698:3;16609:93;:::i;:::-;16727:2;16722:3;16718:12;16711:19;;16370:366;;;:::o;16742:::-;16884:3;16905:67;16969:2;16964:3;16905:67;:::i;:::-;16898:74;;16981:93;17070:3;16981:93;:::i;:::-;17099:2;17094:3;17090:12;17083:19;;16742:366;;;:::o;17114:::-;17256:3;17277:67;17341:2;17336:3;17277:67;:::i;:::-;17270:74;;17353:93;17442:3;17353:93;:::i;:::-;17471:2;17466:3;17462:12;17455:19;;17114:366;;;:::o;17486:::-;17628:3;17649:67;17713:2;17708:3;17649:67;:::i;:::-;17642:74;;17725:93;17814:3;17725:93;:::i;:::-;17843:2;17838:3;17834:12;17827:19;;17486:366;;;:::o;17858:::-;18000:3;18021:67;18085:2;18080:3;18021:67;:::i;:::-;18014:74;;18097:93;18186:3;18097:93;:::i;:::-;18215:2;18210:3;18206:12;18199:19;;17858:366;;;:::o;18230:::-;18372:3;18393:67;18457:2;18452:3;18393:67;:::i;:::-;18386:74;;18469:93;18558:3;18469:93;:::i;:::-;18587:2;18582:3;18578:12;18571:19;;18230:366;;;:::o;18602:::-;18744:3;18765:67;18829:2;18824:3;18765:67;:::i;:::-;18758:74;;18841:93;18930:3;18841:93;:::i;:::-;18959:2;18954:3;18950:12;18943:19;;18602:366;;;:::o;18974:::-;19116:3;19137:67;19201:2;19196:3;19137:67;:::i;:::-;19130:74;;19213:93;19302:3;19213:93;:::i;:::-;19331:2;19326:3;19322:12;19315:19;;18974:366;;;:::o;19346:::-;19488:3;19509:67;19573:2;19568:3;19509:67;:::i;:::-;19502:74;;19585:93;19674:3;19585:93;:::i;:::-;19703:2;19698:3;19694:12;19687:19;;19346:366;;;:::o;19718:::-;19860:3;19881:67;19945:2;19940:3;19881:67;:::i;:::-;19874:74;;19957:93;20046:3;19957:93;:::i;:::-;20075:2;20070:3;20066:12;20059:19;;19718:366;;;:::o;20090:::-;20232:3;20253:67;20317:2;20312:3;20253:67;:::i;:::-;20246:74;;20329:93;20418:3;20329:93;:::i;:::-;20447:2;20442:3;20438:12;20431:19;;20090:366;;;:::o;20462:::-;20604:3;20625:67;20689:2;20684:3;20625:67;:::i;:::-;20618:74;;20701:93;20790:3;20701:93;:::i;:::-;20819:2;20814:3;20810:12;20803:19;;20462:366;;;:::o;20834:::-;20976:3;20997:67;21061:2;21056:3;20997:67;:::i;:::-;20990:74;;21073:93;21162:3;21073:93;:::i;:::-;21191:2;21186:3;21182:12;21175:19;;20834:366;;;:::o;21206:::-;21348:3;21369:67;21433:2;21428:3;21369:67;:::i;:::-;21362:74;;21445:93;21534:3;21445:93;:::i;:::-;21563:2;21558:3;21554:12;21547:19;;21206:366;;;:::o;21578:::-;21720:3;21741:67;21805:2;21800:3;21741:67;:::i;:::-;21734:74;;21817:93;21906:3;21817:93;:::i;:::-;21935:2;21930:3;21926:12;21919:19;;21578:366;;;:::o;21950:::-;22092:3;22113:67;22177:2;22172:3;22113:67;:::i;:::-;22106:74;;22189:93;22278:3;22189:93;:::i;:::-;22307:2;22302:3;22298:12;22291:19;;21950:366;;;:::o;22322:::-;22464:3;22485:67;22549:2;22544:3;22485:67;:::i;:::-;22478:74;;22561:93;22650:3;22561:93;:::i;:::-;22679:2;22674:3;22670:12;22663:19;;22322:366;;;:::o;22694:108::-;22771:24;22789:5;22771:24;:::i;:::-;22766:3;22759:37;22694:108;;:::o;22808:118::-;22895:24;22913:5;22895:24;:::i;:::-;22890:3;22883:37;22808:118;;:::o;22932:222::-;23025:4;23063:2;23052:9;23048:18;23040:26;;23076:71;23144:1;23133:9;23129:17;23120:6;23076:71;:::i;:::-;22932:222;;;;:::o;23160:1053::-;23483:4;23521:3;23510:9;23506:19;23498:27;;23535:71;23603:1;23592:9;23588:17;23579:6;23535:71;:::i;:::-;23616:72;23684:2;23673:9;23669:18;23660:6;23616:72;:::i;:::-;23735:9;23729:4;23725:20;23720:2;23709:9;23705:18;23698:48;23763:108;23866:4;23857:6;23763:108;:::i;:::-;23755:116;;23918:9;23912:4;23908:20;23903:2;23892:9;23888:18;23881:48;23946:108;24049:4;24040:6;23946:108;:::i;:::-;23938:116;;24102:9;24096:4;24092:20;24086:3;24075:9;24071:19;24064:49;24130:76;24201:4;24192:6;24130:76;:::i;:::-;24122:84;;23160:1053;;;;;;;;:::o;24219:751::-;24442:4;24480:3;24469:9;24465:19;24457:27;;24494:71;24562:1;24551:9;24547:17;24538:6;24494:71;:::i;:::-;24575:72;24643:2;24632:9;24628:18;24619:6;24575:72;:::i;:::-;24657;24725:2;24714:9;24710:18;24701:6;24657:72;:::i;:::-;24739;24807:2;24796:9;24792:18;24783:6;24739:72;:::i;:::-;24859:9;24853:4;24849:20;24843:3;24832:9;24828:19;24821:49;24887:76;24958:4;24949:6;24887:76;:::i;:::-;24879:84;;24219:751;;;;;;;;:::o;24976:373::-;25119:4;25157:2;25146:9;25142:18;25134:26;;25206:9;25200:4;25196:20;25192:1;25181:9;25177:17;25170:47;25234:108;25337:4;25328:6;25234:108;:::i;:::-;25226:116;;24976:373;;;;:::o;25355:634::-;25576:4;25614:2;25603:9;25599:18;25591:26;;25663:9;25657:4;25653:20;25649:1;25638:9;25634:17;25627:47;25691:108;25794:4;25785:6;25691:108;:::i;:::-;25683:116;;25846:9;25840:4;25836:20;25831:2;25820:9;25816:18;25809:48;25874:108;25977:4;25968:6;25874:108;:::i;:::-;25866:116;;25355:634;;;;;:::o;25995:210::-;26082:4;26120:2;26109:9;26105:18;26097:26;;26133:65;26195:1;26184:9;26180:17;26171:6;26133:65;:::i;:::-;25995:210;;;;:::o;26211:313::-;26324:4;26362:2;26351:9;26347:18;26339:26;;26411:9;26405:4;26401:20;26397:1;26386:9;26382:17;26375:47;26439:78;26512:4;26503:6;26439:78;:::i;:::-;26431:86;;26211:313;;;;:::o;26530:419::-;26696:4;26734:2;26723:9;26719:18;26711:26;;26783:9;26777:4;26773:20;26769:1;26758:9;26754:17;26747:47;26811:131;26937:4;26811:131;:::i;:::-;26803:139;;26530:419;;;:::o;26955:::-;27121:4;27159:2;27148:9;27144:18;27136:26;;27208:9;27202:4;27198:20;27194:1;27183:9;27179:17;27172:47;27236:131;27362:4;27236:131;:::i;:::-;27228:139;;26955:419;;;:::o;27380:::-;27546:4;27584:2;27573:9;27569:18;27561:26;;27633:9;27627:4;27623:20;27619:1;27608:9;27604:17;27597:47;27661:131;27787:4;27661:131;:::i;:::-;27653:139;;27380:419;;;:::o;27805:::-;27971:4;28009:2;27998:9;27994:18;27986:26;;28058:9;28052:4;28048:20;28044:1;28033:9;28029:17;28022:47;28086:131;28212:4;28086:131;:::i;:::-;28078:139;;27805:419;;;:::o;28230:::-;28396:4;28434:2;28423:9;28419:18;28411:26;;28483:9;28477:4;28473:20;28469:1;28458:9;28454:17;28447:47;28511:131;28637:4;28511:131;:::i;:::-;28503:139;;28230:419;;;:::o;28655:::-;28821:4;28859:2;28848:9;28844:18;28836:26;;28908:9;28902:4;28898:20;28894:1;28883:9;28879:17;28872:47;28936:131;29062:4;28936:131;:::i;:::-;28928:139;;28655:419;;;:::o;29080:::-;29246:4;29284:2;29273:9;29269:18;29261:26;;29333:9;29327:4;29323:20;29319:1;29308:9;29304:17;29297:47;29361:131;29487:4;29361:131;:::i;:::-;29353:139;;29080:419;;;:::o;29505:::-;29671:4;29709:2;29698:9;29694:18;29686:26;;29758:9;29752:4;29748:20;29744:1;29733:9;29729:17;29722:47;29786:131;29912:4;29786:131;:::i;:::-;29778:139;;29505:419;;;:::o;29930:::-;30096:4;30134:2;30123:9;30119:18;30111:26;;30183:9;30177:4;30173:20;30169:1;30158:9;30154:17;30147:47;30211:131;30337:4;30211:131;:::i;:::-;30203:139;;29930:419;;;:::o;30355:::-;30521:4;30559:2;30548:9;30544:18;30536:26;;30608:9;30602:4;30598:20;30594:1;30583:9;30579:17;30572:47;30636:131;30762:4;30636:131;:::i;:::-;30628:139;;30355:419;;;:::o;30780:::-;30946:4;30984:2;30973:9;30969:18;30961:26;;31033:9;31027:4;31023:20;31019:1;31008:9;31004:17;30997:47;31061:131;31187:4;31061:131;:::i;:::-;31053:139;;30780:419;;;:::o;31205:::-;31371:4;31409:2;31398:9;31394:18;31386:26;;31458:9;31452:4;31448:20;31444:1;31433:9;31429:17;31422:47;31486:131;31612:4;31486:131;:::i;:::-;31478:139;;31205:419;;;:::o;31630:::-;31796:4;31834:2;31823:9;31819:18;31811:26;;31883:9;31877:4;31873:20;31869:1;31858:9;31854:17;31847:47;31911:131;32037:4;31911:131;:::i;:::-;31903:139;;31630:419;;;:::o;32055:::-;32221:4;32259:2;32248:9;32244:18;32236:26;;32308:9;32302:4;32298:20;32294:1;32283:9;32279:17;32272:47;32336:131;32462:4;32336:131;:::i;:::-;32328:139;;32055:419;;;:::o;32480:::-;32646:4;32684:2;32673:9;32669:18;32661:26;;32733:9;32727:4;32723:20;32719:1;32708:9;32704:17;32697:47;32761:131;32887:4;32761:131;:::i;:::-;32753:139;;32480:419;;;:::o;32905:::-;33071:4;33109:2;33098:9;33094:18;33086:26;;33158:9;33152:4;33148:20;33144:1;33133:9;33129:17;33122:47;33186:131;33312:4;33186:131;:::i;:::-;33178:139;;32905:419;;;:::o;33330:::-;33496:4;33534:2;33523:9;33519:18;33511:26;;33583:9;33577:4;33573:20;33569:1;33558:9;33554:17;33547:47;33611:131;33737:4;33611:131;:::i;:::-;33603:139;;33330:419;;;:::o;33755:::-;33921:4;33959:2;33948:9;33944:18;33936:26;;34008:9;34002:4;33998:20;33994:1;33983:9;33979:17;33972:47;34036:131;34162:4;34036:131;:::i;:::-;34028:139;;33755:419;;;:::o;34180:::-;34346:4;34384:2;34373:9;34369:18;34361:26;;34433:9;34427:4;34423:20;34419:1;34408:9;34404:17;34397:47;34461:131;34587:4;34461:131;:::i;:::-;34453:139;;34180:419;;;:::o;34605:222::-;34698:4;34736:2;34725:9;34721:18;34713:26;;34749:71;34817:1;34806:9;34802:17;34793:6;34749:71;:::i;:::-;34605:222;;;;:::o;34833:332::-;34954:4;34992:2;34981:9;34977:18;34969:26;;35005:71;35073:1;35062:9;35058:17;35049:6;35005:71;:::i;:::-;35086:72;35154:2;35143:9;35139:18;35130:6;35086:72;:::i;:::-;34833:332;;;;;:::o;35171:129::-;35205:6;35232:20;;:::i;:::-;35222:30;;35261:33;35289:4;35281:6;35261:33;:::i;:::-;35171:129;;;:::o;35306:75::-;35339:6;35372:2;35366:9;35356:19;;35306:75;:::o;35387:311::-;35464:4;35554:18;35546:6;35543:30;35540:56;;;35576:18;;:::i;:::-;35540:56;35626:4;35618:6;35614:17;35606:25;;35686:4;35680;35676:15;35668:23;;35387:311;;;:::o;35704:::-;35781:4;35871:18;35863:6;35860:30;35857:56;;;35893:18;;:::i;:::-;35857:56;35943:4;35935:6;35931:17;35923:25;;36003:4;35997;35993:15;35985:23;;35704:311;;;:::o;36021:307::-;36082:4;36172:18;36164:6;36161:30;36158:56;;;36194:18;;:::i;:::-;36158:56;36232:29;36254:6;36232:29;:::i;:::-;36224:37;;36316:4;36310;36306:15;36298:23;;36021:307;;;:::o;36334:308::-;36396:4;36486:18;36478:6;36475:30;36472:56;;;36508:18;;:::i;:::-;36472:56;36546:29;36568:6;36546:29;:::i;:::-;36538:37;;36630:4;36624;36620:15;36612:23;;36334:308;;;:::o;36648:132::-;36715:4;36738:3;36730:11;;36768:4;36763:3;36759:14;36751:22;;36648:132;;;:::o;36786:114::-;36853:6;36887:5;36881:12;36871:22;;36786:114;;;:::o;36906:98::-;36957:6;36991:5;36985:12;36975:22;;36906:98;;;:::o;37010:99::-;37062:6;37096:5;37090:12;37080:22;;37010:99;;;:::o;37115:113::-;37185:4;37217;37212:3;37208:14;37200:22;;37115:113;;;:::o;37234:184::-;37333:11;37367:6;37362:3;37355:19;37407:4;37402:3;37398:14;37383:29;;37234:184;;;;:::o;37424:168::-;37507:11;37541:6;37536:3;37529:19;37581:4;37576:3;37572:14;37557:29;;37424:168;;;;:::o;37598:169::-;37682:11;37716:6;37711:3;37704:19;37756:4;37751:3;37747:14;37732:29;;37598:169;;;;:::o;37773:305::-;37813:3;37832:20;37850:1;37832:20;:::i;:::-;37827:25;;37866:20;37884:1;37866:20;:::i;:::-;37861:25;;38020:1;37952:66;37948:74;37945:1;37942:81;37939:107;;;38026:18;;:::i;:::-;37939:107;38070:1;38067;38063:9;38056:16;;37773:305;;;;:::o;38084:96::-;38121:7;38150:24;38168:5;38150:24;:::i;:::-;38139:35;;38084:96;;;:::o;38186:90::-;38220:7;38263:5;38256:13;38249:21;38238:32;;38186:90;;;:::o;38282:149::-;38318:7;38358:66;38351:5;38347:78;38336:89;;38282:149;;;:::o;38437:126::-;38474:7;38514:42;38507:5;38503:54;38492:65;;38437:126;;;:::o;38569:77::-;38606:7;38635:5;38624:16;;38569:77;;;:::o;38652:154::-;38736:6;38731:3;38726;38713:30;38798:1;38789:6;38784:3;38780:16;38773:27;38652:154;;;:::o;38812:307::-;38880:1;38890:113;38904:6;38901:1;38898:13;38890:113;;;38989:1;38984:3;38980:11;38974:18;38970:1;38965:3;38961:11;38954:39;38926:2;38923:1;38919:10;38914:15;;38890:113;;;39021:6;39018:1;39015:13;39012:101;;;39101:1;39092:6;39087:3;39083:16;39076:27;39012:101;38861:258;38812:307;;;:::o;39125:320::-;39169:6;39206:1;39200:4;39196:12;39186:22;;39253:1;39247:4;39243:12;39274:18;39264:81;;39330:4;39322:6;39318:17;39308:27;;39264:81;39392:2;39384:6;39381:14;39361:18;39358:38;39355:84;;;39411:18;;:::i;:::-;39355:84;39176:269;39125:320;;;:::o;39451:281::-;39534:27;39556:4;39534:27;:::i;:::-;39526:6;39522:40;39664:6;39652:10;39649:22;39628:18;39616:10;39613:34;39610:62;39607:88;;;39675:18;;:::i;:::-;39607:88;39715:10;39711:2;39704:22;39494:238;39451:281;;:::o;39738:233::-;39777:3;39800:24;39818:5;39800:24;:::i;:::-;39791:33;;39846:66;39839:5;39836:77;39833:103;;;39916:18;;:::i;:::-;39833:103;39963:1;39956:5;39952:13;39945:20;;39738:233;;;:::o;39977:180::-;40025:77;40022:1;40015:88;40122:4;40119:1;40112:15;40146:4;40143:1;40136:15;40163:180;40211:77;40208:1;40201:88;40308:4;40305:1;40298:15;40332:4;40329:1;40322:15;40349:180;40397:77;40394:1;40387:88;40494:4;40491:1;40484:15;40518:4;40515:1;40508:15;40535:180;40583:77;40580:1;40573:88;40680:4;40677:1;40670:15;40704:4;40701:1;40694:15;40721:183;40756:3;40794:1;40776:16;40773:23;40770:128;;;40832:1;40829;40826;40811:23;40854:34;40885:1;40879:8;40854:34;:::i;:::-;40847:41;;40770:128;40721:183;:::o;40910:117::-;41019:1;41016;41009:12;41033:117;41142:1;41139;41132:12;41156:117;41265:1;41262;41255:12;41279:117;41388:1;41385;41378:12;41402:117;41511:1;41508;41501:12;41525:102;41566:6;41617:2;41613:7;41608:2;41601:5;41597:14;41593:28;41583:38;;41525:102;;;:::o;41633:106::-;41677:8;41726:5;41721:3;41717:15;41696:36;;41633:106;;;:::o;41745:239::-;41885:34;41881:1;41873:6;41869:14;41862:58;41954:22;41949:2;41941:6;41937:15;41930:47;41745:239;:::o;41990:227::-;42130:34;42126:1;42118:6;42114:14;42107:58;42199:10;42194:2;42186:6;42182:15;42175:35;41990:227;:::o;42223:170::-;42363:22;42359:1;42351:6;42347:14;42340:46;42223:170;:::o;42399:230::-;42539:34;42535:1;42527:6;42523:14;42516:58;42608:13;42603:2;42595:6;42591:15;42584:38;42399:230;:::o;42635:172::-;42775:24;42771:1;42763:6;42759:14;42752:48;42635:172;:::o;42813:225::-;42953:34;42949:1;42941:6;42937:14;42930:58;43022:8;43017:2;43009:6;43005:15;42998:33;42813:225;:::o;43044:223::-;43184:34;43180:1;43172:6;43168:14;43161:58;43253:6;43248:2;43240:6;43236:15;43229:31;43044:223;:::o;43273:228::-;43413:34;43409:1;43401:6;43397:14;43390:58;43482:11;43477:2;43469:6;43465:15;43458:36;43273:228;:::o;43507:166::-;43647:18;43643:1;43635:6;43631:14;43624:42;43507:166;:::o;43679:224::-;43819:34;43815:1;43807:6;43803:14;43796:58;43888:7;43883:2;43875:6;43871:15;43864:32;43679:224;:::o;43909:237::-;44049:34;44045:1;44037:6;44033:14;44026:58;44118:20;44113:2;44105:6;44101:15;44094:45;43909:237;:::o;44152:220::-;44292:34;44288:1;44280:6;44276:14;44269:58;44361:3;44356:2;44348:6;44344:15;44337:28;44152:220;:::o;44378:222::-;44518:34;44514:1;44506:6;44502:14;44495:58;44587:5;44582:2;44574:6;44570:15;44563:30;44378:222;:::o;44606:229::-;44746:34;44742:1;44734:6;44730:14;44723:58;44815:12;44810:2;44802:6;44798:15;44791:37;44606:229;:::o;44841:182::-;44981:34;44977:1;44969:6;44965:14;44958:58;44841:182;:::o;45029:228::-;45169:34;45165:1;45157:6;45153:14;45146:58;45238:11;45233:2;45225:6;45221:15;45214:36;45029:228;:::o;45263:::-;45403:34;45399:1;45391:6;45387:14;45380:58;45472:11;45467:2;45459:6;45455:15;45448:36;45263:228;:::o;45497:227::-;45637:34;45633:1;45625:6;45621:14;45614:58;45706:10;45701:2;45693:6;45689:15;45682:35;45497:227;:::o;45730:220::-;45870:34;45866:1;45858:6;45854:14;45847:58;45939:3;45934:2;45926:6;45922:15;45915:28;45730:220;:::o;45956:711::-;45995:3;46033:4;46015:16;46012:26;46009:39;;;46041:5;;46009:39;46070:20;;:::i;:::-;46145:1;46127:16;46123:24;46120:1;46114:4;46099:49;46178:4;46172:11;46277:16;46270:4;46262:6;46258:17;46255:39;46222:18;46214:6;46211:30;46195:113;46192:146;;;46323:5;;;;46192:146;46369:6;46363:4;46359:17;46405:3;46399:10;46432:18;46424:6;46421:30;46418:43;;;46454:5;;;;;;46418:43;46502:6;46495:4;46490:3;46486:14;46482:27;46561:1;46543:16;46539:24;46533:4;46529:35;46524:3;46521:44;46518:57;;;46568:5;;;;;;;46518:57;46585;46633:6;46627:4;46623:17;46615:6;46611:30;46605:4;46585:57;:::i;:::-;46658:3;46651:10;;45999:668;;;;;45956:711;;:::o;46673:122::-;46746:24;46764:5;46746:24;:::i;:::-;46739:5;46736:35;46726:63;;46785:1;46782;46775:12;46726:63;46673:122;:::o;46801:116::-;46871:21;46886:5;46871:21;:::i;:::-;46864:5;46861:32;46851:60;;46907:1;46904;46897:12;46851:60;46801:116;:::o;46923:120::-;46995:23;47012:5;46995:23;:::i;:::-;46988:5;46985:34;46975:62;;47033:1;47030;47023:12;46975:62;46923:120;:::o;47049:122::-;47122:24;47140:5;47122:24;:::i;:::-;47115:5;47112:35;47102:63;;47161:1;47158;47151:12;47102:63;47049:122;:::o

Swarm Source

ipfs://3265bae4e8e7e692fd4b0ad1cbc3ba990283bb3c6dd062796d351dcec6bac0bd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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