From 7d3907665fc0664a32d43ff38831d2cea6f08117 Mon Sep 17 00:00:00 2001 From: HuYufei Date: Tue, 26 Dec 2023 11:52:53 +0800 Subject: [PATCH] init commit --- .gitignore | 2 + Adjust.meta | 3 + Adjust/3rd Party.meta | 9 + Adjust/3rd Party/SimpleJSON.cs | 1038 ++++++++++++++ Adjust/3rd Party/SimpleJSON.cs.meta | 8 + Adjust/Adjust.asmdef | 3 + Adjust/Adjust.asmdef.meta | 7 + Adjust/Android.meta | 9 + Adjust/Android/AdjustAndroid.cs | 1038 ++++++++++++++ Adjust/Android/AdjustAndroid.cs.meta | 8 + Adjust/Android/AdjustAndroidManifest.xml | 56 + Adjust/Android/AdjustAndroidManifest.xml.meta | 4 + Adjust/Android/adjust-android.jar | Bin 0 -> 280098 bytes Adjust/Android/adjust-android.jar.meta | 33 + Adjust/Editor.meta | 9 + Adjust/Editor/Adjust.Editor.asmdef | 18 + Adjust/Editor/Adjust.Editor.asmdef.meta | 3 + Adjust/Editor/AdjustCustomEditor.cs | 84 ++ Adjust/Editor/AdjustCustomEditor.cs.meta | 13 + Adjust/Editor/AdjustEditor.cs | 342 +++++ Adjust/Editor/AdjustEditor.cs.meta | 8 + Adjust/Editor/AdjustEditorPreprocessor.cs | 365 +++++ .../Editor/AdjustEditorPreprocessor.cs.meta | 13 + Adjust/Editor/AdjustSettings.cs | 161 +++ Adjust/Editor/AdjustSettings.cs.meta | 13 + Adjust/Editor/AdjustSettingsEditor.cs | 126 ++ Adjust/Editor/AdjustSettingsEditor.cs.meta | 11 + Adjust/ExampleGUI.meta | 9 + Adjust/ExampleGUI/ExampleGUI.cs | 290 ++++ Adjust/ExampleGUI/ExampleGUI.cs.meta | 8 + Adjust/ExampleGUI/ExampleGUI.prefab | 53 + Adjust/ExampleGUI/ExampleGUI.prefab.meta | 4 + Adjust/ExampleGUI/ExampleGUI.unity | 292 ++++ Adjust/ExampleGUI/ExampleGUI.unity.meta | 8 + Adjust/Prefab.meta | 9 + Adjust/Prefab/Adjust.prefab | 77 ++ Adjust/Prefab/Adjust.prefab.meta | 7 + Adjust/Unity.meta | 9 + Adjust/Unity/Adjust.cs | 1211 +++++++++++++++++ Adjust/Unity/Adjust.cs.meta | 8 + Adjust/Unity/AdjustAdRevenue.cs | 69 + Adjust/Unity/AdjustAdRevenue.cs.meta | 11 + Adjust/Unity/AdjustAppStorePurchase.cs | 19 + Adjust/Unity/AdjustAppStorePurchase.cs.meta | 11 + Adjust/Unity/AdjustAppStoreSubscription.cs | 56 + .../Unity/AdjustAppStoreSubscription.cs.meta | 11 + Adjust/Unity/AdjustAttribution.cs | 85 ++ Adjust/Unity/AdjustAttribution.cs.meta | 8 + Adjust/Unity/AdjustConfig.cs | 328 +++++ Adjust/Unity/AdjustConfig.cs.meta | 8 + Adjust/Unity/AdjustEnvironment.cs | 25 + Adjust/Unity/AdjustEnvironment.cs.meta | 8 + Adjust/Unity/AdjustEvent.cs | 90 ++ Adjust/Unity/AdjustEvent.cs.meta | 8 + Adjust/Unity/AdjustEventFailure.cs | 92 ++ Adjust/Unity/AdjustEventFailure.cs.meta | 12 + Adjust/Unity/AdjustEventSuccess.cs | 85 ++ Adjust/Unity/AdjustEventSuccess.cs.meta | 12 + Adjust/Unity/AdjustLogLevel.cs | 63 + Adjust/Unity/AdjustLogLevel.cs.meta | 8 + Adjust/Unity/AdjustPlayStorePurchase.cs | 17 + Adjust/Unity/AdjustPlayStorePurchase.cs.meta | 11 + Adjust/Unity/AdjustPlayStoreSubscription.cs | 54 + .../Unity/AdjustPlayStoreSubscription.cs.meta | 11 + .../Unity/AdjustPurchaseVerificationInfo.cs | 35 + .../AdjustPurchaseVerificationInfo.cs.meta | 11 + Adjust/Unity/AdjustSessionFailure.cs | 86 ++ Adjust/Unity/AdjustSessionFailure.cs.meta | 12 + Adjust/Unity/AdjustSessionSuccess.cs | 78 ++ Adjust/Unity/AdjustSessionSuccess.cs.meta | 12 + Adjust/Unity/AdjustThirdPartySharing.cs | 65 + Adjust/Unity/AdjustThirdPartySharing.cs.meta | 11 + Adjust/Unity/AdjustUrlStrategy.cs | 30 + Adjust/Unity/AdjustUrlStrategy.cs.meta | 13 + Adjust/Unity/AdjustUtils.cs | 374 +++++ Adjust/Unity/AdjustUtils.cs.meta | 12 + Adjust/Windows.meta | 9 + Adjust/Windows/AdjustWindows.cs | 340 +++++ Adjust/Windows/AdjustWindows.cs.meta | 12 + Adjust/Windows/Newtonsoft.Json.dll | Bin 0 -> 484864 bytes Adjust/Windows/Newtonsoft.Json.dll.meta | 142 ++ Adjust/Windows/Stubs.meta | 9 + Adjust/Windows/Stubs/Win10Interface.dll | Bin 0 -> 5632 bytes Adjust/Windows/Stubs/Win10Interface.dll.meta | 142 ++ Adjust/Windows/Stubs/Win81Interface.dll | Bin 0 -> 5632 bytes Adjust/Windows/Stubs/Win81Interface.dll.meta | 142 ++ Adjust/Windows/Stubs/WinWsInterface.dll | Bin 0 -> 5632 bytes Adjust/Windows/Stubs/WinWsInterface.dll.meta | 142 ++ Adjust/Windows/W81.meta | 9 + Adjust/Windows/W81/AdjustWP81.dll | Bin 0 -> 23552 bytes Adjust/Windows/W81/AdjustWP81.dll.meta | 132 ++ Adjust/Windows/W81/Win81Interface.dll | Bin 0 -> 11776 bytes Adjust/Windows/W81/Win81Interface.dll.meta | 132 ++ Adjust/Windows/WS.meta | 9 + Adjust/Windows/WS/AdjustWS.dll | Bin 0 -> 23552 bytes Adjust/Windows/WS/AdjustWS.dll.meta | 132 ++ Adjust/Windows/WS/WinWsInterface.dll | Bin 0 -> 11776 bytes Adjust/Windows/WS/WinWsInterface.dll.meta | 132 ++ Adjust/Windows/WU10.meta | 9 + Adjust/Windows/WU10/AdjustUAP10.dll | Bin 0 -> 24576 bytes Adjust/Windows/WU10/AdjustUAP10.dll.meta | 146 ++ Adjust/Windows/WU10/Win10Interface.dll | Bin 0 -> 13312 bytes Adjust/Windows/WU10/Win10Interface.dll.meta | 151 ++ Adjust/Windows/WindowsPcl.dll | Bin 0 -> 128000 bytes Adjust/Windows/WindowsPcl.dll.meta | 132 ++ Adjust/Windows/WindowsUap.dll | Bin 0 -> 17920 bytes Adjust/Windows/WindowsUap.dll.meta | 132 ++ Adjust/iOS.meta | 9 + Adjust/iOS/ADJAdRevenue.h | 80 ++ Adjust/iOS/ADJAdRevenue.h.meta | 24 + Adjust/iOS/ADJAttribution.h | 99 ++ Adjust/iOS/ADJAttribution.h.meta | 21 + Adjust/iOS/ADJConfig.h | 294 ++++ Adjust/iOS/ADJConfig.h.meta | 21 + Adjust/iOS/ADJEvent.h | 159 +++ Adjust/iOS/ADJEvent.h.meta | 21 + Adjust/iOS/ADJEventFailure.h | 55 + Adjust/iOS/ADJEventFailure.h.meta | 147 ++ Adjust/iOS/ADJEventSuccess.h | 50 + Adjust/iOS/ADJEventSuccess.h.meta | 147 ++ Adjust/iOS/ADJLinkResolution.h | 17 + Adjust/iOS/ADJLinkResolution.h.meta | 24 + Adjust/iOS/ADJLogger.h | 84 ++ Adjust/iOS/ADJLogger.h.meta | 21 + Adjust/iOS/ADJPurchase.h | 27 + Adjust/iOS/ADJPurchase.h.meta | 24 + Adjust/iOS/ADJPurchaseVerificationResult.h | 38 + .../iOS/ADJPurchaseVerificationResult.h.meta | 24 + Adjust/iOS/ADJSessionFailure.h | 45 + Adjust/iOS/ADJSessionFailure.h.meta | 147 ++ Adjust/iOS/ADJSessionSuccess.h | 40 + Adjust/iOS/ADJSessionSuccess.h.meta | 147 ++ Adjust/iOS/ADJSubscription.h | 44 + Adjust/iOS/ADJSubscription.h.meta | 24 + Adjust/iOS/ADJThirdPartySharing.h | 28 + Adjust/iOS/ADJThirdPartySharing.h.meta | 24 + Adjust/iOS/Adjust.h | 483 +++++++ Adjust/iOS/Adjust.h.meta | 21 + Adjust/iOS/AdjustSdk.a | Bin 0 -> 6784816 bytes Adjust/iOS/AdjustSdk.a.meta | 147 ++ Adjust/iOS/AdjustUnity.h | 14 + Adjust/iOS/AdjustUnity.h.meta | 21 + Adjust/iOS/AdjustUnity.mm | 945 +++++++++++++ Adjust/iOS/AdjustUnity.mm.meta | 131 ++ Adjust/iOS/AdjustUnityAppDelegate.h | 18 + Adjust/iOS/AdjustUnityAppDelegate.h.meta | 27 + Adjust/iOS/AdjustUnityAppDelegate.m | 73 + Adjust/iOS/AdjustUnityAppDelegate.m.meta | 37 + Adjust/iOS/AdjustUnityDelegate.h | 59 + Adjust/iOS/AdjustUnityDelegate.h.meta | 147 ++ Adjust/iOS/AdjustUnityDelegate.mm | 270 ++++ Adjust/iOS/AdjustUnityDelegate.mm.meta | 133 ++ Adjust/iOS/AdjustiOS.cs | 612 +++++++++ Adjust/iOS/AdjustiOS.cs.meta | 8 + Editor.meta | 8 + Editor/CodeMods.meta | 8 + Editor/CodeMods/AdjustMod.cs | 117 ++ Editor/CodeMods/AdjustMod.cs.meta | 3 + Editor/CodeMods/GuruAdjustCodeFixer.cs | 38 + Editor/CodeMods/GuruAdjustCodeFixer.cs.meta | 3 + Editor/GuruEditorAdjust.asmdef | 18 + Editor/GuruEditorAdjust.asmdef.meta | 3 + Editor/GuruEditorAdjust.meta | 3 + .../GuruEditorAdjust/GuruAdjustMenuItems.cs | 13 + .../GuruAdjustMenuItems.cs.meta | 3 + Editor/GuruEditorAdjust/GuruAdjustSdkAPI.cs | 107 ++ .../GuruEditorAdjust/GuruAdjustSdkAPI.cs.meta | 3 + README.md | 40 + README.md.meta | 3 + package.json | 11 + package.json.meta | 3 + 171 files changed, 14679 insertions(+) create mode 100644 .gitignore create mode 100644 Adjust.meta create mode 100644 Adjust/3rd Party.meta create mode 100644 Adjust/3rd Party/SimpleJSON.cs create mode 100644 Adjust/3rd Party/SimpleJSON.cs.meta create mode 100644 Adjust/Adjust.asmdef create mode 100644 Adjust/Adjust.asmdef.meta create mode 100644 Adjust/Android.meta create mode 100644 Adjust/Android/AdjustAndroid.cs create mode 100644 Adjust/Android/AdjustAndroid.cs.meta create mode 100644 Adjust/Android/AdjustAndroidManifest.xml create mode 100644 Adjust/Android/AdjustAndroidManifest.xml.meta create mode 100644 Adjust/Android/adjust-android.jar create mode 100644 Adjust/Android/adjust-android.jar.meta create mode 100644 Adjust/Editor.meta create mode 100644 Adjust/Editor/Adjust.Editor.asmdef create mode 100644 Adjust/Editor/Adjust.Editor.asmdef.meta create mode 100644 Adjust/Editor/AdjustCustomEditor.cs create mode 100644 Adjust/Editor/AdjustCustomEditor.cs.meta create mode 100644 Adjust/Editor/AdjustEditor.cs create mode 100644 Adjust/Editor/AdjustEditor.cs.meta create mode 100644 Adjust/Editor/AdjustEditorPreprocessor.cs create mode 100644 Adjust/Editor/AdjustEditorPreprocessor.cs.meta create mode 100644 Adjust/Editor/AdjustSettings.cs create mode 100644 Adjust/Editor/AdjustSettings.cs.meta create mode 100644 Adjust/Editor/AdjustSettingsEditor.cs create mode 100644 Adjust/Editor/AdjustSettingsEditor.cs.meta create mode 100644 Adjust/ExampleGUI.meta create mode 100644 Adjust/ExampleGUI/ExampleGUI.cs create mode 100644 Adjust/ExampleGUI/ExampleGUI.cs.meta create mode 100644 Adjust/ExampleGUI/ExampleGUI.prefab create mode 100644 Adjust/ExampleGUI/ExampleGUI.prefab.meta create mode 100644 Adjust/ExampleGUI/ExampleGUI.unity create mode 100644 Adjust/ExampleGUI/ExampleGUI.unity.meta create mode 100644 Adjust/Prefab.meta create mode 100644 Adjust/Prefab/Adjust.prefab create mode 100644 Adjust/Prefab/Adjust.prefab.meta create mode 100644 Adjust/Unity.meta create mode 100644 Adjust/Unity/Adjust.cs create mode 100644 Adjust/Unity/Adjust.cs.meta create mode 100644 Adjust/Unity/AdjustAdRevenue.cs create mode 100644 Adjust/Unity/AdjustAdRevenue.cs.meta create mode 100644 Adjust/Unity/AdjustAppStorePurchase.cs create mode 100644 Adjust/Unity/AdjustAppStorePurchase.cs.meta create mode 100644 Adjust/Unity/AdjustAppStoreSubscription.cs create mode 100644 Adjust/Unity/AdjustAppStoreSubscription.cs.meta create mode 100644 Adjust/Unity/AdjustAttribution.cs create mode 100644 Adjust/Unity/AdjustAttribution.cs.meta create mode 100644 Adjust/Unity/AdjustConfig.cs create mode 100644 Adjust/Unity/AdjustConfig.cs.meta create mode 100644 Adjust/Unity/AdjustEnvironment.cs create mode 100644 Adjust/Unity/AdjustEnvironment.cs.meta create mode 100644 Adjust/Unity/AdjustEvent.cs create mode 100644 Adjust/Unity/AdjustEvent.cs.meta create mode 100644 Adjust/Unity/AdjustEventFailure.cs create mode 100644 Adjust/Unity/AdjustEventFailure.cs.meta create mode 100644 Adjust/Unity/AdjustEventSuccess.cs create mode 100644 Adjust/Unity/AdjustEventSuccess.cs.meta create mode 100644 Adjust/Unity/AdjustLogLevel.cs create mode 100644 Adjust/Unity/AdjustLogLevel.cs.meta create mode 100644 Adjust/Unity/AdjustPlayStorePurchase.cs create mode 100644 Adjust/Unity/AdjustPlayStorePurchase.cs.meta create mode 100644 Adjust/Unity/AdjustPlayStoreSubscription.cs create mode 100644 Adjust/Unity/AdjustPlayStoreSubscription.cs.meta create mode 100644 Adjust/Unity/AdjustPurchaseVerificationInfo.cs create mode 100644 Adjust/Unity/AdjustPurchaseVerificationInfo.cs.meta create mode 100644 Adjust/Unity/AdjustSessionFailure.cs create mode 100644 Adjust/Unity/AdjustSessionFailure.cs.meta create mode 100644 Adjust/Unity/AdjustSessionSuccess.cs create mode 100644 Adjust/Unity/AdjustSessionSuccess.cs.meta create mode 100644 Adjust/Unity/AdjustThirdPartySharing.cs create mode 100644 Adjust/Unity/AdjustThirdPartySharing.cs.meta create mode 100644 Adjust/Unity/AdjustUrlStrategy.cs create mode 100644 Adjust/Unity/AdjustUrlStrategy.cs.meta create mode 100644 Adjust/Unity/AdjustUtils.cs create mode 100644 Adjust/Unity/AdjustUtils.cs.meta create mode 100644 Adjust/Windows.meta create mode 100644 Adjust/Windows/AdjustWindows.cs create mode 100644 Adjust/Windows/AdjustWindows.cs.meta create mode 100644 Adjust/Windows/Newtonsoft.Json.dll create mode 100644 Adjust/Windows/Newtonsoft.Json.dll.meta create mode 100644 Adjust/Windows/Stubs.meta create mode 100644 Adjust/Windows/Stubs/Win10Interface.dll create mode 100644 Adjust/Windows/Stubs/Win10Interface.dll.meta create mode 100644 Adjust/Windows/Stubs/Win81Interface.dll create mode 100644 Adjust/Windows/Stubs/Win81Interface.dll.meta create mode 100644 Adjust/Windows/Stubs/WinWsInterface.dll create mode 100644 Adjust/Windows/Stubs/WinWsInterface.dll.meta create mode 100644 Adjust/Windows/W81.meta create mode 100644 Adjust/Windows/W81/AdjustWP81.dll create mode 100644 Adjust/Windows/W81/AdjustWP81.dll.meta create mode 100644 Adjust/Windows/W81/Win81Interface.dll create mode 100644 Adjust/Windows/W81/Win81Interface.dll.meta create mode 100644 Adjust/Windows/WS.meta create mode 100644 Adjust/Windows/WS/AdjustWS.dll create mode 100644 Adjust/Windows/WS/AdjustWS.dll.meta create mode 100644 Adjust/Windows/WS/WinWsInterface.dll create mode 100644 Adjust/Windows/WS/WinWsInterface.dll.meta create mode 100644 Adjust/Windows/WU10.meta create mode 100644 Adjust/Windows/WU10/AdjustUAP10.dll create mode 100644 Adjust/Windows/WU10/AdjustUAP10.dll.meta create mode 100644 Adjust/Windows/WU10/Win10Interface.dll create mode 100644 Adjust/Windows/WU10/Win10Interface.dll.meta create mode 100644 Adjust/Windows/WindowsPcl.dll create mode 100644 Adjust/Windows/WindowsPcl.dll.meta create mode 100644 Adjust/Windows/WindowsUap.dll create mode 100644 Adjust/Windows/WindowsUap.dll.meta create mode 100644 Adjust/iOS.meta create mode 100644 Adjust/iOS/ADJAdRevenue.h create mode 100644 Adjust/iOS/ADJAdRevenue.h.meta create mode 100644 Adjust/iOS/ADJAttribution.h create mode 100644 Adjust/iOS/ADJAttribution.h.meta create mode 100644 Adjust/iOS/ADJConfig.h create mode 100644 Adjust/iOS/ADJConfig.h.meta create mode 100644 Adjust/iOS/ADJEvent.h create mode 100644 Adjust/iOS/ADJEvent.h.meta create mode 100644 Adjust/iOS/ADJEventFailure.h create mode 100644 Adjust/iOS/ADJEventFailure.h.meta create mode 100644 Adjust/iOS/ADJEventSuccess.h create mode 100644 Adjust/iOS/ADJEventSuccess.h.meta create mode 100644 Adjust/iOS/ADJLinkResolution.h create mode 100644 Adjust/iOS/ADJLinkResolution.h.meta create mode 100644 Adjust/iOS/ADJLogger.h create mode 100644 Adjust/iOS/ADJLogger.h.meta create mode 100644 Adjust/iOS/ADJPurchase.h create mode 100644 Adjust/iOS/ADJPurchase.h.meta create mode 100644 Adjust/iOS/ADJPurchaseVerificationResult.h create mode 100644 Adjust/iOS/ADJPurchaseVerificationResult.h.meta create mode 100644 Adjust/iOS/ADJSessionFailure.h create mode 100644 Adjust/iOS/ADJSessionFailure.h.meta create mode 100644 Adjust/iOS/ADJSessionSuccess.h create mode 100644 Adjust/iOS/ADJSessionSuccess.h.meta create mode 100644 Adjust/iOS/ADJSubscription.h create mode 100644 Adjust/iOS/ADJSubscription.h.meta create mode 100644 Adjust/iOS/ADJThirdPartySharing.h create mode 100644 Adjust/iOS/ADJThirdPartySharing.h.meta create mode 100644 Adjust/iOS/Adjust.h create mode 100644 Adjust/iOS/Adjust.h.meta create mode 100644 Adjust/iOS/AdjustSdk.a create mode 100644 Adjust/iOS/AdjustSdk.a.meta create mode 100644 Adjust/iOS/AdjustUnity.h create mode 100644 Adjust/iOS/AdjustUnity.h.meta create mode 100644 Adjust/iOS/AdjustUnity.mm create mode 100644 Adjust/iOS/AdjustUnity.mm.meta create mode 100644 Adjust/iOS/AdjustUnityAppDelegate.h create mode 100644 Adjust/iOS/AdjustUnityAppDelegate.h.meta create mode 100644 Adjust/iOS/AdjustUnityAppDelegate.m create mode 100644 Adjust/iOS/AdjustUnityAppDelegate.m.meta create mode 100644 Adjust/iOS/AdjustUnityDelegate.h create mode 100644 Adjust/iOS/AdjustUnityDelegate.h.meta create mode 100644 Adjust/iOS/AdjustUnityDelegate.mm create mode 100644 Adjust/iOS/AdjustUnityDelegate.mm.meta create mode 100644 Adjust/iOS/AdjustiOS.cs create mode 100644 Adjust/iOS/AdjustiOS.cs.meta create mode 100644 Editor.meta create mode 100644 Editor/CodeMods.meta create mode 100644 Editor/CodeMods/AdjustMod.cs create mode 100644 Editor/CodeMods/AdjustMod.cs.meta create mode 100644 Editor/CodeMods/GuruAdjustCodeFixer.cs create mode 100644 Editor/CodeMods/GuruAdjustCodeFixer.cs.meta create mode 100644 Editor/GuruEditorAdjust.asmdef create mode 100644 Editor/GuruEditorAdjust.asmdef.meta create mode 100644 Editor/GuruEditorAdjust.meta create mode 100644 Editor/GuruEditorAdjust/GuruAdjustMenuItems.cs create mode 100644 Editor/GuruEditorAdjust/GuruAdjustMenuItems.cs.meta create mode 100644 Editor/GuruEditorAdjust/GuruAdjustSdkAPI.cs create mode 100644 Editor/GuruEditorAdjust/GuruAdjustSdkAPI.cs.meta create mode 100644 README.md create mode 100644 README.md.meta create mode 100644 package.json create mode 100644 package.json.meta diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e6c2593 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Mac auto-generated system files +*.DS_Store* diff --git a/Adjust.meta b/Adjust.meta new file mode 100644 index 0000000..8d98d65 --- /dev/null +++ b/Adjust.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f6eb314a40e64090be99b81e9bbdd00d +timeCreated: 1701911403 \ No newline at end of file diff --git a/Adjust/3rd Party.meta b/Adjust/3rd Party.meta new file mode 100644 index 0000000..832fff0 --- /dev/null +++ b/Adjust/3rd Party.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 48d72eaa514ffd0449362a759c8e9a86 +folderAsset: yes +timeCreated: 1578652520 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/3rd Party/SimpleJSON.cs b/Adjust/3rd Party/SimpleJSON.cs new file mode 100644 index 0000000..0d85e5d --- /dev/null +++ b/Adjust/3rd Party/SimpleJSON.cs @@ -0,0 +1,1038 @@ +//#define USE_SharpZipLib +#if !UNITY_WEBPLAYER +#define USE_FileIO +#endif + +/* * * * * + * A simple JSON Parser / builder + * ------------------------------ + * + * It mainly has been written as a simple JSON parser. It can build a JSON string + * from the node-tree, or generate a node tree from any valid JSON string. + * + * If you want to use compression when saving to file / stream / B64 you have to include + * SharpZipLib ( http://www.icsharpcode.net/opensource/sharpziplib/ ) in your project and + * define "USE_SharpZipLib" at the top of the file + * + * Written by Bunny83 + * 2012-06-09 + * + * Features / attributes: + * - provides strongly typed node classes and lists / dictionaries + * - provides easy access to class members / array items / data values + * - the parser ignores data types. Each value is a string. + * - only double quotes (") are used for quoting strings. + * - values and names are not restricted to quoted strings. They simply add up and are trimmed. + * - There are only 3 types: arrays(JSONArray), objects(JSONClass) and values(JSONData) + * - provides "casting" properties to easily convert to / from those types: + * int / float / double / bool + * - provides a common interface for each node so no explicit casting is required. + * - the parser try to avoid errors, but if malformed JSON is parsed the result is undefined + * + * + * 2012-12-17 Update: + * - Added internal JSONLazyCreator class which simplifies the construction of a JSON tree + * Now you can simple reference any item that doesn't exist yet and it will return a JSONLazyCreator + * The class determines the required type by it's further use, creates the type and removes itself. + * - Added binary serialization / deserialization. + * - Added support for BZip2 zipped binary format. Requires the SharpZipLib ( http://www.icsharpcode.net/opensource/sharpziplib/ ) + * The usage of the SharpZipLib library can be disabled by removing or commenting out the USE_SharpZipLib define at the top + * - The serializer uses different types when it comes to store the values. Since my data values + * are all of type string, the serializer will "try" which format fits best. The order is: int, float, double, bool, string. + * It's not the most efficient way but for a moderate amount of data it should work on all platforms. + * + * * * * */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + + +namespace com.adjust.sdk +{ + public enum JSONBinaryTag + { + Array = 1, + Class = 2, + Value = 3, + IntValue = 4, + DoubleValue = 5, + BoolValue = 6, + FloatValue = 7, + } + + public class JSONNode + { + #region common interface + public virtual void Add(string aKey, JSONNode aItem){ } + public virtual JSONNode this[int aIndex] { get { return null; } set { } } + public virtual JSONNode this[string aKey] { get { return null; } set { } } + public virtual string Value { get { return ""; } set { } } + public virtual int Count { get { return 0; } } + + public virtual void Add(JSONNode aItem) + { + Add("", aItem); + } + + public virtual JSONNode Remove(string aKey) { return null; } + public virtual JSONNode Remove(int aIndex) { return null; } + public virtual JSONNode Remove(JSONNode aNode) { return aNode; } + + public virtual IEnumerable Childs { get { yield break;} } + public IEnumerable DeepChilds + { + get + { + foreach (var C in Childs) + foreach (var D in C.DeepChilds) + yield return D; + } + } + + public override string ToString() + { + return "JSONNode"; + } + public virtual string ToString(string aPrefix) + { + return "JSONNode"; + } + + #endregion common interface + + #region typecasting properties + public virtual int AsInt + { + get + { + int v = 0; + if (int.TryParse(Value,out v)) + return v; + return 0; + } + set + { + Value = value.ToString(); + } + } + public virtual float AsFloat + { + get + { + float v = 0.0f; + if (float.TryParse(Value,out v)) + return v; + return 0.0f; + } + set + { + Value = value.ToString(); + } + } + public virtual double AsDouble + { + get + { + double v = 0.0; + if (double.TryParse(Value,out v)) + return v; + return 0.0; + } + set + { + Value = value.ToString(); + } + } + public virtual bool AsBool + { + get + { + bool v = false; + if (bool.TryParse(Value,out v)) + return v; + return !string.IsNullOrEmpty(Value); + } + set + { + Value = (value)?"true":"false"; + } + } + public virtual JSONArray AsArray + { + get + { + return this as JSONArray; + } + } + public virtual JSONClass AsObject + { + get + { + return this as JSONClass; + } + } + + + #endregion typecasting properties + + #region operators + public static implicit operator JSONNode(string s) + { + return new JSONData(s); + } + public static implicit operator string(JSONNode d) + { + return (d == null)?null:d.Value; + } + public static bool operator ==(JSONNode a, object b) + { + if (b == null && a is JSONLazyCreator) + return true; + return System.Object.ReferenceEquals(a,b); + } + + public static bool operator !=(JSONNode a, object b) + { + return !(a == b); + } + public override bool Equals (object obj) + { + return System.Object.ReferenceEquals(this, obj); + } + public override int GetHashCode () + { + return base.GetHashCode(); + } + + + #endregion operators + + internal static string Escape(string aText) + { + string result = ""; + foreach(char c in aText) + { + switch(c) + { + case '\\' : result += "\\\\"; break; + case '\"' : result += "\\\""; break; + case '\n' : result += "\\n" ; break; + case '\r' : result += "\\r" ; break; + case '\t' : result += "\\t" ; break; + case '\b' : result += "\\b" ; break; + case '\f' : result += "\\f" ; break; + default : result += c ; break; + } + } + return result; + } + + public static JSONNode Parse(string aJSON) + { + Stack stack = new Stack(); + JSONNode ctx = null; + int i = 0; + string Token = ""; + string TokenName = ""; + bool QuoteMode = false; + while (i < aJSON.Length) + { + switch (aJSON[i]) + { + case '{': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + stack.Push(new JSONClass()); + if (ctx != null) + { + TokenName = TokenName.Trim(); + if (ctx is JSONArray) + ctx.Add(stack.Peek()); + else if (TokenName != "") + ctx.Add(TokenName,stack.Peek()); + } + TokenName = ""; + Token = ""; + ctx = stack.Peek(); + break; + + case '[': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + + stack.Push(new JSONArray()); + if (ctx != null) + { + TokenName = TokenName.Trim(); + if (ctx is JSONArray) + ctx.Add(stack.Peek()); + else if (TokenName != "") + ctx.Add(TokenName,stack.Peek()); + } + TokenName = ""; + Token = ""; + ctx = stack.Peek(); + break; + + case '}': + case ']': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + if (stack.Count == 0) + throw new Exception("JSON Parse: Too many closing brackets"); + + stack.Pop(); + if (Token != "") + { + TokenName = TokenName.Trim(); + if (ctx is JSONArray) + ctx.Add(Token); + else if (TokenName != "") + ctx.Add(TokenName,Token); + } + TokenName = ""; + Token = ""; + if (stack.Count>0) + ctx = stack.Peek(); + break; + + case ':': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + TokenName = Token; + Token = ""; + break; + + case '"': + QuoteMode ^= true; + break; + + case ',': + if (QuoteMode) + { + Token += aJSON[i]; + break; + } + if (Token != "") + { + if (ctx is JSONArray) + ctx.Add(Token); + else if (TokenName != "") + ctx.Add(TokenName, Token); + } + TokenName = ""; + Token = ""; + break; + + case '\r': + case '\n': + break; + + case ' ': + case '\t': + if (QuoteMode) + Token += aJSON[i]; + break; + + case '\\': + ++i; + if (QuoteMode) + { + char C = aJSON[i]; + switch (C) + { + case 't' : Token += '\t'; break; + case 'r' : Token += '\r'; break; + case 'n' : Token += '\n'; break; + case 'b' : Token += '\b'; break; + case 'f' : Token += '\f'; break; + case 'u': + { + string s = aJSON.Substring(i+1,4); + Token += (char)int.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier); + i += 4; + break; + } + default : Token += C; break; + } + } + break; + + default: + Token += aJSON[i]; + break; + } + ++i; + } + if (QuoteMode) + { + throw new Exception("JSON Parse: Quotation marks seems to be messed up."); + } + return ctx; + } + + public virtual void Serialize(System.IO.BinaryWriter aWriter) {} + + public void SaveToStream(System.IO.Stream aData) + { + var W = new System.IO.BinaryWriter(aData); + Serialize(W); + } + + #if USE_SharpZipLib + public void SaveToCompressedStream(System.IO.Stream aData) + { + using (var gzipOut = new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(aData)) + { + gzipOut.IsStreamOwner = false; + SaveToStream(gzipOut); + gzipOut.Close(); + } + } + + public void SaveToCompressedFile(string aFileName) + { + #if USE_FileIO + System.IO.Directory.CreateDirectory((new System.IO.FileInfo(aFileName)).Directory.FullName); + using(var F = System.IO.File.OpenWrite(aFileName)) + { + SaveToCompressedStream(F); + } + #else + throw new Exception("Can't use File IO stuff in webplayer"); + #endif + } + public string SaveToCompressedBase64() + { + using (var stream = new System.IO.MemoryStream()) + { + SaveToCompressedStream(stream); + stream.Position = 0; + return System.Convert.ToBase64String(stream.ToArray()); + } + } + + #else + public void SaveToCompressedStream(System.IO.Stream aData) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + public void SaveToCompressedFile(string aFileName) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + public string SaveToCompressedBase64() + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + #endif + + public static JSONNode Deserialize(System.IO.BinaryReader aReader) + { + JSONBinaryTag type = (JSONBinaryTag)aReader.ReadByte(); + switch(type) + { + case JSONBinaryTag.Array: + { + int count = aReader.ReadInt32(); + JSONArray tmp = new JSONArray(); + for(int i = 0; i < count; i++) + tmp.Add(Deserialize(aReader)); + return tmp; + } + case JSONBinaryTag.Class: + { + int count = aReader.ReadInt32(); + JSONClass tmp = new JSONClass(); + for(int i = 0; i < count; i++) + { + string key = aReader.ReadString(); + var val = Deserialize(aReader); + tmp.Add(key, val); + } + return tmp; + } + case JSONBinaryTag.Value: + { + return new JSONData(aReader.ReadString()); + } + case JSONBinaryTag.IntValue: + { + return new JSONData(aReader.ReadInt32()); + } + case JSONBinaryTag.DoubleValue: + { + return new JSONData(aReader.ReadDouble()); + } + case JSONBinaryTag.BoolValue: + { + return new JSONData(aReader.ReadBoolean()); + } + case JSONBinaryTag.FloatValue: + { + return new JSONData(aReader.ReadSingle()); + } + + default: + { + throw new Exception("Error deserializing JSON. Unknown tag: " + type); + } + } + } + + #if USE_SharpZipLib + public static JSONNode LoadFromCompressedStream(System.IO.Stream aData) + { + var zin = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(aData); + return LoadFromStream(zin); + } + public static JSONNode LoadFromCompressedFile(string aFileName) + { + #if USE_FileIO + using(var F = System.IO.File.OpenRead(aFileName)) + { + return LoadFromCompressedStream(F); + } + #else + throw new Exception("Can't use File IO stuff in webplayer"); + #endif + } + public static JSONNode LoadFromCompressedBase64(string aBase64) + { + var tmp = System.Convert.FromBase64String(aBase64); + var stream = new System.IO.MemoryStream(tmp); + stream.Position = 0; + return LoadFromCompressedStream(stream); + } + #else + public static JSONNode LoadFromCompressedFile(string aFileName) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + public static JSONNode LoadFromCompressedStream(System.IO.Stream aData) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + public static JSONNode LoadFromCompressedBase64(string aBase64) + { + throw new Exception("Can't use compressed functions. You need include the SharpZipLib and uncomment the define at the top of SimpleJSON"); + } + #endif + + public static JSONNode LoadFromStream(System.IO.Stream aData) + { + using(var R = new System.IO.BinaryReader(aData)) + { + return Deserialize(R); + } + } + public static JSONNode LoadFromBase64(string aBase64) + { + var tmp = System.Convert.FromBase64String(aBase64); + var stream = new System.IO.MemoryStream(tmp); + stream.Position = 0; + return LoadFromStream(stream); + } + } // End of JSONNode + + public class JSONArray : JSONNode, IEnumerable + { + private List m_List = new List(); + public override JSONNode this[int aIndex] + { + get + { + if (aIndex<0 || aIndex >= m_List.Count) + return new JSONLazyCreator(this); + return m_List[aIndex]; + } + set + { + if (aIndex<0 || aIndex >= m_List.Count) + m_List.Add(value); + else + m_List[aIndex] = value; + } + } + public override JSONNode this[string aKey] + { + get{ return new JSONLazyCreator(this);} + set{ m_List.Add(value); } + } + public override int Count + { + get { return m_List.Count; } + } + public override void Add(string aKey, JSONNode aItem) + { + m_List.Add(aItem); + } + public override JSONNode Remove(int aIndex) + { + if (aIndex < 0 || aIndex >= m_List.Count) + return null; + JSONNode tmp = m_List[aIndex]; + m_List.RemoveAt(aIndex); + return tmp; + } + public override JSONNode Remove(JSONNode aNode) + { + m_List.Remove(aNode); + return aNode; + } + public override IEnumerable Childs + { + get + { + foreach(JSONNode N in m_List) + yield return N; + } + } + public IEnumerator GetEnumerator() + { + foreach(JSONNode N in m_List) + yield return N; + } + public override string ToString() + { + string result = "[ "; + foreach (JSONNode N in m_List) + { + if (result.Length > 2) + result += ", "; + result += N.ToString(); + } + result += " ]"; + return result; + } + public override string ToString(string aPrefix) + { + string result = "[ "; + foreach (JSONNode N in m_List) + { + if (result.Length > 3) + result += ", "; + result += "\n" + aPrefix + " "; + result += N.ToString(aPrefix+" "); + } + result += "\n" + aPrefix + "]"; + return result; + } + public override void Serialize (System.IO.BinaryWriter aWriter) + { + aWriter.Write((byte)JSONBinaryTag.Array); + aWriter.Write(m_List.Count); + for(int i = 0; i < m_List.Count; i++) + { + m_List[i].Serialize(aWriter); + } + } + } // End of JSONArray + + public class JSONClass : JSONNode, IEnumerable + { + private Dictionary m_Dict = new Dictionary(); + public override JSONNode this[string aKey] + { + get + { + if (m_Dict.ContainsKey(aKey)) + return m_Dict[aKey]; + else + return new JSONLazyCreator(this, aKey); + } + set + { + if (m_Dict.ContainsKey(aKey)) + m_Dict[aKey] = value; + else + m_Dict.Add(aKey,value); + } + } + public override JSONNode this[int aIndex] + { + get + { + if (aIndex < 0 || aIndex >= m_Dict.Count) + return null; + return m_Dict.ElementAt(aIndex).Value; + } + set + { + if (aIndex < 0 || aIndex >= m_Dict.Count) + return; + string key = m_Dict.ElementAt(aIndex).Key; + m_Dict[key] = value; + } + } + public override int Count + { + get { return m_Dict.Count; } + } + + + public override void Add(string aKey, JSONNode aItem) + { + if (!string.IsNullOrEmpty(aKey)) + { + if (m_Dict.ContainsKey(aKey)) + m_Dict[aKey] = aItem; + else + m_Dict.Add(aKey, aItem); + } + else + m_Dict.Add(Guid.NewGuid().ToString(), aItem); + } + + public override JSONNode Remove(string aKey) + { + if (!m_Dict.ContainsKey(aKey)) + return null; + JSONNode tmp = m_Dict[aKey]; + m_Dict.Remove(aKey); + return tmp; + } + public override JSONNode Remove(int aIndex) + { + if (aIndex < 0 || aIndex >= m_Dict.Count) + return null; + var item = m_Dict.ElementAt(aIndex); + m_Dict.Remove(item.Key); + return item.Value; + } + public override JSONNode Remove(JSONNode aNode) + { + try + { + var item = m_Dict.Where(k => k.Value == aNode).First(); + m_Dict.Remove(item.Key); + return aNode; + } + catch + { + return null; + } + } + + public override IEnumerable Childs + { + get + { + foreach(KeyValuePair N in m_Dict) + yield return N.Value; + } + } + + public IEnumerator GetEnumerator() + { + foreach(KeyValuePair N in m_Dict) + yield return N; + } + public override string ToString() + { + string result = "{"; + foreach (KeyValuePair N in m_Dict) + { + if (result.Length > 2) + result += ", "; + result += "\"" + Escape(N.Key) + "\":" + N.Value.ToString(); + } + result += "}"; + return result; + } + public override string ToString(string aPrefix) + { + string result = "{ "; + foreach (KeyValuePair N in m_Dict) + { + if (result.Length > 3) + result += ", "; + result += "\n" + aPrefix + " "; + result += "\"" + Escape(N.Key) + "\" : " + N.Value.ToString(aPrefix+" "); + } + result += "\n" + aPrefix + "}"; + return result; + } + public override void Serialize (System.IO.BinaryWriter aWriter) + { + aWriter.Write((byte)JSONBinaryTag.Class); + aWriter.Write(m_Dict.Count); + foreach(string K in m_Dict.Keys) + { + aWriter.Write(K); + m_Dict[K].Serialize(aWriter); + } + } + } // End of JSONClass + + public class JSONData : JSONNode + { + private string m_Data; + public override string Value + { + get { return m_Data; } + set { m_Data = value; } + } + public JSONData(string aData) + { + m_Data = aData; + } + public JSONData(float aData) + { + AsFloat = aData; + } + public JSONData(double aData) + { + AsDouble = aData; + } + public JSONData(bool aData) + { + AsBool = aData; + } + public JSONData(int aData) + { + AsInt = aData; + } + + public override string ToString() + { + return "\"" + Escape(m_Data) + "\""; + } + public override string ToString(string aPrefix) + { + return "\"" + Escape(m_Data) + "\""; + } + public override void Serialize (System.IO.BinaryWriter aWriter) + { + var tmp = new JSONData(""); + + tmp.AsInt = AsInt; + if (tmp.m_Data == this.m_Data) + { + aWriter.Write((byte)JSONBinaryTag.IntValue); + aWriter.Write(AsInt); + return; + } + tmp.AsFloat = AsFloat; + if (tmp.m_Data == this.m_Data) + { + aWriter.Write((byte)JSONBinaryTag.FloatValue); + aWriter.Write(AsFloat); + return; + } + tmp.AsDouble = AsDouble; + if (tmp.m_Data == this.m_Data) + { + aWriter.Write((byte)JSONBinaryTag.DoubleValue); + aWriter.Write(AsDouble); + return; + } + + tmp.AsBool = AsBool; + if (tmp.m_Data == this.m_Data) + { + aWriter.Write((byte)JSONBinaryTag.BoolValue); + aWriter.Write(AsBool); + return; + } + aWriter.Write((byte)JSONBinaryTag.Value); + aWriter.Write(m_Data); + } + } // End of JSONData + + internal class JSONLazyCreator : JSONNode + { + private JSONNode m_Node = null; + private string m_Key = null; + + public JSONLazyCreator(JSONNode aNode) + { + m_Node = aNode; + m_Key = null; + } + public JSONLazyCreator(JSONNode aNode, string aKey) + { + m_Node = aNode; + m_Key = aKey; + } + + private void Set(JSONNode aVal) + { + if (m_Key == null) + { + m_Node.Add(aVal); + } + else + { + m_Node.Add(m_Key, aVal); + } + m_Node = null; // Be GC friendly. + } + + public override JSONNode this[int aIndex] + { + get + { + return new JSONLazyCreator(this); + } + set + { + var tmp = new JSONArray(); + tmp.Add(value); + Set(tmp); + } + } + + public override JSONNode this[string aKey] + { + get + { + return new JSONLazyCreator(this, aKey); + } + set + { + var tmp = new JSONClass(); + tmp.Add(aKey, value); + Set(tmp); + } + } + public override void Add (JSONNode aItem) + { + var tmp = new JSONArray(); + tmp.Add(aItem); + Set(tmp); + } + public override void Add (string aKey, JSONNode aItem) + { + var tmp = new JSONClass(); + tmp.Add(aKey, aItem); + Set(tmp); + } + public static bool operator ==(JSONLazyCreator a, object b) + { + if (b == null) + return true; + return System.Object.ReferenceEquals(a,b); + } + + public static bool operator !=(JSONLazyCreator a, object b) + { + return !(a == b); + } + public override bool Equals (object obj) + { + if (obj == null) + return true; + return System.Object.ReferenceEquals(this, obj); + } + public override int GetHashCode () + { + return base.GetHashCode(); + } + + public override string ToString() + { + return ""; + } + public override string ToString(string aPrefix) + { + return ""; + } + + public override int AsInt + { + get + { + JSONData tmp = new JSONData(0); + Set(tmp); + return 0; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + public override float AsFloat + { + get + { + JSONData tmp = new JSONData(0.0f); + Set(tmp); + return 0.0f; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + public override double AsDouble + { + get + { + JSONData tmp = new JSONData(0.0); + Set(tmp); + return 0.0; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + public override bool AsBool + { + get + { + JSONData tmp = new JSONData(false); + Set(tmp); + return false; + } + set + { + JSONData tmp = new JSONData(value); + Set(tmp); + } + } + public override JSONArray AsArray + { + get + { + JSONArray tmp = new JSONArray(); + Set(tmp); + return tmp; + } + } + public override JSONClass AsObject + { + get + { + JSONClass tmp = new JSONClass(); + Set(tmp); + return tmp; + } + } + } // End of JSONLazyCreator + + public static class JSON + { + public static JSONNode Parse(string aJSON) + { + return JSONNode.Parse(aJSON); + } + } +} \ No newline at end of file diff --git a/Adjust/3rd Party/SimpleJSON.cs.meta b/Adjust/3rd Party/SimpleJSON.cs.meta new file mode 100644 index 0000000..a28238d --- /dev/null +++ b/Adjust/3rd Party/SimpleJSON.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c780c17852614618be5ffd9cc43a75f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Adjust/Adjust.asmdef b/Adjust/Adjust.asmdef new file mode 100644 index 0000000..6dea7a6 --- /dev/null +++ b/Adjust/Adjust.asmdef @@ -0,0 +1,3 @@ +{ + "name": "Adjust" +} diff --git a/Adjust/Adjust.asmdef.meta b/Adjust/Adjust.asmdef.meta new file mode 100644 index 0000000..6a438a3 --- /dev/null +++ b/Adjust/Adjust.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 052c31a56689f4aeea54d292c3e95e89 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Android.meta b/Adjust/Android.meta new file mode 100644 index 0000000..1700eda --- /dev/null +++ b/Adjust/Android.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 64b3fa260fe5b3c4e9215ec9b42c90da +folderAsset: yes +timeCreated: 1578652520 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Android/AdjustAndroid.cs b/Adjust/Android/AdjustAndroid.cs new file mode 100644 index 0000000..fdaa33b --- /dev/null +++ b/Adjust/Android/AdjustAndroid.cs @@ -0,0 +1,1038 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace com.adjust.sdk +{ +#if UNITY_ANDROID + public class AdjustAndroid + { + private const string sdkPrefix = "unity4.36.0"; + private static bool launchDeferredDeeplink = true; + private static AndroidJavaClass ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust"); + private static AndroidJavaObject ajoCurrentActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity"); + private static DeferredDeeplinkListener onDeferredDeeplinkListener; + private static AttributionChangeListener onAttributionChangedListener; + private static EventTrackingFailedListener onEventTrackingFailedListener; + private static EventTrackingSucceededListener onEventTrackingSucceededListener; + private static SessionTrackingFailedListener onSessionTrackingFailedListener; + private static SessionTrackingSucceededListener onSessionTrackingSucceededListener; + private static VerificationInfoListener onVerificationInfoListener; + + public static void Start(AdjustConfig adjustConfig) + { + // Thank you, Unity 2019.2.0, for breaking this. + // AndroidJavaObject ajoEnvironment = adjustConfig.environment == AdjustEnvironment.Sandbox ? + // new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic("ENVIRONMENT_SANDBOX") : + // new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic("ENVIRONMENT_PRODUCTION"); + + // Get environment variable. + string ajoEnvironment = adjustConfig.environment == AdjustEnvironment.Production ? "production" : "sandbox"; + + // Create adjust config object. + AndroidJavaObject ajoAdjustConfig; + + // Check if suppress log leve is supported. + if (adjustConfig.allowSuppressLogLevel != null) + { + ajoAdjustConfig = new AndroidJavaObject("com.adjust.sdk.AdjustConfig", ajoCurrentActivity, adjustConfig.appToken, ajoEnvironment, adjustConfig.allowSuppressLogLevel); + } + else + { + ajoAdjustConfig = new AndroidJavaObject("com.adjust.sdk.AdjustConfig", ajoCurrentActivity, adjustConfig.appToken, ajoEnvironment); + } + + // Check if deferred deeplink should be launched by SDK. + launchDeferredDeeplink = adjustConfig.launchDeferredDeeplink; + + // Check log level. + if (adjustConfig.logLevel != null) + { + AndroidJavaObject ajoLogLevel; + if (adjustConfig.logLevel.Value.ToUppercaseString().Equals("SUPPRESS")) + { + ajoLogLevel = new AndroidJavaClass("com.adjust.sdk.LogLevel").GetStatic("SUPRESS"); + } + else + { + ajoLogLevel = new AndroidJavaClass("com.adjust.sdk.LogLevel").GetStatic(adjustConfig.logLevel.Value.ToUppercaseString()); + } + + if (ajoLogLevel != null) + { + ajoAdjustConfig.Call("setLogLevel", ajoLogLevel); + } + } + + // Set unity SDK prefix. + ajoAdjustConfig.Call("setSdkPrefix", sdkPrefix); + + // Check if user has configured the delayed start option. + if (adjustConfig.delayStart != null) + { + ajoAdjustConfig.Call("setDelayStart", adjustConfig.delayStart); + } + + // Check event buffering setting. + if (adjustConfig.eventBufferingEnabled != null) + { + AndroidJavaObject ajoIsEnabled = new AndroidJavaObject("java.lang.Boolean", adjustConfig.eventBufferingEnabled.Value); + ajoAdjustConfig.Call("setEventBufferingEnabled", ajoIsEnabled); + } + + // Check COPPA setting. + if (adjustConfig.coppaCompliantEnabled != null) + { + ajoAdjustConfig.Call("setCoppaCompliantEnabled", adjustConfig.coppaCompliantEnabled.Value); + } + + // Check final Android attribution setting. + if (adjustConfig.finalAndroidAttributionEnabled != null) + { + ajoAdjustConfig.Call("setFinalAttributionEnabled", adjustConfig.finalAndroidAttributionEnabled.Value); + } + + // Check read Android IDs only once. + if (adjustConfig.readDeviceInfoOnceEnabled != null) + { + ajoAdjustConfig.Call("setReadDeviceInfoOnceEnabled", adjustConfig.readDeviceInfoOnceEnabled.Value); + } + + // Check Play Store Kids Apps setting. + if (adjustConfig.playStoreKidsAppEnabled != null) + { + ajoAdjustConfig.Call("setPlayStoreKidsAppEnabled", adjustConfig.playStoreKidsAppEnabled.Value); + } + + // Check if user enabled tracking in the background. + if (adjustConfig.sendInBackground != null) + { + ajoAdjustConfig.Call("setSendInBackground", adjustConfig.sendInBackground.Value); + } + + // Check if user wants to get cost data in attribution callback. + if (adjustConfig.needsCost != null) + { + ajoAdjustConfig.Call("setNeedsCost", adjustConfig.needsCost.Value); + } + + // Check if user wants to run preinstall campaigns. + if (adjustConfig.preinstallTrackingEnabled != null) + { + ajoAdjustConfig.Call("setPreinstallTrackingEnabled", adjustConfig.preinstallTrackingEnabled.Value); + } + + // Check if user has set custom preinstall file path. + if (adjustConfig.preinstallFilePath != null) + { + ajoAdjustConfig.Call("setPreinstallFilePath", adjustConfig.preinstallFilePath); + } + + // Check if FB app ID has been set. + if (adjustConfig.fbAppId != null) + { + ajoAdjustConfig.Call("setFbAppId", adjustConfig.fbAppId); + } + + // Check if user has set user agent value. + if (adjustConfig.userAgent != null) + { + ajoAdjustConfig.Call("setUserAgent", adjustConfig.userAgent); + } + + // Check if user has set default process name. + if (!String.IsNullOrEmpty(adjustConfig.processName)) + { + ajoAdjustConfig.Call("setProcessName", adjustConfig.processName); + } + + // Check if user has set default tracker token. + if (adjustConfig.defaultTracker != null) + { + ajoAdjustConfig.Call("setDefaultTracker", adjustConfig.defaultTracker); + } + + // Check if user has set external device identifier. + if (adjustConfig.externalDeviceId != null) + { + ajoAdjustConfig.Call("setExternalDeviceId", adjustConfig.externalDeviceId); + } + + // Check if user has set custom URL strategy. + if (adjustConfig.urlStrategy != null) + { + if (adjustConfig.urlStrategy == AdjustConfig.AdjustUrlStrategyChina) + { + AndroidJavaObject ajoUrlStrategyChina = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic("URL_STRATEGY_CHINA"); + ajoAdjustConfig.Call("setUrlStrategy", ajoUrlStrategyChina); + } + else if (adjustConfig.urlStrategy == AdjustConfig.AdjustUrlStrategyIndia) + { + AndroidJavaObject ajoUrlStrategyIndia = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic("URL_STRATEGY_INDIA"); + ajoAdjustConfig.Call("setUrlStrategy", ajoUrlStrategyIndia); + } + else if (adjustConfig.urlStrategy == AdjustConfig.AdjustUrlStrategyCn) + { + AndroidJavaObject ajoUrlStrategyCn = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic("URL_STRATEGY_CN"); + ajoAdjustConfig.Call("setUrlStrategy", ajoUrlStrategyCn); + } + else if (adjustConfig.urlStrategy == AdjustConfig.AdjustUrlStrategyCnOnly) + { + AndroidJavaObject ajoUrlStrategyCnOnly = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic("URL_STRATEGY_CN_ONLY"); + ajoAdjustConfig.Call("setUrlStrategy", ajoUrlStrategyCnOnly); + } + else if (adjustConfig.urlStrategy == AdjustConfig.AdjustDataResidencyEU) + { + AndroidJavaObject ajoDataResidencyEU = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic("DATA_RESIDENCY_EU"); + ajoAdjustConfig.Call("setUrlStrategy", ajoDataResidencyEU); + } + else if (adjustConfig.urlStrategy == AdjustConfig.AdjustDataResidencyTR) + { + AndroidJavaObject ajoDataResidencyTR = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic("DATA_RESIDENCY_TR"); + ajoAdjustConfig.Call("setUrlStrategy", ajoDataResidencyTR); + } + else if (adjustConfig.urlStrategy == AdjustConfig.AdjustDataResidencyUS) + { + AndroidJavaObject ajoDataResidencyUS = new AndroidJavaClass("com.adjust.sdk.AdjustConfig").GetStatic("DATA_RESIDENCY_US"); + ajoAdjustConfig.Call("setUrlStrategy", ajoDataResidencyUS); + } + } + + // Check if user has set app secret. + if (IsAppSecretSet(adjustConfig)) + { + ajoAdjustConfig.Call("setAppSecret", + adjustConfig.secretId.Value, + adjustConfig.info1.Value, + adjustConfig.info2.Value, + adjustConfig.info3.Value, + adjustConfig.info4.Value); + } + + // Check if user has set device as known. + if (adjustConfig.isDeviceKnown.HasValue) + { + ajoAdjustConfig.Call("setDeviceKnown", adjustConfig.isDeviceKnown.Value); + } + + // Check if user has enabled reading of IMEI and MEID. + // Obsolete method. + if (adjustConfig.readImei.HasValue) + { + // ajoAdjustConfig.Call("setReadMobileEquipmentIdentity", adjustConfig.readImei.Value); + } + + // Check attribution changed delagate setting. + if (adjustConfig.attributionChangedDelegate != null) + { + onAttributionChangedListener = new AttributionChangeListener(adjustConfig.attributionChangedDelegate); + ajoAdjustConfig.Call("setOnAttributionChangedListener", onAttributionChangedListener); + } + + // Check event success delegate setting. + if (adjustConfig.eventSuccessDelegate != null) + { + onEventTrackingSucceededListener = new EventTrackingSucceededListener(adjustConfig.eventSuccessDelegate); + ajoAdjustConfig.Call("setOnEventTrackingSucceededListener", onEventTrackingSucceededListener); + } + + // Check event failure delagate setting. + if (adjustConfig.eventFailureDelegate != null) + { + onEventTrackingFailedListener = new EventTrackingFailedListener(adjustConfig.eventFailureDelegate); + ajoAdjustConfig.Call("setOnEventTrackingFailedListener", onEventTrackingFailedListener); + } + + // Check session success delegate setting. + if (adjustConfig.sessionSuccessDelegate != null) + { + onSessionTrackingSucceededListener = new SessionTrackingSucceededListener(adjustConfig.sessionSuccessDelegate); + ajoAdjustConfig.Call("setOnSessionTrackingSucceededListener", onSessionTrackingSucceededListener); + } + + // Check session failure delegate setting. + if (adjustConfig.sessionFailureDelegate != null) + { + onSessionTrackingFailedListener = new SessionTrackingFailedListener(adjustConfig.sessionFailureDelegate); + ajoAdjustConfig.Call("setOnSessionTrackingFailedListener", onSessionTrackingFailedListener); + } + + // Check deferred deeplink delegate setting. + if (adjustConfig.deferredDeeplinkDelegate != null) + { + onDeferredDeeplinkListener = new DeferredDeeplinkListener(adjustConfig.deferredDeeplinkDelegate); + ajoAdjustConfig.Call("setOnDeeplinkResponseListener", onDeferredDeeplinkListener); + } + + // Initialise and start the SDK. + ajcAdjust.CallStatic("onCreate", ajoAdjustConfig); + ajcAdjust.CallStatic("onResume"); + } + + public static void TrackEvent(AdjustEvent adjustEvent) + { + AndroidJavaObject ajoAdjustEvent = new AndroidJavaObject("com.adjust.sdk.AdjustEvent", adjustEvent.eventToken); + + // Check if user has set revenue for the event. + if (adjustEvent.revenue != null) + { + ajoAdjustEvent.Call("setRevenue", (double)adjustEvent.revenue, adjustEvent.currency); + } + + // Check if user has added any callback parameters to the event. + if (adjustEvent.callbackList != null) + { + for (int i = 0; i < adjustEvent.callbackList.Count; i += 2) + { + string key = adjustEvent.callbackList[i]; + string value = adjustEvent.callbackList[i + 1]; + ajoAdjustEvent.Call("addCallbackParameter", key, value); + } + } + + // Check if user has added any partner parameters to the event. + if (adjustEvent.partnerList != null) + { + for (int i = 0; i < adjustEvent.partnerList.Count; i += 2) + { + string key = adjustEvent.partnerList[i]; + string value = adjustEvent.partnerList[i + 1]; + ajoAdjustEvent.Call("addPartnerParameter", key, value); + } + } + + // Check if user has added transaction ID to the event. + if (adjustEvent.transactionId != null) + { + ajoAdjustEvent.Call("setOrderId", adjustEvent.transactionId); + } + + // Check if user has added callback ID to the event. + if (adjustEvent.callbackId != null) + { + ajoAdjustEvent.Call("setCallbackId", adjustEvent.callbackId); + } + + // Check if user has added product ID to the event. + if (adjustEvent.productId != null) + { + ajoAdjustEvent.Call("setProductId", adjustEvent.productId); + } + + // Check if user has added purchase token to the event. + if (adjustEvent.purchaseToken != null) + { + ajoAdjustEvent.Call("setPurchaseToken", adjustEvent.purchaseToken); + } + + // Track the event. + ajcAdjust.CallStatic("trackEvent", ajoAdjustEvent); + } + + public static bool IsEnabled() + { + return ajcAdjust.CallStatic("isEnabled"); + } + + public static void SetEnabled(bool enabled) + { + ajcAdjust.CallStatic("setEnabled", enabled); + } + + public static void SetOfflineMode(bool enabled) + { + ajcAdjust.CallStatic("setOfflineMode", enabled); + } + + public static void SendFirstPackages() + { + ajcAdjust.CallStatic("sendFirstPackages"); + } + + public static void SetDeviceToken(string deviceToken) + { + ajcAdjust.CallStatic("setPushToken", deviceToken, ajoCurrentActivity); + } + + public static string GetAdid() + { + return ajcAdjust.CallStatic("getAdid"); + } + + public static void GdprForgetMe() + { + ajcAdjust.CallStatic("gdprForgetMe", ajoCurrentActivity); + } + + public static void DisableThirdPartySharing() + { + ajcAdjust.CallStatic("disableThirdPartySharing", ajoCurrentActivity); + } + + public static AdjustAttribution GetAttribution() + { + try + { + AndroidJavaObject ajoAttribution = ajcAdjust.CallStatic("getAttribution"); + if (null == ajoAttribution) + { + return null; + } + + AdjustAttribution adjustAttribution = new AdjustAttribution(); + adjustAttribution.trackerName = ajoAttribution.Get(AdjustUtils.KeyTrackerName) == "" ? + null : ajoAttribution.Get(AdjustUtils.KeyTrackerName); + adjustAttribution.trackerToken = ajoAttribution.Get(AdjustUtils.KeyTrackerToken) == "" ? + null : ajoAttribution.Get(AdjustUtils.KeyTrackerToken); + adjustAttribution.network = ajoAttribution.Get(AdjustUtils.KeyNetwork) == "" ? + null : ajoAttribution.Get(AdjustUtils.KeyNetwork); + adjustAttribution.campaign = ajoAttribution.Get(AdjustUtils.KeyCampaign) == "" ? + null : ajoAttribution.Get(AdjustUtils.KeyCampaign); + adjustAttribution.adgroup = ajoAttribution.Get(AdjustUtils.KeyAdgroup) == "" ? + null : ajoAttribution.Get(AdjustUtils.KeyAdgroup); + adjustAttribution.creative = ajoAttribution.Get(AdjustUtils.KeyCreative) == "" ? + null : ajoAttribution.Get(AdjustUtils.KeyCreative); + adjustAttribution.clickLabel = ajoAttribution.Get(AdjustUtils.KeyClickLabel) == "" ? + null : ajoAttribution.Get(AdjustUtils.KeyClickLabel); + adjustAttribution.adid = ajoAttribution.Get(AdjustUtils.KeyAdid) == "" ? + null : ajoAttribution.Get(AdjustUtils.KeyAdid); + adjustAttribution.costType = ajoAttribution.Get(AdjustUtils.KeyCostType) == "" ? + null : ajoAttribution.Get(AdjustUtils.KeyCostType); + AndroidJavaObject ajoCostAmount = ajoAttribution.Get(AdjustUtils.KeyCostAmount) == null ? + null : ajoAttribution.Get(AdjustUtils.KeyCostAmount); + if (ajoCostAmount == null) + { + adjustAttribution.costAmount = null; + } + else + { + double costAmount = ajoCostAmount.Call("doubleValue"); + adjustAttribution.costAmount = costAmount; + } + adjustAttribution.costCurrency = ajoAttribution.Get(AdjustUtils.KeyCostCurrency) == "" ? + null : ajoAttribution.Get(AdjustUtils.KeyCostCurrency); + adjustAttribution.fbInstallReferrer = ajoAttribution.Get(AdjustUtils.KeyFbInstallReferrer) == "" ? + null : ajoAttribution.Get(AdjustUtils.KeyFbInstallReferrer); + return adjustAttribution; + } + catch (Exception) {} + + return null; + } + + public static void AddSessionPartnerParameter(string key, string value) + { + if (ajcAdjust == null) + { + ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust"); + } + ajcAdjust.CallStatic("addSessionPartnerParameter", key, value); + } + + public static void AddSessionCallbackParameter(string key, string value) + { + if (ajcAdjust == null) + { + ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust"); + } + ajcAdjust.CallStatic("addSessionCallbackParameter", key, value); + } + + public static void RemoveSessionPartnerParameter(string key) + { + if (ajcAdjust == null) + { + ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust"); + } + ajcAdjust.CallStatic("removeSessionPartnerParameter", key); + } + + public static void RemoveSessionCallbackParameter(string key) + { + if (ajcAdjust == null) + { + ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust"); + } + ajcAdjust.CallStatic("removeSessionCallbackParameter", key); + } + + public static void ResetSessionPartnerParameters() + { + if (ajcAdjust == null) + { + ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust"); + } + ajcAdjust.CallStatic("resetSessionPartnerParameters"); + } + + public static void ResetSessionCallbackParameters() + { + if (ajcAdjust == null) + { + ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust"); + } + ajcAdjust.CallStatic("resetSessionCallbackParameters"); + } + + public static void AppWillOpenUrl(string url) + { + AndroidJavaClass ajcUri = new AndroidJavaClass("android.net.Uri"); + AndroidJavaObject ajoUri = ajcUri.CallStatic("parse", url); + ajcAdjust.CallStatic("appWillOpenUrl", ajoUri, ajoCurrentActivity); + } + + public static void TrackAdRevenue(string source, string payload) + { + if (ajcAdjust == null) + { + ajcAdjust = new AndroidJavaClass("com.adjust.sdk.Adjust"); + } + AndroidJavaObject jsonPayload = new AndroidJavaObject("org.json.JSONObject", payload); + ajcAdjust.CallStatic("trackAdRevenue", source, jsonPayload); + } + + public static void TrackAdRevenue(AdjustAdRevenue adRevenue) + { + AndroidJavaObject ajoAdjustAdRevenue = new AndroidJavaObject("com.adjust.sdk.AdjustAdRevenue", adRevenue.source); + + // Check if user has set revenue. + if (adRevenue.revenue != null) + { + AndroidJavaObject ajoRevenue = new AndroidJavaObject("java.lang.Double", adRevenue.revenue); + ajoAdjustAdRevenue.Call("setRevenue", ajoRevenue, adRevenue.currency); + } + + // Check if user has set ad impressions count. + if (adRevenue.adImpressionsCount != null) + { + AndroidJavaObject ajoAdImpressionsCount = new AndroidJavaObject("java.lang.Integer", adRevenue.adImpressionsCount); + ajoAdjustAdRevenue.Call("setAdImpressionsCount", ajoAdImpressionsCount); + } + + // Check if user has set ad revenue network. + if (adRevenue.adRevenueNetwork != null) + { + ajoAdjustAdRevenue.Call("setAdRevenueNetwork", adRevenue.adRevenueNetwork); + } + + // Check if user has set ad revenue unit. + if (adRevenue.adRevenueUnit != null) + { + ajoAdjustAdRevenue.Call("setAdRevenueUnit", adRevenue.adRevenueUnit); + } + + // Check if user has set ad revenue placement. + if (adRevenue.adRevenuePlacement != null) + { + ajoAdjustAdRevenue.Call("setAdRevenuePlacement", adRevenue.adRevenuePlacement); + } + + // Check if user has added any callback parameters. + if (adRevenue.callbackList != null) + { + for (int i = 0; i < adRevenue.callbackList.Count; i += 2) + { + string key = adRevenue.callbackList[i]; + string value = adRevenue.callbackList[i + 1]; + ajoAdjustAdRevenue.Call("addCallbackParameter", key, value); + } + } + + // Check if user has added any partner parameters. + if (adRevenue.partnerList != null) + { + for (int i = 0; i < adRevenue.partnerList.Count; i += 2) + { + string key = adRevenue.partnerList[i]; + string value = adRevenue.partnerList[i + 1]; + ajoAdjustAdRevenue.Call("addPartnerParameter", key, value); + } + } + + // Track ad revenue. + ajcAdjust.CallStatic("trackAdRevenue", ajoAdjustAdRevenue); + } + + public static void TrackPlayStoreSubscription(AdjustPlayStoreSubscription subscription) + { + AndroidJavaObject ajoSubscription = new AndroidJavaObject("com.adjust.sdk.AdjustPlayStoreSubscription", + Convert.ToInt64(subscription.price), + subscription.currency, + subscription.sku, + subscription.orderId, + subscription.signature, + subscription.purchaseToken); + + // Check if user has set purchase time for subscription. + if (subscription.purchaseTime != null) + { + ajoSubscription.Call("setPurchaseTime", Convert.ToInt64(subscription.purchaseTime)); + } + + // Check if user has added any callback parameters to the subscription. + if (subscription.callbackList != null) + { + for (int i = 0; i < subscription.callbackList.Count; i += 2) + { + string key = subscription.callbackList[i]; + string value = subscription.callbackList[i + 1]; + ajoSubscription.Call("addCallbackParameter", key, value); + } + } + + // Check if user has added any partner parameters to the subscription. + if (subscription.partnerList != null) + { + for (int i = 0; i < subscription.partnerList.Count; i += 2) + { + string key = subscription.partnerList[i]; + string value = subscription.partnerList[i + 1]; + ajoSubscription.Call("addPartnerParameter", key, value); + } + } + + // Track the subscription. + ajcAdjust.CallStatic("trackPlayStoreSubscription", ajoSubscription); + } + + public static void TrackThirdPartySharing(AdjustThirdPartySharing thirdPartySharing) + { + AndroidJavaObject ajoIsEnabled; + AndroidJavaObject ajoAdjustThirdPartySharing; + if (thirdPartySharing.isEnabled != null) + { + ajoIsEnabled = new AndroidJavaObject("java.lang.Boolean", thirdPartySharing.isEnabled.Value); + ajoAdjustThirdPartySharing = new AndroidJavaObject("com.adjust.sdk.AdjustThirdPartySharing", ajoIsEnabled); + } + else + { + string[] parameters = null; + ajoAdjustThirdPartySharing = new AndroidJavaObject("com.adjust.sdk.AdjustThirdPartySharing", parameters); + } + + if (thirdPartySharing.granularOptions != null) + { + foreach (KeyValuePair> entry in thirdPartySharing.granularOptions) + { + for (int i = 0; i < entry.Value.Count;) + { + ajoAdjustThirdPartySharing.Call("addGranularOption", entry.Key, entry.Value[i++], entry.Value[i++]); + } + } + } + + if (thirdPartySharing.partnerSharingSettings != null) + { + foreach (KeyValuePair> entry in thirdPartySharing.partnerSharingSettings) + { + for (int i = 0; i < entry.Value.Count;) + { + ajoAdjustThirdPartySharing.Call("addPartnerSharingSetting", entry.Key, entry.Value[i++], bool.Parse(entry.Value[i++])); + } + } + } + + ajcAdjust.CallStatic("trackThirdPartySharing", ajoAdjustThirdPartySharing); + } + + public static void TrackMeasurementConsent(bool measurementConsent) + { + ajcAdjust.CallStatic("trackMeasurementConsent", measurementConsent); + } + + // Android specific methods. + public static void OnPause() + { + ajcAdjust.CallStatic("onPause"); + } + + public static void OnResume() + { + ajcAdjust.CallStatic("onResume"); + } + + public static void SetReferrer(string referrer) + { + ajcAdjust.CallStatic("setReferrer", referrer, ajoCurrentActivity); + } + + public static void GetGoogleAdId(Action onDeviceIdsRead) + { + DeviceIdsReadListener onDeviceIdsReadProxy = new DeviceIdsReadListener(onDeviceIdsRead); + ajcAdjust.CallStatic("getGoogleAdId", ajoCurrentActivity, onDeviceIdsReadProxy); + } + + public static string GetAmazonAdId() + { + return ajcAdjust.CallStatic("getAmazonAdId", ajoCurrentActivity); + } + + public static string GetSdkVersion() + { + string nativeSdkVersion = ajcAdjust.CallStatic("getSdkVersion"); + return sdkPrefix + "@" + nativeSdkVersion; + } + + public static void VerifyPlayStorePurchase(AdjustPlayStorePurchase purchase, Action verificationInfoCallback) + { + AndroidJavaObject ajoPurchase = new AndroidJavaObject("com.adjust.sdk.AdjustPurchase", + purchase.productId, + purchase.purchaseToken); + onVerificationInfoListener = new VerificationInfoListener(verificationInfoCallback); + + ajcAdjust.CallStatic("verifyPurchase", ajoPurchase, onVerificationInfoListener); + } + + // Used for testing only. + public static void SetTestOptions(Dictionary testOptions) + { + AndroidJavaObject ajoTestOptions = AdjustUtils.TestOptionsMap2AndroidJavaObject(testOptions, ajoCurrentActivity); + ajcAdjust.CallStatic("setTestOptions", ajoTestOptions); + } + + // Private & helper classes. + private class AttributionChangeListener : AndroidJavaProxy + { + private Action callback; + + public AttributionChangeListener(Action pCallback) : base("com.adjust.sdk.OnAttributionChangedListener") + { + this.callback = pCallback; + } + + // Method must be lowercase to match Android method signature. + public void onAttributionChanged(AndroidJavaObject attribution) + { + if (callback == null) + { + return; + } + + AdjustAttribution adjustAttribution = new AdjustAttribution(); + adjustAttribution.trackerName = attribution.Get(AdjustUtils.KeyTrackerName) == "" ? + null : attribution.Get(AdjustUtils.KeyTrackerName); + adjustAttribution.trackerToken = attribution.Get(AdjustUtils.KeyTrackerToken) == "" ? + null : attribution.Get(AdjustUtils.KeyTrackerToken); + adjustAttribution.network = attribution.Get(AdjustUtils.KeyNetwork) == "" ? + null : attribution.Get(AdjustUtils.KeyNetwork); + adjustAttribution.campaign = attribution.Get(AdjustUtils.KeyCampaign) == "" ? + null : attribution.Get(AdjustUtils.KeyCampaign); + adjustAttribution.adgroup = attribution.Get(AdjustUtils.KeyAdgroup) == "" ? + null : attribution.Get(AdjustUtils.KeyAdgroup); + adjustAttribution.creative = attribution.Get(AdjustUtils.KeyCreative) == "" ? + null : attribution.Get(AdjustUtils.KeyCreative); + adjustAttribution.clickLabel = attribution.Get(AdjustUtils.KeyClickLabel) == "" ? + null : attribution.Get(AdjustUtils.KeyClickLabel); + adjustAttribution.adid = attribution.Get(AdjustUtils.KeyAdid) == "" ? + null : attribution.Get(AdjustUtils.KeyAdid); + adjustAttribution.costType = attribution.Get(AdjustUtils.KeyCostType) == "" ? + null : attribution.Get(AdjustUtils.KeyCostType); + AndroidJavaObject ajoCostAmount = attribution.Get(AdjustUtils.KeyCostAmount) == null ? + null : attribution.Get(AdjustUtils.KeyCostAmount); + if (ajoCostAmount == null) + { + adjustAttribution.costAmount = null; + } + else + { + double costAmount = ajoCostAmount.Call("doubleValue"); + adjustAttribution.costAmount = costAmount; + } + adjustAttribution.costCurrency = attribution.Get(AdjustUtils.KeyCostCurrency) == "" ? + null : attribution.Get(AdjustUtils.KeyCostCurrency); + adjustAttribution.fbInstallReferrer = attribution.Get(AdjustUtils.KeyFbInstallReferrer) == "" ? + null : attribution.Get(AdjustUtils.KeyFbInstallReferrer); + callback(adjustAttribution); + } + } + + private class DeferredDeeplinkListener : AndroidJavaProxy + { + private Action callback; + + public DeferredDeeplinkListener(Action pCallback) : base("com.adjust.sdk.OnDeeplinkResponseListener") + { + this.callback = pCallback; + } + + // Method must be lowercase to match Android method signature. + public bool launchReceivedDeeplink(AndroidJavaObject deeplink) + { + if (callback == null) + { + return launchDeferredDeeplink; + } + + string deeplinkURL = deeplink.Call("toString"); + callback(deeplinkURL); + return launchDeferredDeeplink; + } + } + + private class EventTrackingSucceededListener : AndroidJavaProxy + { + private Action callback; + + public EventTrackingSucceededListener(Action pCallback) : base("com.adjust.sdk.OnEventTrackingSucceededListener") + { + this.callback = pCallback; + } + + // Method must be lowercase to match Android method signature. + public void onFinishedEventTrackingSucceeded(AndroidJavaObject eventSuccessData) + { + if (callback == null) + { + return; + } + if (eventSuccessData == null) + { + return; + } + + AdjustEventSuccess adjustEventSuccess = new AdjustEventSuccess(); + adjustEventSuccess.Adid = eventSuccessData.Get(AdjustUtils.KeyAdid) == "" ? + null : eventSuccessData.Get(AdjustUtils.KeyAdid); + adjustEventSuccess.Message = eventSuccessData.Get(AdjustUtils.KeyMessage) == "" ? + null : eventSuccessData.Get(AdjustUtils.KeyMessage); + adjustEventSuccess.Timestamp = eventSuccessData.Get(AdjustUtils.KeyTimestamp) == "" ? + null : eventSuccessData.Get(AdjustUtils.KeyTimestamp); + adjustEventSuccess.EventToken = eventSuccessData.Get(AdjustUtils.KeyEventToken) == "" ? + null : eventSuccessData.Get(AdjustUtils.KeyEventToken); + adjustEventSuccess.CallbackId = eventSuccessData.Get(AdjustUtils.KeyCallbackId) == "" ? + null : eventSuccessData.Get(AdjustUtils.KeyCallbackId); + + try + { + AndroidJavaObject ajoJsonResponse = eventSuccessData.Get(AdjustUtils.KeyJsonResponse); + string jsonResponseString = ajoJsonResponse.Call("toString"); + adjustEventSuccess.BuildJsonResponseFromString(jsonResponseString); + } + catch (Exception) + { + // JSON response reading failed. + // Native Android SDK should send empty JSON object if none available as of v4.12.5. + // Native Android SDK added special logic to send Unity friendly values as of v4.15.0. + } + + callback(adjustEventSuccess); + } + } + + private class EventTrackingFailedListener : AndroidJavaProxy + { + private Action callback; + + public EventTrackingFailedListener(Action pCallback) : base("com.adjust.sdk.OnEventTrackingFailedListener") + { + this.callback = pCallback; + } + + // Method must be lowercase to match Android method signature. + public void onFinishedEventTrackingFailed(AndroidJavaObject eventFailureData) + { + if (callback == null) + { + return; + } + if (eventFailureData == null) + { + return; + } + + AdjustEventFailure adjustEventFailure = new AdjustEventFailure(); + adjustEventFailure.Adid = eventFailureData.Get(AdjustUtils.KeyAdid) == "" ? + null : eventFailureData.Get(AdjustUtils.KeyAdid); + adjustEventFailure.Message = eventFailureData.Get(AdjustUtils.KeyMessage) == "" ? + null : eventFailureData.Get(AdjustUtils.KeyMessage); + adjustEventFailure.WillRetry = eventFailureData.Get(AdjustUtils.KeyWillRetry); + adjustEventFailure.Timestamp = eventFailureData.Get(AdjustUtils.KeyTimestamp) == "" ? + null : eventFailureData.Get(AdjustUtils.KeyTimestamp); + adjustEventFailure.EventToken = eventFailureData.Get(AdjustUtils.KeyEventToken) == "" ? + null : eventFailureData.Get(AdjustUtils.KeyEventToken); + adjustEventFailure.CallbackId = eventFailureData.Get(AdjustUtils.KeyCallbackId) == "" ? + null : eventFailureData.Get(AdjustUtils.KeyCallbackId); + + try + { + AndroidJavaObject ajoJsonResponse = eventFailureData.Get(AdjustUtils.KeyJsonResponse); + string jsonResponseString = ajoJsonResponse.Call("toString"); + adjustEventFailure.BuildJsonResponseFromString(jsonResponseString); + } + catch (Exception) + { + // JSON response reading failed. + // Native Android SDK should send empty JSON object if none available as of v4.12.5. + // Native Android SDK added special logic to send Unity friendly values as of v4.15.0. + } + + callback(adjustEventFailure); + } + } + + private class SessionTrackingSucceededListener : AndroidJavaProxy + { + private Action callback; + + public SessionTrackingSucceededListener(Action pCallback) : base("com.adjust.sdk.OnSessionTrackingSucceededListener") + { + this.callback = pCallback; + } + + // Method must be lowercase to match Android method signature. + public void onFinishedSessionTrackingSucceeded(AndroidJavaObject sessionSuccessData) + { + if (callback == null) + { + return; + } + if (sessionSuccessData == null) + { + return; + } + + AdjustSessionSuccess adjustSessionSuccess = new AdjustSessionSuccess(); + adjustSessionSuccess.Adid = sessionSuccessData.Get(AdjustUtils.KeyAdid) == "" ? + null : sessionSuccessData.Get(AdjustUtils.KeyAdid); + adjustSessionSuccess.Message = sessionSuccessData.Get(AdjustUtils.KeyMessage) == "" ? + null : sessionSuccessData.Get(AdjustUtils.KeyMessage); + adjustSessionSuccess.Timestamp = sessionSuccessData.Get(AdjustUtils.KeyTimestamp) == "" ? + null : sessionSuccessData.Get(AdjustUtils.KeyTimestamp); + + try + { + AndroidJavaObject ajoJsonResponse = sessionSuccessData.Get(AdjustUtils.KeyJsonResponse); + string jsonResponseString = ajoJsonResponse.Call("toString"); + adjustSessionSuccess.BuildJsonResponseFromString(jsonResponseString); + } + catch (Exception) + { + // JSON response reading failed. + // Native Android SDK should send empty JSON object if none available as of v4.12.5. + // Native Android SDK added special logic to send Unity friendly values as of v4.15.0. + } + + callback(adjustSessionSuccess); + } + } + + private class SessionTrackingFailedListener : AndroidJavaProxy + { + private Action callback; + + public SessionTrackingFailedListener(Action pCallback) : base("com.adjust.sdk.OnSessionTrackingFailedListener") + { + this.callback = pCallback; + } + + // Method must be lowercase to match Android method signature. + public void onFinishedSessionTrackingFailed(AndroidJavaObject sessionFailureData) + { + if (callback == null) + { + return; + } + if (sessionFailureData == null) + { + return; + } + + AdjustSessionFailure adjustSessionFailure = new AdjustSessionFailure(); + adjustSessionFailure.Adid = sessionFailureData.Get(AdjustUtils.KeyAdid) == "" ? + null : sessionFailureData.Get(AdjustUtils.KeyAdid); + adjustSessionFailure.Message = sessionFailureData.Get(AdjustUtils.KeyMessage) == "" ? + null : sessionFailureData.Get(AdjustUtils.KeyMessage); + adjustSessionFailure.WillRetry = sessionFailureData.Get(AdjustUtils.KeyWillRetry); + adjustSessionFailure.Timestamp = sessionFailureData.Get(AdjustUtils.KeyTimestamp) == "" ? + null : sessionFailureData.Get(AdjustUtils.KeyTimestamp); + + try + { + AndroidJavaObject ajoJsonResponse = sessionFailureData.Get(AdjustUtils.KeyJsonResponse); + string jsonResponseString = ajoJsonResponse.Call("toString"); + adjustSessionFailure.BuildJsonResponseFromString(jsonResponseString); + } + catch (Exception) + { + // JSON response reading failed. + // Native Android SDK should send empty JSON object if none available as of v4.12.5. + // Native Android SDK added special logic to send Unity friendly values as of v4.15.0. + } + + callback(adjustSessionFailure); + } + } + + private class DeviceIdsReadListener : AndroidJavaProxy + { + private Action onPlayAdIdReadCallback; + + public DeviceIdsReadListener(Action pCallback) : base("com.adjust.sdk.OnDeviceIdsRead") + { + this.onPlayAdIdReadCallback = pCallback; + } + + // Method must be lowercase to match Android method signature. + public void onGoogleAdIdRead(string playAdId) + { + if (onPlayAdIdReadCallback == null) + { + return; + } + + this.onPlayAdIdReadCallback(playAdId); + } + + // Handling of null object. + public void onGoogleAdIdRead(AndroidJavaObject ajoAdId) + { + if (ajoAdId == null) + { + string adId = null; + this.onGoogleAdIdRead(adId); + return; + } + + this.onGoogleAdIdRead(ajoAdId.Call("toString")); + } + } + + private class VerificationInfoListener : AndroidJavaProxy + { + private Action callback; + + public VerificationInfoListener(Action pCallback) : base("com.adjust.sdk.OnPurchaseVerificationFinishedListener") + { + this.callback = pCallback; + } + + public void onVerificationFinished(AndroidJavaObject verificationInfo) + { + AdjustPurchaseVerificationInfo purchaseVerificationInfo = new AdjustPurchaseVerificationInfo(); + // verification status + purchaseVerificationInfo.verificationStatus = verificationInfo.Get(AdjustUtils.KeyVerificationStatus); + // status code + purchaseVerificationInfo.code = verificationInfo.Get(AdjustUtils.KeyCode); + // message + purchaseVerificationInfo.message = verificationInfo.Get(AdjustUtils.KeyMessage); + + if (callback != null) + { + callback(purchaseVerificationInfo); + } + } + } + + // Private & helper methods. + private static bool IsAppSecretSet(AdjustConfig adjustConfig) + { + return adjustConfig.secretId.HasValue + && adjustConfig.info1.HasValue + && adjustConfig.info2.HasValue + && adjustConfig.info3.HasValue + && adjustConfig.info4.HasValue; + } + } +#endif +} diff --git a/Adjust/Android/AdjustAndroid.cs.meta b/Adjust/Android/AdjustAndroid.cs.meta new file mode 100644 index 0000000..f977efd --- /dev/null +++ b/Adjust/Android/AdjustAndroid.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1b21499aaf10a42e8b6377af71a35ba5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Adjust/Android/AdjustAndroidManifest.xml b/Adjust/Android/AdjustAndroidManifest.xml new file mode 100644 index 0000000..d0471ae --- /dev/null +++ b/Adjust/Android/AdjustAndroidManifest.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Adjust/Android/AdjustAndroidManifest.xml.meta b/Adjust/Android/AdjustAndroidManifest.xml.meta new file mode 100644 index 0000000..58af3b4 --- /dev/null +++ b/Adjust/Android/AdjustAndroidManifest.xml.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: a13ef442648c346a79f9ff24875c037a +TextScriptImporter: + userData: diff --git a/Adjust/Android/adjust-android.jar b/Adjust/Android/adjust-android.jar new file mode 100644 index 0000000000000000000000000000000000000000..c07b4bfd8afb3fc1b245fd321d9b9b656f0dcfcb GIT binary patch literal 280098 zcma&N19T)i{p;}mH&8}ERzg%nNtsqg^j2nkOj?SDb_Pz0hH`Rzs!ox9o@x7F_W&zHt)Z2^qhpYwwk5Iv3J;q^ok<<*n%dsa$_8zgsBP6a zUbXMU3 zy1INo-J-?dl;xe}Z>#+{^=TyK1i#CDO9&zTKfj&jucMow$C=*^9g$tsrn=@x^?+ zm__g0b6`Z=1m6_$TmUP~h@8>*^Qb4?8^8C3gyh#buHYVjRKsvYlKNIP4Q1UeJ5h$?ZFz+~*Fk&BKmK=3KhwJ|ENU z_JB726Pm=Ma*|ckOPv1{)+@oP#_@Y|3Je3;3i??=%jCBXiO~cU@WcgY-4El z7a_Jbj{nQW))yCuAFN?Kjyy6lRtpx^3uw#;Jox>PO5Yd=AY^GsQU0tQ+DNc=oQ+)Q z5c(z~6y@;IhfIMz{ls7Zi5lhg zA0YFa5wDlqILuIelpYiSUey2L=KzHYKr-uhK$|gYohF?fk+|zm z8qdydid=)z2?59yWn1 zHTkU^K1)UEUC@lNcEz4Xg}yl*kr$2Xn#4YJ=#{q%jfYP^AjVzH_rsm)B_JI-T~*IK z`6p^})r&jQ*mUC#Q!%GnNiVBQKT~$G7L%7ifH(PXl(nR)`BtuJHsv(FI#=d7tfbH4 z#pue$ zRJb(GM*B4f%sD51)F#i%@igcmn8()73jXXY66#+}I^Z~{ z&5>ySRPv7NcNLyC?mGAD5ABC7d+xY4?5y0bJdfPAyVl95Q<~XLJeO`ruXQ^f=&q1z zBm&8+IeztZIfPG8MF_{k{K!lBp2ENmYF03nc4@HI%}0e7ZR3!9|ALejPjQn#_l;*d9*#eE-cF2P z@@;j3s&(`5L2N5-tM2p=^i8w+4&1`o%-_h3u4xRIU}!DEZRqIR6)|BGZIt&y^8IQm zUMYvOQHSk2k*;x7gn;>`9DFV5$Tn5JW<55kxsc^0QAgcj&V4|-wO}<-?*+9TAC4G| zL4>+#mgsI=(lmki2hC>9<44z|CO97vhAN`UccIMKDPZmr?qI)%+6n9--0{MQqczGq zF-FaRF=Nyp0aDEaGHcW0c&NbK#k=3C7@tnp%kWcTbme_$>JCdR3eVUV{y1NSPAZ`L z6w*@==j2z-9dV9Z(LYIgOl-TX&10ZVUC`wSQmqu*%zt~2O9J`j*`U4<=+~OZV{@6z za*IjFMvg?mDscj5^QYG}z^1J#VLf5McLPHOFY!jv&&Mz8`DqMKS8oIR~_=Un?8XMeS(l-4tj;S-l>P3)Qw?sT!RkWO}4dFq(czl|h{1{>zFVi4iaHT%npn zH@R)32+^yL{o0G_h%8SK{U^MMBS22bh+2dSS%W%a!swvBEi26gMv^+@$bw-OwE-1x z7s0^J+>=mn%21<0wGA1M?Cg>dCJ!4Zg5X0$#}_`tOTtM;1Ec$ zLN-u?ZA>S8m|yDB=bx^(%ft9a-CTP@2l$;5R@OZq*Bz(QvYtQo#(n~=Ez1%GH-`rX zQ;@@!2Rl|c)}gy~UZjb=RP96{?{xY07MW|>oXAEAT(|X7Daczzi!CXoiYkgo3SnUh zH4e!&+c>VwAguC?U4@-?#`bRMho(?fqL|Q^6P53PIKWcvtzgcs(^F4TS#MOvr9&P_ zI8grZBe!C|i8`K77~YEy=YYFa(^JFxWvu41Uv=4*kNeac7e(t{J6?R{B^5l%Iw{AA z0s1?n69y}}ntT65=lEpj(*rAARn8Fnr!opl#V%#v3!k{*@aF`1-zuOwt|cis97*Wn zQP&qud}OV0z|Ok122Ch`ClxH)`kOfqT=ZJIv-9 zNqdXG(J;=-I{WI8EhI{*5Sbm^X$@4uTg%|YG*qcOG2Gg9;Mtj`&k_U6dareGzyzqd zQwZz!66poQcuGe94rlK?t{i?N;9Mer+3LbQIfQ6q&^#8h+KRP3&Pl?sepapEk8`*S zIRaJbpBKpLKVpEA?}rc_sJ;B|{)_{T-YAp+5Cvvb?~+dh>+bt#`gwnid)PB%#;sU( z+(6UjC)33kG`>9t*qwei<{CswWgViTc0mpIDDWUd1%_NIlS0AMTLk6x!X$p`th|dT z@q5xc0IN`Hr8r51)7&lc-wE_ObDM}p0|J`=$`OD32Lk_=CjOH?4QMT`g$2GN2Kv4$ z0(vWGqqKfReS%yCWGV|mqr=&)G8M}VfOdU4Z7B;Y z7(Lc0TKPijyqRT#YMZ6?xq+spb=Rl+<;30u$Z^V>kK@+5>&0`9GJVn+6dQ_WR+efy*x1G&kIPJCi3wEW+upT>lA4Vlr=ZRu12Zb+{qdbTk zWiH`joZd#T!VVw6Ht_!lCVj6V!HIb7+rUZ)4>4=!IJ^924qUvu2>n3yBQEw3f$iH6 zNRo-Xet?&doE$mEpvC4cF@n;2A_2@=zDBt(`TEAvJT8K0F9RE@Lb4r=N@?V1-kjby z@HvG_{20@M3=@T*1WJ{38OKx;Q?1UyE!-I4kTeI+1~<#Xrk@dvD#}ZR0Sy?JSlY}n zrTuDclt>rQ4<3*KHEQ(h8Dh8Q{t40Y=7cH?NyaAKiIpM+-y;_mSjSxY3-o5(R4xDL zur69T%*8367h)xODUT_qDIf@;k($ysj^KZTxU1aS%^#4Ch%bZ_+tsm;CIHY*gKS=i zGk?pRu1@U|C@MHME5@vrwDY9r^(y1TfeM?yor9fClm;2Y0Ug6s)A1!Qdj{=uDbxZe zP!dR~XowE=?fw#~>5Pi=p&8$oXbPI9ON!BYCXY=bD|M=^aB_Y&)X3o5B(s%`XOp3< zoZq^GfG7xKlesBYFJieVre~c;J&lHd9N<7gnGl@GpVi1q_vg?qa{1HE>LS)_f9@4{Q=!@(EgIkt z;Z2ESt7hCD;M;Z#o5VU}!tN>^;cB)61iMsq-`!VlRzcCoOO&9;*yf=~%aWlrKe8V! z_P+5xv34!_lwCBt;snp#(I$6#Avf2+{OfYjYNVj@PJ--Nw{ny`f#Ur7{veUH_dG&t zA%xvJ4=I`8`9q@NA`8)nTXY}wWS+qTO&)m`PiE|Fuqx1%=elK z3)!>=R5{HaDYu4K$xxq#6#bTzbUC{c>oZvSJ+`?)$Qw&Lo19J~cmtPok>6I-{@i3)4ou7ru*5v0 zH#YN5FmE8S8+(b4lBulJT+3KuZfas{`oS{_VmlAJLUD(f)>%30YKCw|&DikjN=%eh zO8ARNY0Mdcl?<3_&F8nIXHnW!f2>G1`$ZE{SVZTPQ)`j1nCZ~qp|hrpcKRAwy}$%~ zc!A(W3}7Zy^3@y#n-Hr(eT)pHd@6T2(IcwBaD*TP;KpABDLlZaz<@h00$H>1y&#U^ z$0uayFY)DcMA{g@9U#ySSaA8wWAUUu=0{cFZMq&anynDy{i6kg`gNdWjMStDlFB@O zEXsLQm;{l&E!$Na{~z2tv3F37b;LU{N*38kF9)5>r ztDJCn;OS?ss{j6 zkr|uCd?Sr-X(!7uT{K7{zWN%m#R{TIA2LN<5rU5KD3VQwe8owxYHS^1z78|5(kcpY zGpISMnI2Z}VnqnV#YcarNSRE>B|fvzKH1s4L&5l0#;1Ka+j=B32kPmyXPKG8ax*I( zqMJ5&rk&gNxhcSHYkb=i*_Lbm-jqv{q7~`Gp{;3i&BvIES7_y0Q*iVdn-nE83=6WmOy-5H zx7&#-+_}$&LQps-!1CkrJiA0|43zlgIrBmv7~>{06^!Dn-#RzJZWNPJBp4`{j3vpO zugPMC?^9#|f6U553PbG+!qLeXpBWbr&s6&w)ri-t8x8wBPEjbwWRs1@;?7BD=6k1E ztONrV^40`DcHlE>8{pTzOFvaA3e;=Z>N4JpHOn7$KvcHl^nwU%z?YP@2iv$@YnV~Z z*#l--68+3ot_^SlSl-oaM|lLcjt}A15BKL(Y*Mlt*^PTJ0V1I=eokO7_VS7JF4v+c zc(?mpC(o+`8M)>rWt?==9V!gJ*}c2hevwiXaur2P^?x_471{W>inG7WMH>hJrgptW z;~g6@E%$=YiGU{*ak1x<;lyX=#!{59%Hlg)x+LD`Z__xvMhLP(7bq`bXD(i~XIzXT znkAcQs^xR+jZ*>>Z!P-nC6&!A!SkZ@d(<0gn<=*OEKPLNTB${MQ)PF4p~{oxw1m>_yV8~HLV+2;=HEnfG?T8&{E4^y9tf2N`kRLgA- zmS%&BDcU>;ZKvN!V)R0ZdtW+QC?TC^TRk!U$!xX18N>U#qBznL;^sN);jz&a_N;+D z8^X1SVj=CM*RT2bn(|$#Cq*(}jf1Hx)3j(Q1#=5oz+2a{5

8v?=GimSl8R6uM6h1LBj%P|Rv%`JZ44dg&Nonzn{Q`AfjjNue zQm+mzIF5r}2|kUfT{?hQffKhwu&%i@%*h0$uL4<8xM{qP!~q?dxEw=qkW2ALTbu8hnzTRwT;Rfo5AaPMm(J9 zd>W{;V;5fliIol!WSCFkoAFG)Dqquin!J4%I9 zGm!}#0;S|5=jKMnRSQtV;3>R82#ovLXw0b-19$^mQL;QzWNqwG;>S~7go%Y{#>b@h zZii6vQ50!nSV*yERCJO+OAb z=-`}Zp0ZhOtj`mnQnG|9njQ3J>MB3ecM*$DBZa8lw$es9dZ5RS%BPR0zbPg8l2Q-g zD=_~I3fOq3NX);OQt?swxzy}+3iS|tpKOQrDY&^0H9@E1BV_h%JbOy?j>9j;I{bW;a+q2O9*>=ndh|b^2f_R z3ZMLs>siA^XoNT1VF+h zT8jrxV2hhgW@3|$oqP|Tvw2-u@_yJP~ z0|i2>ocnNr7|oAQLN#H(-67mV>VMgF`Z)uqAupVg&CTGq?FY!^TS))8R_y_|-yNQ) zKl@boiPB`$3>$E_tewavn8l^0v(atPdl3QD;j3HCw@`hw^ku0bx=G}6T5(1b^Pl-<3~%=X+zqkb&4G9&f=yx>J> z@C*r?rdUe!SPe4#cu901wKNyLtT;;f7sNaHDy(O=#MlWnXV4_X0!J!G zO5?6Cop(IZehKcpNQ%5)6>(Hm3El>&aqwob%>Ie>$B&8|`0P50^5%LJ(bIlGL+nZL z7HaZ)_eq>0nzrFQ&3u>4Nfk3e4MWJ@YM;P$Cp@E=)oDqZdc_aq&lTamk5+%w>c)1^ z{#tz!Ub!YX%gpVfQu!lL3k-SmUV8Ku*0z4XTF^UVkYgDTsA5nr2%sGB?gOA^0}DSG zf*|1OkfQu6ZruZn`-mx3kICD9QFAjgEp+*$Jtv>mjVd8(ZG?;se#aBhjEzHemyDrH zqGIZ{3GhDyc6UY%CNJFRCl)P;OgXEDfCuwp9yBdrH01LDi>BRYmkbT2gayj(ed9ND zTF7X!$^4D#9GY#LmWu z8?T1jQ_&OIKJ}xLVRCiBWwdQ_o{T{=cwBy7Pap{I*yL#e&R{%IE1vwZvpE)Bo00bQ zL`=CGP-bbqoWnn}rYEy)~Raim1575FTMzC&n5wzn4+W8&S*;eF@LQ zi6)AP;4LIo_d(Nl$N?Y|pvgq8`kqF}KMTq2bF`t4tEY}IGn7MK&pD}qkY;`>aQlFY zJ>$l&YuY6?5nke(Q*?kbby+%Qqb9#m9pfo|pa#E%p(OvTMx2Y$5WviYlAQXL9fBCS zi=RYJ+E$tC#m+5{*{}LS(-=a@uAh;W0YKt%qvn)G<@DKmZu$PrmRmheBY1?3G3-twT>ST%h{qh_$x@n#22@-b!7Ndz zGF;przD{vpg1XrPaih~U)uY?DLB!H-YP~KcE2Iv%Fwv8&aS)my{;_JzAt3-VAo=I= zdfp@wU=op>FnE5Z%M@vE!-(O-0)3B1JJQz#ZBIFL283ZzFj6&i=0joNsoP-`xH%(r z{Oi19h(EUMMt$pK!V$O>_&-wALzxJL$=01$y$33m zYgY98OvtJ^*qB`K59|?}*Yx}lr}J6QR*kFxG<-Ly%SWj-YQR=aJQ$c_M&`7qN_o?o zSKxkaPO2an|7*oK{41x)z5ASkTn85`LF~qsS*qh~05SetB0DiG8|-M4ds0S1EvW z*Oh>(L8SaaM8Rw;33O3FFplGlAJ%NY^bhI)Hb;)Y($osHD=SNhNHuF}{pfx2hf zvR&KNvzlQf<2YKsgClY!ag2;g(Q(9Fq~+U4?O{~)!;G~~dfa=Rvu>T-O~@aSdNGe{ z@>DeQqek;Y+>4IC!mwBr%KbbF{r}A1W>{Lt#IOcrpC&TD*>7(l$Z-Lk{i=_}uig2n z{-p8-?91-2>px_yS`?A`1mowM=uh|DBy20{KB7~wd~JWS9Ru{HP`EY($jr%oeiOoe z0)g=Y{#@D&O5VFh_R5FuoVep(x!5}w3u?9JCEVD_5%cQ+nn(BdSU$8oK-1v(oVsgp z$P{qvUAl2vKOntOy$w`M4(FOAD^hXxfvfHUI>Qzxv|UZ4uG1Ss5gAFBSL{xAbB3r! z9nqtj>)8ZZUIX$J<9jrMa3o(D(X%`@K|XV0vV>NvgHN7##QO03HrIicy17uG=~A$x z{Oqk+Oer;~oSL}x$XIPFVdATSV^;i7Yj)AYLKR+!ii^r;(n&tcJ2z z$pBzk4h*hpOOWcGCYOckFZ-DA(k> zi6&HIW>pR#H1b#{ZpIv0#TB&!3!G9Z&c#{#BXE_G&7*{3HY3ysiBItGk-?Ttjp5Lrak-WM-kk6c4TrM4~Z^bT`DcI30*ToshVUM zuPs!lyV4F6S*$V+G@)9jP_dSH`Y6wqkrEh?ikPnc_K(DoDMbv~#;7T%tqD7U$}oek zEo4cye2pYVjtVIQOUB9w^7ssxO?s3~?9Fg86EYt_j~AT_6N!wA<)jeg=e?o1oKEw3yqHNLDSnpD8P2 z3tA2!_o^7@td#OLVxityWr4>tXdzQ)D4h%ZNleSOw6^g_tKsFRD_ zHXl#Lm?MMVKFMXUm(Ov-kc+`Yj?upze1hiYaSkny@^hJ<<|rHBWNzTckvo zJsB0?RC)%sR>3RAJ5a!q$17-d2&Gld&K*l4JJC3xXcci!xA~c!w=r7h6mx?UML{<$ zG%9y2aX`;g(k@I#K{r=EI(3YDfa>wnJxSd?3U~Ar`D1(~?EJv0NSK1D_3Zy*L4|?kA0_Q5MQz(TdK4bnw%|tpV8+oQJuB*8jY393SAyS>C<&&& ziLcGOvejs~ru{M~LE?ikM-GMb0pj~+pQVysFJl;Y=IQ8tG1Kz!eEYa$3p91z{0))> z-53D|KwlwxA~3vXUL^zAd%uz~+LunZ#cvKrjsw@E!=N-Fa;_e!W^BgTsN4U^t*l_E zmVQmVJ!s^Rh@Do3o7Yt=8PT+E7yN)(b{p4$#jWLRKOqFl`-|^@36E4Os*kRqG!%Bk zlO&1xH>TwIWOXp9O|#ma9WqVuK?FF{ygLeXhBD!?5)% zEec*qFrk*5K@=>|(*C12J>uGqy%_B?} z)W$6afb(K^w6Mon2bydP4~v7icvnhEMVf`D1o{N#2SmLrTDqNt8Kar>akaZqo-4J#@`tOk!(~TWg z0bE%DD_nzWgVe*8Da0Mab>fvfF<_2qXLdT4DZS zk*fQ$NHL|eEIz4NS~jsn>4iTLsDeR<3zq4TAb4kt!=Dsps4uU;J=J}K4oCO^@=bIz zMFu=g!=J5lxlZzUUSz$#PEF|o>1<2j;!*OJ;aCC~tj3&Hk*^D@-KPdkJDM1mn6i9d z38XUt)E*!4dC55z*tqmoaI|9hoHv#@&S0?TY2rj_Smn|_g@H7TEF>xZSzz1E7kdz5 z$b>@d-4dS*}*NezYXe!^l| z<;po{2;S?)X4=P3iWomc!wdiqbE(pfxlu35(qfdat?g!TiWKpA!}VOh15}nMgR`i7 zBxd0;{|tFp3Cl+1an|+HgAJL-N!;sjRo#EaXLGn0?q|hGSTtbbm%cGaaS)v`u8%Mg zPJNg=`L1}(&gX$(K8YDBFUkcrj2cAfg#Vh|4$AYS_oI#ilL-^kMYgVe96oLHw~xD+ z16Ol31nzppjk-m0%Xz?>>E;>&y;&>YhvNp5w5@F4qMjjij~U(g-jxq!9N>D?&lU0s z%0{OKI`Az z`2Sh}lQy@pR5W(9wQ~N;1@jLgDu2GaqWr}4q2+3;Tft=|jO`6(4vN>Seco+r)`RIM zppY<2h{XcXBy2#hRIjL;m;`n~qC5*bfQ!j!H7mj#_}SxT*2;S-8JiEhQjgU9ylD zJcs(Ts7cj2$hNNCA^k{ROTosIm4RYT?6zwLs}P!<1FnhVjx$Yrg-8HYVjd zoMs)Lef_-pvrH-9g;8V;%dmr&;IK?P-Q+h28AqevFTl+O=LI|-+B&dZQg}mXU};># z?ctaf$&uKoj7Hl-3))sAre{8S-jrFRJSfdX{utLVJB1GCr1zWONS5!Fn@(!h@={^C zU5?_>8-nwicxhFgYR<-#QQ5zYdjam&)R$3osEwVMjhromjWF>2n86N6&OY7JJqvS* zi3!^Bcb4oLnMbA3=#KF292UGp&SSw6e-1U52azpt=r3iblq`DFa~{L(F$`kawB-4i zgEJZR6XF4#@MJ}gjhH@&?4-89c#5X#xWY>g(5byp{$_c9qj~UPw9&(!B`sVb=_~;`(t)7G$9+Zf8*D)|V}apOI_qZp6$YDaFtsfZlVlIVcbbU& zE!#C{HoaK#?YMZDa(oQ+b9)G4TFfB#Gp5$C~8=Y+VQ@)-S<;d$ZzVKbe-Q-m9 zODp$Fwk{@g=K;z|H13{tu2>Bn$x_3;8gtH{qY~>Lw7wt->+z_qQNy4PxyWB7jhArPL z_B5}~V>bMFi;8`6ru_a?44!&nJwrE#vOUons`xT>sbwa*+B{@gcfwgyx?t~^*dt4& z=tN4X0v;%CEb*A>+=kyx0T6lu<7@zWkwC0~wQ-rJJ?f zqwQkg*D>{F>_hUTAB;oixM_V+*iFgYhI}H-)krau0xTN8g~HMuz2WcC7+@Q|l3AI% zW$ZB|KKHrSprl6^M(6wqJszBN)i>Z+ms}>4*#=jy9;?{-{c;lim_qsHKBBGIT z%p4rPgUxR4pIp{5l@U4KaL28|5*3i1uy07I0Fs+CpetAttMYiRE5tu&rxa!gU0@H? z=v>;NPxHzK#Kh7ijN|5A3K@+O3H60XsNtdeh~npITvn4PpB^P1AuYsLJfVR4JdOTT zp62L^&qY}QPmdkt73)9eA*u>%&Ov&a&8f-Bzj`g6!M&H;I{|dn`eK1z^D|$4CsOp8 z0lG(D%KwN#OjLpwX-HmJjXT8jGDgzmsM+V2(V}BPT;R(jLfZ6p2W49D3>^M>d86ZxbtCP=u!cag_>$tqAOQ_->WEqy9N(+=a3 zCT;hwfBt-886v)p5$yVPuAK3*rn@MT7Id)Jl{viBr4Au@1EC$ePO6c_1!gF%PI{XJ zUbH8ua00ck>Ys8lPR0B{$>tWNsk6^&OaFVzNJrNQPghlb(QX3kL*=IN-Jz&nw|I$3On4pa;@19w=XhdVs2VF{aGfg!BG{T=69Jp8_ zHIBwqI)y=UAyNrWe{q+m>X~Pcp5+K-XWNzXMls=XhQhohyKa+cXtq>?^PWMlf+DYN zTqEb3y+dQ|aPyU`L(jluuRCHK?YEQN70h-g=jfZz)obtkOw!Q|5rydLZ3z_H@)jcb z@BIra#H1m-4e~LSHnb=i1`UA`?K3BuIzyaQs7@7ot+V!szT})O%q*71+j8RYFO*#? zYycIXa@%R$=d8}t&=DHp88oWqH}8gXW}7SR5!Jv?QxM|{jXzue>Oa03ZHU|a%DODR zGIExG&%WfH9SqI%9gS6u9n4M44fX%ZzP|D>yDx{jv9P|A{y#FYB>5WIK7Lqlo4LY3 z!S9x25X5@hf&CB$zziZ#Gn8!^IAu~9LMb}d$3^qpSxu8VxFqia;~(xFpD@pb~o_&A5q!C<#zzH9RX z0UZ<8G>?jQh(F)gziYS7A`PY~KNPD^S@Y~YOD1iMqqdK>Bq#euD5!;!Wg309JBo^z z$jUrutn$42!r{<8ht-4#f6hRd{}DrBOH7Lf{Z)WIUB}8(7;aBSx~z=jjahHwytkHR z`3C*>bhWlinIY-x)g|=HUHf0WzA$tA^ARaqf7xpheHy>&76_%N?keQ+MKr^x6m*IO z3@V9*;(`)gbgrgtc4u*IR5LjuAf4VDc8k8LjDCWN93LF~gQMm+C`N1kV%l9kfmu3vKbR z*Td$R@qAZ&lEZv)c=iA>Usq+Q*nt(6(UHkiu0_> zOn$)-S)MvgAJzt&pzVZNjEf20e(A6$K0Jtq-e{~Ebfn2h@YBk*acv_Yo+Zc}6%&pr z)j0J$OE)+!_yCfgW~tSKA?H=9`n$A|vMf==D{HzR!`*oI>rpsbK8NsIwk(oV?ZR?^5U|WrlWb zliJ_U3i{mSnP44x+LgSMFd;1R30vf9rcGTmyA~d|q9~7~oI)wNa=*JO$ZOPF zOVFcccq*R`%Y#mL$BI!WeR~1or*g)!;AOxPQp#1$b(eCc~VkmnMaEwF?4+nRw^&sSrId=1pxLgb6+cZ}58h%5Bz z?wCrAAiP>f_sE7irX(RwR3T1sj-g!|@$WBU#Q*6>A$=<=1ARlwe}Eqq zBVgIfj~KMo&pM;rBSaUpx%x||72UQ&86K-{1^nV4a_m2ny7>)4~PX1#ZYM|du~quQs|lqwi8?V zdQ$fPU7?GK;h#F7IAifwr`KO)jJmHf2H>lVQP5b^jOxuuBrcC)KqY#^n+AJQxTe06 z26tB%h&BMp*NralDb`*Gr(99k{8yV-%aPs1f!FK(mk!GR=3meyn!DCcDt75FA2~OI4yNLe5hn^qqN0@$7Xnd3RJ?%wL zr3{l*ZYSc-x)g>3hY@huF(t_mE2PVA#HE%c57Rc(4N-t^(jO zF?sFzL*C>v1|O?K`O2u9>EOe3pjMNoZx!>8Svb5(2CnzZ;U(*>(oSf1%z; zKm}7>0ZqcyIRYUe^q0qozW)5a@(@cx;cdP z0%h|j(j?zZiMR-@)f_kv&5;j^g<1>g_k{XnqRp;`h#q!{Lp+cE{#QytO!i%ZYHvgI>h`(lu|5Vg)a&j;?_@7$F|8@d0|AUV#W$nM( zFnE-{!8rSmHW4Y-oAJep0DA)%dcxz>nDZcVO6KyYwM|AYtfKfLgcG0iyqK=pF!!>G zpw+?=@m)F}#(9p`TbTHKecvJUz~vxf`D20#qjc^V)=@t?`%XO-09nl%gH zx*fY^7b661z0)PG8}x0$SEEHw@%qP241Oqm$`PLGy-7SjnVXEFPk1(WqlZ-b+%?w{1QQxdsvPc_g0r=JxPrb%YGBkcL_-I+NG&iH zHX|~^){RN+U%Fp>gSbsnLiJy_-;|QgcQqnNiY;{e#zwtf&k&^vJNMZge;7;*W7twh zC>NPTy>60vE?-weTEFISKh%h}$7W~_g#j)Lh%8g9DZbDBRa(Y}iU31d}=+gLFgoIMP_MZyPuoMi4 zG8-X#T<}A+0P*h#pIo@gaw#T}`qgDEW;Qp!8Y7h#Vn7IWTTK|4-&wAKVMp;0gfNMOn&u!jjEHB=9VLMOoY3SR z5ejV4AC`8B71X*@j7#RZfvKvo2dF#+ScWiM@ius)KwQNYxa4 z){;%y#epX^7BDy`@zCX;%Zs?las;r`VH)$_-)ITVHu|1G|2|fU6h302zwW#8YrOt< zWA&e1yHN^jl70M$JeHP9hVvQ?o3?5qRH?k;-T)|~a6uLMlUG*t)k^zcEB*N2@3_E3 zu6q!!3i>59)DU~QBQl3C^5VG!pCeq4;RU_?^~}WEO{MFhA|7- zDYYanLurq;!7OaI;6A+M72@fPH@tiaF=tPOq3VfFqgr;?N1#ajG#djVhBK0?e?#X) zwJ3rFpS1U^QFd4grP*nz&v2n90CVsm*^1Z{H$5+QDopVm$4$#JuSPgwB0wLOIwhh+ z3iPsoCzM-+YRb&a6QZADa#x`Dp6B;MEv_6)2#m9b@K7?vYdHfT9 z;~nfna2`G>(}<6s|4`t>pY2vFigD6mj`6vy;vKr!8}V=|gDc zoA=ciF$ig@b79PZVa{yO&I!QAs%qPI&1MI~?2)--d}Si+t%fK_Y{WIH!EH#!sy48P zBvuP0Hk!@T`zt+3?4t)|tcOxRwlY>$l9+qL8JJ$HE?+;k-h=5nZpUwdSi_UO*thR` zi+bQ<_-AH@!^9n_k??IUc$}2+C1Kob@WWyXo1oZF|2(?yAgl2tvTx#q;o(XZWhl)U zPJoILN${+u%p;si@bDIvwEnmruFk$A)XnW*#=x7P^~{4-7T%pPG9X^%P7E!%cWZ4C z>Xa+GRqzAHLdzG=wNjItBBH(8Y^|zD1wGjp_iCn5+hR%Bu1K(UzseUDq8J4WSE_^F zVno0KCl?Dsk6>0dsNp|v%SN<2nfXpxTWW*HSOsNgOH?XcxmXP*Ra&N=kCg$2btpF- zf#pA2u?bQVd^d9^PLv&U&^!=TAVvud`UQ%T&#>V3y?;l&6}JjAoL?0>_(zB1N(%Nna6yJ(E)fdeZgDyYsbkj9f-;ykjNwE;sRZQ$P$;u3ZWC8$XTU@YBooXmAO^_S&p`3m)+ z6kb}4Y^9k}R+l{aXB%B}ipO;Rl=~oTmyV0IpedGD7(bX#SNwT_j+(XO92^UK02B6cHc}mM*s#%S<`hT z#6t+f7+jRT@9Dw1Lm|h}#KiWHr>0zi2>57fJs`|PLY!zYC9);6FW1!^^9jkoz znLXahCI*Qde!?5G-%+PyES@kfO6IjjvFO?5Y7C#6gSYz0#5H_B)rgbR^-CgO@$9zf zKNGn5N_SkZ+CX$}&LqX7Z7_M-yxd}|m^qU%$U5=N~b4R_8TEn-;_nf z6lZz*PJa9tF>_;%m(GD7;~f0O`v#mvQg&KU6ZceerN)>X69MIU?M^hjKi-^evzdW& zy@PNPx44^D2c!y9XVd7HC2~v?+sHWe@k$E-77^#Oh)~`5YgHdg3}| zX81&n2&pLJs;Bf$tqce`^={W3PN^0SkYS5k{2UCJDdhgF2R-#+*|#{@g|lOcrPGaGYJ|j^XeH*nL?>}C zh1D7Po8C@bWuOpu=DFTaJ^$c|EA3aO#g^78V0n$Z+rb0-FnSk z-oB~7_V{Dtp#4+1iM1=}*fq3QW^FDvi>$&QleE2_%onw$}QL?t%wr$(CZQHiH zPusR_+qP}n=d|5@T3_EgbAQat{UUC}u84}N`c-?cmANwWdEYMscTfXk6Wa*qs9f1*Y;T#5VqT#F{#v`l_~`r1sZ+6$|==nwA|d1`Y%$7jps7 zzqGmvNdvjF{W(i0Bm{wSyUG2Tmepn<2@ivr@NmK4K)g9319^7I-_(V%gHvGv6G!Q~=NY46}L zcSvp7&5tCcA$}uqWPjarDp$hPF`w(tR}bnI&Cfl znp{)JqXr^e0MIr^`7JFy8Mla&sM@%QE|o_l{2ok~m0MW1U`bpp%CM|#NzWNPhsls; z{v6C@^qICgnIzrjtFki5cuQQB=U=gHGff~Y+EH?iq)o(&OAI4b`&CI!NFLG2U|J1Z z-Z(71ksv_@Ze^8KJH{QWK+dHt@92+FlD=TMNs-5y63{F_>tfFut@h{`}UGkj~`CLd~u0;-P}gqR;&%C;2?vU6fEv{ zk}A)-B?~d(M%3ekno0k;NIREz(@F{0KnJ^p5@3#*d*R;>%+DwrzH>lDYw5dc+)-Et zVH0~MGw;`NnPZE*%=|ifhLA=HI@uF0)x3r3$0qfO*WfBS$pguZqmrQ;r+!bFvaBw7 zj1ghiSemZRPMs}QSwTrXhl|D9tdt?PmFEf*fA z_FNT{6LZu!MR>)j-PwU-t>}?gGCi}(FY=6lgt5Cer%`vuk2%hxCLBL*bMM$AzX{B| zvsZ4;BWN5ycJmL8vArowzknlkr%`#wk2=nyUmRcT-BvN*IY-~)nBU}M-zm&r_OX3= z%wK@_CuP){V#n@;PrJcrz3PrDFqt?&Ja=cdXwdF$HK8-B z;6R)~uU%_x1W{_ZBk^t3A!g~ij=vIOw^x0Uu=EB4O}B7J3pMhFz~rMH1`@3T0l0+cMJ@s9i2}@URCWs6 z5|!z>_kJFO`E+PVk>XC47S$O77p(2IEHVbtRaJ|u0k)!VXPkF5Twvr4O)I*;-Pq&^ z+WQu-4o~fRcb2X8zNFMkegOf$V;>jzpdZ+|>M9-{7hr>1Q=M+qlqdFi8*HwmZ~2((w|}vUoI8a#&l(cdd+>%-Q_%*s;~) zQ_nKd_9vgcdFq-Saz^};k}ui1$q`W6l+v1TAEl<-eI>h7@q+O{T2`yp^~eeIm#0S$?2RXOi5scNoj>u0pl|`;6vwhuJXq*Nj}TrK5dMppw2%FdW4&z6!)!<;wt6&SCqE( z3ApG|@R`ha?IhKuB2Dt&`z7_HqZ&KL*_x1h=hl!7hGX=Dp(vd5_3=)Jte?jU-KlM7266u3k;%!lj79;(9g6x2M3B^sWv#2Z`^5_R4GpHt61^ z>fB{yFqJ-zi{iqdWjwEqYDlO5tW??_t?EI=BgY7cZ_$eO@1D?=6um*;eZ-8nN-Ex3 zrjJz+-*+|rj=Iy!A*aP7cYUs-(%4)z&?!er$kmw7;~io1U4CIn+2&QPP&ekv5w2>K ziv~d(fvELhx5zf-?Z}-%RNif5q^t)0?N~v_FeN4ao@%U%5ulV_wZdFg^-y*02X#c{ z(6~RFHOnWbUhve9SyU4^&E60BDJF2I%ZzT`Yp^4_;z^Oo>su7gJ%HfIr)JwUx zIE^$Ckw1s0#Dunw(Ba{=MTE((NA?O;v&7jK?^os(SIej-dEDQ_K;=yr#M>)snEt+j zQ}!1k?PvHcvsBoL9}ZqI;ygbr%sC82Yg8qglR~W{1L&4o`oZAsk4tiy!=?$RX=C*f?KhU)L6f4)fqf3f z4cgI845@nqu?L3dD5zX?)06xBM5Kq|SEg5*rfhxZdDM+^IesIh7cA+aI0Z6)sXzaK z(w%ZO0{;-zo%4m10#KL*+6^Hue}$=?rz@I27qY+OiTl;vp>_5A-z|;tGi@CWy6={S zU`P58h8R(d`=pTN?X{ftWo4g=zew(;!LyR)a6*pl3YQK=!v}&H#P+EU&KE8@C!F1Z zQU^FF=TLR7p#sy%e?pZCK&TRc7Jl^}44$Z|&zxjVIZF&X-IV8xL@E3!58hL>l~l2k zI?hb6Vn$M}AL-=NB_b!qYRJq0)=_z}IMEqd>?pm3htuA3VvyugQzm}m#H2n0$~DIF zQo$6}rbkX*Ct#}#CT9>twY@+7`KO@pD!Ah zWQpe9F4^)uvgukI1a(i?LKonl^e4n%3j&g6u|pY=ius{)2Zlt)SsnajwVw%y#)b{} zTNGLR8U$wxv|0G>g3qlW$7~D?Wg2-o?b!TPI~1Ldb#mnubQ6`8qyl{QKPG5nXab<)^R@Qke&8(f;-T!eNxjvd90)TT?5Xo=wuY#{nGi(W|KSzsDqSia=(F}uI=YZ zbGMm6Yd5<>Zgx^^4nWvVtM*+ZbcV5et9Win)vhbcFDEblO>d4SmS+j==k6~3yh#7E z;w7nUVl8ZAX>9$^hQmMZt!eyE=bix}bgqP@q**~=8U`jfgvKTZ0STxA2~iNnCd@}f zP6vELuBsOc7`|Va@RFjO;>n@!W^L!}!ROoC7qFidM||GcVYEs#u&}&Fx|$*>OeVQa z>i!eORPmHfgLau-$k*P0PzO_Dr`Q*4>G6rxSEquM0JEyOQafO8J=d zG&upS_v=1n;1$?<3q$D)#_iBR4rarv!EtPL?`zc5p_f%EY%gA3XbHK8d)kM@cw7Ul zY(N%P(iWF0Qw30lJ38=NnstsHS;ZU04GA+LIV4Y9mW?^Blq`N5TaS&jbxYHk zRcW7ImGg2BeAsq&s-n5lAziL&d0SGHzoFXt?b?nbuK%vy&MM^_eU zOKV}KqOoYB*M^+*-jCaI#{|he5T@8Eo%efXicNIbtVR{ee9vI=;CGIA&m?wI?NrYX z6lgRdju<;Vw00Ss(G;yd)RFr|35kc@OS-dGj0q-#8Jf%7D9p4tk^bIGw8I1?E{lP| zF+?Ym?B*=xFh7&>5>@}r7Gm~G3F>NIr_4kvw5f102V(Zv*zI&ORL?ayM_=W)-SOB3 z%OQhB_H1@1zcUisl-a^UBo*$M)&-@J;qQ>$Q^;y#Kia2Ek6OhR+!`G;j%8ZuHkH6H zZ-S*AE6DIS$ICIO9S#%(tr-N-C7RTO2g-D-P{XE^qX=UpQg!Y+Y@w+ws+^Fq3*DPY ze2BV$Gu$1eMm1znk3wya$Dr|B1>#5%OF6Gj z8w;}$h2KxNk5>C3R{$-nWDO=X8C0|s&9=I_mk3EwIK*|6z{WIb!|6_l&G!R^Hf9WjyEG_F}F(=$NCj7;k^U5o+Gc$Z?~DOJ5Tn# zQurdSj6T^j-iIiNNe346(%n2AtNz3)F-mZX`!Y;FbtKNHN%T|f$ zMRs=BT9-6b^?@|hJdIuFjiE0kJm9saMt9SU)ETwmxheG}Nv+J}6H4EY7aQChL9T+K z`vNm1SrMH#vA5f9O01xG2#uV_0HpNxq$J2u?E7(_KlKQ)k5>@S=4>q~Jhbr&{DI9lB6#g>I;&+g;yiXfxxUWH zNaGjKWc6A9`9u8gF>GYZ^5zm|nkZoNF9_|8(6qxo_3(vc*)2u4s4(1>G+b$9`h?Ry zisT%ZKYkR3AnS(gweKMUUkB?xpK&%~UzpiLeyWMg6yjkPsiy*4Cn7|s-9dM9x3JOr zaJwTO>>hK$A0Hq$Ir}~?N3Of@eEqKkuLwu#{&38`q^}f5+5>IOy}%z-qwWE5jJ@C= zR--S0%+XEzYYe^c-kEopx1Z7Y0C~nA2(N~tb-?_C8o*~5X9J+4qV)r>iVhi$pf*gk z0korR>!#fxdS=}~z5TDU`_j>%>&D$sb_~x0vZELKQ_<}GwxhTX!>_da!H!V7Cf=al zF?YuMp?~;{@&kN_-^C5^n|?6g(qnuh zeOQmq1^G?Ay6^8Xe*wSBM}J4_hkR{ne_!?eYrJ$HciUwK2LQPIX}=NtXT1E!$dIU; zsh!I|a*!HzOLc5j4Bt?Y#Lxm-K&V#LMJ*C&l$zDez@2`oMlCB8oiGzDFrmOC$Z+k8 z-W8v{HhAB=Al0tl3rFZ%&L5axaB+XPxrLF)g35AAMDK26`B|_LTi(QZX<)12TI+ye$09b-rWY!9z2ZRVa&&HHQsvma zvzMHpyG#4!Ot2|dhs=$ZL<8l4riLhTCTj2_RJsGJ6hziMmOxe{b-kzRJn-A0i<&xu z#&V;m&t-dH>bZc;dXJ!2uj)ujyHo%bFF%zHTE!-2&92^6;FW{O2%AkAr?V)xP7Mv) zwZZ}+5p-!}X~mh+l%Pu^ku#UR5z348#$|JACNyC{EkLL0rAS;LnR@4Sb2QBnE0iRy zb@3Rha@HEHVquS7M=y+|4ORFB%JQTOqCp%nzX;5xkbep??ZJ21-idZ|1}4T?kyc2zF>rPekrq$)H}2M5)s ztNcKYYJ;WtUYy?)BB{+nBz@&s(xrx)UbT3@?WF$1RCXh_+b6Q(pkJgjBrk<{mOW!b zEhY$UNubjyDNC{mV}_{2L~$|Dt<~9L4P2#0I`f3_>`R@T>1d5bRAeM?>P+@gH!2Az zhpy0Oe7Z84t&eu7NkW_T3M|UZT7qdaNW;9x)8UE~^9$jZBjGv-hI?g)zKG5>cA1{c z!N490A)%HF=U#NiGvknq7$TX@1w!nJi%vOeCR%al574WP=RHSMO#5Gdn@v2F;>E4t zK^Uds!JMN4^AK(M^hspKW_QMd2prpRWe>LZmm1Y4un&g_Q5q%Ebq|I$6Eb+JyIzMLy_U5FHu!>65< zzc^)-jqSd5$eot7Dkbd2E!fLsOz*0()29aGwPlsjIL7XAZWfYJvBa~Bg!A}S2t#49 zy7=4orPyI+z9mdv2_Zd&{eC1+xR4Aewo7Z&&0^XPweq&8Z<#oI?*mWY5^fgwPICj* zhS}UeDpn3LAf%e7BD1K$>c)aqIU#iASN6gz+I}wTbAv@jqjgG9lcQ({3m598;}l&M z)=cx^tm1%MTXu0YwPePM6EaH0qZKNBXxYTRsb)uTcIA)7D_q>4>y9@O~z^i72f-Boa zui%Sd3e7#CH)s}uU6DoaMR@#VFev?D>Da411#-YK6<(J`U|Ah zF~7l>q%(&l%uA$1ku}iErvr5yjH}*ov{NeY@o#1;GM|VD=<}C?%Ud@!v27ohxy$IMjdM4@GakDAdItJGt7RD+9PdPR;@cH%49D+sSE7yVYmbZ(6Vk} ztZE3$dYr}i%J|UWWBxD~-eKL+n6-Gf%Yyg!a|3+g&J04_SAHR{lHuu3IOYowRB?If zRDMcNn&PmDgD)tk)fAZ33BG-bk*Zw{_x6TZgo{G z65jNeudl?0crJmkUHs8E)O~|FMv+~-<{Sgxol5UeP4>^9Iy!tTc|Mswy+qGySw?(;7-p& z?ogIx;!UzKv-p}EN5uj=KgFuO47(Oph1qO9|6KxZdDk{{-*0d_Ct-?^(;CxVm zrjQ;DLy4z@(Vqq61Ac+GnvUW0Kl;d~A>H`p*o(KEZh_{kMl2I`# z3{XXulNQ}Ivd_^j6}r}s4xgYv9kFsv^x@tx3C#^qkqmMK!g0-25m>ck4a_L02-M2_ z&0lYhROF5Z?GCc=BQCV4qkZbF5}PKVq={%O7EfLjhUGk}f)(DpGRmy9NO4bc#<4Sd zEh11kwFaRmldEnlza|aGrIqYr13S{mTUzwwgI!u|f|yZg5{^dKc^4UF|>f!b&x|4awP=ArXRz1j z0Z-h23Vsyq(ha8AyZ#CgrU+-tPKv!!YAGM9tr+`ZfJF)e6<8c#|*Tk#f5~LbWfvbSLwwjW7g(C z{2l+G?UP2`F7$ljnK76679BWuC>3zP<7&hsw$Zd{U;zXTcHiylMWSWCtK1gBnljrU zgP?x!;Oi|ofbQ7RUqKF%NSCaTk)K*oQ-G_u6N0LtaXAS`UYo3Q!wS_KYz-=Azw!iU zyR*6J+rS#}Ix7+NSU!oIV?5%IFa)Hpc8jV*&oI$i9RLnV!+-Y#%haZG9s^}JsQz2p z%Sb-P6RlcRdqqS@jyN+Ar9*RI%@JB2!R$=yq96ZCE&pX4{!nfEbnFW1x<3a-YA#s| z-!e*4E))xzRb2JW;?kyHvBL%0PPtXG){sAwjuT}DOCpgvEx^I;Mg6=UR$}M zs(MDL3*HLo2ykl2;x?uS4XnHqA8{sHa*E@`(ll@G=#|`%efzH-A13P!uDnCa`K^rX zUK^o4X(9_PBXcEk_a3HQA=B3Mw zQGgf5`Psfh9uBGF>b}{aA9s9w9w5Q8t^MVIWu^#L_w@@Ts}50+&xMQ5ZUK!+Drpb% z+Jjr_AzU=V<_rF?&zX4vgIdf*Z9^QO9kSlFZEHs`Qg4f@Wz4J-FTg7&M?0QVni)-S zF1FQOy*D)~;8Z!XCAy@iiAmL#y1PT(h-@aBUGR}iu*bCrAa0-dkrT)jziND3Qe*y( z6~s0nnR-mg;#KQyzdN3@YCu|njaMEA#_t7qw=}l_B*U+mC75Hb>Fs0;?6Za~WDLp0 z9a_TZ!>f5q^jY1OqhWN(PDf^PQ_DGIEhbcwu}>yd^!1J}>QoGvkxgT5OCGg+9UX$D@IoIXq95Zg?8YRZpc!Fe%UCzeG8wY76 zx}SKh5T`2ity${nmBF66W|pndI$3%gqINA?MYFZ9spT;E#Yc9yhjnl7sc(~Xg|Xi( ztYFgMRUJk=$JbWTHqLIgFBi=kk&bUFjOTS)d5B^N6@W-mVyE4wie~b(f>(ZZ~UZX#4G{UPE${KfEnW!DDKJ*T8{OFZDAa|n+yhk_K1wEPL7Sj$&5#xp` zicu4-S{Pk0Y!=0#-9oCOZP~V=*)mlNigYa@o20C|pqi|FbXdcrS3h?F6-w3(t62th!S1ip^!fi;+E$B!j$M|~jBVfgW@gs5)$?<(+&)JQIJPHerVu||wiBzB^>7B+xqh%Yo3koZ}#^9@vBdAfsS`D9lw zaBi4pUpm2<3!v{)88;FoEuqtjibX>l$&E@#)d3Av^mBWx)d;LB96AK^R9a914-AeTEIk;o_T^SW)<*kh$Sb;X1JAM*$iG^Nr$uYq>RGlG_D%FqVVo z&qKbC36$FcI1S82uqcubA8#~Xisn`@59tx>e`X8tKms40PoBRH=@HYM?C8Wq({CFi``$X24s{@ZqR^yiw0=F z1t3i$fF`^OTkZz5OS;dC-7f1*v4#og|0&sm!okXtD5mj+x9d-vBfgl+Ui9to?)UOK+^IGcMPXb3FrVx#MR0C+g zh<);1yXAxe&X$ZLy|Wo(zXqqNqTqCiR!u{h?uqfToPsCxf}>wM=gxdztikRZ?{kT8 zefItie=z3S(YvgjpgCDey5g;Xn#2hMrh6DPwD7yiPy5;sJ2fg20u@I_7o-EEj+U`q;5lmoh6)a^^@ z0d#A1tU5y-r=EW1mZq5Qj;ZRJrijEm(O}P3H!`|Zd#TTO*yuM?KJi7%%l~faMgQyN zZu6#TyPsv4?05kI)g`Dz0y%|c+{q+@3abQ*cmxV191A6a*)g+xM5O_WSp@eqVnu^u z)gXccTGfbl7UfBU7|WvC)dDGIon*C0Gdo7DfpDT_GdeD__m9GXi}Jfp>DXWYjms7@ zy{j>8_BzwkO;2~ex}I)2G`tHo-G&7H8iCLTA4?1|+@{w(2Rl`^i*+2|%o8Ibv0I19 zA(!5aksv3$xXBQgfD)eBDuz(ZHUw9Us1_bz?B58o9}?09Lkz>iELHZUmyNCoiVU<(8!f+s-D7!~1?iGEb_wpnG~T15{~}19*KTh30eMD=u`x|(k8!36=jvGw$F^ZTd0e=A6zA7q-pq;6 z{&EVp?yl44_ume~CnGV{UOOPhCgo#Q9JtA0x&6l@sBy!5$$6CnZ*Axk@=* zNHC;^ONGs1HiK#SV*r~*c~t~4#CsGSfV8QtH8+~ z)}|F)>_U+gela16nY(Ik|2@mySL0^P7G-uT1vfrjNPcMGj`I|F40{vuTf{Uk?41Yk z^q17>4w_rv6J_)lal?8wqV-Q{uGc{2}W^Nfr z-^dcm#d=6)l!c~}CP95VLguF#djtK&Jz1^?O3Nd>oLLgUmpg)#4XG#@M|xZ6=1H{! zaHbub2kJ;)cJcai_cMq|Uv~L=r$E;}YsKb+JcEY^%REq%-_`Lgtc!IYOLeZBbtz{2 zAOA)qk$&%uDE>TAMn7HWAAaS(Ee!u@PxxP+ga2+K_)l~&MdjNLTlB{)&h2Ql17WS% zlCnS(i=D&HhI|ARD=ihFgedV{7~=%~wMc8v)*CzTWxJ9uRbeDg$|h5FFX;3zaN8!`;E)pFji-iK zM1c#DoG3F==braAcLLwQ*$q|AC2y#X>qB`s(=PpfVVJarVY?d}X=vfC&yUJIz}k`1R?;T3qwPOQn{$b;~)&@QF@ zh-E+iqKC*u9+qRqzOhwU?lKuIOBRo=={Fy!&KZ(0an9So-k6S!mspQ{xs5F!aV_{G zk-2We7DFBP5BPeCEYvo@kDi;JpMQ6!@&>t=x3K&e?vdWDLzznfjSeTn!A4+FFsQA6qiz{W=IAeU*#y_*J z|65xN?m#>i?Pozk{)~Z;{4b00zqfip6D8B1&X(&xcljE1YjtFGl$|6Hq(neM9+4;n z3M)K=Veu8P3KV?{5R{QZ+pGBPSYX4@Ss8)K)z;@X1*P^k4%fR&-GiSwj)iVFKxMT8t^pl6H;O%W74f$=Il=yF=90$w#K7`D#sP zDM{*CEYl`|mz)Xjm7!`|tIka69SfpWG)(S!scRZ@YwruWUV6GBTwJ8V)6%%jn6j9A zp@@hWT_!iDL5TvJOd0xW=Oa4It~(^d2+U$6_scFZXmftGR6 zdb7)wHe_rgm#jlNhf$E2pWY1{y4_+V5fRnORQ zjM|S5u8p$cZCI14rc@i$Fg?wz*kD^S<_LQ*l$mVzk7}OE6B4qJWpss<%nNf^B2Vam zpi_KHY;2vC!TV{@Vb*$WNsXwX@&-~PY0+7#ly+v8yMV!8R7P9#l!BRMhGLFj)J}N- zKMYrCny0E?x-Qf{de|$?sb>-S3dvHfBO z%0`9CHVbYCk^CTi?RijjTTriCD={e))mK>9uUWxKuX-V}*ql|*`^UD5r+?x%Dsllj zD?$msmu%qoytP8MJJ-vj5%QVdS??YvJePUqWqiGWIv~n9hq8NLR-8=dHGwv8q>G7* zdLip|8}BEG64wLBK^@|zggIW3XVA1@xAYht(5-_INa{j_nG12OuEI#B{}CGtxdmQt zuxLW~BfBkJFe2m<1aL;$xbet?>6f9<8HW36DxO#LEG#0`%Q{i2*Z2)yVzIi1luBz? zu8|Odq>f_*kV_BDP656%lJ)W9j_PT7{WJ1|fb2&Mopn*XW}*HNYDH|-*i=he`?KxP z3UzaQ{o&lo*@+aQx)*k>Z`cK|Uo9a08iOP5dZ_jM0h1x8PG17+a1e13rKk>6R4pe^JznB4U24>HgvtWuf zg@9C!2EkP42rF}lj|=D`SYvPGAaX=umR$E1ODP=N7UmK=YIoV@4hlSH$dBE&olucf zQ43?X)mQQ`_gF~^&+?S|NlLw$iz>QO%G>vO%3Pw9G0IZN$%~dy-#DNgk`p@l$@kyl zQdQ~hN?bIRI2KaM#WTw_aob_L6lkR({2h%GcjSh!?l^(f9+v{ZV}3_~bF2Q?I=5WA zFMw^H18Y75?moQkUIXkt11}DH;M-TAd-tGz`xhN!&~&eX_^*NQ-3BY@9|iOt{m^

PIsIXUtC-Dx@*w-go@H;Dk_gggl%FTY?Hf5N^A) z3m8V%Eh~o>@;i)N9#7`6Ul2KZ6ysdXdR}VqkF1=sF8`b z(Tb%4ydw~z*+TRL43LTVpBO9_&(5AMYo{p58qpxN3Q=a2xob|hU8dsgTEQ@K?CIh$ zh^uy`-crG|U1mDPU1hjb=#v)#fvoq!IRrS@P6x4bVRl- zWb45?7u7VkokWmf2jwZKJ=Vrx1UrkwcuH#aP&=uPRVK9x4MV6H3NyA$GWGsATfl9h zt-;F0Qu>qD7sF6CttKW=jHPzjDVuA1_Pdb=TUfsc=GkGc9CG=A(OdW7dK4}VKDxBd zs}ju1?~O8+GyI^fwK*)oe5{+ArY$ZywVDtic5gyc?n|9;X+uf2P)xl72o}c%vo67w zkS>jC+ILUIw)o(vA6E(<;b^)2zDgynOt;N-OWM zqSvuCkmI@ueC^MMA^fh7hBbWf565+UWT)t{6LJ7^$Nn*Vv0JXlCQTl4k~vJ=cL0+| zVv*e=8W3ZTnn7LwdV_85r7ci)!@-AWFT2-SAtW-Nx?*9icX!3^h$gPoF8`jjWA#NZ~3wy00kM5@N7hbx?-V5KC$xJ2|MM zD%cWkuv>X>TX~QrEs&EI+*u!T2`%`oIM_2k*peFbp#*1Im{i6b;WP{BG=Zs|8{;DJ1jZt;Jk7>PR>I%`=o_Xu;8xhO!BPf2Foy;uyg=JtLb^+FfPnadip@ZN-He)?B(@i2vpvr-pW5Rxc%m5w0DaXiW%&V)X{dB zZ3{#5u8^q(OGwZwbk$B}HjrWHFkz9;_gEbG<|jf9bdh|IVF`(j;O>}A-!>ETW|gP~ zwzW<%*j+mM<+_GUy6#~au5}%jn3yJWEOwLDItP=Zx-NZBhLMIpo{8Cdk5-}(u0zM) zsHej_qK?d>q4V7(No%Kpgs)ALvtVs`_+yeNG_tHwm9`#Es+jj`K?UEDC>AkJFtXNS zlI3V?Q-lGJ zZEYuiimN*L-|j+w=>R=77(`q$+e8Zp3np&+2sGRt;SO%+2n(0!EI02KA-za%!H-zP z!)lgocQJIo?s2~6G{5aq^oP;r311A~i^6yz%H#Rv02w=dd_UWXi$N#{SnbpCOq+k0#Af6 zSL(ae)Wf9{Mbb@Elovl557w>7hPNKgCSv?CaU@Hv@ZT1aC79hd4(VVX)z-c{e1|nH zqNg}5kp@MtN6peBj>iVeGc{(Vureyf-|BRw-XxNn-^DF5azu8~EbE1|sRQ*uYBig( zi%z&+)aA;qDTT(9wj&qU9{?9$!M~D>SI@PHV6xpkr0zChLd-qjju(V{=Wc<%vM+3N zflsb!*XemW%fpK#ug>dt8vTiM4uu8caUc-{YX+mod^5?}qv zKy-dG5Q_iIK>k_2RQeCu#~hVC<)72-7abvuCfb1i>yN(SM4S|e*8H$t6of4+5R&LX zuMV4ZXT9XPnekLm+*3_ljj_4+MuDrO9H#kg^i4^7vHm7=ef6D z=No;$J`d1+WABGpwj!%cZNjZ!-m zsv`SBqeMt-gwTcZeANL%F(9`zy-jzDOdd*vFcrsn=&$cY>b2MgB~*4)4<`M7IE0s@ zh+tl55eFH=vWv)UwMweb*yTvP%xkcdWA%wS)t# zRH9q~EEZ$pK;iR>j%;NtItI?eEfzu4QCl`r4VFqpy9CNr)7qY5a7jyr7|r%i=7sTUhO zu7YZ=+0h(*TREKswiMoU8{d#%dZ|eR`0VWKsNviWD0b3cEJ#axkdFE9b9Zw%(-J!f z+deZn3H8I_rN`Y5gV_Q<_Hq@5v}aPPVhv}tvu7FrD#u=d_F-H_pnI$W#X7fGpcinys(s%Q>uZsd5vBuMfE-+*(v&fj9{(R9l05Ig~LEKbbBdueL^^5Adx11aRu8buI6 zZ4Wo1YbKA!x${bW#2)n#(B$@teE)HVF)0cHdEyzGH{OPd#4ZLe<$vK?N5n$Pe2M z;PWz#TNLGqbmyP$w-sgN(r>g%v)lYTRs=l$-x-Yzkx*j6gp~J-u&=BsjR)wF2 zb{2QhK)R!Zlbg9t3A|XoJyW4~zw+)jld|LB=2lU)9yol>o^%gy@;~pp2HmoioE`1!y|62zR`kbXe_($X)s#@aPwtcopDpe-bKjny#;^}DIE53yeh1FNo z7M0fFW_s6SruABS^6yB%wu>8tm}^yPW!xOLJ;7Z3xHQMF+3X#o>OEe~Lvs{^0DH}{ zVb91HMO#hHjsY& z0I>b|LGV9&$G^b--xN6$bJKtA2#PczT(O6eyp6@P<2IX($KvaP^r6|8^(9|`sjKUl zhXX{J0z?Y*97e0smP;??pIzHWn)^`%rG7#L62V{C1`cE%)2k(OAR!_miX|I~CmX3F z){BePw0Zo~-+!HVmAlt$TW-{RUbdzD(1UR+gEiqxf-5H} z^-BXjYnkXctgfsyZZ{a%NJI)R+DAFzKFg1Y316U$c8Jd5JoWHqkF6+;J6(GjAF&Jv@4c9r82 z2mK1zBjRKL=+6--)h+T8DQ;ewT-JhA1nva+J7CnNX5rQ~eap%YROK`}ekA6CXmyXj zb~+88w%C5{S~{|53dQA?PPO0~p0=I95qp94UJZjHGRCI-)0n{N8blw}&Mm*If__ln z_K72ALYKg+^;Shph$L!DB>U3EMLvfhLi~hs+Y3)<|5N8F=5IVJp_kmZ*fN(@m7P0Y zWsOy+&?Gs_FI)~Q$~Jta2jcjaE9tMOPZIveF20oH%AG!CqMRb_DrRBFpKRCZ;{jYn zvKDkXKfR35U@!4rHeuJ1J-}CY`Uvy^CtM^qPXP(gpy|)_XHq@9S#s)p9bIAWZvzQC z*tBq%9U8NPpuUk%UTQ2UoM{p>P<_($IzB&Kma+}G2B7kHtRg3)TUTz;A3ZVuC`Vg; z+M3dI{qeO6K3vm8vok%UKrh>F;0yu*Jst6WnD%UCBVKc+D=Im{s_nEv1?W;#PFpKB5g_l9(uXGwZE&)H1oato~Tw z4L*^+g>hPzBCF+xtx}JIk&8rN^WLe{6qQ6Rp(W>sQ$r5z0f&Abv|=(UEKorsVswxs zKE4%!2d;>dSn@)J@OWp-_IibdG6E|<97H4i$X)|$zo`0jrv?|90Ue$k`E$fWJu<%p zM;brV@D1*uhYG6Kl3#Vg&=6AO@a%O42s#0ZCEEPC1J)2vKis#3+m|CulZTkjRiU|< z1SuF?lo&mvhq0V7w5|fEPDwiICmWv5K$vOHsL;;U2r_&BrnM6DiFAHWu`V(+&f)7mqKMW zfwJ$rq!8A@nzoQ7HuFkz7?MQp-cqa)bb}aGNzvzoeVPQ$HaT&-tjFLmBuT21w(D>? zL(B7xj~Oy+bbUa@gm2@(8Ale!T7Y zGL)m$oBvJ=D*)OgT<7E|K1ouyW!pRmn31%l+YBkD^QOOjU8Omho7d#cjSu+NS|er` z1F06ZsX1if*qF!^Nj1NZ1%_Mb3yxpd3SD8K%_wkuk%z!7h%QzU#G-e14B&VlA#wG0 zKLg=#CXo9(WwG8HGXAvSIIW0?Z2~7CF>_>eW>;TcnO2Q4BW4>|7gq#d6he4}MxgA{a=iI|fY$Bz z7zE8Cdvd-05fM-8uS)y^=@sNzj(|ClcHr%r)ca8z{8v*N4D!{gm;T=MF3rxpRX1gq z#l4^9E+qK9fl)lc~_cT={8$_x7_)eiMh+Gop9%&U*^(D-y~+ORzmzSiW1Z ztIKL!&}~R=Av_rqPXW^VC1u?$uWZ z2=6}HI(c+f1veH^Itja*6vU5kSlkqaePobBIjA9%m*w8Z>SzY(9S;yZMj7v z0o13=z&z`a-UExca=VKA*#2$dyka+^$6)p#hKbtz>+fU`f2CkV7)x^;%ieYnJ7w7h zF+-ywb8}2gzR)lY{?hRTZS#|eoO{1uZTs?|=)%$<)eZpghLvX(I*YyPi=)Yd-6Ukj zV#+SUZWAzyAhL@7PTM--FXF+#P$zK7bZ&kkcrInB~(zJ5Uj54;wT#W+U%Erj(rxLwKCL0QxTd6Fg^W>lJkT+yHt z`tuhv7!ZUOpiD8PRw=Q+|<}Ml44Fmdu-SdQKK$jN- zHg^&z`X2_b)qb`%li5%4!T3*Z0$%l~IOHv}UoiwlY7QrMRuIe`PUzk8fPunZka7DGjHM46{OP_TC})k%m4{$PsHkj04~dyLiT9MhH?o!%M`sNqa$wFSrP-|EK^5Pwga|_D zqV*Gb@Fs`R0Zj$6(`$|+d2PXi<_-=O_$38D*$7GdNao1Viz5T5op0SGPHTD3LkZ>6 z4J0lQ1PBaZWg=4SjXDii=QNYC4QT_t6pPwkrd38+j5V~h+E%g-r%iEC+%7(r!-bOj zWlb2RQwFLLMp>j0CC7dx9eO^s*aJ*xUke%~F)kn4&H+Hrjbl{WyTo%pI}a;LOwmTW zQ{_EQDwA}li^Vi3_N<&Yi#i)H7nCkYyOy`4Q5U2tFsO@-T*owLN_tig@8_1v(Y>l0 zCzPGr)@fJZ*@5Oh(aWFy43sLFnetD~jZj6-)rRpPbZK~(&$a82%?+fs^!RQWj^|pG znho_51f?wFkgv#X*{ z)mH@M%D0O39Qq}{4!tx#eQBbeqkP$E2ivU0k+&p&d|4=!mZIg0k+Z5jGXcJ7U;=1a zRet66lISrLS35?@&=CIi@!(|=uvt@M-Lg+PrDnn#RIf%A=ZtC*(p4YRzAduSFqq!U zt(f$rS8Y=f;;yO@lBL)`InsFq8l@uE%}iUDuZE9vcbAA%R4QP^PR*il$v#>(_Gxao z2$Qu7vXD+e)lA-h8k;1&d_W(dvJkEAOa-kG=}&^wEKaNK=~8!1kuC98c^gGtO6?a` zfJ~t(OjbP3PG>YgYlm0w(jo=?fQtzuw+TtJ9T%@*3j7vHgjUUaH|`>xz-+Qv{EXde_UQpJuQeqe&l!qO10sx<%Uy*m7j^~dF}jTj`qu{=Ds_sW9o`mF9qz&o#7`1)puztpV6hiw9P4P>o)owOC+*b&74}7N2^zkO&zse^GiBGmn_v!8df>S z7CF(EkJZj>%`^5*Gs919)z0u6+||x>R-lmwqaqg^a2~XNn5Dz^&hNyrPtiwI<)nQs zsnT14yeE7pf1wW&@A>_wh$E|&o1D zsm;`C_sOX@WAeFR$f{EVi{SdGE1TymMpXND?2wa1*Evb`l;7_l)KR_4?Mf8v1gzboza09WsReAZH+E6h78^Zeq{tI?X*~= zyE#X9b&BTl5W)F2MDro8z@foqjj}wm?bG^F%`G#+wW|+2xEyG#!KO}>Ze_abuF}b8p3M+ zY)d?Q?ejk2ouA`POB^G)Q_36L_R!5Ty+vGGPA@{**ZCDrrxv&4bp^y|aS_7#F!x$) zxn^wcp&~gX<4zE5N`ox@4qK60Ev~k6B~kV;alZ+xFS%BJk2-aLp?Tp_q(}t|Yhlhb z;kChjzd@F4UnHh6m~_&1B~abL-FnI--G8?DqW|+4jbxr4BUZsWWB2 zb)BJk7=cu89l>rjxK8b8o)9hHTOw?}Sh!Y*$kz*S^Di50zF^~<+Fy^?zFbwrSlOc}t${rdgU|sjM`AsDN~7wHaihM~iM{&EHn<%0^#Y4i(2L>}?K?)o$c>j%a!H&h|ni;XbaL0=xXZP2_yj z#kF!j`sfd~BCe^0sFy%RPV8UY(;hd&6CCIf> zLB77iCFIe6+^#kGNIdfhu=g4WIIo>@3Q9dU&pwAad`kvfLC83lxP6kn(Xt_2ap7tu zy}ay!BxGH2&J>Kwt-`s!YZqsC{$WuL+oXB@1SMm*MC|FuQVz$@@MNYJcc6(*=LLt_ z_pFc6IhCA5EnvB3;K-zzPp~P9gX8T#UpxBqS0e!0vbz%xGmXV-slK=-kHv|(Gumzo zDAbYJGeOxMfVr)g^oRqqW0I7F17lM!VJSM`qJA_O9o(W;ls4zJV^4ttVUp`OuzhUU zg_r;ChQ{)O(5N@x3@yxw;vJ6lhzrWdJMiQEgx+^-L*<2}8@nf%>tnd7Ex4f#RMNHb zbR0~%;rK7e>Do2QjxXL#$&<%sA+KxZddCw?Yr2-9gHv576dS73$DE=Z?%>Cm6C?{O z3;`aJzfXU_4x0ZnL?7=#pAU+E4T}F)z%L|1U?1#&D~TIQTrDDCAA#080In7lur3*J z%}HNF(C&HAE<0Q{8L*E6_|-w5w7^XX_JVW33}Da?4YH37Tvg_ViVoG^hByb+7tHMj zk>G{YzTt-_1)L5g@Q#2rif@RUZ3g@YhJD5luKoa3@V;+25oGU%+l>Ul3v9jak7d^z z4T6^+ubDqGPx?&3`&{BXfOoaIUZ@FPtoLA`?%1fwfp-LX=zi!9)nFs~Uz0pT^!6P0 z=_926mGl8>jRSjzQ0>+=LtnYsg$mpS3*6ng-z|jqlruyB8VhIv?}LMkIqP{TXcq$a z79)SE`WUZ=|EPuc1cOrv+!YPneRr#+1m>k&Y)e^jlLGgaYTbyrp}I!)hl3dM&HzIT z+#Lzp{a#ip{70bNiD2jS_X1=g`(*ESy990&1#T9&Tyx+()k^Pyzd07)kNrtLy)~Wz zKez(^j-X;?_L3(bd*7EboqiW%?0^x|Js-+=j!yK)!8bmH+8;83tTTU2f>@sHVus!5 z22w6Ssv8o9mT+qNJy8?>Euw^#XPGSR4cuHP6^-Um6Nsz5_NM( z0~2X`0=183)goqDP}pi+hBmFgy^RviTcpk{`X9{b7n_DT1>pGR1RJbbuCyNkButhh zpL+!?&8#URQ6rpr!=HXkl7Z!=aYg2H`}=c2THb1;2ysp!Trxj#EFx6B0%QA(AzZR( zHY$lXx*cgQk9I$=8%kS6QkVLl3A*}T+lIK#cBCQZy(;tB^Up6(-%%HBt9q+=I6Yh>U)kjWY*e58Zpi zI;`|0oW$Ah{WmMwew-)!AGQj~|F?-D)Bl?o#{JV&A^3~s_qVG;`J<-@U86q&a+e%1 zf^Z&X>4SGhrITg5pEThMtbcd-E>PzUkSDnvD-F1gnO;KL7~9w6w5NBM&yUq!Pqucw zwb8cGf?oP-QJNUADQ1~Y_SV~{525Yx!>iB=d}Mb!uZX-@tqE7VDE;a;wyw+EP;0E{ z2;5faBGR5Col)fh&I-1moY>`PCB`-5+T>(Q*tc1mfSK>qdOqcRcN0-drh7kwBa91_E?$Y~v1VL7&6u?GjbnfXDk+ma1e?d;tAWHqSkFs8AP=RN@;jE5i82PU1R1jc87OH&|^tUG9Y+oHb?*!T~0p5tUbwTKHZRNxYBLuKt1Kd0R16Gk%m_&U|Dt> z`c?@WyrEZ>e927Zx_J zLGxTD+-q7Xs5BlLb>%{Ty-u>st6pIjmf>KQAk<3%G`+j$0CBQVi_z&%R^*PwGo@@1 zfOC;Vp{@?>_1~U>xkH1#e%~RW@r{Q5Uy#rO-`-y~CMJrG_TLCK(|;=t1Sx7OBAFt4 z>)h34I58jyMv^O$Sk!};p{~p5!vinQ@@cSwDmnoq>t~0iiW97`Jy!5$@n&=64+;U7 zjRVFdE1y7J7s@^YB`2M0B9PG+LmtySCz&UnohP54IXT`S^bur`!N8;zQzF~t*DmYc z-P%6sJ%&r!tS&CnJ;tw3+iVQrflfm3D4{5l8PDCDI<$!(v?x0`Y%_l4(db|n$Di{m z>LQGu5+Ss&+{>zFBh&{tbb~loLZ>mc_kCqGTk?^x=vA4S;C^8u+p{ z=^0cp6Ne$M^Ry%v8XG#@^|cmDp4aF-fBy);FatkHr=8k80A~Ds(w@`VTvdchMk?Q(?z|m_DsVnj^vO%a&$5f#QGx3IPZLM2Ar?%vf!k&)#iR9QVl8dwb?eB(KBi~Bk!%^Eq#TF z3Bd#^Yd3x}n)oow4(4(Q@;7mOZ=<2A={g%NTs=5IKKn7h%7m)9MIN4V5CcR4TiTXL z{Ge>kYiql^+tVvbLm$`S9l z|6I5w@0iEsq{9^Roe50Apb{n;?=Ht3sk4_A4!L=&Psvo6>^QZi9wNkGkZQGy4`3fa zX#i$s(D5;#3UNo-CEv_m3k#(a>;bWjyb9CxQjxa>hwo(B(pK<3VSlS*6C-AY_eF`} z=-+-_L-G_bQT~>{!y7sA`=SmeE{_5~V423_tNoh&`e->_eAl6uPj+6X2c+$J1dc)) zMV3X>++;Is4;02hKHF}I345e6&Rf7SiD;bfEk^)710w@q408G@HhVG7?yyZt>$ynF z6sOzBPvZIl^k^|S(qb1~S@p}LB~h1MdCC`E1u!WYH=G3yaA4oE66AYZ@1TTO7KKME zgFECVEea){)uNmktZ?zt!b3_yk$3df6c&9*gX7xd*u!EHUWmhjUZ|+Mg~awJ^!u-g z>j1qdVLMR|w;sQ=5?l$=OD%y%-gj>-D|>|YhjQbQUw%`H9Wb+`4|-{okSVRn%^st< z5+5D-{MXpdFgNyy;G4)G{GGo<|8s07_npGub~yi`88W5e=Bc#e^talikd4W`eh?fY zSa=kl4=cG3y_Q%ESipqOmk*zBc()|2M89%wk{$|wzuhjG)lQ>CIupdAL_Ixz(OytN zgwITit&!cXfm!?2Fjt&d;l?k~!-5*!u~*)SR6ThpV=U*J+n&?&rRS z8lS%uKPrZNg9-iGx<_pz_Ih|RWE%%R1!*z}_gwqI$@Xbis8pCI`jo8z_dp*ZpIgEXM}yZO-h7JS9^+oru{%5UiBhI2-M3AM?vMUvB|;AJiXblP7H zpZQ8@A&ZiYqu)&%Q?8rfsZ~vnk_Rxfll)oHMQWtG`?!@dert~jzVhMj%w}ebbAcv) zXJannaCROD-RETdpV?QQ5{)bm=B?6tw?ZLo$c(>4N{LX#U^DiFP={NfHob`6OE9(d z-XRywTMaY0ERHIRu8`GumJ~n~s|2!sorj8>0J9;o7}zONh#hJ;HHxn`8k$()BeJnn zqN$k$e%6W2<`i2~H&U4oi@3vxh}{%oIOO3B-QAkt;H;9oY*%puwgd=^}h|oVEW`1nM7w@o5Ufit^XTELulB6 zqv_~cr<_Y#{e;7zQ=8mpqSdRjlY=`~Wyt9q8wJVL6wJ3oEF@9!e7YL6HHi&O+VE^m zi@%FoV#|mC-6V!VvlGyT`Q~^r;O(Cyx{Eu&CX{26Uw>T6C|}h=f&2iY4vCe}7duXu zQ$3?gz-!Ox8Ma%e=btb;+pn`^bcYQM3JKtxGUU(s0|O@l+3qgRW6x}8+gXKgd}!S? z73RHJu$LR{VP_^W!4%A4fEop1Nbq1^|L%y64xf6E(0c&^>rk>0kS9k!Ee7%aN1;yn z?A0mNerP_`&XbE3J2os!k~q>g0>F>+Y#4fh8+&d_L{sa|xFQ==&l2v9E21VSB&uZ6 ze5Z8`YOYHdpFIJT-rBIhT#%>dTFQz6^$A*E{;P1OIZX;MpmfyB;8*;Ilp5XE-3855T4v|rFQBe><<6>K}rgEfZUH>Ay%PTVCJ zY5v`Or^3*^;^EKrIOMMOPq@XeVliGXa+Kh~83l;x$vD2x-sk~I9# zO;0zuWQM$1*AVP49ULG0ux?u}V%8|6?DB!RZRRbK(CdX;@3KGBkYQ5K124YOaN}1X z%Y;~I-~$O$_xd;`h52N<45sb8^S7ys8jMTb23)4~CZD0vyvc74OdXOHhf;40ICv=% z5hbgJ+nGN32MG#Z^4)L5iaB$)6n_FWskeCELSYjYGUGmFPtk`G?m{DkeiAg08AZA- z2$R5_R$|vOAVQ>xsFCE69riW=c&NZE`da<@oHLVR8~_S`77Ym&5nuqe*-FjLw(QBb z4!pEyFP)3oC{bxDJ~0f4;ppCL?K9BDv1)qis<}dBhJtJ&pe0h+0oCbp~sbq+hp6^GYHh*5gK8R+HY7tM815~z( z_uN$Q7F0pn9))5Mh?i&fgmF|!(yRBRdXT>oqHQGY#%kx2OCEbpUtqf@MkCXLeO3nT zsB3*hNW4%9g?z$)u|qwun*XJG$qu#zbjSFhkWZxXXK4<^8FHm1FUcy5qlRa`xO{{J ze=XkrLit=UW&z?hvgJ*dg8ht(#+$G!AHX727=ccz|I!?hy-_3-1RIJB>l78wo>O@D zar%JfHKj&JYG$0Yi44L1ki-GPw%`34O>Df=ceC@59yxzO=@MHXLA>?icazR&R5~wd zhi@lGWZib!AM+N(%@E+4e&CsNy0;u70$~;&xF=rn#})#fd9t`64nJ z%X4i`HrLq$+#PH#ZtBm;QMxP2sSKlRWs>$BOi67-99(+CPw2l06qmgx?echtP!oG- z^0@7Ua33OyOWCW=+M>|Zm8UONjCE>!$XlvC>=CoAy3ET@KK$dCDkER6(mcU)?X{ny zuIrU5&aw~p#oL%1gcejqto=*VaEVAEiJ(xEX%_N_cOOlC5mR|#!nrUGUVEkE`62s` z%AA-_&*)JhAH^HRJaGOYge4n zq^UCq2@Rz~MDoUAC6`d=UTvo=mR+`MIy?33he)^AUGD^1E0kBLrdwCtFTFfs>mdU0 zy40TV8%pd%^E--Ux%qxw|LgtX`&uuR@=ySeWMZuX^^u}1Rj9E6$Bv9V9p-#MM6-NN zVtqxF>aGQLz&-QQG;8|=ot{dCGw5?OU^83g^5=1fO_LAM(=XN-Lug5NI)gSC(^~!f z4&!`}BiHBru&X7cEz9{Wh4$rm3*;^10g^^Mb~>_0cG_KO!_`B()e+m4k-fR$TIuMm zwtmBBWDg12+?J(3c05Eb=XUOm$gr-N5en=VcC5v__v~8%hV1iacdgU?!Hi1!w8y2- z8kKU_JeB^^1Wt%7p0xO|P-_i=UR0&pA#Q5p*~V&9JC=3WE_t};bG|x%uLOyn3LwDd zBGI*PWGV-VGH(M~f5q4hlGTFd9G1@9ctsb`8vLp{??tOa(CsJngvq$&x>DJGWv6T{ zmiBfl(ma{liuztrmETDGR*}(EV%5y(6V)2z_$l`*49ZWd%7IsCQje}>ZOFJ`)A7Lsp#8gta8j77U#S~9I z#e{*Mhm3pEioBq8wUdlZ^_VCTJw;}ioM3pjB^*53lD4D~z zu_f8{Lll>=0oGyD%ShCh34K*S)_GvW)R*aX$pJjT6`Y@IeE9%8&Tzo>r@kkw{M#jY z_WnC#bb=w-4fVFa%^pyv7+z0g3uSeb0qROa7@Gq(n5vY+)R+@@vQ@+o3)u>83J7&I zN0Fd#$ZBb;GtEGgB}TROgzcq9u;mJM^&eMxD+MjAesRm=kvieJ=oNWtl}ZP@8uR5O z%4M3Mf=Ry(Qb-Jl ziKREsHhA6@?$i?ER;_6G1G%}RvB2?>(YCy#bSbeHf;e)FB8}_OM5=E@d5c_fqwASe zc*E<-q4*NSRoMC)#1QQlG8gFubSR=0KS%bS{(~{&nR@W?N*&CO9_A}4fk!kx*NmLI zpZ*tOLjQy-nogg`E%)8|JLFjcvpdYDLB=WR55dgq5o{uEZwV_jPUMdgEQfv;9q&%(TB;rvj9i<$V2?NoLNJDAA zguL`UH?t2eYxwIaG7F^t`a^VLoLrR`DzG+WWTPEP?M!)T>28fjqBhu2muJTsAkf)P zH|(QvhZZ{Y3+z8h73I8#yAI!1-#ftn>m`}OKb&XnjqQbu9lvE^{_P#%_5Va++QrY> z*;a_1YzonmhW$VxZK_<&5D=AzXq2s|<-oss>GO^_2Jh;C7?%ewv^rh?s{X zT~1zQe~ZGH_t)X{ut`nO0I?xR-G$H|>kGmOt$H;B@WlD=8{ zw@hwm*iR{_gj!$~P5G9qmKj=i@vaq~nw}&)W9*5SG$~J%2VfJWRml(h7Z(COJY7ZR zc(tG`ZW+LDeb9!VRCd8!&`ReYLQW(@F1&0;RFE5qa@Y*(&Ga*;N7SEw7p1o7lf9g% z640BiG`~G54uC%VK~iqdTZnP}>D1MZd8ABliX%NJAzv+)`n8pSj{)+F5QpczUw8ie z1Wk_KxnN-O$YQ*U(rPWWeGDK=3r^8r(>w{Z*SDd~Alp_u7rO{vY_g)Yk?iHHAdv&5 zH0By3l!?CjKWc7niML%ifXaBG`Le60raJT z5Qz*?AnR>vg}NY;tN997h9Dhk!cno;;KGTHPd{dHB@x#RrH?U*R@Jut{>WG`b$GLq$(foPPrb~WzCZmh0wiIdwIJAc z&_aI)?f(Jo&&2XCOm~&y^*_=6Hh(ZPhFP4Q&K5syl{cg=`G(*U{Gdky&w>;D@pKbR z-`g*Q@8Si%sPlwx1AKga5?$|AaI9+m(Z#N$x4BQY9PD@g1^5r1LOj-6BX3O=jnn52 zmDS+FHUj+qbJO}rDRv}RT;NsRFGl=WGJ_Fru6y=|I-v1>cXpZi5gvhv4eByl@ODBC z@ume8yac6|fGYz9z360z0;OoyTTnU?U>J;ck_UDMS4o8UDh|q(RJWcWan=pKp->_q z&j!n-)gb>piNy?H+ZEgnZ#`>*ZU2Q(Sa?CAKaT@iF?YeP)(?ZlroGwEI52*sficbn z9=L2Yhw8>;G0A8e4D>}_zgA}#lIKo(e={;TWU`OC8`H%L{sl+6$)KOXqI(L9Qw6R z^&Zo5%f#QQrqkWOs6_kkM}&AtuNcO6Y(FE{#@498P%5lew-(+gI)d8EI%B|)p&FkB zUqFYX&>TNO|FZx}NeGHLd`}7fVVxuKKd%@?ZEQ@fjODEK-4u=Ooz1^3xWCknWp!;O(!yQx>HipkJ;I z4pLQlPdAM{xCR5V&decgu%iE2IG|(DTKFh~-VQrKDNaTJ1e0d%TBSmPKCG?fp=5$nqRkHpdch|1)@$4TL*!zx(}z3+qp*QJ$_6@c@8&k3xe?7UN89r7U4 zvC(q6(B6YQKPYH2oech^+*VVEr+12qdu0|lsv}Zvi+Q5n zpFwv`gd(N!B>>@!j7=7UOg&7cLX>3765( zW-Z5!ZceepRV4T|XQv|r7?GtJiF>E`)WKX)X&qf>j_&QE?_6lYhgXW+uN39sD$PR& zw2T94WnAor)w~NzJ6eLIc@rr?zOQZ>5*DCjP5At%GjFEhr!op)4!KBs z-YBJPoiExdq;#1I{p-K1#;PNE*JMlPxFYxicA<88aCGaRB%GKA0pn2+z5_`zl~Xj8Fk+eTW4 z*GXI2+UwK7gz68tI(0r!8C-QV$x((%uv__vkb*jK4N}jQbqGX`xUmrK?KrFScK%wCI}8C)D`oI#-Iq+p~X1iXHO(5zf+y^ zr{fymNrA{)kzb<`azy^4EBvXAlH2QMgow%4MPcFsELDB|0S)M=Nu2FKU=u;FoD*`@ zYXu#-pI`eqI`69{sVEhYl~)puQqMNJL6kwFdCz95_qPkmG zuMz3H6q-DdFAcED7Nchyb*HFKn2zFy-|XhZTs{&v6m=!!Uc*HkZK?C8w5F*=9V2f@ z?E&q|+rv2Z>Tl25FRbBf)TeI{|JfJb6?jQezxNo^-@!xrKl{Rei`)GhK@g`+7CM7%sp*TF-1bq|0L<}m77J+W^vR_hdDPro9@n9UrJ0Wx+na|scXUz56 zR0MS(z47F!ZN_c-+l8>_>*EDP4=x5R)-Rusiax|mVCXJ5eGN;9zZ9ekZk>tBQAFnD zHi^Qc`cgF`@bzXBq8#85H8EDjWv?a|hepl^AO6e1$fBC!eO=r|Pm{os+o=!<7d~-) zSsgb*O+g;HH5^g@(%wm6yOEj`yqpt|u~s@|pMa`{sus5NMZ)I99b5yo*$RGLd{f>_ zvzguNVOK`hASsQs9=vjWF9K`186vX?qc(MGL;^0&OP%ZQLAeaVDo2v|l_Mo5+Pw4l zGefQdBf-R3U?=W#*~75C=YWV8eznuJ*-KlsPMBQ!r6exVWX1UCB5&oO)`)%H8wsYP z`HOao93$Jf-L&|6@XL@MYv!lEmxy5b6sm3=o;d5=E#XdmOeVXRTlh*Sj@>QVynUB1 zoRd|^iH__|?%l^BmzxFHTr85Xro;xX`Cy3G)x?GBbF?DuP7zUmBlGr&!g6dm5PI z=B?`O1s_6JoL7`$aqkKK6?OdX5J~H5g)3@#hF0?sm=CNB1PZTp5FqaHZ2_bs)H^4% zPe_)DsYfSt{~1|hxm74U-;uTS|5KL!snGUM;>&k!QUIwzg&Pp_-m5CiMXJQV{9VOhvpnNat{s+2(MS z=5g{*B~I#twrJ>jOnYp@QKrPVeIfMf8;@a`4mwT-LGP*CtQQi&=DE#pCC=J5H^R@> zb`oqC`0;YIN0l>q7H6(9ImfJOfwFj|S&S<|jF23avr7wJNKeA>Sv&D>zo-#l!73!z z;L|5Cc`KnUB10mG1POBj(5VD@Vt3@EDTe|TY=F0o@}DI3;zTw1v@nA`94hB@Lyp@m=*Ddf`j&sGZg3xKGARM05%R( zy9oWW&6x^(+oGGXt1w$I`;%DxX1iHtQAWgx7LKdjzFuWbXJbd~7XbZIG}lC`}&&bI?N&-kK3K>Crig>s7@D7vm{Ij z#Rn6Yek;j)*=8N$U%xEoyTNgqWXH5V`ohprr@o@&3!&_8R`#S0a)z9!&;xPWj>s?D zvd{E`diBGbQY3hhCA(zQ>2*r{5mRv(xxSfreGzf}QaPV2#H} z3L}CVuk=7MH|%lh!wC=eVwC_*I!lsEFh=L*M-<_SX#^>aCv^U``g>rMiDhtFO=my7 zJ!CfOjzZY8Ws3BinKK!DNz0&pkV=H?6261U4Mrl?)Rqm|AvtI zH|#A-NmCX{9{z7Is>&JU5iLGi9$_QjEvQ8oKM)C!<&WFBOlvq}{WX$~65_uoKE80> z=AFFgUX1^ckI5_wUJsVEn&09$@qC|RV=_HHxu(+v(i#~MStKyPx5&qZ3Dlq1kdEkg zrjYxSTbq!rJl=9oV(f86w1V#$o~%Q4v~~2O(z;cRJNfC=z}LO{PDkFZ%@4 zUWc6jw4zw8ihX)eZ$HzI6lp5-{&~Ydw-9F!b)oH}xe?j2&9I}nT{JW@`uE^$IP0%V zQoyWut7|?$KuRqc+JCT#BHGmY0U0QY2Cw|)$mA^znX|%P@om0|n2IOH`WH8;yPe;x z2XrzE8cE13kA}D#yxK4yuYRt?)O=;pg_mX*xuy9aJ}o9XBSR!GCnsrApu;%Ya`YwY zN}}9FXAfZcaonML1DqBMorR&ejSd@(l=(Qjl5UcBhFhCAf~Qa_^4z@%nLBAiu`T|M zYN(f3|L~MpRbqK5lhF=D6>fsLYT_`fSZXQuY;);Hv|Jp<2EA?8th-wNQv7*%=YYQH zm#8=jCqeonq||b!RmYv3IUC*QXOY)G5rWTX)_aH{L;>Ifdj7y%Z~8F#zFg$oOmo1#`C>y`LIJ^)!p>{P+HvH`=q>j+f35 z{AT2iarDYY^oYEhj&BqO|hdz4XVbQ2S14zWz>SysnR6r zt}nSL=}F0=KXQU(!L^j`R}>&BVkNbSkcti!mLbv8;9H4Lz*3;v4h8xpl2jDh9y|eQ zs~dabe%HHwD*NOd z1*Y^7&_fl6=~}2hVKrgKj^gcPraZEqfiq#1qAdOC?3L78NkRUO{oo_KE3*`fa`V?I>cermIlJn|wZLJTdchr{(W z0+NQ8UZ7&Qh|?^;*TrYea07R^$Dp;D^=BH;8a2}Bo|6RB$uJuP+`TNl43 z+8TlykYCIooaoDjzi=SWN_(5FS6lZ(y727cJU5zFWy4sIX2v& ztqkmkxScq1Z4k^}N%D9uXtC~@UX}m+U}#HZHLx(m+e@9w9eJv%9_XGdHWS@hdWuRr zx(5`G(~X4Ms1Gd%?Zns}yn`f%Tx+Ux_!Jv#>fzg7pyW+}26dQDMtO%mcjI?N*o}=l z@f8@GaQ<9n_|4g4mf8x-w#jgdL$}VL%CW6A=G6rv(>#uaW7lQeH4Su~{Hy@3WtK|o z+T&)4wn6Po;@;(qedHKh%oa|DdvJ>`GyRC3O=xvN44tr<;Fb&{v(03?!8lwuvb0j5 zETX)843jZr%@s|e+7Zr%#V(;Uc!f%{UF`v@`X-& z$@UvtrCC&aAAI6XB55H^)V0&v5px)KEMRBAmc(X{1|GV_F2|;|Up~a<c8o0hn%-Hl1y}176$_9Nkjaeq%JsIA|ry z8SlUEEdsX=@8OEvb*mk(J~9&AP(aIg!Qnd#ETKQ4H5jmB8KVd)#VViWI#n3ZG8>{4 zs#WB5ef|G4Ij3Y%^UyGv04DFm?=ZUAj!f_K-=lIU%<|?zCh#eGJ)SCOuSuJ#s1M_E zGH7{?>5G=$5iIa>G=H7P0_%g>Jd(l7=WLeqDFN|T_~r5ms&0n@OXuUbD&^wjJoFVS!0%-x7%SfeySt?%yMiRtDgL>65cC9BWnP<_eXZ~&ppAXr zzHQx+f7bp~-)6!zDzI7g^7kI+1<&tPDPI)Ff2nuI`0q4TURx6DE0_3(-WdzMh-G(P z9vq23*6MDAFub`rKBk!DCTY81MoTITXFZUwN^W5x+=t%>2>++VpG;}K;{e$4@prbz zbw)%4p1ZlqHNz zcqXPLS9Hi42_>+lD=VH-GM3wUy>i{ZXQmQ&0cv!}vI(J87OE8XS<=A-?;Nu8?c&3G zK(dARXuWywz!uM9q6#iTvXYDg+uq`JOvreJm9}r-Ts83}uiz+yVaXOwB;&$}&&v&; zO$-uJwiX_#U+I8!BFXp9dIbXRsMbXR!-yia?*Iz5N)u9XfU}vZT=6lc`q2Jb=+fpV z(BcQgqh_>valH^a8>^eh!wYs03>UbACHWL%hhO(L$GCUS`UmU-l(5pE|4kGXoejU3>3@~yg5tF; zzY@jZt&t@X`v&tg%u3y`#x$Yx&1EQQ1R>;$2~XM6E1nXyg;tLwJYz(Hp|75_{{F?2; zdpWG->zd;x&!?*SJd+A3IvD4cB^9R>8;o&@Pre43P$Km0pV#V#vaQV~k{7GU33o&- z=y%tGH}jO&E1xmSLg&PgJ}3RdU>*Amr3SEF3QcY4jX@W8ti;j{} z*M>i%*Vq%L)W)ubqNhoi2d+DKUKCHD-@R_b8*ipbdJv&oqtXl?78-m_GLkHJk}R;kQn zW{D6&*0Wp*degxLbMUAD)H!lPtL*a(vL92`=q|m|_8zvo0VJn&VLrrGP9G~BCqlQ& zb5q_AHdSe7Hy91QpVT>^y_bBHy|P&j+=h&MDk7L{^rGbk9yTE^Eb{OXowD$Fvs2BC znsO1Gca&&g$2sY%cXq6tZ^23*O{&cnh1J8Y&zqu3*v))uj_U-u7cInnMSB{7lF^zZ zTJ}79gRg}qQQc|h?=~*9m2IC${|Qiafer!tUjdW*KLpIb0IHb2jgghH0}(yTKVfQ; z!av4dxMkXdi+%+&j6N=_>1pyCQ6j-1>f?WJT53JyElozO_NWkEW%xL-(YJ`zq>=8QqEs5;r=5#RiykpOl6Ai33hUv)Zzs2OHCyenk#vP$kkkv?COV0pUZFG_FIJ$kO~B7PG~` zaAn|24@>1Rrblj1pRD0w?c5r(wY$~q@N==7xyC*-*S^S;Ry7>XuvhMa1R=;nmf{+p z7dyPc*JJva7(WJ_E9uZzg(^KnUrqOC9BwT@ZsRxMKs^_+9{B`HKz(+s%C!h))q!Kq zKjg3~``BjwlEbpf5Tfx~H(d^Ouj;$*P=D3Ji*4EHrn$nS3GMYRP84gWU(ztEh_BY7 z(+W6nAJq9K%s}V9nx`z9unRNVHn>?d>){5x=-~w1eh<@FExaeaN+|?F*+V^=&Uj_L z4is)x%BD-+#yxt0+K%rdf+Emoje~Sae|Fj8HF$zfQXZ9dU!dnA>uEYpjM?K1x2Z>CHJpK5${GV_c)%&jrsg*Ad;J+X@|5ZN?QuxP0)<~d7@tCIL~x6wU68|`6N>*|Yy>gQY&>kV59a7O9i0a|f+7@$YGL6NvOl zF|7M0u8fj5zzDx<;s68Am{$9zaLvwUNR5xoh@EH1^y-`J|2apg)%6 zpn#Xq{HR&8Omhdz18~={&R{mwT86i0=*?;zplz>k&TUbyNG_#|fV>B(A3P)WQP#gx z*p_nWR!#$Xx|VGq@E-gy6@ZRTdHk^nr^RD@kAvjRpWdZ1z6;u}S9J@9eM7Uj!s14B zvBRGvoCN&wcd67jmj;w!oZxR0+!~O4!c0*-N1Rl50{AVEiPd+lH zSQc@5am@RWyD4kMrR~A_ejfS}_K6J*jkSn@QB&80WYtq)yd1cNxs@3M&iM70zU&6Z z+ljNY@rsX+qp9w1+uzb0?FIrie)2r3yCs|Lo!V_LQT{?8)Thy*!w}J$=v9VGo>~rl zMo8f9USZ$+b-i5{3%sLK8i!vpZOELgJwtifeXYlnT-_ow*$RG{bk?UurAamO)TM_E z^<9*ZCeFh3J4#rXd3}V8b9PAaqSWxFafPsb&XhhCGp|u_+`a$dp;(Dl;*x1ZCz>dqwP?kKX(tCWOfPna z{J@}m~J+7BB|e(v^{iky9g6?|4Hp|76HQTQxz-<({vQ@$n!MZhf3rSuAzs4 zjG1~IHSXn2H)npD1ma+)u$~;fdblW=Xu&7hf7D)v&JV|&RuM1X)#nc4X}Q&IX2O?+ z*ZRYo6QW@g(Th+HrgF%XWG$VI+K+eZin*SwQG@2lOb4XZ=VO^!hp_~(qC=!6RXl3V zVWk-{rZ}-z-E30$0G~aeHoqT+_SkA7W}jr#1}(vqDRX?8fFII22Nmj9M;(oYkyBJoSbqokazKkt~v`?&luSWGOJjj%?%vsQ| zZPOgIR;a1YK-HjaFyzA2K|=7*oYHxdwfxNhL>m4^Gz`gGj7H#|c z4#7H+mcM4;SdBmnWHZE)UZx$$1-wlkc%WvD^b`I%@%k_AKF{b+!Vo-wcOQ84XD&cC z!wXI#@D&!X*RYQime<)s7Uu<)H(&~)+wM}AgUin}P?w!o7r+YJP5cHs8n^|33*_Z! zKe|HF2lFAR=)>PZnE&DX3oX!@jpPjlGesXx=IRr&;|=XUk%X_+6zB8T1>yhSAqfWd zf0a)ErKef_j}DvDwo=8T!?qO@i{K|=iU9gV^^@=AcdwQ=$Fs(?vA>bu)CD5)=(=C? z`_q@i`HdN4U2SeAxi7O^FJrQGX@NTWZ7{&lNy1rB&Pej=IXXI;*)cy>POk>HPIeU-}kp{$F%{766OOjZyB+HxH9o8`d zE5C9i>bFhlF=={3mA4q~Rz-QL8LD-6`2<5gdgmgqY!Y^79!dv)Hr-E^X?i2U9itwe z%}Gh{gdSUjhuHJUod+vmo1%fld8Js-x7AMN^T_tSy`GrTUxEP^VS?g*u?V)J!4k{X z2O>rhW%J!q~^3~!}9|^c4K(M46&{5|CUys1M)BCqsKG(Pd z-en}>utl`Ub8GlJU3={Cg7^0KfZ=D!%nEu7)TyW2Bboa`kZ}-DAx>|x(<=lW# zIvP`|QflRCJXI~6V|+?%@Ch(V=mr81(*mmsbCP^)IXnn~fqlx5Kbe&`Ssy4?=Cui{al)nqEWrM1E6j(l zw<(Yyx2WCEyuL`?W2`@V%+Buqc4k-%2}O)$j3!w^XB9kR-;-}%RnI3X+FMSSz?kao zJ*A8sG4I0^>J`qg|F)(9|W-T95mF0sx;1n4g82Fqt>~NWPFNX3WzAF z0zq4{(sGp#8QPY9js&My-P^u3qv(q?>Wq~zp~aAB_Y?$&S#PM_-9=4fVAY@H9#BIgMQ6Kwr0gnZ&%+F$(UMl=hk4-nynaOc`D zW!k!(s7qx7ETWVhyR<OUQz|?`0k1$-nA&>YPiAQX5 zq#<7_EHYj&ah{77>zxl3*Q{;Hzp8vwHLrw+sbH><-^@VU0(j>PCx_pv{CXhMq*W1o z%Wx?{w0RA5lhym|iE>mKqEn}yuekSL;RZ~mO3wT7+w1}jFtA%gtqG%ifzR8&y;~A9 z2hXj)fM>^lX#zDJyiam6r>2Z%?k*>-LL)UTI3$IE6g+XP5VDq>z_!92N&0=mdk78|yfFiq$S zcG=$8o%4Nb2iuq>;h4K71ms;`DrC+~n-Uw6 zawn$^_{O^VTsfr^pmjiCR7b$8TThK0J}QM?P8$&VA=FWoUai5G;)I(*Yo!>u&OJGb z?nm+I@rL8$4%n`tSQRKUB&lMuL`TF!d0wj{_O>4TRg3P9G=^_8Yr^$}VG0|eOIx8N zbg8wvDpzEhQHq&JIDRLN9Fu|apjInvekz+Z@(9+!^RMKx50${E923KxyGe_54!3Yq zXs~S2QOi4tdDtaSk4{bIDJk0wYEy0b-xW_^a>4W>XuMFtA!0`L*Reoiv)FX;gBa2+ zJRTu(MCt_AQAY7bRZQ-nDrp@4+G#v}e1A9@bYVQ=RU+8*z59{>0D|#D%*VfpoU(pu z2TaDXST3f#qny(Le15#bFLmv(n1k@rZH6E{IE|Zm_r>0?xY_+5nIgD zZn}e0e{eU`zwad&09hj>O5Wj*`Ds7L8&A*7f(kJtHF;ijIT^pOauEYA`+d(8TfA}w zNz0ETvSr2sYQcG&zcptSaTN`H1qJd&be70Pr@h}Qk;&fCd0eni?-%uCuW~5XoVG+O05a?K&EIMh_VJrf!O?28&S|+&3JoM{?%7ANJG$s|Q z5_I}ClW=@#ao1RKozf7)dJj2%z#%mF9zUVYcb6;#rJ~+PduzAlzKXe8EqCe0c2TnN zBn}n*#vC?e3|y7XdNNV!jm3mT#0mte5$Be+7IPtxI7NLJ82?ssg4Yn4ln*xy%vu$} zgy{6?ii*o{nrWG|nOw1Ph!OO{3G)$N%Phm8nxPTX&Dq(6F;Bb=9z%K6}L3UY6M5RlRPI} zqtMQmOZ9(8!wS2PKwk(MKM4|@3UfakFP9&p*}~20y131R(ZDqSITnf0Gk5u>`P=ij zKaQ-kEU}8sIBVb@W{y2L_}xF*oOM?8HAu>nvmM%*v$Yg)U1n>-nVi;Rra0x1(MP)@ zcc&&8;Ga}a0#H8fWDDd(p7+}x%!r-R=08JRCr|nPP%?Q#eZb^OUa$m-IV+AM6$luV z8@6&LEbF^+=75H#k4=IBeXlpo>OI5IXY`>!lumc=xr#vtnBak|5mder<}9bGQ;dZs z>*EX|6mUjjgr#7>59hRT=Me_V(=e@1gH0@ni3$?Yo?2ZIL~<%I2|4%kZ6FUJ3g%0Q zLuoTtK>IS#9!KdA*=djmMz1Hu?A(q$VCrQ5enX|b==GNPzyfX7{_XX+TD0@4GF zu1|+Jf?IvgqsI>^-AU#SVp`brPB(bhk{$j#uy*h@m4jtt(jP?FCku5q&I{BVpc9Kw3zu?ACakf40Cn@ z^eRo9@`x2s<(XGPoJ(btYBD`o;@~9254EA}62$6(U6Dkv4&=)ra3(Lgq3m73@jvRG zGOBHSya8Ic*0}ks}Qi{Ewa*^GA}|GFu1~EEZroA zNE5|J8S&;s@L@xuIs{C5z_a_oyzoOd36bMRFA+0?YQ zN;MrP?Lv+I=^A!O!SjOXq9T)Ybf)d{ueNwfi|+2-Vo=h?mZu|SK$ZR6+*TRX_HF^C ztzCm;3zzHrkQrjVlI9?xKQHvJq;a!B)Oy+N9%^Rx5*^~*##@n`OV5kb<4bBd6qH{a z%%dkPBd}_u+^hIgDUrD~ca8WF7M*dcqvfRx=~%`9paq=E^X* z{Nxiy^)jNq7j6FFK?j3TY?t)O6^3`=8n3MFsKGha4yAW_vqvql)Rqk~CVdC-4GoU$ z&-L4598GmZz!X{AWrvg#5Kj9(E2>3J&+8$;3(?d!=gUL%+7N3X-tJUbLy_vuS#jk~DyO2A9B+G7WkAd`!d_PVx@)x>5P5>TGS)l0?*O65g) zl#L#4-LwV>ZDdm8iR+XSj4L+!1TT00@K;XqH19c+?YD(Uc#E zv^gga;(%Q$O;))mTY$#%G`I4sX+7@~Bo!9w{QiE;KIA32S|#?R7Ms&ZW1qmnPYj`6 zE}5_{l;r3f;?8hvO6VNf`B1msSUR*g>fBcG8wMJ!%IQRt0^ZGP5^Okip^Rys>7C$)8VdJo#NGJ8ZPL<`TILKrz`Hs<@%OqLwCLDV{d-vId}UXQzp{% z1-o?%a12oI-kll*St0igmO0AG^ZF)R&Jxq9DltBkf(yOnGwH~9$!?Cr(nocKFQZ{A zp@5Ti$2lZk+=B9|als`c8P}T_I+n}<6cLx|HZPTMp<0gn6h-!BN=){;qEe89)aq+= zH=9fRN{_fXtG12-2TSpUOP2aH$%WwdyYw@&8w*LWh$2twaWlsCbRm|`XP0uWQ8j5{ zg;K{n6Ds<&7ajZXBPwN!jJYg6jzsb^TSfL33cZ^j%NR|k@(w0wJNX#>$rI>qR5pui znNlg?4c0CLiO-|OmcBdSaaTP-9k73Mz&O=shMzs>w*{puwW? z(zV-CQHpQnZH^kio7B*vG7w*Lu(Ic;hwEYPP%H5ph6kN>UR32jmP{-e>Lr?s2HX{1 z7g9f1lRlL+xg{lvV4=ISyTk}iSRX-^6KTg$yb~A*6?IHgOf$6c2?rhe0_MlT@W$LT%8wBKsF;gF zppMb3e~W|ldjx;JWbvX z+2IHj^ahK4rQIJsiUq|R^dkNQ*;{>D)mI*D-(c7BOyR^VwTmh*TYgroyk~YhLR_JU zM>#( zh>u2oPa6jxCz&;-xQA)0Ol1Xe)Wfeqh^JD_tyx#WTQBsiK1sGi%eFuya${wUxktxa zaJhgr^X&k0P>Y0rf31O&%aU`pV}t#5Z)XAWdkBIF1kUn36jaTm=UXCrV2Y(yo?!Zg z#kJz=+J1>H9jI^m;{a{*xHL`UeB$q3>$l{pYyqA)wcBOq#3P-` z;@NkCGhBgFZ6I5QKwGDf*!Wke=6-Nv2vAS39mlX<-C%Dbs@t9rZ_`XYAPihjx37+U2H_V?m`n!-wW|fuQC8b>dj8d z@`kg(Xa=ns)$fqtNKm=mjP-Z_lFJ~X6Vumb_?;Q=o6y$x~4S&c%cW)I! z%SMYcOtvV!cHQFz8|ID+NVi64X@xRAZ!95itP-BGCh)f`?M{#uM0S2)xz_z|1)@>~ zIYgmS3iS?+s6Y~R?@$b{s=)_=c4Q_{Hy^#O5yb~$w=cW2lE=7oSY5tsSX&zOX)&AT z4imFZzb?6FdF_ql-qUGTWAZa)H_e_~Yx9W5q7%keTi~S$)^j=2&63%Ebwa-+^vmyB z_$@x_E^)LsRLkY&TGTCZMhC@st%L-4idrEluh4mm(l|pWjkRGEvVyoVX0HR3<1}bT z0eJ=s-NU5S(;RJ`?oVJEsa@T`u6x^~;bhmC%=(*!@X^nPQ|5qEV8K_@jm3%2T0oUO zcK1oW<#S+8NQ?|q)xC81kfHfnLetD;o$wPb>ytO?5uTkQuhI1@0@PznEgUaDoKHB= z8`T74z@!Lkj*h>BKh}9KHbxx0HQUKP{HsigYer~=$)ZxV*K?`MGg+JxXmtm{<}Zku zcG|IwhvLGzi#ny4v0dw|L5kAKYpvvisG|gz(x&7$f0k$Bpto@67nJXt<>oAEf8;20 z4@HRt2sltj(G>-OOn;ATH2fkJpUpy%b`hnYd||(~7UUW`qS$ec)zBP8?^HD!;F~L` zK)9-x_oleLYD*Q(fmmsoP~6+OBi^e^O^w}{j!(gk^MmmOZ=mu$+5T_jI(nzW`?ID-hMIQ5(2J{kcV9 z>lid&1@18I@6}!oCx*+@a|EZE9W#7sw?2Z-3HnNV771b6F@$mHItYHwzgj4UOHGqx z{qVT;x5iKJ`Q!7y8ZlVE_{{&JT>5W`Pz8P4IXZZ6ownd6jEOd@9>3bCZ`Q%X@HyV- zX@MluDUb=vie8q=6gM>n_hcAKxaAbh~}uK(DZ| zn8$nSesomns7YEzt@vmtC zm?zK=DWpERNWsrELCzF=a$#Iti?iF<;EpYmbgH{~LL$YY4n*k7J~%Xo)(zNHJ%)B6 zUgLnka(=gIyl^s7VcNp@XV`#+i@TG5%#`B%bEXs%1C#4ZvHw{%+gd@Ic2yPSKIY|J zX6lRETnwuD(wFSWj(r=o!AvlBDMY-Ckk>uVujeaI7vcJ2Pd)bjtY7G*5qwX{^rX24 z-6+T|$3@F@px!12eGh1uj&mcFq`0ikAT8uTywMOAPZMW$BfUvra+wwh!R3d-#q&Zw zX*ruVc=Z)#V6#m^^kCglCt;{iSkj_f4?bu!P5`Q#7c%_AIs=}b+v;ar=Q^?$AbjM9 zW+m0@Kcu+ayNVpOjg^)S;}Nt-VejwV%YE}3IzZI55@;};`Pw<)VYuCPG2Ryy02FnH6uYui?b{ zGNGiV=6ND1;g#s9hfu0yf?|BU$aI7|8eh-u?(zb=!j37klXH+iRO1WM=az~FL5R8? z2UT}MJ_{C+PJF&oIVMXse_eqU9KbHCkRH+av~XIAr*%-;p{J4+TF)|Y&F5y19fGCQ?6Tpj#gwQV#;~xX4g@ze%FKu9`MwifB1A&8~YFFE7`9%UaSpdec zAb>Vbj;qFDm|sgfGRs;&{}rJL9R-!@*}7vEzAX9 zTK8FRu(HV@XcN@3P+4=FNdtmj?1LntJb&6X&rn_wk^BgH-{C^xECP8O>!C4sAk!9-~%>c zx^h7ry_}@|p1_aTOSEd-WBXpB6VLK=x8yE^S_B}dtjRg^TieK;1 z9~ZOVH1$TV$^HF8Q6Kn-^1A`o6a8C8k*>*U1_%;f%gIu!q2Eam z#TcZ{>{-XwQk)UaJQ(0(T6dva8S`*NljG^=_4KBNAkBmCShn_($BZ{TbT&|%2!i0S z|CEG4bGN>kAPS8F^ieMDATbPJBtfBJ9YNwF?j+sP!7&7UaRoRK4J}umyaIPix z!nfuRAF^NRK|w-lk#J`NkxV=Fr;6N<4&h=@VX%wRFB6;?t*gx77VWe!pYdTNDYEah zHWJ6Wo-`~#n#Fhr-EL4EwZ$A}fNqqo2vN8xlSEzm5FPm=1btnnn%`0yPB@^^qKNVl zL0FU&q+Aep!8Y!APb$-z{cDC{VpM6bcafT^cj#el1rOasZ^J?+hri&s1wU z#;>{LJfE(|a=!$}`aMGwC{(0##)n>@*qjNgk)uXdpP57P>4!^bL^j<6OhVGGYyacD zLLBBEykc4@sR3r8Sq~QUF17ZDEBc_P)DD3DP%6Sb_QBRLI)y6jKHz=c7C1km+ZkHf@?{9$D~8rVZKD%$*Bfnmz%UTxlKY3ZW@W=p-bxw zp;RlCTy+X!`;@=5HxVKk3IgsPizpMx3k`Wx%LrrOD2=C_!^R%8z6(M+lWjT$DbadY z6M8uh)+Cl|{ZLJ^ZI7z-A<~_r8>F*#w@z3}*A}O^PZmG>l8zohzuHrln+c2-*D^&X ztrUA5wt=daJnwgGf7XC^5*%`ZXTn77Kb04PtZymZNseAiF;sh#jMVTvdZxZrTbcBk zDxNhXS+5IBTu~_Pr%N4sRLvGj>x(YDQq5vA^TK49f8x7aVTMr;p6K;=r5*I1hNvj0 z8q?9H(<)!CTE1+O4fO4o#TJMRH?=Pw^yXX^)zivcO-!tYR@*=YAYVFV)JrC^dWgPO zOWOaDpR1_Ys**nZq=E*hxY3v2t4yomkpsk(?aLd7IOX$8%a-n`ug76okbIjOG56<& zv)YpP#DO0IIqpw5aJTUR83#~R{n2g{?a^%om*?v_d#Aj#WlCGbcmihyacG-(;^3{d`Tmd!iKP9pUObnj>R-3FRfQ0b<3SXzMF(0P? zIeh=!8}%;%T18_Uqrdto|9Op9{xu`VkNi=j-PTm0FxE+tr&2g(%zvGXi4>3)YX`OP z!nGkY+Q%UI;J-7WYh*BMarc+0C_@&8MXUn7^s>>>_(jI8x9Q~hQS~M7H>y2#RPq98 zbky&$`f7Fo-XW|m31lvLgIR>aZ}>kRGk)8g;dornpt?S~DJlh7h1N9m$A-Cflr)GX zTfV2LAYT$gsqdqUz_#i_3Om6Mi&fZdRVPpY2D{-^Jw59;_}vB!Kfnvq<_THvPH;rV z`i!;o(N!Yfm>>a8tomp%!NZy@;lO|r|IpBtgb8Zg8*hXNIs#bUmz#|Ee<8G zXJT#00}9yNRj?Xr>mc>h9$hcX9H$njY(ik7;u@r` zmWyIAc%3za(z1Y26fKq|5@=n!BZm$5f1&6uHuR!N)7&O8c>v>jP~24c_4n9<+4+a1=r8^wwk@fB5W>Hdetjv%1nb8m zxmEwEF!Y1f#*A)K>qit17{=R^ZxKNJ432UYhPxRiu}5%0De_i=$U>l)XL0DLhq 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

z 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 literal 0 HcmV?d00001 diff --git a/Adjust/Android/adjust-android.jar.meta b/Adjust/Android/adjust-android.jar.meta new file mode 100644 index 0000000..62add18 --- /dev/null +++ b/Adjust/Android/adjust-android.jar.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: de7cd4cf0359345f487233fc82a1d892 +timeCreated: 1526341612 +licenseType: Pro +PluginImporter: + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + data: + first: + '': data + second: + enabled: 0 + settings: {} + data: + first: + Android: Android + second: + enabled: 1 + settings: {} + data: + first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Editor.meta b/Adjust/Editor.meta new file mode 100644 index 0000000..9a97713 --- /dev/null +++ b/Adjust/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: af6a4d5087d014e96817909f48d7faac +folderAsset: yes +timeCreated: 1578652520 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Editor/Adjust.Editor.asmdef b/Adjust/Editor/Adjust.Editor.asmdef new file mode 100644 index 0000000..84f122d --- /dev/null +++ b/Adjust/Editor/Adjust.Editor.asmdef @@ -0,0 +1,18 @@ +{ + "name": "Adjust.Editor", + "rootNamespace": "com.adjust.sdk", + "references": [ + "Adjust" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Adjust/Editor/Adjust.Editor.asmdef.meta b/Adjust/Editor/Adjust.Editor.asmdef.meta new file mode 100644 index 0000000..8cf2af2 --- /dev/null +++ b/Adjust/Editor/Adjust.Editor.asmdef.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e539acf4e82c476e9c5c849a7e699085 +timeCreated: 1701844361 \ No newline at end of file diff --git a/Adjust/Editor/AdjustCustomEditor.cs b/Adjust/Editor/AdjustCustomEditor.cs new file mode 100644 index 0000000..0162152 --- /dev/null +++ b/Adjust/Editor/AdjustCustomEditor.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor.SceneManagement; +using UnityEditor; + +namespace com.adjust.sdk +{ + [CustomEditor(typeof(Adjust))] + public class AdjustCustomEditor : Editor + { + private Editor settingsEditor; + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + var adjust = target as Adjust; + GUIStyle darkerCyanTextFieldStyles = new GUIStyle(EditorStyles.boldLabel); + darkerCyanTextFieldStyles.normal.textColor = new Color(0f/255f, 190f/255f, 190f/255f); + + // Not gonna ask: http://answers.unity.com/answers/1244650/view.html + EditorGUILayout.Space(); + var origFontStyle = EditorStyles.label.fontStyle; + EditorStyles.label.fontStyle = FontStyle.Bold; + adjust.startManually = EditorGUILayout.Toggle("START SDK MANUALLY", adjust.startManually, EditorStyles.toggle); + EditorStyles.label.fontStyle = origFontStyle; + + using (new EditorGUI.DisabledScope(adjust.startManually)) + { + EditorGUILayout.Space(); + EditorGUILayout.LabelField("MULTIPLATFORM SETTINGS:", darkerCyanTextFieldStyles); + EditorGUI.indentLevel += 1; + adjust.appToken = EditorGUILayout.TextField("App Token", adjust.appToken); + adjust.environment = (AdjustEnvironment)EditorGUILayout.EnumPopup("Environment", adjust.environment); + adjust.logLevel = (AdjustLogLevel)EditorGUILayout.EnumPopup("Log Level", adjust.logLevel); + adjust.urlStrategy = (AdjustUrlStrategy)EditorGUILayout.EnumPopup("URL Strategy", adjust.urlStrategy); + adjust.eventBuffering = EditorGUILayout.Toggle("Event Buffering", adjust.eventBuffering); + adjust.sendInBackground = EditorGUILayout.Toggle("Send In Background", adjust.sendInBackground); + adjust.launchDeferredDeeplink = EditorGUILayout.Toggle("Launch Deferred Deep Link", adjust.launchDeferredDeeplink); + adjust.needsCost = EditorGUILayout.Toggle("Cost Data In Attribution Callback", adjust.needsCost); + adjust.coppaCompliant = EditorGUILayout.Toggle("COPPA Compliant", adjust.coppaCompliant); + adjust.linkMe = EditorGUILayout.Toggle("LinkMe", adjust.linkMe); + adjust.defaultTracker = EditorGUILayout.TextField("Default Tracker", adjust.defaultTracker); + adjust.startDelay = EditorGUILayout.DoubleField("Start Delay", adjust.startDelay); + EditorGUILayout.LabelField("App Secret:", EditorStyles.label); + EditorGUI.indentLevel += 1; + adjust.secretId = EditorGUILayout.LongField("Secret ID", adjust.secretId); + adjust.info1 = EditorGUILayout.LongField("Info 1", adjust.info1); + adjust.info2 = EditorGUILayout.LongField("Info 2", adjust.info2); + adjust.info3 = EditorGUILayout.LongField("Info 3", adjust.info3); + adjust.info4 = EditorGUILayout.LongField("Info 4", adjust.info4); + EditorGUI.indentLevel -= 2; + EditorGUILayout.Space(); + EditorGUILayout.LabelField("ANDROID SETTINGS:", darkerCyanTextFieldStyles); + EditorGUI.indentLevel += 1; + adjust.preinstallTracking = EditorGUILayout.Toggle("Preinstall Tracking", adjust.preinstallTracking); + adjust.preinstallFilePath = EditorGUILayout.TextField("Preinstall File Path", adjust.preinstallFilePath); + adjust.playStoreKidsApp = EditorGUILayout.Toggle("Play Store Kids App", adjust.playStoreKidsApp); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + EditorGUILayout.LabelField("IOS SETTINGS:", darkerCyanTextFieldStyles); + EditorGUI.indentLevel += 1; + adjust.adServicesInfoReading = EditorGUILayout.Toggle("AdServices Info Reading", adjust.adServicesInfoReading); + adjust.idfaInfoReading = EditorGUILayout.Toggle("IDFA Info Reading", adjust.idfaInfoReading); + adjust.skAdNetworkHandling = EditorGUILayout.Toggle("SKAdNetwork Handling", adjust.skAdNetworkHandling); + EditorGUI.indentLevel -= 1; + } + + if (settingsEditor == null) + { + settingsEditor = CreateEditor(AdjustSettings.Instance); + } + + settingsEditor.OnInspectorGUI(); + + if (GUI.changed) + { + EditorUtility.SetDirty(adjust); + EditorSceneManager.MarkSceneDirty(adjust.gameObject.scene); + } + } + } +} diff --git a/Adjust/Editor/AdjustCustomEditor.cs.meta b/Adjust/Editor/AdjustCustomEditor.cs.meta new file mode 100644 index 0000000..8039909 --- /dev/null +++ b/Adjust/Editor/AdjustCustomEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1772b9461c24c4df0ad55f51f81c7345 +timeCreated: 1617868100 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Editor/AdjustEditor.cs b/Adjust/Editor/AdjustEditor.cs new file mode 100644 index 0000000..b81dadc --- /dev/null +++ b/Adjust/Editor/AdjustEditor.cs @@ -0,0 +1,342 @@ +using System; +using System.IO; +using System.Linq; +using System.Xml; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using UnityEngine; +using UnityEditor; +using UnityEditor.Callbacks; +#if UNITY_IOS +using UnityEditor.iOS.Xcode; +#endif + +public class AdjustEditor : AssetPostprocessor +{ + [MenuItem("Assets/Adjust/Export Unity Package")] + public static void ExportAdjustUnityPackage() + { + string exportedFileName = "Adjust.unitypackage"; + string assetsPath = "Assets/Adjust"; + List assetsToExport = new List(); + + // Adjust Assets. + assetsToExport.Add(assetsPath + "/3rd Party/SimpleJSON.cs"); + + assetsToExport.Add(assetsPath + "/Android/adjust-android.jar"); + assetsToExport.Add(assetsPath + "/Android/AdjustAndroid.cs"); + assetsToExport.Add(assetsPath + "/Android/AdjustAndroidManifest.xml"); + + assetsToExport.Add(assetsPath + "/Editor/AdjustEditor.cs"); + assetsToExport.Add(assetsPath + "/Editor/AdjustSettings.cs"); + assetsToExport.Add(assetsPath + "/Editor/AdjustSettingsEditor.cs"); + assetsToExport.Add(assetsPath + "/Editor/AdjustCustomEditor.cs"); + assetsToExport.Add(assetsPath + "/Editor/AdjustEditorPreprocessor.cs"); + + assetsToExport.Add(assetsPath + "/ExampleGUI/ExampleGUI.cs"); + assetsToExport.Add(assetsPath + "/ExampleGUI/ExampleGUI.prefab"); + assetsToExport.Add(assetsPath + "/ExampleGUI/ExampleGUI.unity"); + + assetsToExport.Add(assetsPath + "/iOS/ADJAttribution.h"); + assetsToExport.Add(assetsPath + "/iOS/ADJConfig.h"); + assetsToExport.Add(assetsPath + "/iOS/ADJEvent.h"); + assetsToExport.Add(assetsPath + "/iOS/ADJEventFailure.h"); + assetsToExport.Add(assetsPath + "/iOS/ADJEventSuccess.h"); + assetsToExport.Add(assetsPath + "/iOS/ADJLogger.h"); + assetsToExport.Add(assetsPath + "/iOS/ADJSessionFailure.h"); + assetsToExport.Add(assetsPath + "/iOS/ADJSessionSuccess.h"); + assetsToExport.Add(assetsPath + "/iOS/ADJSubscription.h"); + assetsToExport.Add(assetsPath + "/iOS/Adjust.h"); + assetsToExport.Add(assetsPath + "/iOS/AdjustiOS.cs"); + assetsToExport.Add(assetsPath + "/iOS/AdjustSdk.a"); + assetsToExport.Add(assetsPath + "/iOS/AdjustUnity.h"); + assetsToExport.Add(assetsPath + "/iOS/AdjustUnity.mm"); + assetsToExport.Add(assetsPath + "/iOS/AdjustUnityDelegate.h"); + assetsToExport.Add(assetsPath + "/iOS/AdjustUnityDelegate.mm"); + + assetsToExport.Add(assetsPath + "/Prefab/Adjust.prefab"); + + assetsToExport.Add(assetsPath + "/Unity/Adjust.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustAppStoreSubscription.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustAttribution.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustConfig.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustEnvironment.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustEvent.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustEventFailure.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustEventSuccess.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustLogLevel.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustPlayStoreSubscription.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustSessionFailure.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustSessionSuccess.cs"); + assetsToExport.Add(assetsPath + "/Unity/AdjustUtils.cs"); + + assetsToExport.Add(assetsPath + "/Windows/AdjustWindows.cs"); + assetsToExport.Add(assetsPath + "/Windows/WindowsPcl.dll"); + assetsToExport.Add(assetsPath + "/Windows/WindowsUap.dll"); + assetsToExport.Add(assetsPath + "/Windows/Stubs/Win10Interface.dll"); + assetsToExport.Add(assetsPath + "/Windows/Stubs/Win81Interface.dll"); + assetsToExport.Add(assetsPath + "/Windows/Stubs/WinWsInterface.dll"); + assetsToExport.Add(assetsPath + "/Windows/W81/AdjustWP81.dll"); + assetsToExport.Add(assetsPath + "/Windows/W81/Win81Interface.dll"); + assetsToExport.Add(assetsPath + "/Windows/WS/AdjustWS.dll"); + assetsToExport.Add(assetsPath + "/Windows/WS/WinWsInterface.dll"); + assetsToExport.Add(assetsPath + "/Windows/WU10/AdjustUAP10.dll"); + assetsToExport.Add(assetsPath + "/Windows/WU10/Win10Interface.dll"); + assetsToExport.Add(assetsPath + "/Windows/Newtonsoft.Json.dll"); + + AssetDatabase.ExportPackage( + assetsToExport.ToArray(), + exportedFileName, + ExportPackageOptions.IncludeDependencies | ExportPackageOptions.Interactive); + } + + [PostProcessBuild] + public static void OnPostprocessBuild(BuildTarget target, string projectPath) + { + RunPostBuildScript(target: target, projectPath: projectPath); + } + + private static void RunPostBuildScript(BuildTarget target, string projectPath = "") + { + if (target == BuildTarget.iOS) + { +#if UNITY_IOS + Debug.Log("[Adjust]: Starting to perform post build tasks for iOS platform."); + + string xcodeProjectPath = projectPath + "/Unity-iPhone.xcodeproj/project.pbxproj"; + + PBXProject xcodeProject = new PBXProject(); + xcodeProject.ReadFromFile(xcodeProjectPath); + +#if UNITY_2019_3_OR_NEWER + string xcodeTarget = xcodeProject.GetUnityMainTargetGuid(); +#else + string xcodeTarget = xcodeProject.TargetGuidByName("Unity-iPhone"); +#endif + HandlePlistIosChanges(projectPath); + + if (AdjustSettings.iOSUniversalLinksDomains.Length > 0) + { + AddUniversalLinkDomains(xcodeProject, xcodeProjectPath, xcodeTarget); + } + + // If enabled by the user, Adjust SDK will try to add following frameworks to your project: + // - AdSupport.framework (needed for access to IDFA value) + // - AdServices.framework (needed in case you are running ASA campaigns) + // - StoreKit.framework (needed for communication with SKAdNetwork framework) + // - AppTrackingTransparency.framework (needed for information about user's consent to be tracked) + // In case you don't need any of these, feel free to remove them from your app. + + if (AdjustSettings.iOSFrameworkAdSupport) + { + Debug.Log("[Adjust]: Adding AdSupport.framework to Xcode project."); + xcodeProject.AddFrameworkToProject(xcodeTarget, "AdSupport.framework", true); + Debug.Log("[Adjust]: AdSupport.framework added successfully."); + } + else + { + Debug.Log("[Adjust]: Skipping AdSupport.framework linking."); + } + if (AdjustSettings.iOSFrameworkAdServices) + { + Debug.Log("[Adjust]: Adding AdServices.framework to Xcode project."); + xcodeProject.AddFrameworkToProject(xcodeTarget, "AdServices.framework", true); + Debug.Log("[Adjust]: AdServices.framework added successfully."); + } + else + { + Debug.Log("[Adjust]: Skipping AdServices.framework linking."); + } + if (AdjustSettings.iOSFrameworkStoreKit) + { + Debug.Log("[Adjust]: Adding StoreKit.framework to Xcode project."); + xcodeProject.AddFrameworkToProject(xcodeTarget, "StoreKit.framework", true); + Debug.Log("[Adjust]: StoreKit.framework added successfully."); + } + else + { + Debug.Log("[Adjust]: Skipping StoreKit.framework linking."); + } + if (AdjustSettings.iOSFrameworkAppTrackingTransparency) + { + Debug.Log("[Adjust]: Adding AppTrackingTransparency.framework to Xcode project."); + xcodeProject.AddFrameworkToProject(xcodeTarget, "AppTrackingTransparency.framework", true); + Debug.Log("[Adjust]: AppTrackingTransparency.framework added successfully."); + } + else + { + Debug.Log("[Adjust]: Skipping AppTrackingTransparency.framework linking."); + } + + // The Adjust SDK needs to have -ObjC flag set in other linker flags section because of it's categories. + // OTHER_LDFLAGS -ObjC + // + // Seems that in newer Unity IDE versions adding -ObjC flag to Unity-iPhone target doesn't do the trick. + // Adding -ObjC to UnityFramework target however does make things work nicely again. + // This happens because Unity is linking SDK's static library into UnityFramework target. + // Check for presence of UnityFramework target and if there, include -ObjC flag inside of it. + Debug.Log("[Adjust]: Adding -ObjC flag to other linker flags (OTHER_LDFLAGS) of Unity-iPhone target."); + xcodeProject.AddBuildProperty(xcodeTarget, "OTHER_LDFLAGS", "-ObjC"); + Debug.Log("[Adjust]: -ObjC successfully added to other linker flags."); + string xcodeTargetUnityFramework = xcodeProject.TargetGuidByName("UnityFramework"); + if (!string.IsNullOrEmpty(xcodeTargetUnityFramework)) + { + Debug.Log("[Adjust]: Adding -ObjC flag to other linker flags (OTHER_LDFLAGS) of UnityFramework target."); + xcodeProject.AddBuildProperty(xcodeTargetUnityFramework, "OTHER_LDFLAGS", "-ObjC"); + Debug.Log("[Adjust]: -ObjC successfully added to other linker flags."); + } + + // The Adjust SDK needs to have Obj-C exceptions enabled. + // GCC_ENABLE_OBJC_EXCEPTIONS=YES + Debug.Log("[Adjust]: Enabling Obj-C exceptions by setting GCC_ENABLE_OBJC_EXCEPTIONS value to YES."); + xcodeProject.AddBuildProperty(xcodeTarget, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES"); + Debug.Log("[Adjust]: Obj-C exceptions enabled successfully."); + if (!string.IsNullOrEmpty(xcodeTargetUnityFramework)) + { + Debug.Log("[Adjust]: Enabling Obj-C exceptions by setting GCC_ENABLE_OBJC_EXCEPTIONS value to YES."); + xcodeProject.AddBuildProperty(xcodeTargetUnityFramework, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES"); + Debug.Log("[Adjust]: Obj-C exceptions enabled successfully."); + } + + if (xcodeProject.ContainsFileByProjectPath("Libraries/Adjust/iOS/AdjustSigSdk.a")) + { + if (!string.IsNullOrEmpty(xcodeTargetUnityFramework)) + { + xcodeProject.AddBuildProperty(xcodeTargetUnityFramework, "OTHER_LDFLAGS", "-force_load $(PROJECT_DIR)/Libraries/Adjust/iOS/AdjustSigSdk.a"); + } + else + { + xcodeProject.AddBuildProperty(xcodeTarget, "OTHER_LDFLAGS", "-force_load $(PROJECT_DIR)/Libraries/Adjust/iOS/AdjustSigSdk.a"); + } + } + + // Save the changes to Xcode project file. + xcodeProject.WriteToFile(xcodeProjectPath); +#endif + } + } + +#if UNITY_IOS + private static void HandlePlistIosChanges(string projectPath) + { + const string UserTrackingUsageDescriptionKey = "NSUserTrackingUsageDescription"; + + // Check if needs to do any info plist change. + bool hasUserTrackingDescription = + !string.IsNullOrEmpty(AdjustSettings.iOSUserTrackingUsageDescription); + bool hasUrlSchemesDeepLinksEnabled = AdjustSettings.iOSUrlSchemes.Length > 0; + + if (!hasUserTrackingDescription && !hasUrlSchemesDeepLinksEnabled) + { + return; + } + + // Get and read info plist. + var plistPath = Path.Combine(projectPath, "Info.plist"); + var plist = new PlistDocument(); + plist.ReadFromFile(plistPath); + var plistRoot = plist.root; + + // Do the info plist changes. + if (hasUserTrackingDescription) + { + if (plistRoot[UserTrackingUsageDescriptionKey] != null) + { + Debug.Log("[Adjust]: Overwritting User Tracking Usage Description."); + } + plistRoot.SetString(UserTrackingUsageDescriptionKey, + AdjustSettings.iOSUserTrackingUsageDescription); + } + + if (hasUrlSchemesDeepLinksEnabled) + { + AddUrlSchemesIOS(plistRoot, AdjustSettings.iOSUrlIdentifier, AdjustSettings.iOSUrlSchemes); + } + + // Write any info plist change. + File.WriteAllText(plistPath, plist.WriteToString()); + } + + private static void AddUrlSchemesIOS(PlistElementDict plistRoot, string urlIdentifier, string[] urlSchemes) + { + // Set Array for futher deeplink values. + var urlTypesArray = CreatePlistElementArray(plistRoot, "CFBundleURLTypes"); + + // Array will contain just one deeplink dictionary + var urlSchemesItems = CreatePlistElementDict(urlTypesArray); + urlSchemesItems.SetString("CFBundleURLName", urlIdentifier); + var urlSchemesArray = CreatePlistElementArray(urlSchemesItems, "CFBundleURLSchemes"); + + // Delete old deferred deeplinks URIs + Debug.Log("[Adjust]: Removing deeplinks that already exist in the array to avoid duplicates."); + foreach (var link in urlSchemes) + { + urlSchemesArray.values.RemoveAll( + element => element != null && element.AsString().Equals(link)); + } + + Debug.Log("[Adjust]: Adding new deep links."); + foreach (var link in urlSchemes.Distinct()) + { + urlSchemesArray.AddString(link); + } + } + + private static PlistElementArray CreatePlistElementArray(PlistElementDict root, string key) + { + if (!root.values.ContainsKey(key)) + { + Debug.Log(string.Format("[Adjust]: {0} not found in Info.plist. Creating a new one.", key)); + return root.CreateArray(key); + } + var result = root.values[key].AsArray(); + return result != null ? result : root.CreateArray(key); + } + + private static PlistElementDict CreatePlistElementDict(PlistElementArray rootArray) + { + if (rootArray.values.Count == 0) + { + Debug.Log("[Adjust]: Deeplinks array doesn't contain dictionary for deeplinks. Creating a new one."); + return rootArray.AddDict(); + } + + var urlSchemesItems = rootArray.values[0].AsDict(); + Debug.Log("[Adjust]: Reading deeplinks array"); + if (urlSchemesItems == null) + { + Debug.Log("[Adjust]: Deeplinks array doesn't contain dictionary for deeplinks. Creating a new one."); + urlSchemesItems = rootArray.AddDict(); + } + + return urlSchemesItems; + } + + private static void AddUniversalLinkDomains(PBXProject project, string xCodeProjectPath, string xCodeTarget) + { + string entitlementsFileName = "Unity-iPhone.entitlements"; + + Debug.Log("[Adjust]: Adding associated domains to entitlements file."); +#if UNITY_2019_3_OR_NEWER + var projectCapabilityManager = new ProjectCapabilityManager(xCodeProjectPath, entitlementsFileName, null, project.GetUnityMainTargetGuid()); +#else + var projectCapabilityManager = new ProjectCapabilityManager(xCodeProjectPath, entitlementsFileName, PBXProject.GetUnityTargetName()); +#endif + var uniqueDomains = AdjustSettings.iOSUniversalLinksDomains.Distinct().ToArray(); + const string applinksPrefix = "applinks:"; + for (int i = 0; i < uniqueDomains.Length; i++) + { + if (!uniqueDomains[i].StartsWith(applinksPrefix)) + { + uniqueDomains[i] = applinksPrefix + uniqueDomains[i]; + } + } + + projectCapabilityManager.AddAssociatedDomains(uniqueDomains); + projectCapabilityManager.WriteToFile(); + + Debug.Log("[Adjust]: Enabling Associated Domains capability with created entitlements file."); + project.AddCapability(xCodeTarget, PBXCapabilityType.AssociatedDomains, entitlementsFileName); + } +#endif +} diff --git a/Adjust/Editor/AdjustEditor.cs.meta b/Adjust/Editor/AdjustEditor.cs.meta new file mode 100644 index 0000000..13983a5 --- /dev/null +++ b/Adjust/Editor/AdjustEditor.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc5962e0096e9495bbad76934c842619 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Adjust/Editor/AdjustEditorPreprocessor.cs b/Adjust/Editor/AdjustEditorPreprocessor.cs new file mode 100644 index 0000000..0c8d9b1 --- /dev/null +++ b/Adjust/Editor/AdjustEditorPreprocessor.cs @@ -0,0 +1,365 @@ +using System.IO; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor.Build; +using UnityEditor; +using System.Xml; +using System; +using System.Text.RegularExpressions; +using System.Linq; + +#if UNITY_2018_1_OR_NEWER +public class AdjustEditorPreprocessor : IPreprocessBuildWithReport +#else +public class AdjustEditorPreprocessor : IPreprocessBuild +#endif +{ + public int callbackOrder + { + get + { + return 0; + } + } +#if UNITY_2018_1_OR_NEWER + public void OnPreprocessBuild(UnityEditor.Build.Reporting.BuildReport report) + { + OnPreprocessBuild(report.summary.platform, string.Empty); + } +#endif + + public void OnPreprocessBuild(BuildTarget target, string path) + { + if (target == BuildTarget.Android) + { +#if UNITY_ANDROID + RunPostProcessTasksAndroid(); +#endif + } + } + +#if UNITY_ANDROID + private static void RunPostProcessTasksAndroid() + { + var isAdjustManifestUsed = false; + var androidPluginsPath = Path.Combine(Application.dataPath, "Plugins/Android"); + var adjustManifestPath = Path.Combine(Application.dataPath, "Adjust/Android/AdjustAndroidManifest.xml"); + var appManifestPath = Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml"); + + // Check if user has already created AndroidManifest.xml file in its location. + // If not, use already predefined AdjustAndroidManifest.xml as default one. + if (!File.Exists(appManifestPath)) + { + if (!Directory.Exists(androidPluginsPath)) + { + Directory.CreateDirectory(androidPluginsPath); + } + + isAdjustManifestUsed = true; + File.Copy(adjustManifestPath, appManifestPath); + + Debug.Log("[Adjust]: User defined AndroidManifest.xml file not found in Plugins/Android folder."); + Debug.Log("[Adjust]: Creating default app's AndroidManifest.xml from AdjustAndroidManifest.xml file."); + } + else + { + Debug.Log("[Adjust]: User defined AndroidManifest.xml file located in Plugins/Android folder."); + } + + // Let's open the app's AndroidManifest.xml file. + var manifestFile = new XmlDocument(); + manifestFile.Load(appManifestPath); + + var manifestHasChanged = false; + + // If Adjust manifest is used, we have already set up everything in it so that + // our native Android SDK can be used properly. + if (!isAdjustManifestUsed) + { + // However, if you already had your own AndroidManifest.xml, we'll now run + // some checks on it and tweak it a bit if needed to add some stuff which + // our native Android SDK needs so that it can run properly. + + // Add needed permissions if they are missing. + manifestHasChanged |= AddPermissions(manifestFile); + + // Add intent filter to main activity if it is missing. + manifestHasChanged |= AddBroadcastReceiver(manifestFile); + } + + // Add intent filter to URL schemes for deeplinking + manifestHasChanged |= AddURISchemes(manifestFile); + + if (manifestHasChanged) + { + // Save the changes. + manifestFile.Save(appManifestPath); + + Debug.Log("[Adjust]: App's AndroidManifest.xml file check and potential modification completed."); + Debug.Log("[Adjust]: Please check if any error message was displayed during this process " + + "and make sure to fix all issues in order to properly use the Adjust SDK in your app."); + } + else + { + Debug.Log("[Adjust]: App's AndroidManifest.xml file check completed."); + Debug.Log("[Adjust]: No modifications performed due to app's AndroidManifest.xml file compatibility."); + } + } + + private static bool AddURISchemes(XmlDocument manifest) + { + if (AdjustSettings.AndroidUriSchemes.Length == 0) + { + return false; + } + Debug.Log("[Adjust]: Start addition of URI schemes"); + + var intentRoot = manifest.DocumentElement.SelectSingleNode("/manifest/application/activity[@android:name='com.unity3d.player.UnityPlayerActivity']", GetNamespaceManager(manifest)); + var usedIntentFiltersChanged = false; + var usedIntentFilters = GetIntentFilter(manifest); + foreach (var uriScheme in AdjustSettings.AndroidUriSchemes) + { + Uri uri; + try + { + // The first element is android:scheme and the second one is android:host. + uri = new Uri(uriScheme); + + // Uri class converts implicit file paths to explicit file paths with the file:// scheme. + if (!uriScheme.StartsWith(uri.Scheme)) + { + throw new UriFormatException(); + } + } + catch (UriFormatException) + { + Debug.LogError(string.Format("[Adjust]: Android deeplink URI scheme \"{0}\" is invalid and will be ignored.", uriScheme)); + Debug.LogWarning(string.Format("[Adjust]: Make sure that your URI scheme entry ends with ://")); + continue; + } + + if (!IsIntentFilterAlreadyExist(manifest, uri)) + { + Debug.Log("[Adjust]: Adding new URI with scheme: " + uri.Scheme + ", and host: " + uri.Host); + var androidSchemeNode = manifest.CreateElement("data"); + AddAndroidNamespaceAttribute(manifest, "scheme", uri.Scheme, androidSchemeNode); + AddAndroidNamespaceAttribute(manifest, "host", uri.Host, androidSchemeNode); + usedIntentFilters.AppendChild(androidSchemeNode); + usedIntentFiltersChanged = true; + + Debug.Log(string.Format("[Adjust]: Android deeplink URI scheme \"{0}\" successfully added to your app's AndroidManifest.xml file.", uriScheme)); + } + } + + if (usedIntentFiltersChanged && usedIntentFilters.ParentNode == null) + { + intentRoot.AppendChild(usedIntentFilters); + } + + return usedIntentFiltersChanged; + } + + private static XmlElement GetIntentFilter(XmlDocument manifest) + { + var xpath = "/manifest/application/activity/intent-filter[data/@android:scheme and data/@android:host]"; + var intentFilter = manifest.DocumentElement.SelectSingleNode(xpath, GetNamespaceManager(manifest)) as XmlElement; + if (intentFilter == null) + { + const string androidName = "name"; + const string category = "category"; + + intentFilter = manifest.CreateElement("intent-filter"); + + var actionElement = manifest.CreateElement("action"); + AddAndroidNamespaceAttribute(manifest, androidName, "android.intent.action.VIEW", actionElement); + intentFilter.AppendChild(actionElement); + + var defaultCategory = manifest.CreateElement(category); + AddAndroidNamespaceAttribute(manifest, androidName, "android.intent.category.DEFAULT", defaultCategory); + intentFilter.AppendChild(defaultCategory); + + var browsableCategory = manifest.CreateElement(category); + AddAndroidNamespaceAttribute(manifest, androidName, "android.intent.category.BROWSABLE", browsableCategory); + intentFilter.AppendChild(browsableCategory); + } + return intentFilter; + } + + private static bool IsIntentFilterAlreadyExist(XmlDocument manifest, Uri link) + { + var xpath = string.Format("/manifest/application/activity/intent-filter/data[@android:scheme='{0}' and @android:host='{1}']", link.Scheme, link.Host); + return manifest.DocumentElement.SelectSingleNode(xpath, GetNamespaceManager(manifest)) != null; + } + + private static bool AddPermissions(XmlDocument manifest) + { + // The Adjust SDK needs two permissions to be added to you app's manifest file: + // + // + // + // + + Debug.Log("[Adjust]: Checking if all permissions needed for the Adjust SDK are present in the app's AndroidManifest.xml file."); + + var manifestHasChanged = false; + + // If enabled by the user && android.permission.INTERNET permission is missing, add it. + if (AdjustSettings.androidPermissionInternet == true) + { + manifestHasChanged |= AddPermission(manifest, "android.permission.INTERNET"); + } + // If enabled by the user && com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE permission is missing, add it. + if (AdjustSettings.androidPermissionInstallReferrerService == true) + { + manifestHasChanged |= AddPermission(manifest, "com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE"); + } + // If enabled by the user && com.google.android.gms.permission.AD_ID permission is missing, add it. + if (AdjustSettings.androidPermissionAdId == true) + { + manifestHasChanged |= AddPermission(manifest, "com.google.android.gms.permission.AD_ID"); + } + // If enabled by the user && android.permission.ACCESS_NETWORK_STATE permission is missing, add it. + if (AdjustSettings.androidPermissionAccessNetworkState == true) + { + manifestHasChanged |= AddPermission(manifest, "android.permission.ACCESS_NETWORK_STATE"); + } + + return manifestHasChanged; + } + + private static bool AddPermission(XmlDocument manifest, string permissionValue) + { + if (DoesPermissionExist(manifest, permissionValue)) + { + Debug.Log(string.Format("[Adjust]: Your app's AndroidManifest.xml file already contains {0} permission.", permissionValue)); + return false; + } + + var element = manifest.CreateElement("uses-permission"); + AddAndroidNamespaceAttribute(manifest, "name", permissionValue, element); + manifest.DocumentElement.AppendChild(element); + Debug.Log(string.Format("[Adjust]: {0} permission successfully added to your app's AndroidManifest.xml file.", permissionValue)); + + return true; + } + + private static bool DoesPermissionExist(XmlDocument manifest, string permissionValue) + { + var xpath = string.Format("/manifest/uses-permission[@android:name='{0}']", permissionValue); + return manifest.DocumentElement.SelectSingleNode(xpath, GetNamespaceManager(manifest)) != null; + } + + private static bool AddBroadcastReceiver(XmlDocument manifest) + { + // We're looking for existence of broadcast receiver in the AndroidManifest.xml + // Check out the example below how that usually looks like: + + // > + // + // /> + // + // > + // + // + // + // + // + // + // + // + // + // + // + // > + // + // + + Debug.Log("[Adjust]: Checking if app's AndroidManifest.xml file contains receiver for INSTALL_REFERRER intent."); + + // Find the application node + var applicationNodeXpath = "/manifest/application"; + var applicationNode = manifest.DocumentElement.SelectSingleNode(applicationNodeXpath); + + // If there's no application node, something is really wrong with your AndroidManifest.xml. + if (applicationNode == null) + { + Debug.LogError("[Adjust]: Your app's AndroidManifest.xml file does not contain \"\" node."); + Debug.LogError("[Adjust]: Unable to add the Adjust broadcast receiver to AndroidManifest.xml."); + return false; + } + + // Okay, there's an application node in the AndroidManifest.xml file. + // Let's now check if user has already defined a receiver which is listening to INSTALL_REFERRER intent. + // If that is already defined, don't force the Adjust broadcast receiver to the manifest file. + // If not, add the Adjust broadcast receiver to the manifest file. + + var customBroadcastReceiversNodes = GetCustomRecieverNodes(manifest); + if (customBroadcastReceiversNodes.Count > 0) + { + if (DoesAdjustBroadcastReceiverExist(manifest)) + { + Debug.Log("[Adjust]: It seems like you are already using Adjust broadcast receiver. Yay."); + } + else + { + Debug.Log("[Adjust]: It seems like you are using your own broadcast receiver."); + Debug.Log("[Adjust]: Please, add the calls to the Adjust broadcast receiver like described in here: https://github.com/adjust/android_sdk/blob/master/doc/english/referrer.md"); + } + + return false; + } + + // Generate Adjust broadcast receiver entry and add it to the application node. + var receiverElement = manifest.CreateElement("receiver"); + AddAndroidNamespaceAttribute(manifest, "name", "com.adjust.sdk.AdjustReferrerReceiver", receiverElement); + AddAndroidNamespaceAttribute(manifest, "permission", "android.permission.INSTALL_PACKAGES", receiverElement); + AddAndroidNamespaceAttribute(manifest, "exported", "true", receiverElement); + + var intentFilterElement = manifest.CreateElement("intent-filter"); + var actionElement = manifest.CreateElement("action"); + AddAndroidNamespaceAttribute(manifest, "name", "com.android.vending.INSTALL_REFERRER", actionElement); + + intentFilterElement.AppendChild(actionElement); + receiverElement.AppendChild(intentFilterElement); + applicationNode.AppendChild(receiverElement); + + Debug.Log("[Adjust]: Adjust broadcast receiver successfully added to your app's AndroidManifest.xml file."); + + return true; + } + + private static bool DoesAdjustBroadcastReceiverExist(XmlDocument manifest) + { + var xpath = "/manifest/application/receiver[@android:name='com.adjust.sdk.AdjustReferrerReceiver']"; + return manifest.SelectSingleNode(xpath, GetNamespaceManager(manifest)) != null; + } + + private static List GetCustomRecieverNodes(XmlDocument manifest) + { + var xpath = "/manifest/application/receiver[intent-filter/action[@android:name='com.android.vending.INSTALL_REFERRER']]"; + return new List(manifest.DocumentElement.SelectNodes(xpath, GetNamespaceManager(manifest)).OfType()); + } + + private static void AddAndroidNamespaceAttribute(XmlDocument manifest, string key, string value, XmlElement node) + { + var androidSchemeAttribute = manifest.CreateAttribute("android", key, "http://schemas.android.com/apk/res/android"); + androidSchemeAttribute.InnerText = value; + node.SetAttributeNode(androidSchemeAttribute); + } + + private static XmlNamespaceManager GetNamespaceManager(XmlDocument manifest) + { + var namespaceManager = new XmlNamespaceManager(manifest.NameTable); + namespaceManager.AddNamespace("android", "http://schemas.android.com/apk/res/android"); + return namespaceManager; + } +#endif +} diff --git a/Adjust/Editor/AdjustEditorPreprocessor.cs.meta b/Adjust/Editor/AdjustEditorPreprocessor.cs.meta new file mode 100644 index 0000000..1aa966b --- /dev/null +++ b/Adjust/Editor/AdjustEditorPreprocessor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: c88a79442bb9342b6956c7d59705f982 +timeCreated: 1621599616 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Editor/AdjustSettings.cs b/Adjust/Editor/AdjustSettings.cs new file mode 100644 index 0000000..ed46907 --- /dev/null +++ b/Adjust/Editor/AdjustSettings.cs @@ -0,0 +1,161 @@ +// Inspired by: https://github.com/facebook/facebook-sdk-for-unity/blob/master/Facebook.Unity.Settings/FacebookSettings.cs + +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +public class AdjustSettings : ScriptableObject +{ + private static AdjustSettings instance; + + [SerializeField] + private bool _iOSFrameworkAdSupport = true; + [SerializeField] + private bool _iOSFrameworkAdServices = false; + [SerializeField] + private bool _iOSFrameworkAppTrackingTransparency = false; + [SerializeField] + private bool _iOSFrameworkStoreKit = false; + [SerializeField] + private bool _androidPermissionInternet = true; + [SerializeField] + private bool _androidPermissionInstallReferrerService = true; + [SerializeField] + private bool _androidPermissionAdId = true; + [SerializeField] + private bool _androidPermissionAccessNetworkState = false; + [SerializeField] + private string _iOSUserTrackingUsageDescription; + [SerializeField] + private string _iOSUrlIdentifier; + [SerializeField] + private string[] _iOSUrlSchemes = new string[0]; + [SerializeField] + private string[] _iOSUniversalLinksDomains = new string[0]; + [SerializeField] + private string[] androidUriSchemes = new string[0]; + + public static AdjustSettings Instance + { + get + { + instance = NullableInstance; + + if (instance == null) + { + // Create AdjustSettings.asset inside the folder in which AdjustSettings.cs reside. + instance = ScriptableObject.CreateInstance(); + var guids = AssetDatabase.FindAssets(string.Format("{0} t:script", "AdjustSettings")); + if (guids == null || guids.Length <= 0) + { + return instance; + } +// var assetPath = AssetDatabase.GUIDToAssetPath(guids[0]).Replace("AdjustSettings.cs", "AdjustSettings.asset"); + // ************ Auto fixed by Guru Adjust ************ + if(!System.IO.Directory.Exists("Assets/Guru/Editor")) System.IO.Directory.CreateDirectory("Assets/Guru/Editor"); + var assetPath = "Assets/Guru/Editor/AdjustSettings.asset"; + // ************ Auto fixed by Guru Adjust ************ + AssetDatabase.CreateAsset(instance, assetPath); + } + + return instance; + } + } + + public static AdjustSettings NullableInstance + { + get + { + if (instance == null) + { + var guids = AssetDatabase.FindAssets(string.Format("{0} t:ScriptableObject", "AdjustSettings")); + if (guids == null || guids.Length <= 0) + { + return instance; + } + var assetPath = AssetDatabase.GUIDToAssetPath(guids[0]); + instance = (AdjustSettings)AssetDatabase.LoadAssetAtPath(assetPath, typeof(AdjustSettings)); + } + + return instance; + } + } + + public static bool iOSFrameworkAdSupport + { + get { return Instance._iOSFrameworkAdSupport; } + set { Instance._iOSFrameworkAdSupport = value; } + } + + public static bool iOSFrameworkAdServices + { + get { return Instance._iOSFrameworkAdServices; } + set { Instance._iOSFrameworkAdServices = value; } + } + + public static bool iOSFrameworkAppTrackingTransparency + { + get { return Instance._iOSFrameworkAppTrackingTransparency; } + set { Instance._iOSFrameworkAppTrackingTransparency = value; } + } + + public static bool iOSFrameworkStoreKit + { + get { return Instance._iOSFrameworkStoreKit; } + set { Instance._iOSFrameworkStoreKit = value; } + } + + public static bool androidPermissionInternet + { + get { return Instance._androidPermissionInternet; } + set { Instance._androidPermissionInternet = value; } + } + + public static bool androidPermissionInstallReferrerService + { + get { return Instance._androidPermissionInstallReferrerService; } + set { Instance._androidPermissionInstallReferrerService = value; } + } + + public static bool androidPermissionAdId + { + get { return Instance._androidPermissionAdId; } + set { Instance._androidPermissionAdId = value; } + } + + public static bool androidPermissionAccessNetworkState + { + get { return Instance._androidPermissionAccessNetworkState; } + set { Instance._androidPermissionAccessNetworkState = value; } + } + + public static string iOSUserTrackingUsageDescription + { + get { return Instance._iOSUserTrackingUsageDescription; } + set { Instance._iOSUserTrackingUsageDescription = value; } + } + + public static string iOSUrlIdentifier + { + get { return Instance._iOSUrlIdentifier; } + set { Instance._iOSUrlIdentifier = value; } + } + + public static string[] iOSUrlSchemes + { + get { return Instance._iOSUrlSchemes; } + set { Instance._iOSUrlSchemes = value; } + } + + public static string[] iOSUniversalLinksDomains + { + get { return Instance._iOSUniversalLinksDomains; } + set { Instance._iOSUniversalLinksDomains = value; } + } + + public static string[] AndroidUriSchemes + { + get { return Instance.androidUriSchemes; } + set { Instance.androidUriSchemes = value; } + } +} diff --git a/Adjust/Editor/AdjustSettings.cs.meta b/Adjust/Editor/AdjustSettings.cs.meta new file mode 100644 index 0000000..aefcdd0 --- /dev/null +++ b/Adjust/Editor/AdjustSettings.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ea4d495dc6d5ba64b90db7afda6a48a4 +timeCreated: 1601333126 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Editor/AdjustSettingsEditor.cs b/Adjust/Editor/AdjustSettingsEditor.cs new file mode 100644 index 0000000..ec49d76 --- /dev/null +++ b/Adjust/Editor/AdjustSettingsEditor.cs @@ -0,0 +1,126 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace com.adjust.sdk +{ + [CustomEditor(typeof(AdjustSettings))] + public class AdjustSettingsEditor : Editor + { + SerializedProperty iOSFrameworkAdSupport; + SerializedProperty iOSFrameworkAdServices; + SerializedProperty iOSFrameworkAppTrackingTransparency; + SerializedProperty iOSFrameworkStoreKit; + SerializedProperty androidPermissionInternet; + SerializedProperty androidPermissionInstallReferrerService; + SerializedProperty androidPermissionAdId; + SerializedProperty androidPermissionAccessNetworkState; + SerializedProperty iOSUserTrackingUsageDescription; + SerializedProperty iOSUrlIdentifier; + SerializedProperty iOSUrlSchemes; + SerializedProperty iOSUniversalLinksDomains; + SerializedProperty androidUriSchemes; + + void OnEnable() + { + iOSFrameworkAdSupport = serializedObject.FindProperty("_iOSFrameworkAdSupport"); + iOSFrameworkAdServices = serializedObject.FindProperty("_iOSFrameworkAdServices"); + iOSFrameworkAppTrackingTransparency = serializedObject.FindProperty("_iOSFrameworkAppTrackingTransparency"); + iOSFrameworkStoreKit = serializedObject.FindProperty("_iOSFrameworkStoreKit"); + androidPermissionInternet = serializedObject.FindProperty("_androidPermissionInternet"); + androidPermissionInstallReferrerService = serializedObject.FindProperty("_androidPermissionInstallReferrerService"); + androidPermissionAdId = serializedObject.FindProperty("_androidPermissionAdId"); + androidPermissionAccessNetworkState = serializedObject.FindProperty("_androidPermissionAccessNetworkState"); + iOSUserTrackingUsageDescription = serializedObject.FindProperty("_iOSUserTrackingUsageDescription"); + iOSUrlIdentifier = serializedObject.FindProperty("_iOSUrlIdentifier"); + iOSUrlSchemes = serializedObject.FindProperty("_iOSUrlSchemes"); + iOSUniversalLinksDomains = serializedObject.FindProperty("_iOSUniversalLinksDomains"); + androidUriSchemes = serializedObject.FindProperty("androidUriSchemes"); + } + public override void OnInspectorGUI() + { + GUIStyle darkerCyanTextFieldStyles = new GUIStyle(EditorStyles.boldLabel); + darkerCyanTextFieldStyles.normal.textColor = new Color(0f/255f, 190f/255f, 190f/255f); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("LINK IOS FRAMEWORKS:", darkerCyanTextFieldStyles); + EditorGUI.indentLevel += 1; + EditorGUILayout.PropertyField(iOSFrameworkAdSupport, + new GUIContent("AdSupport.framework", + "iOS framework needed to access IDFA value"), + true); + EditorGUILayout.PropertyField(iOSFrameworkAdServices, + new GUIContent("AdServices.framework", + "iOS framework needed to support AdServices based Apple Search Ads attribution"), + true); + EditorGUILayout.PropertyField(iOSFrameworkAppTrackingTransparency, + new GUIContent("AppTrackingTransparency.framework", + "iOS framework needed to display tracking consent dialog"), + true); + EditorGUILayout.PropertyField(iOSFrameworkStoreKit, + new GUIContent("StoreKit.framework", + "iOS framework needed to use SKAdNetwork capabilities"), + true); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + EditorGUILayout.LabelField("ADD ANDROID PERMISSIONS:", darkerCyanTextFieldStyles); + EditorGUI.indentLevel += 1; + EditorGUILayout.PropertyField(androidPermissionInternet, + new GUIContent("android.permission.INTERNET", + "Android permission needed to send data to Adjust backend"), + true); + EditorGUILayout.PropertyField(androidPermissionInstallReferrerService, + new GUIContent("com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE", + "Android permission needed to read install referrer"), + true); + EditorGUILayout.PropertyField(androidPermissionAdId, + new GUIContent("com.google.android.gms.permission.AD_ID", + "Android permission needed to read Google Advertising ID if you target API 33 or later"), + true); + EditorGUILayout.PropertyField(androidPermissionAccessNetworkState, + new GUIContent("android.permission.ACCESS_NETWORK_STATE", + "Android permission needed to determine type of network device is connected to"), + true); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + EditorGUILayout.LabelField("IOS PRIVACY:", darkerCyanTextFieldStyles); + EditorGUI.indentLevel += 1; + EditorGUILayout.PropertyField(iOSUserTrackingUsageDescription, + new GUIContent("User Tracking Description", + "String you would like to display to your users describing the reason " + + "behind asking for tracking permission."), + true); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + EditorGUILayout.LabelField("DEEP LINKING:", darkerCyanTextFieldStyles); + EditorGUI.indentLevel += 1; + EditorGUILayout.PropertyField(iOSUrlIdentifier, + new GUIContent("iOS URL Identifier", + "Value of CFBundleURLName property of the root CFBundleURLTypes element. " + + "If not needed otherwise, value should be your bundle ID."), + true); + EditorGUILayout.PropertyField(iOSUrlSchemes, + new GUIContent("iOS URL Schemes", + "URL schemes handled by your app. " + + "Make sure to enter just the scheme name without :// part at the end."), + true); + EditorGUILayout.PropertyField(iOSUniversalLinksDomains, + new GUIContent("iOS Universal Links Domains", + "Associated domains handled by your app. State just the domain part without applinks: part in front."), + true); + EditorGUILayout.PropertyField(androidUriSchemes, + new GUIContent("Android URI Schemes", + "URI schemes handled by your app. " + + "Make sure to enter just the scheme name with :// part at the end."), + true); + EditorGUILayout.HelpBox( + "Please note that Adjust SDK doesn't remove existing URI Schemes, " + + "so if you need to clean previously added entries, " + + "you need to do it manually from \"Assets/Plugins/Android/AndroidManifest.xml\"", + MessageType.Info, + true); + EditorGUI.indentLevel -= 1; + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Adjust/Editor/AdjustSettingsEditor.cs.meta b/Adjust/Editor/AdjustSettingsEditor.cs.meta new file mode 100644 index 0000000..d667ac7 --- /dev/null +++ b/Adjust/Editor/AdjustSettingsEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e957ffb3938e94bcaab247e46bd9804c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/ExampleGUI.meta b/Adjust/ExampleGUI.meta new file mode 100644 index 0000000..efca979 --- /dev/null +++ b/Adjust/ExampleGUI.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c173c46523b75714d945d694e8b89742 +folderAsset: yes +timeCreated: 1578652520 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/ExampleGUI/ExampleGUI.cs b/Adjust/ExampleGUI/ExampleGUI.cs new file mode 100644 index 0000000..57a5490 --- /dev/null +++ b/Adjust/ExampleGUI/ExampleGUI.cs @@ -0,0 +1,290 @@ +using System; +using System.Text; +using System.Collections; +using System.Runtime.InteropServices; +using UnityEngine; +using UnityEngine.UI; +using com.adjust.sdk; + +public class ExampleGUI : MonoBehaviour +{ + private int numberOfButtons = 8; + private bool isEnabled; + private bool showPopUp = false; + private string txtSetEnabled = "Disable SDK"; + private string txtManualLaunch = "Manual Launch"; + private string txtSetOfflineMode = "Turn Offline Mode ON"; + + void OnGUI() + { + if (showPopUp) + { + GUI.Window(0, new Rect((Screen.width / 2) - 150, (Screen.height / 2) - 65, 300, 130), ShowGUI, "Is SDK enabled?"); + } + + if (GUI.Button(new Rect(0, Screen.height * 0 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), txtManualLaunch)) + { + if (!string.Equals(txtManualLaunch, "SDK Launched", StringComparison.OrdinalIgnoreCase)) + { + AdjustConfig adjustConfig = new AdjustConfig("2fm9gkqubvpc", AdjustEnvironment.Sandbox); + adjustConfig.setLogLevel(AdjustLogLevel.Verbose); + adjustConfig.setLogDelegate(msg => Debug.Log(msg)); + adjustConfig.setEventSuccessDelegate(EventSuccessCallback); + adjustConfig.setEventFailureDelegate(EventFailureCallback); + adjustConfig.setSessionSuccessDelegate(SessionSuccessCallback); + adjustConfig.setSessionFailureDelegate(SessionFailureCallback); + adjustConfig.setDeferredDeeplinkDelegate(DeferredDeeplinkCallback); + adjustConfig.setAttributionChangedDelegate(AttributionChangedCallback); + Adjust.start(adjustConfig); + + isEnabled = true; + txtManualLaunch = "SDK Launched"; + } + } + + if (GUI.Button(new Rect(0, Screen.height * 1 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), "Track Simple Event")) + { + AdjustEvent adjustEvent = new AdjustEvent("g3mfiw"); + Adjust.trackEvent(adjustEvent); + } + + if (GUI.Button(new Rect(0, Screen.height * 2 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), "Track Revenue Event")) + { + AdjustEvent adjustEvent = new AdjustEvent("a4fd35"); + adjustEvent.setRevenue(0.25, "EUR"); + Adjust.trackEvent(adjustEvent); + } + + if (GUI.Button(new Rect(0, Screen.height * 3 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), "Track Callback Event")) + { + AdjustEvent adjustEvent = new AdjustEvent("34vgg9"); + adjustEvent.addCallbackParameter("key", "value"); + adjustEvent.addCallbackParameter("foo", "bar"); + Adjust.trackEvent(adjustEvent); + } + + if (GUI.Button(new Rect(0, Screen.height * 4 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), "Track Partner Event")) + { + AdjustEvent adjustEvent = new AdjustEvent("w788qs"); + adjustEvent.addPartnerParameter("key", "value"); + adjustEvent.addPartnerParameter("foo", "bar"); + Adjust.trackEvent(adjustEvent); + } + + if (GUI.Button(new Rect(0, Screen.height * 5 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), txtSetOfflineMode)) + { + if (string.Equals(txtSetOfflineMode, "Turn Offline Mode ON", StringComparison.OrdinalIgnoreCase)) + { + Adjust.setOfflineMode(true); + txtSetOfflineMode = "Turn Offline Mode OFF"; + } + else + { + Adjust.setOfflineMode(false); + txtSetOfflineMode = "Turn Offline Mode ON"; + } + } + + if (GUI.Button(new Rect(0, Screen.height * 6 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), txtSetEnabled)) + { + if (string.Equals(txtSetEnabled, "Disable SDK", StringComparison.OrdinalIgnoreCase)) + { + Adjust.setEnabled(false); + txtSetEnabled = "Enable SDK"; + } + else + { + Adjust.setEnabled(true); + txtSetEnabled = "Disable SDK"; + } + } + + if (GUI.Button(new Rect(0, Screen.height * 7 / numberOfButtons, Screen.width, Screen.height / numberOfButtons), "Is SDK Enabled?")) + { + isEnabled = Adjust.isEnabled(); + showPopUp = true; + } + } + + void ShowGUI(int windowID) + { + if (isEnabled) + { + GUI.Label(new Rect(65, 40, 200, 30), "Adjust SDK is ENABLED!"); + } + else + { + GUI.Label(new Rect(65, 40, 200, 30), "Adjust SDK is DISABLED!"); + } + + if (GUI.Button(new Rect(90, 75, 120, 40), "OK")) + { + showPopUp = false; + } + } + + public void HandleGooglePlayId(String adId) + { + Debug.Log("Google Play Ad ID = " + adId); + } + + public void AttributionChangedCallback(AdjustAttribution attributionData) + { + Debug.Log("Attribution changed!"); + + if (attributionData.trackerName != null) + { + Debug.Log("Tracker name: " + attributionData.trackerName); + } + if (attributionData.trackerToken != null) + { + Debug.Log("Tracker token: " + attributionData.trackerToken); + } + if (attributionData.network != null) + { + Debug.Log("Network: " + attributionData.network); + } + if (attributionData.campaign != null) + { + Debug.Log("Campaign: " + attributionData.campaign); + } + if (attributionData.adgroup != null) + { + Debug.Log("Adgroup: " + attributionData.adgroup); + } + if (attributionData.creative != null) + { + Debug.Log("Creative: " + attributionData.creative); + } + if (attributionData.clickLabel != null) + { + Debug.Log("Click label: " + attributionData.clickLabel); + } + if (attributionData.adid != null) + { + Debug.Log("ADID: " + attributionData.adid); + } + } + + public void EventSuccessCallback(AdjustEventSuccess eventSuccessData) + { + Debug.Log("Event tracked successfully!"); + + if (eventSuccessData.Message != null) + { + Debug.Log("Message: " + eventSuccessData.Message); + } + if (eventSuccessData.Timestamp != null) + { + Debug.Log("Timestamp: " + eventSuccessData.Timestamp); + } + if (eventSuccessData.Adid != null) + { + Debug.Log("Adid: " + eventSuccessData.Adid); + } + if (eventSuccessData.EventToken != null) + { + Debug.Log("EventToken: " + eventSuccessData.EventToken); + } + if (eventSuccessData.CallbackId != null) + { + Debug.Log("CallbackId: " + eventSuccessData.CallbackId); + } + if (eventSuccessData.JsonResponse != null) + { + Debug.Log("JsonResponse: " + eventSuccessData.GetJsonResponse()); + } + } + + public void EventFailureCallback(AdjustEventFailure eventFailureData) + { + Debug.Log("Event tracking failed!"); + + if (eventFailureData.Message != null) + { + Debug.Log("Message: " + eventFailureData.Message); + } + if (eventFailureData.Timestamp != null) + { + Debug.Log("Timestamp: " + eventFailureData.Timestamp); + } + if (eventFailureData.Adid != null) + { + Debug.Log("Adid: " + eventFailureData.Adid); + } + if (eventFailureData.EventToken != null) + { + Debug.Log("EventToken: " + eventFailureData.EventToken); + } + if (eventFailureData.CallbackId != null) + { + Debug.Log("CallbackId: " + eventFailureData.CallbackId); + } + if (eventFailureData.JsonResponse != null) + { + Debug.Log("JsonResponse: " + eventFailureData.GetJsonResponse()); + } + + Debug.Log("WillRetry: " + eventFailureData.WillRetry.ToString()); + } + + public void SessionSuccessCallback(AdjustSessionSuccess sessionSuccessData) + { + Debug.Log("Session tracked successfully!"); + + if (sessionSuccessData.Message != null) + { + Debug.Log("Message: " + sessionSuccessData.Message); + } + if (sessionSuccessData.Timestamp != null) + { + Debug.Log("Timestamp: " + sessionSuccessData.Timestamp); + } + if (sessionSuccessData.Adid != null) + { + Debug.Log("Adid: " + sessionSuccessData.Adid); + } + if (sessionSuccessData.JsonResponse != null) + { + Debug.Log("JsonResponse: " + sessionSuccessData.GetJsonResponse()); + } + } + + public void SessionFailureCallback(AdjustSessionFailure sessionFailureData) + { + Debug.Log("Session tracking failed!"); + + if (sessionFailureData.Message != null) + { + Debug.Log("Message: " + sessionFailureData.Message); + } + if (sessionFailureData.Timestamp != null) + { + Debug.Log("Timestamp: " + sessionFailureData.Timestamp); + } + if (sessionFailureData.Adid != null) + { + Debug.Log("Adid: " + sessionFailureData.Adid); + } + if (sessionFailureData.JsonResponse != null) + { + Debug.Log("JsonResponse: " + sessionFailureData.GetJsonResponse()); + } + + Debug.Log("WillRetry: " + sessionFailureData.WillRetry.ToString()); + } + + private void DeferredDeeplinkCallback(string deeplinkURL) + { + Debug.Log("Deferred deeplink reported!"); + + if (deeplinkURL != null) + { + Debug.Log("Deeplink URL: " + deeplinkURL); + } + else + { + Debug.Log("Deeplink URL is null!"); + } + } +} diff --git a/Adjust/ExampleGUI/ExampleGUI.cs.meta b/Adjust/ExampleGUI/ExampleGUI.cs.meta new file mode 100644 index 0000000..b52508e --- /dev/null +++ b/Adjust/ExampleGUI/ExampleGUI.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 196c5c89d4b1e46dfbf423ae77d31a68 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Adjust/ExampleGUI/ExampleGUI.prefab b/Adjust/ExampleGUI/ExampleGUI.prefab new file mode 100644 index 0000000..377b508 --- /dev/null +++ b/Adjust/ExampleGUI/ExampleGUI.prefab @@ -0,0 +1,53 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &100000 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 400000} + - component: {fileID: 11400000} + m_Layer: 0 + m_Name: ExampleGUI + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &400000 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 196c5c89d4b1e46dfbf423ae77d31a68, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 100000} + m_IsPrefabParent: 1 diff --git a/Adjust/ExampleGUI/ExampleGUI.prefab.meta b/Adjust/ExampleGUI/ExampleGUI.prefab.meta new file mode 100644 index 0000000..e70eb6c --- /dev/null +++ b/Adjust/ExampleGUI/ExampleGUI.prefab.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 50b53da2a7a154d63a33a49ad08c24a8 +NativeFormatImporter: + userData: diff --git a/Adjust/ExampleGUI/ExampleGUI.unity b/Adjust/ExampleGUI/ExampleGUI.unity new file mode 100644 index 0000000..5026f26 --- /dev/null +++ b/Adjust/ExampleGUI/ExampleGUI.unity @@ -0,0 +1,292 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 8 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 9 + m_Resolution: 1 + m_BakeResolution: 50 + m_TextureWidth: 1024 + m_TextureHeight: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &7284787 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 415478, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 415478, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 415478, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 415478, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 415478, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 415478, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 415478, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 415478, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 11482148, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + propertyPath: startManually + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 11482148, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + propertyPath: logLevel + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 11482148, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + propertyPath: appToken + value: '{YourAppToken}' + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: a3267720e82aa41c1a05ab29824902b4, type: 2} + m_IsPrefabParent: 0 +--- !u!1 &231489158 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 231489162} + - component: {fileID: 231489161} + - component: {fileID: 231489160} + - component: {fileID: 231489159} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &231489159 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 231489158} + m_Enabled: 1 +--- !u!124 &231489160 +Behaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 231489158} + m_Enabled: 1 +--- !u!20 &231489161 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 231489158} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &231489162 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 231489158} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1861285553 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: 50b53da2a7a154d63a33a49ad08c24a8, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 50b53da2a7a154d63a33a49ad08c24a8, type: 2} + propertyPath: m_LocalPosition.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 50b53da2a7a154d63a33a49ad08c24a8, type: 2} + propertyPath: m_LocalPosition.z + value: -10 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 50b53da2a7a154d63a33a49ad08c24a8, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 50b53da2a7a154d63a33a49ad08c24a8, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 50b53da2a7a154d63a33a49ad08c24a8, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 50b53da2a7a154d63a33a49ad08c24a8, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: 50b53da2a7a154d63a33a49ad08c24a8, type: 2} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 100100000, guid: 50b53da2a7a154d63a33a49ad08c24a8, type: 2} + m_IsPrefabParent: 0 diff --git a/Adjust/ExampleGUI/ExampleGUI.unity.meta b/Adjust/ExampleGUI/ExampleGUI.unity.meta new file mode 100644 index 0000000..60d5d95 --- /dev/null +++ b/Adjust/ExampleGUI/ExampleGUI.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6aa8afcd558084586bce9f8efd3eb5d6 +timeCreated: 1447689503 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Prefab.meta b/Adjust/Prefab.meta new file mode 100644 index 0000000..6bc38d1 --- /dev/null +++ b/Adjust/Prefab.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0acdd227ad1b8d147ade044242671e15 +folderAsset: yes +timeCreated: 1578652549 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Prefab/Adjust.prefab b/Adjust/Prefab/Adjust.prefab new file mode 100644 index 0000000..394a83f --- /dev/null +++ b/Adjust/Prefab/Adjust.prefab @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &115478 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 415478} + - component: {fileID: 114179903453641630} + m_Layer: 0 + m_Name: Adjust + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &415478 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 115478} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 115478} + m_IsPrefabParent: 1 +--- !u!114 &114179903453641630 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 115478} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 525ece82a472e4dea837e1ef938fd15d, type: 3} + m_Name: + m_EditorClassIdentifier: + startManually: 1 + appToken: + environment: 0 + logLevel: 3 + eventBuffering: 0 + sendInBackground: 0 + launchDeferredDeeplink: 1 + needsCost: 0 + coppaCompliant: 0 + linkMe: 0 + defaultTracker: + urlStrategy: 0 + startDelay: 0 + secretId: 0 + info1: 0 + info2: 0 + info3: 0 + info4: 0 + preinstallTracking: 0 + preinstallFilePath: + playStoreKidsApp: 0 + adServicesInfoReading: 1 + idfaInfoReading: 1 + skAdNetworkHandling: 1 diff --git a/Adjust/Prefab/Adjust.prefab.meta b/Adjust/Prefab/Adjust.prefab.meta new file mode 100644 index 0000000..ca66937 --- /dev/null +++ b/Adjust/Prefab/Adjust.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a3267720e82aa41c1a05ab29824902b4 +NativeFormatImporter: + mainObjectFileID: -1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity.meta b/Adjust/Unity.meta new file mode 100644 index 0000000..bf99afe --- /dev/null +++ b/Adjust/Unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1ac00d53de34e29419cae749db3f6528 +folderAsset: yes +timeCreated: 1578652520 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/Adjust.cs b/Adjust/Unity/Adjust.cs new file mode 100644 index 0000000..fc7ef1d --- /dev/null +++ b/Adjust/Unity/Adjust.cs @@ -0,0 +1,1211 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace com.adjust.sdk +{ + public class Adjust : MonoBehaviour + { + private const string errorMsgEditor = "[Adjust]: SDK can not be used in Editor."; + private const string errorMsgStart = "[Adjust]: SDK not started. Start it manually using the 'start' method."; + private const string errorMsgPlatform = "[Adjust]: SDK can only be used in Android, iOS, Windows Phone 8.1, Windows Store or Universal Windows apps."; + + // [Header("SDK SETTINGS:")] + // [Space(5)] + // [Tooltip("If selected, it is expected from you to initialize Adjust SDK from your app code. " + + // "Any SDK configuration settings from prefab will be ignored in that case.")] + [HideInInspector] + public bool startManually = true; + [HideInInspector] + public string appToken; + [HideInInspector] + public AdjustEnvironment environment = AdjustEnvironment.Sandbox; + [HideInInspector] + public AdjustLogLevel logLevel = AdjustLogLevel.Info; + [HideInInspector] + public bool eventBuffering = false; + [HideInInspector] + public bool sendInBackground = false; + [HideInInspector] + public bool launchDeferredDeeplink = true; + [HideInInspector] + public bool needsCost = false; + [HideInInspector] + public bool coppaCompliant = false; + [HideInInspector] + public bool linkMe = false; + [HideInInspector] + public string defaultTracker; + [HideInInspector] + public AdjustUrlStrategy urlStrategy = AdjustUrlStrategy.Default; + [HideInInspector] + public double startDelay = 0; + + // [Header("APP SECRET:")] + // [Space(5)] + [HideInInspector] + public long secretId = 0; + [HideInInspector] + public long info1 = 0; + [HideInInspector] + public long info2 = 0; + [HideInInspector] + public long info3 = 0; + [HideInInspector] + public long info4 = 0; + + // [Header("ANDROID SPECIFIC FEATURES:")] + // [Space(5)] + [HideInInspector] + public bool preinstallTracking = false; + [HideInInspector] + public string preinstallFilePath; + [HideInInspector] + public bool playStoreKidsApp = false; + + // [Header("iOS SPECIFIC FEATURES:")] + // [Space(5)] + [HideInInspector] + public bool adServicesInfoReading = true; + [HideInInspector] + public bool idfaInfoReading = true; + [HideInInspector] + public bool skAdNetworkHandling = true; + +#if UNITY_IOS + // Delegate references for iOS callback triggering + private static List> authorizationStatusDelegates = null; + private static Action deferredDeeplinkDelegate = null; + private static Action eventSuccessDelegate = null; + private static Action eventFailureDelegate = null; + private static Action sessionSuccessDelegate = null; + private static Action sessionFailureDelegate = null; + private static Action attributionChangedDelegate = null; + private static Action conversionValueUpdatedDelegate = null; + private static Action skad4ConversionValueUpdatedDelegate = null; + private static Action skadUpdateConversionValueDelegate = null; + private static Action skad4UpdateConversionValueDelegate = null; + private static Action verificationInfoDelegate = null; +#endif + + void Awake() + { + if (IsEditor()) + { + return; + } + + DontDestroyOnLoad(transform.gameObject); + +#if UNITY_ANDROID && UNITY_2019_2_OR_NEWER + Application.deepLinkActivated += Adjust.appWillOpenUrl; + if (!string.IsNullOrEmpty(Application.absoluteURL)) + { + // Cold start and Application.absoluteURL not null so process Deep Link. + Adjust.appWillOpenUrl(Application.absoluteURL); + } +#endif + + if (!this.startManually) + { + AdjustConfig adjustConfig = new AdjustConfig(this.appToken, this.environment, (this.logLevel == AdjustLogLevel.Suppress)); + adjustConfig.setLogLevel(this.logLevel); + adjustConfig.setSendInBackground(this.sendInBackground); + adjustConfig.setEventBufferingEnabled(this.eventBuffering); + adjustConfig.setLaunchDeferredDeeplink(this.launchDeferredDeeplink); + adjustConfig.setDefaultTracker(this.defaultTracker); + adjustConfig.setUrlStrategy(this.urlStrategy.ToLowerCaseString()); + adjustConfig.setAppSecret(this.secretId, this.info1, this.info2, this.info3, this.info4); + adjustConfig.setDelayStart(this.startDelay); + adjustConfig.setNeedsCost(this.needsCost); + adjustConfig.setPreinstallTrackingEnabled(this.preinstallTracking); + adjustConfig.setPreinstallFilePath(this.preinstallFilePath); + adjustConfig.setAllowAdServicesInfoReading(this.adServicesInfoReading); + adjustConfig.setAllowIdfaReading(this.idfaInfoReading); + adjustConfig.setCoppaCompliantEnabled(this.coppaCompliant); + adjustConfig.setPlayStoreKidsAppEnabled(this.playStoreKidsApp); + adjustConfig.setLinkMeEnabled(this.linkMe); + if (!skAdNetworkHandling) + { + adjustConfig.deactivateSKAdNetworkHandling(); + } + Adjust.start(adjustConfig); + } + } + + void OnApplicationPause(bool pauseStatus) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + // No action, iOS SDK is subscribed to iOS lifecycle notifications. +#elif UNITY_ANDROID + if (pauseStatus) + { + AdjustAndroid.OnPause(); + } + else + { + AdjustAndroid.OnResume(); + } +#elif (UNITY_WSA || UNITY_WP8) + if (pauseStatus) + { + AdjustWindows.OnPause(); + } + else + { + AdjustWindows.OnResume(); + } +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void start(AdjustConfig adjustConfig) + { + if (IsEditor()) + { + return; + } + + if (adjustConfig == null) + { + Debug.Log("[Adjust]: Missing config to start."); + return; + } + +#if UNITY_IOS + Adjust.eventSuccessDelegate = adjustConfig.getEventSuccessDelegate(); + Adjust.eventFailureDelegate = adjustConfig.getEventFailureDelegate(); + Adjust.sessionSuccessDelegate = adjustConfig.getSessionSuccessDelegate(); + Adjust.sessionFailureDelegate = adjustConfig.getSessionFailureDelegate(); + Adjust.deferredDeeplinkDelegate = adjustConfig.getDeferredDeeplinkDelegate(); + Adjust.attributionChangedDelegate = adjustConfig.getAttributionChangedDelegate(); + Adjust.conversionValueUpdatedDelegate = adjustConfig.getConversionValueUpdatedDelegate(); + Adjust.skad4ConversionValueUpdatedDelegate = adjustConfig.getSkad4ConversionValueUpdatedDelegate(); + AdjustiOS.Start(adjustConfig); +#elif UNITY_ANDROID + AdjustAndroid.Start(adjustConfig); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.Start(adjustConfig); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void trackEvent(AdjustEvent adjustEvent) + { + if (IsEditor()) + { + return; + } + + if (adjustEvent == null) + { + Debug.Log("[Adjust]: Missing event to track."); + return; + } +#if UNITY_IOS + AdjustiOS.TrackEvent(adjustEvent); +#elif UNITY_ANDROID + AdjustAndroid.TrackEvent(adjustEvent); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.TrackEvent(adjustEvent); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void setEnabled(bool enabled) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.SetEnabled(enabled); +#elif UNITY_ANDROID + AdjustAndroid.SetEnabled(enabled); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.SetEnabled(enabled); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static bool isEnabled() + { + if (IsEditor()) + { + return false; + } + +#if UNITY_IOS + return AdjustiOS.IsEnabled(); +#elif UNITY_ANDROID + return AdjustAndroid.IsEnabled(); +#elif (UNITY_WSA || UNITY_WP8) + return AdjustWindows.IsEnabled(); +#else + Debug.Log(errorMsgPlatform); + return false; +#endif + } + + public static void setOfflineMode(bool enabled) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.SetOfflineMode(enabled); +#elif UNITY_ANDROID + AdjustAndroid.SetOfflineMode(enabled); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.SetOfflineMode(enabled); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void setDeviceToken(string deviceToken) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.SetDeviceToken(deviceToken); +#elif UNITY_ANDROID + AdjustAndroid.SetDeviceToken(deviceToken); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.SetDeviceToken(deviceToken); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void gdprForgetMe() + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.GdprForgetMe(); +#elif UNITY_ANDROID + AdjustAndroid.GdprForgetMe(); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.GdprForgetMe(); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void disableThirdPartySharing() + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.DisableThirdPartySharing(); +#elif UNITY_ANDROID + AdjustAndroid.DisableThirdPartySharing(); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Disable third party sharing is only supported for Android and iOS platforms."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void appWillOpenUrl(string url) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.AppWillOpenUrl(url); +#elif UNITY_ANDROID + AdjustAndroid.AppWillOpenUrl(url); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.AppWillOpenUrl(url); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void sendFirstPackages() + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.SendFirstPackages(); +#elif UNITY_ANDROID + AdjustAndroid.SendFirstPackages(); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.SendFirstPackages(); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void addSessionPartnerParameter(string key, string value) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.AddSessionPartnerParameter(key, value); +#elif UNITY_ANDROID + AdjustAndroid.AddSessionPartnerParameter(key, value); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.AddSessionPartnerParameter(key, value); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void addSessionCallbackParameter(string key, string value) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.AddSessionCallbackParameter(key, value); +#elif UNITY_ANDROID + AdjustAndroid.AddSessionCallbackParameter(key, value); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.AddSessionCallbackParameter(key, value); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void removeSessionPartnerParameter(string key) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.RemoveSessionPartnerParameter(key); +#elif UNITY_ANDROID + AdjustAndroid.RemoveSessionPartnerParameter(key); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.RemoveSessionPartnerParameter(key); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void removeSessionCallbackParameter(string key) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.RemoveSessionCallbackParameter(key); +#elif UNITY_ANDROID + AdjustAndroid.RemoveSessionCallbackParameter(key); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.RemoveSessionCallbackParameter(key); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void resetSessionPartnerParameters() + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.ResetSessionPartnerParameters(); +#elif UNITY_ANDROID + AdjustAndroid.ResetSessionPartnerParameters(); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.ResetSessionPartnerParameters(); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void resetSessionCallbackParameters() + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.ResetSessionCallbackParameters(); +#elif UNITY_ANDROID + AdjustAndroid.ResetSessionCallbackParameters(); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.ResetSessionCallbackParameters(); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void trackAdRevenue(string source, string payload) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.TrackAdRevenue(source, payload); +#elif UNITY_ANDROID + AdjustAndroid.TrackAdRevenue(source, payload); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Ad revenue tracking is only supported for Android and iOS platforms."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void trackAdRevenue(AdjustAdRevenue adRevenue) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.TrackAdRevenue(adRevenue); +#elif UNITY_ANDROID + AdjustAndroid.TrackAdRevenue(adRevenue); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Ad revenue tracking is only supported for Android and iOS platforms."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void trackAppStoreSubscription(AdjustAppStoreSubscription subscription) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.TrackAppStoreSubscription(subscription); +#elif UNITY_ANDROID + Debug.Log("[Adjust]: App Store subscription tracking is only supported for iOS platform."); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: App Store subscription tracking is only supported for iOS platform."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void trackPlayStoreSubscription(AdjustPlayStoreSubscription subscription) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + Debug.Log("[Adjust]: Play Store subscription tracking is only supported for Android platform."); +#elif UNITY_ANDROID + AdjustAndroid.TrackPlayStoreSubscription(subscription); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Play Store subscription tracking is only supported for Android platform."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void trackThirdPartySharing(AdjustThirdPartySharing thirdPartySharing) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.TrackThirdPartySharing(thirdPartySharing); +#elif UNITY_ANDROID + AdjustAndroid.TrackThirdPartySharing(thirdPartySharing); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Third party sharing tracking is only supported for iOS and Android platforms."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void trackMeasurementConsent(bool measurementConsent) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.TrackMeasurementConsent(measurementConsent); +#elif UNITY_ANDROID + AdjustAndroid.TrackMeasurementConsent(measurementConsent); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Measurement consent tracking is only supported for iOS and Android platforms."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void requestTrackingAuthorizationWithCompletionHandler(Action statusCallback, string sceneName = "Adjust") + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + if (Adjust.authorizationStatusDelegates == null) + { + Adjust.authorizationStatusDelegates = new List>(); + } + Adjust.authorizationStatusDelegates.Add(statusCallback); + AdjustiOS.RequestTrackingAuthorizationWithCompletionHandler(sceneName); +#elif UNITY_ANDROID + Debug.Log("[Adjust]: Requesting tracking authorization is only supported for iOS platform."); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Requesting tracking authorization is only supported for iOS platform."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void updateConversionValue(int conversionValue) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.UpdateConversionValue(conversionValue); +#elif UNITY_ANDROID + Debug.Log("[Adjust]: Updating SKAdNetwork conversion value is only supported for iOS platform."); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Updating SKAdNetwork conversion value is only supported for iOS platform."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void updateConversionValue(int conversionValue, Action completionCallback, string sceneName = "Adjust") + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + Adjust.skadUpdateConversionValueDelegate = completionCallback; + AdjustiOS.UpdateConversionValue(conversionValue, sceneName); +#elif UNITY_ANDROID + Debug.Log("[Adjust]: Updating SKAdNetwork conversion value is only supported for iOS platform."); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Updating SKAdNetwork conversion value is only supported for iOS platform."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void updateConversionValue(int conversionValue, string coarseValue, bool lockWindow, Action completionCallback, string sceneName = "Adjust") + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + Adjust.skad4UpdateConversionValueDelegate = completionCallback; + AdjustiOS.UpdateConversionValue(conversionValue, coarseValue, lockWindow, sceneName); +#elif UNITY_ANDROID + Debug.Log("[Adjust]: Updating SKAdNetwork conversion value is only supported for iOS platform."); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Updating SKAdNetwork conversion value is only supported for iOS platform."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void checkForNewAttStatus() + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.CheckForNewAttStatus(); +#elif UNITY_ANDROID + Debug.Log("[Adjust]: Checking for new ATT status is only supported for iOS platform."); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Checking for new ATT status is only supported for iOS platform."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static int getAppTrackingAuthorizationStatus() + { + if (IsEditor()) + { + return -1; + } + +#if UNITY_IOS + return AdjustiOS.GetAppTrackingAuthorizationStatus(); +#elif UNITY_ANDROID + Debug.Log("[Adjust]: Error! App tracking authorization status is only supported for iOS platform."); + return -1; +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Error! App tracking authorization status is only supported for iOS platform."); + return -1; +#else + Debug.Log(errorMsgPlatform); + return -1; +#endif + } + + public static string getAdid() + { + if (IsEditor()) + { + return string.Empty; + } + +#if UNITY_IOS + return AdjustiOS.GetAdid(); +#elif UNITY_ANDROID + return AdjustAndroid.GetAdid(); +#elif (UNITY_WSA || UNITY_WP8) + return AdjustWindows.GetAdid(); +#else + Debug.Log(errorMsgPlatform); + return string.Empty; +#endif + } + + public static AdjustAttribution getAttribution() + { + if (IsEditor()) + { + return null; + } + +#if UNITY_IOS + return AdjustiOS.GetAttribution(); +#elif UNITY_ANDROID + return AdjustAndroid.GetAttribution(); +#elif (UNITY_WSA || UNITY_WP8) + return AdjustWindows.GetAttribution(); +#else + Debug.Log(errorMsgPlatform); + return null; +#endif + } + + public static string getWinAdid() + { + if (IsEditor()) + { + return string.Empty; + } + +#if UNITY_IOS + Debug.Log("[Adjust]: Error! Windows Advertising ID is not available on iOS platform."); + return string.Empty; +#elif UNITY_ANDROID + Debug.Log("[Adjust]: Error! Windows Advertising ID is not available on Android platform."); + return string.Empty; +#elif (UNITY_WSA || UNITY_WP8) + return AdjustWindows.GetWinAdId(); +#else + Debug.Log(errorMsgPlatform); + return string.Empty; +#endif + } + + public static string getIdfa() + { + if (IsEditor()) + { + return string.Empty; + } + +#if UNITY_IOS + return AdjustiOS.GetIdfa(); +#elif UNITY_ANDROID + Debug.Log("[Adjust]: Error! IDFA is not available on Android platform."); + return string.Empty; +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Error! IDFA is not available on Windows platform."); + return string.Empty; +#else + Debug.Log(errorMsgPlatform); + return string.Empty; +#endif + } + + public static string getIdfv() + { + if (IsEditor()) + { + return string.Empty; + } + +#if UNITY_IOS + return AdjustiOS.GetIdfv(); +#elif UNITY_ANDROID + Debug.Log("[Adjust]: Error! IDFV is not available on Android platform."); + return string.Empty; +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Error! IDFV is not available on Windows platform."); + return string.Empty; +#else + Debug.Log(errorMsgPlatform); + return string.Empty; +#endif + } + + public static string getSdkVersion() + { + if (IsEditor()) + { + return string.Empty; + } + +#if UNITY_IOS + return AdjustiOS.GetSdkVersion(); +#elif UNITY_ANDROID + return AdjustAndroid.GetSdkVersion(); +#elif (UNITY_WSA || UNITY_WP8) + return AdjustWindows.GetSdkVersion(); +#else + Debug.Log(errorMsgPlatform); + return string.Empty; +#endif + } + + [Obsolete("This method is intended for testing purposes only. Do not use it.")] + public static void setReferrer(string referrer) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + Debug.Log("[Adjust]: Install referrer is not available on iOS platform."); +#elif UNITY_ANDROID + AdjustAndroid.SetReferrer(referrer); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Error! Install referrer is not available on Windows platform."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void getGoogleAdId(Action onDeviceIdsRead) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + Debug.Log("[Adjust]: Google Play Advertising ID is not available on iOS platform."); + onDeviceIdsRead(string.Empty); +#elif UNITY_ANDROID + AdjustAndroid.GetGoogleAdId(onDeviceIdsRead); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Google Play Advertising ID is not available on Windows platform."); + onDeviceIdsRead(string.Empty); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static string getAmazonAdId() + { + if (IsEditor()) + { + return string.Empty; + } + +#if UNITY_IOS + Debug.Log("[Adjust]: Amazon Advertising ID is not available on iOS platform."); + return string.Empty; +#elif UNITY_ANDROID + return AdjustAndroid.GetAmazonAdId(); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Amazon Advertising ID not available on Windows platform."); + return string.Empty; +#else + Debug.Log(errorMsgPlatform); + return string.Empty; +#endif + } + + public static string getLastDeeplink() + { + if (IsEditor()) + { + return string.Empty; + } + +#if UNITY_IOS + return AdjustiOS.GetLastDeeplink(); +#elif UNITY_ANDROID + Debug.Log("[Adjust]: Error! Last deeplink getter is not available on Android platform."); + return string.Empty; +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Error! Last deeplink getter is not available on Windows platform."); + return string.Empty; +#else + Debug.Log(errorMsgPlatform); + return string.Empty; +#endif + } + + public static void verifyAppStorePurchase( + AdjustAppStorePurchase purchase, + Action verificationInfoDelegate, + string sceneName = "Adjust") + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + if (purchase == null || + purchase.transactionId == null || + purchase.productId == null || + purchase.receipt == null) + { + Debug.Log("[Adjust]: Invalid App Store purchase parameters."); + return; + } + + Adjust.verificationInfoDelegate = verificationInfoDelegate; + AdjustiOS.VerifyAppStorePurchase(purchase, sceneName); +#elif UNITY_ANDROID + Debug.Log("[Adjust]: App Store purchase verification is only supported for iOS platform."); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: App Store purchase verification is only supported for iOS platform."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + + public static void verifyPlayStorePurchase( + AdjustPlayStorePurchase purchase, + Action verificationInfoDelegate) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + Debug.Log("[Adjust]: Play Store purchase verification is only supported for Android platform."); +#elif UNITY_ANDROID + if (purchase == null || + purchase.productId == null || + purchase.purchaseToken == null) + { + Debug.Log("[Adjust]: Invalid Play Store purchase parameters."); + return; + } + + AdjustAndroid.VerifyPlayStorePurchase(purchase, verificationInfoDelegate); +#elif (UNITY_WSA || UNITY_WP8) + Debug.Log("[Adjust]: Play Store purchase verification is only supported for Android platform."); +#else + Debug.Log(errorMsgPlatform); +#endif + } + +#if UNITY_IOS + public void GetNativeAttribution(string attributionData) + { + if (IsEditor()) + { + return; + } + + if (Adjust.attributionChangedDelegate == null) + { + Debug.Log("[Adjust]: Attribution changed delegate was not set."); + return; + } + + var attribution = new AdjustAttribution(attributionData); + Adjust.attributionChangedDelegate(attribution); + } + + public void GetNativeEventSuccess(string eventSuccessData) + { + if (IsEditor()) + { + return; + } + + if (Adjust.eventSuccessDelegate == null) + { + Debug.Log("[Adjust]: Event success delegate was not set."); + return; + } + + var eventSuccess = new AdjustEventSuccess(eventSuccessData); + Adjust.eventSuccessDelegate(eventSuccess); + } + + public void GetNativeEventFailure(string eventFailureData) + { + if (IsEditor()) + { + return; + } + + if (Adjust.eventFailureDelegate == null) + { + Debug.Log("[Adjust]: Event failure delegate was not set."); + return; + } + + var eventFailure = new AdjustEventFailure(eventFailureData); + Adjust.eventFailureDelegate(eventFailure); + } + + public void GetNativeSessionSuccess(string sessionSuccessData) + { + if (IsEditor()) + { + return; + } + + if (Adjust.sessionSuccessDelegate == null) + { + Debug.Log("[Adjust]: Session success delegate was not set."); + return; + } + + var sessionSuccess = new AdjustSessionSuccess(sessionSuccessData); + Adjust.sessionSuccessDelegate(sessionSuccess); + } + + public void GetNativeSessionFailure(string sessionFailureData) + { + if (IsEditor()) + { + return; + } + + if (Adjust.sessionFailureDelegate == null) + { + Debug.Log("[Adjust]: Session failure delegate was not set."); + return; + } + + var sessionFailure = new AdjustSessionFailure(sessionFailureData); + Adjust.sessionFailureDelegate(sessionFailure); + } + + public void GetNativeDeferredDeeplink(string deeplinkURL) + { + if (IsEditor()) + { + return; + } + + if (Adjust.deferredDeeplinkDelegate == null) + { + Debug.Log("[Adjust]: Deferred deeplink delegate was not set."); + return; + } + + Adjust.deferredDeeplinkDelegate(deeplinkURL); + } + + public void GetNativeConversionValueUpdated(string conversionValue) + { + if (IsEditor()) + { + return; + } + + if (Adjust.conversionValueUpdatedDelegate == null) + { + Debug.Log("[Adjust]: Conversion value updated delegate was not set."); + return; + } + + int cv = -1; + if (Int32.TryParse(conversionValue, out cv)) + { + if (cv != -1) + { + Adjust.conversionValueUpdatedDelegate(cv); + } + } + } + + public void GetNativeSkad4ConversionValueUpdated(string conversionValueUpdate) + { + if (IsEditor()) + { + return; + } + + if (Adjust.skad4ConversionValueUpdatedDelegate == null) + { + Debug.Log("[Adjust]: SKAD4 Conversion value updated delegate was not set."); + return; + } + + int conversionValue = AdjustUtils.GetSkad4ConversionValue(conversionValueUpdate); + string coarseValue = AdjustUtils.GetSkad4CoarseValue(conversionValueUpdate); + bool lockWindow = AdjustUtils.GetSkad4LockWindow(conversionValueUpdate); + + Adjust.skad4ConversionValueUpdatedDelegate(conversionValue, coarseValue, lockWindow); + } + + public void GetNativeSkadCompletionDelegate(string message) + { + if (IsEditor()) + { + return; + } + + if (Adjust.skadUpdateConversionValueDelegate == null) + { + Debug.Log("[Adjust]: SKAD completion delegate was not set."); + return; + } + + if (message != null) + { + Adjust.skadUpdateConversionValueDelegate(message); + } + } + + public void GetNativeSkad4CompletionDelegate(string message) + { + if (IsEditor()) + { + return; + } + + if (Adjust.skad4UpdateConversionValueDelegate == null) + { + Debug.Log("[Adjust]: SKAD4 completion delegate was not set."); + return; + } + + if (message != null) + { + Adjust.skad4UpdateConversionValueDelegate(message); + } + } + + public void GetAuthorizationStatus(string authorizationStatus) + { + if (IsEditor()) + { + return; + } + + if (Adjust.authorizationStatusDelegates == null) + { + Debug.Log("[Adjust]: Authorization status delegates were not set."); + return; + } + + foreach (Action callback in Adjust.authorizationStatusDelegates) + { + callback(Int16.Parse(authorizationStatus)); + } + Adjust.authorizationStatusDelegates.Clear(); + } + + public void GetNativeVerificationInfo(string verificationInfoData) + { + if (IsEditor()) + { + return; + } + + if (Adjust.verificationInfoDelegate == null) + { + Debug.Log("[Adjust]: Purchase verification info delegate was not set."); + return; + } + + var verificationInfo = new AdjustPurchaseVerificationInfo(verificationInfoData); + Adjust.verificationInfoDelegate(verificationInfo); + } +#endif + + private static bool IsEditor() + { +#if UNITY_EDITOR + Debug.Log(errorMsgEditor); + return true; +#else + return false; +#endif + } + + public static void SetTestOptions(Dictionary testOptions) + { + if (IsEditor()) + { + return; + } + +#if UNITY_IOS + AdjustiOS.SetTestOptions(testOptions); +#elif UNITY_ANDROID + AdjustAndroid.SetTestOptions(testOptions); +#elif (UNITY_WSA || UNITY_WP8) + AdjustWindows.SetTestOptions(testOptions); +#else + Debug.Log("[Adjust]: Cannot run integration tests. None of the supported platforms selected."); +#endif + } + } +} diff --git a/Adjust/Unity/Adjust.cs.meta b/Adjust/Unity/Adjust.cs.meta new file mode 100644 index 0000000..08f7cad --- /dev/null +++ b/Adjust/Unity/Adjust.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 525ece82a472e4dea837e1ef938fd15d +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Adjust/Unity/AdjustAdRevenue.cs b/Adjust/Unity/AdjustAdRevenue.cs new file mode 100644 index 0000000..95d3e2b --- /dev/null +++ b/Adjust/Unity/AdjustAdRevenue.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustAdRevenue + { + internal string source; + internal double? revenue; + internal string currency; + internal int? adImpressionsCount; + internal string adRevenueNetwork; + internal string adRevenueUnit; + internal string adRevenuePlacement; + internal List partnerList; + internal List callbackList; + + public AdjustAdRevenue(string source) + { + this.source = source; + } + + public void setRevenue(double amount, string currency) + { + this.revenue = amount; + this.currency = currency; + } + + public void setAdImpressionsCount(int adImpressionsCount) + { + this.adImpressionsCount = adImpressionsCount; + } + + public void setAdRevenueNetwork(string adRevenueNetwork) + { + this.adRevenueNetwork = adRevenueNetwork; + } + + public void setAdRevenueUnit(string adRevenueUnit) + { + this.adRevenueUnit = adRevenueUnit; + } + + public void setAdRevenuePlacement(string adRevenuePlacement) + { + this.adRevenuePlacement = adRevenuePlacement; + } + + public void addCallbackParameter(string key, string value) + { + if (callbackList == null) + { + callbackList = new List(); + } + callbackList.Add(key); + callbackList.Add(value); + } + + public void addPartnerParameter(string key, string value) + { + if (partnerList == null) + { + partnerList = new List(); + } + partnerList.Add(key); + partnerList.Add(value); + } + } +} diff --git a/Adjust/Unity/AdjustAdRevenue.cs.meta b/Adjust/Unity/AdjustAdRevenue.cs.meta new file mode 100644 index 0000000..bb3834f --- /dev/null +++ b/Adjust/Unity/AdjustAdRevenue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 776a9d4b715bc44c68724248a5a75cb9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustAppStorePurchase.cs b/Adjust/Unity/AdjustAppStorePurchase.cs new file mode 100644 index 0000000..8add7af --- /dev/null +++ b/Adjust/Unity/AdjustAppStorePurchase.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustAppStorePurchase + { + internal string transactionId; + internal string productId; + internal string receipt; + + public AdjustAppStorePurchase(string transactionId, string productId, string receipt) + { + this.transactionId = transactionId; + this.productId = productId; + this.receipt = receipt; + } + } +} diff --git a/Adjust/Unity/AdjustAppStorePurchase.cs.meta b/Adjust/Unity/AdjustAppStorePurchase.cs.meta new file mode 100644 index 0000000..dbd826d --- /dev/null +++ b/Adjust/Unity/AdjustAppStorePurchase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 828a981c8c96741afa5d16ccb679e5af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustAppStoreSubscription.cs b/Adjust/Unity/AdjustAppStoreSubscription.cs new file mode 100644 index 0000000..73ec83a --- /dev/null +++ b/Adjust/Unity/AdjustAppStoreSubscription.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustAppStoreSubscription + { + internal string price; + internal string currency; + internal string transactionId; + internal string receipt; + internal string billingStore; + internal string transactionDate; + internal string salesRegion; + internal List partnerList; + internal List callbackList; + + public AdjustAppStoreSubscription(string price, string currency, string transactionId, string receipt) + { + this.price = price; + this.currency = currency; + this.transactionId = transactionId; + this.receipt = receipt; + } + + public void setTransactionDate(string transactionDate) + { + this.transactionDate = transactionDate; + } + + public void setSalesRegion(string salesRegion) + { + this.salesRegion = salesRegion; + } + + public void addCallbackParameter(string key, string value) + { + if (callbackList == null) + { + callbackList = new List(); + } + callbackList.Add(key); + callbackList.Add(value); + } + + public void addPartnerParameter(string key, string value) + { + if (partnerList == null) + { + partnerList = new List(); + } + partnerList.Add(key); + partnerList.Add(value); + } + } +} diff --git a/Adjust/Unity/AdjustAppStoreSubscription.cs.meta b/Adjust/Unity/AdjustAppStoreSubscription.cs.meta new file mode 100644 index 0000000..f5af330 --- /dev/null +++ b/Adjust/Unity/AdjustAppStoreSubscription.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e2d69221b1124370a4c016edce5a95a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustAttribution.cs b/Adjust/Unity/AdjustAttribution.cs new file mode 100644 index 0000000..3373887 --- /dev/null +++ b/Adjust/Unity/AdjustAttribution.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustAttribution + { + public string adid { get; set; } + public string network { get; set; } + public string adgroup { get; set; } + public string campaign { get; set; } + public string creative { get; set; } + public string clickLabel { get; set; } + public string trackerName { get; set; } + public string trackerToken { get; set; } + public string costType { get; set; } + public double? costAmount { get; set; } + public string costCurrency { get; set; } + // Android only + public string fbInstallReferrer { get; set; } + + public AdjustAttribution() {} + + public AdjustAttribution(string jsonString) + { + var jsonNode = JSON.Parse(jsonString); + if (jsonNode == null) + { + return; + } + + trackerName = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyTrackerName); + trackerToken = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyTrackerToken); + network = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyNetwork); + campaign = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyCampaign); + adgroup = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyAdgroup); + creative = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyCreative); + clickLabel = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyClickLabel); + adid = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyAdid); + costType = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyCostType); + try + { + costAmount = double.Parse(AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyCostAmount), + System.Globalization.CultureInfo.InvariantCulture); + } + catch (Exception) + { + // attribution response doesn't contain cost amount attached + // value will default to null + } + costCurrency = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyCostCurrency); + fbInstallReferrer = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyFbInstallReferrer); + } + + public AdjustAttribution(Dictionary dicAttributionData) + { + if (dicAttributionData == null) + { + return; + } + + trackerName = AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyTrackerName); + trackerToken = AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyTrackerToken); + network = AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyNetwork); + campaign = AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyCampaign); + adgroup = AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyAdgroup); + creative = AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyCreative); + clickLabel = AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyClickLabel); + adid = AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyAdid); + costType = AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyCostType); + try + { + costAmount = double.Parse(AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyCostAmount), + System.Globalization.CultureInfo.InvariantCulture); + } + catch (Exception) + { + // attribution response doesn't contain cost amount attached + // value will default to null + } + costCurrency = AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyCostCurrency); + fbInstallReferrer = AdjustUtils.TryGetValue(dicAttributionData, AdjustUtils.KeyFbInstallReferrer); + } + } +} diff --git a/Adjust/Unity/AdjustAttribution.cs.meta b/Adjust/Unity/AdjustAttribution.cs.meta new file mode 100644 index 0000000..37c4bbd --- /dev/null +++ b/Adjust/Unity/AdjustAttribution.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc46748ad0e664f6d839a4f1a23d9f47 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Adjust/Unity/AdjustConfig.cs b/Adjust/Unity/AdjustConfig.cs new file mode 100644 index 0000000..e3629d8 --- /dev/null +++ b/Adjust/Unity/AdjustConfig.cs @@ -0,0 +1,328 @@ +using System; + +namespace com.adjust.sdk +{ + public class AdjustConfig + { + public const string AdjustUrlStrategyChina = "china"; + public const string AdjustUrlStrategyIndia = "india"; + public const string AdjustUrlStrategyCn = "cn"; + public const string AdjustUrlStrategyCnOnly = "cn-only"; + + public const string AdjustDataResidencyEU = "data-residency-eu"; + public const string AdjustDataResidencyTR = "data-residency-tr"; + public const string AdjustDataResidencyUS = "data-residency-us"; + + public const string AdjustAdRevenueSourceAppLovinMAX = "applovin_max_sdk"; + public const string AdjustAdRevenueSourceMopub = "mopub"; + public const string AdjustAdRevenueSourceAdMob = "admob_sdk"; + public const string AdjustAdRevenueSourceIronSource = "ironsource_sdk"; + public const string AdjustAdRevenueSourceAdmost = "admost_sdk"; + public const string AdjustAdRevenueSourceUnity = "unity_sdk"; + public const string AdjustAdRevenueSourceHeliumChartboost = "helium_chartboost_sdk"; + public const string AdjustAdRevenueSourcePublisher = "publisher_sdk"; + public const string AdjustAdRevenueSourceTopOn = "topon_sdk"; + public const string AdjustAdRevenueSourceAdx = "adx_sdk"; + + internal string appToken; + internal string sceneName; + internal string userAgent; + internal string defaultTracker; + internal string externalDeviceId; + internal string urlStrategy; + internal long? info1; + internal long? info2; + internal long? info3; + internal long? info4; + internal long? secretId; + internal double? delayStart; + internal bool? isDeviceKnown; + internal bool? sendInBackground; + internal bool? eventBufferingEnabled; + internal bool? coppaCompliantEnabled; + internal bool? playStoreKidsAppEnabled; + internal bool? allowSuppressLogLevel; + internal bool? needsCost; + internal bool launchDeferredDeeplink; + internal AdjustLogLevel? logLevel; + internal AdjustEnvironment environment; + internal Action deferredDeeplinkDelegate; + internal Action eventSuccessDelegate; + internal Action eventFailureDelegate; + internal Action sessionSuccessDelegate; + internal Action sessionFailureDelegate; + internal Action attributionChangedDelegate; + internal Action conversionValueUpdatedDelegate; + internal Action skad4ConversionValueUpdatedDelegate; + + // Android specific members + internal string processName; + internal bool? readImei; + internal bool? preinstallTrackingEnabled; + internal string preinstallFilePath; + internal bool? finalAndroidAttributionEnabled; + internal string fbAppId; + internal bool? readDeviceInfoOnceEnabled; + // iOS specific members + internal bool? allowAdServicesInfoReading; + internal bool? allowIdfaReading; + internal bool? skAdNetworkHandling; + internal bool? linkMeEnabled; + internal int? attConsentWaitingInterval; + // Windows specific members + internal Action logDelegate; + + public AdjustConfig(string appToken, AdjustEnvironment environment) + { + this.sceneName = ""; + this.processName = ""; + this.appToken = appToken; + this.environment = environment; + } + + public AdjustConfig(string appToken, AdjustEnvironment environment, bool allowSuppressLogLevel) + { + this.sceneName = ""; + this.processName = ""; + this.appToken = appToken; + this.environment = environment; + this.allowSuppressLogLevel = allowSuppressLogLevel; + } + + public void setLogLevel(AdjustLogLevel logLevel) + { + this.logLevel = logLevel; + } + + public void setDefaultTracker(string defaultTracker) + { + this.defaultTracker = defaultTracker; + } + + public void setExternalDeviceId(string externalDeviceId) + { + this.externalDeviceId = externalDeviceId; + } + + public void setLaunchDeferredDeeplink(bool launchDeferredDeeplink) + { + this.launchDeferredDeeplink = launchDeferredDeeplink; + } + + public void setSendInBackground(bool sendInBackground) + { + this.sendInBackground = sendInBackground; + } + + public void setEventBufferingEnabled(bool eventBufferingEnabled) + { + this.eventBufferingEnabled = eventBufferingEnabled; + } + + public void setCoppaCompliantEnabled(bool coppaCompliantEnabled) + { + this.coppaCompliantEnabled = coppaCompliantEnabled; + } + + public void setNeedsCost(bool needsCost) + { + this.needsCost = needsCost; + } + + public void setDelayStart(double delayStart) + { + this.delayStart = delayStart; + } + + public void setUserAgent(string userAgent) + { + this.userAgent = userAgent; + } + + public void setIsDeviceKnown(bool isDeviceKnown) + { + this.isDeviceKnown = isDeviceKnown; + } + + public void setUrlStrategy(String urlStrategy) + { + this.urlStrategy = urlStrategy; + } + + public void setAppSecret(long secretId, long info1, long info2, long info3, long info4) + { + this.secretId = secretId; + this.info1 = info1; + this.info2 = info2; + this.info3 = info3; + this.info4 = info4; + } + + public void setDeferredDeeplinkDelegate(Action deferredDeeplinkDelegate, string sceneName = "Adjust") + { + this.deferredDeeplinkDelegate = deferredDeeplinkDelegate; + this.sceneName = sceneName; + } + + public Action getDeferredDeeplinkDelegate() + { + return this.deferredDeeplinkDelegate; + } + + public void setAttributionChangedDelegate(Action attributionChangedDelegate, string sceneName = "Adjust") + { + this.attributionChangedDelegate = attributionChangedDelegate; + this.sceneName = sceneName; + } + + public Action getAttributionChangedDelegate() + { + return this.attributionChangedDelegate; + } + + public void setEventSuccessDelegate(Action eventSuccessDelegate, string sceneName = "Adjust") + { + this.eventSuccessDelegate = eventSuccessDelegate; + this.sceneName = sceneName; + } + + public Action getEventSuccessDelegate() + { + return this.eventSuccessDelegate; + } + + public void setEventFailureDelegate(Action eventFailureDelegate, string sceneName = "Adjust") + { + this.eventFailureDelegate = eventFailureDelegate; + this.sceneName = sceneName; + } + + public Action getEventFailureDelegate() + { + return this.eventFailureDelegate; + } + + public void setSessionSuccessDelegate(Action sessionSuccessDelegate, string sceneName = "Adjust") + { + this.sessionSuccessDelegate = sessionSuccessDelegate; + this.sceneName = sceneName; + } + + public Action getSessionSuccessDelegate() + { + return this.sessionSuccessDelegate; + } + + public void setSessionFailureDelegate(Action sessionFailureDelegate, string sceneName = "Adjust") + { + this.sessionFailureDelegate = sessionFailureDelegate; + this.sceneName = sceneName; + } + + public Action getSessionFailureDelegate() + { + return this.sessionFailureDelegate; + } + + // iOS specific methods. + [Obsolete("This is an obsolete method. Apple Search Ads attribution with usage of iAd.framework has been sunset by Apple as of February 7th 2023.")] + public void setAllowiAdInfoReading(bool allowiAdInfoReading) + { + } + + public void setAllowAdServicesInfoReading(bool allowAdServicesInfoReading) + { + this.allowAdServicesInfoReading = allowAdServicesInfoReading; + } + + public void setAllowIdfaReading(bool allowIdfaReading) + { + this.allowIdfaReading = allowIdfaReading; + } + + public void deactivateSKAdNetworkHandling() + { + this.skAdNetworkHandling = true; + } + + public void setLinkMeEnabled(bool linkMeEnabled) + { + this.linkMeEnabled = linkMeEnabled; + } + + public void setConversionValueUpdatedDelegate(Action conversionValueUpdatedDelegate, string sceneName = "Adjust") + { + this.conversionValueUpdatedDelegate = conversionValueUpdatedDelegate; + this.sceneName = sceneName; + } + + public Action getConversionValueUpdatedDelegate() + { + return this.conversionValueUpdatedDelegate; + } + + public void setSkad4ConversionValueUpdatedDelegate(Action skad4ConversionValueUpdatedDelegate, string sceneName = "Adjust") + { + this.skad4ConversionValueUpdatedDelegate = skad4ConversionValueUpdatedDelegate; + this.sceneName = sceneName; + } + + public Action getSkad4ConversionValueUpdatedDelegate() + { + return this.skad4ConversionValueUpdatedDelegate; + } + + public void setAttConsentWaitingInterval(int numberOfSeconds) + { + this.attConsentWaitingInterval = numberOfSeconds; + } + + // Android specific methods. + public void setProcessName(string processName) + { + this.processName = processName; + } + + [Obsolete("This is an obsolete method.")] + public void setReadMobileEquipmentIdentity(bool readMobileEquipmentIdentity) + { + // this.readImei = readMobileEquipmentIdentity; + } + + public void setPreinstallTrackingEnabled(bool preinstallTrackingEnabled) + { + this.preinstallTrackingEnabled = preinstallTrackingEnabled; + } + + public void setPreinstallFilePath(string preinstallFilePath) + { + this.preinstallFilePath = preinstallFilePath; + } + + public void setPlayStoreKidsAppEnabled(bool playStoreKidsAppEnabled) + { + this.playStoreKidsAppEnabled = playStoreKidsAppEnabled; + } + + public void setFinalAndroidAttributionEnabled(bool finalAndroidAttributionEnabled) + { + this.finalAndroidAttributionEnabled = finalAndroidAttributionEnabled; + } + + public void setFbAppId(string fbAppId) + { + this.fbAppId = fbAppId; + } + + public void setReadDeviceInfoOnceEnabled(bool readDeviceInfoOnceEnabled) + { + this.readDeviceInfoOnceEnabled = readDeviceInfoOnceEnabled; + } + + // Windows specific methods. + public void setLogDelegate(Action logDelegate) + { + this.logDelegate = logDelegate; + } + } +} diff --git a/Adjust/Unity/AdjustConfig.cs.meta b/Adjust/Unity/AdjustConfig.cs.meta new file mode 100644 index 0000000..d98ac07 --- /dev/null +++ b/Adjust/Unity/AdjustConfig.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 02d4cad14fc094b17afde3b685897e5e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Adjust/Unity/AdjustEnvironment.cs b/Adjust/Unity/AdjustEnvironment.cs new file mode 100644 index 0000000..65f3555 --- /dev/null +++ b/Adjust/Unity/AdjustEnvironment.cs @@ -0,0 +1,25 @@ +namespace com.adjust.sdk +{ + [System.Serializable] + public enum AdjustEnvironment + { + Sandbox, + Production + } + + public static class AdjustEnvironmentExtension + { + public static string ToLowercaseString(this AdjustEnvironment adjustEnvironment) + { + switch (adjustEnvironment) + { + case AdjustEnvironment.Sandbox: + return "sandbox"; + case AdjustEnvironment.Production: + return "production"; + default: + return "unknown"; + } + } + } +} diff --git a/Adjust/Unity/AdjustEnvironment.cs.meta b/Adjust/Unity/AdjustEnvironment.cs.meta new file mode 100644 index 0000000..fb47242 --- /dev/null +++ b/Adjust/Unity/AdjustEnvironment.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 633f6fa279b2244fdb999db0441f9aac +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Adjust/Unity/AdjustEvent.cs b/Adjust/Unity/AdjustEvent.cs new file mode 100644 index 0000000..7382beb --- /dev/null +++ b/Adjust/Unity/AdjustEvent.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustEvent + { + internal string currency; + internal string eventToken; + internal string callbackId; + internal string transactionId; + internal string productId; + internal double? revenue; + internal List partnerList; + internal List callbackList; + // iOS specific members + internal string receipt; + internal bool isReceiptSet; + // Android specific members + internal string purchaseToken; + + public AdjustEvent(string eventToken) + { + this.eventToken = eventToken; + this.isReceiptSet = false; + } + + public void setRevenue(double amount, string currency) + { + this.revenue = amount; + this.currency = currency; + } + + public void addCallbackParameter(string key, string value) + { + if (callbackList == null) + { + callbackList = new List(); + } + callbackList.Add(key); + callbackList.Add(value); + } + + public void addPartnerParameter(string key, string value) + { + if (partnerList == null) + { + partnerList = new List(); + } + partnerList.Add(key); + partnerList.Add(value); + } + + public void setCallbackId(string callbackId) + { + this.callbackId = callbackId; + } + + // iOS / Android mixed + public void setTransactionId(string transactionId) + { + this.transactionId = transactionId; + } + + public void setProductId(string productId) + { + this.productId = productId; + } + + // iOS specific methods + [Obsolete("This is an obsolete method. Please use separate setter methods for purchase verification parameters.")] + public void setReceipt(string receipt, string transactionId) + { + // this.receipt = receipt; + // this.transactionId = transactionId; + // this.isReceiptSet = true; + } + + public void setReceipt(string receipt) + { + this.receipt = receipt; + } + + // Android specific methods + public void setPurchaseToken(string purchaseToken) + { + this.purchaseToken = purchaseToken; + } + } +} diff --git a/Adjust/Unity/AdjustEvent.cs.meta b/Adjust/Unity/AdjustEvent.cs.meta new file mode 100644 index 0000000..41ea634 --- /dev/null +++ b/Adjust/Unity/AdjustEvent.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cd89f7713977f497a862f1a1b6f60933 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Adjust/Unity/AdjustEventFailure.cs b/Adjust/Unity/AdjustEventFailure.cs new file mode 100644 index 0000000..71d63af --- /dev/null +++ b/Adjust/Unity/AdjustEventFailure.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustEventFailure + { + public string Adid { get; set; } + public string Message { get; set; } + public string Timestamp { get; set; } + public string EventToken { get; set; } + public string CallbackId { get; set; } + public bool WillRetry { get; set; } + public Dictionary JsonResponse { get; set; } + + public AdjustEventFailure() {} + + public AdjustEventFailure(Dictionary eventFailureDataMap) + { + if (eventFailureDataMap == null) + { + return; + } + + Adid = AdjustUtils.TryGetValue(eventFailureDataMap, AdjustUtils.KeyAdid); + Message = AdjustUtils.TryGetValue(eventFailureDataMap, AdjustUtils.KeyMessage); + Timestamp = AdjustUtils.TryGetValue(eventFailureDataMap, AdjustUtils.KeyTimestamp); + EventToken = AdjustUtils.TryGetValue(eventFailureDataMap, AdjustUtils.KeyEventToken); + CallbackId = AdjustUtils.TryGetValue(eventFailureDataMap, AdjustUtils.KeyCallbackId); + + bool willRetry; + if (bool.TryParse(AdjustUtils.TryGetValue(eventFailureDataMap, AdjustUtils.KeyWillRetry), out willRetry)) + { + WillRetry = willRetry; + } + + string jsonResponseString = AdjustUtils.TryGetValue(eventFailureDataMap, AdjustUtils.KeyJsonResponse); + var jsonResponseNode = JSON.Parse(jsonResponseString); + if (jsonResponseNode != null && jsonResponseNode.AsObject != null) + { + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonResponseNode.AsObject, JsonResponse); + } + } + + public AdjustEventFailure(string jsonString) + { + var jsonNode = JSON.Parse(jsonString); + if (jsonNode == null) + { + return; + } + + Adid = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyAdid); + Message = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyMessage); + Timestamp = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyTimestamp); + EventToken = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyEventToken); + CallbackId = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyCallbackId); + WillRetry = Convert.ToBoolean(AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyWillRetry)); + + var jsonResponseNode = jsonNode[AdjustUtils.KeyJsonResponse]; + if (jsonResponseNode == null) + { + return; + } + if (jsonResponseNode.AsObject == null) + { + return; + } + + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonResponseNode.AsObject, JsonResponse); + } + + public void BuildJsonResponseFromString(string jsonResponseString) + { + var jsonNode = JSON.Parse(jsonResponseString); + if (jsonNode == null) + { + return; + } + + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonNode.AsObject, JsonResponse); + } + + public string GetJsonResponse() + { + return AdjustUtils.GetJsonResponseCompact(JsonResponse); + } + } +} diff --git a/Adjust/Unity/AdjustEventFailure.cs.meta b/Adjust/Unity/AdjustEventFailure.cs.meta new file mode 100644 index 0000000..ee12da9 --- /dev/null +++ b/Adjust/Unity/AdjustEventFailure.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ea86cd4e1c6d0496397920902d0f0b5f +timeCreated: 1458128791 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustEventSuccess.cs b/Adjust/Unity/AdjustEventSuccess.cs new file mode 100644 index 0000000..3b15253 --- /dev/null +++ b/Adjust/Unity/AdjustEventSuccess.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustEventSuccess + { + public string Adid { get; set; } + public string Message { get; set; } + public string Timestamp { get; set; } + public string EventToken { get; set; } + public string CallbackId { get; set; } + + public Dictionary JsonResponse { get; set; } + + public AdjustEventSuccess() {} + + public AdjustEventSuccess(Dictionary eventSuccessDataMap) + { + if (eventSuccessDataMap == null) + { + return; + } + + Adid = AdjustUtils.TryGetValue(eventSuccessDataMap, AdjustUtils.KeyAdid); + Message = AdjustUtils.TryGetValue(eventSuccessDataMap, AdjustUtils.KeyMessage); + Timestamp = AdjustUtils.TryGetValue(eventSuccessDataMap, AdjustUtils.KeyTimestamp); + EventToken = AdjustUtils.TryGetValue(eventSuccessDataMap, AdjustUtils.KeyEventToken); + CallbackId = AdjustUtils.TryGetValue(eventSuccessDataMap, AdjustUtils.KeyCallbackId); + + string jsonResponseString = AdjustUtils.TryGetValue(eventSuccessDataMap, AdjustUtils.KeyJsonResponse); + var jsonResponseNode = JSON.Parse(jsonResponseString); + if (jsonResponseNode != null && jsonResponseNode.AsObject != null) + { + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonResponseNode.AsObject, JsonResponse); + } + } + + public AdjustEventSuccess(string jsonString) + { + var jsonNode = JSON.Parse(jsonString); + if (jsonNode == null) + { + return; + } + + Adid = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyAdid); + Message = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyMessage); + Timestamp = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyTimestamp); + EventToken = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyEventToken); + CallbackId = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyCallbackId); + + var jsonResponseNode = jsonNode[AdjustUtils.KeyJsonResponse]; + if (jsonResponseNode == null) + { + return; + } + if (jsonResponseNode.AsObject == null) + { + return; + } + + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonResponseNode.AsObject, JsonResponse); + } + + public void BuildJsonResponseFromString(string jsonResponseString) + { + var jsonNode = JSON.Parse(jsonResponseString); + if (jsonNode == null) + { + return; + } + + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonNode.AsObject, JsonResponse); + } + + public string GetJsonResponse() + { + return AdjustUtils.GetJsonResponseCompact(JsonResponse); + } + } +} diff --git a/Adjust/Unity/AdjustEventSuccess.cs.meta b/Adjust/Unity/AdjustEventSuccess.cs.meta new file mode 100644 index 0000000..a750f56 --- /dev/null +++ b/Adjust/Unity/AdjustEventSuccess.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1957a0e6e9aa14f0e8adefa2120f1e02 +timeCreated: 1458128791 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustLogLevel.cs b/Adjust/Unity/AdjustLogLevel.cs new file mode 100644 index 0000000..a61994d --- /dev/null +++ b/Adjust/Unity/AdjustLogLevel.cs @@ -0,0 +1,63 @@ +namespace com.adjust.sdk +{ + [System.Serializable] + public enum AdjustLogLevel + { + Verbose = 1, + Debug, + Info, + Warn, + Error, + Assert, + Suppress + } + + public static class AdjustLogLevelExtension + { + public static string ToLowercaseString(this AdjustLogLevel AdjustLogLevel) + { + switch (AdjustLogLevel) + { + case AdjustLogLevel.Verbose: + return "verbose"; + case AdjustLogLevel.Debug: + return "debug"; + case AdjustLogLevel.Info: + return "info"; + case AdjustLogLevel.Warn: + return "warn"; + case AdjustLogLevel.Error: + return "error"; + case AdjustLogLevel.Assert: + return "assert"; + case AdjustLogLevel.Suppress: + return "suppress"; + default: + return "unknown"; + } + } + + public static string ToUppercaseString(this AdjustLogLevel AdjustLogLevel) + { + switch (AdjustLogLevel) + { + case AdjustLogLevel.Verbose: + return "VERBOSE"; + case AdjustLogLevel.Debug: + return "DEBUG"; + case AdjustLogLevel.Info: + return "INFO"; + case AdjustLogLevel.Warn: + return "WARN"; + case AdjustLogLevel.Error: + return "ERROR"; + case AdjustLogLevel.Assert: + return "ASSERT"; + case AdjustLogLevel.Suppress: + return "SUPPRESS"; + default: + return "UNKNOWN"; + } + } + } +} diff --git a/Adjust/Unity/AdjustLogLevel.cs.meta b/Adjust/Unity/AdjustLogLevel.cs.meta new file mode 100644 index 0000000..226164e --- /dev/null +++ b/Adjust/Unity/AdjustLogLevel.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 428ab44990df24973902248a9d2b43dd +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Adjust/Unity/AdjustPlayStorePurchase.cs b/Adjust/Unity/AdjustPlayStorePurchase.cs new file mode 100644 index 0000000..9bbf955 --- /dev/null +++ b/Adjust/Unity/AdjustPlayStorePurchase.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustPlayStorePurchase + { + internal string productId; + internal string purchaseToken; + + public AdjustPlayStorePurchase(string productId, string purchaseToken) + { + this.productId = productId; + this.purchaseToken = purchaseToken; + } + } +} diff --git a/Adjust/Unity/AdjustPlayStorePurchase.cs.meta b/Adjust/Unity/AdjustPlayStorePurchase.cs.meta new file mode 100644 index 0000000..004849b --- /dev/null +++ b/Adjust/Unity/AdjustPlayStorePurchase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d875a71a5aeb1496d93afac749ab17f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustPlayStoreSubscription.cs b/Adjust/Unity/AdjustPlayStoreSubscription.cs new file mode 100644 index 0000000..c86e45c --- /dev/null +++ b/Adjust/Unity/AdjustPlayStoreSubscription.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustPlayStoreSubscription + { + internal string price; + internal string currency; + internal string sku; + internal string orderId; + internal string signature; + internal string purchaseToken; + internal string billingStore; + internal string purchaseTime; + internal List partnerList; + internal List callbackList; + + public AdjustPlayStoreSubscription(string price, string currency, string sku, string orderId, string signature, string purchaseToken) + { + this.price = price; + this.currency = currency; + this.sku = sku; + this.orderId = orderId; + this.signature = signature; + this.purchaseToken = purchaseToken; + } + + public void setPurchaseTime(string purchaseTime) + { + this.purchaseTime = purchaseTime; + } + + public void addCallbackParameter(string key, string value) + { + if (callbackList == null) + { + callbackList = new List(); + } + callbackList.Add(key); + callbackList.Add(value); + } + + public void addPartnerParameter(string key, string value) + { + if (partnerList == null) + { + partnerList = new List(); + } + partnerList.Add(key); + partnerList.Add(value); + } + } +} diff --git a/Adjust/Unity/AdjustPlayStoreSubscription.cs.meta b/Adjust/Unity/AdjustPlayStoreSubscription.cs.meta new file mode 100644 index 0000000..8b82732 --- /dev/null +++ b/Adjust/Unity/AdjustPlayStoreSubscription.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 69e7a4074abb44758b3f011d8352a57a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustPurchaseVerificationInfo.cs b/Adjust/Unity/AdjustPurchaseVerificationInfo.cs new file mode 100644 index 0000000..beb4d83 --- /dev/null +++ b/Adjust/Unity/AdjustPurchaseVerificationInfo.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustPurchaseVerificationInfo + { + #region Properties + public int code { get; set; } + public string message { get; set; } + public string verificationStatus { get; set; } + #endregion + + #region Constructors + public AdjustPurchaseVerificationInfo() + { + } + + public AdjustPurchaseVerificationInfo(string jsonString) + { + var jsonNode = JSON.Parse(jsonString); + + if (jsonNode == null) + { + return; + } + + string stringCode = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyCode); + code = Int32.Parse(stringCode); + message = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyMessage); + verificationStatus = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyVerificationStatus); + } + #endregion + } +} diff --git a/Adjust/Unity/AdjustPurchaseVerificationInfo.cs.meta b/Adjust/Unity/AdjustPurchaseVerificationInfo.cs.meta new file mode 100644 index 0000000..486c641 --- /dev/null +++ b/Adjust/Unity/AdjustPurchaseVerificationInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0c97a5152b31474d89bc1ba521644de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustSessionFailure.cs b/Adjust/Unity/AdjustSessionFailure.cs new file mode 100644 index 0000000..6d06286 --- /dev/null +++ b/Adjust/Unity/AdjustSessionFailure.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustSessionFailure + { + public string Adid { get; set; } + public string Message { get; set; } + public string Timestamp { get; set; } + public bool WillRetry { get; set; } + public Dictionary JsonResponse { get; set; } + + public AdjustSessionFailure() {} + + public AdjustSessionFailure(Dictionary sessionFailureDataMap) + { + if (sessionFailureDataMap == null) + { + return; + } + + Adid = AdjustUtils.TryGetValue(sessionFailureDataMap, AdjustUtils.KeyAdid); + Message = AdjustUtils.TryGetValue(sessionFailureDataMap, AdjustUtils.KeyMessage); + Timestamp = AdjustUtils.TryGetValue(sessionFailureDataMap, AdjustUtils.KeyTimestamp); + + bool willRetry; + if (bool.TryParse(AdjustUtils.TryGetValue(sessionFailureDataMap, AdjustUtils.KeyWillRetry), out willRetry)) + { + WillRetry = willRetry; + } + + string jsonResponseString = AdjustUtils.TryGetValue(sessionFailureDataMap, AdjustUtils.KeyJsonResponse); + var jsonResponseNode = JSON.Parse(jsonResponseString); + if (jsonResponseNode != null && jsonResponseNode.AsObject != null) + { + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonResponseNode.AsObject, JsonResponse); + } + } + + public AdjustSessionFailure(string jsonString) + { + var jsonNode = JSON.Parse(jsonString); + if (jsonNode == null) + { + return; + } + + Adid = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyAdid); + Message = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyMessage); + Timestamp = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyTimestamp); + WillRetry = Convert.ToBoolean(AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyWillRetry)); + + var jsonResponseNode = jsonNode[AdjustUtils.KeyJsonResponse]; + if (jsonResponseNode == null) + { + return; + } + if (jsonResponseNode.AsObject == null) + { + return; + } + + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonResponseNode.AsObject, JsonResponse); + } + + public void BuildJsonResponseFromString(string jsonResponseString) + { + var jsonNode = JSON.Parse(jsonResponseString); + if (jsonNode == null) + { + return; + } + + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonNode.AsObject, JsonResponse); + } + + public string GetJsonResponse() + { + return AdjustUtils.GetJsonResponseCompact(JsonResponse); + } + } +} diff --git a/Adjust/Unity/AdjustSessionFailure.cs.meta b/Adjust/Unity/AdjustSessionFailure.cs.meta new file mode 100644 index 0000000..4e905a4 --- /dev/null +++ b/Adjust/Unity/AdjustSessionFailure.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b4de268ab985448a594fb82264190742 +timeCreated: 1458128791 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustSessionSuccess.cs b/Adjust/Unity/AdjustSessionSuccess.cs new file mode 100644 index 0000000..fd55aff --- /dev/null +++ b/Adjust/Unity/AdjustSessionSuccess.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustSessionSuccess + { + public string Adid { get; set; } + public string Message { get; set; } + public string Timestamp { get; set; } + public Dictionary JsonResponse { get; set; } + + public AdjustSessionSuccess() {} + + public AdjustSessionSuccess(Dictionary sessionSuccessDataMap) + { + if (sessionSuccessDataMap == null) + { + return; + } + + Adid = AdjustUtils.TryGetValue(sessionSuccessDataMap, AdjustUtils.KeyAdid); + Message = AdjustUtils.TryGetValue(sessionSuccessDataMap, AdjustUtils.KeyMessage); + Timestamp = AdjustUtils.TryGetValue(sessionSuccessDataMap, AdjustUtils.KeyTimestamp); + + string jsonResponseString = AdjustUtils.TryGetValue(sessionSuccessDataMap, AdjustUtils.KeyJsonResponse); + var jsonResponseNode = JSON.Parse(jsonResponseString); + if (jsonResponseNode != null && jsonResponseNode.AsObject != null) + { + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonResponseNode.AsObject, JsonResponse); + } + } + + public AdjustSessionSuccess(string jsonString) + { + var jsonNode = JSON.Parse(jsonString); + if (jsonNode == null) + { + return; + } + + Adid = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyAdid); + Message = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyMessage); + Timestamp = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeyTimestamp); + + var jsonResponseNode = jsonNode[AdjustUtils.KeyJsonResponse]; + if (jsonResponseNode == null) + { + return; + } + if (jsonResponseNode.AsObject == null) + { + return; + } + + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonResponseNode.AsObject, JsonResponse); + } + + public void BuildJsonResponseFromString(string jsonResponseString) + { + var jsonNode = JSON.Parse(jsonResponseString); + if (jsonNode == null) + { + return; + } + + JsonResponse = new Dictionary(); + AdjustUtils.WriteJsonResponseDictionary(jsonNode.AsObject, JsonResponse); + } + + public string GetJsonResponse() + { + return AdjustUtils.GetJsonResponseCompact(JsonResponse); + } + } +} diff --git a/Adjust/Unity/AdjustSessionSuccess.cs.meta b/Adjust/Unity/AdjustSessionSuccess.cs.meta new file mode 100644 index 0000000..643c083 --- /dev/null +++ b/Adjust/Unity/AdjustSessionSuccess.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c23847e7a1f464d7a8c7f9b35829af17 +timeCreated: 1458128791 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustThirdPartySharing.cs b/Adjust/Unity/AdjustThirdPartySharing.cs new file mode 100644 index 0000000..091cacf --- /dev/null +++ b/Adjust/Unity/AdjustThirdPartySharing.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; + +namespace com.adjust.sdk +{ + public class AdjustThirdPartySharing + { + internal bool? isEnabled; + internal Dictionary> granularOptions; + internal Dictionary> partnerSharingSettings; + + public AdjustThirdPartySharing(bool? isEnabled) + { + this.isEnabled = isEnabled; + this.granularOptions = new Dictionary>(); + this.partnerSharingSettings = new Dictionary>(); + } + + public void addGranularOption(string partnerName, string key, string value) + { + // TODO: consider to add some logs about the error case + if (partnerName == null || key == null || value == null) + { + return; + } + + List partnerOptions; + if (granularOptions.ContainsKey(partnerName)) + { + partnerOptions = granularOptions[partnerName]; + } + else + { + partnerOptions = new List(); + granularOptions.Add(partnerName, partnerOptions); + } + + partnerOptions.Add(key); + partnerOptions.Add(value); + } + + public void addPartnerSharingSetting(string partnerName, string key, bool value) + { + // TODO: consider to add some logs about the error case + if (partnerName == null || key == null) + { + return; + } + + List partnerSharingSetting; + if (partnerSharingSettings.ContainsKey(partnerName)) + { + partnerSharingSetting = partnerSharingSettings[partnerName]; + } + else + { + partnerSharingSetting = new List(); + partnerSharingSettings.Add(partnerName, partnerSharingSetting); + } + + partnerSharingSetting.Add(key); + partnerSharingSetting.Add(value.ToString()); + } + } +} diff --git a/Adjust/Unity/AdjustThirdPartySharing.cs.meta b/Adjust/Unity/AdjustThirdPartySharing.cs.meta new file mode 100644 index 0000000..5270a0b --- /dev/null +++ b/Adjust/Unity/AdjustThirdPartySharing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dcb2591dfab904327904b8879af699ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustUrlStrategy.cs b/Adjust/Unity/AdjustUrlStrategy.cs new file mode 100644 index 0000000..6d4974a --- /dev/null +++ b/Adjust/Unity/AdjustUrlStrategy.cs @@ -0,0 +1,30 @@ +namespace com.adjust.sdk +{ + [System.Serializable] + public enum AdjustUrlStrategy + { + Default, + DataResidencyEU, + DataResidencyTK, + DataResidencyUS, + India, + China, + } + + public static class AdjustUrlStrategyExtension + { + public static string ToLowerCaseString(this AdjustUrlStrategy strategy) + { + switch (strategy) + { + case AdjustUrlStrategy.India: return "india"; + case AdjustUrlStrategy.China: return "china"; + case AdjustUrlStrategy.DataResidencyEU: return "data-residency-eu"; + case AdjustUrlStrategy.DataResidencyTK: return "data-residency-tr"; + case AdjustUrlStrategy.DataResidencyUS: return "data-residency-us"; + default: return string.Empty; + } + } + } +} + diff --git a/Adjust/Unity/AdjustUrlStrategy.cs.meta b/Adjust/Unity/AdjustUrlStrategy.cs.meta new file mode 100644 index 0000000..cd90919 --- /dev/null +++ b/Adjust/Unity/AdjustUrlStrategy.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 034243ca816f644dc97675a908e24e8c +timeCreated: 1617092915 +licenseType: Free +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Unity/AdjustUtils.cs b/Adjust/Unity/AdjustUtils.cs new file mode 100644 index 0000000..77b1b59 --- /dev/null +++ b/Adjust/Unity/AdjustUtils.cs @@ -0,0 +1,374 @@ +using System; +using System.Collections.Generic; + +using UnityEngine; + +namespace com.adjust.sdk +{ + public class AdjustUtils + { + public static string KeyAdid = "adid"; + public static string KeyMessage = "message"; + public static string KeyNetwork = "network"; + public static string KeyAdgroup = "adgroup"; + public static string KeyCampaign = "campaign"; + public static string KeyCreative = "creative"; + public static string KeyWillRetry = "willRetry"; + public static string KeyTimestamp = "timestamp"; + public static string KeyCallbackId = "callbackId"; + public static string KeyEventToken = "eventToken"; + public static string KeyClickLabel = "clickLabel"; + public static string KeyTrackerName = "trackerName"; + public static string KeyTrackerToken = "trackerToken"; + public static string KeyJsonResponse = "jsonResponse"; + public static string KeyCostType = "costType"; + public static string KeyCostAmount = "costAmount"; + public static string KeyCostCurrency = "costCurrency"; + public static string KeyFbInstallReferrer = "fbInstallReferrer"; + public static string KeySkadConversionValue = "fineValue"; + public static string KeySkadCoarseValue = "coarseValue"; + public static string KeySkadLockWindow = "lockWindow"; + public static string KeyCode = "code"; + public static string KeyVerificationStatus = "verificationStatus"; + + // For testing purposes. + public static string KeyTestOptionsBaseUrl = "baseUrl"; + public static string KeyTestOptionsGdprUrl = "gdprUrl"; + public static string KeyTestOptionsSubscriptionUrl = "subscriptionUrl"; + public static string KeyTestOptionsPurchaseVerificationUrl = "purchaseVerificationUrl"; + public static string KeyTestOptionsExtraPath = "extraPath"; + public static string KeyTestOptionsBasePath = "basePath"; + public static string KeyTestOptionsGdprPath = "gdprPath"; + public static string KeyTestOptionsDeleteState = "deleteState"; + public static string KeyTestOptionsUseTestConnectionOptions = "useTestConnectionOptions"; + public static string KeyTestOptionsTimerIntervalInMilliseconds = "timerIntervalInMilliseconds"; + public static string KeyTestOptionsTimerStartInMilliseconds = "timerStartInMilliseconds"; + public static string KeyTestOptionsSessionIntervalInMilliseconds = "sessionIntervalInMilliseconds"; + public static string KeyTestOptionsSubsessionIntervalInMilliseconds = "subsessionIntervalInMilliseconds"; + public static string KeyTestOptionsTeardown = "teardown"; + public static string KeyTestOptionsNoBackoffWait = "noBackoffWait"; + public static string KeyTestOptionsAdServicesFrameworkEnabled = "adServicesFrameworkEnabled"; + + public static int ConvertLogLevel(AdjustLogLevel? logLevel) + { + if (logLevel == null) + { + return -1; + } + + return (int)logLevel; + } + + public static int ConvertBool(bool? value) + { + if (value == null) + { + return -1; + } + if (value.Value) + { + return 1; + } + else + { + return 0; + } + } + + public static double ConvertDouble(double? value) + { + if (value == null) + { + return -1; + } + + return (double)value; + } + + public static int ConvertInt(int? value) + { + if (value == null) + { + return -1; + } + + return (int)value; + } + + public static long ConvertLong(long? value) + { + if (value == null) + { + return -1; + } + + return (long)value; + } + + public static string ConvertListToJson(List list) + { + if (list == null) + { + return null; + } + // list of callback / partner parameters must contain even number of elements + if (list.Count % 2 != 0) + { + return null; + } + + List processedList = new List(); + for (int i = 0; i < list.Count; i += 2) + { + String key = list[i]; + String value = list[i + 1]; + + if (key == null || value == null) + { + continue; + } + + processedList.Add(key); + processedList.Add(value); + } + + // create JSON array + var jsonArray = new JSONArray(); + foreach (var listItem in processedList) + { + jsonArray.Add(new JSONData(listItem)); + } + + return jsonArray.ToString(); + } + + public static string GetJsonResponseCompact(Dictionary dictionary) + { + string logJsonResponse = ""; + + if (dictionary == null) + { + return logJsonResponse; + } + else + { + int preLoopCounter = 0; + logJsonResponse += "{"; + + foreach (KeyValuePair pair in dictionary) + { + String valueString = pair.Value as string; + + if (valueString != null) + { + if (++preLoopCounter > 1) + { + logJsonResponse += ","; + } + + // if the value is another JSON/complex-structure + if (valueString.StartsWith("{") && valueString.EndsWith("}")) + { + logJsonResponse += "\"" + pair.Key + "\"" + ":" + valueString; + } + else + { + logJsonResponse += "\"" + pair.Key + "\"" + ":" + "\"" + valueString + "\""; + } + + continue; + } + + Dictionary valueDictionary = pair.Value as Dictionary; + + if (++preLoopCounter > 1) + { + logJsonResponse += ","; + } + + logJsonResponse += "\"" + pair.Key + "\"" + ":"; + logJsonResponse += GetJsonResponseCompact(valueDictionary); + } + + logJsonResponse += "}"; + } + + return logJsonResponse; + } + + public static String GetJsonString(JSONNode node, string key) + { + if (node == null) + { + return null; + } + + // Access value object and cast it to JSONData. + var nodeValue = node[key] as JSONData; + + if (nodeValue == null) + { + return null; + } + + // https://github.com/adjust/unity_sdk/issues/137 + if (nodeValue == "") + { + return null; + } + + return nodeValue.Value; + } + + public static void WriteJsonResponseDictionary(JSONClass jsonObject, Dictionary output) + { + foreach (KeyValuePair pair in jsonObject) + { + // Try to cast value as a complex object. + var subNode = pair.Value.AsObject; + var key = pair.Key; + + // Value is not a complex object. + if (subNode == null) + { + var value = pair.Value.Value; + output.Add(key, value); + continue; + } + + // Create new dictionary for complex type. + var newSubDictionary = new Dictionary(); + + // Save it in the current dictionary. + output.Add(key, newSubDictionary); + + // Recursive call to fill new dictionary. + WriteJsonResponseDictionary(subNode, newSubDictionary); + } + } + + public static string TryGetValue(Dictionary dictionary, string key) + { + string value; + if (dictionary.TryGetValue(key, out value)) + { + // https://github.com/adjust/unity_sdk/issues/137 + if (value == "") + { + return null; + } + return value; + } + return null; + } + + public static int GetSkad4ConversionValue(string conversionValueUpdate) + { + var jsonNode = JSON.Parse(conversionValueUpdate); + if (jsonNode == null) + { + return -1; + } + + string strConversionValue = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeySkadConversionValue); + int conversionValue = 0; + if (Int32.TryParse(strConversionValue, out conversionValue)) + { + return conversionValue; + } + else + { + return -1; + } + } + + public static string GetSkad4CoarseValue(string conversionValueUpdate) + { + var jsonNode = JSON.Parse(conversionValueUpdate); + if (jsonNode == null) + { + return null; + } + string coarseValue = AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeySkadCoarseValue); + return coarseValue; + } + + public static bool GetSkad4LockWindow(string conversionValueUpdate) + { + var jsonNode = JSON.Parse(conversionValueUpdate); + if (jsonNode == null) + { + return false; + } + bool lockWindow = Convert.ToBoolean(AdjustUtils.GetJsonString(jsonNode, AdjustUtils.KeySkadLockWindow)); + return lockWindow; + } + +#if UNITY_ANDROID + public static AndroidJavaObject TestOptionsMap2AndroidJavaObject(Dictionary testOptionsMap, AndroidJavaObject ajoCurrentActivity) + { + AndroidJavaObject ajoTestOptions = new AndroidJavaObject("com.adjust.sdk.AdjustTestOptions"); + ajoTestOptions.Set("baseUrl", testOptionsMap[KeyTestOptionsBaseUrl]); + ajoTestOptions.Set("gdprUrl", testOptionsMap[KeyTestOptionsGdprUrl]); + ajoTestOptions.Set("subscriptionUrl", testOptionsMap[KeyTestOptionsSubscriptionUrl]); + ajoTestOptions.Set("purchaseVerificationUrl", testOptionsMap[KeyTestOptionsPurchaseVerificationUrl]); + + if (testOptionsMap.ContainsKey(KeyTestOptionsExtraPath) && !string.IsNullOrEmpty(testOptionsMap[KeyTestOptionsExtraPath])) + { + ajoTestOptions.Set("basePath", testOptionsMap[KeyTestOptionsExtraPath]); + ajoTestOptions.Set("gdprPath", testOptionsMap[KeyTestOptionsExtraPath]); + ajoTestOptions.Set("subscriptionPath", testOptionsMap[KeyTestOptionsExtraPath]); + ajoTestOptions.Set("purchaseVerificationPath", testOptionsMap[KeyTestOptionsExtraPath]); + } + if (testOptionsMap.ContainsKey(KeyTestOptionsDeleteState) && ajoCurrentActivity != null) + { + ajoTestOptions.Set("context", ajoCurrentActivity); + } + if (testOptionsMap.ContainsKey(KeyTestOptionsUseTestConnectionOptions)) + { + bool useTestConnectionOptions = testOptionsMap[KeyTestOptionsUseTestConnectionOptions].ToLower() == "true"; + AndroidJavaObject ajoUseTestConnectionOptions = new AndroidJavaObject("java.lang.Boolean", useTestConnectionOptions); + ajoTestOptions.Set("useTestConnectionOptions", ajoUseTestConnectionOptions); + } + if (testOptionsMap.ContainsKey(KeyTestOptionsTimerIntervalInMilliseconds)) + { + var timerIntervalInMilliseconds = long.Parse(testOptionsMap[KeyTestOptionsTimerIntervalInMilliseconds]); + AndroidJavaObject ajoTimerIntervalInMilliseconds = new AndroidJavaObject("java.lang.Long", timerIntervalInMilliseconds); + ajoTestOptions.Set("timerIntervalInMilliseconds", ajoTimerIntervalInMilliseconds); + } + if (testOptionsMap.ContainsKey(KeyTestOptionsTimerStartInMilliseconds)) + { + var timerStartInMilliseconds = long.Parse(testOptionsMap[KeyTestOptionsTimerStartInMilliseconds]); + AndroidJavaObject ajoTimerStartInMilliseconds = new AndroidJavaObject("java.lang.Long", timerStartInMilliseconds); + ajoTestOptions.Set("timerStartInMilliseconds", ajoTimerStartInMilliseconds); + } + if (testOptionsMap.ContainsKey(KeyTestOptionsSessionIntervalInMilliseconds)) + { + var sessionIntervalInMilliseconds = long.Parse(testOptionsMap[KeyTestOptionsSessionIntervalInMilliseconds]); + AndroidJavaObject ajoSessionIntervalInMilliseconds = new AndroidJavaObject("java.lang.Long", sessionIntervalInMilliseconds); + ajoTestOptions.Set("sessionIntervalInMilliseconds", ajoSessionIntervalInMilliseconds); + } + if (testOptionsMap.ContainsKey(KeyTestOptionsSubsessionIntervalInMilliseconds)) + { + var subsessionIntervalInMilliseconds = long.Parse(testOptionsMap[KeyTestOptionsSubsessionIntervalInMilliseconds]); + AndroidJavaObject ajoSubsessionIntervalInMilliseconds = new AndroidJavaObject("java.lang.Long", subsessionIntervalInMilliseconds); + ajoTestOptions.Set("subsessionIntervalInMilliseconds", ajoSubsessionIntervalInMilliseconds); + } + if (testOptionsMap.ContainsKey(KeyTestOptionsTeardown)) + { + bool teardown = testOptionsMap[KeyTestOptionsTeardown].ToLower() == "true"; + AndroidJavaObject ajoTeardown = new AndroidJavaObject("java.lang.Boolean", teardown); + ajoTestOptions.Set("teardown", ajoTeardown); + } + if (testOptionsMap.ContainsKey(KeyTestOptionsNoBackoffWait)) + { + bool noBackoffWait = testOptionsMap[KeyTestOptionsNoBackoffWait].ToLower() == "true"; + AndroidJavaObject ajoNoBackoffWait = new AndroidJavaObject("java.lang.Boolean", noBackoffWait); + ajoTestOptions.Set("noBackoffWait", ajoNoBackoffWait); + } + + return ajoTestOptions; + } +#endif + } +} diff --git a/Adjust/Unity/AdjustUtils.cs.meta b/Adjust/Unity/AdjustUtils.cs.meta new file mode 100644 index 0000000..5f6f1ad --- /dev/null +++ b/Adjust/Unity/AdjustUtils.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 98e51a1481cc24ddebf93f61f6c1eb9d +timeCreated: 1458230617 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Windows.meta b/Adjust/Windows.meta new file mode 100644 index 0000000..09f85b2 --- /dev/null +++ b/Adjust/Windows.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b2eaef4e025b6a64c942a8a88ad33333 +folderAsset: yes +timeCreated: 1578652520 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Windows/AdjustWindows.cs b/Adjust/Windows/AdjustWindows.cs new file mode 100644 index 0000000..4a79826 --- /dev/null +++ b/Adjust/Windows/AdjustWindows.cs @@ -0,0 +1,340 @@ +#if UNITY_WSA +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; + +#if UNITY_WSA_10_0 +using Win10Interface; +#elif UNITY_WP_8_1 +using Win81Interface; +#elif UNITY_WSA +using WinWsInterface; +#endif + +namespace com.adjust.sdk +{ + public class AdjustWindows + { + private const string sdkPrefix = "unity4.36.0"; + private static bool appLaunched = false; + + public static void Start(AdjustConfig adjustConfig) + { + string logLevelString = null; + string environment = adjustConfig.environment.ToLowercaseString(); + + Action> attributionChangedAction = null; + Action> sessionSuccessChangedAction = null; + Action> sessionFailureChangedAction = null; + Action> eventSuccessChangedAction = null; + Action> eventFailureChangedAction = null; + Func deeplinkResponseFunc = null; + + if (adjustConfig.logLevel.HasValue) + { + logLevelString = adjustConfig.logLevel.Value.ToLowercaseString(); + } + + if (adjustConfig.attributionChangedDelegate != null) + { + attributionChangedAction = (attributionMap) => + { + var attribution = new AdjustAttribution(attributionMap); + adjustConfig.attributionChangedDelegate(attribution); + }; + } + + if (adjustConfig.sessionSuccessDelegate != null) + { + sessionSuccessChangedAction = (sessionMap) => + { + var sessionData = new AdjustSessionSuccess(sessionMap); + adjustConfig.sessionSuccessDelegate(sessionData); + }; + } + + if (adjustConfig.sessionFailureDelegate != null) + { + sessionFailureChangedAction = (sessionMap) => + { + var sessionData = new AdjustSessionFailure(sessionMap); + adjustConfig.sessionFailureDelegate(sessionData); + }; + } + + if (adjustConfig.eventSuccessDelegate != null) + { + eventSuccessChangedAction = (eventMap) => + { + var eventData = new AdjustEventSuccess(eventMap); + adjustConfig.eventSuccessDelegate(eventData); + }; + } + + if (adjustConfig.eventFailureDelegate != null) + { + eventFailureChangedAction = (eventMap) => + { + var eventData = new AdjustEventFailure(eventMap); + adjustConfig.eventFailureDelegate(eventData); + }; + } + + if (adjustConfig.deferredDeeplinkDelegate != null) + { + deeplinkResponseFunc = uri => + { + if (adjustConfig.launchDeferredDeeplink) + { + adjustConfig.deferredDeeplinkDelegate(uri); + } + + return adjustConfig.launchDeferredDeeplink; + }; + } + + bool sendInBackground = false; + if (adjustConfig.sendInBackground.HasValue) + { + sendInBackground = adjustConfig.sendInBackground.Value; + } + + double delayStartSeconds = 0; + if (adjustConfig.delayStart.HasValue) + { + delayStartSeconds = adjustConfig.delayStart.Value; + } + + AdjustConfigDto adjustConfigDto = new AdjustConfigDto { + AppToken = adjustConfig.appToken, + Environment = environment, + SdkPrefix = sdkPrefix, + SendInBackground = sendInBackground, + DelayStart = delayStartSeconds, + UserAgent = adjustConfig.userAgent, + DefaultTracker = adjustConfig.defaultTracker, + EventBufferingEnabled = adjustConfig.eventBufferingEnabled, + LaunchDeferredDeeplink = adjustConfig.launchDeferredDeeplink, + LogLevelString = logLevelString, + LogDelegate = adjustConfig.logDelegate, + ActionAttributionChangedData = attributionChangedAction, + ActionSessionSuccessData = sessionSuccessChangedAction, + ActionSessionFailureData = sessionFailureChangedAction, + ActionEventSuccessData = eventSuccessChangedAction, + ActionEventFailureData = eventFailureChangedAction, + FuncDeeplinkResponseData = deeplinkResponseFunc, + IsDeviceKnown = adjustConfig.isDeviceKnown, + SecretId = adjustConfig.secretId, + Info1 = adjustConfig.info1, + Info2 = adjustConfig.info2, + Info3 = adjustConfig.info3, + Info4 = adjustConfig.info4 + }; + + AdjustWinInterface.ApplicationLaunching(adjustConfigDto); + AdjustWinInterface.ApplicationActivated(); + appLaunched = true; + } + + public static void TrackEvent(AdjustEvent adjustEvent) + { + AdjustWinInterface.TrackEvent( + eventToken: adjustEvent.eventToken, + revenue: adjustEvent.revenue, + currency: adjustEvent.currency, + purchaseId: adjustEvent.transactionId, + callbackId: adjustEvent.callbackId, + callbackList: adjustEvent.callbackList, + partnerList: adjustEvent.partnerList + ); + } + + public static bool IsEnabled() + { + return AdjustWinInterface.IsEnabled(); + } + + public static void OnResume() + { + if (!appLaunched) + { + return; + } + + AdjustWinInterface.ApplicationActivated(); + } + + public static void OnPause() + { + AdjustWinInterface.ApplicationDeactivated(); + } + + public static void SetEnabled(bool enabled) + { + AdjustWinInterface.SetEnabled(enabled); + } + + public static void SetOfflineMode(bool offlineMode) + { + AdjustWinInterface.SetOfflineMode(offlineMode); + } + + public static void SendFirstPackages() + { + AdjustWinInterface.SendFirstPackages(); + } + + public static void SetDeviceToken(string deviceToken) + { + AdjustWinInterface.SetDeviceToken(deviceToken); + } + + public static void AppWillOpenUrl(string url) + { + AdjustWinInterface.AppWillOpenUrl(url); + } + + public static void AddSessionPartnerParameter(string key, string value) + { + AdjustWinInterface.AddSessionPartnerParameter(key, value); + } + + public static void AddSessionCallbackParameter(string key, string value) + { + AdjustWinInterface.AddSessionCallbackParameter(key, value); + } + + public static void RemoveSessionPartnerParameter(string key) + { + AdjustWinInterface.RemoveSessionPartnerParameter(key); + } + + public static void RemoveSessionCallbackParameter(string key) + { + AdjustWinInterface.RemoveSessionCallbackParameter(key); + } + + public static void ResetSessionPartnerParameters() + { + AdjustWinInterface.ResetSessionPartnerParameters(); + } + + public static void ResetSessionCallbackParameters() + { + AdjustWinInterface.ResetSessionCallbackParameters(); + } + + public static string GetAdid() + { + return AdjustWinInterface.GetAdid(); + } + + public static string GetSdkVersion() + { + return sdkPrefix + "@" + AdjustWinInterface.GetSdkVersion(); + } + + public static AdjustAttribution GetAttribution() + { + var attributionMap = AdjustWinInterface.GetAttribution(); + if (attributionMap == null) + { + return new AdjustAttribution(); + } + + return new AdjustAttribution(attributionMap); + } + + public static void GdprForgetMe() + { + AdjustWinInterface.GdprForgetMe(); + } + + public static string GetWinAdId() + { + return AdjustWinInterface.GetWindowsAdId(); + } + + public static void SetTestOptions(Dictionary testOptions) + { + string basePath = testOptions.ContainsKey(AdjustUtils.KeyTestOptionsBasePath) ? + testOptions[AdjustUtils.KeyTestOptionsBasePath] : null; + string gdprPath = testOptions.ContainsKey(AdjustUtils.KeyTestOptionsGdprPath) ? + testOptions[AdjustUtils.KeyTestOptionsGdprPath] : null; + long timerIntervalMls = -1; + long timerStartMls = -1; + long sessionIntMls = -1; + long subsessionIntMls = -1; + bool teardown = false; + bool deleteState = false; + bool noBackoffWait = false; + + if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsTimerIntervalInMilliseconds)) + { + timerIntervalMls = long.Parse(testOptions[AdjustUtils.KeyTestOptionsTimerIntervalInMilliseconds]); + } + if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsTimerStartInMilliseconds)) + { + timerStartMls = long.Parse(testOptions[AdjustUtils.KeyTestOptionsTimerStartInMilliseconds]); + } + if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsSessionIntervalInMilliseconds)) + { + sessionIntMls = long.Parse(testOptions[AdjustUtils.KeyTestOptionsSessionIntervalInMilliseconds]); + } + if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsSubsessionIntervalInMilliseconds)) + { + subsessionIntMls = long.Parse(testOptions[AdjustUtils.KeyTestOptionsSubsessionIntervalInMilliseconds]); + } + if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsTeardown)) + { + teardown = testOptions[AdjustUtils.KeyTestOptionsTeardown].ToLower() == "true"; + } + if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsDeleteState)) + { + deleteState = testOptions[AdjustUtils.KeyTestOptionsDeleteState].ToLower() == "true"; + } + if (testOptions.ContainsKey(AdjustUtils.KeyTestOptionsNoBackoffWait)) + { + noBackoffWait = testOptions[AdjustUtils.KeyTestOptionsNoBackoffWait].ToLower() == "true"; + } + + Type testLibInterfaceType = Type.GetType("TestLibraryInterface.TestLibraryInterface, TestLibraryInterface"); + Type adjustTestOptionsDtoType = Type.GetType("TestLibraryInterface.AdjustTestOptionsDto, TestLibraryInterface"); + if (testLibInterfaceType == null || adjustTestOptionsDtoType == null) + { + return; + } + + PropertyInfo baseUrlInfo = adjustTestOptionsDtoType.GetProperty("BaseUrl"); + PropertyInfo gdprUrlInfo = adjustTestOptionsDtoType.GetProperty("GdprUrl"); + PropertyInfo basePathInfo = adjustTestOptionsDtoType.GetProperty("BasePath"); + PropertyInfo gdprPathInfo = adjustTestOptionsDtoType.GetProperty("GdprPath"); + PropertyInfo sessionIntervalInMillisecondsInfo = adjustTestOptionsDtoType.GetProperty("SessionIntervalInMilliseconds"); + PropertyInfo subsessionIntervalInMillisecondsInfo = adjustTestOptionsDtoType.GetProperty("SubsessionIntervalInMilliseconds"); + PropertyInfo timerIntervalInMillisecondsInfo = adjustTestOptionsDtoType.GetProperty("TimerIntervalInMilliseconds"); + PropertyInfo timerStartInMillisecondsInfo = adjustTestOptionsDtoType.GetProperty("TimerStartInMilliseconds"); + PropertyInfo deleteStateInfo = adjustTestOptionsDtoType.GetProperty("DeleteState"); + PropertyInfo teardownInfo = adjustTestOptionsDtoType.GetProperty("Teardown"); + PropertyInfo noBackoffWaitInfo = adjustTestOptionsDtoType.GetProperty("NoBackoffWait"); + + object adjustTestOptionsDtoInstance = Activator.CreateInstance(adjustTestOptionsDtoType); + baseUrlInfo.SetValue(adjustTestOptionsDtoInstance, testOptions[AdjustUtils.KeyTestOptionsBaseUrl], null); + gdprUrlInfo.SetValue(adjustTestOptionsDtoInstance, testOptions[AdjustUtils.KeyTestOptionsGdprUrl], null); + basePathInfo.SetValue(adjustTestOptionsDtoInstance, basePath, null); + gdprPathInfo.SetValue(adjustTestOptionsDtoInstance, gdprPath, null); + sessionIntervalInMillisecondsInfo.SetValue(adjustTestOptionsDtoInstance, sessionIntMls, null); + subsessionIntervalInMillisecondsInfo.SetValue(adjustTestOptionsDtoInstance, subsessionIntMls, null); + timerIntervalInMillisecondsInfo.SetValue(adjustTestOptionsDtoInstance, timerIntervalMls, null); + timerStartInMillisecondsInfo.SetValue(adjustTestOptionsDtoInstance, timerStartMls, null); + deleteStateInfo.SetValue(adjustTestOptionsDtoInstance, deleteState, null); + teardownInfo.SetValue(adjustTestOptionsDtoInstance, teardown, null); + noBackoffWaitInfo.SetValue(adjustTestOptionsDtoInstance, noBackoffWait, null); + + MethodInfo setTestOptionsMethodInfo = testLibInterfaceType.GetMethod("SetTestOptions"); + setTestOptionsMethodInfo.Invoke(null, new object[] { adjustTestOptionsDtoInstance }); + } + } +} +#endif diff --git a/Adjust/Windows/AdjustWindows.cs.meta b/Adjust/Windows/AdjustWindows.cs.meta new file mode 100644 index 0000000..2dba026 --- /dev/null +++ b/Adjust/Windows/AdjustWindows.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3427d1638e7de554f822f2758d5efa5d +timeCreated: 1510134931 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Adjust/Windows/Newtonsoft.Json.dll b/Adjust/Windows/Newtonsoft.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..89bc2b8c523fa2ead894ebc5fa503af002b3dd0c GIT binary patch literal 484864 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