def METHOD_NAME(card: dict) -> Generator[Tuple[dict, dict, str, dict], None, None]:
    queue = deque([(card, {}, None, card)])
    while len(queue) > 0:
        (next_dict, parent, key, inherits) = queue.popleft()
        yield (next_dict, parent, key, inherits)
        for k, v in next_dict.items():
            if isinstance(v, dict) or isinstance(v, OrderedDict):
                copy = inherits.copy()
                copy.update(v)
                queue.append((v, next_dict, k, copy))
            elif isinstance(v, list):
                for item in v:
                    if isinstance(item, dict) or isinstance(item, OrderedDict):
                        copy = inherits.copy()
                        copy.update(item)
                        queue.append((item, next_dict, k, copy))