code: func sha1Map(m map[string]interface{}) string {
  	keys := make([]string, 0, len(m))
  	for k, _ := range m {
  		keys = append(keys, k)
  	}
  	sort.Strings(keys)
  
  	h := sha1.New()
  	for _, k := range keys {
  		io.WriteString(h, fmt.Sprintf("%s=%q", k, m[k]))
  	}
  
  	return fmt.Sprintf("%.4x", h.Sum(nil))
  }
docs: // sha1Map returns the sha1 hash of the data in the map. The reason this data is
  // hashed is because it appears in the output and could contain sensitive
  // information.