package com.mbridge.msdk.foundation.entity; import android.content.Context; import android.content.SharedPreferences; import android.net.Uri; import android.os.Build; import android.text.TextUtils; import com.mbridge.msdk.MBridgeConstans; import com.mbridge.msdk.foundation.controller.a; import com.mbridge.msdk.foundation.controller.b; import com.mbridge.msdk.foundation.same.b.c; import com.mbridge.msdk.foundation.same.b.e; import com.mbridge.msdk.foundation.tools.FastKV; import com.mbridge.msdk.foundation.tools.r; import com.mbridge.msdk.foundation.tools.s; import com.mbridge.msdk.foundation.tools.w; import com.mbridge.msdk.out.Frame; import com.mbridge.msdk.out.MBConfiguration; import com.mbridge.msdk.system.NoProGuard; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.json.JSONArray; import org.json.JSONObject; public class CampaignUnit implements NoProGuard, Serializable { public static final String JSON_KEY_ADS = "ads"; public static final String JSON_KEY_AD_HTML = "cam_html"; public static final String JSON_KEY_AD_TYPE = "ad_type"; public static final String JSON_KEY_AD_ZIP = "cam_tpl_url"; public static final String JSON_KEY_BANNER_HTML = "cam_html"; public static final String JSON_KEY_BANNER_URL = "cam_tpl_url"; public static final String JSON_KEY_CSP = "csp"; public static final String JSON_KEY_DO = "do"; public static final String JSON_KEY_ENCRYPT_PRICE = "encrypt_p"; public static final String JSON_KEY_END_SCREEN_URL = "end_screen_url"; public static final String JSON_KEY_FRAME_ADS = "frames"; public static final String JSON_KEY_HTML_URL = "html_url"; public static final String JSON_KEY_IA_EXT1 = "ia_all_ext1"; public static final String JSON_KEY_IA_EXT2 = "ia_all_ext2"; public static final String JSON_KEY_IA_ICON = "ia_icon"; public static final String JSON_KEY_IA_ORI = "ia_ori"; public static final String JSON_KEY_IA_RST = "ia_rst"; public static final String JSON_KEY_IA_URL = "ia_url"; public static final String JSON_KEY_JM_DO = "jm_do"; public static final String JSON_KEY_MOF_TEMPLATE_URL = "mof_template_url"; public static final String JSON_KEY_MOF_TPLID = "mof_tplid"; public static final String JSON_KEY_NSCPT = "nscpt"; public static final String JSON_KEY_ONLY_IMPRESSION_URL = "only_impression_url"; public static final String JSON_KEY_PARENT_SESSION_ID = "parent_session_id"; public static final String JSON_KEY_PV_URLS = "pv_urls"; public static final String JSON_KEY_REPLACE_TMP = "replace_tmp"; public static final String JSON_KEY_REQ_EXT_DATA = "req_ext_data"; public static final String JSON_KEY_RKS = "rks"; public static final String JSON_KEY_SESSION_ID = "a"; public static final String JSON_KEY_SH = "sh"; public static final String JSON_KEY_TEMPLATE = "template"; public static final String JSON_KEY_TOKEN_RULE = "token_r"; public static final String JSON_KEY_UNIT_SIZE = "unit_size"; public static final String JSON_KEY_VCN = "vcn"; public static final String KEY_IRLFA = "irlfa"; private static final String TAG = "CampaignUnit"; private static final long serialVersionUID = 1; private String adHtml; private int adType; private String adZip; public ArrayList<CampaignEx> ads; private String bannerHtml; private String bannerUrl; private StringBuffer cParams = new StringBuffer(); private String csp; private String domain; private String encryptPrice = ""; private HashMap<String, String> epMap; private String htmlUrl; private String ia_all_ext1; private String ia_all_ext2; private String ia_icon; private int ia_ori; private int ia_rst; private String ia_url; private int jmDo; private List<Frame> listFrames; private String msg = ""; private String onlyImpressionUrl; private String parentSessionId; private String requestId; private HashMap<String, String> rks; private String sessionId; private String sh; private int template; private int tokenRule; private String unitSize; private int vcn; private Object nullToEmpty(Object obj) { return obj == null ? "" : obj; } public String getMsg() { return this.msg; } public void setMsg(String str) { this.msg = str; } public String getAdZip() { return this.adZip; } public void setAdZip(String str) { this.adZip = str; } public String getAdHtml() { return this.adHtml; } public void setAdHtml(String str) { this.adHtml = str; } public String getBannerUrl() { return this.bannerUrl; } public void setBannerUrl(String str) { this.bannerUrl = str; } public String getBannerHtml() { return this.bannerHtml; } public void setBannerHtml(String str) { this.bannerHtml = str; } public String getIa_icon() { return this.ia_icon; } public void setIa_icon(String str) { this.ia_icon = str; } public int getIa_rst() { return this.ia_rst; } public void setIa_rst(int i) { this.ia_rst = i; } public String getIa_url() { return this.ia_url; } public void setIa_url(String str) { this.ia_url = str; } public int getIa_ori() { return this.ia_ori; } public void setIa_ori(int i) { this.ia_ori = i; } public String getIa_all_ext1() { return this.ia_all_ext1; } public void setIa_all_ext1(String str) { this.ia_all_ext1 = str; } public String getIa_all_ext2() { return this.ia_all_ext2; } public void setIa_all_ext2(String str) { this.ia_all_ext2 = str; } public String getEncryptPrice() { return this.encryptPrice; } public void setEncryptPrice(String str) { this.encryptPrice = str; } public int getVcn() { int i = this.vcn; if (i > 1) { return i; } return 1; } public void setVcn(int i) { this.vcn = i; } public int getTokenRule() { int i = this.tokenRule; if (i == 1) { return i; } return 0; } public void setTokenRule(int i) { this.tokenRule = i; } public HashMap<String, String> getRks() { return this.rks; } public void setRks(HashMap<String, String> hashMap) { this.rks = hashMap; } public HashMap<String, String> getEpMap() { return this.epMap; } public void setEpMap(HashMap<String, String> hashMap) { this.epMap = hashMap; } public String getCsp() { return this.csp; } public void setCsp(String str) { this.csp = str; } public String getDomain() { return this.domain; } public void setDomain(String str) { this.domain = str; } public String getSh() { return this.sh; } public void setSh(String str) { this.sh = str; } public int getJmDo() { return this.jmDo; } public void setJmDo(int i) { this.jmDo = i; } public List<Frame> getListFrames() { return this.listFrames; } public void setListFrames(List<Frame> list) { this.listFrames = list; } public String getSessionId() { return this.sessionId; } public void setSessionId(String str) { this.sessionId = str; } public String getParentSessionId() { return this.parentSessionId; } public void setParentSessionId(String str) { this.parentSessionId = str; } public int getAdType() { return this.adType; } public void setAdType(int i) { this.adType = i; } public String getUnitSize() { return this.unitSize; } public void setUnitSize(String str) { this.unitSize = str; } public String getHtmlUrl() { return this.htmlUrl; } public void setHtmlUrl(String str) { this.htmlUrl = str; } public String getOnlyImpressionUrl() { return this.onlyImpressionUrl; } public void setOnlyImpressionUrl(String str) { this.onlyImpressionUrl = str; } public ArrayList<CampaignEx> getAds() { return this.ads; } public void setAds(ArrayList<CampaignEx> arrayList) { this.ads = arrayList; } public int getTemplate() { return this.template; } public void setTemplate(int i) { this.template = i; } public String assembCParams() { String str; String str2; StringBuffer stringBuffer = this.cParams; if (stringBuffer != null && stringBuffer.length() > 0) { return this.cParams.toString(); } try { String B = s.B(); String e = s.e(a.f().j()); String d = s.d(a.f().j()); if (com.mbridge.msdk.foundation.controller.authoritycontroller.a.a().a(MBridgeConstans.AUTHORITY_GENERAL_DATA)) { str2 = String.valueOf(s.D(a.f().j())); str = s.x(a.f().j()) + "x" + s.y(a.f().j()); } else { str2 = ""; str = str2; } StringBuffer stringBuffer2 = this.cParams; stringBuffer2.append(getAdType()); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty("1")); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(Build.VERSION.RELEASE)); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(MBConfiguration.SDK_VERSION)); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(s.u())); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(str)); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(Integer.valueOf(s.t(a.f().j())))); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(s.s(a.f().j()))); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(str2)); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(d)); stringBuffer2.append(nullToEmpty(e)); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(s.b(a.f().j()))); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(s.i(a.f().j()))); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(s.g(a.f().j()))); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(B)); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty("")); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(s.w())); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty("")); stringBuffer2.append("|"); stringBuffer2.append(""); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty("")); stringBuffer2.append("|"); stringBuffer2.append(nullToEmpty(com.mbridge.msdk.foundation.same.a.s + "," + com.mbridge.msdk.foundation.same.a.t)); stringBuffer2.append("|"); this.cParams = stringBuffer2; } catch (Throwable th) { w.b(TAG, th.getMessage(), th); } return this.cParams.toString(); } public static CampaignUnit parseV5CampaignUnit(JSONObject jSONObject) { return parseV5CampaignUnit(jSONObject, ""); } public static CampaignUnit parseCampaignUnit(JSONObject jSONObject) { return parseCampaignUnit(jSONObject, ""); } public String getRequestId() { try { if (!TextUtils.isEmpty(this.requestId)) { return this.requestId; } if (TextUtils.isEmpty(this.onlyImpressionUrl)) { return ""; } Uri parse = Uri.parse(this.onlyImpressionUrl); if (parse != null) { this.requestId = parse.getQueryParameter("k"); } return this.requestId; } catch (Exception unused) { return ""; } } public static CampaignUnit parseV5CampaignUnit(JSONObject jSONObject, String str) { return parseCampaignUnit(jSONObject, str); } private static void getSysIDAndBKUPID(JSONObject jSONObject) { FastKV fastKV = null; if (b.a().d()) { try { fastKV = new FastKV.Builder(e.b(c.MBRIDGE_700_CONFIG), r.b("H+tU+FeXHM==")).build(); } catch (Exception unused) { } } if (fastKV != null) { try { Context j = a.f().j(); if (jSONObject != null && j != null) { String optString = jSONObject.optString("b"); if (!TextUtils.isEmpty(optString) && !TextUtils.equals(com.mbridge.msdk.foundation.same.a.s, optString)) { com.mbridge.msdk.foundation.same.a.s = optString; com.mbridge.msdk.foundation.a.a.a.a().a("b", com.mbridge.msdk.foundation.same.a.s); try { fastKV.putString(r.b("H+tU+bfPhM=="), com.mbridge.msdk.foundation.same.a.s); } catch (Exception unused2) { } } String optString2 = jSONObject.optString("c"); if (!TextUtils.isEmpty(optString2) && !TextUtils.equals(com.mbridge.msdk.foundation.same.a.t, optString2)) { com.mbridge.msdk.foundation.same.a.t = optString2; com.mbridge.msdk.foundation.a.a.a.a().a("c", com.mbridge.msdk.foundation.same.a.t); try { fastKV.putString(r.b("H+tU+Fz8"), com.mbridge.msdk.foundation.same.a.t); } catch (Exception unused3) { } } } } catch (Exception e) { e.printStackTrace(); } } else { try { Context j2 = a.f().j(); if (jSONObject != null && j2 != null) { String optString3 = jSONObject.optString("b"); if (!TextUtils.isEmpty(optString3) && !TextUtils.equals(com.mbridge.msdk.foundation.same.a.s, optString3)) { com.mbridge.msdk.foundation.same.a.s = optString3; com.mbridge.msdk.foundation.a.a.a.a().a("b", com.mbridge.msdk.foundation.same.a.s); SharedPreferences sharedPreferences = j2.getSharedPreferences(r.b("H+tU+FeXHM=="), 0); if (sharedPreferences != null) { SharedPreferences.Editor edit = sharedPreferences.edit(); edit.putString(r.b("H+tU+bfPhM=="), com.mbridge.msdk.foundation.same.a.s); edit.apply(); } } String optString4 = jSONObject.optString("c"); if (!TextUtils.isEmpty(optString4) && !TextUtils.equals(com.mbridge.msdk.foundation.same.a.t, optString4)) { com.mbridge.msdk.foundation.same.a.t = optString4; com.mbridge.msdk.foundation.a.a.a.a().a("c", com.mbridge.msdk.foundation.same.a.t); SharedPreferences sharedPreferences2 = j2.getSharedPreferences(r.b("H+tU+FeXHM=="), 0); if (sharedPreferences2 != null) { SharedPreferences.Editor edit2 = sharedPreferences2.edit(); edit2.putString(r.b("H+tU+Fz8"), com.mbridge.msdk.foundation.same.a.t); edit2.apply(); } } } } catch (Exception e2) { e2.printStackTrace(); } } } public static CampaignUnit parseCampaignUnit(JSONObject jSONObject, String str) { CampaignUnit campaignUnit; CampaignUnit campaignUnit2; String str2; String str3; ArrayList arrayList; CampaignUnit campaignUnit3; CampaignUnit campaignUnit4; String str4; String str5; CampaignUnit campaignUnit5; int i; String str6; String str7; JSONObject jSONObject2 = jSONObject; String str8 = "ads"; String str9 = "template"; String str10 = "only_impression_url"; String str11 = "html_url"; if (jSONObject2 == null) { return null; } try { CampaignUnit campaignUnit6 = new CampaignUnit(); try { String optString = jSONObject2.optString(JSON_KEY_RKS); if (!TextUtils.isEmpty(optString)) { try { JSONObject jSONObject3 = new JSONObject(optString); Iterator<String> keys = jSONObject3.keys(); HashMap<String, String> hashMap = new HashMap<>(); while (keys != null && keys.hasNext()) { String next = keys.next(); hashMap.put(next, jSONObject3.optString(next)); } campaignUnit6.setRks(hashMap); } catch (Exception unused) { campaignUnit = campaignUnit6; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } } String str12 = ""; if (!TextUtils.isEmpty(str)) { HashMap<String, String> hashMap2 = new HashMap<>(); hashMap2.put("encrypt_p", str12); hashMap2.put(KEY_IRLFA, str12); campaignUnit6.setEpMap(hashMap2); } JSONObject optJSONObject = jSONObject2.optJSONObject(JSON_KEY_REQ_EXT_DATA); int optInt = jSONObject2.optInt(JSON_KEY_NSCPT, 1); String optString2 = jSONObject2.optString(JSON_KEY_MOF_TEMPLATE_URL, str12); int optInt2 = jSONObject2.optInt(JSON_KEY_MOF_TPLID, 0); if (optJSONObject != null) { str12 = optJSONObject.toString(); } new JSONArray(); JSONArray optJSONArray = jSONObject2.optJSONArray("pv_urls"); if (optJSONArray == null || optJSONArray.length() <= 0) { str3 = str12; str2 = optString2; arrayList = null; } else { str3 = str12; arrayList = new ArrayList(optJSONArray.length()); str2 = optString2; for (int i2 = 0; i2 < optJSONArray.length(); i2++) { arrayList.add(optJSONArray.getString(i2)); } } com.mbridge.msdk.foundation.db.a.a.a().a(jSONObject2.optJSONObject(JSON_KEY_REPLACE_TMP), true); getSysIDAndBKUPID(jSONObject); campaignUnit6.setSessionId(jSONObject2.optString("a")); campaignUnit6.setParentSessionId(jSONObject2.optString("parent_session_id")); campaignUnit6.setAdType(jSONObject2.optInt("ad_type")); campaignUnit6.setUnitSize(jSONObject2.optString("unit_size")); campaignUnit6.setHtmlUrl(jSONObject2.optString(str11)); campaignUnit6.setOnlyImpressionUrl(jSONObject2.optString(str10)); campaignUnit6.setTemplate(jSONObject2.optInt(str9)); campaignUnit6.setJmDo(jSONObject2.optInt(JSON_KEY_JM_DO)); campaignUnit6.setIa_icon(jSONObject2.optString("ia_icon")); campaignUnit6.setIa_rst(jSONObject2.optInt("ia_rst")); campaignUnit6.setIa_url(jSONObject2.optString("ia_url")); campaignUnit6.setIa_ori(jSONObject2.optInt("ia_ori")); campaignUnit6.setIa_all_ext1(jSONObject2.optString(JSON_KEY_IA_EXT1)); campaignUnit6.setIa_all_ext2(jSONObject2.optString(JSON_KEY_IA_EXT2)); campaignUnit6.setVcn(jSONObject2.optInt("vcn")); campaignUnit6.setTokenRule(jSONObject2.optInt("token_r")); campaignUnit6.setEncryptPrice(jSONObject2.optString("encrypt_p")); JSONArray optJSONArray2 = jSONObject2.optJSONArray(str8); JSONArray optJSONArray3 = jSONObject2.optJSONArray("frames"); String str13 = "end_screen_url"; if (optJSONArray3 != null) { try { if (optJSONArray3.length() > 0) { ArrayList arrayList2 = new ArrayList(); String str14 = "parse campaign error ,campaign is null"; ArrayList arrayList3 = arrayList; int i3 = 0; while (i3 < optJSONArray3.length()) { JSONObject optJSONObject2 = optJSONArray3.optJSONObject(i3); int i4 = i3; JSONArray jSONArray = optJSONObject2.getJSONArray(str8); ArrayList arrayList4 = new ArrayList(); JSONObject jSONObject4 = optJSONObject2; int i5 = 0; while (i5 < jSONArray.length()) { try { CampaignEx parseCampaign = CampaignEx.parseCampaign(jSONArray.optJSONObject(i5), jSONObject2.optString(str10), jSONObject2.optString(str11), jSONObject2.optString(str13), false, campaignUnit6, str); if (parseCampaign != null) { try { parseCampaign.setKeyIaUrl(campaignUnit6.getIa_url()); parseCampaign.setKeyIaOri(campaignUnit6.getIa_ori()); parseCampaign.setKeyIaRst(campaignUnit6.getIa_rst()); parseCampaign.setKeyIaIcon(campaignUnit6.getIa_icon()); parseCampaign.setAdType(jSONObject2.optInt("ad_type")); parseCampaign.setIa_ext1(jSONObject2.optString(CampaignEx.KEY_IA_EXT1)); parseCampaign.setIa_ext2(jSONObject2.optString(CampaignEx.KEY_IA_EXT2)); parseCampaign.setVcn(campaignUnit6.getVcn()); parseCampaign.setTokenRule(campaignUnit6.getTokenRule()); parseCampaign.setEncryptPrice(campaignUnit6.getEncryptPrice()); parseCampaign.setMof_tplid(optInt2); parseCampaign.setMof_template_url(str2); i = optInt; parseCampaign.setNscpt(i); parseCampaign.setPv_urls(arrayList3); str6 = str3; parseCampaign.setReq_ext_data(str6); arrayList4.add(parseCampaign); campaignUnit5 = campaignUnit6; str7 = str14; } catch (Exception unused2) { campaignUnit = campaignUnit6; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } } else { str6 = str3; i = optInt; campaignUnit5 = campaignUnit6; str7 = str14; try { campaignUnit5.setMsg(str7); } catch (Exception unused3) { campaignUnit = campaignUnit5; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } } i5++; arrayList3 = arrayList3; str10 = str10; arrayList2 = arrayList2; str13 = str13; jSONObject4 = jSONObject4; str2 = str2; str11 = str11; str3 = str6; optInt = i; campaignUnit6 = campaignUnit5; jSONArray = jSONArray; i4 = i4; str14 = str7; optJSONArray3 = optJSONArray3; } catch (Exception unused4) { campaignUnit5 = campaignUnit6; campaignUnit = campaignUnit5; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } } Frame frame = new Frame(); frame.setParentSessionId(jSONObject2.optString("parent_session_id")); frame.setSessionId(jSONObject2.optString("a")); frame.setCampaigns(arrayList4); frame.setTemplate(jSONObject4.optInt(str9)); arrayList2.add(frame); arrayList2 = arrayList2; arrayList3 = arrayList3; str10 = str10; str8 = str8; str2 = str2; str11 = str11; str3 = str3; optInt = optInt; campaignUnit6 = campaignUnit6; i3 = i4 + 1; str9 = str9; str13 = str13; str14 = str14; optJSONArray3 = optJSONArray3; } campaignUnit4 = campaignUnit6; campaignUnit4.setListFrames(arrayList2); campaignUnit3 = campaignUnit4; return campaignUnit3; } } catch (Exception unused5) { campaignUnit5 = campaignUnit6; campaignUnit = campaignUnit5; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } } String str15 = str13; String str16 = "parse campaign error ,campaign is null"; String str17 = str10; campaignUnit4 = campaignUnit6; int i6 = optInt; String str18 = str3; String str19 = str11; if (optJSONArray2 != null) { try { if (optJSONArray2.length() > 0) { ArrayList<CampaignEx> arrayList5 = new ArrayList<>(); int i7 = 0; while (i7 < optJSONArray2.length()) { try { } catch (Exception unused6) { campaignUnit2 = campaignUnit4; campaignUnit = campaignUnit2; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } try { CampaignEx parseCampaign2 = CampaignEx.parseCampaign(optJSONArray2.optJSONObject(i7), jSONObject2.optString(str17), jSONObject2.optString(str19), jSONObject2.optString(str15), false, campaignUnit4, str); if (parseCampaign2 != null) { try { parseCampaign2.setMof_tplid(optInt2); parseCampaign2.setMof_template_url(str2); parseCampaign2.setNscpt(i6); parseCampaign2.setPv_urls(arrayList); str4 = str18; parseCampaign2.setReq_ext_data(str4); parseCampaign2.setVcn(campaignUnit4.getVcn()); parseCampaign2.setTokenRule(campaignUnit4.getTokenRule()); parseCampaign2.setEncryptPrice(campaignUnit4.getEncryptPrice()); arrayList5.add(parseCampaign2); campaignUnit2 = campaignUnit4; str5 = str16; } catch (Exception unused7) { campaignUnit = campaignUnit4; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } } else { str4 = str18; campaignUnit2 = campaignUnit4; str5 = str16; try { campaignUnit2.setMsg(str5); } catch (Exception unused8) { campaignUnit = campaignUnit2; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } } i7++; i6 = i6; str17 = str17; str19 = str19; optJSONArray2 = optJSONArray2; campaignUnit4 = campaignUnit2; str18 = str4; str15 = str15; jSONObject2 = jSONObject; str16 = str5; } catch (Exception unused9) { campaignUnit2 = campaignUnit4; campaignUnit = campaignUnit2; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } } campaignUnit3 = campaignUnit4; campaignUnit3.setAds(arrayList5); return campaignUnit3; } } catch (Exception unused10) { campaignUnit2 = campaignUnit4; campaignUnit = campaignUnit2; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } } campaignUnit3 = campaignUnit4; return campaignUnit3; } catch (Exception unused11) { campaignUnit2 = campaignUnit6; campaignUnit = campaignUnit2; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } } catch (Exception unused12) { campaignUnit = null; w.d(TAG, "parse campaign unit exception"); return campaignUnit; } } }