ETH Price: $2,423.24 (-0.94%)

Token

Cringe Crows (CC)
 

Overview

Max Total Supply

188 CC

Holders

68

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
moonstation.eth
Balance
3 CC
0x198cc926c31144865f213a597c7f9d2e9846a372
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:
CringeCrows

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity Multiple files format)

File 3 of 13: CringeCrows.sol
// SPDX-License-Identifier: GPL-3.0
//made by @apnumen and @redjanedoe
// with help of HashLips tutorial
pragma solidity >=0.7.0 <0.9.0; import "./ERC721Enumerable.sol"; import "./Ownable.sol";
contract CringeCrows is ERC721Enumerable, Ownable {using Strings for uint256;
string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.04 ether; uint256 public maxSupply = 4567;
uint256 public maxMintAmount = 3; bool public paused = false; mapping(address => bool) public whitelisted;
constructor(string memory _name, string memory _symbol, string memory _initBaseURI) ERC721(_name, _symbol) {setBaseURI(_initBaseURI); mint(msg.sender, 30);}
function _baseURI() internal view virtual override returns (string memory) {return baseURI;}
function mint(address _to, uint256 _mintAmount) public payable {uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { require(_mintAmount <= maxMintAmount);  if(whitelisted[msg.sender] != true) {require(msg.value >= cost * _mintAmount);}}for (uint256 i = 1; i <= _mintAmount; i++) {_safeMint(_to, supply + i);}}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)): "";}
function setCost(uint256 _newCost) public onlyOwner() {cost = _newCost;}
function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() {maxMintAmount = _newmaxMintAmount;}
function setBaseURI(string memory _newBaseURI) public onlyOwner {baseURI = _newBaseURI;}
function pause(bool _state) public onlyOwner {paused = _state;}
function whitelistUser(address _user) public onlyOwner {whitelisted[_user] = true;}
function removeWhitelistUser(address _user) public onlyOwner {whitelisted[_user] = false;}
function withdraw() public payable onlyOwner {require(payable(msg.sender).send(address(this).balance));}}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 2 of 13: Context.sol
// SPDX-License-Identifier: MIT

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

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.0;

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

