docs: public boolean waitFor(Guard guard, long time, TimeUnit unit) throws InterruptedException {
      final long timeoutNanos = toSafeNanos(time, unit);
      if (!((guard.monitor == this) & lock.isHeldByCurrentThread())) {
        throw new IllegalMonitorStateException();
      }
      if (guard.isSatisfied()) {
        return true;
      }
      if (Thread.interrupted()) {
        throw new InterruptedException();
      }
      return awaitNanos(guard, timeoutNanos, true);
    }