abstract contract ERC721OptBatchBurnable is ERC721OptBurnable {
    /**
     * @dev Perform burn on a batch of tokens
     */
    function batchBurn(uint16[] memory tokenIds) public virtual {
        for (uint16 i = 0; i < tokenIds.length; ++i) {
            if (!_isApprovedOrOwner(_msgSender(), tokenIds[i])) revert BurnCallerNotOwnerNorApproved();
            _burn(tokenIds[i]);
        }
    }
}
/**
 * @title ERC721Opt Batch Burnable Token
 * @dev ERC721Opt Token that can be irreversibly batch burned (destroyed).
 */
function batchBurn(uint16[] memory tokenIds) public virtual {
    for (uint16 i = 0; i < tokenIds.length; ++i) {
        if (!_isApprovedOrOwner(_msgSender(), tokenIds[i])) revert BurnCallerNotOwnerNorApproved();
        _burn(tokenIds[i]);
    }
}

/**
 * @dev Perform burn on a batch of tokens
 */