pragma solidity ^0.8.0;

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.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 7 of 13: IERC165.sol
// SPDX-License-Identifier: MIT

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

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

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

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

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

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

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

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

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

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

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

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

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":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000e40565b50668e1bc9bf040000600d556111d7600e556003600f556000601060006101000a81548160ff0219169083151502179055503480156200009057600080fd5b50604051620058e6380380620058e68339818101604052810190620000b6919062000fb7565b82828160009080519060200190620000d092919062000e40565b508060019080519060200190620000e992919062000e40565b5050506200010c620001006200013960201b60201c565b6200014160201b60201c565b6200011d816200020760201b60201c565b6200013033601e620002b260201b60201c565b505050620017b6565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002176200013960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200023d6200042160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028d9062001272565b60405180910390fd5b80600b9080519060200190620002ae92919062000e40565b5050565b6000620002c46200044b60201b60201c565b9050601060009054906101000a900460ff1615620002e157600080fd5b60008211620002ef57600080fd5b600e54828262000300919062001320565b11156200030c57600080fd5b6200031c6200042160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620003d757600f548211156200035f57600080fd5b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514620003d65781600d54620003c891906200137d565b341015620003d557600080fd5b5b5b6000600190505b8281116200041b5762000405848284620003f9919062001320565b6200045860201b60201c565b8080620004129062001525565b915050620003de565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b6200047a8282604051806020016040528060008152506200047e60201b60201c565b5050565b620004908383620004ec60201b60201c565b620004a56000848484620006d260201b60201c565b620004e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004de90620011ea565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200055f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005569062001250565b60405180910390fd5b62000570816200088c60201b60201c565b15620005b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005aa906200120c565b60405180910390fd5b620005c760008383620008f860201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000619919062001320565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620007008473ffffffffffffffffffffffffffffffffffffffff1662000a3f60201b62001a591760201c565b156200087f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620007326200013960201b60201c565b8786866040518563ffffffff1660e01b815260040162000756949392919062001196565b602060405180830381600087803b1580156200077157600080fd5b505af1925050508015620007a557506040513d601f19601f82011682018060405250810190620007a2919062000f85565b60015b6200082e573d8060008114620007d8576040519150601f19603f3d011682016040523d82523d6000602084013e620007dd565b606091505b5060008151141562000826576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200081d90620011ea565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000884565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200091083838362000a5260201b62001a6c1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200095d57620009578162000a5760201b60201c565b620009a5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009a457620009a3838262000aa060201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009f257620009ec8162000c1d60201b60201c565b62000a3a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000a395762000a38828262000cf960201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000aba8462000d8560201b6200130a1760201c565b62000ac69190620013de565b905060006007600084815260200190815260200160002054905081811462000bac576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000c339190620013de565b905060006009600084815260200190815260200160002054905060006008838154811062000c665762000c6562001600565b5b90600052602060002001549050806008838154811062000c8b5762000c8a62001600565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000cdd5762000cdc620015d1565b5b6001900381819060005260206000200160009055905550505050565b600062000d118362000d8560201b6200130a1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000df9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000df0906200122e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000e4e90620014b9565b90600052602060002090601f01602090048101928262000e72576000855562000ebe565b82601f1062000e8d57805160ff191683800117855562000ebe565b8280016001018555821562000ebe579182015b8281111562000ebd57825182559160200191906001019062000ea0565b5b50905062000ecd919062000ed1565b5090565b5b8082111562000eec57600081600090555060010162000ed2565b5090565b600062000f0762000f0184620012bd565b62001294565b90508281526020810184848401111562000f265762000f2562001663565b5b62000f3384828562001483565b509392505050565b60008151905062000f4c816200179c565b92915050565b600082601f83011262000f6a5762000f696200165e565b5b815162000f7c84826020860162000ef0565b91505092915050565b60006020828403121562000f9e5762000f9d6200166d565b5b600062000fae8482850162000f3b565b91505092915050565b60008060006060848603121562000fd35762000fd26200166d565b5b600084015167ffffffffffffffff81111562000ff45762000ff362001668565b5b620010028682870162000f52565b935050602084015167ffffffffffffffff81111562001026576200102562001668565b5b620010348682870162000f52565b925050604084015167ffffffffffffffff81111562001058576200105762001668565b5b620010668682870162000f52565b9150509250925092565b6200107b8162001419565b82525050565b60006200108e82620012f3565b6200109a8185620012fe565b9350620010ac81856020860162001483565b620010b78162001672565b840191505092915050565b6000620010d16032836200130f565b9150620010de8262001683565b604082019050919050565b6000620010f8601c836200130f565b91506200110582620016d2565b602082019050919050565b60006200111f602a836200130f565b91506200112c82620016fb565b604082019050919050565b6000620011466020836200130f565b915062001153826200174a565b602082019050919050565b60006200116d6020836200130f565b91506200117a8262001773565b602082019050919050565b620011908162001479565b82525050565b6000608082019050620011ad600083018762001070565b620011bc602083018662001070565b620011cb604083018562001185565b8181036060830152620011df818462001081565b905095945050505050565b600060208201905081810360008301526200120581620010c2565b9050919050565b600060208201905081810360008301526200122781620010e9565b9050919050565b60006020820190508181036000830152620012498162001110565b9050919050565b600060208201905081810360008301526200126b8162001137565b9050919050565b600060208201905081810360008301526200128d816200115e565b9050919050565b6000620012a0620012b3565b9050620012ae8282620014ef565b919050565b6000604051905090565b600067ffffffffffffffff821115620012db57620012da6200162f565b5b620012e68262001672565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200132d8262001479565b91506200133a8362001479565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001372576200137162001573565b5b828201905092915050565b60006200138a8262001479565b9150620013978362001479565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620013d357620013d262001573565b5b828202905092915050565b6000620013eb8262001479565b9150620013f88362001479565b9250828210156200140e576200140d62001573565b5b828203905092915050565b6000620014268262001459565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620014a357808201518184015260208101905062001486565b83811115620014b3576000848401525b50505050565b60006002820490506001821680620014d257607f821691505b60208210811415620014e957620014e8620015a2565b5b50919050565b620014fa8262001672565b810181811067ffffffffffffffff821117156200151c576200151b6200162f565b5b80604052505050565b6000620015328262001479565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001568576200156762001573565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620017a7816200142d565b8114620017b357600080fd5b50565b61412080620017c66000396000f3fe6080604052600436106101f95760003560e01c806355f804b31161010d57806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd146106ef578063d5abeb011461072c578063d936547e14610757578063e985e9c514610794578063f2fde38b146107d1576101f9565b806395d89b4114610647578063a22cb46514610672578063b88d4fde1461069b578063c6682862146106c4576101f9565b806370a08231116100dc57806370a082311461059f578063715018a6146105dc5780637f00c7a6146105f35780638da5cb5b1461061c576101f9565b806355f804b3146104e35780635c975abb1461050c5780636352211e146105375780636c0360eb14610574576101f9565b806323b872dd1161019057806340c10f191161015f57806340c10f191461040f57806342842e0e1461042b57806344a0d68a146104545780634a4c560d1461047d5780634f6ccce7146104a6576101f9565b806323b872dd146103765780632f745c591461039f57806330cc7ae0146103dc5780633ccfd60b14610405576101f9565b8063095ea7b3116101cc578063095ea7b3146102cc57806313faede6146102f557806318160ddd14610320578063239c70ae1461034b576101f9565b806301ffc9a7146101fe57806302329a291461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612f0d565b6107fa565b604051610232919061343a565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612ee0565b610874565b005b34801561027057600080fd5b5061027961090d565b6040516102869190613455565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190612fb0565b61099f565b6040516102c391906133d3565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee9190612ea0565b610a24565b005b34801561030157600080fd5b5061030a610b3c565b60405161031791906136b7565b60405180910390f35b34801561032c57600080fd5b50610335610b42565b60405161034291906136b7565b60405180910390f35b34801561035757600080fd5b50610360610b4f565b60405161036d91906136b7565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190612d8a565b610b55565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190612ea0565b610bb5565b6040516103d391906136b7565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190612d1d565b610c5a565b005b61040d610d31565b005b61042960048036038101906104249190612ea0565b610ded565b005b34801561043757600080fd5b50610452600480360381019061044d9190612d8a565b610f33565b005b34801561046057600080fd5b5061047b60048036038101906104769190612fb0565b610f53565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612d1d565b610fd9565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190612fb0565b6110b0565b6040516104da91906136b7565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190612f67565b611121565b005b34801561051857600080fd5b506105216111b7565b60405161052e919061343a565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612fb0565b6111ca565b60405161056b91906133d3565b60405180910390f35b34801561058057600080fd5b5061058961127c565b6040516105969190613455565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190612d1d565b61130a565b6040516105d391906136b7565b60405180910390f35b3480156105e857600080fd5b506105f16113c2565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190612fb0565b61144a565b005b34801561062857600080fd5b506106316114d0565b60405161063e91906133d3565b60405180910390f35b34801561065357600080fd5b5061065c6114fa565b6040516106699190613455565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190612e60565b61158c565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190612ddd565b61170d565b005b3480156106d057600080fd5b506106d961176f565b6040516106e69190613455565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190612fb0565b6117fd565b6040516107239190613455565b60405180910390f35b34801561073857600080fd5b506107416118a7565b60405161074e91906136b7565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190612d1d565b6118ad565b60405161078b919061343a565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190612d4a565b6118cd565b6040516107c8919061343a565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190612d1d565b611961565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086d575061086c82611a71565b5b9050919050565b61087c611b53565b73ffffffffffffffffffffffffffffffffffffffff1661089a6114d0565b73ffffffffffffffffffffffffffffffffffffffff16146108f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e7906135f7565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60606000805461091c9061397c565b80601f01602080910402602001604051908101604052809291908181526020018280546109489061397c565b80156109955780601f1061096a57610100808354040283529160200191610995565b820191906000526020600020905b81548152906001019060200180831161097857829003601f168201915b5050505050905090565b60006109aa82611b5b565b6109e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e0906135d7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2f826111ca565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790613657565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610abf611b53565b73ffffffffffffffffffffffffffffffffffffffff161480610aee5750610aed81610ae8611b53565b6118cd565b5b610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613557565b60405180910390fd5b610b378383611bc7565b505050565b600d5481565b6000600880549050905090565b600f5481565b610b66610b60611b53565b82611c80565b610ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9c90613677565b60405180910390fd5b610bb0838383611d5e565b505050565b6000610bc08361130a565b8210610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613477565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c62611b53565b73ffffffffffffffffffffffffffffffffffffffff16610c806114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd906135f7565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d39611b53565b73ffffffffffffffffffffffffffffffffffffffff16610d576114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da4906135f7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610deb57600080fd5b565b6000610df7610b42565b9050601060009054906101000a900460ff1615610e1357600080fd5b60008211610e2057600080fd5b600e548282610e2f91906137b1565b1115610e3a57600080fd5b610e426114d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ef757600f54821115610e8357600080fd5b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610ef65781600d54610ee99190613838565b341015610ef557600080fd5b5b5b6000600190505b828111610f2d57610f1a848284610f1591906137b1565b611fba565b8080610f25906139df565b915050610efe565b50505050565b610f4e8383836040518060200160405280600081525061170d565b505050565b610f5b611b53565b73ffffffffffffffffffffffffffffffffffffffff16610f796114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc6906135f7565b60405180910390fd5b80600d8190555050565b610fe1611b53565b73ffffffffffffffffffffffffffffffffffffffff16610fff6114d0565b73ffffffffffffffffffffffffffffffffffffffff1614611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c906135f7565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006110ba610b42565b82106110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f290613697565b60405180910390fd5b6008828154811061110f5761110e613b15565b5b90600052602060002001549050919050565b611129611b53565b73ffffffffffffffffffffffffffffffffffffffff166111476114d0565b73ffffffffffffffffffffffffffffffffffffffff161461119d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611194906135f7565b60405180910390fd5b80600b90805190602001906111b3929190612b31565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90613597565b60405180910390fd5b80915050919050565b600b80546112899061397c565b80601f01602080910402602001604051908101604052809291908181526020018280546112b59061397c565b80156113025780601f106112d757610100808354040283529160200191611302565b820191906000526020600020905b8154815290600101906020018083116112e557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290613577565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ca611b53565b73ffffffffffffffffffffffffffffffffffffffff166113e86114d0565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611435906135f7565b60405180910390fd5b6114486000611fd8565b565b611452611b53565b73ffffffffffffffffffffffffffffffffffffffff166114706114d0565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906135f7565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115099061397c565b80601f01602080910402602001604051908101604052809291908181526020018280546115359061397c565b80156115825780601f1061155757610100808354040283529160200191611582565b820191906000526020600020905b81548152906001019060200180831161156557829003601f168201915b5050505050905090565b611594611b53565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613517565b60405180910390fd5b806005600061160f611b53565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116bc611b53565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611701919061343a565b60405180910390a35050565b61171e611718611b53565b83611c80565b61175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490613677565b60405180910390fd5b6117698484848461209e565b50505050565b600c805461177c9061397c565b80601f01602080910402602001604051908101604052809291908181526020018280546117a89061397c565b80156117f55780601f106117ca576101008083540402835291602001916117f5565b820191906000526020600020905b8154815290600101906020018083116117d857829003601f168201915b505050505081565b606061180882611b5b565b611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90613637565b60405180910390fd5b60006118516120fa565b90506000815111611871576040518060200160405280600081525061189f565b8061187b8461218c565b600c60405160200161188f939291906133a2565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611969611b53565b73ffffffffffffffffffffffffffffffffffffffff166119876114d0565b73ffffffffffffffffffffffffffffffffffffffff16146119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d4906135f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a44906134b7565b60405180910390fd5b611a5681611fd8565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b3c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b4c5750611b4b826122ed565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c3a836111ca565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c8b82611b5b565b611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc190613537565b60405180910390fd5b6000611cd5836111ca565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d4457508373ffffffffffffffffffffffffffffffffffffffff16611d2c8461099f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d555750611d5481856118cd565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d7e826111ca565b73ffffffffffffffffffffffffffffffffffffffff1614611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb90613617565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b906134f7565b60405180910390fd5b611e4f838383612357565b611e5a600082611bc7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eaa9190613892565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f0191906137b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611fd482826040518060200160405280600081525061246b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120a9848484611d5e565b6120b5848484846124c6565b6120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb90613497565b60405180910390fd5b50505050565b6060600b80546121099061397c565b80601f01602080910402602001604051908101604052809291908181526020018280546121359061397c565b80156121825780601f1061215757610100808354040283529160200191612182565b820191906000526020600020905b81548152906001019060200180831161216557829003601f168201915b5050505050905090565b606060008214156121d4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122e8565b600082905060005b600082146122065780806121ef906139df565b915050600a826121ff9190613807565b91506121dc565b60008167ffffffffffffffff81111561222257612221613b44565b5b6040519080825280601f01601f1916602001820160405280156122545781602001600182028036833780820191505090505b5090505b600085146122e15760018261226d9190613892565b9150600a8561227c9190613a28565b603061228891906137b1565b60f81b81838151811061229e5761229d613b15565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122da9190613807565b9450612258565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612362838383611a6c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a5576123a08161265d565b6123e4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123e3576123e283826126a6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124275761242281612813565b612466565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124655761246482826128e4565b5b5b505050565b6124758383612963565b61248260008484846124c6565b6124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b890613497565b60405180910390fd5b505050565b60006124e78473ffffffffffffffffffffffffffffffffffffffff16611a59565b15612650578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612510611b53565b8786866040518563ffffffff1660e01b815260040161253294939291906133ee565b602060405180830381600087803b15801561254c57600080fd5b505af192505050801561257d57506040513d601f19601f8201168201806040525081019061257a9190612f3a565b60015b612600573d80600081146125ad576040519150601f19603f3d011682016040523d82523d6000602084013e6125b2565b606091505b506000815114156125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef90613497565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612655565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126b38461130a565b6126bd9190613892565b90506000600760008481526020019081526020016000205490508181146127a2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128279190613892565b905060006009600084815260200190815260200160002054905060006008838154811061285757612856613b15565b5b90600052602060002001549050806008838154811061287957612878613b15565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128c8576128c7613ae6565b5b6001900381819060005260206000200160009055905550505050565b60006128ef8361130a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca906135b7565b60405180910390fd5b6129dc81611b5b565b15612a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a13906134d7565b60405180910390fd5b612a2860008383612357565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a7891906137b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612b3d9061397c565b90600052602060002090601f016020900481019282612b5f5760008555612ba6565b82601f10612b7857805160ff1916838001178555612ba6565b82800160010185558215612ba6579182015b82811115612ba5578251825591602001919060010190612b8a565b5b509050612bb39190612bb7565b5090565b5b80821115612bd0576000816000905550600101612bb8565b5090565b6000612be7612be2846136f7565b6136d2565b905082815260208101848484011115612c0357612c02613b78565b5b612c0e84828561393a565b509392505050565b6000612c29612c2484613728565b6136d2565b905082815260208101848484011115612c4557612c44613b78565b5b612c5084828561393a565b509392505050565b600081359050612c678161408e565b92915050565b600081359050612c7c816140a5565b92915050565b600081359050612c91816140bc565b92915050565b600081519050612ca6816140bc565b92915050565b600082601f830112612cc157612cc0613b73565b5b8135612cd1848260208601612bd4565b91505092915050565b600082601f830112612cef57612cee613b73565b5b8135612cff848260208601612c16565b91505092915050565b600081359050612d17816140d3565b92915050565b600060208284031215612d3357612d32613b82565b5b6000612d4184828501612c58565b91505092915050565b60008060408385031215612d6157612d60613b82565b5b6000612d6f85828601612c58565b9250506020612d8085828601612c58565b9150509250929050565b600080600060608486031215612da357612da2613b82565b5b6000612db186828701612c58565b9350506020612dc286828701612c58565b9250506040612dd386828701612d08565b9150509250925092565b60008060008060808587031215612df757612df6613b82565b5b6000612e0587828801612c58565b9450506020612e1687828801612c58565b9350506040612e2787828801612d08565b925050606085013567ffffffffffffffff811115612e4857612e47613b7d565b5b612e5487828801612cac565b91505092959194509250565b60008060408385031215612e7757612e76613b82565b5b6000612e8585828601612c58565b9250506020612e9685828601612c6d565b9150509250929050565b60008060408385031215612eb757612eb6613b82565b5b6000612ec585828601612c58565b9250506020612ed685828601612d08565b9150509250929050565b600060208284031215612ef657612ef5613b82565b5b6000612f0484828501612c6d565b91505092915050565b600060208284031215612f2357612f22613b82565b5b6000612f3184828501612c82565b91505092915050565b600060208284031215612f5057612f4f613b82565b5b6000612f5e84828501612c97565b91505092915050565b600060208284031215612f7d57612f7c613b82565b5b600082013567ffffffffffffffff811115612f9b57612f9a613b7d565b5b612fa784828501612cda565b91505092915050565b600060208284031215612fc657612fc5613b82565b5b6000612fd484828501612d08565b91505092915050565b612fe6816138c6565b82525050565b612ff5816138d8565b82525050565b60006130068261376e565b6130108185613784565b9350613020818560208601613949565b61302981613b87565b840191505092915050565b600061303f82613779565b6130498185613795565b9350613059818560208601613949565b61306281613b87565b840191505092915050565b600061307882613779565b61308281856137a6565b9350613092818560208601613949565b80840191505092915050565b600081546130ab8161397c565b6130b581866137a6565b945060018216600081146130d057600181146130e157613114565b60ff19831686528186019350613114565b6130ea85613759565b60005b8381101561310c578154818901526001820191506020810190506130ed565b838801955050505b50505092915050565b600061312a602b83613795565b915061313582613b98565b604082019050919050565b600061314d603283613795565b915061315882613be7565b604082019050919050565b6000613170602683613795565b915061317b82613c36565b604082019050919050565b6000613193601c83613795565b915061319e82613c85565b602082019050919050565b60006131b6602483613795565b91506131c182613cae565b604082019050919050565b60006131d9601983613795565b91506131e482613cfd565b602082019050919050565b60006131fc602c83613795565b915061320782613d26565b604082019050919050565b600061321f603883613795565b915061322a82613d75565b604082019050919050565b6000613242602a83613795565b915061324d82613dc4565b604082019050919050565b6000613265602983613795565b915061327082613e13565b604082019050919050565b6000613288602083613795565b915061329382613e62565b602082019050919050565b60006132ab602c83613795565b91506132b682613e8b565b604082019050919050565b60006132ce602083613795565b91506132d982613eda565b602082019050919050565b60006132f1602983613795565b91506132fc82613f03565b604082019050919050565b6000613314602f83613795565b915061331f82613f52565b604082019050919050565b6000613337602183613795565b915061334282613fa1565b604082019050919050565b600061335a603183613795565b915061336582613ff0565b604082019050919050565b600061337d602c83613795565b91506133888261403f565b604082019050919050565b61339c81613930565b82525050565b60006133ae828661306d565b91506133ba828561306d565b91506133c6828461309e565b9150819050949350505050565b60006020820190506133e86000830184612fdd565b92915050565b60006080820190506134036000830187612fdd565b6134106020830186612fdd565b61341d6040830185613393565b818103606083015261342f8184612ffb565b905095945050505050565b600060208201905061344f6000830184612fec565b92915050565b6000602082019050818103600083015261346f8184613034565b905092915050565b600060208201905081810360008301526134908161311d565b9050919050565b600060208201905081810360008301526134b081613140565b9050919050565b600060208201905081810360008301526134d081613163565b9050919050565b600060208201905081810360008301526134f081613186565b9050919050565b60006020820190508181036000830152613510816131a9565b9050919050565b60006020820190508181036000830152613530816131cc565b9050919050565b60006020820190508181036000830152613550816131ef565b9050919050565b6000602082019050818103600083015261357081613212565b9050919050565b6000602082019050818103600083015261359081613235565b9050919050565b600060208201905081810360008301526135b081613258565b9050919050565b600060208201905081810360008301526135d08161327b565b9050919050565b600060208201905081810360008301526135f08161329e565b9050919050565b60006020820190508181036000830152613610816132c1565b9050919050565b60006020820190508181036000830152613630816132e4565b9050919050565b6000602082019050818103600083015261365081613307565b9050919050565b600060208201905081810360008301526136708161332a565b9050919050565b600060208201905081810360008301526136908161334d565b9050919050565b600060208201905081810360008301526136b081613370565b9050919050565b60006020820190506136cc6000830184613393565b92915050565b60006136dc6136ed565b90506136e882826139ae565b919050565b6000604051905090565b600067ffffffffffffffff82111561371257613711613b44565b5b61371b82613b87565b9050602081019050919050565b600067ffffffffffffffff82111561374357613742613b44565b5b61374c82613b87565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137bc82613930565b91506137c783613930565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137fc576137fb613a59565b5b828201905092915050565b600061381282613930565b915061381d83613930565b92508261382d5761382c613a88565b5b828204905092915050565b600061384382613930565b915061384e83613930565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561388757613886613a59565b5b828202905092915050565b600061389d82613930565b91506138a883613930565b9250828210156138bb576138ba613a59565b5b828203905092915050565b60006138d182613910565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561396757808201518184015260208101905061394c565b83811115613976576000848401525b50505050565b6000600282049050600182168061399457607f821691505b602082108114156139a8576139a7613ab7565b5b50919050565b6139b782613b87565b810181811067ffffffffffffffff821117156139d6576139d5613b44565b5b80604052505050565b60006139ea82613930565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a1d57613a1c613a59565b5b600182019050919050565b6000613a3382613930565b9150613a3e83613930565b925082613a4e57613a4d613a88565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614097816138c6565b81146140a257600080fd5b50565b6140ae816138d8565b81146140b957600080fd5b50565b6140c5816138e4565b81146140d057600080fd5b50565b6140dc81613930565b81146140e757600080fd5b5056fea26469706673582212209aa79012f7a990c29aacbe312bcf2e5ca80a024a59dbaa5fcdd2b3edc32884b864736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c4372696e67652043726f7773000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024343000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d5141426154766a5279504351394d513573746d6a77447976456d41624247625047573755693178445774745a2f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101f95760003560e01c806355f804b31161010d57806395d89b41116100a0578063c87b56dd1161006f578063c87b56dd146106ef578063d5abeb011461072c578063d936547e14610757578063e985e9c514610794578063f2fde38b146107d1576101f9565b806395d89b4114610647578063a22cb46514610672578063b88d4fde1461069b578063c6682862146106c4576101f9565b806370a08231116100dc57806370a082311461059f578063715018a6146105dc5780637f00c7a6146105f35780638da5cb5b1461061c576101f9565b806355f804b3146104e35780635c975abb1461050c5780636352211e146105375780636c0360eb14610574576101f9565b806323b872dd1161019057806340c10f191161015f57806340c10f191461040f57806342842e0e1461042b57806344a0d68a146104545780634a4c560d1461047d5780634f6ccce7146104a6576101f9565b806323b872dd146103765780632f745c591461039f57806330cc7ae0146103dc5780633ccfd60b14610405576101f9565b8063095ea7b3116101cc578063095ea7b3146102cc57806313faede6146102f557806318160ddd14610320578063239c70ae1461034b576101f9565b806301ffc9a7146101fe57806302329a291461023b57806306fdde0314610264578063081812fc1461028f575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612f0d565b6107fa565b604051610232919061343a565b60405180910390f35b34801561024757600080fd5b50610262600480360381019061025d9190612ee0565b610874565b005b34801561027057600080fd5b5061027961090d565b6040516102869190613455565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b19190612fb0565b61099f565b6040516102c391906133d3565b60405180910390f35b3480156102d857600080fd5b506102f360048036038101906102ee9190612ea0565b610a24565b005b34801561030157600080fd5b5061030a610b3c565b60405161031791906136b7565b60405180910390f35b34801561032c57600080fd5b50610335610b42565b60405161034291906136b7565b60405180910390f35b34801561035757600080fd5b50610360610b4f565b60405161036d91906136b7565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190612d8a565b610b55565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190612ea0565b610bb5565b6040516103d391906136b7565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190612d1d565b610c5a565b005b61040d610d31565b005b61042960048036038101906104249190612ea0565b610ded565b005b34801561043757600080fd5b50610452600480360381019061044d9190612d8a565b610f33565b005b34801561046057600080fd5b5061047b60048036038101906104769190612fb0565b610f53565b005b34801561048957600080fd5b506104a4600480360381019061049f9190612d1d565b610fd9565b005b3480156104b257600080fd5b506104cd60048036038101906104c89190612fb0565b6110b0565b6040516104da91906136b7565b60405180910390f35b3480156104ef57600080fd5b5061050a60048036038101906105059190612f67565b611121565b005b34801561051857600080fd5b506105216111b7565b60405161052e919061343a565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190612fb0565b6111ca565b60405161056b91906133d3565b60405180910390f35b34801561058057600080fd5b5061058961127c565b6040516105969190613455565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190612d1d565b61130a565b6040516105d391906136b7565b60405180910390f35b3480156105e857600080fd5b506105f16113c2565b005b3480156105ff57600080fd5b5061061a60048036038101906106159190612fb0565b61144a565b005b34801561062857600080fd5b506106316114d0565b60405161063e91906133d3565b60405180910390f35b34801561065357600080fd5b5061065c6114fa565b6040516106699190613455565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190612e60565b61158c565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190612ddd565b61170d565b005b3480156106d057600080fd5b506106d961176f565b6040516106e69190613455565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190612fb0565b6117fd565b6040516107239190613455565b60405180910390f35b34801561073857600080fd5b506107416118a7565b60405161074e91906136b7565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190612d1d565b6118ad565b60405161078b919061343a565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190612d4a565b6118cd565b6040516107c8919061343a565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190612d1d565b611961565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086d575061086c82611a71565b5b9050919050565b61087c611b53565b73ffffffffffffffffffffffffffffffffffffffff1661089a6114d0565b73ffffffffffffffffffffffffffffffffffffffff16146108f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e7906135f7565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60606000805461091c9061397c565b80601f01602080910402602001604051908101604052809291908181526020018280546109489061397c565b80156109955780601f1061096a57610100808354040283529160200191610995565b820191906000526020600020905b81548152906001019060200180831161097857829003601f168201915b5050505050905090565b60006109aa82611b5b565b6109e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e0906135d7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a2f826111ca565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9790613657565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610abf611b53565b73ffffffffffffffffffffffffffffffffffffffff161480610aee5750610aed81610ae8611b53565b6118cd565b5b610b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2490613557565b60405180910390fd5b610b378383611bc7565b505050565b600d5481565b6000600880549050905090565b600f5481565b610b66610b60611b53565b82611c80565b610ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9c90613677565b60405180910390fd5b610bb0838383611d5e565b505050565b6000610bc08361130a565b8210610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613477565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610c62611b53565b73ffffffffffffffffffffffffffffffffffffffff16610c806114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccd906135f7565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d39611b53565b73ffffffffffffffffffffffffffffffffffffffff16610d576114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da4906135f7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610deb57600080fd5b565b6000610df7610b42565b9050601060009054906101000a900460ff1615610e1357600080fd5b60008211610e2057600080fd5b600e548282610e2f91906137b1565b1115610e3a57600080fd5b610e426114d0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ef757600f54821115610e8357600080fd5b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610ef65781600d54610ee99190613838565b341015610ef557600080fd5b5b5b6000600190505b828111610f2d57610f1a848284610f1591906137b1565b611fba565b8080610f25906139df565b915050610efe565b50505050565b610f4e8383836040518060200160405280600081525061170d565b505050565b610f5b611b53565b73ffffffffffffffffffffffffffffffffffffffff16610f796114d0565b73ffffffffffffffffffffffffffffffffffffffff1614610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc6906135f7565b60405180910390fd5b80600d8190555050565b610fe1611b53565b73ffffffffffffffffffffffffffffffffffffffff16610fff6114d0565b73ffffffffffffffffffffffffffffffffffffffff1614611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c906135f7565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006110ba610b42565b82106110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f290613697565b60405180910390fd5b6008828154811061110f5761110e613b15565b5b90600052602060002001549050919050565b611129611b53565b73ffffffffffffffffffffffffffffffffffffffff166111476114d0565b73ffffffffffffffffffffffffffffffffffffffff161461119d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611194906135f7565b60405180910390fd5b80600b90805190602001906111b3929190612b31565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90613597565b60405180910390fd5b80915050919050565b600b80546112899061397c565b80601f01602080910402602001604051908101604052809291908181526020018280546112b59061397c565b80156113025780601f106112d757610100808354040283529160200191611302565b820191906000526020600020905b8154815290600101906020018083116112e557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561137b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137290613577565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ca611b53565b73ffffffffffffffffffffffffffffffffffffffff166113e86114d0565b73ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611435906135f7565b60405180910390fd5b6114486000611fd8565b565b611452611b53565b73ffffffffffffffffffffffffffffffffffffffff166114706114d0565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd906135f7565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115099061397c565b80601f01602080910402602001604051908101604052809291908181526020018280546115359061397c565b80156115825780601f1061155757610100808354040283529160200191611582565b820191906000526020600020905b81548152906001019060200180831161156557829003601f168201915b5050505050905090565b611594611b53565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613517565b60405180910390fd5b806005600061160f611b53565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116bc611b53565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611701919061343a565b60405180910390a35050565b61171e611718611b53565b83611c80565b61175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490613677565b60405180910390fd5b6117698484848461209e565b50505050565b600c805461177c9061397c565b80601f01602080910402602001604051908101604052809291908181526020018280546117a89061397c565b80156117f55780601f106117ca576101008083540402835291602001916117f5565b820191906000526020600020905b8154815290600101906020018083116117d857829003601f168201915b505050505081565b606061180882611b5b565b611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90613637565b60405180910390fd5b60006118516120fa565b90506000815111611871576040518060200160405280600081525061189f565b8061187b8461218c565b600c60405160200161188f939291906133a2565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611969611b53565b73ffffffffffffffffffffffffffffffffffffffff166119876114d0565b73ffffffffffffffffffffffffffffffffffffffff16146119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d4906135f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a44906134b7565b60405180910390fd5b611a5681611fd8565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b3c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611b4c5750611b4b826122ed565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c3a836111ca565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611c8b82611b5b565b611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc190613537565b60405180910390fd5b6000611cd5836111ca565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d4457508373ffffffffffffffffffffffffffffffffffffffff16611d2c8461099f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d555750611d5481856118cd565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d7e826111ca565b73ffffffffffffffffffffffffffffffffffffffff1614611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb90613617565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b906134f7565b60405180910390fd5b611e4f838383612357565b611e5a600082611bc7565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eaa9190613892565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f0191906137b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611fd482826040518060200160405280600081525061246b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120a9848484611d5e565b6120b5848484846124c6565b6120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb90613497565b60405180910390fd5b50505050565b6060600b80546121099061397c565b80601f01602080910402602001604051908101604052809291908181526020018280546121359061397c565b80156121825780601f1061215757610100808354040283529160200191612182565b820191906000526020600020905b81548152906001019060200180831161216557829003601f168201915b5050505050905090565b606060008214156121d4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122e8565b600082905060005b600082146122065780806121ef906139df565b915050600a826121ff9190613807565b91506121dc565b60008167ffffffffffffffff81111561222257612221613b44565b5b6040519080825280601f01601f1916602001820160405280156122545781602001600182028036833780820191505090505b5090505b600085146122e15760018261226d9190613892565b9150600a8561227c9190613a28565b603061228891906137b1565b60f81b81838151811061229e5761229d613b15565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122da9190613807565b9450612258565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612362838383611a6c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123a5576123a08161265d565b6123e4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146123e3576123e283826126a6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124275761242281612813565b612466565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146124655761246482826128e4565b5b5b505050565b6124758383612963565b61248260008484846124c6565b6124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b890613497565b60405180910390fd5b505050565b60006124e78473ffffffffffffffffffffffffffffffffffffffff16611a59565b15612650578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612510611b53565b8786866040518563ffffffff1660e01b815260040161253294939291906133ee565b602060405180830381600087803b15801561254c57600080fd5b505af192505050801561257d57506040513d601f19601f8201168201806040525081019061257a9190612f3a565b60015b612600573d80600081146125ad576040519150601f19603f3d011682016040523d82523d6000602084013e6125b2565b606091505b506000815114156125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef90613497565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612655565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016126b38461130a565b6126bd9190613892565b90506000600760008481526020019081526020016000205490508181146127a2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506128279190613892565b905060006009600084815260200190815260200160002054905060006008838154811061285757612856613b15565b5b90600052602060002001549050806008838154811061287957612878613b15565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806128c8576128c7613ae6565b5b6001900381819060005260206000200160009055905550505050565b60006128ef8361130a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca906135b7565b60405180910390fd5b6129dc81611b5b565b15612a1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a13906134d7565b60405180910390fd5b612a2860008383612357565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a7891906137b1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612b3d9061397c565b90600052602060002090601f016020900481019282612b5f5760008555612ba6565b82601f10612b7857805160ff1916838001178555612ba6565b82800160010185558215612ba6579182015b82811115612ba5578251825591602001919060010190612b8a565b5b509050612bb39190612bb7565b5090565b5b80821115612bd0576000816000905550600101612bb8565b5090565b6000612be7612be2846136f7565b6136d2565b905082815260208101848484011115612c0357612c02613b78565b5b612c0e84828561393a565b509392505050565b6000612c29612c2484613728565b6136d2565b905082815260208101848484011115612c4557612c44613b78565b5b612c5084828561393a565b509392505050565b600081359050612c678161408e565b92915050565b600081359050612c7c816140a5565b92915050565b600081359050612c91816140bc565b92915050565b600081519050612ca6816140bc565b92915050565b600082601f830112612cc157612cc0613b73565b5b8135612cd1848260208601612bd4565b91505092915050565b600082601f830112612cef57612cee613b73565b5b8135612cff848260208601612c16565b91505092915050565b600081359050612d17816140d3565b92915050565b600060208284031215612d3357612d32613b82565b5b6000612d4184828501612c58565b91505092915050565b60008060408385031215612d6157612d60613b82565b5b6000612d6f85828601612c58565b9250506020612d8085828601612c58565b9150509250929050565b600080600060608486031215612da357612da2613b82565b5b6000612db186828701612c58565b9350506020612dc286828701612c58565b9250506040612dd386828701612d08565b9150509250925092565b60008060008060808587031215612df757612df6613b82565b5b6000612e0587828801612c58565b9450506020612e1687828801612c58565b9350506040612e2787828801612d08565b925050606085013567ffffffffffffffff811115612e4857612e47613b7d565b5b612e5487828801612cac565b91505092959194509250565b60008060408385031215612e7757612e76613b82565b5b6000612e8585828601612c58565b9250506020612e9685828601612c6d565b9150509250929050565b60008060408385031215612eb757612eb6613b82565b5b6000612ec585828601612c58565b9250506020612ed685828601612d08565b9150509250929050565b600060208284031215612ef657612ef5613b82565b5b6000612f0484828501612c6d565b91505092915050565b600060208284031215612f2357612f22613b82565b5b6000612f3184828501612c82565b91505092915050565b600060208284031215612f5057612f4f613b82565b5b6000612f5e84828501612c97565b91505092915050565b600060208284031215612f7d57612f7c613b82565b5b600082013567ffffffffffffffff811115612f9b57612f9a613b7d565b5b612fa784828501612cda565b91505092915050565b600060208284031215612fc657612fc5613b82565b5b6000612fd484828501612d08565b91505092915050565b612fe6816138c6565b82525050565b612ff5816138d8565b82525050565b60006130068261376e565b6130108185613784565b9350613020818560208601613949565b61302981613b87565b840191505092915050565b600061303f82613779565b6130498185613795565b9350613059818560208601613949565b61306281613b87565b840191505092915050565b600061307882613779565b61308281856137a6565b9350613092818560208601613949565b80840191505092915050565b600081546130ab8161397c565b6130b581866137a6565b945060018216600081146130d057600181146130e157613114565b60ff19831686528186019350613114565b6130ea85613759565b60005b8381101561310c578154818901526001820191506020810190506130ed565b838801955050505b50505092915050565b600061312a602b83613795565b915061313582613b98565b604082019050919050565b600061314d603283613795565b915061315882613be7565b604082019050919050565b6000613170602683613795565b915061317b82613c36565b604082019050919050565b6000613193601c83613795565b915061319e82613c85565b602082019050919050565b60006131b6602483613795565b91506131c182613cae565b604082019050919050565b60006131d9601983613795565b91506131e482613cfd565b602082019050919050565b60006131fc602c83613795565b915061320782613d26565b604082019050919050565b600061321f603883613795565b915061322a82613d75565b604082019050919050565b6000613242602a83613795565b915061324d82613dc4565b604082019050919050565b6000613265602983613795565b915061327082613e13565b604082019050919050565b6000613288602083613795565b915061329382613e62565b602082019050919050565b60006132ab602c83613795565b91506132b682613e8b565b604082019050919050565b60006132ce602083613795565b91506132d982613eda565b602082019050919050565b60006132f1602983613795565b91506132fc82613f03565b604082019050919050565b6000613314602f83613795565b915061331f82613f52565b604082019050919050565b6000613337602183613795565b915061334282613fa1565b604082019050919050565b600061335a603183613795565b915061336582613ff0565b604082019050919050565b600061337d602c83613795565b91506133888261403f565b604082019050919050565b61339c81613930565b82525050565b60006133ae828661306d565b91506133ba828561306d565b91506133c6828461309e565b9150819050949350505050565b60006020820190506133e86000830184612fdd565b92915050565b60006080820190506134036000830187612fdd565b6134106020830186612fdd565b61341d6040830185613393565b818103606083015261342f8184612ffb565b905095945050505050565b600060208201905061344f6000830184612fec565b92915050565b6000602082019050818103600083015261346f8184613034565b905092915050565b600060208201905081810360008301526134908161311d565b9050919050565b600060208201905081810360008301526134b081613140565b9050919050565b600060208201905081810360008301526134d081613163565b9050919050565b600060208201905081810360008301526134f081613186565b9050919050565b60006020820190508181036000830152613510816131a9565b9050919050565b60006020820190508181036000830152613530816131cc565b9050919050565b60006020820190508181036000830152613550816131ef565b9050919050565b6000602082019050818103600083015261357081613212565b9050919050565b6000602082019050818103600083015261359081613235565b9050919050565b600060208201905081810360008301526135b081613258565b9050919050565b600060208201905081810360008301526135d08161327b565b9050919050565b600060208201905081810360008301526135f08161329e565b9050919050565b60006020820190508181036000830152613610816132c1565b9050919050565b60006020820190508181036000830152613630816132e4565b9050919050565b6000602082019050818103600083015261365081613307565b9050919050565b600060208201905081810360008301526136708161332a565b9050919050565b600060208201905081810360008301526136908161334d565b9050919050565b600060208201905081810360008301526136b081613370565b9050919050565b60006020820190506136cc6000830184613393565b92915050565b60006136dc6136ed565b90506136e882826139ae565b919050565b6000604051905090565b600067ffffffffffffffff82111561371257613711613b44565b5b61371b82613b87565b9050602081019050919050565b600067ffffffffffffffff82111561374357613742613b44565b5b61374c82613b87565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137bc82613930565b91506137c783613930565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137fc576137fb613a59565b5b828201905092915050565b600061381282613930565b915061381d83613930565b92508261382d5761382c613a88565b5b828204905092915050565b600061384382613930565b915061384e83613930565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561388757613886613a59565b5b828202905092915050565b600061389d82613930565b91506138a883613930565b9250828210156138bb576138ba613a59565b5b828203905092915050565b60006138d182613910565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561396757808201518184015260208101905061394c565b83811115613976576000848401525b50505050565b6000600282049050600182168061399457607f821691505b602082108114156139a8576139a7613ab7565b5b50919050565b6139b782613b87565b810181811067ffffffffffffffff821117156139d6576139d5613b44565b5b80604052505050565b60006139ea82613930565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a1d57613a1c613a59565b5b600182019050919050565b6000613a3382613930565b9150613a3e83613930565b925082613a4e57613a4d613a88565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614097816138c6565b81146140a257600080fd5b50565b6140ae816138d8565b81146140b957600080fd5b50565b6140c5816138e4565b81146140d057600080fd5b50565b6140dc81613930565b81146140e757600080fd5b5056fea26469706673582212209aa79012f7a990c29aacbe312bcf2e5ca80a024a59dbaa5fcdd2b3edc32884b864736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000c4372696e67652043726f7773000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024343000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d5141426154766a5279504351394d513573746d6a77447976456d41624247625047573755693178445774745a2f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Cringe Crows
Arg [1] : _symbol (string): CC
Arg [2] : _initBaseURI (string): https://ipfs.io/ipfs/QmQABaTvjRyPCQ9MQ5stmjwDyvEmAbBGbPGW7Ui1xDWttZ/

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 4372696e67652043726f77730000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4343000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [8] : 68747470733a2f2f697066732e696f2f697066732f516d5141426154766a5279
Arg [9] : 504351394d513573746d6a77447976456d416242476250475737556931784457
Arg [10] : 74745a2f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

