From 20db236cea9f7861cb4e91ec7f3287e6e509cb29 Mon Sep 17 00:00:00 2001
From: Arnaud Roland <arnaud.roland.ar@gmail.com>
Date: Fri, 5 Jan 2024 15:37:30 +0100
Subject: [PATCH] release: SDK 1.21.0

---
 .gitignore                                    |    2 +
 Sources/buildSrc/src/main/java/Consts.kt      |    4 +-
 Sources/sdk/build.gradle.kts                  |    5 +-
 Sources/sdk/proguard-consumer-rules.txt       |    9 -
 .../com/batch/android/AdvertisingIDTest.java  |   37 -
 .../core/GooglePlayServicesHelperTest.java    |   28 -
 .../batch/android/AdsIdentifierProvider.java  |    6 +
 ...entifierProviderAvailabilityException.java |    5 +
 .../java/com/batch/android/AdvertisingID.java |  111 +-
 .../main/java/com/batch/android/Batch.java    |   41 +-
 ...BatchMessagingWebViewJavascriptBridge.java |   34 +-
 .../batch/android/BatchUserDataEditor.java    |   39 +-
 .../main/java/com/batch/android/Config.java   |   19 +-
 .../android/PushRegistrationProvider.java     |   18 +-
 .../src/main/java/com/batch/android/User.java |   40 +-
 .../android/WebserviceParameterUtils.java     |   22 +-
 .../GCMAdsIdentifierProvider.java             |   98 -
 .../core/GooglePlayServicesHelper.java        |   27 -
 .../com/batch/android/core/ParameterKeys.java |    3 +
 .../com/batch/android/core/Parameters.java    |    2 +-
 .../core/SystemParameterShortName.java        |    7 +-
 .../com/batch/android/core/Webservice.java    |    2 +-
 .../fragment/IdentifierDebugFragment.java     |   16 +-
 .../batch/android/event/InternalEvents.java   |    2 +-
 .../batch/android/module/OptOutModule.java    |   14 +-
 .../com/batch/android/module/PushModule.java  |   34 +-
 .../batch/android/module/TrackerModule.java   |   27 +-
 .../push/FCMAbstractRegistrationProvider.java |   37 +-
 .../FCMInstanceIdRegistrationProvider.java    |    9 +-
 .../push/GCMAbstractRegistrationProvider.java |   10 -
 .../push/PushRegistrationProviderFactory.java |    3 -
 .../com/batch/android/push/Registration.java  |   11 +-
 .../com/batch/android/query/PushQuery.java    |    1 +
 ...tchMessagingWebViewJavascriptBridgeTest.kt |   12 +-
 .../java/com/batch/android/BatchUserTest.java |   62 +
 .../com/batch/android/ParamsOptoutTest.java   |  141 -
 proguard-mappings/1.21.0/checksum.sha         |    1 +
 proguard-mappings/1.21.0/mapping.txt          | 9840 +++++++++++++++++
 38 files changed, 10141 insertions(+), 638 deletions(-)
 delete mode 100644 Sources/sdk/src/androidTest/java/com/batch/android/AdvertisingIDTest.java
 delete mode 100644 Sources/sdk/src/main/java/com/batch/android/adsidentifier/GCMAdsIdentifierProvider.java
 delete mode 100644 Sources/sdk/src/test/java/com/batch/android/ParamsOptoutTest.java
 create mode 100644 proguard-mappings/1.21.0/checksum.sha
 create mode 100644 proguard-mappings/1.21.0/mapping.txt

diff --git a/.gitignore b/.gitignore
index 78d4fa5..33d706b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -33,3 +33,5 @@ node_modules/
 **/.idea/saveactions_settings.xml
 **/.idea/assetWizardSettings.xml
 **/.idea/jarRepositories.xml
+**/.idea/androidTestResultsUserPreferences.xml
+**/.idea/other.xml
diff --git a/Sources/buildSrc/src/main/java/Consts.kt b/Sources/buildSrc/src/main/java/Consts.kt
index 6a2dae0..f2e9e72 100644
--- a/Sources/buildSrc/src/main/java/Consts.kt
+++ b/Sources/buildSrc/src/main/java/Consts.kt
@@ -11,8 +11,8 @@ object ProjectConsts {
 }
 
 object SDKConsts {
-    const val VERSION = "1.20.1"
-    const val API_LEVEL = 61
+    const val VERSION = "1.21.0"
+    const val API_LEVEL = 70
     const val MESSAGING_API_LEVEL = 12
 
     const val MIN_SDK = 15
diff --git a/Sources/sdk/build.gradle.kts b/Sources/sdk/build.gradle.kts
index fb1bb2c..a6015cd 100644
--- a/Sources/sdk/build.gradle.kts
+++ b/Sources/sdk/build.gradle.kts
@@ -121,11 +121,10 @@ dependencies {
     val kotlinVersion = ProjectConsts.KOTLIN_VERSION
     val kotlinCoroutinesVersion = ProjectConsts.KOTLIN_COROUTINES_VERSION
 
-    compileOnly("com.google.android.gms:play-services-ads:${playServicesVersion}")
     compileOnly("com.google.android.gms:play-services-gcm:${playServicesVersion}")
     compileOnly("com.google.android.gms:play-services-location:${playServicesVersion}")
     compileOnly("com.google.android.gms:play-services-nearby:${playServicesVersion}")
-    compileOnly("com.google.android.play:core:1.9.0")
+    compileOnly("com.google.android.play:review:2.0.1")
     compileOnly("com.google.firebase:firebase-iid:21.1.0")
     compileOnly("com.google.firebase:firebase-messaging:22.0.0")
     compileOnly(project(":sdk-stubs"))
@@ -148,7 +147,6 @@ dependencies {
     androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
     androidTestImplementation("androidx.test.ext:truth:1.5.0")
 
-    androidTestImplementation("com.google.android.gms:play-services-ads:${playServicesVersion}")
     androidTestImplementation("com.google.android.gms:play-services-gcm:${playServicesVersion}")
     androidTestImplementation("com.google.android.gms:play-services-location:${playServicesVersion}")
     androidTestImplementation("com.google.android.gms:play-services-nearby:${playServicesVersion}")
@@ -164,7 +162,6 @@ dependencies {
     testImplementation("androidx.test.espresso:espresso-intents:3.5.1")
     testImplementation("androidx.test.espresso:espresso-core:3.5.1")
     testImplementation("androidx.test.ext:truth:1.5.0")
-    testImplementation("com.google.android.gms:play-services-ads:${playServicesVersion}")
     testImplementation("com.google.android.gms:play-services-gcm:${playServicesVersion}")
     testImplementation("com.google.android.gms:play-services-location:${playServicesVersion}")
     testImplementation("com.google.android.gms:play-services-nearby:${playServicesVersion}")
diff --git a/Sources/sdk/proguard-consumer-rules.txt b/Sources/sdk/proguard-consumer-rules.txt
index 8b1b4b2..c37373e 100644
--- a/Sources/sdk/proguard-consumer-rules.txt
+++ b/Sources/sdk/proguard-consumer-rules.txt
@@ -21,12 +21,3 @@
     public static int GOOGLE_PLAY_SERVICES_VERSION_CODE;
     public *** isGooglePlayServicesAvailable(...);
 }
-
--keepclassmembers class com.google.android.gms.ads.identifier.AdvertisingIdClient {
-    public *** getAdvertisingIdInfo(...);
-}
-
--keepclassmembers class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info {
-    public *** getId();
-    public *** isLimitAdTrackingEnabled();
-}
diff --git a/Sources/sdk/src/androidTest/java/com/batch/android/AdvertisingIDTest.java b/Sources/sdk/src/androidTest/java/com/batch/android/AdvertisingIDTest.java
deleted file mode 100644
index 9224338..0000000
--- a/Sources/sdk/src/androidTest/java/com/batch/android/AdvertisingIDTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.batch.android;
-
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import android.content.Context;
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
-import com.batch.android.di.providers.AdvertisingIDProvider;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Test AdvertisingID object
- *
- */
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class AdvertisingIDTest {
-
-    /**
-     * Test advertising ID value
-     *
-     * @throws Exception
-     */
-    @Test
-    public void testAdvertisingID() throws Exception {
-        AdvertisingID device = AdvertisingIDProvider.get();
-
-        Thread.sleep(2000);
-
-        assertTrue(device.isReady());
-        assertNotNull(device.get());
-    }
-}
diff --git a/Sources/sdk/src/androidTest/java/com/batch/android/core/GooglePlayServicesHelperTest.java b/Sources/sdk/src/androidTest/java/com/batch/android/core/GooglePlayServicesHelperTest.java
index 70ffa04..c36d9ca 100644
--- a/Sources/sdk/src/androidTest/java/com/batch/android/core/GooglePlayServicesHelperTest.java
+++ b/Sources/sdk/src/androidTest/java/com/batch/android/core/GooglePlayServicesHelperTest.java
@@ -3,7 +3,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 
 import android.content.Context;
 import androidx.test.core.app.ApplicationProvider;
@@ -71,31 +70,4 @@ public void testCheckGoogleServicesAvailability() throws Exception {
         assertNotNull(playServicesAvailability);
         assertEquals(ConnectionResult.SUCCESS, (int) playServicesAvailability);
     }
-
-    /**
-     * Test the advertising id value response
-     *
-     * @throws Exception
-     */
-    @Test
-    public void testGetAdvertisingIDValue() throws Exception {
-        latch = new CountDownLatch(1);
-        GooglePlayServicesHelper.getAdvertisingIDValue(
-            appContext,
-            new GooglePlayServicesHelper.AdvertisingValueListener() {
-                @Override
-                public void onValue(String value, boolean limited) {
-                    assertNotNull(value);
-                    latch.countDown();
-                }
-
-                @Override
-                public void onError(Exception e) {
-                    fail("Error occured : " + e.getMessage());
-                    latch.countDown();
-                }
-            }
-        );
-        latch.await();
-    }
 }
diff --git a/Sources/sdk/src/main/java/com/batch/android/AdsIdentifierProvider.java b/Sources/sdk/src/main/java/com/batch/android/AdsIdentifierProvider.java
index 8db0eb4..c6ff142 100644
--- a/Sources/sdk/src/main/java/com/batch/android/AdsIdentifierProvider.java
+++ b/Sources/sdk/src/main/java/com/batch/android/AdsIdentifierProvider.java
@@ -2,7 +2,11 @@
 
 import com.batch.android.annotation.PublicSDK;
 
+/**
+ * @deprecated Batch doesn't collects the Android Advertising Identifier anymore.
+ */
 @PublicSDK
+@Deprecated
 public interface AdsIdentifierProvider {
     /**
      * Is this provider available to use? This is the place to check if the libraries are here at
@@ -22,8 +26,10 @@ public interface AdsIdentifierProvider {
 
     /**
      * Interface used to callback from
+     * @deprecated Batch doesn't collects the Android Advertising Identifier anymore.
      */
     @PublicSDK
+    @Deprecated
     interface AdsIdentifierListener {
         /**
          * Called on success with the id & if the user selected to opt-out from ads
diff --git a/Sources/sdk/src/main/java/com/batch/android/AdsIdentifierProviderAvailabilityException.java b/Sources/sdk/src/main/java/com/batch/android/AdsIdentifierProviderAvailabilityException.java
index 75fb314..001c585 100644
--- a/Sources/sdk/src/main/java/com/batch/android/AdsIdentifierProviderAvailabilityException.java
+++ b/Sources/sdk/src/main/java/com/batch/android/AdsIdentifierProviderAvailabilityException.java
@@ -2,7 +2,12 @@
 
 import com.batch.android.annotation.PublicSDK;
 
+/**
+ *
+ * @deprecated Batch doesn't collects the Android Advertising Identifier anymore.
+ */
 @PublicSDK
+@Deprecated
 public class AdsIdentifierProviderAvailabilityException extends Exception {
 
     public AdsIdentifierProviderAvailabilityException(String message) {
diff --git a/Sources/sdk/src/main/java/com/batch/android/AdvertisingID.java b/Sources/sdk/src/main/java/com/batch/android/AdvertisingID.java
index 09f4af5..99ede2f 100644
--- a/Sources/sdk/src/main/java/com/batch/android/AdvertisingID.java
+++ b/Sources/sdk/src/main/java/com/batch/android/AdvertisingID.java
@@ -1,134 +1,67 @@
 package com.batch.android;
 
+import android.content.Context;
 import androidx.annotation.Nullable;
-import com.batch.android.core.Logger;
-import com.batch.android.di.providers.PushModuleProvider;
 import com.batch.android.processor.Module;
 import com.batch.android.processor.Singleton;
 
 /**
  * Object that encapsulate advertising ID
  *
+ * @deprecated Batch doesn't collects the Android Advertising Identifier anymore.
  * @hide
  */
 @Module
 @Singleton
+@Deprecated
 public final class AdvertisingID {
 
-    private static final String TAG = "AdvertisingID";
-
-    /**
-     * Advertising ID value return when not available :
-     *
-     * - For Apps with target API level set to 31 (Android 12) or later must declare the normal
-     * permission com.google.android.gms.AD_ID in the AndroidManifest.xml in order to use
-     * the getId API
-     *
-     * - For all users who have opted out of ads personalization in their device settings
-     */
-    private static final String UNAVAILABLE_AD_ID = "00000000-0000-0000-0000-000000000000";
-
-    /**
-     * Advertising ID
-     */
-    private String advertisingID;
-
-    /**
-     * Is use of advertising id limited
-     */
-    private boolean limited;
-
-    /**
-     * Is advertising ID already available
-     */
-    private boolean advertisingIdReady = false;
-
-    // ------------------------------------------------->
-
-    public AdvertisingID() {
-        // Start Advertising ID async get
-        initAdvertisingID();
-    }
-
-    /**
-     * Start the thread to retrieve the advertising ID asynchronously
-     */
-    private void initAdvertisingID() {
-        AdsIdentifierProvider provider = PushModuleProvider.get().getAdsIdentifierProvider();
-        if (provider != null) {
-            try {
-                provider.checkAvailability();
-            } catch (AdsIdentifierProviderAvailabilityException e) {
-                Logger.error(TAG, "Could not get Advertising Id: " + e.getMessage());
-                return;
-            }
-
-            provider.getAdsIdentifier(
-                new AdsIdentifierProvider.AdsIdentifierListener() {
-                    @Override
-                    public void onSuccess(String id, boolean limited) {
-                        advertisingID = UNAVAILABLE_AD_ID.equals(id) ? null : id;
-                        AdvertisingID.this.limited = limited;
-                        advertisingIdReady = true;
-                        Logger.internal(TAG, "Advertising ID retrieved");
-                    }
-
-                    @Override
-                    public void onError(Exception e) {
-                        Logger.error(TAG, "Error while retrieving Advertising ID", e);
-                        advertisingIdReady = true;
-                    }
-                }
-            );
-        }
-    }
-
-    // --------------------------------------------->
+    public AdvertisingID() {}
 
     /**
      * Tell if the process to retrieve advertising ID is already complete
      *
-     * @return true if the process is completed
+     * @return This method always return false.
+     * @deprecated Batch doesn't support advertising id anymore.
      */
+    @Deprecated
     public boolean isReady() {
-        return advertisingIdReady;
+        return false;
     }
 
     /**
      * Get the advertising ID
      *
-     * @return The advertising ID if available, null otherwise
-     * @throws IllegalStateException if the advertising id is not available yet (check {@link #isReady()})
+     * @return This method always return null.
+     * @throws IllegalStateException Cannot throw
+     * @deprecated Batch doesn't support advertising id anymore.
      */
+    @Deprecated
     @Nullable
     public String get() throws IllegalStateException {
-        if (!advertisingIdReady) {
-            throw new IllegalStateException("Advertising ID is not ready yet");
-        }
-
-        return advertisingID;
+        return null;
     }
 
     /**
      * Is the use of the advertising ID limited
      *
-     * @return true if the advertising ID limited
-     * @throws IllegalStateException if the advertising id is not available yet (check {@link #isReady()})
+     * @return This method always return false.
+     * @throws IllegalStateException Cannot throw
+     * @deprecated Batch doesn't support advertising id anymore.
      */
+    @Deprecated
     public boolean isLimited() throws IllegalStateException {
-        if (!advertisingIdReady) {
-            throw new IllegalStateException("Advertising ID is not ready yet");
-        }
-
-        return limited;
+        return false;
     }
 
     /**
      * Is the advertising ID not null
      *
-     * @return true if its not
+     * @return This method always return false.
+     * @deprecated Batch doesn't support advertising id anymore.
      */
+    @Deprecated
     public boolean isNotNull() {
-        return advertisingID != null;
+        return false;
     }
 }
diff --git a/Sources/sdk/src/main/java/com/batch/android/Batch.java b/Sources/sdk/src/main/java/com/batch/android/Batch.java
index d1b5cf5..00f8dd8 100644
--- a/Sources/sdk/src/main/java/com/batch/android/Batch.java
+++ b/Sources/sdk/src/main/java/com/batch/android/Batch.java
@@ -36,7 +36,6 @@
 import com.batch.android.debug.BatchDebugActivity;
 import com.batch.android.debug.FindMyInstallationHelper;
 import com.batch.android.di.providers.ActionModuleProvider;
-import com.batch.android.di.providers.AdvertisingIDProvider;
 import com.batch.android.di.providers.BatchModuleMasterProvider;
 import com.batch.android.di.providers.BatchNotificationChannelsManagerProvider;
 import com.batch.android.di.providers.EventDispatcherModuleProvider;
@@ -81,10 +80,7 @@ public final class Batch {
      * Batch API key
      */
     private static Config config;
-    /**
-     * AdvertisingID object build on Batch start
-     */
-    private static AdvertisingID advertisingID;
+
     /**
      * Install object build on Batch start
      */
@@ -257,20 +253,15 @@ public static void setConfig(final Config config) {
 
     /**
      * Can Batch use Advertising ID
-     *
-     * @return
+     * <p>
+     * Batch doesn't collects Android Advertising Identifier anymore.
+     * @deprecated This method does nothing, please stop using it
+     * and see {@link BatchUserDataEditor#setAttributionIdentifier(String)
+     * @return Always return false.
      */
+    @Deprecated
     public static boolean shouldUseAdvertisingID() {
-        final AtomicBoolean shouldUse = new AtomicBoolean(true);
-        RuntimeManagerProvider
-            .get()
-            .run(state -> {
-                if (config != null) {
-                    shouldUse.set(config.shouldUseAdvertisingID);
-                }
-            });
-
-        return shouldUse.get();
+        return false;
     }
 
     /**
@@ -503,7 +494,7 @@ private static void _optOut(
 
         OptOutModuleProvider
             .get()
-            .optOut(context, advertisingID, wipeData, listener)
+            .optOut(context, wipeData, listener)
             .then(value -> {
                 RuntimeManager rm = RuntimeManagerProvider.get();
                 rm.resetServiceRefCount();
@@ -2243,11 +2234,6 @@ else if (lastStop == null && state == State.READY) {
                     /*
                      * Init device/user/install data
                      */
-                    AdvertisingID advertisingID = Batch.advertisingID;
-                    if (advertisingID == null) {
-                        advertisingID = AdvertisingIDProvider.get();
-                        Batch.advertisingID = advertisingID;
-                    }
                     if (Batch.install == null) {
                         Batch.install = new Install(applicationContext);
                     }
@@ -2272,7 +2258,7 @@ else if (lastStop == null && state == State.READY) {
                     }
 
                     // Check if we have a pending opt-in event
-                    OptOutModuleProvider.get().trackOptinEventIfNeeded(context, advertisingID);
+                    OptOutModuleProvider.get().trackOptinEventIfNeeded(context);
                 }
 
                 /*
@@ -2556,7 +2542,6 @@ private static void doStop() {
     private static void clearCachedInstallData() {
         Logger.internal(OptOutModule.TAG, "Clearing cached install data");
         install = null;
-        advertisingID = null;
         user = null;
     }
 
@@ -2565,10 +2550,12 @@ private static void clearCachedInstallData() {
     /**
      * Return the advertising ID object if available
      *
-     * @return advertising ID if available, null otherwise
+     * @deprecated this method has been deprecated and does nothing.
+     * @return Always return null.
      */
+    @Deprecated
     static AdvertisingID getAdvertisingID() {
-        return advertisingID;
+        return null;
     }
 
     /**
diff --git a/Sources/sdk/src/main/java/com/batch/android/BatchMessagingWebViewJavascriptBridge.java b/Sources/sdk/src/main/java/com/batch/android/BatchMessagingWebViewJavascriptBridge.java
index 162fde2..7d9a4a1 100644
--- a/Sources/sdk/src/main/java/com/batch/android/BatchMessagingWebViewJavascriptBridge.java
+++ b/Sources/sdk/src/main/java/com/batch/android/BatchMessagingWebViewJavascriptBridge.java
@@ -103,7 +103,7 @@ private BridgeResultProvider getMethodResultProvider(@NonNull String method, @No
         throws BridgeResultProviderException, UnknownMethodException {
         switch (method.toLowerCase(Locale.US)) {
             case "getattributionid":
-                return this::getAdvertisingID;
+                return this::getAttributionID;
             case "getinstallationid":
                 return this::getInstallationID;
             case "getcustomlanguage":
@@ -156,38 +156,10 @@ protected String getCustomUserID() {
         return Batch.User.getIdentifier(applicationContext);
     }
 
-    @VisibleForTesting
-    @NonNull
-    protected String getAdvertisingID() throws BridgeResultProviderException {
-        if (isAdvertisingIDAllowedByConfig()) {
-            String advertisingID = getAdvertisingIDValue();
-            if (advertisingID != null) {
-                return advertisingID;
-            } else {
-                throw new BridgeResultProviderException(
-                    "Advertising ID unavailable: Couldn't fetch it from the system provider. Device user may have disabled it, missing project dependency or an library didn't return any."
-                );
-            }
-        } else {
-            throw new BridgeResultProviderException("Advertising ID unavailable: Disabled by config");
-        }
-    }
-
-    @VisibleForTesting
-    protected boolean isAdvertisingIDAllowedByConfig() {
-        return Batch.shouldUseAdvertisingID();
-    }
-
     @VisibleForTesting
     @Nullable
-    protected String getAdvertisingIDValue() {
-        try {
-            AdvertisingID advertisingID = Batch.getAdvertisingID();
-            if (advertisingID != null && advertisingID.isNotNull()) {
-                return advertisingID.get();
-            }
-        } catch (IllegalArgumentException ignored) {}
-        return null;
+    protected String getAttributionID() {
+        return Batch.getUser().getAttributionID();
     }
 
     @NonNull
diff --git a/Sources/sdk/src/main/java/com/batch/android/BatchUserDataEditor.java b/Sources/sdk/src/main/java/com/batch/android/BatchUserDataEditor.java
index d9a255d..156c30f 100644
--- a/Sources/sdk/src/main/java/com/batch/android/BatchUserDataEditor.java
+++ b/Sources/sdk/src/main/java/com/batch/android/BatchUserDataEditor.java
@@ -20,6 +20,7 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
+import java.util.Objects;
 import java.util.regex.Pattern;
 
 /**
@@ -33,19 +34,16 @@ public class BatchUserDataEditor {
      */
     public static final String TAG = "BatchUserDataEditor";
     static final Pattern ATTR_KEY_PATTERN = Pattern.compile("^[a-zA-Z0-9_]{1,30}$");
-
+    static final String ATTRIBUTION_ID_FORMAT = "[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}";
     private static final int LANGUAGE_INDEX = 0;
     private static final int REGION_INDEX = 1;
     private static final int IDENTIFIER_INDEX = 2;
     private static final int ATTR_STRING_MAX_LENGTH = 64; // Also applies to tag values
     private static final int ATTR_URL_MAX_LENGTH = 2048;
     private static final int EMAIL_MAX_LENGTH = 128;
-
     private final UserOperationQueue operationQueue = new UserOperationQueue();
-
     private boolean[] updatedFields = { false, false, false };
     private String[] userFields = { null, null, null };
-
     private EmailSubscription emailSubscription;
 
     BatchUserDataEditor() {}
@@ -106,6 +104,39 @@ public BatchUserDataEditor setIdentifier(final @Nullable String identifier) {
         return this;
     }
 
+    /**
+     * Set the user attribution identifier.<br>
+     *
+     * @param attributionID A valid uuid lowercase string or null to reset
+     * @return This object instance, for method chaining
+     */
+    public BatchUserDataEditor setAttributionIdentifier(final @Nullable String attributionID) {
+        if (attributionID != null && !Pattern.matches(ATTRIBUTION_ID_FORMAT, attributionID)) {
+            Logger.error(
+                TAG,
+                "setAttributionIdentifier called with invalid identifier. Should be a valid uuid lowercase string"
+            );
+            return this;
+        }
+
+        operationQueue.addFirstOperation(datasource -> {
+            Context context = RuntimeManagerProvider.get().getContext();
+            if (context == null) {
+                throw new UserModule.SaveException(
+                    "Error while applying. Make sure Batch is started beforehand, and not globally opted out from.",
+                    "'context' was null while saving."
+                );
+            }
+            User user = Batch.getUser();
+            String oldAttributionID = user.getAttributionID();
+            user.setAttributionID(attributionID);
+            if (!Objects.equals(oldAttributionID, attributionID)) {
+                user.sendAttributionIDChangedEvent();
+            }
+        });
+        return this;
+    }
+
     /**
      * Set the user email.
      *
diff --git a/Sources/sdk/src/main/java/com/batch/android/Config.java b/Sources/sdk/src/main/java/com/batch/android/Config.java
index e1ad8fe..fb12004 100644
--- a/Sources/sdk/src/main/java/com/batch/android/Config.java
+++ b/Sources/sdk/src/main/java/com/batch/android/Config.java
@@ -13,10 +13,7 @@ public final class Config {
      * The API key used for Batch
      */
     String apikey;
-    /**
-     * Should Batch use Advertising ID or not
-     */
-    boolean shouldUseAdvertisingID = true;
+
     /**
      * Should Batch use advanced device information or not
      */
@@ -57,15 +54,12 @@ public Config setCanUseAndroidID(boolean canUse) {
     }
 
     /**
-     * Set if Batch can use AvertisingId (default = true)<br>
-     * <br>
-     * Setting this to false have a negative impact on offer delivery and restore<br>
-     * You should only use it if you know what you are doing.
-     *
-     * @param canUse can Batch use AdvertisingID
+     * Batch doesn't support Android Advertising Identifier anymore.
+     * @param canUse This parameter does nothing.
+     * @deprecated This method does nothing, please stop using it and see {@link BatchUserDataEditor#setAttributionIdentifier(String)}
      */
+    @Deprecated
     public Config setCanUseAdvertisingID(boolean canUse) {
-        shouldUseAdvertisingID = canUse;
         return this;
     }
 
@@ -80,9 +74,6 @@ public Config setCanUseAdvertisingID(boolean canUse) {
      * <br>
      * Setting this to false have a negative impact on core Batch features</br>
      * You should only use it if you know what you are doing.
-     * <p>
-     * Note: Disabling this does not automatically disable Android ID/Advertising ID collection, use the
-     * appropriate methods to control these.
      *
      * @param canUse Can Batch use advanced device information?
      */
diff --git a/Sources/sdk/src/main/java/com/batch/android/PushRegistrationProvider.java b/Sources/sdk/src/main/java/com/batch/android/PushRegistrationProvider.java
index a56287c..6d759f0 100644
--- a/Sources/sdk/src/main/java/com/batch/android/PushRegistrationProvider.java
+++ b/Sources/sdk/src/main/java/com/batch/android/PushRegistrationProvider.java
@@ -10,9 +10,20 @@
 public interface PushRegistrationProvider {
     /**
      * Returns the Sender ID of the provider, or equivalent. For example: "8122930293"
+     * Also known as the GCP Project Number
      */
     String getSenderID();
 
+    /**
+     * Returns the GCP Project ID. For example "batch_sample". Not to be confused with Sender ID,
+     * which is the Project Number.
+     * Only for FCM.
+     */
+    @Nullable
+    default String getGCPProjectID() {
+        return null;
+    }
+
     /**
      * Returns the short name of the provider. For example: "FCM".
      */
@@ -48,11 +59,4 @@ public interface PushRegistrationProvider {
      */
     @Nullable
     String getRegistration();
-
-    /**
-     * Return the ads identifier provider associated with the push registration provider
-     *
-     * @return
-     */
-    AdsIdentifierProvider getAdsIdentifierProvider();
 }
diff --git a/Sources/sdk/src/main/java/com/batch/android/User.java b/Sources/sdk/src/main/java/com/batch/android/User.java
index e48a31b..71b8d06 100644
--- a/Sources/sdk/src/main/java/com/batch/android/User.java
+++ b/Sources/sdk/src/main/java/com/batch/android/User.java
@@ -108,6 +108,29 @@ public String getCustomID() {
         return ParametersProvider.get(context).get(ParameterKeys.CUSTOM_ID);
     }
 
+    /**
+     * Set the new attribution id
+     *
+     * @param attributionID can be null
+     */
+    public void setAttributionID(@Nullable String attributionID) {
+        if (attributionID != null) {
+            ParametersProvider.get(context).set(ParameterKeys.ATTRIBUTION_ID, attributionID, true);
+        } else {
+            ParametersProvider.get(context).remove(ParameterKeys.ATTRIBUTION_ID);
+        }
+    }
+
+    /**
+     * Return the attribution ID if any, null otherwise
+     *
+     * @return
+     */
+    @Nullable
+    public String getAttributionID() {
+        return ParametersProvider.get(context).get(ParameterKeys.ATTRIBUTION_ID);
+    }
+
     // ------------------------------------------->
 
     /**
@@ -139,6 +162,21 @@ private synchronized long incrementVersion() {
         return newVersion;
     }
 
+    public void sendAttributionIDChangedEvent() {
+        final String attributionIdentifier = getAttributionID();
+        JSONObject attributionParam = new JSONObject();
+        try {
+            if (attributionIdentifier != null) {
+                attributionParam.put("attribution_id", attributionIdentifier);
+            } else {
+                attributionParam.put("attribution_id", JSONObject.NULL);
+            }
+            TrackerModuleProvider.get().track(InternalEvents.ATTRIBUTION_ID_CHANGED, attributionParam);
+        } catch (JSONException e) {
+            Logger.internal(UserModule.TAG, "Could not track " + InternalEvents.ATTRIBUTION_ID_CHANGED, e);
+        }
+    }
+
     public void sendChangeEvent() {
         try {
             final JSONObject params = new JSONObject();
@@ -157,9 +195,7 @@ public void sendChangeEvent() {
             if (customID != null) {
                 params.put("cus", customID);
             }
-
             params.put("upv", incrementVersion());
-
             TrackerModuleProvider.get().track(InternalEvents.PROFILE_CHANGED, params);
         } catch (JSONException e) {
             Logger.internal(UserModule.TAG, "Could not track " + InternalEvents.PROFILE_CHANGED, e);
diff --git a/Sources/sdk/src/main/java/com/batch/android/WebserviceParameterUtils.java b/Sources/sdk/src/main/java/com/batch/android/WebserviceParameterUtils.java
index 0628a04..7afddcd 100644
--- a/Sources/sdk/src/main/java/com/batch/android/WebserviceParameterUtils.java
+++ b/Sources/sdk/src/main/java/com/batch/android/WebserviceParameterUtils.java
@@ -129,22 +129,12 @@ private static Map<String, Object> buildIds(@NonNull Context context) {
                             ids.put(parameter, customID);
                         }
                     }
-                } else if (SystemParameterShortName.ADVERTISING_ID.shortName.equals(parameter)) {
-                    if (Batch.shouldUseAdvertisingID()) {
-                        AdvertisingID advertisingID = Batch.getAdvertisingID();
-                        if (advertisingID != null) {
-                            boolean isIdfaAvailable = advertisingID.isReady() && advertisingID.isNotNull();
-                            if (isIdfaAvailable) {
-                                ids.put(parameter, advertisingID.get());
-                            }
-                        }
-                    }
-                } else if (SystemParameterShortName.ADVERTISING_ID_OPTIN.shortName.equals(parameter)) {
-                    AdvertisingID advertisingID = Batch.getAdvertisingID();
-                    if (advertisingID != null) {
-                        boolean isIdfaAvailable = advertisingID.isReady();
-                        if (isIdfaAvailable) {
-                            ids.put(parameter, !advertisingID.isLimited());
+                } else if (SystemParameterShortName.ATTRIBUTION_ID.shortName.equals(parameter)) {
+                    User user = Batch.getUser();
+                    if (user != null) {
+                        String attributionID = user.getAttributionID();
+                        if (attributionID != null) {
+                            ids.put(parameter, attributionID);
                         }
                     }
                 } else if (SystemParameterShortName.BRIDGE_VERSION.shortName.equals(parameter)) {
diff --git a/Sources/sdk/src/main/java/com/batch/android/adsidentifier/GCMAdsIdentifierProvider.java b/Sources/sdk/src/main/java/com/batch/android/adsidentifier/GCMAdsIdentifierProvider.java
deleted file mode 100644
index e94e13b..0000000
--- a/Sources/sdk/src/main/java/com/batch/android/adsidentifier/GCMAdsIdentifierProvider.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.batch.android.adsidentifier;
-
-import android.content.Context;
-import com.batch.android.AdsIdentifierProvider;
-import com.batch.android.AdsIdentifierProviderAvailabilityException;
-import com.batch.android.core.GooglePlayServicesHelper;
-import com.batch.android.core.TaskRunnable;
-import com.batch.android.di.providers.TaskExecutorProvider;
-import java.lang.reflect.Method;
-
-public class GCMAdsIdentifierProvider implements AdsIdentifierProvider {
-
-    private Context context;
-
-    public GCMAdsIdentifierProvider(Context context) {
-        this.context = context.getApplicationContext();
-    }
-
-    @Override
-    public void checkAvailability() throws AdsIdentifierProviderAvailabilityException {
-        if (!GooglePlayServicesHelper.isAdvertisingIDAvailable(context)) {
-            throw new AdsIdentifierProviderAvailabilityException(
-                "Google Play Services Advertising ID seems to be unavailable or too old."
-            );
-        }
-
-        if (!isGMSAdvertisingIdClientPresent()) {
-            throw new AdsIdentifierProviderAvailabilityException(
-                "Google Play Services Ads Identifier is missing. Did you add 'com.google.android.gms:play-services-ads-identifier' to your gradle dependencies?"
-            );
-        }
-    }
-
-    private boolean isGMSAdvertisingIdClientPresent() {
-        try {
-            Class.forName("com.google.android.gms.ads.identifier.AdvertisingIdClient");
-            return true;
-        } catch (Throwable ex) {
-            return false;
-        }
-    }
-
-    @Override
-    public void getAdsIdentifier(AdsIdentifierListener listener) {
-        if (listener == null) {
-            throw new NullPointerException("Null listener");
-        }
-
-        /*
-         * Must be done in another thread
-         */
-        TaskExecutorProvider
-            .get(context)
-            .submit(
-                new TaskRunnable() {
-                    @Override
-                    public void run() {
-                        try {
-                            /*
-                             * retrieve infos
-                             */
-                            Class<?> clazz = Class.forName("com.google.android.gms.ads.identifier.AdvertisingIdClient");
-                            Method method = clazz.getMethod("getAdvertisingIdInfo", Context.class);
-                            Object response = method.invoke(null, context);
-
-                            /*
-                             * Extract methods to get id & limited value
-                             */
-                            Class<?> infoClazz = Class.forName(
-                                "com.google.android.gms.ads.identifier.AdvertisingIdClient$Info"
-                            );
-                            Method getValueMethod = infoClazz.getMethod("getId");
-                            Method getLimitedMethod = infoClazz.getMethod("isLimitAdTrackingEnabled");
-
-                            /*
-                             * Get values
-                             */
-                            String value = (String) getValueMethod.invoke(response, (Object[]) null);
-                            boolean limited = (Boolean) getLimitedMethod.invoke(response, (Object[]) null);
-
-                            /*
-                             * Call the listener
-                             */
-                            listener.onSuccess(value, limited);
-                        } catch (Exception e) {
-                            listener.onError(e);
-                            return;
-                        }
-                    }
-
-                    @Override
-                    public String getTaskIdentifier() {
-                        return "advertisingid/get";
-                    }
-                }
-            );
-    }
-}
diff --git a/Sources/sdk/src/main/java/com/batch/android/core/GooglePlayServicesHelper.java b/Sources/sdk/src/main/java/com/batch/android/core/GooglePlayServicesHelper.java
index fc61a5f..0206600 100644
--- a/Sources/sdk/src/main/java/com/batch/android/core/GooglePlayServicesHelper.java
+++ b/Sources/sdk/src/main/java/com/batch/android/core/GooglePlayServicesHelper.java
@@ -12,11 +12,6 @@
  */
 public final class GooglePlayServicesHelper {
 
-    /**
-     * The version of the Google Play Services lib that contains advertising ID
-     */
-    private static final int ADVERTISING_ID_VERSION = 4030500;
-
     /**
      * The version of the Google Play Services lib that contains push
      */
@@ -129,28 +124,6 @@ public static Integer getGooglePlayServicesLibVersion(Context context) {
 
     // ------------------------------------------------>
 
-    /**
-     * Check if the advertising ID is available by checking the version of the lib
-     *
-     * @param context
-     * @return
-     */
-    public static boolean isAdvertisingIDAvailable(Context context) {
-        Integer libVersion = getGooglePlayServicesLibVersion(context);
-        if (libVersion == null) {
-            return false;
-        }
-
-        Integer availability = getGooglePlayServicesAvailabilityInteger(context);
-        if (availability == null || availability != 0) {
-            return false;
-        }
-
-        return libVersion >= ADVERTISING_ID_VERSION;
-    }
-
-    // ------------------------------------------------>
-
     /**
      * Check if GCM is available
      *
diff --git a/Sources/sdk/src/main/java/com/batch/android/core/ParameterKeys.java b/Sources/sdk/src/main/java/com/batch/android/core/ParameterKeys.java
index 1750849..2a0741e 100644
--- a/Sources/sdk/src/main/java/com/batch/android/core/ParameterKeys.java
+++ b/Sources/sdk/src/main/java/com/batch/android/core/ParameterKeys.java
@@ -116,6 +116,7 @@ public final class ParameterKeys
     public final static String TASK_EXECUTOR_THREADTTL					= "app.executor.threadttl";
     public final static String SCHEME_CODE_PATTERN						= "app.scheme.codepattern";
     public final static String CUSTOM_ID								= "app.id.custom";
+    public final static String ATTRIBUTION_ID						    = "app.id.attribution";
     public final static String USER_DATA_VERSION						= "app.profile.version";
     public final static String SERVER_TIMESTAMP							= "ws.server.timestamp";
     public final static String EVENT_TRACKER_INITIAL_DELAY				= "tracker.delay.initial";
@@ -126,6 +127,8 @@ public final class ParameterKeys
     public final static String PUSH_REGISTRATION_ID_KEY					= "push.registration.id";
     public final static String PUSH_REGISTRATION_PROVIDER_KEY			= "push.registration.provider";
     public final static String PUSH_REGISTRATION_SENDERID_KEY			= "push.registration.sender_id";
+
+    public final static String PUSH_REGISTRATION_GCPPROJECTID_KEY		= "push.registration.gcp_project_id";
     public final static String PUSH_APP_VERSION_KEY						= "push.appversion";
     public final static String PUSH_NOTIF_TYPE							= "push.notiftype";
     public final static String PUSH_NOTIF_LAST_AUTH_STATUS_SENT		    = "push.notif.last_auth_status_sent";
diff --git a/Sources/sdk/src/main/java/com/batch/android/core/Parameters.java b/Sources/sdk/src/main/java/com/batch/android/core/Parameters.java
index 3d97b9b..351a604 100644
--- a/Sources/sdk/src/main/java/com/batch/android/core/Parameters.java
+++ b/Sources/sdk/src/main/java/com/batch/android/core/Parameters.java
@@ -184,7 +184,7 @@ public final class Parameters {
         appParameters.put(ParameterKeys.TASK_EXECUTOR_MAX_POOL, 			"5");
         appParameters.put(ParameterKeys.TASK_EXECUTOR_THREADTTL, 			"1000");
         appParameters.put(ParameterKeys.SCHEME_CODE_PATTERN, 				"^batch[A-Za-z0-9]{4,}://unlock/code/([^/\\?]+)");
-        appParameters.put(ParameterKeys.WEBSERVICE_IDS_PARAMETERS, 			"lvl,mlvl,dla,dre,dtz,osv,da,apv,apc,bid,di,i,idv,cifa,cus,lda,fda,did,sdk,brv,plv,s,nkd");
+        appParameters.put(ParameterKeys.WEBSERVICE_IDS_PARAMETERS, 			"lvl,mlvl,dla,dre,dtz,osv,da,apv,apc,bid,di,i,idv,cus,lda,fda,did,sdk,brv,plv,s,nkd");
         appParameters.put(ParameterKeys.WEBSERVICE_IDS_ADVANCED_PARAMETERS, "dty,brd,ntn,ntc,son,sop,sco");
     }
 
diff --git a/Sources/sdk/src/main/java/com/batch/android/core/SystemParameterShortName.java b/Sources/sdk/src/main/java/com/batch/android/core/SystemParameterShortName.java
index 451061d..ef053d1 100644
--- a/Sources/sdk/src/main/java/com/batch/android/core/SystemParameterShortName.java
+++ b/Sources/sdk/src/main/java/com/batch/android/core/SystemParameterShortName.java
@@ -39,18 +39,13 @@ public enum SystemParameterShortName {
      */
     SERVER_ID("i"),
 
-    ADVERTISING_ID("idv"),
+    ATTRIBUTION_ID("idv"),
 
     /**
      * Session id, regenerated at each start
      */
     SESSION_ID("s"),
 
-    /**
-     * Can use identifier
-     */
-    ADVERTISING_ID_OPTIN("cifa"),
-
     APPLICATION_VERSION("apv"),
 
     APPLICATION_CODE("apc"),
diff --git a/Sources/sdk/src/main/java/com/batch/android/core/Webservice.java b/Sources/sdk/src/main/java/com/batch/android/core/Webservice.java
index ebfc9a2..69f166e 100644
--- a/Sources/sdk/src/main/java/com/batch/android/core/Webservice.java
+++ b/Sources/sdk/src/main/java/com/batch/android/core/Webservice.java
@@ -443,7 +443,7 @@ public byte[] executeRequest() throws WebserviceError {
                     responseCode = -1;
                     count++;
                     continue;
-                } catch (Exception e) {
+                } catch (Exception | ExceptionInInitializerError e) {
                     throw new WebserviceError(WebserviceError.Reason.UNEXPECTED_ERROR, e);
                 }
 
diff --git a/Sources/sdk/src/main/java/com/batch/android/debug/fragment/IdentifierDebugFragment.java b/Sources/sdk/src/main/java/com/batch/android/debug/fragment/IdentifierDebugFragment.java
index d9f4d1f..8688e36 100644
--- a/Sources/sdk/src/main/java/com/batch/android/debug/fragment/IdentifierDebugFragment.java
+++ b/Sources/sdk/src/main/java/com/batch/android/debug/fragment/IdentifierDebugFragment.java
@@ -9,11 +9,11 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
-import com.batch.android.AdvertisingID;
 import com.batch.android.Batch;
 import com.batch.android.BuildConfig;
 import com.batch.android.R;
-import com.batch.android.di.providers.AdvertisingIDProvider;
+import com.batch.android.core.ParameterKeys;
+import com.batch.android.di.providers.ParametersProvider;
 
 public class IdentifierDebugFragment extends Fragment implements View.OnClickListener {
 
@@ -38,14 +38,14 @@ private String getShareString() {
                 )
             );
 
-        AdvertisingID advertisingID = AdvertisingIDProvider.get();
-        if (Batch.shouldUseAdvertisingID() && advertisingID.isReady() && advertisingID.isNotNull()) {
+        String attributionID = ParametersProvider.get(getContext()).get(ParameterKeys.ATTRIBUTION_ID);
+        if (attributionID != null) {
             shareContent =
                 shareContent.concat(
                     String.format(
                         "%s: %s\n",
                         getString(R.string.com_batchsdk_identifier_debug_fragment_advertising_id),
-                        advertisingID.get()
+                        attributionID
                     )
                 );
         } else {
@@ -108,9 +108,9 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
         sdkVersion.setText(BuildConfig.SDK_VERSION);
         installId.setText(Batch.User.getInstallationID());
 
-        AdvertisingID advertisingID = AdvertisingIDProvider.get();
-        if (advertisingID.isReady() && advertisingID.isNotNull()) {
-            advertisingId.setText(advertisingID.get());
+        String attributionID = ParametersProvider.get(getContext()).get(ParameterKeys.ATTRIBUTION_ID);
+        if (attributionID != null) {
+            advertisingId.setText(attributionID);
         } else {
             advertisingId.setText(R.string.com_batchsdk_debug_view_empty);
         }
diff --git a/Sources/sdk/src/main/java/com/batch/android/event/InternalEvents.java b/Sources/sdk/src/main/java/com/batch/android/event/InternalEvents.java
index a88655d..c69dedd 100644
--- a/Sources/sdk/src/main/java/com/batch/android/event/InternalEvents.java
+++ b/Sources/sdk/src/main/java/com/batch/android/event/InternalEvents.java
@@ -20,7 +20,7 @@ private InternalEvents() {}
     public static final String INSTALL_DATA_CHANGED = "_INSTALL_DATA_CHANGED";
     public static final String INSTALL_DATA_CHANGED_TRACK_FAILURE = "_INSTALL_DATA_CHANGED_TRACK_FAIL";
     public static final String EMAIL_CHANGED = "_EMAIL_CHANGED";
-
+    public static final String ATTRIBUTION_ID_CHANGED = "_ATTRIBUTION_ID_CHANGED";
     public static final String LOCATION_CHANGED = "_LOCATION_CHANGED";
     public static final String NOTIFICATION_STATUS_CHANGE = "_NOTIF_STATUS_CHANGE";
 
diff --git a/Sources/sdk/src/main/java/com/batch/android/module/OptOutModule.java b/Sources/sdk/src/main/java/com/batch/android/module/OptOutModule.java
index 2820af3..cdfa693 100644
--- a/Sources/sdk/src/main/java/com/batch/android/module/OptOutModule.java
+++ b/Sources/sdk/src/main/java/com/batch/android/module/OptOutModule.java
@@ -8,7 +8,6 @@
 import android.os.Handler;
 import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
-import com.batch.android.AdvertisingID;
 import com.batch.android.BatchOptOutResultListener;
 import com.batch.android.core.Logger;
 import com.batch.android.core.ParameterKeys;
@@ -86,11 +85,11 @@ public boolean isOptedOutSync(Context context) {
         return isOptedOut;
     }
 
-    public void trackOptinEventIfNeeded(@NonNull Context context, @NonNull AdvertisingID advertisingID) {
+    public void trackOptinEventIfNeeded(@NonNull Context context) {
         SharedPreferences prefs = getPreferences(context);
         if (prefs.getBoolean(SHOULD_SEND_OPTIN_EVENT_KEY, false)) {
             try {
-                TrackerModuleProvider.get().trackOptInEvent(context, advertisingID);
+                TrackerModuleProvider.get().trackOptInEvent(context);
                 prefs.edit().remove(SHOULD_SEND_OPTIN_EVENT_KEY).apply();
             } catch (JSONException e) {
                 Logger.internal(TAG, "Could not track optin", e);
@@ -114,7 +113,6 @@ public void optIn(Context context) {
 
     public Promise<Void> optOut(
         final Context context,
-        final AdvertisingID advertisingID,
         final boolean wipeData,
         final BatchOptOutResultListener listener
     ) {
@@ -129,12 +127,9 @@ public Promise<Void> optOut(
             Promise<Void> eventPromise = null;
             if (wipeData) {
                 eventPromise =
-                    TrackerModuleProvider
-                        .get()
-                        .trackOptOutEvent(context, advertisingID, InternalEvents.OPT_OUT_AND_WIPE_DATA);
+                    TrackerModuleProvider.get().trackOptOutEvent(context, InternalEvents.OPT_OUT_AND_WIPE_DATA);
             } else {
-                eventPromise =
-                    TrackerModuleProvider.get().trackOptOutEvent(context, advertisingID, InternalEvents.OPT_OUT);
+                eventPromise = TrackerModuleProvider.get().trackOptOutEvent(context, InternalEvents.OPT_OUT);
             }
 
             if (listener == null) {
@@ -196,6 +191,7 @@ public void wipeData(Context context) {
 
         Parameters parameters = ParametersProvider.get(context);
         parameters.remove(ParameterKeys.CUSTOM_ID);
+        parameters.remove(ParameterKeys.ATTRIBUTION_ID);
         parameters.remove(ParameterKeys.INSTALL_ID_KEY);
         parameters.remove(ParameterKeys.INSTALL_TIMESTAMP_KEY);
         parameters.remove(ParameterKeys.PUSH_APP_VERSION_KEY);
diff --git a/Sources/sdk/src/main/java/com/batch/android/module/PushModule.java b/Sources/sdk/src/main/java/com/batch/android/module/PushModule.java
index f81a317..b1f393f 100644
--- a/Sources/sdk/src/main/java/com/batch/android/module/PushModule.java
+++ b/Sources/sdk/src/main/java/com/batch/android/module/PushModule.java
@@ -20,7 +20,6 @@
 import android.text.TextUtils;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
-import com.batch.android.AdsIdentifierProvider;
 import com.batch.android.Batch;
 import com.batch.android.BatchActionActivity;
 import com.batch.android.BatchNotificationInterceptor;
@@ -327,8 +326,9 @@ public Registration getRegistration(@NonNull Context context) {
             }
 
             String senderID = parameters.get(ParameterKeys.PUSH_REGISTRATION_SENDERID_KEY);
+            String gcpProjectID = parameters.get(ParameterKeys.PUSH_REGISTRATION_GCPPROJECTID_KEY);
 
-            return new Registration(registrationProvider, registrationID, senderID);
+            return new Registration(registrationProvider, registrationID, senderID, gcpProjectID);
         } catch (Exception e) {
             Logger.internal(TAG, "Error while retrieving registration id", e);
             return null;
@@ -747,19 +747,6 @@ public void refreshRegistration() {
         }
     }
 
-    /**
-     * Get the ads identifier provider associated with the current registration provider
-     *
-     * @return
-     */
-    public AdsIdentifierProvider getAdsIdentifierProvider() {
-        final PushRegistrationProvider pushProvider = getRegistrationProvider();
-        if (pushProvider != null) {
-            return pushProvider.getAdsIdentifierProvider();
-        }
-        return null;
-    }
-
     /**
      * Get the current version of the app.<br>
      * Use context
@@ -823,7 +810,8 @@ public void run() {
                         final Registration registration = new Registration(
                             provider.getShortname(),
                             registrationID,
-                            provider.getSenderID()
+                            provider.getSenderID(),
+                            provider.getGCPProjectID()
                         );
                         emitRegistration(context, registration);
                     }
@@ -865,6 +853,7 @@ private void emitRegistration(@NonNull Context context, @NonNull final Registrat
                             ParameterKeys.PUSH_REGISTRATION_PROVIDER_KEY
                         );
                         String currentSenderID = parameters.get(ParameterKeys.PUSH_REGISTRATION_SENDERID_KEY);
+                        String currentGCPProjectID = parameters.get(ParameterKeys.PUSH_REGISTRATION_GCPPROJECTID_KEY);
 
                         parameters.set(ParameterKeys.PUSH_APP_VERSION_KEY, getAppVersion(), true);
 
@@ -878,10 +867,21 @@ private void emitRegistration(@NonNull Context context, @NonNull final Registrat
                             parameters.remove(ParameterKeys.PUSH_REGISTRATION_SENDERID_KEY);
                         }
 
+                        if (registration.gcpProjectID != null) {
+                            parameters.set(
+                                ParameterKeys.PUSH_REGISTRATION_GCPPROJECTID_KEY,
+                                registration.gcpProjectID,
+                                true
+                            );
+                        } else {
+                            parameters.remove(ParameterKeys.PUSH_REGISTRATION_GCPPROJECTID_KEY);
+                        }
+
                         if (
                             !registration.registrationID.equals(currentRegistrationID) ||
                             !registration.provider.equals(currentRegistrationProvider) ||
-                            !TextUtils.equals(registration.senderID, currentSenderID)
+                            !TextUtils.equals(registration.senderID, currentSenderID) ||
+                            !TextUtils.equals(registration.gcpProjectID, currentGCPProjectID)
                         ) {
                             WebserviceLauncher.launchPushWebservice(RuntimeManagerProvider.get(), registration);
                         }
diff --git a/Sources/sdk/src/main/java/com/batch/android/module/TrackerModule.java b/Sources/sdk/src/main/java/com/batch/android/module/TrackerModule.java
index 955e1f8..910b015 100644
--- a/Sources/sdk/src/main/java/com/batch/android/module/TrackerModule.java
+++ b/Sources/sdk/src/main/java/com/batch/android/module/TrackerModule.java
@@ -2,8 +2,6 @@
 
 import android.content.Context;
 import androidx.annotation.NonNull;
-import com.batch.android.AdvertisingID;
-import com.batch.android.Batch;
 import com.batch.android.FailReason;
 import com.batch.android.WebserviceLauncher;
 import com.batch.android.core.Logger;
@@ -292,25 +290,23 @@ public void trackCampaignView(@NonNull String campaignID, @NonNull JSONObject ev
      * Track the opt-in event
      *
      * @param context
-     * @param advertisingID
      * @throws JSONException
      */
-    void trackOptInEvent(final Context context, AdvertisingID advertisingID) throws JSONException {
-        track(InternalEvents.OPT_IN, makeOptBaseEventData(context, advertisingID));
+    void trackOptInEvent(final Context context) throws JSONException {
+        track(InternalEvents.OPT_IN, makeOptBaseEventData(context));
     }
 
     /**
      * Track the opt-out event
      *
      * @param context
-     * @param advertisingID
      * @param name
      * @return
      */
-    Promise<Void> trackOptOutEvent(final Context context, AdvertisingID advertisingID, String name) {
+    Promise<Void> trackOptOutEvent(final Context context, String name) {
         // iOS has debouncing, but is it really useful?
         try {
-            JSONObject data = makeOptBaseEventData(context, advertisingID);
+            JSONObject data = makeOptBaseEventData(context);
 
             final List<Event> eventsToSend = new ArrayList<>();
             eventsToSend.add(new Event(context, new Date().getTime(), name, data));
@@ -345,7 +341,7 @@ public void onFinish() {}
         }
     }
 
-    private JSONObject makeOptBaseEventData(Context context, AdvertisingID advertisingID) throws JSONException {
+    private JSONObject makeOptBaseEventData(Context context) throws JSONException {
         final JSONObject data = new JSONObject();
 
         Parameters params = ParametersProvider.get(context);
@@ -360,13 +356,9 @@ private JSONObject makeOptBaseEventData(Context context, AdvertisingID advertisi
             data.put("cus", customID);
         }
 
-        if (Batch.shouldUseAdvertisingID() && advertisingID != null && advertisingID.isNotNull()) {
-            try {
-                String idv = advertisingID.get();
-                if (idv != null) {
-                    data.put("idv", idv);
-                }
-            } catch (IllegalStateException ignored) {}
+        String attributionID = params.get(ParameterKeys.ATTRIBUTION_ID);
+        if (attributionID != null) {
+            data.put("idv", attributionID);
         }
 
         Registration reg = pushModule.getRegistration(context);
@@ -376,6 +368,9 @@ private JSONObject makeOptBaseEventData(Context context, AdvertisingID advertisi
             if (reg.senderID != null) {
                 data.put("senderid", reg.senderID);
             }
+            if (reg.gcpProjectID != null) {
+                data.put("gcpproject", reg.gcpProjectID);
+            }
         }
         return data;
     }
diff --git a/Sources/sdk/src/main/java/com/batch/android/push/FCMAbstractRegistrationProvider.java b/Sources/sdk/src/main/java/com/batch/android/push/FCMAbstractRegistrationProvider.java
index 4b3932f..779029e 100644
--- a/Sources/sdk/src/main/java/com/batch/android/push/FCMAbstractRegistrationProvider.java
+++ b/Sources/sdk/src/main/java/com/batch/android/push/FCMAbstractRegistrationProvider.java
@@ -2,25 +2,23 @@
 
 import android.content.Context;
 import android.text.TextUtils;
-import com.batch.android.AdsIdentifierProvider;
+import androidx.annotation.Nullable;
 import com.batch.android.PushRegistrationProvider;
 import com.batch.android.PushRegistrationProviderAvailabilityException;
-import com.batch.android.adsidentifier.GCMAdsIdentifierProvider;
 import com.batch.android.core.Logger;
 import com.batch.android.module.PushModule;
 import com.google.firebase.FirebaseApp;
 
 public abstract class FCMAbstractRegistrationProvider implements PushRegistrationProvider {
 
-    protected GCMAdsIdentifierProvider adsIdentifierProvider;
-    protected String senderID;
+    protected String senderID = null;
+    protected String fcmProjectID = null;
 
     FCMAbstractRegistrationProvider(Context context) {
-        this.senderID = fetchSenderID(context);
-        this.adsIdentifierProvider = new GCMAdsIdentifierProvider(context.getApplicationContext());
+        loadProjectInformation(context);
     }
 
-    public String fetchSenderID(Context context) {
+    public void loadProjectInformation(Context context) {
         try {
             FirebaseApp fbApp = FirebaseApp.getInstance();
             if (fbApp == null) {
@@ -28,7 +26,7 @@ public String fetchSenderID(Context context) {
                     PushModule.TAG,
                     "Could not register for FCM Push: Could not get a Firebase instance. Is your Firebase project configured?"
                 );
-                return null;
+                return;
             }
 
             String senderID = fbApp.getOptions().getGcmSenderId();
@@ -37,15 +35,19 @@ public String fetchSenderID(Context context) {
                     PushModule.TAG,
                     "Could not register for FCM Push: Could not get a Sender ID for this project. Are notifications well configured in the project's console and your google-services.json up to date?"
                 );
-                return null;
+                return;
             }
 
-            Logger.internal(PushModule.TAG, "Using FCM Sender ID from builtin configuration: " + senderID);
-            return senderID;
+            this.senderID = senderID;
+            this.fcmProjectID = fbApp.getOptions().getProjectId();
+
+            Logger.internal(
+                PushModule.TAG,
+                "Using FCM Sender ID from builtin configuration: " + senderID + ", Project ID: " + fcmProjectID
+            );
         } catch (NoClassDefFoundError | Exception e) {
             Logger.error(PushModule.TAG, "Could not register for FCM Push: Firebase has thrown an exception", e);
         }
-        return senderID;
     }
 
     @Override
@@ -53,6 +55,12 @@ public String getSenderID() {
         return senderID;
     }
 
+    @Nullable
+    @Override
+    public String getGCPProjectID() {
+        return fcmProjectID;
+    }
+
     @Override
     public void checkServiceAvailability() throws PushRegistrationProviderAvailabilityException {
         // We do nothing here because FCM is checked in the factory
@@ -81,11 +89,6 @@ public void checkLibraryAvailability() throws PushRegistrationProviderAvailabili
         }
     }
 
-    @Override
-    public AdsIdentifierProvider getAdsIdentifierProvider() {
-        return adsIdentifierProvider;
-    }
-
     private boolean isFirebaseCorePresent() {
         try {
             Class.forName("com.google.firebase.FirebaseApp");
diff --git a/Sources/sdk/src/main/java/com/batch/android/push/FCMInstanceIdRegistrationProvider.java b/Sources/sdk/src/main/java/com/batch/android/push/FCMInstanceIdRegistrationProvider.java
index 2616706..57ab531 100644
--- a/Sources/sdk/src/main/java/com/batch/android/push/FCMInstanceIdRegistrationProvider.java
+++ b/Sources/sdk/src/main/java/com/batch/android/push/FCMInstanceIdRegistrationProvider.java
@@ -22,17 +22,20 @@ public String getShortname() {
     }
 
     @Override
-    public String fetchSenderID(Context context) {
+    public void loadProjectInformation(Context context) {
+        super.loadProjectInformation(context);
+        // No FCM Project ID on legacy FCM Instance ID
+        this.fcmProjectID = null;
+
         int valueResource = MetaDataUtils.getIntMetaData(context, MetaDataUtils.MANIFEST_SENDER_ID_KEY);
         if (valueResource != -1) {
             String manifestSenderID = context.getString(valueResource);
             if (!TextUtils.isEmpty(manifestSenderID)) {
                 Logger.info(PushModule.TAG, "Using FCM Sender ID from manifest");
                 Logger.internal(PushModule.TAG, "Using FCM Sender ID from manifest: " + manifestSenderID);
-                return manifestSenderID;
+                this.senderID = manifestSenderID;
             }
         }
-        return super.fetchSenderID(context);
     }
 
     @Nullable
diff --git a/Sources/sdk/src/main/java/com/batch/android/push/GCMAbstractRegistrationProvider.java b/Sources/sdk/src/main/java/com/batch/android/push/GCMAbstractRegistrationProvider.java
index 868986c..d0ffc77 100644
--- a/Sources/sdk/src/main/java/com/batch/android/push/GCMAbstractRegistrationProvider.java
+++ b/Sources/sdk/src/main/java/com/batch/android/push/GCMAbstractRegistrationProvider.java
@@ -1,10 +1,8 @@
 package com.batch.android.push;
 
 import android.content.Context;
-import com.batch.android.AdsIdentifierProvider;
 import com.batch.android.PushRegistrationProvider;
 import com.batch.android.PushRegistrationProviderAvailabilityException;
-import com.batch.android.adsidentifier.GCMAdsIdentifierProvider;
 import com.batch.android.core.GenericHelper;
 import com.batch.android.core.GooglePlayServicesHelper;
 import com.batch.android.core.Logger;
@@ -15,15 +13,12 @@ public abstract class GCMAbstractRegistrationProvider implements PushRegistratio
 
     private static final String TAG = "GCMAbstractRegistrationProvider";
 
-    private GCMAdsIdentifierProvider adsIdentifierProvider;
-
     protected Context context;
     protected String senderID;
 
     GCMAbstractRegistrationProvider(Context c, String senderID) {
         this.context = c.getApplicationContext();
         this.senderID = senderID;
-        this.adsIdentifierProvider = new GCMAdsIdentifierProvider(this.context);
     }
 
     @Override
@@ -76,11 +71,6 @@ public void checkLibraryAvailability() throws PushRegistrationProviderAvailabili
         }
     }
 
-    @Override
-    public AdsIdentifierProvider getAdsIdentifierProvider() {
-        return adsIdentifierProvider;
-    }
-
     protected abstract Integer getGMSAvailability();
 
     private boolean isReceivePermissionAvailable() {
diff --git a/Sources/sdk/src/main/java/com/batch/android/push/PushRegistrationProviderFactory.java b/Sources/sdk/src/main/java/com/batch/android/push/PushRegistrationProviderFactory.java
index 57b8b9b..d8cf11d 100644
--- a/Sources/sdk/src/main/java/com/batch/android/push/PushRegistrationProviderFactory.java
+++ b/Sources/sdk/src/main/java/com/batch/android/push/PushRegistrationProviderFactory.java
@@ -77,9 +77,6 @@ public PushRegistrationProvider getRegistrationProvider() {
          * Thus, looking at the manifest to take this decision isn't the Provider's responsibility, but this Factory's.
          * To avoid unnecessary work, providers assume that they have been instantiated through this factory,
          * and will not check the manifest for their receiver.
-         *
-         * Note that the advertising identifier will be provided by the same provider than push,
-         * for consistency.
          */
 
         Logger.internal(TAG, "Determining which registration provider to use...");
diff --git a/Sources/sdk/src/main/java/com/batch/android/push/Registration.java b/Sources/sdk/src/main/java/com/batch/android/push/Registration.java
index d195eb3..5fc78dd 100644
--- a/Sources/sdk/src/main/java/com/batch/android/push/Registration.java
+++ b/Sources/sdk/src/main/java/com/batch/android/push/Registration.java
@@ -14,9 +14,18 @@ public class Registration {
     @Nullable
     public String senderID;
 
-    public Registration(@NonNull String provider, @NonNull String registrationID, @Nullable String senderID) {
+    @Nullable
+    public String gcpProjectID;
+
+    public Registration(
+        @NonNull String provider,
+        @NonNull String registrationID,
+        @Nullable String senderID,
+        @Nullable String gcpProjectID
+    ) {
         this.provider = provider;
         this.registrationID = registrationID;
         this.senderID = senderID;
+        this.gcpProjectID = gcpProjectID;
     }
 }
diff --git a/Sources/sdk/src/main/java/com/batch/android/query/PushQuery.java b/Sources/sdk/src/main/java/com/batch/android/query/PushQuery.java
index 657387b..fb3ccb2 100644
--- a/Sources/sdk/src/main/java/com/batch/android/query/PushQuery.java
+++ b/Sources/sdk/src/main/java/com/batch/android/query/PushQuery.java
@@ -38,6 +38,7 @@ public JSONObject toJSON() throws JSONException {
         obj.put("tok", registration.registrationID);
         obj.put("provider", registration.provider);
         obj.put("senderid", registration.senderID != null ? registration.senderID : JSONObject.NULL);
+        obj.put("gcpprojectid", registration.gcpProjectID != null ? registration.gcpProjectID : JSONObject.NULL);
         obj.put("nty", getNotificationType());
 
         return obj;
diff --git a/Sources/sdk/src/test/java/com/batch/android/BatchMessagingWebViewJavascriptBridgeTest.kt b/Sources/sdk/src/test/java/com/batch/android/BatchMessagingWebViewJavascriptBridgeTest.kt
index 5e5e6b2..3462505 100644
--- a/Sources/sdk/src/test/java/com/batch/android/BatchMessagingWebViewJavascriptBridgeTest.kt
+++ b/Sources/sdk/src/test/java/com/batch/android/BatchMessagingWebViewJavascriptBridgeTest.kt
@@ -53,10 +53,7 @@ class BatchMessagingWebViewJavascriptBridgeTest {
 
         assertBridgeResult(MockingBridge.Expectations.advertisingID, bridge.get("getAttributionID"))
         bridge.shouldReturnAdvertisingID = false
-        assertBridgeError(bridge.get("getAttributionID"))
-        bridge.shouldReturnAdvertisingID = true
-        bridge.batchConfigAllowsAdvertisingID = false
-        assertBridgeError(bridge.get("getAttributionID"))
+        assertBridgeResult(null, bridge.get("getAttributionID"))
     }
 
     @Test
@@ -192,16 +189,13 @@ class MockingBridge(context: Context, message: BatchMessage?, actionListener: We
         return null
     }
 
-    override fun isAdvertisingIDAllowedByConfig(): Boolean {
-        return batchConfigAllowsAdvertisingID
-    }
-
-    override fun getAdvertisingIDValue(): String? {
+    override fun getAttributionID(): String? {
         if (shouldReturnAdvertisingID) {
             return Expectations.advertisingID
         }
         return null
     }
+
 }
 
 class MockMessage(val payload: JSONObject) : BatchMessage() {
diff --git a/Sources/sdk/src/test/java/com/batch/android/BatchUserTest.java b/Sources/sdk/src/test/java/com/batch/android/BatchUserTest.java
index 84f42c8..eda0877 100644
--- a/Sources/sdk/src/test/java/com/batch/android/BatchUserTest.java
+++ b/Sources/sdk/src/test/java/com/batch/android/BatchUserTest.java
@@ -5,6 +5,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.eq;
 
 import android.content.Context;
 import androidx.test.core.app.ApplicationProvider;
@@ -14,7 +15,10 @@
 import com.batch.android.di.DITest;
 import com.batch.android.di.DITestUtils;
 import com.batch.android.di.providers.RuntimeManagerProvider;
+import com.batch.android.event.InternalEvents;
+import com.batch.android.json.JSONException;
 import com.batch.android.json.JSONObject;
+import com.batch.android.module.TrackerModule;
 import com.batch.android.module.UserModule;
 import com.batch.android.user.EmailSubscription;
 import com.batch.android.user.UserOperationQueue;
@@ -31,6 +35,7 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mockito;
 import org.powermock.reflect.Whitebox;
 
 @RunWith(AndroidJUnit4.class)
@@ -103,6 +108,21 @@ public void testCustomID() throws Exception {
         assertNull(user.getCustomID());
     }
 
+    @Test
+    public void testAttributionID() {
+        User user = new User(context);
+
+        assertNull(user.getAttributionID());
+
+        user.setAttributionID("abcd");
+
+        assertEquals("abcd", user.getAttributionID());
+
+        user.setAttributionID(null);
+
+        assertNull(user.getAttributionID());
+    }
+
     @Test
     public void testProfileVersionCustomID() throws Exception {
         BatchUserProfile user = Batch.getUserProfile();
@@ -363,6 +383,48 @@ public void testSetEmail() {
         editor.save();
     }
 
+    @Test
+    public void testSetAttributionIdentifierEvent() throws JSONException {
+        TrackerModule trackerModule = DITestUtils.mockSingletonDependency(TrackerModule.class, null);
+        Whitebox.setInternalState(Batch.class, "user", new User(context));
+
+        // Ensure attribution id is not valid
+        JSONObject mockParamEvent = new JSONObject();
+        mockParamEvent.put("attribution_id", "abcd");
+        editor.setAttributionIdentifier("abcd").saveSync();
+        Mockito
+            .verify(trackerModule, Mockito.never())
+            .track(eq(InternalEvents.ATTRIBUTION_ID_CHANGED), JSONObjectMockitoMatcher.eq(mockParamEvent));
+
+        // Ensure attribution id is valid and event sent
+        mockParamEvent.put("attribution_id", "cdda802e-fb9c-47ad-9866-0794d394c912");
+        editor.setAttributionIdentifier("cdda802e-fb9c-47ad-9866-0794d394c912").saveSync();
+        Mockito
+            .verify(trackerModule)
+            .track(eq(InternalEvents.ATTRIBUTION_ID_CHANGED), JSONObjectMockitoMatcher.eq(mockParamEvent));
+
+        // Ensure event is not sent when value did not changed
+        mockParamEvent.put("attribution_id", "cdda802e-fb9c-47ad-9866-0794d394c912");
+        editor.setAttributionIdentifier("cdda802e-fb9c-47ad-9866-0794d394c912").saveSync();
+        Mockito
+            .verify(trackerModule)
+            .track(eq(InternalEvents.ATTRIBUTION_ID_CHANGED), JSONObjectMockitoMatcher.eq(mockParamEvent));
+
+        // Ensure event is sent when value is an oaid
+        mockParamEvent.put("attribution_id", "736ada07-7697-4895-a2b8-0228d23067c7");
+        editor.setAttributionIdentifier("736ada07-7697-4895-a2b8-0228d23067c7").saveSync();
+        Mockito
+            .verify(trackerModule)
+            .track(eq(InternalEvents.ATTRIBUTION_ID_CHANGED), JSONObjectMockitoMatcher.eq(mockParamEvent));
+
+        // Ensure we send null
+        mockParamEvent.put("attribution_id", JSONObject.NULL);
+        editor.setAttributionIdentifier(null).saveSync();
+        Mockito
+            .verify(trackerModule)
+            .track(eq(InternalEvents.ATTRIBUTION_ID_CHANGED), JSONObjectMockitoMatcher.eq(mockParamEvent));
+    }
+
     @Test
     public void testSetEmailSubscription() {
         editor.setEmailMarketingSubscriptionState(BatchEmailSubscriptionState.SUBSCRIBED);
diff --git a/Sources/sdk/src/test/java/com/batch/android/ParamsOptoutTest.java b/Sources/sdk/src/test/java/com/batch/android/ParamsOptoutTest.java
deleted file mode 100644
index d302db9..0000000
--- a/Sources/sdk/src/test/java/com/batch/android/ParamsOptoutTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package com.batch.android;
-
-import android.app.Activity;
-import android.content.Context;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
-import androidx.test.rule.ActivityTestRule;
-import com.batch.android.json.JSONObject;
-import java.net.MalformedURLException;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Test opt-out of sensible parameters
- *
- */
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class ParamsOptoutTest {
-
-    private static final String apiKey = "apiKey";
-
-    @Rule
-    public ActivityTestRule<TestActivity> activityRule = new ActivityTestRule<>(TestActivity.class, false, true);
-
-    /**
-     * Reference of the activity context
-     */
-    private Activity activity;
-
-    // ----------------------------------------->
-
-    @Before
-    public void setUp() throws Exception {
-        /*
-        activity = activityRule.getActivity();
-
-        Batch.setConfig(new Config(apiKey).setCanUseAdvertisingID(false).setCanUseAndroidID(false));
-        Batch.onStart(activity); */// FIXME
-    }
-
-    // ------------------------------------------>
-
-    /**
-     * Test opt-out of androidid
-     *
-     * @throws Exception
-     */
-    @Test
-    public void testAndroidIDOptout() throws Exception {
-        /*JSONObject params = new TestWebservice(activity).getPostData().getJSONObject("ids");
-
-		assertFalse(params.has(SystemParameterShortName.ANDROID_ID.shortName));
-		assertTrue(params.isNull(SystemParameterShortName.ANDROID_ID.shortName));
-
-		params = new TestWebservice(activity).getPostData();
-		
-		assertFalse(params.has(SystemParameterShortName.ANDROID_ID.shortName));	*///FIXME repair that test
-    }
-
-    /**
-     * Test opt-out of advertising id
-     *
-     * @throws Exception
-     */
-    @Test
-    public void testAdvertisingIDOptout() throws Exception {
-        /*Thread.sleep(2000); // Wait for Advertising ID to popup
-		
-		JSONObject params = new TestWebservice(activity).getPostData().getJSONObject("ids");
-		
-		assertFalse(params.has(SystemParameterShortName.ADVERTISING_ID.shortName));
-		assertTrue(params.isNull(SystemParameterShortName.ADVERTISING_ID.shortName));
-
-		params = new TestWebservice(activity).getPostData();
-		
-		assertFalse(params.has(SystemParameterShortName.ADVERTISING_ID.shortName));*///FIXME repair that test
-    }
-
-    // --------------------------------------------->
-
-    public static class TestWebservice extends BatchWebservice {
-
-        public TestWebservice(Context context) throws MalformedURLException {
-            super(context, RequestType.POST, "http://test.com/");
-        }
-
-        public JSONObject getPostData() {
-            return super.getPostDataProvider().getRawData();
-        }
-
-        // ----------------------------------------------->
-
-        @Override
-        protected String getPropertyParameterKey() {
-            return null;
-        }
-
-        @Override
-        protected String getURLSorterPatternParameterKey() {
-            return null;
-        }
-
-        @Override
-        protected String getCryptorTypeParameterKey() {
-            return null;
-        }
-
-        @Override
-        protected String getCryptorModeParameterKey() {
-            return null;
-        }
-
-        @Override
-        protected String getPostCryptorTypeParameterKey() {
-            return null;
-        }
-
-        @Override
-        protected String getReadCryptorTypeParameterKey() {
-            return null;
-        }
-
-        @Override
-        protected String getSpecificConnectTimeoutKey() {
-            return null;
-        }
-
-        @Override
-        protected String getSpecificReadTimeoutKey() {
-            return null;
-        }
-
-        @Override
-        protected String getSpecificRetryCountKey() {
-            return null;
-        }
-    }
-}
diff --git a/proguard-mappings/1.21.0/checksum.sha b/proguard-mappings/1.21.0/checksum.sha
new file mode 100644
index 0000000..4202062
--- /dev/null
+++ b/proguard-mappings/1.21.0/checksum.sha
@@ -0,0 +1 @@
+09abd3a65646a044c749618c7c31c4651e0f04fa  public-sdk/Batch.aar
diff --git a/proguard-mappings/1.21.0/mapping.txt b/proguard-mappings/1.21.0/mapping.txt
new file mode 100644
index 0000000..f373e7a
--- /dev/null
+++ b/proguard-mappings/1.21.0/mapping.txt
@@ -0,0 +1,9840 @@
+# compiler: R8
+# compiler_version: 8.0.46
+# common_typos_disable
+# {"id":"com.android.tools.r8.mapping","version":"2.1"}
+# pg_map_id: 21adac4
+# pg_map_hash: SHA-256 21adac4236d8126dc74f993ccc21067d6808d69a909964bda1d392314109f00c
+com.batch.android.AdsIdentifierProvider -> com.batch.android.AdsIdentifierProvider:
+# {"id":"sourceFile","fileName":"AdsIdentifierProvider.java"}
+com.batch.android.AdsIdentifierProvider$AdsIdentifierListener -> com.batch.android.AdsIdentifierProvider$AdsIdentifierListener:
+# {"id":"sourceFile","fileName":"AdsIdentifierProvider.java"}
+com.batch.android.AdsIdentifierProviderAvailabilityException -> com.batch.android.AdsIdentifierProviderAvailabilityException:
+# {"id":"sourceFile","fileName":"AdsIdentifierProviderAvailabilityException.java"}
+    1:1:void <init>(java.lang.String):14:14 -> <init>
+com.batch.android.AdvertisingID -> com.batch.android.a.a:
+# {"id":"sourceFile","fileName":"AdvertisingID.java"}
+    1:1:void <init>():19:19 -> <init>
+    java.lang.String get() -> a
+    boolean isLimited() -> b
+    boolean isNotNull() -> c
+    boolean isReady() -> d
+com.batch.android.AttributesCheckWebservice -> com.batch.android.a:
+# {"id":"sourceFile","fileName":"AttributesCheckWebservice.java"}
+    java.lang.String TAG -> v
+    com.batch.android.webservice.listener.AttributesCheckWebserviceListener listener -> u
+    long version -> s
+    java.lang.String transactionID -> t
+    1:16:void <init>(android.content.Context,long,java.lang.String,com.batch.android.webservice.listener.AttributesCheckWebserviceListener):51:66 -> <init>
+    17:17:void <init>(android.content.Context,long,java.lang.String,com.batch.android.webservice.listener.AttributesCheckWebserviceListener):61:61 -> <init>
+    18:18:void <init>(android.content.Context,long,java.lang.String,com.batch.android.webservice.listener.AttributesCheckWebserviceListener):57:57 -> <init>
+    19:19:void <init>(android.content.Context,long,java.lang.String,com.batch.android.webservice.listener.AttributesCheckWebserviceListener):53:53 -> <init>
+    1:1:java.lang.String getSpecificConnectTimeoutKey():180:180 -> A
+    1:1:java.lang.String getSpecificReadTimeoutKey():185:185 -> B
+    1:1:java.lang.String getSpecificRetryCountKey():190:190 -> C
+    1:1:java.lang.String getURLSorterPatternParameterKey():155:155 -> F
+    1:1:java.lang.String getPropertyParameterKey():150:150 -> H
+    1:3:java.util.List getQueries():73:75 -> I
+    1:1:java.lang.String getTaskIdentifier():143:143 -> a
+    1:1:java.lang.String getCryptorModeParameterKey():165:165 -> o
+    1:1:java.lang.String getCryptorTypeParameterKey():160:160 -> p
+    1:52:void run():83:134 -> run
+    53:53:void run():128:128 -> run
+    54:68:void run():94:108 -> run
+    69:69:void run():105:105 -> run
+    70:70:void run():102:102 -> run
+    71:109:void run():99:137 -> run
+    1:1:java.lang.String getPostCryptorTypeParameterKey():170:170 -> v
+    1:1:java.lang.String getReadCryptorTypeParameterKey():175:175 -> y
+com.batch.android.AttributesCheckWebservice$1 -> com.batch.android.a$a:
+# {"id":"sourceFile","fileName":"AttributesCheckWebservice.java"}
+    int[] $SwitchMap$com$batch$android$core$Webservice$WebserviceError$Reason -> a
+    1:1:void <clinit>():97:97 -> <clinit>
+com.batch.android.AttributesSendWebservice -> com.batch.android.b:
+# {"id":"sourceFile","fileName":"AttributesSendWebservice.java"}
+    java.lang.String TAG -> w
+    java.util.Map attributes -> t
+    com.batch.android.webservice.listener.AttributesSendWebserviceListener listener -> v
+    long version -> s
+    java.util.Map tags -> u
+    1:21:void <init>(android.content.Context,long,java.util.Map,java.util.Map,com.batch.android.webservice.listener.AttributesSendWebserviceListener):58:78 -> <init>
+    22:22:void <init>(android.content.Context,long,java.util.Map,java.util.Map,com.batch.android.webservice.listener.AttributesSendWebserviceListener):72:72 -> <init>
+    23:23:void <init>(android.content.Context,long,java.util.Map,java.util.Map,com.batch.android.webservice.listener.AttributesSendWebserviceListener):68:68 -> <init>
+    24:24:void <init>(android.content.Context,long,java.util.Map,java.util.Map,com.batch.android.webservice.listener.AttributesSendWebserviceListener):64:64 -> <init>
+    25:25:void <init>(android.content.Context,long,java.util.Map,java.util.Map,com.batch.android.webservice.listener.AttributesSendWebserviceListener):60:60 -> <init>
+    1:1:java.lang.String getSpecificConnectTimeoutKey():189:189 -> A
+    1:1:java.lang.String getSpecificReadTimeoutKey():194:194 -> B
+    1:1:java.lang.String getSpecificRetryCountKey():199:199 -> C
+    1:1:java.lang.String getURLSorterPatternParameterKey():164:164 -> F
+    1:1:java.lang.String getPropertyParameterKey():159:159 -> H
+    1:3:java.util.List getQueries():85:87 -> I
+    1:1:java.lang.String getTaskIdentifier():152:152 -> a
+    1:1:java.lang.String getCryptorModeParameterKey():174:174 -> o
+    1:1:java.lang.String getCryptorTypeParameterKey():169:169 -> p
+    1:49:void run():95:143 -> run
+    50:50:void run():137:137 -> run
+    51:65:void run():106:120 -> run
+    66:66:void run():117:117 -> run
+    67:67:void run():114:114 -> run
+    68:103:void run():111:146 -> run
+    1:1:java.lang.String getPostCryptorTypeParameterKey():179:179 -> v
+    1:1:java.lang.String getReadCryptorTypeParameterKey():184:184 -> y
+com.batch.android.AttributesSendWebservice$1 -> com.batch.android.b$a:
+# {"id":"sourceFile","fileName":"AttributesSendWebservice.java"}
+    int[] $SwitchMap$com$batch$android$core$Webservice$WebserviceError$Reason -> a
+    1:1:void <clinit>():109:109 -> <clinit>
+com.batch.android.Batch -> com.batch.android.Batch:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    java.lang.String sessionID -> g
+    android.content.Intent newIntent -> e
+    com.batch.android.User user -> c
+    com.batch.android.core.ExcludedActivityHelper excludedActivityHelper -> f
+    com.batch.android.module.BatchModule moduleMaster -> i
+    android.content.BroadcastReceiver receiver -> d
+    com.batch.android.Config config -> a
+    boolean didLogOptOutWarning -> h
+    com.batch.android.Install install -> b
+    1:66:void <clinit>():106:171 -> <clinit>
+    1:1:void <init>():176:176 -> <init>
+    1:1:void manageUpdate(java.lang.String,java.lang.String):0:0 -> a
+    2:2:com.batch.android.Install access$000():77:77 -> a
+    3:4:void lambda$getAPIKey$0(java.lang.StringBuilder,com.batch.android.runtime.State):189:190 -> a
+    5:12:com.batch.android.runtime.State lambda$setConfig$1(com.batch.android.Config,com.batch.android.runtime.State):241:248 -> a
+    13:14:void lambda$getLoggerLevel$4(java.util.concurrent.atomic.AtomicReference,com.batch.android.runtime.State):327:328 -> a
+    15:23:void _optOut(android.content.Context,boolean,com.batch.android.BatchOptOutResultListener):496:504 -> a
+    24:24:void _optOut(android.content.Context,boolean,com.batch.android.BatchOptOutResultListener):492:492 -> a
+    25:28:void lambda$_optOut$6(android.content.Context,java.lang.Void):499:502 -> a
+    29:29:void lambda$_optOut$7(com.batch.android.BatchOptOutResultListener,java.lang.Exception):506:506 -> a
+    30:396:void doBatchStart(android.content.Context,boolean,boolean):2015:2381 -> a
+    397:671:com.batch.android.runtime.State lambda$doBatchStart$8(com.batch.android.runtime.RuntimeManager,boolean,android.content.Context,boolean,java.util.concurrent.atomic.AtomicBoolean,java.lang.StringBuilder,com.batch.android.runtime.State):2022:2296 -> a
+    672:702:com.batch.android.runtime.State lambda$doBatchStart$8(com.batch.android.runtime.RuntimeManager,boolean,android.content.Context,boolean,java.util.concurrent.atomic.AtomicBoolean,java.lang.StringBuilder,com.batch.android.runtime.State):2294:2324 -> a
+    703:720:com.batch.android.runtime.State lambda$doBatchStart$8(com.batch.android.runtime.RuntimeManager,boolean,android.content.Context,boolean,java.util.concurrent.atomic.AtomicBoolean,java.lang.StringBuilder,com.batch.android.runtime.State):2323:2340 -> a
+    721:722:void lambda$doBatchStart$9(com.batch.android.runtime.RuntimeManager,java.util.concurrent.atomic.AtomicBoolean,java.lang.StringBuilder,boolean,com.batch.android.runtime.State):2360:2361 -> a
+    723:723:void lambda$doBatchStart$9(com.batch.android.runtime.RuntimeManager,java.util.concurrent.atomic.AtomicBoolean,java.lang.StringBuilder,boolean,com.batch.android.runtime.State):2358:2358 -> a
+    724:788:com.batch.android.runtime.State lambda$onStop$10(boolean,android.content.Context,boolean,com.batch.android.runtime.State):2400:2464 -> a
+    789:789:com.batch.android.runtime.State lambda$onStop$10(boolean,android.content.Context,boolean,com.batch.android.runtime.State):2452:2452 -> a
+    790:790:void lambda$onWebserviceExecutorWorkFinished$11(java.util.concurrent.atomic.AtomicBoolean,com.batch.android.runtime.State):2487:2487 -> a
+    791:802:com.batch.android.runtime.State lambda$doStop$12(com.batch.android.runtime.State):2509:2520 -> a
+    1:1:void access$100():77:77 -> b
+    2:3:void lambda$shouldUseAdvancedDeviceInformation$2(java.util.concurrent.atomic.AtomicBoolean,com.batch.android.runtime.State):277:278 -> b
+    4:5:void lambda$getSessionID$5(java.lang.StringBuilder,com.batch.android.runtime.State):346:347 -> b
+    6:84:void onStop(android.content.Context,boolean,boolean):2396:2474 -> b
+    1:1:void access$200():77:77 -> c
+    2:3:void lambda$shouldUseGoogleInstanceID$3(java.util.concurrent.atomic.AtomicBoolean,com.batch.android.runtime.State):297:298 -> c
+    1:1:void copyBatchExtras(android.content.Intent,android.content.Intent):384:384 -> copyBatchExtras
+    2:2:void copyBatchExtras(android.os.Bundle,android.os.Bundle):397:397 -> copyBatchExtras
+    1:3:void clearCachedInstallData():2543:2545 -> d
+    1:22:void doStop():2505:2526 -> e
+    com.batch.android.AdvertisingID getAdvertisingID() -> f
+    1:1:com.batch.android.Install getInstall():2567:2567 -> g
+    1:11:java.lang.String getAPIKey():185:195 -> getAPIKey
+    1:1:java.lang.String getBroadcastPermissionName(android.content.Context):407:407 -> getBroadcastPermissionName
+    1:10:com.batch.android.LoggerLevel getLoggerLevel():323:332 -> getLoggerLevel
+    1:12:java.lang.String getSessionID():341:352 -> getSessionID
+    1:9:com.batch.android.BatchUserProfile getUserProfile():216:224 -> getUserProfile
+    1:1:com.batch.android.User getUser():2576:2576 -> h
+    1:10:void onWebserviceExecutorWorkFinished():2484:2493 -> i
+    1:1:boolean isOptedOut(android.content.Context):539:539 -> isOptedOut
+    2:2:boolean isOptedOut(android.content.Context):537:537 -> isOptedOut
+    1:3:boolean isRunningInDevMode():367:369 -> isRunningInDevMode
+    1:23:void updateVersionManagement():2586:2608 -> j
+    1:3:void onCreate(android.app.Activity):1926:1928 -> onCreate
+    1:1:void onDestroy(android.app.Activity):2008:2008 -> onDestroy
+    1:2:void onNewIntent(android.app.Activity,android.content.Intent):1987:1988 -> onNewIntent
+    1:1:void onServiceCreate(android.content.Context,boolean):1966:1966 -> onServiceCreate
+    1:1:void onServiceDestroy(android.content.Context):1977:1977 -> onServiceDestroy
+    1:1:void onStart(android.app.Activity):1945:1945 -> onStart
+    1:1:void onStop(android.app.Activity):1998:1998 -> onStop
+    1:1:void optIn(android.content.Context):526:526 -> optIn
+    2:2:void optIn(android.content.Context):524:524 -> optIn
+    1:1:void optOut(android.content.Context):433:433 -> optOut
+    2:2:void optOut(android.content.Context,com.batch.android.BatchOptOutResultListener):449:449 -> optOut
+    1:1:void optOutAndWipeData(android.content.Context):463:463 -> optOutAndWipeData
+    2:2:void optOutAndWipeData(android.content.Context,com.batch.android.BatchOptOutResultListener):482:482 -> optOutAndWipeData
+    1:2:void setConfig(com.batch.android.Config):239:240 -> setConfig
+    1:1:void setFindMyInstallationEnabled(boolean):551:551 -> setFindMyInstallationEnabled
+    1:10:boolean shouldUseAdvancedDeviceInformation():273:282 -> shouldUseAdvancedDeviceInformation
+    1:10:boolean shouldUseGoogleInstanceID():293:302 -> shouldUseGoogleInstanceID
+com.batch.android.Batch$1 -> com.batch.android.Batch$a:
+# {"id":"sourceFile","fileName":"Batch.java"}
+com.batch.android.Batch$Actions -> com.batch.android.Batch$Actions:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    1:1:void <init>():1845:1845 -> <init>
+    1:1:void addDrawableAlias(java.lang.String,int):1885:1885 -> addDrawableAlias
+    1:1:boolean performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject):1902:1902 -> performAction
+    1:1:void register(com.batch.android.UserAction):1857:1857 -> register
+    1:1:void setDeeplinkInterceptor(com.batch.android.BatchDeeplinkInterceptor):1911:1911 -> setDeeplinkInterceptor
+    1:1:void unregister(java.lang.String):1869:1869 -> unregister
+com.batch.android.Batch$Debug -> com.batch.android.Batch$Debug:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    1:1:void <init>():562:562 -> <init>
+    1:2:void startDebugActivity(android.content.Context):573:574 -> startDebugActivity
+com.batch.android.Batch$EventDispatcher -> com.batch.android.Batch$EventDispatcher:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    1:1:void <init>():1149:1149 -> <init>
+    1:1:void addDispatcher(com.batch.android.BatchEventDispatcher):1158:1158 -> addDispatcher
+    1:1:boolean removeDispatcher(com.batch.android.BatchEventDispatcher):1167:1167 -> removeDispatcher
+com.batch.android.Batch$EventDispatcher$Payload -> com.batch.android.Batch$EventDispatcher$Payload:
+# {"id":"sourceFile","fileName":"Batch.java"}
+com.batch.android.Batch$EventDispatcher$Type -> com.batch.android.Batch$EventDispatcher$Type:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    com.batch.android.Batch$EventDispatcher$Type[] $VALUES -> a
+    1:9:void <clinit>():1176:1184 -> <clinit>
+    10:10:void <clinit>():1174:1174 -> <clinit>
+    1:1:void <init>(java.lang.String,int):1175:1175 -> <init>
+    1:1:com.batch.android.Batch$EventDispatcher$Type[] $values():1174:1174 -> a
+    1:1:boolean isMessagingEvent():1191:1191 -> isMessagingEvent
+    1:1:boolean isNotificationEvent():1187:1187 -> isNotificationEvent
+    1:1:com.batch.android.Batch$EventDispatcher$Type valueOf(java.lang.String):1174:1174 -> valueOf
+    1:1:com.batch.android.Batch$EventDispatcher$Type[] values():1174:1174 -> values
+com.batch.android.Batch$Inbox -> com.batch.android.Batch$Inbox:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    1:1:void <init>():586:586 -> <init>
+    1:2:com.batch.android.BatchInboxFetcher getFetcher(android.content.Context):600:601 -> getFetcher
+    3:3:com.batch.android.BatchInboxFetcher getFetcher(android.content.Context):598:598 -> getFetcher
+    4:4:com.batch.android.BatchInboxFetcher getFetcher(android.content.Context,java.lang.String,java.lang.String):622:622 -> getFetcher
+    5:5:com.batch.android.BatchInboxFetcher getFetcher(android.content.Context,java.lang.String,java.lang.String):620:620 -> getFetcher
+    6:6:com.batch.android.BatchInboxFetcher getFetcher(java.lang.String,java.lang.String):637:637 -> getFetcher
+com.batch.android.Batch$InternalBroadcastReceiver -> com.batch.android.Batch$b:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    1:1:void <init>():2620:2620 -> <init>
+    2:2:void <init>(com.batch.android.Batch$1):2620:2620 -> <init>
+    1:12:void onReceive(android.content.Context,android.content.Intent):2628:2639 -> onReceive
+    13:13:void onReceive(android.content.Context,android.content.Intent):2636:2636 -> onReceive
+com.batch.android.Batch$Messaging -> com.batch.android.Batch$Messaging:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    1:1:void <init>():1519:1519 -> <init>
+    1:1:boolean hasPendingMessage():1821:1821 -> hasPendingMessage
+    1:1:boolean isDoNotDisturbEnabled():1812:1812 -> isDoNotDisturbEnabled
+    1:1:com.batch.android.BatchBannerView loadBanner(android.content.Context,com.batch.android.BatchMessage):1762:1762 -> loadBanner
+    1:1:androidx.fragment.app.DialogFragment loadFragment(android.content.Context,com.batch.android.BatchMessage):1743:1743 -> loadFragment
+    1:1:com.batch.android.BatchMessage popPendingMessage():1834:1834 -> popPendingMessage
+    1:1:void setAutomaticMode(boolean):1697:1697 -> setAutomaticMode
+    1:1:void setDoNotDisturbEnabled(boolean):1805:1805 -> setDoNotDisturbEnabled
+    1:1:void setLifecycleListener(com.batch.android.Batch$Messaging$LifecycleListener):1719:1719 -> setLifecycleListener
+    1:1:void setShowForegroundLandings(boolean):1686:1686 -> setShowForegroundLandings
+    1:1:void setTypefaceOverride(android.graphics.Typeface,android.graphics.Typeface):1710:1710 -> setTypefaceOverride
+    1:1:void show(android.content.Context,com.batch.android.BatchMessage):1785:1785 -> show
+    2:2:void show(android.content.Context,com.batch.android.BatchMessage):1783:1783 -> show
+    3:3:void show(android.content.Context,com.batch.android.BatchMessage):1780:1780 -> show
+com.batch.android.Batch$Messaging$DisplayHint -> com.batch.android.Batch$Messaging$DisplayHint:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    com.batch.android.Batch$Messaging$DisplayHintStrategy strategy -> a
+    android.view.View view -> b
+    1:3:void <init>(android.view.View,com.batch.android.Batch$Messaging$DisplayHintStrategy):1641:1643 -> <init>
+    1:1:com.batch.android.Batch$Messaging$DisplayHint embed(android.widget.FrameLayout):1669:1669 -> embed
+    2:2:com.batch.android.Batch$Messaging$DisplayHint embed(android.widget.FrameLayout):1666:1666 -> embed
+    1:1:com.batch.android.Batch$Messaging$DisplayHint findUsingView(android.view.View):1656:1656 -> findUsingView
+    2:2:com.batch.android.Batch$Messaging$DisplayHint findUsingView(android.view.View):1653:1653 -> findUsingView
+com.batch.android.Batch$Messaging$DisplayHintProvider -> com.batch.android.Batch$Messaging$DisplayHintProvider:
+# {"id":"sourceFile","fileName":"Batch.java"}
+com.batch.android.Batch$Messaging$DisplayHintStrategy -> com.batch.android.Batch$Messaging$a:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    com.batch.android.Batch$Messaging$DisplayHintStrategy EMBED -> b
+    com.batch.android.Batch$Messaging$DisplayHintStrategy[] $VALUES -> c
+    com.batch.android.Batch$Messaging$DisplayHintStrategy TRANSVERSE_HIERARCHY -> a
+    1:2:void <clinit>():1626:1627 -> <clinit>
+    3:3:void <clinit>():1625:1625 -> <clinit>
+    1:1:void <init>(java.lang.String,int):1625:1625 -> <init>
+    1:1:com.batch.android.Batch$Messaging$DisplayHintStrategy[] $values():1625:1625 -> a
+    1:1:com.batch.android.Batch$Messaging$DisplayHintStrategy valueOf(java.lang.String):1625:1625 -> valueOf
+    1:1:com.batch.android.Batch$Messaging$DisplayHintStrategy[] values():1625:1625 -> values
+com.batch.android.Batch$Messaging$LifecycleListener -> com.batch.android.Batch$Messaging$LifecycleListener:
+# {"id":"sourceFile","fileName":"Batch.java"}
+com.batch.android.Batch$Messaging$LifecycleListener2 -> com.batch.android.Batch$Messaging$LifecycleListener2:
+# {"id":"sourceFile","fileName":"Batch.java"}
+com.batch.android.Batch$Push -> com.batch.android.Batch$Push:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    1:1:void <init>():649:649 -> <init>
+    1:1:void appendBatchData(android.content.Intent,android.content.Intent):817:817 -> appendBatchData
+    2:2:void appendBatchData(android.os.Bundle,android.content.Intent):828:828 -> appendBatchData
+    3:3:void appendBatchData(com.google.firebase.messaging.RemoteMessage,android.content.Intent):839:839 -> appendBatchData
+    1:1:void dismissNotifications():730:730 -> dismissNotifications
+    1:1:void displayNotification(android.content.Context,android.content.Intent):1003:1003 -> displayNotification
+    2:2:void displayNotification(android.content.Context,android.content.Intent,boolean):1014:1014 -> displayNotification
+    3:3:void displayNotification(android.content.Context,android.content.Intent,com.batch.android.BatchNotificationInterceptor):1029:1029 -> displayNotification
+    4:4:void displayNotification(android.content.Context,android.content.Intent,com.batch.android.BatchNotificationInterceptor,boolean):1047:1047 -> displayNotification
+    5:5:void displayNotification(android.content.Context,com.google.firebase.messaging.RemoteMessage):1054:1054 -> displayNotification
+    6:6:void displayNotification(android.content.Context,com.google.firebase.messaging.RemoteMessage,com.batch.android.BatchNotificationInterceptor):1066:1066 -> displayNotification
+    1:1:com.batch.android.BatchNotificationChannelsManager getChannelsManager():717:717 -> getChannelsManager
+    1:1:java.lang.String getLastKnownPushToken():1109:1109 -> getLastKnownPushToken
+    1:1:java.util.EnumSet getNotificationsType(android.content.Context):740:740 -> getNotificationsType
+    1:1:boolean isBatchPush(android.content.Intent):767:767 -> isBatchPush
+    2:2:boolean isBatchPush(com.google.firebase.messaging.RemoteMessage):779:779 -> isBatchPush
+    1:1:boolean isManualDisplayModeActivated():796:796 -> isManualDisplayModeActivated
+    1:1:android.app.PendingIntent makePendingIntent(android.content.Context,android.content.Intent,android.os.Bundle):873:873 -> makePendingIntent
+    2:2:android.app.PendingIntent makePendingIntent(android.content.Context,android.content.Intent,android.os.Bundle):870:870 -> makePendingIntent
+    3:3:android.app.PendingIntent makePendingIntent(android.content.Context,android.content.Intent,android.os.Bundle):866:866 -> makePendingIntent
+    4:4:android.app.PendingIntent makePendingIntent(android.content.Context,android.content.Intent,android.os.Bundle):862:862 -> makePendingIntent
+    5:5:android.app.PendingIntent makePendingIntent(android.content.Context,android.content.Intent,com.google.firebase.messaging.RemoteMessage):907:907 -> makePendingIntent
+    6:6:android.app.PendingIntent makePendingIntent(android.content.Context,android.content.Intent,com.google.firebase.messaging.RemoteMessage):904:904 -> makePendingIntent
+    7:7:android.app.PendingIntent makePendingIntent(android.content.Context,android.content.Intent,com.google.firebase.messaging.RemoteMessage):900:900 -> makePendingIntent
+    8:8:android.app.PendingIntent makePendingIntent(android.content.Context,android.content.Intent,com.google.firebase.messaging.RemoteMessage):896:896 -> makePendingIntent
+    1:1:android.app.PendingIntent makePendingIntentForDeeplink(android.content.Context,java.lang.String,android.os.Bundle):939:939 -> makePendingIntentForDeeplink
+    2:2:android.app.PendingIntent makePendingIntentForDeeplink(android.content.Context,java.lang.String,android.os.Bundle):936:936 -> makePendingIntentForDeeplink
+    3:3:android.app.PendingIntent makePendingIntentForDeeplink(android.content.Context,java.lang.String,android.os.Bundle):932:932 -> makePendingIntentForDeeplink
+    4:4:android.app.PendingIntent makePendingIntentForDeeplink(android.content.Context,java.lang.String,android.os.Bundle):928:928 -> makePendingIntentForDeeplink
+    5:5:android.app.PendingIntent makePendingIntentForDeeplink(android.content.Context,java.lang.String,com.google.firebase.messaging.RemoteMessage):971:971 -> makePendingIntentForDeeplink
+    6:6:android.app.PendingIntent makePendingIntentForDeeplink(android.content.Context,java.lang.String,com.google.firebase.messaging.RemoteMessage):968:968 -> makePendingIntentForDeeplink
+    7:7:android.app.PendingIntent makePendingIntentForDeeplink(android.content.Context,java.lang.String,com.google.firebase.messaging.RemoteMessage):964:964 -> makePendingIntentForDeeplink
+    8:8:android.app.PendingIntent makePendingIntentForDeeplink(android.content.Context,java.lang.String,com.google.firebase.messaging.RemoteMessage):960:960 -> makePendingIntentForDeeplink
+    1:1:void onNotificationDisplayed(android.content.Context,android.content.Intent):1086:1086 -> onNotificationDisplayed
+    2:2:void onNotificationDisplayed(android.content.Context,com.google.firebase.messaging.RemoteMessage):1096:1096 -> onNotificationDisplayed
+    1:1:void refreshRegistration():1126:1126 -> refreshRegistration
+    1:1:void requestNotificationPermission(android.content.Context):1137:1137 -> requestNotificationPermission
+    1:1:void setAdditionalIntentFlags(java.lang.Integer):1076:1076 -> setAdditionalIntentFlags
+    1:1:void setGCMSenderId(java.lang.String):678:678 -> setGCMSenderId
+    1:1:void setLargeIcon(android.graphics.Bitmap):709:709 -> setLargeIcon
+    1:1:void setManualDisplay(boolean):806:806 -> setManualDisplay
+    1:1:void setNotificationInterceptor(com.batch.android.BatchNotificationInterceptor):1118:1118 -> setNotificationInterceptor
+    1:1:void setNotificationsColor(int):789:789 -> setNotificationsColor
+    1:1:void setNotificationsType(java.util.EnumSet):755:755 -> setNotificationsType
+    1:1:void setSmallIconResourceId(int):687:687 -> setSmallIconResourceId
+    1:1:void setSound(android.net.Uri):700:700 -> setSound
+    1:1:boolean shouldDisplayPush(android.content.Context,android.content.Intent):981:981 -> shouldDisplayPush
+    2:2:boolean shouldDisplayPush(android.content.Context,com.google.firebase.messaging.RemoteMessage):993:993 -> shouldDisplayPush
+com.batch.android.Batch$User -> com.batch.android.Batch$User:
+# {"id":"sourceFile","fileName":"Batch.java"}
+    1:1:void <init>():1275:1275 -> <init>
+    1:1:com.batch.android.BatchUserDataEditor editor():1354:1354 -> editor
+    1:1:void fetchAttributes(android.content.Context,com.batch.android.BatchAttributesFetchListener):1367:1367 -> fetchAttributes
+    1:1:void fetchTagCollections(android.content.Context,com.batch.android.BatchTagCollectionsFetchListener):1380:1380 -> fetchTagCollections
+    1:1:com.batch.android.BatchUserDataEditor getEditor():1343:1343 -> getEditor
+    1:1:java.lang.String getIdentifier(android.content.Context):1332:1332 -> getIdentifier
+    2:2:java.lang.String getIdentifier(android.content.Context):1329:1329 -> getIdentifier
+    1:3:java.lang.String getInstallationID():1285:1287 -> getInstallationID
+    1:1:java.lang.String getLanguage(android.content.Context):1304:1304 -> getLanguage
+    2:2:java.lang.String getLanguage(android.content.Context):1301:1301 -> getLanguage
+    1:1:java.lang.String getRegion(android.content.Context):1318:1318 -> getRegion
+    2:2:java.lang.String getRegion(android.content.Context):1315:1315 -> getRegion
+    1:1:void printDebugInformation():1504:1504 -> printDebugInformation
+    1:1:void trackEvent(java.lang.String):1390:1390 -> trackEvent
+    2:2:void trackEvent(java.lang.String,java.lang.String):1401:1401 -> trackEvent
+    3:10:void trackEvent(java.lang.String,java.lang.String,com.batch.android.json.JSONObject):1417:1424 -> trackEvent
+    11:19:void trackEvent(java.lang.String,java.lang.String,com.batch.android.BatchEventData):1439:1447 -> trackEvent
+    1:1:void trackLocation(android.location.Location):1461:1461 -> trackLocation
+    1:1:void trackTransaction(double):1471:1471 -> trackTransaction
+    2:11:void trackTransaction(double,com.batch.android.json.JSONObject):1485:1494 -> trackTransaction
+com.batch.android.BatchActionActivity -> com.batch.android.BatchActionActivity:
+# {"id":"sourceFile","fileName":"BatchActionActivity.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():20:20 -> <init>
+    1:1:android.content.Intent addPayloadToIntent(android.content.Intent,android.os.Bundle):28:28 -> a
+    2:5:androidx.core.app.TaskStackBuilder addPayloadToTaskStackBuilder(androidx.core.app.TaskStackBuilder,android.os.Bundle):38:41 -> a
+    6:40:void launchDeeplink(android.content.Intent,java.lang.String):56:90 -> a
+    41:46:void launchDeeplink(android.content.Intent,java.lang.String):81:86 -> a
+    47:94:void launchDeeplink(android.content.Intent,java.lang.String):64:111 -> a
+    95:100:void launchDeeplink(android.content.Intent,java.lang.String):102:107 -> a
+    101:126:void launchDeeplink(android.content.Intent,java.lang.String):94:119 -> a
+    1:2:void onDestroy():163:164 -> onDestroy
+    1:19:void onStart():124:142 -> onStart
+    20:20:void onStart():136:136 -> onStart
+    21:39:void onStart():134:152 -> onStart
+    1:2:void onStop():157:158 -> onStop
+com.batch.android.BatchActionService -> com.batch.android.BatchActionService:
+# {"id":"sourceFile","fileName":"BatchActionService.java"}
+    java.lang.String TAG -> a
+    java.lang.String ACTION_EXTRA_IDENTIFIER -> c
+    java.lang.String INTENT_ACTION -> b
+    java.lang.String ACTION_EXTRA_DISMISS_NOTIFICATION_ID -> e
+    java.lang.String ACTION_EXTRA_ARGS -> d
+    1:1:void <init>():28:28 -> <init>
+    1:47:void onHandleIntent(android.content.Intent):33:79 -> onHandleIntent
+com.batch.android.BatchActivityLifecycleHelper -> com.batch.android.BatchActivityLifecycleHelper:
+# {"id":"sourceFile","fileName":"BatchActivityLifecycleHelper.java"}
+    1:1:void <init>():19:19 -> <init>
+    1:1:void onActivityCreated(android.app.Activity,android.os.Bundle):23:23 -> onActivityCreated
+    1:1:void onActivityDestroyed(android.app.Activity):47:47 -> onActivityDestroyed
+    1:1:void onActivityStarted(android.app.Activity):28:28 -> onActivityStarted
+    1:1:void onActivityStopped(android.app.Activity):39:39 -> onActivityStopped
+com.batch.android.BatchAlertContent -> com.batch.android.BatchAlertContent:
+# {"id":"sourceFile","fileName":"BatchAlertContent.java"}
+    java.lang.String trackingIdentifier -> a
+    java.lang.String body -> c
+    com.batch.android.BatchAlertContent$CTA acceptCTA -> e
+    java.lang.String title -> b
+    java.lang.String cancelLabel -> d
+    1:8:void <init>(com.batch.android.messaging.model.AlertMessage):26:33 -> <init>
+    1:1:com.batch.android.BatchAlertContent$CTA getAcceptCTA():59:59 -> getAcceptCTA
+    1:1:java.lang.String getBody():49:49 -> getBody
+    1:1:java.lang.String getCancelLabel():54:54 -> getCancelLabel
+    1:1:java.lang.String getTitle():44:44 -> getTitle
+    1:1:java.lang.String getTrackingIdentifier():39:39 -> getTrackingIdentifier
+com.batch.android.BatchAlertContent$CTA -> com.batch.android.BatchAlertContent$CTA:
+# {"id":"sourceFile","fileName":"BatchAlertContent.java"}
+    com.batch.android.json.JSONObject args -> c
+    java.lang.String label -> a
+    java.lang.String action -> b
+    1:8:void <init>(com.batch.android.messaging.model.CTA):71:78 -> <init>
+    1:1:java.lang.String getAction():90:90 -> getAction
+    1:1:com.batch.android.json.JSONObject getArgs():95:95 -> getArgs
+    1:1:java.lang.String getLabel():85:85 -> getLabel
+com.batch.android.BatchAttributesFetchListener -> com.batch.android.BatchAttributesFetchListener:
+# {"id":"sourceFile","fileName":"BatchAttributesFetchListener.java"}
+com.batch.android.BatchBannerContent -> com.batch.android.BatchBannerContent:
+# {"id":"sourceFile","fileName":"BatchBannerContent.java"}
+    java.lang.String mediaAccessibilityDescription -> g
+    java.lang.String mediaURL -> f
+    java.lang.Long autoCloseTimeMillis -> i
+    java.util.List ctas -> d
+    com.batch.android.BatchBannerContent$Action globalTapAction -> e
+    java.lang.String trackingIdentifier -> a
+    boolean showCloseButton -> h
+    java.lang.String body -> c
+    java.lang.String title -> b
+    1:1:void <init>(com.batch.android.messaging.model.BannerMessage):36:36 -> <init>
+    2:34:void <init>(com.batch.android.messaging.model.BannerMessage):24:56 -> <init>
+    1:1:java.lang.Long getAutoCloseTimeMillis():93:93 -> getAutoCloseTimeMillis
+    1:1:java.lang.String getBody():69:69 -> getBody
+    1:1:java.util.List getCtas():73:73 -> getCtas
+    1:1:com.batch.android.BatchBannerContent$Action getGlobalTapAction():77:77 -> getGlobalTapAction
+    1:1:java.lang.String getMediaAccessibilityDescription():85:85 -> getMediaAccessibilityDescription
+    1:1:java.lang.String getMediaURL():81:81 -> getMediaURL
+    1:1:java.lang.String getTitle():65:65 -> getTitle
+    1:1:java.lang.String getTrackingIdentifier():61:61 -> getTrackingIdentifier
+    1:1:boolean isShowCloseButton():89:89 -> isShowCloseButton
+com.batch.android.BatchBannerContent$Action -> com.batch.android.BatchBannerContent$Action:
+# {"id":"sourceFile","fileName":"BatchBannerContent.java"}
+    com.batch.android.json.JSONObject args -> b
+    java.lang.String action -> a
+    1:7:void <init>(com.batch.android.messaging.model.Action):103:109 -> <init>
+    1:1:java.lang.String getAction():116:116 -> getAction
+    1:1:com.batch.android.json.JSONObject getArgs():121:121 -> getArgs
+com.batch.android.BatchBannerContent$CTA -> com.batch.android.BatchBannerContent$CTA:
+# {"id":"sourceFile","fileName":"BatchBannerContent.java"}
+    java.lang.String label -> c
+    1:2:void <init>(com.batch.android.messaging.model.CTA):131:132 -> <init>
+    1:1:java.lang.String getLabel():137:137 -> getLabel
+com.batch.android.BatchBannerView -> com.batch.android.BatchBannerView:
+# {"id":"sourceFile","fileName":"BatchBannerView.java"}
+    com.batch.android.messaging.model.BannerMessage message -> b
+    com.batch.android.messaging.view.formats.EmbeddedBannerContainer shownContainer -> c
+    com.batch.android.MessagingAnalyticsDelegate analyticsDelegate -> e
+    com.batch.android.BatchMessage rawMessage -> a
+    boolean shown -> d
+    1:1:void <init>(com.batch.android.BatchMessage,com.batch.android.messaging.model.BannerMessage,com.batch.android.MessagingAnalyticsDelegate):39:39 -> <init>
+    2:13:void <init>(com.batch.android.BatchMessage,com.batch.android.messaging.model.BannerMessage,com.batch.android.MessagingAnalyticsDelegate):31:42 -> <init>
+    1:8:void lambda$show$0(android.view.View):123:130 -> a
+    9:16:void lambda$embed$1(android.widget.FrameLayout):163:170 -> a
+    1:2:void dismiss(boolean):186:187 -> dismiss
+    1:9:void embed(android.widget.FrameLayout):152:160 -> embed
+    10:10:void embed(android.widget.FrameLayout):149:149 -> embed
+    1:25:void show(android.app.Activity):64:88 -> show
+    26:26:void show(android.app.Activity):58:58 -> show
+    27:35:void show(android.view.View):112:120 -> show
+    36:36:void show(android.view.View):109:109 -> show
+com.batch.android.BatchBannerViewPrivateHelper -> com.batch.android.c:
+# {"id":"sourceFile","fileName":"BatchBannerViewPrivateHelper.java"}
+    1:1:void <init>():10:10 -> <init>
+    1:1:com.batch.android.BatchBannerView newInstance(com.batch.android.BatchMessage,com.batch.android.messaging.model.BannerMessage,com.batch.android.MessagingAnalyticsDelegate):17:17 -> a
+com.batch.android.BatchDeeplinkInterceptor -> com.batch.android.BatchDeeplinkInterceptor:
+# {"id":"sourceFile","fileName":"BatchDeeplinkInterceptor.java"}
+    1:1:android.content.Intent getFallbackIntent(android.content.Context):31:31 -> getFallbackIntent
+com.batch.android.BatchDisplayReceiptJobService -> com.batch.android.BatchDisplayReceiptJobService:
+# {"id":"sourceFile","fileName":"BatchDisplayReceiptJobService.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():18:18 -> <init>
+    1:3:boolean onStartJob(android.app.job.JobParameters):24:26 -> onStartJob
+com.batch.android.BatchDisplayReceiptJobService$SendReceiptTask -> com.batch.android.BatchDisplayReceiptJobService$a:
+# {"id":"sourceFile","fileName":"BatchDisplayReceiptJobService.java"}
+    java.lang.ref.WeakReference originService -> a
+    android.app.job.JobParameters originJobParameters -> b
+    1:3:void <init>(android.app.job.JobService,android.app.job.JobParameters):40:42 -> <init>
+    1:10:java.lang.Void doInBackground(java.lang.Void[]):47:56 -> a
+    1:1:java.lang.Object doInBackground(java.lang.Object[]):35:35 -> doInBackground
+com.batch.android.BatchEmailSubscriptionState -> com.batch.android.BatchEmailSubscriptionState:
+# {"id":"sourceFile","fileName":"BatchEmailSubscriptionState.java"}
+    com.batch.android.BatchEmailSubscriptionState[] $VALUES -> a
+    1:2:void <clinit>():10:11 -> <clinit>
+    3:3:void <clinit>():8:8 -> <clinit>
+    1:1:void <init>(java.lang.String,int):9:9 -> <init>
+    1:1:com.batch.android.BatchEmailSubscriptionState[] $values():8:8 -> a
+    1:1:com.batch.android.BatchEmailSubscriptionState valueOf(java.lang.String):8:8 -> valueOf
+    1:1:com.batch.android.BatchEmailSubscriptionState[] values():8:8 -> values
+com.batch.android.BatchEventData -> com.batch.android.BatchEventData:
+# {"id":"sourceFile","fileName":"BatchEventData.java"}
+    java.util.Map attributes -> a
+    int MAXIMUM_STRING_LENGTH -> f
+    int MAXIMUM_URL_LENGTH -> g
+    int MAXIMUM_VALUES -> d
+    java.util.Set tags -> b
+    int MAXIMUM_TAGS -> e
+    boolean convertedFromLegacyAPI -> c
+    1:1:void <init>():37:37 -> <init>
+    2:5:void <init>():35:38 -> <init>
+    6:6:void <init>(com.batch.android.json.JSONObject):41:41 -> <init>
+    7:38:void <init>(com.batch.android.json.JSONObject):35:66 -> <init>
+    1:1:int lambda$new$0(java.lang.String,java.lang.String):46:46 -> a
+    2:2:java.util.Map getAttributes():78:78 -> a
+    3:20:boolean enforceURIValue(java.net.URI):286:303 -> a
+    21:21:boolean enforceDateValue(java.util.Date):315:315 -> a
+    22:23:boolean enforceAttributeName(java.lang.String):323:324 -> a
+    1:10:com.batch.android.BatchEventData addTag(java.lang.String):96:105 -> addTag
+    1:1:boolean getConvertedFromLegacyAPI():86:86 -> b
+    2:3:boolean enforceAttributesCount(java.lang.String):253:254 -> b
+    1:1:java.util.Set getTags():82:82 -> c
+    2:11:boolean enforceStringValue(java.lang.String):264:273 -> c
+    1:2:void init():73:74 -> d
+    3:3:java.lang.String normalizeKey(java.lang.String):337:337 -> d
+    1:14:com.batch.android.json.JSONObject toInternalJSON():233:246 -> e
+    1:2:com.batch.android.BatchEventData put(java.lang.String,java.lang.String):120:121 -> put
+    3:4:com.batch.android.BatchEventData put(java.lang.String,java.net.URI):135:136 -> put
+    5:6:com.batch.android.BatchEventData put(java.lang.String,float):150:151 -> put
+    7:8:com.batch.android.BatchEventData put(java.lang.String,double):165:166 -> put
+    9:10:com.batch.android.BatchEventData put(java.lang.String,int):180:181 -> put
+    11:12:com.batch.android.BatchEventData put(java.lang.String,long):195:196 -> put
+    13:14:com.batch.android.BatchEventData put(java.lang.String,boolean):210:211 -> put
+    15:16:com.batch.android.BatchEventData put(java.lang.String,java.util.Date):225:226 -> put
+com.batch.android.BatchEventData$TypedAttribute -> com.batch.android.BatchEventData$a:
+# {"id":"sourceFile","fileName":"BatchEventData.java"}
+    com.batch.android.user.AttributeType type -> b
+    java.lang.Object value -> a
+    1:3:void <init>(java.lang.Object,com.batch.android.user.AttributeType):345:347 -> <init>
+com.batch.android.BatchEventDispatcher -> com.batch.android.BatchEventDispatcher:
+# {"id":"sourceFile","fileName":"BatchEventDispatcher.java"}
+com.batch.android.BatchImageContent -> com.batch.android.BatchImageContent:
+# {"id":"sourceFile","fileName":"BatchImageContent.java"}
+    com.batch.android.BatchImageContent$Action globalTapAction -> a
+    long globalTapDelay -> b
+    int autoCloseDelay -> g
+    boolean isFullscreen -> h
+    com.batch.android.messaging.Size2D imageSize -> f
+    boolean allowSwipeToDismiss -> c
+    java.lang.String imageDescription -> e
+    java.lang.String imageURL -> d
+    1:11:void <init>(com.batch.android.messaging.model.ImageMessage):27:37 -> <init>
+    1:1:int getAutoCloseDelay():75:75 -> getAutoCloseDelay
+    1:1:com.batch.android.BatchImageContent$Action getGlobalTapAction():102:102 -> getGlobalTapAction
+    1:1:long getGlobalTapDelay():98:98 -> getGlobalTapDelay
+    1:1:java.lang.String getImageDescription():86:86 -> getImageDescription
+    1:4:android.graphics.Point getImageSize():79:82 -> getImageSize
+    1:1:java.lang.String getImageURL():90:90 -> getImageURL
+    1:1:boolean isAllowSwipeToDismiss():94:94 -> isAllowSwipeToDismiss
+    1:1:boolean isFullscreen():71:71 -> isFullscreen
+com.batch.android.BatchImageContent$Action -> com.batch.android.BatchImageContent$Action:
+# {"id":"sourceFile","fileName":"BatchImageContent.java"}
+    com.batch.android.json.JSONObject args -> b
+    java.lang.String action -> a
+    1:7:void <init>(com.batch.android.messaging.model.Action):48:54 -> <init>
+    1:1:java.lang.String getAction():61:61 -> getAction
+    1:1:com.batch.android.json.JSONObject getArgs():66:66 -> getArgs
+com.batch.android.BatchInAppMessage -> com.batch.android.BatchInAppMessage:
+# {"id":"sourceFile","fileName":"BatchInAppMessage.java"}
+    com.batch.android.json.JSONObject customPayload -> d
+    java.lang.String campaignId -> f
+    java.lang.String LANDING_PAYLOAD_KEY -> i
+    com.batch.android.json.JSONObject landingPayload -> c
+    java.lang.String CAMPAIGN_TOKEN_KEY -> k
+    java.lang.String CUSTOM_PAYLOAD_KEY -> j
+    com.batch.android.BatchInAppMessage$Content cachedContent -> h
+    java.lang.String CAMPAIGN_EVENT_DATA_KEY -> m
+    java.lang.String CAMPAIGN_ID_KEY -> l
+    java.lang.String campaignToken -> e
+    com.batch.android.json.JSONObject eventData -> g
+    1:6:void <init>(java.lang.String,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.json.JSONObject,com.batch.android.json.JSONObject):73:78 -> <init>
+    1:25:com.batch.android.BatchInAppMessage getInstanceFromBundle(android.os.Bundle):39:63 -> a
+    26:26:com.batch.android.BatchInAppMessage getInstanceFromBundle(android.os.Bundle):50:50 -> a
+    27:34:android.os.Bundle getBundleRepresentation():103:110 -> a
+    1:1:com.batch.android.json.JSONObject getCustomPayloadInternal():91:91 -> b
+    1:1:com.batch.android.json.JSONObject getJSON():83:83 -> c
+    1:1:java.lang.String getKind():96:96 -> d
+    1:1:java.lang.String getCampaignId():115:115 -> e
+    1:1:com.batch.android.json.JSONObject getEventData():119:119 -> f
+    1:1:java.lang.String getCampaignToken():178:178 -> getCampaignToken
+    1:23:com.batch.android.BatchInAppMessage$Content getContent():146:168 -> getContent
+    1:8:com.batch.android.json.JSONObject getCustomPayload():125:132 -> getCustomPayload
+com.batch.android.BatchInAppMessage$Content -> com.batch.android.BatchInAppMessage$Content:
+# {"id":"sourceFile","fileName":"BatchInAppMessage.java"}
+com.batch.android.BatchInboxFetcher -> com.batch.android.BatchInboxFetcher:
+# {"id":"sourceFile","fileName":"BatchInboxFetcher.java"}
+    android.os.Handler handler -> b
+    com.batch.android.inbox.InboxFetcherInternal impl -> a
+    1:1:void <init>(com.batch.android.inbox.InboxFetcherInternal):38:38 -> <init>
+    2:5:void <init>(com.batch.android.inbox.InboxFetcherInternal):36:39 -> <init>
+    1:1:android.os.Handler access$000(com.batch.android.BatchInboxFetcher):32:32 -> a
+    1:22:void fetchNewNotifications(com.batch.android.BatchInboxFetcher$OnNewNotificationsFetchedListener):123:144 -> fetchNewNotifications
+    1:19:void fetchNextPage(com.batch.android.BatchInboxFetcher$OnNextPageFetchedListener):155:173 -> fetchNextPage
+    1:1:java.util.List getFetchedNotifications():111:111 -> getFetchedNotifications
+    1:1:boolean hasMore():76:76 -> hasMore
+    1:1:void markAllAsRead():92:92 -> markAllAsRead
+    1:1:void markAsDeleted(com.batch.android.BatchInboxNotificationContent):101:101 -> markAsDeleted
+    1:1:void markAsRead(com.batch.android.BatchInboxNotificationContent):85:85 -> markAsRead
+    1:1:void setFetchLimit(int):57:57 -> setFetchLimit
+    1:1:void setFilterSilentNotifications(boolean):67:67 -> setFilterSilentNotifications
+    1:1:void setHandlerOverride(android.os.Handler):184:184 -> setHandlerOverride
+    1:1:void setMaxPageSize(int):47:47 -> setMaxPageSize
+com.batch.android.BatchInboxFetcher$1 -> com.batch.android.BatchInboxFetcher$a:
+# {"id":"sourceFile","fileName":"BatchInboxFetcher.java"}
+    com.batch.android.BatchInboxFetcher this$0 -> b
+    com.batch.android.BatchInboxFetcher$OnNewNotificationsFetchedListener val$originalListener -> a
+    1:1:void <init>(com.batch.android.BatchInboxFetcher,com.batch.android.BatchInboxFetcher$OnNewNotificationsFetchedListener):126:126 -> <init>
+    1:1:void lambda$onFetchSuccess$0(com.batch.android.BatchInboxFetcher$OnNewNotificationsFetchedListener,java.util.List,boolean,boolean):134:134 -> a
+    2:2:void lambda$onFetchFailure$1(com.batch.android.BatchInboxFetcher$OnNewNotificationsFetchedListener,java.lang.String):140:140 -> a
+    1:1:void onFetchFailure(java.lang.String):140:140 -> onFetchFailure
+    1:1:void onFetchSuccess(java.util.List,boolean,boolean):133:133 -> onFetchSuccess
+com.batch.android.BatchInboxFetcher$2 -> com.batch.android.BatchInboxFetcher$b:
+# {"id":"sourceFile","fileName":"BatchInboxFetcher.java"}
+    com.batch.android.BatchInboxFetcher this$0 -> b
+    com.batch.android.BatchInboxFetcher$OnNextPageFetchedListener val$originalListener -> a
+    1:1:void <init>(com.batch.android.BatchInboxFetcher,com.batch.android.BatchInboxFetcher$OnNextPageFetchedListener):158:158 -> <init>
+    1:1:void lambda$onFetchSuccess$0(com.batch.android.BatchInboxFetcher$OnNextPageFetchedListener,java.util.List,boolean):164:164 -> a
+    2:2:void lambda$onFetchFailure$1(com.batch.android.BatchInboxFetcher$OnNextPageFetchedListener,java.lang.String):169:169 -> a
+    1:1:void onFetchFailure(java.lang.String):169:169 -> onFetchFailure
+    1:1:void onFetchSuccess(java.util.List,boolean):164:164 -> onFetchSuccess
+com.batch.android.BatchInboxFetcher$OnNewNotificationsFetchedListener -> com.batch.android.BatchInboxFetcher$OnNewNotificationsFetchedListener:
+# {"id":"sourceFile","fileName":"BatchInboxFetcher.java"}
+com.batch.android.BatchInboxFetcher$OnNextPageFetchedListener -> com.batch.android.BatchInboxFetcher$OnNextPageFetchedListener:
+# {"id":"sourceFile","fileName":"BatchInboxFetcher.java"}
+com.batch.android.BatchInboxNotificationContent -> com.batch.android.BatchInboxNotificationContent:
+# {"id":"sourceFile","fileName":"BatchInboxNotificationContent.java"}
+    com.batch.android.inbox.InboxNotificationContentInternal internalContent -> a
+    java.lang.String TAG -> c
+    com.batch.android.BatchPushPayload batchPushPayloadCache -> b
+    1:1:void <init>(com.batch.android.inbox.InboxNotificationContentInternal):42:42 -> <init>
+    2:10:void <init>(com.batch.android.inbox.InboxNotificationContentInternal):35:43 -> <init>
+    1:33:void displayLandingMessage(android.content.Context):154:186 -> displayLandingMessage
+    1:1:java.lang.String getBody():63:63 -> getBody
+    1:1:java.util.Date getDate():88:88 -> getDate
+    1:1:java.lang.String getNotificationIdentifier():53:53 -> getNotificationIdentifier
+    1:5:com.batch.android.BatchPushPayload getPushPayload():122:126 -> getPushPayload
+    1:1:java.util.Map getRawPayload():112:112 -> getRawPayload
+    1:1:com.batch.android.BatchNotificationSource getSource():68:68 -> getSource
+    1:1:java.lang.String getTitle():58:58 -> getTitle
+    1:2:boolean hasLandingMessage():135:136 -> hasLandingMessage
+    1:1:boolean isDeleted():83:83 -> isDeleted
+    1:1:boolean isSilent():100:100 -> isSilent
+    1:1:boolean isUnread():72:72 -> isUnread
+com.batch.android.BatchInterstitialContent -> com.batch.android.BatchInterstitialContent:
+# {"id":"sourceFile","fileName":"BatchInterstitialContent.java"}
+    java.lang.String mediaAccessibilityDescription -> g
+    java.lang.String mediaURL -> f
+    java.util.List ctas -> e
+    java.lang.String trackingIdentifier -> a
+    boolean showCloseButton -> h
+    java.lang.String title -> c
+    java.lang.String header -> b
+    java.lang.String body -> d
+    1:1:void <init>(com.batch.android.messaging.model.UniversalMessage):35:35 -> <init>
+    2:30:void <init>(com.batch.android.messaging.model.UniversalMessage):27:55 -> <init>
+    1:1:java.lang.String getBody():72:72 -> getBody
+    1:1:java.util.List getCtas():76:76 -> getCtas
+    1:1:java.lang.String getHeader():64:64 -> getHeader
+    1:1:java.lang.String getMediaAccessibilityDescription():84:84 -> getMediaAccessibilityDescription
+    1:1:java.lang.String getMediaURL():80:80 -> getMediaURL
+    1:1:java.lang.String getTitle():68:68 -> getTitle
+    1:1:java.lang.String getTrackingIdentifier():60:60 -> getTrackingIdentifier
+    1:1:boolean shouldShowCloseButton():88:88 -> shouldShowCloseButton
+com.batch.android.BatchInterstitialContent$CTA -> com.batch.android.BatchInterstitialContent$CTA:
+# {"id":"sourceFile","fileName":"BatchInterstitialContent.java"}
+    com.batch.android.json.JSONObject args -> c
+    java.lang.String label -> a
+    java.lang.String action -> b
+    1:8:void <init>(com.batch.android.messaging.model.CTA):100:107 -> <init>
+    1:1:java.lang.String getAction():119:119 -> getAction
+    1:1:com.batch.android.json.JSONObject getArgs():124:124 -> getArgs
+    1:1:java.lang.String getLabel():114:114 -> getLabel
+com.batch.android.BatchLandingMessage -> com.batch.android.BatchLandingMessage:
+# {"id":"sourceFile","fileName":"BatchLandingMessage.java"}
+    com.batch.android.json.JSONObject landing -> d
+    java.lang.String GOOGLE_PREFIX -> f
+    android.os.Bundle payload -> c
+    boolean isDisplayedFromInbox -> e
+    1:1:void <init>(android.os.Bundle,com.batch.android.json.JSONObject):29:29 -> <init>
+    2:6:void <init>(android.os.Bundle,com.batch.android.json.JSONObject):27:31 -> <init>
+    1:5:android.os.Bundle cleanBundle(android.os.Bundle):41:45 -> a
+    6:7:android.os.Bundle getBundleRepresentation():85:86 -> a
+    8:8:void setIsDisplayedFromInbox(boolean):105:105 -> a
+    1:7:com.batch.android.json.JSONObject getCustomPayloadInternal():61:67 -> b
+    1:1:com.batch.android.json.JSONObject getJSON():53:53 -> c
+    1:1:java.lang.String getKind():78:78 -> d
+    1:1:android.os.Bundle getPushBundle():91:91 -> getPushBundle
+    1:1:boolean isDisplayedFromInbox():101:101 -> isDisplayedFromInbox
+com.batch.android.BatchMessage -> com.batch.android.BatchMessage:
+# {"id":"sourceFile","fileName":"BatchMessage.java"}
+    java.lang.String KIND_KEY -> a
+    java.lang.String DATA_KEY -> b
+    1:1:void <init>():24:24 -> <init>
+    android.os.Bundle getBundleRepresentation() -> a
+    com.batch.android.json.JSONObject getCustomPayloadInternal() -> b
+    com.batch.android.json.JSONObject getJSON() -> c
+    java.lang.String getKind() -> d
+    1:19:com.batch.android.BatchMessage$Format getFormat():112:130 -> getFormat
+    1:22:com.batch.android.BatchMessage getMessageForBundle(android.os.Bundle):74:95 -> getMessageForBundle
+    23:23:com.batch.android.BatchMessage getMessageForBundle(android.os.Bundle):76:76 -> getMessageForBundle
+    24:24:com.batch.android.BatchMessage getMessageForBundle(android.os.Bundle):71:71 -> getMessageForBundle
+    1:5:void writeToBundle(android.os.Bundle):48:52 -> writeToBundle
+    6:6:void writeToBundle(android.os.Bundle):45:45 -> writeToBundle
+    1:5:void writeToIntent(android.content.Intent):61:65 -> writeToIntent
+    6:6:void writeToIntent(android.content.Intent):58:58 -> writeToIntent
+com.batch.android.BatchMessage$Format -> com.batch.android.BatchMessage$Format:
+# {"id":"sourceFile","fileName":"BatchMessage.java"}
+    com.batch.android.BatchMessage$Format[] $VALUES -> a
+    1:25:void <clinit>():148:172 -> <clinit>
+    26:26:void <clinit>():142:142 -> <clinit>
+    1:1:void <init>(java.lang.String,int):143:143 -> <init>
+    1:1:com.batch.android.BatchMessage$Format[] $values():142:142 -> a
+    1:1:com.batch.android.BatchMessage$Format valueOf(java.lang.String):142:142 -> valueOf
+    1:1:com.batch.android.BatchMessage$Format[] values():142:142 -> values
+com.batch.android.BatchMessageAction -> com.batch.android.BatchMessageAction:
+# {"id":"sourceFile","fileName":"BatchMessageAction.java"}
+    com.batch.android.json.JSONObject args -> b
+    java.lang.String action -> a
+    1:7:void <init>(com.batch.android.messaging.model.Action):24:30 -> <init>
+    1:1:java.lang.String getAction():37:37 -> getAction
+    1:1:com.batch.android.json.JSONObject getArgs():42:42 -> getArgs
+    1:1:boolean isDismissAction():46:46 -> isDismissAction
+com.batch.android.BatchMessageCTA -> com.batch.android.BatchMessageCTA:
+# {"id":"sourceFile","fileName":"BatchMessageCTA.java"}
+    java.lang.String label -> c
+    1:2:void <init>(com.batch.android.messaging.model.CTA):20:21 -> <init>
+    1:1:java.lang.String getLabel():26:26 -> getLabel
+com.batch.android.BatchMessagingException -> com.batch.android.BatchMessagingException:
+# {"id":"sourceFile","fileName":"BatchMessagingException.java"}
+    1:1:void <init>():12:12 -> <init>
+    2:2:void <init>(java.lang.String):16:16 -> <init>
+    3:3:void <init>(java.lang.String,java.lang.Throwable):20:20 -> <init>
+    4:4:void <init>(java.lang.Throwable):24:24 -> <init>
+com.batch.android.BatchMessagingWebViewJavascriptBridge -> com.batch.android.BatchMessagingWebViewJavascriptBridge:
+# {"id":"sourceFile","fileName":"BatchMessagingWebViewJavascriptBridge.java"}
+    android.content.Context applicationContext -> a
+    com.batch.android.messaging.WebViewActionListener actionListener -> c
+    com.batch.android.BatchMessage message -> b
+    java.lang.String TAG -> d
+    1:4:void <init>(android.content.Context,com.batch.android.BatchMessage,com.batch.android.messaging.WebViewActionListener):37:40 -> <init>
+    1:6:java.lang.String makeSuccessResult(com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProvider):82:87 -> a
+    7:12:java.lang.String makeErrorResult(java.lang.String):93:98 -> a
+    13:38:com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProvider getMethodResultProvider(java.lang.String,com.batch.android.json.JSONObject):104:129 -> a
+    39:40:com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProvider getMethodResultProvider(java.lang.String,com.batch.android.json.JSONObject):126:127 -> a
+    41:41:com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProvider getMethodResultProvider(java.lang.String,com.batch.android.json.JSONObject):116:116 -> a
+    42:46:com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProvider getMethodResultProvider(java.lang.String,com.batch.android.json.JSONObject):106:110 -> a
+    47:63:com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProvider getMethodResultProvider(java.lang.String,com.batch.android.json.JSONObject):108:124 -> a
+    64:67:com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProvider getMethodResultProvider(java.lang.String,com.batch.android.json.JSONObject):118:121 -> a
+    68:68:com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProvider getMethodResultProvider(java.lang.String,com.batch.android.json.JSONObject):114:114 -> a
+    69:69:com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProvider getMethodResultProvider(java.lang.String,com.batch.android.json.JSONObject):112:112 -> a
+    70:70:java.lang.String getAttributionID():162:162 -> a
+    71:74:void dismiss(com.batch.android.json.JSONObject):185:188 -> a
+    1:1:java.lang.String getCustomLanguage():144:144 -> b
+    2:13:void openDeeplink(com.batch.android.json.JSONObject):211:222 -> b
+    14:14:void openDeeplink(com.batch.android.json.JSONObject):213:213 -> b
+    1:5:java.lang.String getCustomPayload():168:172 -> c
+    6:19:void performAction(com.batch.android.json.JSONObject):193:206 -> c
+    20:20:void performAction(com.batch.android.json.JSONObject):195:195 -> c
+    1:1:java.lang.String getCustomRegion():150:150 -> d
+    1:1:java.lang.String getCustomUserID():156:156 -> e
+    1:1:com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProvider getGenericSuccessResultProvider():229:229 -> f
+    1:1:java.lang.String getInstallationID():138:138 -> g
+    1:5:java.lang.String getTrackingID():177:181 -> h
+    1:1:java.lang.String lambda$getGenericSuccessResultProvider$0():229:229 -> i
+    1:30:java.lang.String postMessage(java.lang.String,java.lang.String):46:75 -> postMessage
+    31:32:java.lang.String postMessage(java.lang.String,java.lang.String):71:72 -> postMessage
+    33:34:java.lang.String postMessage(java.lang.String,java.lang.String):68:69 -> postMessage
+    35:36:java.lang.String postMessage(java.lang.String,java.lang.String):64:65 -> postMessage
+    37:38:java.lang.String postMessage(java.lang.String,java.lang.String):57:58 -> postMessage
+    39:39:java.lang.String postMessage(java.lang.String,java.lang.String):47:47 -> postMessage
+com.batch.android.BatchMessagingWebViewJavascriptBridge$1 -> com.batch.android.BatchMessagingWebViewJavascriptBridge$a:
+# {"id":"sourceFile","fileName":"BatchMessagingWebViewJavascriptBridge.java"}
+com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProvider -> com.batch.android.BatchMessagingWebViewJavascriptBridge$b:
+# {"id":"sourceFile","fileName":"BatchMessagingWebViewJavascriptBridge.java"}
+    java.lang.String getResult() -> a
+com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProviderException -> com.batch.android.BatchMessagingWebViewJavascriptBridge$c:
+# {"id":"sourceFile","fileName":"BatchMessagingWebViewJavascriptBridge.java"}
+    1:1:void <init>(java.lang.String):245:245 -> <init>
+    1:1:java.lang.String getMessage():252:252 -> getMessage
+com.batch.android.BatchMessagingWebViewJavascriptBridge$BridgeResultProviderRuntimeException -> com.batch.android.BatchMessagingWebViewJavascriptBridge$d:
+# {"id":"sourceFile","fileName":"BatchMessagingWebViewJavascriptBridge.java"}
+    java.lang.String internalMessage -> b
+    int code -> a
+    1:3:void <init>(int,java.lang.String):267:269 -> <init>
+    4:6:void <init>(int,java.lang.String,java.lang.Throwable):277:279 -> <init>
+    1:1:int getCode():283:283 -> a
+    1:1:java.lang.String getMessage():289:289 -> getMessage
+com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause -> com.batch.android.BatchMessagingWebViewJavascriptBridge$e:
+# {"id":"sourceFile","fileName":"BatchMessagingWebViewJavascriptBridge.java"}
+    com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause BAD_HTTP_STATUSCODE -> c
+    com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause TIMEOUT -> d
+    com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause UNKNOWN -> a
+    com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause SSL -> b
+    com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause[] $VALUES -> e
+    1:4:void <clinit>():296:299 -> <clinit>
+    5:5:void <clinit>():295:295 -> <clinit>
+    1:1:void <init>(java.lang.String,int):295:295 -> <init>
+    1:1:com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause[] $values():295:295 -> a
+    1:1:com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause valueOf(java.lang.String):295:295 -> valueOf
+    1:1:com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause[] values():295:295 -> values
+com.batch.android.BatchMessagingWebViewJavascriptBridge$UnknownMethodException -> com.batch.android.BatchMessagingWebViewJavascriptBridge$f:
+# {"id":"sourceFile","fileName":"BatchMessagingWebViewJavascriptBridge.java"}
+    1:1:void <init>():293:293 -> <init>
+    2:2:void <init>(com.batch.android.BatchMessagingWebViewJavascriptBridge$1):293:293 -> <init>
+com.batch.android.BatchModalContent -> com.batch.android.BatchModalContent:
+# {"id":"sourceFile","fileName":"BatchModalContent.java"}
+    java.lang.String mediaAccessibilityDescription -> g
+    java.lang.String mediaURL -> f
+    java.lang.Long autoCloseTimeMillis -> i
+    java.util.List ctas -> d
+    com.batch.android.BatchModalContent$Action globalTapAction -> e
+    java.lang.String trackingIdentifier -> a
+    boolean showCloseButton -> h
+    java.lang.String body -> c
+    java.lang.String title -> b
+    1:1:void <init>(com.batch.android.messaging.model.ModalMessage):36:36 -> <init>
+    2:34:void <init>(com.batch.android.messaging.model.ModalMessage):24:56 -> <init>
+    1:1:java.lang.Long getAutoCloseTimeMillis():93:93 -> getAutoCloseTimeMillis
+    1:1:java.lang.String getBody():69:69 -> getBody
+    1:1:java.util.List getCtas():73:73 -> getCtas
+    1:1:com.batch.android.BatchModalContent$Action getGlobalTapAction():77:77 -> getGlobalTapAction
+    1:1:java.lang.String getMediaAccessibilityDescription():85:85 -> getMediaAccessibilityDescription
+    1:1:java.lang.String getMediaURL():81:81 -> getMediaURL
+    1:1:java.lang.String getTitle():65:65 -> getTitle
+    1:1:java.lang.String getTrackingIdentifier():61:61 -> getTrackingIdentifier
+    1:1:boolean isShowCloseButton():89:89 -> isShowCloseButton
+com.batch.android.BatchModalContent$Action -> com.batch.android.BatchModalContent$Action:
+# {"id":"sourceFile","fileName":"BatchModalContent.java"}
+    com.batch.android.json.JSONObject args -> b
+    java.lang.String action -> a
+    1:7:void <init>(com.batch.android.messaging.model.Action):103:109 -> <init>
+    1:1:java.lang.String getAction():116:116 -> getAction
+    1:1:com.batch.android.json.JSONObject getArgs():121:121 -> getArgs
+com.batch.android.BatchModalContent$CTA -> com.batch.android.BatchModalContent$CTA:
+# {"id":"sourceFile","fileName":"BatchModalContent.java"}
+    java.lang.String label -> c
+    1:2:void <init>(com.batch.android.messaging.model.CTA):131:132 -> <init>
+    1:1:java.lang.String getLabel():137:137 -> getLabel
+com.batch.android.BatchNotificationAction -> com.batch.android.BatchNotificationAction:
+# {"id":"sourceFile","fileName":"BatchNotificationAction.java"}
+    1:36:void <init>():21:56 -> <init>
+    1:39:java.util.List getSupportActions(android.content.Context,java.util.List,com.batch.android.BatchPushPayload,java.lang.Integer):87:125 -> getSupportActions
+    40:50:java.util.List getSupportActions(android.content.Context,java.util.List,com.batch.android.BatchPushPayload,java.lang.Integer):123:133 -> getSupportActions
+    51:65:java.util.List getSupportActions(android.content.Context,java.util.List,com.batch.android.BatchPushPayload,java.lang.Integer):131:145 -> getSupportActions
+    66:66:java.util.List getSupportActions(android.content.Context,java.util.List,com.batch.android.BatchPushPayload,java.lang.Integer):139:139 -> getSupportActions
+    67:67:java.util.List getSupportActions(android.content.Context,java.util.List,com.batch.android.BatchPushPayload,java.lang.Integer):84:84 -> getSupportActions
+com.batch.android.BatchNotificationChannelsManager -> com.batch.android.BatchNotificationChannelsManager:
+# {"id":"sourceFile","fileName":"BatchNotificationChannelsManager.java"}
+    com.batch.android.module.PushModule pushModule -> d
+    com.batch.android.BatchNotificationChannelsManager$NotificationChannelIdInterceptor channelIdInterceptor -> c
+    java.lang.String channelOverride -> a
+    com.batch.android.BatchNotificationChannelsManager$ChannelNameProvider channelNameProvider -> b
+    1:16:void <init>(com.batch.android.module.PushModule):37:52 -> <init>
+    17:17:void <init>(com.batch.android.module.PushModule):38:38 -> <init>
+    1:14:java.lang.String getChannelId(com.batch.android.BatchPushPayload):59:72 -> a
+    15:35:void registerBatchChannelIfNeeded(android.content.Context):90:110 -> a
+    36:43:void registerBatchChannelIfNeeded(android.content.Context):108:115 -> a
+    44:57:java.lang.String getBatchChannelName():126:139 -> a
+    1:1:boolean isChannelIdOverridden():86:86 -> b
+    1:1:boolean openSystemChannelSettings(android.content.Context):215:215 -> openSystemChannelSettings
+    2:8:boolean openSystemChannelSettings(android.content.Context,java.lang.String):236:242 -> openSystemChannelSettings
+    9:9:boolean openSystemChannelSettings(android.content.Context,java.lang.String):234:234 -> openSystemChannelSettings
+    10:10:boolean openSystemChannelSettings(android.content.Context,java.lang.String):230:230 -> openSystemChannelSettings
+    1:1:com.batch.android.BatchNotificationChannelsManager provide():43:43 -> provide
+    1:1:void setChannelIdInterceptor(com.batch.android.BatchNotificationChannelsManager$NotificationChannelIdInterceptor):203:203 -> setChannelIdInterceptor
+    1:1:void setChannelIdOverride(java.lang.String):162:162 -> setChannelIdOverride
+    1:1:void setChannelName(android.content.Context,int):191:191 -> setChannelName
+    1:1:void setChannelNameProvider(com.batch.android.BatchNotificationChannelsManager$ChannelNameProvider):179:179 -> setChannelNameProvider
+com.batch.android.BatchNotificationChannelsManager$ChannelNameProvider -> com.batch.android.BatchNotificationChannelsManager$ChannelNameProvider:
+# {"id":"sourceFile","fileName":"BatchNotificationChannelsManager.java"}
+com.batch.android.BatchNotificationChannelsManager$NotificationChannelIdInterceptor -> com.batch.android.BatchNotificationChannelsManager$NotificationChannelIdInterceptor:
+# {"id":"sourceFile","fileName":"BatchNotificationChannelsManager.java"}
+com.batch.android.BatchNotificationChannelsManager$StringResChannelNameProvider -> com.batch.android.BatchNotificationChannelsManager$StringResChannelNameProvider:
+# {"id":"sourceFile","fileName":"BatchNotificationChannelsManager.java"}
+    android.content.Context context -> a
+    int resId -> b
+    1:3:void <init>(android.content.Context,int):280:282 -> <init>
+    1:1:java.lang.String getDefaultChannelName():287:287 -> getDefaultChannelName
+com.batch.android.BatchNotificationChannelsManagerPrivateHelper -> com.batch.android.d:
+# {"id":"sourceFile","fileName":"BatchNotificationChannelsManagerPrivateHelper.java"}
+    1:1:void <init>():9:9 -> <init>
+    1:1:java.lang.String getChannelId(com.batch.android.BatchNotificationChannelsManager):13:13 -> a
+    2:2:void registerBatchChannelIfNeeded(com.batch.android.BatchNotificationChannelsManager,android.content.Context):17:17 -> a
+com.batch.android.BatchNotificationInterceptor -> com.batch.android.BatchNotificationInterceptor:
+# {"id":"sourceFile","fileName":"BatchNotificationInterceptor.java"}
+    1:1:void <init>():17:17 -> <init>
+com.batch.android.BatchNotificationSource -> com.batch.android.BatchNotificationSource:
+# {"id":"sourceFile","fileName":"BatchNotificationSource.java"}
+    com.batch.android.BatchNotificationSource[] $VALUES -> a
+    1:4:void <clinit>():11:14 -> <clinit>
+    5:5:void <clinit>():9:9 -> <clinit>
+    1:1:void <init>(java.lang.String,int):10:10 -> <init>
+    1:1:com.batch.android.BatchNotificationSource[] $values():9:9 -> a
+    1:1:com.batch.android.BatchNotificationSource valueOf(java.lang.String):9:9 -> valueOf
+    1:1:com.batch.android.BatchNotificationSource[] values():9:9 -> values
+com.batch.android.BatchOptOutResultListener -> com.batch.android.BatchOptOutResultListener:
+# {"id":"sourceFile","fileName":"BatchOptOutResultListener.java"}
+com.batch.android.BatchOptOutResultListener$ErrorPolicy -> com.batch.android.BatchOptOutResultListener$ErrorPolicy:
+# {"id":"sourceFile","fileName":"BatchOptOutResultListener.java"}
+    com.batch.android.BatchOptOutResultListener$ErrorPolicy[] $VALUES -> a
+    1:6:void <clinit>():19:24 -> <clinit>
+    7:7:void <clinit>():14:14 -> <clinit>
+    1:1:void <init>(java.lang.String,int):15:15 -> <init>
+    1:1:com.batch.android.BatchOptOutResultListener$ErrorPolicy[] $values():14:14 -> a
+    1:1:com.batch.android.BatchOptOutResultListener$ErrorPolicy valueOf(java.lang.String):14:14 -> valueOf
+    1:1:com.batch.android.BatchOptOutResultListener$ErrorPolicy[] values():14:14 -> values
+com.batch.android.BatchPermissionActivity -> com.batch.android.BatchPermissionActivity:
+# {"id":"sourceFile","fileName":"BatchPermissionActivity.java"}
+    long requestPermissionTimestamp -> b
+    java.lang.String permission -> a
+    int DETECT_PERMISSION_ALREADY_DENIED_THRESHOLD -> d
+    int BATCH_PERMISSION_REQUEST_CODE -> e
+    java.lang.String TAG -> c
+    1:27:void <init>():22:48 -> <init>
+    1:7:void requestPermission():74:80 -> a
+    1:6:void onCreate(android.os.Bundle):52:57 -> onCreate
+    1:2:void onDestroy():129:130 -> onDestroy
+    1:30:void onRequestPermissionsResult(int,java.lang.String[],int[]):89:118 -> onRequestPermissionsResult
+    1:6:void onStart():63:68 -> onStart
+    1:2:void onStop():123:124 -> onStop
+com.batch.android.BatchPushData -> com.batch.android.BatchPushData:
+# {"id":"sourceFile","fileName":"BatchPushData.java"}
+    android.content.Context context -> b
+    com.batch.android.core.InternalPushData internalPushData -> a
+    1:14:void <init>(android.content.Context,android.content.Intent):36:49 -> <init>
+    15:15:void <init>(android.content.Context,android.content.Intent):42:42 -> <init>
+    16:16:void <init>(android.content.Context,android.content.Intent):38:38 -> <init>
+    1:9:java.lang.String getBigPictureURL():118:126 -> getBigPictureURL
+    10:10:java.lang.String getBigPictureURL():123:123 -> getBigPictureURL
+    1:6:java.lang.String getCustomLargeIconURL():92:97 -> getCustomLargeIconURL
+    1:1:java.lang.String getDeeplink():71:71 -> getDeeplink
+    1:1:boolean hasBigPicture():106:106 -> hasBigPicture
+    1:1:boolean hasCustomLargeIcon():80:80 -> hasCustomLargeIcon
+    1:1:boolean hasDeeplink():61:61 -> hasDeeplink
+com.batch.android.BatchPushHelper -> com.batch.android.e:
+# {"id":"sourceFile","fileName":"BatchPushHelper.java"}
+    1:1:void <init>():18:18 -> <init>
+    1:6:boolean canDisplayPush(android.content.Context,com.batch.android.core.InternalPushData):30:35 -> a
+    7:7:boolean canDisplayPush(android.content.Context,com.batch.android.core.InternalPushData):32:32 -> a
+    8:15:android.os.Bundle firebaseMessageToReceiverBundle(com.google.firebase.messaging.RemoteMessage):56:63 -> a
+    16:17:boolean installIDMatchesCurrent(android.content.Context,java.lang.String):75:76 -> a
+com.batch.android.BatchPushInstanceIDService -> com.batch.android.BatchPushInstanceIDService:
+# {"id":"sourceFile","fileName":"BatchPushInstanceIDService.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:3:void onTokenRefresh():16:18 -> onTokenRefresh
+com.batch.android.BatchPushJobService -> com.batch.android.BatchPushJobService:
+# {"id":"sourceFile","fileName":"BatchPushJobService.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():20:20 -> <init>
+    1:12:boolean onStartJob(android.app.job.JobParameters):29:40 -> onStartJob
+    1:1:boolean onStopJob(android.app.job.JobParameters):46:46 -> onStopJob
+com.batch.android.BatchPushJobService$PresentPushTask -> com.batch.android.BatchPushJobService$a:
+# {"id":"sourceFile","fileName":"BatchPushJobService.java"}
+    android.os.Bundle pushData -> a
+    android.app.job.JobParameters originJobParameters -> c
+    java.lang.ref.WeakReference originService -> b
+    1:4:void <init>(android.os.Bundle,android.app.job.JobService,android.app.job.JobParameters):62:65 -> <init>
+    1:29:java.lang.Void doInBackground(java.lang.Void[]):70:98 -> a
+    30:32:java.lang.Void doInBackground(java.lang.Void[]):92:94 -> a
+    33:43:java.lang.Void doInBackground(java.lang.Void[]):90:100 -> a
+    1:1:java.lang.Object doInBackground(java.lang.Object[]):50:50 -> doInBackground
+com.batch.android.BatchPushMessageDismissReceiver -> com.batch.android.BatchPushMessageDismissReceiver:
+# {"id":"sourceFile","fileName":"BatchPushMessageDismissReceiver.java"}
+    java.lang.String TAG -> d
+    1:1:void <init>():17:17 -> <init>
+    1:21:void onReceive(android.content.Context,android.content.Intent):24:44 -> onReceive
+    22:22:void onReceive(android.content.Context,android.content.Intent):30:30 -> onReceive
+com.batch.android.BatchPushMessageReceiver -> com.batch.android.BatchPushMessageReceiver:
+# {"id":"sourceFile","fileName":"BatchPushMessageReceiver.java"}
+    java.util.ArrayDeque handledMessageIDs -> f
+    int MAX_HANDLED_MESSAGE_IDS_COUNT -> e
+    java.lang.String TAG -> d
+    1:1:void <clinit>():39:39 -> <clinit>
+    1:1:void <init>():29:29 -> <init>
+    1:27:boolean presentNotification(android.content.Context,android.content.Intent):77:103 -> a
+    28:28:boolean isDuplicateMessage(java.lang.String):162:162 -> a
+    29:35:java.lang.String getGoogleMessageID(android.content.Intent):183:189 -> a
+    36:36:int getHandledMessageIDsSize():198:198 -> a
+    1:2:boolean isFCMMessage(android.content.Intent):64:65 -> b
+    3:28:boolean scheduleJob(android.content.Context,android.content.Intent):113:138 -> b
+    29:49:boolean scheduleJob(android.content.Context,android.content.Intent):121:141 -> b
+    50:52:void markMessageAsHandled(java.lang.String):170:172 -> b
+    53:53:void resetHandledMessageIDs():203:203 -> b
+    1:5:void startPresentationService(android.content.Context,android.content.Intent):148:152 -> c
+    1:15:void onReceive(android.content.Context,android.content.Intent):44:58 -> onReceive
+com.batch.android.BatchPushNotificationPresenter -> com.batch.android.f:
+# {"id":"sourceFile","fileName":"BatchPushNotificationPresenter.java"}
+    java.lang.String TAG -> a
+    int DEFAULT_NO_NOTIFICATION -> e
+    java.lang.String CUSTOM_SMALL_ICON_FIREBASE_METADATA_NAME -> c
+    java.lang.String CUSTOM_SMALL_ICON_METADATA_NAME -> b
+    java.lang.String CUSTOM_COLOR_METADATA -> d
+    1:1:void <init>():59:59 -> <init>
+    1:42:void displayForPush(android.content.Context,android.os.Bundle):82:123 -> a
+    43:52:void _handleLocalCampaignsSilentPush(android.content.Context):131:140 -> a
+    53:257:void presentNotification(android.content.Context,android.os.Bundle,com.batch.android.BatchPushPayload,com.batch.android.BatchNotificationInterceptor):154:358 -> a
+    258:324:void presentNotification(android.content.Context,android.os.Bundle,com.batch.android.BatchPushPayload,com.batch.android.BatchNotificationInterceptor):352:418 -> a
+    325:392:void presentNotification(android.content.Context,android.os.Bundle,com.batch.android.BatchPushPayload,com.batch.android.BatchNotificationInterceptor):417:484 -> a
+    393:459:void presentNotification(android.content.Context,android.os.Bundle,com.batch.android.BatchPushPayload,com.batch.android.BatchNotificationInterceptor):480:546 -> a
+    460:460:void presentNotification(android.content.Context,android.os.Bundle,com.batch.android.BatchPushPayload,com.batch.android.BatchNotificationInterceptor):208:208 -> a
+    461:504:boolean trySendLandingToForegroundApp(android.content.Context,android.os.Bundle,com.batch.android.core.InternalPushData):560:603 -> a
+    505:509:android.graphics.Bitmap resizeLargeIcon(android.content.Context,android.graphics.Bitmap):613:617 -> a
+    510:530:void applyNotificationFormat(android.content.Context,com.batch.android.push.formats.NotificationFormat,androidx.core.app.NotificationCompat$Builder):734:754 -> a
+    1:5:int getAppPrimaryColor(android.content.Context):696:700 -> b
+    1:26:int getDefaults(android.content.Context):629:654 -> c
+    1:10:java.lang.Integer getMetaDataPushColor(android.content.Context):714:723 -> d
+    1:15:java.lang.Integer getMetaDataSmallIconResId(android.content.Context):674:688 -> e
+com.batch.android.BatchPushPayload -> com.batch.android.BatchPushPayload:
+# {"id":"sourceFile","fileName":"BatchPushPayload.java"}
+    android.os.Bundle rawData -> b
+    com.batch.android.core.InternalPushData internalPushData -> a
+    1:8:void <init>(android.os.Bundle):50:57 -> <init>
+    9:9:void <init>(android.os.Bundle):54:54 -> <init>
+    10:15:void <init>(com.google.firebase.messaging.RemoteMessage):60:65 -> <init>
+    1:1:com.batch.android.core.InternalPushData getInternalData():352:352 -> a
+    1:2:java.util.List getActions():293:294 -> getActions
+    1:9:java.lang.String getBigPictureURL(android.content.Context):257:265 -> getBigPictureURL
+    10:10:java.lang.String getBigPictureURL(android.content.Context):262:262 -> getBigPictureURL
+    1:1:java.lang.String getChannel():334:334 -> getChannel
+    1:6:java.lang.String getCustomLargeIconURL(android.content.Context):231:236 -> getCustomLargeIconURL
+    1:1:java.lang.String getDeeplink():210:210 -> getDeeplink
+    1:1:java.lang.String getGroup():315:315 -> getGroup
+    1:5:com.batch.android.BatchMessage getLandingMessage():282:286 -> getLandingMessage
+    1:1:int getPriority():306:306 -> getPriority
+    1:1:android.os.Bundle getPushBundle():346:346 -> getPushBundle
+    1:1:boolean hasBigPicture():245:245 -> hasBigPicture
+    1:1:boolean hasCustomLargeIcon():219:219 -> hasCustomLargeIcon
+    1:1:boolean hasDeeplink():200:200 -> hasDeeplink
+    1:1:boolean hasLandingMessage():273:273 -> hasLandingMessage
+    1:1:boolean isGroupSummary():324:324 -> isGroupSummary
+    1:7:com.batch.android.BatchPushPayload payloadFromBundle(android.os.Bundle):86:92 -> payloadFromBundle
+    8:8:com.batch.android.BatchPushPayload payloadFromBundle(android.os.Bundle):89:89 -> payloadFromBundle
+    9:9:com.batch.android.BatchPushPayload payloadFromBundle(android.os.Bundle):83:83 -> payloadFromBundle
+    1:1:com.batch.android.BatchPushPayload payloadFromFirebaseMessage(com.google.firebase.messaging.RemoteMessage):153:153 -> payloadFromFirebaseMessage
+    2:2:com.batch.android.BatchPushPayload payloadFromFirebaseMessage(com.google.firebase.messaging.RemoteMessage):150:150 -> payloadFromFirebaseMessage
+    1:1:com.batch.android.BatchPushPayload payloadFromReceiverExtras(android.os.Bundle):134:134 -> payloadFromReceiverExtras
+    2:2:com.batch.android.BatchPushPayload payloadFromReceiverExtras(android.os.Bundle):131:131 -> payloadFromReceiverExtras
+    1:7:com.batch.android.BatchPushPayload payloadFromReceiverIntent(android.content.Intent):110:116 -> payloadFromReceiverIntent
+    8:8:com.batch.android.BatchPushPayload payloadFromReceiverIntent(android.content.Intent):113:113 -> payloadFromReceiverIntent
+    9:9:com.batch.android.BatchPushPayload payloadFromReceiverIntent(android.content.Intent):107:107 -> payloadFromReceiverIntent
+    1:1:void writeToBundle(android.os.Bundle):172:172 -> writeToBundle
+    2:2:void writeToBundle(android.os.Bundle):169:169 -> writeToBundle
+    1:1:void writeToIntentExtras(android.content.Intent):187:187 -> writeToIntentExtras
+    2:2:void writeToIntentExtras(android.content.Intent):184:184 -> writeToIntentExtras
+com.batch.android.BatchPushPayload$ParsingException -> com.batch.android.BatchPushPayload$ParsingException:
+# {"id":"sourceFile","fileName":"BatchPushPayload.java"}
+    1:1:void <init>():33:33 -> <init>
+    2:2:void <init>(java.lang.String):37:37 -> <init>
+    3:3:void <init>(java.lang.String,java.lang.Throwable):42:42 -> <init>
+com.batch.android.BatchPushReceiver -> com.batch.android.BatchPushReceiver:
+# {"id":"sourceFile","fileName":"BatchPushReceiver.java"}
+    1:1:void <init>():17:17 -> <init>
+    1:17:void onReceive(android.content.Context,android.content.Intent):21:37 -> onReceive
+com.batch.android.BatchPushService -> com.batch.android.BatchPushService:
+# {"id":"sourceFile","fileName":"BatchPushService.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():21:21 -> <init>
+    1:11:void onHandleIntent(android.content.Intent):28:38 -> onHandleIntent
+    12:19:void onHandleIntent(android.content.Intent):31:38 -> onHandleIntent
+    20:20:void onHandleIntent(android.content.Intent):35:35 -> onHandleIntent
+    21:27:void onHandleIntent(android.content.Intent):33:39 -> onHandleIntent
+com.batch.android.BatchQueryWebservice -> com.batch.android.g:
+# {"id":"sourceFile","fileName":"BatchQueryWebservice.java"}
+    java.util.List responses -> p
+    java.util.List queries -> o
+    java.lang.String TAG -> r
+    com.batch.android.WebserviceMetrics webserviceMetrics -> q
+    1:2:void <init>(android.content.Context,com.batch.android.core.Webservice$RequestType,java.lang.String,java.lang.String[]):56:57 -> <init>
+    java.util.List getQueries() -> I
+    1:5:com.batch.android.query.response.Response getResponseFor(java.lang.Class,com.batch.android.query.QueryType):218:222 -> a
+    6:6:com.batch.android.query.response.Response getResponseFor(java.lang.Class,com.batch.android.query.QueryType):219:219 -> a
+    7:8:com.batch.android.query.response.Response getResponseForType(com.batch.android.query.QueryType):239:240 -> a
+    1:2:com.batch.android.query.Query getQueryForID(java.lang.String):255:256 -> b
+    1:55:void parseQueries(com.batch.android.json.JSONObject):145:199 -> c
+    56:56:void parseQueries(com.batch.android.json.JSONObject):196:196 -> c
+    57:57:void parseQueries(com.batch.android.json.JSONObject):193:193 -> c
+    58:58:void parseQueries(com.batch.android.json.JSONObject):190:190 -> c
+    59:59:void parseQueries(com.batch.android.json.JSONObject):187:187 -> c
+    60:80:void parseQueries(com.batch.android.json.JSONObject):184:204 -> c
+    81:81:void parseQueries(com.batch.android.json.JSONObject):175:175 -> c
+    82:86:void parseQueries(com.batch.android.json.JSONObject):151:155 -> c
+    87:87:void parseQueries(com.batch.android.json.JSONObject):146:146 -> c
+    1:11:void parseResponse(com.batch.android.json.JSONObject):124:134 -> d
+    1:33:com.batch.android.post.PostDataProvider getPostDataProvider():69:101 -> w
+com.batch.android.BatchQueryWebservice$1 -> com.batch.android.g$a:
+# {"id":"sourceFile","fileName":"BatchQueryWebservice.java"}
+    int[] $SwitchMap$com$batch$android$query$QueryType -> a
+    1:1:void <clinit>():182:182 -> <clinit>
+com.batch.android.BatchTagCollectionsFetchListener -> com.batch.android.BatchTagCollectionsFetchListener:
+# {"id":"sourceFile","fileName":"BatchTagCollectionsFetchListener.java"}
+com.batch.android.BatchUserAttribute -> com.batch.android.BatchUserAttribute:
+# {"id":"sourceFile","fileName":"BatchUserAttribute.java"}
+    1:3:void <init>(java.lang.Object,com.batch.android.BatchUserAttribute$Type):15:17 -> <init>
+    1:2:java.lang.Boolean getBooleanValue():46:47 -> getBooleanValue
+    1:2:java.util.Date getDateValue():22:23 -> getDateValue
+    1:2:java.lang.Number getNumberValue():38:39 -> getNumberValue
+    1:2:java.lang.String getStringValue():30:31 -> getStringValue
+    1:2:java.net.URI getUriValue():54:55 -> getUriValue
+com.batch.android.BatchUserAttribute$Type -> com.batch.android.BatchUserAttribute$Type:
+# {"id":"sourceFile","fileName":"BatchUserAttribute.java"}
+    com.batch.android.BatchUserAttribute$Type[] $VALUES -> a
+    1:6:void <clinit>():62:67 -> <clinit>
+    7:7:void <clinit>():60:60 -> <clinit>
+    1:1:void <init>(java.lang.String,int):61:61 -> <init>
+    1:1:com.batch.android.BatchUserAttribute$Type[] $values():60:60 -> a
+    1:1:com.batch.android.BatchUserAttribute$Type valueOf(java.lang.String):60:60 -> valueOf
+    1:1:com.batch.android.BatchUserAttribute$Type[] values():60:60 -> values
+com.batch.android.BatchUserDataEditor -> com.batch.android.BatchUserDataEditor:
+# {"id":"sourceFile","fileName":"BatchUserDataEditor.java"}
+    java.lang.String ATTRIBUTION_ID_FORMAT -> f
+    int EMAIL_MAX_LENGTH -> l
+    int ATTR_STRING_MAX_LENGTH -> j
+    com.batch.android.user.EmailSubscription emailSubscription -> d
+    int ATTR_URL_MAX_LENGTH -> k
+    java.util.regex.Pattern ATTR_KEY_PATTERN -> e
+    int REGION_INDEX -> h
+    int IDENTIFIER_INDEX -> i
+    boolean[] updatedFields -> b
+    int LANGUAGE_INDEX -> g
+    com.batch.android.user.UserOperationQueue operationQueue -> a
+    java.lang.String[] userFields -> c
+    1:1:void <clinit>():36:36 -> <clinit>
+    1:1:void <init>():49:49 -> <init>
+    2:4:void <init>():44:46 -> <init>
+    1:1:void lambda$setAttribute$1(java.lang.String,long,com.batch.android.user.SQLUserDatasource):233:233 -> a
+    2:2:void lambda$setAttribute$2(java.lang.String,double,com.batch.android.user.SQLUserDatasource):252:252 -> a
+    3:3:void lambda$setAttribute$3(java.lang.String,boolean,com.batch.android.user.SQLUserDatasource):270:270 -> a
+    4:4:void lambda$setAttribute$4(java.lang.String,java.util.Date,com.batch.android.user.SQLUserDatasource):299:299 -> a
+    5:5:void lambda$setAttribute$6(java.lang.String,java.net.URI,com.batch.android.user.SQLUserDatasource):373:373 -> a
+    6:6:void lambda$addTag$8(java.lang.String,java.lang.String,com.batch.android.user.SQLUserDatasource):442:442 -> a
+    7:7:void lambda$clearTagCollection$10(java.lang.String,com.batch.android.user.SQLUserDatasource):507:507 -> a
+    8:12:void lambda$saveSync$11(java.util.List,com.batch.android.core.Promise):535:539 -> a
+    13:23:java.lang.String normalizeAttributeKey(java.lang.String):551:561 -> a
+    24:30:java.lang.String normalizeAttributeKey(java.lang.String):552:558 -> a
+    31:34:com.batch.android.user.UserOperation getEmailUpdateOperation():582:585 -> a
+    35:35:void lambda$getEmailUpdateOperation$12(com.batch.android.user.SQLUserDatasource):586:586 -> a
+    1:27:com.batch.android.BatchUserDataEditor addTag(java.lang.String,java.lang.String):416:442 -> addTag
+    28:30:com.batch.android.BatchUserDataEditor addTag(java.lang.String,java.lang.String):431:433 -> addTag
+    31:31:com.batch.android.BatchUserDataEditor addTag(java.lang.String,java.lang.String):431:431 -> addTag
+    32:34:com.batch.android.BatchUserDataEditor addTag(java.lang.String,java.lang.String):418:420 -> addTag
+    35:35:com.batch.android.BatchUserDataEditor addTag(java.lang.String,java.lang.String):418:418 -> addTag
+    1:1:void lambda$removeAttribute$7(java.lang.String,com.batch.android.user.SQLUserDatasource):391:391 -> b
+    2:2:void lambda$removeTag$9(java.lang.String,java.lang.String,com.batch.android.user.SQLUserDatasource):483:483 -> b
+    3:7:java.lang.String normalizeTagCollection(java.lang.String):565:569 -> b
+    8:8:java.lang.String normalizeTagCollection(java.lang.String):566:566 -> b
+    9:14:com.batch.android.user.UserOperation getUserUpdateOperation():592:597 -> b
+    15:44:void lambda$getUserUpdateOperation$13(com.batch.android.user.SQLUserDatasource):598:627 -> b
+    45:45:void lambda$getUserUpdateOperation$13(com.batch.android.user.SQLUserDatasource):600:600 -> b
+    1:12:void lambda$setAttributionIdentifier$0(java.lang.String,com.batch.android.user.SQLUserDatasource):123:134 -> c
+    13:13:void lambda$setAttributionIdentifier$0(java.lang.String,com.batch.android.user.SQLUserDatasource):125:125 -> c
+    14:14:void lambda$setAttribute$5(java.lang.String,java.lang.String,com.batch.android.user.SQLUserDatasource):332:332 -> c
+    15:19:java.lang.String normalizeTagValue(java.lang.String):573:577 -> c
+    20:20:java.lang.String normalizeTagValue(java.lang.String):574:574 -> c
+    21:29:java.util.List popOperationQueue():633:641 -> c
+    1:1:com.batch.android.BatchUserDataEditor clearAttributes():401:401 -> clearAttributes
+    1:6:com.batch.android.BatchUserDataEditor clearTagCollection(java.lang.String):506:511 -> clearTagCollection
+    7:7:com.batch.android.BatchUserDataEditor clearTagCollection(java.lang.String):509:509 -> clearTagCollection
+    1:1:com.batch.android.BatchUserDataEditor clearTags():493:493 -> clearTags
+    1:12:com.batch.android.core.Promise saveSync():531:542 -> d
+    1:5:com.batch.android.BatchUserDataEditor removeAttribute(java.lang.String):387:391 -> removeAttribute
+    1:26:com.batch.android.BatchUserDataEditor removeTag(java.lang.String,java.lang.String):458:483 -> removeTag
+    27:29:com.batch.android.BatchUserDataEditor removeTag(java.lang.String,java.lang.String):473:475 -> removeTag
+    30:30:com.batch.android.BatchUserDataEditor removeTag(java.lang.String,java.lang.String):473:473 -> removeTag
+    31:33:com.batch.android.BatchUserDataEditor removeTag(java.lang.String,java.lang.String):460:462 -> removeTag
+    34:34:com.batch.android.BatchUserDataEditor removeTag(java.lang.String,java.lang.String):460:460 -> removeTag
+    1:2:void save():526:527 -> save
+    1:5:com.batch.android.BatchUserDataEditor setAttribute(java.lang.String,long):229:233 -> setAttribute
+    6:11:com.batch.android.BatchUserDataEditor setAttribute(java.lang.String,double):247:252 -> setAttribute
+    12:16:com.batch.android.BatchUserDataEditor setAttribute(java.lang.String,boolean):266:270 -> setAttribute
+    17:33:com.batch.android.BatchUserDataEditor setAttribute(java.lang.String,java.util.Date):284:300 -> setAttribute
+    34:51:com.batch.android.BatchUserDataEditor setAttribute(java.lang.String,java.lang.String):315:332 -> setAttribute
+    52:52:com.batch.android.BatchUserDataEditor setAttribute(java.lang.String,java.lang.String):322:322 -> setAttribute
+    53:80:com.batch.android.BatchUserDataEditor setAttribute(java.lang.String,java.net.URI):346:373 -> setAttribute
+    81:81:com.batch.android.BatchUserDataEditor setAttribute(java.lang.String,java.net.URI):364:364 -> setAttribute
+    82:82:com.batch.android.BatchUserDataEditor setAttribute(java.lang.String,java.net.URI):353:353 -> setAttribute
+    1:9:com.batch.android.BatchUserDataEditor setAttributionIdentifier(java.lang.String):114:122 -> setAttributionIdentifier
+    1:52:com.batch.android.BatchUserDataEditor setEmail(java.lang.String):149:200 -> setEmail
+    1:4:com.batch.android.BatchUserDataEditor setEmailMarketingSubscriptionState(com.batch.android.BatchEmailSubscriptionState):212:215 -> setEmailMarketingSubscriptionState
+    1:7:com.batch.android.BatchUserDataEditor setIdentifier(java.lang.String):97:103 -> setIdentifier
+    1:7:com.batch.android.BatchUserDataEditor setLanguage(java.lang.String):61:67 -> setLanguage
+    1:7:com.batch.android.BatchUserDataEditor setRegion(java.lang.String):79:85 -> setRegion
+com.batch.android.BatchUserDataEditor$AttributeValidationException -> com.batch.android.BatchUserDataEditor$a:
+# {"id":"sourceFile","fileName":"BatchUserDataEditor.java"}
+    1:1:void <init>():650:650 -> <init>
+com.batch.android.BatchUserProfile -> com.batch.android.BatchUserProfile:
+# {"id":"sourceFile","fileName":"BatchUserProfile.java"}
+    android.content.Context context -> a
+    1:5:void <init>(android.content.Context):26:30 -> <init>
+    6:6:void <init>(android.content.Context):28:28 -> <init>
+    1:1:long getVersion():143:143 -> a
+    1:1:boolean hasCustomLanguage():68:68 -> b
+    1:1:boolean hasCustomRegion():106:106 -> c
+    1:1:java.lang.String getCustomID():133:133 -> getCustomID
+    1:1:java.lang.String getLanguage():59:59 -> getLanguage
+    1:1:java.lang.String getRegion():95:95 -> getRegion
+    1:1:com.batch.android.BatchUserProfile setCustomID(java.lang.String):121:121 -> setCustomID
+    1:1:com.batch.android.BatchUserProfile setLanguage(java.lang.String):45:45 -> setLanguage
+    1:1:com.batch.android.BatchUserProfile setRegion(java.lang.String):81:81 -> setRegion
+com.batch.android.BatchWebViewContent -> com.batch.android.BatchWebViewContent:
+# {"id":"sourceFile","fileName":"BatchWebViewContent.java"}
+    java.lang.String url -> a
+    1:2:void <init>(com.batch.android.messaging.model.WebViewMessage):16:17 -> <init>
+    1:1:java.lang.String getURL():22:22 -> getURL
+com.batch.android.BatchWebservice -> com.batch.android.h:
+# {"id":"sourceFile","fileName":"BatchWebservice.java"}
+    int retryCount -> l
+    java.lang.String TAG -> n
+    com.batch.android.core.WebserviceErrorCause lastFailureCause -> m
+    1:1:void <init>(android.content.Context,com.batch.android.core.Webservice$RequestType,java.lang.String,java.lang.String[]):52:52 -> <init>
+    2:19:void <init>(android.content.Context,com.batch.android.core.Webservice$RequestType,java.lang.String,java.lang.String[]):37:54 -> <init>
+    1:30:void addPropertyParameters():193:222 -> G
+    31:39:void addPropertyParameters():218:226 -> G
+    java.lang.String getPropertyParameterKey() -> H
+    1:5:void onRetry(com.batch.android.core.WebserviceErrorCause):179:183 -> a
+    6:31:void handleParameters(com.batch.android.json.JSONObject):250:275 -> a
+    32:32:void handleParameters(com.batch.android.json.JSONObject):246:246 -> a
+    33:37:java.lang.String generateAcceptLanguage(android.content.Context):346:350 -> a
+    1:24:void addDefaultHeaders():61:84 -> b
+    25:29:void handleServerID(com.batch.android.json.JSONObject):290:294 -> b
+    30:30:void handleServerID(com.batch.android.json.JSONObject):286:286 -> b
+    31:56:java.lang.String generateUserAgent(android.content.Context):308:333 -> b
+    1:82:com.batch.android.post.PostDataProvider getPostDataProvider():93:174 -> w
+com.batch.android.BuildConfig -> com.batch.android.a.b:
+# {"id":"sourceFile","fileName":"BuildConfig.java"}
+    java.lang.Integer API_LEVEL -> d
+    java.lang.String WS_DOMAIN -> i
+    java.lang.String SDK_VERSION -> h
+    java.lang.Integer MESSAGING_API_LEVEL -> g
+    boolean ENABLE_DEBUG_LOGGER -> e
+    boolean ENABLE_WS_INTERCEPTOR -> f
+    boolean DEBUG -> a
+    java.lang.String BUILD_TYPE -> c
+    java.lang.String LIBRARY_PACKAGE_NAME -> b
+    1:7:void <clinit>():11:17 -> <clinit>
+    1:1:void <init>():6:6 -> <init>
+com.batch.android.Config -> com.batch.android.Config:
+# {"id":"sourceFile","fileName":"Config.java"}
+    com.batch.android.LoggerDelegate loggerDelegate -> d
+    java.lang.String apikey -> a
+    com.batch.android.LoggerLevel loggerLevel -> e
+    boolean shouldUseAdvancedDeviceInformation -> b
+    boolean shouldUseGoogleInstanceID -> c
+    1:1:void <init>(java.lang.String):40:40 -> <init>
+    2:23:void <init>(java.lang.String):20:41 -> <init>
+    1:1:com.batch.android.Config setCanUseAdvancedDeviceInformation(boolean):81:81 -> setCanUseAdvancedDeviceInformation
+    1:1:com.batch.android.Config setCanUseInstanceID(boolean):120:120 -> setCanUseInstanceID
+    1:1:com.batch.android.Config setLoggerDelegate(com.batch.android.LoggerDelegate):94:94 -> setLoggerDelegate
+    1:1:com.batch.android.Config setLoggerLevel(com.batch.android.LoggerLevel):105:105 -> setLoggerLevel
+com.batch.android.DeeplinkInterceptorRuntimeException -> com.batch.android.a.c:
+# {"id":"sourceFile","fileName":"DeeplinkInterceptorRuntimeException.java"}
+    java.lang.RuntimeException wrappedRuntimeException -> a
+    1:2:void <init>(java.lang.RuntimeException):17:18 -> <init>
+    1:1:java.lang.RuntimeException getWrappedRuntimeException():22:22 -> a
+com.batch.android.DisplayReceiptWebservice -> com.batch.android.i:
+# {"id":"sourceFile","fileName":"DisplayReceiptWebservice.java"}
+    com.batch.android.webservice.listener.DisplayReceiptWebserviceListener listener -> n
+    java.lang.String TAG -> o
+    1:5:void <init>(android.content.Context,com.batch.android.webservice.listener.DisplayReceiptWebserviceListener,com.batch.android.post.DisplayReceiptPostDataProvider,java.lang.String[]):32:36 -> <init>
+    6:6:void <init>(android.content.Context,com.batch.android.webservice.listener.DisplayReceiptWebserviceListener,com.batch.android.post.DisplayReceiptPostDataProvider,java.lang.String[]):34:34 -> <init>
+    1:1:java.lang.String getSpecificRetryCountKey():62:62 -> C
+    1:1:java.lang.String getTaskIdentifier():52:52 -> a
+    1:1:java.lang.String getCryptorTypeParameterKey():57:57 -> p
+    1:5:void run():42:46 -> run
+com.batch.android.FailReason -> com.batch.android.FailReason:
+# {"id":"sourceFile","fileName":"FailReason.java"}
+    com.batch.android.FailReason[] $VALUES -> a
+    1:17:void <clinit>():14:30 -> <clinit>
+    18:18:void <clinit>():9:9 -> <clinit>
+    1:1:void <init>(java.lang.String,int):10:10 -> <init>
+    1:1:com.batch.android.FailReason[] $values():9:9 -> a
+    1:1:com.batch.android.FailReason valueOf(java.lang.String):9:9 -> valueOf
+    1:1:com.batch.android.FailReason[] values():9:9 -> values
+com.batch.android.ImageDownloadWebservice -> com.batch.android.j:
+# {"id":"sourceFile","fileName":"ImageDownloadWebservice.java"}
+    java.lang.String TAG -> m
+    java.lang.String url -> l
+    1:2:void <init>(android.content.Context,java.lang.String,java.util.List):25:26 -> <init>
+    1:1:java.lang.String getSpecificConnectTimeoutKey():148:148 -> A
+    1:1:java.lang.String getSpecificReadTimeoutKey():153:153 -> B
+    1:1:java.lang.String getSpecificRetryCountKey():158:158 -> C
+    1:1:java.lang.String getURLSorterPatternParameterKey():123:123 -> F
+    1:20:android.graphics.Bitmap run():86:105 -> G
+    21:28:android.graphics.Bitmap run():102:109 -> G
+    1:13:java.lang.String buildImageURL(android.content.Context,java.lang.String,java.util.List):44:56 -> a
+    14:20:java.lang.String appendDensityToImageURL(java.lang.String,java.lang.Double):73:79 -> a
+    1:1:java.lang.String getCryptorModeParameterKey():133:133 -> o
+    1:1:java.lang.String getCryptorTypeParameterKey():128:128 -> p
+    1:1:java.lang.String getPostCryptorTypeParameterKey():138:138 -> v
+    com.batch.android.post.PostDataProvider getPostDataProvider() -> w
+    1:1:java.lang.String getReadCryptorTypeParameterKey():143:143 -> y
+com.batch.android.InAppMessageUserActionSource -> com.batch.android.InAppMessageUserActionSource:
+# {"id":"sourceFile","fileName":"InAppMessageUserActionSource.java"}
+com.batch.android.Install -> com.batch.android.k:
+# {"id":"sourceFile","fileName":"Install.java"}
+    java.util.Date installDate -> b
+    java.lang.String installID -> a
+    1:7:void <init>(android.content.Context):30:36 -> <init>
+    8:8:void <init>(android.content.Context):32:32 -> <init>
+    1:1:java.util.Date getInstallDate():56:56 -> a
+    2:2:java.lang.String generateInstallID(android.content.Context):84:84 -> a
+    1:1:java.lang.String getInstallID():47:47 -> b
+    2:11:java.util.Date getInstallDate(android.content.Context):96:105 -> b
+    1:4:java.lang.String getInstallID(android.content.Context):68:71 -> c
+com.batch.android.IntentParser -> com.batch.android.l:
+# {"id":"sourceFile","fileName":"IntentParser.java"}
+    java.lang.String FROM_PUSH_LEGACY_KEY -> g
+    java.lang.String FROM_PUSH_KEY -> f
+    java.lang.String PUSH_ID_LEGACY_KEY -> i
+    java.lang.String PUSH_ID_KEY -> h
+    android.content.Intent intent -> a
+    java.lang.String TAG -> c
+    com.batch.android.BatchPushPayload payload -> b
+    java.lang.String ALREADY_TRACKED_OPEN_KEY -> e
+    java.lang.String ALREADY_SHOWN_LANDING_KEY -> d
+    1:1:void <init>(android.app.Activity):72:72 -> <init>
+    2:2:void <init>(android.content.Intent):80:80 -> <init>
+    3:33:void <init>(android.content.Intent):62:92 -> <init>
+    1:5:boolean comesFromPush():106:110 -> a
+    6:15:void putPushExtrasToIntent(android.os.Bundle,com.batch.android.core.InternalPushData,android.content.Intent):236:245 -> a
+    16:18:void copyExtras(android.content.Intent,android.content.Intent):257:259 -> a
+    19:45:void copyExtras(android.os.Bundle,android.os.Bundle):270:296 -> a
+    1:5:com.batch.android.BatchMessage getLanding():181:185 -> b
+    1:2:android.os.Bundle getPushBundle():226:227 -> c
+    1:8:com.batch.android.core.InternalPushData getPushData():213:220 -> d
+    1:7:java.lang.String getPushId():195:201 -> e
+    1:5:boolean hasLanding():143:147 -> f
+    1:1:boolean hasPushPayload():97:97 -> g
+    1:5:boolean isLandingAlreadyShown():156:160 -> h
+    1:5:boolean isOpenAlreadyTracked():119:123 -> i
+    1:5:void markLandingAsAlreadyShown():167:171 -> j
+    1:4:void markOpenAsAlreadyTracked():130:133 -> k
+com.batch.android.LocalCampaignsJITWebservice -> com.batch.android.m:
+# {"id":"sourceFile","fileName":"LocalCampaignsJITWebservice.java"}
+    com.batch.android.webservice.listener.LocalCampaignsJITWebserviceListener listener -> n
+    java.lang.String TAG -> o
+    1:5:void <init>(android.content.Context,com.batch.android.webservice.listener.LocalCampaignsJITWebserviceListener,com.batch.android.post.LocalCampaignsJITPostDataProvider,java.lang.String[]):30:34 -> <init>
+    6:6:void <init>(android.content.Context,com.batch.android.webservice.listener.LocalCampaignsJITWebserviceListener,com.batch.android.post.LocalCampaignsJITPostDataProvider,java.lang.String[]):32:32 -> <init>
+    1:1:java.lang.String getSpecificConnectTimeoutKey():63:63 -> A
+    1:1:java.lang.String getSpecificReadTimeoutKey():68:68 -> B
+    1:1:java.lang.String getSpecificRetryCountKey():73:73 -> C
+    1:1:java.lang.String getTaskIdentifier():39:39 -> a
+    1:14:void run():44:57 -> run
+com.batch.android.LocalCampaignsWebservice -> com.batch.android.n:
+# {"id":"sourceFile","fileName":"LocalCampaignsWebservice.java"}
+    com.batch.android.webservice.listener.LocalCampaignsWebserviceListener listener -> s
+    java.lang.String TAG -> t
+    1:2:void <init>(android.content.Context,com.batch.android.webservice.listener.LocalCampaignsWebserviceListener):38:39 -> <init>
+    1:1:java.lang.String getSpecificConnectTimeoutKey():173:173 -> A
+    1:1:java.lang.String getSpecificReadTimeoutKey():178:178 -> B
+    1:1:java.lang.String getSpecificRetryCountKey():183:183 -> C
+    1:1:java.lang.String getURLSorterPatternParameterKey():148:148 -> F
+    1:1:java.lang.String getPropertyParameterKey():143:143 -> H
+    1:3:java.util.List getQueries():46:48 -> I
+    1:1:java.lang.String getTaskIdentifier():136:136 -> a
+    1:1:java.lang.String getCryptorModeParameterKey():158:158 -> o
+    1:1:java.lang.String getCryptorTypeParameterKey():153:153 -> p
+    1:59:void run():56:114 -> run
+    60:60:void run():113:113 -> run
+    61:77:void run():111:127 -> run
+    78:81:void run():68:71 -> run
+    82:101:void run():68:87 -> run
+    102:102:void run():84:84 -> run
+    103:103:void run():81:81 -> run
+    104:156:void run():78:130 -> run
+    1:1:java.lang.String getPostCryptorTypeParameterKey():163:163 -> v
+    1:1:java.lang.String getReadCryptorTypeParameterKey():168:168 -> y
+com.batch.android.LocalCampaignsWebservice$1 -> com.batch.android.n$a:
+# {"id":"sourceFile","fileName":"LocalCampaignsWebservice.java"}
+    int[] $SwitchMap$com$batch$android$core$Webservice$WebserviceError$Reason -> a
+    1:1:void <clinit>():76:76 -> <clinit>
+com.batch.android.LoggerDelegate -> com.batch.android.LoggerDelegate:
+# {"id":"sourceFile","fileName":"LoggerDelegate.java"}
+com.batch.android.LoggerLevel -> com.batch.android.LoggerLevel:
+# {"id":"sourceFile","fileName":"LoggerLevel.java"}
+    com.batch.android.LoggerLevel[] $VALUES -> b
+    int level -> a
+    1:5:void <clinit>():7:11 -> <clinit>
+    6:6:void <clinit>():5:5 -> <clinit>
+    1:2:void <init>(java.lang.String,int,int):15:16 -> <init>
+    1:1:com.batch.android.LoggerLevel[] $values():5:5 -> a
+    1:1:boolean canLog(com.batch.android.LoggerLevel):21:21 -> canLog
+    1:1:com.batch.android.LoggerLevel valueOf(java.lang.String):5:5 -> valueOf
+    1:1:com.batch.android.LoggerLevel[] values():5:5 -> values
+com.batch.android.MessagingActivity -> com.batch.android.MessagingActivity:
+# {"id":"sourceFile","fileName":"MessagingActivity.java"}
+    android.content.BroadcastReceiver dismissReceiver -> a
+    java.lang.String ROTATED -> c
+    java.lang.String TAG -> b
+    java.lang.String DIALOG_FRAGMENT_TAG -> d
+    1:7:void <init>():23:29 -> <init>
+    1:12:boolean showMessage(com.batch.android.BatchMessage):110:121 -> a
+    1:4:void finish():98:101 -> finish
+    1:23:void onCreate(android.os.Bundle):40:62 -> onCreate
+    24:48:void onCreate(android.os.Bundle):44:68 -> onCreate
+    1:3:void onDestroy():91:93 -> onDestroy
+    1:6:void onDialogDismiss(androidx.fragment.app.DialogFragment):129:134 -> onDialogDismiss
+    1:2:void onSaveInstanceState(android.os.Bundle):73:74 -> onSaveInstanceState
+    1:2:void onStart():79:80 -> onStart
+    1:2:void onStop():85:86 -> onStop
+    1:6:void startActivityForMessage(android.content.Context,com.batch.android.BatchMessage):143:148 -> startActivityForMessage
+com.batch.android.MessagingActivity$1 -> com.batch.android.MessagingActivity$a:
+# {"id":"sourceFile","fileName":"MessagingActivity.java"}
+    com.batch.android.MessagingActivity this$0 -> a
+    1:1:void <init>(com.batch.android.MessagingActivity):29:29 -> <init>
+    1:2:void onReceive(android.content.Context,android.content.Intent):32:33 -> onReceive
+com.batch.android.MessagingAnalyticsDelegate -> com.batch.android.o:
+# {"id":"sourceFile","fileName":"MessagingAnalyticsDelegate.java"}
+    java.lang.String STATE_KEY_CALLED_METHODS -> g
+    com.batch.android.module.EventDispatcherModule eventDispatcherModule -> c
+    com.batch.android.module.TrackerModule trackerModule -> b
+    com.batch.android.messaging.model.Message message -> d
+    com.batch.android.module.MessagingModule messagingModule -> a
+    java.util.ArrayList calledMethods -> f
+    com.batch.android.BatchMessage sourceMessage -> e
+    1:1:void <init>(com.batch.android.module.MessagingModule,com.batch.android.module.TrackerModule,com.batch.android.module.EventDispatcherModule,com.batch.android.messaging.model.Message,com.batch.android.BatchMessage):54:54 -> <init>
+    2:15:void <init>(com.batch.android.module.MessagingModule,com.batch.android.module.TrackerModule,com.batch.android.module.EventDispatcherModule,com.batch.android.messaging.model.Message,com.batch.android.BatchMessage):46:59 -> <init>
+    1:4:com.batch.android.MessagingAnalyticsDelegate provide(com.batch.android.messaging.model.Message,com.batch.android.BatchMessage):64:67 -> a
+    5:12:boolean ensureOnce(java.lang.String):75:82 -> a
+    13:27:void onGlobalTap(com.batch.android.messaging.model.Action):88:102 -> a
+    28:28:void onGlobalTap(com.batch.android.messaging.model.Action):97:97 -> a
+    29:44:void onCTAClicked(int,com.batch.android.messaging.model.CTA):109:124 -> a
+    45:45:void onCTAClicked(int,com.batch.android.messaging.model.CTA):119:119 -> a
+    46:70:void onWebViewClickTracked(com.batch.android.messaging.model.Action,java.lang.String):133:157 -> a
+    71:71:void onWebViewClickTracked(com.batch.android.messaging.model.Action,java.lang.String):152:152 -> a
+    72:78:void onClosedError(com.batch.android.messaging.model.MessagingError):177:183 -> a
+    79:79:void onClosedError(com.batch.android.messaging.model.MessagingError):181:181 -> a
+    80:86:void onAutoClosedAfterDelay():192:198 -> a
+    87:87:void onAutoClosedAfterDelay():196:196 -> a
+    88:88:void onSaveInstanceState(android.os.Bundle):239:239 -> a
+    1:7:void onClosed():166:172 -> b
+    8:8:void onClosed():170:170 -> b
+    9:11:void restoreState(android.os.Bundle):231:233 -> b
+    1:4:void onViewDismissed():219:222 -> c
+    1:12:void onViewShown():203:214 -> d
+    13:13:void onViewShown():212:212 -> d
+com.batch.android.MetricWebservice -> com.batch.android.p:
+# {"id":"sourceFile","fileName":"MetricWebservice.java"}
+    java.lang.String TAG -> o
+    com.batch.android.webservice.listener.MetricWebserviceListener listener -> n
+    1:5:void <init>(android.content.Context,com.batch.android.webservice.listener.MetricWebserviceListener,com.batch.android.post.MetricPostDataProvider,java.lang.String[]):25:29 -> <init>
+    6:6:void <init>(android.content.Context,com.batch.android.webservice.listener.MetricWebserviceListener,com.batch.android.post.MetricPostDataProvider,java.lang.String[]):27:27 -> <init>
+    1:1:java.lang.String getSpecificRetryCountKey():50:50 -> C
+    1:1:java.lang.String getTaskIdentifier():45:45 -> a
+    1:6:void run():34:39 -> run
+com.batch.android.NotificationInterceptorRuntimeException -> com.batch.android.q:
+# {"id":"sourceFile","fileName":"NotificationInterceptorRuntimeException.java"}
+    java.lang.RuntimeException wrappedRuntimeException -> a
+    1:2:void <init>(java.lang.RuntimeException):17:18 -> <init>
+    1:1:java.lang.RuntimeException getWrappedRuntimeException():22:22 -> a
+com.batch.android.PrivateNotificationContentHelper -> com.batch.android.s:
+# {"id":"sourceFile","fileName":"PrivateNotificationContentHelper.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:1:com.batch.android.inbox.InboxNotificationContentInternal getInternalContent(com.batch.android.BatchInboxNotificationContent):15:15 -> a
+    2:2:com.batch.android.BatchInboxNotificationContent getPublicContent(com.batch.android.inbox.InboxNotificationContentInternal):19:19 -> a
+com.batch.android.PushNotificationType -> com.batch.android.PushNotificationType:
+# {"id":"sourceFile","fileName":"PushNotificationType.java"}
+    com.batch.android.PushNotificationType[] $VALUES -> b
+    int value -> a
+    1:21:void <clinit>():15:35 -> <clinit>
+    22:22:void <clinit>():10:10 -> <clinit>
+    1:2:void <init>(java.lang.String,int,int):47:48 -> <init>
+    1:1:com.batch.android.PushNotificationType[] $values():10:10 -> a
+    1:10:java.util.EnumSet fromValue(int):54:63 -> fromValue
+    1:2:int toValue(java.util.EnumSet):72:73 -> toValue
+    1:1:com.batch.android.PushNotificationType valueOf(java.lang.String):10:10 -> valueOf
+    1:1:com.batch.android.PushNotificationType[] values():10:10 -> values
+com.batch.android.PushRegistrationProvider -> com.batch.android.PushRegistrationProvider:
+# {"id":"sourceFile","fileName":"PushRegistrationProvider.java"}
+com.batch.android.PushRegistrationProviderAvailabilityException -> com.batch.android.PushRegistrationProviderAvailabilityException:
+# {"id":"sourceFile","fileName":"PushRegistrationProviderAvailabilityException.java"}
+    1:1:void <init>(java.lang.String):9:9 -> <init>
+com.batch.android.PushUserActionSource -> com.batch.android.PushUserActionSource:
+# {"id":"sourceFile","fileName":"PushUserActionSource.java"}
+com.batch.android.PushWebservice -> com.batch.android.t:
+# {"id":"sourceFile","fileName":"PushWebservice.java"}
+    com.batch.android.webservice.listener.PushWebserviceListener listener -> t
+    com.batch.android.push.Registration registration -> s
+    java.lang.String TAG -> u
+    1:11:void <init>(android.content.Context,com.batch.android.push.Registration,com.batch.android.webservice.listener.PushWebserviceListener):43:53 -> <init>
+    12:12:void <init>(android.content.Context,com.batch.android.push.Registration,com.batch.android.webservice.listener.PushWebserviceListener):49:49 -> <init>
+    13:13:void <init>(android.content.Context,com.batch.android.push.Registration,com.batch.android.webservice.listener.PushWebserviceListener):45:45 -> <init>
+    1:1:java.lang.String getSpecificConnectTimeoutKey():164:164 -> A
+    1:1:java.lang.String getSpecificReadTimeoutKey():169:169 -> B
+    1:1:java.lang.String getSpecificRetryCountKey():174:174 -> C
+    1:1:java.lang.String getURLSorterPatternParameterKey():139:139 -> F
+    1:1:java.lang.String getPropertyParameterKey():134:134 -> H
+    1:3:java.util.List getQueries():60:62 -> I
+    1:1:java.lang.String getTaskIdentifier():127:127 -> a
+    1:1:java.lang.String getCryptorModeParameterKey():149:149 -> o
+    1:1:java.lang.String getCryptorTypeParameterKey():144:144 -> p
+    1:49:void run():70:118 -> run
+    50:50:void run():112:112 -> run
+    51:65:void run():81:95 -> run
+    66:66:void run():92:92 -> run
+    67:67:void run():89:89 -> run
+    68:103:void run():86:121 -> run
+    1:1:java.lang.String getPostCryptorTypeParameterKey():154:154 -> v
+    1:1:java.lang.String getReadCryptorTypeParameterKey():159:159 -> y
+com.batch.android.PushWebservice$1 -> com.batch.android.t$a:
+# {"id":"sourceFile","fileName":"PushWebservice.java"}
+    int[] $SwitchMap$com$batch$android$core$Webservice$WebserviceError$Reason -> a
+    1:1:void <clinit>():84:84 -> <clinit>
+com.batch.android.StartWebservice -> com.batch.android.u:
+# {"id":"sourceFile","fileName":"StartWebservice.java"}
+    com.batch.android.webservice.listener.StartWebserviceListener listener -> s
+    java.lang.String TAG -> w
+    boolean userActivity -> v
+    java.lang.String pushId -> u
+    boolean fromPush -> t
+    1:9:void <init>(android.content.Context,boolean,java.lang.String,boolean,com.batch.android.webservice.listener.StartWebserviceListener):64:72 -> <init>
+    10:10:void <init>(android.content.Context,boolean,java.lang.String,boolean,com.batch.android.webservice.listener.StartWebserviceListener):66:66 -> <init>
+    1:1:java.lang.String getSpecificConnectTimeoutKey():189:189 -> A
+    1:1:java.lang.String getSpecificReadTimeoutKey():194:194 -> B
+    1:1:java.lang.String getSpecificRetryCountKey():199:199 -> C
+    1:1:java.lang.String getURLSorterPatternParameterKey():164:164 -> F
+    1:1:java.lang.String getPropertyParameterKey():159:159 -> H
+    1:8:java.util.List getQueries():79:86 -> I
+    1:1:java.lang.String getTaskIdentifier():152:152 -> a
+    1:1:java.lang.String getCryptorModeParameterKey():174:174 -> o
+    1:1:java.lang.String getCryptorTypeParameterKey():169:169 -> p
+    1:49:void run():95:143 -> run
+    50:50:void run():137:137 -> run
+    51:65:void run():106:120 -> run
+    66:66:void run():117:117 -> run
+    67:67:void run():114:114 -> run
+    68:103:void run():111:146 -> run
+    1:1:java.lang.String getPostCryptorTypeParameterKey():179:179 -> v
+    1:1:java.lang.String getReadCryptorTypeParameterKey():184:184 -> y
+com.batch.android.StartWebservice$1 -> com.batch.android.u$a:
+# {"id":"sourceFile","fileName":"StartWebservice.java"}
+    int[] $SwitchMap$com$batch$android$core$Webservice$WebserviceError$Reason -> a
+    1:1:void <clinit>():109:109 -> <clinit>
+com.batch.android.TrackerWebservice -> com.batch.android.v:
+# {"id":"sourceFile","fileName":"TrackerWebservice.java"}
+    com.batch.android.webservice.listener.TrackerWebserviceListener listener -> s
+    java.lang.String TAG -> v
+    java.util.List events -> t
+    boolean canBypassOptOut -> u
+    1:12:void <init>(android.content.Context,com.batch.android.webservice.listener.TrackerWebserviceListener,java.util.List,boolean):35:46 -> <init>
+    13:13:void <init>(android.content.Context,com.batch.android.webservice.listener.TrackerWebserviceListener,java.util.List,boolean):41:41 -> <init>
+    14:14:void <init>(android.content.Context,com.batch.android.webservice.listener.TrackerWebserviceListener,java.util.List,boolean):37:37 -> <init>
+    1:1:java.lang.String getSpecificConnectTimeoutKey():156:156 -> A
+    1:1:java.lang.String getSpecificReadTimeoutKey():161:161 -> B
+    1:1:java.lang.String getSpecificRetryCountKey():166:166 -> C
+    1:1:java.lang.String getURLSorterPatternParameterKey():131:131 -> F
+    1:1:java.lang.String getPropertyParameterKey():126:126 -> H
+    1:3:java.util.List getQueries():58:60 -> I
+    1:1:java.lang.String getTaskIdentifier():119:119 -> a
+    1:1:boolean canBypassOptOut():53:53 -> i
+    1:1:java.lang.String getCryptorModeParameterKey():141:141 -> o
+    1:1:java.lang.String getCryptorTypeParameterKey():136:136 -> p
+    1:41:void run():68:108 -> run
+    42:56:void run():79:93 -> run
+    57:57:void run():90:90 -> run
+    58:58:void run():87:87 -> run
+    59:88:void run():84:113 -> run
+    89:93:void run():110:114 -> run
+    1:1:java.lang.String getPostCryptorTypeParameterKey():146:146 -> v
+    1:1:java.lang.String getReadCryptorTypeParameterKey():151:151 -> y
+com.batch.android.TrackerWebservice$1 -> com.batch.android.v$a:
+# {"id":"sourceFile","fileName":"TrackerWebservice.java"}
+    int[] $SwitchMap$com$batch$android$core$Webservice$WebserviceError$Reason -> a
+    1:1:void <clinit>():82:82 -> <clinit>
+com.batch.android.User -> com.batch.android.w:
+# {"id":"sourceFile","fileName":"User.java"}
+    android.content.Context context -> a
+    1:6:void <init>(android.content.Context):31:36 -> <init>
+    7:7:void <init>(android.content.Context):33:33 -> <init>
+    1:3:void setAttributionID(java.lang.String):118:120 -> a
+    4:4:java.lang.String getAttributionID():131:131 -> a
+    1:3:void setCustomID(java.lang.String):96:98 -> b
+    4:4:java.lang.String getCustomID():108:108 -> b
+    1:3:void setLanguage(java.lang.String):48:50 -> c
+    4:4:java.lang.String getLanguage():60:60 -> c
+    1:3:void setRegion(java.lang.String):72:74 -> d
+    4:4:java.lang.String getRegion():84:84 -> d
+    1:7:long getVersion():142:148 -> e
+    1:2:long incrementVersion():160:161 -> f
+    1:11:void sendAttributionIDChangedEvent():166:176 -> g
+    1:20:void sendChangeEvent():182:201 -> h
+com.batch.android.UserAction -> com.batch.android.UserAction:
+# {"id":"sourceFile","fileName":"UserAction.java"}
+    com.batch.android.UserActionRunnable runnable -> b
+    java.lang.String identifier -> a
+    1:17:void <init>(java.lang.String,com.batch.android.UserActionRunnable):22:38 -> <init>
+    18:18:void <init>(java.lang.String,com.batch.android.UserActionRunnable):34:34 -> <init>
+    19:19:void <init>(java.lang.String,com.batch.android.UserActionRunnable):29:29 -> <init>
+    20:20:void <init>(java.lang.String,com.batch.android.UserActionRunnable):25:25 -> <init>
+    1:1:java.lang.String getIdentifier():43:43 -> getIdentifier
+    1:1:com.batch.android.UserActionRunnable getRunnable():48:48 -> getRunnable
+com.batch.android.UserActionRunnable -> com.batch.android.UserActionRunnable:
+# {"id":"sourceFile","fileName":"UserActionRunnable.java"}
+com.batch.android.UserActionSource -> com.batch.android.UserActionSource:
+# {"id":"sourceFile","fileName":"UserActionSource.java"}
+com.batch.android.UserDataAccessor -> com.batch.android.x:
+# {"id":"sourceFile","fileName":"UserDataAccessor.java"}
+    1:1:void <init>():19:19 -> <init>
+    1:37:void fetchTagCollections(android.content.Context,com.batch.android.BatchTagCollectionsFetchListener,boolean):31:67 -> a
+    38:38:void fetchTagCollections(android.content.Context,com.batch.android.BatchTagCollectionsFetchListener,boolean):28:28 -> a
+    39:64:void lambda$fetchTagCollections$1(android.content.Context,boolean,com.batch.android.BatchTagCollectionsFetchListener):33:58 -> a
+    65:67:void lambda$fetchTagCollections$0(com.batch.android.BatchTagCollectionsFetchListener,java.util.Map):47:49 -> a
+    68:139:void fetchAttributes(android.content.Context,com.batch.android.BatchAttributesFetchListener,boolean):81:152 -> a
+    140:140:void fetchAttributes(android.content.Context,com.batch.android.BatchAttributesFetchListener,boolean):78:78 -> a
+    141:169:void lambda$fetchAttributes$3(android.content.Context,boolean,com.batch.android.BatchAttributesFetchListener):83:111 -> a
+    170:170:void lambda$fetchAttributes$3(android.content.Context,boolean,com.batch.android.BatchAttributesFetchListener):108:108 -> a
+    171:171:void lambda$fetchAttributes$3(android.content.Context,boolean,com.batch.android.BatchAttributesFetchListener):105:105 -> a
+    172:172:void lambda$fetchAttributes$3(android.content.Context,boolean,com.batch.android.BatchAttributesFetchListener):102:102 -> a
+    173:173:void lambda$fetchAttributes$3(android.content.Context,boolean,com.batch.android.BatchAttributesFetchListener):99:99 -> a
+    174:221:void lambda$fetchAttributes$3(android.content.Context,boolean,com.batch.android.BatchAttributesFetchListener):96:143 -> a
+    222:224:void lambda$fetchAttributes$2(com.batch.android.BatchAttributesFetchListener,java.util.HashMap):132:134 -> a
+com.batch.android.UserDataAccessor$1 -> com.batch.android.x$a:
+# {"id":"sourceFile","fileName":"UserDataAccessor.java"}
+    int[] $SwitchMap$com$batch$android$user$AttributeType -> a
+    1:1:void <clinit>():94:94 -> <clinit>
+com.batch.android.WebserviceLauncher -> com.batch.android.y:
+# {"id":"sourceFile","fileName":"WebserviceLauncher.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():33:33 -> <init>
+    1:4:boolean launchStartWebservice(com.batch.android.runtime.RuntimeManager,boolean,java.lang.String,boolean):48:51 -> a
+    5:16:boolean launchStartWebservice(com.batch.android.runtime.RuntimeManager,boolean,java.lang.String,boolean):49:60 -> a
+    17:19:com.batch.android.core.TaskRunnable initTrackerWebservice(com.batch.android.runtime.RuntimeManager,java.util.List,com.batch.android.webservice.listener.TrackerWebserviceListener):79:81 -> a
+    20:22:com.batch.android.core.TaskRunnable initOptOutTrackerWebservice(android.content.Context,java.util.List,com.batch.android.webservice.listener.TrackerWebserviceListener):99:101 -> a
+    23:25:com.batch.android.core.TaskRunnable initMetricWebservice(android.content.Context,com.batch.android.post.MetricPostDataProvider,com.batch.android.webservice.listener.MetricWebserviceListener):120:122 -> a
+    26:28:boolean launchPushWebservice(com.batch.android.runtime.RuntimeManager,com.batch.android.push.Registration):133:135 -> a
+    29:34:boolean launchPushWebservice(com.batch.android.runtime.RuntimeManager,com.batch.android.push.Registration):134:139 -> a
+    35:38:boolean launchAttributesSendWebservice(com.batch.android.runtime.RuntimeManager,long,java.util.Map,java.util.Map):152:155 -> a
+    39:50:boolean launchAttributesSendWebservice(com.batch.android.runtime.RuntimeManager,long,java.util.Map,java.util.Map):153:164 -> a
+    51:54:boolean launchAttributesCheckWebservice(com.batch.android.runtime.RuntimeManager,long,java.lang.String):176:179 -> a
+    55:65:boolean launchAttributesCheckWebservice(com.batch.android.runtime.RuntimeManager,long,java.lang.String):177:187 -> a
+    66:70:boolean launchLocalCampaignsWebservice(com.batch.android.runtime.RuntimeManager):195:199 -> a
+    71:79:boolean launchLocalCampaignsWebservice(com.batch.android.runtime.RuntimeManager):196:204 -> a
+    80:87:boolean launchLocalCampaignsJITWebservice(com.batch.android.runtime.RuntimeManager,java.util.List,com.batch.android.webservice.listener.LocalCampaignsJITWebserviceListener):214:221 -> a
+    88:91:boolean launchDisplayReceiptWebservice(android.content.Context,com.batch.android.post.DisplayReceiptPostDataProvider,com.batch.android.webservice.listener.DisplayReceiptWebserviceListener):240:243 -> a
+com.batch.android.WebserviceMetrics -> com.batch.android.z:
+# {"id":"sourceFile","fileName":"WebserviceMetrics.java"}
+    java.util.Map metrics -> a
+    java.util.Map webservicesStartTime -> b
+    java.util.Map shortNames -> d
+    java.lang.String TAG -> c
+    1:10:void <clinit>():106:115 -> <clinit>
+    1:12:void <init>():18:29 -> <init>
+    1:9:void onWebserviceStarted(com.batch.android.core.Webservice):43:51 -> a
+    10:10:void onWebserviceStarted(com.batch.android.core.Webservice):40:40 -> a
+    11:31:void onWebserviceFinished(com.batch.android.core.Webservice,boolean):65:85 -> a
+    32:32:void onWebserviceFinished(com.batch.android.core.Webservice,boolean):81:81 -> a
+    33:33:void onWebserviceFinished(com.batch.android.core.Webservice,boolean):62:62 -> a
+    34:38:java.util.Map getMetrics():94:98 -> a
+com.batch.android.WebserviceMetrics$1 -> com.batch.android.z$a:
+# {"id":"sourceFile","fileName":"WebserviceMetrics.java"}
+com.batch.android.WebserviceMetrics$Metric -> com.batch.android.z$b:
+# {"id":"sourceFile","fileName":"WebserviceMetrics.java"}
+    long time -> b
+    boolean success -> a
+    1:1:void <init>(boolean,long,com.batch.android.WebserviceMetrics$1):124:124 -> <init>
+    2:4:void <init>(boolean,long):141:143 -> <init>
+com.batch.android.WebserviceParameterUtils -> com.batch.android.a0:
+# {"id":"sourceFile","fileName":"WebserviceParameterUtils.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():23:23 -> <init>
+    1:106:java.util.Map buildIds(android.content.Context):54:159 -> a
+    1:1:com.batch.android.json.JSONObject getWebserviceIdsAsJson(android.content.Context):42:42 -> b
+    1:1:java.util.Map getWebserviceIdsAsMap(android.content.Context):33:33 -> c
+com.batch.android.actions.ClipboardActionRunnable -> com.batch.android.b.a:
+# {"id":"sourceFile","fileName":"ClipboardActionRunnable.java"}
+    java.lang.String TAG -> a
+    java.lang.String IDENTIFIER -> c
+    java.lang.String BASE_ERROR_MSG -> b
+    1:1:void <init>():18:18 -> <init>
+    1:17:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):33:49 -> performAction
+com.batch.android.actions.DeeplinkActionRunnable -> com.batch.android.b.b:
+# {"id":"sourceFile","fileName":"DeeplinkActionRunnable.java"}
+    com.batch.android.module.ActionModule actionModule -> a
+    java.lang.String IDENTIFIER -> c
+    java.lang.String TAG -> b
+    java.lang.String ARGUMENT_SHOW_LINK_INAPP -> e
+    java.lang.String ARGUMENT_DEEPLINK_URL -> d
+    1:2:void <init>(com.batch.android.module.ActionModule):29:30 -> <init>
+    1:17:void launchDeeplink(android.content.Context,java.lang.String,boolean):35:51 -> a
+    18:48:void launchDeeplink(android.content.Context,java.lang.String,boolean):42:72 -> a
+    49:54:void launchDeeplink(android.content.Context,java.lang.String,boolean):63:68 -> a
+    55:80:void launchDeeplink(android.content.Context,java.lang.String,boolean) -> a
+    1:16:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):91:106 -> performAction
+    17:34:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):103:120 -> performAction
+    35:35:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):113:113 -> performAction
+    36:36:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):111:111 -> performAction
+com.batch.android.actions.GroupActionRunnable -> com.batch.android.b.c:
+# {"id":"sourceFile","fileName":"GroupActionRunnable.java"}
+    com.batch.android.module.ActionModule actionModule -> a
+    java.lang.String IDENTIFIER -> b
+    1:2:void <init>(com.batch.android.module.ActionModule):23:24 -> <init>
+    1:35:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):44:78 -> performAction
+com.batch.android.actions.LocalCampaignsRefreshActionRunnable -> com.batch.android.b.d:
+# {"id":"sourceFile","fileName":"LocalCampaignsRefreshActionRunnable.java"}
+    java.lang.String TAG -> a
+    java.lang.String IDENTIFIER -> b
+    1:1:void <init>():15:15 -> <init>
+    1:5:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):27:31 -> performAction
+com.batch.android.actions.NotificationPermissionActionRunnable -> com.batch.android.b.e:
+# {"id":"sourceFile","fileName":"NotificationPermissionActionRunnable.java"}
+    java.lang.String TAG -> a
+    java.lang.String IDENTIFIER -> b
+    1:1:void <init>():13:13 -> <init>
+    1:5:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):27:31 -> performAction
+com.batch.android.actions.RatingActionRunnable -> com.batch.android.b.f:
+# {"id":"sourceFile","fileName":"RatingActionRunnable.java"}
+    java.lang.String TAG -> a
+    java.lang.String IDENTIFIER -> b
+    1:1:void <init>():25:25 -> <init>
+    1:8:void lambda$performAction$0(android.content.Context,java.lang.Exception):40:47 -> a
+    9:15:void lambda$performAction$0(android.content.Context,java.lang.Exception):44:50 -> a
+    16:29:void lambda$tryOpenPlayStoreInAppRating$2(android.content.Context,com.batch.android.core.Promise):59:72 -> a
+    30:51:void lambda$tryOpenPlayStoreInAppRating$2(android.content.Context,com.batch.android.core.Promise):65:86 -> a
+    52:61:void lambda$tryOpenPlayStoreInAppRating$1(com.batch.android.core.Promise,com.google.android.play.core.review.ReviewManager,android.app.Activity,com.google.android.gms.tasks.Task):73:82 -> a
+    62:65:void openStore(android.content.Context):92:95 -> a
+    1:1:com.batch.android.core.Promise tryOpenPlayStoreInAppRating(android.content.Context):55:55 -> b
+    1:5:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):35:39 -> performAction
+com.batch.android.actions.RatingActionRunnable$RatingActionRunnableException -> com.batch.android.b.f$a:
+# {"id":"sourceFile","fileName":"RatingActionRunnable.java"}
+    1:1:void <init>(java.lang.String,java.lang.Throwable):102:102 -> <init>
+com.batch.android.actions.RedirectNotificationSettingsAction -> com.batch.android.b.g:
+# {"id":"sourceFile","fileName":"RedirectNotificationSettingsAction.java"}
+    java.lang.String TAG -> a
+    java.lang.String IDENTIFIER -> b
+    1:1:void <init>():16:16 -> <init>
+    1:19:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):31:49 -> performAction
+com.batch.android.actions.SmartReOptInAction -> com.batch.android.b.h:
+# {"id":"sourceFile","fileName":"SmartReOptInAction.java"}
+    java.lang.String TAG -> a
+    java.lang.String IDENTIFIER -> b
+    1:1:void <init>():24:24 -> <init>
+    1:4:void redirectToNotificationSettings(android.content.Context):92:95 -> a
+    1:16:void onReceive(android.content.Context,android.content.Intent):70:85 -> onReceive
+    1:27:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):38:64 -> performAction
+com.batch.android.actions.UserDataBuiltinActionRunnable -> com.batch.android.b.i:
+# {"id":"sourceFile","fileName":"UserDataBuiltinActionRunnable.java"}
+    java.lang.String TAG -> a
+    java.lang.String IDENTIFIER -> b
+    1:1:void <init>():16:16 -> <init>
+    1:47:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):29:75 -> performAction
+com.batch.android.actions.UserEventBuiltinActionRunnable -> com.batch.android.b.j:
+# {"id":"sourceFile","fileName":"UserEventBuiltinActionRunnable.java"}
+    java.lang.String TAG -> a
+    java.lang.String IDENTIFIER -> b
+    1:1:void <init>():21:21 -> <init>
+    1:9:java.util.Date parseDate(java.lang.String):28:36 -> a
+    1:59:void performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):50:108 -> performAction
+com.batch.android.annotation.PublicSDK -> com.batch.android.c.a:
+# {"id":"sourceFile","fileName":"PublicSDK.java"}
+com.batch.android.compat.LocalBroadcastManager -> com.batch.android.d.a:
+# {"id":"sourceFile","fileName":"LocalBroadcastManager.java"}
+    android.content.Context mAppContext -> a
+    java.lang.String TAG -> f
+    android.os.Handler mHandler -> e
+    int MSG_EXEC_PENDING_BROADCASTS -> h
+    java.util.HashMap mReceivers -> b
+    boolean DEBUG -> g
+    java.util.ArrayList mPendingBroadcasts -> d
+    java.util.HashMap mActions -> c
+    1:1:void <init>(android.content.Context):94:94 -> <init>
+    2:14:void <init>(android.content.Context):85:97 -> <init>
+    1:1:void access$000(com.batch.android.compat.LocalBroadcastManager):49:49 -> a
+    2:19:void registerReceiver(android.content.BroadcastReceiver,android.content.IntentFilter):119:136 -> a
+    20:43:void unregisterReceiver(android.content.BroadcastReceiver):148:171 -> a
+    44:103:boolean sendBroadcast(android.content.Intent):184:243 -> a
+    104:104:boolean sendBroadcast(android.content.Intent):240:240 -> a
+    105:105:boolean sendBroadcast(android.content.Intent):237:237 -> a
+    106:137:boolean sendBroadcast(android.content.Intent):231:262 -> a
+    138:150:void executePendingBroadcasts():280:292 -> a
+    151:151:void executePendingBroadcasts():288:288 -> a
+    1:2:void sendBroadcastSync(android.content.Intent):272:273 -> b
+com.batch.android.compat.LocalBroadcastManager$1 -> com.batch.android.d.a$a:
+# {"id":"sourceFile","fileName":"LocalBroadcastManager.java"}
+    com.batch.android.compat.LocalBroadcastManager this$0 -> a
+    1:1:void <init>(com.batch.android.compat.LocalBroadcastManager,android.os.Looper):97:97 -> <init>
+    1:6:void handleMessage(android.os.Message):100:105 -> handleMessage
+    7:7:void handleMessage(android.os.Message):102:102 -> handleMessage
+com.batch.android.compat.LocalBroadcastManager$BroadcastRecord -> com.batch.android.d.a$b:
+# {"id":"sourceFile","fileName":"LocalBroadcastManager.java"}
+    android.content.Intent intent -> a
+    java.util.ArrayList receivers -> b
+    1:3:void <init>(android.content.Intent,java.util.ArrayList):74:76 -> <init>
+com.batch.android.compat.LocalBroadcastManager$ReceiverRecord -> com.batch.android.d.a$c:
+# {"id":"sourceFile","fileName":"LocalBroadcastManager.java"}
+    android.content.IntentFilter filter -> a
+    android.content.BroadcastReceiver receiver -> b
+    boolean broadcasting -> c
+    1:3:void <init>(android.content.IntentFilter,android.content.BroadcastReceiver):57:59 -> <init>
+    1:1:java.lang.String toString():64:64 -> toString
+com.batch.android.compat.WakefulBroadcastReceiver -> com.batch.android.d.b:
+# {"id":"sourceFile","fileName":"WakefulBroadcastReceiver.java"}
+    android.util.SparseArray mActiveWakeLocks -> b
+    java.lang.String EXTRA_WAKE_LOCK_ID -> a
+    int mNextId -> c
+    1:2:void <clinit>():63:64 -> <clinit>
+    1:1:void <init>():59:59 -> <init>
+    1:20:boolean completeWakefulIntent(android.content.Intent):119:138 -> completeWakefulIntent
+    1:17:android.content.ComponentName startWakefulService(android.content.Context,android.content.Intent):81:97 -> startWakefulService
+    18:26:android.content.ComponentName startWakefulService(android.content.Context,android.content.Intent):95:103 -> startWakefulService
+com.batch.android.core.Base32Encoding -> com.batch.android.e.a:
+# {"id":"sourceFile","fileName":"Base32Encoding.java"}
+    java.nio.charset.Charset UTF_8_CHARSET -> c
+    byte[] decodeMap -> b
+    byte[] encode -> a
+    int INPUT_BLOCK_SIZE -> d
+    int ENCODED_BLOCK_SIZE -> e
+    1:1:void <clinit>():17:17 -> <clinit>
+    1:21:void <init>(java.lang.String):30:50 -> <init>
+    22:26:void <init>(java.lang.String):33:37 -> <init>
+    27:33:void <init>(java.lang.String):33:39 -> <init>
+    1:25:void encode(java.io.ByteArrayOutputStream,byte[]):69:93 -> a
+    26:26:void encode(java.io.ByteArrayOutputStream,byte[]):72:72 -> a
+    27:59:java.io.ByteArrayOutputStream decode(java.lang.String):113:145 -> a
+    60:61:java.io.ByteArrayOutputStream decode(java.lang.String):119:120 -> a
+com.batch.android.core.Base32Encoding$DecodeException -> com.batch.android.e.a$a:
+# {"id":"sourceFile","fileName":"Base32Encoding.java"}
+    1:1:void <init>(java.lang.String):101:101 -> <init>
+com.batch.android.core.Base32Encoding$EncodeException -> com.batch.android.e.a$b:
+# {"id":"sourceFile","fileName":"Base32Encoding.java"}
+    1:1:void <init>(java.lang.String):57:57 -> <init>
+com.batch.android.core.ByteArrayHelper -> com.batch.android.e.b:
+# {"id":"sourceFile","fileName":"ByteArrayHelper.java"}
+    char[] hexArray -> b
+    java.lang.String UTF_8 -> a
+    1:1:void <clinit>():26:26 -> <clinit>
+    1:1:void <init>():16:16 -> <init>
+    1:6:byte[] concat(byte[],byte[]):38:43 -> a
+    7:9:byte[] getUTF8Bytes(java.lang.String):72:74 -> a
+    10:13:java.lang.String SHA1Base64Encoded(byte[]):130:133 -> a
+    14:14:java.lang.String SHA1Base64Encoded(byte[]):126:126 -> a
+    15:23:byte[] fromInputStream(java.io.InputStream):138:146 -> a
+    24:24:byte[] fromInputStream(java.io.InputStream):138:138 -> a
+    1:10:java.lang.String bytesToHex(byte[]):87:96 -> b
+    11:16:byte[] hexToBytes(java.lang.String):106:111 -> b
+    1:3:java.lang.String getUTF8String(byte[]):58:60 -> c
+com.batch.android.core.Cryptor -> com.batch.android.e.c:
+# {"id":"sourceFile","fileName":"Cryptor.java"}
+    java.lang.String encrypt(java.lang.String) -> a
+    byte[] encrypt(byte[]) -> a
+    java.lang.String decrypt(java.lang.String) -> b
+    byte[] decrypt(byte[]) -> b
+    byte[] decryptToByte(java.lang.String) -> c
+com.batch.android.core.CryptorFactory -> com.batch.android.e.d:
+# {"id":"sourceFile","fileName":"CryptorFactory.java"}
+    java.lang.String DEFAULT_PRIVATE_KEY_PART -> a
+    1:1:void <init>():10:10 -> <init>
+    1:1:com.batch.android.core.Cryptor getCryptorForType(java.lang.String):26:26 -> a
+    2:2:com.batch.android.core.Cryptor getCryptorForType(java.lang.String,java.lang.String):37:37 -> a
+    3:3:com.batch.android.core.Cryptor getCryptorForTypeValue(int):47:47 -> a
+    4:4:com.batch.android.core.Cryptor getCryptorForTypeValue(int,java.lang.String):58:58 -> a
+    5:5:com.batch.android.core.Cryptor getCryptorForType(com.batch.android.core.CryptorFactory$CryptorType):68:68 -> a
+    6:17:com.batch.android.core.Cryptor getCryptorForType(com.batch.android.core.CryptorFactory$CryptorType,java.lang.String):84:95 -> a
+    18:18:com.batch.android.core.Cryptor getCryptorForType(com.batch.android.core.CryptorFactory$CryptorType,java.lang.String):93:93 -> a
+    19:19:com.batch.android.core.Cryptor getCryptorForType(com.batch.android.core.CryptorFactory$CryptorType,java.lang.String):91:91 -> a
+    20:20:com.batch.android.core.Cryptor getCryptorForType(com.batch.android.core.CryptorFactory$CryptorType,java.lang.String):89:89 -> a
+    21:24:byte[] buildDefaultKey():107:110 -> a
+com.batch.android.core.CryptorFactory$1 -> com.batch.android.e.d$a:
+# {"id":"sourceFile","fileName":"CryptorFactory.java"}
+    int[] $SwitchMap$com$batch$android$core$CryptorFactory$CryptorType -> a
+    1:1:void <clinit>():87:87 -> <clinit>
+com.batch.android.core.CryptorFactory$CryptorType -> com.batch.android.e.d$b:
+# {"id":"sourceFile","fileName":"CryptorFactory.java"}
+    com.batch.android.core.CryptorFactory$CryptorType[] $VALUES -> f
+    com.batch.android.core.CryptorFactory$CryptorType EAS_HEX -> c
+    com.batch.android.core.CryptorFactory$CryptorType EAS -> b
+    com.batch.android.core.CryptorFactory$CryptorType EAS_BASE64_GZIP -> e
+    com.batch.android.core.CryptorFactory$CryptorType EAS_BASE64 -> d
+    int value -> a
+    1:13:void <clinit>():123:135 -> <clinit>
+    14:14:void <clinit>():119:119 -> <clinit>
+    1:2:void <init>(java.lang.String,int,int):141:142 -> <init>
+    1:1:com.batch.android.core.CryptorFactory$CryptorType[] $values():119:119 -> a
+    2:2:com.batch.android.core.CryptorFactory$CryptorType fromString(java.lang.String):161:161 -> a
+    3:4:com.batch.android.core.CryptorFactory$CryptorType fromValue(int):174:175 -> a
+    1:1:int getValue():148:148 -> b
+    1:1:com.batch.android.core.CryptorFactory$CryptorType valueOf(java.lang.String):119:119 -> valueOf
+    1:1:com.batch.android.core.CryptorFactory$CryptorType[] values():119:119 -> values
+com.batch.android.core.DateProvider -> com.batch.android.e.e:
+# {"id":"sourceFile","fileName":"DateProvider.java"}
+    com.batch.android.date.BatchDate getCurrentDate() -> a
+com.batch.android.core.DeeplinkHelper -> com.batch.android.e.f:
+# {"id":"sourceFile","fileName":"DeeplinkHelper.java"}
+    1:1:void <init>():17:17 -> <init>
+    1:4:boolean customTabSupportsURI(android.net.Uri):46:49 -> a
+    5:19:android.content.Intent getIntent(java.lang.String,boolean,boolean):66:80 -> a
+    20:24:android.content.Intent getFallbackIntent(android.content.Context):93:97 -> a
+    1:13:android.content.Intent getCustomTabIntent(android.net.Uri):25:37 -> b
+com.batch.android.core.DiscoveryServiceHelper -> com.batch.android.e.g:
+# {"id":"sourceFile","fileName":"DiscoveryServiceHelper.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():13:13 -> <init>
+    1:10:java.util.List getComponentNames(android.content.Context,java.lang.Class,java.lang.String,java.lang.String):23:32 -> a
+    11:27:android.os.Bundle getMetadata(android.content.Context,java.lang.Class):40:56 -> a
+com.batch.android.core.EASBase64Cryptor -> com.batch.android.e.h:
+# {"id":"sourceFile","fileName":"EASBase64Cryptor.java"}
+    java.lang.String TAG -> d
+    1:1:void <init>(java.lang.String):17:17 -> <init>
+    1:3:byte[] encrypt(byte[]):25:27 -> a
+    4:6:java.lang.String encrypt(java.lang.String):35:37 -> a
+    1:3:byte[] decrypt(byte[]):45:47 -> b
+    4:6:java.lang.String decrypt(java.lang.String):55:57 -> b
+    1:3:byte[] decryptToByte(java.lang.String):65:67 -> c
+com.batch.android.core.EASBase64GzipCryptor -> com.batch.android.e.i:
+# {"id":"sourceFile","fileName":"EASBase64GzipCryptor.java"}
+    java.lang.String TAG -> d
+    1:1:void <init>(java.lang.String):22:22 -> <init>
+    1:3:byte[] encrypt(byte[]):58:60 -> a
+    4:6:java.lang.String encrypt(java.lang.String):68:70 -> a
+    1:3:byte[] decrypt(byte[]):78:80 -> b
+    4:6:java.lang.String decrypt(java.lang.String):88:90 -> b
+    1:3:byte[] decryptToByte(java.lang.String):98:100 -> c
+    1:8:byte[] gzip(byte[]):29:36 -> e
+    9:9:byte[] gzip(byte[]):28:28 -> e
+    1:12:byte[] ungzip(byte[]):41:52 -> f
+    13:13:byte[] ungzip(byte[]):40:40 -> f
+com.batch.android.core.EASCryptor -> com.batch.android.e.j:
+# {"id":"sourceFile","fileName":"EASCryptor.java"}
+    java.lang.String cipherAlgorithm -> a
+    javax.crypto.spec.SecretKeySpec privateKey -> b
+    java.lang.String TAG -> c
+    1:25:void <init>(java.lang.String):31:55 -> <init>
+    26:26:void <init>(java.lang.String):37:37 -> <init>
+    27:27:void <init>(java.lang.String):33:33 -> <init>
+    1:3:byte[] encrypt(byte[]):63:65 -> a
+    4:4:java.lang.String encrypt(java.lang.String):72:72 -> a
+    1:3:byte[] decrypt(byte[]):78:80 -> b
+    4:4:java.lang.String decrypt(java.lang.String):87:87 -> b
+    1:1:byte[] decryptToByte(java.lang.String):92:92 -> c
+    2:5:byte[] decryptAES(byte[]):117:120 -> c
+    1:4:byte[] encryptAES(byte[]):104:107 -> d
+com.batch.android.core.EASHexCryptor -> com.batch.android.e.k:
+# {"id":"sourceFile","fileName":"EASHexCryptor.java"}
+    java.lang.String TAG -> d
+    1:1:void <init>(java.lang.String):15:15 -> <init>
+    1:3:byte[] encrypt(byte[]):23:25 -> a
+    4:6:java.lang.String encrypt(java.lang.String):33:35 -> a
+    1:3:byte[] decrypt(byte[]):43:45 -> b
+    4:6:java.lang.String decrypt(java.lang.String):53:55 -> b
+    1:3:byte[] decryptToByte(java.lang.String):63:65 -> c
+com.batch.android.core.ExcludedActivityHelper -> com.batch.android.e.l:
+# {"id":"sourceFile","fileName":"ExcludedActivityHelper.java"}
+    java.util.Map checkedActivities -> d
+    android.content.Intent intent -> a
+    java.lang.String EXCLUDED_ACTIVITY_META_DATA -> c
+    java.lang.String TAG -> b
+    1:1:void <clinit>():34:34 -> <clinit>
+    1:1:void <init>():16:16 -> <init>
+    1:19:boolean activityIsExcludedFromManifest(android.app.Activity):59:77 -> a
+    20:20:boolean hasIntent():86:86 -> a
+    1:5:void saveIntentIfNeeded(android.app.Activity):42:46 -> b
+    6:7:android.content.Intent popIntent():95:96 -> b
+com.batch.android.core.FixedSizeArrayList -> com.batch.android.e.m:
+# {"id":"sourceFile","fileName":"FixedSizeArrayList.java"}
+    int maxSize -> a
+    1:2:void <init>(int):25:26 -> <init>
+    1:5:boolean add(java.lang.Object):30:34 -> add
+com.batch.android.core.ForwardReadableInputStream -> com.batch.android.e.n:
+# {"id":"sourceFile","fileName":"ForwardReadableInputStream.java"}
+    int maxReadPosition -> d
+    int[] firstBytes -> a
+    java.io.InputStream wrappedInputStream -> b
+    int readPosition -> c
+    1:1:void <init>(java.io.InputStream,int):26:26 -> <init>
+    2:9:void <init>(java.io.InputStream,int):23:30 -> <init>
+    1:1:int[] getFirstBytes():57:57 -> a
+    1:5:void readFirstBytes(int):35:39 -> c
+    6:6:void readFirstBytes(int):37:37 -> c
+    1:6:int read():45:50 -> read
+com.batch.android.core.GenericHelper -> com.batch.android.e.o:
+# {"id":"sourceFile","fileName":"GenericHelper.java"}
+    java.util.regex.Pattern EMAIL_KEY_PATTERN -> a
+    1:1:void <clinit>():24:24 -> <clinit>
+    1:1:void <init>():19:19 -> <init>
+    1:1:boolean checkPermission(java.lang.String,android.content.Context):34:34 -> a
+    2:14:java.lang.String readMD5(byte[]):67:79 -> a
+    15:19:java.lang.Float getScreenDensity(android.content.Context):109:113 -> a
+    20:22:int DPtoPixel(int,android.content.Context):157:159 -> a
+    23:23:int DPtoPixel(int,android.content.Context):150:150 -> a
+    24:24:boolean isValidEmail(java.lang.String):163:163 -> a
+    1:4:boolean isTargetLowerThan13(android.content.Context):51:54 -> b
+    5:14:java.lang.String readMD5(java.lang.String):89:98 -> b
+    15:17:float pixelToDP(int,android.content.Context):135:137 -> b
+    18:18:float pixelToDP(int,android.content.Context):128:128 -> b
+    1:3:boolean isWakeLockPermissionAvailable(android.content.Context):40:42 -> c
+com.batch.android.core.GooglePlayServicesHelper -> com.batch.android.e.p:
+# {"id":"sourceFile","fileName":"GooglePlayServicesHelper.java"}
+    java.lang.Integer libVersionCached -> e
+    int INSTANCE_ID_VERSION -> b
+    int FCM_ID_VERSION -> c
+    int PUSH_ID_VERSION -> a
+    boolean versionChecked -> d
+    1:1:void <init>():13:13 -> <init>
+    1:18:java.lang.String getGooglePlayServicesAvailabilityString(java.lang.Integer):51:68 -> a
+    19:25:java.lang.String getGooglePlayServicesAvailabilityString(java.lang.Integer):60:66 -> a
+    26:26:java.lang.String getGooglePlayServicesAvailabilityString(java.lang.Integer):58:58 -> a
+    27:35:java.lang.String getGooglePlayServicesAvailabilityString(java.lang.Integer):56:64 -> a
+    36:45:java.lang.Integer getGooglePlayServicesAvailabilityInteger(android.content.Context):76:85 -> a
+    46:69:java.lang.String getInstancePushToken(android.content.Context,java.lang.String):209:232 -> a
+    70:77:java.lang.String getInstancePushToken(android.content.Context,java.lang.String):229:236 -> a
+    78:80:boolean isInvalidSenderException(java.lang.Exception):250:252 -> a
+    1:21:java.lang.Integer getGooglePlayServicesLibVersion(android.content.Context):101:121 -> b
+    22:26:java.lang.Integer getGooglePlayServicesLibVersion(android.content.Context):118:122 -> b
+    27:27:java.lang.Integer getGooglePlayServicesLibVersion(android.content.Context):121:121 -> b
+    28:53:java.lang.String getPushToken(android.content.Context,java.lang.String):152:177 -> b
+    54:61:java.lang.String getPushToken(android.content.Context,java.lang.String):175:182 -> b
+    1:6:java.lang.Integer isFCMAvailable(android.content.Context):265:270 -> c
+    1:6:java.lang.Integer isInstanceIdPushAvailable(android.content.Context):196:201 -> d
+    1:8:java.lang.Integer isPushAvailable(android.content.Context):134:141 -> e
+com.batch.android.core.InternalPushData -> com.batch.android.e.q:
+# {"id":"sourceFile","fileName":"InternalPushData.java"}
+    java.lang.String IS_SILENT_KEY -> f
+    java.lang.String LANDING_KEY -> h
+    java.lang.String CUSTOM_BIG_IMAGE_KEY -> j
+    java.lang.String PRIORITY_KEY -> l
+    java.lang.String IS_GROUP_SUMMARY_KEY -> n
+    java.lang.String TYPE_KEY -> p
+    java.lang.String VARIANT_KEY -> r
+    java.lang.String VISIBILITY_KEY -> t
+    java.lang.String FORMAT_ARGS_KEY -> v
+    java.lang.String OLD_BIG_PICTURE_ICON_BEHAVIOUR -> x
+    java.lang.String jsonPayload -> a
+    java.lang.String SCHEME_KEY -> c
+    java.lang.String INSTALL_ID_KEY -> e
+    java.lang.String IS_LOCAL_CAMPAIGNS_REFRESH_KEY -> g
+    java.lang.String CUSTOM_BIG_ICON_KEY -> i
+    java.lang.String ACTION_KEY -> k
+    java.lang.String GROUP_NAME_KEY -> m
+    java.lang.String OPEN_DATA_KEY -> o
+    java.lang.String EXPERIMENT_KEY -> q
+    java.lang.String CHANNEL_KEY -> s
+    java.lang.String FORMAT_KEY -> u
+    java.lang.String RECEIPT_KEY -> w
+    com.batch.android.json.JSONObject payload -> b
+    java.lang.String BATCH_BUNDLE_KEY -> y
+    java.lang.String ID_KEY -> d
+    1:10:void <init>(java.lang.String):143:152 -> <init>
+    11:11:void <init>(java.lang.String):145:145 -> <init>
+    12:18:void <init>(com.batch.android.json.JSONObject):156:162 -> <init>
+    19:19:void <init>(com.batch.android.json.JSONObject):158:158 -> <init>
+    1:1:boolean hasScheme():224:224 -> A
+    1:1:boolean isGroupSummary():487:487 -> B
+    1:1:boolean isLocalCampainsRefresh():217:217 -> C
+    1:2:boolean isSchemeEmpty():228:229 -> D
+    1:1:boolean isSilent():209:209 -> E
+    1:1:boolean shouldUseLegacyBigPictureIconBehaviour():584:584 -> F
+    1:1:com.batch.android.core.InternalPushData getPushDataForReceiverIntent(android.content.Intent):171:171 -> a
+    2:2:com.batch.android.core.InternalPushData getPushDataForReceiverIntent(android.content.Intent):168:168 -> a
+    3:6:com.batch.android.core.InternalPushData getPushDataForReceiverBundle(android.os.Bundle):175:178 -> a
+    7:11:com.batch.android.core.InternalPushData getPushDataForFirebaseMessage(com.google.firebase.messaging.RemoteMessage):190:194 -> a
+    12:50:java.util.List getActions():341:379 -> a
+    51:51:java.lang.String nullSafeGetString(com.batch.android.json.JSONObject,java.lang.String):593:593 -> a
+    52:52:com.batch.android.json.JSONArray nullSafeGetJSONArray(java.lang.String):609:609 -> a
+    1:1:java.lang.String getChannel():452:452 -> b
+    2:2:com.batch.android.json.JSONObject nullSafeGetJSONObject(java.lang.String):601:601 -> b
+    1:15:java.util.List getCustomBigIconAvailableDensity():273:287 -> c
+    16:16:java.lang.String nullSafeGetString(java.lang.String):588:588 -> c
+    1:6:java.lang.String getCustomBigIconURL():264:269 -> d
+    1:15:java.util.List getCustomBigImageAvailableDensity():317:331 -> e
+    1:6:java.lang.String getCustomBigImageURL():308:313 -> f
+    1:8:java.util.Map getExtraParameters():529:536 -> g
+    1:2:java.lang.String getGroup():474:475 -> h
+    1:1:java.lang.String getInstallId():241:241 -> i
+    1:1:java.lang.String getJsonPayload():202:202 -> j
+    1:1:com.batch.android.json.JSONObject getLandingMessage():249:249 -> k
+    1:1:com.batch.android.core.InternalPushData$Format getNotificationFormat():515:515 -> l
+    1:1:com.batch.android.json.JSONObject getNotificationFormatArguments():523:523 -> m
+    1:4:java.util.Map getOpenData():549:552 -> n
+    1:17:com.batch.android.core.InternalPushData$Priority getPriority():422:438 -> o
+    18:18:com.batch.android.core.InternalPushData$Priority getPriority():436:436 -> o
+    19:19:com.batch.android.core.InternalPushData$Priority getPriority():434:434 -> o
+    20:33:com.batch.android.core.InternalPushData$Priority getPriority():432:445 -> o
+    1:1:java.lang.String getPushId():237:237 -> p
+    1:7:java.util.Map getReceiptEventData():565:571 -> q
+    1:6:long getReceiptMaxDelay():413:418 -> r
+    1:6:long getReceiptMinDelay():404:409 -> s
+    1:13:com.batch.android.core.InternalPushData$ReceiptMode getReceiptMode():387:399 -> t
+    14:14:com.batch.android.core.InternalPushData$ReceiptMode getReceiptMode():396:396 -> t
+    15:15:com.batch.android.core.InternalPushData$ReceiptMode getReceiptMode():394:394 -> t
+    1:1:java.lang.String getScheme():233:233 -> u
+    1:10:com.batch.android.BatchNotificationSource getSource():456:465 -> v
+    1:1:int getVisibility():499:499 -> w
+    1:8:boolean hasCustomBigIcon():253:260 -> x
+    1:8:boolean hasCustomBigImage():297:304 -> y
+    1:1:boolean hasLandingMessage():245:245 -> z
+com.batch.android.core.InternalPushData$1 -> com.batch.android.e.q$a:
+# {"id":"sourceFile","fileName":"InternalPushData.java"}
+    int[] $SwitchMap$com$batch$android$core$InternalPushData$Priority -> a
+    1:1:void <clinit>():632:632 -> <clinit>
+com.batch.android.core.InternalPushData$Format -> com.batch.android.e.q$b:
+# {"id":"sourceFile","fileName":"InternalPushData.java"}
+    com.batch.android.core.InternalPushData$Format APEN -> b
+    com.batch.android.core.InternalPushData$Format DEFAULT -> a
+    com.batch.android.core.InternalPushData$Format[] $VALUES -> c
+    1:3:void <clinit>():667:669 -> <clinit>
+    4:4:void <clinit>():666:666 -> <clinit>
+    1:1:void <init>(java.lang.String,int):666:666 -> <init>
+    1:1:com.batch.android.core.InternalPushData$Format[] $values():666:666 -> a
+    2:5:com.batch.android.core.InternalPushData$Format fromString(java.lang.String):672:675 -> a
+    1:1:com.batch.android.core.InternalPushData$Format valueOf(java.lang.String):666:666 -> valueOf
+    1:1:com.batch.android.core.InternalPushData$Format[] values():666:666 -> values
+com.batch.android.core.InternalPushData$Priority -> com.batch.android.e.q$c:
+# {"id":"sourceFile","fileName":"InternalPushData.java"}
+    com.batch.android.core.InternalPushData$Priority UNDEFINED -> a
+    com.batch.android.core.InternalPushData$Priority[] $VALUES -> g
+    com.batch.android.core.InternalPushData$Priority MIN -> c
+    com.batch.android.core.InternalPushData$Priority DEFAULT -> b
+    com.batch.android.core.InternalPushData$Priority HIGH -> e
+    com.batch.android.core.InternalPushData$Priority LOW -> d
+    com.batch.android.core.InternalPushData$Priority MAX -> f
+    1:6:void <clinit>():619:624 -> <clinit>
+    7:7:void <clinit>():618:618 -> <clinit>
+    1:1:void <init>(java.lang.String,int):618:618 -> <init>
+    1:1:com.batch.android.core.InternalPushData$Priority[] $values():618:618 -> a
+    1:5:int toAndroidPriority():628:632 -> b
+    1:1:int toSupportPriority():649:649 -> c
+    1:1:com.batch.android.core.InternalPushData$Priority valueOf(java.lang.String):618:618 -> valueOf
+    1:1:com.batch.android.core.InternalPushData$Priority[] values():618:618 -> values
+com.batch.android.core.InternalPushData$ReceiptMode -> com.batch.android.e.q$d:
+# {"id":"sourceFile","fileName":"InternalPushData.java"}
+    com.batch.android.core.InternalPushData$ReceiptMode DISPLAY -> b
+    com.batch.android.core.InternalPushData$ReceiptMode DEFAULT -> a
+    com.batch.android.core.InternalPushData$ReceiptMode FORCE -> c
+    com.batch.android.core.InternalPushData$ReceiptMode[] $VALUES -> d
+    1:3:void <clinit>():680:682 -> <clinit>
+    4:4:void <clinit>():679:679 -> <clinit>
+    1:1:void <init>(java.lang.String,int):679:679 -> <init>
+    1:1:com.batch.android.core.InternalPushData$ReceiptMode[] $values():679:679 -> a
+    1:1:com.batch.android.core.InternalPushData$ReceiptMode valueOf(java.lang.String):679:679 -> valueOf
+    1:1:com.batch.android.core.InternalPushData$ReceiptMode[] values():679:679 -> values
+com.batch.android.core.KVUserPreferencesStorage -> com.batch.android.e.r:
+# {"id":"sourceFile","fileName":"KVUserPreferencesStorage.java"}
+    android.content.SharedPreferences preferences -> a
+    int STORAGE_VERSION -> f
+    java.lang.String TAG -> c
+    boolean useLegacyStorage -> b
+    java.lang.String SHARED_PREFERENCES_FILENAME -> e
+    java.lang.String LEGACY_SHARED_PREFERENCES_FILENAME -> d
+    1:9:void <init>(android.content.Context):49:57 -> <init>
+    10:10:void <init>(android.content.Context):51:51 -> <init>
+    1:4:java.lang.String get(java.lang.String,java.lang.String):80:83 -> a
+    5:5:boolean contains(java.lang.String):91:91 -> a
+    6:25:boolean migrate(android.content.Context):155:174 -> a
+    1:1:java.lang.String get(java.lang.String):75:75 -> b
+    2:7:java.lang.String getOnLegacyStorage(java.lang.String,java.lang.String):100:105 -> b
+    8:26:void migrateIfNeeded(android.content.Context):125:143 -> b
+    1:8:boolean persist(java.lang.String,java.lang.String):61:68 -> c
+    9:9:void remove(java.lang.String):95:95 -> c
+    1:6:boolean persistOnLegacyStorage(java.lang.String,java.lang.String):109:114 -> d
+com.batch.android.core.Logger -> com.batch.android.e.s:
+# {"id":"sourceFile","fileName":"Logger.java"}
+    com.batch.android.LoggerDelegate loggerDelegate -> c
+    java.lang.String PUBLIC_TAG -> a
+    java.lang.String INTERNAL_TAG -> b
+    boolean dev -> d
+    1:1:void <clinit>():35:35 -> <clinit>
+    1:1:void <init>():14:14 -> <init>
+    1:1:boolean shouldEnableDevLogs():41:41 -> a
+    2:2:boolean shouldLogForLevel(com.batch.android.LoggerLevel):47:47 -> a
+    3:11:void error(java.lang.String,java.lang.String,java.lang.Throwable):244:252 -> a
+    12:12:void error(java.lang.String,java.lang.Throwable):264:264 -> a
+    13:21:void error(java.lang.String,java.lang.String):274:282 -> a
+    22:22:void error(java.lang.String):293:293 -> a
+    1:9:void info(java.lang.String,java.lang.String,java.lang.Throwable):120:128 -> b
+    10:10:void info(java.lang.String,java.lang.Throwable):140:140 -> b
+    11:19:void info(java.lang.String,java.lang.String):150:158 -> b
+    20:20:void info(java.lang.String):169:169 -> b
+    1:9:void internal(java.lang.String,java.lang.String,java.lang.Throwable):306:314 -> c
+    10:10:void internal(java.lang.String,java.lang.Throwable):326:326 -> c
+    11:19:void internal(java.lang.String,java.lang.String):336:344 -> c
+    20:20:void internal(java.lang.String):355:355 -> c
+    1:9:void verbose(java.lang.String,java.lang.String,java.lang.Throwable):58:66 -> d
+    10:10:void verbose(java.lang.String,java.lang.Throwable):78:78 -> d
+    11:19:void verbose(java.lang.String,java.lang.String):88:96 -> d
+    20:20:void verbose(java.lang.String):107:107 -> d
+    1:9:void warning(java.lang.String,java.lang.String,java.lang.Throwable):182:190 -> e
+    10:10:void warning(java.lang.String,java.lang.Throwable):202:202 -> e
+    11:19:void warning(java.lang.String,java.lang.String):212:220 -> e
+    20:20:void warning(java.lang.String):231:231 -> e
+com.batch.android.core.MessagePackWebservice -> com.batch.android.e.t:
+# {"id":"sourceFile","fileName":"MessagePackWebservice.java"}
+    com.batch.android.post.MessagePackPostDataProvider dataProvider -> l
+    java.lang.String MSGPACK_SCHEMA_VERSION -> m
+    1:5:void <init>(android.content.Context,com.batch.android.post.MessagePackPostDataProvider,java.lang.String,java.lang.String[]):21:25 -> <init>
+    6:6:void <init>(android.content.Context,com.batch.android.post.MessagePackPostDataProvider,java.lang.String,java.lang.String[]):23:23 -> <init>
+    1:1:java.lang.String getSpecificConnectTimeoutKey():82:82 -> A
+    1:1:java.lang.String getSpecificReadTimeoutKey():87:87 -> B
+    1:1:java.lang.String getSpecificRetryCountKey():92:92 -> C
+    1:1:java.lang.String getURLSorterPatternParameterKey():67:67 -> F
+    1:1:com.batch.android.post.MessagePackPostDataProvider getPostDataProvider():52:52 -> G
+    1:3:java.lang.String[] addSchemaVersion(java.lang.String[]):36:38 -> b
+    1:1:java.lang.String getCryptorModeParameterKey():77:77 -> o
+    1:1:java.lang.String getCryptorTypeParameterKey():72:72 -> p
+    1:3:java.util.Map getHeaders():44:46 -> r
+    1:1:java.lang.String getPostCryptorTypeParameterKey():57:57 -> v
+    1:1:com.batch.android.post.PostDataProvider getPostDataProvider():9:9 -> w
+    1:1:java.lang.String getReadCryptorTypeParameterKey():62:62 -> y
+com.batch.android.core.NamedThreadFactory -> com.batch.android.e.u:
+# {"id":"sourceFile","fileName":"NamedThreadFactory.java"}
+    java.util.concurrent.ThreadFactory defaultFactory -> b
+    java.lang.String suffix -> a
+    1:1:void <clinit>():13:13 -> <clinit>
+    1:1:void <init>():17:17 -> <init>
+    2:2:void <init>():15:15 -> <init>
+    3:4:void <init>(java.lang.String):19:20 -> <init>
+    1:5:java.lang.Thread newThread(java.lang.Runnable):25:29 -> newThread
+com.batch.android.core.NotificationAuthorizationStatus -> com.batch.android.e.v:
+# {"id":"sourceFile","fileName":"NotificationAuthorizationStatus.java"}
+    java.lang.String TAG -> a
+    java.lang.Boolean lastNotificationAuthorizationStatus -> b
+    1:1:void <init>():30:30 -> <init>
+    1:8:void lambda$checkForNotificationAuthorizationChange$0(android.content.Context,com.batch.android.runtime.RuntimeManager):86:93 -> a
+    9:17:boolean shouldTrackNotificationStatusChangeEvent(android.content.Context,boolean):113:121 -> a
+    18:28:boolean canAppShowNotifications(android.content.Context,com.batch.android.BatchNotificationChannelsManager):133:143 -> a
+    29:46:boolean canAppShowNotificationsForChannel(android.content.Context,java.lang.String):149:166 -> a
+    47:50:boolean areAppNotificationsEnabled(android.content.Context,android.app.NotificationManager):176:179 -> a
+    51:64:boolean areBatchNotificationsEnabled(android.content.Context):188:201 -> a
+    65:68:boolean isDefaultChannelEnabled(android.app.NotificationManager,com.batch.android.BatchNotificationChannelsManager):212:215 -> a
+    69:69:boolean isDefaultChannelEnabled(android.app.NotificationManager,com.batch.android.BatchNotificationChannelsManager):213:213 -> a
+    70:91:boolean canChannelShowNotifications(android.app.NotificationManager,java.lang.String,boolean):231:252 -> a
+    1:1:void checkForNotificationAuthorizationChange(android.content.Context):47:47 -> b
+    2:19:void checkForNotificationAuthorizationChange(android.content.Context):45:62 -> b
+    20:40:void checkForNotificationAuthorizationChange(android.content.Context):60:80 -> b
+    41:59:void checkForNotificationAuthorizationChange(android.content.Context):79:97 -> b
+com.batch.android.core.NotificationPermissionHelper -> com.batch.android.e.w:
+# {"id":"sourceFile","fileName":"NotificationPermissionHelper.java"}
+    java.lang.String TAG -> a
+    java.lang.String PERMISSION_NOTIFICATION -> c
+    java.lang.String BASE_TARGET_LOG_MESSAGE -> b
+    1:1:void <init>():17:17 -> <init>
+    1:5:boolean isNotificationPermissionGranted(android.content.Context):26:30 -> a
+    6:45:void requestPermission(android.content.Context,boolean,android.content.BroadcastReceiver):45:84 -> a
+    1:2:boolean isPermissionAlreadyAskedFromOlderSDK(android.content.Context):89:90 -> b
+    1:1:void requestPermissionFromOlderSDK(android.content.Context):102:102 -> c
+    2:2:void requestPermissionFromOlderSDK(android.content.Context):101:101 -> c
+    1:7:void onReceive(android.content.Context,android.content.Intent):114:120 -> onReceive
+com.batch.android.core.ObjectUserPreferencesStorage -> com.batch.android.e.x:
+# {"id":"sourceFile","fileName":"ObjectUserPreferencesStorage.java"}
+    com.batch.android.core.Cryptor cryptor -> b
+    android.content.SharedPreferences preferences -> a
+    java.lang.String TAG -> c
+    java.lang.String SHARED_PREFERENCES_FILENAME -> d
+    1:8:void <init>(android.content.Context):47:54 -> <init>
+    9:9:void <init>(android.content.Context):49:49 -> <init>
+    1:3:boolean persist(java.lang.String,java.io.Serializable):61:63 -> a
+    4:4:boolean contains(java.lang.String):77:77 -> a
+    5:22:java.lang.String serialize(java.io.Serializable):102:119 -> a
+    23:36:java.lang.String serialize(java.io.Serializable):109:122 -> a
+    37:37:java.lang.String serialize(java.io.Serializable):96:96 -> a
+    1:19:java.lang.Object deserialize(java.lang.String):142:160 -> b
+    20:33:java.lang.Object deserialize(java.lang.String):150:163 -> b
+    1:3:java.lang.Object get(java.lang.String):70:72 -> c
+    1:1:void remove(java.lang.String):82:82 -> d
+com.batch.android.core.PackageUtils -> com.batch.android.e.y:
+# {"id":"sourceFile","fileName":"PackageUtils.java"}
+    1:1:void <init>():9:9 -> <init>
+    1:1:boolean isPackageInstalled(android.content.pm.PackageManager,java.lang.String):17:17 -> a
+com.batch.android.core.ParameterKeys -> com.batch.android.e.z:
+# {"id":"sourceFile","fileName":"ParameterKeys.java"}
+    java.lang.String DEFAULT_READ_TIMEOUT_KEY -> I0
+    java.lang.String USER_DATA_TRANSACTION_ID -> j1
+    java.lang.String IMAGE_WS_READ_TIMEOUT_KEY -> I
+    java.lang.String TRACKER_WS_PROPERTY_KEY -> j
+    java.lang.String LOCAL_CAMPAIGNS_WS_INITIAL_DELAY -> E0
+    java.lang.String PUSH_APP_VERSION_KEY -> f1
+    java.lang.String METRIC_WS_RETRYCOUNT_KEY -> A0
+    java.lang.String PUSH_REGISTRATION_ID_KEY -> b1
+    java.lang.String ATTR_SEND_WS_CONNECT_TIMEOUT_KEY -> Q
+    java.lang.String TRACKER_WS_READ_TIMEOUT_KEY -> r
+    java.lang.String ATTR_CHECK_WS_RETRYCOUNT_KEY -> Y
+    java.lang.String MESSAGE_PACK_WS_RETRYCOUNT_KEY -> v0
+    java.lang.String PUSH_WS_CONNECT_TIMEOUT_KEY -> z
+    java.lang.String MESSAGE_PACK_WS_READ_CRYPTORTYPE_KEY -> r0
+    java.lang.String START_WS_PROPERTY_KEY -> a
+    java.lang.String INBOX_WS_RETRYCOUNT_KEY -> n0
+    java.lang.String ATTR_LOCAL_CAMPAIGNS_WS_READ_TIMEOUT_KEY -> j0
+    java.lang.String START_WS_READ_TIMEOUT_KEY -> i
+    java.lang.String IMAGE_WS_CONNECT_TIMEOUT_KEY -> H
+    java.lang.String ATTR_LOCAL_CAMPAIGNS_WS_POST_CRYPTORTYPE_KEY -> f0
+    java.lang.String ATTR_LOCAL_CAMPAIGNS_WS_PROPERTY_KEY -> b0
+    java.lang.String TRACKER_WS_CONNECT_TIMEOUT_KEY -> q
+    java.lang.String ATTR_SEND_WS_RETRYCOUNT_KEY -> P
+    java.lang.String DISPLAY_RECEIPT_WS_CRYPTORTYPE_KEY -> y0
+    java.lang.String EVENT_TRACKER_EVENTS_LIMIT -> Z0
+    java.lang.String PUSH_WS_RETRYCOUNT_KEY -> y
+    java.lang.String ATTR_CHECK_WS_READ_CRYPTORTYPE_KEY -> X
+    java.lang.String SERVER_TIMESTAMP -> V0
+    java.lang.String SCHEME_CODE_PATTERN -> R0
+    java.lang.String SERVER_ID_KEY -> N0
+    java.lang.String SHARED_PREFS_STORAGE_VERSION -> o1
+    java.lang.String DEFAULT_CONNECT_TIMEOUT_KEY -> H0
+    java.lang.String USER_DATA_CHANGESET -> i1
+    java.lang.String ATTR_SEND_WS_URLSORTER_PATTERN_KEY -> K
+    java.lang.String LOCAL_CAMPAIGNS_JIT_WS_CONNECT_TIMEOUT_KEY -> D0
+    java.lang.String PUSH_REGISTRATION_GCPPROJECTID_KEY -> e1
+    java.lang.String TRACKER_WS_CRYPTORTYPE_KEY -> l
+    java.lang.String EVENT_TRACKER_STATE -> a1
+    java.lang.String ATTR_CHECK_WS_PROPERTY_KEY -> S
+    java.lang.String PUSH_WS_URLSORTER_PATTERN_KEY -> t
+    java.lang.String MESSAGE_PACK_WS_CRYPTORMODE_KEY -> u0
+    java.lang.String MESSAGE_PACK_WS_POST_CRYPTORTYPE_KEY -> q0
+    java.lang.String START_WS_CRYPTORTYPE_KEY -> c
+    java.lang.String IMAGE_WS_URLSORTER_PATTERN_KEY -> B
+    java.lang.String INBOX_WS_POST_CRYPTORTYPE_KEY -> m0
+    java.lang.String ATTR_LOCAL_CAMPAIGNS_WS_CONNECT_TIMEOUT_KEY -> i0
+    java.lang.String TRACKER_WS_URLSORTER_PATTERN_KEY -> k
+    java.lang.String ATTR_SEND_WS_PROPERTY_KEY -> J
+    java.lang.String ATTR_LOCAL_CAMPAIGNS_WS_CRYPTORMODE_KEY -> e0
+    java.lang.String ATTR_CHECK_WS_READ_TIMEOUT_KEY -> a0
+    java.lang.String PUSH_WS_PROPERTY_KEY -> s
+    java.lang.String ATTR_SEND_WS_READ_TIMEOUT_KEY -> R
+    java.lang.String DISPLAY_RECEIPT_WS_RETRYCOUNT_KEY -> z0
+    java.lang.String EVENT_TRACKER_BATCH_QUANTITY -> Y0
+    java.lang.String ATTR_CHECK_WS_CONNECT_TIMEOUT_KEY -> Z
+    java.lang.String USER_DATA_VERSION -> U0
+    java.lang.String TASK_EXECUTOR_THREADTTL -> Q0
+    java.lang.String PUSH_WS_READ_TIMEOUT_KEY -> A
+    java.lang.String START_WS_URLSORTER_PATTERN_KEY -> b
+    java.lang.String INSTALL_TIMESTAMP_KEY -> M0
+    java.lang.String LIB_PREVIOUSVERSION_KEY -> n1
+    java.lang.String START_WS_READ_CRYPTORTYPE_KEY -> f
+    java.lang.String DEFAULT_RETRY_NUMBER_KEY -> G0
+    java.lang.String PUSH_NOTIF_LAST_AUTH_STATUS_SENT -> h1
+    java.lang.String ATTR_SEND_WS_CRYPTORMODE_KEY -> M
+    java.lang.String LOCAL_CAMPAIGNS_JIT_WS_READ_TIMEOUT_KEY -> C0
+    java.lang.String PUSH_REGISTRATION_SENDERID_KEY -> d1
+    java.lang.String TRACKER_WS_POST_CRYPTORTYPE_KEY -> n
+    java.lang.String ATTR_CHECK_WS_CRYPTORTYPE_KEY -> U
+    java.lang.String PUSH_WS_CRYPTORMODE_KEY -> v
+    java.lang.String MESSAGE_PACK_WS_READ_TIMEOUT_KEY -> x0
+    java.lang.String MESSAGE_PACK_WS_CRYPTORTYPE_KEY -> t0
+    java.lang.String INBOX_WS_READ_TIMEOUT_KEY -> p0
+    java.lang.String START_WS_POST_CRYPTORTYPE_KEY -> e
+    java.lang.String INBOX_WS_READ_CRYPTORTYPE_KEY -> l0
+    java.lang.String IMAGE_WS_CRYPTORMODE_KEY -> D
+    java.lang.String ATTR_LOCAL_CAMPAIGNS_WS_RETRYCOUNT_KEY -> h0
+    java.lang.String TRACKER_WS_CRYPTORMODE_KEY -> m
+    java.lang.String ATTR_LOCAL_CAMPAIGNS_WS_CRYPTORTYPE_KEY -> d0
+    java.lang.String ATTR_SEND_WS_CRYPTORTYPE_KEY -> L
+    java.lang.String PUSH_WS_CRYPTORTYPE_KEY -> u
+    java.lang.String ATTR_CHECK_WS_URLSORTER_PATTERN_KEY -> T
+    java.lang.String EVENT_TRACKER_MAX_DELAY -> X0
+    java.lang.String ATTRIBUTION_ID -> T0
+    java.lang.String TASK_EXECUTOR_MAX_POOL -> P0
+    java.lang.String IMAGE_WS_CRYPTORTYPE_KEY -> C
+    java.lang.String INSTALL_ID_KEY -> L0
+    java.lang.String LIB_CURRENTVERSION_KEY -> m1
+    java.lang.String START_WS_CRYPTORMODE_KEY -> d
+    java.lang.String IMAGE_WS_RETRYCOUNT_KEY -> G
+    java.lang.String WEBSERVICE_IDS_PARAMETERS -> J0
+    java.lang.String USER_PROFILE_LANGUAGE_KEY -> k1
+    java.lang.String START_WS_CONNECT_TIMEOUT_KEY -> h
+    java.lang.String WS_CIPHERV2_LAST_FAILURE_KEY -> F0
+    java.lang.String PUSH_NOTIF_TYPE -> g1
+    java.lang.String ATTR_SEND_WS_READ_CRYPTORTYPE_KEY -> O
+    java.lang.String LOCAL_CAMPAIGNS_JIT_WS_RETRYCOUNT_KEY -> B0
+    java.lang.String PUSH_REGISTRATION_PROVIDER_KEY -> c1
+    java.lang.String TRACKER_WS_RETRYCOUNT_KEY -> p
+    java.lang.String ATTR_CHECK_WS_POST_CRYPTORTYPE_KEY -> W
+    java.lang.String PUSH_WS_READ_CRYPTORTYPE_KEY -> x
+    java.lang.String MESSAGE_PACK_WS_CONNECT_TIMEOUT_KEY -> w0
+    java.lang.String MESSAGE_PACK_WS_URLSORTER_PATTERN_KEY -> s0
+    java.lang.String INBOX_WS_CONNECT_TIMEOUT_KEY -> o0
+    java.lang.String INBOX_WS_URLSORTER_PATTERN_KEY -> k0
+    java.lang.String START_WS_RETRYCOUNT_KEY -> g
+    java.lang.String IMAGE_WS_READ_CRYPTORTYPE_KEY -> F
+    java.lang.String ATTR_LOCAL_CAMPAIGNS_WS_READ_CRYPTORTYPE_KEY -> g0
+    java.lang.String ATTR_LOCAL_CAMPAIGNS_WS_URLSORTER_PATTERN_KEY -> c0
+    java.lang.String TRACKER_WS_READ_CRYPTORTYPE_KEY -> o
+    java.lang.String ATTR_SEND_WS_POST_CRYPTORTYPE_KEY -> N
+    java.lang.String PUSH_WS_POST_CRYPTORTYPE_KEY -> w
+    java.lang.String ATTR_CHECK_WS_CRYPTORMODE_KEY -> V
+    java.lang.String EVENT_TRACKER_INITIAL_DELAY -> W0
+    java.lang.String CUSTOM_ID -> S0
+    java.lang.String TASK_EXECUTOR_MIN_POOL -> O0
+    java.lang.String IMAGE_WS_POST_CRYPTORTYPE_KEY -> E
+    java.lang.String WEBSERVICE_IDS_ADVANCED_PARAMETERS -> K0
+    java.lang.String USER_PROFILE_REGION_KEY -> l1
+    1:1:void <init>():9:9 -> <init>
+com.batch.android.core.Parameters -> com.batch.android.e.a0:
+# {"id":"sourceFile","fileName":"Parameters.java"}
+    android.content.Context applicationContext -> a
+    java.lang.String COMMON_EXTERNAL_CRYPT_BASE_KEY_V2 -> f
+    int API_LEVEL -> j
+    java.lang.String LIBRARY_BUNDLE -> l
+    java.lang.String PLUGIN_VERSION_ENVIRONEMENT_VAR -> n
+    java.lang.String BASE_WS_URL -> p
+    java.lang.String TRACKER_WS_URL -> r
+    java.lang.String ATTR_SEND_WS_URL -> t
+    java.lang.String LOCAL_CAMPAIGNS_WS_URL -> v
+    java.util.Map appParameters -> B
+    java.lang.String INBOX_SYNC_WS_URL -> x
+    java.lang.String METRIC_WS_URL -> z
+    boolean ENABLE_WS_INTERCEPTOR -> h
+    java.lang.String COMMON_INTERNAL_CRYPT_BASE_KEY -> c
+    java.lang.String COMMON_EXTERNAL_CRYPT_BASE_KEY -> e
+    java.lang.String SDK_VERSION -> i
+    int MESSAGING_API_LEVEL -> k
+    java.lang.String DOMAIN_URL -> m
+    java.lang.String BRIDGE_VERSION_ENVIRONEMENT_VAR -> o
+    java.lang.String START_WS_URL -> q
+    java.lang.String PUSH_WS_URL -> s
+    java.lang.String ATTR_CHECK_WS_URL -> u
+    java.lang.String INBOX_FETCH_WS_URL -> w
+    java.util.Map cacheParameters -> b
+    java.lang.String DISPLAY_RECEIPT_WS_URL -> y
+    boolean ENABLE_DEV_LOGS -> g
+    java.lang.String LOCAL_CAMPAIGNS_JIT_WS_URL -> A
+    java.lang.String PARAMETERS_KEY_PREFIX -> C
+    java.lang.String COMMON_EXTERNAL_CRYPT_SIGNATURE_KEY -> d
+    1:129:void <clinit>():60:188 -> <clinit>
+    1:10:void <init>(android.content.Context):217:226 -> <init>
+    11:11:void <init>(android.content.Context):219:219 -> <init>
+    1:13:java.lang.String get(java.lang.String):242:254 -> a
+    14:14:java.lang.String get(java.lang.String):247:247 -> a
+    15:15:java.lang.String get(java.lang.String):239:239 -> a
+    16:17:java.lang.String get(java.lang.String,java.lang.String):270:271 -> a
+    18:23:void set(java.lang.String,java.lang.String,boolean):294:299 -> a
+    24:24:void set(java.lang.String,java.lang.String,boolean):296:296 -> a
+    25:25:void set(java.lang.String,java.lang.String,boolean):291:291 -> a
+    26:26:void set(java.lang.String,java.lang.String,boolean):287:287 -> a
+    1:5:void remove(java.lang.String):313:317 -> b
+    6:6:void remove(java.lang.String):315:315 -> b
+    7:7:void remove(java.lang.String):310:310 -> b
+com.batch.android.core.PatternURLSorter -> com.batch.android.e.b0:
+# {"id":"sourceFile","fileName":"PatternURLSorter.java"}
+    java.util.List pattern -> a
+    1:1:void <init>():27:27 -> <init>
+    2:2:void <init>():20:20 -> <init>
+    3:3:void <init>(java.util.List):34:34 -> <init>
+    4:20:void <init>(java.util.List):20:36 -> <init>
+    21:21:void <init>(java.lang.String):45:45 -> <init>
+    22:49:void <init>(java.lang.String):20:47 -> <init>
+    1:1:java.util.List getKeysOrdered(java.util.List):60:60 -> a
+    2:2:java.util.List getKeysOrdered(java.util.Set):70:70 -> a
+    3:3:java.util.List getKeysOrdered(java.util.Map):80:80 -> a
+    4:27:java.util.List order(java.util.Collection):92:115 -> a
+    28:28:java.util.List order(java.util.Collection):93:93 -> a
+com.batch.android.core.Promise -> com.batch.android.e.c0:
+# {"id":"sourceFile","fileName":"Promise.java"}
+    com.batch.android.core.Promise$Status status -> a
+    java.lang.Object resolvedValue -> b
+    java.util.ArrayDeque thenQueue -> d
+    java.util.ArrayDeque catchQueue -> e
+    java.lang.Exception rejectException -> c
+    1:1:void <init>():21:21 -> <init>
+    2:7:void <init>():14:19 -> <init>
+    8:8:void <init>(com.batch.android.core.Promise$ExecutorRunnable):23:23 -> <init>
+    9:28:void <init>(com.batch.android.core.Promise$ExecutorRunnable):14:33 -> <init>
+    29:29:void <init>(com.batch.android.core.Promise$ExecutorRunnable):28:28 -> <init>
+    30:30:void <init>(com.batch.android.core.Promise$DeferredResultExecutorRunnable):36:36 -> <init>
+    31:57:void <init>(com.batch.android.core.Promise$DeferredResultExecutorRunnable):14:40 -> <init>
+    1:11:void resolve(java.lang.Object):57:67 -> a
+    12:22:void reject(java.lang.Exception):72:82 -> a
+    23:28:com.batch.android.core.Promise then(com.batch.android.core.Promise$ThenRunnable):87:92 -> a
+    29:29:com.batch.android.core.Promise then(com.batch.android.core.Promise$ThenRunnable):89:89 -> a
+    30:35:com.batch.android.core.Promise catchException(com.batch.android.core.Promise$CatchRunnable):100:105 -> a
+    36:36:com.batch.android.core.Promise catchException(com.batch.android.core.Promise$CatchRunnable):102:102 -> a
+    37:37:com.batch.android.core.Promise$Status getStatus():113:113 -> a
+    1:2:com.batch.android.core.Promise resolved(java.lang.Object):45:46 -> b
+    3:4:com.batch.android.core.Promise rejected(java.lang.Exception):51:52 -> b
+com.batch.android.core.Promise$1 -> com.batch.android.e.c0$a:
+# {"id":"sourceFile","fileName":"Promise.java"}
+    int[] $SwitchMap$com$batch$android$core$Promise$Status -> a
+    1:1:void <clinit>():87:87 -> <clinit>
+com.batch.android.core.Promise$CatchRunnable -> com.batch.android.e.c0$b:
+# {"id":"sourceFile","fileName":"Promise.java"}
+    void run(java.lang.Exception) -> a
+com.batch.android.core.Promise$DeferredResultExecutorRunnable -> com.batch.android.e.c0$c:
+# {"id":"sourceFile","fileName":"Promise.java"}
+    void run(com.batch.android.core.Promise) -> a
+com.batch.android.core.Promise$ExecutorRunnable -> com.batch.android.e.c0$d:
+# {"id":"sourceFile","fileName":"Promise.java"}
+com.batch.android.core.Promise$Status -> com.batch.android.e.c0$e:
+# {"id":"sourceFile","fileName":"Promise.java"}
+    com.batch.android.core.Promise$Status RESOLVED -> b
+    com.batch.android.core.Promise$Status REJECTED -> c
+    com.batch.android.core.Promise$Status PENDING -> a
+    com.batch.android.core.Promise$Status[] $VALUES -> d
+    1:3:void <clinit>():140:142 -> <clinit>
+    4:4:void <clinit>():139:139 -> <clinit>
+    1:1:void <init>(java.lang.String,int):139:139 -> <init>
+    1:1:com.batch.android.core.Promise$Status[] $values():139:139 -> a
+    1:1:com.batch.android.core.Promise$Status valueOf(java.lang.String):139:139 -> valueOf
+    1:1:com.batch.android.core.Promise$Status[] values():139:139 -> values
+com.batch.android.core.Promise$ThenRunnable -> com.batch.android.e.c0$f:
+# {"id":"sourceFile","fileName":"Promise.java"}
+    void run(java.lang.Object) -> a
+com.batch.android.core.PushImageCache -> com.batch.android.e.d0:
+# {"id":"sourceFile","fileName":"PushImageCache.java"}
+    java.lang.String TAG -> a
+    int MAX_IMAGES_STORED -> b
+    java.lang.String IMAGES_CACHE_FOLDER -> c
+    1:1:void <init>():14:14 -> <init>
+    1:1:java.lang.String getFilePathForIdentifier(android.content.Context,java.lang.String):46:46 -> a
+    2:12:void storeImageInCache(android.content.Context,java.lang.String,android.graphics.Bitmap):60:70 -> a
+    13:16:void storeImageInCache(android.content.Context,java.lang.String,android.graphics.Bitmap):68:71 -> a
+    17:19:java.lang.String buildIdentifierForURL(java.lang.String):95:97 -> a
+    20:39:void clearImagesIfNeeded(android.content.Context):111:130 -> a
+    40:44:void clearImagesIfNeeded(android.content.Context):128:132 -> a
+    45:45:int lambda$clearImagesIfNeeded$0(java.io.File,java.io.File):121:121 -> a
+    1:1:java.lang.String getPushImageCacheFolder(android.content.Context):35:35 -> b
+    2:3:android.graphics.Bitmap getImageFromCache(android.content.Context,java.lang.String):83:84 -> b
+com.batch.android.core.ReflectionHelper -> com.batch.android.e.e0:
+# {"id":"sourceFile","fileName":"ReflectionHelper.java"}
+    1:1:void <init>():19:19 -> <init>
+    1:1:boolean isAndroidXAppCompatActivityPresent():34:34 -> a
+    2:3:boolean isInstanceOfCoordinatorLayout(java.lang.Object):46:47 -> a
+    4:5:boolean optOutOfSmartReply(androidx.core.app.NotificationCompat$Builder):55:56 -> a
+    6:7:void optOutOfDarkMode(android.view.View):64:65 -> a
+    1:1:boolean isAndroidXFragmentPresent():25:25 -> b
+    2:16:void optOutOfDarkModeRecursively(android.view.View):70:84 -> b
+    1:1:boolean isGMSGoogleCloudMessagingPresent():95:95 -> c
+    1:1:boolean isGMSInstanceIDPresent():104:104 -> d
+com.batch.android.core.ResponseHelper -> com.batch.android.e.f0:
+# {"id":"sourceFile","fileName":"ResponseHelper.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():9:9 -> <init>
+    1:3:com.batch.android.json.JSONObject asJson(byte[]):25:27 -> a
+    4:4:com.batch.android.json.JSONObject asJson(byte[]):21:21 -> a
+    1:3:java.lang.String asString(byte[]):44:46 -> b
+    4:4:java.lang.String asString(byte[]):40:40 -> b
+com.batch.android.core.SecureDateProvider -> com.batch.android.e.g0:
+# {"id":"sourceFile","fileName":"SecureDateProvider.java"}
+    java.util.Date mServerDate -> b
+    long mElapsedRealtime -> c
+    boolean mSecureDateEnabled -> a
+    1:2:void <init>():38:39 -> <init>
+    1:5:void initServerDate(java.util.Date):76:80 -> a
+    6:6:com.batch.android.date.BatchDate getCurrentDate():101:101 -> a
+    1:1:boolean canEnableSecureDate():92:92 -> b
+    1:6:java.util.Date getDate():49:54 -> c
+    7:7:java.util.Date getDate():52:52 -> c
+    1:1:boolean isSecureDateAvailable():67:67 -> d
+com.batch.android.core.SystemDateProvider -> com.batch.android.e.h0:
+# {"id":"sourceFile","fileName":"SystemDateProvider.java"}
+    1:1:void <init>():6:6 -> <init>
+    1:1:com.batch.android.date.BatchDate getCurrentDate():10:10 -> a
+com.batch.android.core.SystemParameterHelper -> com.batch.android.e.i0:
+# {"id":"sourceFile","fileName":"SystemParameterHelper.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():24:24 -> <init>
+    1:3:java.lang.String getAppVersion(android.content.Context):168:170 -> a
+    4:4:java.lang.String getBridgeVersion():367:367 -> a
+    5:100:java.lang.String getValue(java.lang.String,android.content.Context):498:593 -> a
+    101:107:java.lang.String getValue(java.lang.String,android.content.Context):578:584 -> a
+    108:108:java.lang.String getValue(java.lang.String,android.content.Context):574:574 -> a
+    109:109:java.lang.String getValue(java.lang.String,android.content.Context):571:571 -> a
+    110:110:java.lang.String getValue(java.lang.String,android.content.Context):568:568 -> a
+    111:111:java.lang.String getValue(java.lang.String,android.content.Context):565:565 -> a
+    112:112:java.lang.String getValue(java.lang.String,android.content.Context):562:562 -> a
+    113:113:java.lang.String getValue(java.lang.String,android.content.Context):559:559 -> a
+    114:114:java.lang.String getValue(java.lang.String,android.content.Context):556:556 -> a
+    115:115:java.lang.String getValue(java.lang.String,android.content.Context):553:553 -> a
+    116:116:java.lang.String getValue(java.lang.String,android.content.Context):550:550 -> a
+    117:117:java.lang.String getValue(java.lang.String,android.content.Context):547:547 -> a
+    118:118:java.lang.String getValue(java.lang.String,android.content.Context):544:544 -> a
+    119:119:java.lang.String getValue(java.lang.String,android.content.Context):541:541 -> a
+    120:120:java.lang.String getValue(java.lang.String,android.content.Context):538:538 -> a
+    121:121:java.lang.String getValue(java.lang.String,android.content.Context):535:535 -> a
+    122:122:java.lang.String getValue(java.lang.String,android.content.Context):532:532 -> a
+    123:123:java.lang.String getValue(java.lang.String,android.content.Context):529:529 -> a
+    124:124:java.lang.String getValue(java.lang.String,android.content.Context):526:526 -> a
+    125:125:java.lang.String getValue(java.lang.String,android.content.Context):523:523 -> a
+    126:126:java.lang.String getValue(java.lang.String,android.content.Context):520:520 -> a
+    127:127:java.lang.String getValue(java.lang.String,android.content.Context):517:517 -> a
+    128:128:java.lang.String getValue(java.lang.String,android.content.Context):514:514 -> a
+    129:129:java.lang.String getValue(java.lang.String,android.content.Context):511:511 -> a
+    130:130:java.lang.String getValue(java.lang.String,android.content.Context):508:508 -> a
+    131:131:java.lang.String getValue(java.lang.String,android.content.Context):500:500 -> a
+    1:1:java.lang.String getDeviceBrand():140:140 -> b
+    2:4:java.lang.Integer getAppVersionCode(android.content.Context):184:186 -> b
+    5:10:java.lang.Integer getAppVersionCode(android.content.Context):185:190 -> b
+    1:1:java.lang.String getBundleName(android.content.Context):35:35 -> c
+    2:2:java.lang.String getDeviceCountry():86:86 -> c
+    1:1:java.lang.String getDeviceDate():95:95 -> d
+    2:6:android.net.ConnectivityManager getConnectivityManager(android.content.Context):206:210 -> d
+    1:19:java.lang.String getDeviceLanguage():57:75 -> e
+    20:23:java.lang.Long getFirstInstallDate(android.content.Context):106:109 -> e
+    1:4:java.lang.Long getLastUpdateDate(android.content.Context):124:127 -> f
+    5:5:java.lang.String getDeviceModel():153:153 -> f
+    1:1:java.lang.String getDeviceTimezone():45:45 -> g
+    2:7:java.lang.String getNetworkCountryIso(android.content.Context):308:313 -> g
+    1:1:java.lang.String getOSVersion():202:202 -> h
+    2:11:android.net.NetworkInfo getNetworkInfos(android.content.Context):325:334 -> h
+    1:1:java.lang.String getPluginVersion():376:376 -> i
+    2:24:java.lang.Integer getNetworkKind(android.content.Context):458:480 -> i
+    25:25:java.lang.Integer getNetworkKind(android.content.Context):477:477 -> i
+    1:6:java.lang.String getNetworkOperatorName(android.content.Context):287:292 -> j
+    1:1:int getScreenHeight(android.content.Context):390:390 -> k
+    1:1:int getScreenOrientation(android.content.Context):444:444 -> l
+    1:12:android.graphics.Point getScreenSize(android.content.Context):419:430 -> m
+    1:1:int getScreenWidth(android.content.Context):404:404 -> n
+    1:6:java.lang.String getSimCountryIso(android.content.Context):266:271 -> o
+    1:1:java.lang.String getSimOperator(android.content.Context):250:250 -> p
+    1:6:java.lang.String getSimOperatorName(android.content.Context):231:236 -> q
+    1:1:android.telephony.TelephonyManager getTelephonyManager(android.content.Context):214:214 -> r
+    1:6:java.lang.Boolean isNetRoaming(android.content.Context):350:355 -> s
+com.batch.android.core.SystemParameterHelper$1 -> com.batch.android.e.i0$a:
+# {"id":"sourceFile","fileName":"SystemParameterHelper.java"}
+    int[] $SwitchMap$com$batch$android$core$SystemParameterShortName -> a
+    1:1:void <clinit>():506:506 -> <clinit>
+com.batch.android.core.SystemParameterShortName -> com.batch.android.e.j0:
+# {"id":"sourceFile","fileName":"SystemParameterShortName.java"}
+    com.batch.android.core.SystemParameterShortName NETWORK_KIND -> H
+    com.batch.android.core.SystemParameterShortName DEVICE_LANGUAGE -> i
+    com.batch.android.core.SystemParameterShortName DEVICE_DATE -> k
+    com.batch.android.core.SystemParameterShortName DEVICE_INSTALL_DATE -> m
+    com.batch.android.core.SystemParameterShortName ATTRIBUTION_ID -> o
+    com.batch.android.core.SystemParameterShortName CUSTOM_USER_ID -> B
+    com.batch.android.core.SystemParameterShortName DEVICE_TIMEZONE -> c
+    com.batch.android.core.SystemParameterShortName PLUGIN_VERSION -> D
+    com.batch.android.core.SystemParameterShortName LAST_UPDATE_DATE -> e
+    com.batch.android.core.SystemParameterShortName SCREEN_HEIGHT -> F
+    com.batch.android.core.SystemParameterShortName SDK_LEVEL -> g
+    com.batch.android.core.SystemParameterShortName NETWORK_COUNTRY -> x
+    com.batch.android.core.SystemParameterShortName API_LEVEL -> z
+    com.batch.android.core.SystemParameterShortName SESSION_ID -> p
+    java.lang.String shortName -> a
+    com.batch.android.core.SystemParameterShortName APPLICATION_CODE -> r
+    com.batch.android.core.SystemParameterShortName SIM_OPERATOR_NAME -> t
+    com.batch.android.core.SystemParameterShortName SIM_COUNTRY -> v
+    com.batch.android.core.SystemParameterShortName DEVICE_TYPE -> h
+    com.batch.android.core.SystemParameterShortName[] $VALUES -> I
+    com.batch.android.core.SystemParameterShortName DEVICE_REGION -> j
+    com.batch.android.core.SystemParameterShortName INSTALL_ID -> l
+    com.batch.android.core.SystemParameterShortName SERVER_ID -> n
+    com.batch.android.core.SystemParameterShortName MESSAGING_API_LEVEL -> A
+    com.batch.android.core.SystemParameterShortName BUNDLE_NAME -> b
+    com.batch.android.core.SystemParameterShortName BRIDGE_VERSION -> C
+    com.batch.android.core.SystemParameterShortName FIRST_INSTALL_DATE -> d
+    com.batch.android.core.SystemParameterShortName SCREEN_WIDTH -> E
+    com.batch.android.core.SystemParameterShortName BRAND -> f
+    com.batch.android.core.SystemParameterShortName SCREEN_ORIENTATION -> G
+    com.batch.android.core.SystemParameterShortName ROAMING -> y
+    com.batch.android.core.SystemParameterShortName APPLICATION_VERSION -> q
+    com.batch.android.core.SystemParameterShortName OS_VERSION -> s
+    com.batch.android.core.SystemParameterShortName SIM_OPERATOR -> u
+    com.batch.android.core.SystemParameterShortName NETWORK_NAME -> w
+    1:79:void <clinit>():8:86 -> <clinit>
+    80:80:void <clinit>():7:7 -> <clinit>
+    1:2:void <init>(java.lang.String,int,java.lang.String):98:99 -> <init>
+    1:1:com.batch.android.core.SystemParameterShortName[] $values():7:7 -> a
+    2:8:com.batch.android.core.SystemParameterShortName fromShortValue(java.lang.String):114:120 -> a
+    9:9:com.batch.android.core.SystemParameterShortName fromShortValue(java.lang.String):111:111 -> a
+    1:1:com.batch.android.core.SystemParameterShortName valueOf(java.lang.String):7:7 -> valueOf
+    1:1:com.batch.android.core.SystemParameterShortName[] values():7:7 -> values
+com.batch.android.core.TLSSocketFactory -> com.batch.android.e.k0:
+# {"id":"sourceFile","fileName":"TLSSocketFactory.java"}
+    java.util.List enabledProtocols -> c
+    javax.net.ssl.SSLSocketFactory internalSSLSocketFactory -> a
+    java.lang.String[] protocols -> b
+    1:10:void <clinit>():25:34 -> <clinit>
+    1:9:void <init>():38:46 -> <init>
+    1:2:java.net.Socket enableTLSOnSocket(java.net.Socket):92:93 -> a
+    1:1:java.net.Socket createSocket():61:61 -> createSocket
+    2:2:java.net.Socket createSocket(java.net.Socket,java.lang.String,int,boolean):66:66 -> createSocket
+    3:3:java.net.Socket createSocket(java.lang.String,int):71:71 -> createSocket
+    4:4:java.net.Socket createSocket(java.lang.String,int,java.net.InetAddress,int):77:77 -> createSocket
+    5:5:java.net.Socket createSocket(java.net.InetAddress,int):82:82 -> createSocket
+    6:6:java.net.Socket createSocket(java.net.InetAddress,int,java.net.InetAddress,int):88:88 -> createSocket
+    1:1:java.lang.String[] getDefaultCipherSuites():51:51 -> getDefaultCipherSuites
+    1:1:java.lang.String[] getSupportedCipherSuites():56:56 -> getSupportedCipherSuites
+com.batch.android.core.TaskExecutor -> com.batch.android.e.l0:
+# {"id":"sourceFile","fileName":"TaskExecutor.java"}
+    java.util.Map futures -> a
+    android.content.Context context -> b
+    java.lang.String INTENT_WORK_FINISHED -> c
+    1:1:void <init>(android.content.Context,int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue):63:63 -> <init>
+    2:32:void <init>(android.content.Context,int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue):38:68 -> <init>
+    33:33:void <init>(android.content.Context,int,int,long,java.util.concurrent.TimeUnit,java.util.concurrent.BlockingQueue):65:65 -> <init>
+    1:6:com.batch.android.core.TaskExecutor provide(android.content.Context):73:78 -> a
+    7:48:java.util.concurrent.Future submit(com.batch.android.core.TaskRunnable):94:135 -> a
+    49:49:java.util.concurrent.Future submit(com.batch.android.core.TaskRunnable):91:91 -> a
+    50:52:boolean isBusy():144:146 -> a
+    1:15:void afterExecute(java.lang.Runnable,java.lang.Throwable):159:173 -> afterExecute
+    16:23:void afterExecute(java.lang.Runnable,java.lang.Throwable):166:173 -> afterExecute
+    24:27:void afterExecute(java.lang.Runnable,java.lang.Throwable):171:174 -> afterExecute
+    1:1:void execute(java.lang.Runnable):151:151 -> execute
+com.batch.android.core.TaskRunnable -> com.batch.android.e.m0:
+# {"id":"sourceFile","fileName":"TaskRunnable.java"}
+    java.lang.String getTaskIdentifier() -> a
+com.batch.android.core.TypedID -> com.batch.android.e.n0:
+# {"id":"sourceFile","fileName":"TypedID.java"}
+    com.batch.android.core.Ulid ulid -> b
+    java.nio.charset.Charset UTF_8_CHARSET -> c
+    int MAX_TYPE_LENGTH -> f
+    com.batch.android.core.Base32Encoding base32Encoding -> h
+    int BASE32_PART_LENGTH -> g
+    java.lang.String type -> a
+    java.lang.String CUSTOM_ENCODING -> d
+    char SEPARATOR -> e
+    1:9:void <clinit>():15:23 -> <clinit>
+    1:8:void <init>(java.lang.String,com.batch.android.core.Ulid):28:35 -> <init>
+    1:1:boolean isNotAlnum(byte):0:0 -> a
+    2:10:byte[] toBytes():61:69 -> a
+    11:49:com.batch.android.core.TypedID fromBytes(byte[]):83:121 -> a
+    50:50:com.batch.android.core.TypedID fromBytes(byte[]):118:118 -> a
+    51:52:com.batch.android.core.TypedID fromBytes(byte[]):107:108 -> a
+    53:53:com.batch.android.core.TypedID fromBytes(byte[]):97:97 -> a
+    54:54:com.batch.android.core.TypedID fromBytes(byte[]):94:94 -> a
+    55:64:com.batch.android.core.TypedID newWithULID(java.lang.String,com.batch.android.core.Ulid):168:177 -> a
+    65:65:com.batch.android.core.TypedID newWithULID(java.lang.String,com.batch.android.core.Ulid):173:173 -> a
+    66:66:com.batch.android.core.TypedID newWithULID(java.lang.String,com.batch.android.core.Ulid):170:170 -> a
+    67:85:com.batch.android.core.TypedID newWithUUID(java.lang.String,java.util.UUID):190:208 -> a
+    86:86:com.batch.android.core.TypedID newWithUUID(java.lang.String,java.util.UUID):205:205 -> a
+    87:87:com.batch.android.core.TypedID newWithUUID(java.lang.String,java.util.UUID):195:195 -> a
+    88:88:com.batch.android.core.TypedID newWithUUID(java.lang.String,java.util.UUID):192:192 -> a
+    89:96:void encodeMainPart(com.batch.android.core.Ulid,int,java.io.ByteArrayOutputStream):270:277 -> a
+    97:100:void checkTypeIsAlnum(java.lang.String):354:357 -> a
+    1:29:com.batch.android.core.TypedID$DecodedMainPart decodeMainPart(java.lang.String):302:330 -> b
+    30:30:com.batch.android.core.TypedID$DecodedMainPart decodeMainPart(java.lang.String):324:324 -> b
+    31:32:com.batch.android.core.TypedID$DecodedMainPart decodeMainPart(java.lang.String):313:314 -> b
+    33:34:com.batch.android.core.TypedID$DecodedMainPart decodeMainPart(java.lang.String):303:304 -> b
+    35:39:int getChecksum(byte[]):340:344 -> b
+    1:2:com.batch.android.core.TypedID newWithRandomULID(java.lang.String):154:155 -> c
+    1:36:com.batch.android.core.TypedID parse(java.lang.String):224:259 -> d
+    37:38:com.batch.android.core.TypedID parse(java.lang.String):254:255 -> d
+    39:39:com.batch.android.core.TypedID parse(java.lang.String):234:234 -> d
+    40:40:com.batch.android.core.TypedID parse(java.lang.String):228:228 -> d
+    1:5:boolean equals(java.lang.Object):43:47 -> equals
+    1:1:int hashCode():52:52 -> hashCode
+    1:12:java.lang.String toString():132:143 -> toString
+com.batch.android.core.TypedID$DecodedMainPart -> com.batch.android.e.n0$a:
+# {"id":"sourceFile","fileName":"TypedID.java"}
+    com.batch.android.core.Ulid ulid -> a
+    int checksum -> b
+    1:3:void <init>(com.batch.android.core.Ulid,int):287:289 -> <init>
+    1:1:com.batch.android.core.Ulid access$000(com.batch.android.core.TypedID$DecodedMainPart):281:281 -> a
+com.batch.android.core.TypedIDExceptions -> com.batch.android.e.o0:
+# {"id":"sourceFile","fileName":"TypedIDExceptions.java"}
+    1:1:void <init>():3:3 -> <init>
+com.batch.android.core.TypedIDExceptions$InvalidChecksumException -> com.batch.android.e.o0$a:
+# {"id":"sourceFile","fileName":"TypedIDExceptions.java"}
+    1:1:void <init>(java.lang.String):31:31 -> <init>
+com.batch.android.core.TypedIDExceptions$InvalidIDException -> com.batch.android.e.o0$b:
+# {"id":"sourceFile","fileName":"TypedIDExceptions.java"}
+    1:1:void <init>(java.lang.String):8:8 -> <init>
+com.batch.android.core.TypedIDExceptions$InvalidSeparatorException -> com.batch.android.e.o0$c:
+# {"id":"sourceFile","fileName":"TypedIDExceptions.java"}
+    1:1:void <init>():12:12 -> <init>
+com.batch.android.core.TypedIDExceptions$InvalidSizeException -> com.batch.android.e.o0$d:
+# {"id":"sourceFile","fileName":"TypedIDExceptions.java"}
+    1:1:void <init>(java.lang.String):17:17 -> <init>
+com.batch.android.core.TypedIDExceptions$InvalidTypeException -> com.batch.android.e.o0$e:
+# {"id":"sourceFile","fileName":"TypedIDExceptions.java"}
+    1:1:void <init>(java.lang.String):24:24 -> <init>
+com.batch.android.core.URLBuilder -> com.batch.android.e.p0:
+# {"id":"sourceFile","fileName":"URLBuilder.java"}
+    java.util.Map getParameters -> b
+    java.lang.String baseURL -> a
+    com.batch.android.core.URLBuilder$CryptorMode cryptorMode -> c
+    java.lang.String TAG -> d
+    1:8:void <init>(java.lang.String,com.batch.android.core.URLBuilder$CryptorMode,java.lang.String[]):44:51 -> <init>
+    9:9:void <init>(java.lang.String,com.batch.android.core.URLBuilder$CryptorMode,java.lang.String[]):46:46 -> <init>
+    1:34:void parseURL(java.lang.String,java.lang.String[]):71:104 -> a
+    35:36:void parseURL(java.lang.String,java.lang.String[]):91:92 -> a
+    37:46:java.util.Map parseQuery(java.lang.String):115:124 -> a
+    47:55:void addGETParameter(java.lang.String,java.lang.String):140:148 -> a
+    56:56:void addGETParameter(java.lang.String,java.lang.String):145:145 -> a
+    57:57:void addGETParameter(java.lang.String,java.lang.String):141:141 -> a
+    58:58:java.net.URL build():172:172 -> a
+    59:71:java.net.URL build(com.batch.android.core.PatternURLSorter,com.batch.android.core.Cryptor):183:195 -> a
+    72:76:void buildRawQuery(com.batch.android.core.PatternURLSorter,java.lang.StringBuilder):270:274 -> a
+    77:77:void addParameter(java.lang.StringBuilder,java.lang.String,java.lang.String):285:285 -> a
+    78:78:void cleanURL(java.lang.StringBuilder):294:294 -> a
+    1:1:void removeGETParameter(java.lang.String):161:161 -> b
+    2:2:void removeGETParameter(java.lang.String):158:158 -> b
+    3:48:java.lang.String buildQuery(com.batch.android.core.PatternURLSorter,com.batch.android.core.Cryptor):211:256 -> b
+    49:55:java.lang.String buildQuery(com.batch.android.core.PatternURLSorter,com.batch.android.core.Cryptor):245:251 -> b
+    56:62:java.lang.String buildQuery(com.batch.android.core.PatternURLSorter,com.batch.android.core.Cryptor):234:240 -> b
+    63:65:java.lang.String buildQuery(com.batch.android.core.PatternURLSorter,com.batch.android.core.Cryptor):227:229 -> b
+    66:66:java.lang.String buildQuery(com.batch.android.core.PatternURLSorter,com.batch.android.core.Cryptor):208:208 -> b
+com.batch.android.core.URLBuilder$1 -> com.batch.android.e.p0$a:
+# {"id":"sourceFile","fileName":"URLBuilder.java"}
+    int[] $SwitchMap$com$batch$android$core$URLBuilder$CryptorMode -> a
+    1:1:void <clinit>():223:223 -> <clinit>
+com.batch.android.core.URLBuilder$CryptorMode -> com.batch.android.e.p0$b:
+# {"id":"sourceFile","fileName":"URLBuilder.java"}
+    com.batch.android.core.URLBuilder$CryptorMode EACH -> d
+    com.batch.android.core.URLBuilder$CryptorMode[] $VALUES -> e
+    com.batch.android.core.URLBuilder$CryptorMode ALL -> b
+    int value -> a
+    com.batch.android.core.URLBuilder$CryptorMode VALUE -> c
+    1:11:void <clinit>():307:317 -> <clinit>
+    12:12:void <clinit>():303:303 -> <clinit>
+    1:2:void <init>(java.lang.String,int,int):329:330 -> <init>
+    1:1:com.batch.android.core.URLBuilder$CryptorMode[] $values():303:303 -> a
+    2:3:com.batch.android.core.URLBuilder$CryptorMode fromValue(int):349:350 -> a
+    1:1:int getValue():339:339 -> b
+    1:1:com.batch.android.core.URLBuilder$CryptorMode valueOf(java.lang.String):303:303 -> valueOf
+    1:1:com.batch.android.core.URLBuilder$CryptorMode[] values():303:303 -> values
+com.batch.android.core.Ulid -> com.batch.android.e.q0:
+# {"id":"sourceFile","fileName":"Ulid.java"}
+    java.nio.charset.Charset UTF_8_CHARSET -> b
+    byte[] buffer -> a
+    java.security.SecureRandom SECURE_RANDOM -> c
+    int ULID_BYTES -> d
+    1:11:void <clinit>():15:25 -> <clinit>
+    1:2:void <init>(byte[]):75:76 -> <init>
+    1:4:com.batch.android.core.Ulid from(byte[]):39:42 -> a
+    5:5:com.batch.android.core.Ulid from(byte[]):40:40 -> a
+    6:10:com.batch.android.core.Ulid from(java.lang.String):53:57 -> a
+    11:19:byte[] generateUlidBuffer():108:116 -> a
+    1:2:com.batch.android.core.Ulid randomUlid():66:67 -> b
+    1:1:byte[] toBytes():85:85 -> c
+    1:4:java.lang.String toULIDString():95:98 -> d
+    1:5:boolean equals(java.lang.Object):124:128 -> equals
+    1:1:int hashCode():133:133 -> hashCode
+com.batch.android.core.Ulid$InvalidBufferSizeException -> com.batch.android.e.q0$a:
+# {"id":"sourceFile","fileName":"Ulid.java"}
+    1:1:void <init>(java.lang.String):139:139 -> <init>
+com.batch.android.core.Webservice -> com.batch.android.e.r0:
+# {"id":"sourceFile","fileName":"Webservice.java"}
+    com.batch.android.core.URLBuilder builder -> b
+    java.util.Map headers -> c
+    java.lang.String TAG -> h
+    int DEFAULT_RETRY_AFTER -> j
+    com.batch.android.core.Webservice$Interceptor wsInterceptor -> k
+    int WEBSERVICE_ERROR_INVALID_CIPHER -> i
+    boolean isDowngradedCipher -> f
+    java.lang.String id -> a
+    android.content.Context applicationContext -> d
+    com.batch.android.core.Webservice$RequestType type -> e
+    com.batch.android.module.OptOutModule optOutModule -> g
+    1:1:void <init>(android.content.Context,com.batch.android.core.Webservice$RequestType,java.lang.String,java.lang.String[]):113:113 -> <init>
+    2:31:void <init>(android.content.Context,com.batch.android.core.Webservice$RequestType,java.lang.String,java.lang.String[]):103:132 -> <init>
+    32:32:void <init>(android.content.Context,com.batch.android.core.Webservice$RequestType,java.lang.String,java.lang.String[]):123:123 -> <init>
+    33:33:void <init>(android.content.Context,com.batch.android.core.Webservice$RequestType,java.lang.String,java.lang.String[]):119:119 -> <init>
+    34:34:void <init>(android.content.Context,com.batch.android.core.Webservice$RequestType,java.lang.String,java.lang.String[]):115:115 -> <init>
+    java.lang.String getSpecificConnectTimeoutKey() -> A
+    java.lang.String getSpecificReadTimeoutKey() -> B
+    java.lang.String getSpecificRetryCountKey() -> C
+    1:35:com.batch.android.json.JSONObject getStandardResponseBodyIfValid():619:653 -> D
+    36:67:com.batch.android.json.JSONObject getStandardResponseBodyIfValid():649:680 -> D
+    68:68:com.batch.android.json.JSONObject getStandardResponseBodyIfValid():639:639 -> D
+    69:69:com.batch.android.json.JSONObject getStandardResponseBodyIfValid():631:631 -> D
+    70:70:com.batch.android.json.JSONObject getStandardResponseBodyIfValid():627:627 -> D
+    71:71:com.batch.android.json.JSONObject getStandardResponseBodyIfValid():623:623 -> D
+    1:11:com.batch.android.core.PatternURLSorter getURLSorter():268:278 -> E
+    java.lang.String getURLSorterPatternParameterKey() -> F
+    1:1:void setWsInterceptor(com.batch.android.core.Webservice$Interceptor):0:0 -> a
+    2:9:void addGetParameter(java.lang.String,java.lang.String):166:173 -> a
+    10:12:java.lang.String[] addBatchApiKey(java.lang.String[]):183:185 -> a
+    13:32:void sendRetrySignal(com.batch.android.core.Webservice$WebserviceError):564:583 -> a
+    33:33:void sendRetrySignal(com.batch.android.core.Webservice$WebserviceError):580:580 -> a
+    34:58:void sendRetrySignal(com.batch.android.core.Webservice$WebserviceError):570:594 -> a
+    59:59:void onRetry(com.batch.android.core.WebserviceErrorCause):604:604 -> a
+    60:76:com.batch.android.core.Webservice$WebserviceError$Reason getResponseErrorCause(int):722:738 -> a
+    77:79:java.lang.String encode(java.lang.String):749:751 -> a
+    80:87:byte[] buildPostParameters(com.batch.android.post.PostDataProvider):875:882 -> a
+    88:115:void addRequestSignatures(java.net.HttpURLConnection,byte[]):895:922 -> a
+    116:149:java.lang.String getSignatureBody(java.net.HttpURLConnection,java.util.List):926:959 -> a
+    150:153:java.lang.String formatDate(java.util.Date):1199:1202 -> a
+    1:1:boolean isResponseValid(int):0:0 -> b
+    2:15:void addDefaultHeaders():214:227 -> b
+    1:1:void addDefaultParameters():0:0 -> c
+    2:2:boolean shouldRetry(int):0:0 -> c
+    1:3:void addHeaders():235:237 -> d
+    1:7:void addParameters():147:153 -> e
+    1:72:java.net.HttpURLConnection buildConnection():781:852 -> f
+    73:73:java.net.HttpURLConnection buildConnection():850:850 -> f
+    1:5:void buildParameters():861:865 -> g
+    1:3:java.net.URL buildURL():761:763 -> h
+    boolean canBypassOptOut() -> i
+    1:2:void enabledDowngradedMode():889:890 -> j
+    1:110:byte[] executeRequest():417:526 -> k
+    111:136:byte[] executeRequest():501:526 -> k
+    137:210:byte[] executeRequest():453:526 -> k
+    211:211:byte[] executeRequest():447:447 -> k
+    212:296:byte[] executeRequest():442:526 -> k
+    297:323:byte[] executeRequest():511:537 -> k
+    324:337:byte[] executeRequest():515:528 -> k
+    1:5:com.batch.android.json.JSONObject getBasicJsonResponseBody():691:695 -> l
+    1:10:int getConnectTimeout():971:980 -> m
+    11:11:int getConnectTimeout():979:979 -> m
+    1:14:com.batch.android.core.Cryptor getCryptor():296:309 -> n
+    java.lang.String getCryptorModeParameterKey() -> o
+    java.lang.String getCryptorTypeParameterKey() -> p
+    1:16:com.batch.android.core.URLBuilder$CryptorMode getGetCryptorMode():325:340 -> q
+    java.util.Map getHeaders() -> r
+    1:9:int getMaxRetryCount():1023:1031 -> s
+    java.util.Map getParameters() -> t
+    1:14:com.batch.android.core.WebserviceCryptor getPostCryptor():356:369 -> u
+    java.lang.String getPostCryptorTypeParameterKey() -> v
+    com.batch.android.post.PostDataProvider getPostDataProvider() -> w
+    1:14:com.batch.android.core.WebserviceCryptor getReadCryptor():385:398 -> x
+    java.lang.String getReadCryptorTypeParameterKey() -> y
+    1:9:int getReadTimeout():998:1006 -> z
+com.batch.android.core.Webservice$1 -> com.batch.android.e.r0$a:
+# {"id":"sourceFile","fileName":"Webservice.java"}
+    int[] $SwitchMap$com$batch$android$core$Webservice$WebserviceError$Reason -> a
+    1:1:void <clinit>():567:567 -> <clinit>
+com.batch.android.core.Webservice$Interceptor -> com.batch.android.e.r0$b:
+# {"id":"sourceFile","fileName":"Webservice.java"}
+    java.net.HttpURLConnection onBuildHttpConnection(java.net.HttpURLConnection) -> a
+    java.net.URL onBuildURL(java.net.URL) -> a
+    void onError(java.lang.String,java.net.HttpURLConnection,com.batch.android.core.Webservice$WebserviceError) -> a
+    void onPreConnect(java.lang.String,java.net.HttpURLConnection,byte[],long) -> a
+    void onSuccess(java.lang.String,java.net.HttpURLConnection,byte[],long) -> b
+com.batch.android.core.Webservice$RequestType -> com.batch.android.e.r0$c:
+# {"id":"sourceFile","fileName":"Webservice.java"}
+    com.batch.android.core.Webservice$RequestType[] $VALUES -> c
+    com.batch.android.core.Webservice$RequestType POST -> b
+    com.batch.android.core.Webservice$RequestType GET -> a
+    1:6:void <clinit>():1051:1056 -> <clinit>
+    7:7:void <clinit>():1047:1047 -> <clinit>
+    1:1:void <init>(java.lang.String,int):1047:1047 -> <init>
+    1:1:com.batch.android.core.Webservice$RequestType[] $values():1047:1047 -> a
+    1:1:com.batch.android.core.Webservice$RequestType valueOf(java.lang.String):1047:1047 -> valueOf
+    1:1:com.batch.android.core.Webservice$RequestType[] values():1047:1047 -> values
+com.batch.android.core.Webservice$WebserviceError -> com.batch.android.e.r0$d:
+# {"id":"sourceFile","fileName":"Webservice.java"}
+    com.batch.android.core.Webservice$WebserviceError$Reason reason -> a
+    int retryAfter -> b
+    1:1:void <init>(com.batch.android.core.Webservice$WebserviceError$Reason,java.lang.Throwable):1090:1090 -> <init>
+    2:16:void <init>(com.batch.android.core.Webservice$WebserviceError$Reason,java.lang.Throwable):1081:1095 -> <init>
+    17:17:void <init>(com.batch.android.core.Webservice$WebserviceError$Reason,java.lang.Throwable):1092:1092 -> <init>
+    18:18:void <init>(com.batch.android.core.Webservice$WebserviceError$Reason):1102:1102 -> <init>
+    19:45:void <init>(com.batch.android.core.Webservice$WebserviceError$Reason):1081:1107 -> <init>
+    46:46:void <init>(com.batch.android.core.Webservice$WebserviceError$Reason):1104:1104 -> <init>
+    1:1:com.batch.android.core.Webservice$WebserviceError$Reason access$000(com.batch.android.core.Webservice$WebserviceError):1063:1063 -> a
+    2:2:com.batch.android.core.Webservice$WebserviceError$Reason getReason():1118:1118 -> a
+    3:3:void setRetryAfter(int):1186:1186 -> a
+    1:1:int getRetryAfterInMillis():1179:1179 -> b
+com.batch.android.core.Webservice$WebserviceError$Reason -> com.batch.android.e.r0$d$a:
+# {"id":"sourceFile","fileName":"Webservice.java"}
+    com.batch.android.core.Webservice$WebserviceError$Reason TOO_MANY_REQUESTS -> c
+    com.batch.android.core.Webservice$WebserviceError$Reason NOT_FOUND_ERROR -> d
+    com.batch.android.core.Webservice$WebserviceError$Reason NETWORK_ERROR -> a
+    com.batch.android.core.Webservice$WebserviceError$Reason SERVER_ERROR -> b
+    com.batch.android.core.Webservice$WebserviceError$Reason UNEXPECTED_ERROR -> g
+    com.batch.android.core.Webservice$WebserviceError$Reason FORBIDDEN -> h
+    com.batch.android.core.Webservice$WebserviceError$Reason INVALID_API_KEY -> e
+    com.batch.android.core.Webservice$WebserviceError$Reason DEACTIVATED_API_KEY -> f
+    com.batch.android.core.Webservice$WebserviceError$Reason SDK_OPTED_OUT -> i
+    com.batch.android.core.Webservice$WebserviceError$Reason[] $VALUES -> j
+    1:41:void <clinit>():1131:1171 -> <clinit>
+    42:42:void <clinit>():1127:1127 -> <clinit>
+    1:1:void <init>(java.lang.String,int):1127:1127 -> <init>
+    1:1:com.batch.android.core.Webservice$WebserviceError$Reason[] $values():1127:1127 -> a
+    1:1:com.batch.android.core.Webservice$WebserviceError$Reason valueOf(java.lang.String):1127:1127 -> valueOf
+    1:1:com.batch.android.core.Webservice$WebserviceError$Reason[] values():1127:1127 -> values
+com.batch.android.core.WebserviceCryptor -> com.batch.android.e.s0:
+# {"id":"sourceFile","fileName":"WebserviceCryptor.java"}
+    com.batch.android.core.CryptorFactory$CryptorType cryptorType -> a
+    java.lang.String PRIVATE_KEY_PART_V2 -> c
+    java.lang.String PRIVATE_KEY_PART -> b
+    java.lang.String VERSION -> d
+    1:1:void <init>(int):40:40 -> <init>
+    2:7:void <init>(com.batch.android.core.CryptorFactory$CryptorType):46:51 -> <init>
+    8:8:void <init>(com.batch.android.core.CryptorFactory$CryptorType):48:48 -> <init>
+    1:10:byte[] decryptData(byte[],com.batch.android.core.Webservice,java.net.HttpURLConnection):69:78 -> a
+    11:11:byte[] decryptData(byte[],com.batch.android.core.Webservice,java.net.HttpURLConnection):75:75 -> a
+    12:12:byte[] decryptData(byte[],com.batch.android.core.Webservice,java.net.HttpURLConnection):71:71 -> a
+    13:13:byte[] decryptData(byte[],com.batch.android.core.Webservice,java.net.HttpURLConnection):66:66 -> a
+    14:19:byte[] decryptDataForVersion(java.lang.String,java.lang.String,java.lang.String,com.batch.android.core.Webservice):93:98 -> a
+    20:29:byte[] encryptData(byte[],com.batch.android.core.Webservice):113:122 -> a
+    30:33:byte[] buildPrivateKey(com.batch.android.core.Webservice):137:140 -> a
+    34:34:java.lang.String buildKey(java.lang.String,com.batch.android.core.Webservice):167:167 -> a
+    35:43:java.lang.String randomChars(int):197:205 -> a
+    1:4:byte[] buildPrivateKeyV2(com.batch.android.core.Webservice):153:156 -> b
+    5:5:java.lang.String buildKeyV2(java.lang.String,com.batch.android.core.Webservice):178:178 -> b
+    1:1:java.lang.String generatePublicKey(java.lang.String,com.batch.android.core.Webservice):187:187 -> c
+com.batch.android.core.WebserviceErrorCause -> com.batch.android.e.t0:
+# {"id":"sourceFile","fileName":"WebserviceErrorCause.java"}
+    com.batch.android.core.WebserviceErrorCause PARSING_ERROR -> a
+    com.batch.android.core.WebserviceErrorCause SERVER_ERROR -> b
+    com.batch.android.core.WebserviceErrorCause NETWORK_TIMEOUT -> c
+    com.batch.android.core.WebserviceErrorCause SSL_HANDSHAKE_FAILURE -> d
+    com.batch.android.core.WebserviceErrorCause OTHER -> e
+    com.batch.android.core.WebserviceErrorCause[] $VALUES -> f
+    1:21:void <clinit>():11:31 -> <clinit>
+    22:22:void <clinit>():7:7 -> <clinit>
+    1:1:void <init>(java.lang.String,int):7:7 -> <init>
+    1:1:com.batch.android.core.WebserviceErrorCause[] $values():7:7 -> a
+    1:1:com.batch.android.core.WebserviceErrorCause valueOf(java.lang.String):7:7 -> valueOf
+    1:1:com.batch.android.core.WebserviceErrorCause[] values():7:7 -> values
+com.batch.android.core.WebserviceSignature -> com.batch.android.e.u0:
+# {"id":"sourceFile","fileName":"WebserviceSignature.java"}
+    java.lang.String TAG -> a
+    java.lang.String PRIVATE_SIGNATURE_KEY_PART -> b
+    1:1:void <init>():9:9 -> <init>
+    1:3:java.lang.String encryptSignatureData(java.lang.String):20:22 -> a
+    4:11:java.lang.String encryptSignatureData(java.lang.String):21:28 -> a
+    12:17:byte[] buildPrivateSignatureKey():42:47 -> a
+    18:20:byte[] encryptHMAC(java.security.Key,byte[]):58:60 -> a
+com.batch.android.core.stores.GooglePlayStoreApplication -> com.batch.android.f.a:
+# {"id":"sourceFile","fileName":"GooglePlayStoreApplication.java"}
+    1:1:void <init>():10:10 -> <init>
+    1:7:void open(android.content.Context):15:21 -> a
+com.batch.android.core.stores.HuaweiAppGalleryApplication -> com.batch.android.f.b:
+# {"id":"sourceFile","fileName":"HuaweiAppGalleryApplication.java"}
+    1:1:void <init>():10:10 -> <init>
+    1:7:void open(android.content.Context):15:21 -> a
+com.batch.android.core.stores.StoreApplication -> com.batch.android.f.c:
+# {"id":"sourceFile","fileName":"StoreApplication.java"}
+    void open(android.content.Context) -> a
+com.batch.android.core.stores.StoreApplicationFactory -> com.batch.android.f.d:
+# {"id":"sourceFile","fileName":"StoreApplicationFactory.java"}
+    1:1:void <init>():10:10 -> <init>
+    1:5:com.batch.android.core.stores.StoreApplication getMainStore(android.content.Context):16:20 -> a
+    1:1:boolean isHuaweiAppGalleryInstalled(android.content.Context):30:30 -> b
+    1:1:boolean isPlayStoreInstalled(android.content.Context):26:26 -> c
+com.batch.android.date.BatchDate -> com.batch.android.g.a:
+# {"id":"sourceFile","fileName":"BatchDate.java"}
+    long timestamp -> a
+    1:2:void <init>(long):9:10 -> <init>
+    1:1:void setTime(long):14:14 -> a
+    2:2:long getTime():18:18 -> a
+    3:4:int compareTo(com.batch.android.date.BatchDate):42:43 -> a
+    1:1:int compareTo(java.lang.Object):5:5 -> compareTo
+    1:7:boolean equals(java.lang.Object):26:32 -> equals
+    1:1:int hashCode():37:37 -> hashCode
+com.batch.android.date.TimezoneAwareDate -> com.batch.android.g.b:
+# {"id":"sourceFile","fileName":"TimezoneAwareDate.java"}
+    1:1:void <init>():8:8 -> <init>
+    2:2:void <init>(long):12:12 -> <init>
+    1:1:long getTime():17:17 -> a
+com.batch.android.date.UTCDate -> com.batch.android.g.c:
+# {"id":"sourceFile","fileName":"UTCDate.java"}
+    1:1:void <init>():6:6 -> <init>
+    2:2:void <init>(long):10:10 -> <init>
+com.batch.android.debug.BatchDebugActivity -> com.batch.android.debug.BatchDebugActivity:
+# {"id":"sourceFile","fileName":"BatchDebugActivity.java"}
+    int LOCAL_CAMPAIGN_DEBUG_FRAGMENT -> f
+    int USER_DATA_DEBUG_FRAGMENT -> d
+    int LOCAL_CAMPAIGNS_DEBUG_FRAGMENT -> e
+    int MAIN_DEBUG_FRAGMENT -> b
+    int IDENTIFIER_DEBUG_FRAGMENT -> c
+    androidx.fragment.app.Fragment[] fragments -> a
+    1:9:void <init>():21:29 -> <init>
+    1:18:void switchFragment(int,boolean,java.lang.String):32:49 -> a
+    19:19:void switchFragment(int,boolean,java.lang.String):45:45 -> a
+    20:20:void switchFragment(int,boolean,java.lang.String):42:42 -> a
+    21:21:void switchFragment(int,boolean,java.lang.String):39:39 -> a
+    22:50:void switchFragment(int,boolean,java.lang.String):36:64 -> a
+    51:51:void switchFragment(int,boolean):70:70 -> a
+    52:52:void onMenuSelected(int):75:75 -> a
+    53:53:void onCampaignMenuSelected(java.lang.String):80:80 -> a
+    1:7:void onCreate(android.os.Bundle):85:91 -> onCreate
+    1:2:void onDestroy():108:109 -> onDestroy
+    1:2:void onStart():96:97 -> onStart
+    1:2:void onStop():102:103 -> onStop
+com.batch.android.debug.FindMyInstallationHelper -> com.batch.android.h.a:
+# {"id":"sourceFile","fileName":"FindMyInstallationHelper.java"}
+    java.util.List timestamps -> a
+    boolean isEnabled -> e
+    int MAX_DELAY_BETWEEN_FOREGROUNDS -> d
+    java.lang.String TAG -> b
+    int MIN_FOREGROUND -> c
+    1:24:void <init>():20:43 -> <init>
+    1:9:void notifyForeground():49:57 -> a
+    10:27:void copyInstallationIDToClipboard(android.content.Context):87:104 -> a
+    28:32:void copyInstallationIDToClipboard(android.content.Context):102:106 -> a
+    1:5:boolean shouldCopyInstallationID():69:73 -> b
+com.batch.android.debug.OnMenuSelectedListener -> com.batch.android.h.b:
+# {"id":"sourceFile","fileName":"OnMenuSelectedListener.java"}
+    void onCampaignMenuSelected(java.lang.String) -> a
+    void onMenuSelected(int) -> a
+com.batch.android.debug.adapter.CollectionAdapter -> com.batch.android.i.a:
+# {"id":"sourceFile","fileName":"CollectionAdapter.java"}
+    android.content.Context context -> b
+    android.view.LayoutInflater inflater -> a
+    java.util.List tagCollections -> c
+    1:4:void <init>(android.content.Context):26:29 -> <init>
+    1:1:com.batch.android.debug.adapter.CollectionAdapter$TagCollection getItem(int):39:39 -> a
+    2:14:void add(java.lang.String,java.util.Set):69:81 -> a
+    15:16:void clear():85:86 -> a
+    1:1:int getCount():34:34 -> getCount
+    1:1:java.lang.Object getItem(int):18:18 -> getItem
+    1:11:android.view.View getView(int,android.view.View,android.view.ViewGroup):54:64 -> getView
+com.batch.android.debug.adapter.CollectionAdapter$TagCollection -> com.batch.android.i.a$a:
+# {"id":"sourceFile","fileName":"CollectionAdapter.java"}
+    com.batch.android.debug.adapter.CollectionAdapter this$0 -> c
+    java.lang.String name -> a
+    android.widget.ArrayAdapter tagAdapter -> b
+    1:4:void <init>(com.batch.android.debug.adapter.CollectionAdapter,java.lang.String,android.widget.ArrayAdapter):94:97 -> <init>
+    1:1:java.lang.String getName():101:101 -> a
+    1:1:android.widget.ArrayAdapter getTagAdapter():105:105 -> b
+com.batch.android.debug.fragment.IdentifierDebugFragment -> com.batch.android.j.a:
+# {"id":"sourceFile","fileName":"IdentifierDebugFragment.java"}
+    android.widget.TextView sdkVersion -> a
+    android.widget.TextView advertisingId -> c
+    android.widget.TextView installId -> b
+    android.widget.TextView pushToken -> d
+    1:1:void <init>():18:18 -> <init>
+    1:7:java.lang.String getShareString():31:37 -> a
+    8:8:java.lang.String getShareString():34:34 -> a
+    9:23:java.lang.String getShareString():33:47 -> a
+    24:24:java.lang.String getShareString():45:45 -> a
+    25:38:java.lang.String getShareString():44:57 -> a
+    39:39:java.lang.String getShareString():54:54 -> a
+    40:55:java.lang.String getShareString():53:68 -> a
+    56:56:java.lang.String getShareString():66:66 -> a
+    57:70:java.lang.String getShareString():65:78 -> a
+    71:71:java.lang.String getShareString():75:75 -> a
+    72:72:java.lang.String getShareString():74:74 -> a
+    1:1:com.batch.android.debug.fragment.IdentifierDebugFragment newInstance():26:26 -> b
+    1:17:void onActivityCreated(android.os.Bundle):106:122 -> onActivityCreated
+    1:6:void onClick(android.view.View):128:133 -> onClick
+    1:8:android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle):93:100 -> onCreateView
+com.batch.android.debug.fragment.LocalCampaignDebugFragment -> com.batch.android.j.b:
+# {"id":"sourceFile","fileName":"LocalCampaignDebugFragment.java"}
+    android.widget.TextView token -> a
+    java.lang.String CAMPAIGN_TOKEN_KEY -> h
+    android.widget.TextView endDate -> c
+    android.widget.TextView startDate -> b
+    com.batch.android.localcampaigns.CampaignManager campaignManager -> g
+    android.widget.TextView gracePeriod -> e
+    android.widget.TextView capping -> d
+    android.widget.TextView trigger -> f
+    1:1:void <init>():21:21 -> <init>
+    1:6:com.batch.android.debug.fragment.LocalCampaignDebugFragment newInstance(java.lang.String,com.batch.android.localcampaigns.CampaignManager):35:40 -> a
+    7:7:void setCampaignManager(com.batch.android.localcampaigns.CampaignManager):45:45 -> a
+    8:11:com.batch.android.localcampaigns.model.LocalCampaign getCurrentCampaign():49:52 -> a
+    12:13:java.lang.String formatDate(com.batch.android.date.BatchDate):61:62 -> a
+    14:46:void displayCampaign(com.batch.android.localcampaigns.model.LocalCampaign):187:219 -> a
+    1:8:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):66:73 -> b
+    9:9:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):71:71 -> b
+    10:23:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):70:83 -> b
+    24:24:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):80:80 -> b
+    25:40:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):79:94 -> b
+    41:41:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):91:91 -> b
+    42:55:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):90:103 -> b
+    56:56:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):100:100 -> b
+    57:72:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):99:114 -> b
+    73:73:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):111:111 -> b
+    74:87:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):110:123 -> b
+    88:88:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):120:120 -> b
+    89:104:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):119:134 -> b
+    105:105:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):131:131 -> b
+    106:120:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):130:144 -> b
+    121:121:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):141:141 -> b
+    122:137:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):140:155 -> b
+    138:138:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):151:151 -> b
+    139:159:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):150:170 -> b
+    160:160:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):167:167 -> b
+    161:174:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):166:179 -> b
+    175:175:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):176:176 -> b
+    176:176:java.lang.String getShareString(com.batch.android.localcampaigns.model.LocalCampaign):175:175 -> b
+    1:5:void onActivityCreated(android.os.Bundle):244:248 -> onActivityCreated
+    1:8:void onClick(android.view.View):254:261 -> onClick
+    1:9:android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle):230:238 -> onCreateView
+com.batch.android.debug.fragment.LocalCampaignsDebugFragment -> com.batch.android.j.c:
+# {"id":"sourceFile","fileName":"LocalCampaignsDebugFragment.java"}
+    com.batch.android.debug.OnMenuSelectedListener listener -> d
+    java.lang.String TAG -> g
+    android.widget.TextView title -> a
+    com.batch.android.webservice.listener.LocalCampaignsWebserviceListener webserviceListener -> f
+    com.batch.android.localcampaigns.CampaignManager campaignManager -> e
+    android.widget.ListView campaignList -> b
+    android.widget.ArrayAdapter campaignAdapter -> c
+    1:13:void <init>():32:44 -> <init>
+    1:1:void access$000(com.batch.android.debug.fragment.LocalCampaignsDebugFragment):32:32 -> a
+    2:3:com.batch.android.debug.fragment.LocalCampaignsDebugFragment newInstance(com.batch.android.localcampaigns.CampaignManager):67:68 -> a
+    4:24:void loadLocalCampaigns():91:111 -> a
+    25:25:void lambda$onCreateView$0(android.widget.AdapterView,android.view.View,int,long):135:135 -> a
+    26:26:void lambda$onCreateView$1(android.view.View):140:140 -> a
+    1:1:void setCampaignManager(com.batch.android.localcampaigns.CampaignManager):73:73 -> b
+    2:10:void refreshLocalCampaigns():78:86 -> b
+    1:2:void onActivityCreated(android.os.Bundle):147:148 -> onActivityCreated
+    1:5:void onAttach(android.content.Context):116:120 -> onAttach
+    1:9:android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle):131:139 -> onCreateView
+com.batch.android.debug.fragment.LocalCampaignsDebugFragment$1 -> com.batch.android.j.c$a:
+# {"id":"sourceFile","fileName":"LocalCampaignsDebugFragment.java"}
+    com.batch.android.webservice.listener.LocalCampaignsWebserviceListener sdkImpl -> a
+    com.batch.android.debug.fragment.LocalCampaignsDebugFragment this$0 -> b
+    1:2:void <init>(com.batch.android.debug.fragment.LocalCampaignsDebugFragment):44:45 -> <init>
+    1:4:void onSuccess(java.util.List):49:52 -> a
+    5:8:void onError(com.batch.android.FailReason):58:61 -> a
+    9:9:void lambda$onError$1():61:61 -> a
+    1:1:void lambda$onSuccess$0():52:52 -> b
+com.batch.android.debug.fragment.MainDebugFragment -> com.batch.android.j.d:
+# {"id":"sourceFile","fileName":"MainDebugFragment.java"}
+    com.batch.android.debug.OnMenuSelectedListener listener -> a
+    1:1:void <init>():15:15 -> <init>
+    1:1:com.batch.android.debug.fragment.MainDebugFragment newInstance():20:20 -> a
+    2:2:void lambda$onCreateView$0(android.view.View):43:43 -> a
+    1:1:void lambda$onCreateView$1(android.view.View):48:48 -> b
+    1:1:void lambda$onCreateView$2(android.view.View):53:53 -> c
+    1:5:void onAttach(android.content.Context):25:29 -> onAttach
+    1:13:android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle):40:52 -> onCreateView
+com.batch.android.debug.fragment.UserDataDebugFragment -> com.batch.android.j.e:
+# {"id":"sourceFile","fileName":"UserDataDebugFragment.java"}
+    android.widget.TextView customUserId -> a
+    android.widget.ListView attributeList -> b
+    android.widget.ArrayAdapter attributeAdapter -> d
+    android.widget.ListView collectionList -> c
+    com.batch.android.debug.adapter.CollectionAdapter collectionAdapter -> e
+    1:1:void <init>():25:25 -> <init>
+    1:1:android.widget.ArrayAdapter access$000(com.batch.android.debug.fragment.UserDataDebugFragment):25:25 -> a
+    2:2:java.lang.String access$100(com.batch.android.debug.fragment.UserDataDebugFragment,com.batch.android.BatchUserAttribute):25:25 -> a
+    3:7:java.lang.String formatAttribute(com.batch.android.BatchUserAttribute):39:43 -> a
+    8:18:void loadAttributes():47:57 -> a
+    19:19:void loadAttributes():56:56 -> a
+    1:1:com.batch.android.debug.adapter.CollectionAdapter access$200(com.batch.android.debug.fragment.UserDataDebugFragment):25:25 -> b
+    2:11:void loadCollections():78:87 -> b
+    12:12:void loadCollections():86:86 -> b
+    1:1:com.batch.android.debug.fragment.UserDataDebugFragment newInstance():35:35 -> c
+    1:11:void onActivityCreated(android.os.Bundle):122:132 -> onActivityCreated
+    1:4:android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle):113:116 -> onCreateView
+com.batch.android.debug.fragment.UserDataDebugFragment$1 -> com.batch.android.j.e$a:
+# {"id":"sourceFile","fileName":"UserDataDebugFragment.java"}
+    com.batch.android.debug.fragment.UserDataDebugFragment this$0 -> a
+    1:1:void <init>(com.batch.android.debug.fragment.UserDataDebugFragment):58:58 -> <init>
+    1:2:void onError():70:71 -> onError
+    1:5:void onSuccess(java.util.Map):61:65 -> onSuccess
+com.batch.android.debug.fragment.UserDataDebugFragment$2 -> com.batch.android.j.e$b:
+# {"id":"sourceFile","fileName":"UserDataDebugFragment.java"}
+    com.batch.android.debug.fragment.UserDataDebugFragment this$0 -> a
+    1:1:void <init>(com.batch.android.debug.fragment.UserDataDebugFragment):88:88 -> <init>
+    1:2:void onError():99:100 -> onError
+    1:4:void onSuccess(java.util.Map):91:94 -> onSuccess
+com.batch.android.debug.view.NestedListView -> com.batch.android.debug.view.NestedListView:
+# {"id":"sourceFile","fileName":"NestedListView.java"}
+    android.view.ViewGroup$LayoutParams layoutParams -> b
+    int MAXIMUM_LIST_ITEMS_VIEWABLE -> c
+    int listViewTouchAction -> a
+    1:5:void <init>(android.content.Context,android.util.AttributeSet):19:23 -> <init>
+    1:32:void onMeasure(int,int):40:71 -> onMeasure
+    1:3:void onScroll(android.widget.AbsListView,int,int,int):28:30 -> onScroll
+    1:3:boolean onTouch(android.view.View,android.view.MotionEvent):76:78 -> onTouch
+com.batch.android.di.DI -> com.batch.android.k.a:
+# {"id":"sourceFile","fileName":"DI.java"}
+    java.util.Map singletonInstances -> a
+    com.batch.android.di.DI instance -> c
+    java.lang.String TAG -> b
+    1:2:void <init>():29:30 -> <init>
+    1:1:void clear():34:34 -> a
+    2:3:java.lang.Object getSingletonInstance(java.lang.Class):46:47 -> a
+    4:4:void addSingletonInstance(java.lang.Class,java.lang.Object):61:61 -> a
+    1:4:com.batch.android.di.DI getInstance():15:18 -> b
+    1:2:void reset():22:23 -> c
+com.batch.android.di.providers.ActionModuleProvider -> com.batch.android.l.a:
+# {"id":"sourceFile","fileName":"ActionModuleProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.module.ActionModule get():14:19 -> a
+    1:1:com.batch.android.module.ActionModule getSingleton():25:25 -> b
+com.batch.android.di.providers.ActionOutputProvider -> com.batch.android.l.b:
+# {"id":"sourceFile","fileName":"ActionOutputProvider.java"}
+    1:1:void <init>():10:10 -> <init>
+    1:1:com.batch.android.localcampaigns.output.ActionOutput get(com.batch.android.json.JSONObject):13:13 -> a
+com.batch.android.di.providers.AdvertisingIDProvider -> com.batch.android.l.c:
+# {"id":"sourceFile","fileName":"AdvertisingIDProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.AdvertisingID get():14:19 -> a
+    1:1:com.batch.android.AdvertisingID getSingleton():25:25 -> b
+com.batch.android.di.providers.BatchModuleMasterProvider -> com.batch.android.l.d:
+# {"id":"sourceFile","fileName":"BatchModuleMasterProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.module.BatchModuleMaster get():14:19 -> a
+    1:1:com.batch.android.module.BatchModuleMaster getSingleton():25:25 -> b
+com.batch.android.di.providers.BatchNotificationChannelsManagerProvider -> com.batch.android.l.e:
+# {"id":"sourceFile","fileName":"BatchNotificationChannelsManagerProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.BatchNotificationChannelsManager get():14:19 -> a
+    1:1:com.batch.android.BatchNotificationChannelsManager getSingleton():25:25 -> b
+com.batch.android.di.providers.CampaignManagerProvider -> com.batch.android.l.f:
+# {"id":"sourceFile","fileName":"CampaignManagerProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.localcampaigns.CampaignManager get():14:19 -> a
+    1:1:com.batch.android.localcampaigns.CampaignManager getSingleton():25:25 -> b
+com.batch.android.di.providers.DisplayReceiptModuleProvider -> com.batch.android.l.g:
+# {"id":"sourceFile","fileName":"DisplayReceiptModuleProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.module.DisplayReceiptModule get():14:19 -> a
+    1:1:com.batch.android.module.DisplayReceiptModule getSingleton():25:25 -> b
+com.batch.android.di.providers.EmbeddedBannerContainerProvider -> com.batch.android.l.h:
+# {"id":"sourceFile","fileName":"EmbeddedBannerContainerProvider.java"}
+    1:1:void <init>():13:13 -> <init>
+    1:1:com.batch.android.messaging.view.formats.EmbeddedBannerContainer get(android.view.View,com.batch.android.BatchMessage,com.batch.android.messaging.model.BannerMessage,com.batch.android.MessagingAnalyticsDelegate,boolean):18:18 -> a
+com.batch.android.di.providers.EventDispatcherModuleProvider -> com.batch.android.l.i:
+# {"id":"sourceFile","fileName":"EventDispatcherModuleProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.module.EventDispatcherModule get():14:19 -> a
+    1:1:com.batch.android.module.EventDispatcherModule getSingleton():25:25 -> b
+com.batch.android.di.providers.InboxDatasourceProvider -> com.batch.android.l.j:
+# {"id":"sourceFile","fileName":"InboxDatasourceProvider.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:6:com.batch.android.inbox.InboxDatasource get(android.content.Context):15:20 -> a
+    7:7:com.batch.android.inbox.InboxDatasource getSingleton():26:26 -> a
+com.batch.android.di.providers.InboxFetchWebserviceClientProvider -> com.batch.android.l.k:
+# {"id":"sourceFile","fileName":"InboxFetchWebserviceClientProvider.java"}
+    1:1:void <init>():17:17 -> <init>
+    1:6:com.batch.android.inbox.InboxFetchWebserviceClient get(android.content.Context,com.batch.android.inbox.FetcherType,java.lang.String,java.lang.String,java.lang.Integer,java.lang.String,long,com.batch.android.webservice.listener.InboxWebserviceListener):23:28 -> a
+    7:7:com.batch.android.inbox.InboxFetchWebserviceClient getSingleton():34:34 -> a
+com.batch.android.di.providers.InboxFetcherInternalProvider -> com.batch.android.l.l:
+# {"id":"sourceFile","fileName":"InboxFetcherInternalProvider.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:1:com.batch.android.inbox.InboxFetcherInternal get(android.content.Context,java.lang.String):15:15 -> a
+    2:2:com.batch.android.inbox.InboxFetcherInternal get(android.content.Context,java.lang.String,com.batch.android.inbox.InboxFetchWebserviceClient):21:21 -> a
+    3:3:com.batch.android.inbox.InboxFetcherInternal get(android.content.Context,java.lang.String,boolean):27:27 -> a
+    4:4:com.batch.android.inbox.InboxFetcherInternal get(android.content.Context,java.lang.String,java.lang.String):33:33 -> a
+    5:5:com.batch.android.inbox.InboxFetcherInternal get(android.content.Context,java.lang.String,java.lang.String,boolean):39:39 -> a
+com.batch.android.di.providers.KVUserPreferencesStorageProvider -> com.batch.android.l.m:
+# {"id":"sourceFile","fileName":"KVUserPreferencesStorageProvider.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:6:com.batch.android.core.KVUserPreferencesStorage get(android.content.Context):15:20 -> a
+    7:7:com.batch.android.core.KVUserPreferencesStorage getSingleton():26:26 -> a
+com.batch.android.di.providers.LandingOutputProvider -> com.batch.android.l.n:
+# {"id":"sourceFile","fileName":"LandingOutputProvider.java"}
+    1:1:void <init>():10:10 -> <init>
+    1:1:com.batch.android.localcampaigns.output.LandingOutput get(com.batch.android.json.JSONObject):13:13 -> a
+com.batch.android.di.providers.LocalBroadcastManagerProvider -> com.batch.android.l.o:
+# {"id":"sourceFile","fileName":"LocalBroadcastManagerProvider.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:6:com.batch.android.compat.LocalBroadcastManager get(android.content.Context):15:20 -> a
+    7:7:com.batch.android.compat.LocalBroadcastManager getSingleton():26:26 -> a
+com.batch.android.di.providers.LocalCampaignsModuleProvider -> com.batch.android.l.p:
+# {"id":"sourceFile","fileName":"LocalCampaignsModuleProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.module.LocalCampaignsModule get():14:19 -> a
+    1:1:com.batch.android.module.LocalCampaignsModule getSingleton():25:25 -> b
+com.batch.android.di.providers.LocalCampaignsWebserviceListenerImplProvider -> com.batch.android.l.q:
+# {"id":"sourceFile","fileName":"LocalCampaignsWebserviceListenerImplProvider.java"}
+    1:1:void <init>():9:9 -> <init>
+    1:1:com.batch.android.webservice.listener.impl.LocalCampaignsWebserviceListenerImpl get():12:12 -> a
+com.batch.android.di.providers.MessagingAnalyticsDelegateProvider -> com.batch.android.l.r:
+# {"id":"sourceFile","fileName":"MessagingAnalyticsDelegateProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:1:com.batch.android.MessagingAnalyticsDelegate get(com.batch.android.messaging.model.Message,com.batch.android.BatchMessage):14:14 -> a
+com.batch.android.di.providers.MessagingModuleProvider -> com.batch.android.l.s:
+# {"id":"sourceFile","fileName":"MessagingModuleProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.module.MessagingModule get():14:19 -> a
+    1:1:com.batch.android.module.MessagingModule getSingleton():25:25 -> b
+com.batch.android.di.providers.MetricManagerProvider -> com.batch.android.l.t:
+# {"id":"sourceFile","fileName":"MetricManagerProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.metrics.MetricManager get():14:19 -> a
+    1:1:com.batch.android.metrics.MetricManager getSingleton():25:25 -> b
+com.batch.android.di.providers.ObjectUserPreferencesStorageProvider -> com.batch.android.l.u:
+# {"id":"sourceFile","fileName":"ObjectUserPreferencesStorageProvider.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:6:com.batch.android.core.ObjectUserPreferencesStorage get(android.content.Context):15:20 -> a
+    7:7:com.batch.android.core.ObjectUserPreferencesStorage getSingleton():26:26 -> a
+com.batch.android.di.providers.OptOutModuleProvider -> com.batch.android.l.v:
+# {"id":"sourceFile","fileName":"OptOutModuleProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.module.OptOutModule get():14:19 -> a
+    1:1:com.batch.android.module.OptOutModule getSingleton():25:25 -> b
+com.batch.android.di.providers.ParametersProvider -> com.batch.android.l.w:
+# {"id":"sourceFile","fileName":"ParametersProvider.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:6:com.batch.android.core.Parameters get(android.content.Context):15:20 -> a
+    7:7:com.batch.android.core.Parameters getSingleton():26:26 -> a
+com.batch.android.di.providers.PushModuleProvider -> com.batch.android.l.x:
+# {"id":"sourceFile","fileName":"PushModuleProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.module.PushModule get():14:19 -> a
+    1:1:com.batch.android.module.PushModule getSingleton():25:25 -> b
+com.batch.android.di.providers.RuntimeManagerProvider -> com.batch.android.l.y:
+# {"id":"sourceFile","fileName":"RuntimeManagerProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.runtime.RuntimeManager get():14:19 -> a
+    1:1:com.batch.android.runtime.RuntimeManager getSingleton():25:25 -> b
+com.batch.android.di.providers.SQLUserDatasourceProvider -> com.batch.android.l.z:
+# {"id":"sourceFile","fileName":"SQLUserDatasourceProvider.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:6:com.batch.android.user.SQLUserDatasource get(android.content.Context):15:20 -> a
+    7:7:com.batch.android.user.SQLUserDatasource getSingleton():26:26 -> a
+com.batch.android.di.providers.SecureDateProviderProvider -> com.batch.android.l.a0:
+# {"id":"sourceFile","fileName":"SecureDateProviderProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.core.SecureDateProvider get():14:19 -> a
+    1:1:com.batch.android.core.SecureDateProvider getSingleton():25:25 -> b
+com.batch.android.di.providers.TaskExecutorProvider -> com.batch.android.l.b0:
+# {"id":"sourceFile","fileName":"TaskExecutorProvider.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:6:com.batch.android.core.TaskExecutor get(android.content.Context):15:20 -> a
+    7:7:com.batch.android.core.TaskExecutor getSingleton():26:26 -> a
+com.batch.android.di.providers.TrackerModuleProvider -> com.batch.android.l.c0:
+# {"id":"sourceFile","fileName":"TrackerModuleProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.module.TrackerModule get():14:19 -> a
+    1:1:com.batch.android.module.TrackerModule getSingleton():25:25 -> b
+com.batch.android.di.providers.UserModuleProvider -> com.batch.android.l.d0:
+# {"id":"sourceFile","fileName":"UserModuleProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.module.UserModule get():14:19 -> a
+    1:1:com.batch.android.module.UserModule getSingleton():25:25 -> b
+com.batch.android.di.providers.WebserviceMetricsProvider -> com.batch.android.l.e0:
+# {"id":"sourceFile","fileName":"WebserviceMetricsProvider.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:6:com.batch.android.WebserviceMetrics get():14:19 -> a
+    1:1:com.batch.android.WebserviceMetrics getSingleton():25:25 -> b
+com.batch.android.displayreceipt.CacheHelper -> com.batch.android.m.a:
+# {"id":"sourceFile","fileName":"CacheHelper.java"}
+    long MAX_AGE_FROM_CACHE -> e
+    java.lang.String TAG -> a
+    int MAX_READ_RECEIPT_FROM_CACHE -> d
+    java.lang.String CACHE_FILE_FORMAT -> c
+    java.lang.String CACHE_DIR -> b
+    1:1:void <init>():21:21 -> <init>
+    1:2:java.lang.String generateNewFilename(long):48:49 -> a
+    3:7:java.lang.Long getTimestampFromFilename(java.lang.String):54:58 -> a
+    8:14:java.io.File write(android.content.Context,long,byte[]):82:88 -> a
+    15:22:boolean write(java.io.File,byte[]):96:103 -> a
+    23:26:boolean write(java.io.File,byte[]):96:99 -> a
+    27:39:boolean deleteDirectory(java.io.File):114:126 -> a
+    40:41:boolean deleteAll(android.content.Context):136:137 -> a
+    42:55:java.util.List getCachedFiles(android.content.Context,boolean):150:163 -> a
+    56:78:java.util.List filterCachedFiles(java.io.File[]):171:193 -> a
+    79:79:int lambda$filterCachedFiles$0(java.util.Map$Entry,java.util.Map$Entry):189:189 -> a
+    1:3:java.io.File getCacheDir(android.content.Context):38:40 -> b
+    4:9:byte[] read(java.io.File):68:73 -> b
+    10:13:byte[] read(java.io.File):71:74 -> b
+com.batch.android.displayreceipt.DisplayReceipt -> com.batch.android.m.b:
+# {"id":"sourceFile","fileName":"DisplayReceipt.java"}
+    java.lang.String TAG -> f
+    java.util.Map od -> d
+    long timestamp -> a
+    java.util.Map ed -> e
+    boolean replay -> b
+    int sendAttempt -> c
+    1:6:void <init>(long,boolean,int,java.util.Map,java.util.Map):28:33 -> <init>
+    1:1:void setReplay(boolean):37:37 -> a
+    2:2:java.util.Map getEd():49:49 -> a
+    3:4:byte[] packAndWrite(java.io.File):65:66 -> a
+    5:5:void writeTo(com.batch.android.msgpack.core.MessageBufferPacker):73:73 -> a
+    6:20:void pack(com.batch.android.msgpack.core.MessageBufferPacker,long,boolean,int,java.util.Map,java.util.Map):84:98 -> a
+    21:25:byte[] pack(long,boolean,int,java.util.Map,java.util.Map):108:112 -> a
+    26:31:byte[] pack(long,boolean,int,java.util.Map,java.util.Map):108:113 -> a
+    32:62:com.batch.android.displayreceipt.DisplayReceipt unpack(byte[]):120:150 -> a
+    63:94:com.batch.android.displayreceipt.DisplayReceipt unpack(byte[]):120:151 -> a
+    1:1:java.util.Map getOd():45:45 -> b
+    1:1:int getSendAttempt():61:61 -> c
+    1:1:long getTimestamp():53:53 -> d
+    1:1:void incrementSendAttempt():41:41 -> e
+    1:1:boolean isReplay():57:57 -> f
+com.batch.android.event.CollapsibleEvent -> com.batch.android.n.a:
+# {"id":"sourceFile","fileName":"CollapsibleEvent.java"}
+    1:1:void <init>(android.content.Context,long,java.lang.String,com.batch.android.json.JSONObject):15:15 -> <init>
+    2:2:void <init>(java.lang.String,java.lang.String,java.util.Date,java.util.TimeZone,java.lang.String,com.batch.android.event.Event$State,java.lang.Long,java.util.Date,java.lang.String):29:29 -> <init>
+com.batch.android.event.Event -> com.batch.android.n.b:
+# {"id":"sourceFile","fileName":"Event.java"}
+    java.util.Date secureDate -> f
+    java.lang.String parameters -> g
+    java.lang.String session -> i
+    java.util.Date date -> c
+    long servertime -> e
+    java.lang.String id -> a
+    java.util.TimeZone timezone -> d
+    com.batch.android.event.Event$State state -> h
+    java.lang.String name -> b
+    1:35:void <init>(android.content.Context,long,java.lang.String,com.batch.android.json.JSONObject):72:106 -> <init>
+    36:41:void <init>(android.content.Context,long,java.lang.String,com.batch.android.json.JSONObject):104:109 -> <init>
+    42:42:void <init>(android.content.Context,long,java.lang.String,com.batch.android.json.JSONObject):74:74 -> <init>
+    43:52:void <init>(java.lang.String,java.lang.String,java.util.Date,java.util.TimeZone,java.lang.String,com.batch.android.event.Event$State,java.lang.Long,java.util.Date,java.lang.String):133:142 -> <init>
+    1:1:java.util.Date getDate():156:156 -> a
+    1:1:java.lang.String getId():148:148 -> b
+    1:1:java.lang.String getName():152:152 -> c
+    1:1:java.lang.String getParameters():168:168 -> d
+    1:1:java.util.Date getSecureDate():160:160 -> e
+    1:1:long getServerTimestamp():176:176 -> f
+    1:1:java.lang.String getSessionID():184:184 -> g
+    1:1:com.batch.android.event.Event$State getState():172:172 -> h
+    1:1:java.util.TimeZone getTimezone():164:164 -> i
+    1:1:boolean isOld():180:180 -> j
+com.batch.android.event.Event$State -> com.batch.android.n.b$a:
+# {"id":"sourceFile","fileName":"Event.java"}
+    com.batch.android.event.Event$State SENDING -> c
+    com.batch.android.event.Event$State NEW -> b
+    com.batch.android.event.Event$State[] $VALUES -> e
+    com.batch.android.event.Event$State OLD -> d
+    int value -> a
+    1:11:void <clinit>():197:207 -> <clinit>
+    12:12:void <clinit>():193:193 -> <clinit>
+    1:2:void <init>(java.lang.String,int,int):213:214 -> <init>
+    1:1:com.batch.android.event.Event$State[] $values():193:193 -> a
+    2:3:com.batch.android.event.Event$State fromValue(int):224:225 -> a
+    1:1:int getValue():218:218 -> b
+    1:1:com.batch.android.event.Event$State valueOf(java.lang.String):193:193 -> valueOf
+    1:1:com.batch.android.event.Event$State[] values():193:193 -> values
+com.batch.android.event.EventSender -> com.batch.android.n.c:
+# {"id":"sourceFile","fileName":"EventSender.java"}
+    java.lang.String TAG -> g
+    com.batch.android.event.EventSender$EventSenderListener listener -> b
+    java.util.concurrent.ExecutorService sendExecutor -> e
+    java.util.concurrent.atomic.AtomicBoolean hasNewEvents -> d
+    java.util.concurrent.atomic.AtomicBoolean isSending -> c
+    com.batch.android.event.RetryTimer retryTimer -> f
+    com.batch.android.runtime.RuntimeManager runtimeManager -> a
+    1:1:void <init>(com.batch.android.runtime.RuntimeManager,com.batch.android.event.EventSender$EventSenderListener):54:54 -> <init>
+    2:32:void <init>(com.batch.android.runtime.RuntimeManager,com.batch.android.event.EventSender$EventSenderListener):35:65 -> <init>
+    33:33:void <init>(com.batch.android.runtime.RuntimeManager,com.batch.android.event.EventSender$EventSenderListener):60:60 -> <init>
+    34:34:void <init>(com.batch.android.runtime.RuntimeManager,com.batch.android.event.EventSender$EventSenderListener):56:56 -> <init>
+    1:1:com.batch.android.event.RetryTimer access$000(com.batch.android.event.EventSender):20:20 -> a
+    2:11:void send(boolean):81:90 -> a
+    12:12:void retry():163:163 -> a
+    13:13:com.batch.android.core.TaskRunnable getWebserviceTask(java.util.List,com.batch.android.webservice.listener.TrackerWebserviceListener):174:174 -> a
+    1:1:java.util.concurrent.atomic.AtomicBoolean access$100(com.batch.android.event.EventSender):20:20 -> b
+    2:3:void hasNewEvents():154:155 -> b
+    1:1:com.batch.android.event.EventSender$EventSenderListener access$200(com.batch.android.event.EventSender):20:20 -> c
+    2:49:void lambda$send$0():97:144 -> c
+    1:2:void lambda$send$1():92:93 -> d
+    1:1:void send():72:72 -> e
+com.batch.android.event.EventSender$1 -> com.batch.android.n.c$a:
+# {"id":"sourceFile","fileName":"EventSender.java"}
+    com.batch.android.event.EventSender this$0 -> a
+    1:1:void <init>(com.batch.android.event.EventSender):110:110 -> <init>
+    1:4:void onSuccess(java.util.List):114:117 -> a
+    5:8:void onFailure(com.batch.android.FailReason,java.util.List):127:130 -> a
+    9:10:void lambda$onFailure$1(java.util.List,com.batch.android.runtime.State):131:132 -> a
+    11:11:void onFinish():140:140 -> a
+    1:2:void lambda$onSuccess$0(java.util.List,com.batch.android.runtime.State):118:119 -> b
+com.batch.android.event.EventSender$EventSenderListener -> com.batch.android.n.c$b:
+# {"id":"sourceFile","fileName":"EventSender.java"}
+    java.util.List getEventsToSend() -> a
+    void onEventsSendFailure(java.util.List) -> a
+    void onEventsSendSuccess(java.util.List) -> b
+com.batch.android.event.InternalEvents -> com.batch.android.n.d:
+# {"id":"sourceFile","fileName":"InternalEvents.java"}
+    java.lang.String INSTALL_DATA_CHANGED -> g
+    java.lang.String PROFILE_CHANGED -> f
+    java.lang.String EMAIL_CHANGED -> i
+    java.lang.String INSTALL_DATA_CHANGED_TRACK_FAILURE -> h
+    java.lang.String LOCATION_CHANGED -> k
+    java.lang.String ATTRIBUTION_ID_CHANGED -> j
+    java.lang.String INBOX_MARK_AS_READ -> m
+    java.lang.String NOTIFICATION_STATUS_CHANGE -> l
+    java.lang.String INBOX_MARK_ALL_AS_READ -> o
+    java.lang.String INBOX_MARK_AS_DELETED -> n
+    java.lang.String OPT_OUT -> q
+    java.lang.String OPT_IN -> p
+    java.lang.String FIND_MY_INSTALLATION -> s
+    java.lang.String OPT_OUT_AND_WIPE_DATA -> r
+    java.lang.String START -> a
+    java.lang.String OPEN_FROM_PUSH -> c
+    java.lang.String STOP -> b
+    java.lang.String LOCAL_CAMPAIGN_VIEWED -> e
+    java.lang.String MESSAGING -> d
+    1:1:void <init>():8:8 -> <init>
+com.batch.android.event.RetryTimer -> com.batch.android.n.e:
+# {"id":"sourceFile","fileName":"RetryTimer.java"}
+    com.batch.android.event.RetryTimer$RetryTimerListener listener -> g
+    java.util.TimerTask retryTask -> f
+    java.lang.String TAG -> h
+    int MAX_RETRIES -> i
+    int nextRetryDelay -> d
+    int initialRetryDelay -> b
+    int maxRetryDelay -> c
+    int retries -> a
+    java.util.Timer retryTimer -> e
+    1:1:void <init>(android.content.Context,com.batch.android.event.RetryTimer$RetryTimerListener):56:56 -> <init>
+    2:48:void <init>(android.content.Context,com.batch.android.event.RetryTimer$RetryTimerListener):24:70 -> <init>
+    49:49:void <init>(android.content.Context,com.batch.android.event.RetryTimer$RetryTimerListener):62:62 -> <init>
+    50:50:void <init>(android.content.Context,com.batch.android.event.RetryTimer$RetryTimerListener):58:58 -> <init>
+    1:1:int access$008(com.batch.android.event.RetryTimer):13:13 -> a
+    2:9:void incrementDelay():126:133 -> a
+    1:1:com.batch.android.event.RetryTimer$RetryTimerListener access$100(com.batch.android.event.RetryTimer):13:13 -> b
+    2:2:boolean isWaiting():79:79 -> b
+    1:18:void reschedule():87:104 -> c
+    1:7:void reset():113:119 -> d
+com.batch.android.event.RetryTimer$1 -> com.batch.android.n.e$a:
+# {"id":"sourceFile","fileName":"RetryTimer.java"}
+    com.batch.android.event.RetryTimer this$0 -> a
+    1:1:void <init>(com.batch.android.event.RetryTimer):92:92 -> <init>
+    1:2:void run():95:96 -> run
+com.batch.android.event.RetryTimer$RetryTimerListener -> com.batch.android.n.e$b:
+# {"id":"sourceFile","fileName":"RetryTimer.java"}
+    void retry() -> a
+com.batch.android.eventdispatcher.DispatcherDiscoveryService -> com.batch.android.eventdispatcher.DispatcherDiscoveryService:
+# {"id":"sourceFile","fileName":"DispatcherDiscoveryService.java"}
+    1:1:void <init>():11:11 -> <init>
+com.batch.android.eventdispatcher.DispatcherRegistrar -> com.batch.android.eventdispatcher.DispatcherRegistrar:
+# {"id":"sourceFile","fileName":"DispatcherRegistrar.java"}
+com.batch.android.eventdispatcher.DispatcherSerializer -> com.batch.android.o.a:
+# {"id":"sourceFile","fileName":"DispatcherSerializer.java"}
+    java.lang.String CUSTOM_DISPATCHER_NAME -> g
+    java.lang.String BATCH_PIANO_NAME -> f
+    java.lang.String FIREBASE_DISPATCHER_NAME -> a
+    java.util.List knownDispatchers -> h
+    java.lang.String MIXPANEL_DISPATCHER_NAME -> c
+    java.lang.String AT_INTERNET_DISPATCHER_NAME -> b
+    java.lang.String BATCH_PLUGINS_DISPATCHER_NAME -> e
+    java.lang.String GOOGLE_ANALYTICS_DISPATCHER_NAME -> d
+    1:1:void <clinit>():28:28 -> <clinit>
+    1:1:void <init>():14:14 -> <init>
+    1:10:com.batch.android.json.JSONObject serialize(java.util.Set):45:54 -> a
+com.batch.android.eventdispatcher.MessagingEventPayload -> com.batch.android.o.b:
+# {"id":"sourceFile","fileName":"MessagingEventPayload.java"}
+    com.batch.android.json.JSONObject payload -> b
+    com.batch.android.json.JSONObject customPayload -> c
+    com.batch.android.messaging.model.Action action -> d
+    java.lang.String buttonAnalyticsId -> e
+    com.batch.android.BatchMessage message -> a
+    1:1:void <init>(com.batch.android.BatchMessage,com.batch.android.json.JSONObject,com.batch.android.json.JSONObject):26:26 -> <init>
+    2:7:void <init>(com.batch.android.BatchMessage,com.batch.android.json.JSONObject,com.batch.android.json.JSONObject,com.batch.android.messaging.model.Action,java.lang.String):35:40 -> <init>
+    8:8:void <init>(com.batch.android.BatchMessage,com.batch.android.json.JSONObject,com.batch.android.json.JSONObject,com.batch.android.messaging.model.Action):44:44 -> <init>
+    1:6:java.lang.String getCustomValue(java.lang.String):82:87 -> getCustomValue
+    1:2:java.lang.String getDeeplink():65:66 -> getDeeplink
+    1:1:com.batch.android.BatchMessage getMessagingPayload():93:93 -> getMessagingPayload
+    1:2:java.lang.String getTrackingId():50:51 -> getTrackingId
+    1:1:java.lang.String getWebViewAnalyticsID():59:59 -> getWebViewAnalyticsID
+    1:1:boolean isPositiveAction():73:73 -> isPositiveAction
+com.batch.android.eventdispatcher.PushEventPayload -> com.batch.android.o.c:
+# {"id":"sourceFile","fileName":"PushEventPayload.java"}
+    com.batch.android.BatchPushPayload payload -> a
+    boolean isOpening -> b
+    1:1:void <init>(com.batch.android.BatchPushPayload):20:20 -> <init>
+    2:4:void <init>(com.batch.android.BatchPushPayload,boolean):23:25 -> <init>
+    1:5:java.lang.String getCustomValue(java.lang.String):55:59 -> getCustomValue
+    1:1:java.lang.String getDeeplink():44:44 -> getDeeplink
+    1:1:com.batch.android.BatchPushPayload getPushPayload():71:71 -> getPushPayload
+    1:1:boolean isPositiveAction():49:49 -> isPositiveAction
+com.batch.android.inbox.FetcherType -> com.batch.android.p.a:
+# {"id":"sourceFile","fileName":"FetcherType.java"}
+    com.batch.android.inbox.FetcherType USER_IDENTIFIER -> c
+    com.batch.android.inbox.FetcherType[] $VALUES -> d
+    com.batch.android.inbox.FetcherType INSTALLATION -> b
+    int value -> a
+    1:2:void <clinit>():4:5 -> <clinit>
+    3:3:void <clinit>() -> <clinit>
+    1:2:void <init>(java.lang.String,int,int):9:10 -> <init>
+    1:1:com.batch.android.inbox.FetcherType[] $values():3:3 -> a
+    1:1:int getValue():14:14 -> b
+    1:6:java.lang.String toWSPathElement():18:23 -> c
+    1:1:com.batch.android.inbox.FetcherType valueOf(java.lang.String):3:3 -> valueOf
+    1:1:com.batch.android.inbox.FetcherType[] values():3:3 -> values
+com.batch.android.inbox.FetcherType$1 -> com.batch.android.p.a$a:
+# {"id":"sourceFile","fileName":"FetcherType.java"}
+    int[] $SwitchMap$com$batch$android$inbox$FetcherType -> a
+    1:1:void <clinit>():18:18 -> <clinit>
+com.batch.android.inbox.InboxCandidateNotificationInternal -> com.batch.android.p.b:
+# {"id":"sourceFile","fileName":"InboxCandidateNotificationInternal.java"}
+    java.lang.String identifier -> a
+    boolean isUnread -> b
+    1:3:void <init>(java.lang.String,boolean):14:16 -> <init>
+com.batch.android.inbox.InboxDatabaseHelper -> com.batch.android.p.c:
+# {"id":"sourceFile","fileName":"InboxDatabaseHelper.java"}
+    java.lang.String COLUMN_INSTALL_ID -> g
+    java.lang.String COLUMN_FETCHER_ID -> f
+    java.lang.String TABLE_NOTIFICATIONS -> i
+    java.lang.String COLUMN_CUSTOM_ID -> h
+    java.lang.String COLUMN_SEND_ID -> k
+    java.lang.String COLUMN_NOTIFICATION_ID -> j
+    java.lang.String COLUMN_BODY -> m
+    java.lang.String COLUMN_TITLE -> l
+    java.lang.String COLUMN_DELETED -> o
+    java.lang.String COLUMN_UNREAD -> n
+    java.lang.String COLUMN_PAYLOAD -> q
+    java.lang.String COLUMN_DATE -> p
+    java.lang.String DATABASE_NAME -> r
+    java.lang.String COLUMN_DB_ID -> a
+    java.lang.String COLUMN_FETCHER_TYPE -> c
+    java.lang.String TABLE_FETCHERS -> b
+    int DATABASE_VERSION -> s
+    java.lang.String TABLE_FETCHERS_NOTIFICATIONS -> e
+    java.lang.String COLUMN_FETCHER_IDENTIFIER -> d
+    1:1:void <init>(android.content.Context):41:41 -> <init>
+    1:51:void onCreate(android.database.sqlite.SQLiteDatabase):46:96 -> onCreate
+    1:1:void onUpgrade(android.database.sqlite.SQLiteDatabase,int,int):135:135 -> onUpgrade
+com.batch.android.inbox.InboxDatasource -> com.batch.android.p.d:
+# {"id":"sourceFile","fileName":"InboxDatasource.java"}
+    android.content.Context context -> a
+    android.database.sqlite.SQLiteDatabase database -> b
+    com.batch.android.inbox.InboxDatabaseHelper databaseHelper -> c
+    java.lang.String TAG -> d
+    1:8:void <init>(android.content.Context):48:55 -> <init>
+    9:9:void <init>(android.content.Context):50:50 -> <init>
+    1:51:java.util.List getNotifications(java.util.List,long):92:142 -> a
+    52:60:java.util.List getNotifications(java.util.List,long):135:143 -> a
+    61:75:long getNotificationTime(java.lang.String):151:165 -> a
+    76:92:long getNotificationTime(java.lang.String):150:166 -> a
+    93:124:long getFetcherID(com.batch.android.inbox.FetcherType,java.lang.String):180:211 -> a
+    125:148:long getFetcherID(com.batch.android.inbox.FetcherType,java.lang.String):204:227 -> a
+    149:168:long getFetcherID(com.batch.android.inbox.FetcherType,java.lang.String):203:222 -> a
+    169:211:java.util.List getCandidateNotifications(java.lang.String,int,long):243:285 -> a
+    212:221:java.util.List getCandidateNotifications(java.lang.String,int,long):283:292 -> a
+    222:273:java.util.List getCandidateNotifications(java.lang.String,int,long):282:333 -> a
+    274:280:java.util.List getCandidateNotifications(java.lang.String,int,long):328:334 -> a
+    281:283:boolean insertResponse(com.batch.android.inbox.InboxWebserviceResponse,long):351:353 -> a
+    284:331:boolean insert(com.batch.android.inbox.InboxNotificationContentInternal,long):367:414 -> a
+    332:341:boolean insert(com.batch.android.inbox.InboxNotificationContentInternal,long):411:420 -> a
+    342:342:boolean insert(com.batch.android.inbox.InboxNotificationContentInternal,long):373:373 -> a
+    343:381:java.lang.String updateNotification(com.batch.android.json.JSONObject,long):436:474 -> a
+    382:383:java.lang.String updateNotification(com.batch.android.json.JSONObject,long):469:470 -> a
+    384:385:java.lang.String updateNotification(com.batch.android.json.JSONObject,long):465:466 -> a
+    386:387:java.lang.String updateNotification(com.batch.android.json.JSONObject,long):461:462 -> a
+    388:391:java.lang.String updateNotification(com.batch.android.json.JSONObject,long):455:458 -> a
+    392:393:java.lang.String updateNotification(com.batch.android.json.JSONObject,long):451:452 -> a
+    394:395:java.lang.String updateNotification(com.batch.android.json.JSONObject,long):447:448 -> a
+    396:455:java.lang.String updateNotification(com.batch.android.json.JSONObject,long):443:502 -> a
+    456:474:java.lang.String updateNotification(com.batch.android.json.JSONObject,long):495:513 -> a
+    475:498:int markAllAsRead(long,long):526:549 -> a
+    499:499:int markAllAsRead(long,long):529:529 -> a
+    500:510:boolean deleteNotifications(java.util.List):592:602 -> a
+    511:519:boolean deleteNotifications(java.util.List):600:608 -> a
+    520:531:boolean deleteNotifications(java.util.List):606:617 -> a
+    532:536:boolean deleteNotifications(java.util.List):614:618 -> a
+    537:544:boolean cleanDatabase():627:634 -> a
+    545:565:boolean cleanDatabase():630:650 -> a
+    566:588:boolean cleanDatabase():629:651 -> a
+    589:591:com.batch.android.inbox.InboxCandidateNotificationInternal parseCandidateNotification(android.database.Cursor):718:720 -> a
+    592:600:java.lang.String createInClause(int):732:740 -> a
+    1:3:void close():76:78 -> b
+    4:6:void markNotificationAsDeleted(java.lang.String):575:577 -> b
+    7:47:com.batch.android.inbox.InboxNotificationContentInternal parseNotification(android.database.Cursor):664:704 -> b
+    1:1:android.database.sqlite.SQLiteDatabase getDatabase():88:88 -> c
+    2:4:void markNotificationAsRead(java.lang.String):559:561 -> c
+    1:8:void wipeData():62:69 -> d
+com.batch.android.inbox.InboxFetchWebserviceClient -> com.batch.android.p.e:
+# {"id":"sourceFile","fileName":"InboxFetchWebserviceClient.java"}
+    com.batch.android.webservice.listener.InboxWebserviceListener listener -> q
+    java.lang.String authentication -> p
+    java.lang.String TAG -> r
+    long fetcherId -> o
+    1:11:void <init>(android.content.Context,com.batch.android.inbox.FetcherType,java.lang.String,java.lang.String,java.lang.Integer,java.lang.String,long,com.batch.android.webservice.listener.InboxWebserviceListener):56:66 -> <init>
+    1:1:java.lang.String getSpecificConnectTimeoutKey():265:265 -> A
+    1:1:java.lang.String getSpecificReadTimeoutKey():270:270 -> B
+    1:1:java.lang.String getSpecificRetryCountKey():275:275 -> C
+    1:1:java.lang.String getURLSorterPatternParameterKey():240:240 -> F
+    java.lang.String getPropertyParameterKey() -> H
+    1:1:com.batch.android.inbox.InboxFetchWebserviceClient provide(android.content.Context,com.batch.android.inbox.FetcherType,java.lang.String,java.lang.String,java.lang.Integer,java.lang.String,long,com.batch.android.webservice.listener.InboxWebserviceListener):81:81 -> a
+    2:2:java.lang.String getTaskIdentifier():106:106 -> a
+    3:3:void setListener(com.batch.android.webservice.listener.InboxWebserviceListener):279:279 -> a
+    1:45:com.batch.android.inbox.InboxNotificationContentInternal parseNotification(com.batch.android.json.JSONObject):180:224 -> c
+    1:24:com.batch.android.inbox.InboxWebserviceResponse parseResponse(com.batch.android.json.JSONObject):143:166 -> d
+    25:33:com.batch.android.inbox.InboxWebserviceResponse parseResponse(com.batch.android.json.JSONObject):163:171 -> d
+    java.lang.String getCryptorModeParameterKey() -> o
+    java.lang.String getCryptorTypeParameterKey() -> p
+    1:3:java.util.Map getHeaders():95:97 -> r
+    1:27:void run():112:138 -> run
+    28:29:void run():134:135 -> run
+    30:39:void run():122:131 -> run
+    java.lang.String getPostCryptorTypeParameterKey() -> v
+    com.batch.android.post.PostDataProvider getPostDataProvider() -> w
+    1:1:java.lang.String getReadCryptorTypeParameterKey():260:260 -> y
+com.batch.android.inbox.InboxFetcherInternal -> com.batch.android.p.f:
+# {"id":"sourceFile","fileName":"InboxFetcherInternal.java"}
+    java.lang.String authKey -> g
+    java.lang.String identifier -> f
+    boolean filterSilentNotifications -> n
+    android.content.Context context -> b
+    boolean isDatabaseCleaned -> p
+    int fetchLimit -> j
+    int maxPageSize -> i
+    boolean endReached -> l
+    java.lang.String TAG -> o
+    long fetcherId -> d
+    java.util.concurrent.Executor fetchExecutor -> k
+    com.batch.android.inbox.InboxDatasource datasource -> m
+    com.batch.android.module.TrackerModule trackerModule -> a
+    com.batch.android.inbox.FetcherType fetcherType -> e
+    java.util.List fetchedNotifications -> h
+    java.lang.String cursor -> c
+    1:1:void <init>(com.batch.android.module.TrackerModule,com.batch.android.inbox.InboxDatasource,android.content.Context,java.lang.String):74:74 -> <init>
+    2:40:void <init>(com.batch.android.module.TrackerModule,com.batch.android.inbox.InboxDatasource,android.content.Context,java.lang.String):45:83 -> <init>
+    41:41:void <init>(com.batch.android.module.TrackerModule,com.batch.android.inbox.InboxDatasource,android.content.Context,java.lang.String,java.lang.String):130:130 -> <init>
+    42:137:void <init>(com.batch.android.module.TrackerModule,com.batch.android.inbox.InboxDatasource,android.content.Context,java.lang.String,java.lang.String):45:140 -> <init>
+    1:1:java.util.List access$000(com.batch.android.inbox.InboxFetcherInternal,com.batch.android.inbox.InboxWebserviceResponse,boolean):35:35 -> a
+    2:2:java.util.List access$100(com.batch.android.inbox.InboxFetcherInternal,java.util.List):35:35 -> a
+    3:3:java.lang.String access$200(com.batch.android.inbox.InboxFetcherInternal):35:35 -> a
+    4:6:com.batch.android.inbox.InboxFetcherInternal provide(android.content.Context,java.lang.String):89:91 -> a
+    7:9:com.batch.android.inbox.InboxFetcherInternal provide(android.content.Context,java.lang.String,com.batch.android.inbox.InboxFetchWebserviceClient):103:105 -> a
+    10:13:com.batch.android.inbox.InboxFetcherInternal provide(android.content.Context,java.lang.String,boolean):118:121 -> a
+    14:16:com.batch.android.inbox.InboxFetcherInternal provide(android.content.Context,java.lang.String,java.lang.String):150:152 -> a
+    17:20:com.batch.android.inbox.InboxFetcherInternal provide(android.content.Context,java.lang.String,java.lang.String,boolean):167:170 -> a
+    21:21:void setFetchLimit(int):178:178 -> a
+    22:22:void setFilterSilentNotifications(boolean):182:182 -> a
+    23:51:void markAsDeleted(com.batch.android.BatchInboxNotificationContent):235:263 -> a
+    52:61:java.util.List convertInternalModelsToPublic(java.util.List):270:279 -> a
+    62:101:void fetchNewNotifications(com.batch.android.BatchInboxFetcher$OnNewNotificationsFetchedListener):286:325 -> a
+    102:150:void fetchNextPage(com.batch.android.BatchInboxFetcher$OnNextPageFetchedListener):329:377 -> a
+    151:167:void fetch(java.lang.String,com.batch.android.webservice.listener.InboxWebserviceListener):381:397 -> a
+    168:190:void lambda$fetch$0(com.batch.android.webservice.listener.InboxWebserviceListener,java.lang.String):398:420 -> a
+    191:205:void lambda$fetch$0(com.batch.android.webservice.listener.InboxWebserviceListener,java.lang.String):415:429 -> a
+    206:237:void lambda$sync$1(com.batch.android.webservice.listener.InboxWebserviceListener,java.lang.String,java.util.List):444:475 -> a
+    238:274:java.util.List getEventDatas(com.batch.android.inbox.InboxNotificationContentInternal):487:523 -> a
+    275:277:java.util.List getPublicFetchedNotifications():532:534 -> a
+    278:285:java.util.List handleFetchSuccess(com.batch.android.inbox.InboxWebserviceResponse,boolean):541:548 -> a
+    286:363:java.util.List handleFetchSuccess(com.batch.android.inbox.InboxWebserviceResponse,boolean):543:620 -> a
+    1:1:void setMaxPageSize(int):174:174 -> b
+    2:2:boolean isEndReached():186:186 -> b
+    3:30:void markAsRead(com.batch.android.BatchInboxNotificationContent):190:217 -> b
+    31:39:boolean sync(java.lang.String,com.batch.android.webservice.listener.InboxWebserviceListener):435:443 -> b
+    1:11:void markAllAsRead():221:231 -> c
+com.batch.android.inbox.InboxFetcherInternal$1 -> com.batch.android.p.f$a:
+# {"id":"sourceFile","fileName":"InboxFetcherInternal.java"}
+    com.batch.android.inbox.InboxFetcherInternal this$0 -> a
+    1:1:void <init>(com.batch.android.inbox.InboxFetcherInternal):287:287 -> <init>
+com.batch.android.inbox.InboxFetcherInternal$2 -> com.batch.android.p.f$b:
+# {"id":"sourceFile","fileName":"InboxFetcherInternal.java"}
+    com.batch.android.BatchInboxFetcher$OnNewNotificationsFetchedListener val$userListener -> a
+    com.batch.android.inbox.InboxFetcherInternal this$0 -> b
+    1:1:void <init>(com.batch.android.inbox.InboxFetcherInternal,com.batch.android.BatchInboxFetcher$OnNewNotificationsFetchedListener):302:302 -> <init>
+    1:6:void onSuccess(com.batch.android.inbox.InboxWebserviceResponse):305:310 -> a
+    7:14:void onSuccess(com.batch.android.inbox.InboxWebserviceResponse):308:315 -> a
+    15:15:void onFailure(java.lang.String):322:322 -> a
+com.batch.android.inbox.InboxFetcherInternal$3 -> com.batch.android.p.f$c:
+# {"id":"sourceFile","fileName":"InboxFetcherInternal.java"}
+    com.batch.android.inbox.InboxFetcherInternal this$0 -> a
+    1:1:void <init>(com.batch.android.inbox.InboxFetcherInternal):340:340 -> <init>
+com.batch.android.inbox.InboxFetcherInternal$4 -> com.batch.android.p.f$d:
+# {"id":"sourceFile","fileName":"InboxFetcherInternal.java"}
+    com.batch.android.BatchInboxFetcher$OnNextPageFetchedListener val$finalListener -> a
+    com.batch.android.inbox.InboxFetcherInternal this$0 -> b
+    1:1:void <init>(com.batch.android.inbox.InboxFetcherInternal,com.batch.android.BatchInboxFetcher$OnNextPageFetchedListener):353:353 -> <init>
+    1:7:void onSuccess(com.batch.android.inbox.InboxWebserviceResponse):356:362 -> a
+    8:15:void onSuccess(com.batch.android.inbox.InboxWebserviceResponse):360:367 -> a
+    16:16:void onFailure(java.lang.String):374:374 -> a
+com.batch.android.inbox.InboxFetcherInternal$ResultHandlingError -> com.batch.android.p.f$e:
+# {"id":"sourceFile","fileName":"InboxFetcherInternal.java"}
+    java.lang.String publicMesssage -> a
+    com.batch.android.inbox.InboxFetcherInternal this$0 -> b
+    1:3:void <init>(com.batch.android.inbox.InboxFetcherInternal,java.lang.String,java.lang.String):627:629 -> <init>
+    1:1:java.lang.String getPublicMessage():633:633 -> a
+com.batch.android.inbox.InboxNotificationContentInternal -> com.batch.android.p.g:
+# {"id":"sourceFile","fileName":"InboxNotificationContentInternal.java"}
+    java.util.Date date -> f
+    boolean isDeleted -> e
+    java.util.List duplicateIdentifiers -> i
+    java.lang.String title -> a
+    com.batch.android.BatchNotificationSource source -> c
+    com.batch.android.inbox.NotificationIdentifiers identifiers -> h
+    java.lang.String body -> b
+    java.util.Map payload -> g
+    boolean isUnread -> d
+    1:5:void <init>(com.batch.android.BatchNotificationSource,java.util.Date,java.util.Map,com.batch.android.inbox.NotificationIdentifiers):47:51 -> <init>
+    1:3:android.os.Bundle getReceiverLikePayload():56:58 -> a
+    4:7:void addDuplicateIdentifiers(com.batch.android.inbox.NotificationIdentifiers):64:67 -> a
+    1:7:boolean isValid():71:77 -> b
+com.batch.android.inbox.InboxSyncWebserviceClient -> com.batch.android.p.h:
+# {"id":"sourceFile","fileName":"InboxSyncWebserviceClient.java"}
+    java.util.List candidates -> q
+    com.batch.android.webservice.listener.InboxWebserviceListener listener -> s
+    java.lang.String authentication -> p
+    com.batch.android.post.InboxSyncPostDataProvider dataProvider -> r
+    long fetcherId -> o
+    java.lang.String TAG -> t
+    1:13:void <init>(android.content.Context,com.batch.android.inbox.FetcherType,java.lang.String,java.lang.String,java.lang.Integer,java.lang.String,long,java.util.List,com.batch.android.webservice.listener.InboxWebserviceListener):59:71 -> <init>
+    1:1:java.lang.String getSpecificConnectTimeoutKey():250:250 -> A
+    1:1:java.lang.String getSpecificReadTimeoutKey():255:255 -> B
+    1:1:java.lang.String getSpecificRetryCountKey():260:260 -> C
+    1:1:java.lang.String getURLSorterPatternParameterKey():225:225 -> F
+    java.lang.String getPropertyParameterKey() -> H
+    1:1:java.lang.String getTaskIdentifier():88:88 -> a
+    1:2:boolean isCandidates(java.lang.String):205:206 -> b
+    1:66:com.batch.android.inbox.InboxWebserviceResponse computeResponse(com.batch.android.json.JSONObject):120:185 -> c
+    67:77:com.batch.android.inbox.InboxWebserviceResponse computeResponse(com.batch.android.json.JSONObject):182:192 -> c
+    78:89:com.batch.android.inbox.InboxWebserviceResponse computeResponse(com.batch.android.json.JSONObject):189:200 -> c
+    java.lang.String getCryptorModeParameterKey() -> o
+    java.lang.String getCryptorTypeParameterKey() -> p
+    1:3:java.util.Map getHeaders():77:79 -> r
+    1:21:void run():94:114 -> run
+    22:23:void run():110:111 -> run
+    24:33:void run():98:107 -> run
+    1:1:java.lang.String getPostCryptorTypeParameterKey():240:240 -> v
+    1:1:com.batch.android.post.PostDataProvider getPostDataProvider():215:215 -> w
+    1:1:java.lang.String getReadCryptorTypeParameterKey():245:245 -> y
+com.batch.android.inbox.InboxWebserviceResponse -> com.batch.android.p.i:
+# {"id":"sourceFile","fileName":"InboxWebserviceResponse.java"}
+    java.util.List notifications -> d
+    boolean hasMore -> a
+    java.lang.String cursor -> c
+    boolean didTimeout -> b
+    1:10:void <init>():11:20 -> <init>
+com.batch.android.inbox.NotificationIdentifiers -> com.batch.android.p.j:
+# {"id":"sourceFile","fileName":"NotificationIdentifiers.java"}
+    java.lang.String identifier -> a
+    java.lang.String installID -> c
+    java.util.Map additionalData -> e
+    java.lang.String sendID -> b
+    java.lang.String customID -> d
+    1:3:void <init>(java.lang.String,java.lang.String):30:32 -> <init>
+    1:1:boolean isValid():36:36 -> a
+com.batch.android.inbox.ResponseParsingException -> com.batch.android.p.k:
+# {"id":"sourceFile","fileName":"ResponseParsingException.java"}
+    1:1:void <init>():5:5 -> <init>
+    2:2:void <init>(java.lang.String):8:8 -> <init>
+    3:3:void <init>(java.lang.String,java.lang.Throwable):12:12 -> <init>
+    4:4:void <init>(java.lang.Throwable):16:16 -> <init>
+com.batch.android.json.JSON -> com.batch.android.json.JSON:
+# {"id":"sourceFile","fileName":"JSON.java"}
+    1:1:void <init>():22:22 -> <init>
+    1:2:double checkDouble(double):28:29 -> checkDouble
+    1:8:java.lang.Boolean toBoolean(java.lang.Object):35:42 -> toBoolean
+    1:7:java.lang.Double toDouble(java.lang.Object):49:55 -> toDouble
+    1:7:java.lang.Integer toInteger(java.lang.Object):62:68 -> toInteger
+    1:7:java.lang.Long toLong(java.lang.Object):75:81 -> toLong
+    1:4:java.lang.String toString(java.lang.Object):88:91 -> toString
+    1:9:com.batch.android.json.JSONException typeMismatch(java.lang.Object,java.lang.Object,java.lang.String):99:107 -> typeMismatch
+    10:16:com.batch.android.json.JSONException typeMismatch(java.lang.Object,java.lang.String):116:122 -> typeMismatch
+com.batch.android.json.JSONArray -> com.batch.android.json.JSONArray:
+# {"id":"sourceFile","fileName":"JSONArray.java"}
+    1:2:void <init>():58:59 -> <init>
+    3:6:void <init>(java.util.Collection):72:75 -> <init>
+    7:16:void <init>(com.batch.android.json.JSONTokener):89:98 -> <init>
+    17:17:void <init>(java.lang.String):110:110 -> <init>
+    18:25:void <init>(java.lang.Object):116:123 -> <init>
+    26:26:void <init>(java.lang.Object):118:118 -> <init>
+    1:5:void checkedPut(java.lang.Object):195:199 -> checkedPut
+    1:1:boolean equals(java.lang.Object):623:623 -> equals
+    1:7:java.lang.Object get(int):289:295 -> get
+    1:6:boolean getBoolean(int):329:334 -> getBoolean
+    7:7:boolean getBoolean(int):332:332 -> getBoolean
+    1:6:double getDouble(int):363:368 -> getDouble
+    7:7:double getDouble(int):366:366 -> getDouble
+    1:6:int getInt(int):397:402 -> getInt
+    7:7:int getInt(int):400:400 -> getInt
+    1:5:com.batch.android.json.JSONArray getJSONArray(int):498:502 -> getJSONArray
+    1:5:com.batch.android.json.JSONObject getJSONObject(int):523:527 -> getJSONObject
+    1:6:long getLong(int):431:436 -> getLong
+    7:7:long getLong(int):434:434 -> getLong
+    1:4:java.lang.String getString(int):464:467 -> getString
+    1:1:int hashCode():629:629 -> hashCode
+    1:2:boolean isNull(int):276:277 -> isNull
+    1:10:java.lang.String join(java.lang.String):568:577 -> join
+    1:1:int length():131:131 -> length
+    1:4:java.lang.Object opt(int):304:307 -> opt
+    1:1:boolean optBoolean(int):342:342 -> optBoolean
+    2:4:boolean optBoolean(int,boolean):350:352 -> optBoolean
+    1:1:double optDouble(int):376:376 -> optDouble
+    2:4:double optDouble(int,double):384:386 -> optDouble
+    1:1:int optInt(int):410:410 -> optInt
+    2:4:int optInt(int,int):418:420 -> optInt
+    1:2:com.batch.android.json.JSONArray optJSONArray(int):511:512 -> optJSONArray
+    1:2:com.batch.android.json.JSONObject optJSONObject(int):536:537 -> optJSONObject
+    1:1:long optLong(int):444:444 -> optLong
+    2:4:long optLong(int,long):452:454 -> optLong
+    1:1:java.lang.String optString(int):477:477 -> optString
+    2:3:java.lang.String optString(int,java.lang.String):485:486 -> optString
+    1:1:com.batch.android.json.JSONArray put(boolean):140:140 -> put
+    2:2:com.batch.android.json.JSONArray put(double):152:152 -> put
+    3:3:com.batch.android.json.JSONArray put(int):162:162 -> put
+    4:4:com.batch.android.json.JSONArray put(long):172:172 -> put
+    5:5:com.batch.android.json.JSONArray put(java.lang.Object):187:187 -> put
+    6:6:com.batch.android.json.JSONArray put(int,boolean):210:210 -> put
+    7:7:com.batch.android.json.JSONArray put(int,double):223:223 -> put
+    8:8:com.batch.android.json.JSONArray put(int,int):234:234 -> put
+    9:9:com.batch.android.json.JSONArray put(int,long):245:245 -> put
+    10:17:com.batch.android.json.JSONArray put(int,java.lang.Object):260:267 -> put
+    1:4:java.lang.Object remove(int):315:318 -> remove
+    1:8:com.batch.android.json.JSONObject toJSONObject(com.batch.android.json.JSONArray):548:555 -> toJSONObject
+    1:3:java.lang.String toString():587:589 -> toString
+    4:6:java.lang.String toString(int):608:610 -> toString
+    1:5:void writeTo(com.batch.android.json.JSONStringer):614:618 -> writeTo
+com.batch.android.json.JSONException -> com.batch.android.json.JSONException:
+# {"id":"sourceFile","fileName":"JSONException.java"}
+    1:1:void <init>(java.lang.String):50:50 -> <init>
+com.batch.android.json.JSONHelper -> com.batch.android.json.JSONHelper:
+# {"id":"sourceFile","fileName":"JSONHelper.java"}
+    1:1:void <init>():16:16 -> <init>
+    1:3:java.util.List jsonArrayToArray(com.batch.android.json.JSONArray):47:49 -> jsonArrayToArray
+    1:5:java.util.Map jsonObjectToMap(com.batch.android.json.JSONObject):37:41 -> jsonObjectToMap
+    1:4:java.lang.Object jsonObjectToObject(java.lang.Object):27:30 -> jsonObjectToObject
+com.batch.android.json.JSONObject -> com.batch.android.json.JSONObject:
+# {"id":"sourceFile","fileName":"JSONObject.java"}
+    1:18:void <clinit>():87:104 -> <clinit>
+    1:2:void <init>():121:122 -> <init>
+    3:14:void <init>(java.util.Map):135:146 -> <init>
+    15:15:void <init>(java.util.Map):144:144 -> <init>
+    16:17:void <init>(com.batch.android.json.JSONTokener):159:160 -> <init>
+    18:18:void <init>(java.lang.String):172:172 -> <init>
+    19:23:void <init>(com.batch.android.json.JSONObject,java.lang.String[]):181:185 -> <init>
+    24:28:void <init>(com.batch.android.json.JSONObject):194:198 -> <init>
+    1:13:com.batch.android.json.JSONObject accumulate(java.lang.String,java.lang.Object):334:346 -> accumulate
+    1:14:com.batch.android.json.JSONObject append(java.lang.String,java.lang.Object):362:375 -> append
+    15:15:com.batch.android.json.JSONObject append(java.lang.String,java.lang.Object):372:372 -> append
+    1:1:java.lang.String checkName(java.lang.String):382:382 -> checkName
+    1:3:java.lang.Object get(java.lang.String):428:430 -> get
+    1:6:boolean getBoolean(java.lang.String):451:456 -> getBoolean
+    7:7:boolean getBoolean(java.lang.String):454:454 -> getBoolean
+    1:6:double getDouble(java.lang.String):496:501 -> getDouble
+    7:7:double getDouble(java.lang.String):499:499 -> getDouble
+    1:6:int getInt(java.lang.String):541:546 -> getInt
+    7:7:int getInt(java.lang.String):544:544 -> getInt
+    1:5:com.batch.android.json.JSONArray getJSONArray(java.lang.String):680:684 -> getJSONArray
+    1:5:com.batch.android.json.JSONObject getJSONObject(java.lang.String):705:709 -> getJSONObject
+    1:6:long getLong(java.lang.String):588:593 -> getLong
+    7:7:long getLong(java.lang.String):591:591 -> getLong
+    1:4:java.lang.String getString(java.lang.String):635:638 -> getString
+    1:1:boolean has(java.lang.String):411:411 -> has
+    1:1:boolean hasNonNull(java.lang.String):419:419 -> hasNonNull
+    1:2:boolean isNull(java.lang.String):402:403 -> isNull
+    1:1:java.util.Set keySet():765:765 -> keySet
+    1:1:java.util.Iterator keys():751:751 -> keys
+    1:1:int length():231:231 -> length
+    1:1:com.batch.android.json.JSONArray names():773:773 -> names
+    1:14:java.lang.String numberToString(java.lang.Number):831:844 -> numberToString
+    15:15:java.lang.String numberToString(java.lang.Number):828:828 -> numberToString
+    1:1:java.lang.Object opt(java.lang.String):440:440 -> opt
+    1:1:boolean optBoolean(java.lang.String):464:464 -> optBoolean
+    2:4:boolean optBoolean(java.lang.String,boolean):472:474 -> optBoolean
+    1:1:double optDouble(java.lang.String):509:509 -> optDouble
+    2:4:double optDouble(java.lang.String,double):517:519 -> optDouble
+    1:1:int optInt(java.lang.String):554:554 -> optInt
+    2:4:int optInt(java.lang.String,int):562:564 -> optInt
+    1:2:com.batch.android.json.JSONArray optJSONArray(java.lang.String):693:694 -> optJSONArray
+    1:2:com.batch.android.json.JSONObject optJSONObject(java.lang.String):718:719 -> optJSONObject
+    1:1:long optLong(java.lang.String):613:613 -> optLong
+    2:4:long optLong(java.lang.String,long):623:625 -> optLong
+    1:1:java.lang.String optString(java.lang.String):648:648 -> optString
+    2:3:java.lang.String optString(java.lang.String,java.lang.String):656:657 -> optString
+    1:1:com.batch.android.json.JSONObject put(java.lang.String,boolean):241:241 -> put
+    2:2:com.batch.android.json.JSONObject put(java.lang.String,double):254:254 -> put
+    3:3:com.batch.android.json.JSONObject put(java.lang.String,int):265:265 -> put
+    4:4:com.batch.android.json.JSONObject put(java.lang.String,long):276:276 -> put
+    5:12:com.batch.android.json.JSONObject put(java.lang.String,java.lang.Object):293:300 -> put
+    1:1:com.batch.android.json.JSONObject putOpt(java.lang.String,java.lang.Object):312:312 -> putOpt
+    1:10:java.lang.String quote(java.lang.String):856:865 -> quote
+    1:5:void readFromTokener(com.batch.android.json.JSONTokener):219:223 -> readFromTokener
+    1:9:void readObject(java.io.ObjectInputStream):932:940 -> readObject
+    1:3:java.lang.Boolean reallyOptBoolean(java.lang.String,java.lang.Boolean):482:484 -> reallyOptBoolean
+    1:3:java.lang.Double reallyOptDouble(java.lang.String,java.lang.Double):527:529 -> reallyOptDouble
+    1:3:java.lang.Integer reallyOptInteger(java.lang.String,java.lang.Integer):572:574 -> reallyOptInteger
+    1:3:java.lang.Long reallyOptLong(java.lang.String,java.lang.Long):601:603 -> reallyOptLong
+    1:3:java.lang.String reallyOptString(java.lang.String,java.lang.String):666:668 -> reallyOptString
+    1:1:java.lang.Object remove(java.lang.String):394:394 -> remove
+    1:11:com.batch.android.json.JSONArray toJSONArray(com.batch.android.json.JSONArray):728:738 -> toJSONArray
+    1:3:java.lang.String toString():783:785 -> toString
+    4:6:java.lang.String toString(int):807:809 -> toString
+    1:32:java.lang.Object wrap(java.lang.Object):883:914 -> wrap
+    1:6:void writeObject(java.io.ObjectOutputStream):923:928 -> writeObject
+    7:7:void writeObject(java.io.ObjectOutputStream):925:925 -> writeObject
+    1:5:void writeTo(com.batch.android.json.JSONStringer):813:817 -> writeTo
+com.batch.android.json.JSONObject$1 -> com.batch.android.json.JSONObject$a:
+# {"id":"sourceFile","fileName":"JSONObject.java"}
+    1:1:void <init>():104:104 -> <init>
+    1:1:java.lang.String toString():112:112 -> toString
+com.batch.android.json.JSONStringer -> com.batch.android.json.JSONStringer:
+# {"id":"sourceFile","fileName":"JSONStringer.java"}
+    1:1:void <init>():125:125 -> <init>
+    2:60:void <init>():68:126 -> <init>
+    61:61:void <init>(int):129:129 -> <init>
+    62:126:void <init>(int):68:132 -> <init>
+    1:1:com.batch.android.json.JSONStringer array():142:142 -> array
+    1:8:void beforeKey():375:382 -> beforeKey
+    9:9:void beforeKey():379:379 -> beforeKey
+    1:16:void beforeValue():391:406 -> beforeValue
+    1:10:com.batch.android.json.JSONStringer close(com.batch.android.json.JSONStringer$Scope,com.batch.android.json.JSONStringer$Scope,java.lang.String):192:201 -> close
+    1:1:com.batch.android.json.JSONStringer endArray():151:151 -> endArray
+    1:1:com.batch.android.json.JSONStringer endObject():170:170 -> endObject
+    1:2:com.batch.android.json.JSONStringer key(java.lang.String):365:366 -> key
+    3:3:com.batch.android.json.JSONStringer key(java.lang.String):363:363 -> key
+    1:7:void newline():345:351 -> newline
+    1:1:com.batch.android.json.JSONStringer object():161:161 -> object
+    1:6:com.batch.android.json.JSONStringer open(com.batch.android.json.JSONStringer$Scope,java.lang.String):178:183 -> open
+    1:4:com.batch.android.json.JSONStringer$Scope peek():209:212 -> peek
+    5:5:com.batch.android.json.JSONStringer$Scope peek():210:210 -> peek
+    1:1:void replaceTop(com.batch.android.json.JSONStringer$Scope):219:219 -> replaceTop
+    1:34:void string(java.lang.String):301:334 -> string
+    35:50:void string(java.lang.String):315:330 -> string
+    51:51:void string(java.lang.String):324:324 -> string
+    52:75:void string(java.lang.String):318:341 -> string
+    1:1:java.lang.String toString():422:422 -> toString
+    1:20:com.batch.android.json.JSONStringer value(java.lang.Object):231:250 -> value
+    21:21:com.batch.android.json.JSONStringer value(java.lang.Object):246:246 -> value
+    22:22:com.batch.android.json.JSONStringer value(java.lang.Object):232:232 -> value
+    23:27:com.batch.android.json.JSONStringer value(boolean):262:266 -> value
+    28:28:com.batch.android.json.JSONStringer value(boolean):263:263 -> value
+    29:33:com.batch.android.json.JSONStringer value(double):278:282 -> value
+    34:34:com.batch.android.json.JSONStringer value(double):279:279 -> value
+    35:39:com.batch.android.json.JSONStringer value(long):292:296 -> value
+    40:40:com.batch.android.json.JSONStringer value(long):293:293 -> value
+com.batch.android.json.JSONStringer$Scope -> com.batch.android.json.JSONStringer$a:
+# {"id":"sourceFile","fileName":"JSONStringer.java"}
+    com.batch.android.json.JSONStringer$Scope EMPTY_ARRAY -> a
+    com.batch.android.json.JSONStringer$Scope NONEMPTY_ARRAY -> b
+    com.batch.android.json.JSONStringer$Scope EMPTY_OBJECT -> c
+    com.batch.android.json.JSONStringer$Scope DANGLING_KEY -> d
+    com.batch.android.json.JSONStringer$Scope NONEMPTY_OBJECT -> e
+    com.batch.android.json.JSONStringer$Scope NULL -> f
+    com.batch.android.json.JSONStringer$Scope[] $VALUES -> g
+    1:31:void <clinit>():80:110 -> <clinit>
+    32:32:void <clinit>():75:75 -> <clinit>
+    1:1:void <init>(java.lang.String,int):75:75 -> <init>
+    1:1:com.batch.android.json.JSONStringer$Scope[] $values():75:75 -> a
+    1:1:com.batch.android.json.JSONStringer$Scope valueOf(java.lang.String):75:75 -> valueOf
+    1:1:com.batch.android.json.JSONStringer$Scope[] values():75:75 -> values
+com.batch.android.json.JSONTokener -> com.batch.android.json.JSONTokener:
+# {"id":"sourceFile","fileName":"JSONTokener.java"}
+    1:6:void <init>(java.lang.String):83:88 -> <init>
+    1:2:void back():580:581 -> back
+    1:1:boolean more():465:465 -> more
+    1:1:char next():474:474 -> next
+    2:4:char next(char):482:484 -> next
+    5:9:java.lang.String next(int):512:516 -> next
+    10:10:java.lang.String next(int):513:513 -> next
+    1:1:char nextClean():496:496 -> nextClean
+    1:28:int nextCleanInternal():117:144 -> nextCleanInternal
+    29:34:int nextCleanInternal():134:139 -> nextCleanInternal
+    35:53:int nextCleanInternal():137:155 -> nextCleanInternal
+    1:25:java.lang.String nextString(char):197:221 -> nextString
+    26:37:java.lang.String nextString(char):214:225 -> nextString
+    1:1:java.lang.String nextTo(java.lang.String):540:540 -> nextTo
+    2:2:java.lang.String nextTo(java.lang.String):538:538 -> nextTo
+    3:3:java.lang.String nextTo(char):547:547 -> nextTo
+    1:4:java.lang.String nextToInternal(java.lang.String):326:329 -> nextToInternal
+    5:11:java.lang.String nextToInternal(java.lang.String):327:333 -> nextToInternal
+    1:14:java.lang.Object nextValue():99:112 -> nextValue
+    15:20:java.lang.Object nextValue():104:109 -> nextValue
+    21:21:java.lang.Object nextValue():102:102 -> nextValue
+    1:35:com.batch.android.json.JSONArray readArray():397:431 -> readArray
+    36:42:com.batch.android.json.JSONArray readArray():408:414 -> readArray
+    43:43:com.batch.android.json.JSONArray readArray():405:405 -> readArray
+    1:12:char readEscapeCharacter():235:246 -> readEscapeCharacter
+    13:13:char readEscapeCharacter():239:239 -> readEscapeCharacter
+    1:21:java.lang.Object readLiteral():272:292 -> readLiteral
+    22:51:java.lang.Object readLiteral():289:318 -> readLiteral
+    52:52:java.lang.Object readLiteral():275:275 -> readLiteral
+    1:18:com.batch.android.json.JSONObject readObject():341:358 -> readObject
+    19:47:com.batch.android.json.JSONObject readObject():357:385 -> readObject
+    1:2:void skipPast(java.lang.String):556:557 -> skipPast
+    1:3:char skipTo(char):566:568 -> skipTo
+    1:2:void skipToEndOfLine():171:172 -> skipToEndOfLine
+    3:6:void skipToEndOfLine():171:174 -> skipToEndOfLine
+    1:1:com.batch.android.json.JSONException syntaxError(java.lang.String):441:441 -> syntaxError
+    1:1:java.lang.String toString():450:450 -> toString
+com.batch.android.localcampaigns.CampaignManager -> com.batch.android.q.a:
+# {"id":"sourceFile","fileName":"CampaignManager.java"}
+    int MAX_CAMPAIGNS_JIT_THRESHOLD -> o
+    int DEFAULT_RETRY_AFTER -> m
+    com.batch.android.query.response.LocalCampaignsResponse$GlobalCappings cappings -> e
+    java.lang.Object campaignListLock -> f
+    java.lang.String TAG -> k
+    long nextAvailableJITTimestamp -> g
+    java.lang.String PERSISTENCE_LOCAL_CAMPAIGNS_FILE_NAME -> l
+    com.batch.android.localcampaigns.LocalCampaignsTracker viewTracker -> b
+    com.batch.android.localcampaigns.persistence.LocalCampaignsPersistence persistor -> c
+    java.util.concurrent.atomic.AtomicBoolean campaignsLoaded -> h
+    java.util.Set watchedEventNames -> i
+    com.batch.android.core.DateProvider dateProvider -> a
+    java.util.List campaignList -> d
+    java.util.Map syncedJITCampaigns -> j
+    long CACHE_EXPIRATION_DELAY -> n
+    int MIN_DELAY_BETWEEN_JIT_SYNC -> p
+    int JIT_CAMPAIGN_CACHE_PERIOD -> q
+    1:1:void <clinit>():71:71 -> <clinit>
+    1:1:void <init>(com.batch.android.localcampaigns.LocalCampaignsTracker):125:125 -> <init>
+    2:37:void <init>(com.batch.android.localcampaigns.LocalCampaignsTracker):91:126 -> <init>
+    1:1:long access$002(com.batch.android.localcampaigns.CampaignManager,long):57:57 -> a
+    2:2:com.batch.android.core.DateProvider access$100(com.batch.android.localcampaigns.CampaignManager):57:57 -> a
+    3:11:void deleteAllCampaigns(android.content.Context,boolean):176:184 -> a
+    12:39:java.util.List getEligibleCampaignsSortedByPriority(com.batch.android.localcampaigns.signal.Signal):198:225 -> a
+    40:51:java.util.List getEligibleCampaignsSortedByPriority(com.batch.android.localcampaigns.signal.Signal):223:234 -> a
+    52:53:int lambda$getEligibleCampaignsSortedByPriority$0(com.batch.android.localcampaigns.model.LocalCampaign,com.batch.android.localcampaigns.model.LocalCampaign):226:227 -> a
+    54:65:void verifyCampaignsEligibilityFromServer(java.util.List,com.batch.android.localcampaigns.CampaignManager$JITElectionCampaignListener):285:296 -> a
+    66:66:void verifyCampaignsEligibilityFromServer(java.util.List,com.batch.android.localcampaigns.CampaignManager$JITElectionCampaignListener):295:295 -> a
+    67:84:com.batch.android.localcampaigns.model.LocalCampaign$SyncedJITResult$State getSyncedJITCampaignState(com.batch.android.localcampaigns.model.LocalCampaign):358:375 -> a
+    85:85:boolean isEventWatched(java.lang.String):383:383 -> a
+    86:86:void setCappings(com.batch.android.query.response.LocalCampaignsResponse$GlobalCappings):406:406 -> a
+    87:117:java.util.List cleanCampaignList(java.util.List):417:447 -> a
+    118:132:boolean isCampaignOverCapping(com.batch.android.localcampaigns.model.LocalCampaign,boolean):459:473 -> a
+    133:133:void lambda$saveCampaignsAsync$1(android.content.Context,com.batch.android.query.response.LocalCampaignsResponse):603:603 -> a
+    134:136:void deleteSavedCampaigns(android.content.Context):608:610 -> a
+    137:137:boolean areCampaignsLoaded():666:666 -> a
+    1:1:java.util.Map access$200(com.batch.android.localcampaigns.CampaignManager):57:57 -> b
+    2:3:com.batch.android.localcampaigns.model.LocalCampaign getFirstCampaignNotRequiringJITSync(java.util.List):267:268 -> b
+    4:40:boolean isCampaignDisplayable(com.batch.android.localcampaigns.model.LocalCampaign):489:525 -> b
+    41:41:boolean isCampaignDisplayable(com.batch.android.localcampaigns.model.LocalCampaign):510:510 -> b
+    42:52:void saveCampaigns(android.content.Context,com.batch.android.query.response.LocalCampaignsResponse):588:598 -> b
+    53:53:void saveCampaigns(android.content.Context,com.batch.android.query.response.LocalCampaignsResponse):595:595 -> b
+    54:54:void deleteSavedCampaignsAsync(android.content.Context):615:615 -> b
+    55:59:void closeViewTracker():682:686 -> b
+    1:8:java.util.List getFirstEligibleCampaignsRequiringSync(java.util.List):244:251 -> c
+    9:9:java.util.List getCampaignList():390:390 -> c
+    10:10:void saveCampaignsAsync(android.content.Context,com.batch.android.query.response.LocalCampaignsResponse):603:603 -> c
+    11:13:boolean hasSavedCampaigns(android.content.Context):620:622 -> c
+    1:29:void updateCampaignList(java.util.List):141:169 -> d
+    30:30:com.batch.android.query.response.LocalCampaignsResponse$GlobalCappings getCappings():398:398 -> d
+    31:31:void lambda$deleteSavedCampaignsAsync$2(android.content.Context):615:615 -> d
+    1:30:boolean loadSavedCampaignResponse(android.content.Context):630:659 -> e
+    31:31:boolean loadSavedCampaignResponse(android.content.Context):632:632 -> e
+    32:32:com.batch.android.localcampaigns.ViewTracker getViewTracker():691:691 -> e
+    1:1:boolean isJITServiceAvailable():349:349 -> f
+    1:22:boolean isOverGlobalCappings():537:558 -> g
+    1:4:void openViewTracker():670:673 -> h
+    1:1:com.batch.android.localcampaigns.CampaignManager provide():131:131 -> i
+    1:9:void updateWatchedEventNames():575:583 -> j
+com.batch.android.localcampaigns.CampaignManager$1 -> com.batch.android.q.a$a:
+# {"id":"sourceFile","fileName":"CampaignManager.java"}
+    java.util.List val$eligibleCampaignsRequiringSync -> b
+    com.batch.android.localcampaigns.CampaignManager$JITElectionCampaignListener val$listener -> a
+    com.batch.android.localcampaigns.CampaignManager this$0 -> c
+    1:1:void <init>(com.batch.android.localcampaigns.CampaignManager,com.batch.android.localcampaigns.CampaignManager$JITElectionCampaignListener,java.util.List):298:298 -> <init>
+    1:23:void onSuccess(java.util.List):302:324 -> a
+    24:28:void onFailure(com.batch.android.core.Webservice$WebserviceError):332:336 -> a
+com.batch.android.localcampaigns.CampaignManager$JITElectionCampaignListener -> com.batch.android.q.a$b:
+# {"id":"sourceFile","fileName":"CampaignManager.java"}
+    void onCampaignElected(com.batch.android.localcampaigns.model.LocalCampaign) -> a
+com.batch.android.localcampaigns.LocalCampaignTrackDbHelper -> com.batch.android.q.b:
+# {"id":"sourceFile","fileName":"LocalCampaignTrackDbHelper.java"}
+    java.lang.String SQL_CREATE_TRIGGER_VIEW_EVENT_DELETE_ROWS -> f
+    java.lang.String SQL_CREATE_ENTRIES -> c
+    java.lang.String DATABASE_NAME -> b
+    java.lang.String SQL_CREATE_VIEW_EVENTS_TABLE -> e
+    int DATABASE_VERSION -> a
+    java.lang.String SQL_DELETE_ENTRIES -> d
+    1:1:void <init>(android.content.Context):101:101 -> <init>
+    1:8:java.lang.String getTableAsString(android.database.sqlite.SQLiteDatabase):129:136 -> a
+    9:20:java.lang.String getTableAsString(android.database.sqlite.SQLiteDatabase):135:146 -> a
+    1:3:void onCreate(android.database.sqlite.SQLiteDatabase):106:108 -> onCreate
+    1:2:void onUpgrade(android.database.sqlite.SQLiteDatabase,int,int):114:115 -> onUpgrade
+com.batch.android.localcampaigns.LocalCampaignTrackDbHelper$LocalCampaignEntry -> com.batch.android.q.b$a:
+# {"id":"sourceFile","fileName":"LocalCampaignTrackDbHelper.java"}
+    java.lang.String COLUMN_NAME_VE_CAMPAIGN_ID -> g
+    java.lang.String TABLE_VIEW_EVENTS_NAME -> f
+    java.lang.String TRIGGER_VIEW_EVENTS_NAME -> i
+    java.lang.String COLUMN_NAME_VE_TIMESTAMP -> h
+    java.lang.String TABLE_NAME -> a
+    java.lang.String COLUMN_NAME_CAMPAIGN_KIND -> c
+    java.lang.String COLUMN_NAME_CAMPAIGN_ID -> b
+    java.lang.String COLUMN_NAME_CAMPAIGN_COUNT -> e
+    java.lang.String COLUMN_NAME_CAMPAIGN_LAST_OCCURRENCE -> d
+    1:1:void <init>():14:14 -> <init>
+com.batch.android.localcampaigns.LocalCampaignsSQLTracker -> com.batch.android.q.c:
+# {"id":"sourceFile","fileName":"LocalCampaignsSQLTracker.java"}
+    com.batch.android.core.DateProvider dateProvider -> d
+    java.lang.String TAG -> f
+    android.database.sqlite.SQLiteDatabase database -> c
+    boolean open -> e
+    com.batch.android.localcampaigns.LocalCampaignTrackDbHelper dbHelper -> b
+    1:1:void <init>():25:25 -> <init>
+    2:5:void <init>():23:26 -> <init>
+    6:6:void <init>(com.batch.android.core.DateProvider):30:30 -> <init>
+    7:15:void <init>(com.batch.android.core.DateProvider):23:31 -> <init>
+    1:2:void open(android.content.Context):35:36 -> a
+    3:7:void close():40:44 -> a
+    8:8:void setDateProvider(com.batch.android.core.DateProvider):56:56 -> a
+    9:36:java.util.Map getViewCounts(java.util.List):139:166 -> a
+    37:58:java.util.Map getViewCounts(java.util.List):154:175 -> a
+    59:75:long campaignLastOccurrence(java.lang.String):183:199 -> a
+    76:85:int getNumberOfViewEventsSince(long):206:215 -> a
+    86:98:int getNumberOfViewEventsSince(long):208:220 -> a
+    1:21:com.batch.android.localcampaigns.ViewTracker$CountedViewEvent trackViewEvent(java.lang.String):68:88 -> b
+    22:47:com.batch.android.localcampaigns.ViewTracker$CountedViewEvent trackViewEvent(java.lang.String):74:99 -> b
+    48:48:com.batch.android.localcampaigns.ViewTracker$CountedViewEvent trackViewEvent(java.lang.String):91:91 -> b
+    49:50:void deleteViewEvents():225:226 -> b
+    1:23:com.batch.android.localcampaigns.ViewTracker$CountedViewEvent getViewEvent(java.lang.String):108:130 -> c
+    24:32:void ensureWritableDatabase():230:238 -> c
+    33:33:void ensureWritableDatabase():232:232 -> c
+    1:1:com.batch.android.core.DateProvider getDateProvider():52:52 -> d
+    1:1:boolean isOpen():48:48 -> e
+com.batch.android.localcampaigns.LocalCampaignsTracker -> com.batch.android.q.d:
+# {"id":"sourceFile","fileName":"LocalCampaignsTracker.java"}
+    int sessionViewsCount -> g
+    1:7:void <init>():5:11 -> <init>
+    1:2:com.batch.android.localcampaigns.ViewTracker$CountedViewEvent trackViewEvent(java.lang.String):36:37 -> b
+    1:1:int getSessionViewsCount():25:25 -> f
+    1:1:void resetSessionViewsCount():17:17 -> g
+com.batch.android.localcampaigns.ViewTracker -> com.batch.android.q.e:
+# {"id":"sourceFile","fileName":"ViewTracker.java"}
+    int KIND_VIEW -> a
+    long campaignLastOccurrence(java.lang.String) -> a
+    int getNumberOfViewEventsSince(long) -> a
+    java.util.Map getViewCounts(java.util.List) -> a
+    com.batch.android.localcampaigns.ViewTracker$CountedViewEvent trackViewEvent(java.lang.String) -> b
+    com.batch.android.localcampaigns.ViewTracker$CountedViewEvent getViewEvent(java.lang.String) -> c
+com.batch.android.localcampaigns.ViewTracker$CountedViewEvent -> com.batch.android.q.e$a:
+# {"id":"sourceFile","fileName":"ViewTracker.java"}
+    java.lang.String campaignID -> a
+    long lastOccurrence -> c
+    int count -> b
+    1:1:void <init>(java.lang.String):61:61 -> <init>
+    2:7:void <init>(java.lang.String):57:62 -> <init>
+com.batch.android.localcampaigns.ViewTrackerUnavailableException -> com.batch.android.q.f:
+# {"id":"sourceFile","fileName":"ViewTrackerUnavailableException.java"}
+    1:1:void <init>():5:5 -> <init>
+com.batch.android.localcampaigns.model.LocalCampaign -> com.batch.android.r.a:
+# {"id":"sourceFile","fileName":"LocalCampaign.java"}
+    java.lang.Integer maximumAPILevel -> c
+    boolean requiresJustInTimeSync -> o
+    java.lang.Integer capping -> h
+    java.lang.String publicToken -> m
+    com.batch.android.json.JSONObject customPayload -> n
+    boolean persist -> l
+    int minimumDisplayInterval -> g
+    int priority -> d
+    java.lang.String TAG -> p
+    com.batch.android.localcampaigns.model.LocalCampaign$Output output -> i
+    java.lang.Integer minimumAPILevel -> b
+    java.lang.String id -> a
+    com.batch.android.json.JSONObject eventData -> j
+    com.batch.android.date.BatchDate endDate -> f
+    com.batch.android.date.BatchDate startDate -> e
+    java.util.List triggers -> k
+    1:107:void <init>():15:121 -> <init>
+    1:1:void displayMessage():160:160 -> a
+    1:3:void generateOccurrenceID():136:138 -> b
+com.batch.android.localcampaigns.model.LocalCampaign$Output -> com.batch.android.r.a$a:
+# {"id":"sourceFile","fileName":"LocalCampaign.java"}
+    com.batch.android.json.JSONObject payload -> a
+    1:2:void <init>(com.batch.android.json.JSONObject):171:172 -> <init>
+    boolean displayMessage(com.batch.android.localcampaigns.model.LocalCampaign) -> a
+com.batch.android.localcampaigns.model.LocalCampaign$SyncedJITResult -> com.batch.android.r.a$b:
+# {"id":"sourceFile","fileName":"LocalCampaign.java"}
+    long timestamp -> a
+    boolean eligible -> b
+    1:2:void <init>(long):209:210 -> <init>
+com.batch.android.localcampaigns.model.LocalCampaign$SyncedJITResult$State -> com.batch.android.r.a$b$a:
+# {"id":"sourceFile","fileName":"LocalCampaign.java"}
+    com.batch.android.localcampaigns.model.LocalCampaign$SyncedJITResult$State NOT_ELIGIBLE -> b
+    com.batch.android.localcampaigns.model.LocalCampaign$SyncedJITResult$State ELIGIBLE -> a
+    com.batch.android.localcampaigns.model.LocalCampaign$SyncedJITResult$State REQUIRES_SYNC -> c
+    com.batch.android.localcampaigns.model.LocalCampaign$SyncedJITResult$State[] $VALUES -> d
+    1:3:void <clinit>():194:196 -> <clinit>
+    4:4:void <clinit>():193:193 -> <clinit>
+    1:1:void <init>(java.lang.String,int):193:193 -> <init>
+    1:1:com.batch.android.localcampaigns.model.LocalCampaign$SyncedJITResult$State[] $values():193:193 -> a
+    1:1:com.batch.android.localcampaigns.model.LocalCampaign$SyncedJITResult$State valueOf(java.lang.String):193:193 -> valueOf
+    1:1:com.batch.android.localcampaigns.model.LocalCampaign$SyncedJITResult$State[] values():193:193 -> values
+com.batch.android.localcampaigns.model.LocalCampaign$Trigger -> com.batch.android.r.a$c:
+# {"id":"sourceFile","fileName":"LocalCampaign.java"}
+    java.lang.String getType() -> k
+com.batch.android.localcampaigns.output.ActionOutput -> com.batch.android.s.a:
+# {"id":"sourceFile","fileName":"ActionOutput.java"}
+    1:1:void <init>(com.batch.android.json.JSONObject):20:20 -> <init>
+    1:1:com.batch.android.localcampaigns.output.ActionOutput provide(com.batch.android.json.JSONObject):25:25 -> a
+    2:34:boolean displayMessage(com.batch.android.localcampaigns.model.LocalCampaign):30:62 -> a
+com.batch.android.localcampaigns.output.LandingOutput -> com.batch.android.s.b:
+# {"id":"sourceFile","fileName":"LandingOutput.java"}
+    com.batch.android.module.MessagingModule messagingModule -> b
+    1:2:void <init>(com.batch.android.module.MessagingModule,com.batch.android.json.JSONObject):21:22 -> <init>
+    1:1:com.batch.android.localcampaigns.output.LandingOutput provide(com.batch.android.json.JSONObject):27:27 -> a
+    2:19:boolean displayMessage(com.batch.android.localcampaigns.model.LocalCampaign):34:51 -> a
+com.batch.android.localcampaigns.persistence.LocalCampaignsFilePersistence -> com.batch.android.t.a:
+# {"id":"sourceFile","fileName":"LocalCampaignsFilePersistence.java"}
+    java.lang.String TAG -> a
+    int PERSISTENCE_CURRENT_FILE_VERSION -> d
+    java.lang.String PERSISTENCE_SAVE_VERSION_KEY -> c
+    java.lang.String PERSISTENCE_TMP_FILE_PREFIX -> b
+    1:1:void <init>():19:19 -> <init>
+    1:82:void persistData(android.content.Context,com.batch.android.json.JSONObject,java.lang.String):38:119 -> a
+    83:122:com.batch.android.json.JSONObject loadData(android.content.Context,java.lang.String):130:169 -> a
+    123:134:com.batch.android.json.JSONObject loadData(android.content.Context,java.lang.String):144:155 -> a
+    1:1:boolean hasSavedData(android.content.Context,java.lang.String):32:32 -> b
+    1:6:void deleteData(android.content.Context,java.lang.String):177:182 -> c
+com.batch.android.localcampaigns.persistence.LocalCampaignsPersistence -> com.batch.android.t.b:
+# {"id":"sourceFile","fileName":"LocalCampaignsPersistence.java"}
+    com.batch.android.json.JSONObject loadData(android.content.Context,java.lang.String) -> a
+    void persistData(android.content.Context,com.batch.android.json.JSONObject,java.lang.String) -> a
+    boolean hasSavedData(android.content.Context,java.lang.String) -> b
+    void deleteData(android.content.Context,java.lang.String) -> c
+com.batch.android.localcampaigns.persistence.PersistenceException -> com.batch.android.t.c:
+# {"id":"sourceFile","fileName":"PersistenceException.java"}
+    1:1:void <init>():5:5 -> <init>
+    2:2:void <init>(java.lang.String):8:8 -> <init>
+    3:3:void <init>(java.lang.String,java.lang.Throwable):12:12 -> <init>
+    4:4:void <init>(java.lang.Throwable):16:16 -> <init>
+com.batch.android.localcampaigns.serialization.LocalCampaignDeserializer -> com.batch.android.u.a:
+# {"id":"sourceFile","fileName":"LocalCampaignDeserializer.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():20:20 -> <init>
+    1:77:com.batch.android.localcampaigns.model.LocalCampaign deserialize(com.batch.android.json.JSONObject):36:112 -> a
+    78:78:com.batch.android.localcampaigns.model.LocalCampaign deserialize(com.batch.android.json.JSONObject):67:67 -> a
+    79:79:com.batch.android.localcampaigns.model.LocalCampaign deserialize(com.batch.android.json.JSONObject):62:62 -> a
+    80:80:com.batch.android.localcampaigns.model.LocalCampaign deserialize(com.batch.android.json.JSONObject):47:47 -> a
+    81:81:com.batch.android.localcampaigns.model.LocalCampaign deserialize(com.batch.android.json.JSONObject):40:40 -> a
+    82:82:com.batch.android.localcampaigns.model.LocalCampaign deserialize(com.batch.android.json.JSONObject):33:33 -> a
+    83:91:java.util.List deserializeList(com.batch.android.json.JSONArray):124:132 -> a
+    1:16:com.batch.android.localcampaigns.model.LocalCampaign$Output parseOutput(com.batch.android.json.JSONObject):147:162 -> b
+    17:17:com.batch.android.localcampaigns.model.LocalCampaign$Output parseOutput(com.batch.android.json.JSONObject):150:150 -> b
+    18:29:java.util.List parseTriggers(com.batch.android.json.JSONArray):175:186 -> b
+    1:21:com.batch.android.localcampaigns.model.LocalCampaign$Trigger parseTrigger(com.batch.android.json.JSONObject):199:219 -> c
+    22:26:com.batch.android.localcampaigns.model.LocalCampaign$Trigger parseTrigger(com.batch.android.json.JSONObject):213:217 -> c
+    27:27:com.batch.android.localcampaigns.model.LocalCampaign$Trigger parseTrigger(com.batch.android.json.JSONObject):215:215 -> c
+    28:28:com.batch.android.localcampaigns.model.LocalCampaign$Trigger parseTrigger(com.batch.android.json.JSONObject):211:211 -> c
+    29:29:com.batch.android.localcampaigns.model.LocalCampaign$Trigger parseTrigger(com.batch.android.json.JSONObject):202:202 -> c
+com.batch.android.localcampaigns.serialization.LocalCampaignSerializer -> com.batch.android.u.b:
+# {"id":"sourceFile","fileName":"LocalCampaignSerializer.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:44:com.batch.android.json.JSONObject serialize(com.batch.android.localcampaigns.model.LocalCampaign):22:65 -> a
+    45:48:com.batch.android.json.JSONObject parseOutput(com.batch.android.localcampaigns.model.LocalCampaign$Output):92:95 -> a
+    49:52:com.batch.android.json.JSONArray parseTriggers(java.util.List):108:111 -> a
+    53:58:com.batch.android.json.JSONObject parseTrigger(com.batch.android.localcampaigns.model.LocalCampaign$Trigger):124:129 -> a
+    1:4:com.batch.android.json.JSONArray serializeList(java.util.List):76:79 -> b
+com.batch.android.localcampaigns.signal.EventTrackedSignal -> com.batch.android.v.a:
+# {"id":"sourceFile","fileName":"EventTrackedSignal.java"}
+    com.batch.android.json.JSONObject parameters -> b
+    java.lang.String name -> a
+    1:3:void <init>(java.lang.String,com.batch.android.json.JSONObject):20:22 -> <init>
+    1:3:boolean satisfiesTrigger(com.batch.android.localcampaigns.model.LocalCampaign$Trigger):26:28 -> a
+com.batch.android.localcampaigns.signal.NewSessionSignal -> com.batch.android.v.b:
+# {"id":"sourceFile","fileName":"NewSessionSignal.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:1:boolean satisfiesTrigger(com.batch.android.localcampaigns.model.LocalCampaign$Trigger):15:15 -> a
+com.batch.android.localcampaigns.signal.PublicEventTrackedSignal -> com.batch.android.v.c:
+# {"id":"sourceFile","fileName":"PublicEventTrackedSignal.java"}
+    java.lang.String label -> c
+    1:11:void <init>(com.batch.android.localcampaigns.signal.EventTrackedSignal):20:30 -> <init>
+    12:12:void <init>(com.batch.android.localcampaigns.signal.EventTrackedSignal):28:28 -> <init>
+    1:3:boolean satisfiesTrigger(com.batch.android.localcampaigns.model.LocalCampaign$Trigger):38:40 -> a
+    4:4:boolean isPublic(com.batch.android.localcampaigns.signal.EventTrackedSignal):45:45 -> a
+com.batch.android.localcampaigns.signal.Signal -> com.batch.android.v.d:
+# {"id":"sourceFile","fileName":"Signal.java"}
+    boolean satisfiesTrigger(com.batch.android.localcampaigns.model.LocalCampaign$Trigger) -> a
+com.batch.android.localcampaigns.trigger.EventLocalCampaignTrigger -> com.batch.android.w.a:
+# {"id":"sourceFile","fileName":"EventLocalCampaignTrigger.java"}
+    java.lang.String name -> a
+    java.lang.String label -> b
+    1:3:void <init>(java.lang.String,java.lang.String):27:29 -> <init>
+    1:5:boolean isSatisfied(java.lang.String,java.lang.String):36:40 -> a
+    1:1:java.lang.String getType():49:49 -> k
+com.batch.android.localcampaigns.trigger.NextSessionTrigger -> com.batch.android.w.b:
+# {"id":"sourceFile","fileName":"NextSessionTrigger.java"}
+    1:1:void <init>():8:8 -> <init>
+    1:1:java.lang.String getType():12:12 -> k
+com.batch.android.messaging.AsyncImageDownloadTask -> com.batch.android.x.a:
+# {"id":"sourceFile","fileName":"AsyncImageDownloadTask.java"}
+    com.batch.android.messaging.model.MessagingError lastError -> a
+    java.lang.ref.WeakReference weakListener -> b
+    java.lang.String TAG -> c
+    1:1:void <init>(com.batch.android.messaging.AsyncImageDownloadTask$ImageDownloadListener):82:82 -> <init>
+    2:50:void <init>(com.batch.android.messaging.AsyncImageDownloadTask$ImageDownloadListener):35:83 -> <init>
+    1:76:com.batch.android.messaging.AsyncImageDownloadTask$Result doInBackground(java.lang.String[]):96:171 -> a
+    77:109:com.batch.android.messaging.AsyncImageDownloadTask$Result doInBackground(java.lang.String[]):139:171 -> a
+    110:140:com.batch.android.messaging.AsyncImageDownloadTask$Result doInBackground(java.lang.String[]):141:171 -> a
+    141:160:com.batch.android.messaging.AsyncImageDownloadTask$Result doInBackground(java.lang.String[]):146:165 -> a
+    161:172:com.batch.android.messaging.AsyncImageDownloadTask$Result doInBackground(java.lang.String[]):160:171 -> a
+    173:181:com.batch.android.messaging.AsyncImageDownloadTask$Result doInBackground(java.lang.String[]):157:165 -> a
+    182:202:com.batch.android.messaging.AsyncImageDownloadTask$Result doInBackground(java.lang.String[]):154:174 -> a
+    203:203:com.batch.android.messaging.AsyncImageDownloadTask$Result doInBackground(java.lang.String[]):106:106 -> a
+    204:209:void onPostExecute(com.batch.android.messaging.AsyncImageDownloadTask$Result):181:186 -> a
+    1:1:java.lang.Object doInBackground(java.lang.Object[]):30:30 -> doInBackground
+    1:1:void onPostExecute(java.lang.Object):30:30 -> onPostExecute
+    1:3:void onPreExecute():88:90 -> onPreExecute
+com.batch.android.messaging.AsyncImageDownloadTask$BitmapResult -> com.batch.android.x.a$a:
+# {"id":"sourceFile","fileName":"AsyncImageDownloadTask.java"}
+    1:1:void <init>(java.lang.String,android.graphics.Bitmap):59:59 -> <init>
+com.batch.android.messaging.AsyncImageDownloadTask$GIFResult -> com.batch.android.x.a$b:
+# {"id":"sourceFile","fileName":"AsyncImageDownloadTask.java"}
+    1:1:void <init>(java.lang.String,byte[]):66:66 -> <init>
+com.batch.android.messaging.AsyncImageDownloadTask$ImageDownloadListener -> com.batch.android.x.a$c:
+# {"id":"sourceFile","fileName":"AsyncImageDownloadTask.java"}
+    void onImageDownloadError(com.batch.android.messaging.model.MessagingError) -> b
+    void onImageDownloadSuccess(com.batch.android.messaging.AsyncImageDownloadTask$Result) -> b
+    void onImageDownloadStart() -> c
+com.batch.android.messaging.AsyncImageDownloadTask$Result -> com.batch.android.x.a$d:
+# {"id":"sourceFile","fileName":"AsyncImageDownloadTask.java"}
+    java.lang.Object value -> b
+    java.lang.String key -> a
+    1:3:void <init>(java.lang.String,java.lang.Object):42:44 -> <init>
+    1:1:java.lang.Object get():52:52 -> a
+    1:1:java.lang.String getKey():48:48 -> b
+com.batch.android.messaging.ModalContentPanGestureDetector -> com.batch.android.x.b:
+# {"id":"sourceFile","fileName":"ModalContentPanGestureDetector.java"}
+    boolean shouldDismissOnTouchUp -> m
+    com.batch.android.messaging.ModalContentPanGestureDetector$OnDismissListener dismissListener -> a
+    boolean allowHorizontalPanning -> n
+    int touchSlop -> l
+    float initialInterceptYOffset -> i
+    float initialInterceptXOffset -> h
+    float initialSwipeYOffset -> g
+    float initialSwipeXOffset -> f
+    boolean isPanning -> k
+    android.view.GestureDetector detector -> b
+    float SPRING_STIFFNESS -> w
+    float SCALE_RATIO_DISMISS_THRESHOLD -> v
+    float SMALLEST_SCALE_RATIO -> u
+    android.os.Vibrator vibrator -> d
+    boolean supportsAndroidXAnimation -> e
+    float DISMISS_THRESHOLD_MINIMUM_VELOCITY -> t
+    float DISMISSABLE_TARGET_ALPHA -> s
+    android.view.View targetView -> c
+    java.lang.Object[] cancellationAnimations -> j
+    float SCALE_PAN_MULTIPLIER -> r
+    float TRANSLATION_PAN_MULTIPLIER -> q
+    long ANIMATION_DURATION_FAST -> p
+    long ANIMATION_DURATION -> o
+    1:1:void <init>(android.content.Context,boolean):100:100 -> <init>
+    2:63:void <init>(android.content.Context,boolean):52:113 -> <init>
+    1:2:void attach(com.batch.android.messaging.view.DelegatedTouchEventViewGroup,android.view.View):124:125 -> a
+    3:3:void setDismissListener(com.batch.android.messaging.ModalContentPanGestureDetector$OnDismissListener):129:129 -> a
+    4:7:void beginPan(float,float):143:146 -> a
+    8:19:void cancelCancellationAnimation():193:204 -> a
+    20:46:boolean onInterceptTouchEvent(android.view.MotionEvent,com.batch.android.messaging.view.DelegatedTouchEventViewGroup):211:237 -> a
+    47:47:boolean onInterceptTouchEvent(android.view.MotionEvent,com.batch.android.messaging.view.DelegatedTouchEventViewGroup):215:215 -> a
+    48:149:boolean onTouchEvent(android.view.MotionEvent,com.batch.android.messaging.view.DelegatedTouchEventViewGroup,boolean):254:355 -> a
+    150:202:boolean onTouchEvent(android.view.MotionEvent,com.batch.android.messaging.view.DelegatedTouchEventViewGroup,boolean):264:316 -> a
+    203:238:boolean onTouchEvent(android.view.MotionEvent,com.batch.android.messaging.view.DelegatedTouchEventViewGroup,boolean):314:349 -> a
+    239:338:boolean onTouchEvent(android.view.MotionEvent,com.batch.android.messaging.view.DelegatedTouchEventViewGroup,boolean):260:359 -> a
+    1:2:void dismiss():133:134 -> b
+    3:3:boolean hasPassedTouchSlop(float,float):139:139 -> b
+    1:6:void shouldDismissChanged():365:370 -> c
+    1:24:void startCancelAnimation():150:173 -> d
+    1:12:void startFallbackCancelAnimation():178:189 -> e
+    1:4:void vibrate():374:377 -> f
+    1:11:boolean onFling(android.view.MotionEvent,android.view.MotionEvent,float,float):404:414 -> onFling
+com.batch.android.messaging.ModalContentPanGestureDetector$OnDismissListener -> com.batch.android.x.b$a:
+# {"id":"sourceFile","fileName":"ModalContentPanGestureDetector.java"}
+    void onPanDismiss() -> e
+com.batch.android.messaging.PayloadParser -> com.batch.android.x.c:
+# {"id":"sourceFile","fileName":"PayloadParser.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():35:35 -> <init>
+    1:13:com.batch.android.messaging.model.AlertMessage parseAlertPayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.AlertMessage):145:157 -> a
+    14:53:com.batch.android.messaging.model.UniversalMessage parseUniversalPayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.UniversalMessage):166:205 -> a
+    54:54:com.batch.android.messaging.model.BannerMessage parseBannerPayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.BannerMessage):213:213 -> a
+    55:55:com.batch.android.messaging.model.ModalMessage parseModalPayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.ModalMessage):219:219 -> a
+    56:92:void parseBaseBannerPayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.BaseBannerMessage):225:261 -> a
+    93:93:void parseBaseBannerPayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.BaseBannerMessage):258:258 -> a
+    94:114:void parseBaseBannerPayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.BaseBannerMessage):255:275 -> a
+    115:130:com.batch.android.messaging.model.ImageMessage parseImagePayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.ImageMessage):281:296 -> a
+    131:149:com.batch.android.messaging.model.ImageMessage parseImagePayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.ImageMessage):294:312 -> a
+    150:154:com.batch.android.messaging.model.ImageMessage parseImagePayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.ImageMessage):303:307 -> a
+    155:155:com.batch.android.messaging.model.ImageMessage parseImagePayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.ImageMessage):289:289 -> a
+    156:180:com.batch.android.messaging.model.WebViewMessage parseWebViewPayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.WebViewMessage):319:343 -> a
+    181:182:com.batch.android.messaging.model.WebViewMessage parseWebViewPayload(com.batch.android.json.JSONObject,com.batch.android.messaging.model.WebViewMessage):327:328 -> a
+    183:190:com.batch.android.messaging.model.Action parseAction(com.batch.android.json.JSONObject):350:357 -> a
+    191:197:android.text.Spanned parseHtmlString(java.lang.String):378:384 -> a
+    1:45:com.batch.android.messaging.model.Message parseBasePayload(com.batch.android.json.JSONObject):94:138 -> b
+    46:46:com.batch.android.messaging.model.Message parseBasePayload(com.batch.android.json.JSONObject):111:111 -> b
+    1:9:com.batch.android.messaging.model.CTA parseCTA(com.batch.android.json.JSONObject):361:369 -> c
+    1:40:com.batch.android.messaging.model.Message parsePayload(com.batch.android.json.JSONObject):47:86 -> d
+    41:41:com.batch.android.messaging.model.Message parsePayload(com.batch.android.json.JSONObject):49:49 -> d
+    42:42:com.batch.android.messaging.model.Message parsePayload(com.batch.android.json.JSONObject):41:41 -> d
+com.batch.android.messaging.PayloadParsingException -> com.batch.android.x.d:
+# {"id":"sourceFile","fileName":"PayloadParsingException.java"}
+    1:1:void <init>():9:9 -> <init>
+    2:2:void <init>(java.lang.String):12:12 -> <init>
+    3:3:void <init>(java.lang.String,java.lang.Throwable):16:16 -> <init>
+    4:4:void <init>(java.lang.Throwable):20:20 -> <init>
+com.batch.android.messaging.Size2D -> com.batch.android.messaging.Size2D:
+# {"id":"sourceFile","fileName":"Size2D.java"}
+    int height -> b
+    int width -> a
+    1:1:void <clinit>():53:53 -> <clinit>
+    1:3:void <init>(int,int):15:17 -> <init>
+    4:6:void <init>(android.os.Parcel):20:22 -> <init>
+    1:5:boolean equals(java.lang.Object):30:34 -> equals
+    1:1:int hashCode():39:39 -> hashCode
+    1:2:void writeToParcel(android.os.Parcel,int):44:45 -> writeToParcel
+com.batch.android.messaging.Size2D$1 -> com.batch.android.messaging.Size2D$a:
+# {"id":"sourceFile","fileName":"Size2D.java"}
+    1:1:void <init>():53:53 -> <init>
+    1:1:com.batch.android.messaging.Size2D createFromParcel(android.os.Parcel):56:56 -> a
+    2:2:com.batch.android.messaging.Size2D[] newArray(int):61:61 -> a
+    1:1:java.lang.Object createFromParcel(android.os.Parcel):53:53 -> createFromParcel
+    1:1:java.lang.Object[] newArray(int):53:53 -> newArray
+com.batch.android.messaging.WebViewActionListener -> com.batch.android.x.e:
+# {"id":"sourceFile","fileName":"WebViewActionListener.java"}
+    void onCloseAction() -> a
+    void onDismissAction(java.lang.String) -> a
+    void onErrorAction(com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause,com.batch.android.messaging.model.MessagingError,java.lang.String) -> a
+    void onOpenDeeplinkAction(java.lang.String,java.lang.Boolean,java.lang.String) -> a
+    void onPerformAction(java.lang.String,com.batch.android.json.JSONObject,java.lang.String) -> a
+com.batch.android.messaging.WebViewHelper -> com.batch.android.x.f:
+# {"id":"sourceFile","fileName":"WebViewHelper.java"}
+    1:1:void <init>():7:7 -> <init>
+    1:2:java.lang.String getAnalyticsIDFromURL(java.lang.String):12:13 -> a
+com.batch.android.messaging.css.CSSParsingException -> com.batch.android.y.a:
+# {"id":"sourceFile","fileName":"CSSParsingException.java"}
+    1:1:void <init>():5:5 -> <init>
+    2:2:void <init>(java.lang.String):8:8 -> <init>
+    3:3:void <init>(java.lang.String,java.lang.Throwable):12:12 -> <init>
+    4:4:void <init>(java.lang.Throwable):16:16 -> <init>
+com.batch.android.messaging.css.DOMNode -> com.batch.android.y.b:
+# {"id":"sourceFile","fileName":"DOMNode.java"}
+    java.util.List classes -> c
+    java.lang.String type -> a
+    java.lang.String identifier -> b
+    1:2:void <init>():17:18 -> <init>
+    3:7:void <init>(java.lang.String,java.lang.String[]):21:25 -> <init>
+    1:23:boolean matchesSelector(java.lang.String):30:52 -> a
+com.batch.android.messaging.css.Declaration -> com.batch.android.y.c:
+# {"id":"sourceFile","fileName":"Declaration.java"}
+    java.lang.String name -> a
+    java.lang.String value -> b
+    1:1:void <init>():3:3 -> <init>
+com.batch.android.messaging.css.Document -> com.batch.android.y.d:
+# {"id":"sourceFile","fileName":"Document.java"}
+    java.util.List mediaQueries -> b
+    java.util.List rulesets -> a
+    java.util.regex.Pattern MEDIA_QUERY_PATTERN -> d
+    java.lang.String TAG -> c
+    1:1:void <clinit>():21:21 -> <clinit>
+    1:3:void <init>():29:31 -> <init>
+    1:1:java.util.Map getFlatRules(com.batch.android.messaging.css.DOMNode,android.graphics.Point):36:36 -> a
+    2:101:java.util.Map getFlatRules(java.util.List):42:141 -> a
+    102:122:java.util.List getRules(com.batch.android.messaging.css.DOMNode,java.util.List):160:180 -> a
+    123:151:boolean matchesMediaQuery(java.lang.String,android.graphics.Point):188:216 -> a
+    152:167:boolean matchesSizeMediaQuery(android.graphics.Point,java.lang.String,java.lang.String,java.lang.String,int):239:254 -> a
+    1:5:java.util.List getRules(com.batch.android.messaging.css.DOMNode,android.graphics.Point):147:151 -> b
+com.batch.android.messaging.css.ImportFileProvider -> com.batch.android.y.e:
+# {"id":"sourceFile","fileName":"ImportFileProvider.java"}
+    java.lang.String getContent(java.lang.String) -> a
+com.batch.android.messaging.css.MediaQuery -> com.batch.android.y.f:
+# {"id":"sourceFile","fileName":"MediaQuery.java"}
+    java.util.List rulesets -> b
+    java.lang.String rule -> a
+    1:2:void <init>():12:13 -> <init>
+com.batch.android.messaging.css.Parser -> com.batch.android.y.g:
+# {"id":"sourceFile","fileName":"Parser.java"}
+    java.lang.String currentToken -> i
+    com.batch.android.messaging.css.MediaQuery currentMediaQuery -> e
+    com.batch.android.messaging.css.Ruleset currentRuleset -> f
+    boolean shouldMergePreviousToken -> j
+    com.batch.android.messaging.css.Parser$State state -> c
+    com.batch.android.messaging.css.Parser$Substate substate -> d
+    com.batch.android.messaging.css.ImportFileProvider importFileProvider -> a
+    java.util.regex.Pattern IMPORT_PATTERN -> k
+    java.lang.String rawStylesheet -> b
+    com.batch.android.messaging.css.Declaration currentDeclaration -> g
+    com.batch.android.messaging.css.Document currentDocument -> h
+    1:1:void <clinit>():12:12 -> <clinit>
+    1:1:void <init>(com.batch.android.messaging.css.ImportFileProvider,java.lang.String):30:30 -> <init>
+    2:7:void <init>(com.batch.android.messaging.css.ImportFileProvider,java.lang.String):28:33 -> <init>
+    1:11:void fillImports():55:65 -> a
+    12:18:void fillImports():63:69 -> a
+    19:20:void consumeToken(java.lang.String):95:96 -> a
+    21:40:void consumeSpecialToken(char):100:119 -> a
+    41:41:void consumeSpecialToken(char):116:116 -> a
+    42:42:void consumeSpecialToken(char):113:113 -> a
+    43:43:void consumeSpecialToken(char):110:110 -> a
+    44:44:void consumeSpecialToken(char):107:107 -> a
+    1:4:com.batch.android.messaging.css.Document parse():37:40 -> b
+    1:2:void recoverLineEndingIfPossible():239:240 -> c
+    1:7:void reset():45:51 -> d
+    1:18:void scan():73:90 -> e
+    1:25:void switchOutOfPropertyNameState():194:218 -> f
+    1:14:void switchOutOfPropertyValueState():222:235 -> g
+    1:33:void switchOutOfRulesetState():157:189 -> h
+    1:26:void switchToRulesetState():127:152 -> i
+    1:1:void throwGenericParsingException():245:245 -> j
+com.batch.android.messaging.css.Parser$1 -> com.batch.android.y.g$a:
+# {"id":"sourceFile","fileName":"Parser.java"}
+    int[] $SwitchMap$com$batch$android$messaging$css$Parser$SpecialToken -> a
+    1:1:void <clinit>():102:102 -> <clinit>
+com.batch.android.messaging.css.Parser$SpecialToken -> com.batch.android.y.g$b:
+# {"id":"sourceFile","fileName":"Parser.java"}
+    com.batch.android.messaging.css.Parser$SpecialToken[] $VALUES -> g
+    com.batch.android.messaging.css.Parser$SpecialToken NEW_LINE -> f
+    com.batch.android.messaging.css.Parser$SpecialToken PROPERTY_END -> e
+    com.batch.android.messaging.css.Parser$SpecialToken PROPERTY_SEPARATOR -> d
+    com.batch.android.messaging.css.Parser$SpecialToken BLOCK_END -> c
+    com.batch.android.messaging.css.Parser$SpecialToken BLOCK_START -> b
+    com.batch.android.messaging.css.Parser$SpecialToken UNKNOWN -> a
+    1:6:void <clinit>():265:270 -> <clinit>
+    7:7:void <clinit>():264:264 -> <clinit>
+    1:1:void <init>(java.lang.String,int):264:264 -> <init>
+    1:1:com.batch.android.messaging.css.Parser$SpecialToken[] $values():264:264 -> a
+    2:2:com.batch.android.messaging.css.Parser$SpecialToken fromCharacter(char):285:285 -> a
+    3:5:com.batch.android.messaging.css.Parser$SpecialToken fromCharacter(char):279:281 -> a
+    6:6:com.batch.android.messaging.css.Parser$SpecialToken fromCharacter(char):277:277 -> a
+    7:15:com.batch.android.messaging.css.Parser$SpecialToken fromCharacter(char):275:283 -> a
+    1:1:com.batch.android.messaging.css.Parser$SpecialToken valueOf(java.lang.String):264:264 -> valueOf
+    1:1:com.batch.android.messaging.css.Parser$SpecialToken[] values():264:264 -> values
+com.batch.android.messaging.css.Parser$State -> com.batch.android.y.g$c:
+# {"id":"sourceFile","fileName":"Parser.java"}
+    com.batch.android.messaging.css.Parser$State MEDIA_QUERY -> b
+    com.batch.android.messaging.css.Parser$State ROOT -> a
+    com.batch.android.messaging.css.Parser$State[] $VALUES -> c
+    1:2:void <clinit>():253:254 -> <clinit>
+    3:3:void <clinit>():252:252 -> <clinit>
+    1:1:void <init>(java.lang.String,int):252:252 -> <init>
+    1:1:com.batch.android.messaging.css.Parser$State[] $values():252:252 -> a
+    1:1:com.batch.android.messaging.css.Parser$State valueOf(java.lang.String):252:252 -> valueOf
+    1:1:com.batch.android.messaging.css.Parser$State[] values():252:252 -> values
+com.batch.android.messaging.css.Parser$Substate -> com.batch.android.y.g$d:
+# {"id":"sourceFile","fileName":"Parser.java"}
+    com.batch.android.messaging.css.Parser$Substate[] $VALUES -> e
+    com.batch.android.messaging.css.Parser$Substate PROPERTY_VALUE -> d
+    com.batch.android.messaging.css.Parser$Substate PROPERTY_NAME -> c
+    com.batch.android.messaging.css.Parser$Substate RULESET -> b
+    com.batch.android.messaging.css.Parser$Substate SELECTOR -> a
+    1:4:void <clinit>():258:261 -> <clinit>
+    5:5:void <clinit>():257:257 -> <clinit>
+    1:1:void <init>(java.lang.String,int):257:257 -> <init>
+    1:1:com.batch.android.messaging.css.Parser$Substate[] $values():257:257 -> a
+    1:1:com.batch.android.messaging.css.Parser$Substate valueOf(java.lang.String):257:257 -> valueOf
+    1:1:com.batch.android.messaging.css.Parser$Substate[] values():257:257 -> values
+com.batch.android.messaging.css.Ruleset -> com.batch.android.y.h:
+# {"id":"sourceFile","fileName":"Ruleset.java"}
+    java.util.List declarations -> b
+    java.lang.String selector -> a
+    1:2:void <init>():12:13 -> <init>
+com.batch.android.messaging.css.Variable -> com.batch.android.y.i:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    1:1:void <init>():3:3 -> <init>
+com.batch.android.messaging.css.builtin.BuiltinStyleProvider -> com.batch.android.z.a:
+# {"id":"sourceFile","fileName":"BuiltinStyleProvider.java"}
+    java.util.Map metaStyles -> a
+    1:1:void <clinit>():15:15 -> <clinit>
+    1:1:void <init>():13:13 -> <init>
+    1:36:java.lang.String getContent(java.lang.String):20:55 -> a
+    37:50:java.lang.String getContent(java.lang.String):46:59 -> a
+    51:55:java.lang.String getContent(java.lang.String):44:48 -> a
+    56:56:java.lang.String getContent(java.lang.String):42:42 -> a
+    57:68:java.lang.String getContent(java.lang.String):40:51 -> a
+    69:73:java.util.Map generateMetaStyles():66:70 -> a
+com.batch.android.messaging.css.builtin.BuiltinStyles -> com.batch.android.z.b:
+# {"id":"sourceFile","fileName":"BuiltinStyles.java"}
+    java.lang.String IMAGE1_BASE -> g
+    java.lang.String BANNER_ICON_ADDON -> f
+    java.lang.String IMAGE1_FULLSCREEN -> i
+    java.lang.String IMAGE1_DETACHED -> h
+    java.lang.String WEBVIEW1 -> j
+    java.lang.String GENERIC1_H_CTA -> a
+    java.lang.String GENERIC1_BASE -> c
+    java.lang.String GENERIC1_V_CTA -> b
+    java.lang.String MODAL1 -> e
+    java.lang.String BANNER1 -> d
+    1:1:void <init>():8:8 -> <init>
+com.batch.android.messaging.fragment.AlertTemplateFragment -> com.batch.android.a0.a:
+# {"id":"sourceFile","fileName":"AlertTemplateFragment.java"}
+    java.lang.String TAG -> l
+    1:1:void <init>():29:29 -> <init>
+    1:2:com.batch.android.messaging.fragment.AlertTemplateFragment newInstance(com.batch.android.BatchMessage,com.batch.android.messaging.model.AlertMessage):23:24 -> a
+    3:3:void lambda$onCreateDialog$0(android.content.DialogInterface,int):63:63 -> a
+    4:5:void lambda$onCreateDialog$1(com.batch.android.messaging.model.AlertMessage,android.content.DialogInterface,int):69:70 -> a
+    boolean canAutoClose() -> g
+    int getAutoCloseDelayMillis() -> i
+    void onAutoCloseCountdownStarted() -> l
+    void performAutoClose() -> m
+    1:44:android.app.Dialog onCreateDialog(android.os.Bundle):35:78 -> onCreateDialog
+com.batch.android.messaging.fragment.BaseDialogFragment -> com.batch.android.a0.b:
+# {"id":"sourceFile","fileName":"BaseDialogFragment.java"}
+    android.util.LruCache imageCache -> h
+    android.os.Handler autoCloseHandler -> e
+    java.lang.String TAG -> i
+    com.batch.android.messaging.model.Message messageModel -> a
+    java.lang.String STATE_AUTOCLOSE_TARGET_UPTIME_KEY -> k
+    java.lang.String BUNDLE_KEY_MESSAGE_MODEL -> j
+    java.lang.ref.WeakReference eventListener -> b
+    long autoCloseAtUptime -> d
+    com.batch.android.module.MessagingModule messagingModule -> f
+    boolean automaticallyBeginAutoClose -> c
+    com.batch.android.MessagingAnalyticsDelegate analyticsDelegate -> g
+    1:1:void <init>():52:52 -> <init>
+    2:20:void <init>():37:55 -> <init>
+    1:4:void setMessageArguments(com.batch.android.BatchMessage,com.batch.android.messaging.model.Message):59:62 -> a
+    5:5:void setDialogEventListener(com.batch.android.messaging.fragment.DialogEventListener):121:121 -> a
+    6:6:void put(com.batch.android.messaging.AsyncImageDownloadTask$Result):128:128 -> a
+    1:1:com.batch.android.messaging.AsyncImageDownloadTask$Result get(java.lang.String):134:134 -> b
+    1:10:void beginAutoCloseCountdown():200:209 -> f
+    boolean canAutoClose() -> g
+    1:2:void dismissSafely():188:189 -> h
+    int getAutoCloseDelayMillis() -> i
+    1:6:com.batch.android.messaging.model.Message getMessageModel():111:116 -> j
+    1:3:com.batch.android.BatchMessage getPayloadMessage():101:103 -> k
+    void onAutoCloseCountdownStarted() -> l
+    void performAutoClose() -> m
+    1:4:void scheduleAutoCloseTask():213:216 -> n
+    1:3:void unscheduleAutoCloseTask():221:223 -> o
+    1:3:void onCancel(android.content.DialogInterface):179:181 -> onCancel
+    1:19:void onCreate(android.os.Bundle):67:85 -> onCreate
+    1:15:void onDismiss(android.content.DialogInterface):159:173 -> onDismiss
+    1:6:void onSaveInstanceState(android.os.Bundle):91:96 -> onSaveInstanceState
+    1:7:void onStart():141:147 -> onStart
+    1:2:void onStop():153:154 -> onStop
+com.batch.android.messaging.fragment.DialogEventListener -> com.batch.android.a0.c:
+# {"id":"sourceFile","fileName":"DialogEventListener.java"}
+com.batch.android.messaging.fragment.ImageTemplateFragment -> com.batch.android.a0.d:
+# {"id":"sourceFile","fileName":"ImageTemplateFragment.java"}
+    com.batch.android.messaging.AsyncImageDownloadTask heroDownloadTask -> s
+    boolean darkStatusbar -> n
+    boolean showStatusbar -> o
+    com.batch.android.messaging.view.formats.ImageFormatView imageFormatView -> l
+    boolean statusbarBackgroundTranslucent -> p
+    android.graphics.Bitmap heroBitmap -> r
+    com.batch.android.messaging.css.Document style -> m
+    java.lang.Integer statusbarBackgroundColor -> q
+    java.lang.String TAG -> u
+    boolean dismissed -> t
+    1:1:void <init>():61:61 -> <init>
+    2:22:void <init>():42:62 -> <init>
+    1:2:com.batch.android.messaging.fragment.ImageTemplateFragment newInstance(com.batch.android.BatchMessage,com.batch.android.messaging.model.ImageMessage):56:57 -> a
+    3:22:android.view.View getImageFormatView(android.content.Context):149:168 -> a
+    23:28:android.view.View getImageFormatView(android.content.Context):166:171 -> a
+    29:31:void onCloseAction():223:225 -> a
+    32:34:void onErrorAction(com.batch.android.messaging.model.MessagingError):245:247 -> a
+    1:8:void onGlobalAction():231:238 -> b
+    1:1:void onImageDisplayedAction():253:253 -> d
+    1:2:void dismiss():125:126 -> dismiss
+    1:2:void dismissAllowingStateLoss():137:138 -> dismissAllowingStateLoss
+    1:3:void onPanDismiss():258:260 -> e
+    1:1:boolean canAutoClose():201:201 -> g
+    1:2:void dismissSafely():143:144 -> h
+    1:1:int getAutoCloseDelayMillis():206:206 -> i
+    1:2:void onAutoCloseCountdownStarted():194:195 -> l
+    1:4:void performAutoClose():211:214 -> m
+    1:11:void onCreate(android.os.Bundle):67:77 -> onCreate
+    1:3:android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle):87:89 -> onCreateView
+    1:6:void onDestroyView():104:109 -> onDestroyView
+    1:1:void onDismiss(android.content.DialogInterface):114:114 -> onDismiss
+    1:3:void onStart():96:98 -> onStart
+    1:9:com.batch.android.messaging.css.Document getStyle():176:184 -> p
+    10:17:com.batch.android.messaging.css.Document getStyle():180:187 -> p
+com.batch.android.messaging.fragment.ListenableDialog -> com.batch.android.a0.e:
+# {"id":"sourceFile","fileName":"ListenableDialog.java"}
+    void setDialogEventListener(com.batch.android.messaging.fragment.DialogEventListener) -> a
+com.batch.android.messaging.fragment.ModalTemplateFragment -> com.batch.android.a0.f:
+# {"id":"sourceFile","fileName":"ModalTemplateFragment.java"}
+    com.batch.android.messaging.AsyncImageDownloadTask heroDownloadTask -> s
+    boolean darkStatusbar -> n
+    boolean showStatusbar -> o
+    boolean statusbarBackgroundTranslucent -> p
+    android.graphics.Bitmap heroBitmap -> r
+    com.batch.android.messaging.view.formats.BannerView bannerView -> l
+    com.batch.android.messaging.css.Document style -> m
+    java.lang.Integer statusbarBackgroundColor -> q
+    java.lang.String TAG -> u
+    boolean dismissed -> t
+    1:1:void <init>():67:67 -> <init>
+    2:13:void <init>():48:59 -> <init>
+    1:2:com.batch.android.messaging.fragment.ModalTemplateFragment newInstance(com.batch.android.BatchMessage,com.batch.android.messaging.model.ModalMessage):62:63 -> a
+    3:20:android.view.View getBannerView(android.content.Context):170:187 -> a
+    21:26:android.view.View getBannerView(android.content.Context):185:190 -> a
+    27:29:void onCloseAction():273:275 -> a
+    30:33:void onCTAAction(int,com.batch.android.messaging.model.CTA):281:284 -> a
+    1:8:void onGlobalAction():290:297 -> b
+    1:2:void dismiss():146:147 -> dismiss
+    1:2:void dismissAllowingStateLoss():158:159 -> dismissAllowingStateLoss
+    1:2:void onPanDismiss():304:305 -> e
+    1:1:boolean canAutoClose():251:251 -> g
+    1:2:void dismissSafely():164:165 -> h
+    1:1:int getAutoCloseDelayMillis():256:256 -> i
+    1:2:void onAutoCloseCountdownStarted():244:245 -> l
+    1:4:void performAutoClose():261:264 -> m
+    1:5:void onCreate(android.os.Bundle):71:75 -> onCreate
+    6:12:void onCreate(android.os.Bundle):73:79 -> onCreate
+    1:12:android.app.Dialog onCreateDialog(android.os.Bundle):84:95 -> onCreateDialog
+    1:3:android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle):108:110 -> onCreateView
+    1:6:void onDestroyView():125:130 -> onDestroyView
+    1:1:void onDismiss(android.content.DialogInterface):135:135 -> onDismiss
+    1:3:void onStart():117:119 -> onStart
+    1:9:com.batch.android.messaging.css.Document getStyle():195:203 -> p
+    10:17:com.batch.android.messaging.css.Document getStyle():199:206 -> p
+    1:25:void refreshStatusbarStyle():210:234 -> q
+com.batch.android.messaging.fragment.UniversalTemplateFragment -> com.batch.android.a0.g:
+# {"id":"sourceFile","fileName":"UniversalTemplateFragment.java"}
+    boolean darkStatusbar -> n
+    boolean showStatusbar -> o
+    boolean statusbarBackgroundTranslucent -> p
+    boolean mediaPlayerPrepared -> u
+    com.batch.android.messaging.css.Document style -> m
+    boolean dismissed -> w
+    android.view.Surface videoSurface -> v
+    com.batch.android.messaging.AsyncImageDownloadTask$Result heroDownloadResult -> r
+    com.batch.android.messaging.AsyncImageDownloadTask heroDownloadTask -> s
+    com.batch.android.messaging.view.formats.UniversalRootView view -> l
+    java.lang.String BUNDLE_KEY_MESSAGE_MODEL -> y
+    java.lang.String TAG -> x
+    java.lang.Integer statusbarBackgroundColor -> q
+    android.media.MediaPlayer mediaPlayer -> t
+    1:1:void <init>():82:82 -> <init>
+    2:17:void <init>():59:74 -> <init>
+    1:2:com.batch.android.messaging.fragment.UniversalTemplateFragment newInstance(com.batch.android.BatchMessage,com.batch.android.messaging.model.UniversalMessage):77:78 -> a
+    3:14:android.view.View getUniversalView(android.content.Context):234:245 -> a
+    15:18:void onCloseAction():340:343 -> a
+    19:24:void onCTAAction(int,com.batch.android.messaging.model.CTA):350:355 -> a
+    1:2:void onImageDownloadSuccess(com.batch.android.messaging.AsyncImageDownloadTask$Result):367:368 -> b
+    3:4:void onImageDownloadError(com.batch.android.messaging.model.MessagingError):373:374 -> b
+    1:1:void onImageDownloadStart():361:361 -> c
+    2:3:void displayImage(com.batch.android.messaging.AsyncImageDownloadTask$Result):378:379 -> c
+    1:2:void dismiss():210:211 -> dismiss
+    1:2:void dismissAllowingStateLoss():222:223 -> dismissAllowingStateLoss
+    1:1:boolean canAutoClose():318:318 -> g
+    1:2:void dismissSafely():228:229 -> h
+    1:1:int getAutoCloseDelayMillis():323:323 -> i
+    1:2:void onAutoCloseCountdownStarted():311:312 -> l
+    1:4:void performAutoClose():328:331 -> m
+    1:7:void onCreate(android.os.Bundle):86:92 -> onCreate
+    8:19:void onCreate(android.os.Bundle):88:99 -> onCreate
+    1:12:android.app.Dialog onCreateDialog(android.os.Bundle):104:115 -> onCreateDialog
+    1:47:android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle):128:174 -> onCreateView
+    1:6:void onDestroyView():182:187 -> onDestroyView
+    1:7:void onDismiss(android.content.DialogInterface):192:198 -> onDismiss
+    1:2:void onPrepared(android.media.MediaPlayer):386:387 -> onPrepared
+    1:6:void onSurfaceTextureAvailable(android.graphics.SurfaceTexture,int,int):401:406 -> onSurfaceTextureAvailable
+    1:7:boolean onSurfaceTextureDestroyed(android.graphics.SurfaceTexture):414:420 -> onSurfaceTextureDestroyed
+    1:9:com.batch.android.messaging.css.Document getStyle():249:257 -> p
+    10:17:com.batch.android.messaging.css.Document getStyle():253:260 -> p
+    1:25:void refreshStatusbarStyle():264:288 -> q
+    1:5:boolean shouldWaitForHeroImage():295:299 -> r
+    1:3:void startPlayingVideo():393:395 -> s
+com.batch.android.messaging.fragment.WebViewTemplateFragment -> com.batch.android.a0.h:
+# {"id":"sourceFile","fileName":"WebViewTemplateFragment.java"}
+    com.batch.android.messaging.view.formats.WebFormatView webView -> l
+    boolean darkStatusbar -> n
+    boolean showStatusbar -> o
+    boolean statusbarBackgroundTranslucent -> p
+    com.batch.android.messaging.css.Document style -> m
+    boolean dismissed -> r
+    int developmentMenuReloadItemID -> s
+    java.lang.Integer statusbarBackgroundColor -> q
+    java.lang.String TAG -> t
+    1:1:void <init>():75:75 -> <init>
+    2:21:void <init>():57:76 -> <init>
+    1:1:void lambda$showDevelopmentError$0(android.content.DialogInterface,int):0:0 -> a
+    2:3:com.batch.android.messaging.fragment.WebViewTemplateFragment newInstance(com.batch.android.BatchMessage,com.batch.android.messaging.model.WebViewMessage):70:71 -> a
+    4:21:android.view.View getWebFormatView(android.content.Context):202:219 -> a
+    22:27:android.view.View getWebFormatView(android.content.Context):217:222 -> a
+    28:28:void lambda$showDevelopmentError$1(com.batch.android.messaging.model.MessagingError,android.content.DialogInterface):330:330 -> a
+    29:31:void onCloseAction():339:341 -> a
+    32:32:void onDismissAction(java.lang.String):347:347 -> a
+    33:36:void onErrorAction(com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause,com.batch.android.messaging.model.MessagingError,java.lang.String):356:359 -> a
+    37:49:void onOpenDeeplinkAction(java.lang.String,java.lang.Boolean,java.lang.String):369:381 -> a
+    50:56:void onPerformAction(java.lang.String,com.batch.android.json.JSONObject,java.lang.String):389:395 -> a
+    1:17:boolean showDevelopmentError(com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause,com.batch.android.messaging.model.MessagingError,java.lang.String):287:303 -> b
+    18:18:boolean showDevelopmentError(com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause,com.batch.android.messaging.model.MessagingError,java.lang.String):295:295 -> b
+    19:19:boolean showDevelopmentError(com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause,com.batch.android.messaging.model.MessagingError,java.lang.String):292:292 -> b
+    20:63:boolean showDevelopmentError(com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause,com.batch.android.messaging.model.MessagingError,java.lang.String):289:332 -> b
+    1:3:void dismissForError(com.batch.android.messaging.model.MessagingError):273:275 -> c
+    1:2:void dismiss():178:179 -> dismiss
+    1:2:void dismissAllowingStateLoss():190:191 -> dismissAllowingStateLoss
+    boolean canAutoClose() -> g
+    1:2:void dismissSafely():196:197 -> h
+    int getAutoCloseDelayMillis() -> i
+    void onAutoCloseCountdownStarted() -> l
+    void performAutoClose() -> m
+    1:3:void onCreate(android.os.Bundle):81:83 -> onCreate
+    1:7:void onCreateContextMenu(android.view.ContextMenu,android.view.View,android.view.ContextMenu$ContextMenuInfo):150:156 -> onCreateContextMenu
+    1:12:android.app.Dialog onCreateDialog(android.os.Bundle):121:132 -> onCreateDialog
+    1:14:android.view.View onCreateView(android.view.LayoutInflater,android.view.ViewGroup,android.os.Bundle):94:107 -> onCreateView
+    1:6:void onDestroyView():140:145 -> onDestroyView
+    1:2:boolean onMenuItemClick(android.view.MenuItem):163:164 -> onMenuItemClick
+    1:2:void onSaveInstanceState(android.os.Bundle):115:116 -> onSaveInstanceState
+    1:9:com.batch.android.messaging.css.Document getStyle():258:266 -> p
+    10:17:com.batch.android.messaging.css.Document getStyle():262:269 -> p
+    1:25:void refreshStatusbarStyle():227:251 -> q
+com.batch.android.messaging.fragment.WebViewTemplateFragment$1 -> com.batch.android.a0.h$a:
+# {"id":"sourceFile","fileName":"WebViewTemplateFragment.java"}
+    int[] $SwitchMap$com$batch$android$BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause -> a
+    1:1:void <clinit>():287:287 -> <clinit>
+com.batch.android.messaging.gif.BasicBitmapProvider -> com.batch.android.b0.a:
+# {"id":"sourceFile","fileName":"BasicBitmapProvider.java"}
+    1:1:void <init>():9:9 -> <init>
+    1:1:void release(byte[]):0:0 -> a
+    2:2:void release(int[]):0:0 -> a
+    3:3:android.graphics.Bitmap obtain(int,int,android.graphics.Bitmap$Config):14:14 -> a
+    4:4:void release(android.graphics.Bitmap):19:19 -> a
+    5:5:byte[] obtainByteArray(int):25:25 -> a
+    1:1:int[] obtainIntArray(int):36:36 -> b
+com.batch.android.messaging.gif.GifDecoder -> com.batch.android.b0.b:
+# {"id":"sourceFile","fileName":"GifDecoder.java"}
+    int STATUS_PARTIAL_DECODE -> d
+    int TOTAL_ITERATION_COUNT_FOREVER -> e
+    int STATUS_FORMAT_ERROR -> b
+    int STATUS_OPEN_ERROR -> c
+    int STATUS_OK -> a
+    int getDelay(int) -> a
+    int read(java.io.InputStream,int) -> a
+    int read(byte[]) -> a
+    void setData(com.batch.android.messaging.gif.GifHeader,java.nio.ByteBuffer) -> a
+    void setData(com.batch.android.messaging.gif.GifHeader,java.nio.ByteBuffer,int) -> a
+    void setData(com.batch.android.messaging.gif.GifHeader,byte[]) -> a
+    void setDefaultBitmapConfig(android.graphics.Bitmap$Config) -> a
+    java.nio.ByteBuffer getData() -> e
+    int getCurrentFrameIndex() -> f
+    int getFrameCount() -> g
+    int getByteSize() -> h
+    int getNextDelay() -> i
+    int getLoopCount() -> j
+    android.graphics.Bitmap getNextFrame() -> k
+    int getWidth() -> l
+    void advance() -> m
+    int getNetscapeLoopCount() -> n
+    int getTotalIterationCount() -> o
+    int getHeight() -> p
+    void resetFrameIndex() -> q
+    int getStatus() -> r
+com.batch.android.messaging.gif.GifDecoder$BitmapProvider -> com.batch.android.b0.b$a:
+# {"id":"sourceFile","fileName":"GifDecoder.java"}
+    android.graphics.Bitmap obtain(int,int,android.graphics.Bitmap$Config) -> a
+    byte[] obtainByteArray(int) -> a
+    void release(android.graphics.Bitmap) -> a
+    void release(byte[]) -> a
+    void release(int[]) -> a
+    int[] obtainIntArray(int) -> b
+com.batch.android.messaging.gif.GifDecoder$GifDecodeStatus -> com.batch.android.b0.b$b:
+# {"id":"sourceFile","fileName":"GifDecoder.java"}
+com.batch.android.messaging.gif.GifDrawable -> com.batch.android.b0.c:
+# {"id":"sourceFile","fileName":"GifDrawable.java"}
+    java.util.Queue nextFrames -> g
+    int MESSAGE_RAN_OUT_OF_MEMORY -> n
+    int BUFFER_SIZE -> l
+    int MESSAGE_FRAME_PRODUCED -> m
+    long nextFrameDeadline -> h
+    int dpi -> b
+    com.batch.android.messaging.gif.GifDrawable$FrameInfo currentFrame -> f
+    java.util.concurrent.Executor frameProducerExecutor -> k
+    com.batch.android.messaging.gif.GifDecoder gifDecoder -> e
+    android.graphics.Paint paint -> a
+    java.lang.Runnable produceNextFrameRunnable -> j
+    boolean animating -> c
+    android.os.Handler mainThreadHandler -> i
+    boolean ranOutOfMemory -> d
+    1:1:void <init>(android.content.Context,com.batch.android.messaging.gif.GifDecoder):58:58 -> <init>
+    2:28:void <init>(android.content.Context,com.batch.android.messaging.gif.GifDecoder):38:64 -> <init>
+    1:1:void access$000(com.batch.android.messaging.gif.GifDrawable,com.batch.android.messaging.gif.GifDrawable$FrameInfo):25:25 -> a
+    2:2:void access$100(com.batch.android.messaging.gif.GifDrawable):25:25 -> a
+    3:14:void produceNextFrame():72:83 -> a
+    15:15:void onFrameProduced(com.batch.android.messaging.gif.GifDrawable$FrameInfo):89:89 -> a
+    1:9:void ranOutOfMemory():130:138 -> b
+    1:28:void requestNewFrameIfNeeded():94:121 -> c
+    1:4:void draw(android.graphics.Canvas):149:152 -> draw
+    1:4:int getIntrinsicHeight():175:178 -> getIntrinsicHeight
+    1:4:int getIntrinsicWidth():184:187 -> getIntrinsicWidth
+    1:1:int getOpacity():166:166 -> getOpacity
+    1:1:boolean isRunning():210:210 -> isRunning
+    1:1:void setAlpha(int):158:158 -> setAlpha
+    1:5:void start():196:200 -> start
+    1:1:void stop():205:205 -> stop
+com.batch.android.messaging.gif.GifDrawable$1 -> com.batch.android.b0.c$a:
+# {"id":"sourceFile","fileName":"GifDrawable.java"}
+    com.batch.android.messaging.gif.GifDrawable this$0 -> a
+    1:1:void <init>(com.batch.android.messaging.gif.GifDrawable,android.os.Looper):43:43 -> <init>
+    1:4:void handleMessage(android.os.Message):46:49 -> handleMessage
+com.batch.android.messaging.gif.GifDrawable$FrameInfo -> com.batch.android.b0.c$b:
+# {"id":"sourceFile","fileName":"GifDrawable.java"}
+    android.graphics.Bitmap bitmap -> a
+    int delay -> b
+    1:3:void <init>(android.graphics.Bitmap,int):218:220 -> <init>
+com.batch.android.messaging.gif.GifFrame -> com.batch.android.b0.d:
+# {"id":"sourceFile","fileName":"GifFrame.java"}
+    int DISPOSAL_BACKGROUND -> n
+    int DISPOSAL_PREVIOUS -> o
+    int DISPOSAL_UNSPECIFIED -> l
+    int DISPOSAL_NONE -> m
+    int bufferFrameStart -> j
+    int transIndex -> h
+    int delay -> i
+    int dispose -> g
+    int ih -> d
+    int iy -> b
+    int iw -> c
+    int ix -> a
+    boolean interlace -> e
+    boolean transparency -> f
+    int[] lct -> k
+    1:1:void <init>():13:13 -> <init>
+com.batch.android.messaging.gif.GifFrame$GifDisposalMethod -> com.batch.android.b0.d$a:
+# {"id":"sourceFile","fileName":"GifFrame.java"}
+com.batch.android.messaging.gif.GifHeader -> com.batch.android.b0.e:
+# {"id":"sourceFile","fileName":"GifHeader.java"}
+    int NETSCAPE_LOOP_COUNT_FOREVER -> n
+    int NETSCAPE_LOOP_COUNT_DOES_NOT_EXIST -> o
+    int bgColor -> l
+    int loopCount -> m
+    int bgIndex -> j
+    com.batch.android.messaging.gif.GifFrame currentFrame -> d
+    int pixelAspect -> k
+    int gctSize -> i
+    int width -> f
+    int height -> g
+    int[] gct -> a
+    int status -> b
+    int frameCount -> c
+    java.util.List frames -> e
+    boolean gctFlag -> h
+    1:51:void <init>():15:65 -> <init>
+    1:1:int getHeight():68:68 -> a
+    1:1:int getNumFrames():76:76 -> b
+    1:1:int getStatus():84:84 -> c
+    1:1:int getWidth():72:72 -> d
+com.batch.android.messaging.gif.GifHeaderParser -> com.batch.android.b0.f:
+# {"id":"sourceFile","fileName":"GifHeaderParser.java"}
+    int GCE_MASK_DISPOSAL_METHOD -> n
+    int GCE_DISPOSAL_METHOD_SHIFT -> o
+    int LABEL_COMMENT_EXTENSION -> l
+    int LABEL_PLAIN_TEXT_EXTENSION -> m
+    int LABEL_GRAPHIC_CONTROL_EXTENSION -> j
+    int LABEL_APPLICATION_EXTENSION -> k
+    int EXTENSION_INTRODUCER -> h
+    com.batch.android.messaging.gif.GifHeader header -> c
+    int TRAILER -> i
+    int MASK_INT_LOWEST_BYTE -> f
+    int IMAGE_SEPARATOR -> g
+    int blockSize -> d
+    java.nio.ByteBuffer rawData -> b
+    byte[] block -> a
+    int MAX_BLOCK_SIZE -> x
+    int MIN_FRAME_DELAY -> v
+    int DEFAULT_FRAME_DELAY -> w
+    int LSD_MASK_GCT_FLAG -> t
+    int LSD_MASK_GCT_SIZE -> u
+    int DESCRIPTOR_MASK_INTERLACE_FLAG -> r
+    int DESCRIPTOR_MASK_LCT_SIZE -> s
+    java.lang.String TAG -> e
+    int GCE_MASK_TRANSPARENT_COLOR_FLAG -> p
+    int DESCRIPTOR_MASK_LCT_FLAG -> q
+    1:114:void <init>():21:134 -> <init>
+    1:3:com.batch.android.messaging.gif.GifHeader parse(java.nio.ByteBuffer):137:139 -> a
+    4:7:com.batch.android.messaging.gif.GifHeaderParser setData(byte[]):152:155 -> a
+    8:9:void clear():161:162 -> a
+    10:30:int[] readColorTable(int):432:452 -> a
+    1:4:com.batch.android.messaging.gif.GifHeaderParser setData(java.nio.ByteBuffer):143:146 -> b
+    5:57:void readContents(int):217:269 -> b
+    58:92:void readContents(int):225:259 -> b
+    93:106:void readContents(int):239:252 -> b
+    107:127:void readContents(int):235:255 -> b
+    128:128:boolean err():526:526 -> b
+    1:5:boolean isAnimated():197:201 -> c
+    1:16:com.batch.android.messaging.gif.GifHeader parseHeader():174:189 -> d
+    17:17:com.batch.android.messaging.gif.GifHeader parseHeader():175:175 -> d
+    1:3:int read():510:512 -> e
+    1:41:void readBitmap():318:358 -> f
+    1:16:void readBlock():484:499 -> g
+    1:1:void readContents():208:208 -> h
+    1:32:void readGraphicControlExt():279:310 -> i
+    1:12:void readHeader():380:391 -> j
+    1:20:void readLSD():400:419 -> k
+    1:8:void readNetscapeExt():366:373 -> l
+    1:1:int readShort():522:522 -> m
+    1:4:void reset():166:169 -> n
+    1:3:void skip():474:476 -> o
+    1:3:void skipImageData():463:465 -> p
+com.batch.android.messaging.gif.GifHelper -> com.batch.android.b0.g:
+# {"id":"sourceFile","fileName":"GifHelper.java"}
+    int NEEDED_BYTES_FOR_TYPE_CHECK -> a
+    1:1:void <init>():8:8 -> <init>
+    1:8:boolean isPotentiallyAGif(int[]):19:26 -> a
+    9:14:boolean dataStartsWith(int[],byte[]):34:39 -> a
+    15:19:com.batch.android.messaging.gif.GifDrawable getDrawableForBytes(android.content.Context,byte[],boolean):53:57 -> a
+com.batch.android.messaging.gif.StandardGifDecoder -> com.batch.android.b0.h:
+# {"id":"sourceFile","fileName":"StandardGifDecoder.java"}
+    byte[] mainPixels -> o
+    short[] prefix -> l
+    java.nio.ByteBuffer rawData -> i
+    byte[] suffix -> m
+    android.graphics.Bitmap$Config bitmapConfig -> z
+    int COLOR_TRANSPARENT_BLACK -> G
+    int BYTES_PER_INTEGER -> E
+    int NULL_CODE -> C
+    int[] act -> f
+    int downsampledHeight -> w
+    byte[] block -> j
+    int[] mainScratch -> p
+    int status -> u
+    com.batch.android.messaging.gif.GifHeaderParser parser -> k
+    int framePointer -> q
+    android.graphics.Bitmap previousImage -> s
+    byte[] pixelStack -> n
+    int MASK_INT_LOWEST_BYTE -> F
+    int INITIAL_FRAME_POINTER -> D
+    int MAX_STACK_SIZE -> B
+    boolean savePrevious -> t
+    int[] pct -> g
+    com.batch.android.messaging.gif.GifHeader header -> r
+    int downsampledWidth -> x
+    java.lang.Boolean isFirstFrameTransparent -> y
+    int sampleSize -> v
+    java.lang.String TAG -> A
+    com.batch.android.messaging.gif.GifDecoder$BitmapProvider bitmapProvider -> h
+    1:1:void <init>(com.batch.android.messaging.gif.GifDecoder$BitmapProvider,java.nio.ByteBuffer):139:139 -> <init>
+    2:2:void <init>(com.batch.android.messaging.gif.GifDecoder$BitmapProvider,com.batch.android.messaging.gif.GifHeader,java.nio.ByteBuffer):144:144 -> <init>
+    3:4:void <init>(com.batch.android.messaging.gif.GifDecoder$BitmapProvider,com.batch.android.messaging.gif.GifHeader,java.nio.ByteBuffer,int):153:154 -> <init>
+    5:5:void <init>(com.batch.android.messaging.gif.GifDecoder$BitmapProvider):157:157 -> <init>
+    6:72:void <init>(com.batch.android.messaging.gif.GifDecoder$BitmapProvider):93:159 -> <init>
+    1:2:int getDelay(int):191:192 -> a
+    3:27:int read(java.io.InputStream,int):312:336 -> a
+    28:28:void setData(com.batch.android.messaging.gif.GifHeader,byte[]):361:361 -> a
+    29:29:void setData(com.batch.android.messaging.gif.GifHeader,java.nio.ByteBuffer):366:366 -> a
+    30:54:void setData(com.batch.android.messaging.gif.GifHeader,java.nio.ByteBuffer,int):375:399 -> a
+    55:55:void setData(com.batch.android.messaging.gif.GifHeader,java.nio.ByteBuffer,int):372:372 -> a
+    56:59:com.batch.android.messaging.gif.GifHeaderParser getHeaderParser():404:407 -> a
+    60:65:int read(byte[]):413:418 -> a
+    66:72:void setDefaultBitmapConfig(android.graphics.Bitmap$Config):424:430 -> a
+    73:120:android.graphics.Bitmap setPixels(com.batch.android.messaging.gif.GifFrame,com.batch.android.messaging.gif.GifFrame):439:486 -> a
+    121:139:android.graphics.Bitmap setPixels(com.batch.android.messaging.gif.GifFrame,com.batch.android.messaging.gif.GifFrame):483:501 -> a
+    140:155:android.graphics.Bitmap setPixels(com.batch.android.messaging.gif.GifFrame,com.batch.android.messaging.gif.GifFrame):499:514 -> a
+    156:245:void copyCopyIntoScratchRobust(com.batch.android.messaging.gif.GifFrame):564:653 -> a
+    246:280:int averageColorsNear(int,int,int):668:702 -> a
+    1:42:void copyIntoScratchFast(com.batch.android.messaging.gif.GifFrame):519:560 -> b
+    43:45:android.graphics.Bitmap getNextBitmap():864:866 -> b
+    1:123:void decodeBitmapData(com.batch.android.messaging.gif.GifFrame):717:839 -> c
+    124:128:int readBlock():855:859 -> c
+    1:15:void clear():341:355 -> clear
+    1:1:int readByte():846:846 -> d
+    1:1:java.nio.ByteBuffer getData():175:175 -> e
+    1:1:int getCurrentFrameIndex():213:213 -> f
+    1:1:int getFrameCount():208:208 -> g
+    1:1:int getByteSize():248:248 -> h
+    1:5:int getNextDelay():199:203 -> i
+    1:1:int getLoopCount():224:224 -> j
+    1:51:android.graphics.Bitmap getNextFrame():254:304 -> k
+    52:53:android.graphics.Bitmap getNextFrame():264:265 -> k
+    1:1:int getWidth():164:164 -> l
+    1:1:void advance():185:185 -> m
+    1:1:int getNetscapeLoopCount():232:232 -> n
+    1:1:int getTotalIterationCount():237:237 -> o
+    1:1:int getHeight():169:169 -> p
+    1:1:void resetFrameIndex():218:218 -> q
+    1:1:int getStatus():180:180 -> r
+com.batch.android.messaging.model.Action -> com.batch.android.c0.a:
+# {"id":"sourceFile","fileName":"Action.java"}
+    com.batch.android.json.JSONObject args -> b
+    java.lang.String action -> a
+    1:3:void <init>(java.lang.String,com.batch.android.json.JSONObject):13:15 -> <init>
+    1:1:boolean isDismissAction():19:19 -> a
+com.batch.android.messaging.model.AlertMessage -> com.batch.android.c0.b:
+# {"id":"sourceFile","fileName":"AlertMessage.java"}
+    java.lang.String titleText -> g
+    java.lang.String cancelButtonText -> h
+    com.batch.android.messaging.model.CTA acceptCTA -> i
+    1:1:void <init>():5:5 -> <init>
+com.batch.android.messaging.model.BannerMessage -> com.batch.android.c0.c:
+# {"id":"sourceFile","fileName":"BannerMessage.java"}
+    1:1:void <init>():5:5 -> <init>
+com.batch.android.messaging.model.BaseBannerMessage -> com.batch.android.c0.d:
+# {"id":"sourceFile","fileName":"BaseBannerMessage.java"}
+    java.lang.String css -> g
+    long globalTapDelay -> j
+    com.batch.android.messaging.model.Action globalTapAction -> i
+    boolean showCloseButton -> o
+    java.lang.String titleText -> h
+    boolean allowSwipeToDismiss -> k
+    java.lang.String imageDescription -> m
+    java.lang.String imageURL -> l
+    java.util.List ctas -> n
+    int autoCloseDelay -> p
+    com.batch.android.messaging.model.BaseBannerMessage$CTADirection ctaDirection -> q
+    1:15:void <init>():7:21 -> <init>
+com.batch.android.messaging.model.BaseBannerMessage$CTADirection -> com.batch.android.c0.d$a:
+# {"id":"sourceFile","fileName":"BaseBannerMessage.java"}
+    com.batch.android.messaging.model.BaseBannerMessage$CTADirection[] $VALUES -> c
+    com.batch.android.messaging.model.BaseBannerMessage$CTADirection VERTICAL -> b
+    com.batch.android.messaging.model.BaseBannerMessage$CTADirection HORIZONTAL -> a
+    1:2:void <clinit>():24:25 -> <clinit>
+    3:3:void <clinit>():23:23 -> <clinit>
+    1:1:void <init>(java.lang.String,int):23:23 -> <init>
+    1:1:com.batch.android.messaging.model.BaseBannerMessage$CTADirection[] $values():23:23 -> a
+    1:1:com.batch.android.messaging.model.BaseBannerMessage$CTADirection valueOf(java.lang.String):23:23 -> valueOf
+    1:1:com.batch.android.messaging.model.BaseBannerMessage$CTADirection[] values():23:23 -> values
+com.batch.android.messaging.model.CTA -> com.batch.android.c0.e:
+# {"id":"sourceFile","fileName":"CTA.java"}
+    java.lang.String label -> c
+    1:2:void <init>(java.lang.String,java.lang.String,com.batch.android.json.JSONObject):13:14 -> <init>
+com.batch.android.messaging.model.ImageMessage -> com.batch.android.c0.f:
+# {"id":"sourceFile","fileName":"ImageMessage.java"}
+    java.lang.String css -> g
+    int autoCloseDelay -> n
+    long globalTapDelay -> i
+    boolean isFullscreen -> o
+    java.lang.String imageURL -> k
+    boolean allowSwipeToDismiss -> j
+    java.lang.String imageDescription -> l
+    com.batch.android.messaging.Size2D imageSize -> m
+    com.batch.android.messaging.model.Action globalTapAction -> h
+    1:1:void <init>():6:6 -> <init>
+com.batch.android.messaging.model.Message -> com.batch.android.c0.g:
+# {"id":"sourceFile","fileName":"Message.java"}
+    com.batch.android.json.JSONObject eventData -> e
+    java.lang.String messageIdentifier -> a
+    java.lang.String bodyText -> c
+    java.lang.String devTrackingIdentifier -> b
+    com.batch.android.messaging.model.Message$Source source -> f
+    java.lang.String bodyRawHtml -> d
+    1:12:void <init>():10:21 -> <init>
+    1:5:java.lang.CharSequence getBody():28:32 -> a
+    1:12:android.text.Spanned getSpannedBody():37:48 -> b
+com.batch.android.messaging.model.Message$Source -> com.batch.android.c0.g$a:
+# {"id":"sourceFile","fileName":"Message.java"}
+    com.batch.android.messaging.model.Message$Source LOCAL -> c
+    com.batch.android.messaging.model.Message$Source LANDING -> b
+    com.batch.android.messaging.model.Message$Source UNKNOWN -> a
+    com.batch.android.messaging.model.Message$Source[] $VALUES -> e
+    com.batch.android.messaging.model.Message$Source INBOX_LANDING -> d
+    1:4:void <clinit>():56:59 -> <clinit>
+    5:5:void <clinit>():55:55 -> <clinit>
+    1:1:void <init>(java.lang.String,int):55:55 -> <init>
+    1:1:com.batch.android.messaging.model.Message$Source[] $values():55:55 -> a
+    1:1:com.batch.android.messaging.model.Message$Source valueOf(java.lang.String):55:55 -> valueOf
+    1:1:com.batch.android.messaging.model.Message$Source[] values():55:55 -> values
+com.batch.android.messaging.model.MessagingError -> com.batch.android.c0.h:
+# {"id":"sourceFile","fileName":"MessagingError.java"}
+    com.batch.android.messaging.model.MessagingError SERVER_FAILURE -> c
+    com.batch.android.messaging.model.MessagingError UNKNOWN -> b
+    com.batch.android.messaging.model.MessagingError[] $VALUES -> f
+    com.batch.android.messaging.model.MessagingError CLIENT_NETWORK -> e
+    com.batch.android.messaging.model.MessagingError INVALID_RESPONSE -> d
+    int code -> a
+    1:16:void <clinit>():10:25 -> <clinit>
+    17:17:void <clinit>():6:6 -> <clinit>
+    1:2:void <init>(java.lang.String,int,int):29:30 -> <init>
+    1:1:com.batch.android.messaging.model.MessagingError[] $values():6:6 -> a
+    1:1:com.batch.android.messaging.model.MessagingError valueOf(java.lang.String):6:6 -> valueOf
+    1:1:com.batch.android.messaging.model.MessagingError[] values():6:6 -> values
+com.batch.android.messaging.model.ModalMessage -> com.batch.android.c0.i:
+# {"id":"sourceFile","fileName":"ModalMessage.java"}
+    1:1:void <init>():5:5 -> <init>
+com.batch.android.messaging.model.UniversalMessage -> com.batch.android.c0.j:
+# {"id":"sourceFile","fileName":"UniversalMessage.java"}
+    java.lang.String css -> g
+    java.lang.String titleText -> i
+    java.lang.String headingText -> h
+    java.lang.String subtitleText -> j
+    java.lang.String videoURL -> m
+    java.lang.String heroImageURL -> l
+    java.lang.Boolean showCloseButton -> o
+    java.lang.String heroDescription -> n
+    java.lang.Boolean attachCTAsBottom -> p
+    java.lang.Boolean flipHeroVertical -> s
+    java.lang.Boolean flipHeroHorizontal -> t
+    java.lang.Boolean stackCTAsHorizontally -> q
+    java.lang.Boolean stretchCTAsHorizontally -> r
+    java.lang.Double heroSplitRatio -> u
+    int autoCloseDelay -> v
+    java.util.List ctas -> k
+    1:9:void <init>():9:17 -> <init>
+    1:6:java.lang.String getVoiceString():32:37 -> c
+com.batch.android.messaging.model.WebViewMessage -> com.batch.android.c0.k:
+# {"id":"sourceFile","fileName":"WebViewMessage.java"}
+    java.lang.String css -> g
+    java.lang.String url -> h
+    boolean openDeeplinksInApp -> j
+    boolean devMode -> k
+    int timeout -> i
+    1:1:void <init>():5:5 -> <init>
+com.batch.android.messaging.view.AnimatedCloseButton -> com.batch.android.messaging.view.a:
+# {"id":"sourceFile","fileName":"AnimatedCloseButton.java"}
+    long duration -> v
+    long animationEndDate -> u
+    boolean animating -> t
+    1:1:void <init>(android.content.Context):21:21 -> <init>
+    2:4:void <init>(android.content.Context):16:18 -> <init>
+    5:5:void <init>(android.content.Context,android.util.AttributeSet):25:25 -> <init>
+    6:8:void <init>(android.content.Context,android.util.AttributeSet):16:18 -> <init>
+    9:9:void <init>(android.content.Context,android.util.AttributeSet,int):29:29 -> <init>
+    10:12:void <init>(android.content.Context,android.util.AttributeSet,int):16:18 -> <init>
+    13:13:void <init>(android.content.Context,android.util.AttributeSet,int,int):34:34 -> <init>
+    14:16:void <init>(android.content.Context,android.util.AttributeSet,int,int):16:18 -> <init>
+    1:5:void animateForDuration(long):38:42 -> a
+    1:1:boolean isAnimating():46:46 -> d
+    1:12:void onAnimationFrame():52:63 -> e
+    1:3:void onDraw(android.graphics.Canvas):69:71 -> onDraw
+    1:11:void onRestoreInstanceState(android.os.Parcelable):89:99 -> onRestoreInstanceState
+    1:4:android.os.Parcelable onSaveInstanceState():80:83 -> onSaveInstanceState
+com.batch.android.messaging.view.AnimatedCountdownSavedState -> com.batch.android.messaging.view.AnimatedCountdownSavedState:
+# {"id":"sourceFile","fileName":"AnimatedCountdownSavedState.java"}
+    long animationEndDate -> b
+    long duration -> c
+    boolean animating -> a
+    1:1:void <clinit>():64:64 -> <clinit>
+    1:1:void <init>(android.os.Parcel):20:20 -> <init>
+    2:8:void <init>(android.os.Parcel):15:21 -> <init>
+    9:9:void <init>(android.os.Parcel,java.lang.ClassLoader):27:27 -> <init>
+    10:23:void <init>(android.os.Parcel,java.lang.ClassLoader):15:28 -> <init>
+    24:24:void <init>(android.os.Parcelable):33:33 -> <init>
+    25:27:void <init>(android.os.Parcelable):15:17 -> <init>
+    1:3:void readParcel(android.os.Parcel,java.lang.ClassLoader):37:39 -> a
+    1:1:java.lang.String toString():53:53 -> toString
+    1:4:void writeToParcel(android.os.Parcel,int):44:47 -> writeToParcel
+com.batch.android.messaging.view.AnimatedCountdownSavedState$1 -> com.batch.android.messaging.view.AnimatedCountdownSavedState$a:
+# {"id":"sourceFile","fileName":"AnimatedCountdownSavedState.java"}
+    1:1:void <init>():64:64 -> <init>
+    1:1:com.batch.android.messaging.view.AnimatedCountdownSavedState createFromParcel(android.os.Parcel):67:67 -> a
+    2:2:com.batch.android.messaging.view.AnimatedCountdownSavedState[] newArray(int):71:71 -> a
+    1:1:java.lang.Object createFromParcel(android.os.Parcel):64:64 -> createFromParcel
+    1:1:java.lang.Object[] newArray(int):64:64 -> newArray
+com.batch.android.messaging.view.CloseButton -> com.batch.android.messaging.view.CloseButton:
+# {"id":"sourceFile","fileName":"CloseButton.java"}
+    boolean showBorder -> n
+    float countdownProgress -> f
+    java.lang.String TAG -> o
+    int computedGlyphPadding -> g
+    int glyphPadding -> d
+    int glyphWidth -> e
+    int backgroundColor -> b
+    android.graphics.RectF countdownOval -> l
+    int glyphColor -> c
+    int padding -> a
+    android.graphics.RectF borderOval -> m
+    android.graphics.Paint borderPaint -> j
+    android.graphics.Paint glyphPaint -> i
+    android.graphics.Paint backgroundPaint -> h
+    android.graphics.drawable.Drawable foregoundDrawable -> k
+    int UNSCALED_GLYPH_PADDING_PX -> r
+    int UNSCALED_GLYPH_WIDTH_PX -> s
+    int DEFAULT_SIZE_DP -> p
+    int DEFAULT_PADDING_DP -> q
+    1:1:void <init>(android.content.Context):66:66 -> <init>
+    2:32:void <init>(android.content.Context):37:67 -> <init>
+    33:33:void <init>(android.content.Context,android.util.AttributeSet):71:71 -> <init>
+    34:69:void <init>(android.content.Context,android.util.AttributeSet):37:72 -> <init>
+    70:70:void <init>(android.content.Context,android.util.AttributeSet,int):76:76 -> <init>
+    71:111:void <init>(android.content.Context,android.util.AttributeSet,int):37:77 -> <init>
+    112:112:void <init>(android.content.Context,android.util.AttributeSet,int,int):82:82 -> <init>
+    113:159:void <init>(android.content.Context,android.util.AttributeSet,int,int):37:83 -> <init>
+    1:33:void init():87:119 -> a
+    34:71:void applyStyleRules(java.util.Map):322:359 -> a
+    1:9:void recomputeMetrics():144:152 -> b
+    10:17:void recomputeMetrics():151:158 -> b
+    18:18:void recomputeMetrics():156:156 -> b
+    19:32:void recomputeMetrics():155:168 -> b
+    1:18:void refreshPaint():123:140 -> c
+    1:5:void draw(android.graphics.Canvas):292:296 -> draw
+    1:3:void drawableHotspotChanged(float,float):395:397 -> drawableHotspotChanged
+    1:7:void drawableStateChanged():370:376 -> drawableStateChanged
+    1:1:android.view.ViewOutlineProvider getOutlineProvider():249:249 -> getOutlineProvider
+    1:1:int getPadding():212:212 -> getPadding
+    1:3:void jumpDrawablesToCurrentState():386:388 -> jumpDrawablesToCurrentState
+    1:7:void onDraw(android.graphics.Canvas):264:270 -> onDraw
+    8:19:void onDraw(android.graphics.Canvas):266:277 -> onDraw
+    20:33:void onDraw(android.graphics.Canvas):273:286 -> onDraw
+    1:16:void onMeasure(int,int):302:317 -> onMeasure
+    1:5:void onSizeChanged(int,int,int,int):254:258 -> onSizeChanged
+    1:2:void setBackgroundColor(int):173:174 -> setBackgroundColor
+    1:2:void setCountdownProgress(float):221:222 -> setCountdownProgress
+    1:2:void setForegoundDrawable(android.graphics.drawable.Drawable):183:184 -> setForegoundDrawable
+    1:2:void setGlyphColor(int):178:179 -> setGlyphColor
+    1:3:void setGlyphPadding(int):231:233 -> setGlyphPadding
+    1:3:void setGlyphWidth(int):242:244 -> setGlyphWidth
+    1:1:void setPadding(int,int,int,int):202:202 -> setPadding
+    2:3:void setPadding(int):207:208 -> setPadding
+    1:2:void setShowBorder(boolean):191:192 -> setShowBorder
+    1:1:boolean verifyDrawable(android.graphics.drawable.Drawable):381:381 -> verifyDrawable
+com.batch.android.messaging.view.CloseButton$1 -> com.batch.android.messaging.view.CloseButton$a:
+# {"id":"sourceFile","fileName":"CloseButton.java"}
+    com.batch.android.messaging.view.CloseButton this$0 -> a
+    1:1:void <init>(com.batch.android.messaging.view.CloseButton):89:89 -> <init>
+    1:5:void getOutline(android.view.View,android.graphics.Outline):92:96 -> getOutline
+    6:6:void getOutline(android.view.View,android.graphics.Outline):92:92 -> getOutline
+com.batch.android.messaging.view.CountdownView -> com.batch.android.d0.a:
+# {"id":"sourceFile","fileName":"CountdownView.java"}
+    long animationEndDate -> b
+    long duration -> c
+    int MAX_PROGRESS -> e
+    boolean animating -> a
+    java.lang.String TAG -> d
+    1:1:void <init>(android.content.Context):35:35 -> <init>
+    2:10:void <init>(android.content.Context):30:38 -> <init>
+    1:8:void applyStyleRules(java.util.Map):43:50 -> a
+    9:13:void animateForDuration(long):57:61 -> a
+    14:25:void onAnimationFrame():71:82 -> a
+    1:1:boolean isAnimating():65:65 -> isAnimating
+    1:3:void onDraw(android.graphics.Canvas):88:90 -> onDraw
+    1:11:void onRestoreInstanceState(android.os.Parcelable):119:129 -> onRestoreInstanceState
+    1:4:android.os.Parcelable onSaveInstanceState():110:113 -> onSaveInstanceState
+    1:4:void setColor(int):99:102 -> setColor
+com.batch.android.messaging.view.DelegatedTouchEventViewGroup -> com.batch.android.d0.b:
+# {"id":"sourceFile","fileName":"DelegatedTouchEventViewGroup.java"}
+    boolean superOnTouchEvent(android.view.MotionEvent) -> a
+    boolean superOnInterceptTouchEvent(android.view.MotionEvent) -> b
+com.batch.android.messaging.view.DelegatedTouchEventViewGroup$Delegate -> com.batch.android.d0.b$a:
+# {"id":"sourceFile","fileName":"DelegatedTouchEventViewGroup.java"}
+    boolean onInterceptTouchEvent(android.view.MotionEvent,com.batch.android.messaging.view.DelegatedTouchEventViewGroup) -> a
+    boolean onTouchEvent(android.view.MotionEvent,com.batch.android.messaging.view.DelegatedTouchEventViewGroup,boolean) -> a
+com.batch.android.messaging.view.FixedRatioFrameLayout -> com.batch.android.d0.c:
+# {"id":"sourceFile","fileName":"FixedRatioFrameLayout.java"}
+    com.batch.android.messaging.Size2D targetSize -> a
+    1:2:void <init>(android.content.Context,com.batch.android.messaging.Size2D):21:22 -> <init>
+    3:3:void <init>(android.content.Context,android.util.AttributeSet):26:26 -> <init>
+    4:4:void <init>(android.content.Context,android.util.AttributeSet,int):30:30 -> <init>
+    5:5:void <init>(android.content.Context,android.util.AttributeSet,int,int):40:40 -> <init>
+    1:1:void init(com.batch.android.messaging.Size2D):44:44 -> a
+    1:30:void onMeasure(int,int):57:86 -> onMeasure
+    31:31:void onMeasure(int,int):84:84 -> onMeasure
+    1:5:void setTargetSize(com.batch.android.messaging.Size2D):48:52 -> setTargetSize
+com.batch.android.messaging.view.FlexboxLayout -> com.batch.android.d0.d:
+# {"id":"sourceFile","fileName":"FlexboxLayout.java"}
+    int FLEX_WRAP_NOWRAP -> n
+    int FLEX_DIRECTION_COLUMN -> l
+    android.util.SparseIntArray mOrderCache -> g
+    int FLEX_DIRECTION_ROW -> j
+    int mAlignItems -> d
+    int ALIGN_CONTENT_SPACE_AROUND -> E
+    int mFlexWrap -> b
+    int ALIGN_CONTENT_CENTER -> C
+    int ALIGN_CONTENT_FLEX_START -> A
+    int[] mReorderedIndices -> f
+    int ALIGN_ITEMS_BASELINE -> y
+    int ALIGN_ITEMS_FLEX_END -> w
+    java.util.List mFlexLines -> h
+    int JUSTIFY_CONTENT_SPACE_AROUND -> u
+    int JUSTIFY_CONTENT_CENTER -> s
+    int JUSTIFY_CONTENT_FLEX_START -> q
+    int FLEX_WRAP_WRAP -> o
+    int FLEX_DIRECTION_COLUMN_REVERSE -> m
+    int FLEX_DIRECTION_ROW_REVERSE -> k
+    int ALIGN_CONTENT_STRETCH -> F
+    int ALIGN_CONTENT_SPACE_BETWEEN -> D
+    int mAlignContent -> e
+    int ALIGN_CONTENT_FLEX_END -> B
+    int mJustifyContent -> c
+    int mFlexDirection -> a
+    boolean[] mChildrenFrozen -> i
+    int ALIGN_ITEMS_STRETCH -> z
+    int ALIGN_ITEMS_CENTER -> x
+    int ALIGN_ITEMS_FLEX_START -> v
+    int JUSTIFY_CONTENT_SPACE_BETWEEN -> t
+    int JUSTIFY_CONTENT_FLEX_END -> r
+    int FLEX_WRAP_WRAP_REVERSE -> p
+    1:1:void <init>(android.content.Context):240:240 -> <init>
+    2:2:void <init>(android.content.Context,android.util.AttributeSet):244:244 -> <init>
+    3:3:void <init>(android.content.Context,android.util.AttributeSet,int):248:248 -> <init>
+    4:4:void <init>(android.content.Context,android.util.AttributeSet,int):230:230 -> <init>
+    1:20:int[] createReorderedIndices(android.view.View,int,android.view.ViewGroup$LayoutParams):323:342 -> a
+    21:34:int[] createReorderedIndices(android.view.View,int,android.view.ViewGroup$LayoutParams):333:346 -> a
+    35:37:int[] createReorderedIndices():356:358 -> a
+    38:47:int[] sortOrdersIntoReorderedIndices(int,java.util.List):362:371 -> a
+    48:55:java.util.List createOrders(int):379:386 -> a
+    56:102:void measureHorizontal(int,int):431:477 -> a
+    103:110:void measureHorizontal(int,int):475:482 -> a
+    111:136:void measureHorizontal(int,int):480:505 -> a
+    137:172:void measureHorizontal(int,int):500:535 -> a
+    173:214:void measureHorizontal(int,int):533:574 -> a
+    215:237:void checkSizeConstraints(android.view.View):702:724 -> a
+    238:238:void checkSizeConstraints(android.view.View):722:722 -> a
+    239:241:void addFlexLineIfLastFlexItem(int,int,com.batch.android.messaging.view.FlexboxLayout$FlexLine):730:732 -> a
+    242:242:void determineMainSize(int,int,int):774:774 -> a
+    243:250:void determineMainSize(int,int,int):764:771 -> a
+    251:280:void determineMainSize(int,int,int):753:782 -> a
+    281:366:int expandFlexItems(com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int):811:896 -> a
+    367:372:int expandFlexItems(com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int):894:899 -> a
+    373:402:int expandFlexItems(com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int):831:860 -> a
+    403:452:int expandFlexItems(com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int):858:907 -> a
+    453:453:int expandFlexItems(com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int):812:812 -> a
+    454:454:void determineCrossSize(int,int,int,int):1068:1068 -> a
+    455:456:void determineCrossSize(int,int,int,int):1064:1065 -> a
+    457:580:void determineCrossSize(int,int,int,int):1059:1182 -> a
+    581:586:void stretchViewHorizontally(android.view.View,int):1272:1277 -> a
+    587:587:void stretchViewHorizontally(android.view.View,int):1275:1275 -> a
+    588:588:boolean isWrapRequired(int,int,int,int,int,com.batch.android.messaging.view.FlexboxLayout$LayoutParams):1409:1409 -> a
+    589:636:void layoutHorizontal(boolean,int,int,int,int):1493:1540 -> a
+    637:646:void layoutHorizontal(boolean,int,int,int,int):1527:1536 -> a
+    647:647:void layoutHorizontal(boolean,int,int,int,int):1523:1523 -> a
+    648:693:void layoutHorizontal(boolean,int,int,int,int):1519:1564 -> a
+    694:712:void layoutHorizontal(boolean,int,int,int,int):1557:1575 -> a
+    713:734:void layoutHorizontal(boolean,int,int,int,int):1568:1589 -> a
+    735:754:void layoutHorizontal(boolean,int,int,int,int):1581:1600 -> a
+    755:771:void layoutHorizontal(boolean,int,int,int,int):1592:1608 -> a
+    772:825:void layoutSingleChildHorizontal(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int,int,int):1645:1698 -> a
+    826:837:void layoutSingleChildHorizontal(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int,int,int):1694:1705 -> a
+    838:838:void layoutSingleChildHorizontal(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int,int,int):1701:1701 -> a
+    839:839:void layoutSingleChildHorizontal(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int,int,int):1676:1676 -> a
+    840:853:void layoutSingleChildHorizontal(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int,int,int):1674:1687 -> a
+    854:854:void layoutSingleChildHorizontal(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int,int,int):1683:1683 -> a
+    855:857:void layoutSingleChildHorizontal(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int,int,int):1656:1658 -> a
+    858:906:void layoutVertical(boolean,boolean,int,int,int,int):1735:1783 -> a
+    907:916:void layoutVertical(boolean,boolean,int,int,int,int):1770:1779 -> a
+    917:917:void layoutVertical(boolean,boolean,int,int,int,int):1766:1766 -> a
+    918:964:void layoutVertical(boolean,boolean,int,int,int,int):1762:1808 -> a
+    965:984:void layoutVertical(boolean,boolean,int,int,int,int):1800:1819 -> a
+    985:1006:void layoutVertical(boolean,boolean,int,int,int,int):1811:1832 -> a
+    1007:1026:void layoutVertical(boolean,boolean,int,int,int,int):1824:1843 -> a
+    1027:1043:void layoutVertical(boolean,boolean,int,int,int,int):1835:1851 -> a
+    1044:1090:void layoutSingleChildVertical(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,boolean,int,int,int,int,int):1889:1935 -> a
+    1091:1093:void layoutSingleChildVertical(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,boolean,int,int,int,int,int):1909:1911 -> a
+    1094:1106:void layoutSingleChildVertical(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,boolean,int,int,int,int,int):1908:1920 -> a
+    1107:1107:void layoutSingleChildVertical(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,boolean,int,int,int,int,int):1917:1917 -> a
+    1108:1110:void layoutSingleChildVertical(android.view.View,com.batch.android.messaging.view.FlexboxLayout$FlexLine,boolean,int,int,int,int,int):1901:1903 -> a
+    1111:1111:com.batch.android.messaging.view.FlexboxLayout$LayoutParams generateLayoutParams(android.util.AttributeSet):1953:1953 -> a
+    1:2:void addView(android.view.View,int,android.view.ViewGroup$LayoutParams):301:302 -> addView
+    1:4:android.view.View getReorderedChildAt(int):289:292 -> b
+    5:18:boolean isOrderChangedFromLastMeasurement():398:411 -> b
+    19:62:void measureVertical(int,int):590:633 -> b
+    63:70:void measureVertical(int,int):631:638 -> b
+    71:96:void measureVertical(int,int):636:661 -> b
+    97:131:void measureVertical(int,int):656:690 -> b
+    132:212:int shrinkFlexItems(com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int):936:1016 -> b
+    213:218:int shrinkFlexItems(com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int):1014:1019 -> b
+    219:248:int shrinkFlexItems(com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int):956:985 -> b
+    249:293:int shrinkFlexItems(com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int):983:1027 -> b
+    294:294:int shrinkFlexItems(com.batch.android.messaging.view.FlexboxLayout$FlexLine,int,int,int,int):938:938 -> b
+    295:300:void stretchViewVertically(android.view.View,int):1256:1261 -> b
+    301:301:void stretchViewVertically(android.view.View,int):1259:1259 -> b
+    302:320:void setMeasuredDimensionForFlex(int,int,int,int):1298:1316 -> b
+    321:322:void setMeasuredDimensionForFlex(int,int,int,int):1312:1313 -> b
+    323:360:void setMeasuredDimensionForFlex(int,int,int,int):1307:1344 -> b
+    361:361:void setMeasuredDimensionForFlex(int,int,int,int):1340:1340 -> b
+    362:411:void setMeasuredDimensionForFlex(int,int,int,int):1330:1379 -> b
+    412:412:void setMeasuredDimensionForFlex(int,int,int,int):1375:1375 -> b
+    413:432:void setMeasuredDimensionForFlex(int,int,int,int):1362:1381 -> b
+    1:20:void stretchViews(int,int):1205:1224 -> c
+    21:21:void stretchViews(int,int):1221:1221 -> c
+    22:47:void stretchViews(int,int):1217:1242 -> c
+    48:48:void stretchViews(int,int):1239:1239 -> c
+    49:49:void stretchViews(int,int):1235:1235 -> c
+    1:1:boolean checkLayoutParams(android.view.ViewGroup$LayoutParams):1948:1948 -> checkLayoutParams
+    1:1:android.view.ViewGroup$LayoutParams generateLayoutParams(android.util.AttributeSet):66:66 -> generateLayoutParams
+    2:2:android.view.ViewGroup$LayoutParams generateLayoutParams(android.view.ViewGroup$LayoutParams):1958:1958 -> generateLayoutParams
+    1:1:int getAlignContent():2011:2011 -> getAlignContent
+    1:1:int getAlignItems():1999:1999 -> getAlignItems
+    1:1:int getFlexDirection():1963:1963 -> getFlexDirection
+    1:1:int getFlexWrap():1975:1975 -> getFlexWrap
+    1:1:int getJustifyContent():1987:1987 -> getJustifyContent
+    1:2:int getLargestMainSize():1422:1423 -> getLargestMainSize
+    1:2:int getSumOfCrossSize():1435:1436 -> getSumOfCrossSize
+    1:27:void onLayout(boolean,int,int,int,int):1443:1469 -> onLayout
+    28:31:void onLayout(boolean,int,int,int,int):1463:1466 -> onLayout
+    32:35:void onLayout(boolean,int,int,int,int):1456:1459 -> onLayout
+    36:36:void onLayout(boolean,int,int,int,int):1452:1452 -> onLayout
+    37:37:void onLayout(boolean,int,int,int,int):1448:1448 -> onLayout
+    1:21:void onMeasure(int,int):253:273 -> onMeasure
+    22:22:void onMeasure(int,int):270:270 -> onMeasure
+    23:33:void onMeasure(int,int):266:276 -> onMeasure
+    1:3:void setAlignContent(int):2015:2017 -> setAlignContent
+    1:3:void setAlignItems(int):2003:2005 -> setAlignItems
+    1:3:void setFlexDirection(int):1967:1969 -> setFlexDirection
+    1:3:void setFlexWrap(int):1979:1981 -> setFlexWrap
+    1:3:void setJustifyContent(int):1991:1993 -> setJustifyContent
+com.batch.android.messaging.view.FlexboxLayout$1 -> com.batch.android.d0.d$a:
+# {"id":"sourceFile","fileName":"FlexboxLayout.java"}
+com.batch.android.messaging.view.FlexboxLayout$AlignContent -> com.batch.android.d0.d$b:
+# {"id":"sourceFile","fileName":"FlexboxLayout.java"}
+com.batch.android.messaging.view.FlexboxLayout$AlignItems -> com.batch.android.d0.d$c:
+# {"id":"sourceFile","fileName":"FlexboxLayout.java"}
+com.batch.android.messaging.view.FlexboxLayout$FlexDirection -> com.batch.android.d0.d$d:
+# {"id":"sourceFile","fileName":"FlexboxLayout.java"}
+com.batch.android.messaging.view.FlexboxLayout$FlexLine -> com.batch.android.d0.d$e:
+# {"id":"sourceFile","fileName":"FlexboxLayout.java"}
+    float totalFlexShrink -> e
+    float totalFlexGrow -> d
+    int maxBaseline -> f
+    java.util.List indicesAlignSelfStretch -> g
+    int crossSize -> b
+    int itemCount -> c
+    int mainSize -> a
+    1:35:void <init>():2185:2219 -> <init>
+    36:36:void <init>(com.batch.android.messaging.view.FlexboxLayout$1):2185:2185 -> <init>
+com.batch.android.messaging.view.FlexboxLayout$FlexWrap -> com.batch.android.d0.d$f:
+# {"id":"sourceFile","fileName":"FlexboxLayout.java"}
+com.batch.android.messaging.view.FlexboxLayout$JustifyContent -> com.batch.android.d0.d$g:
+# {"id":"sourceFile","fileName":"FlexboxLayout.java"}
+com.batch.android.messaging.view.FlexboxLayout$LayoutParams -> com.batch.android.d0.d$h:
+# {"id":"sourceFile","fileName":"FlexboxLayout.java"}
+    float FLEX_GROW_DEFAULT -> l
+    int ALIGN_SELF_AUTO -> o
+    boolean wrapBefore -> j
+    int ORDER_DEFAULT -> k
+    int maxWidth -> h
+    float flexBasisPercent -> e
+    int maxHeight -> i
+    int minWidth -> f
+    float flexShrink -> c
+    int minHeight -> g
+    float flexGrow -> b
+    int alignSelf -> d
+    int order -> a
+    int ALIGN_SELF_STRETCH -> t
+    int MAX_SIZE -> u
+    int ALIGN_SELF_CENTER -> r
+    int ALIGN_SELF_BASELINE -> s
+    float FLEX_BASIS_PERCENT_DEFAULT -> n
+    int ALIGN_SELF_FLEX_START -> p
+    float FLEX_SHRINK_DEFAULT -> m
+    int ALIGN_SELF_FLEX_END -> q
+    1:1:void <init>(android.content.Context,android.util.AttributeSet):2126:2126 -> <init>
+    2:60:void <init>(android.content.Context,android.util.AttributeSet):2053:2111 -> <init>
+    61:61:void <init>(com.batch.android.messaging.view.FlexboxLayout$LayoutParams):2130:2130 -> <init>
+    62:149:void <init>(com.batch.android.messaging.view.FlexboxLayout$LayoutParams):2053:2140 -> <init>
+    150:150:void <init>(android.view.ViewGroup$LayoutParams):2144:2144 -> <init>
+    151:209:void <init>(android.view.ViewGroup$LayoutParams):2053:2111 -> <init>
+    210:210:void <init>(int,int):2148:2148 -> <init>
+    211:269:void <init>(int,int):2053:2111 -> <init>
+com.batch.android.messaging.view.FlexboxLayout$Order -> com.batch.android.d0.d$i:
+# {"id":"sourceFile","fileName":"FlexboxLayout.java"}
+    int order -> b
+    int index -> a
+    1:1:void <init>():2156:2156 -> <init>
+    2:2:void <init>(com.batch.android.messaging.view.FlexboxLayout$1):2156:2156 -> <init>
+    1:4:int compareTo(com.batch.android.messaging.view.FlexboxLayout$Order):2170:2173 -> a
+    1:1:int compareTo(java.lang.Object):2156:2156 -> compareTo
+    1:1:java.lang.String toString():2178:2178 -> toString
+com.batch.android.messaging.view.MaximumHeightScrollView -> com.batch.android.d0.e:
+# {"id":"sourceFile","fileName":"MaximumHeightScrollView.java"}
+    int maxHeightPx -> a
+    1:1:void <init>(android.content.Context):17:17 -> <init>
+    2:2:void <init>(android.content.Context):14:14 -> <init>
+    3:3:void <init>(android.content.Context,android.util.AttributeSet):21:21 -> <init>
+    4:4:void <init>(android.content.Context,android.util.AttributeSet):14:14 -> <init>
+    5:5:void <init>(android.content.Context,android.util.AttributeSet,int):25:25 -> <init>
+    6:6:void <init>(android.content.Context,android.util.AttributeSet,int):14:14 -> <init>
+    7:7:void <init>(android.content.Context,android.util.AttributeSet,int,int):31:31 -> <init>
+    8:8:void <init>(android.content.Context,android.util.AttributeSet,int,int):14:14 -> <init>
+    1:7:void onMeasure(int,int):41:47 -> onMeasure
+    1:1:void setMaxHeight(int):35:35 -> setMaxHeight
+com.batch.android.messaging.view.PannableBannerFrameLayout -> com.batch.android.d0.f:
+# {"id":"sourceFile","fileName":"PannableBannerFrameLayout.java"}
+    java.lang.Object cancellationAnimation -> h
+    int touchSlop -> l
+    int FLING_VELOCITY_DISMISS_THRESHOLD -> m
+    boolean isPanning -> i
+    int cancellationAnimationDuration -> j
+    float initialInterceptYOffset -> g
+    int dismissAnimationDuration -> k
+    float initialSwipeYOffset -> f
+    com.batch.android.messaging.view.PannableBannerFrameLayout$DismissDirection dismissDirection -> c
+    com.batch.android.messaging.view.PannableBannerFrameLayout$OnDismissListener dismissListener -> d
+    android.view.GestureDetector detector -> b
+    boolean isPannable -> e
+    boolean supportsAndroidXAnimation -> a
+    float PAN_HEIGHT_DISMISS_RATIO_THRESHOLD -> n
+    1:1:void <init>(android.content.Context):86:86 -> <init>
+    2:37:void <init>(android.content.Context):52:87 -> <init>
+    38:38:void <init>(android.content.Context,android.util.AttributeSet):91:91 -> <init>
+    39:79:void <init>(android.content.Context,android.util.AttributeSet):52:92 -> <init>
+    80:80:void <init>(android.content.Context,android.util.AttributeSet,int):96:96 -> <init>
+    81:126:void <init>(android.content.Context,android.util.AttributeSet,int):52:97 -> <init>
+    1:1:com.batch.android.messaging.view.PannableBannerFrameLayout$OnDismissListener access$000(com.batch.android.messaging.view.PannableBannerFrameLayout):28:28 -> a
+    2:2:boolean hasYPassedTouchSlop(float,float):296:296 -> a
+    3:4:void beginPan(float):300:301 -> a
+    5:10:void cancelCancellationAnimation():330:335 -> a
+    1:40:void dismiss():340:379 -> b
+    1:15:void setup():101:115 -> c
+    1:10:void startCancelAnimation():305:314 -> d
+    1:8:void startFallbackCancelAnimation():319:326 -> e
+    1:15:boolean onFling(android.view.MotionEvent,android.view.MotionEvent,float,float):275:289 -> onFling
+    1:26:boolean onInterceptTouchEvent(android.view.MotionEvent):133:158 -> onInterceptTouchEvent
+    27:27:boolean onInterceptTouchEvent(android.view.MotionEvent):142:142 -> onInterceptTouchEvent
+    1:67:boolean onTouchEvent(android.view.MotionEvent):172:238 -> onTouchEvent
+    68:115:boolean onTouchEvent(android.view.MotionEvent):185:232 -> onTouchEvent
+    116:177:boolean onTouchEvent(android.view.MotionEvent):181:242 -> onTouchEvent
+    1:1:void setDismissDirection(com.batch.android.messaging.view.PannableBannerFrameLayout$DismissDirection):120:120 -> setDismissDirection
+    1:1:void setDismissListener(com.batch.android.messaging.view.PannableBannerFrameLayout$OnDismissListener):124:124 -> setDismissListener
+    1:1:void setPannable(boolean):128:128 -> setPannable
+com.batch.android.messaging.view.PannableBannerFrameLayout$1 -> com.batch.android.d0.f$a:
+# {"id":"sourceFile","fileName":"PannableBannerFrameLayout.java"}
+    com.batch.android.messaging.view.PannableBannerFrameLayout this$0 -> a
+    1:1:void <init>(com.batch.android.messaging.view.PannableBannerFrameLayout):352:352 -> <init>
+    1:2:void onAnimationEnd(android.animation.Animator):358:359 -> onAnimationEnd
+com.batch.android.messaging.view.PannableBannerFrameLayout$DismissDirection -> com.batch.android.d0.f$b:
+# {"id":"sourceFile","fileName":"PannableBannerFrameLayout.java"}
+    com.batch.android.messaging.view.PannableBannerFrameLayout$DismissDirection[] $VALUES -> c
+    com.batch.android.messaging.view.PannableBannerFrameLayout$DismissDirection TOP -> a
+    com.batch.android.messaging.view.PannableBannerFrameLayout$DismissDirection BOTTOM -> b
+    1:2:void <clinit>():386:387 -> <clinit>
+    3:3:void <clinit>():385:385 -> <clinit>
+    1:1:void <init>(java.lang.String,int):385:385 -> <init>
+    1:1:com.batch.android.messaging.view.PannableBannerFrameLayout$DismissDirection[] $values():385:385 -> a
+    1:1:com.batch.android.messaging.view.PannableBannerFrameLayout$DismissDirection valueOf(java.lang.String):385:385 -> valueOf
+    1:1:com.batch.android.messaging.view.PannableBannerFrameLayout$DismissDirection[] values():385:385 -> values
+com.batch.android.messaging.view.PannableBannerFrameLayout$OnDismissListener -> com.batch.android.d0.f$c:
+# {"id":"sourceFile","fileName":"PannableBannerFrameLayout.java"}
+    void onDismiss(com.batch.android.messaging.view.PannableBannerFrameLayout) -> a
+com.batch.android.messaging.view.PositionableGradientDrawable -> com.batch.android.d0.g:
+# {"id":"sourceFile","fileName":"PositionableGradientDrawable.java"}
+    boolean mGradientIsDirty -> k
+    android.graphics.Rect mPadding -> c
+    android.graphics.Paint mLayerPaint -> j
+    android.graphics.PorterDuffColorFilter mTintFilter -> f
+    android.graphics.Paint mStrokePaint -> d
+    com.batch.android.messaging.view.PositionableGradientDrawable$GradientState mGradientState -> a
+    int RADIUS_TYPE_FRACTION_PARENT -> y
+    android.graphics.Paint mFillPaint -> b
+    int RADIUS_TYPE_PIXELS -> w
+    int RADIAL_GRADIENT -> u
+    float mGradientRadius -> o
+    int RING -> s
+    int OVAL -> q
+    boolean mPathIsDirty -> n
+    android.graphics.ColorFilter mColorFilter -> e
+    boolean mMutated -> l
+    int mAlpha -> g
+    android.graphics.Path mPath -> h
+    android.graphics.RectF mRect -> i
+    float DEFAULT_THICKNESS_RATIO -> A
+    float DEFAULT_INNER_RADIUS_RATIO -> z
+    android.graphics.Path mRingPath -> m
+    int RADIUS_TYPE_FRACTION -> x
+    int SWEEP_GRADIENT -> v
+    int LINEAR_GRADIENT -> t
+    int LINE -> r
+    int RECTANGLE -> p
+    1:1:void <init>(com.batch.android.messaging.view.PositionableGradientDrawable$GradientState,android.content.res.Resources,com.batch.android.messaging.view.PositionableGradientDrawable$1):48:48 -> <init>
+    2:2:void <init>():165:165 -> <init>
+    3:3:void <init>(com.batch.android.messaging.view.PositionableGradientDrawable$Orientation,int[],float[]):173:173 -> <init>
+    4:4:void <init>(com.batch.android.messaging.view.PositionableGradientDrawable$GradientState,android.content.res.Resources):1350:1350 -> <init>
+    5:1253:void <init>(com.batch.android.messaging.view.PositionableGradientDrawable$GradientState,android.content.res.Resources):105:1353 -> <init>
+    1:1:boolean isOpaque(int):0:0 -> a
+    2:4:void setCornerRadii(float[]):202:204 -> a
+    5:7:void setCornerRadius(float):221:223 -> a
+    8:8:void setStroke(int,android.content.res.ColorStateList):255:255 -> a
+    9:10:void setStroke(int,int,float,float):273:274 -> a
+    11:19:void setStroke(int,android.content.res.ColorStateList,float,float):293:301 -> a
+    20:22:void setSize(int,int):332:334 -> a
+    23:25:void setGradientCenter(float,float):383:385 -> a
+    26:28:void setUseLevel(boolean):433:435 -> a
+    29:31:void setOrientation(com.batch.android.messaging.view.PositionableGradientDrawable$Orientation):460:462 -> a
+    32:37:void setColors(int[],float[]):480:485 -> a
+    38:43:void buildPathIfDirty():634:639 -> a
+    44:89:android.graphics.Path buildRing(com.batch.android.messaging.view.PositionableGradientDrawable$GradientState):644:689 -> a
+    90:99:void setColor(android.content.res.ColorStateList):725:734 -> a
+    100:142:void updateLocalState(android.content.res.Resources):1357:1399 -> a
+    1:1:void setStroke(int,int):239:239 -> b
+    2:14:void setStrokeInternal(int,int,float,float):305:317 -> b
+    15:17:void setGradientRadius(float):400:402 -> b
+    18:18:int modulateAlpha(int):439:439 -> b
+    19:19:void clearMutated():1104:1104 -> b
+    1:3:void setColor(int):706:708 -> c
+    4:72:boolean ensureValidRect():874:942 -> c
+    73:75:boolean ensureValidRect():933:935 -> c
+    76:79:boolean ensureValidRect():927:930 -> c
+    80:83:boolean ensureValidRect():921:924 -> c
+    84:87:boolean ensureValidRect():915:918 -> c
+    88:90:boolean ensureValidRect():909:911 -> c
+    91:94:boolean ensureValidRect():903:906 -> c
+    95:215:boolean ensureValidRect():897:1017 -> c
+    1:3:void setGradientType(int):365:367 -> d
+    4:9:float getGradientRadius():412:417 -> d
+    1:129:void draw(android.graphics.Canvas):490:618 -> draw
+    130:133:void draw(android.graphics.Canvas):607:610 -> draw
+    134:136:void draw(android.graphics.Canvas):600:602 -> draw
+    137:192:void draw(android.graphics.Canvas):573:628 -> draw
+    1:4:void setShape(int):348:351 -> e
+    5:5:com.batch.android.messaging.view.PositionableGradientDrawable$Orientation getOrientation():447:447 -> e
+    1:5:boolean isOpaqueForState():1037:1041 -> f
+    1:1:int getAlpha():804:804 -> getAlpha
+    1:1:int getChangingConfigurations():791:791 -> getChangingConfigurations
+    1:1:android.graphics.ColorFilter getColorFilter():817:817 -> getColorFilter
+    1:2:android.graphics.drawable.Drawable$ConstantState getConstantState():1032:1033 -> getConstantState
+    1:1:int getIntrinsicHeight():1027:1027 -> getIntrinsicHeight
+    1:1:int getIntrinsicWidth():1022:1022 -> getIntrinsicWidth
+    1:1:int getOpacity():844:844 -> getOpacity
+    1:35:void getOutline(android.graphics.Outline):1050:1084 -> getOutline
+    36:36:void getOutline(android.graphics.Outline):1074:1074 -> getOutline
+    37:48:void getOutline(android.graphics.Outline):1060:1071 -> getOutline
+    1:5:boolean getPadding(android.graphics.Rect):178:182 -> getPadding
+    1:6:boolean isStateful():780:785 -> isStateful
+    1:4:android.graphics.drawable.Drawable mutate():1091:1094 -> mutate
+    1:4:void onBoundsChange(android.graphics.Rect):851:854 -> onBoundsChange
+    1:4:boolean onLevelChange(int):859:862 -> onLevelChange
+    1:31:boolean onStateChange(int[]):741:771 -> onStateChange
+    1:3:void setAlpha(int):796:798 -> setAlpha
+    1:3:void setColorFilter(android.graphics.ColorFilter):822:824 -> setColorFilter
+    1:3:void setDither(boolean):809:811 -> setDither
+    1:3:void setTintList(android.content.res.ColorStateList):830:832 -> setTintList
+    1:3:void setTintMode(android.graphics.PorterDuff$Mode):837:839 -> setTintMode
+com.batch.android.messaging.view.PositionableGradientDrawable$1 -> com.batch.android.d0.g$a:
+# {"id":"sourceFile","fileName":"PositionableGradientDrawable.java"}
+    int[] $SwitchMap$com$batch$android$messaging$view$PositionableGradientDrawable$Orientation -> a
+    1:1:void <clinit>():895:895 -> <clinit>
+com.batch.android.messaging.view.PositionableGradientDrawable$GradientState -> com.batch.android.d0.g$b:
+# {"id":"sourceFile","fileName":"PositionableGradientDrawable.java"}
+    int mStrokeWidth -> l
+    float[] mTempPositions -> j
+    int mAngle -> d
+    int mShape -> b
+    int[] mGradientColors -> h
+    float mCenterX -> y
+    int[] mThemeAttrs -> I
+    android.graphics.PorterDuff$Mode mTintMode -> H
+    float mThicknessRatio -> u
+    boolean mOpaqueOverBounds -> E
+    android.content.res.ColorStateList mStrokeColors -> g
+    int mThickness -> w
+    int[] mAttrPadding -> O
+    float mRadius -> o
+    int mHeight -> s
+    int[] mAttrGradient -> K
+    boolean mUseLevel -> C
+    float mStrokeDashWidth -> m
+    float[] mRadiusArray -> p
+    int[] mAttrStroke -> M
+    float[] mPositions -> k
+    com.batch.android.messaging.view.PositionableGradientDrawable$Orientation mOrientation -> e
+    boolean mDither -> x
+    float mGradientRadius -> A
+    int mGradientRadiusType -> B
+    int mGradient -> c
+    int mChangingConfigurations -> a
+    float mCenterY -> z
+    int[] mTempColors -> i
+    android.content.res.ColorStateList mSolidColors -> f
+    float mInnerRadiusRatio -> t
+    int mInnerRadius -> v
+    int[] mAttrCorners -> N
+    boolean mOpaqueOverShape -> F
+    android.content.res.ColorStateList mTint -> G
+    int mWidth -> r
+    int[] mAttrSize -> J
+    float mStrokeDashGap -> n
+    android.graphics.Rect mPadding -> q
+    int[] mAttrSolid -> L
+    boolean mUseLevelForShape -> D
+    1:1:void <init>(com.batch.android.messaging.view.PositionableGradientDrawable$Orientation,int[],float[]):1156:1156 -> <init>
+    2:51:void <init>(com.batch.android.messaging.view.PositionableGradientDrawable$Orientation,int[],float[]):1110:1159 -> <init>
+    52:52:void <init>(com.batch.android.messaging.view.PositionableGradientDrawable$GradientState):1162:1162 -> <init>
+    53:152:void <init>(com.batch.android.messaging.view.PositionableGradientDrawable$GradientState):1110:1209 -> <init>
+    1:1:void access$100(com.batch.android.messaging.view.PositionableGradientDrawable$GradientState):1107:1107 -> a
+    2:2:void setGradientType(int):1256:1256 -> a
+    3:4:void setGradientCenter(float,float):1260:1261 -> a
+    5:7:void setGradientColors(int[]):1265:1267 -> a
+    8:10:void setSolidColors(android.content.res.ColorStateList):1276:1278 -> a
+    11:30:void computeOpacity():1282:1301 -> a
+    31:35:void setStroke(int,android.content.res.ColorStateList,float,float):1305:1309 -> a
+    36:37:void setCornerRadius(float):1316:1317 -> a
+    38:40:void setCornerRadii(float[]):1321:1323 -> a
+    41:42:void setSize(int,int):1328:1329 -> a
+    43:44:void setGradientRadius(float,int):1333:1334 -> a
+    1:2:void setShape(int):1251:1252 -> b
+    3:4:void setGradientPositions(float[]):1271:1272 -> b
+    1:9:boolean canApplyTheme():1214:1222 -> canApplyTheme
+    1:9:int getChangingConfigurations():1238:1246 -> getChangingConfigurations
+    1:1:android.graphics.drawable.Drawable newDrawable():1228:1228 -> newDrawable
+    2:2:android.graphics.drawable.Drawable newDrawable(android.content.res.Resources):1233:1233 -> newDrawable
+com.batch.android.messaging.view.PositionableGradientDrawable$Orientation -> com.batch.android.d0.g$c:
+# {"id":"sourceFile","fileName":"PositionableGradientDrawable.java"}
+    com.batch.android.messaging.view.PositionableGradientDrawable$Orientation[] $VALUES -> i
+    com.batch.android.messaging.view.PositionableGradientDrawable$Orientation RIGHT_LEFT -> c
+    com.batch.android.messaging.view.PositionableGradientDrawable$Orientation BR_TL -> d
+    com.batch.android.messaging.view.PositionableGradientDrawable$Orientation TOP_BOTTOM -> a
+    com.batch.android.messaging.view.PositionableGradientDrawable$Orientation TR_BL -> b
+    com.batch.android.messaging.view.PositionableGradientDrawable$Orientation LEFT_RIGHT -> g
+    com.batch.android.messaging.view.PositionableGradientDrawable$Orientation TL_BR -> h
+    com.batch.android.messaging.view.PositionableGradientDrawable$Orientation BOTTOM_TOP -> e
+    com.batch.android.messaging.view.PositionableGradientDrawable$Orientation BL_TR -> f
+    1:29:void <clinit>():133:161 -> <clinit>
+    30:30:void <clinit>():129:129 -> <clinit>
+    1:1:void <init>(java.lang.String,int):129:129 -> <init>
+    1:1:com.batch.android.messaging.view.PositionableGradientDrawable$Orientation[] $values():129:129 -> a
+    1:1:com.batch.android.messaging.view.PositionableGradientDrawable$Orientation valueOf(java.lang.String):129:129 -> valueOf
+    1:1:com.batch.android.messaging.view.PositionableGradientDrawable$Orientation[] values():129:129 -> values
+com.batch.android.messaging.view.formats.BannerView -> com.batch.android.e0.a:
+# {"id":"sourceFile","fileName":"BannerView.java"}
+    android.content.Context context -> a
+    android.graphics.Point screenSizeDP -> e
+    int BODY_MAX_HEIGHT_DP -> n
+    int IMAGE_FADE_IN_ANIMATION_DURATION -> l
+    com.batch.android.messaging.css.Document style -> d
+    long uptimeWhenShown -> k
+    int BODY_MIN_HEIGHT_DP -> m
+    com.batch.android.messaging.model.BaseBannerMessage message -> b
+    com.batch.android.messaging.view.helper.ImageHelper$Cache imageCache -> c
+    com.batch.android.messaging.view.CountdownView countdownView -> h
+    com.batch.android.messaging.view.styled.SeparatedFlexboxLayout contentLayout -> g
+    com.batch.android.messaging.view.formats.BannerView$OnActionListener actionListener -> j
+    com.batch.android.messaging.view.formats.BannerView$VerticalEdge pinnedVerticalEdge -> f
+    com.batch.android.messaging.view.roundimage.RoundedImageView imageView -> i
+    1:15:void <init>(android.content.Context,com.batch.android.messaging.model.BaseBannerMessage,com.batch.android.messaging.css.Document,com.batch.android.messaging.css.DOMNode,com.batch.android.messaging.view.helper.ImageHelper$Cache):99:113 -> <init>
+    16:54:void <init>(android.content.Context,com.batch.android.messaging.model.BaseBannerMessage,com.batch.android.messaging.css.Document,com.batch.android.messaging.css.DOMNode,com.batch.android.messaging.view.helper.ImageHelper$Cache):112:150 -> <init>
+    1:2:void lambda$makeCTALayout$2(int,com.batch.android.messaging.model.CTA,android.view.View):303:304 -> a
+    3:16:android.view.View getStyledFlexboxSubview(android.util.Pair):328:341 -> a
+    17:23:void addCloseButton():378:384 -> a
+    24:41:void addCloseButton():383:400 -> a
+    42:43:void lambda$addCloseButton$3(android.view.View):396:397 -> a
+    44:50:com.batch.android.messaging.view.formats.BannerView$VerticalEdge getPinnedVerticalEdge(java.util.Map):427:433 -> a
+    51:51:java.util.Map getRulesForView(com.batch.android.messaging.css.DOMNode):446:446 -> a
+    52:53:java.util.Map getRulesForSeparator(com.batch.android.messaging.view.styled.SeparatedFlexboxLayout,java.lang.String):451:452 -> a
+    54:54:java.util.Map getRulesForSeparator(com.batch.android.messaging.view.styled.SeparatedFlexboxLayout,java.lang.String):451:451 -> a
+    55:61:void displayImage(com.batch.android.messaging.AsyncImageDownloadTask$Result):501:507 -> a
+    1:1:void onImageDownloadError(com.batch.android.messaging.model.MessagingError):0:0 -> b
+    2:2:void lambda$makeContentLayout$1(android.view.View):232:232 -> b
+    3:55:com.batch.android.messaging.view.styled.SeparatedFlexboxLayout makeCTALayout(java.util.Map):269:321 -> b
+    56:73:void addCountdownView():405:422 -> b
+    74:77:void onImageDownloadSuccess(com.batch.android.messaging.AsyncImageDownloadTask$Result):491:494 -> b
+    1:1:void onImageDownloadStart():0:0 -> c
+    2:2:void lambda$new$0(android.view.View):142:142 -> c
+    3:89:com.batch.android.messaging.view.styled.SeparatedFlexboxLayout makeContentLayout(java.util.Map):176:262 -> c
+    1:26:void addImage():346:371 -> d
+    1:1:boolean canAutoClose():166:166 -> e
+    1:1:boolean mustWaitTapDelay():457:457 -> f
+    1:9:void onGlobalTap():461:469 -> g
+    1:1:com.batch.android.messaging.view.styled.SeparatedFlexboxLayout getContentView():158:158 -> getContentView
+    1:1:com.batch.android.messaging.view.formats.BannerView$VerticalEdge getPinnedVerticalEdge():442:442 -> getPinnedVerticalEdge
+    1:1:void onShown():162:162 -> h
+    1:2:void startAutoCloseCountdown():170:171 -> i
+    1:6:void onAttachedToWindow():475:480 -> onAttachedToWindow
+    1:1:void setActionListener(com.batch.android.messaging.view.formats.BannerView$OnActionListener):154:154 -> setActionListener
+com.batch.android.messaging.view.formats.BannerView$OnActionListener -> com.batch.android.e0.a$a:
+# {"id":"sourceFile","fileName":"BannerView.java"}
+    void onCTAAction(int,com.batch.android.messaging.model.CTA) -> a
+    void onCloseAction() -> a
+    void onGlobalAction() -> b
+com.batch.android.messaging.view.formats.BannerView$VerticalEdge -> com.batch.android.e0.a$b:
+# {"id":"sourceFile","fileName":"BannerView.java"}
+    com.batch.android.messaging.view.formats.BannerView$VerticalEdge BOTTOM -> b
+    com.batch.android.messaging.view.formats.BannerView$VerticalEdge[] $VALUES -> c
+    com.batch.android.messaging.view.formats.BannerView$VerticalEdge TOP -> a
+    1:2:void <clinit>():512:513 -> <clinit>
+    3:3:void <clinit>():511:511 -> <clinit>
+    1:1:void <init>(java.lang.String,int):511:511 -> <init>
+    1:1:com.batch.android.messaging.view.formats.BannerView$VerticalEdge[] $values():511:511 -> a
+    1:1:com.batch.android.messaging.view.formats.BannerView$VerticalEdge valueOf(java.lang.String):511:511 -> valueOf
+    1:1:com.batch.android.messaging.view.formats.BannerView$VerticalEdge[] values():511:511 -> values
+com.batch.android.messaging.view.formats.EmbeddedBannerContainer -> com.batch.android.e0.b:
+# {"id":"sourceFile","fileName":"EmbeddedBannerContainer.java"}
+    android.content.Context context -> a
+    boolean alreadyDismissed -> i
+    java.lang.Object autoCloseHandlerToken -> o
+    android.view.ViewGroup parentView -> b
+    com.batch.android.messaging.view.formats.EmbeddedBannerContainer$BaseView rootView -> e
+    com.batch.android.MessagingAnalyticsDelegate analyticsDelegate -> k
+    com.batch.android.messaging.model.BannerMessage message -> d
+    com.batch.android.BatchMessage payloadMessage -> c
+    com.batch.android.module.MessagingModule messagingModule -> j
+    android.os.Handler mainThreadHandler -> n
+    boolean alreadyShown -> h
+    android.util.LruCache imageCache -> l
+    android.content.BroadcastReceiver dismissReceiver -> m
+    int IN_OUT_ANIMATION_DURATION_MS -> p
+    com.batch.android.messaging.view.formats.BannerView bannerView -> f
+    com.batch.android.messaging.view.formats.BannerView$VerticalEdge pinnedVerticalEdge -> g
+    1:1:void <init>(com.batch.android.module.MessagingModule,android.view.View,com.batch.android.BatchMessage,com.batch.android.messaging.model.BannerMessage,com.batch.android.MessagingAnalyticsDelegate,boolean):119:119 -> <init>
+    2:58:void <init>(com.batch.android.module.MessagingModule,android.view.View,com.batch.android.BatchMessage,com.batch.android.messaging.model.BannerMessage,com.batch.android.MessagingAnalyticsDelegate,boolean):71:127 -> <init>
+    59:96:void <init>(com.batch.android.module.MessagingModule,android.view.View,com.batch.android.BatchMessage,com.batch.android.messaging.model.BannerMessage,com.batch.android.MessagingAnalyticsDelegate,boolean):125:162 -> <init>
+    97:113:void <init>(com.batch.android.module.MessagingModule,android.view.View,com.batch.android.BatchMessage,com.batch.android.messaging.model.BannerMessage,com.batch.android.MessagingAnalyticsDelegate,boolean):159:175 -> <init>
+    114:114:void <init>(com.batch.android.module.MessagingModule,android.view.View,com.batch.android.BatchMessage,com.batch.android.messaging.model.BannerMessage,com.batch.android.MessagingAnalyticsDelegate,boolean):133:133 -> <init>
+    1:1:boolean access$000(com.batch.android.messaging.view.formats.EmbeddedBannerContainer):52:52 -> a
+    2:3:com.batch.android.messaging.view.formats.EmbeddedBannerContainer provide(android.view.View,com.batch.android.BatchMessage,com.batch.android.messaging.model.BannerMessage,com.batch.android.MessagingAnalyticsDelegate,boolean):101:102 -> a
+    4:17:android.view.ViewGroup findBestParentView(android.view.View):185:198 -> a
+    18:54:void dismiss(boolean):306:342 -> a
+    55:56:void onCloseAction():359:360 -> a
+    57:59:void onCTAAction(int,com.batch.android.messaging.model.CTA):365:367 -> a
+    60:62:void onDismiss(com.batch.android.messaging.view.PannableBannerFrameLayout):383:385 -> a
+    63:63:void put(com.batch.android.messaging.AsyncImageDownloadTask$Result):391:391 -> a
+    1:1:android.content.BroadcastReceiver access$100(com.batch.android.messaging.view.formats.EmbeddedBannerContainer):52:52 -> b
+    2:2:void dismissOnMainThread(boolean):302:302 -> b
+    3:8:void onGlobalAction():372:377 -> b
+    9:9:com.batch.android.messaging.AsyncImageDownloadTask$Result get(java.lang.String):397:397 -> b
+    1:1:android.content.Context access$200(com.batch.android.messaging.view.formats.EmbeddedBannerContainer):52:52 -> c
+    2:2:void lambda$dismissOnMainThread$0(boolean):302:302 -> c
+    3:3:int layoutGravityForPinnedEdge():354:354 -> c
+    1:1:void access$300(com.batch.android.messaging.view.formats.EmbeddedBannerContainer):52:52 -> d
+    2:3:com.batch.android.messaging.view.formats.BannerView makeBannerView():206:207 -> d
+    1:1:void access$400(com.batch.android.messaging.view.formats.EmbeddedBannerContainer):52:52 -> e
+    2:4:void performAutoClose():295:297 -> e
+    1:4:void removeFromParent():346:349 -> f
+    1:5:void scheduleAutoClose():281:285 -> g
+    1:66:void show():212:277 -> h
+    1:1:void unscheduleAutoClose():291:291 -> i
+com.batch.android.messaging.view.formats.EmbeddedBannerContainer$1 -> com.batch.android.e0.b$a:
+# {"id":"sourceFile","fileName":"EmbeddedBannerContainer.java"}
+    com.batch.android.messaging.view.formats.EmbeddedBannerContainer this$0 -> a
+    1:1:void <init>(com.batch.android.messaging.view.formats.EmbeddedBannerContainer):80:80 -> <init>
+    1:2:void onReceive(android.content.Context,android.content.Intent):83:84 -> onReceive
+com.batch.android.messaging.view.formats.EmbeddedBannerContainer$2 -> com.batch.android.e0.b$b:
+# {"id":"sourceFile","fileName":"EmbeddedBannerContainer.java"}
+    com.batch.android.messaging.view.formats.EmbeddedBannerContainer this$0 -> a
+    1:1:void <init>(com.batch.android.messaging.view.formats.EmbeddedBannerContainer):265:265 -> <init>
+    1:2:void onViewDetachedFromWindow(android.view.View):271:272 -> onViewDetachedFromWindow
+com.batch.android.messaging.view.formats.EmbeddedBannerContainer$3 -> com.batch.android.e0.b$c:
+# {"id":"sourceFile","fileName":"EmbeddedBannerContainer.java"}
+    com.batch.android.messaging.view.formats.EmbeddedBannerContainer this$0 -> a
+    1:1:void <init>(com.batch.android.messaging.view.formats.EmbeddedBannerContainer):317:317 -> <init>
+    1:1:void onAnimationCancel(android.animation.Animator):328:328 -> onAnimationCancel
+    1:1:void onAnimationEnd(android.animation.Animator):323:323 -> onAnimationEnd
+com.batch.android.messaging.view.formats.EmbeddedBannerContainer$BaseView -> com.batch.android.e0.b$d:
+# {"id":"sourceFile","fileName":"EmbeddedBannerContainer.java"}
+    1:1:void <init>(android.content.Context):406:406 -> <init>
+    1:2:void onAttachedToWindow():411:412 -> onAttachedToWindow
+com.batch.android.messaging.view.formats.ImageFormatView -> com.batch.android.e0.c:
+# {"id":"sourceFile","fileName":"ImageFormatView.java"}
+    android.content.Context context -> a
+    android.graphics.Point screenSizeDP -> e
+    android.widget.RelativeLayout rootContainerView -> g
+    long uptimeWhenShown -> l
+    com.batch.android.messaging.css.Document style -> d
+    com.batch.android.messaging.model.ImageMessage message -> b
+    com.batch.android.messaging.view.AnimatedCloseButton closeButton -> f
+    com.batch.android.messaging.view.helper.ImageHelper$Cache imageCache -> c
+    android.widget.ProgressBar imageViewLoader -> i
+    com.batch.android.core.Promise viewShownPromise -> m
+    com.batch.android.messaging.view.formats.ImageFormatView$OnActionListener actionListener -> k
+    com.batch.android.messaging.view.roundimage.RoundedImageView imageView -> j
+    float MODAL_CONTAINER_MARGIN_DP -> q
+    float CLOSE_PADDING_DP -> p
+    int IMAGE_FADE_IN_ANIMATION_DURATION -> r
+    float FULLSCREEN_CLOSE_BUTTON_MARGIN_DP -> o
+    float CLOSE_SIZE_DP -> n
+    com.batch.android.messaging.view.formats.ImageFormatView$ImageContainerView imageContainerView -> h
+    1:1:void <init>(android.content.Context,com.batch.android.messaging.model.ImageMessage,com.batch.android.messaging.css.Document,com.batch.android.messaging.view.helper.ImageHelper$Cache):97:97 -> <init>
+    2:46:void <init>(android.content.Context,com.batch.android.messaging.model.ImageMessage,com.batch.android.messaging.css.Document,com.batch.android.messaging.view.helper.ImageHelper$Cache):82:126 -> <init>
+    1:1:java.util.Map getRulesForView(com.batch.android.messaging.css.DOMNode):157:157 -> a
+    2:9:void addBackgroundView():163:170 -> a
+    10:40:com.batch.android.messaging.view.formats.ImageFormatView$ImageContainerView addImageContainer(android.widget.RelativeLayout):193:223 -> a
+    41:55:android.widget.ProgressBar addImageLoader(android.widget.FrameLayout):245:259 -> a
+    56:90:com.batch.android.messaging.view.AnimatedCloseButton addCloseButton(android.widget.RelativeLayout,android.view.View):264:298 -> a
+    91:92:void lambda$addCloseButton$1(android.view.View):294:295 -> a
+    93:118:void displayImage(com.batch.android.messaging.AsyncImageDownloadTask$Result):357:382 -> a
+    119:123:void lambda$displayImage$2(java.lang.Void):383:387 -> a
+    1:14:android.widget.RelativeLayout addRootContainerView():174:187 -> b
+    15:15:void lambda$addImageContainer$0(android.view.View):221:221 -> b
+    16:28:com.batch.android.messaging.view.roundimage.RoundedImageView addImageView(android.widget.FrameLayout):228:240 -> b
+    29:30:void onImageDownloadSuccess(com.batch.android.messaging.AsyncImageDownloadTask$Result):343:344 -> b
+    31:34:void onImageDownloadError(com.batch.android.messaging.model.MessagingError):349:352 -> b
+    void onImageDownloadStart() -> c
+    1:1:boolean canAutoClose():146:146 -> d
+    1:1:boolean mustWaitTapDelay():307:307 -> e
+    1:9:void onGlobalTap():311:319 -> f
+    1:1:void onShown():142:142 -> g
+    1:1:android.view.View getPanEffectsView():138:138 -> getPanEffectsView
+    1:1:com.batch.android.messaging.view.formats.ImageFormatView$ImageContainerView getPannableView():134:134 -> getPannableView
+    1:3:void startAutoCloseCountdown():150:152 -> h
+    1:7:android.view.WindowInsets onApplyWindowInsets(android.view.WindowInsets):401:407 -> onApplyWindowInsets
+    8:17:android.view.WindowInsets onApplyWindowInsets(android.view.WindowInsets):403:412 -> onApplyWindowInsets
+    1:5:void onAttachedToWindow():329:333 -> onAttachedToWindow
+    1:1:void setActionListener(com.batch.android.messaging.view.formats.ImageFormatView$OnActionListener):130:130 -> setActionListener
+com.batch.android.messaging.view.formats.ImageFormatView$ImageContainerView -> com.batch.android.e0.c$a:
+# {"id":"sourceFile","fileName":"ImageFormatView.java"}
+    com.batch.android.messaging.view.DelegatedTouchEventViewGroup$Delegate delegate -> b
+    1:1:void <init>(android.content.Context,com.batch.android.messaging.Size2D):440:440 -> <init>
+    1:1:boolean superOnTouchEvent(android.view.MotionEvent):474:474 -> a
+    1:1:boolean superOnInterceptTouchEvent(android.view.MotionEvent):469:469 -> b
+    1:4:boolean onInterceptTouchEvent(android.view.MotionEvent):445:448 -> onInterceptTouchEvent
+    1:4:boolean onTouchEvent(android.view.MotionEvent):455:458 -> onTouchEvent
+    1:1:void setTouchEventDelegate(com.batch.android.messaging.view.DelegatedTouchEventViewGroup$Delegate):464:464 -> setTouchEventDelegate
+com.batch.android.messaging.view.formats.ImageFormatView$OnActionListener -> com.batch.android.e0.c$b:
+# {"id":"sourceFile","fileName":"ImageFormatView.java"}
+    void onCloseAction() -> a
+    void onErrorAction(com.batch.android.messaging.model.MessagingError) -> a
+    void onGlobalAction() -> b
+    void onImageDisplayedAction() -> d
+com.batch.android.messaging.view.formats.UniversalRootView -> com.batch.android.e0.d:
+# {"id":"sourceFile","fileName":"UniversalRootView.java"}
+    com.batch.android.messaging.view.formats.UniversalRootView$OnActionListener actionListener -> s
+    android.widget.FrameLayout heroLayout -> e
+    com.batch.android.messaging.view.AnimatedCloseButton closeButton -> j
+    long TAP_DELAY_MILLIS -> B
+    boolean waitForHeroImage -> q
+    int HERO_LAYOUT_ID -> A
+    android.graphics.Point screenSizeDP -> u
+    long drawTimeMillis -> y
+    android.view.View heroPlaceholder -> m
+    com.batch.android.messaging.css.Document style -> p
+    java.util.Map ctasStyleRules -> i
+    int originalContentPaddingTop -> w
+    boolean landscape -> b
+    com.batch.android.messaging.view.styled.SeparatedFlexboxLayout contentLayout -> f
+    double DEFAULT_HERO_SPLIT_RATIO -> z
+    android.view.TextureView$SurfaceTextureListener surfaceHolderCallback -> t
+    android.content.Context context -> d
+    com.batch.android.messaging.AsyncImageDownloadTask$Result heroDownloadResult -> r
+    android.view.TextureView videoView -> k
+    android.widget.ProgressBar heroLoader -> n
+    int originalCloseMarginTop -> x
+    int topInset -> v
+    com.batch.android.messaging.view.roundimage.RoundedImageView heroImageView -> l
+    com.batch.android.messaging.view.styled.SeparatedFlexboxLayout ctasLayout -> g
+    com.batch.android.messaging.model.UniversalMessage message -> o
+    boolean childRelayoutingNeeded -> c
+    java.util.Map contentStyleRules -> h
+    1:1:void <init>(android.content.Context,com.batch.android.messaging.model.UniversalMessage,com.batch.android.messaging.css.Document,com.batch.android.messaging.AsyncImageDownloadTask$Result,boolean):109:109 -> <init>
+    2:60:void <init>(android.content.Context,com.batch.android.messaging.model.UniversalMessage,com.batch.android.messaging.css.Document,com.batch.android.messaging.AsyncImageDownloadTask$Result,boolean):68:126 -> <init>
+    1:2:void lambda$createViews$0(android.view.View):187:188 -> a
+    3:4:void lambda$setupContentLayout$1(int,com.batch.android.messaging.model.CTA,android.view.View):281:282 -> a
+    5:20:android.view.View getConfiguredView(android.util.Pair):317:332 -> a
+    21:21:boolean canAutoClose():554:554 -> a
+    22:29:void onHeroDownloaded(com.batch.android.messaging.AsyncImageDownloadTask$Result):581:588 -> a
+    30:30:java.util.Map getRulesForView(com.batch.android.messaging.css.DOMNode):640:640 -> a
+    31:32:java.util.Map getRulesForSeparator(com.batch.android.messaging.view.styled.SeparatedFlexboxLayout,java.lang.String):645:646 -> a
+    33:33:java.util.Map getRulesForSeparator(com.batch.android.messaging.view.styled.SeparatedFlexboxLayout,java.lang.String):645:645 -> a
+    1:40:void createViews():158:197 -> b
+    1:4:void displayHero():546:549 -> c
+    1:1:boolean mustWaitTapDelay():636:636 -> d
+    1:5:void dispatchDraw(android.graphics.Canvas):149:153 -> dispatchDraw
+    1:1:void onHeroBitmapStartsDownloading():577:577 -> e
+    1:109:void setupContentLayout():203:311 -> f
+    1:16:void setupCtaLayoutIfNeeded():421:436 -> g
+    1:79:void setupHeroLayout():338:416 -> h
+    1:99:void setupVariableLayoutParameters():444:542 -> i
+    1:1:boolean shouldApplyWindowInsetToContent():629:629 -> j
+    1:3:void startAutoCloseCountdown():558:560 -> k
+    1:6:void updateLayoutInsets():611:616 -> l
+    7:18:void updateLayoutInsets():612:623 -> l
+    1:8:android.view.WindowInsets onApplyWindowInsets(android.view.WindowInsets):595:602 -> onApplyWindowInsets
+    9:15:android.view.WindowInsets onApplyWindowInsets(android.view.WindowInsets):598:604 -> onApplyWindowInsets
+    1:3:void onDraw(android.graphics.Canvas):142:144 -> onDraw
+    1:6:void onSizeChanged(int,int,int,int):131:136 -> onSizeChanged
+    1:1:void setActionListener(com.batch.android.messaging.view.formats.UniversalRootView$OnActionListener):565:565 -> setActionListener
+    1:5:void setSurfaceHolderCallback(android.view.TextureView$SurfaceTextureListener):569:573 -> setSurfaceHolderCallback
+com.batch.android.messaging.view.formats.UniversalRootView$OnActionListener -> com.batch.android.e0.d$a:
+# {"id":"sourceFile","fileName":"UniversalRootView.java"}
+    void onCTAAction(int,com.batch.android.messaging.model.CTA) -> a
+    void onCloseAction() -> a
+com.batch.android.messaging.view.formats.WebFormatView -> com.batch.android.e0.e:
+# {"id":"sourceFile","fileName":"WebFormatView.java"}
+    android.content.Context context -> a
+    android.widget.RelativeLayout rootContainerView -> f
+    com.batch.android.messaging.css.Document style -> c
+    boolean timeoutDone -> j
+    com.batch.android.messaging.view.AnimatedCloseButton closeButton -> e
+    java.lang.String STATE_TIMEOUT_DONE_KEY -> l
+    android.widget.ProgressBar webViewLoader -> g
+    com.batch.android.messaging.WebViewActionListener actionListener -> k
+    com.batch.android.messaging.model.WebViewMessage message -> b
+    android.graphics.Point screenSizeDP -> d
+    com.batch.android.messaging.view.styled.WebView webView -> i
+    float FULLSCREEN_CLOSE_BUTTON_MARGIN_DP -> o
+    float CLOSE_PADDING_DP -> n
+    android.os.Handler timeoutHandler -> h
+    float CLOSE_SIZE_DP -> m
+    1:1:void <init>(android.content.Context,com.batch.android.messaging.model.WebViewMessage,com.batch.android.messaging.css.Document,com.batch.android.BatchMessagingWebViewJavascriptBridge):100:100 -> <init>
+    2:264:void <init>(android.content.Context,com.batch.android.messaging.model.WebViewMessage,com.batch.android.messaging.css.Document,com.batch.android.BatchMessagingWebViewJavascriptBridge):84:346 -> <init>
+    1:1:com.batch.android.messaging.WebViewActionListener access$000(com.batch.android.messaging.view.formats.WebFormatView):63:63 -> a
+    2:2:boolean access$402(com.batch.android.messaging.view.formats.WebFormatView,boolean):63:63 -> a
+    3:3:void access$500(com.batch.android.messaging.view.formats.WebFormatView,java.lang.String,int):63:63 -> a
+    4:4:void access$600(com.batch.android.messaging.view.formats.WebFormatView,com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause,com.batch.android.messaging.model.MessagingError,java.lang.String):63:63 -> a
+    5:23:void handleWebViewError(java.lang.String,int):373:391 -> a
+    24:25:void closeMessageWithError(com.batch.android.BatchMessagingWebViewJavascriptBridge$DevelopmentErrorCause,com.batch.android.messaging.model.MessagingError,java.lang.String):411:412 -> a
+    26:29:void restoreState(android.os.Bundle):443:446 -> a
+    30:30:java.util.Map getRulesForView(com.batch.android.messaging.css.DOMNode):459:459 -> a
+    31:37:android.widget.RelativeLayout addRootContainerView():465:471 -> a
+    38:61:com.batch.android.messaging.view.AnimatedCloseButton addCloseButton(android.widget.RelativeLayout):534:557 -> a
+    62:62:void lambda$addCloseButton$0(android.view.View):554:554 -> a
+    1:1:boolean canAutoClose():0:0 -> b
+    2:2:void access$100(com.batch.android.messaging.view.formats.WebFormatView):63:63 -> b
+    3:7:void saveState(android.os.Bundle):434:438 -> b
+    8:18:com.batch.android.messaging.view.styled.WebView addWebView(android.widget.RelativeLayout):476:486 -> b
+    1:1:void access$200(com.batch.android.messaging.view.formats.WebFormatView):63:63 -> c
+    2:3:void closeMessage():395:396 -> c
+    4:36:android.widget.ProgressBar addWebViewLoader(android.widget.RelativeLayout):491:523 -> c
+    1:1:androidx.appcompat.app.AlertDialog$Builder access$300(com.batch.android.messaging.view.formats.WebFormatView):63:63 -> d
+    2:3:void dismissMessage():401:402 -> d
+    1:1:androidx.appcompat.app.AlertDialog$Builder makeAlertBuilder():455:455 -> e
+    1:2:void performTimeout():424:425 -> f
+    1:2:void removeWebViewLoader():528:529 -> g
+    1:1:android.view.View getCloseButton():350:350 -> getCloseButton
+    1:3:void scheduleTimeout():417:419 -> h
+    1:15:void startLoading():354:368 -> i
+    1:7:android.view.WindowInsets onApplyWindowInsets(android.view.WindowInsets):570:576 -> onApplyWindowInsets
+    8:17:android.view.WindowInsets onApplyWindowInsets(android.view.WindowInsets):572:581 -> onApplyWindowInsets
+    1:1:void setActionListener(com.batch.android.messaging.WebViewActionListener):430:430 -> setActionListener
+com.batch.android.messaging.view.formats.WebFormatView$1 -> com.batch.android.e0.e$a:
+# {"id":"sourceFile","fileName":"WebFormatView.java"}
+    android.content.Context val$context -> a
+    com.batch.android.messaging.view.formats.WebFormatView this$0 -> b
+    1:1:void <init>(com.batch.android.messaging.view.formats.WebFormatView,android.content.Context):130:130 -> <init>
+    1:1:void lambda$onJsAlert$0(android.webkit.JsResult,android.content.DialogInterface,int):185:185 -> a
+    2:2:void lambda$onJsAlert$1(android.webkit.JsResult,android.content.DialogInterface):189:189 -> a
+    3:4:void lambda$onJsPrompt$4(android.widget.EditText,android.webkit.JsPromptResult,android.content.DialogInterface,int):233:234 -> a
+    5:5:void lambda$onJsPrompt$5(android.webkit.JsPromptResult,android.content.DialogInterface,int):240:240 -> a
+    6:6:void lambda$onJsPrompt$6(android.webkit.JsPromptResult,android.content.DialogInterface):244:244 -> a
+    1:1:void lambda$onJsConfirm$2(android.webkit.JsResult,android.content.DialogInterface,int):204:204 -> b
+    2:2:void lambda$onJsConfirm$3(android.webkit.JsResult,android.content.DialogInterface):208:208 -> b
+    1:3:void onCloseWindow(android.webkit.WebView):163:165 -> onCloseWindow
+    1:21:boolean onCreateWindow(android.webkit.WebView,boolean,boolean,android.os.Message):138:158 -> onCreateWindow
+    1:14:boolean onJsAlert(android.webkit.WebView,java.lang.String,java.lang.String,android.webkit.JsResult):179:192 -> onJsAlert
+    1:14:boolean onJsConfirm(android.webkit.WebView,java.lang.String,java.lang.String,android.webkit.JsResult):198:211 -> onJsConfirm
+    1:25:boolean onJsPrompt(android.webkit.WebView,java.lang.String,java.lang.String,java.lang.String,android.webkit.JsPromptResult):223:247 -> onJsPrompt
+    1:3:void onProgressChanged(android.webkit.WebView,int):171:173 -> onProgressChanged
+com.batch.android.messaging.view.formats.WebFormatView$2 -> com.batch.android.e0.e$b:
+# {"id":"sourceFile","fileName":"WebFormatView.java"}
+    com.batch.android.messaging.view.formats.WebFormatView this$0 -> b
+    boolean mainFrameFinished -> a
+    1:2:void <init>(com.batch.android.messaging.view.formats.WebFormatView):254:255 -> <init>
+    1:5:void onBatchPageStartedDrawing():263:267 -> a
+    1:2:void onPageCommitVisible(android.webkit.WebView,java.lang.String):273:274 -> onPageCommitVisible
+    1:4:void onPageFinished(android.webkit.WebView,java.lang.String):280:283 -> onPageFinished
+    1:8:void onReceivedError(android.webkit.WebView,int,java.lang.String,java.lang.String):294:301 -> onReceivedError
+    9:11:void onReceivedError(android.webkit.WebView,android.webkit.WebResourceRequest,android.webkit.WebResourceError):337:339 -> onReceivedError
+    1:6:void onReceivedHttpError(android.webkit.WebView,android.webkit.WebResourceRequest,android.webkit.WebResourceResponse):320:325 -> onReceivedHttpError
+    7:7:void onReceivedHttpError(android.webkit.WebView,android.webkit.WebResourceRequest,android.webkit.WebResourceResponse):322:322 -> onReceivedHttpError
+    1:3:void onReceivedSslError(android.webkit.WebView,android.webkit.SslErrorHandler,android.net.http.SslError):307:309 -> onReceivedSslError
+com.batch.android.messaging.view.helper.ImageHelper -> com.batch.android.f0.a:
+# {"id":"sourceFile","fileName":"ImageHelper.java"}
+    1:1:void <init>():11:11 -> <init>
+    1:11:void setDownloadResultInImage(android.widget.ImageView,com.batch.android.messaging.AsyncImageDownloadTask$Result):24:34 -> a
+com.batch.android.messaging.view.helper.ImageHelper$Cache -> com.batch.android.f0.a$a:
+# {"id":"sourceFile","fileName":"ImageHelper.java"}
+    void put(com.batch.android.messaging.AsyncImageDownloadTask$Result) -> a
+    com.batch.android.messaging.AsyncImageDownloadTask$Result get(java.lang.String) -> b
+com.batch.android.messaging.view.helper.StyleHelper -> com.batch.android.f0.b:
+# {"id":"sourceFile","fileName":"StyleHelper.java"}
+    java.lang.String TAG -> a
+    int RIPPLE_COLOR -> b
+    1:1:void <clinit>():50:50 -> <clinit>
+    1:1:void <init>():55:55 -> <init>
+    1:43:void applyCommonRules(android.view.View,java.util.Map):94:136 -> a
+    44:202:void applyCommonRules(android.view.View,java.util.Map):133:291 -> a
+    203:268:void applyCommonRules(android.view.View,java.util.Map):245:310 -> a
+    269:269:void applyCommonRules(android.view.View,java.util.Map):306:306 -> a
+    270:352:com.batch.android.messaging.view.FlexboxLayout$LayoutParams getFlexLayoutParams(android.content.Context,com.batch.android.messaging.view.FlexboxLayout$LayoutParams,java.util.Map):329:411 -> a
+    353:353:com.batch.android.messaging.view.FlexboxLayout$LayoutParams getFlexLayoutParams(android.content.Context,com.batch.android.messaging.view.FlexboxLayout$LayoutParams,java.util.Map):407:407 -> a
+    354:441:com.batch.android.messaging.view.percent.PercentRelativeLayout$LayoutParams getRelativeLayoutParams(android.content.Context,com.batch.android.messaging.view.percent.PercentRelativeLayout$LayoutParams,java.util.Map,int,android.view.View):436:523 -> a
+    442:517:com.batch.android.messaging.view.percent.PercentRelativeLayout$LayoutParams getRelativeLayoutParams(android.content.Context,com.batch.android.messaging.view.percent.PercentRelativeLayout$LayoutParams,java.util.Map,int,android.view.View):461:536 -> a
+    518:518:com.batch.android.messaging.view.percent.PercentRelativeLayout$LayoutParams getRelativeLayoutParams(android.content.Context,com.batch.android.messaging.view.percent.PercentRelativeLayout$LayoutParams,java.util.Map,int,android.view.View):532:532 -> a
+    519:576:android.widget.FrameLayout$LayoutParams getFrameLayoutParams(android.content.Context,android.widget.FrameLayout$LayoutParams,java.util.Map):559:616 -> a
+    577:621:android.widget.FrameLayout$LayoutParams getFrameLayoutParams(android.content.Context,android.widget.FrameLayout$LayoutParams,java.util.Map):581:625 -> a
+    622:622:android.widget.FrameLayout$LayoutParams getFrameLayoutParams(android.content.Context,android.widget.FrameLayout$LayoutParams,java.util.Map):621:621 -> a
+    623:623:int dpToPixels(android.content.res.Resources,java.lang.Float):642:642 -> a
+    624:624:java.lang.Float optFloat(java.lang.String):691:691 -> a
+    625:628:int darkenColor(int):722:725 -> a
+    629:652:android.graphics.drawable.Drawable getPressableGradientDrawable(com.batch.android.messaging.view.PositionableGradientDrawable):736:759 -> a
+    1:1:float pixelsToDp(android.content.res.Resources,java.lang.Float):656:656 -> b
+    2:2:java.lang.Integer optInt(java.lang.String):672:672 -> b
+    1:5:int parseColor(java.lang.String):705:709 -> c
+    1:3:com.batch.android.messaging.css.Document parseStyle(java.lang.String):67:69 -> d
+    4:12:com.batch.android.messaging.css.Document parseStyle(java.lang.String):65:73 -> d
+com.batch.android.messaging.view.helper.ThemeHelper -> com.batch.android.f0.c:
+# {"id":"sourceFile","fileName":"ThemeHelper.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:9:int getDefaultLightTheme(android.content.Context):53:61 -> a
+    10:10:int getThemeByName(java.lang.String,android.content.res.Resources,java.lang.String):75:75 -> a
+    1:18:int getDefaultTheme(android.content.Context):22:39 -> b
+com.batch.android.messaging.view.helper.ViewCompat -> com.batch.android.f0.d:
+# {"id":"sourceFile","fileName":"ViewCompat.java"}
+    java.util.concurrent.atomic.AtomicInteger sNextGeneratedId -> a
+    1:2:void <clinit>():38:39 -> <clinit>
+    1:1:void <init>():33:33 -> <init>
+    1:11:int generateViewId():50:60 -> a
+    12:28:android.graphics.Point getScreenSize(android.content.Context):68:84 -> a
+    1:5:boolean isTouchExplorationEnabled(android.content.Context):98:102 -> b
+com.batch.android.messaging.view.percent.PercentFrameLayout -> com.batch.android.g0.a:
+# {"id":"sourceFile","fileName":"PercentFrameLayout.java"}
+    com.batch.android.messaging.view.percent.PercentLayoutHelper mHelper -> a
+    1:1:void <init>(android.content.Context):70:70 -> <init>
+    2:2:void <init>(android.content.Context):67:67 -> <init>
+    3:3:void <init>(android.content.Context,android.util.AttributeSet):74:74 -> <init>
+    4:4:void <init>(android.content.Context,android.util.AttributeSet):67:67 -> <init>
+    5:5:void <init>(android.content.Context,android.util.AttributeSet,int):78:78 -> <init>
+    6:6:void <init>(android.content.Context,android.util.AttributeSet,int):67:67 -> <init>
+    1:2:void onLayout(boolean,int,int,int,int):92:93 -> onLayout
+    1:4:void onMeasure(int,int):83:86 -> onMeasure
+com.batch.android.messaging.view.percent.PercentFrameLayout$LayoutParams -> com.batch.android.g0.a$a:
+# {"id":"sourceFile","fileName":"PercentFrameLayout.java"}
+    com.batch.android.messaging.view.percent.PercentLayoutHelper$PercentLayoutInfo mPercentLayoutInfo -> a
+    1:1:void <init>(int,int):103:103 -> <init>
+    2:2:void <init>(int,int,int):107:107 -> <init>
+    3:3:void <init>(android.view.ViewGroup$LayoutParams):111:111 -> <init>
+    4:4:void <init>(android.view.ViewGroup$MarginLayoutParams):115:115 -> <init>
+    5:6:void <init>(android.widget.FrameLayout$LayoutParams):119:120 -> <init>
+    7:8:void <init>(com.batch.android.messaging.view.percent.PercentFrameLayout$LayoutParams):124:125 -> <init>
+    1:5:com.batch.android.messaging.view.percent.PercentLayoutHelper$PercentLayoutInfo getPercentLayoutInfo():130:134 -> a
+    1:1:void setBaseAttributes(android.content.res.TypedArray,int,int):139:139 -> setBaseAttributes
+com.batch.android.messaging.view.percent.PercentLayoutHelper -> com.batch.android.g0.b:
+# {"id":"sourceFile","fileName":"PercentLayoutHelper.java"}
+    android.view.ViewGroup mHost -> a
+    java.lang.String TAG -> b
+    1:2:void <init>(android.view.ViewGroup):75:76 -> <init>
+    1:2:void fetchWidthAndHeight(android.view.ViewGroup$LayoutParams,android.content.res.TypedArray,int,int):90:91 -> a
+    3:11:void adjustChildren(int,int):102:110 -> a
+    12:39:void adjustChildren(int,int):103:130 -> a
+    40:61:boolean handleMeasuredStateTooSmall():181:202 -> a
+    62:63:boolean shouldHandleMeasuredHeightTooSmall(android.view.View,com.batch.android.messaging.view.percent.PercentLayoutHelper$PercentLayoutInfo):217:218 -> a
+    1:16:void restoreOriginalParams():143:158 -> b
+    17:18:boolean shouldHandleMeasuredWidthTooSmall(android.view.View,com.batch.android.messaging.view.percent.PercentLayoutHelper$PercentLayoutInfo):208:209 -> b
+com.batch.android.messaging.view.percent.PercentLayoutHelper$PercentLayoutInfo -> com.batch.android.g0.b$a:
+# {"id":"sourceFile","fileName":"PercentLayoutHelper.java"}
+    float endMarginPercent -> h
+    float startMarginPercent -> g
+    float bottomMarginPercent -> f
+    float rightMarginPercent -> e
+    float topMarginPercent -> d
+    float leftMarginPercent -> c
+    float heightPercent -> b
+    float widthPercent -> a
+    android.view.ViewGroup$MarginLayoutParams mPreservedParams -> i
+    1:10:void <init>():249:258 -> <init>
+    1:11:void fillLayoutParams(android.view.ViewGroup$LayoutParams,int,int):266:276 -> a
+    12:41:void fillMarginLayoutParams(android.view.ViewGroup$MarginLayoutParams,int,int):285:314 -> a
+    42:48:void restoreMarginLayoutParams(android.view.ViewGroup$MarginLayoutParams):340:346 -> a
+    49:50:void restoreLayoutParams(android.view.ViewGroup$LayoutParams):355:356 -> a
+    1:11:java.lang.String toString():320:330 -> toString
+    12:12:java.lang.String toString():320:320 -> toString
+com.batch.android.messaging.view.percent.PercentLayoutHelper$PercentLayoutParams -> com.batch.android.g0.b$b:
+# {"id":"sourceFile","fileName":"PercentLayoutHelper.java"}
+    com.batch.android.messaging.view.percent.PercentLayoutHelper$PercentLayoutInfo getPercentLayoutInfo() -> a
+com.batch.android.messaging.view.percent.PercentRelativeLayout -> com.batch.android.g0.c:
+# {"id":"sourceFile","fileName":"PercentRelativeLayout.java"}
+    com.batch.android.messaging.view.percent.PercentLayoutHelper mHelper -> a
+    1:1:void <init>(android.content.Context):70:70 -> <init>
+    2:2:void <init>(android.content.Context):67:67 -> <init>
+    3:3:void <init>(android.content.Context,android.util.AttributeSet):74:74 -> <init>
+    4:4:void <init>(android.content.Context,android.util.AttributeSet):67:67 -> <init>
+    5:5:void <init>(android.content.Context,android.util.AttributeSet,int):78:78 -> <init>
+    6:6:void <init>(android.content.Context,android.util.AttributeSet,int):67:67 -> <init>
+    1:2:void onLayout(boolean,int,int,int,int):92:93 -> onLayout
+    1:4:void onMeasure(int,int):83:86 -> onMeasure
+com.batch.android.messaging.view.percent.PercentRelativeLayout$LayoutParams -> com.batch.android.g0.c$a:
+# {"id":"sourceFile","fileName":"PercentRelativeLayout.java"}
+    com.batch.android.messaging.view.percent.PercentLayoutHelper$PercentLayoutInfo mPercentLayoutInfo -> a
+    1:1:void <init>(int,int):103:103 -> <init>
+    2:2:void <init>(android.view.ViewGroup$LayoutParams):107:107 -> <init>
+    3:3:void <init>(android.view.ViewGroup$MarginLayoutParams):111:111 -> <init>
+    1:5:com.batch.android.messaging.view.percent.PercentLayoutHelper$PercentLayoutInfo getPercentLayoutInfo():116:120 -> a
+    1:1:void setBaseAttributes(android.content.res.TypedArray,int,int):125:125 -> setBaseAttributes
+com.batch.android.messaging.view.roundimage.Corner -> com.batch.android.h0.a:
+# {"id":"sourceFile","fileName":"Corner.java"}
+    int BOTTOM_LEFT -> d
+    int TOP_RIGHT -> b
+    int BOTTOM_RIGHT -> c
+    int TOP_LEFT -> a
+com.batch.android.messaging.view.roundimage.RoundedDrawable -> com.batch.android.h0.b:
+# {"id":"sourceFile","fileName":"RoundedDrawable.java"}
+    boolean mRebuildShader -> n
+    android.graphics.RectF mDrawableRect -> b
+    android.graphics.Matrix mShaderMatrix -> j
+    android.graphics.RectF mBounds -> a
+    android.graphics.RectF mBitmapRect -> c
+    android.content.res.ColorStateList mBorderColor -> s
+    int mBitmapWidth -> f
+    android.graphics.RectF mBorderRect -> h
+    int mBitmapHeight -> g
+    android.graphics.Bitmap mBitmap -> d
+    boolean[] mCornersRounded -> p
+    boolean mOval -> q
+    android.graphics.RectF mSquareCornersRect -> k
+    android.graphics.Shader$TileMode mTileModeX -> l
+    java.lang.String TAG -> u
+    android.graphics.Paint mBorderPaint -> i
+    android.graphics.Shader$TileMode mTileModeY -> m
+    android.widget.ImageView$ScaleType mScaleType -> t
+    android.graphics.Paint mBitmapPaint -> e
+    int DEFAULT_BORDER_COLOR -> v
+    float mBorderWidth -> r
+    float mCornerRadius -> o
+    1:1:void <init>(android.graphics.Bitmap):74:74 -> <init>
+    2:42:void <init>(android.graphics.Bitmap):49:89 -> <init>
+    1:1:com.batch.android.messaging.view.roundimage.RoundedDrawable fromBitmap(android.graphics.Bitmap):94:94 -> a
+    2:16:android.graphics.Bitmap drawableToBitmap(android.graphics.drawable.Drawable):130:144 -> a
+    17:49:void redrawBitmapForSquareCorners(android.graphics.Canvas):309:341 -> a
+    50:50:float getCornerRadius(int):444:444 -> a
+    51:64:com.batch.android.messaging.view.roundimage.RoundedDrawable setCornerRadius(int,float):466:479 -> a
+    65:82:com.batch.android.messaging.view.roundimage.RoundedDrawable setCornerRadius(float,float,float,float):495:512 -> a
+    83:93:com.batch.android.messaging.view.roundimage.RoundedDrawable setCornerRadius(float,float,float,float):510:520 -> a
+    94:94:com.batch.android.messaging.view.roundimage.RoundedDrawable setCornerRadius(float,float,float,float):504:504 -> a
+    95:96:com.batch.android.messaging.view.roundimage.RoundedDrawable setBorderWidth(float):529:530 -> a
+    97:97:int getBorderColor():535:535 -> a
+    98:99:com.batch.android.messaging.view.roundimage.RoundedDrawable setBorderColor(android.content.res.ColorStateList):547:548 -> a
+    100:100:com.batch.android.messaging.view.roundimage.RoundedDrawable setOval(boolean):557:557 -> a
+    101:105:com.batch.android.messaging.view.roundimage.RoundedDrawable setScaleType(android.widget.ImageView$ScaleType):567:571 -> a
+    106:109:com.batch.android.messaging.view.roundimage.RoundedDrawable setTileModeX(android.graphics.Shader$TileMode):581:584 -> a
+    110:111:boolean only(int,boolean[]):603:604 -> a
+    112:112:boolean all(boolean[]):621:621 -> a
+    1:22:android.graphics.drawable.Drawable fromDrawable(android.graphics.drawable.Drawable):102:123 -> b
+    23:56:void redrawBorderForSquareCorners(android.graphics.Canvas):346:379 -> b
+    57:57:com.batch.android.messaging.view.roundimage.RoundedDrawable setCornerRadius(float):454:454 -> b
+    58:58:com.batch.android.messaging.view.roundimage.RoundedDrawable setBorderColor(int):539:539 -> b
+    59:59:android.content.res.ColorStateList getBorderColors():543:543 -> b
+    60:63:com.batch.android.messaging.view.roundimage.RoundedDrawable setTileModeY(android.graphics.Shader$TileMode):594:597 -> b
+    64:64:boolean any(boolean[]):612:612 -> b
+    1:1:float getBorderWidth():525:525 -> c
+    1:1:float getCornerRadius():436:436 -> d
+    1:32:void draw(android.graphics.Canvas):271:302 -> draw
+    1:1:android.widget.ImageView$ScaleType getScaleType():562:562 -> e
+    1:1:android.graphics.Bitmap getSourceBitmap():152:152 -> f
+    1:1:android.graphics.Shader$TileMode getTileModeX():577:577 -> g
+    1:1:int getAlpha():390:390 -> getAlpha
+    1:1:android.graphics.ColorFilter getColorFilter():401:401 -> getColorFilter
+    1:1:int getIntrinsicHeight():429:429 -> getIntrinsicHeight
+    1:1:int getIntrinsicWidth():424:424 -> getIntrinsicWidth
+    1:1:android.graphics.Shader$TileMode getTileModeY():590:590 -> h
+    1:1:boolean isOval():553:553 -> i
+    1:1:boolean isStateful():157:157 -> isStateful
+    1:1:android.graphics.Bitmap toBitmap():630:630 -> j
+    1:78:void updateShaderMatrix():176:253 -> k
+    79:83:void updateShaderMatrix():243:247 -> k
+    84:88:void updateShaderMatrix():236:240 -> k
+    89:106:void updateShaderMatrix():208:225 -> k
+    107:124:void updateShaderMatrix():188:205 -> k
+    125:131:void updateShaderMatrix():178:184 -> k
+    132:207:void updateShaderMatrix():182:257 -> k
+    1:5:void onBoundsChange(android.graphics.Rect):262:266 -> onBoundsChange
+    1:6:boolean onStateChange(int[]):162:167 -> onStateChange
+    1:2:void setAlpha(int):395:396 -> setAlpha
+    1:2:void setColorFilter(android.graphics.ColorFilter):406:407 -> setColorFilter
+    1:2:void setDither(boolean):412:413 -> setDither
+    1:2:void setFilterBitmap(boolean):418:419 -> setFilterBitmap
+com.batch.android.messaging.view.roundimage.RoundedDrawable$1 -> com.batch.android.h0.b$a:
+# {"id":"sourceFile","fileName":"RoundedDrawable.java"}
+    int[] $SwitchMap$android$widget$ImageView$ScaleType -> a
+    1:1:void <clinit>():176:176 -> <clinit>
+com.batch.android.messaging.view.roundimage.RoundedImageView -> com.batch.android.h0.c:
+# {"id":"sourceFile","fileName":"RoundedImageView.java"}
+    int mBackgroundResource -> l
+    android.graphics.drawable.Drawable mDrawable -> g
+    boolean mIsOval -> i
+    boolean[] roundedCorners -> q
+    java.lang.String TAG -> v
+    android.graphics.Shader$TileMode mTileModeX -> n
+    android.content.res.ColorStateList mBorderColor -> c
+    float DEFAULT_RADIUS -> w
+    boolean mColorMod -> f
+    boolean mHasColorFilter -> h
+    int TILE_MODE_MIRROR -> u
+    boolean $assertionsDisabled -> A
+    int TILE_MODE_CLAMP -> s
+    android.graphics.ColorFilter mColorFilter -> e
+    boolean mMutateBackground -> j
+    int mResource -> k
+    float mBorderWidth -> d
+    float[] mCornerRadii -> a
+    android.widget.ImageView$ScaleType[] SCALE_TYPES -> z
+    android.graphics.drawable.Drawable mBackgroundDrawable -> b
+    android.graphics.Shader$TileMode mTileModeY -> o
+    float DEFAULT_BORDER_WIDTH -> x
+    android.widget.ImageView$ScaleType mScaleType -> m
+    int TILE_MODE_REPEAT -> t
+    float cornerRadius -> p
+    int TILE_MODE_UNDEFINED -> r
+    android.graphics.Shader$TileMode DEFAULT_TILE_MODE -> y
+    1:15:void <clinit>():48:62 -> <clinit>
+    1:1:void <init>(android.content.Context):96:96 -> <init>
+    2:22:void <init>(android.content.Context):73:93 -> <init>
+    23:23:void <init>(android.content.Context,android.util.AttributeSet):100:100 -> <init>
+    24:24:void <init>(android.content.Context,android.util.AttributeSet,int):104:104 -> <init>
+    25:45:void <init>(android.content.Context,android.util.AttributeSet,int):73:93 -> <init>
+    1:4:void applyColorMod():266:269 -> a
+    5:27:void updateAttrs(android.graphics.drawable.Drawable,android.widget.ImageView$ScaleType):281:303 -> a
+    28:28:float getCornerRadius(int):342:342 -> a
+    29:29:void setCornerRadiusDimen(int,int):362:362 -> a
+    30:37:void setCornerRadius(int,float):387:394 -> a
+    38:54:void setCornerRadius(float,float,float,float):407:423 -> a
+    55:61:void mutateBackground(boolean):517:523 -> a
+    62:143:void applyStyleRules(java.util.Map):535:616 -> a
+    144:144:void applyStyleRules(java.util.Map):612:612 -> a
+    1:1:android.graphics.Shader$TileMode parseTileMode(int):114:114 -> b
+    2:2:android.graphics.Shader$TileMode parseTileMode(int):112:112 -> b
+    3:3:android.graphics.Shader$TileMode parseTileMode(int):110:110 -> b
+    4:8:void updateBackgroundDrawableAttrs(boolean):243:247 -> b
+    9:9:boolean isOval():472:472 -> b
+    1:1:boolean mutatesBackground():513:513 -> c
+    1:17:android.graphics.drawable.Drawable resolveBackgroundResource():219:235 -> d
+    1:2:void drawableStateChanged():122:123 -> drawableStateChanged
+    1:17:android.graphics.drawable.Drawable resolveResource():179:195 -> e
+    1:1:void updateDrawableAttrs():239:239 -> f
+    1:1:int getBorderColor():447:447 -> getBorderColor
+    1:1:android.content.res.ColorStateList getBorderColors():455:455 -> getBorderColors
+    1:1:float getBorderWidth():427:427 -> getBorderWidth
+    1:1:float getCornerRadius():321:321 -> getCornerRadius
+    1:2:float getMaxCornerRadius():329:330 -> getMaxCornerRadius
+    1:1:android.widget.ImageView$ScaleType getScaleType():128:128 -> getScaleType
+    1:1:android.graphics.Shader$TileMode getTileModeX():483:483 -> getTileModeX
+    1:1:android.graphics.Shader$TileMode getTileModeY():498:498 -> getTileModeY
+    1:1:void setBackground(android.graphics.drawable.Drawable):200:200 -> setBackground
+    1:2:void setBackgroundColor(int):214:215 -> setBackgroundColor
+    1:4:void setBackgroundDrawable(android.graphics.drawable.Drawable):311:314 -> setBackgroundDrawable
+    1:4:void setBackgroundResource(int):205:208 -> setBackgroundResource
+    1:1:void setBorderColor(int):451:451 -> setBorderColor
+    2:10:void setBorderColor(android.content.res.ColorStateList):459:467 -> setBorderColor
+    1:1:void setBorderWidth(int):431:431 -> setBorderWidth
+    2:9:void setBorderWidth(float):435:442 -> setBorderWidth
+    1:6:void setColorFilter(android.graphics.ColorFilter):253:258 -> setColorFilter
+    1:6:void setCornerRadius(float):371:376 -> setCornerRadius
+    7:7:void setCornerRadius(float):372:372 -> setCornerRadius
+    1:2:void setCornerRadiusDimen(int):351:352 -> setCornerRadiusDimen
+    1:5:void setImageBitmap(android.graphics.Bitmap):155:159 -> setImageBitmap
+    1:4:void setImageDrawable(android.graphics.drawable.Drawable):147:150 -> setImageDrawable
+    1:5:void setImageResource(int):164:168 -> setImageResource
+    1:2:void setImageURI(android.net.Uri):174:175 -> setImageURI
+    1:4:void setOval(boolean):476:479 -> setOval
+    1:9:void setScaleType(android.widget.ImageView$ScaleType):133:141 -> setScaleType
+    1:8:void setTileModeX(android.graphics.Shader$TileMode):487:494 -> setTileModeX
+    1:8:void setTileModeY(android.graphics.Shader$TileMode):502:509 -> setTileModeY
+com.batch.android.messaging.view.roundimage.RoundedTransformationBuilder -> com.batch.android.h0.d:
+# {"id":"sourceFile","fileName":"RoundedTransformationBuilder.java"}
+    android.content.res.ColorStateList mBorderColor -> e
+    float mBorderWidth -> d
+    android.util.DisplayMetrics mDisplayMetrics -> a
+    float[] mCornerRadii -> b
+    android.widget.ImageView$ScaleType mScaleType -> f
+    boolean mOval -> c
+    1:1:void <init>():37:37 -> <init>
+    2:10:void <init>():30:38 -> <init>
+    1:1:com.batch.android.messaging.view.roundimage.RoundedTransformationBuilder scaleType(android.widget.ImageView$ScaleType):42:42 -> a
+    2:2:com.batch.android.messaging.view.roundimage.RoundedTransformationBuilder cornerRadius(int,float):68:68 -> a
+    3:3:com.batch.android.messaging.view.roundimage.RoundedTransformationBuilder borderWidth(float):100:100 -> a
+    4:4:com.batch.android.messaging.view.roundimage.RoundedTransformationBuilder borderColor(int):122:122 -> a
+    5:5:com.batch.android.messaging.view.roundimage.RoundedTransformationBuilder borderColor(android.content.res.ColorStateList):133:133 -> a
+    6:6:com.batch.android.messaging.view.roundimage.RoundedTransformationBuilder oval(boolean):144:144 -> a
+    1:1:com.batch.android.messaging.view.roundimage.RoundedTransformationBuilder cornerRadiusDp(int,float):90:90 -> b
+    2:2:com.batch.android.messaging.view.roundimage.RoundedTransformationBuilder borderWidthDp(float):111:111 -> b
+    1:4:com.batch.android.messaging.view.roundimage.RoundedTransformationBuilder cornerRadius(float):53:56 -> c
+    1:1:com.batch.android.messaging.view.roundimage.RoundedTransformationBuilder cornerRadiusDp(float):79:79 -> d
+com.batch.android.messaging.view.styled.Button -> com.batch.android.messaging.view.styled.a:
+# {"id":"sourceFile","fileName":"Button.java"}
+    1:1:void <init>(android.content.Context):17:17 -> <init>
+    2:2:void <init>(android.content.Context,android.util.AttributeSet):21:21 -> <init>
+    3:3:void <init>(android.content.Context,android.util.AttributeSet,int):25:25 -> <init>
+    1:13:void applyStyleRules(java.util.Map):30:42 -> a
+com.batch.android.messaging.view.styled.SeparatedFlexboxLayout -> com.batch.android.i0.a:
+# {"id":"sourceFile","fileName":"SeparatedFlexboxLayout.java"}
+    com.batch.android.messaging.view.DelegatedTouchEventViewGroup$Delegate delegate -> G
+    java.lang.String separatorPrefix -> H
+    com.batch.android.messaging.view.styled.SeparatedFlexboxLayout$SeparatorStyleProvider styleProvider -> I
+    int separatorCount -> J
+    1:1:void <init>(android.content.Context,java.lang.String,com.batch.android.messaging.view.styled.SeparatedFlexboxLayout$SeparatorStyleProvider):29:29 -> <init>
+    2:14:void <init>(android.content.Context,java.lang.String,com.batch.android.messaging.view.styled.SeparatedFlexboxLayout$SeparatorStyleProvider):26:38 -> <init>
+    15:15:void <init>(android.content.Context,java.lang.String,com.batch.android.messaging.view.styled.SeparatedFlexboxLayout$SeparatorStyleProvider):34:34 -> <init>
+    1:50:void applyStyleRules(java.util.Map):92:141 -> a
+    51:51:boolean superOnTouchEvent(android.view.MotionEvent):182:182 -> a
+    1:5:void addView(android.view.View):45:49 -> addView
+    1:1:void internalAddView(android.view.View):53:53 -> b
+    2:2:boolean superOnInterceptTouchEvent(android.view.MotionEvent):177:177 -> b
+    1:9:void addSeparator():72:80 -> c
+    10:10:void addSeparator():78:78 -> c
+    11:21:void addSeparator():77:87 -> c
+    1:1:boolean isHorizontal():57:57 -> d
+    1:1:java.lang.String getSeparatorPrefix():65:65 -> getSeparatorPrefix
+    1:4:boolean onInterceptTouchEvent(android.view.MotionEvent):153:156 -> onInterceptTouchEvent
+    1:4:boolean onTouchEvent(android.view.MotionEvent):163:166 -> onTouchEvent
+    1:1:void setTouchEventDelegate(com.batch.android.messaging.view.DelegatedTouchEventViewGroup$Delegate):172:172 -> setTouchEventDelegate
+com.batch.android.messaging.view.styled.SeparatedFlexboxLayout$SeparatorStyleProvider -> com.batch.android.i0.a$a:
+# {"id":"sourceFile","fileName":"SeparatedFlexboxLayout.java"}
+    java.util.Map getRulesForSeparator(com.batch.android.messaging.view.styled.SeparatedFlexboxLayout,java.lang.String) -> a
+com.batch.android.messaging.view.styled.SeparatorView -> com.batch.android.i0.b:
+# {"id":"sourceFile","fileName":"SeparatorView.java"}
+    1:1:void <init>(android.content.Context):14:14 -> <init>
+    1:1:void applyStyleRules(java.util.Map):19:19 -> a
+com.batch.android.messaging.view.styled.Styleable -> com.batch.android.i0.c:
+# {"id":"sourceFile","fileName":"Styleable.java"}
+    void applyStyleRules(java.util.Map) -> a
+com.batch.android.messaging.view.styled.TextView -> com.batch.android.messaging.view.styled.TextView:
+# {"id":"sourceFile","fileName":"TextView.java"}
+    android.graphics.Typeface typefaceOverride -> b
+    android.graphics.Typeface boldTypefaceOverride -> c
+    java.lang.String TAG -> a
+    1:1:void <init>(android.content.Context):36:36 -> <init>
+    2:2:void <init>(android.content.Context,android.util.AttributeSet):40:40 -> <init>
+    3:3:void <init>(android.content.Context,android.util.AttributeSet,int):44:44 -> <init>
+    4:4:void <init>(android.content.Context,android.util.AttributeSet,int,int):49:49 -> <init>
+    1:1:void applyStyleRules(java.util.Map):54:54 -> a
+    2:50:void applyStyleRules(android.widget.TextView,java.util.Map):64:112 -> a
+    51:78:void applyStyleRules(android.widget.TextView,java.util.Map):110:137 -> a
+    79:125:void applyStyleRules(android.widget.TextView,java.util.Map):136:182 -> a
+    126:131:void applyStyleRules(android.widget.TextView,java.util.Map):180:185 -> a
+    132:138:void makeScrollable():192:198 -> a
+com.batch.android.messaging.view.styled.TextView$1 -> com.batch.android.messaging.view.styled.TextView$a:
+# {"id":"sourceFile","fileName":"TextView.java"}
+    android.widget.Scroller val$scroller -> b
+    com.batch.android.messaging.view.styled.TextView this$0 -> c
+    android.view.GestureDetector gesture -> a
+    1:3:void <init>(com.batch.android.messaging.view.styled.TextView,android.widget.Scroller):199:201 -> <init>
+    1:5:boolean onTouch(android.view.View,android.view.MotionEvent):218:222 -> onTouch
+com.batch.android.messaging.view.styled.TextView$1$1 -> com.batch.android.messaging.view.styled.TextView$a$a:
+# {"id":"sourceFile","fileName":"TextView.java"}
+    com.batch.android.messaging.view.styled.TextView$1 this$1 -> a
+    1:1:void <init>(com.batch.android.messaging.view.styled.TextView$1):202:202 -> <init>
+    1:5:boolean onFling(android.view.MotionEvent,android.view.MotionEvent,float,float):205:209 -> onFling
+com.batch.android.messaging.view.styled.WebView -> com.batch.android.i0.d:
+# {"id":"sourceFile","fileName":"WebView.java"}
+    1:1:void <init>(android.content.Context):11:11 -> <init>
+    1:1:void applyStyleRules(java.util.Map):16:16 -> a
+com.batch.android.metrics.MetricManager -> com.batch.android.j0.a:
+# {"id":"sourceFile","fileName":"MetricManager.java"}
+    java.util.List metrics -> a
+    java.lang.String TAG -> f
+    int DELAY_BEFORE_SENDING -> h
+    java.util.concurrent.atomic.AtomicBoolean isSending -> b
+    int DEFAULT_RETRY_AFTER -> g
+    long nextMetricServiceAvailableTimestamp -> d
+    java.util.concurrent.ScheduledExecutorService sendExecutor -> c
+    com.batch.android.core.DateProvider dateProvider -> e
+    1:38:void <init>():28:65 -> <init>
+    1:1:java.util.concurrent.atomic.AtomicBoolean access$000(com.batch.android.metrics.MetricManager):28:28 -> a
+    2:2:long access$102(com.batch.android.metrics.MetricManager,long):28:28 -> a
+    3:5:void addMetric(com.batch.android.metrics.model.Metric):73:75 -> a
+    6:37:java.util.List getMetricsToSend():84:115 -> a
+    38:65:void lambda$sendMetrics$0(android.content.Context):146:173 -> a
+    1:1:com.batch.android.core.DateProvider access$200(com.batch.android.metrics.MetricManager):28:28 -> b
+    2:2:boolean isMetricServiceAvailable():124:124 -> b
+    1:1:com.batch.android.metrics.MetricManager provide():69:69 -> c
+    1:14:void sendMetrics():131:144 -> d
+com.batch.android.metrics.MetricManager$1 -> com.batch.android.j0.a$a:
+# {"id":"sourceFile","fileName":"MetricManager.java"}
+    com.batch.android.metrics.MetricManager this$0 -> a
+    1:1:void <init>(com.batch.android.metrics.MetricManager):154:154 -> <init>
+    1:6:void onFailure(com.batch.android.core.Webservice$WebserviceError):163:168 -> a
+    1:2:void onSuccess():157:158 -> onSuccess
+com.batch.android.metrics.MetricRegistry -> com.batch.android.j0.b:
+# {"id":"sourceFile","fileName":"MetricRegistry.java"}
+    com.batch.android.metrics.model.Observation localCampaignsJITResponseTime -> a
+    com.batch.android.metrics.model.Observation localCampaignsSyncResponseTime -> c
+    com.batch.android.metrics.model.Counter localCampaignsJITCount -> b
+    1:15:void <clinit>():12:26 -> <clinit>
+    1:1:void <init>():9:9 -> <init>
+com.batch.android.metrics.model.Counter -> com.batch.android.k0.a:
+# {"id":"sourceFile","fileName":"Counter.java"}
+    float value -> g
+    1:7:void <init>(com.batch.android.metrics.model.Counter):12:18 -> <init>
+    8:10:void <init>(java.lang.String):22:24 -> <init>
+    1:1:java.lang.Object newChild(java.util.List):7:7 -> a
+    1:2:com.batch.android.metrics.model.Counter newChild(java.util.List):29:30 -> b
+    1:3:void reset():36:38 -> j
+    1:4:void inc():42:45 -> l
+com.batch.android.metrics.model.Metric -> com.batch.android.k0.b:
+# {"id":"sourceFile","fileName":"Metric.java"}
+    java.util.List labelValues -> e
+    java.util.List labelNames -> d
+    java.util.List values -> c
+    java.util.concurrent.ConcurrentMap children -> f
+    java.lang.String name -> a
+    java.lang.String type -> b
+    1:1:void <init>(java.lang.String):32:32 -> <init>
+    2:5:void <init>(java.lang.String):30:33 -> <init>
+    java.lang.Object newChild(java.util.List) -> a
+    1:1:java.lang.Object labelNames(java.lang.String[]):42:42 -> a
+    2:13:void pack(com.batch.android.msgpack.core.MessageBufferPacker):61:72 -> a
+    14:14:java.util.concurrent.ConcurrentMap getChildren():108:108 -> a
+    1:5:java.lang.Object labels(java.lang.String[]):47:51 -> b
+    6:6:java.util.List getLabelNames():100:100 -> b
+    1:1:java.util.List getLabelValues():104:104 -> c
+    1:1:java.lang.String getName():88:88 -> d
+    1:1:java.lang.String getType():92:92 -> e
+    1:1:java.util.List getValues():96:96 -> f
+    1:1:boolean hasChanged():80:80 -> g
+    1:1:boolean hasChildren():84:84 -> h
+    1:1:java.lang.Object register():37:37 -> i
+    void reset() -> j
+    1:1:void update():76:76 -> k
+com.batch.android.metrics.model.Metric$Type -> com.batch.android.k0.b$a:
+# {"id":"sourceFile","fileName":"Metric.java"}
+    java.lang.String COUNTER -> a
+    java.lang.String OBSERVATION -> b
+com.batch.android.metrics.model.Observation -> com.batch.android.k0.c:
+# {"id":"sourceFile","fileName":"Observation.java"}
+    java.util.concurrent.atomic.AtomicBoolean observing -> h
+    long startTime -> g
+    1:1:void <init>(java.lang.String):17:17 -> <init>
+    2:7:void <init>(java.lang.String):14:19 -> <init>
+    8:8:void <init>(com.batch.android.metrics.model.Observation):23:23 -> <init>
+    9:26:void <init>(com.batch.android.metrics.model.Observation):14:31 -> <init>
+    1:1:java.lang.Object newChild(java.util.List):10:10 -> a
+    1:2:com.batch.android.metrics.model.Observation newChild(java.util.List):36:37 -> b
+    1:2:void reset():43:44 -> j
+    1:1:boolean isObserving():60:60 -> l
+    1:4:void observeDuration():53:56 -> m
+    1:2:void startTimer():48:49 -> n
+com.batch.android.module.ActionModule -> com.batch.android.l0.a:
+# {"id":"sourceFile","fileName":"ActionModule.java"}
+    java.util.HashMap drawableAliases -> b
+    com.batch.android.BatchDeeplinkInterceptor deeplinkInterceptor -> c
+    java.util.HashMap registeredActions -> a
+    java.lang.String RESERVED_ACTION_IDENTIFIER_PREFIX -> e
+    java.lang.String TAG -> d
+    1:1:void <init>():50:50 -> <init>
+    2:9:void <init>():48:55 -> <init>
+    1:13:void registerAction(com.batch.android.UserAction):67:79 -> a
+    14:14:void registerAction(com.batch.android.UserAction):69:69 -> a
+    15:15:void registerAction(com.batch.android.UserAction):64:64 -> a
+    16:24:void addDrawableAlias(java.lang.String,int):118:126 -> a
+    25:25:void addDrawableAlias(java.lang.String,int):123:123 -> a
+    26:26:void addDrawableAlias(java.lang.String,int):119:119 -> a
+    27:27:void addDrawableAlias(java.lang.String,int):115:115 -> a
+    28:34:int getAliasedDrawableID(java.lang.String):136:142 -> a
+    35:49:boolean performUserAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject):156:170 -> a
+    50:50:boolean performUserAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject):159:159 -> a
+    51:58:boolean performAction(android.content.Context,java.lang.String,com.batch.android.json.JSONObject,com.batch.android.UserActionSource):189:196 -> a
+    59:59:void setDeeplinkInterceptor(com.batch.android.BatchDeeplinkInterceptor):210:210 -> a
+    60:68:int getDrawableIdForNameOrAlias(android.content.Context,java.lang.String):274:282 -> a
+    1:15:void unregisterAction(java.lang.String):92:106 -> b
+    16:16:void unregisterAction(java.lang.String):97:97 -> b
+    17:17:void unregisterAction(java.lang.String):93:93 -> b
+    18:18:void unregisterAction(java.lang.String):89:89 -> b
+    1:1:java.lang.String getId():292:292 -> g
+    int getState() -> h
+    1:1:com.batch.android.BatchDeeplinkInterceptor getDeeplinkInterceptor():218:218 -> i
+    1:46:void registerBuiltinActions():222:267 -> j
+com.batch.android.module.BatchModule -> com.batch.android.l0.b:
+# {"id":"sourceFile","fileName":"BatchModule.java"}
+    1:1:void <init>():11:11 -> <init>
+    void batchContextBecameAvailable(android.content.Context) -> a
+    void batchDidStart() -> b
+    void batchDidStop() -> c
+    void batchIsFinishing() -> d
+    void batchWillStart() -> e
+    void batchWillStop() -> f
+    java.lang.String getId() -> g
+    int getState() -> h
+com.batch.android.module.BatchModuleMaster -> com.batch.android.l0.c:
+# {"id":"sourceFile","fileName":"BatchModuleMaster.java"}
+    java.util.List modules -> a
+    1:2:void <init>(java.util.List):32:33 -> <init>
+    1:2:void batchContextBecameAvailable(android.content.Context):65:66 -> a
+    1:2:void batchDidStart():79:80 -> b
+    1:2:void batchDidStop():100:101 -> c
+    1:2:void batchIsFinishing():86:87 -> d
+    1:2:void batchWillStart():72:73 -> e
+    1:2:void batchWillStop():93:94 -> f
+    1:1:java.lang.String getId():55:55 -> g
+    int getState() -> h
+    1:11:com.batch.android.module.BatchModuleMaster provide():38:48 -> i
+com.batch.android.module.DisplayReceiptModule -> com.batch.android.l0.d:
+# {"id":"sourceFile","fileName":"DisplayReceiptModule.java"}
+    com.batch.android.module.OptOutModule optOutModule -> a
+    java.lang.String TAG -> b
+    1:2:void <init>(com.batch.android.module.OptOutModule):37:38 -> <init>
+    1:7:java.io.File savePushReceipt(android.content.Context,com.batch.android.core.InternalPushData):80:86 -> a
+    8:34:void sendReceipt(android.content.Context,boolean):160:186 -> a
+    1:11:void batchDidStart():58:68 -> b
+    12:62:void scheduleDisplayReceipt(android.content.Context,com.batch.android.core.InternalPushData):96:146 -> b
+    63:63:void wipeData(android.content.Context):214:214 -> b
+    1:1:java.lang.String getId():48:48 -> g
+    int getState() -> h
+    1:1:com.batch.android.module.DisplayReceiptModule provide():43:43 -> i
+com.batch.android.module.DisplayReceiptModule$1 -> com.batch.android.l0.d$a:
+# {"id":"sourceFile","fileName":"DisplayReceiptModule.java"}
+    java.util.Map val$payloads -> a
+    1:1:void <init>(java.util.Map):189:189 -> <init>
+    1:1:void onFailure(com.batch.android.core.Webservice$WebserviceError):201:201 -> a
+    1:4:void onSuccess():192:195 -> onSuccess
+com.batch.android.module.EventDispatcherModule -> com.batch.android.l0.e:
+# {"id":"sourceFile","fileName":"EventDispatcherModule.java"}
+    java.lang.String COMPONENT_KEY_PREFIX -> f
+    com.batch.android.module.OptOutModule optOutModule -> b
+    java.util.Set eventDispatchers -> a
+    boolean isContextLoaded -> c
+    java.lang.String COMPONENT_SENTINEL_VALUE -> e
+    java.lang.String TAG -> d
+    1:1:void <init>(com.batch.android.module.OptOutModule):35:35 -> <init>
+    2:8:void <init>(com.batch.android.module.OptOutModule):30:36 -> <init>
+    1:1:void printDeprecatedDispatcher(java.lang.String):59:59 -> a
+    2:4:void addEventDispatcher(com.batch.android.BatchEventDispatcher):63:65 -> a
+    5:14:void dispatchEvent(com.batch.android.Batch$EventDispatcher$Type,com.batch.android.Batch$EventDispatcher$Payload):75:84 -> a
+    1:1:void printLoadedDispatcher(java.lang.String):55:55 -> b
+    2:4:boolean removeEventDispatcher(com.batch.android.BatchEventDispatcher):69:71 -> b
+    5:30:void loadDispatcherFromContext(android.content.Context):88:113 -> b
+    31:57:void loadDispatcherFromContext(android.content.Context):111:137 -> b
+    58:58:void loadDispatcherFromContext(android.content.Context):99:99 -> b
+    1:1:java.lang.String getId():46:46 -> g
+    int getState() -> h
+    1:4:com.batch.android.json.JSONObject getDispatchersAnalyticRepresentation():149:152 -> i
+    1:1:com.batch.android.module.EventDispatcherModule provide():41:41 -> j
+com.batch.android.module.LocalCampaignsModule -> com.batch.android.l0.f:
+# {"id":"sourceFile","fileName":"LocalCampaignsModule.java"}
+    java.util.concurrent.ExecutorService triggerExecutor -> f
+    java.lang.String TAG -> i
+    java.util.concurrent.atomic.AtomicBoolean isWaitingJITSync -> e
+    java.util.concurrent.atomic.AtomicBoolean isReady -> d
+    android.content.BroadcastReceiver newSessionBroadcastReceiver -> h
+    boolean isNewSessionBroadcastReceiverRegistered -> g
+    com.batch.android.localcampaigns.CampaignManager campaignManager -> a
+    boolean triedToReadSavedCampaign -> b
+    java.util.LinkedList signalQueue -> c
+    1:1:void <init>(com.batch.android.localcampaigns.CampaignManager):85:85 -> <init>
+    2:273:void <init>(com.batch.android.localcampaigns.CampaignManager):53:324 -> <init>
+    274:274:void <init>(com.batch.android.localcampaigns.CampaignManager):86:86 -> <init>
+    1:1:java.util.concurrent.atomic.AtomicBoolean access$000(com.batch.android.module.LocalCampaignsModule):41:41 -> a
+    2:65:void electCampaignForSignal(com.batch.android.localcampaigns.signal.Signal):200:263 -> a
+    66:78:void lambda$electCampaignForSignal$1(com.batch.android.localcampaigns.model.LocalCampaign,com.batch.android.localcampaigns.model.LocalCampaign):229:241 -> a
+    79:80:void displayMessage(com.batch.android.localcampaigns.model.LocalCampaign):272:273 -> a
+    81:82:void batchContextBecameAvailable(android.content.Context):369:370 -> a
+    1:8:void enqueueSignal(com.batch.android.localcampaigns.signal.Signal):126:133 -> b
+    9:15:void enqueueSignal(com.batch.android.localcampaigns.signal.Signal):131:137 -> b
+    16:17:void lambda$loadSavedCampaigns$2(android.content.Context):359:360 -> b
+    1:5:void lambda$processSignal$0(com.batch.android.localcampaigns.signal.Signal):170:174 -> c
+    6:15:void loadSavedCampaigns(android.content.Context):354:363 -> c
+    16:16:void batchDidStop():375:375 -> c
+    1:25:void processSignal(com.batch.android.localcampaigns.signal.Signal):145:169 -> d
+    26:31:void registerBroadcastReceiverIfNeeded(android.content.Context):340:345 -> d
+    1:4:void sendSignal(com.batch.android.localcampaigns.signal.Signal):114:117 -> e
+    5:7:void wipeData(android.content.Context):315:317 -> e
+    1:1:java.lang.String getId():98:98 -> g
+    int getState() -> h
+    1:12:void dequeueSignals():288:299 -> i
+    1:2:void makeReady():280:281 -> j
+    1:1:void onLocalCampaignsWebserviceFinished():306:306 -> k
+    1:1:com.batch.android.module.LocalCampaignsModule provide():91:91 -> l
+com.batch.android.module.LocalCampaignsModule$1 -> com.batch.android.l0.f$a:
+# {"id":"sourceFile","fileName":"LocalCampaignsModule.java"}
+    com.batch.android.module.LocalCampaignsModule this$0 -> a
+    1:1:void <init>(com.batch.android.module.LocalCampaignsModule):324:324 -> <init>
+    1:4:void onReceive(android.content.Context,android.content.Intent):327:330 -> onReceive
+com.batch.android.module.MessagingModule -> com.batch.android.l0.g:
+# {"id":"sourceFile","fileName":"MessagingModule.java"}
+    java.lang.String ACTION_DISMISS_INTERSTITIAL -> i
+    java.lang.String TAG -> h
+    java.lang.String ACTION_DISMISS_BANNER -> j
+    java.lang.String MESSAGING_EVENT_NAME_DISMISS -> m
+    java.lang.String MESSAGING_EVENT_NAME_SHOW -> l
+    java.lang.String MESSAGING_EVENT_NAME_CLOSE_ERROR -> o
+    java.lang.String MESSAGING_EVENT_NAME_CLOSE -> n
+    java.lang.String MESSAGING_EVENT_NAME_GLOBAL_TAP -> q
+    java.lang.String MESSAGING_EVENT_NAME_AUTO_CLOSE -> p
+    java.lang.String MESSAGING_EVENT_NAME_WEBVIEW_CLICK -> s
+    java.lang.String MESSAGING_EVENT_NAME_CTA -> r
+    double DEFAULT_IMAGE_DOWNLOAD_TIMEOUT -> k
+    com.batch.android.module.TrackerModule trackerModule -> g
+    com.batch.android.BatchMessage pendingMessage -> e
+    com.batch.android.module.ActionModule actionModule -> f
+    boolean showForegroundLandings -> a
+    boolean automaticMode -> b
+    com.batch.android.Batch$Messaging$LifecycleListener listener -> c
+    boolean doNotDisturbMode -> d
+    1:1:void <init>(com.batch.android.module.ActionModule,com.batch.android.module.TrackerModule):110:110 -> <init>
+    2:18:void <init>(com.batch.android.module.ActionModule,com.batch.android.module.TrackerModule):96:112 -> <init>
+    1:2:void setTypefaceOverride(android.graphics.Typeface,android.graphics.Typeface):167:168 -> a
+    3:3:void setLifecycleListener(com.batch.android.Batch$Messaging$LifecycleListener):172:172 -> a
+    4:16:boolean doesAppHaveRequiredLibraries(boolean):194:206 -> a
+    17:46:com.batch.android.BatchBannerView loadBanner(android.content.Context,com.batch.android.BatchMessage,com.batch.android.json.JSONObject):291:320 -> a
+    47:53:com.batch.android.BatchBannerView loadBanner(android.content.Context,com.batch.android.BatchMessage,com.batch.android.json.JSONObject):317:323 -> a
+    54:55:com.batch.android.BatchBannerView loadBanner(android.content.Context,com.batch.android.BatchMessage,com.batch.android.json.JSONObject):312:313 -> a
+    56:56:com.batch.android.BatchBannerView loadBanner(android.content.Context,com.batch.android.BatchMessage,com.batch.android.json.JSONObject):292:292 -> a
+    57:57:com.batch.android.BatchBannerView loadBanner(android.content.Context,com.batch.android.BatchMessage,com.batch.android.json.JSONObject):288:288 -> a
+    58:58:com.batch.android.BatchBannerView loadBanner(android.content.Context,com.batch.android.BatchMessage,com.batch.android.json.JSONObject):283:283 -> a
+    59:60:void performAction(android.content.Context,com.batch.android.BatchMessage,com.batch.android.messaging.model.Action):328:329 -> a
+    61:84:void displayMessage(android.content.Context,com.batch.android.BatchMessage,boolean):334:357 -> a
+    85:102:void displayInAppMessage(com.batch.android.BatchInAppMessage):361:378 -> a
+    103:117:com.batch.android.json.JSONObject generateBaseEventParameters(com.batch.android.messaging.model.Message,java.lang.String):391:405 -> a
+    118:118:com.batch.android.json.JSONObject generateBaseEventParameters(com.batch.android.messaging.model.Message,java.lang.String):402:402 -> a
+    119:119:com.batch.android.json.JSONObject generateBaseEventParameters(com.batch.android.messaging.model.Message,java.lang.String):399:399 -> a
+    120:138:com.batch.android.json.JSONObject generateBaseEventParameters(com.batch.android.messaging.model.Message,java.lang.String):396:414 -> a
+    139:150:void trackCTAClickEvent(com.batch.android.messaging.model.Message,int,java.lang.String):440:451 -> a
+    151:158:void trackWebViewClickEvent(com.batch.android.messaging.model.Message,java.lang.String,java.lang.String):461:468 -> a
+    159:161:void onMessageCTAClicked(com.batch.android.messaging.model.Message,int,com.batch.android.messaging.model.CTA):499:501 -> a
+    162:165:void onWebViewMessageClickTracked(com.batch.android.messaging.model.Message,com.batch.android.messaging.model.Action,java.lang.String):511:514 -> a
+    166:180:void onMessageGlobalTap(com.batch.android.messaging.model.Message,com.batch.android.messaging.model.Action):523:537 -> a
+    181:183:void onMessageAutoClosed(com.batch.android.messaging.model.Message):546:548 -> a
+    184:186:void onMessageClosedError(com.batch.android.messaging.model.Message,com.batch.android.messaging.model.MessagingError):554:556 -> a
+    1:1:void setAutomaticMode(boolean):163:163 -> b
+    2:42:androidx.fragment.app.DialogFragment loadFragment(android.content.Context,com.batch.android.BatchMessage,com.batch.android.json.JSONObject):232:272 -> b
+    43:44:androidx.fragment.app.DialogFragment loadFragment(android.content.Context,com.batch.android.BatchMessage,com.batch.android.json.JSONObject):253:254 -> b
+    45:45:androidx.fragment.app.DialogFragment loadFragment(android.content.Context,com.batch.android.BatchMessage,com.batch.android.json.JSONObject):233:233 -> b
+    46:46:androidx.fragment.app.DialogFragment loadFragment(android.content.Context,com.batch.android.BatchMessage,com.batch.android.json.JSONObject):229:229 -> b
+    47:47:androidx.fragment.app.DialogFragment loadFragment(android.content.Context,com.batch.android.BatchMessage,com.batch.android.json.JSONObject):224:224 -> b
+    48:50:void trackGenericEvent(com.batch.android.messaging.model.Message,java.lang.String):421:423 -> b
+    51:57:void trackCloseErrorEvent(com.batch.android.messaging.model.Message,com.batch.android.messaging.model.MessagingError):429:435 -> b
+    58:60:void onMessageClosed(com.batch.android.messaging.model.Message):492:494 -> b
+    1:1:void setDoNotDisturbEnabled(boolean):176:176 -> c
+    2:4:void onMessageDismissed(com.batch.android.messaging.model.Message):484:486 -> c
+    1:1:void setShowForegroundLandings(boolean):159:159 -> d
+    2:4:void onMessageShown(com.batch.android.messaging.model.Message):477:479 -> d
+    1:1:java.lang.String getId():126:126 -> g
+    int getState() -> h
+    1:1:com.batch.android.Batch$Messaging$LifecycleListener getListener():147:147 -> i
+    1:1:boolean hasPendingMessage():180:180 -> j
+    1:1:boolean isDoNotDisturbEnabled():151:151 -> k
+    1:1:boolean isInAutomaticMode():143:143 -> l
+    1:2:com.batch.android.BatchMessage popPendingMessage():185:186 -> m
+    1:1:com.batch.android.module.MessagingModule provide():117:117 -> n
+    1:1:boolean shouldShowForegroundLandings():139:139 -> o
+com.batch.android.module.MessagingModule$1 -> com.batch.android.l0.g$a:
+# {"id":"sourceFile","fileName":"MessagingModule.java"}
+    int[] $SwitchMap$com$batch$android$messaging$model$Message$Source -> a
+    1:1:void <clinit>():394:394 -> <clinit>
+com.batch.android.module.OptOutModule -> com.batch.android.l0.h:
+# {"id":"sourceFile","fileName":"OptOutModule.java"}
+    java.lang.String OPT_OUT_PREFERENCES_NAME -> g
+    java.lang.String INTENT_OPTED_OUT_WIPE_DATA_EXTRA -> f
+    java.lang.String SHOULD_SEND_OPTIN_EVENT_KEY -> i
+    java.lang.String OPTED_OUT_FROM_BATCHSDK_KEY -> h
+    java.lang.String MANIFEST_OPT_OUT_BY_DEFAULT_KEY -> j
+    android.content.SharedPreferences preferences -> b
+    java.lang.String TAG -> c
+    java.lang.Boolean isOptedOut -> a
+    java.lang.String INTENT_OPTED_IN -> e
+    java.lang.String INTENT_OPTED_OUT -> d
+    1:1:void <init>():55:55 -> <init>
+    2:2:void <init>():51:51 -> <init>
+    1:44:com.batch.android.core.Promise optOut(android.content.Context,boolean,com.batch.android.BatchOptOutResultListener):122:165 -> a
+    45:46:void lambda$optOut$1(android.content.Context,com.batch.android.BatchOptOutResultListener,boolean,com.batch.android.core.Promise,java.lang.Void):141:142 -> a
+    47:50:void lambda$optOut$0(com.batch.android.BatchOptOutResultListener,android.content.Context,boolean,com.batch.android.core.Promise):144:147 -> a
+    51:52:void lambda$optOut$3(android.content.Context,com.batch.android.BatchOptOutResultListener,com.batch.android.core.Promise,boolean,java.lang.Exception):152:153 -> a
+    53:59:void lambda$optOut$2(com.batch.android.BatchOptOutResultListener,com.batch.android.core.Promise,android.content.Context,boolean):155:161 -> a
+    60:67:void doOptOut(android.content.Context,boolean):173:180 -> a
+    68:76:boolean getManifestBoolean(android.content.Context,java.lang.String,boolean):208:216 -> a
+    1:5:android.content.SharedPreferences getPreferences(android.content.Context):58:62 -> b
+    1:16:boolean isOptedOutSync(android.content.Context):70:85 -> c
+    1:10:void optIn(android.content.Context):101:110 -> d
+    1:7:void trackOptinEventIfNeeded(android.content.Context):89:95 -> e
+    1:18:void wipeData(android.content.Context):185:202 -> f
+    1:1:java.lang.String getId():226:226 -> g
+    int getState() -> h
+    1:1:java.lang.Boolean isOptedOut():66:66 -> i
+com.batch.android.module.PushModule -> com.batch.android.l0.i:
+# {"id":"sourceFile","fileName":"PushModule.java"}
+    int NO_COLOR -> o
+    android.net.Uri notificationSoundUri -> f
+    com.batch.android.BatchNotificationInterceptor notificationInterceptor -> j
+    java.util.EnumSet tempNotifType -> h
+    java.lang.Integer customOpenIntentFlags -> i
+    boolean didSetupRegistrationProvider -> l
+    com.batch.android.module.DisplayReceiptModule displayReceiptModule -> m
+    java.lang.String TAG -> n
+    int notificationColor -> e
+    int smallIconResourceId -> b
+    com.batch.android.PushRegistrationProvider registrationProvider -> k
+    android.graphics.Bitmap largeIcon -> c
+    boolean manualDisplay -> g
+    boolean shouldRefreshToken -> a
+    java.lang.String gcmSenderId -> d
+    1:1:void <init>(com.batch.android.module.DisplayReceiptModule):126:126 -> <init>
+    2:52:void <init>(com.batch.android.module.DisplayReceiptModule):77:127 -> <init>
+    1:1:void access$000(com.batch.android.module.PushModule,android.content.Context,com.batch.android.push.Registration):63:63 -> a
+    2:2:void setCustomSmallIconResourceId(int):152:152 -> a
+    3:3:void setAdditionalIntentFlags(java.lang.Integer):170:170 -> a
+    4:4:void setCustomLargeIcon(android.graphics.Bitmap):188:188 -> a
+    5:7:void setGCMSenderId(java.lang.String):197:199 -> a
+    8:8:void setNotificationInterceptor(com.batch.android.BatchNotificationInterceptor):206:206 -> a
+    9:13:boolean isBatchPush(android.content.Intent):257:261 -> a
+    14:20:boolean isBatchPush(com.google.firebase.messaging.RemoteMessage):272:278 -> a
+    21:24:void lambda$getRegistrationID$1(java.lang.StringBuilder,com.batch.android.runtime.State):292:295 -> a
+    25:50:void setNotificationsType(java.util.EnumSet):379:404 -> a
+    51:55:void lambda$setNotificationsType$2(int,java.util.concurrent.atomic.AtomicBoolean,com.batch.android.runtime.State):391:395 -> a
+    56:56:void setSound(android.net.Uri):434:434 -> a
+    57:57:void setManualDisplay(boolean):453:453 -> a
+    58:61:void appendBatchData(android.content.Intent,android.content.Intent):474:477 -> a
+    62:74:void appendBatchData(android.os.Bundle,android.content.Intent):490:502 -> a
+    75:80:void appendBatchData(com.google.firebase.messaging.RemoteMessage,android.content.Intent):510:515 -> a
+    81:90:android.app.PendingIntent makePendingIntent(android.content.Context,android.content.Intent,android.os.Bundle):535:544 -> a
+    91:96:android.app.PendingIntent makePendingIntent(android.content.Context,android.content.Intent,com.google.firebase.messaging.RemoteMessage):556:561 -> a
+    97:106:android.app.PendingIntent makePendingIntentForDeeplink(android.content.Context,java.lang.String,android.os.Bundle):579:588 -> a
+    107:112:android.app.PendingIntent makePendingIntentForDeeplink(android.content.Context,java.lang.String,com.google.firebase.messaging.RemoteMessage):600:605 -> a
+    113:124:void displayNotification(android.content.Context,android.content.Intent,com.batch.android.BatchNotificationInterceptor,boolean):649:660 -> a
+    125:133:void displayNotification(android.content.Context,android.content.Intent,com.batch.android.BatchNotificationInterceptor,boolean):657:665 -> a
+    134:150:void displayNotification(android.content.Context,com.google.firebase.messaging.RemoteMessage,com.batch.android.BatchNotificationInterceptor):674:690 -> a
+    151:159:void displayNotification(android.content.Context,com.google.firebase.messaging.RemoteMessage,com.batch.android.BatchNotificationInterceptor):687:695 -> a
+    160:168:void onNotificationDisplayed(android.content.Context,android.content.Intent):707:715 -> a
+    169:177:void onNotificationDisplayed(android.content.Context,com.google.firebase.messaging.RemoteMessage):724:732 -> a
+    178:181:void requestRegistration(com.batch.android.PushRegistrationProvider):774:777 -> a
+    182:194:void emitRegistration(android.content.Context,com.batch.android.push.Registration):831:843 -> a
+    195:240:void lambda$emitRegistration$3(com.batch.android.push.Registration,android.content.Context,com.batch.android.runtime.State):844:889 -> a
+    241:241:void printRegistration(com.batch.android.push.Registration):936:936 -> a
+    242:248:void lambda$batchWillStart$4(com.batch.android.runtime.State):975:981 -> a
+    1:17:void lambda$dismissNotifications$0(com.batch.android.runtime.State):223:239 -> b
+    18:33:java.util.EnumSet getNotificationsType(android.content.Context):351:366 -> b
+    34:34:void setNotificationsColor(int):415:415 -> b
+    35:37:boolean shouldDisplayPush(android.content.Context,android.content.Intent):617:619 -> b
+    38:40:boolean shouldDisplayPush(android.content.Context,com.google.firebase.messaging.RemoteMessage):629:631 -> b
+    1:22:com.batch.android.push.Registration getRegistration(android.content.Context):312:333 -> c
+    1:4:boolean isBackgroundRestricted(android.content.Context):926:929 -> d
+    1:2:void requestNotificationPermission(android.content.Context):949:950 -> e
+    3:3:void requestNotificationPermission(android.content.Context):947:947 -> e
+    4:25:void batchWillStart():970:991 -> e
+    1:1:java.lang.String getId():957:957 -> g
+    1:1:int getState():962:962 -> h
+    1:2:void dismissNotifications():221:222 -> i
+    1:1:java.lang.Integer getAdditionalIntentFlags():160:160 -> j
+    1:8:java.lang.String getAppVersion():759:766 -> k
+    1:1:android.graphics.Bitmap getCustomLargeIcon():179:179 -> l
+    1:1:int getCustomSmallIconResourceId():143:143 -> m
+    1:1:int getNotificationColor():424:424 -> n
+    1:1:com.batch.android.BatchNotificationInterceptor getNotificationInterceptor():213:213 -> o
+    1:15:java.lang.String getRegistrationID():287:301 -> p
+    1:16:com.batch.android.PushRegistrationProvider getRegistrationProvider():997:1012 -> q
+    1:1:android.net.Uri getSound():443:443 -> r
+    1:11:boolean isBatchPushServiceAvailable():903:913 -> s
+    1:1:boolean isManualDisplayModeActivated():462:462 -> t
+    1:1:com.batch.android.module.PushModule provide():132:132 -> u
+    1:3:void refreshRegistration():744:746 -> v
+com.batch.android.module.PushModule$1 -> com.batch.android.l0.i$a:
+# {"id":"sourceFile","fileName":"PushModule.java"}
+    android.content.Context val$context -> b
+    com.batch.android.PushRegistrationProvider val$provider -> a
+    com.batch.android.module.PushModule this$0 -> c
+    1:1:void <init>(com.batch.android.module.PushModule,com.batch.android.PushRegistrationProvider,android.content.Context):778:778 -> <init>
+    1:1:java.lang.String getTaskIdentifier():821:821 -> a
+    1:23:void run():782:804 -> run
+    24:39:void run():801:816 -> run
+    40:40:void run():796:796 -> run
+    41:46:void run():784:789 -> run
+    47:47:void run():784:784 -> run
+com.batch.android.module.TrackerModule -> com.batch.android.l0.j:
+# {"id":"sourceFile","fileName":"TrackerModule.java"}
+    com.batch.android.localcampaigns.CampaignManager campaignManager -> i
+    java.lang.String TAG -> k
+    java.util.Queue memoryStorage -> b
+    java.util.concurrent.atomic.AtomicBoolean isFlushing -> d
+    com.batch.android.event.EventSender sender -> e
+    int batchSendQuantity -> f
+    com.batch.android.tracker.TrackerDatasource datasource -> a
+    java.util.concurrent.ExecutorService flushExecutor -> c
+    com.batch.android.module.OptOutModule optOutModule -> g
+    com.batch.android.module.LocalCampaignsModule localCampaignsModule -> h
+    com.batch.android.module.PushModule pushModule -> j
+    1:1:void <init>(com.batch.android.module.OptOutModule,com.batch.android.module.LocalCampaignsModule,com.batch.android.localcampaigns.CampaignManager,com.batch.android.module.PushModule):101:101 -> <init>
+    2:43:void <init>(com.batch.android.module.OptOutModule,com.batch.android.module.LocalCampaignsModule,com.batch.android.localcampaigns.CampaignManager,com.batch.android.module.PushModule):64:105 -> <init>
+    1:1:void track(java.lang.String):189:189 -> a
+    2:2:void track(java.lang.String,com.batch.android.json.JSONObject):199:199 -> a
+    3:16:void track(java.lang.String,long,com.batch.android.json.JSONObject):210:223 -> a
+    17:17:void track(java.lang.String,long):254:254 -> a
+    18:49:com.batch.android.core.Promise trackOptOutEvent(android.content.Context,java.lang.String):309:340 -> a
+    50:52:void lambda$trackOptOutEvent$0(android.content.Context,java.util.List,com.batch.android.core.Promise):315:317 -> a
+    53:73:void lambda$trackOptOutEvent$0(android.content.Context,java.util.List,com.batch.android.core.Promise):316:336 -> a
+    74:78:void lambda$flush$2(com.batch.android.runtime.State):413:417 -> a
+    79:83:void onEventsSendFailure(java.util.List):497:501 -> a
+    84:101:void lambda$onEventsSendFailure$4(java.util.List,com.batch.android.runtime.State):502:519 -> a
+    102:104:java.util.List getEventsToSend():527:529 -> a
+    1:2:void batchDidStart():167:168 -> b
+    3:12:void trackCollapsible(java.lang.String,long,com.batch.android.json.JSONObject):235:244 -> b
+    13:34:void trackCampaignView(java.lang.String,com.batch.android.json.JSONObject):264:285 -> b
+    35:35:void trackCampaignView(java.lang.String,com.batch.android.json.JSONObject):272:272 -> b
+    36:40:void onEventsSendSuccess(java.util.List):474:478 -> b
+    41:51:void lambda$onEventsSendSuccess$3(java.util.List,com.batch.android.runtime.State):479:489 -> b
+    52:61:void lambda$wipeData$6(android.content.Context):541:550 -> b
+    1:3:void batchDidStop():175:177 -> c
+    4:31:com.batch.android.json.JSONObject makeOptBaseEventData(android.content.Context):345:372 -> c
+    32:32:void lambda$getEventsToSend$5(java.util.List):529:529 -> c
+    1:1:void trackOptInEvent(android.content.Context):296:296 -> d
+    1:9:void batchWillStart():130:138 -> e
+    10:22:void batchWillStart():135:147 -> e
+    23:23:void batchWillStart():144:144 -> e
+    24:40:void batchWillStart():143:159 -> e
+    41:43:void wipeData(android.content.Context):537:539 -> e
+    1:1:java.lang.String getId():120:120 -> g
+    1:1:int getState():125:125 -> h
+    1:8:void closeDatasource():383:390 -> i
+    1:13:void flush():400:412 -> j
+    1:2:com.batch.android.tracker.TrackerMode getMode():459:460 -> k
+    3:3:com.batch.android.tracker.TrackerMode getMode():457:457 -> k
+    4:15:com.batch.android.tracker.TrackerMode getMode():456:467 -> k
+    1:18:void lambda$flush$1():419:436 -> l
+    19:32:void lambda$flush$1():423:436 -> l
+    33:36:void lambda$flush$1():434:437 -> l
+    1:5:com.batch.android.module.TrackerModule provide():110:114 -> m
+com.batch.android.module.TrackerModule$1 -> com.batch.android.l0.j$a:
+# {"id":"sourceFile","fileName":"TrackerModule.java"}
+    com.batch.android.core.Promise val$promise -> a
+    com.batch.android.module.TrackerModule this$0 -> b
+    1:1:void <init>(com.batch.android.module.TrackerModule,com.batch.android.core.Promise):320:320 -> <init>
+    1:1:void onFinish():0:0 -> a
+    2:2:void onSuccess(java.util.List):323:323 -> a
+    3:3:void onFailure(com.batch.android.FailReason,java.util.List):328:328 -> a
+com.batch.android.module.UserModule -> com.batch.android.l0.k:
+# {"id":"sourceFile","fileName":"UserModule.java"}
+    java.lang.String PARAMETER_KEY_LABEL -> g
+    java.lang.String TAG -> f
+    java.lang.String PARAMETER_KEY_AMOUNT -> i
+    long CIPHER_FALLBACK_RESET_TIME_MS -> l
+    java.lang.String PARAMETER_KEY_DATA -> h
+    long LOCATION_UPDATE_MINIMUM_TIME_MS -> k
+    long lastLocationTrackTimestamp -> d
+    android.content.BroadcastReceiver localBroadcastReceiver -> b
+    java.util.concurrent.ScheduledExecutorService applyQueue -> m
+    java.util.regex.Pattern EVENT_NAME_PATTERN -> j
+    java.util.List operationQueues -> a
+    com.batch.android.module.TrackerModule trackerModule -> e
+    java.util.concurrent.atomic.AtomicBoolean checkScheduled -> c
+    1:6:void <clinit>():60:65 -> <clinit>
+    1:1:void <init>(com.batch.android.module.TrackerModule):81:81 -> <init>
+    2:13:void <init>(com.batch.android.module.TrackerModule):71:82 -> <init>
+    1:5:void storeTransactionID(java.lang.String,long):249:253 -> a
+    6:23:void lambda$storeTransactionID$2(long,java.lang.String):260:277 -> a
+    24:24:void lambda$storeTransactionID$2(long,java.lang.String):263:263 -> a
+    25:25:void bumpVersion(long):284:284 -> a
+    26:46:void trackPublicEvent(java.lang.String,java.lang.String,com.batch.android.json.JSONObject):334:354 -> a
+    47:54:boolean _trackEvent(java.lang.String,com.batch.android.json.JSONObject):359:366 -> a
+    55:87:void trackLocation(android.location.Location):377:409 -> a
+    88:98:void trackTransaction(double,com.batch.android.json.JSONObject):415:425 -> a
+    99:102:void submitOnApplyQueue(long,java.lang.Runnable):434:437 -> a
+    103:111:void addOperationQueueAndSubmit(long,com.batch.android.user.UserOperationQueue):449:457 -> a
+    112:112:void addOperationQueueAndSubmit(long,com.batch.android.user.UserOperationQueue):451:451 -> a
+    1:36:void batchDidStart():104:139 -> b
+    37:58:void lambda$bumpVersion$3(long):291:312 -> b
+    59:59:void lambda$bumpVersion$3(long):294:294 -> b
+    60:69:void lambda$wipeData$6(android.content.Context):643:652 -> b
+    1:3:void startCheckWS(long):190:192 -> c
+    4:93:void applyUserOperationsSync(java.util.List):491:580 -> c
+    94:94:void applyUserOperationsSync(java.util.List):512:512 -> c
+    95:95:void applyUserOperationsSync(java.util.List):503:503 -> c
+    96:96:void applyUserOperationsSync(java.util.List):494:494 -> c
+    97:98:void userOptedIn(android.content.Context):658:659 -> c
+    1:1:void startSendWS(long):147:147 -> d
+    2:4:void wipeData(android.content.Context):638:640 -> d
+    1:27:void submitOperationQueues(long):461:487 -> e
+    1:1:java.lang.String getId():94:94 -> g
+    int getState() -> h
+    1:5:void lambda$printDebugInfo$5():620:624 -> i
+    1:44:void lambda$startCheckWS$1():197:240 -> j
+    45:45:void lambda$startCheckWS$1():239:239 -> j
+    46:46:void lambda$startCheckWS$1():213:213 -> j
+    1:34:void lambda$startSendWS$0():150:183 -> k
+    35:35:void lambda$startSendWS$0():179:179 -> k
+    36:36:void lambda$startSendWS$0():162:162 -> k
+    1:18:void lambda$submitOperationQueues$4():466:483 -> l
+    1:1:java.util.concurrent.ScheduledExecutorService makeApplyQueue():68:68 -> m
+    1:1:void printDebugInfo():617:617 -> n
+    1:1:com.batch.android.module.UserModule provide():87:87 -> o
+com.batch.android.module.UserModule$1 -> com.batch.android.l0.k$a:
+# {"id":"sourceFile","fileName":"UserModule.java"}
+    com.batch.android.module.UserModule this$0 -> a
+    1:1:void <init>(com.batch.android.module.UserModule):126:126 -> <init>
+    1:2:void onReceive(android.content.Context,android.content.Intent):129:130 -> onReceive
+com.batch.android.module.UserModule$SaveException -> com.batch.android.l0.k$b:
+# {"id":"sourceFile","fileName":"UserModule.java"}
+    java.lang.String internalErrorMessage -> a
+    1:1:void <init>(java.lang.String):593:593 -> <init>
+    2:3:void <init>(java.lang.String,java.lang.String):597:598 -> <init>
+    4:5:void <init>(java.lang.String,java.lang.String,java.lang.Throwable):602:603 -> <init>
+    1:2:void log():607:608 -> a
+com.batch.android.msgpack.MessagePackHelper -> com.batch.android.m0.a:
+# {"id":"sourceFile","fileName":"MessagePackHelper.java"}
+    1:1:void <init>():10:10 -> <init>
+    1:29:void packObject(com.batch.android.msgpack.core.MessageBufferPacker,java.lang.Object):15:43 -> a
+    30:33:void packMap(com.batch.android.msgpack.core.MessageBufferPacker,java.util.Map):48:51 -> a
+    34:36:void packList(com.batch.android.msgpack.core.MessageBufferPacker,java.util.List):56:58 -> a
+com.batch.android.msgpack.core.ExtensionTypeHeader -> com.batch.android.n0.a:
+# {"id":"sourceFile","fileName":"ExtensionTypeHeader.java"}
+    byte type -> a
+    int length -> b
+    1:4:void <init>(byte,int):46:49 -> <init>
+    1:1:byte checkedCastToByte(int):53:53 -> a
+    2:2:int getLength():65:65 -> a
+    1:1:byte getType():61:61 -> b
+    1:3:boolean equals(java.lang.Object):75:77 -> equals
+    1:1:int hashCode():70:70 -> hashCode
+    1:1:java.lang.String toString():84:84 -> toString
+com.batch.android.msgpack.core.MessageBufferPacker -> com.batch.android.n0.b:
+# {"id":"sourceFile","fileName":"MessageBufferPacker.java"}
+    1:1:void <init>(com.batch.android.msgpack.core.MessagePack$PackerConfig):34:34 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.core.buffer.ArrayBufferOutput,com.batch.android.msgpack.core.MessagePack$PackerConfig):38:38 -> <init>
+    1:4:com.batch.android.msgpack.core.buffer.MessageBufferOutput reset(com.batch.android.msgpack.core.buffer.MessageBufferOutput):42:45 -> a
+    5:5:com.batch.android.msgpack.core.buffer.MessageBufferOutput reset(com.batch.android.msgpack.core.buffer.MessageBufferOutput):43:43 -> a
+    6:7:void clear():54:55 -> a
+    1:1:com.batch.android.msgpack.core.buffer.ArrayBufferOutput getArrayBufferOut():49:49 -> f
+    1:1:int getBufferSize():116:116 -> g
+    1:6:java.util.List toBufferList():104:109 -> h
+    7:7:java.util.List toBufferList():107:107 -> h
+    1:6:byte[] toByteArray():68:73 -> i
+    7:7:byte[] toByteArray():71:71 -> i
+    1:6:com.batch.android.msgpack.core.buffer.MessageBuffer toMessageBuffer():86:91 -> j
+    7:7:com.batch.android.msgpack.core.buffer.MessageBuffer toMessageBuffer():89:89 -> j
+com.batch.android.msgpack.core.MessageFormat -> com.batch.android.n0.c:
+# {"id":"sourceFile","fileName":"MessageFormat.java"}
+    com.batch.android.msgpack.core.MessageFormat EXT16 -> m
+    com.batch.android.msgpack.core.MessageFormat FLOAT32 -> o
+    com.batch.android.msgpack.core.MessageFormat ARRAY32 -> H
+    com.batch.android.msgpack.core.MessageFormat BIN8 -> i
+    com.batch.android.msgpack.core.MessageFormat MAP32 -> J
+    com.batch.android.msgpack.core.MessageFormat BIN32 -> k
+    com.batch.android.msgpack.core.MessageFormat INT8 -> u
+    com.batch.android.msgpack.core.MessageFormat[] $VALUES -> M
+    com.batch.android.msgpack.core.MessageFormat INT32 -> w
+    com.batch.android.msgpack.core.MessageFormat UINT8 -> q
+    com.batch.android.msgpack.core.MessageFormat UINT32 -> s
+    com.batch.android.msgpack.core.MessageFormat INT64 -> x
+    com.batch.android.msgpack.core.MessageFormat FIXEXT2 -> z
+    com.batch.android.msgpack.core.MessageFormat STR8 -> D
+    com.batch.android.msgpack.core.MessageFormat FIXSTR -> e
+    com.batch.android.msgpack.core.MessageFormat STR32 -> F
+    com.batch.android.msgpack.core.MessageFormat NEVER_USED -> g
+    com.batch.android.msgpack.core.MessageFormat FIXEXT8 -> B
+    com.batch.android.msgpack.core.MessageFormat FIXMAP -> c
+    com.batch.android.msgpack.core.MessageFormat EXT8 -> l
+    com.batch.android.msgpack.core.MessageFormat EXT32 -> n
+    com.batch.android.msgpack.core.MessageFormat BOOLEAN -> h
+    com.batch.android.msgpack.core.MessageFormat MAP16 -> I
+    com.batch.android.msgpack.core.MessageFormat BIN16 -> j
+    com.batch.android.msgpack.value.ValueType valueType -> a
+    com.batch.android.msgpack.core.MessageFormat NEGFIXINT -> K
+    com.batch.android.msgpack.core.MessageFormat UINT64 -> t
+    com.batch.android.msgpack.core.MessageFormat[] formatTable -> L
+    com.batch.android.msgpack.core.MessageFormat INT16 -> v
+    com.batch.android.msgpack.core.MessageFormat FLOAT64 -> p
+    com.batch.android.msgpack.core.MessageFormat UINT16 -> r
+    com.batch.android.msgpack.core.MessageFormat FIXEXT1 -> y
+    com.batch.android.msgpack.core.MessageFormat FIXARRAY -> d
+    com.batch.android.msgpack.core.MessageFormat STR16 -> E
+    com.batch.android.msgpack.core.MessageFormat NIL -> f
+    com.batch.android.msgpack.core.MessageFormat ARRAY16 -> G
+    com.batch.android.msgpack.core.MessageFormat FIXEXT4 -> A
+    com.batch.android.msgpack.core.MessageFormat POSFIXINT -> b
+    com.batch.android.msgpack.core.MessageFormat FIXEXT16 -> C
+    1:40:void <clinit>():27:66 -> <clinit>
+    41:108:void <clinit>():25:92 -> <clinit>
+    1:2:void <init>(java.lang.String,int,com.batch.android.msgpack.value.ValueType):71:72 -> <init>
+    1:1:com.batch.android.msgpack.core.MessageFormat[] $values():25:25 -> a
+    2:80:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):114:192 -> a
+    81:81:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):190:190 -> a
+    82:82:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):188:188 -> a
+    83:83:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):186:186 -> a
+    84:84:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):184:184 -> a
+    85:85:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):182:182 -> a
+    86:86:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):180:180 -> a
+    87:87:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):178:178 -> a
+    88:88:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):176:176 -> a
+    89:89:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):174:174 -> a
+    90:90:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):172:172 -> a
+    91:91:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):170:170 -> a
+    92:92:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):168:168 -> a
+    93:93:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):166:166 -> a
+    94:94:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):164:164 -> a
+    95:95:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):162:162 -> a
+    96:96:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):160:160 -> a
+    97:97:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):158:158 -> a
+    98:98:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):156:156 -> a
+    99:99:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):154:154 -> a
+    100:100:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):152:152 -> a
+    101:101:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):150:150 -> a
+    102:102:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):148:148 -> a
+    103:103:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):146:146 -> a
+    104:104:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):144:144 -> a
+    105:105:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):142:142 -> a
+    106:106:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):140:140 -> a
+    107:107:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):138:138 -> a
+    108:108:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):136:136 -> a
+    109:109:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):134:134 -> a
+    110:110:com.batch.android.msgpack.core.MessageFormat toMessageFormat(byte):131:131 -> a
+    1:4:com.batch.android.msgpack.value.ValueType getValueType():82:85 -> b
+    5:5:com.batch.android.msgpack.value.ValueType getValueType():83:83 -> b
+    6:6:com.batch.android.msgpack.core.MessageFormat valueOf(byte):103:103 -> b
+    1:1:com.batch.android.msgpack.core.MessageFormat valueOf(java.lang.String):25:25 -> valueOf
+    1:1:com.batch.android.msgpack.core.MessageFormat[] values():25:25 -> values
+com.batch.android.msgpack.core.MessageFormatException -> com.batch.android.n0.d:
+# {"id":"sourceFile","fileName":"MessageFormatException.java"}
+    1:1:void <init>(java.lang.Throwable):24:24 -> <init>
+    2:2:void <init>(java.lang.String):28:28 -> <init>
+    3:3:void <init>(java.lang.String,java.lang.Throwable):32:32 -> <init>
+com.batch.android.msgpack.core.MessageInsufficientBufferException -> com.batch.android.n0.e:
+# {"id":"sourceFile","fileName":"MessageInsufficientBufferException.java"}
+    1:1:void <init>():24:24 -> <init>
+    2:2:void <init>(java.lang.String):28:28 -> <init>
+    3:3:void <init>(java.lang.Throwable):32:32 -> <init>
+    4:4:void <init>(java.lang.String,java.lang.Throwable):36:36 -> <init>
+com.batch.android.msgpack.core.MessageIntegerOverflowException -> com.batch.android.n0.f:
+# {"id":"sourceFile","fileName":"MessageIntegerOverflowException.java"}
+    java.math.BigInteger bigInteger -> b
+    1:2:void <init>(java.math.BigInteger):30:31 -> <init>
+    3:3:void <init>(long):35:35 -> <init>
+    4:5:void <init>(java.lang.String,java.math.BigInteger):39:40 -> <init>
+    1:1:java.math.BigInteger getBigInteger():44:44 -> a
+    1:1:java.lang.String getMessage():49:49 -> getMessage
+com.batch.android.msgpack.core.MessageNeverUsedFormatException -> com.batch.android.n0.g:
+# {"id":"sourceFile","fileName":"MessageNeverUsedFormatException.java"}
+    1:1:void <init>(java.lang.Throwable):24:24 -> <init>
+    2:2:void <init>(java.lang.String):28:28 -> <init>
+    3:3:void <init>(java.lang.String,java.lang.Throwable):32:32 -> <init>
+com.batch.android.msgpack.core.MessagePack -> com.batch.android.n0.h:
+# {"id":"sourceFile","fileName":"MessagePack.java"}
+    java.nio.charset.Charset UTF8 -> a
+    com.batch.android.msgpack.core.MessagePack$PackerConfig DEFAULT_PACKER_CONFIG -> b
+    com.batch.android.msgpack.core.MessagePack$UnpackerConfig DEFAULT_UNPACKER_CONFIG -> c
+    1:11:void <clinit>():67:77 -> <clinit>
+    1:1:void <init>():160:160 -> <init>
+    1:1:com.batch.android.msgpack.core.MessagePacker newDefaultPacker(com.batch.android.msgpack.core.buffer.MessageBufferOutput):177:177 -> a
+    2:2:com.batch.android.msgpack.core.MessagePacker newDefaultPacker(java.io.OutputStream):192:192 -> a
+    3:3:com.batch.android.msgpack.core.MessagePacker newDefaultPacker(java.nio.channels.WritableByteChannel):204:204 -> a
+    4:4:com.batch.android.msgpack.core.MessageBufferPacker newDefaultBufferPacker():217:217 -> a
+    5:5:com.batch.android.msgpack.core.MessageUnpacker newDefaultUnpacker(com.batch.android.msgpack.core.buffer.MessageBufferInput):234:234 -> a
+    6:6:com.batch.android.msgpack.core.MessageUnpacker newDefaultUnpacker(java.io.InputStream):249:249 -> a
+    7:7:com.batch.android.msgpack.core.MessageUnpacker newDefaultUnpacker(java.nio.channels.ReadableByteChannel):261:261 -> a
+    8:8:com.batch.android.msgpack.core.MessageUnpacker newDefaultUnpacker(byte[]):275:275 -> a
+    9:9:com.batch.android.msgpack.core.MessageUnpacker newDefaultUnpacker(byte[],int,int):291:291 -> a
+    10:10:com.batch.android.msgpack.core.MessageUnpacker newDefaultUnpacker(java.nio.ByteBuffer):307:307 -> a
+com.batch.android.msgpack.core.MessagePack$Code -> com.batch.android.n0.h$a:
+# {"id":"sourceFile","fileName":"MessagePack.java"}
+    byte FIXEXT1 -> y
+    byte FIXMAP_PREFIX -> b
+    byte FIXEXT4 -> A
+    byte FIXSTR_PREFIX -> d
+    byte FIXEXT16 -> C
+    byte NEVER_USED -> f
+    byte STR16 -> E
+    byte TRUE -> h
+    byte ARRAY16 -> G
+    byte MAP32 -> J
+    byte BIN8 -> i
+    byte BIN32 -> k
+    byte EXT16 -> m
+    byte FLOAT32 -> o
+    byte UINT8 -> q
+    byte UINT32 -> s
+    byte INT8 -> u
+    byte INT32 -> w
+    byte FIXEXT2 -> z
+    byte FIXEXT8 -> B
+    byte POSFIXINT_MASK -> a
+    byte STR8 -> D
+    byte FIXARRAY_PREFIX -> c
+    byte STR32 -> F
+    byte NIL -> e
+    byte ARRAY32 -> H
+    byte FALSE -> g
+    byte BIN16 -> j
+    byte MAP16 -> I
+    byte EXT8 -> l
+    byte NEGFIXINT_PREFIX -> K
+    byte EXT32 -> n
+    byte FLOAT64 -> p
+    byte UINT16 -> r
+    byte UINT64 -> t
+    byte INT16 -> v
+    byte INT64 -> x
+    1:1:void <init>():82:82 -> <init>
+    boolean isFixInt(byte) -> a
+    boolean isFixStr(byte) -> b
+    boolean isFixedArray(byte) -> c
+    boolean isFixedMap(byte) -> d
+    boolean isFixedRaw(byte) -> e
+    boolean isNegFixInt(byte) -> f
+    boolean isPosFixInt(byte) -> g
+com.batch.android.msgpack.core.MessagePack$PackerConfig -> com.batch.android.n0.h$b:
+# {"id":"sourceFile","fileName":"MessagePack.java"}
+    int bufferFlushThreshold -> b
+    int bufferSize -> c
+    int smallStringOptimizationThreshold -> a
+    boolean str8FormatSupport -> d
+    1:1:void <init>():323:323 -> <init>
+    2:8:void <init>():315:321 -> <init>
+    9:9:void <init>(com.batch.android.msgpack.core.MessagePack$PackerConfig):325:325 -> <init>
+    10:24:void <init>(com.batch.android.msgpack.core.MessagePack$PackerConfig):315:329 -> <init>
+    1:1:com.batch.android.msgpack.core.MessagePack$PackerConfig clone():334:334 -> a
+    2:2:com.batch.android.msgpack.core.MessagePacker newPacker(com.batch.android.msgpack.core.buffer.MessageBufferOutput):370:370 -> a
+    3:3:com.batch.android.msgpack.core.MessagePacker newPacker(java.io.OutputStream):383:383 -> a
+    4:4:com.batch.android.msgpack.core.MessagePacker newPacker(java.nio.channels.WritableByteChannel):393:393 -> a
+    5:6:com.batch.android.msgpack.core.MessagePack$PackerConfig withBufferFlushThreshold(int):426:427 -> a
+    7:8:com.batch.android.msgpack.core.MessagePack$PackerConfig withStr8FormatSupport(boolean):455:456 -> a
+    1:1:int getBufferFlushThreshold():432:432 -> b
+    2:3:com.batch.android.msgpack.core.MessagePack$PackerConfig withBufferSize(int):440:441 -> b
+    1:2:com.batch.android.msgpack.core.MessagePack$PackerConfig withSmallStringOptimizationThreshold(int):412:413 -> c
+    3:3:int getBufferSize():446:446 -> c
+    1:1:java.lang.Object clone():313:313 -> clone
+    1:1:int getSmallStringOptimizationThreshold():418:418 -> d
+    1:1:boolean isStr8FormatSupport():461:461 -> e
+    1:5:boolean equals(java.lang.Object):348:352 -> equals
+    1:1:com.batch.android.msgpack.core.MessageBufferPacker newBufferPacker():404:404 -> f
+    1:4:int hashCode():339:342 -> hashCode
+com.batch.android.msgpack.core.MessagePack$UnpackerConfig -> com.batch.android.n0.h$c:
+# {"id":"sourceFile","fileName":"MessagePack.java"}
+    java.nio.charset.CodingErrorAction actionOnUnmappableString -> d
+    java.nio.charset.CodingErrorAction actionOnMalformedString -> c
+    int bufferSize -> f
+    int stringDecoderBufferSize -> g
+    int stringSizeLimit -> e
+    boolean allowReadingStringAsBinary -> a
+    boolean allowReadingBinaryAsString -> b
+    1:1:void <init>():484:484 -> <init>
+    2:14:void <init>():470:482 -> <init>
+    15:15:void <init>(com.batch.android.msgpack.core.MessagePack$UnpackerConfig):486:486 -> <init>
+    16:38:void <init>(com.batch.android.msgpack.core.MessagePack$UnpackerConfig):470:492 -> <init>
+    1:1:com.batch.android.msgpack.core.MessagePack$UnpackerConfig clone():497:497 -> a
+    2:2:com.batch.android.msgpack.core.MessageUnpacker newUnpacker(com.batch.android.msgpack.core.buffer.MessageBufferInput):539:539 -> a
+    3:3:com.batch.android.msgpack.core.MessageUnpacker newUnpacker(java.io.InputStream):552:552 -> a
+    4:4:com.batch.android.msgpack.core.MessageUnpacker newUnpacker(java.nio.channels.ReadableByteChannel):562:562 -> a
+    5:5:com.batch.android.msgpack.core.MessageUnpacker newUnpacker(byte[]):574:574 -> a
+    6:6:com.batch.android.msgpack.core.MessageUnpacker newUnpacker(byte[],int,int):588:588 -> a
+    7:7:com.batch.android.msgpack.core.MessageUnpacker newUnpacker(java.nio.ByteBuffer):602:602 -> a
+    8:9:com.batch.android.msgpack.core.MessagePack$UnpackerConfig withAllowReadingBinaryAsString(boolean):622:623 -> a
+    10:11:com.batch.android.msgpack.core.MessagePack$UnpackerConfig withActionOnMalformedString(java.nio.charset.CodingErrorAction):635:636 -> a
+    12:13:com.batch.android.msgpack.core.MessagePack$UnpackerConfig withBufferSize(int):688:689 -> a
+    1:2:com.batch.android.msgpack.core.MessagePack$UnpackerConfig withAllowReadingStringAsBinary(boolean):609:610 -> b
+    3:3:java.nio.charset.CodingErrorAction getActionOnMalformedString():641:641 -> b
+    4:5:com.batch.android.msgpack.core.MessagePack$UnpackerConfig withActionOnUnmappableString(java.nio.charset.CodingErrorAction):648:649 -> b
+    6:7:com.batch.android.msgpack.core.MessagePack$UnpackerConfig withStringDecoderBufferSize(int):674:675 -> b
+    1:1:java.nio.charset.CodingErrorAction getActionOnUnmappableString():654:654 -> c
+    2:3:com.batch.android.msgpack.core.MessagePack$UnpackerConfig withStringSizeLimit(int):661:662 -> c
+    1:1:java.lang.Object clone():468:468 -> clone
+    1:1:boolean getAllowReadingBinaryAsString():628:628 -> d
+    1:1:boolean getAllowReadingStringAsBinary():615:615 -> e
+    1:5:boolean equals(java.lang.Object):514:518 -> equals
+    1:1:int getBufferSize():694:694 -> f
+    1:1:int getStringDecoderBufferSize():680:680 -> g
+    1:1:int getStringSizeLimit():667:667 -> h
+    1:7:int hashCode():502:508 -> hashCode
+com.batch.android.msgpack.core.MessagePackException -> com.batch.android.n0.i:
+# {"id":"sourceFile","fileName":"MessagePackException.java"}
+    java.lang.IllegalStateException UNREACHABLE -> a
+    1:1:void <clinit>():43:43 -> <clinit>
+    1:1:void <init>():24:24 -> <init>
+    2:2:void <init>(java.lang.String):28:28 -> <init>
+    3:3:void <init>(java.lang.String,java.lang.Throwable):32:32 -> <init>
+    4:4:void <init>(java.lang.Throwable):36:36 -> <init>
+    1:1:java.lang.UnsupportedOperationException UNSUPPORTED(java.lang.String):40:40 -> a
+com.batch.android.msgpack.core.MessagePacker -> com.batch.android.n0.j:
+# {"id":"sourceFile","fileName":"MessagePacker.java"}
+    boolean CORRUPTED_CHARSET_ENCODER -> i
+    int UTF_8_MAX_CHAR_SIZE -> j
+    com.batch.android.msgpack.core.buffer.MessageBuffer buffer -> e
+    long totalFlushBytes -> g
+    int position -> f
+    int bufferFlushThreshold -> b
+    com.batch.android.msgpack.core.buffer.MessageBufferOutput out -> d
+    java.nio.charset.CharsetEncoder encoder -> h
+    boolean str8FormatSupport -> c
+    int smallStringOptimizationThreshold -> a
+    1:25:void <clinit>():139:163 -> <clinit>
+    26:26:void <clinit>():161:161 -> <clinit>
+    27:27:void <clinit>():159:159 -> <clinit>
+    28:28:void <clinit>():157:157 -> <clinit>
+    29:39:void <clinit>():155:165 -> <clinit>
+    1:7:void <init>(com.batch.android.msgpack.core.buffer.MessageBufferOutput,com.batch.android.msgpack.core.MessagePack$PackerConfig):200:206 -> <init>
+    1:9:com.batch.android.msgpack.core.buffer.MessageBufferOutput reset(com.batch.android.msgpack.core.buffer.MessageBufferOutput):225:233 -> a
+    10:10:void clear():255:255 -> a
+    11:13:void writeByteAndByte(byte,byte):307:309 -> a
+    14:17:void writeByteAndShort(byte,short):313:316 -> a
+    18:21:void writeByteAndFloat(byte,float):327:330 -> a
+    22:25:void writeByteAndDouble(byte,double):334:337 -> a
+    26:29:void writeByteAndLong(byte,long):341:344 -> a
+    30:30:com.batch.android.msgpack.core.MessagePacker packBoolean(boolean):387:387 -> a
+    31:33:com.batch.android.msgpack.core.MessagePacker packByte(byte):403:405 -> a
+    34:44:com.batch.android.msgpack.core.MessagePacker packShort(short):423:433 -> a
+    45:70:com.batch.android.msgpack.core.MessagePacker packLong(long):487:512 -> a
+    71:76:com.batch.android.msgpack.core.MessagePacker packBigInteger(java.math.BigInteger):530:535 -> a
+    77:77:com.batch.android.msgpack.core.MessagePacker packFloat(float):551:551 -> a
+    78:78:com.batch.android.msgpack.core.MessagePacker packDouble(double):566:566 -> a
+    79:100:int encodeStringToBufferAt(int,java.lang.String):601:622 -> a
+    101:130:com.batch.android.msgpack.core.MessagePacker packString(java.lang.String):638:667 -> a
+    131:165:com.batch.android.msgpack.core.MessagePacker packString(java.lang.String):659:693 -> a
+    166:186:com.batch.android.msgpack.core.MessagePacker packString(java.lang.String):685:705 -> a
+    187:187:com.batch.android.msgpack.core.MessagePacker packString(java.lang.String):644:644 -> a
+    188:188:com.batch.android.msgpack.core.MessagePacker packValue(com.batch.android.msgpack.value.Value):770:770 -> a
+    189:211:com.batch.android.msgpack.core.MessagePacker packExtensionTypeHeader(byte,int):788:810 -> a
+    212:212:com.batch.android.msgpack.core.MessagePacker addPayload(byte[]):914:914 -> a
+    1:4:void flushBuffer():286:289 -> b
+    5:6:void writeByte(byte):302:303 -> b
+    7:10:void writeByteAndInt(byte,int):320:323 -> b
+    11:13:void writeShort(short):348:350 -> b
+    14:16:void writeLong(long):360:362 -> b
+    17:20:void packStringWithGetBytes(java.lang.String):572:575 -> b
+    21:21:com.batch.android.msgpack.core.MessagePacker writePayload(byte[]):871:871 -> b
+    1:1:long getTotalWrittenBytes():248:248 -> c
+    2:6:void ensureCapacity(int):293:297 -> c
+    7:14:com.batch.android.msgpack.core.MessagePacker addPayload(byte[],int,int):935:942 -> c
+    15:18:com.batch.android.msgpack.core.MessagePacker addPayload(byte[],int,int):936:939 -> c
+    1:4:void close():279:282 -> close
+    1:1:com.batch.android.msgpack.core.MessagePacker packNil():374:374 -> d
+    2:6:com.batch.android.msgpack.core.MessagePacker packArrayHeader(int):726:730 -> d
+    7:7:com.batch.android.msgpack.core.MessagePacker packArrayHeader(int):722:722 -> d
+    8:15:com.batch.android.msgpack.core.MessagePacker writePayload(byte[],int,int):886:893 -> d
+    16:19:com.batch.android.msgpack.core.MessagePacker writePayload(byte[],int,int):887:890 -> d
+    1:19:void prepareEncoder():579:597 -> e
+    20:24:com.batch.android.msgpack.core.MessagePacker packBinaryHeader(int):827:831 -> e
+    1:16:com.batch.android.msgpack.core.MessagePacker packInt(int):452:467 -> f
+    1:4:void flush():265:268 -> flush
+    1:5:com.batch.android.msgpack.core.MessagePacker packMapHeader(int):753:757 -> g
+    6:6:com.batch.android.msgpack.core.MessagePacker packMapHeader(int):749:749 -> g
+    1:7:com.batch.android.msgpack.core.MessagePacker packRawStringHeader(int):850:856 -> h
+    1:3:void writeInt(int):354:356 -> i
+com.batch.android.msgpack.core.MessageSizeException -> com.batch.android.n0.k:
+# {"id":"sourceFile","fileName":"MessageSizeException.java"}
+    long size -> b
+    1:2:void <init>(long):26:27 -> <init>
+    3:4:void <init>(java.lang.String,long):31:32 -> <init>
+    1:1:long getSize():36:36 -> a
+com.batch.android.msgpack.core.MessageStringCodingException -> com.batch.android.n0.l:
+# {"id":"sourceFile","fileName":"MessageStringCodingException.java"}
+    1:1:void <init>(java.lang.String,java.nio.charset.CharacterCodingException):26:26 -> <init>
+    2:2:void <init>(java.nio.charset.CharacterCodingException):30:30 -> <init>
+    1:1:java.nio.charset.CharacterCodingException getCause():35:35 -> a
+    1:1:java.lang.Throwable getCause():23:23 -> getCause
+com.batch.android.msgpack.core.MessageTypeCastException -> com.batch.android.n0.m:
+# {"id":"sourceFile","fileName":"MessageTypeCastException.java"}
+    1:1:void <init>():21:21 -> <init>
+    2:2:void <init>(java.lang.String):25:25 -> <init>
+    3:3:void <init>(java.lang.String,java.lang.Throwable):29:29 -> <init>
+    4:4:void <init>(java.lang.Throwable):33:33 -> <init>
+com.batch.android.msgpack.core.MessageTypeException -> com.batch.android.n0.n:
+# {"id":"sourceFile","fileName":"MessageTypeException.java"}
+    1:1:void <init>():24:24 -> <init>
+    2:2:void <init>(java.lang.String):28:28 -> <init>
+    3:3:void <init>(java.lang.String,java.lang.Throwable):32:32 -> <init>
+    4:4:void <init>(java.lang.Throwable):36:36 -> <init>
+com.batch.android.msgpack.core.MessageUnpacker -> com.batch.android.n0.o:
+# {"id":"sourceFile","fileName":"MessageUnpacker.java"}
+    long totalReadBytes -> j
+    com.batch.android.msgpack.core.buffer.MessageBuffer numberBuffer -> k
+    int nextReadPosition -> l
+    com.batch.android.msgpack.core.buffer.MessageBuffer buffer -> h
+    java.lang.StringBuilder decodeStringBuffer -> m
+    int position -> i
+    int stringDecoderBufferSize -> f
+    java.lang.String EMPTY_STRING -> q
+    int stringSizeLimit -> e
+    com.batch.android.msgpack.core.buffer.MessageBuffer EMPTY_BUFFER -> p
+    boolean $assertionsDisabled -> r
+    java.nio.charset.CodingErrorAction actionOnUnmappableString -> d
+    java.nio.charset.CodingErrorAction actionOnMalformedString -> c
+    java.nio.CharBuffer decodeBuffer -> o
+    com.batch.android.msgpack.core.buffer.MessageBufferInput in -> g
+    java.nio.charset.CharsetDecoder decoder -> n
+    boolean allowReadingStringAsBinary -> a
+    boolean allowReadingBinaryAsString -> b
+    1:3:void <clinit>():149:151 -> <clinit>
+    1:1:void <init>(com.batch.android.msgpack.core.buffer.MessageBufferInput,com.batch.android.msgpack.core.MessagePack$UnpackerConfig):209:209 -> <init>
+    2:53:void <init>(com.batch.android.msgpack.core.buffer.MessageBufferInput,com.batch.android.msgpack.core.MessagePack$UnpackerConfig):165:216 -> <init>
+    1:40:int unpackInt():879:918 -> A
+    41:43:int unpackInt():912:914 -> A
+    44:44:int unpackInt():909:909 -> A
+    45:45:int unpackInt():906:906 -> A
+    46:46:int unpackInt():903:903 -> A
+    47:49:int unpackInt():897:899 -> A
+    50:52:int unpackInt():891:893 -> A
+    53:53:int unpackInt():888:888 -> A
+    54:54:int unpackInt():885:885 -> A
+    1:38:long unpackLong():932:969 -> B
+    39:39:long unpackLong():966:966 -> B
+    40:40:long unpackLong():963:963 -> B
+    41:41:long unpackLong():960:960 -> B
+    42:42:long unpackLong():957:957 -> B
+    43:45:long unpackLong():951:953 -> B
+    46:46:long unpackLong():944:944 -> B
+    47:47:long unpackLong():941:941 -> B
+    48:48:long unpackLong():938:938 -> B
+    1:17:int unpackMapHeader():1251:1267 -> C
+    18:18:int unpackMapHeader():1258:1258 -> C
+    1:5:void unpackNil():697:701 -> D
+    1:16:int unpackRawStringHeader():1357:1372 -> E
+    1:46:short unpackShort():820:865 -> F
+    47:49:short unpackShort():859:861 -> F
+    50:52:short unpackShort():853:855 -> F
+    53:53:short unpackShort():850:850 -> F
+    54:54:short unpackShort():847:847 -> F
+    55:57:short unpackShort():841:843 -> F
+    58:60:short unpackShort():835:837 -> F
+    61:63:short unpackShort():829:831 -> F
+    64:64:short unpackShort():826:826 -> F
+    1:80:java.lang.String unpackString():1085:1164 -> G
+    81:84:java.lang.String unpackString():1157:1160 -> G
+    85:114:java.lang.String unpackString():1141:1170 -> G
+    115:116:java.lang.String unpackString():1090:1091 -> G
+    1:53:com.batch.android.msgpack.value.ImmutableValue unpackValue():567:619 -> H
+    54:55:com.batch.android.msgpack.value.ImmutableValue unpackValue():615:616 -> H
+    56:64:com.batch.android.msgpack.value.ImmutableValue unpackValue():603:611 -> H
+    65:70:com.batch.android.msgpack.value.ImmutableValue unpackValue():594:599 -> H
+    71:72:com.batch.android.msgpack.value.ImmutableValue unpackValue():589:590 -> H
+    73:74:com.batch.android.msgpack.value.ImmutableValue unpackValue():584:585 -> H
+    75:75:com.batch.android.msgpack.value.ImmutableValue unpackValue():581:581 -> H
+    76:79:com.batch.android.msgpack.value.ImmutableValue unpackValue():575:578 -> H
+    80:80:com.batch.android.msgpack.value.ImmutableValue unpackValue():573:573 -> H
+    81:82:com.batch.android.msgpack.value.ImmutableValue unpackValue():570:571 -> H
+    1:8:com.batch.android.msgpack.core.buffer.MessageBufferInput reset(com.batch.android.msgpack.core.buffer.MessageBufferInput):234:241 -> a
+    9:16:boolean ensureBuffer():343:350 -> a
+    17:26:com.batch.android.msgpack.core.MessagePackException unexpected(java.lang.String,byte):552:561 -> a
+    27:89:com.batch.android.msgpack.value.Variable unpackValue(com.batch.android.msgpack.value.Variable):624:686 -> a
+    90:91:com.batch.android.msgpack.value.Variable unpackValue(com.batch.android.msgpack.value.Variable):681:682 -> a
+    92:99:com.batch.android.msgpack.value.Variable unpackValue(com.batch.android.msgpack.value.Variable):669:676 -> a
+    100:105:com.batch.android.msgpack.value.Variable unpackValue(com.batch.android.msgpack.value.Variable):659:664 -> a
+    106:107:com.batch.android.msgpack.value.Variable unpackValue(com.batch.android.msgpack.value.Variable):653:654 -> a
+    108:109:com.batch.android.msgpack.value.Variable unpackValue(com.batch.android.msgpack.value.Variable):647:648 -> a
+    110:110:com.batch.android.msgpack.value.Variable unpackValue(com.batch.android.msgpack.value.Variable):643:643 -> a
+    111:116:com.batch.android.msgpack.value.Variable unpackValue(com.batch.android.msgpack.value.Variable):634:639 -> a
+    117:117:com.batch.android.msgpack.value.Variable unpackValue(com.batch.android.msgpack.value.Variable):636:636 -> a
+    118:118:com.batch.android.msgpack.value.Variable unpackValue(com.batch.android.msgpack.value.Variable):631:631 -> a
+    119:120:com.batch.android.msgpack.value.Variable unpackValue(com.batch.android.msgpack.value.Variable):627:628 -> a
+    121:124:void handleCoderError(java.nio.charset.CoderResult):1176:1179 -> a
+    125:135:void readPayload(java.nio.ByteBuffer):1443:1453 -> a
+    136:147:void readPayload(com.batch.android.msgpack.core.buffer.MessageBuffer,int,int):1471:1482 -> a
+    148:148:void readPayload(byte[]):1498:1498 -> a
+    149:150:com.batch.android.msgpack.core.MessageIntegerOverflowException overflowU8(byte):1600:1601 -> a
+    151:152:com.batch.android.msgpack.core.MessageIntegerOverflowException overflowI16(short):1620:1621 -> a
+    153:154:com.batch.android.msgpack.core.MessageIntegerOverflowException overflowI64(long):1630:1631 -> a
+    1:6:com.batch.android.msgpack.core.buffer.MessageBuffer getNextBuffer():267:272 -> b
+    7:7:com.batch.android.msgpack.core.buffer.MessageBuffer getNextBuffer():269:269 -> b
+    8:8:int tryReadBinaryHeader(byte):1350:1350 -> b
+    9:9:int tryReadBinaryHeader(byte):1348:1348 -> b
+    10:10:int tryReadBinaryHeader(byte):1346:1346 -> b
+    11:12:com.batch.android.msgpack.core.MessageIntegerOverflowException overflowU16(short):1605:1606 -> b
+    13:14:com.batch.android.msgpack.core.MessageIntegerOverflowException overflowU64(long):1615:1616 -> b
+    1:5:com.batch.android.msgpack.core.MessageFormat getNextFormat():372:376 -> c
+    6:6:com.batch.android.msgpack.core.MessageFormat getNextFormat():373:373 -> c
+    7:24:java.lang.String decodeStringFastPath(int):1184:1201 -> c
+    25:25:java.lang.String decodeStringFastPath(int):1198:1198 -> c
+    26:26:int tryReadStringHeader(byte):1337:1337 -> c
+    27:27:int tryReadStringHeader(byte):1335:1335 -> c
+    28:28:int tryReadStringHeader(byte):1333:1333 -> c
+    29:40:void readPayload(byte[],int,int):1531:1542 -> c
+    1:3:void close():1594:1596 -> close
+    1:1:long getTotalReadBytes():257:257 -> d
+    2:2:int utf8MultibyteCharacterSize(byte):328:328 -> d
+    3:4:com.batch.android.msgpack.core.MessageIntegerOverflowException overflowI32(int):1625:1626 -> d
+    1:1:boolean hasNext():339:339 -> e
+    2:3:com.batch.android.msgpack.core.MessageIntegerOverflowException overflowU32(int):1610:1611 -> e
+    1:2:void nextBuffer():277:278 -> f
+    3:3:com.batch.android.msgpack.core.MessageSizeException overflowU32Size(int):1636:1636 -> f
+    1:34:com.batch.android.msgpack.core.buffer.MessageBuffer prepareNumberBuffer(int):290:323 -> g
+    35:35:com.batch.android.msgpack.core.buffer.MessageBuffer prepareNumberBuffer(int):316:316 -> g
+    36:47:byte readByte():386:397 -> g
+    1:2:double readDouble():422:423 -> h
+    3:4:byte[] readPayload(int):1514:1515 -> h
+    1:2:float readFloat():417:418 -> i
+    3:10:com.batch.android.msgpack.core.buffer.MessageBuffer readPayloadAsReference(int):1558:1565 -> i
+    1:2:int readInt():407:408 -> j
+    3:11:void skipPayload(int):1419:1427 -> j
+    1:2:long readLong():412:413 -> k
+    3:96:void skipValue(int):443:536 -> k
+    97:97:void skipValue(int):533:533 -> k
+    98:98:void skipValue(int):530:530 -> k
+    99:99:void skipValue(int):527:527 -> k
+    100:100:void skipValue(int):524:524 -> k
+    101:101:void skipValue(int):521:521 -> k
+    102:102:void skipValue(int):518:518 -> k
+    103:103:void skipValue(int):515:515 -> k
+    104:104:void skipValue(int):512:512 -> k
+    105:105:void skipValue(int):509:509 -> k
+    106:106:void skipValue(int):506:506 -> k
+    107:107:void skipValue(int):503:503 -> k
+    108:108:void skipValue(int):500:500 -> k
+    109:109:void skipValue(int):497:497 -> k
+    110:110:void skipValue(int):493:493 -> k
+    111:111:void skipValue(int):489:489 -> k
+    112:112:void skipValue(int):485:485 -> k
+    113:113:void skipValue(int):480:480 -> k
+    114:114:void skipValue(int):475:475 -> k
+    115:115:void skipValue(int):471:471 -> k
+    116:116:void skipValue(int):466:466 -> k
+    1:1:int readNextLength16():1575:1575 -> l
+    1:3:int readNextLength32():1580:1582 -> m
+    1:1:int readNextLength8():1570:1570 -> n
+    1:2:short readShort():402:403 -> o
+    1:14:void resetDecoder():1067:1080 -> p
+    1:1:void skipValue():432:432 -> q
+    1:6:boolean tryUnpackNil():716:721 -> r
+    7:7:boolean tryUnpackNil():717:717 -> r
+    1:17:int unpackArrayHeader():1218:1234 -> s
+    18:18:int unpackArrayHeader():1225:1225 -> s
+    1:40:java.math.BigInteger unpackBigInteger():980:1019 -> t
+    41:42:java.math.BigInteger unpackBigInteger():1016:1017 -> t
+    43:44:java.math.BigInteger unpackBigInteger():1013:1014 -> t
+    45:46:java.math.BigInteger unpackBigInteger():1010:1011 -> t
+    47:48:java.math.BigInteger unpackBigInteger():1007:1008 -> t
+    49:54:java.math.BigInteger unpackBigInteger():999:1004 -> t
+    55:59:java.math.BigInteger unpackBigInteger():992:996 -> t
+    60:61:java.math.BigInteger unpackBigInteger():989:990 -> t
+    62:63:java.math.BigInteger unpackBigInteger():986:987 -> t
+    1:16:int unpackBinaryHeader():1392:1407 -> u
+    1:7:boolean unpackBoolean():735:741 -> v
+    1:52:byte unpackByte():755:806 -> w
+    53:55:byte unpackByte():800:802 -> w
+    56:58:byte unpackByte():794:796 -> w
+    59:61:byte unpackByte():788:790 -> w
+    62:62:byte unpackByte():785:785 -> w
+    63:65:byte unpackByte():779:781 -> w
+    66:68:byte unpackByte():773:775 -> w
+    69:71:byte unpackByte():767:769 -> w
+    72:74:byte unpackByte():761:763 -> w
+    1:10:double unpackDouble():1052:1061 -> x
+    11:11:double unpackDouble():1055:1055 -> x
+    1:57:com.batch.android.msgpack.core.ExtensionTypeHeader unpackExtensionTypeHeader():1271:1327 -> y
+    58:59:com.batch.android.msgpack.core.ExtensionTypeHeader unpackExtensionTypeHeader():1295:1296 -> y
+    60:61:com.batch.android.msgpack.core.ExtensionTypeHeader unpackExtensionTypeHeader():1290:1291 -> y
+    62:63:com.batch.android.msgpack.core.ExtensionTypeHeader unpackExtensionTypeHeader():1285:1286 -> y
+    64:65:com.batch.android.msgpack.core.ExtensionTypeHeader unpackExtensionTypeHeader():1280:1281 -> y
+    66:114:com.batch.android.msgpack.core.ExtensionTypeHeader unpackExtensionTypeHeader():1275:1323 -> y
+    115:115:com.batch.android.msgpack.core.ExtensionTypeHeader unpackExtensionTypeHeader():1319:1319 -> y
+    116:120:com.batch.android.msgpack.core.ExtensionTypeHeader unpackExtensionTypeHeader():1308:1312 -> y
+    121:125:com.batch.android.msgpack.core.ExtensionTypeHeader unpackExtensionTypeHeader():1300:1304 -> y
+    1:10:float unpackFloat():1032:1041 -> z
+    11:11:float unpackFloat():1035:1035 -> z
+com.batch.android.msgpack.core.MessageUnpacker$1 -> com.batch.android.n0.o$a:
+# {"id":"sourceFile","fileName":"MessageUnpacker.java"}
+    int[] $SwitchMap$com$batch$android$msgpack$value$ValueType -> b
+    int[] $SwitchMap$com$batch$android$msgpack$core$MessageFormat -> a
+    1:1:void <clinit>():568:568 -> <clinit>
+    2:2:void <clinit>():445:445 -> <clinit>
+com.batch.android.msgpack.core.Preconditions -> com.batch.android.n0.p:
+# {"id":"sourceFile","fileName":"Preconditions.java"}
+    1:1:void <init>():75:75 -> <init>
+    1:1:void checkArgument(boolean):86:86 -> a
+    2:2:void checkArgument(boolean,java.lang.Object):101:101 -> a
+    3:3:void checkArgument(boolean,java.lang.String,java.lang.Object[]):130:130 -> a
+    4:4:java.lang.Object checkNotNull(java.lang.Object):201:201 -> a
+    5:5:java.lang.Object checkNotNull(java.lang.Object,java.lang.Object):218:218 -> a
+    6:6:java.lang.Object checkNotNull(java.lang.Object,java.lang.String,java.lang.Object[]):247:247 -> a
+    7:7:int checkElementIndex(int,int):295:295 -> a
+    8:12:java.lang.String badElementIndex(int,int,java.lang.String):322:326 -> a
+    13:13:java.lang.String badElementIndex(int,int,java.lang.String):324:324 -> a
+    14:14:java.lang.String badPositionIndexes(int,int,int):408:408 -> a
+    15:15:java.lang.String badPositionIndexes(int,int,int):405:405 -> a
+    16:16:java.lang.String badPositionIndexes(int,int,int):402:402 -> a
+    17:45:java.lang.String format(java.lang.String,java.lang.Object[]):425:453 -> a
+    1:1:void checkState(boolean):143:143 -> b
+    2:2:void checkState(boolean,java.lang.Object):158:158 -> b
+    3:3:void checkState(boolean,java.lang.String,java.lang.Object[]):187:187 -> b
+    4:4:int checkPositionIndex(int,int):344:344 -> b
+    5:9:java.lang.String badPositionIndex(int,int,java.lang.String):371:375 -> b
+    10:10:java.lang.String badPositionIndex(int,int,java.lang.String):373:373 -> b
+    11:11:void checkPositionIndexes(int,int,int):396:396 -> b
+    1:1:int checkElementIndex(int,int,java.lang.String):315:315 -> c
+    1:1:int checkPositionIndex(int,int,java.lang.String):364:364 -> d
+com.batch.android.msgpack.core.buffer.ArrayBufferInput -> com.batch.android.o0.a:
+# {"id":"sourceFile","fileName":"ArrayBufferInput.java"}
+    com.batch.android.msgpack.core.buffer.MessageBuffer buffer -> a
+    boolean isEmpty -> b
+    1:6:void <init>(com.batch.android.msgpack.core.buffer.MessageBuffer):28:33 -> <init>
+    7:7:void <init>(byte[]):38:38 -> <init>
+    8:8:void <init>(byte[],int,int):42:42 -> <init>
+    1:6:com.batch.android.msgpack.core.buffer.MessageBuffer reset(com.batch.android.msgpack.core.buffer.MessageBuffer):52:57 -> a
+    7:7:void reset(byte[]):63:63 -> a
+    1:1:void reset(byte[],int,int):67:67 -> c
+    1:2:void close():81:82 -> close
+    1:5:com.batch.android.msgpack.core.buffer.MessageBuffer next():72:76 -> next
+com.batch.android.msgpack.core.buffer.ArrayBufferOutput -> com.batch.android.o0.b:
+# {"id":"sourceFile","fileName":"ArrayBufferOutput.java"}
+    java.util.List list -> a
+    com.batch.android.msgpack.core.buffer.MessageBuffer lastBuffer -> c
+    int bufferSize -> b
+    1:1:void <init>():35:35 -> <init>
+    2:4:void <init>(int):38:40 -> <init>
+    1:1:void clear():108:108 -> a
+    2:6:void writeBuffer(int):125:129 -> a
+    7:9:void write(byte[],int,int):135:137 -> a
+    1:2:int getSize():50:51 -> b
+    3:8:com.batch.android.msgpack.core.buffer.MessageBuffer next(int):113:118 -> b
+    9:10:void add(byte[],int,int):142:143 -> b
+    1:1:java.util.List toBufferList():101:101 -> c
+    1:5:byte[] toByteArray():65:69 -> d
+    1:6:com.batch.android.msgpack.core.buffer.MessageBuffer toMessageBuffer():83:88 -> e
+com.batch.android.msgpack.core.buffer.ByteBufferInput -> com.batch.android.o0.c:
+# {"id":"sourceFile","fileName":"ByteBufferInput.java"}
+    java.nio.ByteBuffer input -> a
+    boolean isRead -> b
+    1:1:void <init>(java.nio.ByteBuffer):30:30 -> <init>
+    2:5:void <init>(java.nio.ByteBuffer):28:31 -> <init>
+    1:3:java.nio.ByteBuffer reset(java.nio.ByteBuffer):41:43 -> a
+    1:6:com.batch.android.msgpack.core.buffer.MessageBuffer next():49:54 -> next
+com.batch.android.msgpack.core.buffer.ChannelBufferInput -> com.batch.android.o0.d:
+# {"id":"sourceFile","fileName":"ChannelBufferInput.java"}
+    java.nio.channels.ReadableByteChannel channel -> a
+    com.batch.android.msgpack.core.buffer.MessageBuffer buffer -> b
+    1:1:void <init>(java.nio.channels.ReadableByteChannel):34:34 -> <init>
+    2:5:void <init>(java.nio.channels.ReadableByteChannel,int):37:40 -> <init>
+    1:2:java.nio.channels.ReadableByteChannel reset(java.nio.channels.ReadableByteChannel):50:51 -> a
+    1:1:void close():68:68 -> close
+    1:7:com.batch.android.msgpack.core.buffer.MessageBuffer next():57:63 -> next
+com.batch.android.msgpack.core.buffer.ChannelBufferOutput -> com.batch.android.o0.e:
+# {"id":"sourceFile","fileName":"ChannelBufferOutput.java"}
+    java.nio.channels.WritableByteChannel channel -> a
+    com.batch.android.msgpack.core.buffer.MessageBuffer buffer -> b
+    1:1:void <init>(java.nio.channels.WritableByteChannel):33:33 -> <init>
+    2:4:void <init>(java.nio.channels.WritableByteChannel,int):36:38 -> <init>
+    1:2:java.nio.channels.WritableByteChannel reset(java.nio.channels.WritableByteChannel):48:49 -> a
+    3:5:void writeBuffer(int):63:65 -> a
+    6:8:void write(byte[],int,int):71:73 -> a
+    1:4:com.batch.android.msgpack.core.buffer.MessageBuffer next(int):55:58 -> b
+    5:5:void add(byte[],int,int):79:79 -> b
+    1:1:void close():84:84 -> close
+com.batch.android.msgpack.core.buffer.DirectBufferAccess -> com.batch.android.msgpack.core.buffer.a:
+# {"id":"sourceFile","fileName":"DirectBufferAccess.java"}
+    java.lang.Class directByteBufferClass -> f
+    java.lang.reflect.Method memoryBlockWrapFromJni -> h
+    java.lang.reflect.Method mClean -> c
+    java.lang.reflect.Constructor byteBufferConstructor -> e
+    java.lang.reflect.Method mInvokeCleaner -> d
+    com.batch.android.msgpack.core.buffer.DirectBufferAccess$DirectBufferConstructorType directBufferConstructorType -> g
+    java.lang.reflect.Method mGetAddress -> a
+    java.lang.reflect.Method mCleaner -> b
+    1:49:void <clinit>():54:102 -> <clinit>
+    50:63:void <clinit>():92:105 -> <clinit>
+    1:1:void <init>():30:30 -> <init>
+    1:1:java.lang.Object access$000(java.nio.ByteBuffer):28:28 -> a
+    2:2:java.lang.Object access$100(java.nio.ByteBuffer,java.lang.reflect.Method):28:28 -> a
+    3:10:void clean(java.lang.Object):232:239 -> a
+    11:25:java.nio.ByteBuffer newByteBuffer(long,int,int,java.nio.ByteBuffer):249:263 -> a
+    26:29:java.nio.ByteBuffer newByteBuffer(long,int,int,java.nio.ByteBuffer):257:260 -> a
+    30:30:java.nio.ByteBuffer newByteBuffer(long,int,int,java.nio.ByteBuffer):257:257 -> a
+    31:31:java.nio.ByteBuffer newByteBuffer(long,int,int,java.nio.ByteBuffer):255:255 -> a
+    32:32:java.nio.ByteBuffer newByteBuffer(long,int,int,java.nio.ByteBuffer):253:253 -> a
+    33:49:java.nio.ByteBuffer newByteBuffer(long,int,int,java.nio.ByteBuffer):251:267 -> a
+    1:1:java.lang.Object access$200(java.nio.ByteBuffer):28:28 -> b
+    2:5:java.lang.Object getCleanMethod(java.nio.ByteBuffer,java.lang.reflect.Method):185:188 -> b
+    6:10:long getAddress(java.lang.Object):222:226 -> b
+    11:11:long getAddress(java.lang.Object):224:224 -> b
+    1:3:java.lang.Object getCleanerMethod(java.nio.ByteBuffer):163:165 -> c
+    4:4:boolean isDirectByteBufferInstance(java.lang.Object):244:244 -> c
+    1:2:java.lang.Object getInvokeCleanerMethod(java.nio.ByteBuffer):208:209 -> d
+    1:27:void setupCleanerJava6(java.nio.ByteBuffer):111:137 -> e
+    28:28:void setupCleanerJava6(java.nio.ByteBuffer):135:135 -> e
+    29:29:void setupCleanerJava6(java.nio.ByteBuffer):121:121 -> e
+    1:12:void setupCleanerJava9(java.nio.ByteBuffer):141:152 -> f
+    13:13:void setupCleanerJava9(java.nio.ByteBuffer):150:150 -> f
+com.batch.android.msgpack.core.buffer.DirectBufferAccess$1 -> com.batch.android.msgpack.core.buffer.a$a:
+# {"id":"sourceFile","fileName":"DirectBufferAccess.java"}
+    java.nio.ByteBuffer val$direct -> a
+    1:1:void <init>(java.nio.ByteBuffer):113:113 -> <init>
+    1:1:java.lang.Object run():116:116 -> run
+com.batch.android.msgpack.core.buffer.DirectBufferAccess$2 -> com.batch.android.msgpack.core.buffer.a$b:
+# {"id":"sourceFile","fileName":"DirectBufferAccess.java"}
+    java.nio.ByteBuffer val$direct -> a
+    1:1:void <init>(java.nio.ByteBuffer):127:127 -> <init>
+    1:1:java.lang.Object run():130:130 -> run
+com.batch.android.msgpack.core.buffer.DirectBufferAccess$3 -> com.batch.android.msgpack.core.buffer.a$c:
+# {"id":"sourceFile","fileName":"DirectBufferAccess.java"}
+    java.nio.ByteBuffer val$direct -> a
+    1:1:void <init>(java.nio.ByteBuffer):142:142 -> <init>
+    1:1:java.lang.Object run():145:145 -> run
+com.batch.android.msgpack.core.buffer.DirectBufferAccess$4 -> com.batch.android.msgpack.core.buffer.a$d:
+# {"id":"sourceFile","fileName":"DirectBufferAccess.java"}
+    int[] $SwitchMap$com$batch$android$msgpack$core$buffer$DirectBufferAccess$DirectBufferConstructorType -> a
+    1:1:void <clinit>():249:249 -> <clinit>
+com.batch.android.msgpack.core.buffer.DirectBufferAccess$DirectBufferConstructorType -> com.batch.android.msgpack.core.buffer.a$e:
+# {"id":"sourceFile","fileName":"DirectBufferAccess.java"}
+    com.batch.android.msgpack.core.buffer.DirectBufferAccess$DirectBufferConstructorType[] $VALUES -> e
+    com.batch.android.msgpack.core.buffer.DirectBufferAccess$DirectBufferConstructorType ARGS_MB_INT_INT -> d
+    com.batch.android.msgpack.core.buffer.DirectBufferAccess$DirectBufferConstructorType ARGS_LONG_INT_REF -> a
+    com.batch.android.msgpack.core.buffer.DirectBufferAccess$DirectBufferConstructorType ARGS_INT_INT -> c
+    com.batch.android.msgpack.core.buffer.DirectBufferAccess$DirectBufferConstructorType ARGS_LONG_INT -> b
+    1:4:void <clinit>():33:36 -> <clinit>
+    5:5:void <clinit>():32:32 -> <clinit>
+    1:1:void <init>(java.lang.String,int):32:32 -> <init>
+    1:1:com.batch.android.msgpack.core.buffer.DirectBufferAccess$DirectBufferConstructorType[] $values():32:32 -> a
+    1:1:com.batch.android.msgpack.core.buffer.DirectBufferAccess$DirectBufferConstructorType valueOf(java.lang.String):32:32 -> valueOf
+    1:1:com.batch.android.msgpack.core.buffer.DirectBufferAccess$DirectBufferConstructorType[] values():32:32 -> values
+com.batch.android.msgpack.core.buffer.InputStreamBufferInput -> com.batch.android.o0.f:
+# {"id":"sourceFile","fileName":"InputStreamBufferInput.java"}
+    byte[] buffer -> b
+    java.io.InputStream in -> a
+    1:1:void <init>(java.io.InputStream):45:45 -> <init>
+    2:4:void <init>(java.io.InputStream,int):48:50 -> <init>
+    1:8:com.batch.android.msgpack.core.buffer.MessageBufferInput newBufferInput(java.io.InputStream):34:41 -> a
+    1:2:java.io.InputStream reset(java.io.InputStream):60:61 -> b
+    1:1:void close():76:76 -> close
+    1:5:com.batch.android.msgpack.core.buffer.MessageBuffer next():67:71 -> next
+com.batch.android.msgpack.core.buffer.MessageBuffer -> com.batch.android.msgpack.core.buffer.MessageBuffer:
+# {"id":"sourceFile","fileName":"MessageBuffer.java"}
+    1:56:void <clinit>():50:105 -> <clinit>
+    57:110:void <clinit>():98:151 -> <clinit>
+    111:153:void <clinit>():109:151 -> <clinit>
+    154:194:void <clinit>():114:154 -> <clinit>
+    195:196:void <clinit>():150:151 -> <clinit>
+    1:5:void <init>(byte[],int,int):334:338 -> <init>
+    6:27:void <init>(java.nio.ByteBuffer):346:367 -> <init>
+    28:32:void <init>(java.lang.Object,long,int):371:375 -> <init>
+    1:15:int getJavaVersion():158:172 -> a
+    16:20:com.batch.android.msgpack.core.buffer.MessageBuffer newMessageBuffer(byte[],int,int):266:270 -> a
+    21:25:com.batch.android.msgpack.core.buffer.MessageBuffer newMessageBuffer(java.nio.ByteBuffer):280:284 -> a
+    26:41:com.batch.android.msgpack.core.buffer.MessageBuffer newInstance(java.lang.reflect.Constructor,java.lang.Object[]):297:312 -> a
+    42:42:com.batch.android.msgpack.core.buffer.MessageBuffer newInstance(java.lang.reflect.Constructor,java.lang.Object[]):307:307 -> a
+    43:43:com.batch.android.msgpack.core.buffer.MessageBuffer newInstance(java.lang.reflect.Constructor,java.lang.Object[]):303:303 -> a
+    44:44:com.batch.android.msgpack.core.buffer.MessageBuffer newInstance(java.lang.reflect.Constructor,java.lang.Object[]):300:300 -> a
+    1:1:com.batch.android.msgpack.core.buffer.MessageBuffer allocate(int):210:210 -> allocate
+    2:2:com.batch.android.msgpack.core.buffer.MessageBuffer allocate(int):208:208 -> allocate
+    1:1:byte[] array():568:568 -> array
+    1:1:int arrayOffset():572:572 -> arrayOffset
+    1:1:void copyTo(int,com.batch.android.msgpack.core.buffer.MessageBuffer,int,int):584:584 -> copyTo
+    1:1:boolean getBoolean(int):405:405 -> getBoolean
+    1:1:byte getByte(int):401:401 -> getByte
+    1:1:void getBytes(int,byte[],int,int):440:440 -> getBytes
+    2:6:void getBytes(int,int,java.nio.ByteBuffer):444:448 -> getBytes
+    7:7:void getBytes(int,int,java.nio.ByteBuffer):445:445 -> getBytes
+    1:1:double getDouble(int):436:436 -> getDouble
+    1:1:float getFloat(int):427:427 -> getFloat
+    1:3:int getInt(int):421:423 -> getInt
+    1:2:long getLong(int):431:432 -> getLong
+    1:2:short getShort(int):409:410 -> getShort
+    1:1:boolean hasArray():553:553 -> hasArray
+    1:1:void putBoolean(int,boolean):456:456 -> putBoolean
+    1:1:void putByte(int,byte):452:452 -> putByte
+    1:21:void putByteBuffer(int,java.nio.ByteBuffer,int):495:515 -> putByteBuffer
+    22:22:void putByteBuffer(int,java.nio.ByteBuffer,int):500:500 -> putByteBuffer
+    23:23:void putByteBuffer(int,java.nio.ByteBuffer,int):496:496 -> putByteBuffer
+    1:1:void putBytes(int,byte[],int,int):491:491 -> putBytes
+    1:1:void putDouble(int,double):487:487 -> putDouble
+    1:1:void putFloat(int,float):477:477 -> putFloat
+    1:2:void putInt(int,int):472:473 -> putInt
+    1:2:void putLong(int,long):482:483 -> putLong
+    1:1:void putMessageBuffer(int,com.batch.android.msgpack.core.buffer.MessageBuffer,int,int):522:522 -> putMessageBuffer
+    1:2:void putShort(int,short):460:461 -> putShort
+    1:7:void releaseBuffer(com.batch.android.msgpack.core.buffer.MessageBuffer):317:323 -> releaseBuffer
+    1:1:int size():387:387 -> size
+    1:5:com.batch.android.msgpack.core.buffer.MessageBuffer slice(int,int):392:396 -> slice
+    1:7:java.nio.ByteBuffer sliceAsByteBuffer(int,int):533:539 -> sliceAsByteBuffer
+    8:8:java.nio.ByteBuffer sliceAsByteBuffer(int,int):537:537 -> sliceAsByteBuffer
+    9:9:java.nio.ByteBuffer sliceAsByteBuffer():549:549 -> sliceAsByteBuffer
+    1:2:byte[] toByteArray():562:563 -> toByteArray
+    1:8:java.lang.String toHexString(int,int):588:595 -> toHexString
+    1:1:com.batch.android.msgpack.core.buffer.MessageBuffer wrap(byte[]):224:224 -> wrap
+    2:2:com.batch.android.msgpack.core.buffer.MessageBuffer wrap(byte[],int,int):240:240 -> wrap
+    3:3:com.batch.android.msgpack.core.buffer.MessageBuffer wrap(java.nio.ByteBuffer):256:256 -> wrap
+com.batch.android.msgpack.core.buffer.MessageBufferBE -> com.batch.android.msgpack.core.buffer.MessageBufferBE:
+# {"id":"sourceFile","fileName":"MessageBufferBE.java"}
+    1:1:void <init>(byte[],int,int):30:30 -> <init>
+    2:2:void <init>(java.nio.ByteBuffer):34:34 -> <init>
+    3:3:void <init>(java.lang.Object,long,int):38:38 -> <init>
+    1:5:com.batch.android.msgpack.core.buffer.MessageBufferBE slice(int,int):43:47 -> a
+    1:1:double getDouble(int):73:73 -> getDouble
+    1:1:float getFloat(int):68:68 -> getFloat
+    1:1:int getInt(int):59:59 -> getInt
+    1:1:long getLong(int):63:63 -> getLong
+    1:1:short getShort(int):53:53 -> getShort
+    1:1:void putDouble(int,double):93:93 -> putDouble
+    1:1:void putInt(int,int):83:83 -> putInt
+    1:1:void putLong(int,long):88:88 -> putLong
+    1:1:void putShort(int,short):78:78 -> putShort
+    1:1:com.batch.android.msgpack.core.buffer.MessageBuffer slice(int,int):27:27 -> slice
+com.batch.android.msgpack.core.buffer.MessageBufferInput -> com.batch.android.o0.g:
+# {"id":"sourceFile","fileName":"MessageBufferInput.java"}
+com.batch.android.msgpack.core.buffer.MessageBufferOutput -> com.batch.android.o0.h:
+# {"id":"sourceFile","fileName":"MessageBufferOutput.java"}
+    void write(byte[],int,int) -> a
+    void writeBuffer(int) -> a
+    void add(byte[],int,int) -> b
+    com.batch.android.msgpack.core.buffer.MessageBuffer next(int) -> b
+com.batch.android.msgpack.core.buffer.MessageBufferU -> com.batch.android.msgpack.core.buffer.MessageBufferU:
+# {"id":"sourceFile","fileName":"MessageBufferU.java"}
+    1:2:void <init>(byte[],int,int):31:32 -> <init>
+    3:4:void <init>(java.nio.ByteBuffer):36:37 -> <init>
+    5:6:void <init>(java.lang.Object,long,int,java.nio.ByteBuffer):41:42 -> <init>
+    1:1:byte[] array():233:233 -> array
+    1:5:void copyTo(int,com.batch.android.msgpack.core.buffer.MessageBuffer,int,int):207:211 -> copyTo
+    1:1:boolean getBoolean(int):73:73 -> getBoolean
+    1:1:byte getByte(int):68:68 -> getByte
+    1:6:void getBytes(int,int,java.nio.ByteBuffer):104:109 -> getBytes
+    7:11:void getBytes(int,byte[],int,int):166:170 -> getBytes
+    1:1:double getDouble(int):98:98 -> getDouble
+    1:1:float getFloat(int):88:88 -> getFloat
+    1:1:int getInt(int):83:83 -> getInt
+    1:1:long getLong(int):93:93 -> getLong
+    1:1:short getShort(int):78:78 -> getShort
+    1:1:boolean hasArray():228:228 -> hasArray
+    1:1:void putBoolean(int,boolean):119:119 -> putBoolean
+    1:1:void putByte(int,byte):114:114 -> putByte
+    1:16:void putByteBuffer(int,java.nio.ByteBuffer,int):175:190 -> putByteBuffer
+    17:17:void putByteBuffer(int,java.nio.ByteBuffer,int):176:176 -> putByteBuffer
+    1:5:void putBytes(int,byte[],int,int):197:201 -> putBytes
+    1:1:void putDouble(int,double):144:144 -> putDouble
+    1:1:void putFloat(int,float):134:134 -> putFloat
+    1:1:void putInt(int,int):129:129 -> putInt
+    1:1:void putLong(int,long):139:139 -> putLong
+    1:1:void putMessageBuffer(int,com.batch.android.msgpack.core.buffer.MessageBuffer,int,int):216:216 -> putMessageBuffer
+    1:1:void putShort(int,short):124:124 -> putShort
+    1:2:void resetBufferPosition():62:63 -> resetBufferPosition
+    1:1:com.batch.android.msgpack.core.buffer.MessageBuffer slice(int,int):26:26 -> slice
+    2:12:com.batch.android.msgpack.core.buffer.MessageBufferU slice(int,int):47:57 -> slice
+    1:6:java.nio.ByteBuffer sliceAsByteBuffer(int,int):150:155 -> sliceAsByteBuffer
+    7:7:java.nio.ByteBuffer sliceAsByteBuffer():160:160 -> sliceAsByteBuffer
+    1:2:byte[] toByteArray():221:222 -> toByteArray
+com.batch.android.msgpack.core.buffer.OutputStreamBufferOutput -> com.batch.android.o0.i:
+# {"id":"sourceFile","fileName":"OutputStreamBufferOutput.java"}
+    java.io.OutputStream out -> a
+    com.batch.android.msgpack.core.buffer.MessageBuffer buffer -> b
+    1:1:void <init>(java.io.OutputStream):32:32 -> <init>
+    2:4:void <init>(java.io.OutputStream,int):35:37 -> <init>
+    1:2:java.io.OutputStream reset(java.io.OutputStream):47:48 -> a
+    3:3:void writeBuffer(int):62:62 -> a
+    4:4:void write(byte[],int,int):67:67 -> a
+    1:4:com.batch.android.msgpack.core.buffer.MessageBuffer next(int):54:57 -> b
+    5:5:void add(byte[],int,int):72:72 -> b
+    1:1:void close():77:77 -> close
+    1:1:void flush():82:82 -> flush
+com.batch.android.msgpack.value.ArrayValue -> com.batch.android.p0.a:
+# {"id":"sourceFile","fileName":"ArrayValue.java"}
+    com.batch.android.msgpack.value.Value getOrNilValue(int) -> a
+    java.util.List list() -> l
+com.batch.android.msgpack.value.BinaryValue -> com.batch.android.p0.b:
+# {"id":"sourceFile","fileName":"BinaryValue.java"}
+com.batch.android.msgpack.value.BooleanValue -> com.batch.android.p0.c:
+# {"id":"sourceFile","fileName":"BooleanValue.java"}
+    boolean getBoolean() -> M
+com.batch.android.msgpack.value.ExtensionValue -> com.batch.android.p0.d:
+# {"id":"sourceFile","fileName":"ExtensionValue.java"}
+    byte[] getData() -> e
+    byte getType() -> k
+com.batch.android.msgpack.value.FloatValue -> com.batch.android.p0.e:
+# {"id":"sourceFile","fileName":"FloatValue.java"}
+com.batch.android.msgpack.value.ImmutableArrayValue -> com.batch.android.p0.f:
+# {"id":"sourceFile","fileName":"ImmutableArrayValue.java"}
+    java.util.List list() -> l
+com.batch.android.msgpack.value.ImmutableBinaryValue -> com.batch.android.p0.g:
+# {"id":"sourceFile","fileName":"ImmutableBinaryValue.java"}
+com.batch.android.msgpack.value.ImmutableBooleanValue -> com.batch.android.p0.h:
+# {"id":"sourceFile","fileName":"ImmutableBooleanValue.java"}
+com.batch.android.msgpack.value.ImmutableExtensionValue -> com.batch.android.p0.i:
+# {"id":"sourceFile","fileName":"ImmutableExtensionValue.java"}
+com.batch.android.msgpack.value.ImmutableFloatValue -> com.batch.android.p0.j:
+# {"id":"sourceFile","fileName":"ImmutableFloatValue.java"}
+com.batch.android.msgpack.value.ImmutableIntegerValue -> com.batch.android.p0.k:
+# {"id":"sourceFile","fileName":"ImmutableIntegerValue.java"}
+com.batch.android.msgpack.value.ImmutableMapValue -> com.batch.android.p0.l:
+# {"id":"sourceFile","fileName":"ImmutableMapValue.java"}
+com.batch.android.msgpack.value.ImmutableNilValue -> com.batch.android.p0.m:
+# {"id":"sourceFile","fileName":"ImmutableNilValue.java"}
+com.batch.android.msgpack.value.ImmutableNumberValue -> com.batch.android.p0.n:
+# {"id":"sourceFile","fileName":"ImmutableNumberValue.java"}
+com.batch.android.msgpack.value.ImmutableRawValue -> com.batch.android.p0.o:
+# {"id":"sourceFile","fileName":"ImmutableRawValue.java"}
+com.batch.android.msgpack.value.ImmutableStringValue -> com.batch.android.p0.p:
+# {"id":"sourceFile","fileName":"ImmutableStringValue.java"}
+com.batch.android.msgpack.value.ImmutableValue -> com.batch.android.p0.q:
+# {"id":"sourceFile","fileName":"ImmutableValue.java"}
+    com.batch.android.msgpack.value.ImmutableArrayValue asArrayValue() -> a
+    1:1:com.batch.android.msgpack.value.ArrayValue asArrayValue():21:21 -> a
+    com.batch.android.msgpack.value.ImmutableNilValue asNilValue() -> b
+    1:1:com.batch.android.msgpack.value.NilValue asNilValue():21:21 -> b
+    com.batch.android.msgpack.value.ImmutableIntegerValue asIntegerValue() -> c
+    1:1:com.batch.android.msgpack.value.IntegerValue asIntegerValue():21:21 -> c
+    com.batch.android.msgpack.value.ImmutableMapValue asMapValue() -> d
+    1:1:com.batch.android.msgpack.value.MapValue asMapValue():21:21 -> d
+    com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue() -> f
+    1:1:com.batch.android.msgpack.value.BinaryValue asBinaryValue():21:21 -> f
+    com.batch.android.msgpack.value.ImmutableStringValue asStringValue() -> g
+    1:1:com.batch.android.msgpack.value.StringValue asStringValue():21:21 -> g
+    com.batch.android.msgpack.value.ImmutableRawValue asRawValue() -> h
+    1:1:com.batch.android.msgpack.value.RawValue asRawValue():21:21 -> h
+    com.batch.android.msgpack.value.ImmutableBooleanValue asBooleanValue() -> i
+    1:1:com.batch.android.msgpack.value.BooleanValue asBooleanValue():21:21 -> i
+    com.batch.android.msgpack.value.ImmutableFloatValue asFloatValue() -> j
+    1:1:com.batch.android.msgpack.value.FloatValue asFloatValue():21:21 -> j
+com.batch.android.msgpack.value.IntegerValue -> com.batch.android.p0.r:
+# {"id":"sourceFile","fileName":"IntegerValue.java"}
+    java.math.BigInteger asBigInteger() -> B
+    long asLong() -> I
+    byte asByte() -> J
+    boolean isInLongRange() -> K
+    boolean isInByteRange() -> U
+    int asInt() -> V
+    boolean isInIntRange() -> p
+    short asShort() -> t
+    com.batch.android.msgpack.core.MessageFormat mostSuccinctMessageFormat() -> u
+    boolean isInShortRange() -> y
+com.batch.android.msgpack.value.MapValue -> com.batch.android.p0.s:
+# {"id":"sourceFile","fileName":"MapValue.java"}
+    java.util.Map map() -> H
+    com.batch.android.msgpack.value.Value[] getKeyValueArray() -> x
+com.batch.android.msgpack.value.NilValue -> com.batch.android.p0.t:
+# {"id":"sourceFile","fileName":"NilValue.java"}
+com.batch.android.msgpack.value.NumberValue -> com.batch.android.p0.u:
+# {"id":"sourceFile","fileName":"NumberValue.java"}
+    java.math.BigInteger toBigInteger() -> F
+    int toInt() -> G
+    long toLong() -> Y
+    float toFloat() -> n
+    double toDouble() -> o
+    byte toByte() -> r
+    short toShort() -> z
+com.batch.android.msgpack.value.RawValue -> com.batch.android.p0.v:
+# {"id":"sourceFile","fileName":"RawValue.java"}
+    java.lang.String asString() -> A
+    java.nio.ByteBuffer asByteBuffer() -> D
+    byte[] asByteArray() -> P
+com.batch.android.msgpack.value.StringValue -> com.batch.android.p0.w:
+# {"id":"sourceFile","fileName":"StringValue.java"}
+com.batch.android.msgpack.value.Value -> com.batch.android.p0.x:
+# {"id":"sourceFile","fileName":"Value.java"}
+    boolean isBinaryValue() -> C
+    boolean isNilValue() -> E
+    boolean isNumberValue() -> L
+    boolean isArrayValue() -> N
+    boolean isRawValue() -> O
+    boolean isExtensionValue() -> Q
+    com.batch.android.msgpack.value.NumberValue asNumberValue() -> R
+    boolean isMapValue() -> S
+    boolean isFloatValue() -> T
+    boolean isBooleanValue() -> W
+    java.lang.String toJson() -> X
+    com.batch.android.msgpack.value.ArrayValue asArrayValue() -> a
+    void writeTo(com.batch.android.msgpack.core.MessagePacker) -> a
+    com.batch.android.msgpack.value.NilValue asNilValue() -> b
+    com.batch.android.msgpack.value.IntegerValue asIntegerValue() -> c
+    com.batch.android.msgpack.value.MapValue asMapValue() -> d
+    com.batch.android.msgpack.value.BinaryValue asBinaryValue() -> f
+    com.batch.android.msgpack.value.StringValue asStringValue() -> g
+    com.batch.android.msgpack.value.RawValue asRawValue() -> h
+    com.batch.android.msgpack.value.BooleanValue asBooleanValue() -> i
+    com.batch.android.msgpack.value.FloatValue asFloatValue() -> j
+    com.batch.android.msgpack.value.ValueType getValueType() -> m
+    com.batch.android.msgpack.value.ExtensionValue asExtensionValue() -> q
+    com.batch.android.msgpack.value.ImmutableValue immutableValue() -> s
+    boolean isStringValue() -> v
+    boolean isIntegerValue() -> w
+com.batch.android.msgpack.value.ValueFactory -> com.batch.android.p0.y:
+# {"id":"sourceFile","fileName":"ValueFactory.java"}
+    1:1:void <init>():37:37 -> <init>
+    1:1:com.batch.android.msgpack.value.ImmutableBooleanValue newBoolean(boolean):44:44 -> a
+    2:2:com.batch.android.msgpack.value.ImmutableIntegerValue newInteger(byte):48:48 -> a
+    3:3:com.batch.android.msgpack.value.ImmutableIntegerValue newInteger(short):52:52 -> a
+    4:4:com.batch.android.msgpack.value.ImmutableIntegerValue newInteger(int):56:56 -> a
+    5:5:com.batch.android.msgpack.value.ImmutableIntegerValue newInteger(long):60:60 -> a
+    6:6:com.batch.android.msgpack.value.ImmutableIntegerValue newInteger(java.math.BigInteger):64:64 -> a
+    7:7:com.batch.android.msgpack.value.ImmutableFloatValue newFloat(float):68:68 -> a
+    8:8:com.batch.android.msgpack.value.ImmutableFloatValue newFloat(double):72:72 -> a
+    9:9:com.batch.android.msgpack.value.ImmutableBinaryValue newBinary(byte[]):76:76 -> a
+    10:12:com.batch.android.msgpack.value.ImmutableBinaryValue newBinary(byte[],boolean):81:83 -> a
+    13:13:com.batch.android.msgpack.value.ImmutableBinaryValue newBinary(byte[],int,int):88:88 -> a
+    14:17:com.batch.android.msgpack.value.ImmutableBinaryValue newBinary(byte[],int,int,boolean):92:95 -> a
+    18:18:com.batch.android.msgpack.value.ImmutableStringValue newString(java.lang.String):100:100 -> a
+    19:23:com.batch.android.msgpack.value.ImmutableArrayValue newArray(java.util.List):128:132 -> a
+    24:27:com.batch.android.msgpack.value.ImmutableArrayValue newArray(com.batch.android.msgpack.value.Value[]):136:139 -> a
+    28:33:com.batch.android.msgpack.value.ImmutableArrayValue newArray(com.batch.android.msgpack.value.Value[],boolean):144:149 -> a
+    34:34:com.batch.android.msgpack.value.ImmutableArrayValue emptyArray():154:154 -> a
+    35:43:com.batch.android.msgpack.value.ImmutableMapValue newMap(java.util.Map):158:166 -> a
+    44:49:com.batch.android.msgpack.value.MapValue newMap(java.util.Map$Entry[]):193:198 -> a
+    50:50:java.util.Map$Entry newMapEntry(com.batch.android.msgpack.value.Value,com.batch.android.msgpack.value.Value):206:206 -> a
+    51:51:com.batch.android.msgpack.value.ImmutableExtensionValue newExtension(byte,byte[]):245:245 -> a
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue newString(byte[]):104:104 -> b
+    2:4:com.batch.android.msgpack.value.ImmutableStringValue newString(byte[],boolean):109:111 -> b
+    5:5:com.batch.android.msgpack.value.ImmutableStringValue newString(byte[],int,int):116:116 -> b
+    6:9:com.batch.android.msgpack.value.ImmutableStringValue newString(byte[],int,int,boolean):120:123 -> b
+    10:13:com.batch.android.msgpack.value.ImmutableMapValue newMap(com.batch.android.msgpack.value.Value[]):170:173 -> b
+    14:19:com.batch.android.msgpack.value.ImmutableMapValue newMap(com.batch.android.msgpack.value.Value[],boolean):178:183 -> b
+    20:20:com.batch.android.msgpack.value.ImmutableMapValue emptyMap():188:188 -> b
+    1:1:com.batch.android.msgpack.value.ValueFactory$MapBuilder newMapBuilder():202:202 -> c
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue newNil():40:40 -> d
+com.batch.android.msgpack.value.ValueFactory$MapBuilder -> com.batch.android.p0.y$a:
+# {"id":"sourceFile","fileName":"ValueFactory.java"}
+    java.util.Map map -> a
+    1:1:void <init>():213:213 -> <init>
+    2:2:void <init>():211:211 -> <init>
+    1:1:com.batch.android.msgpack.value.MapValue build():216:216 -> a
+    2:2:com.batch.android.msgpack.value.ValueFactory$MapBuilder put(java.util.Map$Entry):220:220 -> a
+    3:3:com.batch.android.msgpack.value.ValueFactory$MapBuilder put(com.batch.android.msgpack.value.Value,com.batch.android.msgpack.value.Value):225:225 -> a
+    4:5:com.batch.android.msgpack.value.ValueFactory$MapBuilder putAll(java.lang.Iterable):230:231 -> a
+    6:7:com.batch.android.msgpack.value.ValueFactory$MapBuilder putAll(java.util.Map):237:238 -> a
+com.batch.android.msgpack.value.ValueType -> com.batch.android.p0.z:
+# {"id":"sourceFile","fileName":"ValueType.java"}
+    com.batch.android.msgpack.value.ValueType[] $VALUES -> l
+    com.batch.android.msgpack.value.ValueType BOOLEAN -> d
+    com.batch.android.msgpack.value.ValueType NIL -> c
+    com.batch.android.msgpack.value.ValueType BINARY -> h
+    com.batch.android.msgpack.value.ValueType STRING -> g
+    com.batch.android.msgpack.value.ValueType FLOAT -> f
+    com.batch.android.msgpack.value.ValueType INTEGER -> e
+    boolean numberType -> a
+    boolean rawType -> b
+    com.batch.android.msgpack.value.ValueType EXTENSION -> k
+    com.batch.android.msgpack.value.ValueType MAP -> j
+    com.batch.android.msgpack.value.ValueType ARRAY -> i
+    1:9:void <clinit>():28:36 -> <clinit>
+    10:10:void <clinit>():27:27 -> <clinit>
+    1:3:void <init>(java.lang.String,int,boolean,boolean):41:43 -> <init>
+    1:1:com.batch.android.msgpack.value.ValueType[] $values():27:27 -> a
+    1:1:boolean isArrayType():79:79 -> b
+    1:1:boolean isBinaryType():75:75 -> c
+    1:1:boolean isBooleanType():51:51 -> d
+    1:1:boolean isExtensionType():87:87 -> e
+    1:1:boolean isFloatType():63:63 -> f
+    1:1:boolean isIntegerType():59:59 -> g
+    1:1:boolean isMapType():83:83 -> h
+    1:1:boolean isNilType():47:47 -> i
+    1:1:boolean isNumberType():55:55 -> j
+    1:1:boolean isRawType():67:67 -> k
+    1:1:boolean isStringType():71:71 -> l
+    1:1:com.batch.android.msgpack.value.ValueType valueOf(java.lang.String):27:27 -> valueOf
+    1:1:com.batch.android.msgpack.value.ValueType[] values():27:27 -> values
+com.batch.android.msgpack.value.Variable -> com.batch.android.p0.a0:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable$IntegerValueAccessor integerAccessor -> c
+    com.batch.android.msgpack.value.Variable$StringValueAccessor stringAccessor -> f
+    long longValue -> k
+    com.batch.android.msgpack.value.Variable$NilValueAccessor nilAccessor -> a
+    java.math.BigInteger LONG_MAX -> p
+    java.math.BigInteger LONG_MIN -> o
+    com.batch.android.msgpack.value.Variable$AbstractValueAccessor accessor -> n
+    java.lang.Object objectValue -> m
+    double doubleValue -> l
+    com.batch.android.msgpack.value.Variable$ArrayValueAccessor arrayAccessor -> g
+    long INT_MAX -> v
+    long INT_MIN -> u
+    long BYTE_MAX -> r
+    com.batch.android.msgpack.value.Variable$BinaryValueAccessor binaryAccessor -> e
+    long BYTE_MIN -> q
+    long SHORT_MAX -> t
+    com.batch.android.msgpack.value.Variable$ExtensionValueAccessor extensionAccessor -> i
+    long SHORT_MIN -> s
+    com.batch.android.msgpack.value.Variable$BooleanValueAccessor booleanAccessor -> b
+    com.batch.android.msgpack.value.Variable$FloatValueAccessor floatAccessor -> d
+    com.batch.android.msgpack.value.Variable$Type type -> j
+    com.batch.android.msgpack.value.Variable$MapValueAccessor mapAccessor -> h
+    1:2:void <clinit>():296:297 -> <clinit>
+    1:1:void <init>():214:214 -> <init>
+    2:21:void <init>():196:215 -> <init>
+    1:1:boolean isBinaryValue():940:940 -> C
+    1:1:boolean isNilValue():910:910 -> E
+    1:1:boolean isNumberValue():920:920 -> L
+    1:1:boolean isArrayValue():950:950 -> N
+    1:1:boolean isRawValue():935:935 -> O
+    1:1:boolean isExtensionValue():960:960 -> Q
+    1:4:com.batch.android.msgpack.value.NumberValue asNumberValue():981:984 -> R
+    5:5:com.batch.android.msgpack.value.NumberValue asNumberValue():982:982 -> R
+    1:1:boolean isMapValue():955:955 -> S
+    1:1:boolean isFloatValue():930:930 -> T
+    1:1:boolean isBooleanValue():915:915 -> W
+    1:1:java.lang.String toJson():895:895 -> X
+    1:2:com.batch.android.msgpack.value.Variable setNilValue():223:224 -> Z
+    1:1:long access$1000(com.batch.android.msgpack.value.Variable):38:38 -> a
+    2:4:com.batch.android.msgpack.value.Variable setBooleanValue(boolean):256:258 -> a
+    5:7:com.batch.android.msgpack.value.Variable setIntegerValue(long):380:382 -> a
+    8:15:com.batch.android.msgpack.value.Variable setIntegerValue(java.math.BigInteger):387:394 -> a
+    16:19:com.batch.android.msgpack.value.Variable setFloatValue(double):512:515 -> a
+    20:22:com.batch.android.msgpack.value.Variable setFloatValue(float):520:522 -> a
+    23:25:com.batch.android.msgpack.value.Variable setBinaryValue(byte[]):607:609 -> a
+    26:26:com.batch.android.msgpack.value.Variable setStringValue(java.lang.String):643:643 -> a
+    27:29:com.batch.android.msgpack.value.Variable setArrayValue(java.util.List):683:685 -> a
+    30:32:com.batch.android.msgpack.value.Variable setMapValue(java.util.Map):751:753 -> a
+    33:35:com.batch.android.msgpack.value.Variable setExtensionValue(byte,byte[]):830:832 -> a
+    36:36:void writeTo(com.batch.android.msgpack.core.MessagePacker):880:880 -> a
+    37:40:com.batch.android.msgpack.value.ArrayValue asArrayValue():1029:1032 -> a
+    41:41:com.batch.android.msgpack.value.ArrayValue asArrayValue():1030:1030 -> a
+    1:1:com.batch.android.msgpack.value.Variable$Type access$1100(com.batch.android.msgpack.value.Variable):38:38 -> b
+    2:4:com.batch.android.msgpack.value.Variable setStringValue(byte[]):647:649 -> b
+    5:8:com.batch.android.msgpack.value.NilValue asNilValue():965:968 -> b
+    9:9:com.batch.android.msgpack.value.NilValue asNilValue():966:966 -> b
+    1:1:java.lang.Object access$1200(com.batch.android.msgpack.value.Variable):38:38 -> c
+    2:5:com.batch.android.msgpack.value.IntegerValue asIntegerValue():989:992 -> c
+    6:6:com.batch.android.msgpack.value.IntegerValue asIntegerValue():990:990 -> c
+    1:1:double access$1300(com.batch.android.msgpack.value.Variable):38:38 -> d
+    2:5:com.batch.android.msgpack.value.MapValue asMapValue():1037:1040 -> d
+    6:6:com.batch.android.msgpack.value.MapValue asMapValue():1038:1038 -> d
+    1:1:boolean equals(java.lang.Object):890:890 -> equals
+    1:4:com.batch.android.msgpack.value.BinaryValue asBinaryValue():1013:1016 -> f
+    5:5:com.batch.android.msgpack.value.BinaryValue asBinaryValue():1014:1014 -> f
+    1:4:com.batch.android.msgpack.value.StringValue asStringValue():1021:1024 -> g
+    5:5:com.batch.android.msgpack.value.StringValue asStringValue():1022:1022 -> g
+    1:4:com.batch.android.msgpack.value.RawValue asRawValue():1005:1008 -> h
+    5:5:com.batch.android.msgpack.value.RawValue asRawValue():1006:1006 -> h
+    1:1:int hashCode():885:885 -> hashCode
+    1:4:com.batch.android.msgpack.value.BooleanValue asBooleanValue():973:976 -> i
+    5:5:com.batch.android.msgpack.value.BooleanValue asBooleanValue():974:974 -> i
+    1:4:com.batch.android.msgpack.value.FloatValue asFloatValue():997:1000 -> j
+    5:5:com.batch.android.msgpack.value.FloatValue asFloatValue():998:998 -> j
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():905:905 -> m
+    1:4:com.batch.android.msgpack.value.ExtensionValue asExtensionValue():1045:1048 -> q
+    5:5:com.batch.android.msgpack.value.ExtensionValue asExtensionValue():1046:1046 -> q
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():875:875 -> s
+    1:1:java.lang.String toString():900:900 -> toString
+    1:1:boolean isStringValue():945:945 -> v
+    1:1:boolean isIntegerValue():925:925 -> w
+com.batch.android.msgpack.value.Variable$1 -> com.batch.android.p0.a0$a:
+# {"id":"sourceFile","fileName":"Variable.java"}
+com.batch.android.msgpack.value.Variable$AbstractNumberValueAccessor -> com.batch.android.p0.a0$b:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> b
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):305:305 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):305:305 -> <init>
+    1:6:java.math.BigInteger toBigInteger():346:351 -> F
+    1:4:int toInt():330:333 -> G
+    com.batch.android.msgpack.value.NumberValue asNumberValue() -> R
+    1:4:long toLong():338:341 -> Y
+    1:6:float toFloat():356:361 -> n
+    1:6:double toDouble():366:371 -> o
+    1:4:byte toByte():314:317 -> r
+    1:4:short toShort():322:325 -> z
+com.batch.android.msgpack.value.Variable$AbstractRawValueAccessor -> com.batch.android.p0.a0$c:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> b
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):555:555 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):555:555 -> <init>
+    1:9:java.lang.String asString():574:582 -> A
+    1:1:java.nio.ByteBuffer asByteBuffer():569:569 -> D
+    1:1:byte[] asByteArray():564:564 -> P
+    com.batch.android.msgpack.value.RawValue asRawValue() -> h
+    1:9:java.lang.String toString():589:597 -> toString
+com.batch.android.msgpack.value.Variable$AbstractValueAccessor -> com.batch.android.p0.a0$d:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> a
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):40:40 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):40:40 -> <init>
+    1:1:boolean isBinaryValue():74:74 -> C
+    1:1:boolean isNilValue():44:44 -> E
+    1:1:boolean isNumberValue():54:54 -> L
+    1:1:boolean isArrayValue():84:84 -> N
+    1:1:boolean isRawValue():69:69 -> O
+    1:1:boolean isExtensionValue():94:94 -> Q
+    1:1:com.batch.android.msgpack.value.NumberValue asNumberValue():109:109 -> R
+    1:1:boolean isMapValue():89:89 -> S
+    1:1:boolean isFloatValue():64:64 -> T
+    1:1:boolean isBooleanValue():49:49 -> W
+    1:1:java.lang.String toJson():164:164 -> X
+    1:1:com.batch.android.msgpack.value.ArrayValue asArrayValue():139:139 -> a
+    1:1:com.batch.android.msgpack.value.NilValue asNilValue():99:99 -> b
+    1:1:com.batch.android.msgpack.value.IntegerValue asIntegerValue():114:114 -> c
+    1:1:com.batch.android.msgpack.value.MapValue asMapValue():144:144 -> d
+    1:1:boolean equals(java.lang.Object):154:154 -> equals
+    1:1:com.batch.android.msgpack.value.BinaryValue asBinaryValue():129:129 -> f
+    1:1:com.batch.android.msgpack.value.StringValue asStringValue():134:134 -> g
+    1:1:com.batch.android.msgpack.value.RawValue asRawValue():124:124 -> h
+    1:1:int hashCode():159:159 -> hashCode
+    1:1:com.batch.android.msgpack.value.BooleanValue asBooleanValue():104:104 -> i
+    1:1:com.batch.android.msgpack.value.FloatValue asFloatValue():119:119 -> j
+    1:1:com.batch.android.msgpack.value.ExtensionValue asExtensionValue():149:149 -> q
+    1:1:java.lang.String toString():169:169 -> toString
+    1:1:boolean isStringValue():79:79 -> v
+    1:1:boolean isIntegerValue():59:59 -> w
+com.batch.android.msgpack.value.Variable$ArrayValueAccessor -> com.batch.android.p0.a0$e:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> b
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):689:689 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):689:689 -> <init>
+    1:1:com.batch.android.msgpack.value.ImmutableArrayValue immutableValue():703:703 -> Z
+    1:1:com.batch.android.msgpack.value.ArrayValue asArrayValue():0:0 -> a
+    2:6:com.batch.android.msgpack.value.Value getOrNilValue(int):718:722 -> a
+    7:10:void writeTo(com.batch.android.msgpack.core.MessagePacker):738:741 -> a
+    1:1:com.batch.android.msgpack.value.Value get(int):713:713 -> get
+    1:1:java.util.Iterator iterator():727:727 -> iterator
+    1:1:java.util.List list():733:733 -> l
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():693:693 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():689:689 -> s
+    1:1:int size():708:708 -> size
+com.batch.android.msgpack.value.Variable$BinaryValueAccessor -> com.batch.android.p0.a0$f:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> c
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):613:613 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):613:613 -> <init>
+    1:1:com.batch.android.msgpack.value.ImmutableBinaryValue immutableValue():627:627 -> Z
+    1:3:void writeTo(com.batch.android.msgpack.core.MessagePacker):632:634 -> a
+    com.batch.android.msgpack.value.BinaryValue asBinaryValue() -> f
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():617:617 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():613:613 -> s
+com.batch.android.msgpack.value.Variable$BooleanValueAccessor -> com.batch.android.p0.a0$g:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> b
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):262:262 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):262:262 -> <init>
+    1:1:boolean getBoolean():281:281 -> M
+    1:1:com.batch.android.msgpack.value.ImmutableBooleanValue immutableValue():276:276 -> Z
+    1:1:void writeTo(com.batch.android.msgpack.core.MessagePacker):286:286 -> a
+    com.batch.android.msgpack.value.BooleanValue asBooleanValue() -> i
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():266:266 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():262:262 -> s
+com.batch.android.msgpack.value.Variable$ExtensionValueAccessor -> com.batch.android.p0.a0$h:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> b
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):836:836 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):836:836 -> <init>
+    1:1:com.batch.android.msgpack.value.ImmutableExtensionValue immutableValue():850:850 -> Z
+    1:1:void writeTo(com.batch.android.msgpack.core.MessagePacker):865:865 -> a
+    1:1:byte[] getData():860:860 -> e
+    1:1:byte getType():855:855 -> k
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():840:840 -> m
+    com.batch.android.msgpack.value.ExtensionValue asExtensionValue() -> q
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():836:836 -> s
+com.batch.android.msgpack.value.Variable$FloatValueAccessor -> com.batch.android.p0.a0$i:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> c
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):526:526 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):526:526 -> <init>
+    1:1:com.batch.android.msgpack.value.ImmutableFloatValue immutableValue():535:535 -> Z
+    1:1:void writeTo(com.batch.android.msgpack.core.MessagePacker):545:545 -> a
+    com.batch.android.msgpack.value.FloatValue asFloatValue() -> j
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():540:540 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():526:526 -> s
+com.batch.android.msgpack.value.Variable$IntegerValueAccessor -> com.batch.android.p0.a0$j:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> c
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):399:399 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):399:399 -> <init>
+    1:4:java.math.BigInteger asBigInteger():490:493 -> B
+    1:4:long asLong():482:485 -> I
+    5:5:long asLong():483:483 -> I
+    1:4:byte asByte():458:461 -> J
+    5:5:byte asByte():459:459 -> J
+    1:1:boolean isInLongRange():445:445 -> K
+    1:4:boolean isInByteRange():421:424 -> U
+    1:4:int asInt():474:477 -> V
+    5:5:int asInt():475:475 -> V
+    1:4:com.batch.android.msgpack.value.ImmutableIntegerValue immutableValue():413:416 -> Z
+    1:4:void writeTo(com.batch.android.msgpack.core.MessagePacker):499:502 -> a
+    com.batch.android.msgpack.value.IntegerValue asIntegerValue() -> c
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():403:403 -> m
+    1:4:boolean isInIntRange():437:440 -> p
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():399:399 -> s
+    1:4:short asShort():466:469 -> t
+    5:5:short asShort():467:467 -> t
+    1:1:com.batch.android.msgpack.core.MessageFormat mostSuccinctMessageFormat():453:453 -> u
+    1:4:boolean isInShortRange():429:432 -> y
+com.batch.android.msgpack.value.Variable$MapValueAccessor -> com.batch.android.p0.a0$k:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> b
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):757:757 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):757:757 -> <init>
+    1:1:java.util.Map map():812:812 -> H
+    1:1:com.batch.android.msgpack.value.ImmutableMapValue immutableValue():771:771 -> Z
+    1:5:void writeTo(com.batch.android.msgpack.core.MessagePacker):817:821 -> a
+    com.batch.android.msgpack.value.MapValue asMapValue() -> d
+    1:1:java.util.Set entrySet():786:786 -> entrySet
+    1:1:java.util.Set keySet():781:781 -> keySet
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():761:761 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():757:757 -> s
+    1:1:int size():776:776 -> size
+    1:1:java.util.Collection values():791:791 -> values
+    1:9:com.batch.android.msgpack.value.Value[] getKeyValueArray():796:804 -> x
+com.batch.android.msgpack.value.Variable$NilValueAccessor -> com.batch.android.p0.a0$l:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> b
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):228:228 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):228:228 -> <init>
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue immutableValue():242:242 -> Z
+    1:1:void writeTo(com.batch.android.msgpack.core.MessagePacker):247:247 -> a
+    com.batch.android.msgpack.value.NilValue asNilValue() -> b
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():232:232 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():228:228 -> s
+com.batch.android.msgpack.value.Variable$StringValueAccessor -> com.batch.android.p0.a0$m:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable this$0 -> c
+    1:1:void <init>(com.batch.android.msgpack.value.Variable):653:653 -> <init>
+    2:2:void <init>(com.batch.android.msgpack.value.Variable,com.batch.android.msgpack.value.Variable$1):653:653 -> <init>
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue immutableValue():667:667 -> Z
+    1:3:void writeTo(com.batch.android.msgpack.core.MessagePacker):672:674 -> a
+    com.batch.android.msgpack.value.StringValue asStringValue() -> g
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():657:657 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():653:653 -> s
+com.batch.android.msgpack.value.Variable$Type -> com.batch.android.p0.a0$n:
+# {"id":"sourceFile","fileName":"Variable.java"}
+    com.batch.android.msgpack.value.Variable$Type LONG -> d
+    com.batch.android.msgpack.value.Variable$Type BIG_INTEGER -> e
+    com.batch.android.msgpack.value.Variable$Type DOUBLE -> f
+    com.batch.android.msgpack.value.Variable$Type BYTE_ARRAY -> g
+    com.batch.android.msgpack.value.Variable$Type NULL -> b
+    com.batch.android.msgpack.value.ValueType valueType -> a
+    com.batch.android.msgpack.value.Variable$Type BOOLEAN -> c
+    com.batch.android.msgpack.value.Variable$Type[] $VALUES -> l
+    com.batch.android.msgpack.value.Variable$Type RAW_STRING -> h
+    com.batch.android.msgpack.value.Variable$Type LIST -> i
+    com.batch.android.msgpack.value.Variable$Type MAP -> j
+    com.batch.android.msgpack.value.Variable$Type EXTENSION -> k
+    1:10:void <clinit>():174:183 -> <clinit>
+    11:11:void <clinit>():173:173 -> <clinit>
+    1:2:void <init>(java.lang.String,int,com.batch.android.msgpack.value.ValueType):187:188 -> <init>
+    1:1:com.batch.android.msgpack.value.Variable$Type[] $values():173:173 -> a
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():192:192 -> b
+    1:1:com.batch.android.msgpack.value.Variable$Type valueOf(java.lang.String):173:173 -> valueOf
+    1:1:com.batch.android.msgpack.value.Variable$Type[] values():173:173 -> values
+com.batch.android.msgpack.value.impl.AbstractImmutableRawValue -> com.batch.android.q0.a:
+# {"id":"sourceFile","fileName":"AbstractImmutableRawValue.java"}
+    byte[] data -> a
+    char[] HEX_TABLE -> d
+    java.nio.charset.CharacterCodingException codingException -> c
+    java.lang.String decodedStringCache -> b
+    1:1:void <clinit>():158:158 -> <clinit>
+    1:2:void <init>(byte[]):33:34 -> <init>
+    3:5:void <init>(java.lang.String):37:39 -> <init>
+    1:7:java.lang.String asString():59:65 -> A
+    8:8:java.lang.String asString():63:63 -> A
+    1:1:boolean isBinaryValue():27:27 -> C
+    1:1:java.nio.ByteBuffer asByteBuffer():54:54 -> D
+    1:1:boolean isNilValue():27:27 -> E
+    1:1:boolean isNumberValue():27:27 -> L
+    1:1:boolean isArrayValue():27:27 -> N
+    1:1:boolean isRawValue():27:27 -> O
+    1:1:byte[] asByteArray():49:49 -> P
+    1:1:boolean isExtensionValue():27:27 -> Q
+    1:1:boolean isMapValue():27:27 -> S
+    1:1:boolean isFloatValue():27:27 -> T
+    1:1:boolean isBooleanValue():27:27 -> W
+    1:3:java.lang.String toJson():71:73 -> X
+    1:1:com.batch.android.msgpack.value.ImmutableExtensionValue asExtensionValue():27:27 -> Z
+    1:1:com.batch.android.msgpack.value.ImmutableArrayValue asArrayValue():27:27 -> a
+    2:24:void appendJsonString(java.lang.StringBuilder,java.lang.String):111:133 -> a
+    25:31:void appendJsonString(java.lang.StringBuilder,java.lang.String):120:126 -> a
+    32:60:void appendJsonString(java.lang.StringBuilder,java.lang.String):117:145 -> a
+    61:77:void appendJsonString(java.lang.StringBuilder,java.lang.String):139:155 -> a
+    78:82:void escapeChar(java.lang.StringBuilder,int):161:165 -> a
+    1:1:com.batch.android.msgpack.value.ImmutableNumberValue asNumberValue():27:27 -> a0
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue asNilValue():27:27 -> b
+    1:23:void decodeString():77:99 -> b0
+    24:28:void decodeString():95:99 -> b0
+    1:1:com.batch.android.msgpack.value.ImmutableIntegerValue asIntegerValue():27:27 -> c
+    1:1:com.batch.android.msgpack.value.ImmutableMapValue asMapValue():27:27 -> d
+    1:1:com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue():27:27 -> f
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue asStringValue():27:27 -> g
+    1:1:com.batch.android.msgpack.value.ImmutableRawValue asRawValue():0:0 -> h
+    2:2:com.batch.android.msgpack.value.RawValue asRawValue():27:27 -> h
+    1:1:com.batch.android.msgpack.value.ImmutableBooleanValue asBooleanValue():27:27 -> i
+    1:1:com.batch.android.msgpack.value.ImmutableFloatValue asFloatValue():27:27 -> j
+    1:4:java.lang.String toString():104:107 -> toString
+    1:1:boolean isStringValue():27:27 -> v
+    1:1:boolean isIntegerValue():27:27 -> w
+com.batch.android.msgpack.value.impl.AbstractImmutableValue -> com.batch.android.q0.b:
+# {"id":"sourceFile","fileName":"AbstractImmutableValue.java"}
+    1:1:void <init>():32:32 -> <init>
+    1:1:boolean isBinaryValue():66:66 -> C
+    1:1:boolean isNilValue():36:36 -> E
+    1:1:boolean isNumberValue():46:46 -> L
+    1:1:boolean isArrayValue():76:76 -> N
+    1:1:boolean isRawValue():61:61 -> O
+    1:1:boolean isExtensionValue():86:86 -> Q
+    1:1:com.batch.android.msgpack.value.NumberValue asNumberValue():32:32 -> R
+    1:1:boolean isMapValue():81:81 -> S
+    1:1:boolean isFloatValue():56:56 -> T
+    1:1:boolean isBooleanValue():41:41 -> W
+    1:1:com.batch.android.msgpack.value.ImmutableExtensionValue asExtensionValue():141:141 -> Z
+    1:1:com.batch.android.msgpack.value.ArrayValue asArrayValue():32:32 -> a
+    2:2:com.batch.android.msgpack.value.ImmutableArrayValue asArrayValue():131:131 -> a
+    1:1:com.batch.android.msgpack.value.ImmutableNumberValue asNumberValue():101:101 -> a0
+    1:1:com.batch.android.msgpack.value.NilValue asNilValue():32:32 -> b
+    2:2:com.batch.android.msgpack.value.ImmutableNilValue asNilValue():91:91 -> b
+    1:1:com.batch.android.msgpack.value.IntegerValue asIntegerValue():32:32 -> c
+    2:2:com.batch.android.msgpack.value.ImmutableIntegerValue asIntegerValue():106:106 -> c
+    1:1:com.batch.android.msgpack.value.MapValue asMapValue():32:32 -> d
+    2:2:com.batch.android.msgpack.value.ImmutableMapValue asMapValue():136:136 -> d
+    1:1:com.batch.android.msgpack.value.BinaryValue asBinaryValue():32:32 -> f
+    2:2:com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue():121:121 -> f
+    1:1:com.batch.android.msgpack.value.StringValue asStringValue():32:32 -> g
+    2:2:com.batch.android.msgpack.value.ImmutableStringValue asStringValue():126:126 -> g
+    1:1:com.batch.android.msgpack.value.RawValue asRawValue():32:32 -> h
+    2:2:com.batch.android.msgpack.value.ImmutableRawValue asRawValue():116:116 -> h
+    1:1:com.batch.android.msgpack.value.BooleanValue asBooleanValue():32:32 -> i
+    2:2:com.batch.android.msgpack.value.ImmutableBooleanValue asBooleanValue():96:96 -> i
+    1:1:com.batch.android.msgpack.value.FloatValue asFloatValue():32:32 -> j
+    2:2:com.batch.android.msgpack.value.ImmutableFloatValue asFloatValue():111:111 -> j
+    1:1:com.batch.android.msgpack.value.ExtensionValue asExtensionValue():32:32 -> q
+    1:1:boolean isStringValue():71:71 -> v
+    1:1:boolean isIntegerValue():51:51 -> w
+com.batch.android.msgpack.value.impl.ImmutableArrayValueImpl -> com.batch.android.q0.c:
+# {"id":"sourceFile","fileName":"ImmutableArrayValueImpl.java"}
+    com.batch.android.msgpack.value.Value[] array -> a
+    com.batch.android.msgpack.value.impl.ImmutableArrayValueImpl EMPTY -> b
+    1:1:void <clinit>():37:37 -> <clinit>
+    1:2:void <init>(com.batch.android.msgpack.value.Value[]):45:46 -> <init>
+    1:1:boolean isBinaryValue():35:35 -> C
+    1:1:boolean isNilValue():35:35 -> E
+    1:1:boolean isNumberValue():35:35 -> L
+    1:1:boolean isArrayValue():35:35 -> N
+    1:1:boolean isRawValue():35:35 -> O
+    1:1:boolean isExtensionValue():35:35 -> Q
+    1:1:boolean isMapValue():35:35 -> S
+    1:1:boolean isFloatValue():35:35 -> T
+    1:1:boolean isBooleanValue():35:35 -> W
+    1:12:java.lang.String toJson():145:156 -> X
+    1:1:com.batch.android.msgpack.value.ImmutableExtensionValue asExtensionValue():35:35 -> Z
+    1:1:com.batch.android.msgpack.value.ImmutableArrayValue asArrayValue():0:0 -> a
+    2:2:com.batch.android.msgpack.value.ArrayValue asArrayValue():35:35 -> a
+    3:6:com.batch.android.msgpack.value.Value getOrNilValue(int):76:79 -> a
+    7:9:void writeTo(com.batch.android.msgpack.core.MessagePacker):94:96 -> a
+    10:13:void appendString(java.lang.StringBuilder,com.batch.android.msgpack.value.Value):176:179 -> a
+    1:1:com.batch.android.msgpack.value.ImmutableNumberValue asNumberValue():35:35 -> a0
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue asNilValue():35:35 -> b
+    1:1:com.batch.android.msgpack.value.ImmutableArrayValue empty():40:40 -> b0
+    1:1:com.batch.android.msgpack.value.ImmutableIntegerValue asIntegerValue():35:35 -> c
+    com.batch.android.msgpack.value.ImmutableArrayValue immutableValue() -> c0
+    1:1:com.batch.android.msgpack.value.ImmutableMapValue asMapValue():35:35 -> d
+    1:20:boolean equals(java.lang.Object):105:124 -> equals
+    1:1:com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue():35:35 -> f
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue asStringValue():35:35 -> g
+    1:1:com.batch.android.msgpack.value.Value get(int):71:71 -> get
+    1:1:com.batch.android.msgpack.value.ImmutableRawValue asRawValue():35:35 -> h
+    1:3:int hashCode():136:138 -> hashCode
+    1:1:com.batch.android.msgpack.value.ImmutableBooleanValue asBooleanValue():35:35 -> i
+    1:1:java.util.Iterator iterator():84:84 -> iterator
+    1:1:com.batch.android.msgpack.value.ImmutableFloatValue asFloatValue():35:35 -> j
+    1:1:java.util.List list():89:89 -> l
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():51:51 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():35:35 -> s
+    1:1:int size():66:66 -> size
+    1:12:java.lang.String toString():161:172 -> toString
+    1:1:boolean isStringValue():35:35 -> v
+    1:1:boolean isIntegerValue():35:35 -> w
+com.batch.android.msgpack.value.impl.ImmutableArrayValueImpl$ImmutableArrayValueList -> com.batch.android.q0.c$a:
+# {"id":"sourceFile","fileName":"ImmutableArrayValueImpl.java"}
+    com.batch.android.msgpack.value.Value[] array -> a
+    1:2:void <init>(com.batch.android.msgpack.value.Value[]):187:188 -> <init>
+    1:1:java.lang.Object get(int):183:183 -> get
+    2:2:com.batch.android.msgpack.value.Value get(int):193:193 -> get
+    1:1:int size():198:198 -> size
+com.batch.android.msgpack.value.impl.ImmutableArrayValueImpl$Ite -> com.batch.android.q0.c$b:
+# {"id":"sourceFile","fileName":"ImmutableArrayValueImpl.java"}
+    com.batch.android.msgpack.value.Value[] array -> a
+    int index -> b
+    1:3:void <init>(com.batch.android.msgpack.value.Value[]):207:209 -> <init>
+    1:6:com.batch.android.msgpack.value.Value next():219:224 -> a
+    7:7:com.batch.android.msgpack.value.Value next():221:221 -> a
+    1:1:boolean hasNext():214:214 -> hasNext
+    1:1:java.lang.Object next():202:202 -> next
+    1:1:void remove():229:229 -> remove
+com.batch.android.msgpack.value.impl.ImmutableBigIntegerValueImpl -> com.batch.android.q0.d:
+# {"id":"sourceFile","fileName":"ImmutableBigIntegerValueImpl.java"}
+    java.math.BigInteger INT_MIN -> f
+    java.math.BigInteger SHORT_MAX -> e
+    java.math.BigInteger LONG_MIN -> h
+    java.math.BigInteger INT_MAX -> g
+    java.math.BigInteger BYTE_MIN -> b
+    java.math.BigInteger value -> a
+    java.math.BigInteger SHORT_MIN -> d
+    java.math.BigInteger BYTE_MAX -> c
+    java.math.BigInteger LONG_MAX -> i
+    1:8:void <clinit>():56:63 -> <clinit>
+    1:2:void <init>(java.math.BigInteger):52:53 -> <init>
+    1:1:java.math.BigInteger asBigInteger():179:179 -> B
+    1:1:boolean isBinaryValue():34:34 -> C
+    1:1:boolean isNilValue():34:34 -> E
+    1:1:java.math.BigInteger toBigInteger():107:107 -> F
+    1:1:int toInt():97:97 -> G
+    1:4:long asLong():171:174 -> I
+    5:5:long asLong():172:172 -> I
+    1:4:byte asByte():147:150 -> J
+    5:5:byte asByte():148:148 -> J
+    1:1:boolean isInLongRange():137:137 -> K
+    1:1:boolean isNumberValue():34:34 -> L
+    1:1:boolean isArrayValue():34:34 -> N
+    1:1:boolean isRawValue():34:34 -> O
+    1:1:boolean isExtensionValue():34:34 -> Q
+    1:1:com.batch.android.msgpack.value.NumberValue asNumberValue():34:34 -> R
+    1:1:boolean isMapValue():34:34 -> S
+    1:1:boolean isFloatValue():34:34 -> T
+    1:1:boolean isInByteRange():122:122 -> U
+    1:4:int asInt():163:166 -> V
+    5:5:int asInt():164:164 -> V
+    1:1:boolean isBooleanValue():34:34 -> W
+    1:1:java.lang.String toJson():217:217 -> X
+    1:1:long toLong():102:102 -> Y
+    1:1:com.batch.android.msgpack.value.ImmutableExtensionValue asExtensionValue():34:34 -> Z
+    1:1:com.batch.android.msgpack.value.ImmutableArrayValue asArrayValue():34:34 -> a
+    2:11:com.batch.android.msgpack.core.MessageFormat mostSuccinctMessageFormat(com.batch.android.msgpack.value.IntegerValue):37:46 -> a
+    12:12:void writeTo(com.batch.android.msgpack.core.MessagePacker):184:184 -> a
+    com.batch.android.msgpack.value.ImmutableNumberValue asNumberValue() -> a0
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue asNilValue():34:34 -> b
+    com.batch.android.msgpack.value.ImmutableIntegerValue immutableValue() -> b0
+    1:1:com.batch.android.msgpack.value.ImmutableIntegerValue asIntegerValue():0:0 -> c
+    2:2:com.batch.android.msgpack.value.IntegerValue asIntegerValue():34:34 -> c
+    1:1:com.batch.android.msgpack.value.ImmutableMapValue asMapValue():34:34 -> d
+    1:10:boolean equals(java.lang.Object):192:201 -> equals
+    1:1:com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue():34:34 -> f
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue asStringValue():34:34 -> g
+    1:1:com.batch.android.msgpack.value.ImmutableRawValue asRawValue():34:34 -> h
+    1:7:int hashCode():206:212 -> hashCode
+    1:1:com.batch.android.msgpack.value.ImmutableBooleanValue asBooleanValue():34:34 -> i
+    1:1:com.batch.android.msgpack.value.ImmutableFloatValue asFloatValue():34:34 -> j
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():67:67 -> m
+    1:1:float toFloat():112:112 -> n
+    1:1:double toDouble():117:117 -> o
+    1:1:boolean isInIntRange():132:132 -> p
+    1:1:byte toByte():87:87 -> r
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():34:34 -> s
+    1:4:short asShort():155:158 -> t
+    5:5:short asShort():156:156 -> t
+    1:1:java.lang.String toString():222:222 -> toString
+    1:1:com.batch.android.msgpack.core.MessageFormat mostSuccinctMessageFormat():142:142 -> u
+    1:1:boolean isStringValue():34:34 -> v
+    1:1:boolean isIntegerValue():34:34 -> w
+    1:1:boolean isInShortRange():127:127 -> y
+    1:1:short toShort():92:92 -> z
+com.batch.android.msgpack.value.impl.ImmutableBinaryValueImpl -> com.batch.android.q0.e:
+# {"id":"sourceFile","fileName":"ImmutableBinaryValueImpl.java"}
+    1:1:void <init>(byte[]):34:34 -> <init>
+    1:2:void writeTo(com.batch.android.msgpack.core.MessagePacker):54:55 -> a
+    com.batch.android.msgpack.value.ImmutableBinaryValue immutableValue() -> c0
+    1:13:boolean equals(java.lang.Object):63:75 -> equals
+    1:1:com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue():0:0 -> f
+    2:2:com.batch.android.msgpack.value.BinaryValue asBinaryValue():31:31 -> f
+    1:1:int hashCode():81:81 -> hashCode
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():39:39 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():31:31 -> s
+com.batch.android.msgpack.value.impl.ImmutableBooleanValueImpl -> com.batch.android.q0.f:
+# {"id":"sourceFile","fileName":"ImmutableBooleanValueImpl.java"}
+    com.batch.android.msgpack.value.ImmutableBooleanValue TRUE -> b
+    com.batch.android.msgpack.value.ImmutableBooleanValue FALSE -> c
+    boolean value -> a
+    1:2:void <clinit>():33:34 -> <clinit>
+    1:2:void <init>(boolean):38:39 -> <init>
+    1:1:boolean isBinaryValue():31:31 -> C
+    1:1:boolean isNilValue():31:31 -> E
+    1:1:boolean isNumberValue():31:31 -> L
+    1:1:boolean getBoolean():59:59 -> M
+    1:1:boolean isArrayValue():31:31 -> N
+    1:1:boolean isRawValue():31:31 -> O
+    1:1:boolean isExtensionValue():31:31 -> Q
+    1:1:boolean isMapValue():31:31 -> S
+    1:1:boolean isFloatValue():31:31 -> T
+    1:1:boolean isBooleanValue():31:31 -> W
+    1:1:java.lang.String toJson():94:94 -> X
+    1:1:com.batch.android.msgpack.value.ImmutableExtensionValue asExtensionValue():31:31 -> Z
+    1:1:com.batch.android.msgpack.value.ImmutableArrayValue asArrayValue():31:31 -> a
+    2:2:void writeTo(com.batch.android.msgpack.core.MessagePacker):64:64 -> a
+    1:1:com.batch.android.msgpack.value.ImmutableNumberValue asNumberValue():31:31 -> a0
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue asNilValue():31:31 -> b
+    com.batch.android.msgpack.value.ImmutableBooleanValue immutableValue() -> b0
+    1:1:com.batch.android.msgpack.value.ImmutableIntegerValue asIntegerValue():31:31 -> c
+    1:1:com.batch.android.msgpack.value.ImmutableMapValue asMapValue():31:31 -> d
+    1:9:boolean equals(java.lang.Object):72:80 -> equals
+    1:1:com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue():31:31 -> f
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue asStringValue():31:31 -> g
+    1:1:com.batch.android.msgpack.value.ImmutableRawValue asRawValue():31:31 -> h
+    1:1:int hashCode():85:85 -> hashCode
+    1:1:com.batch.android.msgpack.value.ImmutableBooleanValue asBooleanValue():0:0 -> i
+    2:2:com.batch.android.msgpack.value.BooleanValue asBooleanValue():31:31 -> i
+    1:1:com.batch.android.msgpack.value.ImmutableFloatValue asFloatValue():31:31 -> j
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():44:44 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():31:31 -> s
+    1:1:java.lang.String toString():99:99 -> toString
+    1:1:boolean isStringValue():31:31 -> v
+    1:1:boolean isIntegerValue():31:31 -> w
+com.batch.android.msgpack.value.impl.ImmutableDoubleValueImpl -> com.batch.android.q0.g:
+# {"id":"sourceFile","fileName":"ImmutableDoubleValueImpl.java"}
+    double value -> a
+    1:2:void <init>(double):36:37 -> <init>
+    1:1:boolean isBinaryValue():32:32 -> C
+    1:1:boolean isNilValue():32:32 -> E
+    1:1:java.math.BigInteger toBigInteger():82:82 -> F
+    1:1:int toInt():72:72 -> G
+    1:1:boolean isNumberValue():32:32 -> L
+    1:1:boolean isArrayValue():32:32 -> N
+    1:1:boolean isRawValue():32:32 -> O
+    1:1:boolean isExtensionValue():32:32 -> Q
+    1:1:com.batch.android.msgpack.value.NumberValue asNumberValue():32:32 -> R
+    1:1:boolean isMapValue():32:32 -> S
+    1:1:boolean isFloatValue():32:32 -> T
+    1:1:boolean isBooleanValue():32:32 -> W
+    1:4:java.lang.String toJson():124:127 -> X
+    5:5:java.lang.String toJson():125:125 -> X
+    1:1:long toLong():77:77 -> Y
+    1:1:com.batch.android.msgpack.value.ImmutableExtensionValue asExtensionValue():32:32 -> Z
+    1:1:com.batch.android.msgpack.value.ImmutableArrayValue asArrayValue():32:32 -> a
+    2:2:void writeTo(com.batch.android.msgpack.core.MessagePacker):97:97 -> a
+    com.batch.android.msgpack.value.ImmutableNumberValue asNumberValue() -> a0
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue asNilValue():32:32 -> b
+    com.batch.android.msgpack.value.impl.ImmutableDoubleValueImpl immutableValue() -> b0
+    1:1:com.batch.android.msgpack.value.ImmutableIntegerValue asIntegerValue():32:32 -> c
+    1:1:com.batch.android.msgpack.value.ImmutableMapValue asMapValue():32:32 -> d
+    1:9:boolean equals(java.lang.Object):105:113 -> equals
+    1:1:com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue():32:32 -> f
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue asStringValue():32:32 -> g
+    1:1:com.batch.android.msgpack.value.ImmutableRawValue asRawValue():32:32 -> h
+    1:1:int hashCode():118:118 -> hashCode
+    1:1:com.batch.android.msgpack.value.ImmutableBooleanValue asBooleanValue():32:32 -> i
+    1:1:com.batch.android.msgpack.value.ImmutableFloatValue asFloatValue():0:0 -> j
+    2:2:com.batch.android.msgpack.value.FloatValue asFloatValue():32:32 -> j
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():42:42 -> m
+    1:1:float toFloat():87:87 -> n
+    1:1:double toDouble():92:92 -> o
+    1:1:byte toByte():62:62 -> r
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():32:32 -> s
+    1:1:java.lang.String toString():133:133 -> toString
+    1:1:boolean isStringValue():32:32 -> v
+    1:1:boolean isIntegerValue():32:32 -> w
+    1:1:short toShort():67:67 -> z
+com.batch.android.msgpack.value.impl.ImmutableExtensionValueImpl -> com.batch.android.q0.h:
+# {"id":"sourceFile","fileName":"ImmutableExtensionValueImpl.java"}
+    byte[] data -> b
+    byte type -> a
+    1:3:void <init>(byte,byte[]):36:38 -> <init>
+    1:1:boolean isBinaryValue():31:31 -> C
+    1:1:boolean isNilValue():31:31 -> E
+    1:1:boolean isNumberValue():31:31 -> L
+    1:1:boolean isArrayValue():31:31 -> N
+    1:1:boolean isRawValue():31:31 -> O
+    1:1:boolean isExtensionValue():31:31 -> Q
+    1:1:boolean isMapValue():31:31 -> S
+    1:1:boolean isFloatValue():31:31 -> T
+    1:1:boolean isBooleanValue():31:31 -> W
+    1:9:java.lang.String toJson():100:108 -> X
+    com.batch.android.msgpack.value.ImmutableExtensionValue asExtensionValue() -> Z
+    1:1:com.batch.android.msgpack.value.ImmutableArrayValue asArrayValue():31:31 -> a
+    2:3:void writeTo(com.batch.android.msgpack.core.MessagePacker):68:69 -> a
+    1:1:com.batch.android.msgpack.value.ImmutableNumberValue asNumberValue():31:31 -> a0
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue asNilValue():31:31 -> b
+    com.batch.android.msgpack.value.ImmutableExtensionValue immutableValue() -> b0
+    1:1:com.batch.android.msgpack.value.ImmutableIntegerValue asIntegerValue():31:31 -> c
+    1:1:com.batch.android.msgpack.value.ImmutableMapValue asMapValue():31:31 -> d
+    1:1:byte[] getData():63:63 -> e
+    1:10:boolean equals(java.lang.Object):77:86 -> equals
+    1:1:com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue():31:31 -> f
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue asStringValue():31:31 -> g
+    1:1:com.batch.android.msgpack.value.ImmutableRawValue asRawValue():31:31 -> h
+    1:2:int hashCode():91:92 -> hashCode
+    1:1:com.batch.android.msgpack.value.ImmutableBooleanValue asBooleanValue():31:31 -> i
+    1:1:com.batch.android.msgpack.value.ImmutableFloatValue asFloatValue():31:31 -> j
+    1:1:byte getType():58:58 -> k
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():43:43 -> m
+    1:1:com.batch.android.msgpack.value.ExtensionValue asExtensionValue():31:31 -> q
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():31:31 -> s
+    1:9:java.lang.String toString():113:121 -> toString
+    1:1:boolean isStringValue():31:31 -> v
+    1:1:boolean isIntegerValue():31:31 -> w
+com.batch.android.msgpack.value.impl.ImmutableLongValueImpl -> com.batch.android.q0.i:
+# {"id":"sourceFile","fileName":"ImmutableLongValueImpl.java"}
+    long INT_MIN -> f
+    long SHORT_MAX -> e
+    long INT_MAX -> g
+    long BYTE_MIN -> b
+    long value -> a
+    long SHORT_MIN -> d
+    long BYTE_MAX -> c
+    1:2:void <init>(long):38:39 -> <init>
+    1:1:java.math.BigInteger asBigInteger():160:160 -> B
+    1:1:boolean isBinaryValue():34:34 -> C
+    1:1:boolean isNilValue():34:34 -> E
+    1:1:java.math.BigInteger toBigInteger():91:91 -> F
+    1:1:int toInt():81:81 -> G
+    1:1:long asLong():155:155 -> I
+    1:4:byte asByte():131:134 -> J
+    5:5:byte asByte():132:132 -> J
+    boolean isInLongRange() -> K
+    1:1:boolean isNumberValue():34:34 -> L
+    1:1:boolean isArrayValue():34:34 -> N
+    1:1:boolean isRawValue():34:34 -> O
+    1:1:boolean isExtensionValue():34:34 -> Q
+    1:1:com.batch.android.msgpack.value.NumberValue asNumberValue():34:34 -> R
+    1:1:boolean isMapValue():34:34 -> S
+    1:1:boolean isFloatValue():34:34 -> T
+    1:1:boolean isInByteRange():106:106 -> U
+    1:4:int asInt():147:150 -> V
+    5:5:int asInt():148:148 -> V
+    1:1:boolean isBooleanValue():34:34 -> W
+    1:1:java.lang.String toJson():199:199 -> X
+    1:1:long toLong():86:86 -> Y
+    1:1:com.batch.android.msgpack.value.ImmutableExtensionValue asExtensionValue():34:34 -> Z
+    1:1:com.batch.android.msgpack.value.ImmutableArrayValue asArrayValue():34:34 -> a
+    2:2:void writeTo(com.batch.android.msgpack.core.MessagePacker):165:165 -> a
+    com.batch.android.msgpack.value.ImmutableNumberValue asNumberValue() -> a0
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue asNilValue():34:34 -> b
+    com.batch.android.msgpack.value.ImmutableIntegerValue immutableValue() -> b0
+    1:1:com.batch.android.msgpack.value.ImmutableIntegerValue asIntegerValue():0:0 -> c
+    2:2:com.batch.android.msgpack.value.IntegerValue asIntegerValue():34:34 -> c
+    1:1:com.batch.android.msgpack.value.ImmutableMapValue asMapValue():34:34 -> d
+    1:13:boolean equals(java.lang.Object):173:185 -> equals
+    1:1:com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue():34:34 -> f
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue asStringValue():34:34 -> g
+    1:1:com.batch.android.msgpack.value.ImmutableRawValue asRawValue():34:34 -> h
+    1:1:int hashCode():190:190 -> hashCode
+    1:1:com.batch.android.msgpack.value.ImmutableBooleanValue asBooleanValue():34:34 -> i
+    1:1:com.batch.android.msgpack.value.ImmutableFloatValue asFloatValue():34:34 -> j
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():51:51 -> m
+    1:1:float toFloat():96:96 -> n
+    1:1:double toDouble():101:101 -> o
+    1:1:boolean isInIntRange():116:116 -> p
+    1:1:byte toByte():71:71 -> r
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():34:34 -> s
+    1:4:short asShort():139:142 -> t
+    5:5:short asShort():140:140 -> t
+    1:1:java.lang.String toString():204:204 -> toString
+    1:1:com.batch.android.msgpack.core.MessageFormat mostSuccinctMessageFormat():126:126 -> u
+    1:1:boolean isStringValue():34:34 -> v
+    1:1:boolean isIntegerValue():34:34 -> w
+    1:1:boolean isInShortRange():111:111 -> y
+    1:1:short toShort():76:76 -> z
+com.batch.android.msgpack.value.impl.ImmutableMapValueImpl -> com.batch.android.q0.j:
+# {"id":"sourceFile","fileName":"ImmutableMapValueImpl.java"}
+    com.batch.android.msgpack.value.impl.ImmutableMapValueImpl EMPTY -> b
+    com.batch.android.msgpack.value.Value[] kvs -> a
+    1:1:void <clinit>():41:41 -> <clinit>
+    1:2:void <init>(com.batch.android.msgpack.value.Value[]):49:50 -> <init>
+    1:1:boolean isBinaryValue():39:39 -> C
+    1:1:boolean isNilValue():39:39 -> E
+    1:1:java.util.Map map():95:95 -> H
+    1:1:boolean isNumberValue():39:39 -> L
+    1:1:boolean isArrayValue():39:39 -> N
+    1:1:boolean isRawValue():39:39 -> O
+    1:1:boolean isExtensionValue():39:39 -> Q
+    1:1:boolean isMapValue():39:39 -> S
+    1:1:boolean isFloatValue():39:39 -> T
+    1:1:boolean isBooleanValue():39:39 -> W
+    1:16:java.lang.String toJson():134:149 -> X
+    1:1:com.batch.android.msgpack.value.ImmutableExtensionValue asExtensionValue():39:39 -> Z
+    1:1:com.batch.android.msgpack.value.ImmutableArrayValue asArrayValue():39:39 -> a
+    2:4:void writeTo(com.batch.android.msgpack.core.MessagePacker):100:102 -> a
+    5:8:void appendJsonKey(java.lang.StringBuilder,com.batch.android.msgpack.value.Value):153:156 -> a
+    1:1:com.batch.android.msgpack.value.ImmutableNumberValue asNumberValue():39:39 -> a0
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue asNilValue():39:39 -> b
+    2:5:void appendString(java.lang.StringBuilder,com.batch.android.msgpack.value.Value):181:184 -> b
+    1:1:com.batch.android.msgpack.value.ImmutableMapValue empty():44:44 -> b0
+    1:1:com.batch.android.msgpack.value.ImmutableIntegerValue asIntegerValue():39:39 -> c
+    com.batch.android.msgpack.value.ImmutableMapValue immutableValue() -> c0
+    1:1:com.batch.android.msgpack.value.ImmutableMapValue asMapValue():0:0 -> d
+    2:2:com.batch.android.msgpack.value.MapValue asMapValue():39:39 -> d
+    1:1:java.util.Set entrySet():85:85 -> entrySet
+    1:10:boolean equals(java.lang.Object):111:120 -> equals
+    1:1:com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue():39:39 -> f
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue asStringValue():39:39 -> g
+    1:1:com.batch.android.msgpack.value.ImmutableRawValue asRawValue():39:39 -> h
+    1:2:int hashCode():126:127 -> hashCode
+    1:1:com.batch.android.msgpack.value.ImmutableBooleanValue asBooleanValue():39:39 -> i
+    1:1:com.batch.android.msgpack.value.ImmutableFloatValue asFloatValue():39:39 -> j
+    1:1:java.util.Set keySet():80:80 -> keySet
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():55:55 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():39:39 -> s
+    1:1:int size():75:75 -> size
+    1:16:java.lang.String toString():162:177 -> toString
+    1:1:boolean isStringValue():39:39 -> v
+    1:1:java.util.Collection values():90:90 -> values
+    1:1:boolean isIntegerValue():39:39 -> w
+    1:1:com.batch.android.msgpack.value.Value[] getKeyValueArray():70:70 -> x
+com.batch.android.msgpack.value.impl.ImmutableMapValueImpl$EntryIterator -> com.batch.android.q0.j$a:
+# {"id":"sourceFile","fileName":"ImmutableMapValueImpl.java"}
+    com.batch.android.msgpack.value.Value[] kvs -> a
+    int index -> b
+    1:3:void <init>(com.batch.android.msgpack.value.Value[],int):299:301 -> <init>
+    1:6:com.batch.android.msgpack.value.Value next():311:316 -> a
+    7:7:com.batch.android.msgpack.value.Value next():313:313 -> a
+    1:1:boolean hasNext():306:306 -> hasNext
+    1:1:java.lang.Object next():294:294 -> next
+    1:1:void remove():321:321 -> remove
+com.batch.android.msgpack.value.impl.ImmutableMapValueImpl$EntrySet -> com.batch.android.q0.j$b:
+# {"id":"sourceFile","fileName":"ImmutableMapValueImpl.java"}
+    com.batch.android.msgpack.value.Value[] kvs -> a
+    1:2:void <init>(com.batch.android.msgpack.value.Value[]):206:207 -> <init>
+    1:1:java.util.Iterator iterator():217:217 -> iterator
+    1:1:int size():212:212 -> size
+com.batch.android.msgpack.value.impl.ImmutableMapValueImpl$EntrySetIterator -> com.batch.android.q0.j$c:
+# {"id":"sourceFile","fileName":"ImmutableMapValueImpl.java"}
+    com.batch.android.msgpack.value.Value[] kvs -> a
+    int index -> b
+    1:3:void <init>(com.batch.android.msgpack.value.Value[]):226:228 -> <init>
+    1:9:java.util.Map$Entry next():238:246 -> a
+    10:10:java.util.Map$Entry next():239:239 -> a
+    1:1:boolean hasNext():233:233 -> hasNext
+    1:1:java.lang.Object next():221:221 -> next
+    1:1:void remove():252:252 -> remove
+com.batch.android.msgpack.value.impl.ImmutableMapValueImpl$ImmutableMapValueMap -> com.batch.android.q0.j$d:
+# {"id":"sourceFile","fileName":"ImmutableMapValueImpl.java"}
+    com.batch.android.msgpack.value.Value[] kvs -> a
+    1:2:void <init>(com.batch.android.msgpack.value.Value[]):192:193 -> <init>
+    1:1:java.util.Set entrySet():198:198 -> entrySet
+com.batch.android.msgpack.value.impl.ImmutableMapValueImpl$KeySet -> com.batch.android.q0.j$e:
+# {"id":"sourceFile","fileName":"ImmutableMapValueImpl.java"}
+    com.batch.android.msgpack.value.Value[] kvs -> a
+    1:2:void <init>(com.batch.android.msgpack.value.Value[]):260:261 -> <init>
+    1:1:java.util.Iterator iterator():271:271 -> iterator
+    1:1:int size():266:266 -> size
+com.batch.android.msgpack.value.impl.ImmutableMapValueImpl$ValueCollection -> com.batch.android.q0.j$f:
+# {"id":"sourceFile","fileName":"ImmutableMapValueImpl.java"}
+    com.batch.android.msgpack.value.Value[] kvs -> a
+    1:2:void <init>(com.batch.android.msgpack.value.Value[]):279:280 -> <init>
+    1:1:java.util.Iterator iterator():290:290 -> iterator
+    1:1:int size():285:285 -> size
+com.batch.android.msgpack.value.impl.ImmutableNilValueImpl -> com.batch.android.q0.k:
+# {"id":"sourceFile","fileName":"ImmutableNilValueImpl.java"}
+    com.batch.android.msgpack.value.ImmutableNilValue instance -> a
+    1:1:void <clinit>():33:33 -> <clinit>
+    1:1:void <init>():39:39 -> <init>
+    1:1:boolean isBinaryValue():31:31 -> C
+    1:1:boolean isNilValue():31:31 -> E
+    1:1:boolean isNumberValue():31:31 -> L
+    1:1:boolean isArrayValue():31:31 -> N
+    1:1:boolean isRawValue():31:31 -> O
+    1:1:boolean isExtensionValue():31:31 -> Q
+    1:1:boolean isMapValue():31:31 -> S
+    1:1:boolean isFloatValue():31:31 -> T
+    1:1:boolean isBooleanValue():31:31 -> W
+    1:1:java.lang.String toJson():84:84 -> X
+    1:1:com.batch.android.msgpack.value.ImmutableExtensionValue asExtensionValue():31:31 -> Z
+    1:1:com.batch.android.msgpack.value.ImmutableArrayValue asArrayValue():31:31 -> a
+    2:2:void writeTo(com.batch.android.msgpack.core.MessagePacker):58:58 -> a
+    1:1:com.batch.android.msgpack.value.ImmutableNumberValue asNumberValue():31:31 -> a0
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue asNilValue():0:0 -> b
+    2:2:com.batch.android.msgpack.value.NilValue asNilValue():31:31 -> b
+    1:1:com.batch.android.msgpack.value.ImmutableNilValue get():36:36 -> b0
+    1:1:com.batch.android.msgpack.value.ImmutableIntegerValue asIntegerValue():31:31 -> c
+    com.batch.android.msgpack.value.ImmutableNilValue immutableValue() -> c0
+    1:1:com.batch.android.msgpack.value.ImmutableMapValue asMapValue():31:31 -> d
+    1:4:boolean equals(java.lang.Object):66:69 -> equals
+    1:1:com.batch.android.msgpack.value.ImmutableBinaryValue asBinaryValue():31:31 -> f
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue asStringValue():31:31 -> g
+    1:1:com.batch.android.msgpack.value.ImmutableRawValue asRawValue():31:31 -> h
+    1:1:com.batch.android.msgpack.value.ImmutableBooleanValue asBooleanValue():31:31 -> i
+    1:1:com.batch.android.msgpack.value.ImmutableFloatValue asFloatValue():31:31 -> j
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():43:43 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():31:31 -> s
+    1:1:java.lang.String toString():79:79 -> toString
+    1:1:boolean isStringValue():31:31 -> v
+    1:1:boolean isIntegerValue():31:31 -> w
+com.batch.android.msgpack.value.impl.ImmutableStringValueImpl -> com.batch.android.q0.l:
+# {"id":"sourceFile","fileName":"ImmutableStringValueImpl.java"}
+    1:1:void <init>(byte[]):34:34 -> <init>
+    2:2:void <init>(java.lang.String):38:38 -> <init>
+    1:2:void writeTo(com.batch.android.msgpack.core.MessagePacker):58:59 -> a
+    com.batch.android.msgpack.value.ImmutableStringValue immutableValue() -> c0
+    1:13:boolean equals(java.lang.Object):67:79 -> equals
+    1:1:com.batch.android.msgpack.value.ImmutableStringValue asStringValue():0:0 -> g
+    2:2:com.batch.android.msgpack.value.StringValue asStringValue():31:31 -> g
+    1:1:int hashCode():85:85 -> hashCode
+    1:1:com.batch.android.msgpack.value.ValueType getValueType():43:43 -> m
+    1:1:com.batch.android.msgpack.value.ImmutableValue immutableValue():31:31 -> s
+com.batch.android.post.DisplayReceiptPostDataProvider -> com.batch.android.r0.a:
+# {"id":"sourceFile","fileName":"DisplayReceiptPostDataProvider.java"}
+    java.util.Collection receipts -> b
+    1:2:void <init>(java.util.Collection):13:14 -> <init>
+    1:1:java.lang.Object getRawData():9:9 -> b
+    1:12:byte[] pack():24:35 -> c
+    13:16:byte[] pack():31:34 -> c
+    1:1:java.util.Collection getRawData():19:19 -> d
+    1:1:boolean isEmpty():40:40 -> isEmpty
+com.batch.android.post.InboxSyncPostDataProvider -> com.batch.android.r0.b:
+# {"id":"sourceFile","fileName":"InboxSyncPostDataProvider.java"}
+    com.batch.android.json.JSONObject body -> a
+    java.lang.String TAG -> b
+    1:15:void <init>(java.util.Collection):16:30 -> <init>
+    1:1:java.lang.String getContentType():50:50 -> a
+    1:1:java.lang.Object getRawData():11:11 -> b
+    1:1:com.batch.android.json.JSONObject getRawData():36:36 -> c
+    1:1:byte[] getData():41:41 -> e
+    1:1:boolean isEmpty():45:45 -> isEmpty
+com.batch.android.post.JSONPostDataProvider -> com.batch.android.r0.c:
+# {"id":"sourceFile","fileName":"JSONPostDataProvider.java"}
+    com.batch.android.json.JSONObject data -> a
+    1:1:void <init>():23:23 -> <init>
+    2:7:void <init>(com.batch.android.json.JSONObject):31:36 -> <init>
+    8:8:void <init>(com.batch.android.json.JSONObject):33:33 -> <init>
+    1:1:java.lang.String getContentType():48:48 -> a
+    1:1:java.lang.Object getRawData():10:10 -> b
+    1:1:com.batch.android.json.JSONObject getRawData():58:58 -> c
+    1:1:byte[] getData():43:43 -> e
+    1:1:boolean isEmpty():53:53 -> isEmpty
+com.batch.android.post.LocalCampaignsJITPostDataProvider -> com.batch.android.r0.d:
+# {"id":"sourceFile","fileName":"LocalCampaignsJITPostDataProvider.java"}
+    java.lang.String VIEWS_KEY -> g
+    java.lang.String ATTRIBUTES_KEY -> f
+    java.lang.String ELIGIBLE_CAMPAIGNS_KEY -> i
+    java.lang.String COUNT_KEY -> h
+    java.util.Collection campaigns -> b
+    java.lang.String TAG -> c
+    java.lang.String CAMPAIGNS_KEY -> e
+    java.lang.String IDS_KEY -> d
+    1:2:void <init>(java.util.Collection):39:40 -> <init>
+    1:19:java.util.List unpack(byte[]):102:120 -> a
+    1:1:java.lang.Object getRawData():26:26 -> b
+    1:48:byte[] pack():50:97 -> c
+    49:52:byte[] pack():93:96 -> c
+    1:1:java.util.Collection getRawData():45:45 -> d
+    1:1:boolean isEmpty():127:127 -> isEmpty
+com.batch.android.post.MessagePackPostDataProvider -> com.batch.android.r0.e:
+# {"id":"sourceFile","fileName":"MessagePackPostDataProvider.java"}
+    java.lang.String TAG -> a
+    1:1:void <init>():6:6 -> <init>
+    1:1:java.lang.String getContentType():24:24 -> a
+    byte[] pack() -> c
+    1:4:byte[] getData():15:18 -> e
+com.batch.android.post.MetricPostDataProvider -> com.batch.android.r0.f:
+# {"id":"sourceFile","fileName":"MetricPostDataProvider.java"}
+    java.util.Collection metrics -> b
+    1:2:void <init>(java.util.Collection):13:14 -> <init>
+    1:1:java.lang.Object getRawData():9:9 -> b
+    1:12:byte[] pack():24:35 -> c
+    13:16:byte[] pack():31:34 -> c
+    1:1:java.util.Collection getRawData():19:19 -> d
+    1:1:boolean isEmpty():40:40 -> isEmpty
+com.batch.android.post.ParametersPostDataProvider -> com.batch.android.r0.g:
+# {"id":"sourceFile","fileName":"ParametersPostDataProvider.java"}
+    java.util.Map params -> a
+    1:1:void <init>():25:25 -> <init>
+    2:2:void <init>(java.util.Map):33:33 -> <init>
+    3:24:void <init>(java.util.Map):17:38 -> <init>
+    25:25:void <init>(java.util.Map):35:35 -> <init>
+    1:1:java.lang.String getContentType():76:76 -> a
+    1:1:java.lang.Object getRawData():12:12 -> b
+    1:1:java.util.Map getRawData():45:45 -> c
+    1:19:byte[] getData():53:71 -> e
+    1:1:boolean isEmpty():81:81 -> isEmpty
+com.batch.android.post.PostDataProvider -> com.batch.android.r0.h:
+# {"id":"sourceFile","fileName":"PostDataProvider.java"}
+    java.lang.String getContentType() -> a
+    java.lang.Object getRawData() -> b
+    byte[] getData() -> e
+com.batch.android.push.FCMAbstractRegistrationProvider -> com.batch.android.s0.a:
+# {"id":"sourceFile","fileName":"FCMAbstractRegistrationProvider.java"}
+    java.lang.String senderID -> a
+    java.lang.String fcmProjectID -> b
+    1:1:void <init>(android.content.Context):17:17 -> <init>
+    2:6:void <init>(android.content.Context):14:18 -> <init>
+    1:27:void loadProjectInformation(android.content.Context):23:49 -> a
+    28:28:boolean isFirebaseCorePresent():94:94 -> a
+    1:1:boolean isFirebaseMessagingPresent():103:103 -> b
+    1:16:void checkLibraryAvailability():71:86 -> checkLibraryAvailability
+    17:17:void checkLibraryAvailability():80:80 -> checkLibraryAvailability
+    18:18:void checkLibraryAvailability():74:74 -> checkLibraryAvailability
+    1:1:java.lang.String getGCPProjectID():61:61 -> getGCPProjectID
+    1:1:java.lang.String getSenderID():55:55 -> getSenderID
+com.batch.android.push.FCMInstanceIdRegistrationProvider -> com.batch.android.s0.b:
+# {"id":"sourceFile","fileName":"FCMInstanceIdRegistrationProvider.java"}
+    1:1:void <init>(android.content.Context):16:16 -> <init>
+    1:11:void loadProjectInformation(android.content.Context):26:36 -> a
+    1:15:java.lang.String getRegistration():46:60 -> getRegistration
+    1:1:java.lang.String getShortname():21:21 -> getShortname
+com.batch.android.push.FCMTokenRegistrationProvider -> com.batch.android.s0.c:
+# {"id":"sourceFile","fileName":"FCMTokenRegistrationProvider.java"}
+    1:1:void <init>(android.content.Context):16:16 -> <init>
+    1:22:java.lang.String getRegistration():29:50 -> getRegistration
+    1:1:java.lang.String getShortname():21:21 -> getShortname
+com.batch.android.push.GCMAbstractRegistrationProvider -> com.batch.android.s0.d:
+# {"id":"sourceFile","fileName":"GCMAbstractRegistrationProvider.java"}
+    android.content.Context context -> a
+    java.lang.String TAG -> c
+    java.lang.String senderID -> b
+    1:3:void <init>(android.content.Context,java.lang.String):19:21 -> <init>
+    java.lang.Integer getGMSAvailability() -> a
+    1:3:boolean isC2DMessagePermissionAvailable():87:89 -> b
+    1:3:boolean isReceivePermissionAvailable():78:80 -> c
+    1:35:void checkLibraryAvailability():36:70 -> checkLibraryAvailability
+    36:36:void checkLibraryAvailability():66:66 -> checkLibraryAvailability
+    37:37:void checkLibraryAvailability():60:60 -> checkLibraryAvailability
+    38:40:void checkLibraryAvailability():51:53 -> checkLibraryAvailability
+    41:41:void checkLibraryAvailability():45:45 -> checkLibraryAvailability
+    42:42:void checkLibraryAvailability():37:37 -> checkLibraryAvailability
+    1:1:java.lang.String getSenderID():26:26 -> getSenderID
+com.batch.android.push.GCMIidRegistrationProvider -> com.batch.android.s0.e:
+# {"id":"sourceFile","fileName":"GCMIidRegistrationProvider.java"}
+    1:1:void <init>(android.content.Context,java.lang.String):15:15 -> <init>
+    1:1:java.lang.Integer getGMSAvailability():25:25 -> a
+    1:11:void checkLibraryAvailability():32:42 -> checkLibraryAvailability
+    12:13:void checkLibraryAvailability():35:36 -> checkLibraryAvailability
+    1:1:java.lang.String getRegistration():48:48 -> getRegistration
+    1:1:java.lang.String getShortname():20:20 -> getShortname
+com.batch.android.push.GCMLegacyRegistrationProvider -> com.batch.android.s0.f:
+# {"id":"sourceFile","fileName":"GCMLegacyRegistrationProvider.java"}
+    1:1:void <init>(android.content.Context,java.lang.String):14:14 -> <init>
+    1:1:java.lang.Integer getGMSAvailability():23:23 -> a
+    1:6:java.lang.String getRegistration():29:34 -> getRegistration
+    1:1:java.lang.String getShortname():19:19 -> getShortname
+com.batch.android.push.PushRegistrationDiscoveryService -> com.batch.android.push.PushRegistrationDiscoveryService:
+# {"id":"sourceFile","fileName":"PushRegistrationDiscoveryService.java"}
+    1:1:void <init>():11:11 -> <init>
+com.batch.android.push.PushRegistrationProviderFactory -> com.batch.android.s0.g:
+# {"id":"sourceFile","fileName":"PushRegistrationProviderFactory.java"}
+    android.content.Context context -> a
+    java.lang.String COMPONENT_KEY_PREFIX -> f
+    java.lang.String gcmSenderID -> c
+    boolean shouldUseGoogleInstanceID -> b
+    java.lang.String COMPONENT_SENTINEL_VALUE -> e
+    java.lang.String TAG -> d
+    1:4:void <init>(android.content.Context,boolean,java.lang.String):43:46 -> <init>
+    1:13:com.batch.android.PushRegistrationProvider getExternalPushRegistrationProvider():308:320 -> a
+    14:34:com.batch.android.PushRegistrationProvider getExternalPushRegistrationProvider():318:338 -> a
+    35:51:com.batch.android.PushRegistrationProvider getExternalPushRegistrationProvider():333:349 -> a
+    52:63:com.batch.android.PushRegistrationProvider getExternalPushRegistrationProvider():346:357 -> a
+    64:72:com.batch.android.PushRegistrationProvider getExternalPushRegistrationProvider():354:362 -> a
+    73:73:boolean isExternalProviderAllowed(java.lang.String):370:370 -> a
+    1:113:com.batch.android.PushRegistrationProvider getRegistrationProvider():82:194 -> b
+    1:14:boolean isBatchGCMIidServiceAvailable():267:280 -> c
+    1:1:boolean isFCMFirebaseInstanceIdAvailable():244:244 -> d
+    1:5:boolean isFCMTokenApiAvailable():226:230 -> e
+    1:1:boolean isGCMInstanceIdAvailable():258:258 -> f
+    1:16:boolean isLegacyPushReceiverInManifest():199:214 -> g
+    1:1:boolean isSenderIdOverridden():304:304 -> h
+    1:1:boolean shouldForceFirebaseIIDProvider():295:295 -> i
+com.batch.android.push.PushRegistrationRegistrar -> com.batch.android.push.PushRegistrationRegistrar:
+# {"id":"sourceFile","fileName":"PushRegistrationRegistrar.java"}
+com.batch.android.push.Registration -> com.batch.android.s0.h:
+# {"id":"sourceFile","fileName":"Registration.java"}
+    java.lang.String provider -> a
+    java.lang.String senderID -> c
+    java.lang.String registrationID -> b
+    java.lang.String gcpProjectID -> d
+    1:5:void <init>(java.lang.String,java.lang.String,java.lang.String,java.lang.String):25:29 -> <init>
+com.batch.android.push.formats.APENFormat -> com.batch.android.t0.a:
+# {"id":"sourceFile","fileName":"APENFormat.java"}
+    java.lang.String LAYOUT_TYPE_KEY -> f
+    com.batch.android.push.formats.APENFormat$LayoutType layoutType -> e
+    1:1:void <init>(java.lang.String,java.lang.String,android.graphics.Bitmap,android.graphics.Bitmap):89:89 -> <init>
+    2:2:void <init>(java.lang.String,java.lang.String,android.graphics.Bitmap,android.graphics.Bitmap):81:81 -> <init>
+    1:1:void applyExtraBuilderConfiguration(androidx.core.app.NotificationCompat$Builder):0:0 -> a
+    2:10:android.widget.RemoteViews generateCollapsedView(java.lang.String):93:101 -> a
+    11:11:androidx.core.app.NotificationCompat$Style getSupportNotificationStyle():134:134 -> a
+    12:24:void applyArguments(com.batch.android.json.JSONObject):140:152 -> a
+    25:25:void applyArguments(com.batch.android.json.JSONObject):148:148 -> a
+    26:26:void applyArguments(com.batch.android.json.JSONObject):145:145 -> a
+    27:27:void applyArguments(com.batch.android.json.JSONObject):142:142 -> a
+    1:21:android.widget.RemoteViews generateExpandedView(java.lang.String):108:128 -> b
+    22:22:com.batch.android.push.formats.APENFormat$LayoutType getLayoutType():167:167 -> b
+    1:1:boolean isSupported():162:162 -> c
+com.batch.android.push.formats.APENFormat$LayoutType -> com.batch.android.t0.a$a:
+# {"id":"sourceFile","fileName":"APENFormat.java"}
+    com.batch.android.push.formats.APENFormat$LayoutType FIT_CENTER_MP -> e
+    com.batch.android.push.formats.APENFormat$LayoutType FIT_CENTER_200 -> f
+    com.batch.android.push.formats.APENFormat$LayoutType CENTER_CROP_MP -> c
+    com.batch.android.push.formats.APENFormat$LayoutType CENTER_CROP_200 -> d
+    com.batch.android.push.formats.APENFormat$LayoutType[] $VALUES -> g
+    boolean forceLayoutHeight -> b
+    int imageScaleType -> a
+    1:15:void <clinit>():30:44 -> <clinit>
+    16:16:void <clinit>():26:26 -> <clinit>
+    1:3:void <init>(java.lang.String,int,int,boolean):56:58 -> <init>
+    1:1:com.batch.android.push.formats.APENFormat$LayoutType[] $values():26:26 -> a
+    1:1:boolean shouldFitCenter():74:74 -> b
+    1:1:boolean shouldForceLayoutHeight():66:66 -> c
+    1:1:com.batch.android.push.formats.APENFormat$LayoutType valueOf(java.lang.String):26:26 -> valueOf
+    1:1:com.batch.android.push.formats.APENFormat$LayoutType[] values():26:26 -> values
+com.batch.android.push.formats.BaseFormat -> com.batch.android.t0.b:
+# {"id":"sourceFile","fileName":"BaseFormat.java"}
+    android.graphics.Bitmap icon -> c
+    java.lang.String title -> a
+    android.graphics.Bitmap picture -> d
+    java.lang.String body -> b
+    1:5:void <init>(java.lang.String,java.lang.String,android.graphics.Bitmap,android.graphics.Bitmap):23:27 -> <init>
+com.batch.android.push.formats.NotificationFormat -> com.batch.android.t0.c:
+# {"id":"sourceFile","fileName":"NotificationFormat.java"}
+    void applyArguments(com.batch.android.json.JSONObject) -> a
+    void applyExtraBuilderConfiguration(androidx.core.app.NotificationCompat$Builder) -> a
+    android.widget.RemoteViews generateCollapsedView(java.lang.String) -> a
+    androidx.core.app.NotificationCompat$Style getSupportNotificationStyle() -> a
+    android.widget.RemoteViews generateExpandedView(java.lang.String) -> b
+com.batch.android.push.formats.SystemFormat -> com.batch.android.t0.d:
+# {"id":"sourceFile","fileName":"SystemFormat.java"}
+    boolean useLegacyBigPictureIconBehaviour -> e
+    1:2:void <init>(java.lang.String,java.lang.String,android.graphics.Bitmap,android.graphics.Bitmap,boolean):24:25 -> <init>
+    1:1:void applyArguments(com.batch.android.json.JSONObject):0:0 -> a
+    2:2:android.widget.RemoteViews generateCollapsedView(java.lang.String):0:0 -> a
+    3:17:androidx.core.app.NotificationCompat$Style getSupportNotificationStyle():45:59 -> a
+    18:23:void applyExtraBuilderConfiguration(androidx.core.app.NotificationCompat$Builder):72:77 -> a
+    android.widget.RemoteViews generateExpandedView(java.lang.String) -> b
+com.batch.android.query.AttributesCheckQuery -> com.batch.android.u0.a:
+# {"id":"sourceFile","fileName":"AttributesCheckQuery.java"}
+    long version -> d
+    java.lang.String transactionID -> e
+    1:11:void <init>(android.content.Context,long,java.lang.String):26:36 -> <init>
+    12:12:void <init>(android.content.Context,long,java.lang.String):32:32 -> <init>
+    13:13:void <init>(android.content.Context,long,java.lang.String):28:28 -> <init>
+    1:4:com.batch.android.json.JSONObject toJSON():43:46 -> e
+com.batch.android.query.AttributesSendQuery -> com.batch.android.u0.b:
+# {"id":"sourceFile","fileName":"AttributesSendQuery.java"}
+    long version -> d
+    java.util.Map attributes -> e
+    java.util.Map tags -> f
+    1:16:void <init>(android.content.Context,long,java.util.Map,java.util.Map):38:53 -> <init>
+    17:17:void <init>(android.content.Context,long,java.util.Map,java.util.Map):48:48 -> <init>
+    18:18:void <init>(android.content.Context,long,java.util.Map,java.util.Map):44:44 -> <init>
+    19:19:void <init>(android.content.Context,long,java.util.Map,java.util.Map):40:40 -> <init>
+    1:5:com.batch.android.json.JSONObject toJSON():60:64 -> e
+com.batch.android.query.LocalCampaignsQuery -> com.batch.android.u0.c:
+# {"id":"sourceFile","fileName":"LocalCampaignsQuery.java"}
+    java.util.Map capping -> d
+    java.lang.String TAG -> e
+    1:1:void <init>(com.batch.android.localcampaigns.CampaignManager,android.content.Context):30:30 -> <init>
+    2:18:void <init>(com.batch.android.localcampaigns.CampaignManager,android.content.Context):27:43 -> <init>
+    1:8:com.batch.android.json.JSONObject toJSON():49:56 -> e
+com.batch.android.query.PushQuery -> com.batch.android.u0.d:
+# {"id":"sourceFile","fileName":"PushQuery.java"}
+    com.batch.android.push.Registration registration -> d
+    1:6:void <init>(android.content.Context,com.batch.android.push.Registration):24:29 -> <init>
+    7:7:void <init>(android.content.Context,com.batch.android.push.Registration):26:26 -> <init>
+    1:7:com.batch.android.json.JSONObject toJSON():36:42 -> e
+    1:2:int getNotificationType():55:56 -> f
+    3:3:int getNotificationType():54:54 -> f
+com.batch.android.query.Query -> com.batch.android.u0.e:
+# {"id":"sourceFile","fileName":"Query.java"}
+    android.content.Context context -> a
+    java.lang.String id -> b
+    com.batch.android.query.QueryType type -> c
+    1:12:void <init>(android.content.Context,com.batch.android.query.QueryType):33:44 -> <init>
+    13:13:void <init>(android.content.Context,com.batch.android.query.QueryType):39:39 -> <init>
+    14:14:void <init>(android.content.Context,com.batch.android.query.QueryType):35:35 -> <init>
+    1:1:java.lang.String generateID():102:102 -> a
+    1:1:android.content.Context getContext():73:73 -> b
+    1:1:java.lang.String getID():55:55 -> c
+    1:1:com.batch.android.query.QueryType getType():64:64 -> d
+    1:4:com.batch.android.json.JSONObject toJSON():86:89 -> e
+com.batch.android.query.QueryType -> com.batch.android.u0.f:
+# {"id":"sourceFile","fileName":"QueryType.java"}
+    com.batch.android.query.QueryType ATTRIBUTES_CHECK -> e
+    com.batch.android.query.QueryType ATTRIBUTES -> d
+    com.batch.android.query.QueryType LOCAL_CAMPAIGNS -> f
+    com.batch.android.query.QueryType[] $VALUES -> g
+    com.batch.android.query.QueryType START -> a
+    com.batch.android.query.QueryType PUSH -> c
+    com.batch.android.query.QueryType TRACKING -> b
+    1:21:void <clinit>():11:31 -> <clinit>
+    22:22:void <clinit>():7:7 -> <clinit>
+    1:1:void <init>(java.lang.String,int):7:7 -> <init>
+    1:1:com.batch.android.query.QueryType[] $values():7:7 -> a
+    1:1:com.batch.android.query.QueryType valueOf(java.lang.String):7:7 -> valueOf
+    1:1:com.batch.android.query.QueryType[] values():7:7 -> values
+com.batch.android.query.StartQuery -> com.batch.android.u0.g:
+# {"id":"sourceFile","fileName":"StartQuery.java"}
+    java.lang.String pushId -> f
+    boolean fromPush -> e
+    boolean userActivity -> d
+    1:4:void <init>(android.content.Context,boolean,java.lang.String,boolean):33:36 -> <init>
+    1:7:com.batch.android.json.JSONObject toJSON():43:49 -> e
+com.batch.android.query.TrackingQuery -> com.batch.android.u0.h:
+# {"id":"sourceFile","fileName":"TrackingQuery.java"}
+    java.util.List events -> d
+    1:6:void <init>(android.content.Context,java.util.List):31:36 -> <init>
+    7:7:void <init>(android.content.Context,java.util.List):33:33 -> <init>
+    1:46:com.batch.android.json.JSONObject toJSON():43:88 -> e
+com.batch.android.query.response.AttributesCheckResponse -> com.batch.android.v0.a:
+# {"id":"sourceFile","fileName":"AttributesCheckResponse.java"}
+    long version -> d
+    java.lang.String actionString -> c
+    java.lang.Long time -> e
+    1:1:void <init>(java.lang.String):18:18 -> <init>
+    2:4:void <init>(java.lang.String):13:15 -> <init>
+    1:1:void setActionString(java.lang.String):48:48 -> a
+    2:2:void setVersion(long):56:56 -> a
+    3:3:void setTime(java.lang.Long):64:64 -> a
+    1:15:com.batch.android.query.response.AttributesCheckResponse$Action getAction():22:36 -> c
+    1:1:java.lang.Long getTime():60:60 -> d
+    1:1:long getVersion():52:52 -> e
+com.batch.android.query.response.AttributesCheckResponse$Action -> com.batch.android.v0.a$a:
+# {"id":"sourceFile","fileName":"AttributesCheckResponse.java"}
+    com.batch.android.query.response.AttributesCheckResponse$Action BUMP -> b
+    com.batch.android.query.response.AttributesCheckResponse$Action OK -> a
+    com.batch.android.query.response.AttributesCheckResponse$Action UNKNOWN -> e
+    com.batch.android.query.response.AttributesCheckResponse$Action[] $VALUES -> f
+    com.batch.android.query.response.AttributesCheckResponse$Action RESEND -> d
+    com.batch.android.query.response.AttributesCheckResponse$Action RECHECK -> c
+    1:5:void <clinit>():40:44 -> <clinit>
+    6:6:void <clinit>():39:39 -> <clinit>
+    1:1:void <init>(java.lang.String,int):39:39 -> <init>
+    1:1:com.batch.android.query.response.AttributesCheckResponse$Action[] $values():39:39 -> a
+    1:1:com.batch.android.query.response.AttributesCheckResponse$Action valueOf(java.lang.String):39:39 -> valueOf
+    1:1:com.batch.android.query.response.AttributesCheckResponse$Action[] values():39:39 -> values
+com.batch.android.query.response.AttributesSendResponse -> com.batch.android.v0.b:
+# {"id":"sourceFile","fileName":"AttributesSendResponse.java"}
+    long version -> d
+    java.lang.String transactionID -> c
+    1:1:void <init>(java.lang.String):16:16 -> <init>
+    2:2:void <init>(java.lang.String):13:13 -> <init>
+    1:1:void setTransactionID(java.lang.String):20:20 -> a
+    2:2:void setVersion(long):24:24 -> a
+com.batch.android.query.response.LocalCampaignsResponse -> com.batch.android.v0.c:
+# {"id":"sourceFile","fileName":"LocalCampaignsResponse.java"}
+    java.lang.String TAG -> g
+    com.batch.android.query.response.LocalCampaignsResponse$Error error -> c
+    java.util.List campaigns -> d
+    com.batch.android.query.response.LocalCampaignsResponse$GlobalCappings cappings -> f
+    java.lang.Long minDisplayInterval -> e
+    1:1:void <init>(java.lang.String):40:40 -> <init>
+    1:1:void setCampaigns(java.util.List):72:72 -> a
+    2:2:void setMinDisplayInterval(java.lang.Long):76:76 -> a
+    3:3:void setError(com.batch.android.query.response.LocalCampaignsResponse$Error):84:84 -> a
+    4:4:void setCappings(com.batch.android.query.response.LocalCampaignsResponse$GlobalCappings):97:97 -> a
+    1:1:java.util.List getCampaigns():49:49 -> c
+    1:7:java.util.List getCampaignsToSave():54:60 -> d
+    1:1:com.batch.android.query.response.LocalCampaignsResponse$GlobalCappings getCappings():93:93 -> e
+    1:1:com.batch.android.query.response.LocalCampaignsResponse$Error getError():80:80 -> f
+    1:1:java.lang.Long getMinDisplayInterval():68:68 -> g
+    1:1:boolean hasCampaigns():44:44 -> h
+    1:1:boolean hasCappings():101:101 -> i
+    1:1:boolean hasError():88:88 -> j
+com.batch.android.query.response.LocalCampaignsResponse$Error -> com.batch.android.v0.c$a:
+# {"id":"sourceFile","fileName":"LocalCampaignsResponse.java"}
+    java.lang.String message -> b
+    int code -> a
+    1:1:void <init>():167:167 -> <init>
+    1:1:int getCode():180:180 -> a
+    2:2:void setCode(int):184:184 -> a
+    3:3:void setMessage(java.lang.String):192:192 -> a
+    1:1:java.lang.String getMessage():188:188 -> b
+    1:1:java.lang.String toString():198:198 -> toString
+com.batch.android.query.response.LocalCampaignsResponse$GlobalCappings -> com.batch.android.v0.c$b:
+# {"id":"sourceFile","fileName":"LocalCampaignsResponse.java"}
+    java.util.List timeBasedCappings -> b
+    java.lang.Integer session -> a
+    1:3:void <init>(java.lang.Integer,java.util.List):151:153 -> <init>
+    1:1:java.lang.Integer getSession():158:158 -> a
+    1:1:java.util.List getTimeBasedCappings():163:163 -> b
+com.batch.android.query.response.LocalCampaignsResponse$GlobalCappings$TimeBasedCapping -> com.batch.android.v0.c$b$a:
+# {"id":"sourceFile","fileName":"LocalCampaignsResponse.java"}
+    java.lang.Integer views -> a
+    java.lang.Integer duration -> b
+    1:3:void <init>(java.lang.Integer,java.lang.Integer):125:127 -> <init>
+    1:1:java.lang.Integer getDuration():137:137 -> a
+    1:1:java.lang.Integer getViews():132:132 -> b
+com.batch.android.query.response.PushResponse -> com.batch.android.v0.d:
+# {"id":"sourceFile","fileName":"PushResponse.java"}
+    1:1:void <init>(java.lang.String):15:15 -> <init>
+com.batch.android.query.response.Response -> com.batch.android.v0.e:
+# {"id":"sourceFile","fileName":"Response.java"}
+    java.lang.String queryID -> a
+    com.batch.android.query.QueryType queryType -> b
+    1:11:void <init>(com.batch.android.query.QueryType,java.lang.String):23:33 -> <init>
+    12:12:void <init>(com.batch.android.query.QueryType,java.lang.String):29:29 -> <init>
+    13:13:void <init>(com.batch.android.query.QueryType,java.lang.String):25:25 -> <init>
+    1:1:java.lang.String getQueryID():42:42 -> a
+    1:1:com.batch.android.query.QueryType getQueryType():51:51 -> b
+com.batch.android.query.response.StartResponse -> com.batch.android.v0.f:
+# {"id":"sourceFile","fileName":"StartResponse.java"}
+    1:1:void <init>(java.lang.String):15:15 -> <init>
+com.batch.android.query.response.TrackingResponse -> com.batch.android.v0.g:
+# {"id":"sourceFile","fileName":"TrackingResponse.java"}
+    1:1:void <init>(java.lang.String):15:15 -> <init>
+com.batch.android.query.serialization.deserializers.AttributesCheckResponseDeserializer -> com.batch.android.w0.a:
+# {"id":"sourceFile","fileName":"AttributesCheckResponseDeserializer.java"}
+    1:1:void <init>(com.batch.android.json.JSONObject):18:18 -> <init>
+    1:1:com.batch.android.query.response.Response deserialize():10:10 -> a
+    1:9:com.batch.android.query.response.AttributesCheckResponse deserialize():29:37 -> c
+com.batch.android.query.serialization.deserializers.AttributesSendResponseDeserializer -> com.batch.android.w0.b:
+# {"id":"sourceFile","fileName":"AttributesSendResponseDeserializer.java"}
+    1:1:void <init>(com.batch.android.json.JSONObject):18:18 -> <init>
+    1:1:com.batch.android.query.response.Response deserialize():10:10 -> a
+    1:6:com.batch.android.query.response.AttributesSendResponse deserialize():29:34 -> c
+com.batch.android.query.serialization.deserializers.LocalCampaignsResponseDeserializer -> com.batch.android.w0.c:
+# {"id":"sourceFile","fileName":"LocalCampaignsResponseDeserializer.java"}
+    java.lang.String TAG -> c
+    com.batch.android.localcampaigns.serialization.LocalCampaignDeserializer localCampaignDeserializer -> b
+    1:1:void <init>(com.batch.android.json.JSONObject):33:33 -> <init>
+    2:2:void <init>(com.batch.android.json.JSONObject):25:25 -> <init>
+    1:1:com.batch.android.query.response.Response deserialize():18:18 -> a
+    2:19:java.util.List parseTimeBasedCappings(com.batch.android.json.JSONArray):109:126 -> a
+    1:19:com.batch.android.query.response.LocalCampaignsResponse deserialize():44:62 -> c
+    20:20:com.batch.android.query.response.LocalCampaignsResponse deserialize():45:45 -> c
+    1:2:java.util.List deserializeCampaigns():73:74 -> d
+    1:11:com.batch.android.query.response.LocalCampaignsResponse$GlobalCappings deserializeCappings():86:96 -> e
+    1:8:com.batch.android.query.response.LocalCampaignsResponse$Error parseError():138:145 -> f
+com.batch.android.query.serialization.deserializers.PushResponseDeserializer -> com.batch.android.w0.d:
+# {"id":"sourceFile","fileName":"PushResponseDeserializer.java"}
+    1:1:void <init>(com.batch.android.json.JSONObject):18:18 -> <init>
+    1:1:com.batch.android.query.response.Response deserialize():10:10 -> a
+    1:1:com.batch.android.query.response.PushResponse deserialize():29:29 -> c
+com.batch.android.query.serialization.deserializers.ResponseDeserializer -> com.batch.android.w0.e:
+# {"id":"sourceFile","fileName":"ResponseDeserializer.java"}
+    com.batch.android.json.JSONObject json -> a
+    1:2:void <init>(com.batch.android.json.JSONObject):22:23 -> <init>
+    com.batch.android.query.response.Response deserialize() -> a
+    1:1:java.lang.String getId():33:33 -> b
+com.batch.android.query.serialization.deserializers.StartResponseDeserializer -> com.batch.android.w0.f:
+# {"id":"sourceFile","fileName":"StartResponseDeserializer.java"}
+    1:1:void <init>(com.batch.android.json.JSONObject):18:18 -> <init>
+    1:1:com.batch.android.query.response.Response deserialize():10:10 -> a
+    1:1:com.batch.android.query.response.StartResponse deserialize():29:29 -> c
+com.batch.android.query.serialization.deserializers.TrackingResponseDeserializer -> com.batch.android.w0.g:
+# {"id":"sourceFile","fileName":"TrackingResponseDeserializer.java"}
+    1:1:void <init>(com.batch.android.json.JSONObject):18:18 -> <init>
+    1:1:com.batch.android.query.response.Response deserialize():10:10 -> a
+    1:1:com.batch.android.query.response.TrackingResponse deserialize():29:29 -> c
+com.batch.android.query.serialization.serializers.LocalCampaignsResponseSerializer -> com.batch.android.x0.a:
+# {"id":"sourceFile","fileName":"LocalCampaignsResponseSerializer.java"}
+    com.batch.android.localcampaigns.serialization.LocalCampaignSerializer localCampaignSerializer -> a
+    1:6:void <init>():16:21 -> <init>
+    1:11:com.batch.android.json.JSONObject serialize(com.batch.android.query.response.LocalCampaignsResponse):34:44 -> a
+    12:12:com.batch.android.json.JSONObject serialize(com.batch.android.query.response.LocalCampaignsResponse):38:38 -> a
+    13:13:com.batch.android.json.JSONObject serialize(com.batch.android.query.response.LocalCampaignsResponse):32:32 -> a
+    14:14:com.batch.android.json.JSONArray serializeCampaigns(java.util.List):56:56 -> a
+    15:25:com.batch.android.json.JSONObject serializeCappings(com.batch.android.query.response.LocalCampaignsResponse$GlobalCappings):68:78 -> a
+com.batch.android.runtime.ChangeStateAction -> com.batch.android.y0.a:
+# {"id":"sourceFile","fileName":"ChangeStateAction.java"}
+    com.batch.android.runtime.State run(com.batch.android.runtime.State) -> a
+com.batch.android.runtime.ForegroundActivityLifecycleListener -> com.batch.android.y0.b:
+# {"id":"sourceFile","fileName":"ForegroundActivityLifecycleListener.java"}
+    java.lang.Runnable delayedPauseRunnable -> e
+    java.lang.String TAG -> f
+    java.util.concurrent.atomic.AtomicInteger resumeCount -> a
+    android.os.Handler handler -> c
+    java.util.concurrent.atomic.AtomicBoolean isPaused -> b
+    int TIMEOUT_MS -> g
+    com.batch.android.runtime.ForegroundActivityLifecycleListener$AppLifecycleListener listener -> d
+    1:42:void <init>():16:57 -> <init>
+    1:2:void registerAppLifecycleListener(com.batch.android.runtime.ForegroundActivityLifecycleListener$AppLifecycleListener):71:72 -> a
+    3:17:boolean isApplicationInForeground():113:127 -> a
+    1:4:void lambda$new$0():58:61 -> b
+    1:2:void onActivityPaused(android.app.Activity):94:95 -> onActivityPaused
+    1:5:void onActivityResumed(android.app.Activity):83:87 -> onActivityResumed
+com.batch.android.runtime.ForegroundActivityLifecycleListener$AppLifecycleListener -> com.batch.android.y0.b$a:
+# {"id":"sourceFile","fileName":"ForegroundActivityLifecycleListener.java"}
+    void onEnterBackground() -> a
+    void onEnterForeground() -> b
+com.batch.android.runtime.RuntimeManager -> com.batch.android.y0.c:
+# {"id":"sourceFile","fileName":"RuntimeManager.java"}
+    android.content.Context context -> a
+    java.util.Date lastUserStartDate -> d
+    java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock r -> k
+    com.batch.android.debug.FindMyInstallationHelper installationIdHelper -> m
+    java.lang.String TAG -> n
+    java.util.Date stopDate -> h
+    android.app.Activity activity -> e
+    android.os.Handler handler -> b
+    com.batch.android.runtime.ForegroundActivityLifecycleListener foregroundActivityLifecycleListener -> f
+    com.batch.android.runtime.State state -> i
+    java.util.concurrent.locks.ReentrantReadWriteLock lock -> j
+    java.util.concurrent.atomic.AtomicInteger serviceRefCount -> c
+    com.batch.android.runtime.SessionManager sessionManager -> g
+    java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock w -> l
+    1:1:void <init>():100:100 -> <init>
+    2:61:void <init>():37:96 -> <init>
+    1:1:com.batch.android.debug.FindMyInstallationHelper access$000(com.batch.android.runtime.RuntimeManager):26:26 -> a
+    2:13:boolean changeState(com.batch.android.runtime.ChangeStateAction):111:122 -> a
+    14:28:boolean changeStateIf(com.batch.android.runtime.State,com.batch.android.runtime.ChangeStateAction):133:147 -> a
+    29:38:boolean changeStateIf(com.batch.android.runtime.State,com.batch.android.runtime.ChangeStateAction):139:148 -> a
+    39:44:void run(com.batch.android.runtime.StateAction):159:164 -> a
+    45:54:boolean runIf(com.batch.android.runtime.State,com.batch.android.runtime.StateAction):175:184 -> a
+    55:59:boolean runIf(com.batch.android.runtime.State,com.batch.android.runtime.StateAction):181:185 -> a
+    60:60:boolean runIfReady(java.lang.Runnable):197:197 -> a
+    61:71:boolean runIf(com.batch.android.runtime.State,java.lang.Runnable):208:218 -> a
+    72:77:boolean runIf(com.batch.android.runtime.State,java.lang.Runnable):214:219 -> a
+    78:78:void setActivity(android.app.Activity):260:260 -> a
+    79:82:void setContext(android.content.Context):358:361 -> a
+    83:96:void registerActivityListenerIfNeeded(android.app.Application):377:390 -> a
+    97:110:void registerSessionManagerIfNeeded(android.app.Application,boolean):405:418 -> a
+    111:111:void clearSessionManager():442:442 -> a
+    1:1:void decrementServiceRefCount():283:283 -> b
+    1:1:android.app.Activity getActivity():269:269 -> c
+    1:1:android.content.Context getContext():371:371 -> d
+    1:1:java.util.Date getLastUserStartDate():347:347 -> e
+    1:5:java.lang.String getSessionIdentifier():429:433 -> f
+    1:1:com.batch.android.runtime.SessionManager getSessionManager():437:437 -> g
+    1:1:void incrementServiceRefCount():276:276 -> h
+    1:5:boolean isApplicationInForeground():395:399 -> i
+    1:1:boolean isReady():298:298 -> j
+    1:15:boolean isRetainedByService():305:319 -> k
+    1:4:java.lang.Long onStart():232:235 -> l
+    1:5:void onStopWithoutFinishing():244:248 -> m
+    1:1:void resetServiceRefCount():291:291 -> n
+    1:1:void updateLastUserStartDate():338:338 -> o
+com.batch.android.runtime.RuntimeManager$1 -> com.batch.android.y0.c$a:
+# {"id":"sourceFile","fileName":"RuntimeManager.java"}
+    com.batch.android.runtime.RuntimeManager this$0 -> a
+    1:1:void <init>(com.batch.android.runtime.RuntimeManager):380:380 -> <init>
+    void onEnterBackground() -> a
+    1:1:void onEnterForeground():383:383 -> b
+com.batch.android.runtime.SessionManager -> com.batch.android.y0.d:
+# {"id":"sourceFile","fileName":"SessionManager.java"}
+    java.lang.String TAG -> f
+    java.util.concurrent.atomic.AtomicInteger createCount -> a
+    int BACKGROUNDED_SESSION_EXPIRATION_SEC -> g
+    java.lang.Long backgroundSessionExpirationUptime -> b
+    boolean sessionActive -> c
+    java.lang.String INTENT_NEW_SESSION -> e
+    java.lang.String sessionIdentifier -> d
+    1:22:void <init>():32:53 -> <init>
+    1:12:void startNewSessionIfNeeded(android.content.Context):76:87 -> a
+    13:27:boolean areAllActivitiesDestroyed():96:110 -> a
+    1:1:java.lang.String getSessionIdentifier():61:61 -> b
+    1:1:long getUptime():125:125 -> c
+    1:7:void invalidateSessionIfNeeded():65:71 -> d
+    1:4:void onActivityCreated(android.app.Activity,android.os.Bundle):145:148 -> onActivityCreated
+    1:8:void onActivityDestroyed(android.app.Activity):174:181 -> onActivityDestroyed
+    1:5:void onActivityResumed(android.app.Activity):156:160 -> onActivityResumed
+    1:1:void onLowMemory():140:140 -> onLowMemory
+    1:1:void onTrimMemory(int):131:131 -> onTrimMemory
+com.batch.android.runtime.State -> com.batch.android.y0.e:
+# {"id":"sourceFile","fileName":"State.java"}
+    com.batch.android.runtime.State[] $VALUES -> d
+    com.batch.android.runtime.State FINISHING -> c
+    com.batch.android.runtime.State READY -> b
+    com.batch.android.runtime.State OFF -> a
+    1:11:void <clinit>():11:21 -> <clinit>
+    12:12:void <clinit>():7:7 -> <clinit>
+    1:1:void <init>(java.lang.String,int):7:7 -> <init>
+    1:1:com.batch.android.runtime.State[] $values():7:7 -> a
+    1:1:com.batch.android.runtime.State valueOf(java.lang.String):7:7 -> valueOf
+    1:1:com.batch.android.runtime.State[] values():7:7 -> values
+com.batch.android.runtime.StateAction -> com.batch.android.y0.f:
+# {"id":"sourceFile","fileName":"StateAction.java"}
+    void run(com.batch.android.runtime.State) -> a
+com.batch.android.tracker.TrackerDatabaseHelper -> com.batch.android.z0.a:
+# {"id":"sourceFile","fileName":"TrackerDatabaseHelper.java"}
+    java.lang.String COLUMN_PARAMETERS -> g
+    java.lang.String COLUMN_TIMEZONE -> f
+    java.lang.String COLUMN_SERVER_TIME -> i
+    java.lang.String COLUMN_STATE -> h
+    int DATABASE_VERSION -> m
+    java.lang.String COLUMN_SESSION_ID -> k
+    java.lang.String COLUMN_SECURE_DATE -> j
+    java.lang.String DATABASE_NAME -> l
+    java.lang.String TABLE_EVENTS -> a
+    java.lang.String COLUMN_ID -> c
+    java.lang.String COLUMN_DB_ID -> b
+    java.lang.String COLUMN_DATE -> e
+    java.lang.String COLUMN_NAME -> d
+    1:1:void <init>(android.content.Context):33:33 -> <init>
+    1:1:void onCreate(android.database.sqlite.SQLiteDatabase):38:38 -> onCreate
+    1:4:void onUpgrade(android.database.sqlite.SQLiteDatabase,int,int):68:71 -> onUpgrade
+com.batch.android.tracker.TrackerDatasource -> com.batch.android.z0.b:
+# {"id":"sourceFile","fileName":"TrackerDatasource.java"}
+    android.content.Context context -> a
+    com.batch.android.tracker.TrackerDatabaseHelper databaseHelper -> c
+    android.database.sqlite.SQLiteDatabase database -> b
+    java.lang.String TAG -> d
+    1:8:void <init>(android.content.Context):42:49 -> <init>
+    9:9:void <init>(android.content.Context):44:44 -> <init>
+    1:1:void clearDB():81:81 -> a
+    2:3:boolean addEvent(com.batch.android.event.Event):93:94 -> a
+    4:35:com.batch.android.event.Event parseEvent(android.database.Cursor):176:207 -> a
+    36:51:int updateEventsToNewState(java.lang.String[],com.batch.android.event.Event$State):242:257 -> a
+    52:69:int deleteEvents(java.lang.String[]):269:286 -> a
+    70:70:int deleteOverflowEvents(int):298:298 -> a
+    1:23:java.util.List extractEventsToSend(int):104:126 -> b
+    24:67:java.util.List extractEventsToSend(int):119:162 -> b
+    68:68:boolean updateEventsToNew(java.lang.String[]):220:220 -> b
+    69:71:void close():318:320 -> b
+    72:87:boolean insert(com.batch.android.event.Event):331:346 -> b
+    88:133:boolean insert(com.batch.android.event.Event):343:388 -> b
+    134:134:boolean insert(com.batch.android.event.Event):337:337 -> b
+    1:13:java.util.List getAllEvents():60:72 -> c
+    14:14:java.util.List getAllEvents():62:62 -> c
+    15:15:boolean updateEventsToOld(java.lang.String[]):230:230 -> c
+    1:11:boolean resetEventStatus():401:411 -> d
+    12:25:boolean resetEventStatus():404:417 -> d
+com.batch.android.tracker.TrackerMode -> com.batch.android.z0.c:
+# {"id":"sourceFile","fileName":"TrackerMode.java"}
+    com.batch.android.tracker.TrackerMode ON -> d
+    com.batch.android.tracker.TrackerMode DB_ONLY -> c
+    com.batch.android.tracker.TrackerMode[] $VALUES -> e
+    com.batch.android.tracker.TrackerMode OFF -> b
+    int value -> a
+    1:11:void <clinit>():11:21 -> <clinit>
+    12:12:void <clinit>():7:7 -> <clinit>
+    1:2:void <init>(java.lang.String,int,int):27:28 -> <init>
+    1:1:com.batch.android.tracker.TrackerMode[] $values():7:7 -> a
+    2:3:com.batch.android.tracker.TrackerMode fromValue(int):44:45 -> a
+    1:1:int getValue():32:32 -> b
+    1:1:com.batch.android.tracker.TrackerMode valueOf(java.lang.String):7:7 -> valueOf
+    1:1:com.batch.android.tracker.TrackerMode[] values():7:7 -> values
+com.batch.android.user.AttributeType -> com.batch.android.a1.a:
+# {"id":"sourceFile","fileName":"AttributeType.java"}
+    com.batch.android.user.AttributeType DELETED -> c
+    com.batch.android.user.AttributeType DOUBLE -> f
+    com.batch.android.user.AttributeType BOOL -> g
+    char typeChar -> b
+    com.batch.android.user.AttributeType STRING -> d
+    com.batch.android.user.AttributeType LONG -> e
+    com.batch.android.user.AttributeType DATE -> h
+    com.batch.android.user.AttributeType[] $VALUES -> j
+    int value -> a
+    com.batch.android.user.AttributeType URL -> i
+    1:13:void <clinit>():7:19 -> <clinit>
+    14:14:void <clinit>():6:6 -> <clinit>
+    1:3:void <init>(java.lang.String,int,int,char):27:29 -> <init>
+    1:1:com.batch.android.user.AttributeType[] $values():6:6 -> a
+    2:3:com.batch.android.user.AttributeType fromValue(int):49:50 -> a
+    1:1:char getTypeChar():37:37 -> b
+    1:1:int getValue():33:33 -> c
+    1:1:com.batch.android.user.AttributeType valueOf(java.lang.String):6:6 -> valueOf
+    1:1:com.batch.android.user.AttributeType[] values():6:6 -> values
+com.batch.android.user.EmailSubscription -> com.batch.android.a1.b:
+# {"id":"sourceFile","fileName":"EmailSubscription.java"}
+    java.lang.String SUBSCRIPTION_KEY -> g
+    java.lang.String CUSTOM_ID_KEY -> f
+    java.util.Map subscriptions -> c
+    java.lang.String email -> a
+    boolean deleteEmail -> b
+    java.lang.String EMAIL_KEY -> e
+    java.lang.String TAG -> d
+    1:1:void <init>():38:38 -> <init>
+    2:4:void <init>():34:36 -> <init>
+    5:5:void <init>(java.lang.String):40:40 -> <init>
+    6:16:void <init>(java.lang.String):34:44 -> <init>
+    1:3:void setEmail(java.lang.String):49:51 -> a
+    4:4:void addSubscription(com.batch.android.user.EmailSubscription$Kind,com.batch.android.BatchEmailSubscriptionState):55:55 -> a
+    5:32:void sendEmailSubscriptionEvent():59:86 -> a
+    33:42:void sendEmailSubscriptionEvent():84:93 -> a
+com.batch.android.user.EmailSubscription$Kind -> com.batch.android.a1.b$a:
+# {"id":"sourceFile","fileName":"EmailSubscription.java"}
+    com.batch.android.user.EmailSubscription$Kind MARKETING -> a
+    com.batch.android.user.EmailSubscription$Kind[] $VALUES -> b
+    1:1:void <clinit>():23:23 -> <clinit>
+    2:2:void <clinit>():22:22 -> <clinit>
+    1:1:void <init>(java.lang.String,int):22:22 -> <init>
+    1:1:com.batch.android.user.EmailSubscription$Kind[] $values():22:22 -> a
+    1:1:com.batch.android.user.EmailSubscription$Kind valueOf(java.lang.String):22:22 -> valueOf
+    1:1:com.batch.android.user.EmailSubscription$Kind[] values():22:22 -> values
+com.batch.android.user.SQLUserDatasource -> com.batch.android.a1.c:
+# {"id":"sourceFile","fileName":"SQLUserDatasource.java"}
+    android.content.Context context -> a
+    java.lang.String TAG -> f
+    com.batch.android.user.UserDatabaseHelper databaseHelper -> c
+    long currentChangeset -> e
+    android.database.sqlite.SQLiteDatabase database -> b
+    boolean transactionOccurring -> d
+    1:1:void <init>(android.content.Context):59:59 -> <init>
+    2:16:void <init>(android.content.Context):52:66 -> <init>
+    17:17:void <init>(android.content.Context):61:61 -> <init>
+    1:10:void acquireTransactionLock(long):97:106 -> a
+    11:13:void setAttribute(java.lang.String,long):151:153 -> a
+    14:16:void setAttribute(java.lang.String,double):158:160 -> a
+    17:19:void setAttribute(java.lang.String,boolean):165:167 -> a
+    20:22:void setAttribute(java.lang.String,java.lang.String):172:174 -> a
+    23:25:void setAttribute(java.lang.String,java.util.Date):179:181 -> a
+    26:28:void setAttribute(java.lang.String,java.net.URI):186:188 -> a
+    29:33:void clearTags(java.lang.String):238:242 -> a
+    34:50:void setAttribute(java.lang.String,android.content.ContentValues,com.batch.android.user.AttributeType,boolean):266:282 -> a
+    51:51:void setAttribute(java.lang.String,android.content.ContentValues,com.batch.android.user.AttributeType,boolean):267:267 -> a
+    52:77:java.lang.String printDebugDump():506:531 -> a
+    78:79:void logAndThrow(java.lang.String,java.lang.Throwable):540:541 -> a
+    1:10:void commitTransaction():117:126 -> b
+    11:11:void removeAttribute(java.lang.String):193:193 -> b
+    12:12:void addTag(java.lang.String,java.lang.String):202:202 -> b
+    13:22:void deleteAttribute(java.lang.String,boolean):287:296 -> b
+    23:29:void deleteAttribute(java.lang.String,boolean):293:299 -> b
+    30:30:void deleteAttribute(java.lang.String,boolean):288:288 -> b
+    1:1:void removeTag(java.lang.String,java.lang.String):207:207 -> c
+    2:6:void clearTags():229:233 -> c
+    1:6:void clear():219:224 -> clear
+    1:9:void close():73:81 -> close
+    1:5:void clearAttributes():251:255 -> d
+    6:18:void deleteTag(java.lang.String,java.lang.String):329:341 -> d
+    19:19:void deleteTag(java.lang.String,java.lang.String):330:330 -> d
+    1:17:void writeTag(java.lang.String,java.lang.String):308:324 -> e
+    18:18:void writeTag(java.lang.String,java.lang.String):309:309 -> e
+    19:41:java.util.HashMap getAttributes():417:439 -> e
+    42:77:java.util.HashMap getAttributes():438:473 -> e
+    78:78:java.util.HashMap getAttributes():470:470 -> e
+    79:79:java.util.HashMap getAttributes():467:467 -> e
+    80:81:java.util.HashMap getAttributes():462:463 -> e
+    82:82:java.util.HashMap getAttributes():458:458 -> e
+    83:112:java.util.HashMap getAttributes():455:484 -> e
+    113:119:java.util.HashMap getAttributes():483:489 -> e
+    120:195:java.util.HashMap getAttributes():419:494 -> e
+    1:58:java.util.Map getTagCollections():351:408 -> f
+    59:62:java.util.Map getTagCollections():374:377 -> f
+    63:95:java.util.Map getTagCollections():376:408 -> f
+    96:150:java.util.Map getTagCollections():355:409 -> f
+    1:10:void rollbackTransaction():132:141 -> g
+    1:1:void throwInvalidStateException():545:545 -> h
+com.batch.android.user.SQLUserDatasource$1 -> com.batch.android.a1.c$a:
+# {"id":"sourceFile","fileName":"SQLUserDatasource.java"}
+    int[] $SwitchMap$com$batch$android$user$AttributeType -> a
+    1:1:void <clinit>():453:453 -> <clinit>
+com.batch.android.user.UserAttribute -> com.batch.android.a1.d:
+# {"id":"sourceFile","fileName":"UserAttribute.java"}
+    com.batch.android.user.AttributeType type -> b
+    java.lang.Object value -> a
+    1:3:void <init>(java.lang.Object,com.batch.android.user.AttributeType):14:16 -> <init>
+    1:13:java.util.Map getServerMapRepresentation(java.util.Map):20:32 -> a
+    1:7:boolean equals(java.lang.Object):44:50 -> equals
+    1:1:java.lang.String toString():55:55 -> toString
+com.batch.android.user.UserDataDiff -> com.batch.android.a1.e:
+# {"id":"sourceFile","fileName":"UserDataDiff.java"}
+    com.batch.android.user.UserDataDiff$Result result -> a
+    1:14:void <init>(java.util.Map,java.util.Map,java.util.Map,java.util.Map):26:39 -> <init>
+    1:15:void computeAttributes(java.util.Map,java.util.Map):52:66 -> a
+    16:48:void computeTagSetDiff(java.util.Set,java.util.Set,java.util.Set[]):104:136 -> a
+    49:49:void computeTagSetDiff(java.util.Set,java.util.Set,java.util.Set[]):116:116 -> a
+    50:53:void computeTagSetDiff(java.util.Set,java.util.Set,java.util.Set[]):109:112 -> a
+    1:24:void computeTags(java.util.Map,java.util.Map):73:96 -> b
+com.batch.android.user.UserDataDiff$1 -> com.batch.android.a1.e$a:
+# {"id":"sourceFile","fileName":"UserDataDiff.java"}
+com.batch.android.user.UserDataDiff$Result -> com.batch.android.a1.e$b:
+# {"id":"sourceFile","fileName":"UserDataDiff.java"}
+    java.util.Map addedAttributes -> a
+    java.util.Map removedAttributes -> b
+    java.util.Map addedTags -> c
+    java.util.Map removedTags -> d
+    1:1:void <init>(com.batch.android.user.UserDataDiff$1):143:143 -> <init>
+    2:2:void <init>():151:151 -> <init>
+    1:5:boolean hasChanges():154:158 -> a
+    6:10:com.batch.android.json.JSONObject toEventParameters(long):166:170 -> a
+    11:23:com.batch.android.json.JSONObject convertToJson(java.util.Map,java.util.Map):179:191 -> a
+com.batch.android.user.UserDatabaseException -> com.batch.android.a1.f:
+# {"id":"sourceFile","fileName":"UserDatabaseException.java"}
+    1:1:void <init>(java.lang.String):6:6 -> <init>
+com.batch.android.user.UserDatabaseHelper -> com.batch.android.a1.g:
+# {"id":"sourceFile","fileName":"UserDatabaseHelper.java"}
+    java.lang.String COLUMN_TAG_COLLECTION -> g
+    java.lang.String TABLE_TAGS -> f
+    java.lang.String COLUMN_TAG_CHANGESET -> i
+    java.lang.String COLUMN_TAG_VALUE -> h
+    java.lang.String DATABASE_NAME -> j
+    int DATABASE_VERSION -> k
+    java.lang.String TABLE_ATTRIBUTES -> a
+    java.lang.String COLUMN_ATTR_TYPE -> c
+    java.lang.String COLUMN_ATTR_NAME -> b
+    java.lang.String COLUMN_ATTR_CHANGESET -> e
+    java.lang.String COLUMN_ATTR_VALUE -> d
+    1:1:void <init>(android.content.Context):34:34 -> <init>
+    1:25:void onCreate(android.database.sqlite.SQLiteDatabase):39:63 -> onCreate
+com.batch.android.user.UserDatasource -> com.batch.android.a1.h:
+# {"id":"sourceFile","fileName":"UserDatasource.java"}
+    void acquireTransactionLock(long) -> a
+    void clearTags(java.lang.String) -> a
+    java.lang.String printDebugDump() -> a
+    void setAttribute(java.lang.String,double) -> a
+    void setAttribute(java.lang.String,long) -> a
+    void setAttribute(java.lang.String,java.lang.String) -> a
+    void setAttribute(java.lang.String,java.net.URI) -> a
+    void setAttribute(java.lang.String,java.util.Date) -> a
+    void setAttribute(java.lang.String,boolean) -> a
+    void addTag(java.lang.String,java.lang.String) -> b
+    void commitTransaction() -> b
+    void removeAttribute(java.lang.String) -> b
+    void clearTags() -> c
+    void removeTag(java.lang.String,java.lang.String) -> c
+    void clearAttributes() -> d
+    java.util.HashMap getAttributes() -> e
+    java.util.Map getTagCollections() -> f
+    void rollbackTransaction() -> g
+com.batch.android.user.UserOperation -> com.batch.android.a1.i:
+# {"id":"sourceFile","fileName":"UserOperation.java"}
+    void execute(com.batch.android.user.SQLUserDatasource) -> a
+com.batch.android.user.UserOperationQueue -> com.batch.android.a1.j:
+# {"id":"sourceFile","fileName":"UserOperationQueue.java"}
+    java.util.List operationQueue -> a
+    1:2:void <init>():13:14 -> <init>
+    3:4:void <init>(java.util.List):17:18 -> <init>
+    1:3:void addFirstOperation(com.batch.android.user.UserOperation):36:38 -> a
+    4:8:java.util.List popOperations():46:50 -> a
+    1:3:void addOperation(com.batch.android.user.UserOperation):26:28 -> b
+    4:6:int size():58:60 -> b
+com.batch.android.util.MetaDataUtils -> com.batch.android.b1.a:
+# {"id":"sourceFile","fileName":"MetaDataUtils.java"}
+    java.lang.String MANIFEST_SENDER_ID_KEY -> a
+    java.lang.String MANIFEST_FORCE_FCM_IID_KEY -> b
+    1:1:void <init>():10:10 -> <init>
+    1:2:android.os.Bundle getAppMetaData(android.content.Context):25:26 -> a
+    3:8:boolean getBooleanMetaData(android.content.Context,java.lang.String):39:44 -> a
+    1:6:int getIntMetaData(android.content.Context,java.lang.String):58:63 -> b
+com.batch.android.webservice.listener.AttributesCheckWebserviceListener -> com.batch.android.c1.a:
+# {"id":"sourceFile","fileName":"AttributesCheckWebserviceListener.java"}
+    void onError(com.batch.android.FailReason) -> a
+    void onSuccess(com.batch.android.query.response.AttributesCheckResponse) -> a
+com.batch.android.webservice.listener.AttributesSendWebserviceListener -> com.batch.android.c1.b:
+# {"id":"sourceFile","fileName":"AttributesSendWebserviceListener.java"}
+    void onError(com.batch.android.FailReason) -> a
+    void onSuccess(com.batch.android.query.response.AttributesSendResponse) -> a
+com.batch.android.webservice.listener.DisplayReceiptWebserviceListener -> com.batch.android.c1.c:
+# {"id":"sourceFile","fileName":"DisplayReceiptWebserviceListener.java"}
+    void onFailure(com.batch.android.core.Webservice$WebserviceError) -> a
+com.batch.android.webservice.listener.InboxWebserviceListener -> com.batch.android.c1.d:
+# {"id":"sourceFile","fileName":"InboxWebserviceListener.java"}
+    void onFailure(java.lang.String) -> a
+    void onSuccess(com.batch.android.inbox.InboxWebserviceResponse) -> a
+com.batch.android.webservice.listener.LocalCampaignsJITWebserviceListener -> com.batch.android.c1.e:
+# {"id":"sourceFile","fileName":"LocalCampaignsJITWebserviceListener.java"}
+    void onFailure(com.batch.android.core.Webservice$WebserviceError) -> a
+    void onSuccess(java.util.List) -> a
+com.batch.android.webservice.listener.LocalCampaignsWebserviceListener -> com.batch.android.c1.f:
+# {"id":"sourceFile","fileName":"LocalCampaignsWebserviceListener.java"}
+    void onError(com.batch.android.FailReason) -> a
+    void onSuccess(java.util.List) -> a
+com.batch.android.webservice.listener.MetricWebserviceListener -> com.batch.android.c1.g:
+# {"id":"sourceFile","fileName":"MetricWebserviceListener.java"}
+    void onFailure(com.batch.android.core.Webservice$WebserviceError) -> a
+com.batch.android.webservice.listener.PushWebserviceListener -> com.batch.android.c1.h:
+# {"id":"sourceFile","fileName":"PushWebserviceListener.java"}
+    void onError(com.batch.android.FailReason) -> a
+com.batch.android.webservice.listener.StartWebserviceListener -> com.batch.android.c1.i:
+# {"id":"sourceFile","fileName":"StartWebserviceListener.java"}
+    void onError(com.batch.android.FailReason) -> a
+com.batch.android.webservice.listener.TrackerWebserviceListener -> com.batch.android.c1.j:
+# {"id":"sourceFile","fileName":"TrackerWebserviceListener.java"}
+    void onFailure(com.batch.android.FailReason,java.util.List) -> a
+    void onFinish() -> a
+    void onSuccess(java.util.List) -> a
+com.batch.android.webservice.listener.impl.AttributesCheckWebserviceListenerImpl -> com.batch.android.d1.a:
+# {"id":"sourceFile","fileName":"AttributesCheckWebserviceListenerImpl.java"}
+    long DEFAULT_RECHECK_TIME -> a
+    1:1:void <init>():12:12 -> <init>
+    1:38:void onSuccess(com.batch.android.query.response.AttributesCheckResponse):20:57 -> a
+    39:48:void onSuccess(com.batch.android.query.response.AttributesCheckResponse):38:47 -> a
+    49:87:void onSuccess(com.batch.android.query.response.AttributesCheckResponse):27:65 -> a
+    88:88:void onError(com.batch.android.FailReason):71:71 -> a
+com.batch.android.webservice.listener.impl.AttributesCheckWebserviceListenerImpl$1 -> com.batch.android.d1.a$a:
+# {"id":"sourceFile","fileName":"AttributesCheckWebserviceListenerImpl.java"}
+    int[] $SwitchMap$com$batch$android$query$response$AttributesCheckResponse$Action -> a
+    1:1:void <clinit>():20:20 -> <clinit>
+com.batch.android.webservice.listener.impl.AttributesSendWebserviceListenerImpl -> com.batch.android.d1.b:
+# {"id":"sourceFile","fileName":"AttributesSendWebserviceListenerImpl.java"}
+    1:1:void <init>():12:12 -> <init>
+    1:1:void onSuccess(com.batch.android.query.response.AttributesSendResponse):16:16 -> a
+    2:2:void onError(com.batch.android.FailReason):21:21 -> a
+com.batch.android.webservice.listener.impl.LocalCampaignsWebserviceListenerImpl -> com.batch.android.d1.c:
+# {"id":"sourceFile","fileName":"LocalCampaignsWebserviceListenerImpl.java"}
+    com.batch.android.module.LocalCampaignsModule localCampaignsModule -> a
+    com.batch.android.localcampaigns.CampaignManager campaignManager -> b
+    1:3:void <init>(com.batch.android.module.LocalCampaignsModule,com.batch.android.localcampaigns.CampaignManager):28:30 -> <init>
+    1:3:com.batch.android.webservice.listener.impl.LocalCampaignsWebserviceListenerImpl provide():35:37 -> a
+    4:5:void onSuccess(java.util.List):43:44 -> a
+    6:7:void onError(com.batch.android.FailReason):50:51 -> a
+    8:10:void handleInAppResponse(com.batch.android.query.response.LocalCampaignsResponse):55:57 -> a
+com.batch.android.webservice.listener.impl.PushWebserviceListenerImpl -> com.batch.android.d1.d:
+# {"id":"sourceFile","fileName":"PushWebserviceListenerImpl.java"}
+    1:1:void <init>():10:10 -> <init>
+    void onError(com.batch.android.FailReason) -> a
+com.batch.android.webservice.listener.impl.StartWebserviceListenerImpl -> com.batch.android.d1.e:
+# {"id":"sourceFile","fileName":"StartWebserviceListenerImpl.java"}
+    1:1:void <init>():10:10 -> <init>
+    void onError(com.batch.android.FailReason) -> a