code: func (a *Allocator) DumpDatabase() string {
  	a.Lock()
  	aspaces := make(map[string]*addrSpace, len(a.addrSpaces))
  	orderedAS := make([]string, 0, len(a.addrSpaces))
  	for as, aSpace := range a.addrSpaces {
  		orderedAS = append(orderedAS, as)
  		aspaces[as] = aSpace
  	}
  	a.Unlock()
  
  	sort.Strings(orderedAS)
  
  	var s string
  	for _, as := range orderedAS {
  		aSpace := aspaces[as]
  		s = fmt.Sprintf("\n\n%s Config", as)
  		aSpace.Lock()
  		for k, config := range aSpace.subnets {
  			s += fmt.Sprintf("\n%v: %v", k, config)
  			if config.Range == nil {
  				a.retrieveBitmask(k, config.Pool)
  			}
  		}
  		aSpace.Unlock()
  	}
  
  	s = fmt.Sprintf("%s\n\nBitmasks", s)
  	for k, bm := range a.addresses {
  		s += fmt.Sprintf("\n%s: %s", k, bm)
  	}
  
  	return s
  }
docs: // DumpDatabase dumps the internal info