class VertxHttpClientBuilder<F extends HttpClient.Factory>
    extends StandardHttpClientBuilder<VertxHttpClient<F>, F, VertxHttpClientBuilder<F>> {

  private static final int MAX_CONNECTIONS = 8192;
  // the default for etcd seems to be 3 MB, but we'll default to unlimited, so we have the same behavior across clients
  private static final int MAX_WS_MESSAGE_SIZE = Integer.MAX_VALUE;

  final Vertx vertx;

  public VertxHttpClientBuilder(F clientFactory, Vertx vertx) {
    super(clientFactory);
    this.vertx = vertx;
  }

  @Override
  public VertxHttpClient<F> build() {<FILL_FUNCTION_BODY>}

  @Override
  protected VertxHttpClientBuilder<F> newInstance(F clientFactory) {
    return new VertxHttpClientBuilder<>(clientFactory, vertx);
  }

  private ProxyType convertProxyType() {
    switch (proxyType) {
      case HTTP:
        return ProxyType.HTTP;
      case SOCKS4:
        return ProxyType.SOCKS4;
      case SOCKS5:
        return ProxyType.SOCKS5;
      default:
        throw new KubernetesClientException("Unsupported proxy type");
    }
  }

}

    if (this.client != null) {
      return new VertxHttpClient<>(this, this.client.getClient(), this.client.getClosed());
    }

    WebClientOptions options = new WebClientOptions();

    options.setMaxPoolSize(MAX_CONNECTIONS);
    options.setMaxWebSockets(MAX_CONNECTIONS);
    options.setIdleTimeoutUnit(TimeUnit.SECONDS);
    // the api-server does not seem to fragment messages, so the frames can be very large
    options.setMaxWebSocketFrameSize(MAX_WS_MESSAGE_SIZE);
    options.setMaxWebSocketMessageSize(MAX_WS_MESSAGE_SIZE);

    if (this.connectTimeout != null) {
      options.setConnectTimeout((int) this.connectTimeout.toMillis());
    }

    if (this.followRedirects) {
      options.setFollowRedirects(followRedirects);
    }

    if (this.proxyType != HttpClient.ProxyType.DIRECT && this.proxyAddress != null) {
      ProxyOptions proxyOptions = new ProxyOptions()
          .setHost(this.proxyAddress.getHostName())
          .setPort(this.proxyAddress.getPort())
          .setType(convertProxyType());
      options.setProxyOptions(proxyOptions);
      addProxyAuthInterceptor();
    }

    final String[] protocols;
    if (tlsVersions != null && tlsVersions.length > 0) {
      protocols = Stream.of(tlsVersions).map(TlsVersion::javaName).toArray(String[]::new);
      options.setEnabledSecureTransportProtocols(new HashSet<>(Arrays.asList(protocols)));
    } else {
      protocols = null;
    }

    if (this.preferHttp11) {
      options.setProtocolVersion(HttpVersion.HTTP_1_1);
    }

    if (this.sslContext != null) {
      options.setSsl(true);
      options.setSslEngineOptions(new JdkSSLEngineOptions() {
        @Override
        public JdkSSLEngineOptions copy() {
          return this;
        }

        @Override
        public SslContextFactory sslContextFactory() {
          return () -> new JdkSslContext(
              sslContext,
              true,
              null,
              IdentityCipherSuiteFilter.INSTANCE,
              ApplicationProtocolConfig.DISABLED,
              io.netty.handler.ssl.ClientAuth.NONE,
              protocols,
              false);
        }
      });
    }
    return new VertxHttpClient<>(this, vertx.createHttpClient(options), new AtomicBoolean());
  
<methods>public VertxHttpClientBuilder<F> addOrReplaceInterceptor(java.lang.String, io.fabric8.kubernetes.client.http.Interceptor) ,public VertxHttpClientBuilder<F> authenticatorNone() ,public VertxHttpClientBuilder<F> clientFactory(F) ,public VertxHttpClientBuilder<F> connectTimeout(long, java.util.concurrent.TimeUnit) ,public VertxHttpClientBuilder<F> copy(VertxHttpClient<F>) ,public VertxHttpClientBuilder<F> followAllRedirects() ,public VertxHttpClientBuilder<F> preferHttp11() ,public VertxHttpClientBuilder<F> proxyAddress(java.net.InetSocketAddress) ,public VertxHttpClientBuilder<F> proxyAuthorization(java.lang.String) ,public VertxHttpClientBuilder<F> proxyType(io.fabric8.kubernetes.client.http.HttpClient.ProxyType) ,public VertxHttpClientBuilder<F> sslContext(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[]) ,public io.fabric8.kubernetes.client.http.HttpClient.DerivedClientBuilder tag(java.lang.Object) ,public transient VertxHttpClientBuilder<F> tlsVersions(io.fabric8.kubernetes.client.http.TlsVersion[]) <variables>protected boolean authenticatorNone,protected VertxHttpClient<F> client,protected F clientFactory,protected java.time.Duration connectTimeout,protected boolean followRedirects,protected LinkedHashMap<java.lang.String,io.fabric8.kubernetes.client.http.Interceptor> interceptors,protected javax.net.ssl.KeyManager[] keyManagers,protected boolean preferHttp11,protected java.net.InetSocketAddress proxyAddress,protected java.lang.String proxyAuthorization,protected io.fabric8.kubernetes.client.http.HttpClient.ProxyType proxyType,protected javax.net.ssl.SSLContext sslContext,protected LinkedHashMap<Class<?>,java.lang.Object> tags,protected io.fabric8.kubernetes.client.http.TlsVersion[] tlsVersions,protected javax.net.ssl.TrustManager[] trustManagers