Repository: googleapis/java-storage
Pull request #2738 (2024-09-26 00:43:19)

deps: update dependency com.google.cloud:sdk-platform-java-config to v3.36.1
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [com.google.cloud:sdk-platform-java-config](https://redirect.github.com/googleapis/java-shared-config) | `3.36.0` -> `3.36.1` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.cloud:sdk-platform-java-config/3.36.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.cloud:sdk-platform-java-config/3.36.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.cloud:sdk-platform-java-config/3.36.0/3.36.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.cloud:sdk-platform-java-config/3.36.0/3.36.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/googleapis/java-storage).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC44MC4wIiwidXBkYXRlZEluVmVyIjoiMzguODAuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->


dpebot: /gcbrun

Patch:
diff --git a/.github/workflows/hermetic_library_generation.yaml b/.github/workflows/hermetic_library_generation.yaml
index 6997a7b4..fc55d042 100644
--- a/.github/workflows/hermetic_library_generation.yaml
+++ b/.github/workflows/hermetic_library_generation.yaml
@@ -39,7 +39,7 @@ jobs:
       with:
         fetch-depth: 0
         token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }}
-    - uses: googleapis/sdk-platform-java/.github/scripts@v2.46.0
+    - uses: googleapis/sdk-platform-java/.github/scripts@v2.46.1
       if: env.SHOULD_RUN == 'true'
       with:
         base_ref: ${{ github.base_ref }}
diff --git a/.github/workflows/unmanaged_dependency_check.yaml b/.github/workflows/unmanaged_dependency_check.yaml
index 9987e904..f0f05b87 100644
--- a/.github/workflows/unmanaged_dependency_check.yaml
+++ b/.github/workflows/unmanaged_dependency_check.yaml
@@ -17,6 +17,6 @@ jobs:
           # repository
           .kokoro/build.sh
       - name: Unmanaged dependency check
-        uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.36.0
+        uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.36.1
         with:
           bom-path: google-cloud-storage-bom/pom.xml
diff --git a/.kokoro/presubmit/graalvm-native-17.cfg b/.kokoro/presubmit/graalvm-native-17.cfg
index 3ae87570..6a071a20 100644
--- a/.kokoro/presubmit/graalvm-native-17.cfg
+++ b/.kokoro/presubmit/graalvm-native-17.cfg
@@ -3,7 +3,7 @@
 # Configure the docker image for kokoro-trampoline.
 env_vars: {
   key: "TRAMPOLINE_IMAGE"
-  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.36.0"
+  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.36.1"
 }
 
 env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native.cfg b/.kokoro/presubmit/graalvm-native.cfg
