code: func (c *Config) Merge(o *Config) *Config {
  	if c == nil {
  		if o == nil {
  			return nil
  		}
  		return o.Copy()
  	}
  
  	if o == nil {
  		return c.Copy()
  	}
  
  	r := c.Copy()
  
  	if o.Consul != nil {
  		r.Consul = r.Consul.Merge(o.Consul)
  	}
  
  	if o.Dedup != nil {
  		r.Dedup = r.Dedup.Merge(o.Dedup)
  	}
  
  	if o.Exec != nil {
  		r.Exec = r.Exec.Merge(o.Exec)
  	}
  
  	if o.KillSignal != nil {
  		r.KillSignal = o.KillSignal
  	}
  
  	if o.LogLevel != nil {
  		r.LogLevel = o.LogLevel
  	}
  
  	if o.MaxStale != nil {
  		r.MaxStale = o.MaxStale
  	}
  
  	if o.PidFile != nil {
  		r.PidFile = o.PidFile
  	}
  
  	if o.ReloadSignal != nil {
  		r.ReloadSignal = o.ReloadSignal
  	}
  
  	if o.Syslog != nil {
  		r.Syslog = r.Syslog.Merge(o.Syslog)
  	}
  
  	if o.Templates != nil {
  		r.Templates = r.Templates.Merge(o.Templates)
  	}
  
  	if o.Vault != nil {
  		r.Vault = r.Vault.Merge(o.Vault)
  	}
  
  	if o.Wait != nil {
  		r.Wait = r.Wait.Merge(o.Wait)
  	}
  
  	return r
  }
docs: // Merge merges the values in config into this config object. Values in the
  // config object overwrite the values in c.