ETH Price: $3,108.81 (+1.09%)
Gas: 7 Gwei

Token

One Donuts (ONEDONUTS)
 

Overview

Max Total Supply

1,124 ONEDONUTS

Holders

426

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 ONEDONUTS
0x4Fdb1a0c938D374d1c4c41774e0432db52784D21
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:
Donuts

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-01
*/

/**
 *Submitted for verification at Etherscan.io on 2021-08-31
*/

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);
}





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;
    }
}


pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}



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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}





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);
}




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;
}


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);
}


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);
}



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}. 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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    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` 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 { }
}


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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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();
    }
}


pragma solidity ^0.8.0;


contract Donuts is ERC721Enumerable, Ownable {

    using Strings for uint256;

    string _baseTokenURI;
    uint256 private _reserved = 100;
    uint256 private _price = 0.04 ether;
    bool public _paused = true;

    address t1 = 0xc18b211b9411B6655CdfD55A4EAbC4D9D2D62291;
    address t2 = 0xa458B7374376B7d6AAB1d66a3ff4e0070F71DA0a;
    address t3 = 0x120f6521592154E710939f9D19f6C7B3fd29F9a0;
    address t4 = 0x09395ff0FC25F72DFca41a72E393A0f92D289c8F;

    constructor(string memory baseURI) ERC721("One Donuts", "ONEDONUTS")  {
        setBaseURI(baseURI);
        _safeMint( t1, 0);
        _safeMint( t2, 1);
        _safeMint( t3, 2);
        _safeMint( t4, 3);
    }

    function adopt(uint256 num) public payable {
        uint256 supply = totalSupply();
        require( !_paused,                              "Baking paused" );
        require( num < 21,                              "You can bake a maximum of 20 Donuts" );
        require( supply + num < 5000 - _reserved,      "Exceeds maximum Donuts supply" );
        require( msg.value >= _price * num,             "Ether sent is not correct" );

        for(uint256 i; i < num; i++){
            _safeMint( msg.sender, supply + i );
        }
    }

    function walletOfOwner(address _owner) public view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

    function setPrice(uint256 _newPrice) public onlyOwner() {
        _price = _newPrice;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }

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

    function getPrice() public view returns (uint256){
        return _price;
    }

    function giveAway(address _to, uint256 _amount) external onlyOwner() {
        require( _amount <= _reserved, "Exceeds reserved Donuts supply" );

        uint256 supply = totalSupply();
        for(uint256 i; i < _amount; i++){
            _safeMint( _to, supply + i );
        }

        _reserved -= _amount;
    }

    function pause(bool val) public onlyOwner {
        _paused = val;
    }

    function withdrawAll() public payable onlyOwner {
        uint256 _each = address(this).balance / 4;
        require(payable(t1).send(_each));
        require(payable(t2).send(_each));
        require(payable(t3).send(_each));
        require(payable(t4).send(_each));
    }
}

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":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"adopt","outputs":[],"stateMutability":"payable","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":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","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":"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":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526064600c55668e1bc9bf040000600d556001600e60006101000a81548160ff02191690831515021790555073c18b211b9411b6655cdfd55a4eabc4d9d2d62291600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a458b7374376b7d6aab1d66a3ff4e0070f71da0a600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073120f6521592154e710939f9d19f6c7b3fd29f9a0601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507309395ff0fc25f72dfca41a72e393a0f92d289c8f601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200019057600080fd5b50604051620058b5380380620058b58339818101604052810190620001b6919062001089565b6040518060400160405280600a81526020017f4f6e6520446f6e757473000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f4f4e45444f4e555453000000000000000000000000000000000000000000000081525081600090805190602001906200023a92919062000f24565b5080600190805190602001906200025392919062000f24565b505050600062000268620003f360201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200031881620003fb60201b60201c565b6200034d600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000620004a660201b60201c565b62000382600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004a660201b60201c565b620003b7601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002620004a660201b60201c565b620003ec601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003620004a660201b60201c565b506200167f565b600033905090565b6200040b620003f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000431620004cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200048a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200048190620013a3565b60405180910390fd5b80600b9080519060200190620004a292919062000f24565b5050565b620004c8828260405180602001604052806000815250620004f660201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200050883836200056460201b60201c565b6200051d60008484846200074a60201b60201c565b6200055f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000556906200131b565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005ce9062001381565b60405180910390fd5b620005e8816200090460201b60201c565b156200062b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000622906200133d565b60405180910390fd5b6200063f600083836200097060201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000691919062001459565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620007788473ffffffffffffffffffffffffffffffffffffffff1662000ab760201b62001ad71760201c565b15620008f7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620007aa620003f360201b60201c565b8786866040518563ffffffff1660e01b8152600401620007ce9493929190620012c7565b602060405180830381600087803b158015620007e957600080fd5b505af19250505080156200081d57506040513d601f19601f820116820180604052508101906200081a91906200105d565b60015b620008a6573d806000811462000850576040519150601f19603f3d011682016040523d82523d6000602084013e62000855565b606091505b506000815114156200089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000895906200131b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620008fc565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200098883838362000aca60201b62001aea1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620009d557620009cf8162000acf60201b60201c565b62000a1d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000a1c5762000a1b838262000b1860201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a6a5762000a648162000c9560201b60201c565b62000ab2565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000ab15762000ab0828262000ddd60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000b328462000e6960201b62000e1a1760201c565b62000b3e9190620014b6565b905060006007600084815260200190815260200160002054905081811462000c24576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000cab9190620014b6565b905060006009600084815260200190815260200160002054905060006008838154811062000d02577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000d4b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000dc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000df58362000e6960201b62000e1a1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000edd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ed4906200135f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000f329062001591565b90600052602060002090601f01602090048101928262000f56576000855562000fa2565b82601f1062000f7157805160ff191683800117855562000fa2565b8280016001018555821562000fa2579182015b8281111562000fa157825182559160200191906001019062000f84565b5b50905062000fb1919062000fb5565b5090565b5b8082111562000fd057600081600090555060010162000fb6565b5090565b600062000feb62000fe584620013f9565b620013c5565b9050828152602081018484840111156200100457600080fd5b620010118482856200155b565b509392505050565b6000815190506200102a8162001665565b92915050565b600082601f8301126200104257600080fd5b81516200105484826020860162000fd4565b91505092915050565b6000602082840312156200107057600080fd5b6000620010808482850162001019565b91505092915050565b6000602082840312156200109c57600080fd5b600082015167ffffffffffffffff811115620010b757600080fd5b620010c58482850162001030565b91505092915050565b620010d981620014f1565b82525050565b6000620010ec826200142c565b620010f8818562001437565b93506200110a8185602086016200155b565b620011158162001654565b840191505092915050565b60006200112f60328362001448565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600062001197601c8362001448565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000620011d9602a8362001448565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006200124160208362001448565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006200128360208362001448565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b620012c18162001551565b82525050565b6000608082019050620012de6000830187620010ce565b620012ed6020830186620010ce565b620012fc6040830185620012b6565b8181036060830152620013108184620010df565b905095945050505050565b60006020820190508181036000830152620013368162001120565b9050919050565b60006020820190508181036000830152620013588162001188565b9050919050565b600060208201905081810360008301526200137a81620011ca565b9050919050565b600060208201905081810360008301526200139c8162001232565b9050919050565b60006020820190508181036000830152620013be8162001274565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620013ef57620013ee62001625565b5b8060405250919050565b600067ffffffffffffffff82111562001417576200141662001625565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620014668262001551565b9150620014738362001551565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620014ab57620014aa620015c7565b5b828201905092915050565b6000620014c38262001551565b9150620014d08362001551565b925082821015620014e657620014e5620015c7565b5b828203905092915050565b6000620014fe8262001531565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200157b5780820151818401526020810190506200155e565b838111156200158b576000848401525b50505050565b60006002820490506001821680620015aa57607f821691505b60208210811415620015c157620015c0620015f6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b620016708162001505565b81146200167c57600080fd5b50565b614226806200168f6000396000f3fe6080604052600436106101b75760003560e01c806370a08231116100ec57806398d5fdca1161008a578063c87b56dd11610064578063c87b56dd146105ee578063ca8001441461062b578063e985e9c514610654578063f2fde38b14610691576101b7565b806398d5fdca14610571578063a22cb4651461059c578063b88d4fde146105c5576101b7565b80638588b2c5116100c65780638588b2c5146104d65780638da5cb5b146104f257806391b7f5ed1461051d57806395d89b4114610546576101b7565b806370a0823114610478578063715018a6146104b5578063853828b6146104cc576101b7565b806323b872dd11610159578063438b630011610133578063438b6300146103985780634f6ccce7146103d557806355f804b3146104125780636352211e1461043b576101b7565b806323b872dd146103095780632f745c591461033257806342842e0e1461036f576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a57806316c61ccc146102b357806318160ddd146102de576101b7565b806301ffc9a7146101bc57806302329a29146101f957806306fdde0314610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612f53565b6106ba565b6040516101f09190613a0b565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190612f2a565b610734565b005b34801561022e57600080fd5b506102376107cd565b6040516102449190613a26565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612fe6565b61085f565b6040516102819190613982565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190612eee565b6108e4565b005b3480156102bf57600080fd5b506102c86109fc565b6040516102d59190613a0b565b60405180910390f35b3480156102ea57600080fd5b506102f3610a0f565b6040516103009190613d28565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190612de8565b610a1c565b005b34801561033e57600080fd5b5061035960048036038101906103549190612eee565b610a7c565b6040516103669190613d28565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612de8565b610b21565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d83565b610b41565b6040516103cc91906139e9565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190612fe6565b610c3b565b6040516104099190613d28565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190612fa5565b610cd2565b005b34801561044757600080fd5b50610462600480360381019061045d9190612fe6565b610d68565b60405161046f9190613982565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190612d83565b610e1a565b6040516104ac9190613d28565b60405180910390f35b3480156104c157600080fd5b506104ca610ed2565b005b6104d461100f565b005b6104f060048036038101906104eb9190612fe6565b61121f565b005b3480156104fe57600080fd5b506105076113a2565b6040516105149190613982565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190612fe6565b6113cc565b005b34801561055257600080fd5b5061055b611452565b6040516105689190613a26565b60405180910390f35b34801561057d57600080fd5b506105866114e4565b6040516105939190613d28565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be9190612eb2565b6114ee565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190612e37565b61166f565b005b3480156105fa57600080fd5b5061061560048036038101906106109190612fe6565b6116d1565b6040516106229190613a26565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190612eee565b611778565b005b34801561066057600080fd5b5061067b60048036038101906106769190612dac565b611897565b6040516106889190613a0b565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190612d83565b61192b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072d575061072c82611aef565b5b9050919050565b61073c611bd1565b73ffffffffffffffffffffffffffffffffffffffff1661075a6113a2565b73ffffffffffffffffffffffffffffffffffffffff16146107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a790613c08565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600080546107dc9061401b565b80601f01602080910402602001604051908101604052809291908181526020018280546108089061401b565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b5050505050905090565b600061086a82611bd9565b6108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090613be8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ef82610d68565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095790613c68565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661097f611bd1565b73ffffffffffffffffffffffffffffffffffffffff1614806109ae57506109ad816109a8611bd1565b611897565b5b6109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490613b48565b60405180910390fd5b6109f78383611c45565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610a2d610a27611bd1565b82611cfe565b610a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6390613ca8565b60405180910390fd5b610a77838383611ddc565b505050565b6000610a8783610e1a565b8210610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf90613a48565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b3c8383836040518060200160405280600081525061166f565b505050565b60606000610b4e83610e1a565b905060008167ffffffffffffffff811115610b92577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bc05781602001602082028036833780820191505090505b50905060005b82811015610c3057610bd88582610a7c565b828281518110610c11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610c289061404d565b915050610bc6565b508092505050919050565b6000610c45610a0f565b8210610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d90613cc8565b60405180910390fd5b60088281548110610cc0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610cda611bd1565b73ffffffffffffffffffffffffffffffffffffffff16610cf86113a2565b73ffffffffffffffffffffffffffffffffffffffff1614610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4590613c08565b60405180910390fd5b80600b9080519060200190610d64929190612ba7565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890613b88565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8290613b68565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610eda611bd1565b73ffffffffffffffffffffffffffffffffffffffff16610ef86113a2565b73ffffffffffffffffffffffffffffffffffffffff1614610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590613c08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611017611bd1565b73ffffffffffffffffffffffffffffffffffffffff166110356113a2565b73ffffffffffffffffffffffffffffffffffffffff161461108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290613c08565b60405180910390fd5b600060044761109a9190613ea6565b9050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110fc57600080fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061115c57600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506111bc57600080fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061121c57600080fd5b50565b6000611229610a0f565b9050600e60009054906101000a900460ff161561127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290613ba8565b60405180910390fd5b601582106112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590613d08565b60405180910390fd5b600c546113886112ce9190613f31565b82826112da9190613e50565b1061131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613ce8565b60405180910390fd5b81600d546113289190613ed7565b34101561136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190613c88565b60405180910390fd5b60005b8281101561139d5761138a3382846113859190613e50565b612038565b80806113959061404d565b91505061136d565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113d4611bd1565b73ffffffffffffffffffffffffffffffffffffffff166113f26113a2565b73ffffffffffffffffffffffffffffffffffffffff1614611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f90613c08565b60405180910390fd5b80600d8190555050565b6060600180546114619061401b565b80601f016020809104026020016040519081016040528092919081815260200182805461148d9061401b565b80156114da5780601f106114af576101008083540402835291602001916114da565b820191906000526020600020905b8154815290600101906020018083116114bd57829003601f168201915b5050505050905090565b6000600d54905090565b6114f6611bd1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90613b08565b60405180910390fd5b8060056000611571611bd1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661161e611bd1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116639190613a0b565b60405180910390a35050565b61168061167a611bd1565b83611cfe565b6116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b690613ca8565b60405180910390fd5b6116cb84848484612056565b50505050565b60606116dc82611bd9565b61171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290613c48565b60405180910390fd5b60006117256120b2565b905060008151116117455760405180602001604052806000815250611770565b8061174f84612144565b60405160200161176092919061395e565b6040516020818303038152906040525b915050919050565b611780611bd1565b73ffffffffffffffffffffffffffffffffffffffff1661179e6113a2565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90613c08565b60405180910390fd5b600c54811115611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090613aa8565b60405180910390fd5b6000611843610a0f565b905060005b82811015611878576118658482846118609190613e50565b612038565b80806118709061404d565b915050611848565b5081600c600082825461188b9190613f31565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611933611bd1565b73ffffffffffffffffffffffffffffffffffffffff166119516113a2565b73ffffffffffffffffffffffffffffffffffffffff16146119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e90613c08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e90613a88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bca5750611bc9826122f1565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cb883610d68565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d0982611bd9565b611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613b28565b60405180910390fd5b6000611d5383610d68565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dc257508373ffffffffffffffffffffffffffffffffffffffff16611daa8461085f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611dd35750611dd28185611897565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611dfc82610d68565b73ffffffffffffffffffffffffffffffffffffffff1614611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990613c28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990613ae8565b60405180910390fd5b611ecd83838361235b565b611ed8600082611c45565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f289190613f31565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f7f9190613e50565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61205282826040518060200160405280600081525061246f565b5050565b612061848484611ddc565b61206d848484846124ca565b6120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390613a68565b60405180910390fd5b50505050565b6060600b80546120c19061401b565b80601f01602080910402602001604051908101604052809291908181526020018280546120ed9061401b565b801561213a5780601f1061210f5761010080835404028352916020019161213a565b820191906000526020600020905b81548152906001019060200180831161211d57829003601f168201915b5050505050905090565b6060600082141561218c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122ec565b600082905060005b600082146121be5780806121a79061404d565b915050600a826121b79190613ea6565b9150612194565b60008167ffffffffffffffff811115612200577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156122325781602001600182028036833780820191505090505b5090505b600085146122e55760018261224b9190613f31565b9150600a8561225a9190614096565b60306122669190613e50565b60f81b8183815181106122a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122de9190613ea6565b9450612236565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612366838383611aea565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a9576123a481612661565b6123e8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123e7576123e683826126aa565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561242b5761242681612817565b61246a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461246957612468828261295a565b5b5b505050565b61247983836129d9565b61248660008484846124ca565b6124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90613a68565b60405180910390fd5b505050565b60006124eb8473ffffffffffffffffffffffffffffffffffffffff16611ad7565b15612654578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612514611bd1565b8786866040518563ffffffff1660e01b8152600401612536949392919061399d565b602060405180830381600087803b15801561255057600080fd5b505af192505050801561258157506040513d601f19601f8201168201806040525081019061257e9190612f7c565b60015b612604573d80600081146125b1576040519150601f19603f3d011682016040523d82523d6000602084013e6125b6565b606091505b506000815114156125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f390613a68565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612659565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126b784610e1a565b6126c19190613f31565b90506000600760008481526020019081526020016000205490508181146127a6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061282b9190613f31565b9050600060096000848152602001908152602001600020549050600060088381548110612881577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106128c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061293e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061296583610e1a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090613bc8565b60405180910390fd5b612a5281611bd9565b15612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8990613ac8565b60405180910390fd5b612a9e6000838361235b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aee9190613e50565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612bb39061401b565b90600052602060002090601f016020900481019282612bd55760008555612c1c565b82601f10612bee57805160ff1916838001178555612c1c565b82800160010185558215612c1c579182015b82811115612c1b578251825591602001919060010190612c00565b5b509050612c299190612c2d565b5090565b5b80821115612c46576000816000905550600101612c2e565b5090565b6000612c5d612c5884613d74565b613d43565b905082815260208101848484011115612c7557600080fd5b612c80848285613fd9565b509392505050565b6000612c9b612c9684613da4565b613d43565b905082815260208101848484011115612cb357600080fd5b612cbe848285613fd9565b509392505050565b600081359050612cd581614194565b92915050565b600081359050612cea816141ab565b92915050565b600081359050612cff816141c2565b92915050565b600081519050612d14816141c2565b92915050565b600082601f830112612d2b57600080fd5b8135612d3b848260208601612c4a565b91505092915050565b600082601f830112612d5557600080fd5b8135612d65848260208601612c88565b91505092915050565b600081359050612d7d816141d9565b92915050565b600060208284031215612d9557600080fd5b6000612da384828501612cc6565b91505092915050565b60008060408385031215612dbf57600080fd5b6000612dcd85828601612cc6565b9250506020612dde85828601612cc6565b9150509250929050565b600080600060608486031215612dfd57600080fd5b6000612e0b86828701612cc6565b9350506020612e1c86828701612cc6565b9250506040612e2d86828701612d6e565b9150509250925092565b60008060008060808587031215612e4d57600080fd5b6000612e5b87828801612cc6565b9450506020612e6c87828801612cc6565b9350506040612e7d87828801612d6e565b925050606085013567ffffffffffffffff811115612e9a57600080fd5b612ea687828801612d1a565b91505092959194509250565b60008060408385031215612ec557600080fd5b6000612ed385828601612cc6565b9250506020612ee485828601612cdb565b9150509250929050565b60008060408385031215612f0157600080fd5b6000612f0f85828601612cc6565b9250506020612f2085828601612d6e565b9150509250929050565b600060208284031215612f3c57600080fd5b6000612f4a84828501612cdb565b91505092915050565b600060208284031215612f6557600080fd5b6000612f7384828501612cf0565b91505092915050565b600060208284031215612f8e57600080fd5b6000612f9c84828501612d05565b91505092915050565b600060208284031215612fb757600080fd5b600082013567ffffffffffffffff811115612fd157600080fd5b612fdd84828501612d44565b91505092915050565b600060208284031215612ff857600080fd5b600061300684828501612d6e565b91505092915050565b600061301b8383613940565b60208301905092915050565b61303081613f65565b82525050565b600061304182613de4565b61304b8185613e12565b935061305683613dd4565b8060005b8381101561308757815161306e888261300f565b975061307983613e05565b92505060018101905061305a565b5085935050505092915050565b61309d81613f77565b82525050565b60006130ae82613def565b6130b88185613e23565b93506130c8818560208601613fe8565b6130d181614183565b840191505092915050565b60006130e782613dfa565b6130f18185613e34565b9350613101818560208601613fe8565b61310a81614183565b840191505092915050565b600061312082613dfa565b61312a8185613e45565b935061313a818560208601613fe8565b80840191505092915050565b6000613153602b83613e34565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006131b9603283613e34565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061321f602683613e34565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613285601e83613e34565b91507f4578636565647320726573657276656420446f6e75747320737570706c7900006000830152602082019050919050565b60006132c5601c83613e34565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613305602483613e34565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061336b601983613e34565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006133ab602c83613e34565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613411603883613e34565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613477602a83613e34565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006134dd602983613e34565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613543600d83613e34565b91507f42616b696e6720706175736564000000000000000000000000000000000000006000830152602082019050919050565b6000613583602083613e34565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006135c3602c83613e34565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613629602083613e34565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613669602983613e34565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006136cf602f83613e34565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613735602183613e34565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061379b601983613e34565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b60006137db603183613e34565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613841602c83613e34565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006138a7601d83613e34565b91507f45786365656473206d6178696d756d20446f6e75747320737570706c790000006000830152602082019050919050565b60006138e7602383613e34565b91507f596f752063616e2062616b652061206d6178696d756d206f6620323020446f6e60008301527f75747300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61394981613fcf565b82525050565b61395881613fcf565b82525050565b600061396a8285613115565b91506139768284613115565b91508190509392505050565b60006020820190506139976000830184613027565b92915050565b60006080820190506139b26000830187613027565b6139bf6020830186613027565b6139cc604083018561394f565b81810360608301526139de81846130a3565b905095945050505050565b60006020820190508181036000830152613a038184613036565b905092915050565b6000602082019050613a206000830184613094565b92915050565b60006020820190508181036000830152613a4081846130dc565b905092915050565b60006020820190508181036000830152613a6181613146565b9050919050565b60006020820190508181036000830152613a81816131ac565b9050919050565b60006020820190508181036000830152613aa181613212565b9050919050565b60006020820190508181036000830152613ac181613278565b9050919050565b60006020820190508181036000830152613ae1816132b8565b9050919050565b60006020820190508181036000830152613b01816132f8565b9050919050565b60006020820190508181036000830152613b218161335e565b9050919050565b60006020820190508181036000830152613b418161339e565b9050919050565b60006020820190508181036000830152613b6181613404565b9050919050565b60006020820190508181036000830152613b818161346a565b9050919050565b60006020820190508181036000830152613ba1816134d0565b9050919050565b60006020820190508181036000830152613bc181613536565b9050919050565b60006020820190508181036000830152613be181613576565b9050919050565b60006020820190508181036000830152613c01816135b6565b9050919050565b60006020820190508181036000830152613c218161361c565b9050919050565b60006020820190508181036000830152613c418161365c565b9050919050565b60006020820190508181036000830152613c61816136c2565b9050919050565b60006020820190508181036000830152613c8181613728565b9050919050565b60006020820190508181036000830152613ca18161378e565b9050919050565b60006020820190508181036000830152613cc1816137ce565b9050919050565b60006020820190508181036000830152613ce181613834565b9050919050565b60006020820190508181036000830152613d018161389a565b9050919050565b60006020820190508181036000830152613d21816138da565b9050919050565b6000602082019050613d3d600083018461394f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613d6a57613d69614154565b5b8060405250919050565b600067ffffffffffffffff821115613d8f57613d8e614154565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613dbf57613dbe614154565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e5b82613fcf565b9150613e6683613fcf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e9b57613e9a6140c7565b5b828201905092915050565b6000613eb182613fcf565b9150613ebc83613fcf565b925082613ecc57613ecb6140f6565b5b828204905092915050565b6000613ee282613fcf565b9150613eed83613fcf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f2657613f256140c7565b5b828202905092915050565b6000613f3c82613fcf565b9150613f4783613fcf565b925082821015613f5a57613f596140c7565b5b828203905092915050565b6000613f7082613faf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614006578082015181840152602081019050613feb565b83811115614015576000848401525b50505050565b6000600282049050600182168061403357607f821691505b6020821081141561404757614046614125565b5b50919050565b600061405882613fcf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561408b5761408a6140c7565b5b600182019050919050565b60006140a182613fcf565b91506140ac83613fcf565b9250826140bc576140bb6140f6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61419d81613f65565b81146141a857600080fd5b50565b6141b481613f77565b81146141bf57600080fd5b50565b6141cb81613f83565b81146141d657600080fd5b50565b6141e281613fcf565b81146141ed57600080fd5b5056fea2646970667358221220a7a120600fd0cf453fe8cda9127d72acd6c15c5cf814c6e60d03a623bc9c76cf64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6170692e646f6e7574732e6f6e652f6170692f646f6e75742f00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101b75760003560e01c806370a08231116100ec57806398d5fdca1161008a578063c87b56dd11610064578063c87b56dd146105ee578063ca8001441461062b578063e985e9c514610654578063f2fde38b14610691576101b7565b806398d5fdca14610571578063a22cb4651461059c578063b88d4fde146105c5576101b7565b80638588b2c5116100c65780638588b2c5146104d65780638da5cb5b146104f257806391b7f5ed1461051d57806395d89b4114610546576101b7565b806370a0823114610478578063715018a6146104b5578063853828b6146104cc576101b7565b806323b872dd11610159578063438b630011610133578063438b6300146103985780634f6ccce7146103d557806355f804b3146104125780636352211e1461043b576101b7565b806323b872dd146103095780632f745c591461033257806342842e0e1461036f576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a57806316c61ccc146102b357806318160ddd146102de576101b7565b806301ffc9a7146101bc57806302329a29146101f957806306fdde0314610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612f53565b6106ba565b6040516101f09190613a0b565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190612f2a565b610734565b005b34801561022e57600080fd5b506102376107cd565b6040516102449190613a26565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612fe6565b61085f565b6040516102819190613982565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190612eee565b6108e4565b005b3480156102bf57600080fd5b506102c86109fc565b6040516102d59190613a0b565b60405180910390f35b3480156102ea57600080fd5b506102f3610a0f565b6040516103009190613d28565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190612de8565b610a1c565b005b34801561033e57600080fd5b5061035960048036038101906103549190612eee565b610a7c565b6040516103669190613d28565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612de8565b610b21565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d83565b610b41565b6040516103cc91906139e9565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190612fe6565b610c3b565b6040516104099190613d28565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190612fa5565b610cd2565b005b34801561044757600080fd5b50610462600480360381019061045d9190612fe6565b610d68565b60405161046f9190613982565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190612d83565b610e1a565b6040516104ac9190613d28565b60405180910390f35b3480156104c157600080fd5b506104ca610ed2565b005b6104d461100f565b005b6104f060048036038101906104eb9190612fe6565b61121f565b005b3480156104fe57600080fd5b506105076113a2565b6040516105149190613982565b60405180910390f35b34801561052957600080fd5b50610544600480360381019061053f9190612fe6565b6113cc565b005b34801561055257600080fd5b5061055b611452565b6040516105689190613a26565b60405180910390f35b34801561057d57600080fd5b506105866114e4565b6040516105939190613d28565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be9190612eb2565b6114ee565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190612e37565b61166f565b005b3480156105fa57600080fd5b5061061560048036038101906106109190612fe6565b6116d1565b6040516106229190613a26565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190612eee565b611778565b005b34801561066057600080fd5b5061067b60048036038101906106769190612dac565b611897565b6040516106889190613a0b565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190612d83565b61192b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072d575061072c82611aef565b5b9050919050565b61073c611bd1565b73ffffffffffffffffffffffffffffffffffffffff1661075a6113a2565b73ffffffffffffffffffffffffffffffffffffffff16146107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a790613c08565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600080546107dc9061401b565b80601f01602080910402602001604051908101604052809291908181526020018280546108089061401b565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b5050505050905090565b600061086a82611bd9565b6108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090613be8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ef82610d68565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095790613c68565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661097f611bd1565b73ffffffffffffffffffffffffffffffffffffffff1614806109ae57506109ad816109a8611bd1565b611897565b5b6109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490613b48565b60405180910390fd5b6109f78383611c45565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610a2d610a27611bd1565b82611cfe565b610a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6390613ca8565b60405180910390fd5b610a77838383611ddc565b505050565b6000610a8783610e1a565b8210610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf90613a48565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b3c8383836040518060200160405280600081525061166f565b505050565b60606000610b4e83610e1a565b905060008167ffffffffffffffff811115610b92577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610bc05781602001602082028036833780820191505090505b50905060005b82811015610c3057610bd88582610a7c565b828281518110610c11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610c289061404d565b915050610bc6565b508092505050919050565b6000610c45610a0f565b8210610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d90613cc8565b60405180910390fd5b60088281548110610cc0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610cda611bd1565b73ffffffffffffffffffffffffffffffffffffffff16610cf86113a2565b73ffffffffffffffffffffffffffffffffffffffff1614610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4590613c08565b60405180910390fd5b80600b9080519060200190610d64929190612ba7565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890613b88565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8290613b68565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610eda611bd1565b73ffffffffffffffffffffffffffffffffffffffff16610ef86113a2565b73ffffffffffffffffffffffffffffffffffffffff1614610f4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4590613c08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611017611bd1565b73ffffffffffffffffffffffffffffffffffffffff166110356113a2565b73ffffffffffffffffffffffffffffffffffffffff161461108b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108290613c08565b60405180910390fd5b600060044761109a9190613ea6565b9050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506110fc57600080fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061115c57600080fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506111bc57600080fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505061121c57600080fd5b50565b6000611229610a0f565b9050600e60009054906101000a900460ff161561127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290613ba8565b60405180910390fd5b601582106112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590613d08565b60405180910390fd5b600c546113886112ce9190613f31565b82826112da9190613e50565b1061131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613ce8565b60405180910390fd5b81600d546113289190613ed7565b34101561136a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136190613c88565b60405180910390fd5b60005b8281101561139d5761138a3382846113859190613e50565b612038565b80806113959061404d565b91505061136d565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113d4611bd1565b73ffffffffffffffffffffffffffffffffffffffff166113f26113a2565b73ffffffffffffffffffffffffffffffffffffffff1614611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f90613c08565b60405180910390fd5b80600d8190555050565b6060600180546114619061401b565b80601f016020809104026020016040519081016040528092919081815260200182805461148d9061401b565b80156114da5780601f106114af576101008083540402835291602001916114da565b820191906000526020600020905b8154815290600101906020018083116114bd57829003601f168201915b5050505050905090565b6000600d54905090565b6114f6611bd1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155b90613b08565b60405180910390fd5b8060056000611571611bd1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661161e611bd1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116639190613a0b565b60405180910390a35050565b61168061167a611bd1565b83611cfe565b6116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b690613ca8565b60405180910390fd5b6116cb84848484612056565b50505050565b60606116dc82611bd9565b61171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290613c48565b60405180910390fd5b60006117256120b2565b905060008151116117455760405180602001604052806000815250611770565b8061174f84612144565b60405160200161176092919061395e565b6040516020818303038152906040525b915050919050565b611780611bd1565b73ffffffffffffffffffffffffffffffffffffffff1661179e6113a2565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90613c08565b60405180910390fd5b600c54811115611839576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183090613aa8565b60405180910390fd5b6000611843610a0f565b905060005b82811015611878576118658482846118609190613e50565b612038565b80806118709061404d565b915050611848565b5081600c600082825461188b9190613f31565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611933611bd1565b73ffffffffffffffffffffffffffffffffffffffff166119516113a2565b73ffffffffffffffffffffffffffffffffffffffff16146119a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e90613c08565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e90613a88565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611bba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bca5750611bc9826122f1565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611cb883610d68565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d0982611bd9565b611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f90613b28565b60405180910390fd5b6000611d5383610d68565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611dc257508373ffffffffffffffffffffffffffffffffffffffff16611daa8461085f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611dd35750611dd28185611897565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611dfc82610d68565b73ffffffffffffffffffffffffffffffffffffffff1614611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990613c28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990613ae8565b60405180910390fd5b611ecd83838361235b565b611ed8600082611c45565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f289190613f31565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f7f9190613e50565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61205282826040518060200160405280600081525061246f565b5050565b612061848484611ddc565b61206d848484846124ca565b6120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390613a68565b60405180910390fd5b50505050565b6060600b80546120c19061401b565b80601f01602080910402602001604051908101604052809291908181526020018280546120ed9061401b565b801561213a5780601f1061210f5761010080835404028352916020019161213a565b820191906000526020600020905b81548152906001019060200180831161211d57829003601f168201915b5050505050905090565b6060600082141561218c576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122ec565b600082905060005b600082146121be5780806121a79061404d565b915050600a826121b79190613ea6565b9150612194565b60008167ffffffffffffffff811115612200577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156122325781602001600182028036833780820191505090505b5090505b600085146122e55760018261224b9190613f31565b9150600a8561225a9190614096565b60306122669190613e50565b60f81b8183815181106122a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122de9190613ea6565b9450612236565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612366838383611aea565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a9576123a481612661565b6123e8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123e7576123e683826126aa565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561242b5761242681612817565b61246a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461246957612468828261295a565b5b5b505050565b61247983836129d9565b61248660008484846124ca565b6124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90613a68565b60405180910390fd5b505050565b60006124eb8473ffffffffffffffffffffffffffffffffffffffff16611ad7565b15612654578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612514611bd1565b8786866040518563ffffffff1660e01b8152600401612536949392919061399d565b602060405180830381600087803b15801561255057600080fd5b505af192505050801561258157506040513d601f19601f8201168201806040525081019061257e9190612f7c565b60015b612604573d80600081146125b1576040519150601f19603f3d011682016040523d82523d6000602084013e6125b6565b606091505b506000815114156125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f390613a68565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612659565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126b784610e1a565b6126c19190613f31565b90506000600760008481526020019081526020016000205490508181146127a6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061282b9190613f31565b9050600060096000848152602001908152602001600020549050600060088381548110612881577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106128c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061293e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061296583610e1a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4090613bc8565b60405180910390fd5b612a5281611bd9565b15612a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8990613ac8565b60405180910390fd5b612a9e6000838361235b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aee9190613e50565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612bb39061401b565b90600052602060002090601f016020900481019282612bd55760008555612c1c565b82601f10612bee57805160ff1916838001178555612c1c565b82800160010185558215612c1c579182015b82811115612c1b578251825591602001919060010190612c00565b5b509050612c299190612c2d565b5090565b5b80821115612c46576000816000905550600101612c2e565b5090565b6000612c5d612c5884613d74565b613d43565b905082815260208101848484011115612c7557600080fd5b612c80848285613fd9565b509392505050565b6000612c9b612c9684613da4565b613d43565b905082815260208101848484011115612cb357600080fd5b612cbe848285613fd9565b509392505050565b600081359050612cd581614194565b92915050565b600081359050612cea816141ab565b92915050565b600081359050612cff816141c2565b92915050565b600081519050612d14816141c2565b92915050565b600082601f830112612d2b57600080fd5b8135612d3b848260208601612c4a565b91505092915050565b600082601f830112612d5557600080fd5b8135612d65848260208601612c88565b91505092915050565b600081359050612d7d816141d9565b92915050565b600060208284031215612d9557600080fd5b6000612da384828501612cc6565b91505092915050565b60008060408385031215612dbf57600080fd5b6000612dcd85828601612cc6565b9250506020612dde85828601612cc6565b9150509250929050565b600080600060608486031215612dfd57600080fd5b6000612e0b86828701612cc6565b9350506020612e1c86828701612cc6565b9250506040612e2d86828701612d6e565b9150509250925092565b60008060008060808587031215612e4d57600080fd5b6000612e5b87828801612cc6565b9450506020612e6c87828801612cc6565b9350506040612e7d87828801612d6e565b925050606085013567ffffffffffffffff811115612e9a57600080fd5b612ea687828801612d1a565b91505092959194509250565b60008060408385031215612ec557600080fd5b6000612ed385828601612cc6565b9250506020612ee485828601612cdb565b9150509250929050565b60008060408385031215612f0157600080fd5b6000612f0f85828601612cc6565b9250506020612f2085828601612d6e565b9150509250929050565b600060208284031215612f3c57600080fd5b6000612f4a84828501612cdb565b91505092915050565b600060208284031215612f6557600080fd5b6000612f7384828501612cf0565b91505092915050565b600060208284031215612f8e57600080fd5b6000612f9c84828501612d05565b91505092915050565b600060208284031215612fb757600080fd5b600082013567ffffffffffffffff811115612fd157600080fd5b612fdd84828501612d44565b91505092915050565b600060208284031215612ff857600080fd5b600061300684828501612d6e565b91505092915050565b600061301b8383613940565b60208301905092915050565b61303081613f65565b82525050565b600061304182613de4565b61304b8185613e12565b935061305683613dd4565b8060005b8381101561308757815161306e888261300f565b975061307983613e05565b92505060018101905061305a565b5085935050505092915050565b61309d81613f77565b82525050565b60006130ae82613def565b6130b88185613e23565b93506130c8818560208601613fe8565b6130d181614183565b840191505092915050565b60006130e782613dfa565b6130f18185613e34565b9350613101818560208601613fe8565b61310a81614183565b840191505092915050565b600061312082613dfa565b61312a8185613e45565b935061313a818560208601613fe8565b80840191505092915050565b6000613153602b83613e34565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006131b9603283613e34565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061321f602683613e34565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613285601e83613e34565b91507f4578636565647320726573657276656420446f6e75747320737570706c7900006000830152602082019050919050565b60006132c5601c83613e34565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613305602483613e34565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061336b601983613e34565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006133ab602c83613e34565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613411603883613e34565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613477602a83613e34565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b60006134dd602983613e34565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613543600d83613e34565b91507f42616b696e6720706175736564000000000000000000000000000000000000006000830152602082019050919050565b6000613583602083613e34565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006135c3602c83613e34565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613629602083613e34565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613669602983613e34565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006136cf602f83613e34565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613735602183613e34565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061379b601983613e34565b91507f45746865722073656e74206973206e6f7420636f7272656374000000000000006000830152602082019050919050565b60006137db603183613e34565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613841602c83613e34565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b60006138a7601d83613e34565b91507f45786365656473206d6178696d756d20446f6e75747320737570706c790000006000830152602082019050919050565b60006138e7602383613e34565b91507f596f752063616e2062616b652061206d6178696d756d206f6620323020446f6e60008301527f75747300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61394981613fcf565b82525050565b61395881613fcf565b82525050565b600061396a8285613115565b91506139768284613115565b91508190509392505050565b60006020820190506139976000830184613027565b92915050565b60006080820190506139b26000830187613027565b6139bf6020830186613027565b6139cc604083018561394f565b81810360608301526139de81846130a3565b905095945050505050565b60006020820190508181036000830152613a038184613036565b905092915050565b6000602082019050613a206000830184613094565b92915050565b60006020820190508181036000830152613a4081846130dc565b905092915050565b60006020820190508181036000830152613a6181613146565b9050919050565b60006020820190508181036000830152613a81816131ac565b9050919050565b60006020820190508181036000830152613aa181613212565b9050919050565b60006020820190508181036000830152613ac181613278565b9050919050565b60006020820190508181036000830152613ae1816132b8565b9050919050565b60006020820190508181036000830152613b01816132f8565b9050919050565b60006020820190508181036000830152613b218161335e565b9050919050565b60006020820190508181036000830152613b418161339e565b9050919050565b60006020820190508181036000830152613b6181613404565b9050919050565b60006020820190508181036000830152613b818161346a565b9050919050565b60006020820190508181036000830152613ba1816134d0565b9050919050565b60006020820190508181036000830152613bc181613536565b9050919050565b60006020820190508181036000830152613be181613576565b9050919050565b60006020820190508181036000830152613c01816135b6565b9050919050565b60006020820190508181036000830152613c218161361c565b9050919050565b60006020820190508181036000830152613c418161365c565b9050919050565b60006020820190508181036000830152613c61816136c2565b9050919050565b60006020820190508181036000830152613c8181613728565b9050919050565b60006020820190508181036000830152613ca18161378e565b9050919050565b60006020820190508181036000830152613cc1816137ce565b9050919050565b60006020820190508181036000830152613ce181613834565b9050919050565b60006020820190508181036000830152613d018161389a565b9050919050565b60006020820190508181036000830152613d21816138da565b9050919050565b6000602082019050613d3d600083018461394f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613d6a57613d69614154565b5b8060405250919050565b600067ffffffffffffffff821115613d8f57613d8e614154565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613dbf57613dbe614154565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e5b82613fcf565b9150613e6683613fcf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e9b57613e9a6140c7565b5b828201905092915050565b6000613eb182613fcf565b9150613ebc83613fcf565b925082613ecc57613ecb6140f6565b5b828204905092915050565b6000613ee282613fcf565b9150613eed83613fcf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f2657613f256140c7565b5b828202905092915050565b6000613f3c82613fcf565b9150613f4783613fcf565b925082821015613f5a57613f596140c7565b5b828203905092915050565b6000613f7082613faf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614006578082015181840152602081019050613feb565b83811115614015576000848401525b50505050565b6000600282049050600182168061403357607f821691505b6020821081141561404757614046614125565b5b50919050565b600061405882613fcf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561408b5761408a6140c7565b5b600182019050919050565b60006140a182613fcf565b91506140ac83613fcf565b9250826140bc576140bb6140f6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61419d81613f65565b81146141a857600080fd5b50565b6141b481613f77565b81146141bf57600080fd5b50565b6141cb81613f83565b81146141d657600080fd5b50565b6141e281613fcf565b81146141ed57600080fd5b5056fea2646970667358221220a7a120600fd0cf453fe8cda9127d72acd6c15c5cf814c6e60d03a623bc9c76cf64736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6170692e646f6e7574732e6f6e652f6170692f646f6e75742f00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://api.donuts.one/api/donut/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [2] : 68747470733a2f2f6170692e646f6e7574732e6f6e652f6170692f646f6e7574
Arg [3] : 2f00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42020:2734:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35862:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44389:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21899:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23359:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22896:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42215:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36515:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24249:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36183:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24625:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43283:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36705:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43856:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21593:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21323:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34465:148;;;;;;;;;;;;;:::i;:::-;;44471:280;;;:::i;:::-;;42728:547;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33814:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43633:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22068:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43966:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23652:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24847:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22243:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44055:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24018:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34768:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35862:237;35964:4;36003:35;35988:50;;;:11;:50;;;;:103;;;;36055:36;36079:11;36055:23;:36::i;:::-;35988:103;35981:110;;35862:237;;;:::o;44389:74::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44452:3:::1;44442:7;;:13;;;;;;;;;;;;;;;;;;44389:74:::0;:::o;21899:100::-;21953:13;21986:5;21979:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21899:100;:::o;23359:221::-;23435:7;23463:16;23471:7;23463;:16::i;:::-;23455:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23548:15;:24;23564:7;23548:24;;;;;;;;;;;;;;;;;;;;;23541:31;;23359:221;;;:::o;22896:397::-;22977:13;22993:23;23008:7;22993:14;:23::i;:::-;22977:39;;23041:5;23035:11;;:2;:11;;;;23027:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23121:5;23105:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23130:37;23147:5;23154:12;:10;:12::i;:::-;23130:16;:37::i;:::-;23105:62;23097:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;23264:21;23273:2;23277:7;23264:8;:21::i;:::-;22896:397;;;:::o;42215:26::-;;;;;;;;;;;;;:::o;36515:113::-;36576:7;36603:10;:17;;;;36596:24;;36515:113;:::o;24249:305::-;24410:41;24429:12;:10;:12::i;:::-;24443:7;24410:18;:41::i;:::-;24402:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24518:28;24528:4;24534:2;24538:7;24518:9;:28::i;:::-;24249:305;;;:::o;36183:256::-;36280:7;36316:23;36333:5;36316:16;:23::i;:::-;36308:5;:31;36300:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36405:12;:19;36418:5;36405:19;;;;;;;;;;;;;;;:26;36425:5;36405:26;;;;;;;;;;;;36398:33;;36183:256;;;;:::o;24625:151::-;24729:39;24746:4;24752:2;24756:7;24729:39;;;;;;;;;;;;:16;:39::i;:::-;24625:151;;;:::o;43283:342::-;43342:16;43371:18;43392:17;43402:6;43392:9;:17::i;:::-;43371:38;;43422:25;43464:10;43450:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43422:53;;43490:9;43486:106;43505:10;43501:1;:14;43486:106;;;43550:30;43570:6;43578:1;43550:19;:30::i;:::-;43536:8;43545:1;43536:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;43517:3;;;;;:::i;:::-;;;;43486:106;;;;43609:8;43602:15;;;;43283:342;;;:::o;36705:233::-;36780:7;36816:30;:28;:30::i;:::-;36808:5;:38;36800:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36913:10;36924:5;36913:17;;;;;;;;;;;;;;;;;;;;;;;;36906:24;;36705:233;;;:::o;43856:102::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43943:7:::1;43927:13;:23;;;;;;;;;;;;:::i;:::-;;43856:102:::0;:::o;21593:239::-;21665:7;21685:13;21701:7;:16;21709:7;21701:16;;;;;;;;;;;;;;;;;;;;;21685:32;;21753:1;21736:19;;:5;:19;;;;21728:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21819:5;21812:12;;;21593:239;;;:::o;21323:208::-;21395:7;21440:1;21423:19;;:5;:19;;;;21415:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21507:9;:16;21517:5;21507:16;;;;;;;;;;;;;;;;21500:23;;21323:208;;;:::o;34465:148::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34572:1:::1;34535:40;;34556:6;;;;;;;;;;;34535:40;;;;;;;;;;;;34603:1;34586:6;;:19;;;;;;;;;;;;;;;;;;34465:148::o:0;44471:280::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44530:13:::1;44570:1;44546:21;:25;;;;:::i;:::-;44530:41;;44598:2;;;;;;;;;;;44590:16;;:23;44607:5;44590:23;;;;;;;;;;;;;;;;;;;;;;;44582:32;;;::::0;::::1;;44641:2;;;;;;;;;;;44633:16;;:23;44650:5;44633:23;;;;;;;;;;;;;;;;;;;;;;;44625:32;;;::::0;::::1;;44684:2;;;;;;;;;;;44676:16;;:23;44693:5;44676:23;;;;;;;;;;;;;;;;;;;;;;;44668:32;;;::::0;::::1;;44727:2;;;;;;;;;;;44719:16;;:23;44736:5;44719:23;;;;;;;;;;;;;;;;;;;;;;;44711:32;;;::::0;::::1;;34105:1;44471:280::o:0;42728:547::-;42782:14;42799:13;:11;:13::i;:::-;42782:30;;42833:7;;;;;;;;;;;42832:8;42823:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42914:2;42908:3;:8;42899:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43028:9;;43021:4;:16;;;;:::i;:::-;43015:3;43006:6;:12;;;;:::i;:::-;:31;42997:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;43119:3;43110:6;;:12;;;;:::i;:::-;43097:9;:25;;43088:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;43182:9;43178:90;43197:3;43193:1;:7;43178:90;;;43221:35;43232:10;43253:1;43244:6;:10;;;;:::i;:::-;43221:9;:35::i;:::-;43202:3;;;;;:::i;:::-;;;;43178:90;;;;42728:547;;:::o;33814:87::-;33860:7;33887:6;;;;;;;;;;;33880:13;;33814:87;:::o;43633:93::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43709:9:::1;43700:6;:18;;;;43633:93:::0;:::o;22068:104::-;22124:13;22157:7;22150:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22068:104;:::o;43966:81::-;44007:7;44033:6;;44026:13;;43966:81;:::o;23652:295::-;23767:12;:10;:12::i;:::-;23755:24;;:8;:24;;;;23747:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23867:8;23822:18;:32;23841:12;:10;:12::i;:::-;23822:32;;;;;;;;;;;;;;;:42;23855:8;23822:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23920:8;23891:48;;23906:12;:10;:12::i;:::-;23891:48;;;23930:8;23891:48;;;;;;:::i;:::-;;;;;;;;23652:295;;:::o;24847:285::-;24979:41;24998:12;:10;:12::i;:::-;25012:7;24979:18;:41::i;:::-;24971:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25085:39;25099:4;25105:2;25109:7;25118:5;25085:13;:39::i;:::-;24847:285;;;;:::o;22243:360::-;22316:13;22350:16;22358:7;22350;:16::i;:::-;22342:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22431:21;22455:10;:8;:10::i;:::-;22431:34;;22507:1;22489:7;22483:21;:25;:112;;;;;;;;;;;;;;;;;22548:7;22557:18;:7;:16;:18::i;:::-;22531:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22483:112;22476:119;;;22243:360;;;:::o;44055:326::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44155:9:::1;;44144:7;:20;;44135:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44213:14;44230:13;:11;:13::i;:::-;44213:30;;44258:9;44254:87;44273:7;44269:1;:11;44254:87;;;44301:28;44312:3;44326:1;44317:6;:10;;;;:::i;:::-;44301:9;:28::i;:::-;44282:3;;;;;:::i;:::-;;;;44254:87;;;;44366:7;44353:9;;:20;;;;;;;:::i;:::-;;;;;;;;34105:1;44055:326:::0;;:::o;24018:164::-;24115:4;24139:18;:25;24158:5;24139:25;;;;;;;;;;;;;;;:35;24165:8;24139:35;;;;;;;;;;;;;;;;;;;;;;;;;24132:42;;24018:164;;;;:::o;34768:244::-;34045:12;:10;:12::i;:::-;34034:23;;:7;:5;:7::i;:::-;:23;;;34026:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34877:1:::1;34857:22;;:8;:22;;;;34849:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34967:8;34938:38;;34959:6;;;;;;;;;;;34938:38;;;;;;;;;;;;34996:8;34987:6;;:17;;;;;;;;;;;;;;;;;;34768:244:::0;:::o;5383:422::-;5443:4;5651:12;5762:7;5750:20;5742:28;;5796:1;5789:4;:8;5782:15;;;5383:422;;;:::o;32677:93::-;;;;:::o;20967:292::-;21069:4;21108:25;21093:40;;;:11;:40;;;;:105;;;;21165:33;21150:48;;;:11;:48;;;;21093:105;:158;;;;21215:36;21239:11;21215:23;:36::i;:::-;21093:158;21086:165;;20967:292;;;:::o;4325:98::-;4378:7;4405:10;4398:17;;4325:98;:::o;26599:127::-;26664:4;26716:1;26688:30;;:7;:16;26696:7;26688:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26681:37;;26599:127;;;:::o;30482:174::-;30584:2;30557:15;:24;30573:7;30557:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30640:7;30636:2;30602:46;;30611:23;30626:7;30611:14;:23::i;:::-;30602:46;;;;;;;;;;;;30482:174;;:::o;26893:348::-;26986:4;27011:16;27019:7;27011;:16::i;:::-;27003:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27087:13;27103:23;27118:7;27103:14;:23::i;:::-;27087:39;;27156:5;27145:16;;:7;:16;;;:51;;;;27189:7;27165:31;;:20;27177:7;27165:11;:20::i;:::-;:31;;;27145:51;:87;;;;27200:32;27217:5;27224:7;27200:16;:32::i;:::-;27145:87;27137:96;;;26893:348;;;;:::o;29820:544::-;29945:4;29918:31;;:23;29933:7;29918:14;:23::i;:::-;:31;;;29910:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30028:1;30014:16;;:2;:16;;;;30006:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30084:39;30105:4;30111:2;30115:7;30084:20;:39::i;:::-;30188:29;30205:1;30209:7;30188:8;:29::i;:::-;30249:1;30230:9;:15;30240:4;30230:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30278:1;30261:9;:13;30271:2;30261:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30309:2;30290:7;:16;30298:7;30290:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30348:7;30344:2;30329:27;;30338:4;30329:27;;;;;;;;;;;;29820:544;;;:::o;27583:110::-;27659:26;27669:2;27673:7;27659:26;;;;;;;;;;;;:9;:26::i;:::-;27583:110;;:::o;26014:272::-;26128:28;26138:4;26144:2;26148:7;26128:9;:28::i;:::-;26175:48;26198:4;26204:2;26208:7;26217:5;26175:22;:48::i;:::-;26167:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26014:272;;;;:::o;43734:114::-;43794:13;43827;43820:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43734:114;:::o;1998:723::-;2054:13;2284:1;2275:5;:10;2271:53;;;2302:10;;;;;;;;;;;;;;;;;;;;;2271:53;2334:12;2349:5;2334:20;;2365:14;2390:78;2405:1;2397:4;:9;2390:78;;2423:8;;;;;:::i;:::-;;;;2454:2;2446:10;;;;;:::i;:::-;;;2390:78;;;2478:19;2510:6;2500:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2478:39;;2528:154;2544:1;2535:5;:10;2528:154;;2572:1;2562:11;;;;;:::i;:::-;;;2639:2;2631:5;:10;;;;:::i;:::-;2618:2;:24;;;;:::i;:::-;2605:39;;2588:6;2595;2588:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2668:2;2659:11;;;;;:::i;:::-;;;2528:154;;;2706:6;2692:21;;;;;1998:723;;;;:::o;1583:157::-;1668:4;1707:25;1692:40;;;:11;:40;;;;1685:47;;1583:157;;;:::o;37551:555::-;37661:45;37688:4;37694:2;37698:7;37661:26;:45::i;:::-;37739:1;37723:18;;:4;:18;;;37719:187;;;37758:40;37790:7;37758:31;:40::i;:::-;37719:187;;;37828:2;37820:10;;:4;:10;;;37816:90;;37847:47;37880:4;37886:7;37847:32;:47::i;:::-;37816:90;37719:187;37934:1;37920:16;;:2;:16;;;37916:183;;;37953:45;37990:7;37953:36;:45::i;:::-;37916:183;;;38026:4;38020:10;;:2;:10;;;38016:83;;38047:40;38075:2;38079:7;38047:27;:40::i;:::-;38016:83;37916:183;37551:555;;;:::o;27920:250::-;28016:18;28022:2;28026:7;28016:5;:18::i;:::-;28053:54;28084:1;28088:2;28092:7;28101:5;28053:22;:54::i;:::-;28045:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27920:250;;;:::o;31221:843::-;31342:4;31368:15;:2;:13;;;:15::i;:::-;31364:693;;;31420:2;31404:36;;;31441:12;:10;:12::i;:::-;31455:4;31461:7;31470:5;31404:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31400:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31667:1;31650:6;:13;:18;31646:341;;;31693:60;;;;;;;;;;:::i;:::-;;;;;;;;31646:341;31937:6;31931:13;31922:6;31918:2;31914:15;31907:38;31400:602;31537:45;;;31527:55;;;:6;:55;;;;31520:62;;;;;31364:693;32041:4;32034:11;;31221:843;;;;;;;:::o;38829:164::-;38933:10;:17;;;;38906:15;:24;38922:7;38906:24;;;;;;;;;;;:44;;;;38961:10;38977:7;38961:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38829:164;:::o;39620:988::-;39886:22;39936:1;39911:22;39928:4;39911:16;:22::i;:::-;:26;;;;:::i;:::-;39886:51;;39948:18;39969:17;:26;39987:7;39969:26;;;;;;;;;;;;39948:47;;40116:14;40102:10;:28;40098:328;;40147:19;40169:12;:18;40182:4;40169:18;;;;;;;;;;;;;;;:34;40188:14;40169:34;;;;;;;;;;;;40147:56;;40253:11;40220:12;:18;40233:4;40220:18;;;;;;;;;;;;;;;:30;40239:10;40220:30;;;;;;;;;;;:44;;;;40370:10;40337:17;:30;40355:11;40337:30;;;;;;;;;;;:43;;;;40098:328;;40522:17;:26;40540:7;40522:26;;;;;;;;;;;40515:33;;;40566:12;:18;40579:4;40566:18;;;;;;;;;;;;;;;:34;40585:14;40566:34;;;;;;;;;;;40559:41;;;39620:988;;;;:::o;40903:1079::-;41156:22;41201:1;41181:10;:17;;;;:21;;;;:::i;:::-;41156:46;;41213:18;41234:15;:24;41250:7;41234:24;;;;;;;;;;;;41213:45;;41585:19;41607:10;41618:14;41607:26;;;;;;;;;;;;;;;;;;;;;;;;41585:48;;41671:11;41646:10;41657;41646:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;41782:10;41751:15;:28;41767:11;41751:28;;;;;;;;;;;:41;;;;41923:15;:24;41939:7;41923:24;;;;;;;;;;;41916:31;;;41958:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40903:1079;;;;:::o;38407:221::-;38492:14;38509:20;38526:2;38509:16;:20::i;:::-;38492:37;;38567:7;38540:12;:16;38553:2;38540:16;;;;;;;;;;;;;;;:24;38557:6;38540:24;;;;;;;;;;;:34;;;;38614:6;38585:17;:26;38603:7;38585:26;;;;;;;;;;;:35;;;;38407:221;;;:::o;28506:382::-;28600:1;28586:16;;:2;:16;;;;28578:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28659:16;28667:7;28659;:16::i;:::-;28658:17;28650:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28721:45;28750:1;28754:2;28758:7;28721:20;:45::i;:::-;28796:1;28779:9;:13;28789:2;28779:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28827:2;28808:7;:16;28816:7;28808:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28872:7;28868:2;28847:33;;28864:1;28847:33;;;;;;;;;;;;28506:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:179::-;;6436:46;6478:3;6470:6;6436:46;:::i;:::-;6514:4;6509:3;6505:14;6491:28;;6426:99;;;;:::o;6531:118::-;6618:24;6636:5;6618:24;:::i;:::-;6613:3;6606:37;6596:53;;:::o;6685:732::-;;6833:54;6881:5;6833:54;:::i;:::-;6903:86;6982:6;6977:3;6903:86;:::i;:::-;6896:93;;7013:56;7063:5;7013:56;:::i;:::-;7092:7;7123:1;7108:284;7133:6;7130:1;7127:13;7108:284;;;7209:6;7203:13;7236:63;7295:3;7280:13;7236:63;:::i;:::-;7229:70;;7322:60;7375:6;7322:60;:::i;:::-;7312:70;;7168:224;7155:1;7152;7148:9;7143:14;;7108:284;;;7112:14;7408:3;7401:10;;6809:608;;;;;;;:::o;7423:109::-;7504:21;7519:5;7504:21;:::i;:::-;7499:3;7492:34;7482:50;;:::o;7538:360::-;;7652:38;7684:5;7652:38;:::i;:::-;7706:70;7769:6;7764:3;7706:70;:::i;:::-;7699:77;;7785:52;7830:6;7825:3;7818:4;7811:5;7807:16;7785:52;:::i;:::-;7862:29;7884:6;7862:29;:::i;:::-;7857:3;7853:39;7846:46;;7628:270;;;;;:::o;7904:364::-;;8020:39;8053:5;8020:39;:::i;:::-;8075:71;8139:6;8134:3;8075:71;:::i;:::-;8068:78;;8155:52;8200:6;8195:3;8188:4;8181:5;8177:16;8155:52;:::i;:::-;8232:29;8254:6;8232:29;:::i;:::-;8227:3;8223:39;8216:46;;7996:272;;;;;:::o;8274:377::-;;8408:39;8441:5;8408:39;:::i;:::-;8463:89;8545:6;8540:3;8463:89;:::i;:::-;8456:96;;8561:52;8606:6;8601:3;8594:4;8587:5;8583:16;8561:52;:::i;:::-;8638:6;8633:3;8629:16;8622:23;;8384:267;;;;;:::o;8657:375::-;;8820:67;8884:2;8879:3;8820:67;:::i;:::-;8813:74;;8917:34;8913:1;8908:3;8904:11;8897:55;8983:13;8978:2;8973:3;8969:12;8962:35;9023:2;9018:3;9014:12;9007:19;;8803:229;;;:::o;9038:382::-;;9201:67;9265:2;9260:3;9201:67;:::i;:::-;9194:74;;9298:34;9294:1;9289:3;9285:11;9278:55;9364:20;9359:2;9354:3;9350:12;9343:42;9411:2;9406:3;9402:12;9395:19;;9184:236;;;:::o;9426:370::-;;9589:67;9653:2;9648:3;9589:67;:::i;:::-;9582:74;;9686:34;9682:1;9677:3;9673:11;9666:55;9752:8;9747:2;9742:3;9738:12;9731:30;9787:2;9782:3;9778:12;9771:19;;9572:224;;;:::o;9802:328::-;;9965:67;10029:2;10024:3;9965:67;:::i;:::-;9958:74;;10062:32;10058:1;10053:3;10049:11;10042:53;10121:2;10116:3;10112:12;10105:19;;9948:182;;;:::o;10136:326::-;;10299:67;10363:2;10358:3;10299:67;:::i;:::-;10292:74;;10396:30;10392:1;10387:3;10383:11;10376:51;10453:2;10448:3;10444:12;10437:19;;10282:180;;;:::o;10468:368::-;;10631:67;10695:2;10690:3;10631:67;:::i;:::-;10624:74;;10728:34;10724:1;10719:3;10715:11;10708:55;10794:6;10789:2;10784:3;10780:12;10773:28;10827:2;10822:3;10818:12;10811:19;;10614:222;;;:::o;10842:323::-;;11005:67;11069:2;11064:3;11005:67;:::i;:::-;10998:74;;11102:27;11098:1;11093:3;11089:11;11082:48;11156:2;11151:3;11147:12;11140:19;;10988:177;;;:::o;11171:376::-;;11334:67;11398:2;11393:3;11334:67;:::i;:::-;11327:74;;11431:34;11427:1;11422:3;11418:11;11411:55;11497:14;11492:2;11487:3;11483:12;11476:36;11538:2;11533:3;11529:12;11522:19;;11317:230;;;:::o;11553:388::-;;11716:67;11780:2;11775:3;11716:67;:::i;:::-;11709:74;;11813:34;11809:1;11804:3;11800:11;11793:55;11879:26;11874:2;11869:3;11865:12;11858:48;11932:2;11927:3;11923:12;11916:19;;11699:242;;;:::o;11947:374::-;;12110:67;12174:2;12169:3;12110:67;:::i;:::-;12103:74;;12207:34;12203:1;12198:3;12194:11;12187:55;12273:12;12268:2;12263:3;12259:12;12252:34;12312:2;12307:3;12303:12;12296:19;;12093:228;;;:::o;12327:373::-;;12490:67;12554:2;12549:3;12490:67;:::i;:::-;12483:74;;12587:34;12583:1;12578:3;12574:11;12567:55;12653:11;12648:2;12643:3;12639:12;12632:33;12691:2;12686:3;12682:12;12675:19;;12473:227;;;:::o;12706:311::-;;12869:67;12933:2;12928:3;12869:67;:::i;:::-;12862:74;;12966:15;12962:1;12957:3;12953:11;12946:36;13008:2;13003:3;12999:12;12992:19;;12852:165;;;:::o;13023:330::-;;13186:67;13250:2;13245:3;13186:67;:::i;:::-;13179:74;;13283:34;13279:1;13274:3;13270:11;13263:55;13344:2;13339:3;13335:12;13328:19;;13169:184;;;:::o;13359:376::-;;13522:67;13586:2;13581:3;13522:67;:::i;:::-;13515:74;;13619:34;13615:1;13610:3;13606:11;13599:55;13685:14;13680:2;13675:3;13671:12;13664:36;13726:2;13721:3;13717:12;13710:19;;13505:230;;;:::o;13741:330::-;;13904:67;13968:2;13963:3;13904:67;:::i;:::-;13897:74;;14001:34;13997:1;13992:3;13988:11;13981:55;14062:2;14057:3;14053:12;14046:19;;13887:184;;;:::o;14077:373::-;;14240:67;14304:2;14299:3;14240:67;:::i;:::-;14233:74;;14337:34;14333:1;14328:3;14324:11;14317:55;14403:11;14398:2;14393:3;14389:12;14382:33;14441:2;14436:3;14432:12;14425:19;;14223:227;;;:::o;14456:379::-;;14619:67;14683:2;14678:3;14619:67;:::i;:::-;14612:74;;14716:34;14712:1;14707:3;14703:11;14696:55;14782:17;14777:2;14772:3;14768:12;14761:39;14826:2;14821:3;14817:12;14810:19;;14602:233;;;:::o;14841:365::-;;15004:67;15068:2;15063:3;15004:67;:::i;:::-;14997:74;;15101:34;15097:1;15092:3;15088:11;15081:55;15167:3;15162:2;15157:3;15153:12;15146:25;15197:2;15192:3;15188:12;15181:19;;14987:219;;;:::o;15212:323::-;;15375:67;15439:2;15434:3;15375:67;:::i;:::-;15368:74;;15472:27;15468:1;15463:3;15459:11;15452:48;15526:2;15521:3;15517:12;15510:19;;15358:177;;;:::o;15541:381::-;;15704:67;15768:2;15763:3;15704:67;:::i;:::-;15697:74;;15801:34;15797:1;15792:3;15788:11;15781:55;15867:19;15862:2;15857:3;15853:12;15846:41;15913:2;15908:3;15904:12;15897:19;;15687:235;;;:::o;15928:376::-;;16091:67;16155:2;16150:3;16091:67;:::i;:::-;16084:74;;16188:34;16184:1;16179:3;16175:11;16168:55;16254:14;16249:2;16244:3;16240:12;16233:36;16295:2;16290:3;16286:12;16279:19;;16074:230;;;:::o;16310:327::-;;16473:67;16537:2;16532:3;16473:67;:::i;:::-;16466:74;;16570:31;16566:1;16561:3;16557:11;16550:52;16628:2;16623:3;16619:12;16612:19;;16456:181;;;:::o;16643:367::-;;16806:67;16870:2;16865:3;16806:67;:::i;:::-;16799:74;;16903:34;16899:1;16894:3;16890:11;16883:55;16969:5;16964:2;16959:3;16955:12;16948:27;17001:2;16996:3;16992:12;16985:19;;16789:221;;;:::o;17016:108::-;17093:24;17111:5;17093:24;:::i;:::-;17088:3;17081:37;17071:53;;:::o;17130:118::-;17217:24;17235:5;17217:24;:::i;:::-;17212:3;17205:37;17195:53;;:::o;17254:435::-;;17456:95;17547:3;17538:6;17456:95;:::i;:::-;17449:102;;17568:95;17659:3;17650:6;17568:95;:::i;:::-;17561:102;;17680:3;17673:10;;17438:251;;;;;:::o;17695:222::-;;17826:2;17815:9;17811:18;17803:26;;17839:71;17907:1;17896:9;17892:17;17883:6;17839:71;:::i;:::-;17793:124;;;;:::o;17923:640::-;;18156:3;18145:9;18141:19;18133:27;;18170:71;18238:1;18227:9;18223:17;18214:6;18170:71;:::i;:::-;18251:72;18319:2;18308:9;18304:18;18295:6;18251:72;:::i;:::-;18333;18401:2;18390:9;18386:18;18377:6;18333:72;:::i;:::-;18452:9;18446:4;18442:20;18437:2;18426:9;18422:18;18415:48;18480:76;18551:4;18542:6;18480:76;:::i;:::-;18472:84;;18123:440;;;;;;;:::o;18569:373::-;;18750:2;18739:9;18735:18;18727:26;;18799:9;18793:4;18789:20;18785:1;18774:9;18770:17;18763:47;18827:108;18930:4;18921:6;18827:108;:::i;:::-;18819:116;;18717:225;;;;:::o;18948:210::-;;19073:2;19062:9;19058:18;19050:26;;19086:65;19148:1;19137:9;19133:17;19124:6;19086:65;:::i;:::-;19040:118;;;;:::o;19164:313::-;;19315:2;19304:9;19300:18;19292:26;;19364:9;19358:4;19354:20;19350:1;19339:9;19335:17;19328:47;19392:78;19465:4;19456:6;19392:78;:::i;:::-;19384:86;;19282:195;;;;:::o;19483:419::-;;19687:2;19676:9;19672:18;19664:26;;19736:9;19730:4;19726:20;19722:1;19711:9;19707:17;19700:47;19764:131;19890:4;19764:131;:::i;:::-;19756:139;;19654:248;;;:::o;19908:419::-;;20112:2;20101:9;20097:18;20089:26;;20161:9;20155:4;20151:20;20147:1;20136:9;20132:17;20125:47;20189:131;20315:4;20189:131;:::i;:::-;20181:139;;20079:248;;;:::o;20333:419::-;;20537:2;20526:9;20522:18;20514:26;;20586:9;20580:4;20576:20;20572:1;20561:9;20557:17;20550:47;20614:131;20740:4;20614:131;:::i;:::-;20606:139;;20504:248;;;:::o;20758:419::-;;20962:2;20951:9;20947:18;20939:26;;21011:9;21005:4;21001:20;20997:1;20986:9;20982:17;20975:47;21039:131;21165:4;21039:131;:::i;:::-;21031:139;;20929:248;;;:::o;21183:419::-;;21387:2;21376:9;21372:18;21364:26;;21436:9;21430:4;21426:20;21422:1;21411:9;21407:17;21400:47;21464:131;21590:4;21464:131;:::i;:::-;21456:139;;21354:248;;;:::o;21608:419::-;;21812:2;21801:9;21797:18;21789:26;;21861:9;21855:4;21851:20;21847:1;21836:9;21832:17;21825:47;21889:131;22015:4;21889:131;:::i;:::-;21881:139;;21779:248;;;:::o;22033:419::-;;22237:2;22226:9;22222:18;22214:26;;22286:9;22280:4;22276:20;22272:1;22261:9;22257:17;22250:47;22314:131;22440:4;22314:131;:::i;:::-;22306:139;;22204:248;;;:::o;22458:419::-;;22662:2;22651:9;22647:18;22639:26;;22711:9;22705:4;22701:20;22697:1;22686:9;22682:17;22675:47;22739:131;22865:4;22739:131;:::i;:::-;22731:139;;22629:248;;;:::o;22883:419::-;;23087:2;23076:9;23072:18;23064:26;;23136:9;23130:4;23126:20;23122:1;23111:9;23107:17;23100:47;23164:131;23290:4;23164:131;:::i;:::-;23156:139;;23054:248;;;:::o;23308:419::-;;23512:2;23501:9;23497:18;23489:26;;23561:9;23555:4;23551:20;23547:1;23536:9;23532:17;23525:47;23589:131;23715:4;23589:131;:::i;:::-;23581:139;;23479:248;;;:::o;23733:419::-;;23937:2;23926:9;23922:18;23914:26;;23986:9;23980:4;23976:20;23972:1;23961:9;23957:17;23950:47;24014:131;24140:4;24014:131;:::i;:::-;24006:139;;23904:248;;;:::o;24158:419::-;;24362:2;24351:9;24347:18;24339:26;;24411:9;24405:4;24401:20;24397:1;24386:9;24382:17;24375:47;24439:131;24565:4;24439:131;:::i;:::-;24431:139;;24329:248;;;:::o;24583:419::-;;24787:2;24776:9;24772:18;24764:26;;24836:9;24830:4;24826:20;24822:1;24811:9;24807:17;24800:47;24864:131;24990:4;24864:131;:::i;:::-;24856:139;;24754:248;;;:::o;25008:419::-;;25212:2;25201:9;25197:18;25189:26;;25261:9;25255:4;25251:20;25247:1;25236:9;25232:17;25225:47;25289:131;25415:4;25289:131;:::i;:::-;25281:139;;25179:248;;;:::o;25433:419::-;;25637:2;25626:9;25622:18;25614:26;;25686:9;25680:4;25676:20;25672:1;25661:9;25657:17;25650:47;25714:131;25840:4;25714:131;:::i;:::-;25706:139;;25604:248;;;:::o;25858:419::-;;26062:2;26051:9;26047:18;26039:26;;26111:9;26105:4;26101:20;26097:1;26086:9;26082:17;26075:47;26139:131;26265:4;26139:131;:::i;:::-;26131:139;;26029:248;;;:::o;26283:419::-;;26487:2;26476:9;26472:18;26464:26;;26536:9;26530:4;26526:20;26522:1;26511:9;26507:17;26500:47;26564:131;26690:4;26564:131;:::i;:::-;26556:139;;26454:248;;;:::o;26708:419::-;;26912:2;26901:9;26897:18;26889:26;;26961:9;26955:4;26951:20;26947:1;26936:9;26932:17;26925:47;26989:131;27115:4;26989:131;:::i;:::-;26981:139;;26879:248;;;:::o;27133:419::-;;27337:2;27326:9;27322:18;27314:26;;27386:9;27380:4;27376:20;27372:1;27361:9;27357:17;27350:47;27414:131;27540:4;27414:131;:::i;:::-;27406:139;;27304:248;;;:::o;27558:419::-;;27762:2;27751:9;27747:18;27739:26;;27811:9;27805:4;27801:20;27797:1;27786:9;27782:17;27775:47;27839:131;27965:4;27839:131;:::i;:::-;27831:139;;27729:248;;;:::o;27983:419::-;;28187:2;28176:9;28172:18;28164:26;;28236:9;28230:4;28226:20;28222:1;28211:9;28207:17;28200:47;28264:131;28390:4;28264:131;:::i;:::-;28256:139;;28154:248;;;:::o;28408:419::-;;28612:2;28601:9;28597:18;28589:26;;28661:9;28655:4;28651:20;28647:1;28636:9;28632:17;28625:47;28689:131;28815:4;28689:131;:::i;:::-;28681:139;;28579:248;;;:::o;28833:419::-;;29037:2;29026:9;29022:18;29014:26;;29086:9;29080:4;29076:20;29072:1;29061:9;29057:17;29050:47;29114:131;29240:4;29114:131;:::i;:::-;29106:139;;29004:248;;;:::o;29258:222::-;;29389:2;29378:9;29374:18;29366:26;;29402:71;29470:1;29459:9;29455:17;29446:6;29402:71;:::i;:::-;29356:124;;;;:::o;29486:283::-;;29552:2;29546:9;29536:19;;29594:4;29586:6;29582:17;29701:6;29689:10;29686:22;29665:18;29653:10;29650:34;29647:62;29644:2;;;29712:18;;:::i;:::-;29644:2;29752:10;29748:2;29741:22;29526:243;;;;:::o;29775:331::-;;29926:18;29918:6;29915:30;29912:2;;;29948:18;;:::i;:::-;29912:2;30033:4;30029:9;30022:4;30014:6;30010:17;30006:33;29998:41;;30094:4;30088;30084:15;30076:23;;29841:265;;;:::o;30112:332::-;;30264:18;30256:6;30253:30;30250:2;;;30286:18;;:::i;:::-;30250:2;30371:4;30367:9;30360:4;30352:6;30348:17;30344:33;30336:41;;30432:4;30426;30422:15;30414:23;;30179:265;;;:::o;30450:132::-;;30540:3;30532:11;;30570:4;30565:3;30561:14;30553:22;;30522:60;;;:::o;30588:114::-;;30689:5;30683:12;30673:22;;30662:40;;;:::o;30708:98::-;;30793:5;30787:12;30777:22;;30766:40;;;:::o;30812:99::-;;30898:5;30892:12;30882:22;;30871:40;;;:::o;30917:113::-;;31019:4;31014:3;31010:14;31002:22;;30992:38;;;:::o;31036:184::-;;31169:6;31164:3;31157:19;31209:4;31204:3;31200:14;31185:29;;31147:73;;;;:::o;31226:168::-;;31343:6;31338:3;31331:19;31383:4;31378:3;31374:14;31359:29;;31321:73;;;;:::o;31400:169::-;;31518:6;31513:3;31506:19;31558:4;31553:3;31549:14;31534:29;;31496:73;;;;:::o;31575:148::-;;31714:3;31699:18;;31689:34;;;;:::o;31729:305::-;;31788:20;31806:1;31788:20;:::i;:::-;31783:25;;31822:20;31840:1;31822:20;:::i;:::-;31817:25;;31976:1;31908:66;31904:74;31901:1;31898:81;31895:2;;;31982:18;;:::i;:::-;31895:2;32026:1;32023;32019:9;32012:16;;31773:261;;;;:::o;32040:185::-;;32097:20;32115:1;32097:20;:::i;:::-;32092:25;;32131:20;32149:1;32131:20;:::i;:::-;32126:25;;32170:1;32160:2;;32175:18;;:::i;:::-;32160:2;32217:1;32214;32210:9;32205:14;;32082:143;;;;:::o;32231:348::-;;32294:20;32312:1;32294:20;:::i;:::-;32289:25;;32328:20;32346:1;32328:20;:::i;:::-;32323:25;;32516:1;32448:66;32444:74;32441:1;32438:81;32433:1;32426:9;32419:17;32415:105;32412:2;;;32523:18;;:::i;:::-;32412:2;32571:1;32568;32564:9;32553:20;;32279:300;;;;:::o;32585:191::-;;32645:20;32663:1;32645:20;:::i;:::-;32640:25;;32679:20;32697:1;32679:20;:::i;:::-;32674:25;;32718:1;32715;32712:8;32709:2;;;32723:18;;:::i;:::-;32709:2;32768:1;32765;32761:9;32753:17;;32630:146;;;;:::o;32782:96::-;;32848:24;32866:5;32848:24;:::i;:::-;32837:35;;32827:51;;;:::o;32884:90::-;;32961:5;32954:13;32947:21;32936:32;;32926:48;;;:::o;32980:149::-;;33056:66;33049:5;33045:78;33034:89;;33024:105;;;:::o;33135:126::-;;33212:42;33205:5;33201:54;33190:65;;33180:81;;;:::o;33267:77::-;;33333:5;33322:16;;33312:32;;;:::o;33350:154::-;33434:6;33429:3;33424;33411:30;33496:1;33487:6;33482:3;33478:16;33471:27;33401:103;;;:::o;33510:307::-;33578:1;33588:113;33602:6;33599:1;33596:13;33588:113;;;33687:1;33682:3;33678:11;33672:18;33668:1;33663:3;33659:11;33652:39;33624:2;33621:1;33617:10;33612:15;;33588:113;;;33719:6;33716:1;33713:13;33710:2;;;33799:1;33790:6;33785:3;33781:16;33774:27;33710:2;33559:258;;;;:::o;33823:320::-;;33904:1;33898:4;33894:12;33884:22;;33951:1;33945:4;33941:12;33972:18;33962:2;;34028:4;34020:6;34016:17;34006:27;;33962:2;34090;34082:6;34079:14;34059:18;34056:38;34053:2;;;34109:18;;:::i;:::-;34053:2;33874:269;;;;:::o;34149:233::-;;34211:24;34229:5;34211:24;:::i;:::-;34202:33;;34257:66;34250:5;34247:77;34244:2;;;34327:18;;:::i;:::-;34244:2;34374:1;34367:5;34363:13;34356:20;;34192:190;;;:::o;34388:176::-;;34437:20;34455:1;34437:20;:::i;:::-;34432:25;;34471:20;34489:1;34471:20;:::i;:::-;34466:25;;34510:1;34500:2;;34515:18;;:::i;:::-;34500:2;34556:1;34553;34549:9;34544:14;;34422:142;;;;:::o;34570:180::-;34618:77;34615:1;34608:88;34715:4;34712:1;34705:15;34739:4;34736:1;34729:15;34756:180;34804:77;34801:1;34794:88;34901:4;34898:1;34891:15;34925:4;34922:1;34915:15;34942:180;34990:77;34987:1;34980:88;35087:4;35084:1;35077:15;35111:4;35108:1;35101:15;35128:180;35176:77;35173:1;35166:88;35273:4;35270:1;35263:15;35297:4;35294:1;35287:15;35314:102;;35406:2;35402:7;35397:2;35390:5;35386:14;35382:28;35372:38;;35362:54;;;:::o;35422:122::-;35495:24;35513:5;35495:24;:::i;:::-;35488:5;35485:35;35475:2;;35534:1;35531;35524:12;35475:2;35465:79;:::o;35550:116::-;35620:21;35635:5;35620:21;:::i;:::-;35613:5;35610:32;35600:2;;35656:1;35653;35646:12;35600:2;35590:76;:::o;35672:120::-;35744:23;35761:5;35744:23;:::i;:::-;35737:5;35734:34;35724:2;;35782:1;35779;35772:12;35724:2;35714:78;:::o;35798:122::-;35871:24;35889:5;35871:24;:::i;:::-;35864:5;35861:35;35851:2;;35910:1;35907;35900:12;35851:2;35841:79;:::o

Swarm Source

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