ETH Price: $3,439.30 (-0.54%)
Gas: 18 Gwei

Token

OnlyOtters (OOS)
 

Overview

Max Total Supply

69 OOS

Holders

58

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
epicaf.eth
Balance
1 OOS
0x7c0e3223a7511e52147518229b12945ead668e04
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
OnlyOtters

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/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



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/access/Ownable.sol



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/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/IERC721Enumerable.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: @openzeppelin/contracts/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



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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 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/ERC721Burnable.sol



pragma solidity ^0.8.0;



/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }
}

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



pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: contracts/OnlyOtters.sol


pragma solidity ^0.8.7;





interface IDSJ {
    function ownerOf(uint256 tokenID) external view returns(address);
} 

contract OnlyOtters is ERC721Burnable, ERC721Enumerable, Ownable {

    using Strings for uint256;
    using Address for address;

    IDSJ public DSJ;

    string _baseTokenURI;

    uint256 public maxMint = 10;
    uint256 public constant PRICE = 0.03 ether;
    

    bool public active = false;
    bool public redeemActive = false;
    uint public constant MAX_SUPPLY = 5000;
    uint public reserve = 10;

    mapping(uint => bool) public _isBlacklisted;

    constructor(string memory baseURI) ERC721("OnlyOtters", "OOS")  {
        setBaseURI(baseURI);
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId)
        internal
        override(ERC721, ERC721Enumerable)
    {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }

    //Mints
    function mint(uint256 qty) external payable {
        uint256 mintIndex = totalSupply();

        require(active, "Sale is not active");
        require( qty < (maxMint + 1),"You can only mint a maximum of 10 Otters" );
        require( mintIndex + qty < MAX_SUPPLY, "Exceeds maximum supply" );
        require(msg.value >= PRICE * qty, "ETH sent is not correct");

        for(uint256 i; i < qty; i++){
          _safeMint(msg.sender, mintIndex + i );
        }
    }
    
    function reserveMint(uint256 reserveQty) public onlyOwner {        
        uint256 mintIndex = totalSupply();
        require( mintIndex + reserveQty < MAX_SUPPLY, "Exceeds maximum supply" );
        require(reserveQty > 0 && reserveQty <= reserve, "Not enough reserve left for team");
        for (uint i; i < reserveQty; i++) {
            _safeMint(msg.sender, mintIndex + i);
        }
        reserve = reserve - reserveQty;
    }
    
    function redeemMint(uint256 dsj1, uint256 dsj2) external payable{
        uint256 mintIndex = totalSupply();
        
        require(active, "Sale is not active");
        require(DSJ.ownerOf(dsj1) == msg.sender, "Must own first DSJ token");
        require(DSJ.ownerOf(dsj2) == msg.sender, "Must own second DSJ token");
        require(dsj1 != dsj2, "Must not be the same DSJ token");
        require(_isBlacklisted[dsj1] == false, "First DSJ Token already claimed");
        require(_isBlacklisted[dsj2] == false, "Second DSJ Token already claimed");
        require(mintIndex < MAX_SUPPLY, "Exceeds maximum supply" );

        _isBlacklisted[dsj1] = true;
        _isBlacklisted[dsj2] = true;

        _safeMint(msg.sender, mintIndex);
    }

    function burn(uint256 _tokenId) public virtual  override{
        uint256 mintIndex = totalSupply();
        require(mintIndex > MAX_SUPPLY,"all tokens needs to be minted");
        _burn(_tokenId);
    }

    function burnNFTs(uint256[] calldata _tokenIds) public onlyOwner{        
        for (uint i; i<_tokenIds.length; i++) {
        _burn(_tokenIds[i]);
        }
    }

    //Get
    function DSJcheck(uint256 _tokenId) public view returns (bool){
        return DSJ.ownerOf(_tokenId) == msg.sender;
    }
    
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }
    
    function isActive() public view returns(bool) {
        return active;
    }

    //Setters
    function setDSJ(address IDSJAddress) external onlyOwner {
        DSJ = IDSJ(IDSJAddress);
    }

    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }    

    function saleActive(bool val) public onlyOwner {
        active = val;
    }

    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"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":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"},{"inputs":[],"name":"DSJ","outputs":[{"internalType":"contract IDSJ","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"DSJcheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_tokenIds","type":"uint256[]"}],"name":"burnNFTs","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":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"mint","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":"redeemActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dsj1","type":"uint256"},{"internalType":"uint256","name":"dsj2","type":"uint256"}],"name":"redeemMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reserveQty","type":"uint256"}],"name":"reserveMint","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":"bool","name":"val","type":"bool"}],"name":"saleActive","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"IDSJAddress","type":"address"}],"name":"setDSJ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600a600d556000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff021916908315150217905550600a600f553480156200005157600080fd5b50604051620054cb380380620054cb833981810160405281019062000077919062000420565b6040518060400160405280600a81526020017f4f6e6c794f7474657273000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4f4f5300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000fb929190620002f2565b50806001908051906020019062000114929190620002f2565b505050620001376200012b6200014f60201b60201c565b6200015760201b60201c565b62000148816200021d60201b60201c565b5062000678565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200022d6200014f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000253620002c860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a39062000498565b60405180910390fd5b80600c9080519060200190620002c4929190620002f2565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003009062000560565b90600052602060002090601f01602090048101928262000324576000855562000370565b82601f106200033f57805160ff191683800117855562000370565b8280016001018555821562000370579182015b828111156200036f57825182559160200191906001019062000352565b5b5090506200037f919062000383565b5090565b5b808211156200039e57600081600090555060010162000384565b5090565b6000620003b9620003b384620004e3565b620004ba565b905082815260208101848484011115620003d857620003d76200062f565b5b620003e58482856200052a565b509392505050565b600082601f8301126200040557620004046200062a565b5b815162000417848260208601620003a2565b91505092915050565b60006020828403121562000439576200043862000639565b5b600082015167ffffffffffffffff8111156200045a576200045962000634565b5b6200046884828501620003ed565b91505092915050565b60006200048060208362000519565b91506200048d826200064f565b602082019050919050565b60006020820190508181036000830152620004b38162000471565b9050919050565b6000620004c6620004d9565b9050620004d4828262000596565b919050565b6000604051905090565b600067ffffffffffffffff821115620005015762000500620005fb565b5b6200050c826200063e565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200054a5780820151818401526020810190506200052d565b838111156200055a576000848401525b50505050565b600060028204905060018216806200057957607f821691505b6020821081141562000590576200058f620005cc565b5b50919050565b620005a1826200063e565b810181811067ffffffffffffffff82111715620005c357620005c2620005fb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614e4380620006886000396000f3fe6080604052600436106102255760003560e01c806355f804b311610123578063a0712d68116100ab578063c87b56dd1161006f578063c87b56dd146107eb578063cd3293de14610828578063deb32f4414610853578063e985e9c51461087c578063f2fde38b146108b957610225565b8063a0712d6814610717578063a22cb46514610733578063b88d4fde1461075c578063b9225e8414610785578063c3a24e31146107ae57610225565b80637501f741116100f25780637501f741146106405780638d859f3e1461066b5780638da5cb5b1461069657806395d89b41146106c157806398831513146106ec57610225565b806355f804b3146105865780636352211e146105af57806370a08231146105ec578063715018a61461062957610225565b806322f3e2d4116101b15780633ccfd60b116101755780633ccfd60b146104c457806342842e0e146104db57806342966c68146105045780634efaf1931461052d5780634f6ccce71461054957610225565b806322f3e2d4146103dd57806323b872dd146104085780632f745c5914610431578063309119661461046e57806332cb6b0c1461049957610225565b8063095ea7b3116101f8578063095ea7b3146102fa57806310176f2814610323578063103cb760146103605780631342ff4c1461038957806318160ddd146103b257610225565b806301ffc9a71461022a57806302fb0c5e1461026757806306fdde0314610292578063081812fc146102bd575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c919061375d565b6108e2565b60405161025e9190613dce565b60405180910390f35b34801561027357600080fd5b5061027c6108f4565b6040516102899190613dce565b60405180910390f35b34801561029e57600080fd5b506102a7610907565b6040516102b49190613e04565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190613800565b610999565b6040516102f19190613d67565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c91906136a3565b610a1e565b005b34801561032f57600080fd5b5061034a60048036038101906103459190613800565b610b36565b6040516103579190613dce565b60405180910390f35b34801561036c57600080fd5b50610387600480360381019061038291906134f3565b610b56565b005b34801561039557600080fd5b506103b060048036038101906103ab9190613800565b610c16565b005b3480156103be57600080fd5b506103c7610d8a565b6040516103d491906141c6565b60405180910390f35b3480156103e957600080fd5b506103f2610d97565b6040516103ff9190613dce565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a919061358d565b610dae565b005b34801561043d57600080fd5b50610458600480360381019061045391906136a3565b610e0e565b60405161046591906141c6565b60405180910390f35b34801561047a57600080fd5b50610483610eb3565b6040516104909190613de9565b60405180910390f35b3480156104a557600080fd5b506104ae610ed9565b6040516104bb91906141c6565b60405180910390f35b3480156104d057600080fd5b506104d9610edf565b005b3480156104e757600080fd5b5061050260048036038101906104fd919061358d565b610faa565b005b34801561051057600080fd5b5061052b60048036038101906105269190613800565b610fca565b005b6105476004803603810190610542919061382d565b611027565b005b34801561055557600080fd5b50610570600480360381019061056b9190613800565b61146e565b60405161057d91906141c6565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a891906137b7565b6114df565b005b3480156105bb57600080fd5b506105d660048036038101906105d19190613800565b611575565b6040516105e39190613d67565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e91906134f3565b611627565b60405161062091906141c6565b60405180910390f35b34801561063557600080fd5b5061063e6116df565b005b34801561064c57600080fd5b50610655611767565b60405161066291906141c6565b60405180910390f35b34801561067757600080fd5b5061068061176d565b60405161068d91906141c6565b60405180910390f35b3480156106a257600080fd5b506106ab611778565b6040516106b89190613d67565b60405180910390f35b3480156106cd57600080fd5b506106d66117a2565b6040516106e39190613e04565b60405180910390f35b3480156106f857600080fd5b50610701611834565b60405161070e9190613dce565b60405180910390f35b610731600480360381019061072c9190613800565b611847565b005b34801561073f57600080fd5b5061075a60048036038101906107559190613663565b6119ce565b005b34801561076857600080fd5b50610783600480360381019061077e91906135e0565b611b4f565b005b34801561079157600080fd5b506107ac60048036038101906107a791906136e3565b611bb1565b005b3480156107ba57600080fd5b506107d560048036038101906107d09190613800565b611c75565b6040516107e29190613dce565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d9190613800565b611d57565b60405161081f9190613e04565b60405180910390f35b34801561083457600080fd5b5061083d611dfe565b60405161084a91906141c6565b60405180910390f35b34801561085f57600080fd5b5061087a60048036038101906108759190613730565b611e04565b005b34801561088857600080fd5b506108a3600480360381019061089e919061354d565b611e9d565b6040516108b09190613dce565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db91906134f3565b611f31565b005b60006108ed82612029565b9050919050565b600e60009054906101000a900460ff1681565b606060008054610916906144ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610942906144ac565b801561098f5780601f106109645761010080835404028352916020019161098f565b820191906000526020600020905b81548152906001019060200180831161097257829003601f168201915b5050505050905090565b60006109a4826120a3565b6109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90614046565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2982611575565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9190614126565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ab961210f565b73ffffffffffffffffffffffffffffffffffffffff161480610ae85750610ae781610ae261210f565b611e9d565b5b610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90613fa6565b60405180910390fd5b610b318383612117565b505050565b60106020528060005260406000206000915054906101000a900460ff1681565b610b5e61210f565b73ffffffffffffffffffffffffffffffffffffffff16610b7c611778565b73ffffffffffffffffffffffffffffffffffffffff1614610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990614066565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c1e61210f565b73ffffffffffffffffffffffffffffffffffffffff16610c3c611778565b73ffffffffffffffffffffffffffffffffffffffff1614610c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8990614066565b60405180910390fd5b6000610c9c610d8a565b90506113888282610cad91906142ab565b10610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490614146565b60405180910390fd5b600082118015610cff5750600f548211155b610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3590613f06565b60405180910390fd5b60005b82811015610d7157610d5e338284610d5991906142ab565b6121d0565b8080610d699061450f565b915050610d41565b5081600f54610d80919061438c565b600f819055505050565b6000600880549050905090565b6000600e60009054906101000a900460ff16905090565b610dbf610db961210f565b826121ee565b610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590614166565b60405180910390fd5b610e098383836122cc565b505050565b6000610e1983611627565b8210610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613e66565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61138881565b610ee761210f565b73ffffffffffffffffffffffffffffffffffffffff16610f05611778565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290614066565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fa6573d6000803e3d6000fd5b5050565b610fc583838360405180602001604052806000815250611b4f565b505050565b6000610fd4610d8a565b9050611388811161101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190613ea6565b60405180910390fd5b61102382612528565b5050565b6000611031610d8a565b9050600e60009054906101000a900460ff16611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990613f66565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016110f491906141c6565b60206040518083038186803b15801561110c57600080fd5b505afa158015611120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111449190613520565b73ffffffffffffffffffffffffffffffffffffffff161461119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190614106565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161120c91906141c6565b60206040518083038186803b15801561122457600080fd5b505afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c9190613520565b73ffffffffffffffffffffffffffffffffffffffff16146112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a9906140a6565b60405180910390fd5b818314156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90613e46565b60405180910390fd5b600015156010600085815260200190815260200160002060009054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614086565b60405180910390fd5b600015156010600084815260200190815260200160002060009054906101000a900460ff161515146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90613e26565b60405180910390fd5b6113888110611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614146565b60405180910390fd5b60016010600085815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600084815260200190815260200160002060006101000a81548160ff02191690831515021790555061146933826121d0565b505050565b6000611478610d8a565b82106114b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b090614186565b60405180910390fd5b600882815481106114cd576114cc614645565b5b90600052602060002001549050919050565b6114e761210f565b73ffffffffffffffffffffffffffffffffffffffff16611505611778565b73ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290614066565b60405180910390fd5b80600c908051906020019061157192919061329c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561161e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161590613fe6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90613fc6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116e761210f565b73ffffffffffffffffffffffffffffffffffffffff16611705611778565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290614066565b60405180910390fd5b6117656000612639565b565b600d5481565b666a94d74f43000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117b1906144ac565b80601f01602080910402602001604051908101604052809291908181526020018280546117dd906144ac565b801561182a5780601f106117ff5761010080835404028352916020019161182a565b820191906000526020600020905b81548152906001019060200180831161180d57829003601f168201915b5050505050905090565b600e60019054906101000a900460ff1681565b6000611851610d8a565b9050600e60009054906101000a900460ff166118a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189990613f66565b60405180910390fd5b6001600d546118b191906142ab565b82106118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990614026565b60405180910390fd5b611388828261190191906142ab565b10611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193890614146565b60405180910390fd5b81666a94d74f4300006119549190614332565b341015611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d906141a6565b60405180910390fd5b60005b828110156119c9576119b63382846119b191906142ab565b6121d0565b80806119c19061450f565b915050611999565b505050565b6119d661210f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90613f46565b60405180910390fd5b8060056000611a5161210f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611afe61210f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b439190613dce565b60405180910390a35050565b611b60611b5a61210f565b836121ee565b611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9690614166565b60405180910390fd5b611bab848484846126ff565b50505050565b611bb961210f565b73ffffffffffffffffffffffffffffffffffffffff16611bd7611778565b73ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614066565b60405180910390fd5b60005b82829050811015611c7057611c5d838383818110611c5157611c50614645565b5b90506020020135612528565b8080611c689061450f565b915050611c30565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611ce991906141c6565b60206040518083038186803b158015611d0157600080fd5b505afa158015611d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d399190613520565b73ffffffffffffffffffffffffffffffffffffffff16149050919050565b6060611d62826120a3565b611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d98906140e6565b60405180910390fd5b6000611dab61275b565b90506000815111611dcb5760405180602001604052806000815250611df6565b80611dd5846127ed565b604051602001611de6929190613d43565b6040516020818303038152906040525b915050919050565b600f5481565b611e0c61210f565b73ffffffffffffffffffffffffffffffffffffffff16611e2a611778565b73ffffffffffffffffffffffffffffffffffffffff1614611e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7790614066565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f3961210f565b73ffffffffffffffffffffffffffffffffffffffff16611f57611778565b73ffffffffffffffffffffffffffffffffffffffff1614611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490614066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490613ec6565b60405180910390fd5b61202681612639565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061209c575061209b8261294e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661218a83611575565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6121ea828260405180602001604052806000815250612a30565b5050565b60006121f9826120a3565b612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f90613f86565b60405180910390fd5b600061224383611575565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122b257508373ffffffffffffffffffffffffffffffffffffffff1661229a84610999565b73ffffffffffffffffffffffffffffffffffffffff16145b806122c357506122c28185611e9d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122ec82611575565b73ffffffffffffffffffffffffffffffffffffffff1614612342576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612339906140c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a990613f26565b60405180910390fd5b6123bd838383612a8b565b6123c8600082612117565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612418919061438c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461246f91906142ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061253382611575565b905061254181600084612a8b565b61254c600083612117565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461259c919061438c565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61270a8484846122cc565b61271684848484612a9b565b612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c90613e86565b60405180910390fd5b50505050565b6060600c805461276a906144ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612796906144ac565b80156127e35780601f106127b8576101008083540402835291602001916127e3565b820191906000526020600020905b8154815290600101906020018083116127c657829003601f168201915b5050505050905090565b60606000821415612835576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612949565b600082905060005b600082146128675780806128509061450f565b915050600a826128609190614301565b915061283d565b60008167ffffffffffffffff81111561288357612882614674565b5b6040519080825280601f01601f1916602001820160405280156128b55781602001600182028036833780820191505090505b5090505b60008514612942576001826128ce919061438c565b9150600a856128dd9190614558565b60306128e991906142ab565b60f81b8183815181106128ff576128fe614645565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561293b9190614301565b94506128b9565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612a1957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a295750612a2882612c32565b5b9050919050565b612a3a8383612c9c565b612a476000848484612a9b565b612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d90613e86565b60405180910390fd5b505050565b612a96838383612e6a565b505050565b6000612abc8473ffffffffffffffffffffffffffffffffffffffff16612f7e565b15612c25578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ae561210f565b8786866040518563ffffffff1660e01b8152600401612b079493929190613d82565b602060405180830381600087803b158015612b2157600080fd5b505af1925050508015612b5257506040513d601f19601f82011682018060405250810190612b4f919061378a565b60015b612bd5573d8060008114612b82576040519150601f19603f3d011682016040523d82523d6000602084013e612b87565b606091505b50600081511415612bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc490613e86565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c2a565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390614006565b60405180910390fd5b612d15816120a3565b15612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c90613ee6565b60405180910390fd5b612d6160008383612a8b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db191906142ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612e75838383612f91565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612eb857612eb381612f96565b612ef7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ef657612ef58382612fdf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f3a57612f358161314c565b612f79565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f7857612f77828261321d565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612fec84611627565b612ff6919061438c565b90506000600760008481526020019081526020016000205490508181146130db576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613160919061438c565b90506000600960008481526020019081526020016000205490506000600883815481106131905761318f614645565b5b9060005260206000200154905080600883815481106131b2576131b1614645565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061320157613200614616565b5b6001900381819060005260206000200160009055905550505050565b600061322883611627565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546132a8906144ac565b90600052602060002090601f0160209004810192826132ca5760008555613311565b82601f106132e357805160ff1916838001178555613311565b82800160010185558215613311579182015b828111156133105782518255916020019190600101906132f5565b5b50905061331e9190613322565b5090565b5b8082111561333b576000816000905550600101613323565b5090565b600061335261334d84614206565b6141e1565b90508281526020810184848401111561336e5761336d6146b2565b5b61337984828561446a565b509392505050565b600061339461338f84614237565b6141e1565b9050828152602081018484840111156133b0576133af6146b2565b5b6133bb84828561446a565b509392505050565b6000813590506133d281614db1565b92915050565b6000815190506133e781614db1565b92915050565b60008083601f840112613403576134026146a8565b5b8235905067ffffffffffffffff8111156134205761341f6146a3565b5b60208301915083602082028301111561343c5761343b6146ad565b5b9250929050565b60008135905061345281614dc8565b92915050565b60008135905061346781614ddf565b92915050565b60008151905061347c81614ddf565b92915050565b600082601f830112613497576134966146a8565b5b81356134a784826020860161333f565b91505092915050565b600082601f8301126134c5576134c46146a8565b5b81356134d5848260208601613381565b91505092915050565b6000813590506134ed81614df6565b92915050565b600060208284031215613509576135086146bc565b5b6000613517848285016133c3565b91505092915050565b600060208284031215613536576135356146bc565b5b6000613544848285016133d8565b91505092915050565b60008060408385031215613564576135636146bc565b5b6000613572858286016133c3565b9250506020613583858286016133c3565b9150509250929050565b6000806000606084860312156135a6576135a56146bc565b5b60006135b4868287016133c3565b93505060206135c5868287016133c3565b92505060406135d6868287016134de565b9150509250925092565b600080600080608085870312156135fa576135f96146bc565b5b6000613608878288016133c3565b9450506020613619878288016133c3565b935050604061362a878288016134de565b925050606085013567ffffffffffffffff81111561364b5761364a6146b7565b5b61365787828801613482565b91505092959194509250565b6000806040838503121561367a576136796146bc565b5b6000613688858286016133c3565b925050602061369985828601613443565b9150509250929050565b600080604083850312156136ba576136b96146bc565b5b60006136c8858286016133c3565b92505060206136d9858286016134de565b9150509250929050565b600080602083850312156136fa576136f96146bc565b5b600083013567ffffffffffffffff811115613718576137176146b7565b5b613724858286016133ed565b92509250509250929050565b600060208284031215613746576137456146bc565b5b600061375484828501613443565b91505092915050565b600060208284031215613773576137726146bc565b5b600061378184828501613458565b91505092915050565b6000602082840312156137a05761379f6146bc565b5b60006137ae8482850161346d565b91505092915050565b6000602082840312156137cd576137cc6146bc565b5b600082013567ffffffffffffffff8111156137eb576137ea6146b7565b5b6137f7848285016134b0565b91505092915050565b600060208284031215613816576138156146bc565b5b6000613824848285016134de565b91505092915050565b60008060408385031215613844576138436146bc565b5b6000613852858286016134de565b9250506020613863858286016134de565b9150509250929050565b613876816143c0565b82525050565b613885816143d2565b82525050565b600061389682614268565b6138a0818561427e565b93506138b0818560208601614479565b6138b9816146c1565b840191505092915050565b6138cd81614434565b82525050565b60006138de82614273565b6138e8818561428f565b93506138f8818560208601614479565b613901816146c1565b840191505092915050565b600061391782614273565b61392181856142a0565b9350613931818560208601614479565b80840191505092915050565b600061394a60208361428f565b9150613955826146d2565b602082019050919050565b600061396d601e8361428f565b9150613978826146fb565b602082019050919050565b6000613990602b8361428f565b915061399b82614724565b604082019050919050565b60006139b360328361428f565b91506139be82614773565b604082019050919050565b60006139d6601d8361428f565b91506139e1826147c2565b602082019050919050565b60006139f960268361428f565b9150613a04826147eb565b604082019050919050565b6000613a1c601c8361428f565b9150613a278261483a565b602082019050919050565b6000613a3f60208361428f565b9150613a4a82614863565b602082019050919050565b6000613a6260248361428f565b9150613a6d8261488c565b604082019050919050565b6000613a8560198361428f565b9150613a90826148db565b602082019050919050565b6000613aa860128361428f565b9150613ab382614904565b602082019050919050565b6000613acb602c8361428f565b9150613ad68261492d565b604082019050919050565b6000613aee60388361428f565b9150613af98261497c565b604082019050919050565b6000613b11602a8361428f565b9150613b1c826149cb565b604082019050919050565b6000613b3460298361428f565b9150613b3f82614a1a565b604082019050919050565b6000613b5760208361428f565b9150613b6282614a69565b602082019050919050565b6000613b7a60288361428f565b9150613b8582614a92565b604082019050919050565b6000613b9d602c8361428f565b9150613ba882614ae1565b604082019050919050565b6000613bc060208361428f565b9150613bcb82614b30565b602082019050919050565b6000613be3601f8361428f565b9150613bee82614b59565b602082019050919050565b6000613c0660198361428f565b9150613c1182614b82565b602082019050919050565b6000613c2960298361428f565b9150613c3482614bab565b604082019050919050565b6000613c4c602f8361428f565b9150613c5782614bfa565b604082019050919050565b6000613c6f60188361428f565b9150613c7a82614c49565b602082019050919050565b6000613c9260218361428f565b9150613c9d82614c72565b604082019050919050565b6000613cb560168361428f565b9150613cc082614cc1565b602082019050919050565b6000613cd860318361428f565b9150613ce382614cea565b604082019050919050565b6000613cfb602c8361428f565b9150613d0682614d39565b604082019050919050565b6000613d1e60178361428f565b9150613d2982614d88565b602082019050919050565b613d3d8161442a565b82525050565b6000613d4f828561390c565b9150613d5b828461390c565b91508190509392505050565b6000602082019050613d7c600083018461386d565b92915050565b6000608082019050613d97600083018761386d565b613da4602083018661386d565b613db16040830185613d34565b8181036060830152613dc3818461388b565b905095945050505050565b6000602082019050613de3600083018461387c565b92915050565b6000602082019050613dfe60008301846138c4565b92915050565b60006020820190508181036000830152613e1e81846138d3565b905092915050565b60006020820190508181036000830152613e3f8161393d565b9050919050565b60006020820190508181036000830152613e5f81613960565b9050919050565b60006020820190508181036000830152613e7f81613983565b9050919050565b60006020820190508181036000830152613e9f816139a6565b9050919050565b60006020820190508181036000830152613ebf816139c9565b9050919050565b60006020820190508181036000830152613edf816139ec565b9050919050565b60006020820190508181036000830152613eff81613a0f565b9050919050565b60006020820190508181036000830152613f1f81613a32565b9050919050565b60006020820190508181036000830152613f3f81613a55565b9050919050565b60006020820190508181036000830152613f5f81613a78565b9050919050565b60006020820190508181036000830152613f7f81613a9b565b9050919050565b60006020820190508181036000830152613f9f81613abe565b9050919050565b60006020820190508181036000830152613fbf81613ae1565b9050919050565b60006020820190508181036000830152613fdf81613b04565b9050919050565b60006020820190508181036000830152613fff81613b27565b9050919050565b6000602082019050818103600083015261401f81613b4a565b9050919050565b6000602082019050818103600083015261403f81613b6d565b9050919050565b6000602082019050818103600083015261405f81613b90565b9050919050565b6000602082019050818103600083015261407f81613bb3565b9050919050565b6000602082019050818103600083015261409f81613bd6565b9050919050565b600060208201905081810360008301526140bf81613bf9565b9050919050565b600060208201905081810360008301526140df81613c1c565b9050919050565b600060208201905081810360008301526140ff81613c3f565b9050919050565b6000602082019050818103600083015261411f81613c62565b9050919050565b6000602082019050818103600083015261413f81613c85565b9050919050565b6000602082019050818103600083015261415f81613ca8565b9050919050565b6000602082019050818103600083015261417f81613ccb565b9050919050565b6000602082019050818103600083015261419f81613cee565b9050919050565b600060208201905081810360008301526141bf81613d11565b9050919050565b60006020820190506141db6000830184613d34565b92915050565b60006141eb6141fc565b90506141f782826144de565b919050565b6000604051905090565b600067ffffffffffffffff82111561422157614220614674565b5b61422a826146c1565b9050602081019050919050565b600067ffffffffffffffff82111561425257614251614674565b5b61425b826146c1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006142b68261442a565b91506142c18361442a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142f6576142f5614589565b5b828201905092915050565b600061430c8261442a565b91506143178361442a565b925082614327576143266145b8565b5b828204905092915050565b600061433d8261442a565b91506143488361442a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561438157614380614589565b5b828202905092915050565b60006143978261442a565b91506143a28361442a565b9250828210156143b5576143b4614589565b5b828203905092915050565b60006143cb8261440a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061443f82614446565b9050919050565b600061445182614458565b9050919050565b60006144638261440a565b9050919050565b82818337600083830152505050565b60005b8381101561449757808201518184015260208101905061447c565b838111156144a6576000848401525b50505050565b600060028204905060018216806144c457607f821691505b602082108114156144d8576144d76145e7565b5b50919050565b6144e7826146c1565b810181811067ffffffffffffffff8211171561450657614505614674565b5b80604052505050565b600061451a8261442a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561454d5761454c614589565b5b600182019050919050565b60006145638261442a565b915061456e8361442a565b92508261457e5761457d6145b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5365636f6e642044534a20546f6b656e20616c726561647920636c61696d6564600082015250565b7f4d757374206e6f74206265207468652073616d652044534a20746f6b656e0000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f616c6c20746f6b656e73206e6565647320746f206265206d696e746564000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206f6e6c79206d696e742061206d6178696d756d206f66203160008201527f30204f7474657273000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f46697273742044534a20546f6b656e20616c726561647920636c61696d656400600082015250565b7f4d757374206f776e207365636f6e642044534a20746f6b656e00000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d757374206f776e2066697273742044534a20746f6b656e0000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4554482073656e74206973206e6f7420636f7272656374000000000000000000600082015250565b614dba816143c0565b8114614dc557600080fd5b50565b614dd1816143d2565b8114614ddc57600080fd5b50565b614de8816143de565b8114614df357600080fd5b50565b614dff8161442a565b8114614e0a57600080fd5b5056fea2646970667358221220d5394fc451532f2d0e415754a705352231a3bdb3bdfed3f505539540ba3dae0764736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102255760003560e01c806355f804b311610123578063a0712d68116100ab578063c87b56dd1161006f578063c87b56dd146107eb578063cd3293de14610828578063deb32f4414610853578063e985e9c51461087c578063f2fde38b146108b957610225565b8063a0712d6814610717578063a22cb46514610733578063b88d4fde1461075c578063b9225e8414610785578063c3a24e31146107ae57610225565b80637501f741116100f25780637501f741146106405780638d859f3e1461066b5780638da5cb5b1461069657806395d89b41146106c157806398831513146106ec57610225565b806355f804b3146105865780636352211e146105af57806370a08231146105ec578063715018a61461062957610225565b806322f3e2d4116101b15780633ccfd60b116101755780633ccfd60b146104c457806342842e0e146104db57806342966c68146105045780634efaf1931461052d5780634f6ccce71461054957610225565b806322f3e2d4146103dd57806323b872dd146104085780632f745c5914610431578063309119661461046e57806332cb6b0c1461049957610225565b8063095ea7b3116101f8578063095ea7b3146102fa57806310176f2814610323578063103cb760146103605780631342ff4c1461038957806318160ddd146103b257610225565b806301ffc9a71461022a57806302fb0c5e1461026757806306fdde0314610292578063081812fc146102bd575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c919061375d565b6108e2565b60405161025e9190613dce565b60405180910390f35b34801561027357600080fd5b5061027c6108f4565b6040516102899190613dce565b60405180910390f35b34801561029e57600080fd5b506102a7610907565b6040516102b49190613e04565b60405180910390f35b3480156102c957600080fd5b506102e460048036038101906102df9190613800565b610999565b6040516102f19190613d67565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c91906136a3565b610a1e565b005b34801561032f57600080fd5b5061034a60048036038101906103459190613800565b610b36565b6040516103579190613dce565b60405180910390f35b34801561036c57600080fd5b50610387600480360381019061038291906134f3565b610b56565b005b34801561039557600080fd5b506103b060048036038101906103ab9190613800565b610c16565b005b3480156103be57600080fd5b506103c7610d8a565b6040516103d491906141c6565b60405180910390f35b3480156103e957600080fd5b506103f2610d97565b6040516103ff9190613dce565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a919061358d565b610dae565b005b34801561043d57600080fd5b50610458600480360381019061045391906136a3565b610e0e565b60405161046591906141c6565b60405180910390f35b34801561047a57600080fd5b50610483610eb3565b6040516104909190613de9565b60405180910390f35b3480156104a557600080fd5b506104ae610ed9565b6040516104bb91906141c6565b60405180910390f35b3480156104d057600080fd5b506104d9610edf565b005b3480156104e757600080fd5b5061050260048036038101906104fd919061358d565b610faa565b005b34801561051057600080fd5b5061052b60048036038101906105269190613800565b610fca565b005b6105476004803603810190610542919061382d565b611027565b005b34801561055557600080fd5b50610570600480360381019061056b9190613800565b61146e565b60405161057d91906141c6565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a891906137b7565b6114df565b005b3480156105bb57600080fd5b506105d660048036038101906105d19190613800565b611575565b6040516105e39190613d67565b60405180910390f35b3480156105f857600080fd5b50610613600480360381019061060e91906134f3565b611627565b60405161062091906141c6565b60405180910390f35b34801561063557600080fd5b5061063e6116df565b005b34801561064c57600080fd5b50610655611767565b60405161066291906141c6565b60405180910390f35b34801561067757600080fd5b5061068061176d565b60405161068d91906141c6565b60405180910390f35b3480156106a257600080fd5b506106ab611778565b6040516106b89190613d67565b60405180910390f35b3480156106cd57600080fd5b506106d66117a2565b6040516106e39190613e04565b60405180910390f35b3480156106f857600080fd5b50610701611834565b60405161070e9190613dce565b60405180910390f35b610731600480360381019061072c9190613800565b611847565b005b34801561073f57600080fd5b5061075a60048036038101906107559190613663565b6119ce565b005b34801561076857600080fd5b50610783600480360381019061077e91906135e0565b611b4f565b005b34801561079157600080fd5b506107ac60048036038101906107a791906136e3565b611bb1565b005b3480156107ba57600080fd5b506107d560048036038101906107d09190613800565b611c75565b6040516107e29190613dce565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d9190613800565b611d57565b60405161081f9190613e04565b60405180910390f35b34801561083457600080fd5b5061083d611dfe565b60405161084a91906141c6565b60405180910390f35b34801561085f57600080fd5b5061087a60048036038101906108759190613730565b611e04565b005b34801561088857600080fd5b506108a3600480360381019061089e919061354d565b611e9d565b6040516108b09190613dce565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db91906134f3565b611f31565b005b60006108ed82612029565b9050919050565b600e60009054906101000a900460ff1681565b606060008054610916906144ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610942906144ac565b801561098f5780601f106109645761010080835404028352916020019161098f565b820191906000526020600020905b81548152906001019060200180831161097257829003601f168201915b5050505050905090565b60006109a4826120a3565b6109e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109da90614046565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2982611575565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9190614126565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ab961210f565b73ffffffffffffffffffffffffffffffffffffffff161480610ae85750610ae781610ae261210f565b611e9d565b5b610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90613fa6565b60405180910390fd5b610b318383612117565b505050565b60106020528060005260406000206000915054906101000a900460ff1681565b610b5e61210f565b73ffffffffffffffffffffffffffffffffffffffff16610b7c611778565b73ffffffffffffffffffffffffffffffffffffffff1614610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990614066565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c1e61210f565b73ffffffffffffffffffffffffffffffffffffffff16610c3c611778565b73ffffffffffffffffffffffffffffffffffffffff1614610c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8990614066565b60405180910390fd5b6000610c9c610d8a565b90506113888282610cad91906142ab565b10610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490614146565b60405180910390fd5b600082118015610cff5750600f548211155b610d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3590613f06565b60405180910390fd5b60005b82811015610d7157610d5e338284610d5991906142ab565b6121d0565b8080610d699061450f565b915050610d41565b5081600f54610d80919061438c565b600f819055505050565b6000600880549050905090565b6000600e60009054906101000a900460ff16905090565b610dbf610db961210f565b826121ee565b610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590614166565b60405180910390fd5b610e098383836122cc565b505050565b6000610e1983611627565b8210610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613e66565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61138881565b610ee761210f565b73ffffffffffffffffffffffffffffffffffffffff16610f05611778565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290614066565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fa6573d6000803e3d6000fd5b5050565b610fc583838360405180602001604052806000815250611b4f565b505050565b6000610fd4610d8a565b9050611388811161101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190613ea6565b60405180910390fd5b61102382612528565b5050565b6000611031610d8a565b9050600e60009054906101000a900460ff16611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990613f66565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016110f491906141c6565b60206040518083038186803b15801561110c57600080fd5b505afa158015611120573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111449190613520565b73ffffffffffffffffffffffffffffffffffffffff161461119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119190614106565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040161120c91906141c6565b60206040518083038186803b15801561122457600080fd5b505afa158015611238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125c9190613520565b73ffffffffffffffffffffffffffffffffffffffff16146112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a9906140a6565b60405180910390fd5b818314156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90613e46565b60405180910390fd5b600015156010600085815260200190815260200160002060009054906101000a900460ff1615151461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390614086565b60405180910390fd5b600015156010600084815260200190815260200160002060009054906101000a900460ff161515146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90613e26565b60405180910390fd5b6113888110611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90614146565b60405180910390fd5b60016010600085815260200190815260200160002060006101000a81548160ff02191690831515021790555060016010600084815260200190815260200160002060006101000a81548160ff02191690831515021790555061146933826121d0565b505050565b6000611478610d8a565b82106114b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b090614186565b60405180910390fd5b600882815481106114cd576114cc614645565b5b90600052602060002001549050919050565b6114e761210f565b73ffffffffffffffffffffffffffffffffffffffff16611505611778565b73ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290614066565b60405180910390fd5b80600c908051906020019061157192919061329c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561161e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161590613fe6565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90613fc6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116e761210f565b73ffffffffffffffffffffffffffffffffffffffff16611705611778565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175290614066565b60405180910390fd5b6117656000612639565b565b600d5481565b666a94d74f43000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117b1906144ac565b80601f01602080910402602001604051908101604052809291908181526020018280546117dd906144ac565b801561182a5780601f106117ff5761010080835404028352916020019161182a565b820191906000526020600020905b81548152906001019060200180831161180d57829003601f168201915b5050505050905090565b600e60019054906101000a900460ff1681565b6000611851610d8a565b9050600e60009054906101000a900460ff166118a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189990613f66565b60405180910390fd5b6001600d546118b191906142ab565b82106118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990614026565b60405180910390fd5b611388828261190191906142ab565b10611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193890614146565b60405180910390fd5b81666a94d74f4300006119549190614332565b341015611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d906141a6565b60405180910390fd5b60005b828110156119c9576119b63382846119b191906142ab565b6121d0565b80806119c19061450f565b915050611999565b505050565b6119d661210f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b90613f46565b60405180910390fd5b8060056000611a5161210f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611afe61210f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b439190613dce565b60405180910390a35050565b611b60611b5a61210f565b836121ee565b611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9690614166565b60405180910390fd5b611bab848484846126ff565b50505050565b611bb961210f565b73ffffffffffffffffffffffffffffffffffffffff16611bd7611778565b73ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614066565b60405180910390fd5b60005b82829050811015611c7057611c5d838383818110611c5157611c50614645565b5b90506020020135612528565b8080611c689061450f565b915050611c30565b505050565b60003373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401611ce991906141c6565b60206040518083038186803b158015611d0157600080fd5b505afa158015611d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d399190613520565b73ffffffffffffffffffffffffffffffffffffffff16149050919050565b6060611d62826120a3565b611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d98906140e6565b60405180910390fd5b6000611dab61275b565b90506000815111611dcb5760405180602001604052806000815250611df6565b80611dd5846127ed565b604051602001611de6929190613d43565b6040516020818303038152906040525b915050919050565b600f5481565b611e0c61210f565b73ffffffffffffffffffffffffffffffffffffffff16611e2a611778565b73ffffffffffffffffffffffffffffffffffffffff1614611e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7790614066565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f3961210f565b73ffffffffffffffffffffffffffffffffffffffff16611f57611778565b73ffffffffffffffffffffffffffffffffffffffff1614611fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa490614066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561201d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201490613ec6565b60405180910390fd5b61202681612639565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061209c575061209b8261294e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661218a83611575565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6121ea828260405180602001604052806000815250612a30565b5050565b60006121f9826120a3565b612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f90613f86565b60405180910390fd5b600061224383611575565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122b257508373ffffffffffffffffffffffffffffffffffffffff1661229a84610999565b73ffffffffffffffffffffffffffffffffffffffff16145b806122c357506122c28185611e9d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166122ec82611575565b73ffffffffffffffffffffffffffffffffffffffff1614612342576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612339906140c6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a990613f26565b60405180910390fd5b6123bd838383612a8b565b6123c8600082612117565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612418919061438c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461246f91906142ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061253382611575565b905061254181600084612a8b565b61254c600083612117565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461259c919061438c565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61270a8484846122cc565b61271684848484612a9b565b612755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274c90613e86565b60405180910390fd5b50505050565b6060600c805461276a906144ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612796906144ac565b80156127e35780601f106127b8576101008083540402835291602001916127e3565b820191906000526020600020905b8154815290600101906020018083116127c657829003601f168201915b5050505050905090565b60606000821415612835576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612949565b600082905060005b600082146128675780806128509061450f565b915050600a826128609190614301565b915061283d565b60008167ffffffffffffffff81111561288357612882614674565b5b6040519080825280601f01601f1916602001820160405280156128b55781602001600182028036833780820191505090505b5090505b60008514612942576001826128ce919061438c565b9150600a856128dd9190614558565b60306128e991906142ab565b60f81b8183815181106128ff576128fe614645565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561293b9190614301565b94506128b9565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612a1957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612a295750612a2882612c32565b5b9050919050565b612a3a8383612c9c565b612a476000848484612a9b565b612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d90613e86565b60405180910390fd5b505050565b612a96838383612e6a565b505050565b6000612abc8473ffffffffffffffffffffffffffffffffffffffff16612f7e565b15612c25578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ae561210f565b8786866040518563ffffffff1660e01b8152600401612b079493929190613d82565b602060405180830381600087803b158015612b2157600080fd5b505af1925050508015612b5257506040513d601f19601f82011682018060405250810190612b4f919061378a565b60015b612bd5573d8060008114612b82576040519150601f19603f3d011682016040523d82523d6000602084013e612b87565b606091505b50600081511415612bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc490613e86565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c2a565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390614006565b60405180910390fd5b612d15816120a3565b15612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c90613ee6565b60405180910390fd5b612d6160008383612a8b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612db191906142ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612e75838383612f91565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612eb857612eb381612f96565b612ef7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ef657612ef58382612fdf565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f3a57612f358161314c565b612f79565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f7857612f77828261321d565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612fec84611627565b612ff6919061438c565b90506000600760008481526020019081526020016000205490508181146130db576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613160919061438c565b90506000600960008481526020019081526020016000205490506000600883815481106131905761318f614645565b5b9060005260206000200154905080600883815481106131b2576131b1614645565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061320157613200614616565b5b6001900381819060005260206000200160009055905550505050565b600061322883611627565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546132a8906144ac565b90600052602060002090601f0160209004810192826132ca5760008555613311565b82601f106132e357805160ff1916838001178555613311565b82800160010185558215613311579182015b828111156133105782518255916020019190600101906132f5565b5b50905061331e9190613322565b5090565b5b8082111561333b576000816000905550600101613323565b5090565b600061335261334d84614206565b6141e1565b90508281526020810184848401111561336e5761336d6146b2565b5b61337984828561446a565b509392505050565b600061339461338f84614237565b6141e1565b9050828152602081018484840111156133b0576133af6146b2565b5b6133bb84828561446a565b509392505050565b6000813590506133d281614db1565b92915050565b6000815190506133e781614db1565b92915050565b60008083601f840112613403576134026146a8565b5b8235905067ffffffffffffffff8111156134205761341f6146a3565b5b60208301915083602082028301111561343c5761343b6146ad565b5b9250929050565b60008135905061345281614dc8565b92915050565b60008135905061346781614ddf565b92915050565b60008151905061347c81614ddf565b92915050565b600082601f830112613497576134966146a8565b5b81356134a784826020860161333f565b91505092915050565b600082601f8301126134c5576134c46146a8565b5b81356134d5848260208601613381565b91505092915050565b6000813590506134ed81614df6565b92915050565b600060208284031215613509576135086146bc565b5b6000613517848285016133c3565b91505092915050565b600060208284031215613536576135356146bc565b5b6000613544848285016133d8565b91505092915050565b60008060408385031215613564576135636146bc565b5b6000613572858286016133c3565b9250506020613583858286016133c3565b9150509250929050565b6000806000606084860312156135a6576135a56146bc565b5b60006135b4868287016133c3565b93505060206135c5868287016133c3565b92505060406135d6868287016134de565b9150509250925092565b600080600080608085870312156135fa576135f96146bc565b5b6000613608878288016133c3565b9450506020613619878288016133c3565b935050604061362a878288016134de565b925050606085013567ffffffffffffffff81111561364b5761364a6146b7565b5b61365787828801613482565b91505092959194509250565b6000806040838503121561367a576136796146bc565b5b6000613688858286016133c3565b925050602061369985828601613443565b9150509250929050565b600080604083850312156136ba576136b96146bc565b5b60006136c8858286016133c3565b92505060206136d9858286016134de565b9150509250929050565b600080602083850312156136fa576136f96146bc565b5b600083013567ffffffffffffffff811115613718576137176146b7565b5b613724858286016133ed565b92509250509250929050565b600060208284031215613746576137456146bc565b5b600061375484828501613443565b91505092915050565b600060208284031215613773576137726146bc565b5b600061378184828501613458565b91505092915050565b6000602082840312156137a05761379f6146bc565b5b60006137ae8482850161346d565b91505092915050565b6000602082840312156137cd576137cc6146bc565b5b600082013567ffffffffffffffff8111156137eb576137ea6146b7565b5b6137f7848285016134b0565b91505092915050565b600060208284031215613816576138156146bc565b5b6000613824848285016134de565b91505092915050565b60008060408385031215613844576138436146bc565b5b6000613852858286016134de565b9250506020613863858286016134de565b9150509250929050565b613876816143c0565b82525050565b613885816143d2565b82525050565b600061389682614268565b6138a0818561427e565b93506138b0818560208601614479565b6138b9816146c1565b840191505092915050565b6138cd81614434565b82525050565b60006138de82614273565b6138e8818561428f565b93506138f8818560208601614479565b613901816146c1565b840191505092915050565b600061391782614273565b61392181856142a0565b9350613931818560208601614479565b80840191505092915050565b600061394a60208361428f565b9150613955826146d2565b602082019050919050565b600061396d601e8361428f565b9150613978826146fb565b602082019050919050565b6000613990602b8361428f565b915061399b82614724565b604082019050919050565b60006139b360328361428f565b91506139be82614773565b604082019050919050565b60006139d6601d8361428f565b91506139e1826147c2565b602082019050919050565b60006139f960268361428f565b9150613a04826147eb565b604082019050919050565b6000613a1c601c8361428f565b9150613a278261483a565b602082019050919050565b6000613a3f60208361428f565b9150613a4a82614863565b602082019050919050565b6000613a6260248361428f565b9150613a6d8261488c565b604082019050919050565b6000613a8560198361428f565b9150613a90826148db565b602082019050919050565b6000613aa860128361428f565b9150613ab382614904565b602082019050919050565b6000613acb602c8361428f565b9150613ad68261492d565b604082019050919050565b6000613aee60388361428f565b9150613af98261497c565b604082019050919050565b6000613b11602a8361428f565b9150613b1c826149cb565b604082019050919050565b6000613b3460298361428f565b9150613b3f82614a1a565b604082019050919050565b6000613b5760208361428f565b9150613b6282614a69565b602082019050919050565b6000613b7a60288361428f565b9150613b8582614a92565b604082019050919050565b6000613b9d602c8361428f565b9150613ba882614ae1565b604082019050919050565b6000613bc060208361428f565b9150613bcb82614b30565b602082019050919050565b6000613be3601f8361428f565b9150613bee82614b59565b602082019050919050565b6000613c0660198361428f565b9150613c1182614b82565b602082019050919050565b6000613c2960298361428f565b9150613c3482614bab565b604082019050919050565b6000613c4c602f8361428f565b9150613c5782614bfa565b604082019050919050565b6000613c6f60188361428f565b9150613c7a82614c49565b602082019050919050565b6000613c9260218361428f565b9150613c9d82614c72565b604082019050919050565b6000613cb560168361428f565b9150613cc082614cc1565b602082019050919050565b6000613cd860318361428f565b9150613ce382614cea565b604082019050919050565b6000613cfb602c8361428f565b9150613d0682614d39565b604082019050919050565b6000613d1e60178361428f565b9150613d2982614d88565b602082019050919050565b613d3d8161442a565b82525050565b6000613d4f828561390c565b9150613d5b828461390c565b91508190509392505050565b6000602082019050613d7c600083018461386d565b92915050565b6000608082019050613d97600083018761386d565b613da4602083018661386d565b613db16040830185613d34565b8181036060830152613dc3818461388b565b905095945050505050565b6000602082019050613de3600083018461387c565b92915050565b6000602082019050613dfe60008301846138c4565b92915050565b60006020820190508181036000830152613e1e81846138d3565b905092915050565b60006020820190508181036000830152613e3f8161393d565b9050919050565b60006020820190508181036000830152613e5f81613960565b9050919050565b60006020820190508181036000830152613e7f81613983565b9050919050565b60006020820190508181036000830152613e9f816139a6565b9050919050565b60006020820190508181036000830152613ebf816139c9565b9050919050565b60006020820190508181036000830152613edf816139ec565b9050919050565b60006020820190508181036000830152613eff81613a0f565b9050919050565b60006020820190508181036000830152613f1f81613a32565b9050919050565b60006020820190508181036000830152613f3f81613a55565b9050919050565b60006020820190508181036000830152613f5f81613a78565b9050919050565b60006020820190508181036000830152613f7f81613a9b565b9050919050565b60006020820190508181036000830152613f9f81613abe565b9050919050565b60006020820190508181036000830152613fbf81613ae1565b9050919050565b60006020820190508181036000830152613fdf81613b04565b9050919050565b60006020820190508181036000830152613fff81613b27565b9050919050565b6000602082019050818103600083015261401f81613b4a565b9050919050565b6000602082019050818103600083015261403f81613b6d565b9050919050565b6000602082019050818103600083015261405f81613b90565b9050919050565b6000602082019050818103600083015261407f81613bb3565b9050919050565b6000602082019050818103600083015261409f81613bd6565b9050919050565b600060208201905081810360008301526140bf81613bf9565b9050919050565b600060208201905081810360008301526140df81613c1c565b9050919050565b600060208201905081810360008301526140ff81613c3f565b9050919050565b6000602082019050818103600083015261411f81613c62565b9050919050565b6000602082019050818103600083015261413f81613c85565b9050919050565b6000602082019050818103600083015261415f81613ca8565b9050919050565b6000602082019050818103600083015261417f81613ccb565b9050919050565b6000602082019050818103600083015261419f81613cee565b9050919050565b600060208201905081810360008301526141bf81613d11565b9050919050565b60006020820190506141db6000830184613d34565b92915050565b60006141eb6141fc565b90506141f782826144de565b919050565b6000604051905090565b600067ffffffffffffffff82111561422157614220614674565b5b61422a826146c1565b9050602081019050919050565b600067ffffffffffffffff82111561425257614251614674565b5b61425b826146c1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006142b68261442a565b91506142c18361442a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142f6576142f5614589565b5b828201905092915050565b600061430c8261442a565b91506143178361442a565b925082614327576143266145b8565b5b828204905092915050565b600061433d8261442a565b91506143488361442a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561438157614380614589565b5b828202905092915050565b60006143978261442a565b91506143a28361442a565b9250828210156143b5576143b4614589565b5b828203905092915050565b60006143cb8261440a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061443f82614446565b9050919050565b600061445182614458565b9050919050565b60006144638261440a565b9050919050565b82818337600083830152505050565b60005b8381101561449757808201518184015260208101905061447c565b838111156144a6576000848401525b50505050565b600060028204905060018216806144c457607f821691505b602082108114156144d8576144d76145e7565b5b50919050565b6144e7826146c1565b810181811067ffffffffffffffff8211171561450657614505614674565b5b80604052505050565b600061451a8261442a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561454d5761454c614589565b5b600182019050919050565b60006145638261442a565b915061456e8361442a565b92508261457e5761457d6145b8565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5365636f6e642044534a20546f6b656e20616c726561647920636c61696d6564600082015250565b7f4d757374206e6f74206265207468652073616d652044534a20746f6b656e0000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f616c6c20746f6b656e73206e6565647320746f206265206d696e746564000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53616c65206973206e6f74206163746976650000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206f6e6c79206d696e742061206d6178696d756d206f66203160008201527f30204f7474657273000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f46697273742044534a20546f6b656e20616c726561647920636c61696d656400600082015250565b7f4d757374206f776e207365636f6e642044534a20746f6b656e00000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d757374206f776e2066697273742044534a20746f6b656e0000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4554482073656e74206973206e6f7420636f7272656374000000000000000000600082015250565b614dba816143c0565b8114614dc557600080fd5b50565b614dd1816143d2565b8114614ddc57600080fd5b50565b614de8816143de565b8114614df357600080fd5b50565b614dff8161442a565b8114614e0a57600080fd5b5056fea2646970667358221220d5394fc451532f2d0e415754a705352231a3bdb3bdfed3f505539540ba3dae0764736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string):

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43993:3972:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44801:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44277:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24859:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26418:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25941:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44427:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47516:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45525:444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38316:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47415:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27308:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37984:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44133:15;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44349:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47822:140;;;;;;;;;;;;;:::i;:::-;;27718:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46749:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45981:760;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38506:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47622:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24553:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24283:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4558:94;;;;;;;;;;;;;:::i;:::-;;44186:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44220:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3907:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25028:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44310:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45034:479;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26711:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27974:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46965:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47154:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25203:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44394:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47736:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27077:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4807:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44801:212;44940:4;44969:36;44993:11;44969:23;:36::i;:::-;44962:43;;44801:212;;;:::o;44277:26::-;;;;;;;;;;;;;:::o;24859:100::-;24913:13;24946:5;24939:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24859:100;:::o;26418:221::-;26494:7;26522:16;26530:7;26522;:16::i;:::-;26514:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26607:15;:24;26623:7;26607:24;;;;;;;;;;;;;;;;;;;;;26600:31;;26418:221;;;:::o;25941:411::-;26022:13;26038:23;26053:7;26038:14;:23::i;:::-;26022:39;;26086:5;26080:11;;:2;:11;;;;26072:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26180:5;26164:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26189:37;26206:5;26213:12;:10;:12::i;:::-;26189:16;:37::i;:::-;26164:62;26142:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26323:21;26332:2;26336:7;26323:8;:21::i;:::-;26011:341;25941:411;;:::o;44427:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;47516:98::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47594:11:::1;47583:3;;:23;;;;;;;;;;;;;;;;;;47516:98:::0;:::o;45525:444::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45602:17:::1;45622:13;:11;:13::i;:::-;45602:33;;44383:4;45667:10;45655:9;:22;;;;:::i;:::-;:35;45646:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;45750:1;45737:10;:14;:39;;;;;45769:7;;45755:10;:21;;45737:39;45729:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;45829:6;45824:97;45841:10;45837:1;:14;45824:97;;;45873:36;45883:10;45907:1;45895:9;:13;;;;:::i;:::-;45873:9;:36::i;:::-;45853:3;;;;;:::i;:::-;;;;45824:97;;;;45951:10;45941:7;;:20;;;;:::i;:::-;45931:7;:30;;;;45583:386;45525:444:::0;:::o;38316:113::-;38377:7;38404:10;:17;;;;38397:24;;38316:113;:::o;47415:78::-;47455:4;47479:6;;;;;;;;;;;47472:13;;47415:78;:::o;27308:339::-;27503:41;27522:12;:10;:12::i;:::-;27536:7;27503:18;:41::i;:::-;27495:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27611:28;27621:4;27627:2;27631:7;27611:9;:28::i;:::-;27308:339;;;:::o;37984:256::-;38081:7;38117:23;38134:5;38117:16;:23::i;:::-;38109:5;:31;38101:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38206:12;:19;38219:5;38206:19;;;;;;;;;;;;;;;:26;38226:5;38206:26;;;;;;;;;;;;38199:33;;37984:256;;;;:::o;44133:15::-;;;;;;;;;;;;;:::o;44349:38::-;44383:4;44349:38;:::o;47822:140::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47870:12:::1;47885:21;47870:36;;47925:10;47917:28;;:37;47946:7;47917:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;47859:103;47822:140::o:0;27718:185::-;27856:39;27873:4;27879:2;27883:7;27856:39;;;;;;;;;;;;:16;:39::i;:::-;27718:185;;;:::o;46749:208::-;46816:17;46836:13;:11;:13::i;:::-;46816:33;;44383:4;46868:9;:22;46860:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46934:15;46940:8;46934:5;:15::i;:::-;46805:152;46749:208;:::o;45981:760::-;46056:17;46076:13;:11;:13::i;:::-;46056:33;;46118:6;;;;;;;;;;;46110:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;46187:10;46166:31;;:3;;;;;;;;;;;:11;;;46178:4;46166:17;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;;;46158:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46266:10;46245:31;;:3;;;;;;;;;;;:11;;;46257:4;46245:17;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;;;46237:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;46333:4;46325;:12;;46317:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46415:5;46391:29;;:14;:20;46406:4;46391:20;;;;;;;;;;;;;;;;;;;;;:29;;;46383:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;46499:5;46475:29;;:14;:20;46490:4;46475:20;;;;;;;;;;;;;;;;;;;;;:29;;;46467:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;44383:4;46560:9;:22;46552:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46646:4;46623:14;:20;46638:4;46623:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;46684:4;46661:14;:20;46676:4;46661:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;46701:32;46711:10;46723:9;46701;:32::i;:::-;46045:696;45981:760;;:::o;38506:233::-;38581:7;38617:30;:28;:30::i;:::-;38609:5;:38;38601:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38714:10;38725:5;38714:17;;;;;;;;:::i;:::-;;;;;;;;;;38707:24;;38506:233;;;:::o;47622:102::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47709:7:::1;47693:13;:23;;;;;;;;;;;;:::i;:::-;;47622:102:::0;:::o;24553:239::-;24625:7;24645:13;24661:7;:16;24669:7;24661:16;;;;;;;;;;;;;;;;;;;;;24645:32;;24713:1;24696:19;;:5;:19;;;;24688:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24779:5;24772:12;;;24553:239;;;:::o;24283:208::-;24355:7;24400:1;24383:19;;:5;:19;;;;24375:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24467:9;:16;24477:5;24467:16;;;;;;;;;;;;;;;;24460:23;;24283:208;;;:::o;4558:94::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4623:21:::1;4641:1;4623:9;:21::i;:::-;4558:94::o:0;44186:27::-;;;;:::o;44220:42::-;44252:10;44220:42;:::o;3907:87::-;3953:7;3980:6;;;;;;;;;;;3973:13;;3907:87;:::o;25028:104::-;25084:13;25117:7;25110:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25028:104;:::o;44310:32::-;;;;;;;;;;;;;:::o;45034:479::-;45089:17;45109:13;:11;:13::i;:::-;45089:33;;45143:6;;;;;;;;;;;45135:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;45209:1;45199:7;;:11;;;;:::i;:::-;45192:3;:19;45183:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44383:4;45288:3;45276:9;:15;;;;:::i;:::-;:28;45267:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;45372:3;44252:10;45364:11;;;;:::i;:::-;45351:9;:24;;45343:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45420:9;45416:90;45435:3;45431:1;:7;45416:90;;;45457:37;45467:10;45491:1;45479:9;:13;;;;:::i;:::-;45457:9;:37::i;:::-;45440:3;;;;;:::i;:::-;;;;45416:90;;;;45078:435;45034:479;:::o;26711:295::-;26826:12;:10;:12::i;:::-;26814:24;;:8;:24;;;;26806:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26926:8;26881:18;:32;26900:12;:10;:12::i;:::-;26881:32;;;;;;;;;;;;;;;:42;26914:8;26881:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26979:8;26950:48;;26965:12;:10;:12::i;:::-;26950:48;;;26989:8;26950:48;;;;;;:::i;:::-;;;;;;;;26711:295;;:::o;27974:328::-;28149:41;28168:12;:10;:12::i;:::-;28182:7;28149:18;:41::i;:::-;28141:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28255:39;28269:4;28275:2;28279:7;28288:5;28255:13;:39::i;:::-;27974:328;;;;:::o;46965:170::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47053:6:::1;47048:80;47063:9;;:16;;47061:1;:18;47048:80;;;47097:19;47103:9;;47113:1;47103:12;;;;;;;:::i;:::-;;;;;;;;47097:5;:19::i;:::-;47081:3;;;;;:::i;:::-;;;;47048:80;;;;46965:170:::0;;:::o;47154:123::-;47211:4;47259:10;47234:35;;:3;;;;;;;;;;;:11;;;47246:8;47234:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;;;47227:42;;47154:123;;;:::o;25203:334::-;25276:13;25310:16;25318:7;25310;:16::i;:::-;25302:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25391:21;25415:10;:8;:10::i;:::-;25391:34;;25467:1;25449:7;25443:21;:25;:86;;;;;;;;;;;;;;;;;25495:7;25504:18;:7;:16;:18::i;:::-;25478:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25443:86;25436:93;;;25203:334;;;:::o;44394:24::-;;;;:::o;47736:78::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47803:3:::1;47794:6;;:12;;;;;;;;;;;;;;;;;;47736:78:::0;:::o;27077:164::-;27174:4;27198:18;:25;27217:5;27198:25;;;;;;;;;;;;;;;:35;27224:8;27198:35;;;;;;;;;;;;;;;;;;;;;;;;;27191:42;;27077:164;;;;:::o;4807:192::-;4138:12;:10;:12::i;:::-;4127:23;;:7;:5;:7::i;:::-;:23;;;4119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4916:1:::1;4896:22;;:8;:22;;;;4888:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4972:19;4982:8;4972:9;:19::i;:::-;4807:192:::0;:::o;37676:224::-;37778:4;37817:35;37802:50;;;:11;:50;;;;:90;;;;37856:36;37880:11;37856:23;:36::i;:::-;37802:90;37795:97;;37676:224;;;:::o;29812:127::-;29877:4;29929:1;29901:30;;:7;:16;29909:7;29901:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29894:37;;29812:127;;;:::o;2695:98::-;2748:7;2775:10;2768:17;;2695:98;:::o;33794:174::-;33896:2;33869:15;:24;33885:7;33869:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33952:7;33948:2;33914:46;;33923:23;33938:7;33923:14;:23::i;:::-;33914:46;;;;;;;;;;;;33794:174;;:::o;30796:110::-;30872:26;30882:2;30886:7;30872:26;;;;;;;;;;;;:9;:26::i;:::-;30796:110;;:::o;30106:348::-;30199:4;30224:16;30232:7;30224;:16::i;:::-;30216:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30300:13;30316:23;30331:7;30316:14;:23::i;:::-;30300:39;;30369:5;30358:16;;:7;:16;;;:51;;;;30402:7;30378:31;;:20;30390:7;30378:11;:20::i;:::-;:31;;;30358:51;:87;;;;30413:32;30430:5;30437:7;30413:16;:32::i;:::-;30358:87;30350:96;;;30106:348;;;;:::o;33098:578::-;33257:4;33230:31;;:23;33245:7;33230:14;:23::i;:::-;:31;;;33222:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33340:1;33326:16;;:2;:16;;;;33318:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33396:39;33417:4;33423:2;33427:7;33396:20;:39::i;:::-;33500:29;33517:1;33521:7;33500:8;:29::i;:::-;33561:1;33542:9;:15;33552:4;33542:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33590:1;33573:9;:13;33583:2;33573:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33621:2;33602:7;:16;33610:7;33602:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33660:7;33656:2;33641:27;;33650:4;33641:27;;;;;;;;;;;;33098:578;;;:::o;32401:360::-;32461:13;32477:23;32492:7;32477:14;:23::i;:::-;32461:39;;32513:48;32534:5;32549:1;32553:7;32513:20;:48::i;:::-;32602:29;32619:1;32623:7;32602:8;:29::i;:::-;32664:1;32644:9;:16;32654:5;32644:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;32683:7;:16;32691:7;32683:16;;;;;;;;;;;;32676:23;;;;;;;;;;;32745:7;32741:1;32717:36;;32726:5;32717:36;;;;;;;;;;;;32450:311;32401:360;:::o;5007:173::-;5063:16;5082:6;;;;;;;;;;;5063:25;;5108:8;5099:6;;:17;;;;;;;;;;;;;;;;;;5163:8;5132:40;;5153:8;5132:40;;;;;;;;;;;;5052:128;5007:173;:::o;29184:315::-;29341:28;29351:4;29357:2;29361:7;29341:9;:28::i;:::-;29388:48;29411:4;29417:2;29421:7;29430:5;29388:22;:48::i;:::-;29380:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29184:315;;;;:::o;47289:114::-;47349:13;47382;47375:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47289:114;:::o;311:723::-;367:13;597:1;588:5;:10;584:53;;;615:10;;;;;;;;;;;;;;;;;;;;;584:53;647:12;662:5;647:20;;678:14;703:78;718:1;710:4;:9;703:78;;736:8;;;;;:::i;:::-;;;;767:2;759:10;;;;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;791:39;;841:154;857:1;848:5;:10;841:154;;885:1;875:11;;;;;:::i;:::-;;;952:2;944:5;:10;;;;:::i;:::-;931:2;:24;;;;:::i;:::-;918:39;;901:6;908;901:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;841:154;;;1019:6;1005:21;;;;;311:723;;;;:::o;23914:305::-;24016:4;24068:25;24053:40;;;:11;:40;;;;:105;;;;24125:33;24110:48;;;:11;:48;;;;24053:105;:158;;;;24175:36;24199:11;24175:23;:36::i;:::-;24053:158;24033:178;;23914:305;;;:::o;31133:321::-;31263:18;31269:2;31273:7;31263:5;:18::i;:::-;31314:54;31345:1;31349:2;31353:7;31362:5;31314:22;:54::i;:::-;31292:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31133:321;;;:::o;44589:204::-;44740:45;44767:4;44773:2;44777:7;44740:26;:45::i;:::-;44589:204;;;:::o;34533:799::-;34688:4;34709:15;:2;:13;;;:15::i;:::-;34705:620;;;34761:2;34745:36;;;34782:12;:10;:12::i;:::-;34796:4;34802:7;34811:5;34745:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34741:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35004:1;34987:6;:13;:18;34983:272;;;35030:60;;;;;;;;;;:::i;:::-;;;;;;;;34983:272;35205:6;35199:13;35190:6;35186:2;35182:15;35175:38;34741:529;34878:41;;;34868:51;;;:6;:51;;;;34861:58;;;;;34705:620;35309:4;35302:11;;34533:799;;;;;;;:::o;15893:157::-;15978:4;16017:25;16002:40;;;:11;:40;;;;15995:47;;15893:157;;;:::o;31790:382::-;31884:1;31870:16;;:2;:16;;;;31862:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31943:16;31951:7;31943;:16::i;:::-;31942:17;31934:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32005:45;32034:1;32038:2;32042:7;32005:20;:45::i;:::-;32080:1;32063:9;:13;32073:2;32063:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32111:2;32092:7;:16;32100:7;32092:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32156:7;32152:2;32131:33;;32148:1;32131:33;;;;;;;;;;;;31790:382;;:::o;39352:589::-;39496:45;39523:4;39529:2;39533:7;39496:26;:45::i;:::-;39574:1;39558:18;;:4;:18;;;39554:187;;;39593:40;39625:7;39593:31;:40::i;:::-;39554:187;;;39663:2;39655:10;;:4;:10;;;39651:90;;39682:47;39715:4;39721:7;39682:32;:47::i;:::-;39651:90;39554:187;39769:1;39755:16;;:2;:16;;;39751:183;;;39788:45;39825:7;39788:36;:45::i;:::-;39751:183;;;39861:4;39855:10;;:2;:10;;;39851:83;;39882:40;39910:2;39914:7;39882:27;:40::i;:::-;39851:83;39751:183;39352:589;;;:::o;5953:387::-;6013:4;6221:12;6288:7;6276:20;6268:28;;6331:1;6324:4;:8;6317:15;;;5953:387;;;:::o;35904:126::-;;;;:::o;40664:164::-;40768:10;:17;;;;40741:15;:24;40757:7;40741:24;;;;;;;;;;;:44;;;;40796:10;40812:7;40796:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40664:164;:::o;41455:988::-;41721:22;41771:1;41746:22;41763:4;41746:16;:22::i;:::-;:26;;;;:::i;:::-;41721:51;;41783:18;41804:17;:26;41822:7;41804:26;;;;;;;;;;;;41783:47;;41951:14;41937:10;:28;41933:328;;41982:19;42004:12;:18;42017:4;42004:18;;;;;;;;;;;;;;;:34;42023:14;42004:34;;;;;;;;;;;;41982:56;;42088:11;42055:12;:18;42068:4;42055:18;;;;;;;;;;;;;;;:30;42074:10;42055:30;;;;;;;;;;;:44;;;;42205:10;42172:17;:30;42190:11;42172:30;;;;;;;;;;;:43;;;;41967:294;41933:328;42357:17;:26;42375:7;42357:26;;;;;;;;;;;42350:33;;;42401:12;:18;42414:4;42401:18;;;;;;;;;;;;;;;:34;42420:14;42401:34;;;;;;;;;;;42394:41;;;41536:907;;41455:988;;:::o;42738:1079::-;42991:22;43036:1;43016:10;:17;;;;:21;;;;:::i;:::-;42991:46;;43048:18;43069:15;:24;43085:7;43069:24;;;;;;;;;;;;43048:45;;43420:19;43442:10;43453:14;43442:26;;;;;;;;:::i;:::-;;;;;;;;;;43420:48;;43506:11;43481:10;43492;43481:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;43617:10;43586:15;:28;43602:11;43586:28;;;;;;;;;;;:41;;;;43758:15;:24;43774:7;43758:24;;;;;;;;;;;43751:31;;;43793:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42809:1008;;;42738:1079;:::o;40242:221::-;40327:14;40344:20;40361:2;40344:16;:20::i;:::-;40327:37;;40402:7;40375:12;:16;40388:2;40375:16;;;;;;;;;;;;;;;:24;40392:6;40375:24;;;;;;;;;;;:34;;;;40449:6;40420:17;:26;40438:7;40420:26;;;;;;;;;;;:35;;;;40316:147;40242:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:143::-;1043:5;1074:6;1068:13;1059:22;;1090:33;1117:5;1090:33;:::i;:::-;986:143;;;;:::o;1152:568::-;1225:8;1235:6;1285:3;1278:4;1270:6;1266:17;1262:27;1252:122;;1293:79;;:::i;:::-;1252:122;1406:6;1393:20;1383:30;;1436:18;1428:6;1425:30;1422:117;;;1458:79;;:::i;:::-;1422:117;1572:4;1564:6;1560:17;1548:29;;1626:3;1618:4;1610:6;1606:17;1596:8;1592:32;1589:41;1586:128;;;1633:79;;:::i;:::-;1586:128;1152:568;;;;;:::o;1726:133::-;1769:5;1807:6;1794:20;1785:29;;1823:30;1847:5;1823:30;:::i;:::-;1726:133;;;;:::o;1865:137::-;1910:5;1948:6;1935:20;1926:29;;1964:32;1990:5;1964:32;:::i;:::-;1865:137;;;;:::o;2008:141::-;2064:5;2095:6;2089:13;2080:22;;2111:32;2137:5;2111:32;:::i;:::-;2008:141;;;;:::o;2168:338::-;2223:5;2272:3;2265:4;2257:6;2253:17;2249:27;2239:122;;2280:79;;:::i;:::-;2239:122;2397:6;2384:20;2422:78;2496:3;2488:6;2481:4;2473:6;2469:17;2422:78;:::i;:::-;2413:87;;2229:277;2168:338;;;;:::o;2526:340::-;2582:5;2631:3;2624:4;2616:6;2612:17;2608:27;2598:122;;2639:79;;:::i;:::-;2598:122;2756:6;2743:20;2781:79;2856:3;2848:6;2841:4;2833:6;2829:17;2781:79;:::i;:::-;2772:88;;2588:278;2526:340;;;;:::o;2872:139::-;2918:5;2956:6;2943:20;2934:29;;2972:33;2999:5;2972:33;:::i;:::-;2872:139;;;;:::o;3017:329::-;3076:6;3125:2;3113:9;3104:7;3100:23;3096:32;3093:119;;;3131:79;;:::i;:::-;3093:119;3251:1;3276:53;3321:7;3312:6;3301:9;3297:22;3276:53;:::i;:::-;3266:63;;3222:117;3017:329;;;;:::o;3352:351::-;3422:6;3471:2;3459:9;3450:7;3446:23;3442:32;3439:119;;;3477:79;;:::i;:::-;3439:119;3597:1;3622:64;3678:7;3669:6;3658:9;3654:22;3622:64;:::i;:::-;3612:74;;3568:128;3352:351;;;;:::o;3709:474::-;3777:6;3785;3834:2;3822:9;3813:7;3809:23;3805:32;3802:119;;;3840:79;;:::i;:::-;3802:119;3960:1;3985:53;4030:7;4021:6;4010:9;4006:22;3985:53;:::i;:::-;3975:63;;3931:117;4087:2;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4058:118;3709:474;;;;;:::o;4189:619::-;4266:6;4274;4282;4331:2;4319:9;4310:7;4306:23;4302:32;4299:119;;;4337:79;;:::i;:::-;4299:119;4457:1;4482:53;4527:7;4518:6;4507:9;4503:22;4482:53;:::i;:::-;4472:63;;4428:117;4584:2;4610:53;4655:7;4646:6;4635:9;4631:22;4610:53;:::i;:::-;4600:63;;4555:118;4712:2;4738:53;4783:7;4774:6;4763:9;4759:22;4738:53;:::i;:::-;4728:63;;4683:118;4189:619;;;;;:::o;4814:943::-;4909:6;4917;4925;4933;4982:3;4970:9;4961:7;4957:23;4953:33;4950:120;;;4989:79;;:::i;:::-;4950:120;5109:1;5134:53;5179:7;5170:6;5159:9;5155:22;5134:53;:::i;:::-;5124:63;;5080:117;5236:2;5262:53;5307:7;5298:6;5287:9;5283:22;5262:53;:::i;:::-;5252:63;;5207:118;5364:2;5390:53;5435:7;5426:6;5415:9;5411:22;5390:53;:::i;:::-;5380:63;;5335:118;5520:2;5509:9;5505:18;5492:32;5551:18;5543:6;5540:30;5537:117;;;5573:79;;:::i;:::-;5537:117;5678:62;5732:7;5723:6;5712:9;5708:22;5678:62;:::i;:::-;5668:72;;5463:287;4814:943;;;;;;;:::o;5763:468::-;5828:6;5836;5885:2;5873:9;5864:7;5860:23;5856:32;5853:119;;;5891:79;;:::i;:::-;5853:119;6011:1;6036:53;6081:7;6072:6;6061:9;6057:22;6036:53;:::i;:::-;6026:63;;5982:117;6138:2;6164:50;6206:7;6197:6;6186:9;6182:22;6164:50;:::i;:::-;6154:60;;6109:115;5763:468;;;;;:::o;6237:474::-;6305:6;6313;6362:2;6350:9;6341:7;6337:23;6333:32;6330:119;;;6368:79;;:::i;:::-;6330:119;6488:1;6513:53;6558:7;6549:6;6538:9;6534:22;6513:53;:::i;:::-;6503:63;;6459:117;6615:2;6641:53;6686:7;6677:6;6666:9;6662:22;6641:53;:::i;:::-;6631:63;;6586:118;6237:474;;;;;:::o;6717:559::-;6803:6;6811;6860:2;6848:9;6839:7;6835:23;6831:32;6828:119;;;6866:79;;:::i;:::-;6828:119;7014:1;7003:9;6999:17;6986:31;7044:18;7036:6;7033:30;7030:117;;;7066:79;;:::i;:::-;7030:117;7179:80;7251:7;7242:6;7231:9;7227:22;7179:80;:::i;:::-;7161:98;;;;6957:312;6717:559;;;;;:::o;7282:323::-;7338:6;7387:2;7375:9;7366:7;7362:23;7358:32;7355:119;;;7393:79;;:::i;:::-;7355:119;7513:1;7538:50;7580:7;7571:6;7560:9;7556:22;7538:50;:::i;:::-;7528:60;;7484:114;7282:323;;;;:::o;7611:327::-;7669:6;7718:2;7706:9;7697:7;7693:23;7689:32;7686:119;;;7724:79;;:::i;:::-;7686:119;7844:1;7869:52;7913:7;7904:6;7893:9;7889:22;7869:52;:::i;:::-;7859:62;;7815:116;7611:327;;;;:::o;7944:349::-;8013:6;8062:2;8050:9;8041:7;8037:23;8033:32;8030:119;;;8068:79;;:::i;:::-;8030:119;8188:1;8213:63;8268:7;8259:6;8248:9;8244:22;8213:63;:::i;:::-;8203:73;;8159:127;7944:349;;;;:::o;8299:509::-;8368:6;8417:2;8405:9;8396:7;8392:23;8388:32;8385:119;;;8423:79;;:::i;:::-;8385:119;8571:1;8560:9;8556:17;8543:31;8601:18;8593:6;8590:30;8587:117;;;8623:79;;:::i;:::-;8587:117;8728:63;8783:7;8774:6;8763:9;8759:22;8728:63;:::i;:::-;8718:73;;8514:287;8299:509;;;;:::o;8814:329::-;8873:6;8922:2;8910:9;8901:7;8897:23;8893:32;8890:119;;;8928:79;;:::i;:::-;8890:119;9048:1;9073:53;9118:7;9109:6;9098:9;9094:22;9073:53;:::i;:::-;9063:63;;9019:117;8814:329;;;;:::o;9149:474::-;9217:6;9225;9274:2;9262:9;9253:7;9249:23;9245:32;9242:119;;;9280:79;;:::i;:::-;9242:119;9400:1;9425:53;9470:7;9461:6;9450:9;9446:22;9425:53;:::i;:::-;9415:63;;9371:117;9527:2;9553:53;9598:7;9589:6;9578:9;9574:22;9553:53;:::i;:::-;9543:63;;9498:118;9149:474;;;;;:::o;9629:118::-;9716:24;9734:5;9716:24;:::i;:::-;9711:3;9704:37;9629:118;;:::o;9753:109::-;9834:21;9849:5;9834:21;:::i;:::-;9829:3;9822:34;9753:109;;:::o;9868:360::-;9954:3;9982:38;10014:5;9982:38;:::i;:::-;10036:70;10099:6;10094:3;10036:70;:::i;:::-;10029:77;;10115:52;10160:6;10155:3;10148:4;10141:5;10137:16;10115:52;:::i;:::-;10192:29;10214:6;10192:29;:::i;:::-;10187:3;10183:39;10176:46;;9958:270;9868:360;;;;:::o;10234:157::-;10334:50;10378:5;10334:50;:::i;:::-;10329:3;10322:63;10234:157;;:::o;10397:364::-;10485:3;10513:39;10546:5;10513:39;:::i;:::-;10568:71;10632:6;10627:3;10568:71;:::i;:::-;10561:78;;10648:52;10693:6;10688:3;10681:4;10674:5;10670:16;10648:52;:::i;:::-;10725:29;10747:6;10725:29;:::i;:::-;10720:3;10716:39;10709:46;;10489:272;10397:364;;;;:::o;10767:377::-;10873:3;10901:39;10934:5;10901:39;:::i;:::-;10956:89;11038:6;11033:3;10956:89;:::i;:::-;10949:96;;11054:52;11099:6;11094:3;11087:4;11080:5;11076:16;11054:52;:::i;:::-;11131:6;11126:3;11122:16;11115:23;;10877:267;10767:377;;;;:::o;11150:366::-;11292:3;11313:67;11377:2;11372:3;11313:67;:::i;:::-;11306:74;;11389:93;11478:3;11389:93;:::i;:::-;11507:2;11502:3;11498:12;11491:19;;11150:366;;;:::o;11522:::-;11664:3;11685:67;11749:2;11744:3;11685:67;:::i;:::-;11678:74;;11761:93;11850:3;11761:93;:::i;:::-;11879:2;11874:3;11870:12;11863:19;;11522:366;;;:::o;11894:::-;12036:3;12057:67;12121:2;12116:3;12057:67;:::i;:::-;12050:74;;12133:93;12222:3;12133:93;:::i;:::-;12251:2;12246:3;12242:12;12235:19;;11894:366;;;:::o;12266:::-;12408:3;12429:67;12493:2;12488:3;12429:67;:::i;:::-;12422:74;;12505:93;12594:3;12505:93;:::i;:::-;12623:2;12618:3;12614:12;12607:19;;12266:366;;;:::o;12638:::-;12780:3;12801:67;12865:2;12860:3;12801:67;:::i;:::-;12794:74;;12877:93;12966:3;12877:93;:::i;:::-;12995:2;12990:3;12986:12;12979:19;;12638:366;;;:::o;13010:::-;13152:3;13173:67;13237:2;13232:3;13173:67;:::i;:::-;13166:74;;13249:93;13338:3;13249:93;:::i;:::-;13367:2;13362:3;13358:12;13351:19;;13010:366;;;:::o;13382:::-;13524:3;13545:67;13609:2;13604:3;13545:67;:::i;:::-;13538:74;;13621:93;13710:3;13621:93;:::i;:::-;13739:2;13734:3;13730:12;13723:19;;13382:366;;;:::o;13754:::-;13896:3;13917:67;13981:2;13976:3;13917:67;:::i;:::-;13910:74;;13993:93;14082:3;13993:93;:::i;:::-;14111:2;14106:3;14102:12;14095:19;;13754:366;;;:::o;14126:::-;14268:3;14289:67;14353:2;14348:3;14289:67;:::i;:::-;14282:74;;14365:93;14454:3;14365:93;:::i;:::-;14483:2;14478:3;14474:12;14467:19;;14126:366;;;:::o;14498:::-;14640:3;14661:67;14725:2;14720:3;14661:67;:::i;:::-;14654:74;;14737:93;14826:3;14737:93;:::i;:::-;14855:2;14850:3;14846:12;14839:19;;14498:366;;;:::o;14870:::-;15012:3;15033:67;15097:2;15092:3;15033:67;:::i;:::-;15026:74;;15109:93;15198:3;15109:93;:::i;:::-;15227:2;15222:3;15218:12;15211:19;;14870:366;;;:::o;15242:::-;15384:3;15405:67;15469:2;15464:3;15405:67;:::i;:::-;15398:74;;15481:93;15570:3;15481:93;:::i;:::-;15599:2;15594:3;15590:12;15583:19;;15242:366;;;:::o;15614:::-;15756:3;15777:67;15841:2;15836:3;15777:67;:::i;:::-;15770:74;;15853:93;15942:3;15853:93;:::i;:::-;15971:2;15966:3;15962:12;15955:19;;15614:366;;;:::o;15986:::-;16128:3;16149:67;16213:2;16208:3;16149:67;:::i;:::-;16142:74;;16225:93;16314:3;16225:93;:::i;:::-;16343:2;16338:3;16334:12;16327:19;;15986:366;;;:::o;16358:::-;16500:3;16521:67;16585:2;16580:3;16521:67;:::i;:::-;16514:74;;16597:93;16686:3;16597:93;:::i;:::-;16715:2;16710:3;16706:12;16699:19;;16358:366;;;:::o;16730:::-;16872:3;16893:67;16957:2;16952:3;16893:67;:::i;:::-;16886:74;;16969:93;17058:3;16969:93;:::i;:::-;17087:2;17082:3;17078:12;17071:19;;16730:366;;;:::o;17102:::-;17244:3;17265:67;17329:2;17324:3;17265:67;:::i;:::-;17258:74;;17341:93;17430:3;17341:93;:::i;:::-;17459:2;17454:3;17450:12;17443:19;;17102:366;;;:::o;17474:::-;17616:3;17637:67;17701:2;17696:3;17637:67;:::i;:::-;17630:74;;17713:93;17802:3;17713:93;:::i;:::-;17831:2;17826:3;17822:12;17815:19;;17474:366;;;:::o;17846:::-;17988:3;18009:67;18073:2;18068:3;18009:67;:::i;:::-;18002:74;;18085:93;18174:3;18085:93;:::i;:::-;18203:2;18198:3;18194:12;18187:19;;17846:366;;;:::o;18218:::-;18360:3;18381:67;18445:2;18440:3;18381:67;:::i;:::-;18374:74;;18457:93;18546:3;18457:93;:::i;:::-;18575:2;18570:3;18566:12;18559:19;;18218:366;;;:::o;18590:::-;18732:3;18753:67;18817:2;18812:3;18753:67;:::i;:::-;18746:74;;18829:93;18918:3;18829:93;:::i;:::-;18947:2;18942:3;18938:12;18931:19;;18590:366;;;:::o;18962:::-;19104:3;19125:67;19189:2;19184:3;19125:67;:::i;:::-;19118:74;;19201:93;19290:3;19201:93;:::i;:::-;19319:2;19314:3;19310:12;19303:19;;18962:366;;;:::o;19334:::-;19476:3;19497:67;19561:2;19556:3;19497:67;:::i;:::-;19490:74;;19573:93;19662:3;19573:93;:::i;:::-;19691:2;19686:3;19682:12;19675:19;;19334:366;;;:::o;19706:::-;19848:3;19869:67;19933:2;19928:3;19869:67;:::i;:::-;19862:74;;19945:93;20034:3;19945:93;:::i;:::-;20063:2;20058:3;20054:12;20047:19;;19706:366;;;:::o;20078:::-;20220:3;20241:67;20305:2;20300:3;20241:67;:::i;:::-;20234:74;;20317:93;20406:3;20317:93;:::i;:::-;20435:2;20430:3;20426:12;20419:19;;20078:366;;;:::o;20450:::-;20592:3;20613:67;20677:2;20672:3;20613:67;:::i;:::-;20606:74;;20689:93;20778:3;20689:93;:::i;:::-;20807:2;20802:3;20798:12;20791:19;;20450:366;;;:::o;20822:::-;20964:3;20985:67;21049:2;21044:3;20985:67;:::i;:::-;20978:74;;21061:93;21150:3;21061:93;:::i;:::-;21179:2;21174:3;21170:12;21163:19;;20822:366;;;:::o;21194:::-;21336:3;21357:67;21421:2;21416:3;21357:67;:::i;:::-;21350:74;;21433:93;21522:3;21433:93;:::i;:::-;21551:2;21546:3;21542:12;21535:19;;21194:366;;;:::o;21566:::-;21708:3;21729:67;21793:2;21788:3;21729:67;:::i;:::-;21722:74;;21805:93;21894:3;21805:93;:::i;:::-;21923:2;21918:3;21914:12;21907:19;;21566:366;;;:::o;21938:118::-;22025:24;22043:5;22025:24;:::i;:::-;22020:3;22013:37;21938:118;;:::o;22062:435::-;22242:3;22264:95;22355:3;22346:6;22264:95;:::i;:::-;22257:102;;22376:95;22467:3;22458:6;22376:95;:::i;:::-;22369:102;;22488:3;22481:10;;22062:435;;;;;:::o;22503:222::-;22596:4;22634:2;22623:9;22619:18;22611:26;;22647:71;22715:1;22704:9;22700:17;22691:6;22647:71;:::i;:::-;22503:222;;;;:::o;22731:640::-;22926:4;22964:3;22953:9;22949:19;22941:27;;22978:71;23046:1;23035:9;23031:17;23022:6;22978:71;:::i;:::-;23059:72;23127:2;23116:9;23112:18;23103:6;23059:72;:::i;:::-;23141;23209:2;23198:9;23194:18;23185:6;23141:72;:::i;:::-;23260:9;23254:4;23250:20;23245:2;23234:9;23230:18;23223:48;23288:76;23359:4;23350:6;23288:76;:::i;:::-;23280:84;;22731:640;;;;;;;:::o;23377:210::-;23464:4;23502:2;23491:9;23487:18;23479:26;;23515:65;23577:1;23566:9;23562:17;23553:6;23515:65;:::i;:::-;23377:210;;;;:::o;23593:248::-;23699:4;23737:2;23726:9;23722:18;23714:26;;23750:84;23831:1;23820:9;23816:17;23807:6;23750:84;:::i;:::-;23593:248;;;;:::o;23847:313::-;23960:4;23998:2;23987:9;23983:18;23975:26;;24047:9;24041:4;24037:20;24033:1;24022:9;24018:17;24011:47;24075:78;24148:4;24139:6;24075:78;:::i;:::-;24067:86;;23847:313;;;;:::o;24166:419::-;24332:4;24370:2;24359:9;24355:18;24347:26;;24419:9;24413:4;24409:20;24405:1;24394:9;24390:17;24383:47;24447:131;24573:4;24447:131;:::i;:::-;24439:139;;24166:419;;;:::o;24591:::-;24757:4;24795:2;24784:9;24780:18;24772:26;;24844:9;24838:4;24834:20;24830:1;24819:9;24815:17;24808:47;24872:131;24998:4;24872:131;:::i;:::-;24864:139;;24591:419;;;:::o;25016:::-;25182:4;25220:2;25209:9;25205:18;25197:26;;25269:9;25263:4;25259:20;25255:1;25244:9;25240:17;25233:47;25297:131;25423:4;25297:131;:::i;:::-;25289:139;;25016:419;;;:::o;25441:::-;25607:4;25645:2;25634:9;25630:18;25622:26;;25694:9;25688:4;25684:20;25680:1;25669:9;25665:17;25658:47;25722:131;25848:4;25722:131;:::i;:::-;25714:139;;25441:419;;;:::o;25866:::-;26032:4;26070:2;26059:9;26055:18;26047:26;;26119:9;26113:4;26109:20;26105:1;26094:9;26090:17;26083:47;26147:131;26273:4;26147:131;:::i;:::-;26139:139;;25866:419;;;:::o;26291:::-;26457:4;26495:2;26484:9;26480:18;26472:26;;26544:9;26538:4;26534:20;26530:1;26519:9;26515:17;26508:47;26572:131;26698:4;26572:131;:::i;:::-;26564:139;;26291:419;;;:::o;26716:::-;26882:4;26920:2;26909:9;26905:18;26897:26;;26969:9;26963:4;26959:20;26955:1;26944:9;26940:17;26933:47;26997:131;27123:4;26997:131;:::i;:::-;26989:139;;26716:419;;;:::o;27141:::-;27307:4;27345:2;27334:9;27330:18;27322:26;;27394:9;27388:4;27384:20;27380:1;27369:9;27365:17;27358:47;27422:131;27548:4;27422:131;:::i;:::-;27414:139;;27141:419;;;:::o;27566:::-;27732:4;27770:2;27759:9;27755:18;27747:26;;27819:9;27813:4;27809:20;27805:1;27794:9;27790:17;27783:47;27847:131;27973:4;27847:131;:::i;:::-;27839:139;;27566:419;;;:::o;27991:::-;28157:4;28195:2;28184:9;28180:18;28172:26;;28244:9;28238:4;28234:20;28230:1;28219:9;28215:17;28208:47;28272:131;28398:4;28272:131;:::i;:::-;28264:139;;27991:419;;;:::o;28416:::-;28582:4;28620:2;28609:9;28605:18;28597:26;;28669:9;28663:4;28659:20;28655:1;28644:9;28640:17;28633:47;28697:131;28823:4;28697:131;:::i;:::-;28689:139;;28416:419;;;:::o;28841:::-;29007:4;29045:2;29034:9;29030:18;29022:26;;29094:9;29088:4;29084:20;29080:1;29069:9;29065:17;29058:47;29122:131;29248:4;29122:131;:::i;:::-;29114:139;;28841:419;;;:::o;29266:::-;29432:4;29470:2;29459:9;29455:18;29447:26;;29519:9;29513:4;29509:20;29505:1;29494:9;29490:17;29483:47;29547:131;29673:4;29547:131;:::i;:::-;29539:139;;29266:419;;;:::o;29691:::-;29857:4;29895:2;29884:9;29880:18;29872:26;;29944:9;29938:4;29934:20;29930:1;29919:9;29915:17;29908:47;29972:131;30098:4;29972:131;:::i;:::-;29964:139;;29691:419;;;:::o;30116:::-;30282:4;30320:2;30309:9;30305:18;30297:26;;30369:9;30363:4;30359:20;30355:1;30344:9;30340:17;30333:47;30397:131;30523:4;30397:131;:::i;:::-;30389:139;;30116:419;;;:::o;30541:::-;30707:4;30745:2;30734:9;30730:18;30722:26;;30794:9;30788:4;30784:20;30780:1;30769:9;30765:17;30758:47;30822:131;30948:4;30822:131;:::i;:::-;30814:139;;30541:419;;;:::o;30966:::-;31132:4;31170:2;31159:9;31155:18;31147:26;;31219:9;31213:4;31209:20;31205:1;31194:9;31190:17;31183:47;31247:131;31373:4;31247:131;:::i;:::-;31239:139;;30966:419;;;:::o;31391:::-;31557:4;31595:2;31584:9;31580:18;31572:26;;31644:9;31638:4;31634:20;31630:1;31619:9;31615:17;31608:47;31672:131;31798:4;31672:131;:::i;:::-;31664:139;;31391:419;;;:::o;31816:::-;31982:4;32020:2;32009:9;32005:18;31997:26;;32069:9;32063:4;32059:20;32055:1;32044:9;32040:17;32033:47;32097:131;32223:4;32097:131;:::i;:::-;32089:139;;31816:419;;;:::o;32241:::-;32407:4;32445:2;32434:9;32430:18;32422:26;;32494:9;32488:4;32484:20;32480:1;32469:9;32465:17;32458:47;32522:131;32648:4;32522:131;:::i;:::-;32514:139;;32241:419;;;:::o;32666:::-;32832:4;32870:2;32859:9;32855:18;32847:26;;32919:9;32913:4;32909:20;32905:1;32894:9;32890:17;32883:47;32947:131;33073:4;32947:131;:::i;:::-;32939:139;;32666:419;;;:::o;33091:::-;33257:4;33295:2;33284:9;33280:18;33272:26;;33344:9;33338:4;33334:20;33330:1;33319:9;33315:17;33308:47;33372:131;33498:4;33372:131;:::i;:::-;33364:139;;33091:419;;;:::o;33516:::-;33682:4;33720:2;33709:9;33705:18;33697:26;;33769:9;33763:4;33759:20;33755:1;33744:9;33740:17;33733:47;33797:131;33923:4;33797:131;:::i;:::-;33789:139;;33516:419;;;:::o;33941:::-;34107:4;34145:2;34134:9;34130:18;34122:26;;34194:9;34188:4;34184:20;34180:1;34169:9;34165:17;34158:47;34222:131;34348:4;34222:131;:::i;:::-;34214:139;;33941:419;;;:::o;34366:::-;34532:4;34570:2;34559:9;34555:18;34547:26;;34619:9;34613:4;34609:20;34605:1;34594:9;34590:17;34583:47;34647:131;34773:4;34647:131;:::i;:::-;34639:139;;34366:419;;;:::o;34791:::-;34957:4;34995:2;34984:9;34980:18;34972:26;;35044:9;35038:4;35034:20;35030:1;35019:9;35015:17;35008:47;35072:131;35198:4;35072:131;:::i;:::-;35064:139;;34791:419;;;:::o;35216:::-;35382:4;35420:2;35409:9;35405:18;35397:26;;35469:9;35463:4;35459:20;35455:1;35444:9;35440:17;35433:47;35497:131;35623:4;35497:131;:::i;:::-;35489:139;;35216:419;;;:::o;35641:::-;35807:4;35845:2;35834:9;35830:18;35822:26;;35894:9;35888:4;35884:20;35880:1;35869:9;35865:17;35858:47;35922:131;36048:4;35922:131;:::i;:::-;35914:139;;35641:419;;;:::o;36066:::-;36232:4;36270:2;36259:9;36255:18;36247:26;;36319:9;36313:4;36309:20;36305:1;36294:9;36290:17;36283:47;36347:131;36473:4;36347:131;:::i;:::-;36339:139;;36066:419;;;:::o;36491:222::-;36584:4;36622:2;36611:9;36607:18;36599:26;;36635:71;36703:1;36692:9;36688:17;36679:6;36635:71;:::i;:::-;36491:222;;;;:::o;36719:129::-;36753:6;36780:20;;:::i;:::-;36770:30;;36809:33;36837:4;36829:6;36809:33;:::i;:::-;36719:129;;;:::o;36854:75::-;36887:6;36920:2;36914:9;36904:19;;36854:75;:::o;36935:307::-;36996:4;37086:18;37078:6;37075:30;37072:56;;;37108:18;;:::i;:::-;37072:56;37146:29;37168:6;37146:29;:::i;:::-;37138:37;;37230:4;37224;37220:15;37212:23;;36935:307;;;:::o;37248:308::-;37310:4;37400:18;37392:6;37389:30;37386:56;;;37422:18;;:::i;:::-;37386:56;37460:29;37482:6;37460:29;:::i;:::-;37452:37;;37544:4;37538;37534:15;37526:23;;37248:308;;;:::o;37562:98::-;37613:6;37647:5;37641:12;37631:22;;37562:98;;;:::o;37666:99::-;37718:6;37752:5;37746:12;37736:22;;37666:99;;;:::o;37771:168::-;37854:11;37888:6;37883:3;37876:19;37928:4;37923:3;37919:14;37904:29;;37771:168;;;;:::o;37945:169::-;38029:11;38063:6;38058:3;38051:19;38103:4;38098:3;38094:14;38079:29;;37945:169;;;;:::o;38120:148::-;38222:11;38259:3;38244:18;;38120:148;;;;:::o;38274:305::-;38314:3;38333:20;38351:1;38333:20;:::i;:::-;38328:25;;38367:20;38385:1;38367:20;:::i;:::-;38362:25;;38521:1;38453:66;38449:74;38446:1;38443:81;38440:107;;;38527:18;;:::i;:::-;38440:107;38571:1;38568;38564:9;38557:16;;38274:305;;;;:::o;38585:185::-;38625:1;38642:20;38660:1;38642:20;:::i;:::-;38637:25;;38676:20;38694:1;38676:20;:::i;:::-;38671:25;;38715:1;38705:35;;38720:18;;:::i;:::-;38705:35;38762:1;38759;38755:9;38750:14;;38585:185;;;;:::o;38776:348::-;38816:7;38839:20;38857:1;38839:20;:::i;:::-;38834:25;;38873:20;38891:1;38873:20;:::i;:::-;38868:25;;39061:1;38993:66;38989:74;38986:1;38983:81;38978:1;38971:9;38964:17;38960:105;38957:131;;;39068:18;;:::i;:::-;38957:131;39116:1;39113;39109:9;39098:20;;38776:348;;;;:::o;39130:191::-;39170:4;39190:20;39208:1;39190:20;:::i;:::-;39185:25;;39224:20;39242:1;39224:20;:::i;:::-;39219:25;;39263:1;39260;39257:8;39254:34;;;39268:18;;:::i;:::-;39254:34;39313:1;39310;39306:9;39298:17;;39130:191;;;;:::o;39327:96::-;39364:7;39393:24;39411:5;39393:24;:::i;:::-;39382:35;;39327:96;;;:::o;39429:90::-;39463:7;39506:5;39499:13;39492:21;39481:32;;39429:90;;;:::o;39525:149::-;39561:7;39601:66;39594:5;39590:78;39579:89;;39525:149;;;:::o;39680:126::-;39717:7;39757:42;39750:5;39746:54;39735:65;;39680:126;;;:::o;39812:77::-;39849:7;39878:5;39867:16;;39812:77;;;:::o;39895:139::-;39958:9;39991:37;40022:5;39991:37;:::i;:::-;39978:50;;39895:139;;;:::o;40040:126::-;40090:9;40123:37;40154:5;40123:37;:::i;:::-;40110:50;;40040:126;;;:::o;40172:113::-;40222:9;40255:24;40273:5;40255:24;:::i;:::-;40242:37;;40172:113;;;:::o;40291:154::-;40375:6;40370:3;40365;40352:30;40437:1;40428:6;40423:3;40419:16;40412:27;40291:154;;;:::o;40451:307::-;40519:1;40529:113;40543:6;40540:1;40537:13;40529:113;;;40628:1;40623:3;40619:11;40613:18;40609:1;40604:3;40600:11;40593:39;40565:2;40562:1;40558:10;40553:15;;40529:113;;;40660:6;40657:1;40654:13;40651:101;;;40740:1;40731:6;40726:3;40722:16;40715:27;40651:101;40500:258;40451:307;;;:::o;40764:320::-;40808:6;40845:1;40839:4;40835:12;40825:22;;40892:1;40886:4;40882:12;40913:18;40903:81;;40969:4;40961:6;40957:17;40947:27;;40903:81;41031:2;41023:6;41020:14;41000:18;40997:38;40994:84;;;41050:18;;:::i;:::-;40994:84;40815:269;40764:320;;;:::o;41090:281::-;41173:27;41195:4;41173:27;:::i;:::-;41165:6;41161:40;41303:6;41291:10;41288:22;41267:18;41255:10;41252:34;41249:62;41246:88;;;41314:18;;:::i;:::-;41246:88;41354:10;41350:2;41343:22;41133:238;41090:281;;:::o;41377:233::-;41416:3;41439:24;41457:5;41439:24;:::i;:::-;41430:33;;41485:66;41478:5;41475:77;41472:103;;;41555:18;;:::i;:::-;41472:103;41602:1;41595:5;41591:13;41584:20;;41377:233;;;:::o;41616:176::-;41648:1;41665:20;41683:1;41665:20;:::i;:::-;41660:25;;41699:20;41717:1;41699:20;:::i;:::-;41694:25;;41738:1;41728:35;;41743:18;;:::i;:::-;41728:35;41784:1;41781;41777:9;41772:14;;41616:176;;;;:::o;41798:180::-;41846:77;41843:1;41836:88;41943:4;41940:1;41933:15;41967:4;41964:1;41957:15;41984:180;42032:77;42029:1;42022:88;42129:4;42126:1;42119:15;42153:4;42150:1;42143:15;42170:180;42218:77;42215:1;42208:88;42315:4;42312:1;42305:15;42339:4;42336:1;42329:15;42356:180;42404:77;42401:1;42394:88;42501:4;42498:1;42491:15;42525:4;42522:1;42515:15;42542:180;42590:77;42587:1;42580:88;42687:4;42684:1;42677:15;42711:4;42708:1;42701:15;42728:180;42776:77;42773:1;42766:88;42873:4;42870:1;42863:15;42897:4;42894:1;42887:15;42914:117;43023:1;43020;43013:12;43037:117;43146:1;43143;43136:12;43160:117;43269:1;43266;43259:12;43283:117;43392:1;43389;43382:12;43406:117;43515:1;43512;43505:12;43529:117;43638:1;43635;43628:12;43652:102;43693:6;43744:2;43740:7;43735:2;43728:5;43724:14;43720:28;43710:38;;43652:102;;;:::o;43760:182::-;43900:34;43896:1;43888:6;43884:14;43877:58;43760:182;:::o;43948:180::-;44088:32;44084:1;44076:6;44072:14;44065:56;43948:180;:::o;44134:230::-;44274:34;44270:1;44262:6;44258:14;44251:58;44343:13;44338:2;44330:6;44326:15;44319:38;44134:230;:::o;44370:237::-;44510:34;44506:1;44498:6;44494:14;44487:58;44579:20;44574:2;44566:6;44562:15;44555:45;44370:237;:::o;44613:179::-;44753:31;44749:1;44741:6;44737:14;44730:55;44613:179;:::o;44798:225::-;44938:34;44934:1;44926:6;44922:14;44915:58;45007:8;45002:2;44994:6;44990:15;44983:33;44798:225;:::o;45029:178::-;45169:30;45165:1;45157:6;45153:14;45146:54;45029:178;:::o;45213:182::-;45353:34;45349:1;45341:6;45337:14;45330:58;45213:182;:::o;45401:223::-;45541:34;45537:1;45529:6;45525:14;45518:58;45610:6;45605:2;45597:6;45593:15;45586:31;45401:223;:::o;45630:175::-;45770:27;45766:1;45758:6;45754:14;45747:51;45630:175;:::o;45811:168::-;45951:20;45947:1;45939:6;45935:14;45928:44;45811:168;:::o;45985:231::-;46125:34;46121:1;46113:6;46109:14;46102:58;46194:14;46189:2;46181:6;46177:15;46170:39;45985:231;:::o;46222:243::-;46362:34;46358:1;46350:6;46346:14;46339:58;46431:26;46426:2;46418:6;46414:15;46407:51;46222:243;:::o;46471:229::-;46611:34;46607:1;46599:6;46595:14;46588:58;46680:12;46675:2;46667:6;46663:15;46656:37;46471:229;:::o;46706:228::-;46846:34;46842:1;46834:6;46830:14;46823:58;46915:11;46910:2;46902:6;46898:15;46891:36;46706:228;:::o;46940:182::-;47080:34;47076:1;47068:6;47064:14;47057:58;46940:182;:::o;47128:227::-;47268:34;47264:1;47256:6;47252:14;47245:58;47337:10;47332:2;47324:6;47320:15;47313:35;47128:227;:::o;47361:231::-;47501:34;47497:1;47489:6;47485:14;47478:58;47570:14;47565:2;47557:6;47553:15;47546:39;47361:231;:::o;47598:182::-;47738:34;47734:1;47726:6;47722:14;47715:58;47598:182;:::o;47786:181::-;47926:33;47922:1;47914:6;47910:14;47903:57;47786:181;:::o;47973:175::-;48113:27;48109:1;48101:6;48097:14;48090:51;47973:175;:::o;48154:228::-;48294:34;48290:1;48282:6;48278:14;48271:58;48363:11;48358:2;48350:6;48346:15;48339:36;48154:228;:::o;48388:234::-;48528:34;48524:1;48516:6;48512:14;48505:58;48597:17;48592:2;48584:6;48580:15;48573:42;48388:234;:::o;48628:174::-;48768:26;48764:1;48756:6;48752:14;48745:50;48628:174;:::o;48808:220::-;48948:34;48944:1;48936:6;48932:14;48925:58;49017:3;49012:2;49004:6;49000:15;48993:28;48808:220;:::o;49034:172::-;49174:24;49170:1;49162:6;49158:14;49151:48;49034:172;:::o;49212:236::-;49352:34;49348:1;49340:6;49336:14;49329:58;49421:19;49416:2;49408:6;49404:15;49397:44;49212:236;:::o;49454:231::-;49594:34;49590:1;49582:6;49578:14;49571:58;49663:14;49658:2;49650:6;49646:15;49639:39;49454:231;:::o;49691:173::-;49831:25;49827:1;49819:6;49815:14;49808:49;49691:173;:::o;49870:122::-;49943:24;49961:5;49943:24;:::i;:::-;49936:5;49933:35;49923:63;;49982:1;49979;49972:12;49923:63;49870:122;:::o;49998:116::-;50068:21;50083:5;50068:21;:::i;:::-;50061:5;50058:32;50048:60;;50104:1;50101;50094:12;50048:60;49998:116;:::o;50120:120::-;50192:23;50209:5;50192:23;:::i;:::-;50185:5;50182:34;50172:62;;50230:1;50227;50220:12;50172:62;50120:120;:::o;50246:122::-;50319:24;50337:5;50319:24;:::i;:::-;50312:5;50309:35;50299:63;;50358:1;50355;50348:12;50299:63;50246:122;:::o

Swarm Source

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