ETH Price: $3,392.38 (+1.82%)

Token

Doockles (Doockles)
 

Overview

Max Total Supply

9,999 Doockles

Holders

1,644

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
jdcweb3.eth
Balance
11 Doockles
0x488eebb90b1f3e5c0e1c214b2ed3164d60bd44c2
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:
Doockles

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 3 of 13: Doockles.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "./Ownable.sol";
import "./ERC721Enumerable.sol";

contract Doockles is ERC721Enumerable, Ownable {
    string  public              baseURI;
    
    address public              devAddress;

    uint256 public constant     MAX_SUPPLY          = 10000;

    uint256 public constant     MAX_PER_TX          = 10;
    uint256 public constant     RESERVES            = 0;
    uint256 public _price = 0.02 ether;

    mapping(address => uint) public addressToMinted;

    constructor(
        string memory _baseURI, 
        address _devAddress
    )
        ERC721("Doockles", "Doockles")
    {
        baseURI = _baseURI;
        devAddress = _devAddress;
    }

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

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_exists(_tokenId), "Token does not exist.");
        return string(abi.encodePacked(baseURI, Strings.toString(_tokenId)));
    }

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

    function collectReserves() external onlyOwner {
        require(_owners.length == 0, 'Reserves already taken.');
        for(uint256 i; i < RESERVES; i++)
            _mint(_msgSender(), i);
    }

    function publicMint(uint256 count) public payable {
        uint256 totalSupply = _owners.length;
        require(totalSupply + count < MAX_SUPPLY, "Excedes max supply.");
        require(count < MAX_PER_TX, "Exceeds max per transaction.");
        require(count * _price == msg.value, "Invalid funds provided.");
    
        for(uint i; i < count; i++) { 
            _mint(_msgSender(), totalSupply + i);
        }
    }

    function burn(uint256 tokenId) public { 
        require(_isApprovedOrOwner(_msgSender(), tokenId), "Not approved to burn.");
        _burn(tokenId);
    }

    function withdraw() public  {
        (bool success, ) = devAddress.call{value: address(this).balance}("");
        require(success, "Failed to send to Jeff.");
    }

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

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

    function batchTransferFrom(address _from, address _to, uint256[] memory _tokenIds) public {
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            transferFrom(_from, _to, _tokenIds[i]);
        }
    }

    function batchSafeTransferFrom(address _from, address _to, uint256[] memory _tokenIds, bytes memory data_) public {
        for (uint256 i = 0; i < _tokenIds.length; i++) {
            safeTransferFrom(_from, _to, _tokenIds[i], data_);
        }
    }

    function isOwnerOf(address account, uint256[] calldata _tokenIds) external view returns (bool){
        for(uint256 i; i < _tokenIds.length; ++i ){
            if(_owners[_tokenIds[i]] != account)
                return false;
        }

        return true;
    }

    function _mint(address to, uint256 tokenId) internal virtual override {
        _owners.push(to);
        emit Transfer(address(0), to, tokenId);
    }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.6;

