docs: def _merge_tops_merge_all(self, tops):
          '''
          Merge the top files into a single dictionary
          '''
          def _read_tgt(tgt):
              match_type = None
              states = []
              for item in tgt:
                  if isinstance(item, dict):
                      match_type = item
                  if isinstance(item, six.string_types):
                      states.append(item)
              return match_type, states
  
          top = DefaultOrderedDict(OrderedDict)
          for ctops in six.itervalues(tops):
              for ctop in ctops:
                  for saltenv, targets in six.iteritems(ctop):
                      if saltenv == 'include':
                          continue
                      try:
                          for tgt in targets:
                              if tgt not in top[saltenv]:
                                  top[saltenv][tgt] = ctop[saltenv][tgt]
                                  continue
                              m_type1, m_states1 = _read_tgt(top[saltenv][tgt])
                              m_type2, m_states2 = _read_tgt(ctop[saltenv][tgt])
                              merged = []
                              match_type = m_type2 or m_type1
                              if match_type is not None:
                                  merged.append(match_type)
                              merged.extend(m_states1)
                              merged.extend([x for x in m_states2 if x not in merged])
                              top[saltenv][tgt] = merged
                      except TypeError:
                          raise SaltRenderError('Unable to render top file. No targets found.')
          return top