docs: public void await(long weight, long timeout, TimeUnit unit) throws InterruptedException, TimeoutException {
          try {
              lock.lockInterruptibly();
              while (isPermit(weight) == false) {
                  condition.await(timeout, unit);
              }
          } finally {
              lock.unlock();
          }
      }