ETH Price: $3,357.14 (+0.17%)
Gas: 8.72 Gwei

Token

Lil Heroes (LIL)
 

Overview

Max Total Supply

7,777 LIL

Holders

2,859

Market

Volume (24H)

0.0729 ETH

Min Price (24H)

$30.21 @ 0.009000 ETH

Max Price (24H)

$43.53 @ 0.012967 ETH
Filtered by Token Holder
balaguer.eth
Balance
1 LIL
0xd20e11649c7f4cd3875b184cfdfa60c41a7b7ad6
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Edgar Plans is coming to the metaverse! The Spanish contemporary artist has been designing a collection of 7,777 pieces to reflect his work of the past decade. Meet Lil’ Heroes, the mouse-eared mischievous characters dressed in a huge variety of unique hand-drawn attributes.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LilHeroes

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-16
*/

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


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

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts v4.4.1 (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


// OpenZeppelin Contracts v4.4.1 (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() {
        _transferOwnership(_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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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


// OpenZeppelin Contracts v4.4.1 (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/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


// OpenZeppelin Contracts v4.4.1 (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


// OpenZeppelin Contracts v4.4.1 (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/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol)

pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File: contracts/LilHeroes.sol

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



/**
 * @dev Implementation of Non-Fungible Token Standard (ERC-721)
 * This contract is designed to be ready-to-use and versatile.
 */
contract LilHeroes is ERC721URIStorage, Ownable, Pausable {

    // General constants
    enum mintTypes {PRIVATE, WHITELIST, RAFFLE, PUBLIC}
    uint256 public maxItems                       = 7777; // Maximum items in the collection
    uint256 public price                          = 0.4 ether; // Price for minting one NFT
    uint256 public totalSupply;                             // number of NFTs minted thus far
    address internal __walletTreasury;                      // Address of the treasury wallet
    address internal __walletSignature;                     // Address of the treasury wallet
    string internal __baseURI;                              // Base URI for the metadata
    string internal __extensionURI                  = "";   // Extension of the URI

    // Constants for the private
    uint256 public privateMaxMintsPerTx             = 10;   // Maximum number of mints per transaction
    uint256 public privateMaxMintsPerWallet         = 50;   // Maximum number of mint per wallet
    uint256 public privateStartTime                 = 1642352400; // UTC timestamp when minting is open
    bool public privateIsActive                     = false; // If the mint is active
    mapping(address => uint256) public privateAmountMinted; // Keep track of the amount mint during the private

    // Constants for the whitelist
    uint256 public whitelistMaxMintsPerTx           = 2;    // Maximum number of mints per transaction
    uint256 public whitelistMaxMintsPerWallet       = 2;    // Maximum number of mint per wallet
    uint256 public whitelistStartTime               = 1642352400; // UTC timestamp when minting is open
    bool public whitelistIsActive                   = false; // If the mint is active
    mapping(address => uint256) public whitelistAmountMinted; // Keep track of the amount mint during the whitelist

    // Constants for the raffle
    uint256 public raffleMaxMintsPerTx              = 2;    // Maximum number of mints per transaction
    uint256 public raffleMaxMintsPerWallet          = 2;    // Maximum number of mint per wallet
    uint256 public raffleStartTime                  = 1642359600; // UTC timestamp when minting is open
    bool public raffleIsActive                      = false; // If the mint is active
    mapping(address => uint256) public raffleAmountMinted; // Keep track of the amount mint during the raffle

    // Constants for the public sale
    uint256 public publicMaxMintsPerTx              = 2;    // Maximum number of mints per transaction
    bool public publicIsActive                      = false; // If the mint is active

    constructor(
        string memory name_,
        string memory symbol_,
        address walletTreasury_,
        address walletSignature_,
        string memory baseURI_
    ) ERC721(name_, symbol_) {
        __baseURI = baseURI_;
        __walletTreasury = walletTreasury_;
        __walletSignature = walletSignature_;
    }

    /**
    * Set the new mint per tx allowed
    * @param _type The type of of maximum tx to change
    * @param _newMax The new maximum per tx allowed
    **/
    function setMaxMintsPerTx(uint256 _type, uint256 _newMax) external onlyOwner {
        if (_type == uint256(mintTypes.WHITELIST)) {
            whitelistMaxMintsPerTx = _newMax;
        } else if (_type == uint256(mintTypes.PRIVATE)) {
            privateMaxMintsPerTx = _newMax;
        } else if (_type == uint256(mintTypes.RAFFLE)) {
            raffleMaxMintsPerTx = _newMax;
        } else if (_type == uint256(mintTypes.PUBLIC)) {
            publicMaxMintsPerTx = _newMax;
        }
    }

    /**
    * Set the new mint per wallet allowed
    * @param _type The type of of maximum tx to change
    * @param _newMax The new maximum per tx allowed
    **/
    function setMaxMintsPerWallet(uint256 _type, uint256 _newMax) external onlyOwner {
        if (_type == uint256(mintTypes.WHITELIST)) {
            whitelistMaxMintsPerWallet = _newMax;
        } else if (_type == uint256(mintTypes.PRIVATE)) {
            privateMaxMintsPerWallet = _newMax;
        } else if (_type == uint256(mintTypes.RAFFLE)) {
            raffleMaxMintsPerWallet = _newMax;
        }
    }

    /**
    * Set the new start time
    * @param _type The type of of maximum tx to change
    * @param _startTime The new start time (format: timestamp)
    **/
    function setStartTime(uint256 _type, uint256 _startTime) external onlyOwner {
        if (_type == uint256(mintTypes.WHITELIST)) {
            whitelistStartTime = _startTime;
        } else if (_type == uint256(mintTypes.PRIVATE)) {
            privateStartTime = _startTime;
        } else if (_type == uint256(mintTypes.RAFFLE)) {
            raffleStartTime = _startTime;
        }
    }

    /**
    * Set if the mint is active
    * @param _type The type of of maximum tx to change
    * @param _isActive The new state
    **/
    function setIsActive(uint256 _type, bool _isActive) external onlyOwner {
        if (_type == uint256(mintTypes.WHITELIST)) {
            whitelistIsActive = _isActive;
        } else if (_type == uint256(mintTypes.PRIVATE)) {
            privateIsActive = _isActive;
        } else if (_type == uint256(mintTypes.RAFFLE)) {
            raffleIsActive = _isActive;
        } else if (_type == uint256(mintTypes.PUBLIC)) {
            publicIsActive = _isActive;
        }
    }

    /**
    * Set the new price
    * @param _price The new price
    **/
    function setPrice(uint256 _price) external onlyOwner {
        price = _price;
    }

    /**
    * Set the new max items
    * @param _max The new price
    **/
    function setMaxItems(uint256 _max) external onlyOwner {
        maxItems = _max;
    }

    /**
    * Set the new wallet treasury
    * @param _wallet The eth address
    **/
    function setWalletTreasury(address _wallet) external onlyOwner {
        __walletTreasury = _wallet;
    }

    /**
    * Set the new wallet signature
    * @param _wallet The eth address
    **/
    function setWalletSignature(address _wallet) external onlyOwner {
        __walletSignature = _wallet;
    }

    /**
    * Set the new base uri for metadata
    * @param _newBaseURI The new base uri
    **/
    function setBaseURI(string memory _newBaseURI) external onlyOwner {
        __baseURI = _newBaseURI;
    }

    /**
    * Set the new extension of the uri
    * @param _newExtensionURI The new base uri
    **/
    function setExtensionURI(string memory _newExtensionURI) external onlyOwner {
        __extensionURI = _newExtensionURI;
    }

    /**
    * Get the base url
    **/
    function _baseURI() internal view override returns (string memory) {
        return __baseURI;
    }

    /**
    * Get the token uri of the metadata for a specific token
    * @param tokenId The token id
    **/
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (bytes(__extensionURI).length == 0){
            return super.tokenURI(tokenId);
        }

        return string(abi.encodePacked(super.tokenURI(tokenId), __extensionURI));
    }

    /**
    * Mint for the private sale. We check if the wallet is authorized and how mint it has already done
    * @param numToMint The number of token to mint
    * @param signature The signature
    **/
    function mintPrivate(uint256 numToMint, bytes memory signature) external payable {
        require(block.timestamp > privateStartTime, "minting not open yet");
        require(privateIsActive == true, "minting not activated");
        require(verify(signature, msg.sender), "wallet is not whitelisted");
        require(privateAmountMinted[msg.sender] + numToMint <= privateMaxMintsPerWallet, "too many tokens allowed per wallet");
        require(msg.value >= price * numToMint, "not enough eth provided");
        require(numToMint > 0, "not enough token to mint");
        require((numToMint + totalSupply) <= maxItems, "would exceed max supply");
        require(numToMint <= privateMaxMintsPerTx, "too many tokens per tx");

        for(uint256 i=totalSupply; i < (totalSupply + numToMint); i++){
            _mint(msg.sender, i+1);
        }

        privateAmountMinted[msg.sender] = privateAmountMinted[msg.sender] + numToMint;
        totalSupply += numToMint;
    }

    /**
    * Mint for the whitelist. We check if the wallet is authorized and how mint it has already done
    * @param numToMint The number of token to mint
    * @param signature The signature
    **/
    function mintWhitelist(uint256 numToMint, bytes memory signature) external payable {
        require(block.timestamp > whitelistStartTime, "minting not open yet");
        require(whitelistIsActive == true, "minting not activated");
        require(verify(signature, msg.sender), "wallet is not whitelisted");
        require(whitelistAmountMinted[msg.sender] + numToMint <= whitelistMaxMintsPerWallet, "too many tokens allowed per wallet");
        require(msg.value >= price * numToMint, "not enough eth provided");
        require(numToMint > 0, "not enough token to mint");
        require((numToMint + totalSupply) <= maxItems, "would exceed max supply");
        require(numToMint <= whitelistMaxMintsPerTx, "too many tokens per tx");

        for(uint256 i=totalSupply; i < (totalSupply + numToMint); i++){
            _mint(msg.sender, i+1);
        }

        whitelistAmountMinted[msg.sender] = whitelistAmountMinted[msg.sender] + numToMint;
        totalSupply += numToMint;
    }

    /**
    * Mint for the raffle. We check if the wallet is authorized and how mint it has already done
    * @param numToMint The number of token to mint
    * @param signature The signature
    **/
    function mintRaffle(uint256 numToMint, bytes memory signature) external payable {
        require(block.timestamp > raffleStartTime, "minting not open yet");
        require(raffleIsActive == true, "minting not activated");
        require(verify(signature, msg.sender), "wallet is not whitelisted");
        require(raffleAmountMinted[msg.sender] + numToMint <= raffleMaxMintsPerWallet, "too many tokens allowed per wallet");
        require(msg.value >= price * numToMint, "not enough eth provided");
        require(numToMint > 0, "not enough token to mint");
        require((numToMint + totalSupply) <= maxItems, "would exceed max supply");
        require(numToMint <= raffleMaxMintsPerTx, "too many tokens per tx");

        for(uint256 i=totalSupply; i < (totalSupply + numToMint); i++){
            _mint(msg.sender, i+1);
        }

        raffleAmountMinted[msg.sender] = raffleAmountMinted[msg.sender] + numToMint;
        totalSupply += numToMint;
    }

    /**
    * Mint for the public.
    * @param numToMint The number of token to mint
    **/
    function mintPublic(uint256 numToMint) external payable whenNotPaused {
        require(publicIsActive == true, "minting not activated");
        require(msg.value >= price * numToMint, "not enough eth provided");
        require(numToMint > 0, "not enough token to mint");
        require((numToMint + totalSupply) <= maxItems, "would exceed max supply");
        require(numToMint <= publicMaxMintsPerTx, "too many tokens per tx");

        for(uint256 i=totalSupply; i < (totalSupply + numToMint); i++){
            _mint(msg.sender, i+1);
        }

        totalSupply += numToMint;
    }

    /**
    * Airdrop
    * @param recipients The list of address to send to
    * @param amounts The amount to send to each of address
    **/
    function airdrop(address[] memory recipients, uint256[] memory amounts) external onlyOwner {
        require(recipients.length == amounts.length, "arrays have different lengths");

        for (uint256 i=0; i < recipients.length; i++){
            for(uint256 j=totalSupply; j < (totalSupply + amounts[i]); j++){
                _mint(recipients[i], j+1);
            }

            totalSupply += amounts[i];
        }
    }

    /**
    * Verify if the signature is legit
    * @param signature The signature to verify
    * @param target The target address to find
    **/
    function verify(bytes memory signature, address target) public view returns (bool) {
        uint8 v;
        bytes32 r;
        bytes32 s;
        (v, r, s) = splitSignature(signature);
        bytes32 senderHash = keccak256(abi.encodePacked(target));

        //return (owner() == address(ecrecover(senderHash, v, r, s)));
        return (__walletSignature == address(ecrecover(senderHash, v, r, s)));
    }

    /**
    * Split the signature to verify
    * @param signature The signature to verify
    **/
    function splitSignature(bytes memory signature) public pure returns (uint8, bytes32, bytes32) {
        require(signature.length == 65);

        bytes32 r;
        bytes32 s;
        uint8 v;
        assembly {
        // first 32 bytes, after the length prefix
            r := mload(add(signature, 32))
        // second 32 bytes
            s := mload(add(signature, 64))
        // final byte (first byte of the next 32 bytes)
            v := byte(0, mload(add(signature, 96)))
        }

        return (v, r, s);
    }

    /**
    * Burns `tokenId`. See {ERC721-_burn}. The caller must own `tokenId` or be an approved operator.
    * @param tokenId The ID of the token to burn
   */
    function burn(uint256 tokenId) public virtual {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "caller is not owner nor approved");

        _burn(tokenId);
    }

    /**
    * Withdraw the balance from the contract
    */
    function withdraw() external payable onlyOwner returns (bool success) {
        (success,) = payable(__walletTreasury).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"walletTreasury_","type":"address"},{"internalType":"address","name":"walletSignature_","type":"address"},{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxItems","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numToMint","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mintPrivate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numToMint","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numToMint","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mintRaffle","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numToMint","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mintWhitelist","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"privateAmountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateMaxMintsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateMaxMintsPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMaxMintsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"raffleAmountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raffleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raffleMaxMintsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raffleMaxMintsPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raffleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newExtensionURI","type":"string"}],"name":"setExtensionURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxItems","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"setMaxMintsPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"uint256","name":"_newMax","type":"uint256"}],"name":"setMaxMintsPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setWalletSignature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setWalletTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"address","name":"target","type":"address"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistAmountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMaxMintsPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMaxMintsPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"}]

6080604052611e6160085567058d15e17628000060095560405180602001604052806000815250600e90805190602001906200003d929190620002fd565b50600a600f5560326010556361e44f106011556000601260006101000a81548160ff021916908315150217905550600260145560026015556361e44f106016556000601760006101000a81548160ff02191690831515021790555060026019556002601a556361e46b30601b556000601c60006101000a81548160ff0219169083151502179055506002601e556000601f60006101000a81548160ff021916908315150217905550348015620000f257600080fd5b5060405162006631380380620066318339818101604052810190620001189190620005af565b8484816000908051906020019062000132929190620002fd565b5080600190805190602001906200014b929190620002fd565b5050506200016e620001626200022f60201b60201c565b6200023760201b60201c565b6000600760146101000a81548160ff02191690831515021790555080600d9080519060200190620001a1929190620002fd565b5082600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050620006f9565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200030b90620006c3565b90600052602060002090601f0160209004810192826200032f57600085556200037b565b82601f106200034a57805160ff19168380011785556200037b565b828001600101855582156200037b579182015b828111156200037a5782518255916020019190600101906200035d565b5b5090506200038a91906200038e565b5090565b5b80821115620003a95760008160009055506001016200038f565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200041682620003cb565b810181811067ffffffffffffffff82111715620004385762000437620003dc565b5b80604052505050565b60006200044d620003ad565b90506200045b82826200040b565b919050565b600067ffffffffffffffff8211156200047e576200047d620003dc565b5b6200048982620003cb565b9050602081019050919050565b60005b83811015620004b657808201518184015260208101905062000499565b83811115620004c6576000848401525b50505050565b6000620004e3620004dd8462000460565b62000441565b905082815260208101848484011115620005025762000501620003c6565b5b6200050f84828562000496565b509392505050565b600082601f8301126200052f576200052e620003c1565b5b815162000541848260208601620004cc565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000577826200054a565b9050919050565b62000589816200056a565b81146200059557600080fd5b50565b600081519050620005a9816200057e565b92915050565b600080600080600060a08688031215620005ce57620005cd620003b7565b5b600086015167ffffffffffffffff811115620005ef57620005ee620003bc565b5b620005fd8882890162000517565b955050602086015167ffffffffffffffff811115620006215762000620620003bc565b5b6200062f8882890162000517565b9450506040620006428882890162000598565b9350506060620006558882890162000598565b925050608086015167ffffffffffffffff811115620006795762000678620003bc565b5b620006878882890162000517565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006dc57607f821691505b60208210811415620006f357620006f262000694565b5b50919050565b615f2880620007096000396000f3fe60806040526004361061036b5760003560e01c806370a08231116101c6578063b88d4fde116100f7578063db02ae3211610095578063e67aa0ac1161006f578063e67aa0ac14610c72578063e985e9c514610c9d578063efd0cbf914610cda578063f2fde38b14610cf65761036b565b8063db02ae3214610bf7578063e2356f0b14610c20578063e2e13e6014610c495761036b565b8063c714e89c116100d1578063c714e89c14610b29578063c87b56dd14610b52578063cbeb673214610b8f578063d04d3f8214610bcc5761036b565b8063b88d4fde14610aae578063ba278e0814610ad7578063c3bb8c6414610b005761036b565b80639a2a698c11610164578063a035b1fe1161013e578063a035b1fe146109de578063a22cb46514610a09578063a46769fe14610a32578063a7bb580314610a6f5761036b565b80639a2a698c1461096c5780639f41554a146109975780639f704cb0146109b35761036b565b80638da5cb5b116101a05780638da5cb5b146108c257806391b7f5ed146108ed5780639292caaf1461091657806395d89b41146109415761036b565b806370a0823114610843578063715018a6146108805780638a7c63c5146108975761036b565b806336095bd1116102a057806342966c681161023e5780635c975abb116102185780635c975abb146107895780636352211e146107b457806365bc6c13146107f1578063672434821461081a5761036b565b806342966c681461070c57806355f804b3146107355780635ac4fb5e1461075e5761036b565b80633ccfd60b1161027a5780633ccfd60b1461065d5780633d3ac1b51461067b5780634106be68146106b857806342842e0e146106e35761036b565b806336095bd1146105dc5780633be539ee146106075780633c010a3e146106325761036b565b80631f457c4d1161030d578063266cd06d116102e7578063266cd06d1461052d5780632ccdac5014610558578063322d4ffa1461059557806332850bf6146105c05761036b565b80631f457c4d146104b05780631fe70d6f146104d957806323b872dd146105045761036b565b806306fdde031161034957806306fdde03146103f4578063081812fc1461041f578063095ea7b31461045c57806318160ddd146104855761036b565b806301ffc9a714610370578063033a02d6146103ad57806303cee3cf146103d8575b600080fd5b34801561037c57600080fd5b5061039760048036038101906103929190614148565b610d1f565b6040516103a49190614190565b60405180910390f35b3480156103b957600080fd5b506103c2610e01565b6040516103cf9190614190565b60405180910390f35b6103f260048036038101906103ed9190614327565b610e14565b005b34801561040057600080fd5b506104096111a2565b604051610416919061440b565b60405180910390f35b34801561042b57600080fd5b506104466004803603810190610441919061442d565b611234565b604051610453919061449b565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e91906144e2565b6112b9565b005b34801561049157600080fd5b5061049a6113d1565b6040516104a79190614531565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d2919061454c565b6113d7565b005b3480156104e557600080fd5b506104ee6114f1565b6040516104fb9190614190565b60405180910390f35b34801561051057600080fd5b5061052b6004803603810190610526919061458c565b611504565b005b34801561053957600080fd5b50610542611564565b60405161054f9190614531565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a91906145df565b61156a565b60405161058c9190614531565b60405180910390f35b3480156105a157600080fd5b506105aa611582565b6040516105b79190614531565b60405180910390f35b6105da60048036038101906105d59190614327565b611588565b005b3480156105e857600080fd5b506105f1611916565b6040516105fe9190614190565b60405180910390f35b34801561061357600080fd5b5061061c611929565b6040516106299190614531565b60405180910390f35b34801561063e57600080fd5b5061064761192f565b6040516106549190614531565b60405180910390f35b610665611935565b6040516106729190614190565b60405180910390f35b34801561068757600080fd5b506106a2600480360381019061069d919061460c565b611a44565b6040516106af9190614190565b60405180910390f35b3480156106c457600080fd5b506106cd611b35565b6040516106da9190614531565b60405180910390f35b3480156106ef57600080fd5b5061070a6004803603810190610705919061458c565b611b3b565b005b34801561071857600080fd5b50610733600480360381019061072e919061442d565b611b5b565b005b34801561074157600080fd5b5061075c60048036038101906107579190614709565b611bb7565b005b34801561076a57600080fd5b50610773611c4d565b6040516107809190614531565b60405180910390f35b34801561079557600080fd5b5061079e611c53565b6040516107ab9190614190565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061442d565b611c6a565b6040516107e8919061449b565b60405180910390f35b3480156107fd57600080fd5b50610818600480360381019061081391906145df565b611d1c565b005b34801561082657600080fd5b50610841600480360381019061083c91906148dd565b611ddc565b005b34801561084f57600080fd5b5061086a600480360381019061086591906145df565b611f6e565b6040516108779190614531565b60405180910390f35b34801561088c57600080fd5b50610895612026565b005b3480156108a357600080fd5b506108ac6120ae565b6040516108b99190614531565b60405180910390f35b3480156108ce57600080fd5b506108d76120b4565b6040516108e4919061449b565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f919061442d565b6120de565b005b34801561092257600080fd5b5061092b612164565b6040516109389190614531565b60405180910390f35b34801561094d57600080fd5b5061095661216a565b604051610963919061440b565b60405180910390f35b34801561097857600080fd5b506109816121fc565b60405161098e9190614190565b60405180910390f35b6109b160048036038101906109ac9190614327565b61220f565b005b3480156109bf57600080fd5b506109c861259d565b6040516109d59190614531565b60405180910390f35b3480156109ea57600080fd5b506109f36125a3565b604051610a009190614531565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190614981565b6125a9565b005b348015610a3e57600080fd5b50610a596004803603810190610a5491906145df565b6125bf565b604051610a669190614531565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a9191906149c1565b6125d7565b604051610aa593929190614a3f565b60405180910390f35b348015610aba57600080fd5b50610ad56004803603810190610ad09190614a76565b61261a565b005b348015610ae357600080fd5b50610afe6004803603810190610af9919061454c565b61267c565b005b348015610b0c57600080fd5b50610b276004803603810190610b229190614709565b61276f565b005b348015610b3557600080fd5b50610b506004803603810190610b4b919061442d565b612805565b005b348015610b5e57600080fd5b50610b796004803603810190610b74919061442d565b61288b565b604051610b86919061440b565b60405180910390f35b348015610b9b57600080fd5b50610bb66004803603810190610bb191906145df565b6128e7565b604051610bc39190614531565b60405180910390f35b348015610bd857600080fd5b50610be16128ff565b604051610bee9190614531565b60405180910390f35b348015610c0357600080fd5b50610c1e6004803603810190610c19919061454c565b612905565b005b348015610c2c57600080fd5b50610c476004803603810190610c429190614af9565b6129f8565b005b348015610c5557600080fd5b50610c706004803603810190610c6b91906145df565b612b5e565b005b348015610c7e57600080fd5b50610c87612c1e565b604051610c949190614531565b60405180910390f35b348015610ca957600080fd5b50610cc46004803603810190610cbf9190614b39565b612c24565b604051610cd19190614190565b60405180910390f35b610cf46004803603810190610cef919061442d565b612cb8565b005b348015610d0257600080fd5b50610d1d6004803603810190610d1891906145df565b612ee3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dea57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dfa5750610df982612fdb565b5b9050919050565b601f60009054906101000a900460ff1681565b601b544211610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f90614bc5565b60405180910390fd5b60011515601c60009054906101000a900460ff16151514610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea590614c31565b60405180910390fd5b610eb88133611a44565b610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90614c9d565b60405180910390fd5b601a5482601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f459190614cec565b1115610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90614db4565b60405180910390fd5b81600954610f949190614dd4565b341015610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90614e7a565b60405180910390fd5b60008211611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614ee6565b60405180910390fd5b600854600a548361102a9190614cec565b111561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106290614f52565b60405180910390fd5b6019548211156110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790614fbe565b60405180910390fd5b6000600a5490505b82600a546110c69190614cec565b8110156110f6576110e3336001836110de9190614cec565b613045565b80806110ee90614fde565b9150506110b8565b5081601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111429190614cec565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60008282546111979190614cec565b925050819055505050565b6060600080546111b190615056565b80601f01602080910402602001604051908101604052809291908181526020018280546111dd90615056565b801561122a5780601f106111ff5761010080835404028352916020019161122a565b820191906000526020600020905b81548152906001019060200180831161120d57829003601f168201915b5050505050905090565b600061123f82613213565b61127e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611275906150fa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006112c482611c6a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c9061518c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661135461327f565b73ffffffffffffffffffffffffffffffffffffffff16148061138357506113828161137d61327f565b612c24565b5b6113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b99061521e565b60405180910390fd5b6113cc8383613287565b505050565b600a5481565b6113df61327f565b73ffffffffffffffffffffffffffffffffffffffff166113fd6120b4565b73ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a9061528a565b60405180910390fd5b60016003811115611467576114666152aa565b5b82141561147a57806014819055506114ed565b6000600381111561148e5761148d6152aa565b5b8214156114a15780600f819055506114ec565b600260038111156114b5576114b46152aa565b5b8214156114c857806019819055506114eb565b6003808111156114db576114da6152aa565b5b8214156114ea5780601e819055505b5b5b5b5050565b601760009054906101000a900460ff1681565b61151561150f61327f565b82613340565b611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061534b565b60405180910390fd5b61155f83838361341e565b505050565b601a5481565b60186020528060005260406000206000915090505481565b60195481565b60115442116115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390614bc5565b60405180910390fd5b60011515601260009054906101000a900460ff16151514611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990614c31565b60405180910390fd5b61162c8133611a44565b61166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290614c9d565b60405180910390fd5b60105482601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116b99190614cec565b11156116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190614db4565b60405180910390fd5b816009546117089190614dd4565b34101561174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174190614e7a565b60405180910390fd5b6000821161178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490614ee6565b60405180910390fd5b600854600a548361179e9190614cec565b11156117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d690614f52565b60405180910390fd5b600f54821115611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90614fbe565b60405180910390fd5b6000600a5490505b82600a5461183a9190614cec565b81101561186a57611857336001836118529190614cec565b613045565b808061186290614fde565b91505061182c565b5081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118b69190614cec565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a600082825461190b9190614cec565b925050819055505050565b601260009054906101000a900460ff1681565b601b5481565b60085481565b600061193f61327f565b73ffffffffffffffffffffffffffffffffffffffff1661195d6120b4565b73ffffffffffffffffffffffffffffffffffffffff16146119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa9061528a565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516119f99061539c565b60006040518083038185875af1925050503d8060008114611a36576040519150601f19603f3d011682016040523d82523d6000602084013e611a3b565b606091505b50508091505090565b600080600080611a53866125d7565b809350819450829550505050600085604051602001611a7291906153f9565b60405160208183030381529060405280519060200120905060018185858560405160008152602001604052604051611aad9493929190615414565b6020604051602081039080840390855afa158015611acf573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161494505050505092915050565b60145481565b611b568383836040518060200160405280600081525061261a565b505050565b611b6c611b6661327f565b82613340565b611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba2906154a5565b60405180910390fd5b611bb48161367a565b50565b611bbf61327f565b73ffffffffffffffffffffffffffffffffffffffff16611bdd6120b4565b73ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9061528a565b60405180910390fd5b80600d9080519060200190611c49929190613ff9565b5050565b60105481565b6000600760149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90615537565b60405180910390fd5b80915050919050565b611d2461327f565b73ffffffffffffffffffffffffffffffffffffffff16611d426120b4565b73ffffffffffffffffffffffffffffffffffffffff1614611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f9061528a565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611de461327f565b73ffffffffffffffffffffffffffffffffffffffff16611e026120b4565b73ffffffffffffffffffffffffffffffffffffffff1614611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f9061528a565b60405180910390fd5b8051825114611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e93906155a3565b60405180910390fd5b60005b8251811015611f69576000600a5490505b828281518110611ec357611ec26155c3565b5b6020026020010151600a54611ed89190614cec565b811015611f2257611f0f848381518110611ef557611ef46155c3565b5b6020026020010151600183611f0a9190614cec565b613045565b8080611f1a90614fde565b915050611eb0565b50818181518110611f3657611f356155c3565b5b6020026020010151600a6000828254611f4f9190614cec565b925050819055508080611f6190614fde565b915050611e9f565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690615664565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61202e61327f565b73ffffffffffffffffffffffffffffffffffffffff1661204c6120b4565b73ffffffffffffffffffffffffffffffffffffffff16146120a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120999061528a565b60405180910390fd5b6120ac60006136cd565b565b60115481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120e661327f565b73ffffffffffffffffffffffffffffffffffffffff166121046120b4565b73ffffffffffffffffffffffffffffffffffffffff161461215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121519061528a565b60405180910390fd5b8060098190555050565b60165481565b60606001805461217990615056565b80601f01602080910402602001604051908101604052809291908181526020018280546121a590615056565b80156121f25780601f106121c7576101008083540402835291602001916121f2565b820191906000526020600020905b8154815290600101906020018083116121d557829003601f168201915b5050505050905090565b601c60009054906101000a900460ff1681565b6016544211612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a90614bc5565b60405180910390fd5b60011515601760009054906101000a900460ff161515146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614c31565b60405180910390fd5b6122b38133611a44565b6122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e990614c9d565b60405180910390fd5b60155482601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123409190614cec565b1115612381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237890614db4565b60405180910390fd5b8160095461238f9190614dd4565b3410156123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c890614e7a565b60405180910390fd5b60008211612414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240b90614ee6565b60405180910390fd5b600854600a54836124259190614cec565b1115612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614f52565b60405180910390fd5b6014548211156124ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a290614fbe565b60405180910390fd5b6000600a5490505b82600a546124c19190614cec565b8110156124f1576124de336001836124d99190614cec565b613045565b80806124e990614fde565b9150506124b3565b5081601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253d9190614cec565b601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60008282546125929190614cec565b925050819055505050565b60155481565b60095481565b6125bb6125b461327f565b8383613793565b5050565b60136020528060005260406000206000915090505481565b600080600060418451146125ea57600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b61262b61262561327f565b83613340565b61266a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126619061534b565b60405180910390fd5b61267684848484613900565b50505050565b61268461327f565b73ffffffffffffffffffffffffffffffffffffffff166126a26120b4565b73ffffffffffffffffffffffffffffffffffffffff16146126f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ef9061528a565b60405180910390fd5b6001600381111561270c5761270b6152aa565b5b82141561271f578060168190555061276b565b60006003811115612733576127326152aa565b5b821415612746578060118190555061276a565b6002600381111561275a576127596152aa565b5b8214156127695780601b819055505b5b5b5050565b61277761327f565b73ffffffffffffffffffffffffffffffffffffffff166127956120b4565b73ffffffffffffffffffffffffffffffffffffffff16146127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061528a565b60405180910390fd5b80600e9080519060200190612801929190613ff9565b5050565b61280d61327f565b73ffffffffffffffffffffffffffffffffffffffff1661282b6120b4565b73ffffffffffffffffffffffffffffffffffffffff1614612881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128789061528a565b60405180910390fd5b8060088190555050565b60606000600e805461289c90615056565b905014156128b4576128ad8261395c565b90506128e2565b6128bd8261395c565b600e6040516020016128d0929190615754565b60405160208183030381529060405290505b919050565b601d6020528060005260406000206000915090505481565b601e5481565b61290d61327f565b73ffffffffffffffffffffffffffffffffffffffff1661292b6120b4565b73ffffffffffffffffffffffffffffffffffffffff1614612981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129789061528a565b60405180910390fd5b60016003811115612995576129946152aa565b5b8214156129a857806015819055506129f4565b600060038111156129bc576129bb6152aa565b5b8214156129cf57806010819055506129f3565b600260038111156129e3576129e26152aa565b5b8214156129f25780601a819055505b5b5b5050565b612a0061327f565b73ffffffffffffffffffffffffffffffffffffffff16612a1e6120b4565b73ffffffffffffffffffffffffffffffffffffffff1614612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6b9061528a565b60405180910390fd5b60016003811115612a8857612a876152aa565b5b821415612aae5780601760006101000a81548160ff021916908315150217905550612b5a565b60006003811115612ac257612ac16152aa565b5b821415612ae85780601260006101000a81548160ff021916908315150217905550612b59565b60026003811115612afc57612afb6152aa565b5b821415612b225780601c60006101000a81548160ff021916908315150217905550612b58565b600380811115612b3557612b346152aa565b5b821415612b575780601f60006101000a81548160ff0219169083151502179055505b5b5b5b5050565b612b6661327f565b73ffffffffffffffffffffffffffffffffffffffff16612b846120b4565b73ffffffffffffffffffffffffffffffffffffffff1614612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd19061528a565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612cc0611c53565b15612d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf7906157c4565b60405180910390fd5b60011515601f60009054906101000a900460ff16151514612d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4d90614c31565b60405180910390fd5b80600954612d649190614dd4565b341015612da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9d90614e7a565b60405180910390fd5b60008111612de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de090614ee6565b60405180910390fd5b600854600a5482612dfa9190614cec565b1115612e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3290614f52565b60405180910390fd5b601e54811115612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7790614fbe565b60405180910390fd5b6000600a5490505b81600a54612e969190614cec565b811015612ec657612eb333600183612eae9190614cec565b613045565b8080612ebe90614fde565b915050612e88565b5080600a6000828254612ed99190614cec565b9250508190555050565b612eeb61327f565b73ffffffffffffffffffffffffffffffffffffffff16612f096120b4565b73ffffffffffffffffffffffffffffffffffffffff1614612f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f569061528a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc690615856565b60405180910390fd5b612fd8816136cd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ac906158c2565b60405180910390fd5b6130be81613213565b156130fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f59061592e565b60405180910390fd5b61310a60008383613aae565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461315a9190614cec565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166132fa83611c6a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061334b82613213565b61338a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613381906159c0565b60405180910390fd5b600061339583611c6a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061340457508373ffffffffffffffffffffffffffffffffffffffff166133ec84611234565b73ffffffffffffffffffffffffffffffffffffffff16145b8061341557506134148185612c24565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661343e82611c6a565b73ffffffffffffffffffffffffffffffffffffffff1614613494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348b90615a52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fb90615ae4565b60405180910390fd5b61350f838383613aae565b61351a600082613287565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461356a9190615b04565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135c19190614cec565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61368381613ab3565b60006006600083815260200190815260200160002080546136a390615056565b9050146136ca576006600082815260200190815260200160002060006136c9919061407f565b5b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f990615b84565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516138f39190614190565b60405180910390a3505050565b61390b84848461341e565b61391784848484613bc4565b613956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394d90615c16565b60405180910390fd5b50505050565b606061396782613213565b6139a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399d90615ca8565b60405180910390fd5b60006006600084815260200190815260200160002080546139c690615056565b80601f01602080910402602001604051908101604052809291908181526020018280546139f290615056565b8015613a3f5780601f10613a1457610100808354040283529160200191613a3f565b820191906000526020600020905b815481529060010190602001808311613a2257829003601f168201915b505050505090506000613a50613d4c565b9050600081511415613a66578192505050613aa9565b600082511115613a9b578082604051602001613a83929190615cc8565b60405160208183030381529060405292505050613aa9565b613aa484613dde565b925050505b919050565b505050565b6000613abe82611c6a565b9050613acc81600084613aae565b613ad7600083613287565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b279190615b04565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000613be58473ffffffffffffffffffffffffffffffffffffffff16613e85565b15613d3f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613c0e61327f565b8786866040518563ffffffff1660e01b8152600401613c309493929190615d41565b6020604051808303816000875af1925050508015613c6c57506040513d601f19601f82011682018060405250810190613c699190615da2565b60015b613cef573d8060008114613c9c576040519150601f19603f3d011682016040523d82523d6000602084013e613ca1565b606091505b50600081511415613ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cde90615c16565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613d44565b600190505b949350505050565b6060600d8054613d5b90615056565b80601f0160208091040260200160405190810160405280929190818152602001828054613d8790615056565b8015613dd45780601f10613da957610100808354040283529160200191613dd4565b820191906000526020600020905b815481529060010190602001808311613db757829003601f168201915b5050505050905090565b6060613de982613213565b613e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1f90615e41565b60405180910390fd5b6000613e32613d4c565b90506000815111613e525760405180602001604052806000815250613e7d565b80613e5c84613e98565b604051602001613e6d929190615cc8565b6040516020818303038152906040525b915050919050565b600080823b905060008111915050919050565b60606000821415613ee0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613ff4565b600082905060005b60008214613f12578080613efb90614fde565b915050600a82613f0b9190615e90565b9150613ee8565b60008167ffffffffffffffff811115613f2e57613f2d6141fc565b5b6040519080825280601f01601f191660200182016040528015613f605781602001600182028036833780820191505090505b5090505b60008514613fed57600182613f799190615b04565b9150600a85613f889190615ec1565b6030613f949190614cec565b60f81b818381518110613faa57613fa96155c3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613fe69190615e90565b9450613f64565b8093505050505b919050565b82805461400590615056565b90600052602060002090601f016020900481019282614027576000855561406e565b82601f1061404057805160ff191683800117855561406e565b8280016001018555821561406e579182015b8281111561406d578251825591602001919060010190614052565b5b50905061407b91906140bf565b5090565b50805461408b90615056565b6000825580601f1061409d57506140bc565b601f0160209004906000526020600020908101906140bb91906140bf565b5b50565b5b808211156140d85760008160009055506001016140c0565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614125816140f0565b811461413057600080fd5b50565b6000813590506141428161411c565b92915050565b60006020828403121561415e5761415d6140e6565b5b600061416c84828501614133565b91505092915050565b60008115159050919050565b61418a81614175565b82525050565b60006020820190506141a56000830184614181565b92915050565b6000819050919050565b6141be816141ab565b81146141c957600080fd5b50565b6000813590506141db816141b5565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614234826141eb565b810181811067ffffffffffffffff82111715614253576142526141fc565b5b80604052505050565b60006142666140dc565b9050614272828261422b565b919050565b600067ffffffffffffffff821115614292576142916141fc565b5b61429b826141eb565b9050602081019050919050565b82818337600083830152505050565b60006142ca6142c584614277565b61425c565b9050828152602081018484840111156142e6576142e56141e6565b5b6142f18482856142a8565b509392505050565b600082601f83011261430e5761430d6141e1565b5b813561431e8482602086016142b7565b91505092915050565b6000806040838503121561433e5761433d6140e6565b5b600061434c858286016141cc565b925050602083013567ffffffffffffffff81111561436d5761436c6140eb565b5b614379858286016142f9565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143bd5780820151818401526020810190506143a2565b838111156143cc576000848401525b50505050565b60006143dd82614383565b6143e7818561438e565b93506143f781856020860161439f565b614400816141eb565b840191505092915050565b6000602082019050818103600083015261442581846143d2565b905092915050565b600060208284031215614443576144426140e6565b5b6000614451848285016141cc565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144858261445a565b9050919050565b6144958161447a565b82525050565b60006020820190506144b0600083018461448c565b92915050565b6144bf8161447a565b81146144ca57600080fd5b50565b6000813590506144dc816144b6565b92915050565b600080604083850312156144f9576144f86140e6565b5b6000614507858286016144cd565b9250506020614518858286016141cc565b9150509250929050565b61452b816141ab565b82525050565b60006020820190506145466000830184614522565b92915050565b60008060408385031215614563576145626140e6565b5b6000614571858286016141cc565b9250506020614582858286016141cc565b9150509250929050565b6000806000606084860312156145a5576145a46140e6565b5b60006145b3868287016144cd565b93505060206145c4868287016144cd565b92505060406145d5868287016141cc565b9150509250925092565b6000602082840312156145f5576145f46140e6565b5b6000614603848285016144cd565b91505092915050565b60008060408385031215614623576146226140e6565b5b600083013567ffffffffffffffff811115614641576146406140eb565b5b61464d858286016142f9565b925050602061465e858286016144cd565b9150509250929050565b600067ffffffffffffffff821115614683576146826141fc565b5b61468c826141eb565b9050602081019050919050565b60006146ac6146a784614668565b61425c565b9050828152602081018484840111156146c8576146c76141e6565b5b6146d38482856142a8565b509392505050565b600082601f8301126146f0576146ef6141e1565b5b8135614700848260208601614699565b91505092915050565b60006020828403121561471f5761471e6140e6565b5b600082013567ffffffffffffffff81111561473d5761473c6140eb565b5b614749848285016146db565b91505092915050565b600067ffffffffffffffff82111561476d5761476c6141fc565b5b602082029050602081019050919050565b600080fd5b600061479661479184614752565b61425c565b905080838252602082019050602084028301858111156147b9576147b861477e565b5b835b818110156147e257806147ce88826144cd565b8452602084019350506020810190506147bb565b5050509392505050565b600082601f830112614801576148006141e1565b5b8135614811848260208601614783565b91505092915050565b600067ffffffffffffffff821115614835576148346141fc565b5b602082029050602081019050919050565b60006148596148548461481a565b61425c565b9050808382526020820190506020840283018581111561487c5761487b61477e565b5b835b818110156148a5578061489188826141cc565b84526020840193505060208101905061487e565b5050509392505050565b600082601f8301126148c4576148c36141e1565b5b81356148d4848260208601614846565b91505092915050565b600080604083850312156148f4576148f36140e6565b5b600083013567ffffffffffffffff811115614912576149116140eb565b5b61491e858286016147ec565b925050602083013567ffffffffffffffff81111561493f5761493e6140eb565b5b61494b858286016148af565b9150509250929050565b61495e81614175565b811461496957600080fd5b50565b60008135905061497b81614955565b92915050565b60008060408385031215614998576149976140e6565b5b60006149a6858286016144cd565b92505060206149b78582860161496c565b9150509250929050565b6000602082840312156149d7576149d66140e6565b5b600082013567ffffffffffffffff8111156149f5576149f46140eb565b5b614a01848285016142f9565b91505092915050565b600060ff82169050919050565b614a2081614a0a565b82525050565b6000819050919050565b614a3981614a26565b82525050565b6000606082019050614a546000830186614a17565b614a616020830185614a30565b614a6e6040830184614a30565b949350505050565b60008060008060808587031215614a9057614a8f6140e6565b5b6000614a9e878288016144cd565b9450506020614aaf878288016144cd565b9350506040614ac0878288016141cc565b925050606085013567ffffffffffffffff811115614ae157614ae06140eb565b5b614aed878288016142f9565b91505092959194509250565b60008060408385031215614b1057614b0f6140e6565b5b6000614b1e858286016141cc565b9250506020614b2f8582860161496c565b9150509250929050565b60008060408385031215614b5057614b4f6140e6565b5b6000614b5e858286016144cd565b9250506020614b6f858286016144cd565b9150509250929050565b7f6d696e74696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614baf60148361438e565b9150614bba82614b79565b602082019050919050565b60006020820190508181036000830152614bde81614ba2565b9050919050565b7f6d696e74696e67206e6f74206163746976617465640000000000000000000000600082015250565b6000614c1b60158361438e565b9150614c2682614be5565b602082019050919050565b60006020820190508181036000830152614c4a81614c0e565b9050919050565b7f77616c6c6574206973206e6f742077686974656c697374656400000000000000600082015250565b6000614c8760198361438e565b9150614c9282614c51565b602082019050919050565b60006020820190508181036000830152614cb681614c7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cf7826141ab565b9150614d02836141ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d3757614d36614cbd565b5b828201905092915050565b7f746f6f206d616e7920746f6b656e7320616c6c6f776564207065722077616c6c60008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d9e60228361438e565b9150614da982614d42565b604082019050919050565b60006020820190508181036000830152614dcd81614d91565b9050919050565b6000614ddf826141ab565b9150614dea836141ab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e2357614e22614cbd565b5b828202905092915050565b7f6e6f7420656e6f756768206574682070726f7669646564000000000000000000600082015250565b6000614e6460178361438e565b9150614e6f82614e2e565b602082019050919050565b60006020820190508181036000830152614e9381614e57565b9050919050565b7f6e6f7420656e6f75676820746f6b656e20746f206d696e740000000000000000600082015250565b6000614ed060188361438e565b9150614edb82614e9a565b602082019050919050565b60006020820190508181036000830152614eff81614ec3565b9050919050565b7f776f756c6420657863656564206d617820737570706c79000000000000000000600082015250565b6000614f3c60178361438e565b9150614f4782614f06565b602082019050919050565b60006020820190508181036000830152614f6b81614f2f565b9050919050565b7f746f6f206d616e7920746f6b656e732070657220747800000000000000000000600082015250565b6000614fa860168361438e565b9150614fb382614f72565b602082019050919050565b60006020820190508181036000830152614fd781614f9b565b9050919050565b6000614fe9826141ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561501c5761501b614cbd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061506e57607f821691505b6020821081141561508257615081615027565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006150e4602c8361438e565b91506150ef82615088565b604082019050919050565b60006020820190508181036000830152615113816150d7565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061517660218361438e565b91506151818261511a565b604082019050919050565b600060208201905081810360008301526151a581615169565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061520860388361438e565b9150615213826151ac565b604082019050919050565b60006020820190508181036000830152615237816151fb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061527460208361438e565b915061527f8261523e565b602082019050919050565b600060208201905081810360008301526152a381615267565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061533560318361438e565b9150615340826152d9565b604082019050919050565b6000602082019050818103600083015261536481615328565b9050919050565b600081905092915050565b50565b600061538660008361536b565b915061539182615376565b600082019050919050565b60006153a782615379565b9150819050919050565b60008160601b9050919050565b60006153c9826153b1565b9050919050565b60006153db826153be565b9050919050565b6153f36153ee8261447a565b6153d0565b82525050565b600061540582846153e2565b60148201915081905092915050565b60006080820190506154296000830187614a30565b6154366020830186614a17565b6154436040830185614a30565b6154506060830184614a30565b95945050505050565b7f63616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564600082015250565b600061548f60208361438e565b915061549a82615459565b602082019050919050565b600060208201905081810360008301526154be81615482565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061552160298361438e565b915061552c826154c5565b604082019050919050565b6000602082019050818103600083015261555081615514565b9050919050565b7f617272617973206861766520646966666572656e74206c656e67746873000000600082015250565b600061558d601d8361438e565b915061559882615557565b602082019050919050565b600060208201905081810360008301526155bc81615580565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061564e602a8361438e565b9150615659826155f2565b604082019050919050565b6000602082019050818103600083015261567d81615641565b9050919050565b600081905092915050565b600061569a82614383565b6156a48185615684565b93506156b481856020860161439f565b80840191505092915050565b60008190508160005260206000209050919050565b600081546156e281615056565b6156ec8186615684565b9450600182166000811461570757600181146157185761574b565b60ff1983168652818601935061574b565b615721856156c0565b60005b8381101561574357815481890152600182019150602081019050615724565b838801955050505b50505092915050565b6000615760828561568f565b915061576c82846156d5565b91508190509392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006157ae60108361438e565b91506157b982615778565b602082019050919050565b600060208201905081810360008301526157dd816157a1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061584060268361438e565b915061584b826157e4565b604082019050919050565b6000602082019050818103600083015261586f81615833565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006158ac60208361438e565b91506158b782615876565b602082019050919050565b600060208201905081810360008301526158db8161589f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615918601c8361438e565b9150615923826158e2565b602082019050919050565b600060208201905081810360008301526159478161590b565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006159aa602c8361438e565b91506159b58261594e565b604082019050919050565b600060208201905081810360008301526159d98161599d565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000615a3c60298361438e565b9150615a47826159e0565b604082019050919050565b60006020820190508181036000830152615a6b81615a2f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615ace60248361438e565b9150615ad982615a72565b604082019050919050565b60006020820190508181036000830152615afd81615ac1565b9050919050565b6000615b0f826141ab565b9150615b1a836141ab565b925082821015615b2d57615b2c614cbd565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615b6e60198361438e565b9150615b7982615b38565b602082019050919050565b60006020820190508181036000830152615b9d81615b61565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615c0060328361438e565b9150615c0b82615ba4565b604082019050919050565b60006020820190508181036000830152615c2f81615bf3565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000615c9260318361438e565b9150615c9d82615c36565b604082019050919050565b60006020820190508181036000830152615cc181615c85565b9050919050565b6000615cd4828561568f565b9150615ce0828461568f565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000615d1382615cec565b615d1d8185615cf7565b9350615d2d81856020860161439f565b615d36816141eb565b840191505092915050565b6000608082019050615d56600083018761448c565b615d63602083018661448c565b615d706040830185614522565b8181036060830152615d828184615d08565b905095945050505050565b600081519050615d9c8161411c565b92915050565b600060208284031215615db857615db76140e6565b5b6000615dc684828501615d8d565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615e2b602f8361438e565b9150615e3682615dcf565b604082019050919050565b60006020820190508181036000830152615e5a81615e1e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615e9b826141ab565b9150615ea6836141ab565b925082615eb657615eb5615e61565b5b828204905092915050565b6000615ecc826141ab565b9150615ed7836141ab565b925082615ee757615ee6615e61565b5b82820690509291505056fea26469706673582212208f38d839dcdcd80c7ca3e35b2e44753ca20b140357763c89265d10ac6e75d79964736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000015d0bb3e80e401a1c5a40af8e89f655f5130a924000000000000000000000000ed2a200c3e3150af1a7f361fae3ddc47dbabc5230000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000a4c696c204865726f65730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034c494c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f6170692e6c696c6865726f65732e696f2f6c61746573742f6d657461646174612f6e66742f00000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061036b5760003560e01c806370a08231116101c6578063b88d4fde116100f7578063db02ae3211610095578063e67aa0ac1161006f578063e67aa0ac14610c72578063e985e9c514610c9d578063efd0cbf914610cda578063f2fde38b14610cf65761036b565b8063db02ae3214610bf7578063e2356f0b14610c20578063e2e13e6014610c495761036b565b8063c714e89c116100d1578063c714e89c14610b29578063c87b56dd14610b52578063cbeb673214610b8f578063d04d3f8214610bcc5761036b565b8063b88d4fde14610aae578063ba278e0814610ad7578063c3bb8c6414610b005761036b565b80639a2a698c11610164578063a035b1fe1161013e578063a035b1fe146109de578063a22cb46514610a09578063a46769fe14610a32578063a7bb580314610a6f5761036b565b80639a2a698c1461096c5780639f41554a146109975780639f704cb0146109b35761036b565b80638da5cb5b116101a05780638da5cb5b146108c257806391b7f5ed146108ed5780639292caaf1461091657806395d89b41146109415761036b565b806370a0823114610843578063715018a6146108805780638a7c63c5146108975761036b565b806336095bd1116102a057806342966c681161023e5780635c975abb116102185780635c975abb146107895780636352211e146107b457806365bc6c13146107f1578063672434821461081a5761036b565b806342966c681461070c57806355f804b3146107355780635ac4fb5e1461075e5761036b565b80633ccfd60b1161027a5780633ccfd60b1461065d5780633d3ac1b51461067b5780634106be68146106b857806342842e0e146106e35761036b565b806336095bd1146105dc5780633be539ee146106075780633c010a3e146106325761036b565b80631f457c4d1161030d578063266cd06d116102e7578063266cd06d1461052d5780632ccdac5014610558578063322d4ffa1461059557806332850bf6146105c05761036b565b80631f457c4d146104b05780631fe70d6f146104d957806323b872dd146105045761036b565b806306fdde031161034957806306fdde03146103f4578063081812fc1461041f578063095ea7b31461045c57806318160ddd146104855761036b565b806301ffc9a714610370578063033a02d6146103ad57806303cee3cf146103d8575b600080fd5b34801561037c57600080fd5b5061039760048036038101906103929190614148565b610d1f565b6040516103a49190614190565b60405180910390f35b3480156103b957600080fd5b506103c2610e01565b6040516103cf9190614190565b60405180910390f35b6103f260048036038101906103ed9190614327565b610e14565b005b34801561040057600080fd5b506104096111a2565b604051610416919061440b565b60405180910390f35b34801561042b57600080fd5b506104466004803603810190610441919061442d565b611234565b604051610453919061449b565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e91906144e2565b6112b9565b005b34801561049157600080fd5b5061049a6113d1565b6040516104a79190614531565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d2919061454c565b6113d7565b005b3480156104e557600080fd5b506104ee6114f1565b6040516104fb9190614190565b60405180910390f35b34801561051057600080fd5b5061052b6004803603810190610526919061458c565b611504565b005b34801561053957600080fd5b50610542611564565b60405161054f9190614531565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a91906145df565b61156a565b60405161058c9190614531565b60405180910390f35b3480156105a157600080fd5b506105aa611582565b6040516105b79190614531565b60405180910390f35b6105da60048036038101906105d59190614327565b611588565b005b3480156105e857600080fd5b506105f1611916565b6040516105fe9190614190565b60405180910390f35b34801561061357600080fd5b5061061c611929565b6040516106299190614531565b60405180910390f35b34801561063e57600080fd5b5061064761192f565b6040516106549190614531565b60405180910390f35b610665611935565b6040516106729190614190565b60405180910390f35b34801561068757600080fd5b506106a2600480360381019061069d919061460c565b611a44565b6040516106af9190614190565b60405180910390f35b3480156106c457600080fd5b506106cd611b35565b6040516106da9190614531565b60405180910390f35b3480156106ef57600080fd5b5061070a6004803603810190610705919061458c565b611b3b565b005b34801561071857600080fd5b50610733600480360381019061072e919061442d565b611b5b565b005b34801561074157600080fd5b5061075c60048036038101906107579190614709565b611bb7565b005b34801561076a57600080fd5b50610773611c4d565b6040516107809190614531565b60405180910390f35b34801561079557600080fd5b5061079e611c53565b6040516107ab9190614190565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061442d565b611c6a565b6040516107e8919061449b565b60405180910390f35b3480156107fd57600080fd5b50610818600480360381019061081391906145df565b611d1c565b005b34801561082657600080fd5b50610841600480360381019061083c91906148dd565b611ddc565b005b34801561084f57600080fd5b5061086a600480360381019061086591906145df565b611f6e565b6040516108779190614531565b60405180910390f35b34801561088c57600080fd5b50610895612026565b005b3480156108a357600080fd5b506108ac6120ae565b6040516108b99190614531565b60405180910390f35b3480156108ce57600080fd5b506108d76120b4565b6040516108e4919061449b565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f919061442d565b6120de565b005b34801561092257600080fd5b5061092b612164565b6040516109389190614531565b60405180910390f35b34801561094d57600080fd5b5061095661216a565b604051610963919061440b565b60405180910390f35b34801561097857600080fd5b506109816121fc565b60405161098e9190614190565b60405180910390f35b6109b160048036038101906109ac9190614327565b61220f565b005b3480156109bf57600080fd5b506109c861259d565b6040516109d59190614531565b60405180910390f35b3480156109ea57600080fd5b506109f36125a3565b604051610a009190614531565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190614981565b6125a9565b005b348015610a3e57600080fd5b50610a596004803603810190610a5491906145df565b6125bf565b604051610a669190614531565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a9191906149c1565b6125d7565b604051610aa593929190614a3f565b60405180910390f35b348015610aba57600080fd5b50610ad56004803603810190610ad09190614a76565b61261a565b005b348015610ae357600080fd5b50610afe6004803603810190610af9919061454c565b61267c565b005b348015610b0c57600080fd5b50610b276004803603810190610b229190614709565b61276f565b005b348015610b3557600080fd5b50610b506004803603810190610b4b919061442d565b612805565b005b348015610b5e57600080fd5b50610b796004803603810190610b74919061442d565b61288b565b604051610b86919061440b565b60405180910390f35b348015610b9b57600080fd5b50610bb66004803603810190610bb191906145df565b6128e7565b604051610bc39190614531565b60405180910390f35b348015610bd857600080fd5b50610be16128ff565b604051610bee9190614531565b60405180910390f35b348015610c0357600080fd5b50610c1e6004803603810190610c19919061454c565b612905565b005b348015610c2c57600080fd5b50610c476004803603810190610c429190614af9565b6129f8565b005b348015610c5557600080fd5b50610c706004803603810190610c6b91906145df565b612b5e565b005b348015610c7e57600080fd5b50610c87612c1e565b604051610c949190614531565b60405180910390f35b348015610ca957600080fd5b50610cc46004803603810190610cbf9190614b39565b612c24565b604051610cd19190614190565b60405180910390f35b610cf46004803603810190610cef919061442d565b612cb8565b005b348015610d0257600080fd5b50610d1d6004803603810190610d1891906145df565b612ee3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dea57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610dfa5750610df982612fdb565b5b9050919050565b601f60009054906101000a900460ff1681565b601b544211610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f90614bc5565b60405180910390fd5b60011515601c60009054906101000a900460ff16151514610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea590614c31565b60405180910390fd5b610eb88133611a44565b610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90614c9d565b60405180910390fd5b601a5482601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f459190614cec565b1115610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90614db4565b60405180910390fd5b81600954610f949190614dd4565b341015610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90614e7a565b60405180910390fd5b60008211611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090614ee6565b60405180910390fd5b600854600a548361102a9190614cec565b111561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106290614f52565b60405180910390fd5b6019548211156110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790614fbe565b60405180910390fd5b6000600a5490505b82600a546110c69190614cec565b8110156110f6576110e3336001836110de9190614cec565b613045565b80806110ee90614fde565b9150506110b8565b5081601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111429190614cec565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60008282546111979190614cec565b925050819055505050565b6060600080546111b190615056565b80601f01602080910402602001604051908101604052809291908181526020018280546111dd90615056565b801561122a5780601f106111ff5761010080835404028352916020019161122a565b820191906000526020600020905b81548152906001019060200180831161120d57829003601f168201915b5050505050905090565b600061123f82613213565b61127e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611275906150fa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006112c482611c6a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c9061518c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661135461327f565b73ffffffffffffffffffffffffffffffffffffffff16148061138357506113828161137d61327f565b612c24565b5b6113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b99061521e565b60405180910390fd5b6113cc8383613287565b505050565b600a5481565b6113df61327f565b73ffffffffffffffffffffffffffffffffffffffff166113fd6120b4565b73ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a9061528a565b60405180910390fd5b60016003811115611467576114666152aa565b5b82141561147a57806014819055506114ed565b6000600381111561148e5761148d6152aa565b5b8214156114a15780600f819055506114ec565b600260038111156114b5576114b46152aa565b5b8214156114c857806019819055506114eb565b6003808111156114db576114da6152aa565b5b8214156114ea5780601e819055505b5b5b5b5050565b601760009054906101000a900460ff1681565b61151561150f61327f565b82613340565b611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b9061534b565b60405180910390fd5b61155f83838361341e565b505050565b601a5481565b60186020528060005260406000206000915090505481565b60195481565b60115442116115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390614bc5565b60405180910390fd5b60011515601260009054906101000a900460ff16151514611622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161990614c31565b60405180910390fd5b61162c8133611a44565b61166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290614c9d565b60405180910390fd5b60105482601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116b99190614cec565b11156116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190614db4565b60405180910390fd5b816009546117089190614dd4565b34101561174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174190614e7a565b60405180910390fd5b6000821161178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490614ee6565b60405180910390fd5b600854600a548361179e9190614cec565b11156117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d690614f52565b60405180910390fd5b600f54821115611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90614fbe565b60405180910390fd5b6000600a5490505b82600a5461183a9190614cec565b81101561186a57611857336001836118529190614cec565b613045565b808061186290614fde565b91505061182c565b5081601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118b69190614cec565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a600082825461190b9190614cec565b925050819055505050565b601260009054906101000a900460ff1681565b601b5481565b60085481565b600061193f61327f565b73ffffffffffffffffffffffffffffffffffffffff1661195d6120b4565b73ffffffffffffffffffffffffffffffffffffffff16146119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa9061528a565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516119f99061539c565b60006040518083038185875af1925050503d8060008114611a36576040519150601f19603f3d011682016040523d82523d6000602084013e611a3b565b606091505b50508091505090565b600080600080611a53866125d7565b809350819450829550505050600085604051602001611a7291906153f9565b60405160208183030381529060405280519060200120905060018185858560405160008152602001604052604051611aad9493929190615414565b6020604051602081039080840390855afa158015611acf573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161494505050505092915050565b60145481565b611b568383836040518060200160405280600081525061261a565b505050565b611b6c611b6661327f565b82613340565b611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba2906154a5565b60405180910390fd5b611bb48161367a565b50565b611bbf61327f565b73ffffffffffffffffffffffffffffffffffffffff16611bdd6120b4565b73ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a9061528a565b60405180910390fd5b80600d9080519060200190611c49929190613ff9565b5050565b60105481565b6000600760149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a90615537565b60405180910390fd5b80915050919050565b611d2461327f565b73ffffffffffffffffffffffffffffffffffffffff16611d426120b4565b73ffffffffffffffffffffffffffffffffffffffff1614611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f9061528a565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611de461327f565b73ffffffffffffffffffffffffffffffffffffffff16611e026120b4565b73ffffffffffffffffffffffffffffffffffffffff1614611e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4f9061528a565b60405180910390fd5b8051825114611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e93906155a3565b60405180910390fd5b60005b8251811015611f69576000600a5490505b828281518110611ec357611ec26155c3565b5b6020026020010151600a54611ed89190614cec565b811015611f2257611f0f848381518110611ef557611ef46155c3565b5b6020026020010151600183611f0a9190614cec565b613045565b8080611f1a90614fde565b915050611eb0565b50818181518110611f3657611f356155c3565b5b6020026020010151600a6000828254611f4f9190614cec565b925050819055508080611f6190614fde565b915050611e9f565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690615664565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61202e61327f565b73ffffffffffffffffffffffffffffffffffffffff1661204c6120b4565b73ffffffffffffffffffffffffffffffffffffffff16146120a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120999061528a565b60405180910390fd5b6120ac60006136cd565b565b60115481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6120e661327f565b73ffffffffffffffffffffffffffffffffffffffff166121046120b4565b73ffffffffffffffffffffffffffffffffffffffff161461215a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121519061528a565b60405180910390fd5b8060098190555050565b60165481565b60606001805461217990615056565b80601f01602080910402602001604051908101604052809291908181526020018280546121a590615056565b80156121f25780601f106121c7576101008083540402835291602001916121f2565b820191906000526020600020905b8154815290600101906020018083116121d557829003601f168201915b5050505050905090565b601c60009054906101000a900460ff1681565b6016544211612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a90614bc5565b60405180910390fd5b60011515601760009054906101000a900460ff161515146122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090614c31565b60405180910390fd5b6122b38133611a44565b6122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e990614c9d565b60405180910390fd5b60155482601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123409190614cec565b1115612381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237890614db4565b60405180910390fd5b8160095461238f9190614dd4565b3410156123d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c890614e7a565b60405180910390fd5b60008211612414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240b90614ee6565b60405180910390fd5b600854600a54836124259190614cec565b1115612466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245d90614f52565b60405180910390fd5b6014548211156124ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a290614fbe565b60405180910390fd5b6000600a5490505b82600a546124c19190614cec565b8110156124f1576124de336001836124d99190614cec565b613045565b80806124e990614fde565b9150506124b3565b5081601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461253d9190614cec565b601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60008282546125929190614cec565b925050819055505050565b60155481565b60095481565b6125bb6125b461327f565b8383613793565b5050565b60136020528060005260406000206000915090505481565b600080600060418451146125ea57600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b61262b61262561327f565b83613340565b61266a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126619061534b565b60405180910390fd5b61267684848484613900565b50505050565b61268461327f565b73ffffffffffffffffffffffffffffffffffffffff166126a26120b4565b73ffffffffffffffffffffffffffffffffffffffff16146126f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ef9061528a565b60405180910390fd5b6001600381111561270c5761270b6152aa565b5b82141561271f578060168190555061276b565b60006003811115612733576127326152aa565b5b821415612746578060118190555061276a565b6002600381111561275a576127596152aa565b5b8214156127695780601b819055505b5b5b5050565b61277761327f565b73ffffffffffffffffffffffffffffffffffffffff166127956120b4565b73ffffffffffffffffffffffffffffffffffffffff16146127eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e29061528a565b60405180910390fd5b80600e9080519060200190612801929190613ff9565b5050565b61280d61327f565b73ffffffffffffffffffffffffffffffffffffffff1661282b6120b4565b73ffffffffffffffffffffffffffffffffffffffff1614612881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128789061528a565b60405180910390fd5b8060088190555050565b60606000600e805461289c90615056565b905014156128b4576128ad8261395c565b90506128e2565b6128bd8261395c565b600e6040516020016128d0929190615754565b60405160208183030381529060405290505b919050565b601d6020528060005260406000206000915090505481565b601e5481565b61290d61327f565b73ffffffffffffffffffffffffffffffffffffffff1661292b6120b4565b73ffffffffffffffffffffffffffffffffffffffff1614612981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129789061528a565b60405180910390fd5b60016003811115612995576129946152aa565b5b8214156129a857806015819055506129f4565b600060038111156129bc576129bb6152aa565b5b8214156129cf57806010819055506129f3565b600260038111156129e3576129e26152aa565b5b8214156129f25780601a819055505b5b5b5050565b612a0061327f565b73ffffffffffffffffffffffffffffffffffffffff16612a1e6120b4565b73ffffffffffffffffffffffffffffffffffffffff1614612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6b9061528a565b60405180910390fd5b60016003811115612a8857612a876152aa565b5b821415612aae5780601760006101000a81548160ff021916908315150217905550612b5a565b60006003811115612ac257612ac16152aa565b5b821415612ae85780601260006101000a81548160ff021916908315150217905550612b59565b60026003811115612afc57612afb6152aa565b5b821415612b225780601c60006101000a81548160ff021916908315150217905550612b58565b600380811115612b3557612b346152aa565b5b821415612b575780601f60006101000a81548160ff0219169083151502179055505b5b5b5b5050565b612b6661327f565b73ffffffffffffffffffffffffffffffffffffffff16612b846120b4565b73ffffffffffffffffffffffffffffffffffffffff1614612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd19061528a565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612cc0611c53565b15612d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf7906157c4565b60405180910390fd5b60011515601f60009054906101000a900460ff16151514612d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4d90614c31565b60405180910390fd5b80600954612d649190614dd4565b341015612da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9d90614e7a565b60405180910390fd5b60008111612de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de090614ee6565b60405180910390fd5b600854600a5482612dfa9190614cec565b1115612e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3290614f52565b60405180910390fd5b601e54811115612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7790614fbe565b60405180910390fd5b6000600a5490505b81600a54612e969190614cec565b811015612ec657612eb333600183612eae9190614cec565b613045565b8080612ebe90614fde565b915050612e88565b5080600a6000828254612ed99190614cec565b9250508190555050565b612eeb61327f565b73ffffffffffffffffffffffffffffffffffffffff16612f096120b4565b73ffffffffffffffffffffffffffffffffffffffff1614612f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f569061528a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc690615856565b60405180910390fd5b612fd8816136cd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ac906158c2565b60405180910390fd5b6130be81613213565b156130fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f59061592e565b60405180910390fd5b61310a60008383613aae565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461315a9190614cec565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166132fa83611c6a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061334b82613213565b61338a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613381906159c0565b60405180910390fd5b600061339583611c6a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061340457508373ffffffffffffffffffffffffffffffffffffffff166133ec84611234565b73ffffffffffffffffffffffffffffffffffffffff16145b8061341557506134148185612c24565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661343e82611c6a565b73ffffffffffffffffffffffffffffffffffffffff1614613494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161348b90615a52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fb90615ae4565b60405180910390fd5b61350f838383613aae565b61351a600082613287565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461356a9190615b04565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135c19190614cec565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61368381613ab3565b60006006600083815260200190815260200160002080546136a390615056565b9050146136ca576006600082815260200190815260200160002060006136c9919061407f565b5b50565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f990615b84565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516138f39190614190565b60405180910390a3505050565b61390b84848461341e565b61391784848484613bc4565b613956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394d90615c16565b60405180910390fd5b50505050565b606061396782613213565b6139a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399d90615ca8565b60405180910390fd5b60006006600084815260200190815260200160002080546139c690615056565b80601f01602080910402602001604051908101604052809291908181526020018280546139f290615056565b8015613a3f5780601f10613a1457610100808354040283529160200191613a3f565b820191906000526020600020905b815481529060010190602001808311613a2257829003601f168201915b505050505090506000613a50613d4c565b9050600081511415613a66578192505050613aa9565b600082511115613a9b578082604051602001613a83929190615cc8565b60405160208183030381529060405292505050613aa9565b613aa484613dde565b925050505b919050565b505050565b6000613abe82611c6a565b9050613acc81600084613aae565b613ad7600083613287565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b279190615b04565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000613be58473ffffffffffffffffffffffffffffffffffffffff16613e85565b15613d3f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613c0e61327f565b8786866040518563ffffffff1660e01b8152600401613c309493929190615d41565b6020604051808303816000875af1925050508015613c6c57506040513d601f19601f82011682018060405250810190613c699190615da2565b60015b613cef573d8060008114613c9c576040519150601f19603f3d011682016040523d82523d6000602084013e613ca1565b606091505b50600081511415613ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cde90615c16565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613d44565b600190505b949350505050565b6060600d8054613d5b90615056565b80601f0160208091040260200160405190810160405280929190818152602001828054613d8790615056565b8015613dd45780601f10613da957610100808354040283529160200191613dd4565b820191906000526020600020905b815481529060010190602001808311613db757829003601f168201915b5050505050905090565b6060613de982613213565b613e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1f90615e41565b60405180910390fd5b6000613e32613d4c565b90506000815111613e525760405180602001604052806000815250613e7d565b80613e5c84613e98565b604051602001613e6d929190615cc8565b6040516020818303038152906040525b915050919050565b600080823b905060008111915050919050565b60606000821415613ee0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613ff4565b600082905060005b60008214613f12578080613efb90614fde565b915050600a82613f0b9190615e90565b9150613ee8565b60008167ffffffffffffffff811115613f2e57613f2d6141fc565b5b6040519080825280601f01601f191660200182016040528015613f605781602001600182028036833780820191505090505b5090505b60008514613fed57600182613f799190615b04565b9150600a85613f889190615ec1565b6030613f949190614cec565b60f81b818381518110613faa57613fa96155c3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613fe69190615e90565b9450613f64565b8093505050505b919050565b82805461400590615056565b90600052602060002090601f016020900481019282614027576000855561406e565b82601f1061404057805160ff191683800117855561406e565b8280016001018555821561406e579182015b8281111561406d578251825591602001919060010190614052565b5b50905061407b91906140bf565b5090565b50805461408b90615056565b6000825580601f1061409d57506140bc565b601f0160209004906000526020600020908101906140bb91906140bf565b5b50565b5b808211156140d85760008160009055506001016140c0565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614125816140f0565b811461413057600080fd5b50565b6000813590506141428161411c565b92915050565b60006020828403121561415e5761415d6140e6565b5b600061416c84828501614133565b91505092915050565b60008115159050919050565b61418a81614175565b82525050565b60006020820190506141a56000830184614181565b92915050565b6000819050919050565b6141be816141ab565b81146141c957600080fd5b50565b6000813590506141db816141b5565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614234826141eb565b810181811067ffffffffffffffff82111715614253576142526141fc565b5b80604052505050565b60006142666140dc565b9050614272828261422b565b919050565b600067ffffffffffffffff821115614292576142916141fc565b5b61429b826141eb565b9050602081019050919050565b82818337600083830152505050565b60006142ca6142c584614277565b61425c565b9050828152602081018484840111156142e6576142e56141e6565b5b6142f18482856142a8565b509392505050565b600082601f83011261430e5761430d6141e1565b5b813561431e8482602086016142b7565b91505092915050565b6000806040838503121561433e5761433d6140e6565b5b600061434c858286016141cc565b925050602083013567ffffffffffffffff81111561436d5761436c6140eb565b5b614379858286016142f9565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143bd5780820151818401526020810190506143a2565b838111156143cc576000848401525b50505050565b60006143dd82614383565b6143e7818561438e565b93506143f781856020860161439f565b614400816141eb565b840191505092915050565b6000602082019050818103600083015261442581846143d2565b905092915050565b600060208284031215614443576144426140e6565b5b6000614451848285016141cc565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144858261445a565b9050919050565b6144958161447a565b82525050565b60006020820190506144b0600083018461448c565b92915050565b6144bf8161447a565b81146144ca57600080fd5b50565b6000813590506144dc816144b6565b92915050565b600080604083850312156144f9576144f86140e6565b5b6000614507858286016144cd565b9250506020614518858286016141cc565b9150509250929050565b61452b816141ab565b82525050565b60006020820190506145466000830184614522565b92915050565b60008060408385031215614563576145626140e6565b5b6000614571858286016141cc565b9250506020614582858286016141cc565b9150509250929050565b6000806000606084860312156145a5576145a46140e6565b5b60006145b3868287016144cd565b93505060206145c4868287016144cd565b92505060406145d5868287016141cc565b9150509250925092565b6000602082840312156145f5576145f46140e6565b5b6000614603848285016144cd565b91505092915050565b60008060408385031215614623576146226140e6565b5b600083013567ffffffffffffffff811115614641576146406140eb565b5b61464d858286016142f9565b925050602061465e858286016144cd565b9150509250929050565b600067ffffffffffffffff821115614683576146826141fc565b5b61468c826141eb565b9050602081019050919050565b60006146ac6146a784614668565b61425c565b9050828152602081018484840111156146c8576146c76141e6565b5b6146d38482856142a8565b509392505050565b600082601f8301126146f0576146ef6141e1565b5b8135614700848260208601614699565b91505092915050565b60006020828403121561471f5761471e6140e6565b5b600082013567ffffffffffffffff81111561473d5761473c6140eb565b5b614749848285016146db565b91505092915050565b600067ffffffffffffffff82111561476d5761476c6141fc565b5b602082029050602081019050919050565b600080fd5b600061479661479184614752565b61425c565b905080838252602082019050602084028301858111156147b9576147b861477e565b5b835b818110156147e257806147ce88826144cd565b8452602084019350506020810190506147bb565b5050509392505050565b600082601f830112614801576148006141e1565b5b8135614811848260208601614783565b91505092915050565b600067ffffffffffffffff821115614835576148346141fc565b5b602082029050602081019050919050565b60006148596148548461481a565b61425c565b9050808382526020820190506020840283018581111561487c5761487b61477e565b5b835b818110156148a5578061489188826141cc565b84526020840193505060208101905061487e565b5050509392505050565b600082601f8301126148c4576148c36141e1565b5b81356148d4848260208601614846565b91505092915050565b600080604083850312156148f4576148f36140e6565b5b600083013567ffffffffffffffff811115614912576149116140eb565b5b61491e858286016147ec565b925050602083013567ffffffffffffffff81111561493f5761493e6140eb565b5b61494b858286016148af565b9150509250929050565b61495e81614175565b811461496957600080fd5b50565b60008135905061497b81614955565b92915050565b60008060408385031215614998576149976140e6565b5b60006149a6858286016144cd565b92505060206149b78582860161496c565b9150509250929050565b6000602082840312156149d7576149d66140e6565b5b600082013567ffffffffffffffff8111156149f5576149f46140eb565b5b614a01848285016142f9565b91505092915050565b600060ff82169050919050565b614a2081614a0a565b82525050565b6000819050919050565b614a3981614a26565b82525050565b6000606082019050614a546000830186614a17565b614a616020830185614a30565b614a6e6040830184614a30565b949350505050565b60008060008060808587031215614a9057614a8f6140e6565b5b6000614a9e878288016144cd565b9450506020614aaf878288016144cd565b9350506040614ac0878288016141cc565b925050606085013567ffffffffffffffff811115614ae157614ae06140eb565b5b614aed878288016142f9565b91505092959194509250565b60008060408385031215614b1057614b0f6140e6565b5b6000614b1e858286016141cc565b9250506020614b2f8582860161496c565b9150509250929050565b60008060408385031215614b5057614b4f6140e6565b5b6000614b5e858286016144cd565b9250506020614b6f858286016144cd565b9150509250929050565b7f6d696e74696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614baf60148361438e565b9150614bba82614b79565b602082019050919050565b60006020820190508181036000830152614bde81614ba2565b9050919050565b7f6d696e74696e67206e6f74206163746976617465640000000000000000000000600082015250565b6000614c1b60158361438e565b9150614c2682614be5565b602082019050919050565b60006020820190508181036000830152614c4a81614c0e565b9050919050565b7f77616c6c6574206973206e6f742077686974656c697374656400000000000000600082015250565b6000614c8760198361438e565b9150614c9282614c51565b602082019050919050565b60006020820190508181036000830152614cb681614c7a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614cf7826141ab565b9150614d02836141ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d3757614d36614cbd565b5b828201905092915050565b7f746f6f206d616e7920746f6b656e7320616c6c6f776564207065722077616c6c60008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d9e60228361438e565b9150614da982614d42565b604082019050919050565b60006020820190508181036000830152614dcd81614d91565b9050919050565b6000614ddf826141ab565b9150614dea836141ab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e2357614e22614cbd565b5b828202905092915050565b7f6e6f7420656e6f756768206574682070726f7669646564000000000000000000600082015250565b6000614e6460178361438e565b9150614e6f82614e2e565b602082019050919050565b60006020820190508181036000830152614e9381614e57565b9050919050565b7f6e6f7420656e6f75676820746f6b656e20746f206d696e740000000000000000600082015250565b6000614ed060188361438e565b9150614edb82614e9a565b602082019050919050565b60006020820190508181036000830152614eff81614ec3565b9050919050565b7f776f756c6420657863656564206d617820737570706c79000000000000000000600082015250565b6000614f3c60178361438e565b9150614f4782614f06565b602082019050919050565b60006020820190508181036000830152614f6b81614f2f565b9050919050565b7f746f6f206d616e7920746f6b656e732070657220747800000000000000000000600082015250565b6000614fa860168361438e565b9150614fb382614f72565b602082019050919050565b60006020820190508181036000830152614fd781614f9b565b9050919050565b6000614fe9826141ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561501c5761501b614cbd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061506e57607f821691505b6020821081141561508257615081615027565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006150e4602c8361438e565b91506150ef82615088565b604082019050919050565b60006020820190508181036000830152615113816150d7565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061517660218361438e565b91506151818261511a565b604082019050919050565b600060208201905081810360008301526151a581615169565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061520860388361438e565b9150615213826151ac565b604082019050919050565b60006020820190508181036000830152615237816151fb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061527460208361438e565b915061527f8261523e565b602082019050919050565b600060208201905081810360008301526152a381615267565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061533560318361438e565b9150615340826152d9565b604082019050919050565b6000602082019050818103600083015261536481615328565b9050919050565b600081905092915050565b50565b600061538660008361536b565b915061539182615376565b600082019050919050565b60006153a782615379565b9150819050919050565b60008160601b9050919050565b60006153c9826153b1565b9050919050565b60006153db826153be565b9050919050565b6153f36153ee8261447a565b6153d0565b82525050565b600061540582846153e2565b60148201915081905092915050565b60006080820190506154296000830187614a30565b6154366020830186614a17565b6154436040830185614a30565b6154506060830184614a30565b95945050505050565b7f63616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564600082015250565b600061548f60208361438e565b915061549a82615459565b602082019050919050565b600060208201905081810360008301526154be81615482565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061552160298361438e565b915061552c826154c5565b604082019050919050565b6000602082019050818103600083015261555081615514565b9050919050565b7f617272617973206861766520646966666572656e74206c656e67746873000000600082015250565b600061558d601d8361438e565b915061559882615557565b602082019050919050565b600060208201905081810360008301526155bc81615580565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061564e602a8361438e565b9150615659826155f2565b604082019050919050565b6000602082019050818103600083015261567d81615641565b9050919050565b600081905092915050565b600061569a82614383565b6156a48185615684565b93506156b481856020860161439f565b80840191505092915050565b60008190508160005260206000209050919050565b600081546156e281615056565b6156ec8186615684565b9450600182166000811461570757600181146157185761574b565b60ff1983168652818601935061574b565b615721856156c0565b60005b8381101561574357815481890152600182019150602081019050615724565b838801955050505b50505092915050565b6000615760828561568f565b915061576c82846156d5565b91508190509392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006157ae60108361438e565b91506157b982615778565b602082019050919050565b600060208201905081810360008301526157dd816157a1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061584060268361438e565b915061584b826157e4565b604082019050919050565b6000602082019050818103600083015261586f81615833565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006158ac60208361438e565b91506158b782615876565b602082019050919050565b600060208201905081810360008301526158db8161589f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615918601c8361438e565b9150615923826158e2565b602082019050919050565b600060208201905081810360008301526159478161590b565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006159aa602c8361438e565b91506159b58261594e565b604082019050919050565b600060208201905081810360008301526159d98161599d565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000615a3c60298361438e565b9150615a47826159e0565b604082019050919050565b60006020820190508181036000830152615a6b81615a2f565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615ace60248361438e565b9150615ad982615a72565b604082019050919050565b60006020820190508181036000830152615afd81615ac1565b9050919050565b6000615b0f826141ab565b9150615b1a836141ab565b925082821015615b2d57615b2c614cbd565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615b6e60198361438e565b9150615b7982615b38565b602082019050919050565b60006020820190508181036000830152615b9d81615b61565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615c0060328361438e565b9150615c0b82615ba4565b604082019050919050565b60006020820190508181036000830152615c2f81615bf3565b9050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000615c9260318361438e565b9150615c9d82615c36565b604082019050919050565b60006020820190508181036000830152615cc181615c85565b9050919050565b6000615cd4828561568f565b9150615ce0828461568f565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000615d1382615cec565b615d1d8185615cf7565b9350615d2d81856020860161439f565b615d36816141eb565b840191505092915050565b6000608082019050615d56600083018761448c565b615d63602083018661448c565b615d706040830185614522565b8181036060830152615d828184615d08565b905095945050505050565b600081519050615d9c8161411c565b92915050565b600060208284031215615db857615db76140e6565b5b6000615dc684828501615d8d565b91505092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000615e2b602f8361438e565b9150615e3682615dcf565b604082019050919050565b60006020820190508181036000830152615e5a81615e1e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615e9b826141ab565b9150615ea6836141ab565b925082615eb657615eb5615e61565b5b828204905092915050565b6000615ecc826141ab565b9150615ed7836141ab565b925082615ee757615ee6615e61565b5b82820690509291505056fea26469706673582212208f38d839dcdcd80c7ca3e35b2e44753ca20b140357763c89265d10ac6e75d79964736f6c634300080b0033

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000015d0bb3e80e401a1c5a40af8e89f655f5130a924000000000000000000000000ed2a200c3e3150af1a7f361fae3ddc47dbabc5230000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000a4c696c204865726f65730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034c494c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002d68747470733a2f2f6170692e6c696c6865726f65732e696f2f6c61746573742f6d657461646174612f6e66742f00000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Lil Heroes
Arg [1] : symbol_ (string): LIL
Arg [2] : walletTreasury_ (address): 0x15D0bb3e80e401A1c5a40Af8e89F655f5130a924
Arg [3] : walletSignature_ (address): 0xeD2A200c3E3150af1a7f361fae3DDC47DBabC523
Arg [4] : baseURI_ (string): https://api.lilheroes.io/latest/metadata/nft/

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 00000000000000000000000015d0bb3e80e401a1c5a40af8e89f655f5130a924
Arg [3] : 000000000000000000000000ed2a200c3e3150af1a7f361fae3ddc47dbabc523
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [6] : 4c696c204865726f657300000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 4c494c0000000000000000000000000000000000000000000000000000000000
Arg [9] : 000000000000000000000000000000000000000000000000000000000000002d
Arg [10] : 68747470733a2f2f6170692e6c696c6865726f65732e696f2f6c61746573742f
Arg [11] : 6d657461646174612f6e66742f00000000000000000000000000000000000000


Deployed Bytecode Sourcemap

40750:14038:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26060:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43323:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50675:983;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27005:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28564:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28087:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41087:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43923:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42435:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29314:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42778:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42522:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42674:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48246:991;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41890:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42876:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40900:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54619:166;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53123:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42128:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29724:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54370:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47115:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41687:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4149:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26699:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46895:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52526:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26429:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7048:103;;;;;;;;;;;;;:::i;:::-;;41785:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6397:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46326:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42330:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27174:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42981:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49454:1007;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42232:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40994:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28857:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41977:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53652:542;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;29980:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45201:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47337:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46500:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47740:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43068:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43219:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44606:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45753:487;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46687:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41583:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29083:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51764:605;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7306:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26060:305;26162:4;26214:25;26199:40;;;:11;:40;;;;:105;;;;26271:33;26256:48;;;:11;:48;;;;26199:105;:158;;;;26321:36;26345:11;26321:23;:36::i;:::-;26199:158;26179:178;;26060:305;;;:::o;43323:55::-;;;;;;;;;;;;;:::o;50675:983::-;50792:15;;50774;:33;50766:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50869:4;50851:22;;:14;;;;;;;;;;;:22;;;50843:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;50918:29;50925:9;50936:10;50918:6;:29::i;:::-;50910:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51042:23;;51029:9;50996:18;:30;51015:10;50996:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:69;;50988:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;51144:9;51136:5;;:17;;;;:::i;:::-;51123:9;:30;;51115:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;51212:1;51200:9;:13;51192:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;51290:8;;51274:11;;51262:9;:23;;;;:::i;:::-;51261:37;;51253:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;51358:19;;51345:9;:32;;51337:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51421:9;51431:11;;51421:21;;51417:111;51463:9;51449:11;;:23;;;;:::i;:::-;51444:1;:29;51417:111;;;51494:22;51500:10;51514:1;51512;:3;;;;:::i;:::-;51494:5;:22::i;:::-;51475:3;;;;;:::i;:::-;;;;51417:111;;;;51606:9;51573:18;:30;51592:10;51573:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;51540:18;:30;51559:10;51540:30;;;;;;;;;;;;;;;:75;;;;51641:9;51626:11;;:24;;;;;;;:::i;:::-;;;;;;;;50675:983;;:::o;27005:100::-;27059:13;27092:5;27085:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27005:100;:::o;28564:221::-;28640:7;28668:16;28676:7;28668;:16::i;:::-;28660:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28753:15;:24;28769:7;28753:24;;;;;;;;;;;;;;;;;;;;;28746:31;;28564:221;;;:::o;28087:411::-;28168:13;28184:23;28199:7;28184:14;:23::i;:::-;28168:39;;28232:5;28226:11;;:2;:11;;;;28218:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28326:5;28310:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28335:37;28352:5;28359:12;:10;:12::i;:::-;28335:16;:37::i;:::-;28310:62;28288:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28469:21;28478:2;28482:7;28469:8;:21::i;:::-;28157:341;28087:411;;:::o;41087:26::-;;;;:::o;43923:505::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44032:19:::1;44024:28;;;;;;;;:::i;:::-;;44015:5;:37;44011:410;;;44094:7;44069:22;:32;;;;44011:410;;;44140:17;44132:26;;;;;;;;:::i;:::-;;44123:5;:35;44119:302;;;44198:7;44175:20;:30;;;;44119:302;;;44244:16;44236:25;;;;;;;;:::i;:::-;;44227:5;:34;44223:198;;;44300:7;44278:19;:29;;;;44223:198;;;44346:16;44338:25:::0;::::1;;;;;;;:::i;:::-;;44329:5;:34;44325:96;;;44402:7;44380:19;:29;;;;44325:96;44223:198;44119:302;44011:410;43923:505:::0;;:::o;42435:55::-;;;;;;;;;;;;;:::o;29314:339::-;29509:41;29528:12;:10;:12::i;:::-;29542:7;29509:18;:41::i;:::-;29501:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29617:28;29627:4;29633:2;29637:7;29617:9;:28::i;:::-;29314:339;;;:::o;42778:51::-;;;;:::o;42522:56::-;;;;;;;;;;;;;;;;;:::o;42674:51::-;;;;:::o;48246:991::-;48364:16;;48346:15;:34;48338:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48443:4;48424:23;;:15;;;;;;;;;;;:23;;;48416:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;48492:29;48499:9;48510:10;48492:6;:29::i;:::-;48484:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48617:24;;48604:9;48570:19;:31;48590:10;48570:31;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:71;;48562:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;48720:9;48712:5;;:17;;;;:::i;:::-;48699:9;:30;;48691:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;48788:1;48776:9;:13;48768:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;48866:8;;48850:11;;48838:9;:23;;;;:::i;:::-;48837:37;;48829:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48934:20;;48921:9;:33;;48913:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48998:9;49008:11;;48998:21;;48994:111;49040:9;49026:11;;:23;;;;:::i;:::-;49021:1;:29;48994:111;;;49071:22;49077:10;49091:1;49089;:3;;;;:::i;:::-;49071:5;:22::i;:::-;49052:3;;;;;:::i;:::-;;;;48994:111;;;;49185:9;49151:19;:31;49171:10;49151:31;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;49117:19;:31;49137:10;49117:31;;;;;;;;;;;;;;;:77;;;;49220:9;49205:11;;:24;;;;;;;:::i;:::-;;;;;;;;48246:991;;:::o;41890:55::-;;;;;;;;;;;;;:::o;42876:60::-;;;;:::o;40900:52::-;;;;:::o;54619:166::-;54675:12;6628;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54721:16:::1;;;;;;;;;;;54713:30;;54751:21;54713:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54700:77;;;;;54619:166:::0;:::o;53123:418::-;53200:4;53217:7;53235:9;53255;53287:25;53302:9;53287:14;:25::i;:::-;53275:37;;;;;;;;;;;;53323:18;53371:6;53354:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;53344:35;;;;;;53323:56;;53501:30;53511:10;53523:1;53526;53529;53501:30;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53472:60;;:17;;;;;;;;;;;:60;;;53464:69;;;;;;53123:418;;;;:::o;42128:51::-;;;;:::o;29724:185::-;29862:39;29879:4;29885:2;29889:7;29862:39;;;;;;;;;;;;:16;:39::i;:::-;29724:185;;;:::o;54370:178::-;54435:41;54454:12;:10;:12::i;:::-;54468:7;54435:18;:41::i;:::-;54427:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;54526:14;54532:7;54526:5;:14::i;:::-;54370:178;:::o;47115:108::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47204:11:::1;47192:9;:23;;;;;;;;;;;;:::i;:::-;;47115:108:::0;:::o;41687:52::-;;;;:::o;4149:86::-;4196:4;4220:7;;;;;;;;;;;4213:14;;4149:86;:::o;26699:239::-;26771:7;26791:13;26807:7;:16;26815:7;26807:16;;;;;;;;;;;;;;;;;;;;;26791:32;;26859:1;26842:19;;:5;:19;;;;26834:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26925:5;26918:12;;;26699:239;;;:::o;46895:110::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46990:7:::1;46970:17;;:27;;;;;;;;;;;;;;;;;;46895:110:::0;:::o;52526:435::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52657:7:::1;:14;52636:10;:17;:35;52628:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;52723:9;52718:236;52740:10;:17;52736:1;:21;52718:236;;;52782:9;52792:11;;52782:21;;52778:123;52824:7;52832:1;52824:10;;;;;;;;:::i;:::-;;;;;;;;52810:11;;:24;;;;:::i;:::-;52805:1;:30;52778:123;;;52860:25;52866:10;52877:1;52866:13;;;;;;;;:::i;:::-;;;;;;;;52883:1;52881;:3;;;;:::i;:::-;52860:5;:25::i;:::-;52837:3;;;;;:::i;:::-;;;;52778:123;;;;52932:7;52940:1;52932:10;;;;;;;;:::i;:::-;;;;;;;;52917:11;;:25;;;;;;;:::i;:::-;;;;;;;;52759:3;;;;;:::i;:::-;;;;52718:236;;;;52526:435:::0;;:::o;26429:208::-;26501:7;26546:1;26529:19;;:5;:19;;;;26521:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26613:9;:16;26623:5;26613:16;;;;;;;;;;;;;;;;26606:23;;26429:208;;;:::o;7048:103::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7113:30:::1;7140:1;7113:18;:30::i;:::-;7048:103::o:0;41785:60::-;;;;:::o;6397:87::-;6443:7;6470:6;;;;;;;;;;;6463:13;;6397:87;:::o;46326:86::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46398:6:::1;46390:5;:14;;;;46326:86:::0;:::o;42330:60::-;;;;:::o;27174:104::-;27230:13;27263:7;27256:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27174:104;:::o;42981:55::-;;;;;;;;;;;;;:::o;49454:1007::-;49574:18;;49556:15;:36;49548:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;49657:4;49636:25;;:17;;;;;;;;;;;:25;;;49628:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49706:29;49713:9;49724:10;49706:6;:29::i;:::-;49698:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49833:26;;49820:9;49784:21;:33;49806:10;49784:33;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;:75;;49776:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;49938:9;49930:5;;:17;;;;:::i;:::-;49917:9;:30;;49909:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50006:1;49994:9;:13;49986:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;50084:8;;50068:11;;50056:9;:23;;;;:::i;:::-;50055:37;;50047:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;50152:22;;50139:9;:35;;50131:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;50218:9;50228:11;;50218:21;;50214:111;50260:9;50246:11;;:23;;;;:::i;:::-;50241:1;:29;50214:111;;;50291:22;50297:10;50311:1;50309;:3;;;;:::i;:::-;50291:5;:22::i;:::-;50272:3;;;;;:::i;:::-;;;;50214:111;;;;50409:9;50373:21;:33;50395:10;50373:33;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;50337:21;:33;50359:10;50337:33;;;;;;;;;;;;;;;:81;;;;50444:9;50429:11;;:24;;;;;;;:::i;:::-;;;;;;;;49454:1007;;:::o;42232:51::-;;;;:::o;40994:57::-;;;;:::o;28857:155::-;28952:52;28971:12;:10;:12::i;:::-;28985:8;28995;28952:18;:52::i;:::-;28857:155;;:::o;41977:54::-;;;;;;;;;;;;;;;;;:::o;53652:542::-;53721:5;53728:7;53737;53785:2;53765:9;:16;:22;53757:31;;;;;;53801:9;53821;53841:7;53961:2;53950:9;53946:18;53940:25;53935:30;;54033:2;54022:9;54018:18;54012:25;54007:30;;54142:2;54131:9;54127:18;54121:25;54118:1;54113:34;54108:39;;54178:1;54181;54184;54170:16;;;;;;;;;53652:542;;;;;:::o;29980:328::-;30155:41;30174:12;:10;:12::i;:::-;30188:7;30155:18;:41::i;:::-;30147:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30261:39;30275:4;30281:2;30285:7;30294:5;30261:13;:39::i;:::-;29980:328;;;;:::o;45201:399::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45309:19:::1;45301:28;;;;;;;;:::i;:::-;;45292:5;:37;45288:305;;;45367:10;45346:18;:31;;;;45288:305;;;45416:17;45408:26;;;;;;;;:::i;:::-;;45399:5;:35;45395:198;;;45470:10;45451:16;:29;;;;45395:198;;;45519:16;45511:25;;;;;;;;:::i;:::-;;45502:5;:34;45498:95;;;45571:10;45553:15;:28;;;;45498:95;45395:198;45288:305;45201:399:::0;;:::o;47337:128::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47441:16:::1;47424:14;:33;;;;;;;;;;;;:::i;:::-;;47337:128:::0;:::o;46500:88::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46576:4:::1;46565:8;:15;;;;46500:88:::0;:::o;47740:286::-;47813:13;47875:1;47849:14;47843:28;;;;;:::i;:::-;;;:33;47839:95;;;47899:23;47914:7;47899:14;:23::i;:::-;47892:30;;;;47839:95;47977:23;47992:7;47977:14;:23::i;:::-;48002:14;47960:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47946:72;;47740:286;;;;:::o;43068:53::-;;;;;;;;;;;;;;;;;:::o;43219:51::-;;;;:::o;44606:419::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44719:19:::1;44711:28;;;;;;;;:::i;:::-;;44702:5;:37;44698:320;;;44785:7;44756:26;:36;;;;44698:320;;;44831:17;44823:26;;;;;;;;:::i;:::-;;44814:5;:35;44810:208;;;44893:7;44866:24;:34;;;;44810:208;;;44939:16;44931:25;;;;;;;;:::i;:::-;;44922:5;:34;44918:100;;;44999:7;44973:23;:33;;;;44918:100;44810:208;44698:320;44606:419:::0;;:::o;45753:487::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45856:19:::1;45848:28;;;;;;;;:::i;:::-;;45839:5;:37;45835:398;;;45913:9;45893:17;;:29;;;;;;;;;;;;;;;;;;45835:398;;;45961:17;45953:26;;;;;;;;:::i;:::-;;45944:5;:35;45940:293;;;46014:9;45996:15;;:27;;;;;;;;;;;;;;;;;;45940:293;;;46062:16;46054:25;;;;;;;;:::i;:::-;;46045:5;:34;46041:192;;;46113:9;46096:14;;:26;;;;;;;;;;;;;;;;;;46041:192;;;46161:16;46153:25:::0;::::1;;;;;;;:::i;:::-;;46144:5;:34;46140:93;;;46212:9;46195:14;;:26;;;;;;;;;;;;;;;;;;46140:93;46041:192;45940:293;45835:398;45753:487:::0;;:::o;46687:108::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46780:7:::1;46761:16;;:26;;;;;;;;;;;;;;;;;;46687:108:::0;:::o;41583:52::-;;;;:::o;29083:164::-;29180:4;29204:18;:25;29223:5;29204:25;;;;;;;;;;;;;;;:35;29230:8;29204:35;;;;;;;;;;;;;;;;;;;;;;;;;29197:42;;29083:164;;;;:::o;51764:605::-;4475:8;:6;:8::i;:::-;4474:9;4466:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51871:4:::1;51853:22;;:14;;;;;;;;;;;:22;;;51845:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;51941:9;51933:5;;:17;;;;:::i;:::-;51920:9;:30;;51912:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;52009:1;51997:9;:13;51989:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;52087:8;;52071:11;;52059:9;:23;;;;:::i;:::-;52058:37;;52050:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;52155:19;;52142:9;:32;;52134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52218:9;52228:11;;52218:21;;52214:111;52260:9;52246:11;;:23;;;;:::i;:::-;52241:1;:29;52214:111;;;52291:22;52297:10;52311:1;52309;:3;;;;:::i;:::-;52291:5;:22::i;:::-;52272:3;;;;;:::i;:::-;;;;52214:111;;;;52352:9;52337:11;;:24;;;;;;;:::i;:::-;;;;;;;;51764:605:::0;:::o;7306:201::-;6628:12;:10;:12::i;:::-;6617:23;;:7;:5;:7::i;:::-;:23;;;6609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7415:1:::1;7395:22;;:8;:22;;;;7387:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7471:28;7490:8;7471:18;:28::i;:::-;7306:201:::0;:::o;18829:157::-;18914:4;18953:25;18938:40;;;:11;:40;;;;18931:47;;18829:157;;;:::o;33796:382::-;33890:1;33876:16;;:2;:16;;;;33868:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33949:16;33957:7;33949;:16::i;:::-;33948:17;33940:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34011:45;34040:1;34044:2;34048:7;34011:20;:45::i;:::-;34086:1;34069:9;:13;34079:2;34069:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34117:2;34098:7;:16;34106:7;34098:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34162:7;34158:2;34137:33;;34154:1;34137:33;;;;;;;;;;;;33796:382;;:::o;31818:127::-;31883:4;31935:1;31907:30;;:7;:16;31915:7;31907:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31900:37;;31818:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;35800:174::-;35902:2;35875:15;:24;35891:7;35875:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35958:7;35954:2;35920:46;;35929:23;35944:7;35929:14;:23::i;:::-;35920:46;;;;;;;;;;;;35800:174;;:::o;32112:348::-;32205:4;32230:16;32238:7;32230;:16::i;:::-;32222:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32306:13;32322:23;32337:7;32322:14;:23::i;:::-;32306:39;;32375:5;32364:16;;:7;:16;;;:51;;;;32408:7;32384:31;;:20;32396:7;32384:11;:20::i;:::-;:31;;;32364:51;:87;;;;32419:32;32436:5;32443:7;32419:16;:32::i;:::-;32364:87;32356:96;;;32112:348;;;;:::o;35104:578::-;35263:4;35236:31;;:23;35251:7;35236:14;:23::i;:::-;:31;;;35228:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35346:1;35332:16;;:2;:16;;;;35324:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35402:39;35423:4;35429:2;35433:7;35402:20;:39::i;:::-;35506:29;35523:1;35527:7;35506:8;:29::i;:::-;35567:1;35548:9;:15;35558:4;35548:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35596:1;35579:9;:13;35589:2;35579:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35627:2;35608:7;:16;35616:7;35608:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35666:7;35662:2;35647:27;;35656:4;35647:27;;;;;;;;;;;;35104:578;;;:::o;40292:206::-;40361:20;40373:7;40361:11;:20::i;:::-;40435:1;40404:10;:19;40415:7;40404:19;;;;;;;;;;;40398:33;;;;;:::i;:::-;;;:38;40394:97;;40460:10;:19;40471:7;40460:19;;;;;;;;;;;;40453:26;;;;:::i;:::-;40394:97;40292:206;:::o;7667:191::-;7741:16;7760:6;;;;;;;;;;;7741:25;;7786:8;7777:6;;:17;;;;;;;;;;;;;;;;;;7841:8;7810:40;;7831:8;7810:40;;;;;;;;;;;;7730:128;7667:191;:::o;36116:315::-;36271:8;36262:17;;:5;:17;;;;36254:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36358:8;36320:18;:25;36339:5;36320:25;;;;;;;;;;;;;;;:35;36346:8;36320:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36404:8;36382:41;;36397:5;36382:41;;;36414:8;36382:41;;;;;;:::i;:::-;;;;;;;;36116:315;;;:::o;31190:::-;31347:28;31357:4;31363:2;31367:7;31347:9;:28::i;:::-;31394:48;31417:4;31423:2;31427:7;31436:5;31394:22;:48::i;:::-;31386:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31190:315;;;;:::o;39011:679::-;39084:13;39118:16;39126:7;39118;:16::i;:::-;39110:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39201:23;39227:10;:19;39238:7;39227:19;;;;;;;;;;;39201:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39257:18;39278:10;:8;:10::i;:::-;39257:31;;39386:1;39370:4;39364:18;:23;39360:72;;;39411:9;39404:16;;;;;;39360:72;39562:1;39542:9;39536:23;:27;39532:108;;;39611:4;39617:9;39594:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39580:48;;;;;;39532:108;39659:23;39674:7;39659:14;:23::i;:::-;39652:30;;;;39011:679;;;;:::o;38367:126::-;;;;:::o;34407:360::-;34467:13;34483:23;34498:7;34483:14;:23::i;:::-;34467:39;;34519:48;34540:5;34555:1;34559:7;34519:20;:48::i;:::-;34608:29;34625:1;34629:7;34608:8;:29::i;:::-;34670:1;34650:9;:16;34660:5;34650:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;34689:7;:16;34697:7;34689:16;;;;;;;;;;;;34682:23;;;;;;;;;;;34751:7;34747:1;34723:36;;34732:5;34723:36;;;;;;;;;;;;34456:311;34407:360;:::o;36996:799::-;37151:4;37172:15;:2;:13;;;:15::i;:::-;37168:620;;;37224:2;37208:36;;;37245:12;:10;:12::i;:::-;37259:4;37265:7;37274:5;37208:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37204:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37467:1;37450:6;:13;:18;37446:272;;;37493:60;;;;;;;;;;:::i;:::-;;;;;;;;37446:272;37668:6;37662:13;37653:6;37649:2;37645:15;37638:38;37204:529;37341:41;;;37331:51;;;:6;:51;;;;37324:58;;;;;37168:620;37772:4;37765:11;;36996:799;;;;;;;:::o;47515:102::-;47567:13;47600:9;47593:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47515:102;:::o;27349:334::-;27422:13;27456:16;27464:7;27456;:16::i;:::-;27448:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27537:21;27561:10;:8;:10::i;:::-;27537:34;;27613:1;27595:7;27589:21;:25;:86;;;;;;;;;;;;;;;;;27641:7;27650:18;:7;:16;:18::i;:::-;27624:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27589:86;27582:93;;;27349:334;;;:::o;8685:387::-;8745:4;8953:12;9020:7;9008:20;9000:28;;9063:1;9056:4;:8;9049:15;;;8685:387;;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:122::-;1674:24;1692:5;1674:24;:::i;:::-;1667:5;1664:35;1654:63;;1713:1;1710;1703:12;1654:63;1601:122;:::o;1729:139::-;1775:5;1813:6;1800:20;1791:29;;1829:33;1856:5;1829:33;:::i;:::-;1729:139;;;;:::o;1874:117::-;1983:1;1980;1973:12;1997:117;2106:1;2103;2096:12;2120:102;2161:6;2212:2;2208:7;2203:2;2196:5;2192:14;2188:28;2178:38;;2120:102;;;:::o;2228:180::-;2276:77;2273:1;2266:88;2373:4;2370:1;2363:15;2397:4;2394:1;2387:15;2414:281;2497:27;2519:4;2497:27;:::i;:::-;2489:6;2485:40;2627:6;2615:10;2612:22;2591:18;2579:10;2576:34;2573:62;2570:88;;;2638:18;;:::i;:::-;2570:88;2678:10;2674:2;2667:22;2457:238;2414:281;;:::o;2701:129::-;2735:6;2762:20;;:::i;:::-;2752:30;;2791:33;2819:4;2811:6;2791:33;:::i;:::-;2701:129;;;:::o;2836:307::-;2897:4;2987:18;2979:6;2976:30;2973:56;;;3009:18;;:::i;:::-;2973:56;3047:29;3069:6;3047:29;:::i;:::-;3039:37;;3131:4;3125;3121:15;3113:23;;2836:307;;;:::o;3149:154::-;3233:6;3228:3;3223;3210:30;3295:1;3286:6;3281:3;3277:16;3270:27;3149:154;;;:::o;3309:410::-;3386:5;3411:65;3427:48;3468:6;3427:48;:::i;:::-;3411:65;:::i;:::-;3402:74;;3499:6;3492:5;3485:21;3537:4;3530:5;3526:16;3575:3;3566:6;3561:3;3557:16;3554:25;3551:112;;;3582:79;;:::i;:::-;3551:112;3672:41;3706:6;3701:3;3696;3672:41;:::i;:::-;3392:327;3309:410;;;;;:::o;3738:338::-;3793:5;3842:3;3835:4;3827:6;3823:17;3819:27;3809:122;;3850:79;;:::i;:::-;3809:122;3967:6;3954:20;3992:78;4066:3;4058:6;4051:4;4043:6;4039:17;3992:78;:::i;:::-;3983:87;;3799:277;3738:338;;;;:::o;4082:652::-;4159:6;4167;4216:2;4204:9;4195:7;4191:23;4187:32;4184:119;;;4222:79;;:::i;:::-;4184:119;4342:1;4367:53;4412:7;4403:6;4392:9;4388:22;4367:53;:::i;:::-;4357:63;;4313:117;4497:2;4486:9;4482:18;4469:32;4528:18;4520:6;4517:30;4514:117;;;4550:79;;:::i;:::-;4514:117;4655:62;4709:7;4700:6;4689:9;4685:22;4655:62;:::i;:::-;4645:72;;4440:287;4082:652;;;;;:::o;4740:99::-;4792:6;4826:5;4820:12;4810:22;;4740:99;;;:::o;4845:169::-;4929:11;4963:6;4958:3;4951:19;5003:4;4998:3;4994:14;4979:29;;4845:169;;;;:::o;5020:307::-;5088:1;5098:113;5112:6;5109:1;5106:13;5098:113;;;5197:1;5192:3;5188:11;5182:18;5178:1;5173:3;5169:11;5162:39;5134:2;5131:1;5127:10;5122:15;;5098:113;;;5229:6;5226:1;5223:13;5220:101;;;5309:1;5300:6;5295:3;5291:16;5284:27;5220:101;5069:258;5020:307;;;:::o;5333:364::-;5421:3;5449:39;5482:5;5449:39;:::i;:::-;5504:71;5568:6;5563:3;5504:71;:::i;:::-;5497:78;;5584:52;5629:6;5624:3;5617:4;5610:5;5606:16;5584:52;:::i;:::-;5661:29;5683:6;5661:29;:::i;:::-;5656:3;5652:39;5645:46;;5425:272;5333:364;;;;:::o;5703:313::-;5816:4;5854:2;5843:9;5839:18;5831:26;;5903:9;5897:4;5893:20;5889:1;5878:9;5874:17;5867:47;5931:78;6004:4;5995:6;5931:78;:::i;:::-;5923:86;;5703:313;;;;:::o;6022:329::-;6081:6;6130:2;6118:9;6109:7;6105:23;6101:32;6098:119;;;6136:79;;:::i;:::-;6098:119;6256:1;6281:53;6326:7;6317:6;6306:9;6302:22;6281:53;:::i;:::-;6271:63;;6227:117;6022:329;;;;:::o;6357:126::-;6394:7;6434:42;6427:5;6423:54;6412:65;;6357:126;;;:::o;6489:96::-;6526:7;6555:24;6573:5;6555:24;:::i;:::-;6544:35;;6489:96;;;:::o;6591:118::-;6678:24;6696:5;6678:24;:::i;:::-;6673:3;6666:37;6591:118;;:::o;6715:222::-;6808:4;6846:2;6835:9;6831:18;6823:26;;6859:71;6927:1;6916:9;6912:17;6903:6;6859:71;:::i;:::-;6715:222;;;;:::o;6943:122::-;7016:24;7034:5;7016:24;:::i;:::-;7009:5;7006:35;6996:63;;7055:1;7052;7045:12;6996:63;6943:122;:::o;7071:139::-;7117:5;7155:6;7142:20;7133:29;;7171:33;7198:5;7171:33;:::i;:::-;7071:139;;;;:::o;7216:474::-;7284:6;7292;7341:2;7329:9;7320:7;7316:23;7312:32;7309:119;;;7347:79;;:::i;:::-;7309:119;7467:1;7492:53;7537:7;7528:6;7517:9;7513:22;7492:53;:::i;:::-;7482:63;;7438:117;7594:2;7620:53;7665:7;7656:6;7645:9;7641:22;7620:53;:::i;:::-;7610:63;;7565:118;7216:474;;;;;:::o;7696:118::-;7783:24;7801:5;7783:24;:::i;:::-;7778:3;7771:37;7696:118;;:::o;7820:222::-;7913:4;7951:2;7940:9;7936:18;7928:26;;7964:71;8032:1;8021:9;8017:17;8008:6;7964:71;:::i;:::-;7820:222;;;;:::o;8048:474::-;8116:6;8124;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:53;8369:7;8360:6;8349:9;8345:22;8324:53;:::i;:::-;8314:63;;8270:117;8426:2;8452:53;8497:7;8488:6;8477:9;8473:22;8452:53;:::i;:::-;8442:63;;8397:118;8048:474;;;;;:::o;8528:619::-;8605:6;8613;8621;8670:2;8658:9;8649:7;8645:23;8641:32;8638:119;;;8676:79;;:::i;:::-;8638:119;8796:1;8821:53;8866:7;8857:6;8846:9;8842:22;8821:53;:::i;:::-;8811:63;;8767:117;8923:2;8949:53;8994:7;8985:6;8974:9;8970:22;8949:53;:::i;:::-;8939:63;;8894:118;9051:2;9077:53;9122:7;9113:6;9102:9;9098:22;9077:53;:::i;:::-;9067:63;;9022:118;8528:619;;;;;:::o;9153:329::-;9212:6;9261:2;9249:9;9240:7;9236:23;9232:32;9229:119;;;9267:79;;:::i;:::-;9229:119;9387:1;9412:53;9457:7;9448:6;9437:9;9433:22;9412:53;:::i;:::-;9402:63;;9358:117;9153:329;;;;:::o;9488:652::-;9565:6;9573;9622:2;9610:9;9601:7;9597:23;9593:32;9590:119;;;9628:79;;:::i;:::-;9590:119;9776:1;9765:9;9761:17;9748:31;9806:18;9798:6;9795:30;9792:117;;;9828:79;;:::i;:::-;9792:117;9933:62;9987:7;9978:6;9967:9;9963:22;9933:62;:::i;:::-;9923:72;;9719:286;10044:2;10070:53;10115:7;10106:6;10095:9;10091:22;10070:53;:::i;:::-;10060:63;;10015:118;9488:652;;;;;:::o;10146:308::-;10208:4;10298:18;10290:6;10287:30;10284:56;;;10320:18;;:::i;:::-;10284:56;10358:29;10380:6;10358:29;:::i;:::-;10350:37;;10442:4;10436;10432:15;10424:23;;10146:308;;;:::o;10460:412::-;10538:5;10563:66;10579:49;10621:6;10579:49;:::i;:::-;10563:66;:::i;:::-;10554:75;;10652:6;10645:5;10638:21;10690:4;10683:5;10679:16;10728:3;10719:6;10714:3;10710:16;10707:25;10704:112;;;10735:79;;:::i;:::-;10704:112;10825:41;10859:6;10854:3;10849;10825:41;:::i;:::-;10544:328;10460:412;;;;;:::o;10892:340::-;10948:5;10997:3;10990:4;10982:6;10978:17;10974:27;10964:122;;11005:79;;:::i;:::-;10964:122;11122:6;11109:20;11147:79;11222:3;11214:6;11207:4;11199:6;11195:17;11147:79;:::i;:::-;11138:88;;10954:278;10892:340;;;;:::o;11238:509::-;11307:6;11356:2;11344:9;11335:7;11331:23;11327:32;11324:119;;;11362:79;;:::i;:::-;11324:119;11510:1;11499:9;11495:17;11482:31;11540:18;11532:6;11529:30;11526:117;;;11562:79;;:::i;:::-;11526:117;11667:63;11722:7;11713:6;11702:9;11698:22;11667:63;:::i;:::-;11657:73;;11453:287;11238:509;;;;:::o;11753:311::-;11830:4;11920:18;11912:6;11909:30;11906:56;;;11942:18;;:::i;:::-;11906:56;11992:4;11984:6;11980:17;11972:25;;12052:4;12046;12042:15;12034:23;;11753:311;;;:::o;12070:117::-;12179:1;12176;12169:12;12210:710;12306:5;12331:81;12347:64;12404:6;12347:64;:::i;:::-;12331:81;:::i;:::-;12322:90;;12432:5;12461:6;12454:5;12447:21;12495:4;12488:5;12484:16;12477:23;;12548:4;12540:6;12536:17;12528:6;12524:30;12577:3;12569:6;12566:15;12563:122;;;12596:79;;:::i;:::-;12563:122;12711:6;12694:220;12728:6;12723:3;12720:15;12694:220;;;12803:3;12832:37;12865:3;12853:10;12832:37;:::i;:::-;12827:3;12820:50;12899:4;12894:3;12890:14;12883:21;;12770:144;12754:4;12749:3;12745:14;12738:21;;12694:220;;;12698:21;12312:608;;12210:710;;;;;:::o;12943:370::-;13014:5;13063:3;13056:4;13048:6;13044:17;13040:27;13030:122;;13071:79;;:::i;:::-;13030:122;13188:6;13175:20;13213:94;13303:3;13295:6;13288:4;13280:6;13276:17;13213:94;:::i;:::-;13204:103;;13020:293;12943:370;;;;:::o;13319:311::-;13396:4;13486:18;13478:6;13475:30;13472:56;;;13508:18;;:::i;:::-;13472:56;13558:4;13550:6;13546:17;13538:25;;13618:4;13612;13608:15;13600:23;;13319:311;;;:::o;13653:710::-;13749:5;13774:81;13790:64;13847:6;13790:64;:::i;:::-;13774:81;:::i;:::-;13765:90;;13875:5;13904:6;13897:5;13890:21;13938:4;13931:5;13927:16;13920:23;;13991:4;13983:6;13979:17;13971:6;13967:30;14020:3;14012:6;14009:15;14006:122;;;14039:79;;:::i;:::-;14006:122;14154:6;14137:220;14171:6;14166:3;14163:15;14137:220;;;14246:3;14275:37;14308:3;14296:10;14275:37;:::i;:::-;14270:3;14263:50;14342:4;14337:3;14333:14;14326:21;;14213:144;14197:4;14192:3;14188:14;14181:21;;14137:220;;;14141:21;13755:608;;13653:710;;;;;:::o;14386:370::-;14457:5;14506:3;14499:4;14491:6;14487:17;14483:27;14473:122;;14514:79;;:::i;:::-;14473:122;14631:6;14618:20;14656:94;14746:3;14738:6;14731:4;14723:6;14719:17;14656:94;:::i;:::-;14647:103;;14463:293;14386:370;;;;:::o;14762:894::-;14880:6;14888;14937:2;14925:9;14916:7;14912:23;14908:32;14905:119;;;14943:79;;:::i;:::-;14905:119;15091:1;15080:9;15076:17;15063:31;15121:18;15113:6;15110:30;15107:117;;;15143:79;;:::i;:::-;15107:117;15248:78;15318:7;15309:6;15298:9;15294:22;15248:78;:::i;:::-;15238:88;;15034:302;15403:2;15392:9;15388:18;15375:32;15434:18;15426:6;15423:30;15420:117;;;15456:79;;:::i;:::-;15420:117;15561:78;15631:7;15622:6;15611:9;15607:22;15561:78;:::i;:::-;15551:88;;15346:303;14762:894;;;;;:::o;15662:116::-;15732:21;15747:5;15732:21;:::i;:::-;15725:5;15722:32;15712:60;;15768:1;15765;15758:12;15712:60;15662:116;:::o;15784:133::-;15827:5;15865:6;15852:20;15843:29;;15881:30;15905:5;15881:30;:::i;:::-;15784:133;;;;:::o;15923:468::-;15988:6;15996;16045:2;16033:9;16024:7;16020:23;16016:32;16013:119;;;16051:79;;:::i;:::-;16013:119;16171:1;16196:53;16241:7;16232:6;16221:9;16217:22;16196:53;:::i;:::-;16186:63;;16142:117;16298:2;16324:50;16366:7;16357:6;16346:9;16342:22;16324:50;:::i;:::-;16314:60;;16269:115;15923:468;;;;;:::o;16397:507::-;16465:6;16514:2;16502:9;16493:7;16489:23;16485:32;16482:119;;;16520:79;;:::i;:::-;16482:119;16668:1;16657:9;16653:17;16640:31;16698:18;16690:6;16687:30;16684:117;;;16720:79;;:::i;:::-;16684:117;16825:62;16879:7;16870:6;16859:9;16855:22;16825:62;:::i;:::-;16815:72;;16611:286;16397:507;;;;:::o;16910:86::-;16945:7;16985:4;16978:5;16974:16;16963:27;;16910:86;;;:::o;17002:112::-;17085:22;17101:5;17085:22;:::i;:::-;17080:3;17073:35;17002:112;;:::o;17120:77::-;17157:7;17186:5;17175:16;;17120:77;;;:::o;17203:118::-;17290:24;17308:5;17290:24;:::i;:::-;17285:3;17278:37;17203:118;;:::o;17327:434::-;17472:4;17510:2;17499:9;17495:18;17487:26;;17523:67;17587:1;17576:9;17572:17;17563:6;17523:67;:::i;:::-;17600:72;17668:2;17657:9;17653:18;17644:6;17600:72;:::i;:::-;17682;17750:2;17739:9;17735:18;17726:6;17682:72;:::i;:::-;17327:434;;;;;;:::o;17767:943::-;17862:6;17870;17878;17886;17935:3;17923:9;17914:7;17910:23;17906:33;17903:120;;;17942:79;;:::i;:::-;17903:120;18062:1;18087:53;18132:7;18123:6;18112:9;18108:22;18087:53;:::i;:::-;18077:63;;18033:117;18189:2;18215:53;18260:7;18251:6;18240:9;18236:22;18215:53;:::i;:::-;18205:63;;18160:118;18317:2;18343:53;18388:7;18379:6;18368:9;18364:22;18343:53;:::i;:::-;18333:63;;18288:118;18473:2;18462:9;18458:18;18445:32;18504:18;18496:6;18493:30;18490:117;;;18526:79;;:::i;:::-;18490:117;18631:62;18685:7;18676:6;18665:9;18661:22;18631:62;:::i;:::-;18621:72;;18416:287;17767:943;;;;;;;:::o;18716:468::-;18781:6;18789;18838:2;18826:9;18817:7;18813:23;18809:32;18806:119;;;18844:79;;:::i;:::-;18806:119;18964:1;18989:53;19034:7;19025:6;19014:9;19010:22;18989:53;:::i;:::-;18979:63;;18935:117;19091:2;19117:50;19159:7;19150:6;19139:9;19135:22;19117:50;:::i;:::-;19107:60;;19062:115;18716:468;;;;;:::o;19190:474::-;19258:6;19266;19315:2;19303:9;19294:7;19290:23;19286:32;19283:119;;;19321:79;;:::i;:::-;19283:119;19441:1;19466:53;19511:7;19502:6;19491:9;19487:22;19466:53;:::i;:::-;19456:63;;19412:117;19568:2;19594:53;19639:7;19630:6;19619:9;19615:22;19594:53;:::i;:::-;19584:63;;19539:118;19190:474;;;;;:::o;19670:170::-;19810:22;19806:1;19798:6;19794:14;19787:46;19670:170;:::o;19846:366::-;19988:3;20009:67;20073:2;20068:3;20009:67;:::i;:::-;20002:74;;20085:93;20174:3;20085:93;:::i;:::-;20203:2;20198:3;20194:12;20187:19;;19846:366;;;:::o;20218:419::-;20384:4;20422:2;20411:9;20407:18;20399:26;;20471:9;20465:4;20461:20;20457:1;20446:9;20442:17;20435:47;20499:131;20625:4;20499:131;:::i;:::-;20491:139;;20218:419;;;:::o;20643:171::-;20783:23;20779:1;20771:6;20767:14;20760:47;20643:171;:::o;20820:366::-;20962:3;20983:67;21047:2;21042:3;20983:67;:::i;:::-;20976:74;;21059:93;21148:3;21059:93;:::i;:::-;21177:2;21172:3;21168:12;21161:19;;20820:366;;;:::o;21192:419::-;21358:4;21396:2;21385:9;21381:18;21373:26;;21445:9;21439:4;21435:20;21431:1;21420:9;21416:17;21409:47;21473:131;21599:4;21473:131;:::i;:::-;21465:139;;21192:419;;;:::o;21617:175::-;21757:27;21753:1;21745:6;21741:14;21734:51;21617:175;:::o;21798:366::-;21940:3;21961:67;22025:2;22020:3;21961:67;:::i;:::-;21954:74;;22037:93;22126:3;22037:93;:::i;:::-;22155:2;22150:3;22146:12;22139:19;;21798:366;;;:::o;22170:419::-;22336:4;22374:2;22363:9;22359:18;22351:26;;22423:9;22417:4;22413:20;22409:1;22398:9;22394:17;22387:47;22451:131;22577:4;22451:131;:::i;:::-;22443:139;;22170:419;;;:::o;22595:180::-;22643:77;22640:1;22633:88;22740:4;22737:1;22730:15;22764:4;22761:1;22754:15;22781:305;22821:3;22840:20;22858:1;22840:20;:::i;:::-;22835:25;;22874:20;22892:1;22874:20;:::i;:::-;22869:25;;23028:1;22960:66;22956:74;22953:1;22950:81;22947:107;;;23034:18;;:::i;:::-;22947:107;23078:1;23075;23071:9;23064:16;;22781:305;;;;:::o;23092:221::-;23232:34;23228:1;23220:6;23216:14;23209:58;23301:4;23296:2;23288:6;23284:15;23277:29;23092:221;:::o;23319:366::-;23461:3;23482:67;23546:2;23541:3;23482:67;:::i;:::-;23475:74;;23558:93;23647:3;23558:93;:::i;:::-;23676:2;23671:3;23667:12;23660:19;;23319:366;;;:::o;23691:419::-;23857:4;23895:2;23884:9;23880:18;23872:26;;23944:9;23938:4;23934:20;23930:1;23919:9;23915:17;23908:47;23972:131;24098:4;23972:131;:::i;:::-;23964:139;;23691:419;;;:::o;24116:348::-;24156:7;24179:20;24197:1;24179:20;:::i;:::-;24174:25;;24213:20;24231:1;24213:20;:::i;:::-;24208:25;;24401:1;24333:66;24329:74;24326:1;24323:81;24318:1;24311:9;24304:17;24300:105;24297:131;;;24408:18;;:::i;:::-;24297:131;24456:1;24453;24449:9;24438:20;;24116:348;;;;:::o;24470:173::-;24610:25;24606:1;24598:6;24594:14;24587:49;24470:173;:::o;24649:366::-;24791:3;24812:67;24876:2;24871:3;24812:67;:::i;:::-;24805:74;;24888:93;24977:3;24888:93;:::i;:::-;25006:2;25001:3;24997:12;24990:19;;24649:366;;;:::o;25021:419::-;25187:4;25225:2;25214:9;25210:18;25202:26;;25274:9;25268:4;25264:20;25260:1;25249:9;25245:17;25238:47;25302:131;25428:4;25302:131;:::i;:::-;25294:139;;25021:419;;;:::o;25446:174::-;25586:26;25582:1;25574:6;25570:14;25563:50;25446:174;:::o;25626:366::-;25768:3;25789:67;25853:2;25848:3;25789:67;:::i;:::-;25782:74;;25865:93;25954:3;25865:93;:::i;:::-;25983:2;25978:3;25974:12;25967:19;;25626:366;;;:::o;25998:419::-;26164:4;26202:2;26191:9;26187:18;26179:26;;26251:9;26245:4;26241:20;26237:1;26226:9;26222:17;26215:47;26279:131;26405:4;26279:131;:::i;:::-;26271:139;;25998:419;;;:::o;26423:173::-;26563:25;26559:1;26551:6;26547:14;26540:49;26423:173;:::o;26602:366::-;26744:3;26765:67;26829:2;26824:3;26765:67;:::i;:::-;26758:74;;26841:93;26930:3;26841:93;:::i;:::-;26959:2;26954:3;26950:12;26943:19;;26602:366;;;:::o;26974:419::-;27140:4;27178:2;27167:9;27163:18;27155:26;;27227:9;27221:4;27217:20;27213:1;27202:9;27198:17;27191:47;27255:131;27381:4;27255:131;:::i;:::-;27247:139;;26974:419;;;:::o;27399:172::-;27539:24;27535:1;27527:6;27523:14;27516:48;27399:172;:::o;27577:366::-;27719:3;27740:67;27804:2;27799:3;27740:67;:::i;:::-;27733:74;;27816:93;27905:3;27816:93;:::i;:::-;27934:2;27929:3;27925:12;27918:19;;27577:366;;;:::o;27949:419::-;28115:4;28153:2;28142:9;28138:18;28130:26;;28202:9;28196:4;28192:20;28188:1;28177:9;28173:17;28166:47;28230:131;28356:4;28230:131;:::i;:::-;28222:139;;27949:419;;;:::o;28374:233::-;28413:3;28436:24;28454:5;28436:24;:::i;:::-;28427:33;;28482:66;28475:5;28472:77;28469:103;;;28552:18;;:::i;:::-;28469:103;28599:1;28592:5;28588:13;28581:20;;28374:233;;;:::o;28613:180::-;28661:77;28658:1;28651:88;28758:4;28755:1;28748:15;28782:4;28779:1;28772:15;28799:320;28843:6;28880:1;28874:4;28870:12;28860:22;;28927:1;28921:4;28917:12;28948:18;28938:81;;29004:4;28996:6;28992:17;28982:27;;28938:81;29066:2;29058:6;29055:14;29035:18;29032:38;29029:84;;;29085:18;;:::i;:::-;29029:84;28850:269;28799:320;;;:::o;29125:231::-;29265:34;29261:1;29253:6;29249:14;29242:58;29334:14;29329:2;29321:6;29317:15;29310:39;29125:231;:::o;29362:366::-;29504:3;29525:67;29589:2;29584:3;29525:67;:::i;:::-;29518:74;;29601:93;29690:3;29601:93;:::i;:::-;29719:2;29714:3;29710:12;29703:19;;29362:366;;;:::o;29734:419::-;29900:4;29938:2;29927:9;29923:18;29915:26;;29987:9;29981:4;29977:20;29973:1;29962:9;29958:17;29951:47;30015:131;30141:4;30015:131;:::i;:::-;30007:139;;29734:419;;;:::o;30159:220::-;30299:34;30295:1;30287:6;30283:14;30276:58;30368:3;30363:2;30355:6;30351:15;30344:28;30159:220;:::o;30385:366::-;30527:3;30548:67;30612:2;30607:3;30548:67;:::i;:::-;30541:74;;30624:93;30713:3;30624:93;:::i;:::-;30742:2;30737:3;30733:12;30726:19;;30385:366;;;:::o;30757:419::-;30923:4;30961:2;30950:9;30946:18;30938:26;;31010:9;31004:4;31000:20;30996:1;30985:9;30981:17;30974:47;31038:131;31164:4;31038:131;:::i;:::-;31030:139;;30757:419;;;:::o;31182:243::-;31322:34;31318:1;31310:6;31306:14;31299:58;31391:26;31386:2;31378:6;31374:15;31367:51;31182:243;:::o;31431:366::-;31573:3;31594:67;31658:2;31653:3;31594:67;:::i;:::-;31587:74;;31670:93;31759:3;31670:93;:::i;:::-;31788:2;31783:3;31779:12;31772:19;;31431:366;;;:::o;31803:419::-;31969:4;32007:2;31996:9;31992:18;31984:26;;32056:9;32050:4;32046:20;32042:1;32031:9;32027:17;32020:47;32084:131;32210:4;32084:131;:::i;:::-;32076:139;;31803:419;;;:::o;32228:182::-;32368:34;32364:1;32356:6;32352:14;32345:58;32228:182;:::o;32416:366::-;32558:3;32579:67;32643:2;32638:3;32579:67;:::i;:::-;32572:74;;32655:93;32744:3;32655:93;:::i;:::-;32773:2;32768:3;32764:12;32757:19;;32416:366;;;:::o;32788:419::-;32954:4;32992:2;32981:9;32977:18;32969:26;;33041:9;33035:4;33031:20;33027:1;33016:9;33012:17;33005:47;33069:131;33195:4;33069:131;:::i;:::-;33061:139;;32788:419;;;:::o;33213:180::-;33261:77;33258:1;33251:88;33358:4;33355:1;33348:15;33382:4;33379:1;33372:15;33399:236;33539:34;33535:1;33527:6;33523:14;33516:58;33608:19;33603:2;33595:6;33591:15;33584:44;33399:236;:::o;33641:366::-;33783:3;33804:67;33868:2;33863:3;33804:67;:::i;:::-;33797:74;;33880:93;33969:3;33880:93;:::i;:::-;33998:2;33993:3;33989:12;33982:19;;33641:366;;;:::o;34013:419::-;34179:4;34217:2;34206:9;34202:18;34194:26;;34266:9;34260:4;34256:20;34252:1;34241:9;34237:17;34230:47;34294:131;34420:4;34294:131;:::i;:::-;34286:139;;34013:419;;;:::o;34438:147::-;34539:11;34576:3;34561:18;;34438:147;;;;:::o;34591:114::-;;:::o;34711:398::-;34870:3;34891:83;34972:1;34967:3;34891:83;:::i;:::-;34884:90;;34983:93;35072:3;34983:93;:::i;:::-;35101:1;35096:3;35092:11;35085:18;;34711:398;;;:::o;35115:379::-;35299:3;35321:147;35464:3;35321:147;:::i;:::-;35314:154;;35485:3;35478:10;;35115:379;;;:::o;35500:94::-;35533:8;35581:5;35577:2;35573:14;35552:35;;35500:94;;;:::o;35600:::-;35639:7;35668:20;35682:5;35668:20;:::i;:::-;35657:31;;35600:94;;;:::o;35700:100::-;35739:7;35768:26;35788:5;35768:26;:::i;:::-;35757:37;;35700:100;;;:::o;35806:157::-;35911:45;35931:24;35949:5;35931:24;:::i;:::-;35911:45;:::i;:::-;35906:3;35899:58;35806:157;;:::o;35969:256::-;36081:3;36096:75;36167:3;36158:6;36096:75;:::i;:::-;36196:2;36191:3;36187:12;36180:19;;36216:3;36209:10;;35969:256;;;;:::o;36231:545::-;36404:4;36442:3;36431:9;36427:19;36419:27;;36456:71;36524:1;36513:9;36509:17;36500:6;36456:71;:::i;:::-;36537:68;36601:2;36590:9;36586:18;36577:6;36537:68;:::i;:::-;36615:72;36683:2;36672:9;36668:18;36659:6;36615:72;:::i;:::-;36697;36765:2;36754:9;36750:18;36741:6;36697:72;:::i;:::-;36231:545;;;;;;;:::o;36782:182::-;36922:34;36918:1;36910:6;36906:14;36899:58;36782:182;:::o;36970:366::-;37112:3;37133:67;37197:2;37192:3;37133:67;:::i;:::-;37126:74;;37209:93;37298:3;37209:93;:::i;:::-;37327:2;37322:3;37318:12;37311:19;;36970:366;;;:::o;37342:419::-;37508:4;37546:2;37535:9;37531:18;37523:26;;37595:9;37589:4;37585:20;37581:1;37570:9;37566:17;37559:47;37623:131;37749:4;37623:131;:::i;:::-;37615:139;;37342:419;;;:::o;37767:228::-;37907:34;37903:1;37895:6;37891:14;37884:58;37976:11;37971:2;37963:6;37959:15;37952:36;37767:228;:::o;38001:366::-;38143:3;38164:67;38228:2;38223:3;38164:67;:::i;:::-;38157:74;;38240:93;38329:3;38240:93;:::i;:::-;38358:2;38353:3;38349:12;38342:19;;38001:366;;;:::o;38373:419::-;38539:4;38577:2;38566:9;38562:18;38554:26;;38626:9;38620:4;38616:20;38612:1;38601:9;38597:17;38590:47;38654:131;38780:4;38654:131;:::i;:::-;38646:139;;38373:419;;;:::o;38798:179::-;38938:31;38934:1;38926:6;38922:14;38915:55;38798:179;:::o;38983:366::-;39125:3;39146:67;39210:2;39205:3;39146:67;:::i;:::-;39139:74;;39222:93;39311:3;39222:93;:::i;:::-;39340:2;39335:3;39331:12;39324:19;;38983:366;;;:::o;39355:419::-;39521:4;39559:2;39548:9;39544:18;39536:26;;39608:9;39602:4;39598:20;39594:1;39583:9;39579:17;39572:47;39636:131;39762:4;39636:131;:::i;:::-;39628:139;;39355:419;;;:::o;39780:180::-;39828:77;39825:1;39818:88;39925:4;39922:1;39915:15;39949:4;39946:1;39939:15;39966:229;40106:34;40102:1;40094:6;40090:14;40083:58;40175:12;40170:2;40162:6;40158:15;40151:37;39966:229;:::o;40201:366::-;40343:3;40364:67;40428:2;40423:3;40364:67;:::i;:::-;40357:74;;40440:93;40529:3;40440:93;:::i;:::-;40558:2;40553:3;40549:12;40542:19;;40201:366;;;:::o;40573:419::-;40739:4;40777:2;40766:9;40762:18;40754:26;;40826:9;40820:4;40816:20;40812:1;40801:9;40797:17;40790:47;40854:131;40980:4;40854:131;:::i;:::-;40846:139;;40573:419;;;:::o;40998:148::-;41100:11;41137:3;41122:18;;40998:148;;;;:::o;41152:377::-;41258:3;41286:39;41319:5;41286:39;:::i;:::-;41341:89;41423:6;41418:3;41341:89;:::i;:::-;41334:96;;41439:52;41484:6;41479:3;41472:4;41465:5;41461:16;41439:52;:::i;:::-;41516:6;41511:3;41507:16;41500:23;;41262:267;41152:377;;;;:::o;41535:141::-;41584:4;41607:3;41599:11;;41630:3;41627:1;41620:14;41664:4;41661:1;41651:18;41643:26;;41535:141;;;:::o;41706:845::-;41809:3;41846:5;41840:12;41875:36;41901:9;41875:36;:::i;:::-;41927:89;42009:6;42004:3;41927:89;:::i;:::-;41920:96;;42047:1;42036:9;42032:17;42063:1;42058:137;;;;42209:1;42204:341;;;;42025:520;;42058:137;42142:4;42138:9;42127;42123:25;42118:3;42111:38;42178:6;42173:3;42169:16;42162:23;;42058:137;;42204:341;42271:38;42303:5;42271:38;:::i;:::-;42331:1;42345:154;42359:6;42356:1;42353:13;42345:154;;;42433:7;42427:14;42423:1;42418:3;42414:11;42407:35;42483:1;42474:7;42470:15;42459:26;;42381:4;42378:1;42374:12;42369:17;;42345:154;;;42528:6;42523:3;42519:16;42512:23;;42211:334;;42025:520;;41813:738;;41706:845;;;;:::o;42557:429::-;42734:3;42756:95;42847:3;42838:6;42756:95;:::i;:::-;42749:102;;42868:92;42956:3;42947:6;42868:92;:::i;:::-;42861:99;;42977:3;42970:10;;42557:429;;;;;:::o;42992:166::-;43132:18;43128:1;43120:6;43116:14;43109:42;42992:166;:::o;43164:366::-;43306:3;43327:67;43391:2;43386:3;43327:67;:::i;:::-;43320:74;;43403:93;43492:3;43403:93;:::i;:::-;43521:2;43516:3;43512:12;43505:19;;43164:366;;;:::o;43536:419::-;43702:4;43740:2;43729:9;43725:18;43717:26;;43789:9;43783:4;43779:20;43775:1;43764:9;43760:17;43753:47;43817:131;43943:4;43817:131;:::i;:::-;43809:139;;43536:419;;;:::o;43961:225::-;44101:34;44097:1;44089:6;44085:14;44078:58;44170:8;44165:2;44157:6;44153:15;44146:33;43961:225;:::o;44192:366::-;44334:3;44355:67;44419:2;44414:3;44355:67;:::i;:::-;44348:74;;44431:93;44520:3;44431:93;:::i;:::-;44549:2;44544:3;44540:12;44533:19;;44192:366;;;:::o;44564:419::-;44730:4;44768:2;44757:9;44753:18;44745:26;;44817:9;44811:4;44807:20;44803:1;44792:9;44788:17;44781:47;44845:131;44971:4;44845:131;:::i;:::-;44837:139;;44564:419;;;:::o;44989:182::-;45129:34;45125:1;45117:6;45113:14;45106:58;44989:182;:::o;45177:366::-;45319:3;45340:67;45404:2;45399:3;45340:67;:::i;:::-;45333:74;;45416:93;45505:3;45416:93;:::i;:::-;45534:2;45529:3;45525:12;45518:19;;45177:366;;;:::o;45549:419::-;45715:4;45753:2;45742:9;45738:18;45730:26;;45802:9;45796:4;45792:20;45788:1;45777:9;45773:17;45766:47;45830:131;45956:4;45830:131;:::i;:::-;45822:139;;45549:419;;;:::o;45974:178::-;46114:30;46110:1;46102:6;46098:14;46091:54;45974:178;:::o;46158:366::-;46300:3;46321:67;46385:2;46380:3;46321:67;:::i;:::-;46314:74;;46397:93;46486:3;46397:93;:::i;:::-;46515:2;46510:3;46506:12;46499:19;;46158:366;;;:::o;46530:419::-;46696:4;46734:2;46723:9;46719:18;46711:26;;46783:9;46777:4;46773:20;46769:1;46758:9;46754:17;46747:47;46811:131;46937:4;46811:131;:::i;:::-;46803:139;;46530:419;;;:::o;46955:231::-;47095:34;47091:1;47083:6;47079:14;47072:58;47164:14;47159:2;47151:6;47147:15;47140:39;46955:231;:::o;47192:366::-;47334:3;47355:67;47419:2;47414:3;47355:67;:::i;:::-;47348:74;;47431:93;47520:3;47431:93;:::i;:::-;47549:2;47544:3;47540:12;47533:19;;47192:366;;;:::o;47564:419::-;47730:4;47768:2;47757:9;47753:18;47745:26;;47817:9;47811:4;47807:20;47803:1;47792:9;47788:17;47781:47;47845:131;47971:4;47845:131;:::i;:::-;47837:139;;47564:419;;;:::o;47989:228::-;48129:34;48125:1;48117:6;48113:14;48106:58;48198:11;48193:2;48185:6;48181:15;48174:36;47989:228;:::o;48223:366::-;48365:3;48386:67;48450:2;48445:3;48386:67;:::i;:::-;48379:74;;48462:93;48551:3;48462:93;:::i;:::-;48580:2;48575:3;48571:12;48564:19;;48223:366;;;:::o;48595:419::-;48761:4;48799:2;48788:9;48784:18;48776:26;;48848:9;48842:4;48838:20;48834:1;48823:9;48819:17;48812:47;48876:131;49002:4;48876:131;:::i;:::-;48868:139;;48595:419;;;:::o;49020:223::-;49160:34;49156:1;49148:6;49144:14;49137:58;49229:6;49224:2;49216:6;49212:15;49205:31;49020:223;:::o;49249:366::-;49391:3;49412:67;49476:2;49471:3;49412:67;:::i;:::-;49405:74;;49488:93;49577:3;49488:93;:::i;:::-;49606:2;49601:3;49597:12;49590:19;;49249:366;;;:::o;49621:419::-;49787:4;49825:2;49814:9;49810:18;49802:26;;49874:9;49868:4;49864:20;49860:1;49849:9;49845:17;49838:47;49902:131;50028:4;49902:131;:::i;:::-;49894:139;;49621:419;;;:::o;50046:191::-;50086:4;50106:20;50124:1;50106:20;:::i;:::-;50101:25;;50140:20;50158:1;50140:20;:::i;:::-;50135:25;;50179:1;50176;50173:8;50170:34;;;50184:18;;:::i;:::-;50170:34;50229:1;50226;50222:9;50214:17;;50046:191;;;;:::o;50243:175::-;50383:27;50379:1;50371:6;50367:14;50360:51;50243:175;:::o;50424:366::-;50566:3;50587:67;50651:2;50646:3;50587:67;:::i;:::-;50580:74;;50663:93;50752:3;50663:93;:::i;:::-;50781:2;50776:3;50772:12;50765:19;;50424:366;;;:::o;50796:419::-;50962:4;51000:2;50989:9;50985:18;50977:26;;51049:9;51043:4;51039:20;51035:1;51024:9;51020:17;51013:47;51077:131;51203:4;51077:131;:::i;:::-;51069:139;;50796:419;;;:::o;51221:237::-;51361:34;51357:1;51349:6;51345:14;51338:58;51430:20;51425:2;51417:6;51413:15;51406:45;51221:237;:::o;51464:366::-;51606:3;51627:67;51691:2;51686:3;51627:67;:::i;:::-;51620:74;;51703:93;51792:3;51703:93;:::i;:::-;51821:2;51816:3;51812:12;51805:19;;51464:366;;;:::o;51836:419::-;52002:4;52040:2;52029:9;52025:18;52017:26;;52089:9;52083:4;52079:20;52075:1;52064:9;52060:17;52053:47;52117:131;52243:4;52117:131;:::i;:::-;52109:139;;51836:419;;;:::o;52261:236::-;52401:34;52397:1;52389:6;52385:14;52378:58;52470:19;52465:2;52457:6;52453:15;52446:44;52261:236;:::o;52503:366::-;52645:3;52666:67;52730:2;52725:3;52666:67;:::i;:::-;52659:74;;52742:93;52831:3;52742:93;:::i;:::-;52860:2;52855:3;52851:12;52844:19;;52503:366;;;:::o;52875:419::-;53041:4;53079:2;53068:9;53064:18;53056:26;;53128:9;53122:4;53118:20;53114:1;53103:9;53099:17;53092:47;53156:131;53282:4;53156:131;:::i;:::-;53148:139;;52875:419;;;:::o;53300:435::-;53480:3;53502:95;53593:3;53584:6;53502:95;:::i;:::-;53495:102;;53614:95;53705:3;53696:6;53614:95;:::i;:::-;53607:102;;53726:3;53719:10;;53300:435;;;;;:::o;53741:98::-;53792:6;53826:5;53820:12;53810:22;;53741:98;;;:::o;53845:168::-;53928:11;53962:6;53957:3;53950:19;54002:4;53997:3;53993:14;53978:29;;53845:168;;;;:::o;54019:360::-;54105:3;54133:38;54165:5;54133:38;:::i;:::-;54187:70;54250:6;54245:3;54187:70;:::i;:::-;54180:77;;54266:52;54311:6;54306:3;54299:4;54292:5;54288:16;54266:52;:::i;:::-;54343:29;54365:6;54343:29;:::i;:::-;54338:3;54334:39;54327:46;;54109:270;54019:360;;;;:::o;54385:640::-;54580:4;54618:3;54607:9;54603:19;54595:27;;54632:71;54700:1;54689:9;54685:17;54676:6;54632:71;:::i;:::-;54713:72;54781:2;54770:9;54766:18;54757:6;54713:72;:::i;:::-;54795;54863:2;54852:9;54848:18;54839:6;54795:72;:::i;:::-;54914:9;54908:4;54904:20;54899:2;54888:9;54884:18;54877:48;54942:76;55013:4;55004:6;54942:76;:::i;:::-;54934:84;;54385:640;;;;;;;:::o;55031:141::-;55087:5;55118:6;55112:13;55103:22;;55134:32;55160:5;55134:32;:::i;:::-;55031:141;;;;:::o;55178:349::-;55247:6;55296:2;55284:9;55275:7;55271:23;55267:32;55264:119;;;55302:79;;:::i;:::-;55264:119;55422:1;55447:63;55502:7;55493:6;55482:9;55478:22;55447:63;:::i;:::-;55437:73;;55393:127;55178:349;;;;:::o;55533:234::-;55673:34;55669:1;55661:6;55657:14;55650:58;55742:17;55737:2;55729:6;55725:15;55718:42;55533:234;:::o;55773:366::-;55915:3;55936:67;56000:2;55995:3;55936:67;:::i;:::-;55929:74;;56012:93;56101:3;56012:93;:::i;:::-;56130:2;56125:3;56121:12;56114:19;;55773:366;;;:::o;56145:419::-;56311:4;56349:2;56338:9;56334:18;56326:26;;56398:9;56392:4;56388:20;56384:1;56373:9;56369:17;56362:47;56426:131;56552:4;56426:131;:::i;:::-;56418:139;;56145:419;;;:::o;56570:180::-;56618:77;56615:1;56608:88;56715:4;56712:1;56705:15;56739:4;56736:1;56729:15;56756:185;56796:1;56813:20;56831:1;56813:20;:::i;:::-;56808:25;;56847:20;56865:1;56847:20;:::i;:::-;56842:25;;56886:1;56876:35;;56891:18;;:::i;:::-;56876:35;56933:1;56930;56926:9;56921:14;;56756:185;;;;:::o;56947:176::-;56979:1;56996:20;57014:1;56996:20;:::i;:::-;56991:25;;57030:20;57048:1;57030:20;:::i;:::-;57025:25;;57069:1;57059:35;;57074:18;;:::i;:::-;57059:35;57115:1;57112;57108:9;57103:14;;56947:176;;;;:::o

Swarm Source

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