194:1920:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;909:222:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1770:63:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2349:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3860:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;334:32:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1534:111:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;401:32:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4724:330:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1210:253:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1918:90:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2009:104;;;:::i;:::-;;758:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5120:179:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1499:72:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1834:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1717:230:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1681:88:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;435:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2052:235:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;272:21:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1790:205:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1598:92:11;;;;;;;;;;;;;:::i;:::-;;1572:108:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;966:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2511:102:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4144:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5365:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;295:37:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1165:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;368:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;463:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4500:162:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1839:189:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;909:222:5;1011:4;1049:35;1034:50;;;:11;:50;;;;:90;;;;1088:36;1112:11;1088:23;:36::i;:::-;1034:90;1027:97;;909:222;;;:::o;1770:63:2:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1825:6:2::1;1816;;:15;;;;;;;;;;;;;;;;;;1770:63:::0;:::o;2349:98:4:-;2403:13;2435:5;2428:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:98;:::o;3860:217::-;3936:7;3963:16;3971:7;3963;:16::i;:::-;3955:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4046:15;:24;4062:7;4046:24;;;;;;;;;;;;;;;;;;;;;4039:31;;3860:217;;;:::o;3398:401::-;3478:13;3494:23;3509:7;3494:14;:23::i;:::-;3478:39;;3541:5;3535:11;;:2;:11;;;;3527:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3632:5;3616:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3641:37;3658:5;3665:12;:10;:12::i;:::-;3641:16;:37::i;:::-;3616:62;3595:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:21;3780:2;3784:7;3771:8;:21::i;:::-;3468:331;3398:401;;:::o;334:32:2:-;;;;:::o;1534:111:5:-;1595:7;1621:10;:17;;;;1614:24;;1534:111;:::o;401:32:2:-;;;;:::o;4724:330:4:-;4913:41;4932:12;:10;:12::i;:::-;4946:7;4913:18;:41::i;:::-;4905:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5019:28;5029:4;5035:2;5039:7;5019:9;:28::i;:::-;4724:330;;;:::o;1210:253:5:-;1307:7;1342:23;1359:5;1342:16;:23::i;:::-;1334:5;:31;1326:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1430:12;:19;1443:5;1430:19;;;;;;;;;;;;;;;:26;1450:5;1430:26;;;;;;;;;;;;1423:33;;1210:253;;;;:::o;1918:90:2:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2001:5:2::1;1980:11;:18;1992:5;1980:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;1918:90:::0;:::o;2009:104::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2071:10:2::1;2063:24;;:47;2088:21;2063:47;;;;;;;;;;;;;;;;;;;;;;;2055:56;;;::::0;::::1;;2009:104::o:0;758:406::-;822:14;839:13;:11;:13::i;:::-;822:30;;863:6;;;;;;;;;;;862:7;854:16;;;;;;894:1;880:11;:15;872:24;;;;;;930:9;;915:11;906:6;:20;;;;:::i;:::-;:33;;898:42;;;;;;960:7;:5;:7::i;:::-;946:21;;:10;:21;;;942:149;;994:13;;979:11;:28;;971:37;;;;;;1041:4;1014:31;;:11;:23;1026:10;1014:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;1011:79;;1076:11;1069:4;;:18;;;;:::i;:::-;1056:9;:31;;1048:40;;;;;;1011:79;942:149;1096:9;1108:1;1096:13;;1091:72;1116:11;1111:1;:16;1091:72;;1135:26;1145:3;1159:1;1150:6;:10;;;;:::i;:::-;1135:9;:26::i;:::-;1129:3;;;;;:::i;:::-;;;;1091:72;;;;821:343;758:406;;:::o;5120:179:4:-;5253:39;5270:4;5276:2;5280:7;5253:39;;;;;;;;;;;;:16;:39::i;:::-;5120:179;;;:::o;1499:72:2:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1561:8:2::1;1554:4;:15;;;;1499:72:::0;:::o;1834:83::-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1911:4:2::1;1890:11;:18;1902:5;1890:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;1834:83:::0;:::o;1717:230:5:-;1792:7;1827:30;:28;:30::i;:::-;1819:5;:38;1811:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1923:10;1934:5;1923:17;;;;;;;;:::i;:::-;;;;;;;;;;1916:24;;1717:230;;;:::o;1681:88:2:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1756:11:2::1;1746:7;:21;;;;;;;;;;;;:::i;:::-;;1681:88:::0;:::o;435:26::-;;;;;;;;;;;;;:::o;2052:235:4:-;2124:7;2143:13;2159:7;:16;2167:7;2159:16;;;;;;;;;;;;;;;;;;;;;2143:32;;2210:1;2193:19;;:5;:19;;;;2185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2275:5;2268:12;;;2052:235;;;:::o;272:21:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1790:205:4:-;1862:7;1906:1;1889:19;;:5;:19;;;;1881:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1972:9;:16;1982:5;1972:16;;;;;;;;;;;;;;;;1965:23;;1790:205;;;:::o;1598:92:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;1572:108:2:-;1189:12:11;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1661:17:2::1;1645:13;:33;;;;1572:108:::0;:::o;966:85:11:-;1012:7;1038:6;;;;;;;;;;;1031:13;;966:85;:::o;2511:102:4:-;2567:13;2599:7;2592:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2511:102;:::o;4144:290::-;4258:12;:10;:12::i;:::-;4246:24;;:8;:24;;;;4238:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4356:8;4311:18;:32;4330:12;:10;:12::i;:::-;4311:32;;;;;;;;;;;;;;;:42;4344:8;4311:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4408:8;4379:48;;4394:12;:10;:12::i;:::-;4379:48;;;4418:8;4379:48;;;;;;:::i;:::-;;;;;;;;4144:290;;:::o;5365:320::-;5534:41;5553:12;:10;:12::i;:::-;5567:7;5534:18;:41::i;:::-;5526:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5639:39;5653:4;5659:2;5663:7;5672:5;5639:13;:39::i;:::-;5365:320;;;;:::o;295:37:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1165:333::-;1238:13;1262:16;1270:7;1262;:16::i;:::-;1254:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;1332:28;1363:10;:8;:10::i;:::-;1332:41;;1413:1;1388:14;1382:28;:32;:114;;;;;;;;;;;;;;;;;1441:14;1457:18;:7;:16;:18::i;:::-;1477:13;1424:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1382:114;1375:121;;;1165:333;;;:::o;368:31::-;;;;:::o;463:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;4500:162:4:-;4597:4;4620:18;:25;4639:5;4620:25;;;;;;;;;;;;;;;:35;4646:8;4620:35;;;;;;;;;;;;;;;;;;;;;;;;;4613:42;;4500:162;;;;:::o;1839:189:11:-;1189:12;:10;:12::i;:::-;1178:23;;:7;:5;:7::i;:::-;:23;;;1170:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1947:1:::1;1927:22;;:8;:22;;;;1919:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;718:377:0:-;778:4;981:12;1046:7;1034:20;1026:28;;1087:1;1080:4;:8;1073:15;;;718:377;;;:::o;13066:122:4:-;;;;:::o;1431:300::-;1533:4;1583:25;1568:40;;;:11;:40;;;;:104;;;;1639:33;1624:48;;;:11;:48;;;;1568:104;:156;;;;1688:36;1712:11;1688:23;:36::i;:::-;1568:156;1549:175;;1431:300;;;:::o;587:96:1:-;640:7;666:10;659:17;;587:96;:::o;7157:125:4:-;7222:4;7273:1;7245:30;;:7;:16;7253:7;7245:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7238:37;;7157:125;;;:::o;11008:171::-;11109:2;11082:15;:24;11098:7;11082:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11164:7;11160:2;11126:46;;11135:23;11150:7;11135:14;:23::i;:::-;11126:46;;;;;;;;;;;;11008:171;;:::o;7440:344::-;7533:4;7557:16;7565:7;7557;:16::i;:::-;7549:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7632:13;7648:23;7663:7;7648:14;:23::i;:::-;7632:39;;7700:5;7689:16;;:7;:16;;;:51;;;;7733:7;7709:31;;:20;7721:7;7709:11;:20::i;:::-;:31;;;7689:51;:87;;;;7744:32;7761:5;7768:7;7744:16;:32::i;:::-;7689:87;7681:96;;;7440:344;;;;:::o;10337:560::-;10491:4;10464:31;;:23;10479:7;10464:14;:23::i;:::-;:31;;;10456:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10573:1;10559:16;;:2;:16;;;;10551:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;10627:39;10648:4;10654:2;10658:7;10627:20;:39::i;:::-;10728:29;10745:1;10749:7;10728:8;:29::i;:::-;10787:1;10768:9;:15;10778:4;10768:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;10815:1;10798:9;:13;10808:2;10798:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10845:2;10826:7;:16;10834:7;10826:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10882:7;10878:2;10863:27;;10872:4;10863:27;;;;;;;;;;;;10337:560;;;:::o;8114:108::-;8189:26;8199:2;8203:7;8189:26;;;;;;;;;;;;:9;:26::i;:::-;8114:108;;:::o;2034:169:11:-;2089:16;2108:6;;;;;;;;;;;2089:25;;2133:8;2124:6;;:17;;;;;;;;;;;;;;;;;;2187:8;2156:40;;2177:8;2156:40;;;;;;;;;;;;2079:124;2034:169;:::o;6547:307:4:-;6698:28;6708:4;6714:2;6718:7;6698:9;:28::i;:::-;6744:48;6767:4;6773:2;6777:7;6786:5;6744:22;:48::i;:::-;6736:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6547:307;;;;:::o;665:92:2:-;725:13;748:7;741:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;665:92;:::o;275:703:12:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;763:155:3:-;848:4;886:25;871:40;;;:11;:40;;;;864:47;;763:155;;;:::o;2543:572:5:-;2682:45;2709:4;2715:2;2719:7;2682:26;:45::i;:::-;2758:1;2742:18;;:4;:18;;;2738:183;;;2776:40;2808:7;2776:31;:40::i;:::-;2738:183;;;2845:2;2837:10;;:4;:10;;;2833:88;;2863:47;2896:4;2902:7;2863:32;:47::i;:::-;2833:88;2738:183;2948:1;2934:16;;:2;:16;;;2930:179;;;2966:45;3003:7;2966:36;:45::i;:::-;2930:179;;;3038:4;3032:10;;:2;:10;;;3028:81;;3058:40;3086:2;3090:7;3058:27;:40::i;:::-;3028:81;2930:179;2543:572;;;:::o;8443:311:4:-;8568:18;8574:2;8578:7;8568:5;:18::i;:::-;8617:54;8648:1;8652:2;8656:7;8665:5;8617:22;:54::i;:::-;8596:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;8443:311;;;:::o;11732:778::-;11882:4;11902:15;:2;:13;;;:15::i;:::-;11898:606;;;11953:2;11937:36;;;11974:12;:10;:12::i;:::-;11988:4;11994:7;12003:5;11937:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11933:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12193:1;12176:6;:13;:18;12172:266;;;12218:60;;;;;;;;;;:::i;:::-;;;;;;;;12172:266;12390:6;12384:13;12375:6;12371:2;12367:15;12360:38;11933:519;12069:41;;;12059:51;;;:6;:51;;;;12052:58;;;;;11898:606;12489:4;12482:11;;11732:778;;;;;;;:::o;3821:161:5:-;3924:10;:17;;;;3897:15;:24;3913:7;3897:24;;;;;;;;;;;:44;;;;3951:10;3967:7;3951:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3821:161;:::o;4599:970::-;4861:22;4911:1;4886:22;4903:4;4886:16;:22::i;:::-;:26;;;;:::i;:::-;4861:51;;4922:18;4943:17;:26;4961:7;4943:26;;;;;;;;;;;;4922:47;;5087:14;5073:10;:28;5069:323;;5117:19;5139:12;:18;5152:4;5139:18;;;;;;;;;;;;;;;:34;5158:14;5139:34;;;;;;;;;;;;5117:56;;5221:11;5188:12;:18;5201:4;5188:18;;;;;;;;;;;;;;;:30;5207:10;5188:30;;;;;;;;;;;:44;;;;5337:10;5304:17;:30;5322:11;5304:30;;;;;;;;;;;:43;;;;5103:289;5069:323;5485:17;:26;5503:7;5485:26;;;;;;;;;;;5478:33;;;5528:12;:18;5541:4;5528:18;;;;;;;;;;;;;;;:34;5547:14;5528:34;;;;;;;;;;;5521:41;;;4680:889;;4599:970;;:::o;5857:1061::-;6106:22;6151:1;6131:10;:17;;;;:21;;;;:::i;:::-;6106:46;;6162:18;6183:15;:24;6199:7;6183:24;;;;;;;;;;;;6162:45;;6529:19;6551:10;6562:14;6551:26;;;;;;;;:::i;:::-;;;;;;;;;;6529:48;;6613:11;6588:10;6599;6588:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6723:10;6692:15;:28;6708:11;6692:28;;;;;;;;;;;:41;;;;6861:15;:24;6877:7;6861:24;;;;;;;;;;;6854:31;;;6895:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5928:990;;;5857:1061;:::o;3409:217::-;3493:14;3510:20;3527:2;3510:16;:20::i;:::-;3493:37;;3567:7;3540:12;:16;3553:2;3540:16;;;;;;;;;;;;;;;:24;3557:6;3540:24;;;;;;;;;;;:34;;;;3613:6;3584:17;:26;3602:7;3584:26;;;;;;;;;;;:35;;;;3483:143;3409:217;;:::o;9076:372:4:-;9169:1;9155:16;;:2;:16;;;;9147:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9227:16;9235:7;9227;:16::i;:::-;9226:17;9218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9287:45;9316:1;9320:2;9324:7;9287:20;:45::i;:::-;9360:1;9343:9;:13;9353:2;9343:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9390:2;9371:7;:16;9379:7;9371:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9433:7;9429:2;9408:33;;9425:1;9408:33;;;;;;;;;;;;9076:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:364::-;8180:3;8208:39;8241:5;8208:39;:::i;:::-;8263:71;8327:6;8322:3;8263:71;:::i;:::-;8256:78;;8343:52;8388:6;8383:3;8376:4;8369:5;8365:16;8343:52;:::i;:::-;8420:29;8442:6;8420:29;:::i;:::-;8415:3;8411:39;8404:46;;8184:272;8092:364;;;;:::o;8462:377::-;8568:3;8596:39;8629:5;8596:39;:::i;:::-;8651:89;8733:6;8728:3;8651:89;:::i;:::-;8644:96;;8749:52;8794:6;8789:3;8782:4;8775:5;8771:16;8749:52;:::i;:::-;8826:6;8821:3;8817:16;8810:23;;8572:267;8462:377;;;;:::o;8869:845::-;8972:3;9009:5;9003:12;9038:36;9064:9;9038:36;:::i;:::-;9090:89;9172:6;9167:3;9090:89;:::i;:::-;9083:96;;9210:1;9199:9;9195:17;9226:1;9221:137;;;;9372:1;9367:341;;;;9188:520;;9221:137;9305:4;9301:9;9290;9286:25;9281:3;9274:38;9341:6;9336:3;9332:16;9325:23;;9221:137;;9367:341;9434:38;9466:5;9434:38;:::i;:::-;9494:1;9508:154;9522:6;9519:1;9516:13;9508:154;;;9596:7;9590:14;9586:1;9581:3;9577:11;9570:35;9646:1;9637:7;9633:15;9622:26;;9544:4;9541:1;9537:12;9532:17;;9508:154;;;9691:6;9686:3;9682:16;9675:23;;9374:334;;9188:520;;8976:738;;8869:845;;;;:::o;9720:366::-;9862:3;9883:67;9947:2;9942:3;9883:67;:::i;:::-;9876:74;;9959:93;10048:3;9959:93;:::i;:::-;10077:2;10072:3;10068:12;10061:19;;9720:366;;;:::o;10092:::-;10234:3;10255:67;10319:2;10314:3;10255:67;:::i;:::-;10248:74;;10331:93;10420:3;10331:93;:::i;:::-;10449:2;10444:3;10440:12;10433:19;;10092:366;;;:::o;10464:::-;10606:3;10627:67;10691:2;10686:3;10627:67;:::i;:::-;10620:74;;10703:93;10792:3;10703:93;:::i;:::-;10821:2;10816:3;10812:12;10805:19;;10464:366;;;:::o;10836:::-;10978:3;10999:67;11063:2;11058:3;10999:67;:::i;:::-;10992:74;;11075:93;11164:3;11075:93;:::i;:::-;11193:2;11188:3;11184:12;11177:19;;10836:366;;;:::o;11208:::-;11350:3;11371:67;11435:2;11430:3;11371:67;:::i;:::-;11364:74;;11447:93;11536:3;11447:93;:::i;:::-;11565:2;11560:3;11556:12;11549:19;;11208:366;;;:::o;11580:::-;11722:3;11743:67;11807:2;11802:3;11743:67;:::i;:::-;11736:74;;11819:93;11908:3;11819:93;:::i;:::-;11937:2;11932:3;11928:12;11921:19;;11580:366;;;:::o;11952:::-;12094:3;12115:67;12179:2;12174:3;12115:67;:::i;:::-;12108:74;;12191:93;12280:3;12191:93;:::i;:::-;12309:2;12304:3;12300:12;12293:19;;11952:366;;;:::o;12324:::-;12466:3;12487:67;12551:2;12546:3;12487:67;:::i;:::-;12480:74;;12563:93;12652:3;12563:93;:::i;:::-;12681:2;12676:3;12672:12;12665:19;;12324:366;;;:::o;12696:::-;12838:3;12859:67;12923:2;12918:3;12859:67;:::i;:::-;12852:74;;12935:93;13024:3;12935:93;:::i;:::-;13053:2;13048:3;13044:12;13037:19;;12696:366;;;:::o;13068:::-;13210:3;13231:67;13295:2;13290:3;13231:67;:::i;:::-;13224:74;;13307:93;13396:3;13307:93;:::i;:::-;13425:2;13420:3;13416:12;13409:19;;13068:366;;;:::o;13440:::-;13582:3;13603:67;13667:2;13662:3;13603:67;:::i;:::-;13596:74;;13679:93;13768:3;13679:93;:::i;:::-;13797:2;13792:3;13788:12;13781:19;;13440:366;;;:::o;13812:::-;13954:3;13975:67;14039:2;14034:3;13975:67;:::i;:::-;13968:74;;14051:93;14140:3;14051:93;:::i;:::-;14169:2;14164:3;14160:12;14153:19;;13812:366;;;:::o;14184:::-;14326:3;14347:67;14411:2;14406:3;14347:67;:::i;:::-;14340:74;;14423:93;14512:3;14423:93;:::i;:::-;14541:2;14536:3;14532:12;14525:19;;14184:366;;;:::o;14556:::-;14698:3;14719:67;14783:2;14778:3;14719:67;:::i;:::-;14712:74;;14795:93;14884:3;14795:93;:::i;:::-;14913:2;14908:3;14904:12;14897:19;;14556:366;;;:::o;14928:::-;15070:3;15091:67;15155:2;15150:3;15091:67;:::i;:::-;15084:74;;15167:93;15256:3;15167:93;:::i;:::-;15285:2;15280:3;15276:12;15269:19;;14928:366;;;:::o;15300:::-;15442:3;15463:67;15527:2;15522:3;15463:67;:::i;:::-;15456:74;;15539:93;15628:3;15539:93;:::i;:::-;15657:2;15652:3;15648:12;15641:19;;15300:366;;;:::o;15672:::-;15814:3;15835:67;15899:2;15894:3;15835:67;:::i;:::-;15828:74;;15911:93;16000:3;15911:93;:::i;:::-;16029:2;16024:3;16020:12;16013:19;;15672:366;;;:::o;16044:::-;16186:3;16207:67;16271:2;16266:3;16207:67;:::i;:::-;16200:74;;16283:93;16372:3;16283:93;:::i;:::-;16401:2;16396:3;16392:12;16385:19;;16044:366;;;:::o;16416:118::-;16503:24;16521:5;16503:24;:::i;:::-;16498:3;16491:37;16416:118;;:::o;16540:589::-;16765:3;16787:95;16878:3;16869:6;16787:95;:::i;:::-;16780:102;;16899:95;16990:3;16981:6;16899:95;:::i;:::-;16892:102;;17011:92;17099:3;17090:6;17011:92;:::i;:::-;17004:99;;17120:3;17113:10;;16540:589;;;;;;:::o;17135:222::-;17228:4;17266:2;17255:9;17251:18;17243:26;;17279:71;17347:1;17336:9;17332:17;17323:6;17279:71;:::i;:::-;17135:222;;;;:::o;17363:640::-;17558:4;17596:3;17585:9;17581:19;17573:27;;17610:71;17678:1;17667:9;17663:17;17654:6;17610:71;:::i;:::-;17691:72;17759:2;17748:9;17744:18;17735:6;17691:72;:::i;:::-;17773;17841:2;17830:9;17826:18;17817:6;17773:72;:::i;:::-;17892:9;17886:4;17882:20;17877:2;17866:9;17862:18;17855:48;17920:76;17991:4;17982:6;17920:76;:::i;:::-;17912:84;;17363:640;;;;;;;:::o;18009:210::-;18096:4;18134:2;18123:9;18119:18;18111:26;;18147:65;18209:1;18198:9;18194:17;18185:6;18147:65;:::i;:::-;18009:210;;;;:::o;18225:313::-;18338:4;18376:2;18365:9;18361:18;18353:26;;18425:9;18419:4;18415:20;18411:1;18400:9;18396:17;18389:47;18453:78;18526:4;18517:6;18453:78;:::i;:::-;18445:86;;18225:313;;;;:::o;18544:419::-;18710:4;18748:2;18737:9;18733:18;18725:26;;18797:9;18791:4;18787:20;18783:1;18772:9;18768:17;18761:47;18825:131;18951:4;18825:131;:::i;:::-;18817:139;;18544:419;;;:::o;18969:::-;19135:4;19173:2;19162:9;19158:18;19150:26;;19222:9;19216:4;19212:20;19208:1;19197:9;19193:17;19186:47;19250:131;19376:4;19250:131;:::i;:::-;19242:139;;18969:419;;;:::o;19394:::-;19560:4;19598:2;19587:9;19583:18;19575:26;;19647:9;19641:4;19637:20;19633:1;19622:9;19618:17;19611:47;19675:131;19801:4;19675:131;:::i;:::-;19667:139;;19394:419;;;:::o;19819:::-;19985:4;20023:2;20012:9;20008:18;20000:26;;20072:9;20066:4;20062:20;20058:1;20047:9;20043:17;20036:47;20100:131;20226:4;20100:131;:::i;:::-;20092:139;;19819:419;;;:::o;20244:::-;20410:4;20448:2;20437:9;20433:18;20425:26;;20497:9;20491:4;20487:20;20483:1;20472:9;20468:17;20461:47;20525:131;20651:4;20525:131;:::i;:::-;20517:139;;20244:419;;;:::o;20669:::-;20835:4;20873:2;20862:9;20858:18;20850:26;;20922:9;20916:4;20912:20;20908:1;20897:9;20893:17;20886:47;20950:131;21076:4;20950:131;:::i;:::-;20942:139;;20669:419;;;:::o;21094:::-;21260:4;21298:2;21287:9;21283:18;21275:26;;21347:9;21341:4;21337:20;21333:1;21322:9;21318:17;21311:47;21375:131;21501:4;21375:131;:::i;:::-;21367:139;;21094:419;;;:::o;21519:::-;21685:4;21723:2;21712:9;21708:18;21700:26;;21772:9;21766:4;21762:20;21758:1;21747:9;21743:17;21736:47;21800:131;21926:4;21800:131;:::i;:::-;21792:139;;21519:419;;;:::o;21944:::-;22110:4;22148:2;22137:9;22133:18;22125:26;;22197:9;22191:4;22187:20;22183:1;22172:9;22168:17;22161:47;22225:131;22351:4;22225:131;:::i;:::-;22217:139;;21944:419;;;:::o;22369:::-;22535:4;22573:2;22562:9;22558:18;22550:26;;22622:9;22616:4;22612:20;22608:1;22597:9;22593:17;22586:47;22650:131;22776:4;22650:131;:::i;:::-;22642:139;;22369:419;;;:::o;22794:::-;22960:4;22998:2;22987:9;22983:18;22975:26;;23047:9;23041:4;23037:20;23033:1;23022:9;23018:17;23011:47;23075:131;23201:4;23075:131;:::i;:::-;23067:139;;22794:419;;;:::o;23219:::-;23385:4;23423:2;23412:9;23408:18;23400:26;;23472:9;23466:4;23462:20;23458:1;23447:9;23443:17;23436:47;23500:131;23626:4;23500:131;:::i;:::-;23492:139;;23219:419;;;:::o;23644:::-;23810:4;23848:2;23837:9;23833:18;23825:26;;23897:9;23891:4;23887:20;23883:1;23872:9;23868:17;23861:47;23925:131;24051:4;23925:131;:::i;:::-;23917:139;;23644:419;;;:::o;24069:::-;24235:4;24273:2;24262:9;24258:18;24250:26;;24322:9;24316:4;24312:20;24308:1;24297:9;24293:17;24286:47;24350:131;24476:4;24350:131;:::i;:::-;24342:139;;24069:419;;;:::o;24494:::-;24660:4;24698:2;24687:9;24683:18;24675:26;;24747:9;24741:4;24737:20;24733:1;24722:9;24718:17;24711:47;24775:131;24901:4;24775:131;:::i;:::-;24767:139;;24494:419;;;:::o;24919:::-;25085:4;25123:2;25112:9;25108:18;25100:26;;25172:9;25166:4;25162:20;25158:1;25147:9;25143:17;25136:47;25200:131;25326:4;25200:131;:::i;:::-;25192:139;;24919:419;;;:::o;25344:::-;25510:4;25548:2;25537:9;25533:18;25525:26;;25597:9;25591:4;25587:20;25583:1;25572:9;25568:17;25561:47;25625:131;25751:4;25625:131;:::i;:::-;25617:139;;25344:419;;;:::o;25769:::-;25935:4;25973:2;25962:9;25958:18;25950:26;;26022:9;26016:4;26012:20;26008:1;25997:9;25993:17;25986:47;26050:131;26176:4;26050:131;:::i;:::-;26042:139;;25769:419;;;:::o;26194:222::-;26287:4;26325:2;26314:9;26310:18;26302:26;;26338:71;26406:1;26395:9;26391:17;26382:6;26338:71;:::i;:::-;26194:222;;;;:::o;26422:129::-;26456:6;26483:20;;:::i;:::-;26473:30;;26512:33;26540:4;26532:6;26512:33;:::i;:::-;26422:129;;;:::o;26557:75::-;26590:6;26623:2;26617:9;26607:19;;26557:75;:::o;26638:307::-;26699:4;26789:18;26781:6;26778:30;26775:56;;;26811:18;;:::i;:::-;26775:56;26849:29;26871:6;26849:29;:::i;:::-;26841:37;;26933:4;26927;26923:15;26915:23;;26638:307;;;:::o;26951:308::-;27013:4;27103:18;27095:6;27092:30;27089:56;;;27125:18;;:::i;:::-;27089:56;27163:29;27185:6;27163:29;:::i;:::-;27155:37;;27247:4;27241;27237:15;27229:23;;26951:308;;;:::o;27265:141::-;27314:4;27337:3;27329:11;;27360:3;27357:1;27350:14;27394:4;27391:1;27381:18;27373:26;;27265:141;;;:::o;27412:98::-;27463:6;27497:5;27491:12;27481:22;;27412:98;;;:::o;27516:99::-;27568:6;27602:5;27596:12;27586:22;;27516:99;;;:::o;27621:168::-;27704:11;27738:6;27733:3;27726:19;27778:4;27773:3;27769:14;27754:29;;27621:168;;;;:::o;27795:169::-;27879:11;27913:6;27908:3;27901:19;27953:4;27948:3;27944:14;27929:29;;27795:169;;;;:::o;27970:148::-;28072:11;28109:3;28094:18;;27970:148;;;;:::o;28124:305::-;28164:3;28183:20;28201:1;28183:20;:::i;:::-;28178:25;;28217:20;28235:1;28217:20;:::i;:::-;28212:25;;28371:1;28303:66;28299:74;28296:1;28293:81;28290:107;;;28377:18;;:::i;:::-;28290:107;28421:1;28418;28414:9;28407:16;;28124:305;;;;:::o;28435:185::-;28475:1;28492:20;28510:1;28492:20;:::i;:::-;28487:25;;28526:20;28544:1;28526:20;:::i;:::-;28521:25;;28565:1;28555:35;;28570:18;;:::i;:::-;28555:35;28612:1;28609;28605:9;28600:14;;28435:185;;;;:::o;28626:348::-;28666:7;28689:20;28707:1;28689:20;:::i;:::-;28684:25;;28723:20;28741:1;28723:20;:::i;:::-;28718:25;;28911:1;28843:66;28839:74;28836:1;28833:81;28828:1;28821:9;28814:17;28810:105;28807:131;;;28918:18;;:::i;:::-;28807:131;28966:1;28963;28959:9;28948:20;;28626:348;;;;:::o;28980:191::-;29020:4;29040:20;29058:1;29040:20;:::i;:::-;29035:25;;29074:20;29092:1;29074:20;:::i;:::-;29069:25;;29113:1;29110;29107:8;29104:34;;;29118:18;;:::i;:::-;29104:34;29163:1;29160;29156:9;29148:17;;28980:191;;;;:::o;29177:96::-;29214:7;29243:24;29261:5;29243:24;:::i;:::-;29232:35;;29177:96;;;:::o;29279:90::-;29313:7;29356:5;29349:13;29342:21;29331:32;;29279:90;;;:::o;29375:149::-;29411:7;29451:66;29444:5;29440:78;29429:89;;29375:149;;;:::o;29530:126::-;29567:7;29607:42;29600:5;29596:54;29585:65;;29530:126;;;:::o;29662:77::-;29699:7;29728:5;29717:16;;29662:77;;;:::o;29745:154::-;29829:6;29824:3;29819;29806:30;29891:1;29882:6;29877:3;29873:16;29866:27;29745:154;;;:::o;29905:307::-;29973:1;29983:113;29997:6;29994:1;29991:13;29983:113;;;30082:1;30077:3;30073:11;30067:18;30063:1;30058:3;30054:11;30047:39;30019:2;30016:1;30012:10;30007:15;;29983:113;;;30114:6;30111:1;30108:13;30105:101;;;30194:1;30185:6;30180:3;30176:16;30169:27;30105:101;29954:258;29905:307;;;:::o;30218:320::-;30262:6;30299:1;30293:4;30289:12;30279:22;;30346:1;30340:4;30336:12;30367:18;30357:81;;30423:4;30415:6;30411:17;30401:27;;30357:81;30485:2;30477:6;30474:14;30454:18;30451:38;30448:84;;;30504:18;;:::i;:::-;30448:84;30269:269;30218:320;;;:::o;30544:281::-;30627:27;30649:4;30627:27;:::i;:::-;30619:6;30615:40;30757:6;30745:10;30742:22;30721:18;30709:10;30706:34;30703:62;30700:88;;;30768:18;;:::i;:::-;30700:88;30808:10;30804:2;30797:22;30587:238;30544:281;;:::o;30831:233::-;30870:3;30893:24;30911:5;30893:24;:::i;:::-;30884:33;;30939:66;30932:5;30929:77;30926:103;;;31009:18;;:::i;:::-;30926:103;31056:1;31049:5;31045:13;31038:20;;30831:233;;;:::o;31070:176::-;31102:1;31119:20;31137:1;31119:20;:::i;:::-;31114:25;;31153:20;31171:1;31153:20;:::i;:::-;31148:25;;31192:1;31182:35;;31197:18;;:::i;:::-;31182:35;31238:1;31235;31231:9;31226:14;;31070:176;;;;:::o;31252:180::-;31300:77;31297:1;31290:88;31397:4;31394:1;31387:15;31421:4;31418:1;31411:15;31438:180;31486:77;31483:1;31476:88;31583:4;31580:1;31573:15;31607:4;31604:1;31597:15;31624:180;31672:77;31669:1;31662:88;31769:4;31766:1;31759:15;31793:4;31790:1;31783:15;31810:180;31858:77;31855:1;31848:88;31955:4;31952:1;31945:15;31979:4;31976:1;31969:15;31996:180;32044:77;32041:1;32034:88;32141:4;32138:1;32131:15;32165:4;32162:1;32155:15;32182:180;32230:77;32227:1;32220:88;32327:4;32324:1;32317:15;32351:4;32348:1;32341:15;32368:117;32477:1;32474;32467:12;32491:117;32600:1;32597;32590:12;32614:117;32723:1;32720;32713:12;32737:117;32846:1;32843;32836:12;32860:102;32901:6;32952:2;32948:7;32943:2;32936:5;32932:14;32928:28;32918:38;;32860:102;;;:::o;32968:230::-;33108:34;33104:1;33096:6;33092:14;33085:58;33177:13;33172:2;33164:6;33160:15;33153:38;32968:230;:::o;33204:237::-;33344:34;33340:1;33332:6;33328:14;33321:58;33413:20;33408:2;33400:6;33396:15;33389:45;33204:237;:::o;33447:225::-;33587:34;33583:1;33575:6;33571:14;33564:58;33656:8;33651:2;33643:6;33639:15;33632:33;33447:225;:::o;33678:178::-;33818:30;33814:1;33806:6;33802:14;33795:54;33678:178;:::o;33862:223::-;34002:34;33998:1;33990:6;33986:14;33979:58;34071:6;34066:2;34058:6;34054:15;34047:31;33862:223;:::o;34091:175::-;34231:27;34227:1;34219:6;34215:14;34208:51;34091:175;:::o;34272:231::-;34412:34;34408:1;34400:6;34396:14;34389:58;34481:14;34476:2;34468:6;34464:15;34457:39;34272:231;:::o;34509:243::-;34649:34;34645:1;34637:6;34633:14;34626:58;34718:26;34713:2;34705:6;34701:15;34694:51;34509:243;:::o;34758:229::-;34898:34;34894:1;34886:6;34882:14;34875:58;34967:12;34962:2;34954:6;34950:15;34943:37;34758:229;:::o;34993:228::-;35133:34;35129:1;35121:6;35117:14;35110:58;35202:11;35197:2;35189:6;35185:15;35178:36;34993:228;:::o;35227:182::-;35367:34;35363:1;35355:6;35351:14;35344:58;35227:182;:::o;35415:231::-;35555:34;35551:1;35543:6;35539:14;35532:58;35624:14;35619:2;35611:6;35607:15;35600:39;35415:231;:::o;35652:182::-;35792:34;35788:1;35780:6;35776:14;35769:58;35652:182;:::o;35840:228::-;35980:34;35976:1;35968:6;35964:14;35957:58;36049:11;36044:2;36036:6;36032:15;36025:36;35840:228;:::o;36074:234::-;36214:34;36210:1;36202:6;36198:14;36191:58;36283:17;36278:2;36270:6;36266:15;36259:42;36074:234;:::o;36314:220::-;36454:34;36450:1;36442:6;36438:14;36431:58;36523:3;36518:2;36510:6;36506:15;36499:28;36314:220;:::o;36540:236::-;36680:34;36676:1;36668:6;36664:14;36657:58;36749:19;36744:2;36736:6;36732:15;36725:44;36540:236;:::o;36782:231::-;36922:34;36918:1;36910:6;36906:14;36899:58;36991:14;36986:2;36978:6;36974:15;36967:39;36782:231;:::o;37019:122::-;37092:24;37110:5;37092:24;:::i;:::-;37085:5;37082:35;37072:63;;37131:1;37128;37121:12;37072:63;37019:122;:::o;37147:116::-;37217:21;37232:5;37217:21;:::i;:::-;37210:5;37207:32;37197:60;;37253:1;37250;37243:12;37197:60;37147:116;:::o;37269:120::-;37341:23;37358:5;37341:23;:::i;:::-;37334:5;37331:34;37321:62;;37379:1;37376;37369:12;37321:62;37269:120;:::o;37395:122::-;37468:24;37486:5;37468:24;:::i;:::-;37461:5;37458:35;37448:63;;37507:1;37504;37497:12;37448:63;37395:122;:::o

Swarm Source

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