@Override
  public void setChildren(@NotNull Collection<? extends N> children) {
    boolean paused = state.compareAndSet(State.PAUSED, State.STARTED);
    if (!paused && !state.compareAndSet(State.REQUESTED, State.STARTED)) throw new IllegalStateException();
    stack.push(new ArrayDeque<>(children));
    if (paused) processNextPath();
  }
@Override
  public void setChildren(@NotNull Collection<? extends N> children)