code: func NewWithoutHandlers(conf *config.Config, version string) *Kontrol {
  	k := &Kontrol{
  		clientLocks: NewIdlock(),
  		heartbeats:  make(map[string]*heartbeat),
  		closed:      make(chan struct{}),
  		tokenCache:  make(map[string]cachedToken),
  	}
  
  	// Make a copy to not modify user-provided value.
  	conf = conf.Copy()
  
  	// Listen on 4000 by default.
  	if conf.Port == 0 {
  		conf.Port = DefaultPort
  	}
  
  	// Allow keys that were recently deleted - for Register{,HTTP} to
  	// give client kite a chance to update them.
  	if conf.VerifyFunc == nil {
  		conf.VerifyFunc = k.Verify
  	}
  
  	k.Kite = kite.NewWithConfig("kontrol", version, conf)
  	k.log = k.Kite.Log
  
  	return k
  }
docs: // NewWithoutHandlers creates a new kontrol instance with the given version and config
  // instance, but *without* the default handlers. If this is function is
  // used, make sure to implement the expected kontrol functionality.
  //
  // Example:
  //
  //     kontrol := NewWithoutHandlers(conf, version)
  //     kontrol.Kite.HandleFunc("register", kontrol.HandleRegister)
  //     kontrol.Kite.HandleFunc("registerMachine", kontrol.HandleMachine).DisableAuthentication()
  //     kontrol.Kite.HandleFunc("getKites", kontrol.HandleGetKites)
  //     kontrol.Kite.HandleFunc("getToken", kontrol.HandleGetToken)
  //     kontrol.Kite.HandleFunc("getKey", kontrol.HandleGetKey)
  //     kontrol.Kite.HandleHTTPFunc("/heartbeat", kontrol.HandleHeartbeat)
  //     kontrol.Kite.HandleHTTPFunc("/register", kontrol.HandleRegisterHTTP)
  //