<?xml version="1.0" encoding="UTF-8"?>
<!-- see https://www.mojohaus.org/clirr-maven-plugin/examples/ignored-differences.html -->
<differences>
  <!-- Not breaking, new method has a default implementation -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/Storage</className>
    <method>com.google.cloud.storage.BlobWriteSession blobWriteSession(com.google.cloud.storage.BlobInfo, com.google.cloud.storage.Storage$BlobWriteOption[])</method>
  </difference>

  <!-- Not breaking, new method has a default implementation -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/UnbufferedWritableByteChannelSession$UnbufferedWritableByteChannel</className>
    <method>* writeAndClose(*)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setHierarchicalNamespace(com.google.cloud.storage.BucketInfo$HierarchicalNamespace)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BlobInfo$Builder</className>
    <method>com.google.cloud.storage.BlobInfo$Builder setContexts(com.google.cloud.storage.BlobInfo$ObjectContexts)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BlobInfo$Builder</className>
    <method>com.google.cloud.storage.BlobInfo$Builder setRetention(com.google.cloud.storage.BlobInfo$Retention)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setSoftDeletePolicy(com.google.cloud.storage.BucketInfo$SoftDeletePolicy)</method>
  </difference>

  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/Storage</className>
    <method>com.google.cloud.storage.Blob restore(com.google.cloud.storage.BlobId, com.google.cloud.storage.Storage$BlobRestoreOption[])</method>
  </difference>

  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/spi/v1/StorageRpc</className>
    <method>com.google.api.services.storage.model.StorageObject restore(com.google.api.services.storage.model.StorageObject, java.util.Map)</method>
  </difference>

  <!-- @BetaApi members -->
  <difference>
    <differenceType>7009</differenceType>
    <className>com/google/cloud/storage/ParallelCompositeUploadBlobWriteSessionConfig$PartCleanupStrategy</className>
    <method>boolean isDeleteAllOnError()</method>
  </difference>
  <difference>
    <differenceType>7009</differenceType>
    <className>com/google/cloud/storage/ParallelCompositeUploadBlobWriteSessionConfig$PartCleanupStrategy</className>
    <method>boolean isDeletePartsOnSuccess()</method>
  </difference>
  <difference>
    <differenceType>7009</differenceType>
    <className>com/google/cloud/storage/ParallelCompositeUploadBlobWriteSessionConfig$PartNamingStrategy</className>
    <method>java.lang.String fmtFields(*)</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/transfermanager/TransferManagerConfig</className>
    <method>boolean isAllowDivideAndConquer()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/transfermanager/TransferManagerConfig$Builder</className>
    <method>* setAllowDivideAndConquer(boolean)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/StorageOptions$Builder</className>
    <method>com.google.cloud.storage.StorageOptions$Builder setBlobWriteSessionConfig(com.google.cloud.storage.BlobWriteSessionConfig)</method>
  </difference>

  <!-- somehow clirr things a public class in a package-private class is part of the public api -->
  <difference>
    <differenceType>8001</differenceType>
    <className>com/google/cloud/storage/WriteFlushStrategy$DefaultBidiFlusher</className>
  </difference>

  <!-- BlobWriteSessionConfig is package-private extendable only, allow hashCode/equals -->
  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BlobWriteSessionConfig</className>
    <method>int hashCode()</method>
  </difference>
  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BlobWriteSessionConfig</className>
    <method>boolean equals(java.lang.Object)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/StorageOptions$Builder</className>
    <method>com.google.cloud.storage.StorageOptions$Builder setOpenTelemetry(io.opentelemetry.api.OpenTelemetry)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/StorageOptions</className>
    <method>io.opentelemetry.api.OpenTelemetry getOpenTelemetry()</method>
  </difference>

  <!-- Move Object -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/Storage</className>
    <method>* moveBlob(*)</method>
  </difference>
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/spi/v1/StorageRpc</className>
    <method>* moveObject(*)</method>
  </difference>

  <!-- Not breaking, new method has a default implementation -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/Storage</className>
    <method>com.google.api.core.ApiFuture blobReadSession(com.google.cloud.storage.BlobId, com.google.cloud.storage.Storage$BlobSourceOption[])</method>
  </difference>

  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/Storage</className>
    <method>com.google.cloud.storage.BlobAppendableUpload blobAppendableUpload(com.google.cloud.storage.BlobInfo, com.google.cloud.storage.BlobAppendableUploadConfig, com.google.cloud.storage.Storage$BlobWriteOption[])</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setIpFilter(com.google.cloud.storage.BucketInfo$IpFilter)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setCustomerManagedEncryptionEnforcementConfig(com.google.cloud.storage.BucketInfo$CustomerManagedEncryptionEnforcementConfig)</method>
  </difference>
  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setCustomerSuppliedEncryptionEnforcementConfig(com.google.cloud.storage.BucketInfo$CustomerSuppliedEncryptionEnforcementConfig)</method>
  </difference>
  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setGoogleManagedEncryptionEnforcementConfig(com.google.cloud.storage.BucketInfo$GoogleManagedEncryptionEnforcementConfig)</method>
  </difference>

  <difference>
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/BucketInfo$Builder</className>
    <method>com.google.cloud.storage.BucketInfo$Builder setIsUnreachable(java.lang.Boolean)</method>
  </difference>

  <!-- make beta api constructors private, they still retain their factory methods. -->
  <difference>
    <differenceType>7004</differenceType>
    <className>com/google/cloud/storage/FlushPolicy$MinFlushSizeFlushPolicy</className>
    <method>FlushPolicy$MinFlushSizeFlushPolicy(int)</method>
  </difference>
  <difference>
    <differenceType>7009</differenceType>
    <className>com/google/cloud/storage/FlushPolicy$MinFlushSizeFlushPolicy</className>
    <method>FlushPolicy$MinFlushSizeFlushPolicy(int)</method>
  </difference>
  <difference>
    <differenceType>7009</differenceType>
    <className>com/google/cloud/storage/FlushPolicy$MaxFlushSizeFlushPolicy</className>
    <method>FlushPolicy$MaxFlushSizeFlushPolicy(int)</method>
  </difference>
  <!-- this method is already on the parent interface, and is on an @InternalExtensionOnly interface -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/BlobAppendableUpload$AppendableUploadWriteableByteChannel</className>
    <method>int write(java.nio.ByteBuffer)</method>
  </difference>

  <!-- @InternalExtensionOnly -->
  <difference>
    <differenceType>7012</differenceType>
    <className>com/google/cloud/storage/BlobAppendableUpload$AppendableUploadWriteableByteChannel</className>
    <method>void flush()</method>
  </difference>

  <!-- CreateMultipartUploadRequest -->
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/CreateMultipartUploadRequest</className>
    <method>com.google.cloud.storage.Storage$PredefinedAcl getCannedAcl()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/CreateMultipartUploadRequest</className>
    <method>java.lang.String getContentType()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/CreateMultipartUploadRequest</className>
    <method>java.time.OffsetDateTime getCustomTime()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/CreateMultipartUploadRequest</className>
    <method>java.lang.String getKmsKeyName()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/CreateMultipartUploadRequest</className>
    <method>java.util.Map getMetadata()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/CreateMultipartUploadRequest</className>
    <method>com.google.cloud.storage.multipartupload.model.ObjectLockMode getObjectLockMode()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/CreateMultipartUploadRequest</className>
    <method>java.time.OffsetDateTime getObjectLockRetainUntilDate()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/CreateMultipartUploadRequest</className>
    <method>com.google.cloud.storage.StorageClass getStorageClass()</method>
  </difference>
  <!-- MultipartUploadClient is @InternalExtensionOnly -->
  <difference>
    <!-- allow new method to be added at any time -->
    <differenceType>7013</differenceType>
    <className>com/google/cloud/storage/MultipartUploadClient</className>
    <method>* *(*)</method>
  </difference>

  <!-- ListPartsRequest -->
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsRequest</className>
    <method>java.lang.Integer getMaxParts()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsRequest</className>
    <method>java.lang.Integer getPartNumberMarker()</method>
  </difference>

  <!-- ListPartsResponse -->
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse</className>
    <method>java.lang.String getBucket()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse</className>
    <method>java.lang.String getKey()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse</className>
    <method>int getMaxParts()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse</className>
    <method>int getNextPartNumberMarker()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse</className>
    <method>int getPartNumberMarker()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse</className>
    <method>java.util.List getParts()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse</className>
    <method>com.google.cloud.storage.StorageClass getStorageClass()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse</className>
    <method>java.lang.String getUploadId()</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse</className>
    <method>boolean isTruncated()</method>
  </difference>

  <!-- ListPartsResponse$Builder -->
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse$Builder</className>
    <method>com.google.cloud.storage.multipartupload.model.ListPartsResponse$Builder setBucket(java.lang.String)</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse$Builder</className>
    <method>com.google.cloud.storage.multipartupload.model.ListPartsResponse$Builder setIsTruncated(boolean)</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse$Builder</className>
    <method>com.google.cloud.storage.multipartupload.model.ListPartsResponse$Builder setKey(java.lang.String)</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse$Builder</className>
    <method>com.google.cloud.storage.multipartupload.model.ListPartsResponse$Builder setMaxParts(int)</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse$Builder</className>
    <method>com.google.cloud.storage.multipartupload.model.ListPartsResponse$Builder setNextPartNumberMarker(int)</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse$Builder</className>
    <method>com.google.cloud.storage.multipartupload.model.ListPartsResponse$Builder setPartNumberMarker(int)</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse$Builder</className>
    <method>com.google.cloud.storage.multipartupload.model.ListPartsResponse$Builder setParts(java.util.List)</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse$Builder</className>
    <method>com.google.cloud.storage.multipartupload.model.ListPartsResponse$Builder setStorageClass(com.google.cloud.storage.StorageClass)</method>
  </difference>
  <difference>
    <differenceType>7002</differenceType>
    <className>com/google/cloud/storage/multipartupload/model/ListPartsResponse$Builder</className>
    <method>com.google.cloud.storage.multipartupload.model.ListPartsResponse$Builder setUploadId(java.lang.String)</method>
  </difference>

  <!-- Hasher is a package private interface, with inner classes in it -->
  <difference>
    <differenceType>7006</differenceType>
    <className>com/google/cloud/storage/Hasher*</className>
    <method>* nullSafeConcat(*)</method>
    <to>**</to>
  </difference>
  <difference>
    <differenceType>7005</differenceType>
    <className>com/google/cloud/storage/Hasher*</className>
    <method>**</method>
    <to>**</to>
  </difference>

</differences>