index 546192ac..3c34958a 100644
--- a/.kokoro/presubmit/graalvm-native.cfg
+++ b/.kokoro/presubmit/graalvm-native.cfg
@@ -3,7 +3,7 @@
 # Configure the docker image for kokoro-trampoline.
 env_vars: {
   key: "TRAMPOLINE_IMAGE"
-  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.36.0"
+  value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.36.1"
 }
 
 env_vars: {
diff --git a/google-cloud-storage-bom/pom.xml b/google-cloud-storage-bom/pom.xml
index 95f2407c..c92fc40d 100644
--- a/google-cloud-storage-bom/pom.xml
+++ b/google-cloud-storage-bom/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>sdk-platform-java-config</artifactId>
-    <version>3.36.0</version>
+    <version>3.36.1</version>
     <relativePath/>
   </parent>
 
diff --git a/google-cloud-storage-control/pom.xml b/google-cloud-storage-control/pom.xml
index 9f5970b6..881ff87f 100644
--- a/google-cloud-storage-control/pom.xml
+++ b/google-cloud-storage-control/pom.xml
@@ -74,37 +74,6 @@
         <dependency>
             <groupId>com.google.api.grpc</groupId>
             <artifactId>grpc-google-cloud-storage-control-v2</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.google.apis</groupId>
-            <artifactId>google-api-services-storage</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.google.cloud</groupId>
-            <artifactId>google-cloud-storage</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.google.auth</groupId>
-            <artifactId>google-auth-library-oauth2-http</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.google.http-client</groupId>
-            <artifactId>google-http-client-jackson2</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.google.http-client</groupId>
-            <artifactId>google-http-client</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.google.cloud</groupId>
-            <artifactId>google-cloud-core-http</artifactId>
-            <scope>test</scope>
         </dependency>
     </dependencies>
 
diff --git a/google-cloud-storage/pom.xml b/google-cloud-storage/pom.xml
index 1d654a85..e956264c 100644
--- a/google-cloud-storage/pom.xml
+++ b/google-cloud-storage/pom.xml
@@ -262,6 +262,16 @@
         </exclusion>
       </exclusions>
     </dependency>
+    <dependency>
+      <groupId>com.google.api.grpc</groupId>
+      <artifactId>proto-google-cloud-storage-control-v2</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.cloud</groupId>
+      <artifactId>google-cloud-storage-control</artifactId>
+      <scope>test</scope>
+    </dependency>
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
@@ -303,7 +313,12 @@
       <version>1.9.0</version>
       <scope>test</scope>
     </dependency>
-
+    <dependency>
+      <groupId>io.github.classgraph</groupId>
+      <artifactId>classgraph</artifactId>
+      <version>4.8.176</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
@@ -416,5 +431,40 @@
         <test>com.google.cloud.storage.it.StorageNativeCanary</test>
       </properties>
     </profile>
+    <profile>
+      <id>regen-grpc-graalvm-reflect-config</id>
+      <!--
+      to run this, execute the following commands from the base of the repo:
+
+      mvn -Dmaven.test.skip.exec=true clean install && cd google-cloud-storage && mvn -Pregen-grpc-graalvm-reflect-config exec:exec
+
+      -->
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.codehaus.mojo</groupId>
+            <artifactId>exec-maven-plugin</artifactId>
+            <version>3.4.1</version>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>exec</goal>
+                </goals>
+              </execution>
+            </executions>
+            <configuration>
+              <classpathScope>test</classpathScope>
+              <addOutputToClasspath>true</addOutputToClasspath>
+              <executable>java</executable>
+              <arguments>
+                <argument>-classpath</argument>
+                <classpath/>
+                <argument>com.google.cloud.storage.GenerateGrpcProtobufReflectConfig</argument>
+              </arguments>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
   </profiles>
 </project>
diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedReadableByteChannel.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedReadableByteChannel.java
index 6f4ff260..43270a1a 100644
--- a/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedReadableByteChannel.java
+++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/GapicUnbufferedReadableByteChannel.java
@@ -264,12 +264,15 @@ final class GapicUnbufferedReadableByteChannel
               alg,
               () -> {
                 ReadObjectObserver tmp = new ReadObjectObserver();
-                ReadObjectRequest request = req;
+                ReadObjectRequest.Builder builder = req.toBuilder();
                 long currentFetchOffset = fetchOffset.get();
-                if (request.getReadOffset() != currentFetchOffset) {
-                  request = req.toBuilder().setReadOffset(currentFetchOffset).build();
+                if (req.getReadOffset() != currentFetchOffset) {
+                  builder.setReadOffset(currentFetchOffset);
                 }
-                read.call(request, tmp);
+                if (metadata != null && req.getGeneration() == 0) {
+                  builder.setGeneration(metadata.getGeneration());
+                }
+                read.call(builder.build(), tmp);
                 ApiExceptions.callAndTranslateApiException(tmp.open);
                 return tmp;
               },
diff --git a/pom.xml b/pom.xml
index d94e2765..fb9d14ac 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <groupId>com.google.cloud</groupId>
     <artifactId>sdk-platform-java-config</artifactId>
-    <version>3.36.0</version>
+    <version>3.36.1</version>
   </parent>
 
   <developers>
diff --git a/renovate.json b/renovate.json
index 1f4a94b3..83eacfcc 100644
--- a/renovate.json
+++ b/renovate.json
@@ -93,7 +93,8 @@
         "^com.google.truth:truth",
         "^org.mockito:mockito-core",
         "^org.objenesis:objenesis",
-        "^com.google.cloud:google-cloud-conformance-tests"
+        "^com.google.cloud:google-cloud-conformance-tests",
+        "^io.github.classgraph:classgraph"
       ],
       "semanticCommitType": "test",
       "semanticCommitScope": "deps"


Test patch:
diff --git a/google-cloud-storage-control/src/test/java/com/google/storage/control/v2/ITFoldersTest.java b/google-cloud-storage-control/src/test/java/com/google/storage/control/v2/ITFoldersTest.java
deleted file mode 100644
index c8609e1c..00000000
--- a/google-cloud-storage-control/src/test/java/com/google/storage/control/v2/ITFoldersTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2024 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.storage.control.v2;
-
-import com.google.api.client.http.HttpRequestInitializer;
-import com.google.api.client.http.HttpTransport;
-import com.google.api.client.json.jackson2.JacksonFactory;
-import com.google.api.services.storage.Storage;
-import com.google.api.services.storage.model.Bucket;
-import com.google.cloud.http.HttpTransportOptions;
-import com.google.cloud.storage.StorageOptions;
-import java.util.UUID;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class ITFoldersTest {
-  @Test
-  public void createFolderTest() throws Exception {
-    // TODO: Update this with manual client implmentation of HNS enabled when published.
-    // TODO: Refactor to use Storage test infrastructure if extended.
-    StorageOptions option = StorageOptions.http().build();
-    HttpTransportOptions httpTransportOptions = (HttpTransportOptions) option.getTransportOptions();
-    HttpTransport transport = httpTransportOptions.getHttpTransportFactory().create();
-    HttpRequestInitializer initializer = httpTransportOptions.getHttpRequestInitializer(option);
-    Storage storage =
-        new Storage.Builder(transport, new JacksonFactory(), initializer)
-            .setApplicationName("test")
-            .build();
-    String bucketName = "hns-b-gcs-grpc-team-test-" + UUID.randomUUID();
-    Bucket createdBucket = null;
-    try {
-      Bucket bucketConfig =
-          new Bucket()
-              .setName(bucketName)
-              .setHierarchicalNamespace(new Bucket.HierarchicalNamespace().setEnabled(true))
-              .setIamConfiguration(
-                  new Bucket.IamConfiguration()
-                      .setUniformBucketLevelAccess(
-                          new Bucket.IamConfiguration.UniformBucketLevelAccess().setEnabled(true)));
-      createdBucket = storage.buckets().insert(option.getProjectId(), bucketConfig).execute();
-      StorageControlClient storageControlClient = StorageControlClient.create();
-      String folderId = "foldername/";
-      Folder folder =
-          storageControlClient.createFolder(
-              CreateFolderRequest.newBuilder()
-                  .setParent(BucketName.format("_", bucketName))
-                  .setFolderId(folderId)
-                  .build());
-      Assert.assertEquals(folder.getName(), FolderName.format("_", bucketName, folderId));
-    } finally {
-      if (createdBucket != null) {
-        storage.buckets().delete(bucketName);
-      }
-    }
-  }
-}
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/GenerateGrpcProtobufReflectConfig.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/GenerateGrpcProtobufReflectConfig.java
new file mode 100644
index 00000000..f94f4197
--- /dev/null
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/GenerateGrpcProtobufReflectConfig.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2024 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.storage;
+
+import com.google.protobuf.AbstractMessage;
+import com.google.protobuf.GeneratedMessageV3;
+import com.google.protobuf.ProtocolMessageEnum;
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ClassInfo;
+import io.github.classgraph.ScanResult;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public final class GenerateGrpcProtobufReflectConfig {
+
+  public static void main(String[] args) throws IOException {
+    try (ScanResult scanResult =
+        new ClassGraph().enableAllInfo().acceptPackages("io.grpc").scan()) {
+      String json =
+          Stream.of(
+                  Stream.of(
+                      "{\n"
+                          + "    \"name\":\"org.apache.commons.logging.LogFactory\",\n"
+                          + "    \"allDeclaredFields\":true,\n"
+                          + "    \"allDeclaredMethods\":true,\n"
+                          + "    \"allDeclaredConstructors\": true\n"
+                          + "  }",
+                      "{\n"
+                          + "    \"name\":\"org.apache.commons.logging.impl.Jdk14Logger\",\n"
+                          + "    \"methods\":[{\"name\":\"<init>\",\"parameterTypes\":[\"java.lang.String\"] }]\n"
+                          + "  }",
+                      "{\n"
+                          + "    \"name\":\"org.apache.commons.logging.impl.LogFactoryImpl\",\n"
+                          + "    \"allDeclaredFields\":true,\n"
+                          + "    \"allDeclaredMethods\":true,\n"
+                          + "    \"methods\":[{\"name\":\"<init>\",\"parameterTypes\":[] }]\n"
+                          + "  }"),
+                  Stream.of(
+                          scanResult.getSubclasses(GeneratedMessageV3.class).stream(),
+                          scanResult.getSubclasses(AbstractMessage.Builder.class).stream(),
+                          scanResult.getAllEnums()
+                              .filter(ci -> ci.implementsInterface(ProtocolMessageEnum.class))
+                              .stream())
+                      .flatMap(s -> s)
+                      .map(ClassInfo::getName)
+                      .sorted()
+                      .map(
+                          name ->
+                              String.format(
+                                  "{ \"name\": \"%s\", \"queryAllDeclaredConstructors\": true, \"queryAllPublicConstructors\": true, \"queryAllDeclaredMethods\": true, \"allPublicMethods\": true, \"allDeclaredClasses\": true, \"allPublicClasses\": true }",
+                                  name)))
+              .flatMap(s -> s)
+              .collect(Collectors.joining(",\n  ", "[\n  ", "\n]\n"));
+      String workingDirectory = System.getProperty("user.dir"); // should be google-cloud-storage
+      String testResourcesPath = "src/test/resources";
+      String reflectConfigResourcePath =
+          "META-INF/native-image/com/google/cloud/storage/reflect-config.json";
+      Path path = Paths.get(workingDirectory, testResourcesPath, reflectConfigResourcePath);
+      System.err.println("Writing reflect-config.json at path: " + path);
+      Files.write(path, json.getBytes(StandardCharsets.UTF_8));
+    }
+  }
+}
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGapicUnbufferedReadableByteChannelTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGapicUnbufferedReadableByteChannelTest.java
index c2901b46..cd9424ba 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGapicUnbufferedReadableByteChannelTest.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITGapicUnbufferedReadableByteChannelTest.java
@@ -66,7 +66,8 @@ public final class ITGapicUnbufferedReadableByteChannelTest {
 
   private final ReadObjectRequest req1 =
       ReadObjectRequest.newBuilder().setObject(objectName).setReadOffset(0).build();
-  private final ReadObjectRequest req2 = req1.toBuilder().setReadOffset(20).build();
+  private final ReadObjectRequest req2 =
+      req1.toBuilder().setGeneration(3L).setReadOffset(20).build();
   private final ReadObjectResponse resp1 =
       ReadObjectResponse.newBuilder()
           .setMetadata(expectedResult)
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/BucketCleaner.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/BucketCleaner.java
index c4dba11f..91ef5829 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/BucketCleaner.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/BucketCleaner.java
@@ -16,16 +16,35 @@
 
 package com.google.cloud.storage.it;
 
+import com.google.api.gax.grpc.GrpcCallContext;
 import com.google.api.gax.paging.Page;
+import com.google.api.gax.rpc.ApiException;
+import com.google.api.gax.rpc.FailedPreconditionException;
 import com.google.cloud.storage.Blob;
 import com.google.cloud.storage.Storage;
+import com.google.cloud.storage.Storage.BlobField;
 import com.google.cloud.storage.Storage.BlobListOption;
 import com.google.cloud.storage.Storage.BlobSourceOption;
 import com.google.cloud.storage.Storage.BucketSourceOption;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.storage.control.v2.BucketName;
+import com.google.storage.control.v2.DeleteFolderRequest;
+import com.google.storage.control.v2.DeleteManagedFolderRequest;
+import com.google.storage.control.v2.Folder;
+import com.google.storage.control.v2.GetStorageLayoutRequest;
+import com.google.storage.control.v2.ListFoldersRequest;
+import com.google.storage.control.v2.ListManagedFoldersRequest;
+import com.google.storage.control.v2.StorageControlClient;
+import com.google.storage.control.v2.StorageLayout;
+import com.google.storage.control.v2.StorageLayoutName;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
 public final class BucketCleaner {
@@ -48,12 +67,9 @@ public final class BucketCleaner {
                           b.getName(),
                           s.delete(b.getBlobId(), BlobSourceOption.userProject(projectId))))
               .collect(Collectors.toList());
-      List<DeleteResult> failedDeletes =
-          deleteResults.stream().filter(r -> !r.success).collect(Collectors.toList());
-      failedDeletes.forEach(
-          r -> LOGGER.warning(String.format("Failed to delete object %s/%s", bucketName, r.name)));
+      boolean anyFailedObjectDeletes = getIfAnyFailedAndReport(bucketName, deleteResults, "object");
 
-      if (failedDeletes.isEmpty()) {
+      if (!anyFailedObjectDeletes) {
         s.delete(bucketName, BucketSourceOption.userProject(projectId));
       } else {
         LOGGER.warning("Unable to delete bucket due to previous failed object deletes");
@@ -64,6 +80,161 @@ public final class BucketCleaner {
     }
   }
 
+  public static void doCleanup(String bucketName, Storage s, StorageControlClient ctrl) {
+    LOGGER.warning("Starting bucket cleanup: " + bucketName);
+    String projectId = s.getOptions().getProjectId();
+    try {
+      // TODO: probe bucket existence, a bad test could have deleted the bucket
+      Page<Blob> page1 =
+          s.list(
+              bucketName,
+              BlobListOption.userProject(projectId),
+              BlobListOption.versions(true),
+              BlobListOption.fields(BlobField.NAME));
+
+      List<DeleteResult> objectResults =
+          StreamSupport.stream(page1.iterateAll().spliterator(), false)
+              .map(
+                  b ->
+                      new DeleteResult(
+                          b.getName(),
+                          s.delete(b.getBlobId(), BlobSourceOption.userProject(projectId))))
+              .collect(Collectors.toList());
+      boolean anyFailedObjectDelete = getIfAnyFailedAndReport(bucketName, objectResults, "object");
+      boolean anyFailedFolderDelete = false;
+      boolean anyFailedManagedFolderDelete = false;
+
+      GrpcCallContext grpcCallContext =
+          GrpcCallContext.createDefault()
+              .withExtraHeaders(
+                  ImmutableMap.of("x-goog-user-project", ImmutableList.of(projectId)));
+      if (!anyFailedObjectDelete) {
+        BucketName parent = BucketName.of("_", bucketName);
+        StorageLayout storageLayout =
+            ctrl.getStorageLayoutCallable()
+                .call(
+                    GetStorageLayoutRequest.newBuilder()
+                        .setName(
+                            StorageLayoutName.of(parent.getProject(), parent.getBucket())
+                                .toString())
+                        .build(),
+                    grpcCallContext);
+
+        List<DeleteResult> folderDeletes;
+        if (storageLayout.hasHierarchicalNamespace()
+            && storageLayout.getHierarchicalNamespace().getEnabled()) {
+          folderDeletes =
+              StreamSupport.stream(
+                      ctrl.listFoldersPagedCallable()
+                          .call(
+                              ListFoldersRequest.newBuilder().setParent(parent.toString()).build(),
+                              grpcCallContext)
+                          .iterateAll()
+                          .spliterator(),
+                      false)
+                  .collect(Collectors.toList())
+                  .stream()
+                  .sorted(Collections.reverseOrder(Comparator.comparing(Folder::getName)))
+                  .map(
+                      folder -> {
+                        String formatted = String.format("folder = %s", folder.getName());
+                        LOGGER.warning(formatted);
+                        boolean success = true;
+                        try {
+                          ctrl.deleteFolderCallable()
+                              .call(
+                                  DeleteFolderRequest.newBuilder()
+                                      .setName(folder.getName())
+                                      .build(),
+                                  grpcCallContext);
+                        } catch (ApiException e) {
+                          success = false;
+                        }
+                        return new DeleteResult(folder.getName(), success);
+                      })
+                  .collect(Collectors.toList());
+        } else {
+          folderDeletes = ImmutableList.of();
+        }
+
+        List<DeleteResult> managedFolderDeletes;
+        try {
+          managedFolderDeletes =
+              StreamSupport.stream(
+                      ctrl.listManagedFoldersPagedCallable()
+                          .call(
+                              ListManagedFoldersRequest.newBuilder()
+                                  .setParent(parent.toString())
+                                  .build(),
+                              grpcCallContext)
+                          .iterateAll()
+                          .spliterator(),
+                      false)
+                  .map(
+                      managedFolder -> {
+                        String formatted =
+                            String.format("managedFolder = %s", managedFolder.getName());
+                        LOGGER.warning(formatted);
+                        boolean success = true;
+                        try {
+                          ctrl.deleteManagedFolderCallable()
+                              .call(
+                                  DeleteManagedFolderRequest.newBuilder()
+                                      .setName(managedFolder.getName())
+                                      .build(),
+                                  grpcCallContext);
+                        } catch (ApiException e) {
+                          success = false;
+                        }
+                        return new DeleteResult(managedFolder.getName(), success);
+                      })
+                  .collect(Collectors.toList());
+        } catch (FailedPreconditionException fpe) {
+          // FAILED_PRECONDITION: Uniform bucket-level access is required to be enabled on the
+          //   bucket in order to perform this operation. Read more at
+          //   https://cloud.google.com/storage/docs/uniform-bucket-level-access
+          managedFolderDeletes = ImmutableList.of();
+        }
+
+        anyFailedFolderDelete = getIfAnyFailedAndReport(bucketName, folderDeletes, "folder");
+        anyFailedManagedFolderDelete =
+            getIfAnyFailedAndReport(bucketName, managedFolderDeletes, "managed folder");
+      }
+
+      List<String> failed =
+          Stream.of(
+                  anyFailedObjectDelete ? "object" : "",
+                  anyFailedFolderDelete ? "folder" : "",
+                  anyFailedManagedFolderDelete ? "managed folder" : "")
+              .filter(ss -> !ss.isEmpty())
+              .collect(Collectors.toList());
+
+      if (!anyFailedObjectDelete && !anyFailedFolderDelete && !anyFailedManagedFolderDelete) {
+        s.delete(bucketName, BucketSourceOption.userProject(projectId));
+      } else {
+        LOGGER.warning(
+            String.format(
+                "Unable to delete bucket %s due to previous failed %s deletes",
+                bucketName, failed));
+      }
+
+      LOGGER.warning("Bucket cleanup complete: " + bucketName);
+    } catch (Exception e) {
+      LOGGER.log(Level.SEVERE, e, () -> "Error during bucket cleanup.");
+    }
+  }
+
+  private static boolean getIfAnyFailedAndReport(
+      String bucketName, List<DeleteResult> deleteResults, String resourceType) {
+    List<DeleteResult> failedDeletes =
+        deleteResults.stream().filter(r -> !r.success).collect(Collectors.toList());
+    failedDeletes.forEach(
+        r ->
+            LOGGER.warning(
+                String.format("Failed to delete %s %s/%s", resourceType, bucketName, r.name)));
+    return !failedDeletes.isEmpty();
+  }
+
   private static final class DeleteResult {
     private final String name;
     private final boolean success;
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITFoldersTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITFoldersTest.java
new file mode 100644
index 00000000..a5953366
--- /dev/null
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/ITFoldersTest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2024 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.storage.it;
+
+import static com.google.cloud.storage.TestUtils.assertAll;
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.cloud.storage.BucketInfo;
+import com.google.cloud.storage.it.runner.StorageITRunner;
+import com.google.cloud.storage.it.runner.annotations.Backend;
+import com.google.cloud.storage.it.runner.annotations.BucketFixture;
+import com.google.cloud.storage.it.runner.annotations.BucketType;
+import com.google.cloud.storage.it.runner.annotations.Inject;
+import com.google.cloud.storage.it.runner.annotations.SingleBackend;
+import com.google.cloud.storage.it.runner.registry.Generator;
+import com.google.storage.control.v2.BucketName;
+import com.google.storage.control.v2.CreateFolderRequest;
+import com.google.storage.control.v2.Folder;
+import com.google.storage.control.v2.FolderName;
+import com.google.storage.control.v2.StorageControlClient;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(StorageITRunner.class)
+@SingleBackend(Backend.PROD)
+public class ITFoldersTest {
+
+  @Inject public StorageControlClient ctrl;
+
+  @Inject
+  @BucketFixture(BucketType.HNS)
+  public BucketInfo bucket;
+
+  @Inject public Generator generator;
+
+  @Test
+  public void createFolder() throws Exception {
+    String folderId = generator.randomObjectName() + "/";
+    String bucketName = bucket.getName();
+    Folder folder =
+        ctrl.createFolder(
+            CreateFolderRequest.newBuilder()
+                .setParent(BucketName.format("_", bucketName))
+                .setFolderId(folderId)
+                .build());
+    assertAll(
+        () -> assertThat(folder.getName()).isEqualTo(FolderName.format("_", bucketName, folderId)),
+        () -> assertThat(folder.getMetageneration()).isGreaterThan(0));
+  }
+}
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/StorageNativeCanary.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/StorageNativeCanary.java
index 534764d9..f40fa8d5 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/StorageNativeCanary.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/StorageNativeCanary.java
@@ -32,6 +32,7 @@ import com.google.cloud.storage.Storage.BlobListOption;
 import com.google.cloud.storage.Storage.BlobSourceOption;
 import com.google.cloud.storage.Storage.BlobWriteOption;
 import com.google.cloud.storage.StorageOptions;
+import com.google.cloud.storage.TestUtils;
 import com.google.common.collect.ImmutableList;
 import com.google.common.io.ByteStreams;
 import java.io.ByteArrayInputStream;
@@ -51,12 +52,12 @@ public final class StorageNativeCanary {
   private static final byte[] bytes = DataGenerator.base64Characters().genBytes(512 * 1024);
 
   @Test
-  public void canary_happyPath_http() throws Exception {
+  public void canary_happyPath_http() throws Throwable {
     assertBehaviorOfPrimaryStorageActions(StorageOptions.http().build().getService());
   }
 
   @Test
-  public void canary_happyPath_grpc() throws Exception {
+  public void canary_happyPath_grpc() throws Throwable {
     assertBehaviorOfPrimaryStorageActions(StorageOptions.grpc().build().getService());
   }
 
@@ -84,7 +85,7 @@ public final class StorageNativeCanary {
    *   <li>Delete temporary bucket (Unary)
    * </ul>
    */
-  private static void assertBehaviorOfPrimaryStorageActions(Storage storage) throws Exception {
+  private static void assertBehaviorOfPrimaryStorageActions(Storage storage) throws Throwable {
     // create a temporary bucket
     try (TemporaryBucket temporaryBucket =
         TemporaryBucket.newBuilder()
@@ -131,6 +132,18 @@ public final class StorageNativeCanary {
           () -> assertThat(actual.get(1).getContent()).isEqualTo(bytes),
           () -> assertThat(deletes.get(0)).isTrue(),
           () -> assertThat(deletes.get(1)).isTrue());
+    } catch (Throwable e) {
+      String hintMessage =
+          "Possible missing reflect-config configuration. Run the following to regenerate grpc reflect-config: mvn -Dmaven.test.skip.exec=true clean install && cd google-cloud-storage && mvn -Pregen-grpc-graalvm-reflect-config exec:exec";
+      Throwable linkageError = TestUtils.findThrowable(LinkageError.class, e);
+      Throwable roe = TestUtils.findThrowable(ReflectiveOperationException.class, e);
+      if (linkageError != null) {
+        throw new RuntimeException(hintMessage, linkageError);
+      } else if (roe != null) {
+        throw new RuntimeException(hintMessage, roe);
+      } else {
+        throw e;
+      }
     }
   }
 
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/TemporaryBucket.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/TemporaryBucket.java
index 54ccfd92..0109c3d2 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/TemporaryBucket.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/TemporaryBucket.java
@@ -23,22 +23,27 @@ import com.google.cloud.storage.BucketInfo;
 import com.google.cloud.storage.Storage;
 import com.google.cloud.storage.conformance.retry.CleanupStrategy;
 import com.google.common.base.Preconditions;
+import com.google.storage.control.v2.StorageControlClient;
 import java.time.Duration;
+import org.checkerframework.checker.nullness.qual.Nullable;
 
 public final class TemporaryBucket implements AutoCloseable {
 
   private final BucketInfo bucket;
   private final Storage storage;
+  @Nullable private final StorageControlClient ctrl;
   private final Duration cleanupTimeout;
   private final CleanupStrategy cleanupStrategy;
 
   private TemporaryBucket(
       BucketInfo bucket,
       Storage storage,
+      @Nullable StorageControlClient ctrl,
       Duration cleanupTimeout,
       CleanupStrategy cleanupStrategy) {
     this.bucket = bucket;
     this.storage = storage;
+    this.ctrl = ctrl;
     this.cleanupTimeout = cleanupTimeout;
     this.cleanupStrategy = cleanupStrategy;
   }
@@ -51,7 +56,11 @@ public final class TemporaryBucket implements AutoCloseable {
   @Override
   public void close() throws Exception {
     if (cleanupStrategy == CleanupStrategy.ALWAYS) {
-      BucketCleaner.doCleanup(bucket.getName(), storage);
+      if (ctrl != null) {
+        BucketCleaner.doCleanup(bucket.getName(), storage, ctrl);
+      } else {
+        BucketCleaner.doCleanup(bucket.getName(), storage);
+      }
     }
   }
 
@@ -65,6 +74,7 @@ public final class TemporaryBucket implements AutoCloseable {
     private Duration cleanupTimeoutDuration;
     private BucketInfo bucketInfo;
     private Storage storage;
+    private StorageControlClient ctrl;
 
     private Builder() {
       this.cleanupStrategy = CleanupStrategy.ALWAYS;
@@ -91,6 +101,11 @@ public final class TemporaryBucket implements AutoCloseable {
       return this;
     }
 
+    public Builder setStorageControlClient(StorageControlClient ctrl) {
+      this.ctrl = ctrl;
+      return this;
+    }
+
     public TemporaryBucket build() {
       Preconditions.checkArgument(
           cleanupStrategy != CleanupStrategy.ONLY_ON_SUCCESS, "Unable to detect success.");
@@ -98,7 +113,8 @@ public final class TemporaryBucket implements AutoCloseable {
       Bucket b = s.create(requireNonNull(bucketInfo, "bucketInfo must be non null"));
 
       // intentionally drop from Bucket to BucketInfo to ensure not leaking the Storage instance
-      return new TemporaryBucket(b.asBucketInfo(), s, cleanupTimeoutDuration, cleanupStrategy);
+      return new TemporaryBucket(
+          b.asBucketInfo(), s, ctrl, cleanupTimeoutDuration, cleanupStrategy);
     }
   }
 }
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/annotations/BucketType.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/annotations/BucketType.java
index a38bbf01..c3335235 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/annotations/BucketType.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/annotations/BucketType.java
@@ -21,5 +21,7 @@ public enum BucketType {
   /** A default bucket created using all GCS defaults */
   DEFAULT,
   /** A bucket created using all GCS defaults except that it has requester_pays enabled. */
-  REQUESTER_PAYS
+  REQUESTER_PAYS,
+  /** A bucket created with Hierarchical Namespace enabled */
+  HNS
 }
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BackendResources.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BackendResources.java
index 28a7b877..237a5c67 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BackendResources.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BackendResources.java
@@ -17,12 +17,15 @@
 package com.google.cloud.storage.it.runner.registry;
 
 import static com.google.cloud.storage.it.runner.registry.RegistryApplicabilityPredicate.backendIs;
+import static com.google.cloud.storage.it.runner.registry.RegistryApplicabilityPredicate.bucketTypeIs;
 import static com.google.cloud.storage.it.runner.registry.RegistryApplicabilityPredicate.isDefaultBucket;
-import static com.google.cloud.storage.it.runner.registry.RegistryApplicabilityPredicate.isRequesterPaysBucket;
 import static com.google.cloud.storage.it.runner.registry.RegistryApplicabilityPredicate.transportAndBackendAre;
 
+import com.google.api.gax.core.NoCredentialsProvider;
 import com.google.cloud.NoCredentials;
 import com.google.cloud.storage.BucketInfo;
+import com.google.cloud.storage.BucketInfo.HierarchicalNamespace;
+import com.google.cloud.storage.BucketInfo.IamConfiguration;
 import com.google.cloud.storage.GrpcStorageOptions;
 import com.google.cloud.storage.HttpStorageOptions;
 import com.google.cloud.storage.Storage;
@@ -30,8 +33,14 @@ import com.google.cloud.storage.StorageOptions;
 import com.google.cloud.storage.TransportCompatibility.Transport;
 import com.google.cloud.storage.it.GrpcPlainRequestLoggingInterceptor;
 import com.google.cloud.storage.it.runner.annotations.Backend;
+import com.google.cloud.storage.it.runner.annotations.BucketType;
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableList;
+import com.google.storage.control.v2.StorageControlClient;
+import com.google.storage.control.v2.StorageControlSettings;
+import com.google.storage.control.v2.stub.StorageControlStubSettings;
+import java.io.IOException;
+import java.net.URI;
 import java.util.UUID;
 
 /** The set of resources which are defined for a single backend. */
@@ -122,13 +131,53 @@ final class BackendResources implements ManagedLifecycle {
                       .build();
               return new StorageInstance(built, protectedBucketNames);
             });
+    TestRunScopedInstance<StorageControlInstance> ctrl =
+        TestRunScopedInstance.of(
+            "STORAGE_CONTROL_" + backend.name(),
+            () -> {
+              StorageControlSettings.Builder builder;
+              switch (backend) {
+                case TEST_BENCH:
+                  String baseUri = Registry.getInstance().testBench().getBaseUri();
+                  URI uri = URI.create(baseUri);
+                  String endpoint = String.format("%s:%d", uri.getHost(), uri.getPort());
+                  builder =
+                      StorageControlSettings.newBuilder()
+                          .setCredentialsProvider(NoCredentialsProvider.create())
+                          .setEndpoint(endpoint)
+                          .setTransportChannelProvider(
+                              StorageControlStubSettings.defaultGrpcTransportProviderBuilder()
+                                  .setInterceptorProvider(
+                                      GrpcPlainRequestLoggingInterceptor.getInterceptorProvider())
+                                  .setEndpoint(endpoint)
+                                  .build());
+                  break;
+                default: // PROD, java8 doesn't have exhaustive checking for enum switch
+                  builder =
+                      StorageControlSettings.newBuilder()
+                          .setTransportChannelProvider(
+                              StorageControlStubSettings.defaultGrpcTransportProviderBuilder()
+                                  .setInterceptorProvider(
+                                      GrpcPlainRequestLoggingInterceptor.getInterceptorProvider())
+                                  .build());
+                  break;
+              }
+
+              try {
+                StorageControlSettings settings = builder.build();
+                return new StorageControlInstance(settings);
+              } catch (IOException e) {
+                throw new RuntimeException(e);
+              }
+            });
     TestRunScopedInstance<BucketInfoShim> bucket =
         TestRunScopedInstance.of(
             "BUCKET_" + backend.name(),
             () -> {
               String bucketName = String.format("java-storage-grpc-%s", UUID.randomUUID());
               protectedBucketNames.add(bucketName);
-              return new BucketInfoShim(BucketInfo.of(bucketName), storageJson.get().getStorage());
+              return new BucketInfoShim(
+                  BucketInfo.of(bucketName), storageJson.get().getStorage(), ctrl.get().getCtrl());
             });
     TestRunScopedInstance<BucketInfoShim> bucketRp =
         TestRunScopedInstance.of(
@@ -138,7 +187,26 @@ final class BackendResources implements ManagedLifecycle {
               protectedBucketNames.add(bucketName);
               return new BucketInfoShim(
                   BucketInfo.newBuilder(bucketName).setRequesterPays(true).build(),
-                  storageJson.get().getStorage());
+                  storageJson.get().getStorage(),
+                  ctrl.get().getCtrl());
+            });
+    TestRunScopedInstance<BucketInfoShim> bucketHns =
+        TestRunScopedInstance.of(
+            "BUCKET_HNS_" + backend.name(),
+            () -> {
+              String bucketName = String.format("java-storage-grpc-hns-%s", UUID.randomUUID());
+              protectedBucketNames.add(bucketName);
+              return new BucketInfoShim(
+                  BucketInfo.newBuilder(bucketName)
+                      .setHierarchicalNamespace(
+                          HierarchicalNamespace.newBuilder().setEnabled(true).build())
+                      .setIamConfiguration(
+                          IamConfiguration.newBuilder()
+                              .setIsUniformBucketLevelAccessEnabled(true)
+                              .build())
+                      .build(),
+                  storageJson.get().getStorage(),
+                  ctrl.get().getCtrl());
             });
     TestRunScopedInstance<ObjectsFixture> objectsFixture =
         TestRunScopedInstance.of(
@@ -149,6 +217,12 @@ final class BackendResources implements ManagedLifecycle {
             "OBJECTS_FIXTURE_REQUESTER_PAYS_" + backend.name(),
             () ->
                 new ObjectsFixture(storageJson.get().getStorage(), bucketRp.get().getBucketInfo()));
+    TestRunScopedInstance<ObjectsFixture> objectsFixtureHns =
+        TestRunScopedInstance.of(
+            "OBJECTS_FIXTURE_HNS_" + backend.name(),
+            () ->
+                new ObjectsFixture(
+                    storageJson.get().getStorage(), bucketHns.get().getBucketInfo()));
     TestRunScopedInstance<KmsFixture> kmsFixture =
         TestRunScopedInstance.of(
             "KMS_FIXTURE_" + backend.name(), () -> KmsFixture.of(storageJson.get().getStorage()));
@@ -161,8 +235,17 @@ final class BackendResources implements ManagedLifecycle {
                 40, Storage.class, storageJson, transportAndBackendAre(Transport.HTTP, backend)),
             RegistryEntry.of(
                 50, Storage.class, storageGrpc, transportAndBackendAre(Transport.GRPC, backend)),
+            RegistryEntry.of(55, StorageControlClient.class, ctrl, backendIs(backend)),
+            RegistryEntry.of(
+                60,
+                BucketInfo.class,
+                bucketRp,
+                backendIs(backend).and(bucketTypeIs(BucketType.REQUESTER_PAYS))),
             RegistryEntry.of(
-                60, BucketInfo.class, bucketRp, backendIs(backend).and(isRequesterPaysBucket())),
+                61,
+                BucketInfo.class,
+                bucketHns,
+                backendIs(backend).and(bucketTypeIs(BucketType.HNS))),
             RegistryEntry.of(
                 70, BucketInfo.class, bucket, backendIs(backend).and(isDefaultBucket())),
             RegistryEntry.of(
@@ -174,7 +257,12 @@ final class BackendResources implements ManagedLifecycle {
                 90,
                 ObjectsFixture.class,
                 objectsFixtureRp,
-                backendIs(backend).and(isRequesterPaysBucket())),
+                backendIs(backend).and(bucketTypeIs(BucketType.REQUESTER_PAYS))),
+            RegistryEntry.of(
+                91,
+                ObjectsFixture.class,
+                objectsFixtureHns,
+                backendIs(backend).and(bucketTypeIs(BucketType.HNS))),
             RegistryEntry.of(100, KmsFixture.class, kmsFixture, backendIs(backend))));
   }
 }
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BucketInfoShim.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BucketInfoShim.java
index fba6e1c8..13da4e46 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BucketInfoShim.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/BucketInfoShim.java
@@ -19,18 +19,21 @@ package com.google.cloud.storage.it.runner.registry;
 import com.google.cloud.storage.BucketInfo;
 import com.google.cloud.storage.Storage;
 import com.google.cloud.storage.it.BucketCleaner;
+import com.google.storage.control.v2.StorageControlClient;
 
 /** Shim to lift a BucketInfo to be a managed bucket instance */
 final class BucketInfoShim implements ManagedLifecycle {
 
   private final BucketInfo bucketInfo;
   private final Storage s;
+  private final StorageControlClient ctrl;
 
   private BucketInfo createdBucket;
 
-  BucketInfoShim(BucketInfo bucketInfo, Storage s) {
+  BucketInfoShim(BucketInfo bucketInfo, Storage s, StorageControlClient ctrl) {
     this.bucketInfo = bucketInfo;
     this.s = s;
+    this.ctrl = ctrl;
   }
 
   public BucketInfo getBucketInfo() {
@@ -49,6 +52,6 @@ final class BucketInfoShim implements ManagedLifecycle {
 
   @Override
   public void stop() {
-    BucketCleaner.doCleanup(bucketInfo.getName(), s);
+    BucketCleaner.doCleanup(bucketInfo.getName(), s, ctrl);
   }
 }
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/RegistryApplicabilityPredicate.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/RegistryApplicabilityPredicate.java
index d30c31fa..43bcd809 100644
--- a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/RegistryApplicabilityPredicate.java
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/RegistryApplicabilityPredicate.java
@@ -88,10 +88,8 @@ interface RegistryApplicabilityPredicate {
     };
   }
 
-  static RegistryApplicabilityPredicate isRequesterPaysBucket() {
+  static RegistryApplicabilityPredicate bucketTypeIs(BucketType bucketType) {
     return annotatedWith(BucketFixture.class)
-        .and(
-            (ff, intersection) ->
-                ff.getAnnotation(BucketFixture.class).value() == BucketType.REQUESTER_PAYS);
+        .and((ff, intersection) -> ff.getAnnotation(BucketFixture.class).value() == bucketType);
   }
 }
diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/StorageControlInstance.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/StorageControlInstance.java
new file mode 100644
index 00000000..aaa1abf8
--- /dev/null
+++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/it/runner/registry/StorageControlInstance.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2024 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.storage.it.runner.registry;
+
+import com.google.storage.control.v2.StorageControlClient;
+import com.google.storage.control.v2.StorageControlSettings;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+final class StorageControlInstance implements ManagedLifecycle {
+
+  private final StorageControlSettings settings;
+
+  private StorageControlClient ctrl;
+
+  StorageControlInstance(StorageControlSettings settings) {
+    this.settings = settings;
+  }
+
+  StorageControlClient getCtrl() {
+    return ctrl;
+  }
+
+  @Override
+  public Object get() {
+    return ctrl;
+  }
+
+  @Override
+  public void start() {
+    try {
+      ctrl = StorageControlClient.create(settings);
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  @Override
+  public void stop() {
+    try {
+      ctrl.shutdownNow();
+      ctrl.awaitTermination(30, TimeUnit.SECONDS);
+    } catch (InterruptedException e) {
+      Thread.currentThread().interrupt();
+      throw new RuntimeException(e);
+    }
+  }
+}
diff --git a/google-cloud-storage/src/test/resources/META-INF/native-image/com/google/cloud/storage/reflect-config.json b/google-cloud-storage/src/test/resources/META-INF/native-image/com/google/cloud/storage/reflect-config.json
index 2f581f49..990fffdb 100644
--- a/google-cloud-storage/src/test/resources/META-INF/native-image/com/google/cloud/storage/reflect-config.json
+++ b/google-cloud-storage/src/test/resources/META-INF/native-image/com/google/cloud/storage/reflect-config.json
@@ -241,6 +241,10 @@
   { "name": "io.grpc.xds.shaded.com.github.xds.data.orca.v3.OrcaLoadReport$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.github.xds.service.orca.v3.OrcaLoadReportRequest", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.github.xds.service.orca.v3.OrcaLoadReportRequest$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.com.github.xds.type.matcher.v3.CelMatcher", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.com.github.xds.type.matcher.v3.CelMatcher$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.com.github.xds.type.matcher.v3.HttpAttributesCelMatchInput", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.com.github.xds.type.matcher.v3.HttpAttributesCelMatchInput$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.github.xds.type.matcher.v3.ListStringMatcher", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.github.xds.type.matcher.v3.ListStringMatcher$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.github.xds.type.matcher.v3.Matcher", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -267,6 +271,10 @@
   { "name": "io.grpc.xds.shaded.com.github.xds.type.matcher.v3.RegexMatcher$GoogleRE2$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.github.xds.type.matcher.v3.StringMatcher", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.github.xds.type.matcher.v3.StringMatcher$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.com.github.xds.type.v3.CelExpression", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.com.github.xds.type.v3.CelExpression$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.com.github.xds.type.v3.CelExtractString", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.com.github.xds.type.v3.CelExtractString$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.github.xds.type.v3.TypedStruct", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.github.xds.type.v3.TypedStruct$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.google.api.expr.v1alpha1.CheckedExpr", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -317,6 +325,57 @@
   { "name": "io.grpc.xds.shaded.com.google.api.expr.v1alpha1.Type$MapType$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.google.api.expr.v1alpha1.Type$PrimitiveType", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.com.google.api.expr.v1alpha1.Type$WellKnownType", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.CheckedExpr", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.CheckedExpr$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Constant", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Constant$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Decl", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Decl$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Decl$FunctionDecl", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Decl$FunctionDecl$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Decl$FunctionDecl$Overload", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Decl$FunctionDecl$Overload$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Decl$IdentDecl", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Decl$IdentDecl$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$Call", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$Call$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$Comprehension", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$Comprehension$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$CreateList", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$CreateList$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$CreateStruct", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$CreateStruct$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$CreateStruct$Entry", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$CreateStruct$Entry$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$Ident", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$Ident$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$Select", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Expr$Select$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.ParsedExpr", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.ParsedExpr$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Reference", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Reference$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.SourceInfo", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.SourceInfo$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.SourceInfo$Extension", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.SourceInfo$Extension$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.SourceInfo$Extension$Component", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.SourceInfo$Extension$Version", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.SourceInfo$Extension$Version$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type$AbstractType", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type$AbstractType$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type$FunctionType", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type$FunctionType$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type$ListType", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type$ListType$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type$MapType", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type$MapType$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type$PrimitiveType", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.dev.cel.expr.Type$WellKnownType", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.admin.v3.BootstrapConfigDump", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.admin.v3.BootstrapConfigDump$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.admin.v3.ClientResourceStatus", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -427,6 +486,8 @@
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.bootstrap.v3.FatalAction$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.bootstrap.v3.LayeredRuntime", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.bootstrap.v3.LayeredRuntime$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.bootstrap.v3.MemoryAllocatorManager", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.bootstrap.v3.MemoryAllocatorManager$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.bootstrap.v3.Runtime", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.bootstrap.v3.Runtime$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.bootstrap.v3.RuntimeLayer", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -508,6 +569,9 @@
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.cluster.v3.TrackClusterStats$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions$FirstAddressFamilyVersion", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions$HappyEyeballsConfig", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.cluster.v3.UpstreamConnectionOptions$HappyEyeballsConfig$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.Address", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.Address$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.AggregatedConfigSource", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -627,6 +691,13 @@
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.JsonFormatOptions$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.KeepaliveSettings", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.KeepaliveSettings$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.KeyValue", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.KeyValue$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.KeyValueAppend", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.KeyValueAppend$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.KeyValueAppend$KeyValueAppendAction", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.KeyValueMutation", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.KeyValueMutation$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.Locality", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.Locality$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.Metadata", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -656,6 +727,10 @@
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.RequestMethod", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.RetryPolicy", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.RetryPolicy$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.RetryPolicy$RetryHostPredicate", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.RetryPolicy$RetryHostPredicate$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.RetryPolicy$RetryPriority", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.RetryPolicy$RetryPriority$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.RoutingPriority", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.RuntimeDouble", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.config.core.v3.RuntimeDouble$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -1018,6 +1093,24 @@
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.fault.v3.FaultAbort$HeaderAbort$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.fault.v3.HTTPFault", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.fault.v3.HTTPFault$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$BucketIdBuilder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$BucketIdBuilder$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$BucketIdBuilder$ValueBuilder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$BucketIdBuilder$ValueBuilder$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$DenyResponseSettings", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$DenyResponseSettings$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$ExpiredAssignmentBehavior", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$ExpiredAssignmentBehavior$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$ExpiredAssignmentBehavior$ReuseLastAssignment", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$ExpiredAssignmentBehavior$ReuseLastAssignment$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$NoAssignmentBehavior", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaBucketSettings$NoAssignmentBehavior$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaFilterConfig", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaFilterConfig$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaOverride", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rate_limit_quota.v3.RateLimitQuotaOverride$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rbac.v3.RBAC", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rbac.v3.RBAC$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.filters.http.rbac.v3.RBACPerRoute", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -1087,6 +1180,7 @@
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.load_balancing_policies.common.v3.SlowStartConfig$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.load_balancing_policies.least_request.v3.LeastRequest$SelectionMethod", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.load_balancing_policies.pick_first.v3.PickFirst", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.load_balancing_policies.pick_first.v3.PickFirst$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.load_balancing_policies.ring_hash.v3.RingHash", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -1100,6 +1194,8 @@
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CertificateProviderPluginInstance$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CertificateValidationContext", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CertificateValidationContext$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CertificateValidationContext$SystemRootCerts", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CertificateValidationContext$SystemRootCerts$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CertificateValidationContext$TrustChainVerification", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CommonTlsContext", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.extensions.transport_sockets.tls.v3.CommonTlsContext$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -1164,6 +1260,20 @@
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.load_stats.v3.LoadStatsRequest$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.load_stats.v3.LoadStatsResponse", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.load_stats.v3.LoadStatsResponse$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.BucketId", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.BucketId$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaResponse", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaResponse$BucketAction", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaResponse$BucketAction$AbandonAction", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaResponse$BucketAction$AbandonAction$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaResponse$BucketAction$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaResponse$BucketAction$QuotaAssignmentAction", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaResponse$BucketAction$QuotaAssignmentAction$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaResponse$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaUsageReports", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaUsageReports$BucketQuotaUsage", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaUsageReports$BucketQuotaUsage$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.rate_limit_quota.v3.RateLimitQuotaUsageReports$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.status.v3.ClientConfig", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.status.v3.ClientConfig$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.service.status.v3.ClientConfig$GenericXdsConfig", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -1188,6 +1298,16 @@
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.DoubleMatcher$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.FilterStateMatcher", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.FilterStateMatcher$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.HttpRequestHeaderMatchInput", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.HttpRequestHeaderMatchInput$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.HttpRequestQueryParamMatchInput", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.HttpRequestQueryParamMatchInput$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.HttpRequestTrailerMatchInput", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.HttpRequestTrailerMatchInput$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.HttpResponseHeaderMatchInput", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.HttpResponseHeaderMatchInput$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.HttpResponseTrailerMatchInput", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.HttpResponseTrailerMatchInput$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.ListMatcher", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.ListMatcher$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.matcher.v3.ListStringMatcher", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
@@ -1248,14 +1368,25 @@
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.FractionalPercent", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.FractionalPercent$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.FractionalPercent$DenominatorType", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.HttpStatus", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.HttpStatus$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.Int32Range", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.Int32Range$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.Int64Range", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.Int64Range$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.Percent", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.Percent$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.RateLimitStrategy", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.RateLimitStrategy$BlanketRule", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.RateLimitStrategy$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.RateLimitStrategy$RequestsPerTimeUnit", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.RateLimitStrategy$RequestsPerTimeUnit$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.RateLimitUnit", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.SemanticVersion", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.SemanticVersion$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.StatusCode", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.TokenBucket", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
+  { "name": "io.grpc.xds.shaded.io.envoyproxy.envoy.type.v3.TokenBucket$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.pgv.validate.Validate$AnyRules", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.pgv.validate.Validate$AnyRules$Builder", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },
   { "name": "io.grpc.xds.shaded.io.envoyproxy.pgv.validate.Validate$BoolRules", "queryAllDeclaredConstructors": true, "queryAllPublicConstructors": true, "queryAllDeclaredMethods": true, "allPublicMethods": true, "allDeclaredClasses": true, "allPublicClasses": true },