code: func NewSupervisor(id string) Supervisor {
  	closeContext, cancel := context.WithCancel(context.TODO())
  
  	exitContext, signalExit := context.WithCancel(context.TODO())
  	reloadContext, signalReload := context.WithCancel(context.TODO())
  
  	srv := &LocalSupervisor{
  		id:           id,
  		services:     []Service{},
  		wg:           &sync.WaitGroup{},
  		events:       map[string]Event{},
  		eventsC:      make(chan Event, 1024),
  		eventWaiters: make(map[string][]*waiter),
  		closeContext: closeContext,
  		signalClose:  cancel,
  
  		exitContext: exitContext,
  		signalExit:  signalExit,
  
  		reloadContext: reloadContext,
  		signalReload:  signalReload,
  	}
  	go srv.fanOut()
  	return srv
  }
docs: // NewSupervisor returns new instance of initialized supervisor