code: def merge_dictionary(dst, src, extend_lists=False):
      
      stack = [(dst, src)]
      while stack:
          current_dst, current_src = stack.pop()
          for key in current_src:
              source = current_src[key]
              if key not in current_dst:
                  current_dst[key] = source
              else:
                  dest = current_dst[key]
                  if isinstance(source, dict) and isinstance(dest, dict):
                      stack.append((dest, source))
                  elif isinstance(source, list) and isinstance(dest, list):
                      merge_lists(dest, source, extend_lists=extend_lists)
                  else:
                      current_dst[key] = source
      return dst
docs: Recursively merge two dicts.
  
      Hashes at the root level are NOT overwritten. This can be used to merge two
      dicts using deep key evaluation (with support for merging lists as well).
  
      There is also logic to handle placeholders (`None`) in lists as documented
      in split_dicts.
  
      :keyword extend_lists: if true, just extends lists instead of merging them.
  
      Note: This updates dst.