code: private ExponentialRetryAlgorithm createRetryAlgorithm(ApiClock clock) {
      long timeoutMs = retryOptions.getMaxElapsedBackoffMillis();
  
      Deadline deadline = getOperationCallOptions().getDeadline();
      if (deadline != null) {
        timeoutMs = deadline.timeRemaining(TimeUnit.MILLISECONDS);
      }
  
      RetrySettings retrySettings = RetrySettings.newBuilder()
  
          .setJittered(true)
  
          // How long should the sleep be between RPC failure and the next RPC retry?
          .setInitialRetryDelay(toDuration(retryOptions.getInitialBackoffMillis()))
  
          // How fast should the retry delay increase?
          .setRetryDelayMultiplier(retryOptions.getBackoffMultiplier())
  
          // What is the maximum amount of sleep time between retries?
          // There needs to be some sane number for max retry delay, and it's unclear what that
          // number ought to be.  1 Minute time was chosen because some number is needed.
          .setMaxRetryDelay(Duration.of(1, ChronoUnit.MINUTES))
  
          // How long should we wait before giving up retries after the first failure?
          .setTotalTimeout(toDuration(timeoutMs))
  
          .build();
      return new ExponentialRetryAlgorithm(retrySettings, clock);
    }
docs: <p>createBackoff.</p>
  
  @return a {@link ExponentialRetryAlgorithm} object.