library Address {
    function isContract(address account) internal view returns (bool) {
        uint size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}

File 2 of 13: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 4 of 13: ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 5 of 13: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";
import "./Address.sol";

abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    
    string private _name;
    string private _symbol;

    // Mapping from token ID to owner address
    address[] internal _owners;

    mapping(uint256 => address) private _tokenApprovals;
    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 (uint) 
    {
        require(owner != address(0), "ERC721: balance query for the zero address");

        uint count;
        for( uint i; i < _owners.length; ++i ){
          if( owner == _owners[i] )
            ++count;
        }
        return count;
    }

    /**
     * @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 {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 tokenId < _owners.length && _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);
        _owners.push(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);
        _owners[tokenId] = address(0);

        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);
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

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

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

File 6 of 13: ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "./ERC721.sol";
import "./IERC721Enumerable.sol";

/**
 * @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 but rips out the core of the gas-wasting processing that comes from OpenZeppelin.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    /**
     * @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-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _owners.length;
    }

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

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

        uint count;
        for(uint i; i < _owners.length; i++){
            if(owner == _owners[i]){
                if(count == index) return i;
                else count++;
            }
        }

        revert("ERC721Enumerable: owner index out of bounds");
    }
}

File 7 of 13: IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

File 8 of 13: IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 9 of 13: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 10 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 11 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

File 12 of 13: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

File 13 of 13: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"},{"internalType":"address","name":"_devAddress","type":"address"}],"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":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"batchSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"isOwnerOf","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":"uint256","name":"count","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","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":"tokenId","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266470de4df8200006008553480156200001c57600080fd5b506040516200479638038062004796833981810160405281019062000042919062000377565b6040518060400160405280600881526020017f446f6f636b6c65730000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f446f6f636b6c65730000000000000000000000000000000000000000000000008152508160009080519060200190620000c692919062000232565b508060019080519060200190620000df92919062000232565b50505062000102620000f66200016460201b60201c565b6200016c60201b60201c565b81600690805190602001906200011a92919062000232565b5080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620005af565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024090620004a6565b90600052602060002090601f016020900481019282620002645760008555620002b0565b82601f106200027f57805160ff1916838001178555620002b0565b82800160010185558215620002b0579182015b82811115620002af57825182559160200191906001019062000292565b5b509050620002bf9190620002c3565b5090565b5b80821115620002de576000816000905550600101620002c4565b5090565b6000620002f9620002f38462000406565b620003dd565b90508281526020810184848401111562000318576200031762000575565b5b6200032584828562000470565b509392505050565b6000815190506200033e8162000595565b92915050565b600082601f8301126200035c576200035b62000570565b5b81516200036e848260208601620002e2565b91505092915050565b600080604083850312156200039157620003906200057f565b5b600083015167ffffffffffffffff811115620003b257620003b16200057a565b5b620003c08582860162000344565b9250506020620003d3858286016200032d565b9150509250929050565b6000620003e9620003fc565b9050620003f78282620004dc565b919050565b6000604051905090565b600067ffffffffffffffff82111562000424576200042362000541565b5b6200042f8262000584565b9050602081019050919050565b6000620004498262000450565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200049057808201518184015260208101905062000473565b83811115620004a0576000848401525b50505050565b60006002820490506001821680620004bf57607f821691505b60208210811415620004d657620004d562000512565b5b50919050565b620004e78262000584565b810181811067ffffffffffffffff8211171562000509576200050862000541565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005a0816200043c565b8114620005ac57600080fd5b50565b6141d780620005bf6000396000f3fe60806040526004361061020f5760003560e01c80634f6ccce71161011857806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd1461078e578063e985e9c5146107cb578063f2fde38b14610808578063f3993d1114610831578063f43a22dc1461085a5761020f565b806395d89b41146106d45780639ec00c95146106ff578063a22cb4651461073c578063b88d4fde146107655761020f565b80636c0360eb116100e75780636c0360eb1461060157806370a082311461062c578063715018a6146106695780638da5cb5b1461068057806391b7f5ed146106ab5761020f565b80634f6ccce71461053557806355f804b3146105725780635a4fee301461059b5780636352211e146105c45761020f565b80632db115441161019b5780633ccfd60b1161016a5780633ccfd60b1461045257806342842e0e1461046957806342966c6814610492578063438b6300146104bb5780634d44660c146104f85761020f565b80632db11544146103a35780632f745c59146103bf57806332cb6b0c146103fc5780633ad10ef6146104275761020f565b80630922f9c5116101e25780630922f9c5146102d0578063095ea7b3146102fb57806318160ddd14610324578063235b6ea11461034f57806323b872dd1461037a5761020f565b806301ffc9a714610214578063029877b61461025157806306fdde0314610268578063081812fc14610293575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612d1a565b610885565b60405161024891906133a5565b60405180910390f35b34801561025d57600080fd5b506102666108ff565b005b34801561027457600080fd5b5061027d6109f6565b60405161028a91906133c0565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190612dbd565b610a88565b6040516102c7919061331c565b60405180910390f35b3480156102dc57600080fd5b506102e5610b0d565b6040516102f291906136a2565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612cda565b610b12565b005b34801561033057600080fd5b50610339610c2a565b60405161034691906136a2565b60405180910390f35b34801561035b57600080fd5b50610364610c37565b60405161037191906136a2565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190612b64565b610c3d565b005b6103bd60048036038101906103b89190612dbd565b610c9d565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190612cda565b610dc7565b6040516103f391906136a2565b60405180910390f35b34801561040857600080fd5b50610411610f0c565b60405161041e91906136a2565b60405180910390f35b34801561043357600080fd5b5061043c610f12565b604051610449919061331c565b60405180910390f35b34801561045e57600080fd5b50610467610f38565b005b34801561047557600080fd5b50610490600480360381019061048b9190612b64565b611009565b005b34801561049e57600080fd5b506104b960048036038101906104b49190612dbd565b611029565b005b3480156104c757600080fd5b506104e260048036038101906104dd91906129e9565b611085565b6040516104ef9190613383565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190612c3a565b61118f565b60405161052c91906133a5565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190612dbd565b611250565b60405161056991906136a2565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190612d74565b6112a1565b005b3480156105a757600080fd5b506105c260048036038101906105bd9190612ac5565b611337565b005b3480156105d057600080fd5b506105eb60048036038101906105e69190612dbd565b611383565b6040516105f8919061331c565b60405180910390f35b34801561060d57600080fd5b50610616611440565b60405161062391906133c0565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e91906129e9565b6114ce565b60405161066091906136a2565b60405180910390f35b34801561067557600080fd5b5061067e6115ea565b005b34801561068c57600080fd5b50610695611672565b6040516106a2919061331c565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190612dbd565b61169c565b005b3480156106e057600080fd5b506106e9611722565b6040516106f691906133c0565b60405180910390f35b34801561070b57600080fd5b50610726600480360381019061072191906129e9565b6117b4565b60405161073391906136a2565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190612c9a565b6117cc565b005b34801561077157600080fd5b5061078c60048036038101906107879190612bb7565b61194d565b005b34801561079a57600080fd5b506107b560048036038101906107b09190612dbd565b6119af565b6040516107c291906133c0565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed9190612a16565b611a2b565b6040516107ff91906133a5565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a91906129e9565b611abf565b005b34801561083d57600080fd5b5061085860048036038101906108539190612a56565b611bb7565b005b34801561086657600080fd5b5061086f611c01565b60405161087c91906136a2565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f857506108f782611c06565b5b9050919050565b610907611ce8565b73ffffffffffffffffffffffffffffffffffffffff16610925611672565b73ffffffffffffffffffffffffffffffffffffffff161461097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097290613582565b60405180910390fd5b6000600280549050146109c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ba90613602565b60405180910390fd5b60005b60008110156109f3576109e06109da611ce8565b82611cf0565b80806109eb90613a3a565b9150506109c6565b50565b606060008054610a05906139d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a31906139d7565b8015610a7e5780601f10610a5357610100808354040283529160200191610a7e565b820191906000526020600020905b815481529060010190602001808311610a6157829003601f168201915b5050505050905090565b6000610a9382611db3565b610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac990613562565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600081565b6000610b1d82611383565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b85906135e2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bad611ce8565b73ffffffffffffffffffffffffffffffffffffffff161480610bdc5750610bdb81610bd6611ce8565b611a2b565b5b610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c12906134c2565b60405180910390fd5b610c258383611e3b565b505050565b6000600280549050905090565b60085481565b610c4e610c48611ce8565b82611ef4565b610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8490613622565b60405180910390fd5b610c98838383611fd2565b505050565b600060028054905090506127108282610cb6919061380c565b10610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced906133e2565b60405180910390fd5b600a8210610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090613642565b60405180910390fd5b3460085483610d489190613893565b14610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90613522565b60405180910390fd5b60005b82811015610dc257610daf610d9e611ce8565b8284610daa919061380c565b611cf0565b8080610dba90613a3a565b915050610d8b565b505050565b6000610dd2836114ce565b8210610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90613402565b60405180910390fd5b6000805b600280549050811015610eca5760028181548110610e3857610e37613b41565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610eb75783821415610ea8578092505050610f06565b8180610eb390613a3a565b9250505b8080610ec290613a3a565b915050610e17565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd90613402565b60405180910390fd5b92915050565b61271081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610f8090613307565b60006040518083038185875af1925050503d8060008114610fbd576040519150601f19603f3d011682016040523d82523d6000602084013e610fc2565b606091505b5050905080611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613682565b60405180910390fd5b50565b6110248383836040518060200160405280600081525061194d565b505050565b61103a611034611ce8565b82611ef4565b611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906135c2565b60405180910390fd5b6110828161218b565b50565b60606000611092836114ce565b905060008114156110ef57600067ffffffffffffffff8111156110b8576110b7613b70565b5b6040519080825280602002602001820160405280156110e65781602001602082028036833780820191505090505b5091505061118a565b60008167ffffffffffffffff81111561110b5761110a613b70565b5b6040519080825280602002602001820160405280156111395781602001602082028036833780820191505090505b50905060005b82811015611183576111518582610dc7565b82828151811061116457611163613b41565b5b602002602001018181525050808061117b90613a3a565b91505061113f565b5080925050505b919050565b6000805b83839050811015611243578473ffffffffffffffffffffffffffffffffffffffff1660028585848181106111ca576111c9613b41565b5b90506020020135815481106111e2576111e1613b41565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611232576000915050611249565b8061123c90613a3a565b9050611193565b50600190505b9392505050565b60006002805490508210611299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129090613662565b60405180910390fd5b819050919050565b6112a9611ce8565b73ffffffffffffffffffffffffffffffffffffffff166112c7611672565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613582565b60405180910390fd5b8060069080519060200190611333929190612709565b5050565b60005b825181101561137c57611369858585848151811061135b5761135a613b41565b5b60200260200101518561194d565b808061137490613a3a565b91505061133a565b5050505050565b6000806002838154811061139a57611399613b41565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e90613502565b60405180910390fd5b80915050919050565b6006805461144d906139d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611479906139d7565b80156114c65780601f1061149b576101008083540402835291602001916114c6565b820191906000526020600020905b8154815290600101906020018083116114a957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561153f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611536906134e2565b60405180910390fd5b6000805b6002805490508110156115e0576002818154811061156457611563613b41565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115cf57816115cc90613a3a565b91505b806115d990613a3a565b9050611543565b5080915050919050565b6115f2611ce8565b73ffffffffffffffffffffffffffffffffffffffff16611610611672565b73ffffffffffffffffffffffffffffffffffffffff1614611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613582565b60405180910390fd5b611670600061226d565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116a4611ce8565b73ffffffffffffffffffffffffffffffffffffffff166116c2611672565b73ffffffffffffffffffffffffffffffffffffffff1614611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f90613582565b60405180910390fd5b8060088190555050565b606060018054611731906139d7565b80601f016020809104026020016040519081016040528092919081815260200182805461175d906139d7565b80156117aa5780601f1061177f576101008083540402835291602001916117aa565b820191906000526020600020905b81548152906001019060200180831161178d57829003601f168201915b5050505050905090565b60096020528060005260406000206000915090505481565b6117d4611ce8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183990613482565b60405180910390fd5b806004600061184f611ce8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118fc611ce8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161194191906133a5565b60405180910390a35050565b61195e611958611ce8565b83611ef4565b61199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490613622565b60405180910390fd5b6119a984848484612333565b50505050565b60606119ba82611db3565b6119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f090613542565b60405180910390fd5b6006611a048361238f565b604051602001611a159291906132e3565b6040516020818303038152906040529050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ac7611ce8565b73ffffffffffffffffffffffffffffffffffffffff16611ae5611672565b73ffffffffffffffffffffffffffffffffffffffff1614611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3290613582565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290613442565b60405180910390fd5b611bb48161226d565b50565b60005b8151811015611bfb57611be88484848481518110611bdb57611bda613b41565b5b6020026020010151610c3d565b8080611bf390613a3a565b915050611bba565b50505050565b600a81565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cd157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ce15750611ce0826124f0565b5b9050919050565b600033905090565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600060028054905082108015611e345750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110611df057611def613b41565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611eae83611383565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611eff82611db3565b611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f35906134a2565b60405180910390fd5b6000611f4983611383565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fb857508373ffffffffffffffffffffffffffffffffffffffff16611fa084610a88565b73ffffffffffffffffffffffffffffffffffffffff16145b80611fc95750611fc88185611a2b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ff282611383565b73ffffffffffffffffffffffffffffffffffffffff1614612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f906135a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120af90613462565b60405180910390fd5b6120c383838361255a565b6120ce600082611e3b565b81600282815481106120e3576120e2613b41565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061219682611383565b90506121a48160008461255a565b6121af600083611e3b565b6000600283815481106121c5576121c4613b41565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61233e848484611fd2565b61234a8484848461255f565b612389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238090613422565b60405180910390fd5b50505050565b606060008214156123d7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124eb565b600082905060005b600082146124095780806123f290613a3a565b915050600a826124029190613862565b91506123df565b60008167ffffffffffffffff81111561242557612424613b70565b5b6040519080825280601f01601f1916602001820160405280156124575781602001600182028036833780820191505090505b5090505b600085146124e45760018261247091906138ed565b9150600a8561247f9190613a83565b603061248b919061380c565b60f81b8183815181106124a1576124a0613b41565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124dd9190613862565b945061245b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b60006125808473ffffffffffffffffffffffffffffffffffffffff166126f6565b156126e9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125a9611ce8565b8786866040518563ffffffff1660e01b81526004016125cb9493929190613337565b602060405180830381600087803b1580156125e557600080fd5b505af192505050801561261657506040513d601f19601f820116820180604052508101906126139190612d47565b60015b612699573d8060008114612646576040519150601f19603f3d011682016040523d82523d6000602084013e61264b565b606091505b50600081511415612691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268890613422565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126ee565b600190505b949350505050565b600080823b905060008111915050919050565b828054612715906139d7565b90600052602060002090601f016020900481019282612737576000855561277e565b82601f1061275057805160ff191683800117855561277e565b8280016001018555821561277e579182015b8281111561277d578251825591602001919060010190612762565b5b50905061278b919061278f565b5090565b5b808211156127a8576000816000905550600101612790565b5090565b60006127bf6127ba846136e2565b6136bd565b905080838252602082019050828560208602820111156127e2576127e1613ba9565b5b60005b8581101561281257816127f888826129d4565b8452602084019350602083019250506001810190506127e5565b5050509392505050565b600061282f61282a8461370e565b6136bd565b90508281526020810184848401111561284b5761284a613bae565b5b612856848285613995565b509392505050565b600061287161286c8461373f565b6136bd565b90508281526020810184848401111561288d5761288c613bae565b5b612898848285613995565b509392505050565b6000813590506128af81614145565b92915050565b60008083601f8401126128cb576128ca613ba4565b5b8235905067ffffffffffffffff8111156128e8576128e7613b9f565b5b60208301915083602082028301111561290457612903613ba9565b5b9250929050565b600082601f8301126129205761291f613ba4565b5b81356129308482602086016127ac565b91505092915050565b6000813590506129488161415c565b92915050565b60008135905061295d81614173565b92915050565b60008151905061297281614173565b92915050565b600082601f83011261298d5761298c613ba4565b5b813561299d84826020860161281c565b91505092915050565b600082601f8301126129bb576129ba613ba4565b5b81356129cb84826020860161285e565b91505092915050565b6000813590506129e38161418a565b92915050565b6000602082840312156129ff576129fe613bb8565b5b6000612a0d848285016128a0565b91505092915050565b60008060408385031215612a2d57612a2c613bb8565b5b6000612a3b858286016128a0565b9250506020612a4c858286016128a0565b9150509250929050565b600080600060608486031215612a6f57612a6e613bb8565b5b6000612a7d868287016128a0565b9350506020612a8e868287016128a0565b925050604084013567ffffffffffffffff811115612aaf57612aae613bb3565b5b612abb8682870161290b565b9150509250925092565b60008060008060808587031215612adf57612ade613bb8565b5b6000612aed878288016128a0565b9450506020612afe878288016128a0565b935050604085013567ffffffffffffffff811115612b1f57612b1e613bb3565b5b612b2b8782880161290b565b925050606085013567ffffffffffffffff811115612b4c57612b4b613bb3565b5b612b5887828801612978565b91505092959194509250565b600080600060608486031215612b7d57612b7c613bb8565b5b6000612b8b868287016128a0565b9350506020612b9c868287016128a0565b9250506040612bad868287016129d4565b9150509250925092565b60008060008060808587031215612bd157612bd0613bb8565b5b6000612bdf878288016128a0565b9450506020612bf0878288016128a0565b9350506040612c01878288016129d4565b925050606085013567ffffffffffffffff811115612c2257612c21613bb3565b5b612c2e87828801612978565b91505092959194509250565b600080600060408486031215612c5357612c52613bb8565b5b6000612c61868287016128a0565b935050602084013567ffffffffffffffff811115612c8257612c81613bb3565b5b612c8e868287016128b5565b92509250509250925092565b60008060408385031215612cb157612cb0613bb8565b5b6000612cbf858286016128a0565b9250506020612cd085828601612939565b9150509250929050565b60008060408385031215612cf157612cf0613bb8565b5b6000612cff858286016128a0565b9250506020612d10858286016129d4565b9150509250929050565b600060208284031215612d3057612d2f613bb8565b5b6000612d3e8482850161294e565b91505092915050565b600060208284031215612d5d57612d5c613bb8565b5b6000612d6b84828501612963565b91505092915050565b600060208284031215612d8a57612d89613bb8565b5b600082013567ffffffffffffffff811115612da857612da7613bb3565b5b612db4848285016129a6565b91505092915050565b600060208284031215612dd357612dd2613bb8565b5b6000612de1848285016129d4565b91505092915050565b6000612df683836132c5565b60208301905092915050565b612e0b81613921565b82525050565b6000612e1c82613795565b612e2681856137c3565b9350612e3183613770565b8060005b83811015612e62578151612e498882612dea565b9750612e54836137b6565b925050600181019050612e35565b5085935050505092915050565b612e7881613933565b82525050565b6000612e89826137a0565b612e9381856137d4565b9350612ea38185602086016139a4565b612eac81613bbd565b840191505092915050565b6000612ec2826137ab565b612ecc81856137f0565b9350612edc8185602086016139a4565b612ee581613bbd565b840191505092915050565b6000612efb826137ab565b612f058185613801565b9350612f158185602086016139a4565b80840191505092915050565b60008154612f2e816139d7565b612f388186613801565b94506001821660008114612f535760018114612f6457612f97565b60ff19831686528186019350612f97565b612f6d85613780565b60005b83811015612f8f57815481890152600182019150602081019050612f70565b838801955050505b50505092915050565b6000612fad6013836137f0565b9150612fb882613bce565b602082019050919050565b6000612fd0602b836137f0565b9150612fdb82613bf7565b604082019050919050565b6000612ff36032836137f0565b9150612ffe82613c46565b604082019050919050565b60006130166026836137f0565b915061302182613c95565b604082019050919050565b60006130396024836137f0565b915061304482613ce4565b604082019050919050565b600061305c6019836137f0565b915061306782613d33565b602082019050919050565b600061307f602c836137f0565b915061308a82613d5c565b604082019050919050565b60006130a26038836137f0565b91506130ad82613dab565b604082019050919050565b60006130c5602a836137f0565b91506130d082613dfa565b604082019050919050565b60006130e86029836137f0565b91506130f382613e49565b604082019050919050565b600061310b6017836137f0565b915061311682613e98565b602082019050919050565b600061312e6015836137f0565b915061313982613ec1565b602082019050919050565b6000613151602c836137f0565b915061315c82613eea565b604082019050919050565b60006131746020836137f0565b915061317f82613f39565b602082019050919050565b60006131976029836137f0565b91506131a282613f62565b604082019050919050565b60006131ba6015836137f0565b91506131c582613fb1565b602082019050919050565b60006131dd6021836137f0565b91506131e882613fda565b604082019050919050565b60006132006017836137f0565b915061320b82614029565b602082019050919050565b60006132236000836137e5565b915061322e82614052565b600082019050919050565b60006132466031836137f0565b915061325182614055565b604082019050919050565b6000613269601c836137f0565b9150613274826140a4565b602082019050919050565b600061328c602c836137f0565b9150613297826140cd565b604082019050919050565b60006132af6017836137f0565b91506132ba8261411c565b602082019050919050565b6132ce8161398b565b82525050565b6132dd8161398b565b82525050565b60006132ef8285612f21565b91506132fb8284612ef0565b91508190509392505050565b600061331282613216565b9150819050919050565b60006020820190506133316000830184612e02565b92915050565b600060808201905061334c6000830187612e02565b6133596020830186612e02565b61336660408301856132d4565b81810360608301526133788184612e7e565b905095945050505050565b6000602082019050818103600083015261339d8184612e11565b905092915050565b60006020820190506133ba6000830184612e6f565b92915050565b600060208201905081810360008301526133da8184612eb7565b905092915050565b600060208201905081810360008301526133fb81612fa0565b9050919050565b6000602082019050818103600083015261341b81612fc3565b9050919050565b6000602082019050818103600083015261343b81612fe6565b9050919050565b6000602082019050818103600083015261345b81613009565b9050919050565b6000602082019050818103600083015261347b8161302c565b9050919050565b6000602082019050818103600083015261349b8161304f565b9050919050565b600060208201905081810360008301526134bb81613072565b9050919050565b600060208201905081810360008301526134db81613095565b9050919050565b600060208201905081810360008301526134fb816130b8565b9050919050565b6000602082019050818103600083015261351b816130db565b9050919050565b6000602082019050818103600083015261353b816130fe565b9050919050565b6000602082019050818103600083015261355b81613121565b9050919050565b6000602082019050818103600083015261357b81613144565b9050919050565b6000602082019050818103600083015261359b81613167565b9050919050565b600060208201905081810360008301526135bb8161318a565b9050919050565b600060208201905081810360008301526135db816131ad565b9050919050565b600060208201905081810360008301526135fb816131d0565b9050919050565b6000602082019050818103600083015261361b816131f3565b9050919050565b6000602082019050818103600083015261363b81613239565b9050919050565b6000602082019050818103600083015261365b8161325c565b9050919050565b6000602082019050818103600083015261367b8161327f565b9050919050565b6000602082019050818103600083015261369b816132a2565b9050919050565b60006020820190506136b760008301846132d4565b92915050565b60006136c76136d8565b90506136d38282613a09565b919050565b6000604051905090565b600067ffffffffffffffff8211156136fd576136fc613b70565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561372957613728613b70565b5b61373282613bbd565b9050602081019050919050565b600067ffffffffffffffff82111561375a57613759613b70565b5b61376382613bbd565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138178261398b565b91506138228361398b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561385757613856613ab4565b5b828201905092915050565b600061386d8261398b565b91506138788361398b565b92508261388857613887613ae3565b5b828204905092915050565b600061389e8261398b565b91506138a98361398b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138e2576138e1613ab4565b5b828202905092915050565b60006138f88261398b565b91506139038361398b565b92508282101561391657613915613ab4565b5b828203905092915050565b600061392c8261396b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139c25780820151818401526020810190506139a7565b838111156139d1576000848401525b50505050565b600060028204905060018216806139ef57607f821691505b60208210811415613a0357613a02613b12565b5b50919050565b613a1282613bbd565b810181811067ffffffffffffffff82111715613a3157613a30613b70565b5b80604052505050565b6000613a458261398b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a7857613a77613ab4565b5b600182019050919050565b6000613a8e8261398b565b9150613a998361398b565b925082613aa957613aa8613ae3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f76696465642e000000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420617070726f76656420746f206275726e2e0000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f526573657276657320616c72656164792074616b656e2e000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45786365656473206d617820706572207472616e73616374696f6e2e00000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e6420746f204a6566662e000000000000000000600082015250565b61414e81613921565b811461415957600080fd5b50565b61416581613933565b811461417057600080fd5b50565b61417c8161393f565b811461418757600080fd5b50565b6141938161398b565b811461419e57600080fd5b5056fea2646970667358221220a55fdf7dcb396c9cd0c931eca0ee21b973958fbd5378c0b28824da1d505803c064736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000005961a15bcf2f43eee5e1b6b8319969feeccf715000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d54385945344c77746653373757505178566d4e544465595432376f436e585068334b545a79763439623931362f000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80634f6ccce71161011857806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd1461078e578063e985e9c5146107cb578063f2fde38b14610808578063f3993d1114610831578063f43a22dc1461085a5761020f565b806395d89b41146106d45780639ec00c95146106ff578063a22cb4651461073c578063b88d4fde146107655761020f565b80636c0360eb116100e75780636c0360eb1461060157806370a082311461062c578063715018a6146106695780638da5cb5b1461068057806391b7f5ed146106ab5761020f565b80634f6ccce71461053557806355f804b3146105725780635a4fee301461059b5780636352211e146105c45761020f565b80632db115441161019b5780633ccfd60b1161016a5780633ccfd60b1461045257806342842e0e1461046957806342966c6814610492578063438b6300146104bb5780634d44660c146104f85761020f565b80632db11544146103a35780632f745c59146103bf57806332cb6b0c146103fc5780633ad10ef6146104275761020f565b80630922f9c5116101e25780630922f9c5146102d0578063095ea7b3146102fb57806318160ddd14610324578063235b6ea11461034f57806323b872dd1461037a5761020f565b806301ffc9a714610214578063029877b61461025157806306fdde0314610268578063081812fc14610293575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612d1a565b610885565b60405161024891906133a5565b60405180910390f35b34801561025d57600080fd5b506102666108ff565b005b34801561027457600080fd5b5061027d6109f6565b60405161028a91906133c0565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190612dbd565b610a88565b6040516102c7919061331c565b60405180910390f35b3480156102dc57600080fd5b506102e5610b0d565b6040516102f291906136a2565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190612cda565b610b12565b005b34801561033057600080fd5b50610339610c2a565b60405161034691906136a2565b60405180910390f35b34801561035b57600080fd5b50610364610c37565b60405161037191906136a2565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190612b64565b610c3d565b005b6103bd60048036038101906103b89190612dbd565b610c9d565b005b3480156103cb57600080fd5b506103e660048036038101906103e19190612cda565b610dc7565b6040516103f391906136a2565b60405180910390f35b34801561040857600080fd5b50610411610f0c565b60405161041e91906136a2565b60405180910390f35b34801561043357600080fd5b5061043c610f12565b604051610449919061331c565b60405180910390f35b34801561045e57600080fd5b50610467610f38565b005b34801561047557600080fd5b50610490600480360381019061048b9190612b64565b611009565b005b34801561049e57600080fd5b506104b960048036038101906104b49190612dbd565b611029565b005b3480156104c757600080fd5b506104e260048036038101906104dd91906129e9565b611085565b6040516104ef9190613383565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190612c3a565b61118f565b60405161052c91906133a5565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190612dbd565b611250565b60405161056991906136a2565b60405180910390f35b34801561057e57600080fd5b5061059960048036038101906105949190612d74565b6112a1565b005b3480156105a757600080fd5b506105c260048036038101906105bd9190612ac5565b611337565b005b3480156105d057600080fd5b506105eb60048036038101906105e69190612dbd565b611383565b6040516105f8919061331c565b60405180910390f35b34801561060d57600080fd5b50610616611440565b60405161062391906133c0565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e91906129e9565b6114ce565b60405161066091906136a2565b60405180910390f35b34801561067557600080fd5b5061067e6115ea565b005b34801561068c57600080fd5b50610695611672565b6040516106a2919061331c565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190612dbd565b61169c565b005b3480156106e057600080fd5b506106e9611722565b6040516106f691906133c0565b60405180910390f35b34801561070b57600080fd5b50610726600480360381019061072191906129e9565b6117b4565b60405161073391906136a2565b60405180910390f35b34801561074857600080fd5b50610763600480360381019061075e9190612c9a565b6117cc565b005b34801561077157600080fd5b5061078c60048036038101906107879190612bb7565b61194d565b005b34801561079a57600080fd5b506107b560048036038101906107b09190612dbd565b6119af565b6040516107c291906133c0565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed9190612a16565b611a2b565b6040516107ff91906133a5565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a91906129e9565b611abf565b005b34801561083d57600080fd5b5061085860048036038101906108539190612a56565b611bb7565b005b34801561086657600080fd5b5061086f611c01565b60405161087c91906136a2565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f857506108f782611c06565b5b9050919050565b610907611ce8565b73ffffffffffffffffffffffffffffffffffffffff16610925611672565b73ffffffffffffffffffffffffffffffffffffffff161461097b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097290613582565b60405180910390fd5b6000600280549050146109c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ba90613602565b60405180910390fd5b60005b60008110156109f3576109e06109da611ce8565b82611cf0565b80806109eb90613a3a565b9150506109c6565b50565b606060008054610a05906139d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610a31906139d7565b8015610a7e5780601f10610a5357610100808354040283529160200191610a7e565b820191906000526020600020905b815481529060010190602001808311610a6157829003601f168201915b5050505050905090565b6000610a9382611db3565b610ad2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac990613562565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600081565b6000610b1d82611383565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b85906135e2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bad611ce8565b73ffffffffffffffffffffffffffffffffffffffff161480610bdc5750610bdb81610bd6611ce8565b611a2b565b5b610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c12906134c2565b60405180910390fd5b610c258383611e3b565b505050565b6000600280549050905090565b60085481565b610c4e610c48611ce8565b82611ef4565b610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8490613622565b60405180910390fd5b610c98838383611fd2565b505050565b600060028054905090506127108282610cb6919061380c565b10610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced906133e2565b60405180910390fd5b600a8210610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090613642565b60405180910390fd5b3460085483610d489190613893565b14610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90613522565b60405180910390fd5b60005b82811015610dc257610daf610d9e611ce8565b8284610daa919061380c565b611cf0565b8080610dba90613a3a565b915050610d8b565b505050565b6000610dd2836114ce565b8210610e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0a90613402565b60405180910390fd5b6000805b600280549050811015610eca5760028181548110610e3857610e37613b41565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610eb75783821415610ea8578092505050610f06565b8180610eb390613a3a565b9250505b8080610ec290613a3a565b915050610e17565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd90613402565b60405180910390fd5b92915050565b61271081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610f8090613307565b60006040518083038185875af1925050503d8060008114610fbd576040519150601f19603f3d011682016040523d82523d6000602084013e610fc2565b606091505b5050905080611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd90613682565b60405180910390fd5b50565b6110248383836040518060200160405280600081525061194d565b505050565b61103a611034611ce8565b82611ef4565b611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906135c2565b60405180910390fd5b6110828161218b565b50565b60606000611092836114ce565b905060008114156110ef57600067ffffffffffffffff8111156110b8576110b7613b70565b5b6040519080825280602002602001820160405280156110e65781602001602082028036833780820191505090505b5091505061118a565b60008167ffffffffffffffff81111561110b5761110a613b70565b5b6040519080825280602002602001820160405280156111395781602001602082028036833780820191505090505b50905060005b82811015611183576111518582610dc7565b82828151811061116457611163613b41565b5b602002602001018181525050808061117b90613a3a565b91505061113f565b5080925050505b919050565b6000805b83839050811015611243578473ffffffffffffffffffffffffffffffffffffffff1660028585848181106111ca576111c9613b41565b5b90506020020135815481106111e2576111e1613b41565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611232576000915050611249565b8061123c90613a3a565b9050611193565b50600190505b9392505050565b60006002805490508210611299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129090613662565b60405180910390fd5b819050919050565b6112a9611ce8565b73ffffffffffffffffffffffffffffffffffffffff166112c7611672565b73ffffffffffffffffffffffffffffffffffffffff161461131d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131490613582565b60405180910390fd5b8060069080519060200190611333929190612709565b5050565b60005b825181101561137c57611369858585848151811061135b5761135a613b41565b5b60200260200101518561194d565b808061137490613a3a565b91505061133a565b5050505050565b6000806002838154811061139a57611399613b41565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e90613502565b60405180910390fd5b80915050919050565b6006805461144d906139d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611479906139d7565b80156114c65780601f1061149b576101008083540402835291602001916114c6565b820191906000526020600020905b8154815290600101906020018083116114a957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561153f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611536906134e2565b60405180910390fd5b6000805b6002805490508110156115e0576002818154811061156457611563613b41565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156115cf57816115cc90613a3a565b91505b806115d990613a3a565b9050611543565b5080915050919050565b6115f2611ce8565b73ffffffffffffffffffffffffffffffffffffffff16611610611672565b73ffffffffffffffffffffffffffffffffffffffff1614611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613582565b60405180910390fd5b611670600061226d565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116a4611ce8565b73ffffffffffffffffffffffffffffffffffffffff166116c2611672565b73ffffffffffffffffffffffffffffffffffffffff1614611718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170f90613582565b60405180910390fd5b8060088190555050565b606060018054611731906139d7565b80601f016020809104026020016040519081016040528092919081815260200182805461175d906139d7565b80156117aa5780601f1061177f576101008083540402835291602001916117aa565b820191906000526020600020905b81548152906001019060200180831161178d57829003601f168201915b5050505050905090565b60096020528060005260406000206000915090505481565b6117d4611ce8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183990613482565b60405180910390fd5b806004600061184f611ce8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118fc611ce8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161194191906133a5565b60405180910390a35050565b61195e611958611ce8565b83611ef4565b61199d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199490613622565b60405180910390fd5b6119a984848484612333565b50505050565b60606119ba82611db3565b6119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f090613542565b60405180910390fd5b6006611a048361238f565b604051602001611a159291906132e3565b6040516020818303038152906040529050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ac7611ce8565b73ffffffffffffffffffffffffffffffffffffffff16611ae5611672565b73ffffffffffffffffffffffffffffffffffffffff1614611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3290613582565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba290613442565b60405180910390fd5b611bb48161226d565b50565b60005b8151811015611bfb57611be88484848481518110611bdb57611bda613b41565b5b6020026020010151610c3d565b8080611bf390613a3a565b915050611bba565b50505050565b600a81565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611cd157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611ce15750611ce0826124f0565b5b9050919050565b600033905090565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600060028054905082108015611e345750600073ffffffffffffffffffffffffffffffffffffffff1660028381548110611df057611def613b41565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611eae83611383565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611eff82611db3565b611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f35906134a2565b60405180910390fd5b6000611f4983611383565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611fb857508373ffffffffffffffffffffffffffffffffffffffff16611fa084610a88565b73ffffffffffffffffffffffffffffffffffffffff16145b80611fc95750611fc88185611a2b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ff282611383565b73ffffffffffffffffffffffffffffffffffffffff1614612048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203f906135a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120af90613462565b60405180910390fd5b6120c383838361255a565b6120ce600082611e3b565b81600282815481106120e3576120e2613b41565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061219682611383565b90506121a48160008461255a565b6121af600083611e3b565b6000600283815481106121c5576121c4613b41565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61233e848484611fd2565b61234a8484848461255f565b612389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238090613422565b60405180910390fd5b50505050565b606060008214156123d7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124eb565b600082905060005b600082146124095780806123f290613a3a565b915050600a826124029190613862565b91506123df565b60008167ffffffffffffffff81111561242557612424613b70565b5b6040519080825280601f01601f1916602001820160405280156124575781602001600182028036833780820191505090505b5090505b600085146124e45760018261247091906138ed565b9150600a8561247f9190613a83565b603061248b919061380c565b60f81b8183815181106124a1576124a0613b41565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124dd9190613862565b945061245b565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b60006125808473ffffffffffffffffffffffffffffffffffffffff166126f6565b156126e9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125a9611ce8565b8786866040518563ffffffff1660e01b81526004016125cb9493929190613337565b602060405180830381600087803b1580156125e557600080fd5b505af192505050801561261657506040513d601f19601f820116820180604052508101906126139190612d47565b60015b612699573d8060008114612646576040519150601f19603f3d011682016040523d82523d6000602084013e61264b565b606091505b50600081511415612691576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268890613422565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126ee565b600190505b949350505050565b600080823b905060008111915050919050565b828054612715906139d7565b90600052602060002090601f016020900481019282612737576000855561277e565b82601f1061275057805160ff191683800117855561277e565b8280016001018555821561277e579182015b8281111561277d578251825591602001919060010190612762565b5b50905061278b919061278f565b5090565b5b808211156127a8576000816000905550600101612790565b5090565b60006127bf6127ba846136e2565b6136bd565b905080838252602082019050828560208602820111156127e2576127e1613ba9565b5b60005b8581101561281257816127f888826129d4565b8452602084019350602083019250506001810190506127e5565b5050509392505050565b600061282f61282a8461370e565b6136bd565b90508281526020810184848401111561284b5761284a613bae565b5b612856848285613995565b509392505050565b600061287161286c8461373f565b6136bd565b90508281526020810184848401111561288d5761288c613bae565b5b612898848285613995565b509392505050565b6000813590506128af81614145565b92915050565b60008083601f8401126128cb576128ca613ba4565b5b8235905067ffffffffffffffff8111156128e8576128e7613b9f565b5b60208301915083602082028301111561290457612903613ba9565b5b9250929050565b600082601f8301126129205761291f613ba4565b5b81356129308482602086016127ac565b91505092915050565b6000813590506129488161415c565b92915050565b60008135905061295d81614173565b92915050565b60008151905061297281614173565b92915050565b600082601f83011261298d5761298c613ba4565b5b813561299d84826020860161281c565b91505092915050565b600082601f8301126129bb576129ba613ba4565b5b81356129cb84826020860161285e565b91505092915050565b6000813590506129e38161418a565b92915050565b6000602082840312156129ff576129fe613bb8565b5b6000612a0d848285016128a0565b91505092915050565b60008060408385031215612a2d57612a2c613bb8565b5b6000612a3b858286016128a0565b9250506020612a4c858286016128a0565b9150509250929050565b600080600060608486031215612a6f57612a6e613bb8565b5b6000612a7d868287016128a0565b9350506020612a8e868287016128a0565b925050604084013567ffffffffffffffff811115612aaf57612aae613bb3565b5b612abb8682870161290b565b9150509250925092565b60008060008060808587031215612adf57612ade613bb8565b5b6000612aed878288016128a0565b9450506020612afe878288016128a0565b935050604085013567ffffffffffffffff811115612b1f57612b1e613bb3565b5b612b2b8782880161290b565b925050606085013567ffffffffffffffff811115612b4c57612b4b613bb3565b5b612b5887828801612978565b91505092959194509250565b600080600060608486031215612b7d57612b7c613bb8565b5b6000612b8b868287016128a0565b9350506020612b9c868287016128a0565b9250506040612bad868287016129d4565b9150509250925092565b60008060008060808587031215612bd157612bd0613bb8565b5b6000612bdf878288016128a0565b9450506020612bf0878288016128a0565b9350506040612c01878288016129d4565b925050606085013567ffffffffffffffff811115612c2257612c21613bb3565b5b612c2e87828801612978565b91505092959194509250565b600080600060408486031215612c5357612c52613bb8565b5b6000612c61868287016128a0565b935050602084013567ffffffffffffffff811115612c8257612c81613bb3565b5b612c8e868287016128b5565b92509250509250925092565b60008060408385031215612cb157612cb0613bb8565b5b6000612cbf858286016128a0565b9250506020612cd085828601612939565b9150509250929050565b60008060408385031215612cf157612cf0613bb8565b5b6000612cff858286016128a0565b9250506020612d10858286016129d4565b9150509250929050565b600060208284031215612d3057612d2f613bb8565b5b6000612d3e8482850161294e565b91505092915050565b600060208284031215612d5d57612d5c613bb8565b5b6000612d6b84828501612963565b91505092915050565b600060208284031215612d8a57612d89613bb8565b5b600082013567ffffffffffffffff811115612da857612da7613bb3565b5b612db4848285016129a6565b91505092915050565b600060208284031215612dd357612dd2613bb8565b5b6000612de1848285016129d4565b91505092915050565b6000612df683836132c5565b60208301905092915050565b612e0b81613921565b82525050565b6000612e1c82613795565b612e2681856137c3565b9350612e3183613770565b8060005b83811015612e62578151612e498882612dea565b9750612e54836137b6565b925050600181019050612e35565b5085935050505092915050565b612e7881613933565b82525050565b6000612e89826137a0565b612e9381856137d4565b9350612ea38185602086016139a4565b612eac81613bbd565b840191505092915050565b6000612ec2826137ab565b612ecc81856137f0565b9350612edc8185602086016139a4565b612ee581613bbd565b840191505092915050565b6000612efb826137ab565b612f058185613801565b9350612f158185602086016139a4565b80840191505092915050565b60008154612f2e816139d7565b612f388186613801565b94506001821660008114612f535760018114612f6457612f97565b60ff19831686528186019350612f97565b612f6d85613780565b60005b83811015612f8f57815481890152600182019150602081019050612f70565b838801955050505b50505092915050565b6000612fad6013836137f0565b9150612fb882613bce565b602082019050919050565b6000612fd0602b836137f0565b9150612fdb82613bf7565b604082019050919050565b6000612ff36032836137f0565b9150612ffe82613c46565b604082019050919050565b60006130166026836137f0565b915061302182613c95565b604082019050919050565b60006130396024836137f0565b915061304482613ce4565b604082019050919050565b600061305c6019836137f0565b915061306782613d33565b602082019050919050565b600061307f602c836137f0565b915061308a82613d5c565b604082019050919050565b60006130a26038836137f0565b91506130ad82613dab565b604082019050919050565b60006130c5602a836137f0565b91506130d082613dfa565b604082019050919050565b60006130e86029836137f0565b91506130f382613e49565b604082019050919050565b600061310b6017836137f0565b915061311682613e98565b602082019050919050565b600061312e6015836137f0565b915061313982613ec1565b602082019050919050565b6000613151602c836137f0565b915061315c82613eea565b604082019050919050565b60006131746020836137f0565b915061317f82613f39565b602082019050919050565b60006131976029836137f0565b91506131a282613f62565b604082019050919050565b60006131ba6015836137f0565b91506131c582613fb1565b602082019050919050565b60006131dd6021836137f0565b91506131e882613fda565b604082019050919050565b60006132006017836137f0565b915061320b82614029565b602082019050919050565b60006132236000836137e5565b915061322e82614052565b600082019050919050565b60006132466031836137f0565b915061325182614055565b604082019050919050565b6000613269601c836137f0565b9150613274826140a4565b602082019050919050565b600061328c602c836137f0565b9150613297826140cd565b604082019050919050565b60006132af6017836137f0565b91506132ba8261411c565b602082019050919050565b6132ce8161398b565b82525050565b6132dd8161398b565b82525050565b60006132ef8285612f21565b91506132fb8284612ef0565b91508190509392505050565b600061331282613216565b9150819050919050565b60006020820190506133316000830184612e02565b92915050565b600060808201905061334c6000830187612e02565b6133596020830186612e02565b61336660408301856132d4565b81810360608301526133788184612e7e565b905095945050505050565b6000602082019050818103600083015261339d8184612e11565b905092915050565b60006020820190506133ba6000830184612e6f565b92915050565b600060208201905081810360008301526133da8184612eb7565b905092915050565b600060208201905081810360008301526133fb81612fa0565b9050919050565b6000602082019050818103600083015261341b81612fc3565b9050919050565b6000602082019050818103600083015261343b81612fe6565b9050919050565b6000602082019050818103600083015261345b81613009565b9050919050565b6000602082019050818103600083015261347b8161302c565b9050919050565b6000602082019050818103600083015261349b8161304f565b9050919050565b600060208201905081810360008301526134bb81613072565b9050919050565b600060208201905081810360008301526134db81613095565b9050919050565b600060208201905081810360008301526134fb816130b8565b9050919050565b6000602082019050818103600083015261351b816130db565b9050919050565b6000602082019050818103600083015261353b816130fe565b9050919050565b6000602082019050818103600083015261355b81613121565b9050919050565b6000602082019050818103600083015261357b81613144565b9050919050565b6000602082019050818103600083015261359b81613167565b9050919050565b600060208201905081810360008301526135bb8161318a565b9050919050565b600060208201905081810360008301526135db816131ad565b9050919050565b600060208201905081810360008301526135fb816131d0565b9050919050565b6000602082019050818103600083015261361b816131f3565b9050919050565b6000602082019050818103600083015261363b81613239565b9050919050565b6000602082019050818103600083015261365b8161325c565b9050919050565b6000602082019050818103600083015261367b8161327f565b9050919050565b6000602082019050818103600083015261369b816132a2565b9050919050565b60006020820190506136b760008301846132d4565b92915050565b60006136c76136d8565b90506136d38282613a09565b919050565b6000604051905090565b600067ffffffffffffffff8211156136fd576136fc613b70565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561372957613728613b70565b5b61373282613bbd565b9050602081019050919050565b600067ffffffffffffffff82111561375a57613759613b70565b5b61376382613bbd565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006138178261398b565b91506138228361398b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561385757613856613ab4565b5b828201905092915050565b600061386d8261398b565b91506138788361398b565b92508261388857613887613ae3565b5b828204905092915050565b600061389e8261398b565b91506138a98361398b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138e2576138e1613ab4565b5b828202905092915050565b60006138f88261398b565b91506139038361398b565b92508282101561391657613915613ab4565b5b828203905092915050565b600061392c8261396b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156139c25780820151818401526020810190506139a7565b838111156139d1576000848401525b50505050565b600060028204905060018216806139ef57607f821691505b60208210811415613a0357613a02613b12565b5b50919050565b613a1282613bbd565b810181811067ffffffffffffffff82111715613a3157613a30613b70565b5b80604052505050565b6000613a458261398b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a7857613a77613ab4565b5b600182019050919050565b6000613a8e8261398b565b9150613a998361398b565b925082613aa957613aa8613ae3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45786365646573206d617820737570706c792e00000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642066756e64732070726f76696465642e000000000000000000600082015250565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420617070726f76656420746f206275726e2e0000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f526573657276657320616c72656164792074616b656e2e000000000000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f45786365656473206d617820706572207472616e73616374696f6e2e00000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e6420746f204a6566662e000000000000000000600082015250565b61414e81613921565b811461415957600080fd5b50565b61416581613933565b811461417057600080fd5b50565b61417c8161393f565b811461418757600080fd5b50565b6141938161398b565b811461419e57600080fd5b5056fea2646970667358221220a55fdf7dcb396c9cd0c931eca0ee21b973958fbd5378c0b28824da1d505803c064736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000005961a15bcf2f43eee5e1b6b8319969feeccf715000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d54385945344c77746653373757505178566d4e544465595432376f436e585068334b545a79763439623931362f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): https://gateway.pinata.cloud/ipfs/QmT8YE4LwtfS77WPQxVmNTDeYT27oCnXPh3KTZyv49b916/
Arg [1] : _devAddress (address): 0x05961a15BCF2f43eEe5e1b6B8319969FEECCf715

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000005961a15bcf2f43eee5e1b6b8319969feeccf715
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [3] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [4] : 732f516d54385945344c77746653373757505178566d4e544465595432376f43
Arg [5] : 6e585068334b545a79763439623931362f000000000000000000000000000000


Deployed Bytecode Sourcemap

123:3406:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;544:224:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1203:200:2;;;;;;;;;;;;;:::i;:::-;;2249:100:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3061:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;395:51:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2584:411:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;844:110:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;453:34:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4120:376:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1411:432:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1320:490:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;272:55:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;225:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2017:169;;;;;;;;;;;;;:::i;:::-;;4567:185:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1851:158:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2194:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3093:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1031:205:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;760:98:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2830:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1856:326:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;177:35:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1402:392:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:11;;;;;;;;;;;;;:::i;:::-;;1063:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1104:91:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2418:104:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;496:47:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3441:327:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4823:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;866:230:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3839:214:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1972:201:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2602:220:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;336:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;544:224:5;646:4;685:35;670:50;;;:11;:50;;;;:90;;;;724:36;748:11;724:23;:36::i;:::-;670:90;663:97;;544:224;;;:::o;1203:200:2:-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1286:1:2::1;1268:7;:14;;;;:19;1260:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1330:9;1326:69;445:1;1341;:12;1326:69;;;1373:22;1379:12;:10;:12::i;:::-;1393:1;1373:5;:22::i;:::-;1355:3;;;;;:::i;:::-;;;;1326:69;;;;1203:200::o:0;2249:100:4:-;2303:13;2336:5;2329:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2249:100;:::o;3061:308::-;3182:7;3229:16;3237:7;3229;:16::i;:::-;3207:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3337:15;:24;3353:7;3337:24;;;;;;;;;;;;;;;;;;;;;3330:31;;3061:308;;;:::o;395:51:2:-;445:1;395:51;:::o;2584:411:4:-;2665:13;2681:23;2696:7;2681:14;:23::i;:::-;2665:39;;2729:5;2723:11;;:2;:11;;;;2715:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;2823:5;2807:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;2832:37;2849:5;2856:12;:10;:12::i;:::-;2832:16;:37::i;:::-;2807:62;2785:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;2966:21;2975:2;2979:7;2966:8;:21::i;:::-;2654:341;2584:411;;:::o;844:110:5:-;905:7;932;:14;;;;925:21;;844:110;:::o;453:34:2:-;;;;:::o;4120:376:4:-;4329:41;4348:12;:10;:12::i;:::-;4362:7;4329:18;:41::i;:::-;4307:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;4460:28;4470:4;4476:2;4480:7;4460:9;:28::i;:::-;4120:376;;;:::o;1411:432:2:-;1472:19;1494:7;:14;;;;1472:36;;322:5;1541;1527:11;:19;;;;:::i;:::-;:32;1519:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;386:2;1602:5;:18;1594:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;1690:9;1680:6;;1672:5;:14;;;;:::i;:::-;:27;1664:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1748:6;1744:92;1760:5;1756:1;:9;1744:92;;;1788:36;1794:12;:10;:12::i;:::-;1822:1;1808:11;:15;;;;:::i;:::-;1788:5;:36::i;:::-;1767:3;;;;;:::i;:::-;;;;1744:92;;;;1461:382;1411:432;:::o;1320:490:5:-;1417:15;1461:16;1471:5;1461:9;:16::i;:::-;1453:5;:24;1445:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;1538:10;1563:6;1559:178;1575:7;:14;;;;1571:1;:18;1559:178;;;1622:7;1630:1;1622:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1613:19;;:5;:19;;;1610:116;;;1664:5;1655;:14;1652:58;;;1678:1;1671:8;;;;;;1652:58;1703:7;;;;;:::i;:::-;;;;1610:116;1591:3;;;;;:::i;:::-;;;;1559:178;;;;1749:53;;;;;;;;;;:::i;:::-;;;;;;;;1320:490;;;;;:::o;272:55:2:-;322:5;272:55;:::o;225:38::-;;;;;;;;;;;;;:::o;2017:169::-;2057:12;2075:10;;;;;;;;;;;:15;;2098:21;2075:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2056:68;;;2143:7;2135:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;2045:141;2017:169::o;4567:185:4:-;4705:39;4722:4;4728:2;4732:7;4705:39;;;;;;;;;;;;:16;:39::i;:::-;4567:185;;;:::o;1851:158:2:-;1909:41;1928:12;:10;:12::i;:::-;1942:7;1909:18;:41::i;:::-;1901:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;1987:14;1993:7;1987:5;:14::i;:::-;1851:158;:::o;2194:400::-;2254:16;2283:18;2304:17;2314:6;2304:9;:17::i;:::-;2283:38;;2350:1;2336:10;:15;2332:44;;;2374:1;2360:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2353:23;;;;;2332:44;2389:25;2431:10;2417:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2389:53;;2458:9;2453:108;2473:10;2469:1;:14;2453:108;;;2519:30;2539:6;2547:1;2519:19;:30::i;:::-;2505:8;2514:1;2505:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;2485:3;;;;;:::i;:::-;;;;2453:108;;;;2578:8;2571:15;;;;2194:400;;;;:::o;3093:271::-;3182:4;3202:9;3198:135;3217:9;;:16;;3213:1;:20;3198:135;;;3283:7;3258:32;;:7;3266:9;;3276:1;3266:12;;;;;;;:::i;:::-;;;;;;;;3258:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;3255:66;;3316:5;3309:12;;;;;3255:66;3235:3;;;;:::i;:::-;;;3198:135;;;;3352:4;3345:11;;3093:271;;;;;;:::o;1031:205:5:-;1106:7;1142;:14;;;;1134:5;:22;1126:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;1223:5;1216:12;;1031:205;;;:::o;760:98:2:-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;842:8:2::1;832:7;:18;;;;;;;;;;;;:::i;:::-;;760:98:::0;:::o;2830:255::-;2960:9;2955:123;2979:9;:16;2975:1;:20;2955:123;;;3017:49;3034:5;3041:3;3046:9;3056:1;3046:12;;;;;;;;:::i;:::-;;;;;;;;3060:5;3017:16;:49::i;:::-;2997:3;;;;;:::i;:::-;;;;2955:123;;;;2830:255;;;;:::o;1856:326:4:-;1973:7;1998:13;2014:7;2022;2014:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1998:32;;2080:1;2063:19;;:5;:19;;;;2041:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;2169:5;2162:12;;;1856:326;;;:::o;177:35:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1402:392:4:-;1524:4;1572:1;1555:19;;:5;:19;;;;1547:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1634:10;1660:6;1655:109;1672:7;:14;;;;1668:1;:18;1655:109;;;1719:7;1727:1;1719:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1710:19;;:5;:19;;;1706:46;;;1745:7;;;;:::i;:::-;;;1706:46;1688:3;;;;:::i;:::-;;;1655:109;;;;1781:5;1774:12;;;1402:392;;;:::o;1714:103:11:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;1063:87::-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;1104:91:2:-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1178:9:2::1;1169:6;:18;;;;1104:91:::0;:::o;2418:104:4:-;2474:13;2507:7;2500:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2418:104;:::o;496:47:2:-;;;;;;;;;;;;;;;;;:::o;3441:327:4:-;3588:12;:10;:12::i;:::-;3576:24;;:8;:24;;;;3568:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;3688:8;3643:18;:32;3662:12;:10;:12::i;:::-;3643:32;;;;;;;;;;;;;;;:42;3676:8;3643:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;3741:8;3712:48;;3727:12;:10;:12::i;:::-;3712:48;;;3751:8;3712:48;;;;;;:::i;:::-;;;;;;;;3441:327;;:::o;4823:365::-;5012:41;5031:12;:10;:12::i;:::-;5045:7;5012:18;:41::i;:::-;4990:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;5141:39;5155:4;5161:2;5165:7;5174:5;5141:13;:39::i;:::-;4823:365;;;;:::o;866:230:2:-;932:13;966:17;974:8;966:7;:17::i;:::-;958:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;1051:7;1060:26;1077:8;1060:16;:26::i;:::-;1034:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1020:68;;866:230;;;:::o;3839:214:4:-;3981:4;4010:18;:25;4029:5;4010:25;;;;;;;;;;;;;;;:35;4036:8;4010:35;;;;;;;;;;;;;;;;;;;;;;;;;4003:42;;3839:214;;;;:::o;1972:201:11:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;;;2053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;2602:220:2:-;2708:9;2703:112;2727:9;:16;2723:1;:20;2703:112;;;2765:38;2778:5;2785:3;2790:9;2800:1;2790:12;;;;;;;;:::i;:::-;;;;;;;;2765;:38::i;:::-;2745:3;;;;;:::i;:::-;;;;2703:112;;;;2602:220;;;:::o;336:52::-;386:2;336:52;:::o;983:355:4:-;1130:4;1187:25;1172:40;;;:11;:40;;;;:105;;;;1244:33;1229:48;;;:11;:48;;;;1172:105;:158;;;;1294:36;1318:11;1294:23;:36::i;:::-;1172:158;1152:178;;983:355;;;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;3372:154:2:-;3453:7;3466:2;3453:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3510:7;3506:2;3485:33;;3502:1;3485:33;;;;;;;;;;;;3372:154;;:::o;6735:155:4:-;6800:4;6834:7;:14;;;;6824:7;:24;:58;;;;;6880:1;6852:30;;:7;6860;6852:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;6824:58;6817:65;;6735:155;;;:::o;10760:174::-;10862:2;10835:15;:24;10851:7;10835:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;10918:7;10914:2;10880:46;;10889:23;10904:7;10889:14;:23::i;:::-;10880:46;;;;;;;;;;;;10760:174;;:::o;7057:452::-;7186:4;7230:16;7238:7;7230;:16::i;:::-;7208:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;7329:13;7345:23;7360:7;7345:14;:23::i;:::-;7329:39;;7398:5;7387:16;;:7;:16;;;:64;;;;7444:7;7420:31;;:20;7432:7;7420:11;:20::i;:::-;:31;;;7387:64;:113;;;;7468:32;7485:5;7492:7;7468:16;:32::i;:::-;7387:113;7379:122;;;7057:452;;;;:::o;10089:553::-;10262:4;10235:31;;:23;10250:7;10235:14;:23::i;:::-;:31;;;10213:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;10368:1;10354:16;;:2;:16;;;;10346:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10424:39;10445:4;10451:2;10455:7;10424:20;:39::i;:::-;10528:29;10545:1;10549:7;10528:8;:29::i;:::-;10587:2;10568:7;10576;10568:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10626:7;10622:2;10607:27;;10616:4;10607:27;;;;;;;;;;;;10089:553;;;:::o;9420:332::-;9480:13;9496:23;9511:7;9496:14;:23::i;:::-;9480:39;;9532:48;9553:5;9568:1;9572:7;9532:20;:48::i;:::-;9621:29;9638:1;9642:7;9621:8;:29::i;:::-;9688:1;9661:7;9669;9661:16;;;;;;;;:::i;:::-;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;9736:7;9732:1;9708:36;;9717:5;9708:36;;;;;;;;;;;;9469:283;9420:332;:::o;2333:191:11:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2396:128;2333:191;:::o;6070:352:4:-;6227:28;6237:4;6243:2;6247:7;6227:9;:28::i;:::-;6288:48;6311:4;6317:2;6321:7;6330:5;6288:22;:48::i;:::-;6266:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;6070:352;;;;:::o;342:723:12:-;398:13;628:1;619:5;:10;615:53;;;646:10;;;;;;;;;;;;;;;;;;;;;615:53;678:12;693:5;678:20;;709:14;734:78;749:1;741:4;:9;734:78;;767:8;;;;;:::i;:::-;;;;798:2;790:10;;;;;:::i;:::-;;;734:78;;;822:19;854:6;844:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;822:39;;872:154;888:1;879:5;:10;872:154;;916:1;906:11;;;;;:::i;:::-;;;983:2;975:5;:10;;;;:::i;:::-;962:2;:24;;;;:::i;:::-;949:39;;932:6;939;932:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1012:2;1003:11;;;;;:::i;:::-;;;872:154;;;1050:6;1036:21;;;;;342:723;;;;:::o;854:157:3:-;939:4;978:25;963:40;;;:11;:40;;;;956:47;;854:157;;;:::o;13051:126:4:-;;;;:::o;11499:980::-;11654:4;11675:15;:2;:13;;;:15::i;:::-;11671:801;;;11744:2;11728:36;;;11787:12;:10;:12::i;:::-;11822:4;11849:7;11879:5;11728:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11707:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12103:1;12086:6;:13;:18;12082:320;;;12129:108;;;;;;;;;;:::i;:::-;;;;;;;;12082:320;12352:6;12346:13;12337:6;12333:2;12329:15;12322:38;11707:710;11977:41;;;11967:51;;;:6;:51;;;;11960:58;;;;;11671:801;12456:4;12449:11;;11499:980;;;;;;;:::o;83:193:0:-;143:4;160:9;224:7;212:20;204:28;;267:1;260:4;:8;253:15;;;83:193;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:13:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:370::-;2410:5;2459:3;2452:4;2444:6;2440:17;2436:27;2426:122;;2467:79;;:::i;:::-;2426:122;2584:6;2571:20;2609:94;2699:3;2691:6;2684:4;2676:6;2672:17;2609:94;:::i;:::-;2600:103;;2416:293;2339:370;;;;:::o;2715:133::-;2758:5;2796:6;2783:20;2774:29;;2812:30;2836:5;2812:30;:::i;:::-;2715:133;;;;:::o;2854:137::-;2899:5;2937:6;2924:20;2915:29;;2953:32;2979:5;2953:32;:::i;:::-;2854:137;;;;:::o;2997:141::-;3053:5;3084:6;3078:13;3069:22;;3100:32;3126:5;3100:32;:::i;:::-;2997:141;;;;:::o;3157:338::-;3212:5;3261:3;3254:4;3246:6;3242:17;3238:27;3228:122;;3269:79;;:::i;:::-;3228:122;3386:6;3373:20;3411:78;3485:3;3477:6;3470:4;3462:6;3458:17;3411:78;:::i;:::-;3402:87;;3218:277;3157:338;;;;:::o;3515:340::-;3571:5;3620:3;3613:4;3605:6;3601:17;3597:27;3587:122;;3628:79;;:::i;:::-;3587:122;3745:6;3732:20;3770:79;3845:3;3837:6;3830:4;3822:6;3818:17;3770:79;:::i;:::-;3761:88;;3577:278;3515:340;;;;:::o;3861:139::-;3907:5;3945:6;3932:20;3923:29;;3961:33;3988:5;3961:33;:::i;:::-;3861:139;;;;:::o;4006:329::-;4065:6;4114:2;4102:9;4093:7;4089:23;4085:32;4082:119;;;4120:79;;:::i;:::-;4082:119;4240:1;4265:53;4310:7;4301:6;4290:9;4286:22;4265:53;:::i;:::-;4255:63;;4211:117;4006:329;;;;:::o;4341:474::-;4409:6;4417;4466:2;4454:9;4445:7;4441:23;4437:32;4434:119;;;4472:79;;:::i;:::-;4434:119;4592:1;4617:53;4662:7;4653:6;4642:9;4638:22;4617:53;:::i;:::-;4607:63;;4563:117;4719:2;4745:53;4790:7;4781:6;4770:9;4766:22;4745:53;:::i;:::-;4735:63;;4690:118;4341:474;;;;;:::o;4821:829::-;4923:6;4931;4939;4988:2;4976:9;4967:7;4963:23;4959:32;4956:119;;;4994:79;;:::i;:::-;4956:119;5114:1;5139:53;5184:7;5175:6;5164:9;5160:22;5139:53;:::i;:::-;5129:63;;5085:117;5241:2;5267:53;5312:7;5303:6;5292:9;5288:22;5267:53;:::i;:::-;5257:63;;5212:118;5397:2;5386:9;5382:18;5369:32;5428:18;5420:6;5417:30;5414:117;;;5450:79;;:::i;:::-;5414:117;5555:78;5625:7;5616:6;5605:9;5601:22;5555:78;:::i;:::-;5545:88;;5340:303;4821:829;;;;;:::o;5656:1153::-;5776:6;5784;5792;5800;5849:3;5837:9;5828:7;5824:23;5820:33;5817:120;;;5856:79;;:::i;:::-;5817:120;5976:1;6001:53;6046:7;6037:6;6026:9;6022:22;6001:53;:::i;:::-;5991:63;;5947:117;6103:2;6129:53;6174:7;6165:6;6154:9;6150:22;6129:53;:::i;:::-;6119:63;;6074:118;6259:2;6248:9;6244:18;6231:32;6290:18;6282:6;6279:30;6276:117;;;6312:79;;:::i;:::-;6276:117;6417:78;6487:7;6478:6;6467:9;6463:22;6417:78;:::i;:::-;6407:88;;6202:303;6572:2;6561:9;6557:18;6544:32;6603:18;6595:6;6592:30;6589:117;;;6625:79;;:::i;:::-;6589:117;6730:62;6784:7;6775:6;6764:9;6760:22;6730:62;:::i;:::-;6720:72;;6515:287;5656:1153;;;;;;;:::o;6815:619::-;6892:6;6900;6908;6957:2;6945:9;6936:7;6932:23;6928:32;6925:119;;;6963:79;;:::i;:::-;6925:119;7083:1;7108:53;7153:7;7144:6;7133:9;7129:22;7108:53;:::i;:::-;7098:63;;7054:117;7210:2;7236:53;7281:7;7272:6;7261:9;7257:22;7236:53;:::i;:::-;7226:63;;7181:118;7338:2;7364:53;7409:7;7400:6;7389:9;7385:22;7364:53;:::i;:::-;7354:63;;7309:118;6815:619;;;;;:::o;7440:943::-;7535:6;7543;7551;7559;7608:3;7596:9;7587:7;7583:23;7579:33;7576:120;;;7615:79;;:::i;:::-;7576:120;7735:1;7760:53;7805:7;7796:6;7785:9;7781:22;7760:53;:::i;:::-;7750:63;;7706:117;7862:2;7888:53;7933:7;7924:6;7913:9;7909:22;7888:53;:::i;:::-;7878:63;;7833:118;7990:2;8016:53;8061:7;8052:6;8041:9;8037:22;8016:53;:::i;:::-;8006:63;;7961:118;8146:2;8135:9;8131:18;8118:32;8177:18;8169:6;8166:30;8163:117;;;8199:79;;:::i;:::-;8163:117;8304:62;8358:7;8349:6;8338:9;8334:22;8304:62;:::i;:::-;8294:72;;8089:287;7440:943;;;;;;;:::o;8389:704::-;8484:6;8492;8500;8549:2;8537:9;8528:7;8524:23;8520:32;8517:119;;;8555:79;;:::i;:::-;8517:119;8675:1;8700:53;8745:7;8736:6;8725:9;8721:22;8700:53;:::i;:::-;8690:63;;8646:117;8830:2;8819:9;8815:18;8802:32;8861:18;8853:6;8850:30;8847:117;;;8883:79;;:::i;:::-;8847:117;8996:80;9068:7;9059:6;9048:9;9044:22;8996:80;:::i;:::-;8978:98;;;;8773:313;8389:704;;;;;:::o;9099:468::-;9164:6;9172;9221:2;9209:9;9200:7;9196:23;9192:32;9189:119;;;9227:79;;:::i;:::-;9189:119;9347:1;9372:53;9417:7;9408:6;9397:9;9393:22;9372:53;:::i;:::-;9362:63;;9318:117;9474:2;9500:50;9542:7;9533:6;9522:9;9518:22;9500:50;:::i;:::-;9490:60;;9445:115;9099:468;;;;;:::o;9573:474::-;9641:6;9649;9698:2;9686:9;9677:7;9673:23;9669:32;9666:119;;;9704:79;;:::i;:::-;9666:119;9824:1;9849:53;9894:7;9885:6;9874:9;9870:22;9849:53;:::i;:::-;9839:63;;9795:117;9951:2;9977:53;10022:7;10013:6;10002:9;9998:22;9977:53;:::i;:::-;9967:63;;9922:118;9573:474;;;;;:::o;10053:327::-;10111:6;10160:2;10148:9;10139:7;10135:23;10131:32;10128:119;;;10166:79;;:::i;:::-;10128:119;10286:1;10311:52;10355:7;10346:6;10335:9;10331:22;10311:52;:::i;:::-;10301:62;;10257:116;10053:327;;;;:::o;10386:349::-;10455:6;10504:2;10492:9;10483:7;10479:23;10475:32;10472:119;;;10510:79;;:::i;:::-;10472:119;10630:1;10655:63;10710:7;10701:6;10690:9;10686:22;10655:63;:::i;:::-;10645:73;;10601:127;10386:349;;;;:::o;10741:509::-;10810:6;10859:2;10847:9;10838:7;10834:23;10830:32;10827:119;;;10865:79;;:::i;:::-;10827:119;11013:1;11002:9;10998:17;10985:31;11043:18;11035:6;11032:30;11029:117;;;11065:79;;:::i;:::-;11029:117;11170:63;11225:7;11216:6;11205:9;11201:22;11170:63;:::i;:::-;11160:73;;10956:287;10741:509;;;;:::o;11256:329::-;11315:6;11364:2;11352:9;11343:7;11339:23;11335:32;11332:119;;;11370:79;;:::i;:::-;11332:119;11490:1;11515:53;11560:7;11551:6;11540:9;11536:22;11515:53;:::i;:::-;11505:63;;11461:117;11256:329;;;;:::o;11591:179::-;11660:10;11681:46;11723:3;11715:6;11681:46;:::i;:::-;11759:4;11754:3;11750:14;11736:28;;11591:179;;;;:::o;11776:118::-;11863:24;11881:5;11863:24;:::i;:::-;11858:3;11851:37;11776:118;;:::o;11930:732::-;12049:3;12078:54;12126:5;12078:54;:::i;:::-;12148:86;12227:6;12222:3;12148:86;:::i;:::-;12141:93;;12258:56;12308:5;12258:56;:::i;:::-;12337:7;12368:1;12353:284;12378:6;12375:1;12372:13;12353:284;;;12454:6;12448:13;12481:63;12540:3;12525:13;12481:63;:::i;:::-;12474:70;;12567:60;12620:6;12567:60;:::i;:::-;12557:70;;12413:224;12400:1;12397;12393:9;12388:14;;12353:284;;;12357:14;12653:3;12646:10;;12054:608;;;11930:732;;;;:::o;12668:109::-;12749:21;12764:5;12749:21;:::i;:::-;12744:3;12737:34;12668:109;;:::o;12783:360::-;12869:3;12897:38;12929:5;12897:38;:::i;:::-;12951:70;13014:6;13009:3;12951:70;:::i;:::-;12944:77;;13030:52;13075:6;13070:3;13063:4;13056:5;13052:16;13030:52;:::i;:::-;13107:29;13129:6;13107:29;:::i;:::-;13102:3;13098:39;13091:46;;12873:270;12783:360;;;;:::o;13149:364::-;13237:3;13265:39;13298:5;13265:39;:::i;:::-;13320:71;13384:6;13379:3;13320:71;:::i;:::-;13313:78;;13400:52;13445:6;13440:3;13433:4;13426:5;13422:16;13400:52;:::i;:::-;13477:29;13499:6;13477:29;:::i;:::-;13472:3;13468:39;13461:46;;13241:272;13149:364;;;;:::o;13519:377::-;13625:3;13653:39;13686:5;13653:39;:::i;:::-;13708:89;13790:6;13785:3;13708:89;:::i;:::-;13701:96;;13806:52;13851:6;13846:3;13839:4;13832:5;13828:16;13806:52;:::i;:::-;13883:6;13878:3;13874:16;13867:23;;13629:267;13519:377;;;;:::o;13926:845::-;14029:3;14066:5;14060:12;14095:36;14121:9;14095:36;:::i;:::-;14147:89;14229:6;14224:3;14147:89;:::i;:::-;14140:96;;14267:1;14256:9;14252:17;14283:1;14278:137;;;;14429:1;14424:341;;;;14245:520;;14278:137;14362:4;14358:9;14347;14343:25;14338:3;14331:38;14398:6;14393:3;14389:16;14382:23;;14278:137;;14424:341;14491:38;14523:5;14491:38;:::i;:::-;14551:1;14565:154;14579:6;14576:1;14573:13;14565:154;;;14653:7;14647:14;14643:1;14638:3;14634:11;14627:35;14703:1;14694:7;14690:15;14679:26;;14601:4;14598:1;14594:12;14589:17;;14565:154;;;14748:6;14743:3;14739:16;14732:23;;14431:334;;14245:520;;14033:738;;13926:845;;;;:::o;14777:366::-;14919:3;14940:67;15004:2;14999:3;14940:67;:::i;:::-;14933:74;;15016:93;15105:3;15016:93;:::i;:::-;15134:2;15129:3;15125:12;15118:19;;14777:366;;;:::o;15149:::-;15291:3;15312:67;15376:2;15371:3;15312:67;:::i;:::-;15305:74;;15388:93;15477:3;15388:93;:::i;:::-;15506:2;15501:3;15497:12;15490:19;;15149:366;;;:::o;15521:::-;15663:3;15684:67;15748:2;15743:3;15684:67;:::i;:::-;15677:74;;15760:93;15849:3;15760:93;:::i;:::-;15878:2;15873:3;15869:12;15862:19;;15521:366;;;:::o;15893:::-;16035:3;16056:67;16120:2;16115:3;16056:67;:::i;:::-;16049:74;;16132:93;16221:3;16132:93;:::i;:::-;16250:2;16245:3;16241:12;16234:19;;15893:366;;;:::o;16265:::-;16407:3;16428:67;16492:2;16487:3;16428:67;:::i;:::-;16421:74;;16504:93;16593:3;16504:93;:::i;:::-;16622:2;16617:3;16613:12;16606:19;;16265:366;;;:::o;16637:::-;16779:3;16800:67;16864:2;16859:3;16800:67;:::i;:::-;16793:74;;16876:93;16965:3;16876:93;:::i;:::-;16994:2;16989:3;16985:12;16978:19;;16637:366;;;:::o;17009:::-;17151:3;17172:67;17236:2;17231:3;17172:67;:::i;:::-;17165:74;;17248:93;17337:3;17248:93;:::i;:::-;17366:2;17361:3;17357:12;17350:19;;17009:366;;;:::o;17381:::-;17523:3;17544:67;17608:2;17603:3;17544:67;:::i;:::-;17537:74;;17620:93;17709:3;17620:93;:::i;:::-;17738:2;17733:3;17729:12;17722:19;;17381:366;;;:::o;17753:::-;17895:3;17916:67;17980:2;17975:3;17916:67;:::i;:::-;17909:74;;17992:93;18081:3;17992:93;:::i;:::-;18110:2;18105:3;18101:12;18094:19;;17753:366;;;:::o;18125:::-;18267:3;18288:67;18352:2;18347:3;18288:67;:::i;:::-;18281:74;;18364:93;18453:3;18364:93;:::i;:::-;18482:2;18477:3;18473:12;18466:19;;18125:366;;;:::o;18497:::-;18639:3;18660:67;18724:2;18719:3;18660:67;:::i;:::-;18653:74;;18736:93;18825:3;18736:93;:::i;:::-;18854:2;18849:3;18845:12;18838:19;;18497:366;;;:::o;18869:::-;19011:3;19032:67;19096:2;19091:3;19032:67;:::i;:::-;19025:74;;19108:93;19197:3;19108:93;:::i;:::-;19226:2;19221:3;19217:12;19210:19;;18869:366;;;:::o;19241:::-;19383:3;19404:67;19468:2;19463:3;19404:67;:::i;:::-;19397:74;;19480:93;19569:3;19480:93;:::i;:::-;19598:2;19593:3;19589:12;19582:19;;19241:366;;;:::o;19613:::-;19755:3;19776:67;19840:2;19835:3;19776:67;:::i;:::-;19769:74;;19852:93;19941:3;19852:93;:::i;:::-;19970:2;19965:3;19961:12;19954:19;;19613:366;;;:::o;19985:::-;20127:3;20148:67;20212:2;20207:3;20148:67;:::i;:::-;20141:74;;20224:93;20313:3;20224:93;:::i;:::-;20342:2;20337:3;20333:12;20326:19;;19985:366;;;:::o;20357:::-;20499:3;20520:67;20584:2;20579:3;20520:67;:::i;:::-;20513:74;;20596:93;20685:3;20596:93;:::i;:::-;20714:2;20709:3;20705:12;20698:19;;20357:366;;;:::o;20729:::-;20871:3;20892:67;20956:2;20951:3;20892:67;:::i;:::-;20885:74;;20968:93;21057:3;20968:93;:::i;:::-;21086:2;21081:3;21077:12;21070:19;;20729:366;;;:::o;21101:::-;21243:3;21264:67;21328:2;21323:3;21264:67;:::i;:::-;21257:74;;21340:93;21429:3;21340:93;:::i;:::-;21458:2;21453:3;21449:12;21442:19;;21101:366;;;:::o;21473:398::-;21632:3;21653:83;21734:1;21729:3;21653:83;:::i;:::-;21646:90;;21745:93;21834:3;21745:93;:::i;:::-;21863:1;21858:3;21854:11;21847:18;;21473:398;;;:::o;21877:366::-;22019:3;22040:67;22104:2;22099:3;22040:67;:::i;:::-;22033:74;;22116:93;22205:3;22116:93;:::i;:::-;22234:2;22229:3;22225:12;22218:19;;21877:366;;;:::o;22249:::-;22391:3;22412:67;22476:2;22471:3;22412:67;:::i;:::-;22405:74;;22488:93;22577:3;22488:93;:::i;:::-;22606:2;22601:3;22597:12;22590:19;;22249:366;;;:::o;22621:::-;22763:3;22784:67;22848:2;22843:3;22784:67;:::i;:::-;22777:74;;22860:93;22949:3;22860:93;:::i;:::-;22978:2;22973:3;22969:12;22962:19;;22621:366;;;:::o;22993:::-;23135:3;23156:67;23220:2;23215:3;23156:67;:::i;:::-;23149:74;;23232:93;23321:3;23232:93;:::i;:::-;23350:2;23345:3;23341:12;23334:19;;22993:366;;;:::o;23365:108::-;23442:24;23460:5;23442:24;:::i;:::-;23437:3;23430:37;23365:108;;:::o;23479:118::-;23566:24;23584:5;23566:24;:::i;:::-;23561:3;23554:37;23479:118;;:::o;23603:429::-;23780:3;23802:92;23890:3;23881:6;23802:92;:::i;:::-;23795:99;;23911:95;24002:3;23993:6;23911:95;:::i;:::-;23904:102;;24023:3;24016:10;;23603:429;;;;;:::o;24038:379::-;24222:3;24244:147;24387:3;24244:147;:::i;:::-;24237:154;;24408:3;24401:10;;24038:379;;;:::o;24423:222::-;24516:4;24554:2;24543:9;24539:18;24531:26;;24567:71;24635:1;24624:9;24620:17;24611:6;24567:71;:::i;:::-;24423:222;;;;:::o;24651:640::-;24846:4;24884:3;24873:9;24869:19;24861:27;;24898:71;24966:1;24955:9;24951:17;24942:6;24898:71;:::i;:::-;24979:72;25047:2;25036:9;25032:18;25023:6;24979:72;:::i;:::-;25061;25129:2;25118:9;25114:18;25105:6;25061:72;:::i;:::-;25180:9;25174:4;25170:20;25165:2;25154:9;25150:18;25143:48;25208:76;25279:4;25270:6;25208:76;:::i;:::-;25200:84;;24651:640;;;;;;;:::o;25297:373::-;25440:4;25478:2;25467:9;25463:18;25455:26;;25527:9;25521:4;25517:20;25513:1;25502:9;25498:17;25491:47;25555:108;25658:4;25649:6;25555:108;:::i;:::-;25547:116;;25297:373;;;;:::o;25676:210::-;25763:4;25801:2;25790:9;25786:18;25778:26;;25814:65;25876:1;25865:9;25861:17;25852:6;25814:65;:::i;:::-;25676:210;;;;:::o;25892:313::-;26005:4;26043:2;26032:9;26028:18;26020:26;;26092:9;26086:4;26082:20;26078:1;26067:9;26063:17;26056:47;26120:78;26193:4;26184:6;26120:78;:::i;:::-;26112:86;;25892:313;;;;:::o;26211:419::-;26377:4;26415:2;26404:9;26400:18;26392:26;;26464:9;26458:4;26454:20;26450:1;26439:9;26435:17;26428:47;26492:131;26618:4;26492:131;:::i;:::-;26484:139;;26211:419;;;:::o;26636:::-;26802:4;26840:2;26829:9;26825:18;26817:26;;26889:9;26883:4;26879:20;26875:1;26864:9;26860:17;26853:47;26917:131;27043:4;26917:131;:::i;:::-;26909:139;;26636:419;;;:::o;27061:::-;27227:4;27265:2;27254:9;27250:18;27242:26;;27314:9;27308:4;27304:20;27300:1;27289:9;27285:17;27278:47;27342:131;27468:4;27342:131;:::i;:::-;27334:139;;27061:419;;;:::o;27486:::-;27652:4;27690:2;27679:9;27675:18;27667:26;;27739:9;27733:4;27729:20;27725:1;27714:9;27710:17;27703:47;27767:131;27893:4;27767:131;:::i;:::-;27759:139;;27486:419;;;:::o;27911:::-;28077:4;28115:2;28104:9;28100:18;28092:26;;28164:9;28158:4;28154:20;28150:1;28139:9;28135:17;28128:47;28192:131;28318:4;28192:131;:::i;:::-;28184:139;;27911:419;;;:::o;28336:::-;28502:4;28540:2;28529:9;28525:18;28517:26;;28589:9;28583:4;28579:20;28575:1;28564:9;28560:17;28553:47;28617:131;28743:4;28617:131;:::i;:::-;28609:139;;28336:419;;;:::o;28761:::-;28927:4;28965:2;28954:9;28950:18;28942:26;;29014:9;29008:4;29004:20;29000:1;28989:9;28985:17;28978:47;29042:131;29168:4;29042:131;:::i;:::-;29034:139;;28761:419;;;:::o;29186:::-;29352:4;29390:2;29379:9;29375:18;29367:26;;29439:9;29433:4;29429:20;29425:1;29414:9;29410:17;29403:47;29467:131;29593:4;29467:131;:::i;:::-;29459:139;;29186:419;;;:::o;29611:::-;29777:4;29815:2;29804:9;29800:18;29792:26;;29864:9;29858:4;29854:20;29850:1;29839:9;29835:17;29828:47;29892:131;30018:4;29892:131;:::i;:::-;29884:139;;29611:419;;;:::o;30036:::-;30202:4;30240:2;30229:9;30225:18;30217:26;;30289:9;30283:4;30279:20;30275:1;30264:9;30260:17;30253:47;30317:131;30443:4;30317:131;:::i;:::-;30309:139;;30036:419;;;:::o;30461:::-;30627:4;30665:2;30654:9;30650:18;30642:26;;30714:9;30708:4;30704:20;30700:1;30689:9;30685:17;30678:47;30742:131;30868:4;30742:131;:::i;:::-;30734:139;;30461:419;;;:::o;30886:::-;31052:4;31090:2;31079:9;31075:18;31067:26;;31139:9;31133:4;31129:20;31125:1;31114:9;31110:17;31103:47;31167:131;31293:4;31167:131;:::i;:::-;31159:139;;30886:419;;;:::o;31311:::-;31477:4;31515:2;31504:9;31500:18;31492:26;;31564:9;31558:4;31554:20;31550:1;31539:9;31535:17;31528:47;31592:131;31718:4;31592:131;:::i;:::-;31584:139;;31311:419;;;:::o;31736:::-;31902:4;31940:2;31929:9;31925:18;31917:26;;31989:9;31983:4;31979:20;31975:1;31964:9;31960:17;31953:47;32017:131;32143:4;32017:131;:::i;:::-;32009:139;;31736:419;;;:::o;32161:::-;32327:4;32365:2;32354:9;32350:18;32342:26;;32414:9;32408:4;32404:20;32400:1;32389:9;32385:17;32378:47;32442:131;32568:4;32442:131;:::i;:::-;32434:139;;32161:419;;;:::o;32586:::-;32752:4;32790:2;32779:9;32775:18;32767:26;;32839:9;32833:4;32829:20;32825:1;32814:9;32810:17;32803:47;32867:131;32993:4;32867:131;:::i;:::-;32859:139;;32586:419;;;:::o;33011:::-;33177:4;33215:2;33204:9;33200:18;33192:26;;33264:9;33258:4;33254:20;33250:1;33239:9;33235:17;33228:47;33292:131;33418:4;33292:131;:::i;:::-;33284:139;;33011:419;;;:::o;33436:::-;33602:4;33640:2;33629:9;33625:18;33617:26;;33689:9;33683:4;33679:20;33675:1;33664:9;33660:17;33653:47;33717:131;33843:4;33717:131;:::i;:::-;33709:139;;33436:419;;;:::o;33861:::-;34027:4;34065:2;34054:9;34050:18;34042:26;;34114:9;34108:4;34104:20;34100:1;34089:9;34085:17;34078:47;34142:131;34268:4;34142:131;:::i;:::-;34134:139;;33861:419;;;:::o;34286:::-;34452:4;34490:2;34479:9;34475:18;34467:26;;34539:9;34533:4;34529:20;34525:1;34514:9;34510:17;34503:47;34567:131;34693:4;34567:131;:::i;:::-;34559:139;;34286:419;;;:::o;34711:::-;34877:4;34915:2;34904:9;34900:18;34892:26;;34964:9;34958:4;34954:20;34950:1;34939:9;34935:17;34928:47;34992:131;35118:4;34992:131;:::i;:::-;34984:139;;34711:419;;;:::o;35136:::-;35302:4;35340:2;35329:9;35325:18;35317:26;;35389:9;35383:4;35379:20;35375:1;35364:9;35360:17;35353:47;35417:131;35543:4;35417:131;:::i;:::-;35409:139;;35136:419;;;:::o;35561:222::-;35654:4;35692:2;35681:9;35677:18;35669:26;;35705:71;35773:1;35762:9;35758:17;35749:6;35705:71;:::i;:::-;35561:222;;;;:::o;35789:129::-;35823:6;35850:20;;:::i;:::-;35840:30;;35879:33;35907:4;35899:6;35879:33;:::i;:::-;35789:129;;;:::o;35924:75::-;35957:6;35990:2;35984:9;35974:19;;35924:75;:::o;36005:311::-;36082:4;36172:18;36164:6;36161:30;36158:56;;;36194:18;;:::i;:::-;36158:56;36244:4;36236:6;36232:17;36224:25;;36304:4;36298;36294:15;36286:23;;36005:311;;;:::o;36322:307::-;36383:4;36473:18;36465:6;36462:30;36459:56;;;36495:18;;:::i;:::-;36459:56;36533:29;36555:6;36533:29;:::i;:::-;36525:37;;36617:4;36611;36607:15;36599:23;;36322:307;;;:::o;36635:308::-;36697:4;36787:18;36779:6;36776:30;36773:56;;;36809:18;;:::i;:::-;36773:56;36847:29;36869:6;36847:29;:::i;:::-;36839:37;;36931:4;36925;36921:15;36913:23;;36635:308;;;:::o;36949:132::-;37016:4;37039:3;37031:11;;37069:4;37064:3;37060:14;37052:22;;36949:132;;;:::o;37087:141::-;37136:4;37159:3;37151:11;;37182:3;37179:1;37172:14;37216:4;37213:1;37203:18;37195:26;;37087:141;;;:::o;37234:114::-;37301:6;37335:5;37329:12;37319:22;;37234:114;;;:::o;37354:98::-;37405:6;37439:5;37433:12;37423:22;;37354:98;;;:::o;37458:99::-;37510:6;37544:5;37538:12;37528:22;;37458:99;;;:::o;37563:113::-;37633:4;37665;37660:3;37656:14;37648:22;;37563:113;;;:::o;37682:184::-;37781:11;37815:6;37810:3;37803:19;37855:4;37850:3;37846:14;37831:29;;37682:184;;;;:::o;37872:168::-;37955:11;37989:6;37984:3;37977:19;38029:4;38024:3;38020:14;38005:29;;37872:168;;;;:::o;38046:147::-;38147:11;38184:3;38169:18;;38046:147;;;;:::o;38199:169::-;38283:11;38317:6;38312:3;38305:19;38357:4;38352:3;38348:14;38333:29;;38199:169;;;;:::o;38374:148::-;38476:11;38513:3;38498:18;;38374:148;;;;:::o;38528:305::-;38568:3;38587:20;38605:1;38587:20;:::i;:::-;38582:25;;38621:20;38639:1;38621:20;:::i;:::-;38616:25;;38775:1;38707:66;38703:74;38700:1;38697:81;38694:107;;;38781:18;;:::i;:::-;38694:107;38825:1;38822;38818:9;38811:16;;38528:305;;;;:::o;38839:185::-;38879:1;38896:20;38914:1;38896:20;:::i;:::-;38891:25;;38930:20;38948:1;38930:20;:::i;:::-;38925:25;;38969:1;38959:35;;38974:18;;:::i;:::-;38959:35;39016:1;39013;39009:9;39004:14;;38839:185;;;;:::o;39030:348::-;39070:7;39093:20;39111:1;39093:20;:::i;:::-;39088:25;;39127:20;39145:1;39127:20;:::i;:::-;39122:25;;39315:1;39247:66;39243:74;39240:1;39237:81;39232:1;39225:9;39218:17;39214:105;39211:131;;;39322:18;;:::i;:::-;39211:131;39370:1;39367;39363:9;39352:20;;39030:348;;;;:::o;39384:191::-;39424:4;39444:20;39462:1;39444:20;:::i;:::-;39439:25;;39478:20;39496:1;39478:20;:::i;:::-;39473:25;;39517:1;39514;39511:8;39508:34;;;39522:18;;:::i;:::-;39508:34;39567:1;39564;39560:9;39552:17;;39384:191;;;;:::o;39581:96::-;39618:7;39647:24;39665:5;39647:24;:::i;:::-;39636:35;;39581:96;;;:::o;39683:90::-;39717:7;39760:5;39753:13;39746:21;39735:32;;39683:90;;;:::o;39779:149::-;39815:7;39855:66;39848:5;39844:78;39833:89;;39779:149;;;:::o;39934:126::-;39971:7;40011:42;40004:5;40000:54;39989:65;;39934:126;;;:::o;40066:77::-;40103:7;40132:5;40121:16;;40066:77;;;:::o;40149:154::-;40233:6;40228:3;40223;40210:30;40295:1;40286:6;40281:3;40277:16;40270:27;40149:154;;;:::o;40309:307::-;40377:1;40387:113;40401:6;40398:1;40395:13;40387:113;;;40486:1;40481:3;40477:11;40471:18;40467:1;40462:3;40458:11;40451:39;40423:2;40420:1;40416:10;40411:15;;40387:113;;;40518:6;40515:1;40512:13;40509:101;;;40598:1;40589:6;40584:3;40580:16;40573:27;40509:101;40358:258;40309:307;;;:::o;40622:320::-;40666:6;40703:1;40697:4;40693:12;40683:22;;40750:1;40744:4;40740:12;40771:18;40761:81;;40827:4;40819:6;40815:17;40805:27;;40761:81;40889:2;40881:6;40878:14;40858:18;40855:38;40852:84;;;40908:18;;:::i;:::-;40852:84;40673:269;40622:320;;;:::o;40948:281::-;41031:27;41053:4;41031:27;:::i;:::-;41023:6;41019:40;41161:6;41149:10;41146:22;41125:18;41113:10;41110:34;41107:62;41104:88;;;41172:18;;:::i;:::-;41104:88;41212:10;41208:2;41201:22;40991:238;40948:281;;:::o;41235:233::-;41274:3;41297:24;41315:5;41297:24;:::i;:::-;41288:33;;41343:66;41336:5;41333:77;41330:103;;;41413:18;;:::i;:::-;41330:103;41460:1;41453:5;41449:13;41442:20;;41235:233;;;:::o;41474:176::-;41506:1;41523:20;41541:1;41523:20;:::i;:::-;41518:25;;41557:20;41575:1;41557:20;:::i;:::-;41552:25;;41596:1;41586:35;;41601:18;;:::i;:::-;41586:35;41642:1;41639;41635:9;41630:14;;41474:176;;;;:::o;41656:180::-;41704:77;41701:1;41694:88;41801:4;41798:1;41791:15;41825:4;41822:1;41815:15;41842:180;41890:77;41887:1;41880:88;41987:4;41984:1;41977:15;42011:4;42008:1;42001:15;42028:180;42076:77;42073:1;42066:88;42173:4;42170:1;42163:15;42197:4;42194:1;42187:15;42214:180;42262:77;42259:1;42252:88;42359:4;42356:1;42349:15;42383:4;42380:1;42373:15;42400:180;42448:77;42445:1;42438:88;42545:4;42542:1;42535:15;42569:4;42566:1;42559:15;42586:117;42695:1;42692;42685:12;42709:117;42818:1;42815;42808:12;42832:117;42941:1;42938;42931:12;42955:117;43064:1;43061;43054:12;43078:117;43187:1;43184;43177:12;43201:117;43310:1;43307;43300:12;43324:102;43365:6;43416:2;43412:7;43407:2;43400:5;43396:14;43392:28;43382:38;;43324:102;;;:::o;43432:169::-;43572:21;43568:1;43560:6;43556:14;43549:45;43432:169;:::o;43607:230::-;43747:34;43743:1;43735:6;43731:14;43724:58;43816:13;43811:2;43803:6;43799:15;43792:38;43607:230;:::o;43843:237::-;43983:34;43979:1;43971:6;43967:14;43960:58;44052:20;44047:2;44039:6;44035:15;44028:45;43843:237;:::o;44086:225::-;44226:34;44222:1;44214:6;44210:14;44203:58;44295:8;44290:2;44282:6;44278:15;44271:33;44086:225;:::o;44317:223::-;44457:34;44453:1;44445:6;44441:14;44434:58;44526:6;44521:2;44513:6;44509:15;44502:31;44317:223;:::o;44546:175::-;44686:27;44682:1;44674:6;44670:14;44663:51;44546:175;:::o;44727:231::-;44867:34;44863:1;44855:6;44851:14;44844:58;44936:14;44931:2;44923:6;44919:15;44912:39;44727:231;:::o;44964:243::-;45104:34;45100:1;45092:6;45088:14;45081:58;45173:26;45168:2;45160:6;45156:15;45149:51;44964:243;:::o;45213:229::-;45353:34;45349:1;45341:6;45337:14;45330:58;45422:12;45417:2;45409:6;45405:15;45398:37;45213:229;:::o;45448:228::-;45588:34;45584:1;45576:6;45572:14;45565:58;45657:11;45652:2;45644:6;45640:15;45633:36;45448:228;:::o;45682:173::-;45822:25;45818:1;45810:6;45806:14;45799:49;45682:173;:::o;45861:171::-;46001:23;45997:1;45989:6;45985:14;45978:47;45861:171;:::o;46038:231::-;46178:34;46174:1;46166:6;46162:14;46155:58;46247:14;46242:2;46234:6;46230:15;46223:39;46038:231;:::o;46275:182::-;46415:34;46411:1;46403:6;46399:14;46392:58;46275:182;:::o;46463:228::-;46603:34;46599:1;46591:6;46587:14;46580:58;46672:11;46667:2;46659:6;46655:15;46648:36;46463:228;:::o;46697:171::-;46837:23;46833:1;46825:6;46821:14;46814:47;46697:171;:::o;46874:220::-;47014:34;47010:1;47002:6;46998:14;46991:58;47083:3;47078:2;47070:6;47066:15;47059:28;46874:220;:::o;47100:173::-;47240:25;47236:1;47228:6;47224:14;47217:49;47100:173;:::o;47279:114::-;;:::o;47399:236::-;47539:34;47535:1;47527:6;47523:14;47516:58;47608:19;47603:2;47595:6;47591:15;47584:44;47399:236;:::o;47641:178::-;47781:30;47777:1;47769:6;47765:14;47758:54;47641:178;:::o;47825:231::-;47965:34;47961:1;47953:6;47949:14;47942:58;48034:14;48029:2;48021:6;48017:15;48010:39;47825:231;:::o;48062:173::-;48202:25;48198:1;48190:6;48186:14;48179:49;48062:173;:::o;48241:122::-;48314:24;48332:5;48314:24;:::i;:::-;48307:5;48304:35;48294:63;;48353:1;48350;48343:12;48294:63;48241:122;:::o;48369:116::-;48439:21;48454:5;48439:21;:::i;:::-;48432:5;48429:32;48419:60;;48475:1;48472;48465:12;48419:60;48369:116;:::o;48491:120::-;48563:23;48580:5;48563:23;:::i;:::-;48556:5;48553:34;48543:62;;48601:1;48598;48591:12;48543:62;48491:120;:::o;48617:122::-;48690:24;48708:5;48690:24;:::i;:::-;48683:5;48680:35;48670:63;;48729:1;48726;48719:12;48670:63;48617:122;:::o

Swarm Source

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