contract DumplingERC721 is
    ERC721A,
    ReentrancyGuard,
    PaymentSplitter,
    Ownable
{
    using Strings for uint256;

    uint256 public constant MAX_SUPPLY = 2207; // 2500 total dumplings - 293 minted dumplings

    string public baseURI;

    bool public mintingEnabled = true;

    string public constant R =
        "We are Nervous. Are you? Let us help you with your next NFT Project -> hello@nervous.net";

    constructor(
        string memory name,
        string memory symbol,
        string memory _initBaseURI,
        address[] memory payees,
        uint256[] memory shares
    ) ERC721A(name, symbol) PaymentSplitter(payees, shares) {
        baseURI = _initBaseURI;
    }

    function _startTokenId() internal view virtual override returns (uint256) {
        return 293;
    }

    /* Minting */

    function toggleMinting() public onlyOwner {
        mintingEnabled = !mintingEnabled;
    }

    function steamDumplings(uint256 numTokens) public payable nonReentrant {
        require(mintingEnabled == true, "Minting isn't enabled");

        require(_totalMinted() + numTokens <= MAX_SUPPLY, "Sold Out");

        _safeMint(msg.sender, numTokens);
    }

    /* Utility */

    /* URL Utility */

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

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

    /* eth handlers */

    function withdraw(address payable account) public virtual {
        release(account);
    }

    function withdrawERC20(IERC20 token, address to) external onlyOwner {
        token.transfer(to, token.balanceOf(address(this)));
    }
}
function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
/* URL Utility */