-dontnote kotlinx.serialization.AnnotationsKt # core serialization annotations

-keep class **.R$* {
    *;
}

# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum  * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

# Keep names - Native method names. Keep all native class/method names.
-keepclasseswithmembers,allowshrinking class * {
    native <methods>;
}

# Keep names - _class method names. Keep all .class method names. This may be
# useful for libraries that will be obfuscated again with different obfuscators.
-keepclassmembers,allowshrinking class * {
    java.lang.Class class$(java.lang.String);
    java.lang.Class class$(java.lang.String,boolean);
}

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

-keepclassmembers class * extends androidx.work.Worker {
    public <init>(android.content.Context,androidx.work.WorkerParameters);
}

# Services
-keep public class com.microblink.core.internal.services.AggregateRequest {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.TasksCompat {
    public *;
    protected *;
    public static *;
}


-keep public class com.microblink.core.internal.services.EReceipt {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.services.Mailbox {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.CloseableCoroutineScope {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.services.PossibleProduct {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.services.ProductInfo {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.services.SurveyResponse {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.services.SurveyQuestionResponse {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.services.SurveyAnswerResponse {
    public *;
    protected *;
}

-keep class com.microblink.core.internal.Parcels {
    public static *** writeBoolean(android.os.Parcel, java.lang.Boolean);
    public static java.lang.Boolean toBoolean(android.os.Parcel);
}

# Access Token
-keep class com.microblink.core.AccessToken {
    public *;
}

-keep class com.microblink.core.AccessTokenManager {
    public *;
    public static *;
}

-keep interface com.microblink.core.AccessTokenManager$OnAccessTokenChangedListener {
    public *;
}

# Data Classes
-keep public class com.microblink.core.Survey {
    public *;
    protected *;
}

-keep public class com.microblink.core.Survey$Builder {
    public *;
    protected *;
}

-keep public class com.microblink.core.SurveyAnswer {
    public *;
    protected *;
}

-keep public class com.microblink.core.SurveyAnswer$Builder {
    public *;
    protected *;
}

-keep public class com.microblink.core.SurveyQuestion {
    public *;
    protected *;
}

-keep public class com.microblink.core.SurveyQuestion$Builder {
    public *;
    protected *;
}

-keep public class com.microblink.core.SurveyQuestionType {
    public *;
    protected *;
}

-keep public class com.microblink.core.SurveyResponse {
    public *;
    protected *;
}

-keep public class com.microblink.core.SurveyResponse$Builder {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.Contexts* {
    *;
}

-keep class com.microblink.core.internal.Contexts$* {
    *;
}

-keep public class com.microblink.core.internal.Emulators {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.MimeTypesKt {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.HttpHeadersKt {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.HttpHeaders {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.HttpHeaders$Companion {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.internal.SurveyResponseMapper {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.SurveyResponseMapper {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.CookieJars {
   public *;
   protected *;
   public static *;
}

-keep public class com.microblink.core.HttpHeadersKt {
    *;
}

-keep public class com.microblink.core.internal.WebStorageManager {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.internal.DateUtils {
    public static *;
}

-keep public class com.microblink.core.internal.services.ServiceUtils {
    public static *;
}

-keep class com.microblink.core.internal.PricingUtils {
    public static *;
}

-keep public class com.microblink.core.internal.PaymentUtils {
    public *;
    protected *;
    public static *;
}

-keep class com.microblink.core.Storage {
    public static *;
}

-keep class com.microblink.security.Protections {
    public static *;
}

-keep interface com.microblink.core.internal.WorkerStore {
	public *;
}

-keep class com.microblink.core.internal.RetailerSerializer {
    *;
}

-keep class com.microblink.core.internal.CookieStorage {
	*;
}

-keep interface com.microblink.core.internal.CookieStorageType {
	 *;
}

-keep interface com.microblink.core.internal.Disk {
	public *;
	protected *;
    public static *;
}

-keep interface com.microblink.core.internal.None {
	public *;
	protected *;
    public static *;
}

-keep class com.microblink.core.internal.CookieDiskStorage {
   *;
}

-keep public class com.microblink.core.internal.Scopes {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.Processor {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.internal.WorkerStoreImpl {
    public *;
    protected *;
}

-keep public class com.microblink.core.internal.Devices {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.internal.DeviceInformation {
    public *;
    protected *;
}

-keep public class com.microblink.core.DeviceState {
    *;
}

-keep public class com.microblink.core.DeviceStateManager {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.DeviceStateManager$Factory {
    public *;
}

-keep public class com.microblink.core.DeviceStateManager$Companion {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.internal.WebCookiesManager {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.internal.WebCookiesManager$Compat {
    public *;
    protected *;
    public static *;
}

-keep public class com.microblink.core.internal.WebCookiesManager$Cookie {
    public *;
}

-keep public class com.microblink.core.internal.WebCookiesManager$Companion {
    public *;
    protected *;
    public static *;
}

-keep class com.microblink.core.internal.Cookie {
    *;
}

-keep class com.microblink.core.internal.HttpResponses { *; }

-keep class com.microblink.core.internal.HttpUrls { *; }

-keep class com.microblink.core.internal.Licenses { *; }

-keep class com.microblink.core.internal.LicensingPaths { *; }

-keep class com.microblink.core.internal.services.LicensingInfo {
    public *;
    protected *;
}

 -keep class com.microblink.core.internal.services.LicensingInterceptor {
     public *;
     protected *;
      public static *;
 }

-keepclassmembers class ** {
    @com.microblink.core.internal.CookieKt public static *** *(com.microblink.core.internal.Cookie);
}

# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}

-keep class * extends com.google.protobuf.GeneratedMessageLite {
    *;
}

-keep class * extends androidx.datastore.preferences.protobuf.GeneratedMessageLite {
    *;
}

# Room's generated *_Impl classes under R8 full mode.
#
# This module puts androidx.work on your runtime classpath, and androidx.work brings androidx.room
# with it. Room's consumer rule named no members before 2.7.0:
#
#   -keep class * extends androidx.room.RoomDatabase
#
# R8 full mode - the AGP default for an app - does not implicitly keep a kept class's default
# constructor, so the generated androidx.work.impl.WorkDatabase_Impl survives by name but loses
# the <init>() Room instantiates it with, and WorkManager's initializer takes the app down on
# first launch with `NoSuchMethodException: androidx.work.impl.WorkDatabase_Impl.<init> []`.
#
# We resolve work-runtime 2.11.2, which brings Room 2.7.0 and the corrected rule, so this line is
# normally redundant. It is kept because pinning or substituting Room below 2.7.0 silently removes
# the rule Room ships, and the resulting break is invisible at build time and fatal at launch.
-keep class * extends androidx.room.RoomDatabase { void <init>(); }
