def update_dict(d1: dict, d2: dict) -> dict:
    """Recursively updated one dictionary with the contents of a second."""
    for k, v in d2.items():
        if isinstance(d1, dict):
            if isinstance(v, dict):
                d1[k] = update_dict(d1.get(k, {}), v)
            elif isinstance(v, list):
                if isinstance(v[0], dict):
                    for i in range(len(v)):
                        d1[k][i] = update_dict(d1.get(k, {})[i], v[i])
                else:
                    d1[k] = list(set(d1.get(k, []) + v))
            else:
                d1[k] = d2[k]
        else:
            d1 = {k: d2[k]}
    return d1