<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_nanopub_urls(ns_root_url: str = None, start_dt: str = None) -> dict: """Get modified and deleted nanopub urls Limited by last datetime retrieved (start_dt). Modified includes new and updated nanopubs Returns: dict: {'modified': [], 'deleted': []} """

    if not ns_root_url:
        ns_root_url = config["bel_api"]["servers"]["nanopubstore"]

    url = f"{ns_root_url}/nanopubs/timed"

    if not start_dt:
        start_dt = get_nanopubstore_start_dt(ns_root_url)

    params = {"startTime": start_dt, "published": True}

    # TODO - this is coming back without a status code in some cases - why?
    r = bel.utils.get_url(url, params=params, cache=False)
    if r and r.status_code == 200:
        data = r.json()
        new_start_dt = data["queryTime"]
        update_nanopubstore_start_dt(ns_root_url, new_start_dt)
        nanopub_urls = {"modified": [], "deleted": []}

        # Deleted nanopubs
        for nid in data["deleteddata"]:
            nanopub_urls["deleted"].append(f"{ns_root_url}/nanopubs/{nid}")

        # Modified nanopubs
        for nid in data["data"]:
            nanopub_urls["modified"].append(f"{ns_root_url}/nanopubs/{nid}")

        return nanopub_urls

    else:
        log.error(
            f"Bad request to Nanopubstore",
            url=url,
            status=r.status_code,
            type="api_request",
        )
        return {}